Temporarily only do one pass (#6900)
* Temporarily only do one pass * Add types
This commit is contained in:
parent
d2a994db3c
commit
84bb620bef
7 changed files with 73 additions and 65 deletions
|
@ -93,8 +93,8 @@
|
|||
"node-sass": "4.9.2",
|
||||
"pre-commit": "1.2.2",
|
||||
"prettier": "1.15.3",
|
||||
"react": "16.8.0",
|
||||
"react-dom": "16.8.0",
|
||||
"react": "16.8.6",
|
||||
"react-dom": "16.8.6",
|
||||
"release": "5.0.3",
|
||||
"request-promise-core": "1.1.1",
|
||||
"rimraf": "2.6.2",
|
||||
|
|
|
@ -33,6 +33,8 @@
|
|||
"fresh": "0.5.2",
|
||||
"path-to-regexp": "2.1.0",
|
||||
"prop-types": "15.6.2",
|
||||
"react-is": "16.8.6",
|
||||
"react-ssr-prepass": "1.0.2",
|
||||
"send": "0.16.1",
|
||||
"url": "0.11.0"
|
||||
},
|
||||
|
|
|
@ -2,6 +2,7 @@ import { IncomingMessage, ServerResponse } from 'http'
|
|||
import { ParsedUrlQuery } from 'querystring'
|
||||
import React from 'react'
|
||||
import { renderToString, renderToStaticMarkup } from 'react-dom/server'
|
||||
import ssrPrepass from 'react-ssr-prepass'
|
||||
import {IRouterInterface} from '../lib/router/router'
|
||||
import mitt, {MittEmitter} from '../lib/mitt';
|
||||
import { loadGetInitialProps, isResSent } from '../lib/utils'
|
||||
|
@ -307,7 +308,7 @@ export async function renderToHTML(
|
|||
if (ampBindInitData) {
|
||||
renderPage = async (
|
||||
options: ComponentsEnhancer = {},
|
||||
): Promise<{ html: string; head: any }> => {
|
||||
): Promise<{ html: string; head: any, dataOnly?: true}> => {
|
||||
const renderError = renderPageError()
|
||||
if (renderError) return renderError
|
||||
|
||||
|
@ -316,44 +317,36 @@ export async function renderToHTML(
|
|||
Component: EnhancedComponent,
|
||||
} = enhanceComponents(options, App, Component)
|
||||
|
||||
let recursionCount = 0
|
||||
const Application = () => <RouterContext.Provider value={router}>
|
||||
<DataManagerContext.Provider value={dataManager}>
|
||||
<IsAmpContext.Provider value={amphtml}>
|
||||
<LoadableContext.Provider
|
||||
value={(moduleName) => reactLoadableModules.push(moduleName)}
|
||||
>
|
||||
<EnhancedApp
|
||||
Component={EnhancedComponent}
|
||||
router={router}
|
||||
{...props}
|
||||
/>
|
||||
</LoadableContext.Provider>
|
||||
</IsAmpContext.Provider>
|
||||
</DataManagerContext.Provider>
|
||||
</RouterContext.Provider>
|
||||
|
||||
const renderTree = async (): Promise<any> => {
|
||||
recursionCount++
|
||||
// This is temporary, we can remove it once the API is finished.
|
||||
if (recursionCount > 100) {
|
||||
throw new Error('Did 100 promise recursions, bailing out to avoid infinite loop.')
|
||||
}
|
||||
try {
|
||||
return await render(
|
||||
renderElementToString,
|
||||
<RouterContext.Provider value={router}>
|
||||
<DataManagerContext.Provider value={dataManager}>
|
||||
<IsAmpContext.Provider value={amphtml}>
|
||||
<LoadableContext.Provider
|
||||
value={(moduleName) => reactLoadableModules.push(moduleName)}
|
||||
>
|
||||
<EnhancedApp
|
||||
Component={EnhancedComponent}
|
||||
router={router}
|
||||
{...props}
|
||||
/>
|
||||
</LoadableContext.Provider>
|
||||
</IsAmpContext.Provider>
|
||||
</DataManagerContext.Provider>
|
||||
</RouterContext.Provider>,
|
||||
|
||||
)
|
||||
} catch (err) {
|
||||
if (typeof err.then !== 'undefined') {
|
||||
await err
|
||||
return await renderTree()
|
||||
}
|
||||
throw err
|
||||
const element = <Application/>
|
||||
await ssrPrepass(element)
|
||||
if (renderOpts.dataOnly) {
|
||||
return {
|
||||
html: '',
|
||||
head: [],
|
||||
dataOnly: true,
|
||||
}
|
||||
}
|
||||
const res = await renderTree()
|
||||
return res
|
||||
|
||||
return await render(
|
||||
renderElementToString,
|
||||
element,
|
||||
)
|
||||
}
|
||||
} else {
|
||||
renderPage = (
|
||||
|
@ -390,20 +383,20 @@ export async function renderToHTML(
|
|||
// the response might be finished on the getInitialProps call
|
||||
if (isResSent(res)) return null
|
||||
|
||||
const dynamicImports = [
|
||||
...getDynamicImportBundles(reactLoadableManifest, reactLoadableModules),
|
||||
]
|
||||
const dynamicImportsIds: any = dynamicImports.map((bundle) => bundle.id)
|
||||
|
||||
let dataManagerData = '[]'
|
||||
if (dataManager) {
|
||||
dataManagerData = JSON.stringify([...dataManager.getData()])
|
||||
}
|
||||
|
||||
if (renderOpts.dataOnly) {
|
||||
if (docProps.dataOnly) {
|
||||
return dataManagerData
|
||||
}
|
||||
|
||||
const dynamicImports = [
|
||||
...getDynamicImportBundles(reactLoadableManifest, reactLoadableModules),
|
||||
]
|
||||
const dynamicImportsIds: any = dynamicImports.map((bundle) => bundle.id)
|
||||
|
||||
let html = renderDocument(Document, {
|
||||
...renderOpts,
|
||||
dataManagerData,
|
||||
|
|
1
packages/next-server/types/index.d.ts
vendored
Normal file
1
packages/next-server/types/index.d.ts
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
declare module 'react-ssr-prepass'
|
|
@ -72,7 +72,7 @@
|
|||
"prop-types": "15.6.2",
|
||||
"prop-types-exact": "1.2.0",
|
||||
"react-error-overlay": "5.1.4",
|
||||
"react-is": "16.6.3",
|
||||
"react-is": "16.8.6",
|
||||
"recursive-copy": "2.0.6",
|
||||
"serialize-javascript": "1.6.1",
|
||||
"source-map": "0.6.1",
|
||||
|
|
|
@ -16,9 +16,9 @@ export default class Document extends Component {
|
|||
}
|
||||
|
||||
static async getInitialProps({ renderPage }) {
|
||||
const { html, head } = await renderPage()
|
||||
const { html, head, dataOnly } = await renderPage()
|
||||
const styles = flush()
|
||||
return { html, head, styles }
|
||||
return { html, head, styles, dataOnly }
|
||||
}
|
||||
|
||||
getChildContext() {
|
||||
|
|
48
yarn.lock
48
yarn.lock
|
@ -9018,6 +9018,11 @@ object-copy@^0.1.0:
|
|||
define-property "^0.2.5"
|
||||
kind-of "^3.0.3"
|
||||
|
||||
object-is@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.0.1.tgz#0aa60ec9989a0b3ed795cf4d06f62cf1ad6539b6"
|
||||
integrity sha1-CqYOyZiaCz7Xlc9NBvYs8a1lObY=
|
||||
|
||||
object-keys@^1.0.11, object-keys@^1.0.12:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.0.tgz#11bd22348dd2e096a045ab06f6c85bcc340fa032"
|
||||
|
@ -10369,25 +10374,25 @@ rc@^1.0.1, rc@^1.1.6, rc@^1.2.7:
|
|||
minimist "^1.2.0"
|
||||
strip-json-comments "~2.0.1"
|
||||
|
||||
react-dom@16.8.0:
|
||||
version "16.8.0"
|
||||
resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.8.0.tgz#18f28d4be3571ed206672a267c66dd083145a9c4"
|
||||
integrity sha512-dBzoAGYZpW9Yggp+CzBPC7q1HmWSeRc93DWrwbskmG1eHJWznZB/p0l/Sm+69leIGUS91AXPB/qB3WcPnKx8Sw==
|
||||
react-dom@16.8.6:
|
||||
version "16.8.6"
|
||||
resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.8.6.tgz#71d6303f631e8b0097f56165ef608f051ff6e10f"
|
||||
integrity sha512-1nL7PIq9LTL3fthPqwkvr2zY7phIPjYrT0jp4HjyEQrEROnw4dG41VVwi/wfoCneoleqrNX7iAD+pXebJZwrwA==
|
||||
dependencies:
|
||||
loose-envify "^1.1.0"
|
||||
object-assign "^4.1.1"
|
||||
prop-types "^15.6.2"
|
||||
scheduler "^0.13.0"
|
||||
scheduler "^0.13.6"
|
||||
|
||||
react-error-overlay@5.1.4:
|
||||
version "5.1.4"
|
||||
resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-5.1.4.tgz#88dfb88857c18ceb3b9f95076f850d7121776991"
|
||||
integrity sha512-fp+U98OMZcnduQ+NSEiQa4s/XMsbp+5KlydmkbESOw4P69iWZ68ZMFM5a2BuE0FgqPBKApJyRuYHR95jM8lAmg==
|
||||
|
||||
react-is@16.6.3:
|
||||
version "16.6.3"
|
||||
resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.6.3.tgz#d2d7462fcfcbe6ec0da56ad69047e47e56e7eac0"
|
||||
integrity sha512-u7FDWtthB4rWibG/+mFbVd5FvdI20yde86qKGx4lVUTWmPlSWQ4QxbBIrrs+HnXGbxOUlUzTAP/VDmvCwaP2yA==
|
||||
react-is@16.8.6:
|
||||
version "16.8.6"
|
||||
resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.8.6.tgz#5bbc1e2d29141c9fbdfed456343fe2bc430a6a16"
|
||||
integrity sha512-aUk3bHfZ2bRSVFFbbeVS4i+lNPZr3/WM5jT2J5omUVV1zzcs1nAaf3l51ctA5FFvCRbhrH0bdAsRRQddFJZPtA==
|
||||
|
||||
react-is@^16.8.1:
|
||||
version "16.8.3"
|
||||
|
@ -10399,15 +10404,22 @@ react-is@^16.8.4:
|
|||
resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.8.4.tgz#90f336a68c3a29a096a3d648ab80e87ec61482a2"
|
||||
integrity sha512-PVadd+WaUDOAciICm/J1waJaSvgq+4rHE/K70j0PFqKhkTBsPv/82UGQJNXAngz1fOQLLxI6z1sEDmJDQhCTAA==
|
||||
|
||||
react@16.8.0:
|
||||
version "16.8.0"
|
||||
resolved "https://registry.yarnpkg.com/react/-/react-16.8.0.tgz#8533f0e4af818f448a276eae71681d09e8dd970a"
|
||||
integrity sha512-g+nikW2D48kqgWSPwNo0NH9tIGG3DsQFlrtrQ1kj6W77z5ahyIHG0w8kPpz4Sdj6gyLnz0lEd/xsjOoGge2MYQ==
|
||||
react-ssr-prepass@1.0.2:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/react-ssr-prepass/-/react-ssr-prepass-1.0.2.tgz#f411414cbc043a90254cddcef0793b2aaf14b086"
|
||||
integrity sha512-m8NKaYzWxifPGvrf9WGo/6WtOG6MNBIs2uNdcdIuQswtlkaV19AiFegwTeyblwoH2XxMcRviFJBvr4OkoTt3nA==
|
||||
dependencies:
|
||||
object-is "^1.0.1"
|
||||
|
||||
react@16.8.6:
|
||||
version "16.8.6"
|
||||
resolved "https://registry.yarnpkg.com/react/-/react-16.8.6.tgz#ad6c3a9614fd3a4e9ef51117f54d888da01f2bbe"
|
||||
integrity sha512-pC0uMkhLaHm11ZSJULfOBqV4tIZkx87ZLvbbQYunNixAAvjnC+snJCg0XQXn9VIsttVsbZP/H/ewzgsd5fxKXw==
|
||||
dependencies:
|
||||
loose-envify "^1.1.0"
|
||||
object-assign "^4.1.1"
|
||||
prop-types "^15.6.2"
|
||||
scheduler "^0.13.0"
|
||||
scheduler "^0.13.6"
|
||||
|
||||
read-cmd-shim@^1.0.1:
|
||||
version "1.0.1"
|
||||
|
@ -11186,10 +11198,10 @@ sax@^1.2.4, sax@~1.2.4:
|
|||
resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
|
||||
integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==
|
||||
|
||||
scheduler@^0.13.0:
|
||||
version "0.13.3"
|
||||
resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.13.3.tgz#bed3c5850f62ea9c716a4d781f9daeb9b2a58896"
|
||||
integrity sha512-UxN5QRYWtpR1egNWzJcVLk8jlegxAugswQc984lD3kU7NuobsO37/sRfbpTdBjtnD5TBNFA2Q2oLV5+UmPSmEQ==
|
||||
scheduler@^0.13.6:
|
||||
version "0.13.6"
|
||||
resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.13.6.tgz#466a4ec332467b31a91b9bf74e5347072e4cd889"
|
||||
integrity sha512-IWnObHt413ucAYKsD9J1QShUKkbKLQQHdxRyw73sw4FN26iWr3DY/H34xGPe4nmL1DwXyWmSWmMrA9TfQbE/XQ==
|
||||
dependencies:
|
||||
loose-envify "^1.1.0"
|
||||
object-assign "^4.1.1"
|
||||
|
|
Loading…
Reference in a new issue