@modern-js/runtime 2.22.1 → 2.22.2-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/dist/cjs/document/constants.js +3 -6
- package/dist/cjs/router/runtime/plugin.js +16 -1
- package/dist/esm/document/constants.js +1 -1
- package/dist/esm/router/runtime/plugin.js +20 -1
- package/dist/esm-node/document/constants.js +1 -1
- package/dist/esm-node/router/runtime/plugin.js +16 -1
- package/dist/js/modern/cli/index.js +72 -0
- package/dist/js/modern/common.js +4 -0
- package/dist/js/modern/config.js +0 -0
- package/dist/js/modern/core/app-config.js +10 -0
- package/dist/js/modern/core/compatible.js +286 -0
- package/dist/js/modern/core/index.js +16 -0
- package/dist/js/modern/core/loader/index.js +4 -0
- package/dist/js/modern/core/loader/loaderManager.js +165 -0
- package/dist/js/modern/core/loader/useLoader.js +114 -0
- package/dist/js/modern/core/plugin.js +58 -0
- package/dist/js/modern/document/Body.js +23 -0
- package/dist/js/modern/document/DocumentContext.js +9 -0
- package/dist/js/modern/document/DocumentStructureContext.js +11 -0
- package/dist/js/modern/document/Head.js +27 -0
- package/dist/js/modern/document/Html.js +78 -0
- package/dist/js/modern/document/Links.js +10 -0
- package/dist/js/modern/document/Root.js +33 -0
- package/dist/js/modern/document/Script.js +20 -0
- package/dist/js/modern/document/Scripts.js +10 -0
- package/dist/js/modern/document/cli/index.js +228 -0
- package/dist/js/modern/document/constants.js +49 -0
- package/dist/js/modern/document/index.js +10 -0
- package/dist/js/modern/exports/head.js +6 -0
- package/dist/js/modern/exports/loadable.js +6 -0
- package/dist/js/modern/exports/server.js +4 -0
- package/dist/js/modern/exports/styled.js +6 -0
- package/dist/js/modern/index.js +22 -0
- package/dist/js/modern/router/cli/index.js +120 -0
- package/dist/js/modern/router/index.js +7 -0
- package/dist/js/modern/router/runtime/DefaultNotFound.js +14 -0
- package/dist/js/modern/router/runtime/fetch.js +5 -0
- package/dist/js/modern/router/runtime/fetch.node.js +4 -0
- package/dist/js/modern/router/runtime/fetch.worker.js +5 -0
- package/dist/js/modern/router/runtime/index.js +9 -0
- package/dist/js/modern/router/runtime/plugin.js +104 -0
- package/dist/js/modern/router/runtime/plugin.node.js +189 -0
- package/dist/js/modern/router/runtime/server.js +1 -0
- package/dist/js/modern/router/runtime/types.js +0 -0
- package/dist/js/modern/router/runtime/utils.js +196 -0
- package/dist/js/modern/router/runtime/withRouter.js +36 -0
- package/dist/js/modern/runtime-context.js +7 -0
- package/dist/js/modern/ssr/cli/babel-plugin-ssr-loader-id.js +130 -0
- package/dist/js/modern/ssr/cli/index.js +172 -0
- package/dist/js/modern/ssr/index.js +159 -0
- package/dist/js/modern/ssr/index.node.js +79 -0
- package/dist/js/modern/ssr/prefetch.js +69 -0
- package/dist/js/modern/ssr/prefetch.worker.js +66 -0
- package/dist/js/modern/ssr/react/index.js +6 -0
- package/dist/js/modern/ssr/react/nossr/index.js +18 -0
- package/dist/js/modern/ssr/react/prerender/index.js +108 -0
- package/dist/js/modern/ssr/react/prerender/type.js +0 -0
- package/dist/js/modern/ssr/react/prerender/util.js +96 -0
- package/dist/js/modern/ssr/react/withCallback/index.js +15 -0
- package/dist/js/modern/ssr/serverRender/helmet.js +44 -0
- package/dist/js/modern/ssr/serverRender/index.js +35 -0
- package/dist/js/modern/ssr/serverRender/renderToStream/buildTemplate.after.js +36 -0
- package/dist/js/modern/ssr/serverRender/renderToStream/buildTemplate.share.js +11 -0
- package/dist/js/modern/ssr/serverRender/renderToStream/bulidTemplate.before.js +61 -0
- package/dist/js/modern/ssr/serverRender/renderToStream/index.js +58 -0
- package/dist/js/modern/ssr/serverRender/renderToStream/index.worker.js +35 -0
- package/dist/js/modern/ssr/serverRender/renderToStream/loadable.js +24 -0
- package/dist/js/modern/ssr/serverRender/renderToStream/renderToPipe.js +96 -0
- package/dist/js/modern/ssr/serverRender/renderToStream/renderToPipe.worker.js +117 -0
- package/dist/js/modern/ssr/serverRender/renderToStream/styledComponent.js +12 -0
- package/dist/js/modern/ssr/serverRender/renderToStream/template.js +22 -0
- package/dist/js/modern/ssr/serverRender/renderToStream/type.js +0 -0
- package/dist/js/modern/ssr/serverRender/renderToString/entry.js +172 -0
- package/dist/js/modern/ssr/serverRender/renderToString/index.js +52 -0
- package/dist/js/modern/ssr/serverRender/renderToString/index.worker.js +49 -0
- package/dist/js/modern/ssr/serverRender/renderToString/loadable.js +48 -0
- package/dist/js/modern/ssr/serverRender/renderToString/reduce.js +8 -0
- package/dist/js/modern/ssr/serverRender/renderToString/styledComponent.js +11 -0
- package/dist/js/modern/ssr/serverRender/renderToString/template.js +58 -0
- package/dist/js/modern/ssr/serverRender/renderToString/type.js +9 -0
- package/dist/js/modern/ssr/serverRender/time.js +13 -0
- package/dist/js/modern/ssr/serverRender/time.worker.js +28 -0
- package/dist/js/modern/ssr/serverRender/types.js +4 -0
- package/dist/js/modern/ssr/serverRender/utils.js +11 -0
- package/dist/js/modern/ssr/utils.js +81 -0
- package/dist/js/modern/state/cli/index.js +83 -0
- package/dist/js/modern/state/index.js +7 -0
- package/dist/js/modern/state/plugins.js +13 -0
- package/dist/js/modern/state/runtime/index.js +9 -0
- package/dist/js/modern/state/runtime/plugin.js +97 -0
- package/dist/js/modern/state/types.js +0 -0
- package/dist/js/node/cli/index.js +99 -0
- package/dist/js/node/common.js +27 -0
- package/dist/js/node/config.js +15 -0
- package/dist/js/node/core/app-config.js +34 -0
- package/dist/js/node/core/compatible.js +313 -0
- package/dist/js/node/core/index.js +47 -0
- package/dist/js/node/core/loader/index.js +33 -0
- package/dist/js/node/core/loader/loaderManager.js +195 -0
- package/dist/js/node/core/loader/useLoader.js +132 -0
- package/dist/js/node/core/plugin.js +80 -0
- package/dist/js/node/document/Body.js +43 -0
- package/dist/js/node/document/DocumentContext.js +38 -0
- package/dist/js/node/document/DocumentStructureContext.js +40 -0
- package/dist/js/node/document/Head.js +51 -0
- package/dist/js/node/document/Html.js +101 -0
- package/dist/js/node/document/Links.js +33 -0
- package/dist/js/node/document/Root.js +57 -0
- package/dist/js/node/document/Script.js +40 -0
- package/dist/js/node/document/Scripts.js +33 -0
- package/dist/js/node/document/cli/index.js +240 -0
- package/dist/js/node/document/constants.js +86 -0
- package/dist/js/node/document/index.js +26 -0
- package/dist/js/node/exports/head.js +34 -0
- package/dist/js/node/exports/loadable.js +34 -0
- package/dist/js/node/exports/server.js +27 -0
- package/dist/js/node/exports/styled.js +34 -0
- package/dist/js/node/index.js +44 -0
- package/dist/js/node/router/cli/index.js +135 -0
- package/dist/js/node/router/index.js +37 -0
- package/dist/js/node/router/runtime/DefaultNotFound.js +37 -0
- package/dist/js/node/router/runtime/fetch.js +28 -0
- package/dist/js/node/router/runtime/fetch.node.js +27 -0
- package/dist/js/node/router/runtime/fetch.worker.js +28 -0
- package/dist/js/node/router/runtime/index.js +33 -0
- package/dist/js/node/router/runtime/plugin.js +127 -0
- package/dist/js/node/router/runtime/plugin.node.js +212 -0
- package/dist/js/node/router/runtime/server.js +17 -0
- package/dist/js/node/router/runtime/types.js +15 -0
- package/dist/js/node/router/runtime/utils.js +221 -0
- package/dist/js/node/router/runtime/withRouter.js +57 -0
- package/dist/js/node/runtime-context.js +31 -0
- package/dist/js/node/ssr/cli/babel-plugin-ssr-loader-id.js +139 -0
- package/dist/js/node/ssr/cli/index.js +190 -0
- package/dist/js/node/ssr/index.js +185 -0
- package/dist/js/node/ssr/index.node.js +107 -0
- package/dist/js/node/ssr/prefetch.js +90 -0
- package/dist/js/node/ssr/prefetch.worker.js +87 -0
- package/dist/js/node/ssr/react/index.js +30 -0
- package/dist/js/node/ssr/react/nossr/index.js +47 -0
- package/dist/js/node/ssr/react/prerender/index.js +130 -0
- package/dist/js/node/ssr/react/prerender/type.js +15 -0
- package/dist/js/node/ssr/react/prerender/util.js +123 -0
- package/dist/js/node/ssr/react/withCallback/index.js +38 -0
- package/dist/js/node/ssr/serverRender/helmet.js +65 -0
- package/dist/js/node/ssr/serverRender/index.js +56 -0
- package/dist/js/node/ssr/serverRender/renderToStream/buildTemplate.after.js +65 -0
- package/dist/js/node/ssr/serverRender/renderToStream/buildTemplate.share.js +35 -0
- package/dist/js/node/ssr/serverRender/renderToStream/bulidTemplate.before.js +87 -0
- package/dist/js/node/ssr/serverRender/renderToStream/index.js +87 -0
- package/dist/js/node/ssr/serverRender/renderToStream/index.worker.js +64 -0
- package/dist/js/node/ssr/serverRender/renderToStream/loadable.js +47 -0
- package/dist/js/node/ssr/serverRender/renderToStream/renderToPipe.js +115 -0
- package/dist/js/node/ssr/serverRender/renderToStream/renderToPipe.worker.js +136 -0
- package/dist/js/node/ssr/serverRender/renderToStream/styledComponent.js +35 -0
- package/dist/js/node/ssr/serverRender/renderToStream/template.js +45 -0
- package/dist/js/node/ssr/serverRender/renderToStream/type.js +15 -0
- package/dist/js/node/ssr/serverRender/renderToString/entry.js +197 -0
- package/dist/js/node/ssr/serverRender/renderToString/index.js +81 -0
- package/dist/js/node/ssr/serverRender/renderToString/index.worker.js +78 -0
- package/dist/js/node/ssr/serverRender/renderToString/loadable.js +71 -0
- package/dist/js/node/ssr/serverRender/renderToString/reduce.js +31 -0
- package/dist/js/node/ssr/serverRender/renderToString/styledComponent.js +34 -0
- package/dist/js/node/ssr/serverRender/renderToString/template.js +82 -0
- package/dist/js/node/ssr/serverRender/renderToString/type.js +32 -0
- package/dist/js/node/ssr/serverRender/time.js +36 -0
- package/dist/js/node/ssr/serverRender/time.worker.js +51 -0
- package/dist/js/node/ssr/serverRender/types.js +27 -0
- package/dist/js/node/ssr/serverRender/utils.js +34 -0
- package/dist/js/node/ssr/utils.js +106 -0
- package/dist/js/node/state/cli/index.js +100 -0
- package/dist/js/node/state/index.js +37 -0
- package/dist/js/node/state/plugins.js +45 -0
- package/dist/js/node/state/runtime/index.js +40 -0
- package/dist/js/node/state/runtime/plugin.js +121 -0
- package/dist/js/node/state/types.js +15 -0
- package/dist/js/treeshaking/cli/index.js +186 -0
- package/dist/js/treeshaking/common.js +4 -0
- package/dist/js/treeshaking/config.js +1 -0
- package/dist/js/treeshaking/core/app-config.js +9 -0
- package/dist/js/treeshaking/core/compatible.js +486 -0
- package/dist/js/treeshaking/core/index.js +7 -0
- package/dist/js/treeshaking/core/loader/index.js +2 -0
- package/dist/js/treeshaking/core/loader/loaderManager.js +406 -0
- package/dist/js/treeshaking/core/loader/useLoader.js +188 -0
- package/dist/js/treeshaking/core/plugin.js +176 -0
- package/dist/js/treeshaking/document/Body.js +18 -0
- package/dist/js/treeshaking/document/DocumentContext.js +7 -0
- package/dist/js/treeshaking/document/DocumentStructureContext.js +9 -0
- package/dist/js/treeshaking/document/Head.js +24 -0
- package/dist/js/treeshaking/document/Html.js +99 -0
- package/dist/js/treeshaking/document/Links.js +8 -0
- package/dist/js/treeshaking/document/Root.js +26 -0
- package/dist/js/treeshaking/document/Script.js +15 -0
- package/dist/js/treeshaking/document/Scripts.js +8 -0
- package/dist/js/treeshaking/document/cli/index.js +393 -0
- package/dist/js/treeshaking/document/constants.js +35 -0
- package/dist/js/treeshaking/document/index.js +10 -0
- package/dist/js/treeshaking/exports/head.js +4 -0
- package/dist/js/treeshaking/exports/loadable.js +4 -0
- package/dist/js/treeshaking/exports/server.js +4 -0
- package/dist/js/treeshaking/exports/styled.js +4 -0
- package/dist/js/treeshaking/index.js +3 -0
- package/dist/js/treeshaking/router/cli/index.js +148 -0
- package/dist/js/treeshaking/router/index.js +4 -0
- package/dist/js/treeshaking/router/runtime/DefaultNotFound.js +14 -0
- package/dist/js/treeshaking/router/runtime/fetch.js +2 -0
- package/dist/js/treeshaking/router/runtime/fetch.node.js +2 -0
- package/dist/js/treeshaking/router/runtime/fetch.worker.js +2 -0
- package/dist/js/treeshaking/router/runtime/index.js +6 -0
- package/dist/js/treeshaking/router/runtime/plugin.js +132 -0
- package/dist/js/treeshaking/router/runtime/plugin.node.js +447 -0
- package/dist/js/treeshaking/router/runtime/server.js +1 -0
- package/dist/js/treeshaking/router/runtime/types.js +1 -0
- package/dist/js/treeshaking/router/runtime/utils.js +260 -0
- package/dist/js/treeshaking/router/runtime/withRouter.js +67 -0
- package/dist/js/treeshaking/runtime-context.js +4 -0
- package/dist/js/treeshaking/ssr/cli/babel-plugin-ssr-loader-id.js +122 -0
- package/dist/js/treeshaking/ssr/cli/index.js +217 -0
- package/dist/js/treeshaking/ssr/index.js +315 -0
- package/dist/js/treeshaking/ssr/index.node.js +240 -0
- package/dist/js/treeshaking/ssr/prefetch.js +199 -0
- package/dist/js/treeshaking/ssr/prefetch.worker.js +191 -0
- package/dist/js/treeshaking/ssr/react/index.js +3 -0
- package/dist/js/treeshaking/ssr/react/nossr/index.js +58 -0
- package/dist/js/treeshaking/ssr/react/prerender/index.js +237 -0
- package/dist/js/treeshaking/ssr/react/prerender/type.js +1 -0
- package/dist/js/treeshaking/ssr/react/prerender/util.js +108 -0
- package/dist/js/treeshaking/ssr/react/withCallback/index.js +16 -0
- package/dist/js/treeshaking/ssr/serverRender/helmet.js +42 -0
- package/dist/js/treeshaking/ssr/serverRender/index.js +169 -0
- package/dist/js/treeshaking/ssr/serverRender/renderToStream/buildTemplate.after.js +34 -0
- package/dist/js/treeshaking/ssr/serverRender/renderToStream/buildTemplate.share.js +7 -0
- package/dist/js/treeshaking/ssr/serverRender/renderToStream/bulidTemplate.before.js +115 -0
- package/dist/js/treeshaking/ssr/serverRender/renderToStream/index.js +165 -0
- package/dist/js/treeshaking/ssr/serverRender/renderToStream/index.worker.js +32 -0
- package/dist/js/treeshaking/ssr/serverRender/renderToStream/loadable.js +22 -0
- package/dist/js/treeshaking/ssr/serverRender/renderToStream/renderToPipe.js +122 -0
- package/dist/js/treeshaking/ssr/serverRender/renderToStream/renderToPipe.worker.js +294 -0
- package/dist/js/treeshaking/ssr/serverRender/renderToStream/styledComponent.js +11 -0
- package/dist/js/treeshaking/ssr/serverRender/renderToStream/template.js +63 -0
- package/dist/js/treeshaking/ssr/serverRender/renderToStream/type.js +1 -0
- package/dist/js/treeshaking/ssr/serverRender/renderToString/entry.js +393 -0
- package/dist/js/treeshaking/ssr/serverRender/renderToString/index.js +165 -0
- package/dist/js/treeshaking/ssr/serverRender/renderToString/index.worker.js +167 -0
- package/dist/js/treeshaking/ssr/serverRender/renderToString/loadable.js +56 -0
- package/dist/js/treeshaking/ssr/serverRender/renderToString/reduce.js +10 -0
- package/dist/js/treeshaking/ssr/serverRender/renderToString/styledComponent.js +9 -0
- package/dist/js/treeshaking/ssr/serverRender/renderToString/template.js +156 -0
- package/dist/js/treeshaking/ssr/serverRender/renderToString/type.js +7 -0
- package/dist/js/treeshaking/ssr/serverRender/time.js +57 -0
- package/dist/js/treeshaking/ssr/serverRender/time.worker.js +75 -0
- package/dist/js/treeshaking/ssr/serverRender/types.js +2 -0
- package/dist/js/treeshaking/ssr/serverRender/utils.js +13 -0
- package/dist/js/treeshaking/ssr/utils.js +134 -0
- package/dist/js/treeshaking/state/cli/index.js +71 -0
- package/dist/js/treeshaking/state/index.js +4 -0
- package/dist/js/treeshaking/state/plugins.js +14 -0
- package/dist/js/treeshaking/state/runtime/index.js +5 -0
- package/dist/js/treeshaking/state/runtime/plugin.js +198 -0
- package/dist/js/treeshaking/state/types.js +1 -0
- package/dist/types/document/constants.d.ts +0 -1
- package/dist/types/runtimeContext.d.ts +8 -0
- package/package.json +6 -5
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
const REQUEST_META = ["header", "query"];
|
|
2
|
+
const getInnermostProperty = function getInnermostProperty2(propsList, propName) {
|
|
3
|
+
for (let i = propsList.length - 1; i >= 0; i--) {
|
|
4
|
+
const props = propsList[i];
|
|
5
|
+
if (props.hasOwnProperty(propName)) {
|
|
6
|
+
return props[propName];
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
return null;
|
|
10
|
+
};
|
|
11
|
+
const getOutermostProperty = function getOutermostProperty2(propsList, propName) {
|
|
12
|
+
for (const props of propsList) {
|
|
13
|
+
if (props.hasOwnProperty(propName)) {
|
|
14
|
+
return props[propName];
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
return null;
|
|
18
|
+
};
|
|
19
|
+
const aggKeysFromPropsList = function aggKeysFromPropsList2(propsList, propName) {
|
|
20
|
+
const initResult = REQUEST_META.reduce(
|
|
21
|
+
(result, next) => {
|
|
22
|
+
const key = next;
|
|
23
|
+
result[key] = [];
|
|
24
|
+
return result;
|
|
25
|
+
},
|
|
26
|
+
{}
|
|
27
|
+
);
|
|
28
|
+
const res = propsList.filter((props) => usefulObject(props[propName])).reduce((result, next) => {
|
|
29
|
+
REQUEST_META.forEach((key) => {
|
|
30
|
+
const prop = next[propName];
|
|
31
|
+
if ((prop == null ? void 0 : prop.hasOwnProperty(key)) && usefulArray(prop[key])) {
|
|
32
|
+
result[key] = unique(result[key].concat(prop[key]));
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
return result;
|
|
36
|
+
}, initResult);
|
|
37
|
+
return REQUEST_META.reduce((result, next) => {
|
|
38
|
+
var _a;
|
|
39
|
+
const key = next;
|
|
40
|
+
if (result[key] && ((_a = result[key]) == null ? void 0 : _a.length) === 0) {
|
|
41
|
+
delete result[key];
|
|
42
|
+
}
|
|
43
|
+
return result;
|
|
44
|
+
}, res);
|
|
45
|
+
};
|
|
46
|
+
const aggMatchesFromPropsList = function aggMatchesFromPropsList2(propsList, propName) {
|
|
47
|
+
const initResult = REQUEST_META.reduce(
|
|
48
|
+
(result, next) => {
|
|
49
|
+
const key = next;
|
|
50
|
+
result[key] = {};
|
|
51
|
+
return result;
|
|
52
|
+
},
|
|
53
|
+
{}
|
|
54
|
+
);
|
|
55
|
+
const res = propsList.filter((props) => usefulObject(props[propName])).reduce((result, next) => {
|
|
56
|
+
REQUEST_META.forEach((key) => {
|
|
57
|
+
const prop = next[propName];
|
|
58
|
+
if ((prop == null ? void 0 : prop.hasOwnProperty(key)) && usefulObject(prop[key])) {
|
|
59
|
+
result[key] = Object.assign(result[key], prop[key]);
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
return result;
|
|
63
|
+
}, initResult);
|
|
64
|
+
return REQUEST_META.reduce((result, next) => {
|
|
65
|
+
const key = next;
|
|
66
|
+
if (result[key] && Object.keys(result[key]).length === 0) {
|
|
67
|
+
delete result[key];
|
|
68
|
+
}
|
|
69
|
+
return result;
|
|
70
|
+
}, res);
|
|
71
|
+
};
|
|
72
|
+
function unique(arr) {
|
|
73
|
+
return Array.from(new Set(arr));
|
|
74
|
+
}
|
|
75
|
+
function usefulObject(target) {
|
|
76
|
+
if (!exist(target)) {
|
|
77
|
+
return false;
|
|
78
|
+
}
|
|
79
|
+
return target.constructor === Object && Object.keys(target).length > 0;
|
|
80
|
+
}
|
|
81
|
+
function usefulArray(target) {
|
|
82
|
+
if (!exist(target)) {
|
|
83
|
+
return false;
|
|
84
|
+
}
|
|
85
|
+
return Array.isArray(target) && target.length > 0;
|
|
86
|
+
}
|
|
87
|
+
function exist(target) {
|
|
88
|
+
return target != null;
|
|
89
|
+
}
|
|
90
|
+
export {
|
|
91
|
+
aggKeysFromPropsList,
|
|
92
|
+
aggMatchesFromPropsList,
|
|
93
|
+
exist,
|
|
94
|
+
getInnermostProperty,
|
|
95
|
+
getOutermostProperty
|
|
96
|
+
};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { useRef, useLayoutEffect } from "react";
|
|
2
|
+
const WithCallback = ({ callback, children }) => {
|
|
3
|
+
const once = useRef(false);
|
|
4
|
+
useLayoutEffect(() => {
|
|
5
|
+
if (once.current) {
|
|
6
|
+
return;
|
|
7
|
+
}
|
|
8
|
+
once.current = true;
|
|
9
|
+
callback();
|
|
10
|
+
}, [callback]);
|
|
11
|
+
return children;
|
|
12
|
+
};
|
|
13
|
+
export {
|
|
14
|
+
WithCallback
|
|
15
|
+
};
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { EOL } from "os";
|
|
2
|
+
const RE_HTML_ATTR = /<html[^>]*>/;
|
|
3
|
+
const RE_BODY_ATTR = /<body[^>]*>/;
|
|
4
|
+
const RE_LAST_IN_HEAD = /<\/head>/;
|
|
5
|
+
const RE_TITLE = /<title[^>]*>([\s\S\n\r]*?)<\/title>/;
|
|
6
|
+
const TEST_TITLE_CONTENT = new RegExp("(?<=<title[^>]*>)([\\s\\S\\n\\r]*?)([.|\\S])([\\s\\S\\n\\r]*?)(?=<\\/title>)");
|
|
7
|
+
function helmet(content, helmetData) {
|
|
8
|
+
let result = content;
|
|
9
|
+
const bodyAttributes = helmetData.bodyAttributes.toString();
|
|
10
|
+
if (bodyAttributes) {
|
|
11
|
+
result = result.replace(RE_BODY_ATTR, `<body ${bodyAttributes}>`);
|
|
12
|
+
}
|
|
13
|
+
const htmlAttributes = helmetData.htmlAttributes.toString();
|
|
14
|
+
if (htmlAttributes) {
|
|
15
|
+
result = result.replace(RE_HTML_ATTR, `<html ${htmlAttributes}>`);
|
|
16
|
+
}
|
|
17
|
+
const base = helmetData.base.toString();
|
|
18
|
+
const link = helmetData.link.toString();
|
|
19
|
+
const meta = helmetData.meta.toString();
|
|
20
|
+
const noscript = helmetData.noscript.toString();
|
|
21
|
+
const script = helmetData.script.toString();
|
|
22
|
+
const style = helmetData.style.toString();
|
|
23
|
+
const title = helmetData.title.toString();
|
|
24
|
+
const existTitleTag = RE_TITLE.test(content);
|
|
25
|
+
const shouldReplaceTitle = existTitleTag && TEST_TITLE_CONTENT.test(title.trim());
|
|
26
|
+
if (shouldReplaceTitle) {
|
|
27
|
+
result = result.replace(RE_TITLE, title);
|
|
28
|
+
}
|
|
29
|
+
const helmetStr = [
|
|
30
|
+
base,
|
|
31
|
+
link,
|
|
32
|
+
meta,
|
|
33
|
+
noscript,
|
|
34
|
+
script,
|
|
35
|
+
style,
|
|
36
|
+
!existTitleTag ? title : ""
|
|
37
|
+
].reduce((pre, cur) => {
|
|
38
|
+
return pre + (cur.length > 0 ? ` ${cur}${EOL}` : "");
|
|
39
|
+
}, "");
|
|
40
|
+
return result.replace(RE_LAST_IN_HEAD, `${helmetStr}</head>`);
|
|
41
|
+
}
|
|
42
|
+
export {
|
|
43
|
+
helmet as default
|
|
44
|
+
};
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
var __async = (__this, __arguments, generator) => {
|
|
2
|
+
return new Promise((resolve, reject) => {
|
|
3
|
+
var fulfilled = (value) => {
|
|
4
|
+
try {
|
|
5
|
+
step(generator.next(value));
|
|
6
|
+
} catch (e) {
|
|
7
|
+
reject(e);
|
|
8
|
+
}
|
|
9
|
+
};
|
|
10
|
+
var rejected = (value) => {
|
|
11
|
+
try {
|
|
12
|
+
step(generator.throw(value));
|
|
13
|
+
} catch (e) {
|
|
14
|
+
reject(e);
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
|
|
18
|
+
step((generator = generator.apply(__this, __arguments)).next());
|
|
19
|
+
});
|
|
20
|
+
};
|
|
21
|
+
import { isReact18 } from "../utils";
|
|
22
|
+
function serverRender(options) {
|
|
23
|
+
return __async(this, null, function* () {
|
|
24
|
+
if (isReact18() && options.config.mode === "stream") {
|
|
25
|
+
const pipe = yield require("./renderToStream").render(options);
|
|
26
|
+
return pipe;
|
|
27
|
+
} else {
|
|
28
|
+
const html = yield require("./renderToString").render(options);
|
|
29
|
+
return html;
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
export {
|
|
34
|
+
serverRender as default
|
|
35
|
+
};
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import serialize from "serialize-javascript";
|
|
2
|
+
import { buildTemplate } from "./buildTemplate.share";
|
|
3
|
+
function buildShellAfterTemplate(afterAppTemplate, options) {
|
|
4
|
+
const callbacks = [injectSSRDataScript];
|
|
5
|
+
return buildTemplate(afterAppTemplate, callbacks);
|
|
6
|
+
function injectSSRDataScript(template) {
|
|
7
|
+
const ssrDataScript = buildSSRDataScript();
|
|
8
|
+
return template.replace("<!--<?- SSRDataScript ?>-->", ssrDataScript);
|
|
9
|
+
function buildSSRDataScript() {
|
|
10
|
+
const { ssrContext, renderLevel } = options;
|
|
11
|
+
const { request } = ssrContext;
|
|
12
|
+
const SSRData = {
|
|
13
|
+
context: {
|
|
14
|
+
request: {
|
|
15
|
+
params: request.params,
|
|
16
|
+
query: request.query,
|
|
17
|
+
pathname: request.pathname,
|
|
18
|
+
host: request.host,
|
|
19
|
+
url: request.url,
|
|
20
|
+
headers: request.headers,
|
|
21
|
+
cookieMap: request.cookieMap
|
|
22
|
+
}
|
|
23
|
+
},
|
|
24
|
+
renderLevel
|
|
25
|
+
};
|
|
26
|
+
return `
|
|
27
|
+
<script>window._SSR_DATA = ${serialize(SSRData, {
|
|
28
|
+
isJSON: true
|
|
29
|
+
})}<\/script>
|
|
30
|
+
`;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
export {
|
|
35
|
+
buildShellAfterTemplate
|
|
36
|
+
};
|
|
@@ -0,0 +1,11 @@
|
|
|
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
|
+
);
|
|
7
|
+
}
|
|
8
|
+
export {
|
|
9
|
+
HEAD_REG_EXP,
|
|
10
|
+
buildTemplate
|
|
11
|
+
};
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import ReactHelmet from "react-helmet";
|
|
2
|
+
import { matchRoutes } from "react-router-dom";
|
|
3
|
+
import helmetReplace from "../helmet";
|
|
4
|
+
import {
|
|
5
|
+
HEAD_REG_EXP,
|
|
6
|
+
buildTemplate
|
|
7
|
+
} from "./buildTemplate.share";
|
|
8
|
+
const CSS_CHUNKS_PLACEHOLDER = "<!--<?- chunksMap.css ?>-->";
|
|
9
|
+
function getHeadTemplate(beforeEntryTemplate, context) {
|
|
10
|
+
const callbacks = [
|
|
11
|
+
(headTemplate2) => {
|
|
12
|
+
const helmetData = ReactHelmet.renderStatic();
|
|
13
|
+
return helmetData ? helmetReplace(headTemplate2, helmetData) : headTemplate2;
|
|
14
|
+
},
|
|
15
|
+
injectCss
|
|
16
|
+
];
|
|
17
|
+
const [headTemplate = ""] = beforeEntryTemplate.match(HEAD_REG_EXP) || [];
|
|
18
|
+
if (!headTemplate.length) {
|
|
19
|
+
return "";
|
|
20
|
+
}
|
|
21
|
+
return buildTemplate(headTemplate, callbacks);
|
|
22
|
+
function injectCss(headTemplate2) {
|
|
23
|
+
return headTemplate2.replace(CSS_CHUNKS_PLACEHOLDER, getCssChunks());
|
|
24
|
+
function getCssChunks() {
|
|
25
|
+
const { routeManifest, routerContext, routes } = context;
|
|
26
|
+
if (!routeManifest || !routerContext || !routes) {
|
|
27
|
+
return "";
|
|
28
|
+
}
|
|
29
|
+
const { routeAssets } = routeManifest;
|
|
30
|
+
const cssChunks = [];
|
|
31
|
+
const matches = matchRoutes(routes, routerContext.location);
|
|
32
|
+
matches == null ? void 0 : matches.forEach((match, index) => {
|
|
33
|
+
if (!index) {
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
const routeId = match.route.id;
|
|
37
|
+
if (routeId) {
|
|
38
|
+
const routeManifest2 = routeAssets[routeId];
|
|
39
|
+
if (routeManifest2) {
|
|
40
|
+
const { assets = [] } = routeManifest2;
|
|
41
|
+
const _cssChunks = assets.filter(
|
|
42
|
+
(asset) => asset == null ? void 0 : asset.endsWith(".css")
|
|
43
|
+
);
|
|
44
|
+
cssChunks.push(..._cssChunks);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
const styleLinks = cssChunks.map((chunk) => {
|
|
49
|
+
return `<link href="${chunk}" rel="stylesheet" />`;
|
|
50
|
+
});
|
|
51
|
+
return `${styleLinks.join("")}`;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
function buildShellBeforeTemplate(beforeAppTemplate, context) {
|
|
56
|
+
const headTemplate = getHeadTemplate(beforeAppTemplate, context);
|
|
57
|
+
return beforeAppTemplate.replace(HEAD_REG_EXP, headTemplate);
|
|
58
|
+
}
|
|
59
|
+
export {
|
|
60
|
+
buildShellBeforeTemplate
|
|
61
|
+
};
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
var __async = (__this, __arguments, generator) => {
|
|
2
|
+
return new Promise((resolve, reject) => {
|
|
3
|
+
var fulfilled = (value) => {
|
|
4
|
+
try {
|
|
5
|
+
step(generator.next(value));
|
|
6
|
+
} catch (e) {
|
|
7
|
+
reject(e);
|
|
8
|
+
}
|
|
9
|
+
};
|
|
10
|
+
var rejected = (value) => {
|
|
11
|
+
try {
|
|
12
|
+
step(generator.throw(value));
|
|
13
|
+
} catch (e) {
|
|
14
|
+
reject(e);
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
|
|
18
|
+
step((generator = generator.apply(__this, __arguments)).next());
|
|
19
|
+
});
|
|
20
|
+
};
|
|
21
|
+
import { createElement } from "react";
|
|
22
|
+
import { run } from "@modern-js/utils/ssr";
|
|
23
|
+
import { PreRender } from "../../react/prerender";
|
|
24
|
+
import { time } from "../time";
|
|
25
|
+
import renderToPipe from "./renderToPipe";
|
|
26
|
+
const render = ({ App, context }) => {
|
|
27
|
+
const { ssrContext } = context;
|
|
28
|
+
if (!ssrContext) {
|
|
29
|
+
throw new Error(
|
|
30
|
+
'The "ssrContext" must not be undefined, but received undefined'
|
|
31
|
+
);
|
|
32
|
+
}
|
|
33
|
+
return run(ssrContext.request.headers, () => __async(void 0, null, function* () {
|
|
34
|
+
const end = time();
|
|
35
|
+
const rootElement = createElement(App, {
|
|
36
|
+
context: Object.assign(context || {}, {
|
|
37
|
+
ssr: true
|
|
38
|
+
})
|
|
39
|
+
});
|
|
40
|
+
const pipe = renderToPipe(rootElement, context, {
|
|
41
|
+
onShellReady() {
|
|
42
|
+
const cacheConfig = PreRender.config();
|
|
43
|
+
if (cacheConfig) {
|
|
44
|
+
ssrContext.cacheConfig = cacheConfig;
|
|
45
|
+
}
|
|
46
|
+
},
|
|
47
|
+
onAllReady() {
|
|
48
|
+
const cost = end();
|
|
49
|
+
ssrContext.logger.debug("App Render To HTML cost = %d ms", cost);
|
|
50
|
+
ssrContext.metrics.emitTimer("app.render.html.cost", cost);
|
|
51
|
+
}
|
|
52
|
+
});
|
|
53
|
+
return pipe;
|
|
54
|
+
}));
|
|
55
|
+
};
|
|
56
|
+
export {
|
|
57
|
+
render
|
|
58
|
+
};
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { createElement } from "react";
|
|
2
|
+
import { PreRender } from "../../react/prerender";
|
|
3
|
+
import { time } from "../time";
|
|
4
|
+
import renderToPipe from "./renderToPipe";
|
|
5
|
+
const render = ({ App, context }) => {
|
|
6
|
+
const { ssrContext } = context;
|
|
7
|
+
if (!ssrContext) {
|
|
8
|
+
throw new Error(
|
|
9
|
+
'The "ssrContext" must not be undefined, but received undefined'
|
|
10
|
+
);
|
|
11
|
+
}
|
|
12
|
+
const end = time();
|
|
13
|
+
const rootElement = createElement(App, {
|
|
14
|
+
context: Object.assign(context || {}, {
|
|
15
|
+
ssr: true
|
|
16
|
+
})
|
|
17
|
+
});
|
|
18
|
+
const pipe = renderToPipe(rootElement, context, {
|
|
19
|
+
onShellReady() {
|
|
20
|
+
const cacheConfig = PreRender.config();
|
|
21
|
+
if (cacheConfig) {
|
|
22
|
+
ssrContext.cacheConfig = cacheConfig;
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
onAllReady() {
|
|
26
|
+
const cost = end();
|
|
27
|
+
ssrContext.logger.debug("App Render To HTML cost = %d ms", cost);
|
|
28
|
+
ssrContext.metrics.emitTimer("app.render.html.cost", cost);
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
return pipe;
|
|
32
|
+
};
|
|
33
|
+
export {
|
|
34
|
+
render
|
|
35
|
+
};
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { ChunkExtractor } from "@loadable/server";
|
|
2
|
+
function getLoadableChunks({
|
|
3
|
+
context,
|
|
4
|
+
jsx
|
|
5
|
+
}) {
|
|
6
|
+
const { loadableStats, entryName } = context.ssrContext;
|
|
7
|
+
if (!loadableStats) {
|
|
8
|
+
return {
|
|
9
|
+
jsx
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
const extractor = new ChunkExtractor({
|
|
13
|
+
stats: loadableStats,
|
|
14
|
+
entrypoints: [entryName]
|
|
15
|
+
});
|
|
16
|
+
const collectedJsx = extractor.collectChunks(jsx);
|
|
17
|
+
return {
|
|
18
|
+
jsx: collectedJsx,
|
|
19
|
+
chunkExtractor: extractor
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
export {
|
|
23
|
+
getLoadableChunks
|
|
24
|
+
};
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __defProps = Object.defineProperties;
|
|
3
|
+
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
|
|
4
|
+
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
7
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
8
|
+
var __spreadValues = (a, b) => {
|
|
9
|
+
for (var prop in b || (b = {}))
|
|
10
|
+
if (__hasOwnProp.call(b, prop))
|
|
11
|
+
__defNormalProp(a, prop, b[prop]);
|
|
12
|
+
if (__getOwnPropSymbols)
|
|
13
|
+
for (var prop of __getOwnPropSymbols(b)) {
|
|
14
|
+
if (__propIsEnum.call(b, prop))
|
|
15
|
+
__defNormalProp(a, prop, b[prop]);
|
|
16
|
+
}
|
|
17
|
+
return a;
|
|
18
|
+
};
|
|
19
|
+
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
|
|
20
|
+
import { Transform } from "stream";
|
|
21
|
+
import { RenderLevel } from "../types";
|
|
22
|
+
import { getTemplates } from "./template";
|
|
23
|
+
function renderToPipe(rootElement, context, options) {
|
|
24
|
+
let isShellStream = true;
|
|
25
|
+
const { ssrContext } = context;
|
|
26
|
+
const forUserPipe = (stream) => {
|
|
27
|
+
return new Promise((resolve) => {
|
|
28
|
+
let renderToPipeableStream;
|
|
29
|
+
try {
|
|
30
|
+
({ renderToPipeableStream } = require("react-dom/server"));
|
|
31
|
+
} catch (e) {
|
|
32
|
+
}
|
|
33
|
+
const { pipe } = renderToPipeableStream(rootElement, __spreadProps(__spreadValues({}, options), {
|
|
34
|
+
onShellReady() {
|
|
35
|
+
var _a;
|
|
36
|
+
const { shellAfter, shellBefore } = getTemplates(
|
|
37
|
+
context,
|
|
38
|
+
RenderLevel.SERVER_RENDER
|
|
39
|
+
);
|
|
40
|
+
(_a = options == null ? void 0 : options.onShellReady) == null ? void 0 : _a.call(options);
|
|
41
|
+
const injectableTransform = new Transform({
|
|
42
|
+
transform(chunk, _encoding, callback) {
|
|
43
|
+
try {
|
|
44
|
+
if (isShellStream) {
|
|
45
|
+
this.push(joinChunk(shellBefore, chunk, shellAfter));
|
|
46
|
+
isShellStream = false;
|
|
47
|
+
} else {
|
|
48
|
+
this.push(chunk);
|
|
49
|
+
}
|
|
50
|
+
callback();
|
|
51
|
+
} catch (e) {
|
|
52
|
+
if (e instanceof Error) {
|
|
53
|
+
callback(e);
|
|
54
|
+
} else {
|
|
55
|
+
callback(new Error("Received unkown error when streaming"));
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
resolve(pipe(injectableTransform).pipe(stream));
|
|
61
|
+
},
|
|
62
|
+
onShellError(error) {
|
|
63
|
+
var _a;
|
|
64
|
+
ssrContext.metrics.emitCounter(
|
|
65
|
+
"app.render.streaming.shell.error",
|
|
66
|
+
1
|
|
67
|
+
);
|
|
68
|
+
const { shellAfter, shellBefore } = getTemplates(
|
|
69
|
+
context,
|
|
70
|
+
RenderLevel.CLIENT_RENDER
|
|
71
|
+
);
|
|
72
|
+
const fallbackHtml = `${shellBefore}${shellAfter}`;
|
|
73
|
+
resolve(fallbackHtml);
|
|
74
|
+
(_a = options == null ? void 0 : options.onShellError) == null ? void 0 : _a.call(options, error);
|
|
75
|
+
},
|
|
76
|
+
onError(error) {
|
|
77
|
+
var _a;
|
|
78
|
+
ssrContext.logger.error(
|
|
79
|
+
"An error occurs during streaming SSR",
|
|
80
|
+
error
|
|
81
|
+
);
|
|
82
|
+
ssrContext.metrics.emitCounter("app.render.streaming.error", 1);
|
|
83
|
+
(_a = options == null ? void 0 : options.onError) == null ? void 0 : _a.call(options, error);
|
|
84
|
+
}
|
|
85
|
+
}));
|
|
86
|
+
});
|
|
87
|
+
};
|
|
88
|
+
return forUserPipe;
|
|
89
|
+
function joinChunk(before = "", chunk, after = "") {
|
|
90
|
+
return `${before}${chunk.toString()}${after}`;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
var renderToPipe_default = renderToPipe;
|
|
94
|
+
export {
|
|
95
|
+
renderToPipe_default as default
|
|
96
|
+
};
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __defProps = Object.defineProperties;
|
|
3
|
+
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
|
|
4
|
+
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
7
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
8
|
+
var __spreadValues = (a, b) => {
|
|
9
|
+
for (var prop in b || (b = {}))
|
|
10
|
+
if (__hasOwnProp.call(b, prop))
|
|
11
|
+
__defNormalProp(a, prop, b[prop]);
|
|
12
|
+
if (__getOwnPropSymbols)
|
|
13
|
+
for (var prop of __getOwnPropSymbols(b)) {
|
|
14
|
+
if (__propIsEnum.call(b, prop))
|
|
15
|
+
__defNormalProp(a, prop, b[prop]);
|
|
16
|
+
}
|
|
17
|
+
return a;
|
|
18
|
+
};
|
|
19
|
+
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
|
|
20
|
+
var __async = (__this, __arguments, generator) => {
|
|
21
|
+
return new Promise((resolve, reject) => {
|
|
22
|
+
var fulfilled = (value) => {
|
|
23
|
+
try {
|
|
24
|
+
step(generator.next(value));
|
|
25
|
+
} catch (e) {
|
|
26
|
+
reject(e);
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
var rejected = (value) => {
|
|
30
|
+
try {
|
|
31
|
+
step(generator.throw(value));
|
|
32
|
+
} catch (e) {
|
|
33
|
+
reject(e);
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
|
|
37
|
+
step((generator = generator.apply(__this, __arguments)).next());
|
|
38
|
+
});
|
|
39
|
+
};
|
|
40
|
+
import { RenderLevel } from "../types";
|
|
41
|
+
import { getTemplates } from "./template";
|
|
42
|
+
function renderToPipe(rootElement, context, options) {
|
|
43
|
+
let isShellStream = true;
|
|
44
|
+
const { ssrContext } = context;
|
|
45
|
+
const forUserPipe = (stream) => __async(this, null, function* () {
|
|
46
|
+
let renderToReadableStream;
|
|
47
|
+
try {
|
|
48
|
+
({ renderToReadableStream } = require("react-dom/server"));
|
|
49
|
+
} catch (e) {
|
|
50
|
+
}
|
|
51
|
+
const { shellAfter, shellBefore } = getTemplates(
|
|
52
|
+
context,
|
|
53
|
+
RenderLevel.SERVER_RENDER
|
|
54
|
+
);
|
|
55
|
+
try {
|
|
56
|
+
const readableOriginal = yield renderToReadableStream(rootElement, __spreadProps(__spreadValues({}, options), {
|
|
57
|
+
onError(error) {
|
|
58
|
+
var _a;
|
|
59
|
+
ssrContext.logger.error(
|
|
60
|
+
"An error occurs during streaming SSR",
|
|
61
|
+
error
|
|
62
|
+
);
|
|
63
|
+
ssrContext.metrics.emitCounter("app.render.streaming.error", 1);
|
|
64
|
+
(_a = options == null ? void 0 : options.onError) == null ? void 0 : _a.call(options, error);
|
|
65
|
+
}
|
|
66
|
+
}));
|
|
67
|
+
const reader = readableOriginal.getReader();
|
|
68
|
+
const injectableStream = new ReadableStream({
|
|
69
|
+
start(controller) {
|
|
70
|
+
function push() {
|
|
71
|
+
return __async(this, null, function* () {
|
|
72
|
+
const { done, value } = yield reader.read();
|
|
73
|
+
if (done) {
|
|
74
|
+
controller.close();
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
if (isShellStream) {
|
|
78
|
+
controller.enqueue(encodeForWebStream(shellBefore));
|
|
79
|
+
controller.enqueue(value);
|
|
80
|
+
controller.enqueue(encodeForWebStream(shellAfter));
|
|
81
|
+
isShellStream = false;
|
|
82
|
+
} else {
|
|
83
|
+
controller.enqueue(value);
|
|
84
|
+
}
|
|
85
|
+
push();
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
push();
|
|
89
|
+
}
|
|
90
|
+
});
|
|
91
|
+
return readableOriginal(injectableStream).readableOriginal(stream);
|
|
92
|
+
} catch (err) {
|
|
93
|
+
ssrContext.metrics.emitCounter("app.render.streaming.shell.error", 1);
|
|
94
|
+
const { shellAfter: shellAfter2, shellBefore: shellBefore2 } = getTemplates(
|
|
95
|
+
context,
|
|
96
|
+
RenderLevel.CLIENT_RENDER
|
|
97
|
+
);
|
|
98
|
+
const fallbackHtml = `${shellBefore2}${shellAfter2}`;
|
|
99
|
+
return fallbackHtml;
|
|
100
|
+
}
|
|
101
|
+
});
|
|
102
|
+
return forUserPipe;
|
|
103
|
+
}
|
|
104
|
+
let encoder;
|
|
105
|
+
function encodeForWebStream(thing) {
|
|
106
|
+
if (!encoder) {
|
|
107
|
+
encoder = new TextEncoder();
|
|
108
|
+
}
|
|
109
|
+
if (typeof thing === "string") {
|
|
110
|
+
return encoder.encode(thing);
|
|
111
|
+
}
|
|
112
|
+
return thing;
|
|
113
|
+
}
|
|
114
|
+
var renderToPipe_worker_default = renderToPipe;
|
|
115
|
+
export {
|
|
116
|
+
renderToPipe_worker_default as default
|
|
117
|
+
};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { ServerStyleSheet } from "styled-components";
|
|
2
|
+
function getStyledComponentCss({ jsx }) {
|
|
3
|
+
const sheet = new ServerStyleSheet();
|
|
4
|
+
const collectedJsx = sheet.collectStyles(jsx);
|
|
5
|
+
return {
|
|
6
|
+
styleSheet: sheet,
|
|
7
|
+
jsx: collectedJsx
|
|
8
|
+
};
|
|
9
|
+
}
|
|
10
|
+
export {
|
|
11
|
+
getStyledComponentCss
|
|
12
|
+
};
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { buildShellAfterTemplate } from "./buildTemplate.after";
|
|
2
|
+
import { buildShellBeforeTemplate } from "./bulidTemplate.before";
|
|
3
|
+
const HTML_SEPARATOR = "<!--<?- html ?>-->";
|
|
4
|
+
const getTemplates = (context, renderLevel) => {
|
|
5
|
+
const { ssrContext } = context;
|
|
6
|
+
const [beforeAppTemplate = "", afterAppHtmlTemplate = ""] = ssrContext.template.split(HTML_SEPARATOR) || [];
|
|
7
|
+
const builtBeforeTemplate = buildShellBeforeTemplate(
|
|
8
|
+
beforeAppTemplate,
|
|
9
|
+
context
|
|
10
|
+
);
|
|
11
|
+
const builtAfterTemplate = buildShellAfterTemplate(afterAppHtmlTemplate, {
|
|
12
|
+
ssrContext,
|
|
13
|
+
renderLevel
|
|
14
|
+
});
|
|
15
|
+
return {
|
|
16
|
+
shellBefore: builtBeforeTemplate,
|
|
17
|
+
shellAfter: builtAfterTemplate
|
|
18
|
+
};
|
|
19
|
+
};
|
|
20
|
+
export {
|
|
21
|
+
getTemplates
|
|
22
|
+
};
|
|
File without changes
|