@modern-js/runtime 2.42.2 → 2.44.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/cli/index.js +2 -3
- package/dist/cjs/ssr/cli/index.js +6 -4
- package/dist/cjs/ssr/index.js +11 -3
- package/dist/cjs/ssr/react/prerender/index.js +1 -0
- package/dist/cjs/ssr/serverRender/{renderToString/type.js → constants.js} +21 -11
- package/dist/cjs/ssr/serverRender/helmet.js +5 -4
- package/dist/cjs/ssr/serverRender/index.js +2 -2
- package/dist/cjs/ssr/serverRender/renderToStream/buildTemplate.after.js +2 -1
- package/dist/cjs/ssr/serverRender/renderToStream/buildTemplate.share.js +1 -1
- package/dist/cjs/ssr/serverRender/renderToStream/bulidTemplate.before.js +37 -10
- package/dist/cjs/ssr/serverRender/renderToStream/index.js +2 -7
- package/dist/cjs/ssr/serverRender/renderToStream/renderToPipe.js +32 -30
- package/dist/cjs/ssr/serverRender/renderToStream/renderToPipe.worker.js +3 -3
- package/dist/cjs/ssr/serverRender/renderToStream/template.js +3 -3
- package/dist/cjs/ssr/serverRender/renderToString/buildHtml.js +6 -12
- package/dist/cjs/ssr/serverRender/renderToString/entry.js +14 -12
- package/dist/cjs/ssr/serverRender/renderToString/index.js +0 -5
- package/dist/cjs/ssr/serverRender/renderToString/loadable.js +2 -6
- package/dist/cjs/ssr/serverRender/types.js +7 -2
- package/dist/cjs/ssr/serverRender/utils.js +13 -11
- package/dist/esm/cli/index.js +2 -3
- package/dist/esm/ssr/cli/index.js +6 -4
- package/dist/esm/ssr/index.js +10 -2
- package/dist/esm/ssr/react/prerender/index.js +1 -0
- package/dist/esm/ssr/serverRender/constants.js +14 -0
- package/dist/esm/ssr/serverRender/helmet.js +5 -4
- package/dist/esm/ssr/serverRender/index.js +2 -2
- package/dist/esm/ssr/serverRender/renderToStream/buildTemplate.after.js +3 -2
- package/dist/esm/ssr/serverRender/renderToStream/buildTemplate.share.js +5 -3
- package/dist/esm/ssr/serverRender/renderToStream/bulidTemplate.before.js +169 -33
- package/dist/esm/ssr/serverRender/renderToStream/index.js +2 -7
- package/dist/esm/ssr/serverRender/renderToStream/renderToPipe.js +34 -30
- package/dist/esm/ssr/serverRender/renderToStream/renderToPipe.worker.js +23 -13
- package/dist/esm/ssr/serverRender/renderToStream/template.js +37 -11
- package/dist/esm/ssr/serverRender/renderToString/buildHtml.js +6 -13
- package/dist/esm/ssr/serverRender/renderToString/entry.js +19 -13
- package/dist/esm/ssr/serverRender/renderToString/index.js +1 -6
- package/dist/esm/ssr/serverRender/renderToString/loadable.js +3 -7
- package/dist/esm/ssr/serverRender/types.js +6 -1
- package/dist/esm/ssr/serverRender/utils.js +12 -7
- package/dist/esm-node/cli/index.js +2 -3
- package/dist/esm-node/ssr/cli/index.js +6 -4
- package/dist/esm-node/ssr/index.js +9 -1
- package/dist/esm-node/ssr/react/prerender/index.js +1 -0
- package/dist/esm-node/ssr/serverRender/constants.js +14 -0
- package/dist/esm-node/ssr/serverRender/helmet.js +5 -4
- package/dist/esm-node/ssr/serverRender/index.js +2 -2
- package/dist/esm-node/ssr/serverRender/renderToStream/buildTemplate.after.js +3 -2
- package/dist/esm-node/ssr/serverRender/renderToStream/buildTemplate.share.js +1 -1
- package/dist/esm-node/ssr/serverRender/renderToStream/bulidTemplate.before.js +38 -11
- package/dist/esm-node/ssr/serverRender/renderToStream/index.js +2 -7
- package/dist/esm-node/ssr/serverRender/renderToStream/renderToPipe.js +32 -30
- package/dist/esm-node/ssr/serverRender/renderToStream/renderToPipe.worker.js +3 -3
- package/dist/esm-node/ssr/serverRender/renderToStream/template.js +3 -3
- package/dist/esm-node/ssr/serverRender/renderToString/buildHtml.js +6 -12
- package/dist/esm-node/ssr/serverRender/renderToString/entry.js +13 -11
- package/dist/esm-node/ssr/serverRender/renderToString/index.js +0 -5
- package/dist/esm-node/ssr/serverRender/renderToString/loadable.js +3 -7
- package/dist/esm-node/ssr/serverRender/types.js +6 -1
- package/dist/esm-node/ssr/serverRender/utils.js +10 -7
- package/dist/types/exports/server.d.ts +1 -0
- package/dist/types/ssr/react/prerender/index.d.ts +4 -0
- package/dist/types/ssr/serverRender/constants.d.ts +6 -0
- package/dist/types/ssr/serverRender/renderToStream/buildTemplate.after.d.ts +1 -1
- package/dist/types/ssr/serverRender/renderToStream/buildTemplate.share.d.ts +2 -2
- package/dist/types/ssr/serverRender/renderToStream/bulidTemplate.before.d.ts +2 -2
- package/dist/types/ssr/serverRender/renderToStream/index.d.ts +1 -1
- package/dist/types/ssr/serverRender/renderToStream/renderToPipe.d.ts +2 -2
- package/dist/types/ssr/serverRender/renderToStream/renderToPipe.worker.d.ts +2 -2
- package/dist/types/ssr/serverRender/renderToStream/template.d.ts +2 -2
- package/dist/types/ssr/serverRender/renderToString/entry.d.ts +1 -2
- package/dist/types/ssr/serverRender/renderToString/loadable.d.ts +1 -2
- package/dist/types/ssr/serverRender/renderToString/styledComponent.d.ts +1 -1
- package/dist/types/ssr/serverRender/types.d.ts +15 -2
- package/dist/types/ssr/serverRender/utils.d.ts +8 -3
- package/package.json +12 -12
- package/dist/esm/ssr/serverRender/renderToString/type.js +0 -9
- package/dist/esm-node/ssr/serverRender/renderToString/type.js +0 -9
- package/dist/types/ssr/serverRender/renderToString/type.d.ts +0 -13
|
@@ -18,24 +18,26 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
18
18
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
19
|
var utils_exports = {};
|
|
20
20
|
__export(utils_exports, {
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
attributesToString: () => attributesToString
|
|
21
|
+
attributesToString: () => attributesToString,
|
|
22
|
+
checkIsNode: () => checkIsNode,
|
|
23
|
+
safeReplace: () => safeReplace
|
|
25
24
|
});
|
|
26
25
|
module.exports = __toCommonJS(utils_exports);
|
|
27
|
-
const CSS_CHUNKS_PLACEHOLDER = "<!--<?- chunksMap.css ?>-->";
|
|
28
|
-
const SSR_DATA_JSON_ID = "__MODERN_SSR_DATA__";
|
|
29
|
-
const ROUTER_DATA_JSON_ID = "__MODERN_ROUTER_DATA__";
|
|
30
26
|
function attributesToString(attributes) {
|
|
31
27
|
return Object.entries(attributes).reduce((str, [key, value]) => {
|
|
32
28
|
return value === void 0 ? str : `${str} ${key}="${value}"`;
|
|
33
29
|
}, "");
|
|
34
30
|
}
|
|
31
|
+
function safeReplace(source, searchValue, replaceValue) {
|
|
32
|
+
return source.replace(searchValue, () => replaceValue);
|
|
33
|
+
}
|
|
34
|
+
function checkIsNode() {
|
|
35
|
+
var _process_release;
|
|
36
|
+
return typeof process !== "undefined" && ((_process_release = process.release) === null || _process_release === void 0 ? void 0 : _process_release.name) === "node";
|
|
37
|
+
}
|
|
35
38
|
// Annotate the CommonJS export names for ESM import in node:
|
|
36
39
|
0 && (module.exports = {
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
attributesToString
|
|
40
|
+
attributesToString,
|
|
41
|
+
checkIsNode,
|
|
42
|
+
safeReplace
|
|
41
43
|
});
|
package/dist/esm/cli/index.js
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { _ as _async_to_generator } from "@swc/helpers/_/_async_to_generator";
|
|
2
2
|
import { _ as _ts_generator } from "@swc/helpers/_/_ts_generator";
|
|
3
|
-
import path from "path";
|
|
4
3
|
import { isReact18, cleanRequireCache } from "@modern-js/utils";
|
|
5
4
|
import { statePlugin } from "../state/cli";
|
|
6
5
|
import { ssrPlugin } from "../ssr/cli";
|
|
@@ -26,8 +25,8 @@ var runtimePlugin = function() {
|
|
|
26
25
|
setup: function(api) {
|
|
27
26
|
return {
|
|
28
27
|
config: function config() {
|
|
29
|
-
var
|
|
30
|
-
process.env.IS_REACT18 = isReact18(
|
|
28
|
+
var appDir = api.useAppContext().appDirectory;
|
|
29
|
+
process.env.IS_REACT18 = isReact18(appDir).toString();
|
|
31
30
|
return {
|
|
32
31
|
runtime: {},
|
|
33
32
|
runtimeByEntries: {},
|
|
@@ -94,11 +94,11 @@ var ssrPlugin = function() {
|
|
|
94
94
|
},
|
|
95
95
|
tools: {
|
|
96
96
|
bundlerChain: function bundlerChain(chain, param) {
|
|
97
|
-
var isServer = param.isServer, isServiceWorker = param.isServiceWorker
|
|
97
|
+
var isServer = param.isServer, isServiceWorker = param.isServiceWorker;
|
|
98
98
|
var userConfig = api.useResolvedConfigContext();
|
|
99
99
|
if (isUseSSRBundle(userConfig) && !isServer && !isServiceWorker && checkUseStringSSR(userConfig)) {
|
|
100
100
|
var LoadableBundlerPlugin = require("./loadable-bundler-plugin.js");
|
|
101
|
-
chain.plugin(
|
|
101
|
+
chain.plugin("loadable").use(LoadableBundlerPlugin, [
|
|
102
102
|
{
|
|
103
103
|
filename: LOADABLE_STATS_FILE
|
|
104
104
|
}
|
|
@@ -146,7 +146,7 @@ var ssrPlugin = function() {
|
|
|
146
146
|
modifyEntryRuntimePlugins: function modifyEntryRuntimePlugins(param) {
|
|
147
147
|
var entrypoint = param.entrypoint, plugins = param.plugins, bundlerConfigs = param.bundlerConfigs;
|
|
148
148
|
if (ssrConfigMap.get(entrypoint.entryName)) {
|
|
149
|
-
var _bundlerConfigs_find_output, _bundlerConfigs_find, _config_server;
|
|
149
|
+
var _bundlerConfigs_find_output, _bundlerConfigs_find, _config_server, _config_server1;
|
|
150
150
|
var chunkLoadingGlobal = bundlerConfigs === null || bundlerConfigs === void 0 ? void 0 : (_bundlerConfigs_find = bundlerConfigs.find(function(config2) {
|
|
151
151
|
return config2.name === "client";
|
|
152
152
|
})) === null || _bundlerConfigs_find === void 0 ? void 0 : (_bundlerConfigs_find_output = _bundlerConfigs_find.output) === null || _bundlerConfigs_find_output === void 0 ? void 0 : _bundlerConfigs_find_output.chunkLoadingGlobal;
|
|
@@ -154,6 +154,7 @@ var ssrPlugin = function() {
|
|
|
154
154
|
var _config_output = config.output, enableInlineScripts = _config_output.enableInlineScripts, enableInlineStyles = _config_output.enableInlineStyles;
|
|
155
155
|
var _config_html = config.html, crossorigin = _config_html.crossorigin, scriptLoading = _config_html.scriptLoading;
|
|
156
156
|
var disablePrerender = typeof ((_config_server = config.server) === null || _config_server === void 0 ? void 0 : _config_server.ssr) === "object" ? Boolean(config.server.ssr.disablePrerender) : false;
|
|
157
|
+
var unsafeHeaders = typeof ((_config_server1 = config.server) === null || _config_server1 === void 0 ? void 0 : _config_server1.ssr) === "object" ? config.server.ssr.unsafeHeaders : void 0;
|
|
157
158
|
plugins.push({
|
|
158
159
|
name: PLUGIN_IDENTIFIER,
|
|
159
160
|
options: JSON.stringify(_object_spread_props(_object_spread({}, ssrConfigMap.get(entrypoint.entryName) || {}), {
|
|
@@ -162,7 +163,8 @@ var ssrPlugin = function() {
|
|
|
162
163
|
chunkLoadingGlobal,
|
|
163
164
|
disablePrerender,
|
|
164
165
|
enableInlineScripts: typeof enableInlineScripts === "function" ? void 0 : enableInlineScripts,
|
|
165
|
-
enableInlineStyles: typeof enableInlineStyles === "function" ? void 0 : enableInlineStyles
|
|
166
|
+
enableInlineStyles: typeof enableInlineStyles === "function" ? void 0 : enableInlineStyles,
|
|
167
|
+
unsafeHeaders
|
|
166
168
|
}))
|
|
167
169
|
});
|
|
168
170
|
}
|
package/dist/esm/ssr/index.js
CHANGED
|
@@ -9,7 +9,7 @@ import { parsedJSONFromElement } from "@modern-js/runtime-utils/parsed";
|
|
|
9
9
|
import { RenderLevel } from "./serverRender/types";
|
|
10
10
|
import { WithCallback } from "./react/withCallback";
|
|
11
11
|
import { formatClient, mockResponse, isReact18 } from "./utils";
|
|
12
|
-
import { ROUTER_DATA_JSON_ID, SSR_DATA_JSON_ID } from "./serverRender/
|
|
12
|
+
import { ROUTER_DATA_JSON_ID, SSR_DATA_JSON_ID } from "./serverRender/constants";
|
|
13
13
|
var ssr = function(config) {
|
|
14
14
|
return {
|
|
15
15
|
name: "@modern-js/plugin-ssr",
|
|
@@ -22,7 +22,7 @@ var ssr = function(config) {
|
|
|
22
22
|
return {
|
|
23
23
|
client: function() {
|
|
24
24
|
var _ref = _async_to_generator(function(param) {
|
|
25
|
-
var App, context, ModernRender, ModernHydrate, _window__SSR_DATA, _window, hydrateContext, callback, renderLevel;
|
|
25
|
+
var App, context, ModernRender, ModernHydrate, _window__SSR_DATA, _window, hydrateContext, ssrContext, _ssrContext_request, initialPathname, currentPathname, errorMsg, callback, renderLevel;
|
|
26
26
|
function stringSSRHydrate() {
|
|
27
27
|
if (renderLevel === RenderLevel.CLIENT_RENDER || renderLevel === RenderLevel.SERVER_PREFETCH) {
|
|
28
28
|
ModernRender(/* @__PURE__ */ _jsx(App, {
|
|
@@ -85,6 +85,14 @@ var ssr = function(config) {
|
|
|
85
85
|
},
|
|
86
86
|
_hydration: true
|
|
87
87
|
});
|
|
88
|
+
ssrContext = hydrateContext.ssrContext;
|
|
89
|
+
_ssrContext_request = ssrContext.request, initialPathname = _ssrContext_request.pathname;
|
|
90
|
+
currentPathname = window.location.pathname;
|
|
91
|
+
if (initialPathname !== currentPathname) {
|
|
92
|
+
errorMsg = "The initial URL ".concat(initialPathname, " and the URL ").concat(currentPathname, " to be hydrated do not match, reload.");
|
|
93
|
+
console.error(errorMsg);
|
|
94
|
+
window.location.reload();
|
|
95
|
+
}
|
|
88
96
|
callback = function() {
|
|
89
97
|
delete hydrateContext._hydration;
|
|
90
98
|
};
|
|
@@ -76,6 +76,7 @@ function factory(Component) {
|
|
|
76
76
|
if (!validate) {
|
|
77
77
|
throw new Error("invalid props, check usage");
|
|
78
78
|
}
|
|
79
|
+
console.error("[Warn] PreRender has been deprecated, please use SSR Cache instead. reference to docs: https://modernjs.dev/guides/advanced-features/ssr.html");
|
|
79
80
|
return createElement(Component, _object_spread({}, newProps));
|
|
80
81
|
}
|
|
81
82
|
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
var HTML_PLACEHOLDER = "<!--<?- html ?>-->";
|
|
2
|
+
var SSR_DATA_PLACEHOLDER = "<!--<?- SSRDataScript ?>-->";
|
|
3
|
+
var CHUNK_JS_PLACEHOLDER = "<!--<?- chunksMap.js ?>-->";
|
|
4
|
+
var CHUNK_CSS_PLACEHOLDER = "<!--<?- chunksMap.css ?>-->";
|
|
5
|
+
var SSR_DATA_JSON_ID = "__MODERN_SSR_DATA__";
|
|
6
|
+
var ROUTER_DATA_JSON_ID = "__MODERN_ROUTER_DATA__";
|
|
7
|
+
export {
|
|
8
|
+
CHUNK_CSS_PLACEHOLDER,
|
|
9
|
+
CHUNK_JS_PLACEHOLDER,
|
|
10
|
+
HTML_PLACEHOLDER,
|
|
11
|
+
ROUTER_DATA_JSON_ID,
|
|
12
|
+
SSR_DATA_JSON_ID,
|
|
13
|
+
SSR_DATA_PLACEHOLDER
|
|
14
|
+
};
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { EOL } from "os";
|
|
2
|
+
import { safeReplace } from "./utils";
|
|
2
3
|
var RE_HTML_ATTR = /<html[^>]*>/;
|
|
3
4
|
var RE_BODY_ATTR = /<body[^>]*>/;
|
|
4
5
|
var RE_LAST_IN_HEAD = /<\/head>/;
|
|
@@ -8,11 +9,11 @@ function helmet(content, helmetData) {
|
|
|
8
9
|
var result = content;
|
|
9
10
|
var bodyAttributes = helmetData.bodyAttributes.toString();
|
|
10
11
|
if (bodyAttributes) {
|
|
11
|
-
result = result
|
|
12
|
+
result = safeReplace(result, RE_BODY_ATTR, "<body ".concat(bodyAttributes, ">"));
|
|
12
13
|
}
|
|
13
14
|
var htmlAttributes = helmetData.htmlAttributes.toString();
|
|
14
15
|
if (htmlAttributes) {
|
|
15
|
-
result = result
|
|
16
|
+
result = safeReplace(result, RE_HTML_ATTR, "<html ".concat(htmlAttributes, ">"));
|
|
16
17
|
}
|
|
17
18
|
var base = helmetData.base.toString();
|
|
18
19
|
var link = helmetData.link.toString();
|
|
@@ -24,7 +25,7 @@ function helmet(content, helmetData) {
|
|
|
24
25
|
var existTitleTag = RE_TITLE.test(content);
|
|
25
26
|
var shouldReplaceTitle = existTitleTag && TEST_TITLE_CONTENT.test(title.trim());
|
|
26
27
|
if (shouldReplaceTitle) {
|
|
27
|
-
result = result
|
|
28
|
+
result = safeReplace(result, RE_TITLE, title);
|
|
28
29
|
}
|
|
29
30
|
var helmetStr = [
|
|
30
31
|
base,
|
|
@@ -37,7 +38,7 @@ function helmet(content, helmetData) {
|
|
|
37
38
|
].reduce(function(pre, cur) {
|
|
38
39
|
return pre + (cur.length > 0 ? " ".concat(cur).concat(EOL) : "");
|
|
39
40
|
}, "");
|
|
40
|
-
return result
|
|
41
|
+
return safeReplace(result, RE_LAST_IN_HEAD, "".concat(helmetStr, "</head>"));
|
|
41
42
|
}
|
|
42
43
|
export {
|
|
43
44
|
helmet as default
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { _ as _async_to_generator } from "@swc/helpers/_/_async_to_generator";
|
|
2
2
|
import { _ as _ts_generator } from "@swc/helpers/_/_ts_generator";
|
|
3
3
|
import { isReact18 } from "../utils";
|
|
4
|
-
import {
|
|
4
|
+
import { CHUNK_CSS_PLACEHOLDER } from "./constants";
|
|
5
5
|
function serverRender(options) {
|
|
6
6
|
return _serverRender.apply(this, arguments);
|
|
7
7
|
}
|
|
@@ -13,7 +13,7 @@ function _serverRender() {
|
|
|
13
13
|
case 0:
|
|
14
14
|
if ((_options_context_ssrContext = options.context.ssrContext) === null || _options_context_ssrContext === void 0 ? void 0 : _options_context_ssrContext.template) {
|
|
15
15
|
;
|
|
16
|
-
options.context.ssrContext.template = (_options_context_ssrContext1 = options.context.ssrContext) === null || _options_context_ssrContext1 === void 0 ? void 0 : _options_context_ssrContext1.template.replace("</head>", "".concat(
|
|
16
|
+
options.context.ssrContext.template = (_options_context_ssrContext1 = options.context.ssrContext) === null || _options_context_ssrContext1 === void 0 ? void 0 : _options_context_ssrContext1.template.replace("</head>", "".concat(CHUNK_CSS_PLACEHOLDER, "</head>"));
|
|
17
17
|
}
|
|
18
18
|
if (!(isReact18() && options.config.mode === "stream"))
|
|
19
19
|
return [
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { _ as _object_spread } from "@swc/helpers/_/_object_spread";
|
|
2
2
|
import { serializeJson } from "@modern-js/runtime-utils/node";
|
|
3
|
-
import { attributesToString } from "../utils";
|
|
3
|
+
import { attributesToString, safeReplace } from "../utils";
|
|
4
|
+
import { SSR_DATA_PLACEHOLDER } from "../constants";
|
|
4
5
|
import { buildTemplate } from "./buildTemplate.share";
|
|
5
6
|
function buildShellAfterTemplate(afterAppTemplate, options) {
|
|
6
7
|
var callbacks = [
|
|
@@ -9,7 +10,7 @@ function buildShellAfterTemplate(afterAppTemplate, options) {
|
|
|
9
10
|
return buildTemplate(afterAppTemplate, callbacks);
|
|
10
11
|
function injectSSRDataScript(template) {
|
|
11
12
|
var ssrDataScript = buildSSRDataScript();
|
|
12
|
-
return template
|
|
13
|
+
return safeReplace(template, SSR_DATA_PLACEHOLDER, ssrDataScript);
|
|
13
14
|
function buildSSRDataScript() {
|
|
14
15
|
var _options_context = options.context, ssrContext = _options_context.ssrContext, initialData = _options_context.initialData, __i18nData__ = _options_context.__i18nData__, renderLevel = options.renderLevel;
|
|
15
16
|
var request = ssrContext.request, enableUnsafeCtx = ssrContext.enableUnsafeCtx, nonce = ssrContext.nonce, tracker = ssrContext.tracker;
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
var HEAD_REG_EXP = /<head(.|\n)*>(.|\n)*<\/head>/;
|
|
2
2
|
function buildTemplate(template, callbacks) {
|
|
3
|
-
return callbacks.reduce(function(
|
|
4
|
-
return
|
|
5
|
-
|
|
3
|
+
return callbacks.reduce(function(promise, buildTemplateCb) {
|
|
4
|
+
return promise.then(function(template2) {
|
|
5
|
+
return buildTemplateCb(template2);
|
|
6
|
+
});
|
|
7
|
+
}, Promise.resolve(template));
|
|
6
8
|
}
|
|
7
9
|
export {
|
|
8
10
|
HEAD_REG_EXP,
|
|
@@ -1,11 +1,56 @@
|
|
|
1
|
+
import { _ as _async_to_generator } from "@swc/helpers/_/_async_to_generator";
|
|
2
|
+
import { _ as _instanceof } from "@swc/helpers/_/_instanceof";
|
|
1
3
|
import { _ as _sliced_to_array } from "@swc/helpers/_/_sliced_to_array";
|
|
2
4
|
import { _ as _to_consumable_array } from "@swc/helpers/_/_to_consumable_array";
|
|
5
|
+
import { _ as _ts_generator } from "@swc/helpers/_/_ts_generator";
|
|
3
6
|
import ReactHelmet from "react-helmet";
|
|
4
7
|
import { matchRoutes } from "@modern-js/runtime-utils/router";
|
|
5
8
|
import helmetReplace from "../helmet";
|
|
6
|
-
import {
|
|
9
|
+
import { CHUNK_CSS_PLACEHOLDER } from "../constants";
|
|
10
|
+
import { checkIsNode, safeReplace } from "../utils";
|
|
7
11
|
import { HEAD_REG_EXP, buildTemplate } from "./buildTemplate.share";
|
|
8
|
-
function
|
|
12
|
+
var readAsset = function() {
|
|
13
|
+
var _ref = _async_to_generator(function(chunk) {
|
|
14
|
+
var fs, path, filepath;
|
|
15
|
+
return _ts_generator(this, function(_state) {
|
|
16
|
+
switch (_state.label) {
|
|
17
|
+
case 0:
|
|
18
|
+
return [
|
|
19
|
+
4,
|
|
20
|
+
import("fs/promises")
|
|
21
|
+
];
|
|
22
|
+
case 1:
|
|
23
|
+
fs = _state.sent();
|
|
24
|
+
return [
|
|
25
|
+
4,
|
|
26
|
+
import("path")
|
|
27
|
+
];
|
|
28
|
+
case 2:
|
|
29
|
+
path = _state.sent();
|
|
30
|
+
filepath = path.join(__dirname, chunk);
|
|
31
|
+
return [
|
|
32
|
+
2,
|
|
33
|
+
fs.readFile(filepath, "utf-8")
|
|
34
|
+
];
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
});
|
|
38
|
+
return function readAsset2(chunk) {
|
|
39
|
+
return _ref.apply(this, arguments);
|
|
40
|
+
};
|
|
41
|
+
}();
|
|
42
|
+
var checkIsInline = function(chunk, enableInline) {
|
|
43
|
+
if (process.env.NODE_ENV === "production") {
|
|
44
|
+
if (_instanceof(enableInline, RegExp)) {
|
|
45
|
+
return enableInline.test(chunk);
|
|
46
|
+
} else {
|
|
47
|
+
return Boolean(enableInline);
|
|
48
|
+
}
|
|
49
|
+
} else {
|
|
50
|
+
return false;
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
function getHeadTemplate(beforeEntryTemplate, context, pluginConfig) {
|
|
9
54
|
var callbacks = [
|
|
10
55
|
function(headTemplate2) {
|
|
11
56
|
var helmetData = ReactHelmet.renderStatic();
|
|
@@ -20,42 +65,133 @@ function getHeadTemplate(beforeEntryTemplate, context) {
|
|
|
20
65
|
}
|
|
21
66
|
return buildTemplate(headTemplate, callbacks);
|
|
22
67
|
function injectCss(headTemplate2) {
|
|
23
|
-
return
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
68
|
+
return _injectCss.apply(this, arguments);
|
|
69
|
+
}
|
|
70
|
+
function _injectCss() {
|
|
71
|
+
_injectCss = _async_to_generator(function(headTemplate2) {
|
|
72
|
+
var css;
|
|
73
|
+
function getCssChunks() {
|
|
74
|
+
return _getCssChunks.apply(this, arguments);
|
|
28
75
|
}
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
76
|
+
function _getCssChunks() {
|
|
77
|
+
_getCssChunks = _async_to_generator(function() {
|
|
78
|
+
var routeManifest, routerContext, routes, routeAssets, cssChunks, matches, enableInlineStyles, styles;
|
|
79
|
+
return _ts_generator(this, function(_state) {
|
|
80
|
+
switch (_state.label) {
|
|
81
|
+
case 0:
|
|
82
|
+
routeManifest = context.routeManifest, routerContext = context.routerContext, routes = context.routes;
|
|
83
|
+
if (!routeManifest || !routerContext || !routes) {
|
|
84
|
+
return [
|
|
85
|
+
2,
|
|
86
|
+
""
|
|
87
|
+
];
|
|
88
|
+
}
|
|
89
|
+
routeAssets = routeManifest.routeAssets;
|
|
90
|
+
cssChunks = [];
|
|
91
|
+
matches = matchRoutes(routes, routerContext.location, routerContext.basename);
|
|
92
|
+
matches === null || matches === void 0 ? void 0 : matches.forEach(function(match, index) {
|
|
93
|
+
if (!index) {
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
var routeId = match.route.id;
|
|
97
|
+
if (routeId) {
|
|
98
|
+
var routeManifest2 = routeAssets[routeId];
|
|
99
|
+
if (routeManifest2) {
|
|
100
|
+
var _cssChunks;
|
|
101
|
+
var _routeManifest_referenceCssAssets = routeManifest2.referenceCssAssets, referenceCssAssets = _routeManifest_referenceCssAssets === void 0 ? [] : _routeManifest_referenceCssAssets;
|
|
102
|
+
var _cssChunks1 = referenceCssAssets.filter(function(asset) {
|
|
103
|
+
return (asset === null || asset === void 0 ? void 0 : asset.endsWith(".css")) && !headTemplate2.includes(asset);
|
|
104
|
+
});
|
|
105
|
+
(_cssChunks = cssChunks).push.apply(_cssChunks, _to_consumable_array(_cssChunks1));
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
});
|
|
109
|
+
enableInlineStyles = pluginConfig.enableInlineStyles;
|
|
110
|
+
return [
|
|
111
|
+
4,
|
|
112
|
+
Promise.all(cssChunks.map(function() {
|
|
113
|
+
var _ref2 = _async_to_generator(function(chunk) {
|
|
114
|
+
var link;
|
|
115
|
+
return _ts_generator(this, function(_state2) {
|
|
116
|
+
link = '<link href="'.concat(chunk, '" rel="stylesheet" />');
|
|
117
|
+
if (checkIsNode() && checkIsInline(chunk, enableInlineStyles)) {
|
|
118
|
+
return [
|
|
119
|
+
2,
|
|
120
|
+
readAsset(chunk).then(function(content) {
|
|
121
|
+
return "<style>".concat(content, "</style>");
|
|
122
|
+
}).catch(function(_) {
|
|
123
|
+
return link;
|
|
124
|
+
})
|
|
125
|
+
];
|
|
126
|
+
} else {
|
|
127
|
+
return [
|
|
128
|
+
2,
|
|
129
|
+
link
|
|
130
|
+
];
|
|
131
|
+
}
|
|
132
|
+
return [
|
|
133
|
+
2
|
|
134
|
+
];
|
|
135
|
+
});
|
|
136
|
+
});
|
|
137
|
+
return function(chunk) {
|
|
138
|
+
return _ref2.apply(this, arguments);
|
|
139
|
+
};
|
|
140
|
+
}()))
|
|
141
|
+
];
|
|
142
|
+
case 1:
|
|
143
|
+
styles = _state.sent();
|
|
144
|
+
return [
|
|
145
|
+
2,
|
|
146
|
+
"".concat(styles.join(""))
|
|
147
|
+
];
|
|
148
|
+
}
|
|
149
|
+
});
|
|
150
|
+
});
|
|
151
|
+
return _getCssChunks.apply(this, arguments);
|
|
152
|
+
}
|
|
153
|
+
return _ts_generator(this, function(_state) {
|
|
154
|
+
switch (_state.label) {
|
|
155
|
+
case 0:
|
|
156
|
+
return [
|
|
157
|
+
4,
|
|
158
|
+
getCssChunks()
|
|
159
|
+
];
|
|
160
|
+
case 1:
|
|
161
|
+
css = _state.sent();
|
|
162
|
+
return [
|
|
163
|
+
2,
|
|
164
|
+
safeReplace(headTemplate2, CHUNK_CSS_PLACEHOLDER, css)
|
|
165
|
+
];
|
|
47
166
|
}
|
|
48
167
|
});
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
});
|
|
52
|
-
return "".concat(styleLinks.join(""));
|
|
53
|
-
}
|
|
168
|
+
});
|
|
169
|
+
return _injectCss.apply(this, arguments);
|
|
54
170
|
}
|
|
55
171
|
}
|
|
56
|
-
function buildShellBeforeTemplate(beforeAppTemplate, context) {
|
|
57
|
-
|
|
58
|
-
|
|
172
|
+
function buildShellBeforeTemplate(beforeAppTemplate, context, pluginConfig) {
|
|
173
|
+
return _buildShellBeforeTemplate.apply(this, arguments);
|
|
174
|
+
}
|
|
175
|
+
function _buildShellBeforeTemplate() {
|
|
176
|
+
_buildShellBeforeTemplate = _async_to_generator(function(beforeAppTemplate, context, pluginConfig) {
|
|
177
|
+
var headTemplate;
|
|
178
|
+
return _ts_generator(this, function(_state) {
|
|
179
|
+
switch (_state.label) {
|
|
180
|
+
case 0:
|
|
181
|
+
return [
|
|
182
|
+
4,
|
|
183
|
+
getHeadTemplate(beforeAppTemplate, context, pluginConfig)
|
|
184
|
+
];
|
|
185
|
+
case 1:
|
|
186
|
+
headTemplate = _state.sent();
|
|
187
|
+
return [
|
|
188
|
+
2,
|
|
189
|
+
beforeAppTemplate.replace(HEAD_REG_EXP, headTemplate)
|
|
190
|
+
];
|
|
191
|
+
}
|
|
192
|
+
});
|
|
193
|
+
});
|
|
194
|
+
return _buildShellBeforeTemplate.apply(this, arguments);
|
|
59
195
|
}
|
|
60
196
|
export {
|
|
61
197
|
buildShellBeforeTemplate
|
|
@@ -3,11 +3,10 @@ import { _ as _ts_generator } from "@swc/helpers/_/_ts_generator";
|
|
|
3
3
|
import { createElement } from "react";
|
|
4
4
|
import { run } from "@modern-js/runtime-utils/node";
|
|
5
5
|
import { time } from "@modern-js/runtime-utils/time";
|
|
6
|
-
import { PreRender } from "../../react/prerender";
|
|
7
6
|
import { SSRErrors, SSRTimings } from "../tracker";
|
|
8
7
|
import renderToPipe from "./renderToPipe";
|
|
9
8
|
var render = function(param) {
|
|
10
|
-
var App = param.App, context = param.context;
|
|
9
|
+
var App = param.App, context = param.context, config = param.config;
|
|
11
10
|
var ssrContext = context.ssrContext;
|
|
12
11
|
if (!ssrContext) {
|
|
13
12
|
throw new Error('The "ssrContext" must not be undefined, but received undefined');
|
|
@@ -22,12 +21,8 @@ var render = function(param) {
|
|
|
22
21
|
})
|
|
23
22
|
});
|
|
24
23
|
tracker = ssrContext.tracker;
|
|
25
|
-
pipe = renderToPipe(rootElement, context, {
|
|
24
|
+
pipe = renderToPipe(rootElement, context, config, {
|
|
26
25
|
onShellReady: function onShellReady() {
|
|
27
|
-
var cacheConfig = PreRender.config();
|
|
28
|
-
if (cacheConfig) {
|
|
29
|
-
ssrContext.cacheConfig = cacheConfig;
|
|
30
|
-
}
|
|
31
26
|
var cost = end();
|
|
32
27
|
tracker.trackTiming(SSRTimings.RENDER_SHELL, cost);
|
|
33
28
|
},
|
|
@@ -10,7 +10,7 @@ var ShellChunkStatus;
|
|
|
10
10
|
ShellChunkStatus2[ShellChunkStatus2["START"] = 0] = "START";
|
|
11
11
|
ShellChunkStatus2[ShellChunkStatus2["FINIESH"] = 1] = "FINIESH";
|
|
12
12
|
})(ShellChunkStatus || (ShellChunkStatus = {}));
|
|
13
|
-
function renderToPipe(rootElement, context, options) {
|
|
13
|
+
function renderToPipe(rootElement, context, pluginConfig, options) {
|
|
14
14
|
var shellChunkStatus = 0;
|
|
15
15
|
var ssrContext = context.ssrContext;
|
|
16
16
|
var chunkVec = [];
|
|
@@ -24,41 +24,45 @@ function renderToPipe(rootElement, context, options) {
|
|
|
24
24
|
var pipe = renderToPipeableStream(rootElement, _object_spread_props(_object_spread({}, options), {
|
|
25
25
|
nonce: ssrContext === null || ssrContext === void 0 ? void 0 : ssrContext.nonce,
|
|
26
26
|
onShellReady: function onShellReady() {
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
27
|
+
getTemplates(context, RenderLevel.SERVER_RENDER, pluginConfig).then(function(param) {
|
|
28
|
+
var shellAfter = param.shellAfter, shellBefore = param.shellBefore;
|
|
29
|
+
var _options_onShellReady;
|
|
30
|
+
options === null || options === void 0 ? void 0 : (_options_onShellReady = options.onShellReady) === null || _options_onShellReady === void 0 ? void 0 : _options_onShellReady.call(options);
|
|
31
|
+
var injectableTransform = new Transform({
|
|
32
|
+
transform: function transform(chunk, _encoding, callback) {
|
|
33
|
+
try {
|
|
34
|
+
if (shellChunkStatus !== 1) {
|
|
35
|
+
chunkVec.push(chunk.toString());
|
|
36
|
+
var concatedChunk = chunkVec.join("");
|
|
37
|
+
if (concatedChunk.endsWith(ESCAPED_SHELL_STREAM_END_MARK)) {
|
|
38
|
+
concatedChunk = concatedChunk.replace(ESCAPED_SHELL_STREAM_END_MARK, "");
|
|
39
|
+
shellChunkStatus = 1;
|
|
40
|
+
this.push("".concat(shellBefore).concat(concatedChunk).concat(shellAfter));
|
|
41
|
+
}
|
|
42
|
+
} else {
|
|
43
|
+
this.push(chunk);
|
|
44
|
+
}
|
|
45
|
+
callback();
|
|
46
|
+
} catch (e) {
|
|
47
|
+
if (_instanceof(e, Error)) {
|
|
48
|
+
callback(e);
|
|
49
|
+
} else {
|
|
50
|
+
callback(new Error("Received unkown error when streaming"));
|
|
40
51
|
}
|
|
41
|
-
} else {
|
|
42
|
-
this.push(chunk);
|
|
43
|
-
}
|
|
44
|
-
callback();
|
|
45
|
-
} catch (e) {
|
|
46
|
-
if (_instanceof(e, Error)) {
|
|
47
|
-
callback(e);
|
|
48
|
-
} else {
|
|
49
|
-
callback(new Error("Received unkown error when streaming"));
|
|
50
52
|
}
|
|
51
53
|
}
|
|
52
|
-
}
|
|
54
|
+
});
|
|
55
|
+
resolve(pipe(injectableTransform).pipe(stream));
|
|
53
56
|
});
|
|
54
|
-
resolve(pipe(injectableTransform).pipe(stream));
|
|
55
57
|
},
|
|
56
58
|
onShellError: function onShellError(error) {
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
59
|
+
getTemplates(context, RenderLevel.CLIENT_RENDER, pluginConfig).then(function(param) {
|
|
60
|
+
var shellAfter = param.shellAfter, shellBefore = param.shellBefore;
|
|
61
|
+
var _options_onShellError;
|
|
62
|
+
var fallbackHtml = "".concat(shellBefore).concat(shellAfter);
|
|
63
|
+
resolve(fallbackHtml);
|
|
64
|
+
options === null || options === void 0 ? void 0 : (_options_onShellError = options.onShellError) === null || _options_onShellError === void 0 ? void 0 : _options_onShellError.call(options, error);
|
|
65
|
+
});
|
|
62
66
|
}
|
|
63
67
|
})).pipe;
|
|
64
68
|
});
|