@modern-js/runtime 2.15.1-alpha.2 → 2.16.1-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +19 -0
- package/dist/cjs/cli/index.js +32 -48
- package/dist/cjs/common.js +13 -27
- package/dist/cjs/config.js +4 -15
- package/dist/cjs/core/appConfig.js +13 -26
- package/dist/cjs/core/compatible.js +170 -158
- package/dist/cjs/core/index.js +38 -45
- package/dist/cjs/core/loader/index.js +12 -35
- package/dist/cjs/core/loader/loaderManager.js +42 -56
- package/dist/cjs/core/loader/useLoader.js +80 -105
- package/dist/cjs/core/plugin.js +28 -40
- package/dist/cjs/core/types.js +4 -15
- package/dist/cjs/document/Body.js +61 -37
- package/dist/cjs/document/Comment.js +22 -32
- package/dist/cjs/document/DocumentContext.js +14 -37
- package/dist/cjs/document/DocumentStructureContext.js +14 -37
- package/dist/cjs/document/Head.js +71 -40
- package/dist/cjs/document/Html.js +46 -58
- package/dist/cjs/document/Links.js +18 -28
- package/dist/cjs/document/Root.js +73 -44
- package/dist/cjs/document/Script.js +22 -32
- package/dist/cjs/document/Scripts.js +18 -28
- package/dist/cjs/document/cli/index.js +161 -207
- package/dist/cjs/document/constants.js +36 -75
- package/dist/cjs/document/index.js +28 -27
- package/dist/cjs/exports/head.js +27 -37
- package/dist/cjs/exports/loadable.js +27 -37
- package/dist/cjs/exports/server.js +7 -25
- package/dist/cjs/exports/styled.js +27 -37
- package/dist/cjs/index.js +22 -42
- package/dist/cjs/router/cli/index.js +91 -114
- package/dist/cjs/router/index.js +32 -39
- package/dist/cjs/router/runtime/DefaultNotFound.js +23 -38
- package/dist/cjs/router/runtime/DeferredDataScripts.js +8 -24
- package/dist/cjs/router/runtime/DeferredDataScripts.node.js +69 -112
- package/dist/cjs/router/runtime/PrefetchLink.js +117 -96
- package/dist/cjs/router/runtime/fetch.js +7 -25
- package/dist/cjs/router/runtime/fetch.node.js +7 -25
- package/dist/cjs/router/runtime/fetch.worker.js +7 -25
- package/dist/cjs/router/runtime/hooks.js +8 -26
- package/dist/cjs/router/runtime/index.js +97 -149
- package/dist/cjs/router/runtime/plugin.js +56 -76
- package/dist/cjs/router/runtime/plugin.node.js +95 -74
- package/dist/cjs/router/runtime/server.js +18 -17
- package/dist/cjs/router/runtime/types.js +4 -15
- package/dist/cjs/router/runtime/utils.js +57 -83
- package/dist/cjs/router/runtime/withRouter.js +24 -39
- package/dist/cjs/runtimeContext.js +14 -27
- package/dist/cjs/ssr/cli/babel-plugin-ssr-loader-id.js +75 -59
- package/dist/cjs/ssr/cli/index.js +120 -150
- package/dist/cjs/ssr/index.js +149 -132
- package/dist/cjs/ssr/index.node.js +73 -74
- package/dist/cjs/ssr/prefetch.js +51 -59
- package/dist/cjs/ssr/react/index.js +15 -28
- package/dist/cjs/ssr/react/nossr/index.js +51 -43
- package/dist/cjs/ssr/react/prerender/index.js +93 -59
- package/dist/cjs/ssr/react/prerender/type.js +4 -15
- package/dist/cjs/ssr/react/prerender/util.js +32 -51
- package/dist/cjs/ssr/react/withCallback/index.js +53 -29
- package/dist/cjs/ssr/serverRender/helmet.js +15 -26
- package/dist/cjs/ssr/serverRender/index.js +14 -32
- package/dist/cjs/ssr/serverRender/renderToStream/buildTemplate.after.js +15 -34
- package/dist/cjs/ssr/serverRender/renderToStream/buildTemplate.share.js +12 -28
- package/dist/cjs/ssr/serverRender/renderToStream/bulidTemplate.before.js +28 -55
- package/dist/cjs/ssr/serverRender/renderToStream/index.js +23 -48
- package/dist/cjs/ssr/serverRender/renderToStream/loadable.js +13 -32
- package/dist/cjs/ssr/serverRender/renderToStream/renderToPipe.js +33 -64
- package/dist/cjs/ssr/serverRender/renderToStream/renderToPipe.worker.js +26 -54
- package/dist/cjs/ssr/serverRender/renderToStream/styledComponent.js +9 -27
- package/dist/cjs/ssr/serverRender/renderToStream/template.js +11 -32
- package/dist/cjs/ssr/serverRender/renderToStream/type.js +4 -15
- package/dist/cjs/ssr/serverRender/renderToString/entry.js +133 -99
- package/dist/cjs/ssr/serverRender/renderToString/index.js +21 -48
- package/dist/cjs/ssr/serverRender/renderToString/loadable.js +20 -45
- package/dist/cjs/ssr/serverRender/renderToString/reduce.js +13 -25
- package/dist/cjs/ssr/serverRender/renderToString/styledComponent.js +9 -27
- package/dist/cjs/ssr/serverRender/renderToString/template.js +42 -37
- package/dist/cjs/ssr/serverRender/renderToString/type.js +10 -28
- package/dist/cjs/ssr/serverRender/time.js +7 -25
- package/dist/cjs/ssr/serverRender/time.worker.js +11 -26
- package/dist/cjs/ssr/serverRender/types.js +7 -25
- package/dist/cjs/ssr/serverRender/utils.js +12 -27
- package/dist/cjs/ssr/utils.js +26 -51
- package/dist/cjs/state/cli/index.js +71 -95
- package/dist/cjs/state/index.js +32 -39
- package/dist/cjs/state/plugins.js +26 -46
- package/dist/cjs/state/runtime/index.js +27 -37
- package/dist/cjs/state/runtime/plugin.js +82 -84
- package/dist/cjs/state/types.js +4 -15
- package/dist/esm/cli/index.js +184 -176
- package/dist/esm/common.js +4 -5
- package/dist/esm/config.js +1 -1
- package/dist/esm/core/appConfig.js +8 -7
- package/dist/esm/core/compatible.js +470 -448
- package/dist/esm/core/index.js +3 -4
- package/dist/esm/core/loader/index.js +1 -2
- package/dist/esm/core/loader/loaderManager.js +391 -366
- package/dist/esm/core/loader/useLoader.js +173 -162
- package/dist/esm/core/plugin.js +162 -155
- package/dist/esm/core/types.js +1 -1
- package/dist/esm/document/Body.js +12 -13
- package/dist/esm/document/Comment.js +11 -12
- package/dist/esm/document/DocumentContext.js +4 -5
- package/dist/esm/document/DocumentStructureContext.js +6 -7
- package/dist/esm/document/Head.js +16 -17
- package/dist/esm/document/Html.js +84 -85
- package/dist/esm/document/Links.js +5 -6
- package/dist/esm/document/Root.js +20 -21
- package/dist/esm/document/Script.js +12 -13
- package/dist/esm/document/Scripts.js +5 -6
- package/dist/esm/document/cli/index.js +390 -371
- package/dist/esm/document/constants.js +33 -34
- package/dist/esm/exports/head.js +1 -2
- package/dist/esm/exports/loadable.js +1 -2
- package/dist/esm/exports/server.js +2 -3
- package/dist/esm/exports/styled.js +1 -2
- package/dist/esm/index.js +2 -3
- package/dist/esm/router/cli/index.js +141 -141
- package/dist/esm/router/index.js +2 -3
- package/dist/esm/router/runtime/DefaultNotFound.js +12 -13
- package/dist/esm/router/runtime/DeferredDataScripts.js +4 -4
- package/dist/esm/router/runtime/DeferredDataScripts.node.js +154 -143
- package/dist/esm/router/runtime/PrefetchLink.js +418 -394
- package/dist/esm/router/runtime/fetch.js +2 -1
- package/dist/esm/router/runtime/fetch.worker.js +2 -1
- package/dist/esm/router/runtime/index.js +62 -9
- package/dist/esm/router/runtime/plugin.js +141 -142
- package/dist/esm/router/runtime/plugin.node.js +372 -353
- package/dist/esm/router/runtime/types.js +1 -1
- package/dist/esm/router/runtime/utils.js +295 -279
- package/dist/esm/router/runtime/withRouter.js +57 -58
- package/dist/esm/runtimeContext.js +2 -3
- package/dist/esm/ssr/cli/babel-plugin-ssr-loader-id.js +105 -118
- package/dist/esm/ssr/cli/index.js +146 -146
- package/dist/esm/ssr/index.js +303 -297
- package/dist/esm/ssr/index.node.js +227 -221
- package/dist/esm/ssr/prefetch.js +192 -186
- package/dist/esm/ssr/react/index.js +2 -3
- package/dist/esm/ssr/react/nossr/index.js +58 -47
- package/dist/esm/ssr/react/prerender/index.js +214 -206
- package/dist/esm/ssr/react/prerender/type.js +1 -1
- package/dist/esm/ssr/react/prerender/util.js +91 -92
- package/dist/esm/ssr/react/withCallback/index.js +13 -14
- package/dist/esm/ssr/serverRender/helmet.js +34 -35
- package/dist/esm/ssr/serverRender/index.js +167 -160
- package/dist/esm/ssr/serverRender/renderToStream/buildTemplate.after.js +58 -59
- package/dist/esm/ssr/serverRender/renderToStream/buildTemplate.share.js +5 -6
- package/dist/esm/ssr/serverRender/renderToStream/bulidTemplate.before.js +106 -93
- package/dist/esm/ssr/serverRender/renderToStream/index.js +157 -151
- package/dist/esm/ssr/serverRender/renderToStream/loadable.js +17 -18
- package/dist/esm/ssr/serverRender/renderToStream/renderToPipe.js +117 -117
- package/dist/esm/ssr/serverRender/renderToStream/renderToPipe.worker.js +286 -279
- package/dist/esm/ssr/serverRender/renderToStream/styledComponent.js +8 -9
- package/dist/esm/ssr/serverRender/renderToStream/template.js +62 -51
- package/dist/esm/ssr/serverRender/renderToStream/type.js +1 -1
- package/dist/esm/ssr/serverRender/renderToString/entry.js +393 -383
- package/dist/esm/ssr/serverRender/renderToString/index.js +158 -152
- package/dist/esm/ssr/serverRender/renderToString/loadable.js +46 -47
- package/dist/esm/ssr/serverRender/renderToString/reduce.js +7 -8
- package/dist/esm/ssr/serverRender/renderToString/styledComponent.js +6 -7
- package/dist/esm/ssr/serverRender/renderToString/template.js +142 -128
- package/dist/esm/ssr/serverRender/renderToString/type.js +6 -7
- package/dist/esm/ssr/serverRender/time.js +57 -46
- package/dist/esm/ssr/serverRender/time.worker.js +72 -61
- package/dist/esm/ssr/serverRender/utils.js +14 -15
- package/dist/esm/ssr/utils.js +128 -117
- package/dist/esm/state/cli/index.js +67 -67
- package/dist/esm/state/index.js +2 -3
- package/dist/esm/state/plugins.js +7 -8
- package/dist/esm/state/runtime/index.js +1 -2
- package/dist/esm/state/runtime/plugin.js +177 -166
- package/dist/esm/state/types.js +1 -1
- package/dist/esm-node/cli/index.js +11 -9
- package/dist/esm-node/common.js +3 -8
- package/dist/esm-node/config.js +1 -0
- package/dist/esm-node/core/appConfig.js +2 -6
- package/dist/esm-node/core/compatible.js +104 -120
- package/dist/esm-node/core/index.js +3 -13
- package/dist/esm-node/core/loader/index.js +1 -4
- package/dist/esm-node/core/loader/loaderManager.js +25 -25
- package/dist/esm-node/core/loader/useLoader.js +60 -74
- package/dist/esm-node/core/plugin.js +9 -15
- package/dist/esm-node/core/types.js +1 -0
- package/dist/esm-node/document/Body.js +11 -15
- package/dist/esm-node/document/Comment.js +10 -14
- package/dist/esm-node/document/DocumentContext.js +1 -4
- package/dist/esm-node/document/DocumentStructureContext.js +1 -4
- package/dist/esm-node/document/Head.js +14 -14
- package/dist/esm-node/document/Html.js +31 -34
- package/dist/esm-node/document/Links.js +5 -6
- package/dist/esm-node/document/Root.js +19 -21
- package/dist/esm-node/document/Script.js +10 -14
- package/dist/esm-node/document/Scripts.js +5 -6
- package/dist/esm-node/document/cli/index.js +136 -184
- package/dist/esm-node/document/constants.js +22 -52
- package/dist/esm-node/exports/head.js +1 -4
- package/dist/esm-node/exports/loadable.js +1 -4
- package/dist/esm-node/exports/server.js +1 -4
- package/dist/esm-node/exports/styled.js +1 -4
- package/dist/esm-node/index.js +2 -22
- package/dist/esm-node/router/cli/index.js +83 -98
- package/dist/esm-node/router/index.js +2 -6
- package/dist/esm-node/router/runtime/DefaultNotFound.js +11 -17
- package/dist/esm-node/router/runtime/DeferredDataScripts.js +1 -4
- package/dist/esm-node/router/runtime/DeferredDataScripts.node.js +51 -85
- package/dist/esm-node/router/runtime/PrefetchLink.js +53 -59
- package/dist/esm-node/router/runtime/fetch.js +1 -3
- package/dist/esm-node/router/runtime/fetch.node.js +1 -3
- package/dist/esm-node/router/runtime/fetch.worker.js +1 -3
- package/dist/esm-node/router/runtime/hooks.js +1 -3
- package/dist/esm-node/router/runtime/index.js +10 -69
- package/dist/esm-node/router/runtime/plugin.js +27 -41
- package/dist/esm-node/router/runtime/plugin.node.js +24 -32
- package/dist/esm-node/router/runtime/types.js +1 -0
- package/dist/esm-node/router/runtime/utils.js +34 -50
- package/dist/esm-node/router/runtime/withRouter.js +8 -14
- package/dist/esm-node/runtimeContext.js +2 -6
- package/dist/esm-node/ssr/cli/babel-plugin-ssr-loader-id.js +99 -119
- package/dist/esm-node/ssr/cli/index.js +106 -125
- package/dist/esm-node/ssr/index.js +112 -96
- package/dist/esm-node/ssr/index.node.js +39 -39
- package/dist/esm-node/ssr/prefetch.js +40 -35
- package/dist/esm-node/ssr/react/index.js +2 -6
- package/dist/esm-node/ssr/react/nossr/index.js +2 -9
- package/dist/esm-node/ssr/react/prerender/index.js +32 -23
- package/dist/esm-node/ssr/react/prerender/type.js +1 -0
- package/dist/esm-node/ssr/react/prerender/util.js +23 -33
- package/dist/esm-node/ssr/react/withCallback/index.js +4 -5
- package/dist/esm-node/ssr/serverRender/helmet.js +2 -5
- package/dist/esm-node/ssr/serverRender/index.js +5 -10
- package/dist/esm-node/ssr/serverRender/renderToStream/buildTemplate.after.js +5 -9
- package/dist/esm-node/ssr/serverRender/renderToStream/buildTemplate.share.js +3 -10
- package/dist/esm-node/ssr/serverRender/renderToStream/bulidTemplate.before.js +7 -17
- package/dist/esm-node/ssr/serverRender/renderToStream/index.js +2 -7
- package/dist/esm-node/ssr/serverRender/renderToStream/loadable.js +4 -8
- package/dist/esm-node/ssr/serverRender/renderToStream/renderToPipe.js +21 -39
- package/dist/esm-node/ssr/serverRender/renderToStream/renderToPipe.worker.js +16 -31
- package/dist/esm-node/ssr/serverRender/renderToStream/styledComponent.js +1 -4
- package/dist/esm-node/ssr/serverRender/renderToStream/template.js +2 -8
- package/dist/esm-node/ssr/serverRender/renderToStream/type.js +1 -0
- package/dist/esm-node/ssr/serverRender/renderToString/entry.js +50 -39
- package/dist/esm-node/ssr/serverRender/renderToString/index.js +1 -8
- package/dist/esm-node/ssr/serverRender/renderToString/loadable.js +8 -18
- package/dist/esm-node/ssr/serverRender/renderToString/reduce.js +1 -4
- package/dist/esm-node/ssr/serverRender/renderToString/styledComponent.js +1 -4
- package/dist/esm-node/ssr/serverRender/renderToString/template.js +32 -18
- package/dist/esm-node/ssr/serverRender/renderToString/type.js +3 -6
- package/dist/esm-node/ssr/serverRender/time.js +1 -4
- package/dist/esm-node/ssr/serverRender/time.worker.js +5 -5
- package/dist/esm-node/ssr/serverRender/types.js +1 -3
- package/dist/esm-node/ssr/serverRender/utils.js +4 -10
- package/dist/esm-node/ssr/utils.js +8 -19
- package/dist/esm-node/state/cli/index.js +63 -78
- package/dist/esm-node/state/index.js +2 -6
- package/dist/esm-node/state/plugins.js +4 -10
- package/dist/esm-node/state/runtime/index.js +1 -4
- package/dist/esm-node/state/runtime/plugin.js +47 -44
- package/dist/esm-node/state/types.js +1 -0
- package/dist/types/router/runtime/index.d.ts +1 -1
- package/package.json +14 -10
- package/types/model.d.ts +1 -0
|
@@ -1,12 +1,10 @@
|
|
|
1
1
|
import { isReact18 } from "../utils";
|
|
2
2
|
import { CSS_CHUNKS_PLACEHOLDER } from "./utils";
|
|
3
|
-
async function serverRender(options) {
|
|
4
|
-
var
|
|
5
|
-
if ((
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
`${CSS_CHUNKS_PLACEHOLDER}</head>`
|
|
9
|
-
);
|
|
3
|
+
export default async function serverRender(options) {
|
|
4
|
+
var _options_context_ssrContext;
|
|
5
|
+
if ((_options_context_ssrContext = options.context.ssrContext) === null || _options_context_ssrContext === void 0 ? void 0 : _options_context_ssrContext.template) {
|
|
6
|
+
var _options_context_ssrContext1;
|
|
7
|
+
options.context.ssrContext.template = (_options_context_ssrContext1 = options.context.ssrContext) === null || _options_context_ssrContext1 === void 0 ? void 0 : _options_context_ssrContext1.template.replace("</head>", `${CSS_CHUNKS_PLACEHOLDER}</head>`);
|
|
10
8
|
}
|
|
11
9
|
if (isReact18() && options.config.mode === "stream") {
|
|
12
10
|
const pipe = await require("./renderToStream").render(options);
|
|
@@ -16,6 +14,3 @@ async function serverRender(options) {
|
|
|
16
14
|
return html;
|
|
17
15
|
}
|
|
18
16
|
}
|
|
19
|
-
export {
|
|
20
|
-
serverRender as default
|
|
21
|
-
};
|
|
@@ -1,16 +1,15 @@
|
|
|
1
1
|
import { serializeJson } from "@modern-js/utils/universal/serialize";
|
|
2
2
|
import { buildTemplate } from "./buildTemplate.share";
|
|
3
|
-
function buildShellAfterTemplate(afterAppTemplate, options) {
|
|
4
|
-
const callbacks = [
|
|
3
|
+
export function buildShellAfterTemplate(afterAppTemplate, options) {
|
|
4
|
+
const callbacks = [
|
|
5
|
+
injectSSRDataScript
|
|
6
|
+
];
|
|
5
7
|
return buildTemplate(afterAppTemplate, callbacks);
|
|
6
8
|
function injectSSRDataScript(template) {
|
|
7
9
|
const ssrDataScript = buildSSRDataScript();
|
|
8
10
|
return template.replace("<!--<?- SSRDataScript ?>-->", ssrDataScript);
|
|
9
11
|
function buildSSRDataScript() {
|
|
10
|
-
const {
|
|
11
|
-
context: { ssrContext, initialData, __i18nData__ },
|
|
12
|
-
renderLevel
|
|
13
|
-
} = options;
|
|
12
|
+
const { context: { ssrContext, initialData, __i18nData__ }, renderLevel } = options;
|
|
14
13
|
const { request, enableUnsafeCtx } = ssrContext;
|
|
15
14
|
const unsafeContext = {
|
|
16
15
|
headers: request.headers
|
|
@@ -38,6 +37,3 @@ function buildShellAfterTemplate(afterAppTemplate, options) {
|
|
|
38
37
|
}
|
|
39
38
|
}
|
|
40
39
|
}
|
|
41
|
-
export {
|
|
42
|
-
buildShellAfterTemplate
|
|
43
|
-
};
|
|
@@ -1,11 +1,4 @@
|
|
|
1
|
-
const HEAD_REG_EXP = /<head(.|\n)*>(.|\n)*<\/head>/;
|
|
2
|
-
function buildTemplate(template, callbacks) {
|
|
3
|
-
return callbacks.reduce(
|
|
4
|
-
(template2, buildTemplateCb) => buildTemplateCb(template2),
|
|
5
|
-
template
|
|
6
|
-
);
|
|
1
|
+
export const HEAD_REG_EXP = /<head(.|\n)*>(.|\n)*<\/head>/;
|
|
2
|
+
export function buildTemplate(template, callbacks) {
|
|
3
|
+
return callbacks.reduce((template2, buildTemplateCb) => buildTemplateCb(template2), template);
|
|
7
4
|
}
|
|
8
|
-
export {
|
|
9
|
-
HEAD_REG_EXP,
|
|
10
|
-
buildTemplate
|
|
11
|
-
};
|
|
@@ -2,10 +2,7 @@ import ReactHelmet from "react-helmet";
|
|
|
2
2
|
import { matchRoutes } from "react-router-dom";
|
|
3
3
|
import helmetReplace from "../helmet";
|
|
4
4
|
import { CSS_CHUNKS_PLACEHOLDER } from "../utils";
|
|
5
|
-
import {
|
|
6
|
-
HEAD_REG_EXP,
|
|
7
|
-
buildTemplate
|
|
8
|
-
} from "./buildTemplate.share";
|
|
5
|
+
import { HEAD_REG_EXP, buildTemplate } from "./buildTemplate.share";
|
|
9
6
|
function getHeadTemplate(beforeEntryTemplate, context) {
|
|
10
7
|
const callbacks = [
|
|
11
8
|
(headTemplate2) => {
|
|
@@ -29,12 +26,8 @@ function getHeadTemplate(beforeEntryTemplate, context) {
|
|
|
29
26
|
}
|
|
30
27
|
const { routeAssets } = routeManifest;
|
|
31
28
|
const cssChunks = [];
|
|
32
|
-
const matches = matchRoutes(
|
|
33
|
-
|
|
34
|
-
routerContext.location,
|
|
35
|
-
routerContext.basename
|
|
36
|
-
);
|
|
37
|
-
matches == null ? void 0 : matches.forEach((match, index) => {
|
|
29
|
+
const matches = matchRoutes(routes, routerContext.location, routerContext.basename);
|
|
30
|
+
matches === null || matches === void 0 ? void 0 : matches.forEach((match, index) => {
|
|
38
31
|
if (!index) {
|
|
39
32
|
return;
|
|
40
33
|
}
|
|
@@ -43,9 +36,9 @@ function getHeadTemplate(beforeEntryTemplate, context) {
|
|
|
43
36
|
const routeManifest2 = routeAssets[routeId];
|
|
44
37
|
if (routeManifest2) {
|
|
45
38
|
const { referenceCssAssets = [] } = routeManifest2;
|
|
46
|
-
const _cssChunks = referenceCssAssets.filter(
|
|
47
|
-
(asset
|
|
48
|
-
);
|
|
39
|
+
const _cssChunks = referenceCssAssets.filter((asset) => {
|
|
40
|
+
return (asset === null || asset === void 0 ? void 0 : asset.endsWith(".css")) && !headTemplate2.includes(asset);
|
|
41
|
+
});
|
|
49
42
|
cssChunks.push(..._cssChunks);
|
|
50
43
|
}
|
|
51
44
|
}
|
|
@@ -57,10 +50,7 @@ function getHeadTemplate(beforeEntryTemplate, context) {
|
|
|
57
50
|
}
|
|
58
51
|
}
|
|
59
52
|
}
|
|
60
|
-
function buildShellBeforeTemplate(beforeAppTemplate, context) {
|
|
53
|
+
export function buildShellBeforeTemplate(beforeAppTemplate, context) {
|
|
61
54
|
const headTemplate = getHeadTemplate(beforeAppTemplate, context);
|
|
62
55
|
return beforeAppTemplate.replace(HEAD_REG_EXP, headTemplate);
|
|
63
56
|
}
|
|
64
|
-
export {
|
|
65
|
-
buildShellBeforeTemplate
|
|
66
|
-
};
|
|
@@ -3,12 +3,10 @@ import { run } from "@modern-js/utils/ssr";
|
|
|
3
3
|
import { PreRender } from "../../react/prerender";
|
|
4
4
|
import { time } from "../time";
|
|
5
5
|
import renderToPipe from "./renderToPipe";
|
|
6
|
-
const render = ({ App, context }) => {
|
|
6
|
+
export const render = ({ App, context }) => {
|
|
7
7
|
const { ssrContext } = context;
|
|
8
8
|
if (!ssrContext) {
|
|
9
|
-
throw new Error(
|
|
10
|
-
'The "ssrContext" must not be undefined, but received undefined'
|
|
11
|
-
);
|
|
9
|
+
throw new Error('The "ssrContext" must not be undefined, but received undefined');
|
|
12
10
|
}
|
|
13
11
|
return run(ssrContext.request.headers, async () => {
|
|
14
12
|
const end = time();
|
|
@@ -33,6 +31,3 @@ const render = ({ App, context }) => {
|
|
|
33
31
|
return pipe;
|
|
34
32
|
});
|
|
35
33
|
};
|
|
36
|
-
export {
|
|
37
|
-
render
|
|
38
|
-
};
|
|
@@ -1,8 +1,5 @@
|
|
|
1
1
|
import { ChunkExtractor } from "@loadable/server";
|
|
2
|
-
function getLoadableChunks({
|
|
3
|
-
context,
|
|
4
|
-
jsx
|
|
5
|
-
}) {
|
|
2
|
+
export function getLoadableChunks({ context, jsx }) {
|
|
6
3
|
const { loadableStats, entryName } = context.ssrContext;
|
|
7
4
|
if (!loadableStats) {
|
|
8
5
|
return {
|
|
@@ -11,7 +8,9 @@ function getLoadableChunks({
|
|
|
11
8
|
}
|
|
12
9
|
const extractor = new ChunkExtractor({
|
|
13
10
|
stats: loadableStats,
|
|
14
|
-
entrypoints: [
|
|
11
|
+
entrypoints: [
|
|
12
|
+
entryName
|
|
13
|
+
]
|
|
15
14
|
});
|
|
16
15
|
const collectedJsx = extractor.collectChunks(jsx);
|
|
17
16
|
return {
|
|
@@ -19,6 +18,3 @@ function getLoadableChunks({
|
|
|
19
18
|
chunkExtractor: extractor
|
|
20
19
|
};
|
|
21
20
|
}
|
|
22
|
-
export {
|
|
23
|
-
getLoadableChunks
|
|
24
|
-
};
|
|
@@ -2,14 +2,14 @@ import { Transform } from "stream";
|
|
|
2
2
|
import { RenderLevel } from "../types";
|
|
3
3
|
import { ESCAPED_SHELL_STREAM_END_MARK } from "../../../common";
|
|
4
4
|
import { getTemplates } from "./template";
|
|
5
|
-
var ShellChunkStatus
|
|
5
|
+
var ShellChunkStatus;
|
|
6
|
+
(function(ShellChunkStatus2) {
|
|
6
7
|
ShellChunkStatus2[ShellChunkStatus2["IDLE"] = 0] = "IDLE";
|
|
7
8
|
ShellChunkStatus2[ShellChunkStatus2["START"] = 1] = "START";
|
|
8
9
|
ShellChunkStatus2[ShellChunkStatus2["FINIESH"] = 2] = "FINIESH";
|
|
9
|
-
|
|
10
|
-
})(ShellChunkStatus || {});
|
|
10
|
+
})(ShellChunkStatus || (ShellChunkStatus = {}));
|
|
11
11
|
function renderToPipe(rootElement, context, options) {
|
|
12
|
-
let shellChunkStatus =
|
|
12
|
+
let shellChunkStatus = ShellChunkStatus.IDLE;
|
|
13
13
|
const { ssrContext } = context;
|
|
14
14
|
const forUserPipe = (stream) => {
|
|
15
15
|
return new Promise((resolve) => {
|
|
@@ -21,27 +21,21 @@ function renderToPipe(rootElement, context, options) {
|
|
|
21
21
|
const { pipe } = renderToPipeableStream(rootElement, {
|
|
22
22
|
...options,
|
|
23
23
|
onShellReady() {
|
|
24
|
-
var
|
|
25
|
-
const { shellAfter, shellBefore } = getTemplates(
|
|
26
|
-
|
|
27
|
-
RenderLevel.SERVER_RENDER
|
|
28
|
-
);
|
|
29
|
-
(_a = options == null ? void 0 : options.onShellReady) == null ? void 0 : _a.call(options);
|
|
24
|
+
var _options_onShellReady;
|
|
25
|
+
const { shellAfter, shellBefore } = getTemplates(context, RenderLevel.SERVER_RENDER);
|
|
26
|
+
options === null || options === void 0 ? void 0 : (_options_onShellReady = options.onShellReady) === null || _options_onShellReady === void 0 ? void 0 : _options_onShellReady.call(options);
|
|
30
27
|
const injectableTransform = new Transform({
|
|
31
28
|
transform(chunk, _encoding, callback) {
|
|
32
29
|
try {
|
|
33
|
-
if (shellChunkStatus !==
|
|
30
|
+
if (shellChunkStatus !== ShellChunkStatus.FINIESH) {
|
|
34
31
|
let concatedChunk = chunk.toString();
|
|
35
|
-
if (shellChunkStatus ===
|
|
32
|
+
if (shellChunkStatus === ShellChunkStatus.IDLE) {
|
|
36
33
|
concatedChunk = `${shellBefore}${concatedChunk}`;
|
|
37
|
-
shellChunkStatus =
|
|
34
|
+
shellChunkStatus = ShellChunkStatus.START;
|
|
38
35
|
}
|
|
39
|
-
if (shellChunkStatus ===
|
|
40
|
-
concatedChunk = concatedChunk.replace(
|
|
41
|
-
|
|
42
|
-
shellAfter
|
|
43
|
-
);
|
|
44
|
-
shellChunkStatus = 2 /* FINIESH */;
|
|
36
|
+
if (shellChunkStatus === ShellChunkStatus.START && concatedChunk.endsWith(ESCAPED_SHELL_STREAM_END_MARK)) {
|
|
37
|
+
concatedChunk = concatedChunk.replace(ESCAPED_SHELL_STREAM_END_MARK, shellAfter);
|
|
38
|
+
shellChunkStatus = ShellChunkStatus.FINIESH;
|
|
45
39
|
}
|
|
46
40
|
this.push(concatedChunk);
|
|
47
41
|
} else {
|
|
@@ -60,34 +54,22 @@ function renderToPipe(rootElement, context, options) {
|
|
|
60
54
|
resolve(pipe(injectableTransform).pipe(stream));
|
|
61
55
|
},
|
|
62
56
|
onShellError(error) {
|
|
63
|
-
var
|
|
64
|
-
ssrContext.metrics.emitCounter(
|
|
65
|
-
|
|
66
|
-
1
|
|
67
|
-
);
|
|
68
|
-
const { shellAfter, shellBefore } = getTemplates(
|
|
69
|
-
context,
|
|
70
|
-
RenderLevel.CLIENT_RENDER
|
|
71
|
-
);
|
|
57
|
+
var _options_onShellError;
|
|
58
|
+
ssrContext.metrics.emitCounter("app.render.streaming.shell.error", 1);
|
|
59
|
+
const { shellAfter, shellBefore } = getTemplates(context, RenderLevel.CLIENT_RENDER);
|
|
72
60
|
const fallbackHtml = `${shellBefore}${shellAfter}`;
|
|
73
61
|
resolve(fallbackHtml);
|
|
74
|
-
|
|
62
|
+
options === null || options === void 0 ? void 0 : (_options_onShellError = options.onShellError) === null || _options_onShellError === void 0 ? void 0 : _options_onShellError.call(options, error);
|
|
75
63
|
},
|
|
76
64
|
onError(error) {
|
|
77
|
-
var
|
|
78
|
-
ssrContext.logger.error(
|
|
79
|
-
"An error occurs during streaming SSR",
|
|
80
|
-
error
|
|
81
|
-
);
|
|
65
|
+
var _options_onError;
|
|
66
|
+
ssrContext.logger.error("An error occurs during streaming SSR", error);
|
|
82
67
|
ssrContext.metrics.emitCounter("app.render.streaming.error", 1);
|
|
83
|
-
|
|
68
|
+
options === null || options === void 0 ? void 0 : (_options_onError = options.onError) === null || _options_onError === void 0 ? void 0 : _options_onError.call(options, error);
|
|
84
69
|
}
|
|
85
70
|
});
|
|
86
71
|
});
|
|
87
72
|
};
|
|
88
73
|
return forUserPipe;
|
|
89
74
|
}
|
|
90
|
-
|
|
91
|
-
export {
|
|
92
|
-
renderToPipe_default as default
|
|
93
|
-
};
|
|
75
|
+
export default renderToPipe;
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import { RenderLevel } from "../types";
|
|
2
2
|
import { ESCAPED_SHELL_STREAM_END_MARK } from "../../../common";
|
|
3
3
|
import { getTemplates } from "./template";
|
|
4
|
-
var ShellChunkStatus
|
|
4
|
+
var ShellChunkStatus;
|
|
5
|
+
(function(ShellChunkStatus2) {
|
|
5
6
|
ShellChunkStatus2[ShellChunkStatus2["IDLE"] = 0] = "IDLE";
|
|
6
7
|
ShellChunkStatus2[ShellChunkStatus2["START"] = 1] = "START";
|
|
7
8
|
ShellChunkStatus2[ShellChunkStatus2["FINIESH"] = 2] = "FINIESH";
|
|
8
|
-
|
|
9
|
-
})(ShellChunkStatus || {});
|
|
9
|
+
})(ShellChunkStatus || (ShellChunkStatus = {}));
|
|
10
10
|
function renderToPipe(rootElement, context, options) {
|
|
11
|
-
let shellChunkStatus =
|
|
11
|
+
let shellChunkStatus = ShellChunkStatus.IDLE;
|
|
12
12
|
const { ssrContext } = context;
|
|
13
13
|
const forUserPipe = async () => {
|
|
14
14
|
let renderToReadableStream;
|
|
@@ -16,21 +16,15 @@ function renderToPipe(rootElement, context, options) {
|
|
|
16
16
|
({ renderToReadableStream } = require("react-dom/server"));
|
|
17
17
|
} catch (e) {
|
|
18
18
|
}
|
|
19
|
-
const { shellAfter, shellBefore } = getTemplates(
|
|
20
|
-
context,
|
|
21
|
-
RenderLevel.SERVER_RENDER
|
|
22
|
-
);
|
|
19
|
+
const { shellAfter, shellBefore } = getTemplates(context, RenderLevel.SERVER_RENDER);
|
|
23
20
|
try {
|
|
24
21
|
const readableOriginal = await renderToReadableStream(rootElement, {
|
|
25
22
|
...options,
|
|
26
23
|
onError(error) {
|
|
27
|
-
var
|
|
28
|
-
ssrContext.logger.error(
|
|
29
|
-
"An error occurs during streaming SSR",
|
|
30
|
-
error
|
|
31
|
-
);
|
|
24
|
+
var _options_onError;
|
|
25
|
+
ssrContext.logger.error("An error occurs during streaming SSR", error);
|
|
32
26
|
ssrContext.metrics.emitCounter("app.render.streaming.error", 1);
|
|
33
|
-
|
|
27
|
+
options === null || options === void 0 ? void 0 : (_options_onError = options.onError) === null || _options_onError === void 0 ? void 0 : _options_onError.call(options, error);
|
|
34
28
|
}
|
|
35
29
|
});
|
|
36
30
|
const reader = readableOriginal.getReader();
|
|
@@ -42,18 +36,15 @@ function renderToPipe(rootElement, context, options) {
|
|
|
42
36
|
controller.close();
|
|
43
37
|
return;
|
|
44
38
|
}
|
|
45
|
-
if (shellChunkStatus !==
|
|
39
|
+
if (shellChunkStatus !== ShellChunkStatus.FINIESH) {
|
|
46
40
|
let concatedChunk = new TextDecoder().decode(value);
|
|
47
|
-
if (shellChunkStatus ===
|
|
41
|
+
if (shellChunkStatus === ShellChunkStatus.IDLE) {
|
|
48
42
|
concatedChunk = `${shellBefore}${concatedChunk}`;
|
|
49
|
-
shellChunkStatus =
|
|
43
|
+
shellChunkStatus = ShellChunkStatus.START;
|
|
50
44
|
}
|
|
51
|
-
if (shellChunkStatus ===
|
|
52
|
-
concatedChunk = concatedChunk.replace(
|
|
53
|
-
|
|
54
|
-
shellAfter
|
|
55
|
-
);
|
|
56
|
-
shellChunkStatus = 2 /* FINIESH */;
|
|
45
|
+
if (shellChunkStatus === ShellChunkStatus.START && concatedChunk.endsWith(ESCAPED_SHELL_STREAM_END_MARK)) {
|
|
46
|
+
concatedChunk = concatedChunk.replace(ESCAPED_SHELL_STREAM_END_MARK, shellAfter);
|
|
47
|
+
shellChunkStatus = ShellChunkStatus.FINIESH;
|
|
57
48
|
}
|
|
58
49
|
controller.enqueue(encodeForWebStream(concatedChunk));
|
|
59
50
|
} else {
|
|
@@ -67,10 +58,7 @@ function renderToPipe(rootElement, context, options) {
|
|
|
67
58
|
return injectableStream;
|
|
68
59
|
} catch (err) {
|
|
69
60
|
ssrContext.metrics.emitCounter("app.render.streaming.shell.error", 1);
|
|
70
|
-
const { shellAfter: shellAfter2, shellBefore: shellBefore2 } = getTemplates(
|
|
71
|
-
context,
|
|
72
|
-
RenderLevel.CLIENT_RENDER
|
|
73
|
-
);
|
|
61
|
+
const { shellAfter: shellAfter2, shellBefore: shellBefore2 } = getTemplates(context, RenderLevel.CLIENT_RENDER);
|
|
74
62
|
const fallbackHtml = `${shellBefore2}${shellAfter2}`;
|
|
75
63
|
return fallbackHtml;
|
|
76
64
|
}
|
|
@@ -87,7 +75,4 @@ function encodeForWebStream(thing) {
|
|
|
87
75
|
}
|
|
88
76
|
return thing;
|
|
89
77
|
}
|
|
90
|
-
|
|
91
|
-
export {
|
|
92
|
-
renderToPipe_worker_default as default
|
|
93
|
-
};
|
|
78
|
+
export default renderToPipe;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ServerStyleSheet } from "styled-components";
|
|
2
|
-
function getStyledComponentCss({ jsx }) {
|
|
2
|
+
export function getStyledComponentCss({ jsx }) {
|
|
3
3
|
const sheet = new ServerStyleSheet();
|
|
4
4
|
const collectedJsx = sheet.collectStyles(jsx);
|
|
5
5
|
return {
|
|
@@ -7,6 +7,3 @@ function getStyledComponentCss({ jsx }) {
|
|
|
7
7
|
jsx: collectedJsx
|
|
8
8
|
};
|
|
9
9
|
}
|
|
10
|
-
export {
|
|
11
|
-
getStyledComponentCss
|
|
12
|
-
};
|
|
@@ -1,13 +1,10 @@
|
|
|
1
1
|
import { buildShellAfterTemplate } from "./buildTemplate.after";
|
|
2
2
|
import { buildShellBeforeTemplate } from "./bulidTemplate.before";
|
|
3
3
|
const HTML_SEPARATOR = "<!--<?- html ?>-->";
|
|
4
|
-
const getTemplates = (context, renderLevel) => {
|
|
4
|
+
export const getTemplates = (context, renderLevel) => {
|
|
5
5
|
const { ssrContext } = context;
|
|
6
6
|
const [beforeAppTemplate = "", afterAppHtmlTemplate = ""] = ssrContext.template.split(HTML_SEPARATOR) || [];
|
|
7
|
-
const builtBeforeTemplate = buildShellBeforeTemplate(
|
|
8
|
-
beforeAppTemplate,
|
|
9
|
-
context
|
|
10
|
-
);
|
|
7
|
+
const builtBeforeTemplate = buildShellBeforeTemplate(beforeAppTemplate, context);
|
|
11
8
|
const builtAfterTemplate = buildShellAfterTemplate(afterAppHtmlTemplate, {
|
|
12
9
|
context,
|
|
13
10
|
renderLevel
|
|
@@ -17,6 +14,3 @@ const getTemplates = (context, renderLevel) => {
|
|
|
17
14
|
shellAfter: builtAfterTemplate
|
|
18
15
|
};
|
|
19
16
|
};
|
|
20
|
-
export {
|
|
21
|
-
getTemplates
|
|
22
|
-
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -1,12 +1,23 @@
|
|
|
1
|
+
function _define_property(obj, key, value) {
|
|
2
|
+
if (key in obj) {
|
|
3
|
+
Object.defineProperty(obj, key, {
|
|
4
|
+
value,
|
|
5
|
+
enumerable: true,
|
|
6
|
+
configurable: true,
|
|
7
|
+
writable: true
|
|
8
|
+
});
|
|
9
|
+
} else {
|
|
10
|
+
obj[key] = value;
|
|
11
|
+
}
|
|
12
|
+
return obj;
|
|
13
|
+
}
|
|
1
14
|
import React from "react";
|
|
2
15
|
import ReactDomServer from "react-dom/server";
|
|
3
16
|
import { serializeJson } from "@modern-js/utils/universal/serialize";
|
|
4
17
|
import ReactHelmet from "react-helmet";
|
|
5
18
|
import { serializeErrors } from "../../../router/runtime/utils";
|
|
6
19
|
import helmetReplace from "../helmet";
|
|
7
|
-
import {
|
|
8
|
-
RenderLevel
|
|
9
|
-
} from "../types";
|
|
20
|
+
import { RenderLevel } from "../types";
|
|
10
21
|
import { time } from "../time";
|
|
11
22
|
import prefetch from "../../prefetch";
|
|
12
23
|
import { ROUTER_DATA_JSON_ID, SSR_DATA_JSON_ID } from "../utils";
|
|
@@ -35,43 +46,20 @@ const buildTemplateData = (context, data, renderLevel) => {
|
|
|
35
46
|
};
|
|
36
47
|
};
|
|
37
48
|
class Entry {
|
|
38
|
-
constructor(options) {
|
|
39
|
-
const { ctx, config } = options;
|
|
40
|
-
const {
|
|
41
|
-
entryName,
|
|
42
|
-
template,
|
|
43
|
-
request: { host }
|
|
44
|
-
} = ctx;
|
|
45
|
-
this.fragments = toFragments(template, entryName);
|
|
46
|
-
this.entryName = entryName;
|
|
47
|
-
this.host = host;
|
|
48
|
-
this.App = options.App;
|
|
49
|
-
this.pluginConfig = config;
|
|
50
|
-
this.metrics = ctx.metrics;
|
|
51
|
-
this.logger = ctx.logger;
|
|
52
|
-
this.result = {
|
|
53
|
-
renderLevel: RenderLevel.CLIENT_RENDER,
|
|
54
|
-
html: "",
|
|
55
|
-
chunksMap: {
|
|
56
|
-
js: "",
|
|
57
|
-
css: ""
|
|
58
|
-
}
|
|
59
|
-
};
|
|
60
|
-
}
|
|
61
49
|
async renderToHtml(context) {
|
|
62
|
-
var
|
|
50
|
+
var _ssrContext_redirection, _ssrContext_redirection1, _ssrContext_redirection2;
|
|
63
51
|
const ssrContext = context.ssrContext;
|
|
64
|
-
if ((
|
|
52
|
+
if ((_ssrContext_redirection = ssrContext.redirection) === null || _ssrContext_redirection === void 0 ? void 0 : _ssrContext_redirection.url) {
|
|
65
53
|
return "";
|
|
66
54
|
}
|
|
67
55
|
const prefetchData = await this.prefetch(context);
|
|
68
|
-
if ((
|
|
56
|
+
if ((_ssrContext_redirection1 = ssrContext.redirection) === null || _ssrContext_redirection1 === void 0 ? void 0 : _ssrContext_redirection1.url) {
|
|
69
57
|
return "";
|
|
70
58
|
}
|
|
71
59
|
if (this.result.renderLevel >= RenderLevel.SERVER_PREFETCH) {
|
|
72
60
|
this.result.html = this.renderToString(context);
|
|
73
61
|
}
|
|
74
|
-
if ((
|
|
62
|
+
if ((_ssrContext_redirection2 = ssrContext.redirection) === null || _ssrContext_redirection2 === void 0 ? void 0 : _ssrContext_redirection2.url) {
|
|
75
63
|
return "";
|
|
76
64
|
}
|
|
77
65
|
const { routerContext } = context;
|
|
@@ -80,11 +68,7 @@ class Entry {
|
|
|
80
68
|
errors: serializeErrors(routerContext.errors)
|
|
81
69
|
} : void 0;
|
|
82
70
|
let html = "";
|
|
83
|
-
const templateData = buildTemplateData(
|
|
84
|
-
ssrContext,
|
|
85
|
-
prefetchData,
|
|
86
|
-
this.result.renderLevel
|
|
87
|
-
);
|
|
71
|
+
const templateData = buildTemplateData(ssrContext, prefetchData, this.result.renderLevel);
|
|
88
72
|
const SSRData = this.getSSRDataScript(templateData, routerData);
|
|
89
73
|
for (const fragment of this.fragments) {
|
|
90
74
|
if (fragment.isVariable && fragment.content === "SSRDataScript") {
|
|
@@ -118,7 +102,9 @@ class Entry {
|
|
|
118
102
|
const { ssrContext } = context;
|
|
119
103
|
try {
|
|
120
104
|
const App = React.createElement(this.App, {
|
|
121
|
-
context: Object.assign(context, {
|
|
105
|
+
context: Object.assign(context, {
|
|
106
|
+
ssr: true
|
|
107
|
+
})
|
|
122
108
|
});
|
|
123
109
|
const renderContext = {
|
|
124
110
|
stats: ssrContext.loadableStats,
|
|
@@ -156,7 +142,32 @@ class Entry {
|
|
|
156
142
|
SSRDataScript: ssrDataScripts
|
|
157
143
|
};
|
|
158
144
|
}
|
|
145
|
+
constructor(options) {
|
|
146
|
+
_define_property(this, "entryName", void 0);
|
|
147
|
+
_define_property(this, "result", void 0);
|
|
148
|
+
_define_property(this, "metrics", void 0);
|
|
149
|
+
_define_property(this, "logger", void 0);
|
|
150
|
+
_define_property(this, "App", void 0);
|
|
151
|
+
_define_property(this, "fragments", void 0);
|
|
152
|
+
_define_property(this, "pluginConfig", void 0);
|
|
153
|
+
_define_property(this, "host", void 0);
|
|
154
|
+
const { ctx, config } = options;
|
|
155
|
+
const { entryName, template, request: { host } } = ctx;
|
|
156
|
+
this.fragments = toFragments(template, entryName);
|
|
157
|
+
this.entryName = entryName;
|
|
158
|
+
this.host = host;
|
|
159
|
+
this.App = options.App;
|
|
160
|
+
this.pluginConfig = config;
|
|
161
|
+
this.metrics = ctx.metrics;
|
|
162
|
+
this.logger = ctx.logger;
|
|
163
|
+
this.result = {
|
|
164
|
+
renderLevel: RenderLevel.CLIENT_RENDER,
|
|
165
|
+
html: "",
|
|
166
|
+
chunksMap: {
|
|
167
|
+
js: "",
|
|
168
|
+
css: ""
|
|
169
|
+
}
|
|
170
|
+
};
|
|
171
|
+
}
|
|
159
172
|
}
|
|
160
|
-
export {
|
|
161
|
-
Entry as default
|
|
162
|
-
};
|
|
173
|
+
export { Entry as default };
|
|
@@ -2,11 +2,7 @@ import { run } from "@modern-js/utils/ssr";
|
|
|
2
2
|
import { PreRender } from "../../react/prerender";
|
|
3
3
|
import { time } from "../time";
|
|
4
4
|
import SSREntry from "./entry";
|
|
5
|
-
const render = ({
|
|
6
|
-
App,
|
|
7
|
-
context,
|
|
8
|
-
config
|
|
9
|
-
}) => {
|
|
5
|
+
export const render = ({ App, context, config }) => {
|
|
10
6
|
const ssrContext = context.ssrContext;
|
|
11
7
|
return run(ssrContext.request.headers, async () => {
|
|
12
8
|
const entry = new SSREntry({
|
|
@@ -27,6 +23,3 @@ const render = ({
|
|
|
27
23
|
return html;
|
|
28
24
|
});
|
|
29
25
|
};
|
|
30
|
-
export {
|
|
31
|
-
render
|
|
32
|
-
};
|
|
@@ -5,21 +5,18 @@ const extname = (uri) => {
|
|
|
5
5
|
if (typeof uri !== "string" || !uri.includes(".")) {
|
|
6
6
|
return "";
|
|
7
7
|
}
|
|
8
|
-
return `.${uri
|
|
8
|
+
return `.${uri === null || uri === void 0 ? void 0 : uri.split(".").pop()}` || "";
|
|
9
9
|
};
|
|
10
|
-
const toHtml = (jsx, renderer, next) => {
|
|
11
|
-
const {
|
|
12
|
-
stats,
|
|
13
|
-
result: { chunksMap },
|
|
14
|
-
host,
|
|
15
|
-
config = {}
|
|
16
|
-
} = renderer;
|
|
10
|
+
export const toHtml = (jsx, renderer, next) => {
|
|
11
|
+
const { stats, result: { chunksMap }, host, config = {} } = renderer;
|
|
17
12
|
if (!stats || chunksMap.js) {
|
|
18
13
|
return next(jsx);
|
|
19
14
|
}
|
|
20
15
|
const extractor = new ChunkExtractor({
|
|
21
16
|
stats,
|
|
22
|
-
entrypoints: [
|
|
17
|
+
entrypoints: [
|
|
18
|
+
renderer.entryName
|
|
19
|
+
]
|
|
23
20
|
});
|
|
24
21
|
const html = next(extractor.collectChunks(jsx));
|
|
25
22
|
const chunks = extractor.getChunkAssets(extractor.chunks);
|
|
@@ -30,19 +27,12 @@ const toHtml = (jsx, renderer, next) => {
|
|
|
30
27
|
const props = [];
|
|
31
28
|
const { crossorigin } = config;
|
|
32
29
|
if (crossorigin && isCrossOrigin(v.url, host)) {
|
|
33
|
-
props.push(
|
|
34
|
-
`crossorigin="${crossorigin === true ? "anonymous" : crossorigin}"`
|
|
35
|
-
);
|
|
30
|
+
props.push(`crossorigin="${crossorigin === true ? "anonymous" : crossorigin}"`);
|
|
36
31
|
}
|
|
37
|
-
chunksMap[fileType] += `<script src="${v.url}" ${props.join(
|
|
38
|
-
" "
|
|
39
|
-
)}></script>`;
|
|
32
|
+
chunksMap[fileType] += `<script src="${v.url}" ${props.join(" ")}></script>`;
|
|
40
33
|
} else if (fileType === "css") {
|
|
41
34
|
chunksMap[fileType] += `<link href="${v.url}" rel="stylesheet" />`;
|
|
42
35
|
}
|
|
43
36
|
}
|
|
44
37
|
return html;
|
|
45
38
|
};
|
|
46
|
-
export {
|
|
47
|
-
toHtml
|
|
48
|
-
};
|
|
@@ -1,11 +1,8 @@
|
|
|
1
1
|
import { ServerStyleSheet } from "styled-components";
|
|
2
|
-
const toHtml = (jsx, renderer, next) => {
|
|
2
|
+
export const toHtml = (jsx, renderer, next) => {
|
|
3
3
|
const sheet = new ServerStyleSheet();
|
|
4
4
|
const html = next(sheet.collectStyles(jsx));
|
|
5
5
|
const css = sheet.getStyleTags();
|
|
6
6
|
renderer.result.chunksMap.css += css;
|
|
7
7
|
return html;
|
|
8
8
|
};
|
|
9
|
-
export {
|
|
10
|
-
toHtml
|
|
11
|
-
};
|