@modern-js/runtime 2.61.0 → 2.62.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/core/server/requestHandler.js +2 -0
- package/dist/cjs/core/server/stream/afterTemplate.js +9 -5
- package/dist/cjs/core/server/string/ssrData.js +1 -1
- package/dist/cjs/core/server/utils.js +8 -0
- package/dist/cjs/document/Script.js +9 -3
- package/dist/cjs/document/cli/index.js +2 -2
- package/dist/cjs/document/constants.js +6 -0
- package/dist/cjs/router/runtime/DeferredDataScripts.node.js +40 -18
- package/dist/cjs/router/runtime/constants.js +13 -0
- package/dist/cjs/router/runtime/plugin.js +0 -7
- package/dist/cjs/router/runtime/plugin.node.js +4 -3
- package/dist/esm/core/server/requestHandler.js +3 -1
- package/dist/esm/core/server/stream/afterTemplate.js +6 -2
- package/dist/esm/core/server/string/ssrData.js +2 -2
- package/dist/esm/core/server/utils.js +8 -0
- package/dist/esm/document/Script.js +13 -5
- package/dist/esm/document/cli/index.js +4 -4
- package/dist/esm/document/constants.js +4 -0
- package/dist/esm/router/runtime/DeferredDataScripts.node.js +40 -20
- package/dist/esm/router/runtime/constants.js +9 -0
- package/dist/esm/router/runtime/plugin.js +0 -7
- package/dist/esm/router/runtime/plugin.node.js +4 -3
- package/dist/esm-node/core/server/requestHandler.js +3 -1
- package/dist/esm-node/core/server/stream/afterTemplate.js +8 -4
- package/dist/esm-node/core/server/string/ssrData.js +2 -2
- package/dist/esm-node/core/server/utils.js +7 -0
- package/dist/esm-node/document/Script.js +11 -5
- package/dist/esm-node/document/cli/index.js +3 -3
- package/dist/esm-node/document/constants.js +4 -0
- package/dist/esm-node/router/runtime/DeferredDataScripts.node.js +40 -18
- package/dist/esm-node/router/runtime/constants.js +9 -0
- package/dist/esm-node/router/runtime/plugin.js +0 -7
- package/dist/esm-node/router/runtime/plugin.node.js +4 -3
- package/dist/types/core/context/runtime.d.ts +1 -5
- package/dist/types/core/server/stream/afterTemplate.d.ts +1 -1
- package/dist/types/core/server/utils.d.ts +1 -0
- package/dist/types/core/types.d.ts +1 -0
- package/dist/types/document/Script.d.ts +5 -4
- package/dist/types/document/constants.d.ts +2 -0
- package/dist/types/router/runtime/DeferredDataScripts.node.d.ts +1 -0
- package/dist/types/router/runtime/constants.d.ts +34 -0
- package/package.json +15 -12
- package/scripts/gen-static.ts +26 -0
- package/static/modern-inline.js +1 -0
- package/static/modern-run-router-data-fn.js +1 -0
- package/static/modern-run-window-fn.js +1 -0
|
@@ -47,6 +47,7 @@ function createSSRContext(request, options) {
|
|
|
47
47
|
}
|
|
48
48
|
const ssrConfig = (0, import_utils.getSSRConfigByEntry)(entryName, config.ssr, config.ssrByEntries);
|
|
49
49
|
const ssrMode = (0, import_utils.getSSRMode)(ssrConfig);
|
|
50
|
+
const inlineScript = (0, import_utils.getSSRInlineScript)(ssrConfig);
|
|
50
51
|
const loaderFailureMode = typeof ssrConfig === "object" ? ssrConfig.loaderFailureMode : void 0;
|
|
51
52
|
return {
|
|
52
53
|
nonce,
|
|
@@ -79,6 +80,7 @@ function createSSRContext(request, options) {
|
|
|
79
80
|
},
|
|
80
81
|
reporter,
|
|
81
82
|
mode: ssrMode,
|
|
83
|
+
inlineScript,
|
|
82
84
|
onError,
|
|
83
85
|
onTiming,
|
|
84
86
|
loaderFailureMode
|
|
@@ -22,7 +22,8 @@ __export(afterTemplate_exports, {
|
|
|
22
22
|
});
|
|
23
23
|
module.exports = __toCommonJS(afterTemplate_exports);
|
|
24
24
|
var import_node = require("@modern-js/runtime-utils/node");
|
|
25
|
-
var import_constants = require("
|
|
25
|
+
var import_constants = require("../../constants");
|
|
26
|
+
var import_constants2 = require("../constants");
|
|
26
27
|
var import_shared = require("../shared");
|
|
27
28
|
var import_utils = require("../utils");
|
|
28
29
|
function buildShellAfterTemplate(afterAppTemplate, options) {
|
|
@@ -86,10 +87,13 @@ function createReplaceSSRData(options) {
|
|
|
86
87
|
const attrsStr = (0, import_utils.attributesToString)({
|
|
87
88
|
nonce
|
|
88
89
|
});
|
|
89
|
-
const
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
90
|
+
const inlineScript = (0, import_utils.getSSRInlineScript)(ssrConfig);
|
|
91
|
+
const useInlineScript = inlineScript !== false;
|
|
92
|
+
const serializeSSRData = (0, import_node.serializeJson)(ssrData);
|
|
93
|
+
const ssrDataScript = useInlineScript ? `
|
|
94
|
+
<script${attrsStr}>window._SSR_DATA = ${serializeSSRData}</script>
|
|
95
|
+
` : `<script type="application/json" id="${import_constants.SSR_DATA_JSON_ID}">${serializeSSRData}</script>`;
|
|
96
|
+
return (template) => (0, import_utils.safeReplace)(template, import_constants2.SSR_DATA_PLACEHOLDER, ssrDataScript);
|
|
93
97
|
}
|
|
94
98
|
// Annotate the CommonJS export names for ESM import in node:
|
|
95
99
|
0 && (module.exports = {
|
|
@@ -79,7 +79,7 @@ function getSSRData() {
|
|
|
79
79
|
}
|
|
80
80
|
function getSSRDataScripts(ssrData, routerData) {
|
|
81
81
|
const { nonce, ssrConfig } = (0, import_class_private_field_get._)(this, _options);
|
|
82
|
-
const inlineScript =
|
|
82
|
+
const inlineScript = (0, import_utils.getSSRInlineScript)(ssrConfig);
|
|
83
83
|
const useInlineScript = inlineScript !== false;
|
|
84
84
|
const serializeSSRData = (0, import_node.serializeJson)(ssrData);
|
|
85
85
|
const attrsStr = (0, import_utils.attributesToString)({
|
|
@@ -21,6 +21,7 @@ __export(utils_exports, {
|
|
|
21
21
|
attributesToString: () => attributesToString,
|
|
22
22
|
checkIsNode: () => checkIsNode,
|
|
23
23
|
getSSRConfigByEntry: () => getSSRConfigByEntry,
|
|
24
|
+
getSSRInlineScript: () => getSSRInlineScript,
|
|
24
25
|
getSSRMode: () => getSSRMode,
|
|
25
26
|
safeReplace: () => safeReplace,
|
|
26
27
|
serializeErrors: () => serializeErrors
|
|
@@ -75,11 +76,18 @@ function getSSRMode(ssrConfig) {
|
|
|
75
76
|
}
|
|
76
77
|
return (ssrConfig === null || ssrConfig === void 0 ? void 0 : ssrConfig.mode) === "stream" ? "stream" : "string";
|
|
77
78
|
}
|
|
79
|
+
function getSSRInlineScript(ssrConfig) {
|
|
80
|
+
if (typeof ssrConfig === "object") {
|
|
81
|
+
return ssrConfig.inlineScript === void 0 ? true : ssrConfig.inlineScript;
|
|
82
|
+
}
|
|
83
|
+
return true;
|
|
84
|
+
}
|
|
78
85
|
// Annotate the CommonJS export names for ESM import in node:
|
|
79
86
|
0 && (module.exports = {
|
|
80
87
|
attributesToString,
|
|
81
88
|
checkIsNode,
|
|
82
89
|
getSSRConfigByEntry,
|
|
90
|
+
getSSRInlineScript,
|
|
83
91
|
getSSRMode,
|
|
84
92
|
safeReplace,
|
|
85
93
|
serializeErrors
|
|
@@ -22,14 +22,20 @@ __export(Script_exports, {
|
|
|
22
22
|
});
|
|
23
23
|
module.exports = __toCommonJS(Script_exports);
|
|
24
24
|
var import_jsx_runtime = require("react/jsx-runtime");
|
|
25
|
+
var import_server = require("react-dom/server");
|
|
25
26
|
var import_constants = require("./constants");
|
|
26
27
|
function Script(props) {
|
|
27
|
-
const { content } = props;
|
|
28
|
-
const contentStr = content.toString();
|
|
29
|
-
const contentIIFE = encodeURIComponent(`(${contentStr})()`);
|
|
28
|
+
const { content, ...rests } = props;
|
|
29
|
+
const contentStr = content === null || content === void 0 ? void 0 : content.toString();
|
|
30
|
+
const contentIIFE = (contentStr === null || contentStr === void 0 ? void 0 : contentStr.length) ? encodeURIComponent(`(${contentStr})()`) : "";
|
|
31
|
+
const scriptProperties = (0, import_server.renderToString)(/* @__PURE__ */ (0, import_jsx_runtime.jsx)("script", {
|
|
32
|
+
...rests
|
|
33
|
+
}));
|
|
34
|
+
const scriptpPropertiesStr = encodeURIComponent(scriptProperties.replace("<script ", "").replace("></script>", ""));
|
|
30
35
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, {
|
|
31
36
|
children: [
|
|
32
37
|
`${import_constants.DOCUMENT_SCRIPT_PLACEHOLDER_START}`,
|
|
38
|
+
`${import_constants.DOCUMENT_SCRIPT_ATTRIBUTES_START}${scriptpPropertiesStr}${import_constants.DOCUMENT_SCRIPT_ATTRIBUTES_END}`,
|
|
33
39
|
`${contentIIFE}`,
|
|
34
40
|
`${import_constants.DOCUMENT_SCRIPT_PLACEHOLDER_END}`
|
|
35
41
|
]
|
|
@@ -169,9 +169,9 @@ const documentPlugin = () => ({
|
|
|
169
169
|
].join("");
|
|
170
170
|
const titles = htmlWebpackPlugin.tags.headTags.filter((item) => item.tagName === "title").join("").replace("<title>", "").replace("</title>", "") || templateParameters.title;
|
|
171
171
|
if (html.includes(import_constants.DOCUMENT_SCRIPT_PLACEHOLDER_START) && html.includes(import_constants.DOCUMENT_SCRIPT_PLACEHOLDER_END)) {
|
|
172
|
-
const { nonce } = config.security;
|
|
172
|
+
const { nonce } = config.security || {};
|
|
173
173
|
const nonceAttr = nonce ? `nonce=${nonce}` : "";
|
|
174
|
-
html = html.replace(new RegExp(`${import_constants.DOCUMENT_SCRIPT_PLACEHOLDER_START}(.*?)${import_constants.DOCUMENT_SCRIPT_PLACEHOLDER_END}`, "g"), (_scriptStr, $1) => `<script ${nonceAttr}>${decodeURIComponent($
|
|
174
|
+
html = html.replace(new RegExp(`${import_constants.DOCUMENT_SCRIPT_PLACEHOLDER_START}${import_constants.DOCUMENT_SCRIPT_ATTRIBUTES_START}(.*)${import_constants.DOCUMENT_SCRIPT_ATTRIBUTES_END}(.*?)${import_constants.DOCUMENT_SCRIPT_PLACEHOLDER_END}`, "g"), (_scriptStr, $1, $2) => `<script ${decodeURIComponent($1)} ${nonceAttr}>${decodeURIComponent($2)}</script>`);
|
|
175
175
|
}
|
|
176
176
|
if (html.includes(import_constants.DOCUMENT_STYLE_PLACEHOLDER_START) && html.includes(import_constants.DOCUMENT_STYLE_PLACEHOLDER_END)) {
|
|
177
177
|
html = html.replace(new RegExp(`${import_constants.DOCUMENT_STYLE_PLACEHOLDER_START}(.*?)${import_constants.DOCUMENT_STYLE_PLACEHOLDER_END}`, "g"), (_styleStr, $1) => `<style>${decodeURIComponent($1)}</style>`);
|
|
@@ -26,6 +26,8 @@ __export(constants_exports, {
|
|
|
26
26
|
DOCUMENT_LINKS_PLACEHOLDER: () => DOCUMENT_LINKS_PLACEHOLDER,
|
|
27
27
|
DOCUMENT_META_PLACEHOLDER: () => DOCUMENT_META_PLACEHOLDER,
|
|
28
28
|
DOCUMENT_SCRIPTS_PLACEHOLDER: () => DOCUMENT_SCRIPTS_PLACEHOLDER,
|
|
29
|
+
DOCUMENT_SCRIPT_ATTRIBUTES_END: () => DOCUMENT_SCRIPT_ATTRIBUTES_END,
|
|
30
|
+
DOCUMENT_SCRIPT_ATTRIBUTES_START: () => DOCUMENT_SCRIPT_ATTRIBUTES_START,
|
|
29
31
|
DOCUMENT_SCRIPT_PLACEHOLDER_END: () => DOCUMENT_SCRIPT_PLACEHOLDER_END,
|
|
30
32
|
DOCUMENT_SCRIPT_PLACEHOLDER_START: () => DOCUMENT_SCRIPT_PLACEHOLDER_START,
|
|
31
33
|
DOCUMENT_SSRDATASCRIPT_PLACEHOLDER: () => DOCUMENT_SSRDATASCRIPT_PLACEHOLDER,
|
|
@@ -63,6 +65,8 @@ const DOCUMENT_SCRIPTS_PLACEHOLDER = encodeURIComponent("<!-- chunk scripts plac
|
|
|
63
65
|
const DOCUMENT_LINKS_PLACEHOLDER = encodeURIComponent("<!-- chunk links placeholder -->");
|
|
64
66
|
const DOCUMENT_SCRIPT_PLACEHOLDER_START = encodeURIComponent("<!-- script-start -->");
|
|
65
67
|
const DOCUMENT_SCRIPT_PLACEHOLDER_END = encodeURIComponent("<!-- script-end -->");
|
|
68
|
+
const DOCUMENT_SCRIPT_ATTRIBUTES_START = encodeURIComponent("<!-- script-scriptpProperties-start -->");
|
|
69
|
+
const DOCUMENT_SCRIPT_ATTRIBUTES_END = encodeURIComponent("<!-- script-scriptpProperties-end -->");
|
|
66
70
|
const DOCUMENT_STYLE_PLACEHOLDER_START = encodeURIComponent("<!-- style-start -->");
|
|
67
71
|
const DOCUMENT_STYLE_PLACEHOLDER_END = encodeURIComponent("<!-- style-end -->");
|
|
68
72
|
const DOCUMENT_COMMENT_PLACEHOLDER_START = encodeURIComponent("<!-- comment-start -->");
|
|
@@ -82,6 +86,8 @@ const PLACEHOLDER_REPLACER_MAP = {
|
|
|
82
86
|
DOCUMENT_LINKS_PLACEHOLDER,
|
|
83
87
|
DOCUMENT_META_PLACEHOLDER,
|
|
84
88
|
DOCUMENT_SCRIPTS_PLACEHOLDER,
|
|
89
|
+
DOCUMENT_SCRIPT_ATTRIBUTES_END,
|
|
90
|
+
DOCUMENT_SCRIPT_ATTRIBUTES_START,
|
|
85
91
|
DOCUMENT_SCRIPT_PLACEHOLDER_END,
|
|
86
92
|
DOCUMENT_SCRIPT_PLACEHOLDER_START,
|
|
87
93
|
DOCUMENT_SSRDATASCRIPT_PLACEHOLDER,
|
|
@@ -25,10 +25,12 @@ var import_jsx_runtime = require("react/jsx-runtime");
|
|
|
25
25
|
var import_node = require("@modern-js/runtime-utils/node");
|
|
26
26
|
var import_router = require("@modern-js/runtime-utils/router");
|
|
27
27
|
var import_react = require("react");
|
|
28
|
-
var import_constants = require("
|
|
28
|
+
var import_constants = require("../../core/constants");
|
|
29
|
+
var import_constants2 = require("./constants");
|
|
29
30
|
var import_utils = require("./utils");
|
|
30
31
|
const DeferredDataScripts = (props) => {
|
|
31
32
|
const staticContext = props === null || props === void 0 ? void 0 : props.context;
|
|
33
|
+
const inlineScript = props === null || props === void 0 ? void 0 : props.inlineScript;
|
|
32
34
|
const hydratedRef = (0, import_react.useRef)(false);
|
|
33
35
|
(0, import_react.useEffect)(() => {
|
|
34
36
|
hydratedRef.current = true;
|
|
@@ -42,13 +44,11 @@ const DeferredDataScripts = (props) => {
|
|
|
42
44
|
loaderData: staticContext.loaderData,
|
|
43
45
|
errors: (0, import_utils.serializeErrors)(staticContext.errors)
|
|
44
46
|
};
|
|
45
|
-
const initialScript0 =
|
|
46
|
-
const initialScript1 = [
|
|
47
|
-
`_ROUTER_DATA
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
import_constants.mergeLoaderDataStr
|
|
51
|
-
].join("\n");
|
|
47
|
+
const initialScript0 = inlineScript ? "" : `${(0, import_node.serializeJson)(_ROUTER_DATA)}`;
|
|
48
|
+
const initialScript1 = inlineScript ? [
|
|
49
|
+
`_ROUTER_DATA = ${(0, import_node.serializeJson)(_ROUTER_DATA)};`,
|
|
50
|
+
import_constants2.modernInline
|
|
51
|
+
].join("\n") : import_constants2.modernInline;
|
|
52
52
|
const deferredDataScripts = [];
|
|
53
53
|
const initialScripts = Object.entries(activeDeferreds).map(([routeId, deferredData]) => {
|
|
54
54
|
const pendingKeys = new Set(deferredData.pendingKeys);
|
|
@@ -100,10 +100,12 @@ const DeferredDataScripts = (props) => {
|
|
|
100
100
|
});
|
|
101
101
|
return {
|
|
102
102
|
fnName: `mergeLoaderData`,
|
|
103
|
+
fnRun: import_constants2.runWindowFnStr,
|
|
103
104
|
fnArgs: [
|
|
104
105
|
routeId,
|
|
105
106
|
deferredKeyPromiseManifests
|
|
106
|
-
]
|
|
107
|
+
],
|
|
108
|
+
fnScriptSrc: "modern-run-window-fn"
|
|
107
109
|
};
|
|
108
110
|
});
|
|
109
111
|
return [
|
|
@@ -120,8 +122,9 @@ const DeferredDataScripts = (props) => {
|
|
|
120
122
|
children: [
|
|
121
123
|
!hydratedRef.current && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, {
|
|
122
124
|
children: [
|
|
123
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("script", {
|
|
124
|
-
|
|
125
|
+
deferredScripts[0].length !== 0 && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("script", {
|
|
126
|
+
type: "application/json",
|
|
127
|
+
id: import_constants.ROUTER_DATA_JSON_ID,
|
|
125
128
|
nonce: props === null || props === void 0 ? void 0 : props.nonce,
|
|
126
129
|
suppressHydrationWarning: true,
|
|
127
130
|
dangerouslySetInnerHTML: {
|
|
@@ -131,17 +134,21 @@ const DeferredDataScripts = (props) => {
|
|
|
131
134
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("script", {
|
|
132
135
|
async: true,
|
|
133
136
|
nonce: props === null || props === void 0 ? void 0 : props.nonce,
|
|
137
|
+
"data-script-src": "modern-inline",
|
|
134
138
|
suppressHydrationWarning: true,
|
|
135
139
|
dangerouslySetInnerHTML: {
|
|
136
140
|
__html: deferredScripts[1]
|
|
137
141
|
}
|
|
138
142
|
}),
|
|
139
|
-
deferredScripts[2].map(({ fnName, fnArgs }) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)("script", {
|
|
143
|
+
deferredScripts[2].map(({ fnName, fnArgs, fnRun, fnScriptSrc }) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)("script", {
|
|
140
144
|
async: true,
|
|
145
|
+
"data-script-src": fnScriptSrc,
|
|
146
|
+
"data-fn-name": fnName,
|
|
147
|
+
"data-fn-args": JSON.stringify(fnArgs),
|
|
141
148
|
nonce: props === null || props === void 0 ? void 0 : props.nonce,
|
|
142
149
|
suppressHydrationWarning: true,
|
|
143
150
|
dangerouslySetInnerHTML: {
|
|
144
|
-
__html:
|
|
151
|
+
__html: fnRun
|
|
145
152
|
}
|
|
146
153
|
}, fnName))
|
|
147
154
|
]
|
|
@@ -162,9 +169,16 @@ const DeferredDataScript = ({ data, routeId, dataKey, nonce }) => {
|
|
|
162
169
|
children: (data2) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)("script", {
|
|
163
170
|
async: true,
|
|
164
171
|
nonce,
|
|
172
|
+
"data-fn-name": "r",
|
|
173
|
+
"data-script-src": "modern-run-router-data-fn",
|
|
174
|
+
"data-fn-args": `${JSON.stringify([
|
|
175
|
+
routeId,
|
|
176
|
+
dataKey,
|
|
177
|
+
data2
|
|
178
|
+
])}`,
|
|
165
179
|
suppressHydrationWarning: true,
|
|
166
180
|
dangerouslySetInnerHTML: {
|
|
167
|
-
__html:
|
|
181
|
+
__html: import_constants2.runRouterDataFnStr
|
|
168
182
|
}
|
|
169
183
|
})
|
|
170
184
|
}) : null
|
|
@@ -173,13 +187,21 @@ const DeferredDataScript = ({ data, routeId, dataKey, nonce }) => {
|
|
|
173
187
|
const ErrorDeferredDataScript = ({ routeId, dataKey, nonce }) => {
|
|
174
188
|
const error = (0, import_router.useAsyncError)();
|
|
175
189
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("script", {
|
|
190
|
+
"data-fn-name": "r",
|
|
191
|
+
"data-script-src": "modern-run-router-data-fn",
|
|
192
|
+
"data-fn-args": `${JSON.stringify([
|
|
193
|
+
routeId,
|
|
194
|
+
dataKey,
|
|
195
|
+
void 0,
|
|
196
|
+
{
|
|
197
|
+
message: error.message,
|
|
198
|
+
stack: error.stack
|
|
199
|
+
}
|
|
200
|
+
])}`,
|
|
176
201
|
nonce,
|
|
177
202
|
suppressHydrationWarning: true,
|
|
178
203
|
dangerouslySetInnerHTML: {
|
|
179
|
-
__html:
|
|
180
|
-
message: error.message,
|
|
181
|
-
stack: error.stack
|
|
182
|
-
})});`
|
|
204
|
+
__html: import_constants2.runRouterDataFnStr
|
|
183
205
|
}
|
|
184
206
|
});
|
|
185
207
|
};
|
|
@@ -18,20 +18,33 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
18
18
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
19
|
var constants_exports = {};
|
|
20
20
|
__export(constants_exports, {
|
|
21
|
+
initRouterDataAttrs: () => initRouterDataAttrs,
|
|
21
22
|
mergeLoaderDataStr: () => mergeLoaderDataStr,
|
|
23
|
+
modernInline: () => modernInline,
|
|
22
24
|
preResolvedFnStr: () => preResolvedFnStr,
|
|
23
25
|
resolveFnStr: () => resolveFnStr,
|
|
26
|
+
runRouterDataFnStr: () => runRouterDataFnStr,
|
|
27
|
+
runWindowFnStr: () => runWindowFnStr,
|
|
24
28
|
setupFnStr: () => setupFnStr
|
|
25
29
|
});
|
|
26
30
|
module.exports = __toCommonJS(constants_exports);
|
|
31
|
+
var import_constants = require("../../core/constants");
|
|
27
32
|
const setupFnStr = `function s(r,e){_ROUTER_DATA.r=_ROUTER_DATA.r||{},_ROUTER_DATA.r[r]=_ROUTER_DATA.r[r]||{};return new Promise((function(A,R){_ROUTER_DATA.r[r][e]={resolve:A,reject:R}}))};`;
|
|
28
33
|
const resolveFnStr = `function r(e,r,o,A){A?_ROUTER_DATA.r[e][r].reject(A):_ROUTER_DATA.r[e][r].resolve(o)};`;
|
|
29
34
|
const preResolvedFnStr = `function p(e,r){return void 0!==r?Promise.reject(new Error(r.message)):Promise.resolve(e)};`;
|
|
30
35
|
const mergeLoaderDataStr = `function mergeLoaderData(e,n){const r=n.reduce((function(e,{key:n,routerDataFnName:r,routerDataFnArgs:a}){const t=a.map((e=>{if("undefined"!==e&&null!==e)return JSON.parse(e)}));return console.info("args",t),{...e,[n]:_ROUTER_DATA[r](...t)}}),{});Object.assign(_ROUTER_DATA.loaderData[e],r)}`;
|
|
36
|
+
const initRouterDataAttrs = `_ROUTER_DATA.s = ${setupFnStr}_ROUTER_DATA.r = ${resolveFnStr}_ROUTER_DATA.p = ${preResolvedFnStr}${mergeLoaderDataStr}`;
|
|
37
|
+
const modernInline = `function runWindowFn(){window[document.currentScript.getAttribute("data-fn-name")](...JSON.parse(document.currentScript.getAttribute("data-fn-args")))}function runRouterDataFn(){_ROUTER_DATA[document.currentScript.getAttribute("data-fn-name")](...JSON.parse(document.currentScript.getAttribute("data-fn-args")))}function initRouterData(e){var r=document.getElementById(e);if(r)try{_ROUTER_DATA=JSON.parse(r.textContent)}catch(r){console.error("parse ".concat(e," error"),t),_ROUTER_DATA={}}};initRouterData('${import_constants.ROUTER_DATA_JSON_ID}');${initRouterDataAttrs}`;
|
|
38
|
+
const runRouterDataFnStr = `runRouterDataFn();`;
|
|
39
|
+
const runWindowFnStr = `runWindowFn();`;
|
|
31
40
|
// Annotate the CommonJS export names for ESM import in node:
|
|
32
41
|
0 && (module.exports = {
|
|
42
|
+
initRouterDataAttrs,
|
|
33
43
|
mergeLoaderDataStr,
|
|
44
|
+
modernInline,
|
|
34
45
|
preResolvedFnStr,
|
|
35
46
|
resolveFnStr,
|
|
47
|
+
runRouterDataFnStr,
|
|
48
|
+
runWindowFnStr,
|
|
36
49
|
setupFnStr
|
|
37
50
|
});
|
|
@@ -119,13 +119,6 @@ const routerPlugin = (userConfig = {}) => {
|
|
|
119
119
|
};
|
|
120
120
|
return originSubscribe(wrapedListener);
|
|
121
121
|
};
|
|
122
|
-
Object.defineProperty(runtimeContext, "remixRouter", {
|
|
123
|
-
get() {
|
|
124
|
-
return router;
|
|
125
|
-
},
|
|
126
|
-
configurable: true,
|
|
127
|
-
enumerable: true
|
|
128
|
-
});
|
|
129
122
|
return router;
|
|
130
123
|
}, [
|
|
131
124
|
finalRouteConfig,
|
|
@@ -114,8 +114,8 @@ const routerPlugin = (userConfig = {}) => {
|
|
|
114
114
|
throw routerContext.errors[0];
|
|
115
115
|
}
|
|
116
116
|
const router = (0, import_router.createStaticRouter)(routes, routerContext);
|
|
117
|
-
context.remixRouter = router;
|
|
118
117
|
context.routerContext = routerContext;
|
|
118
|
+
context.remixRouter = router;
|
|
119
119
|
context.routes = routes;
|
|
120
120
|
},
|
|
121
121
|
wrapRoot: (App) => {
|
|
@@ -126,7 +126,7 @@ const routerPlugin = (userConfig = {}) => {
|
|
|
126
126
|
return () => {
|
|
127
127
|
const context = (0, import_react.useContext)(import_core.RuntimeReactContext);
|
|
128
128
|
const { remixRouter, routerContext, ssrContext } = context;
|
|
129
|
-
const { nonce, mode } = ssrContext;
|
|
129
|
+
const { nonce, mode, inlineScript } = ssrContext;
|
|
130
130
|
const routerWrapper = /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, {
|
|
131
131
|
children: [
|
|
132
132
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_router.StaticRouterProvider, {
|
|
@@ -138,7 +138,8 @@ const routerPlugin = (userConfig = {}) => {
|
|
|
138
138
|
// So we can inject it only when streaming ssr
|
|
139
139
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_DeferredDataScripts.default, {
|
|
140
140
|
nonce,
|
|
141
|
-
context: routerContext
|
|
141
|
+
context: routerContext,
|
|
142
|
+
inlineScript
|
|
142
143
|
}),
|
|
143
144
|
mode === "stream" && import_common.JSX_SHELL_STREAM_END_MARK
|
|
144
145
|
]
|
|
@@ -12,7 +12,7 @@ import { createLoaderManager } from "../loader/loaderManager";
|
|
|
12
12
|
import { getGlobalRunner } from "../plugin/runner";
|
|
13
13
|
import { createRoot } from "../react";
|
|
14
14
|
import { CHUNK_CSS_PLACEHOLDER } from "./constants";
|
|
15
|
-
import { getSSRConfigByEntry, getSSRMode } from "./utils";
|
|
15
|
+
import { getSSRConfigByEntry, getSSRInlineScript, getSSRMode } from "./utils";
|
|
16
16
|
function createSSRContext(request, options) {
|
|
17
17
|
var config = options.config, loaderContext = options.loaderContext, onError = options.onError, onTiming = options.onTiming, locals = options.locals, resource = options.resource, params = options.params, responseProxy = options.responseProxy, logger = options.logger, metrics = options.metrics, reporter = options.reporter;
|
|
18
18
|
var nonce = config.nonce;
|
|
@@ -31,6 +31,7 @@ function createSSRContext(request, options) {
|
|
|
31
31
|
}
|
|
32
32
|
var ssrConfig = getSSRConfigByEntry(entryName, config.ssr, config.ssrByEntries);
|
|
33
33
|
var ssrMode = getSSRMode(ssrConfig);
|
|
34
|
+
var inlineScript = getSSRInlineScript(ssrConfig);
|
|
34
35
|
var loaderFailureMode = (typeof ssrConfig === "undefined" ? "undefined" : _type_of(ssrConfig)) === "object" ? ssrConfig.loaderFailureMode : void 0;
|
|
35
36
|
return {
|
|
36
37
|
nonce,
|
|
@@ -63,6 +64,7 @@ function createSSRContext(request, options) {
|
|
|
63
64
|
},
|
|
64
65
|
reporter,
|
|
65
66
|
mode: ssrMode,
|
|
67
|
+
inlineScript,
|
|
66
68
|
onError,
|
|
67
69
|
onTiming,
|
|
68
70
|
loaderFailureMode
|
|
@@ -3,9 +3,10 @@ import { _ as _sliced_to_array } from "@swc/helpers/_/_sliced_to_array";
|
|
|
3
3
|
import { _ as _type_of } from "@swc/helpers/_/_type_of";
|
|
4
4
|
import { _ as _ts_generator } from "@swc/helpers/_/_ts_generator";
|
|
5
5
|
import { serializeJson } from "@modern-js/runtime-utils/node";
|
|
6
|
+
import { SSR_DATA_JSON_ID } from "../../constants";
|
|
6
7
|
import { SSR_DATA_PLACEHOLDER } from "../constants";
|
|
7
8
|
import { buildHtml } from "../shared";
|
|
8
|
-
import { attributesToString, safeReplace } from "../utils";
|
|
9
|
+
import { attributesToString, getSSRInlineScript, safeReplace } from "../utils";
|
|
9
10
|
function buildShellAfterTemplate(afterAppTemplate, options) {
|
|
10
11
|
var request = options.request, config = options.config, ssrConfig = options.ssrConfig, runtimeContext = options.runtimeContext, renderLevel = options.renderLevel, entryName = options.entryName;
|
|
11
12
|
var callbacks = [
|
|
@@ -89,7 +90,10 @@ function createReplaceSSRData(options) {
|
|
|
89
90
|
var attrsStr = attributesToString({
|
|
90
91
|
nonce
|
|
91
92
|
});
|
|
92
|
-
var
|
|
93
|
+
var inlineScript = getSSRInlineScript(ssrConfig);
|
|
94
|
+
var useInlineScript = inlineScript !== false;
|
|
95
|
+
var serializeSSRData = serializeJson(ssrData);
|
|
96
|
+
var ssrDataScript = useInlineScript ? "\n <script".concat(attrsStr, ">window._SSR_DATA = ").concat(serializeSSRData, "</script>\n ") : '<script type="application/json" id="'.concat(SSR_DATA_JSON_ID, '">').concat(serializeSSRData, "</script>");
|
|
93
97
|
return function(template) {
|
|
94
98
|
return safeReplace(template, SSR_DATA_PLACEHOLDER, ssrDataScript);
|
|
95
99
|
};
|
|
@@ -8,7 +8,7 @@ import { _ as _sliced_to_array } from "@swc/helpers/_/_sliced_to_array";
|
|
|
8
8
|
import { _ as _type_of } from "@swc/helpers/_/_type_of";
|
|
9
9
|
import { serializeJson } from "@modern-js/runtime-utils/node";
|
|
10
10
|
import { ROUTER_DATA_JSON_ID, SSR_DATA_JSON_ID } from "../../constants";
|
|
11
|
-
import { attributesToString, serializeErrors } from "../utils";
|
|
11
|
+
import { attributesToString, getSSRInlineScript, serializeErrors } from "../utils";
|
|
12
12
|
var _options = /* @__PURE__ */ new WeakMap(), _getSSRData = /* @__PURE__ */ new WeakSet(), _getSSRDataScripts = /* @__PURE__ */ new WeakSet();
|
|
13
13
|
var SSRDataCollector = /* @__PURE__ */ function() {
|
|
14
14
|
"use strict";
|
|
@@ -66,7 +66,7 @@ function getSSRData() {
|
|
|
66
66
|
}
|
|
67
67
|
function getSSRDataScripts(ssrData, routerData) {
|
|
68
68
|
var _$_class_private_field_get = _class_private_field_get(this, _options), nonce = _$_class_private_field_get.nonce, ssrConfig = _$_class_private_field_get.ssrConfig;
|
|
69
|
-
var inlineScript =
|
|
69
|
+
var inlineScript = getSSRInlineScript(ssrConfig);
|
|
70
70
|
var useInlineScript = inlineScript !== false;
|
|
71
71
|
var serializeSSRData = serializeJson(ssrData);
|
|
72
72
|
var attrsStr = attributesToString({
|
|
@@ -2,6 +2,7 @@ import { _ as _instanceof } from "@swc/helpers/_/_instanceof";
|
|
|
2
2
|
import { _ as _object_spread } from "@swc/helpers/_/_object_spread";
|
|
3
3
|
import { _ as _object_spread_props } from "@swc/helpers/_/_object_spread_props";
|
|
4
4
|
import { _ as _sliced_to_array } from "@swc/helpers/_/_sliced_to_array";
|
|
5
|
+
import { _ as _type_of } from "@swc/helpers/_/_type_of";
|
|
5
6
|
import { isRouteErrorResponse } from "@modern-js/runtime-utils/remix-router";
|
|
6
7
|
function attributesToString(attributes) {
|
|
7
8
|
return Object.entries(attributes).reduce(function(str, param) {
|
|
@@ -70,10 +71,17 @@ function getSSRMode(ssrConfig) {
|
|
|
70
71
|
}
|
|
71
72
|
return (ssrConfig === null || ssrConfig === void 0 ? void 0 : ssrConfig.mode) === "stream" ? "stream" : "string";
|
|
72
73
|
}
|
|
74
|
+
function getSSRInlineScript(ssrConfig) {
|
|
75
|
+
if ((typeof ssrConfig === "undefined" ? "undefined" : _type_of(ssrConfig)) === "object") {
|
|
76
|
+
return ssrConfig.inlineScript === void 0 ? true : ssrConfig.inlineScript;
|
|
77
|
+
}
|
|
78
|
+
return true;
|
|
79
|
+
}
|
|
73
80
|
export {
|
|
74
81
|
attributesToString,
|
|
75
82
|
checkIsNode,
|
|
76
83
|
getSSRConfigByEntry,
|
|
84
|
+
getSSRInlineScript,
|
|
77
85
|
getSSRMode,
|
|
78
86
|
safeReplace,
|
|
79
87
|
serializeErrors
|
|
@@ -1,12 +1,20 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { _ as _object_spread } from "@swc/helpers/_/_object_spread";
|
|
2
|
+
import { _ as _object_without_properties } from "@swc/helpers/_/_object_without_properties";
|
|
3
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
4
|
+
import { renderToString } from "react-dom/server";
|
|
5
|
+
import { DOCUMENT_SCRIPT_ATTRIBUTES_END, DOCUMENT_SCRIPT_ATTRIBUTES_START, DOCUMENT_SCRIPT_PLACEHOLDER_END, DOCUMENT_SCRIPT_PLACEHOLDER_START } from "./constants";
|
|
3
6
|
function Script(props) {
|
|
4
|
-
var content = props.content
|
|
5
|
-
|
|
6
|
-
|
|
7
|
+
var content = props.content, rests = _object_without_properties(props, [
|
|
8
|
+
"content"
|
|
9
|
+
]);
|
|
10
|
+
var contentStr = content === null || content === void 0 ? void 0 : content.toString();
|
|
11
|
+
var contentIIFE = (contentStr === null || contentStr === void 0 ? void 0 : contentStr.length) ? encodeURIComponent("(".concat(contentStr, ")()")) : "";
|
|
12
|
+
var scriptProperties = renderToString(/* @__PURE__ */ _jsx("script", _object_spread({}, rests)));
|
|
13
|
+
var scriptpPropertiesStr = encodeURIComponent(scriptProperties.replace("<script ", "").replace("></script>", ""));
|
|
7
14
|
return /* @__PURE__ */ _jsxs(_Fragment, {
|
|
8
15
|
children: [
|
|
9
16
|
"".concat(DOCUMENT_SCRIPT_PLACEHOLDER_START),
|
|
17
|
+
"".concat(DOCUMENT_SCRIPT_ATTRIBUTES_START).concat(scriptpPropertiesStr).concat(DOCUMENT_SCRIPT_ATTRIBUTES_END),
|
|
10
18
|
"".concat(contentIIFE),
|
|
11
19
|
"".concat(DOCUMENT_SCRIPT_PLACEHOLDER_END)
|
|
12
20
|
]
|
|
@@ -8,7 +8,7 @@ import { build } from "esbuild";
|
|
|
8
8
|
import React from "react";
|
|
9
9
|
import ReactDomServer from "react-dom/server";
|
|
10
10
|
import { DocumentContext } from "../DocumentContext";
|
|
11
|
-
import { BODY_PARTICALS_SEPARATOR, DOCUMENT_CHUNKSMAP_PLACEHOLDER, DOCUMENT_COMMENT_PLACEHOLDER_END, DOCUMENT_COMMENT_PLACEHOLDER_START, DOCUMENT_FILE_NAME, DOCUMENT_LINKS_PLACEHOLDER, DOCUMENT_META_PLACEHOLDER, DOCUMENT_SCRIPTS_PLACEHOLDER, DOCUMENT_SCRIPT_PLACEHOLDER_END, DOCUMENT_SCRIPT_PLACEHOLDER_START, DOCUMENT_SSRDATASCRIPT_PLACEHOLDER, DOCUMENT_SSR_PLACEHOLDER, DOCUMENT_STYLE_PLACEHOLDER_END, DOCUMENT_STYLE_PLACEHOLDER_START, DOCUMENT_TITLE_PLACEHOLDER, DOC_EXT, HEAD_PARTICALS_SEPARATOR, HTML_SEPARATOR, PLACEHOLDER_REPLACER_MAP, TOP_PARTICALS_SEPARATOR } from "../constants";
|
|
11
|
+
import { BODY_PARTICALS_SEPARATOR, DOCUMENT_CHUNKSMAP_PLACEHOLDER, DOCUMENT_COMMENT_PLACEHOLDER_END, DOCUMENT_COMMENT_PLACEHOLDER_START, DOCUMENT_FILE_NAME, DOCUMENT_LINKS_PLACEHOLDER, DOCUMENT_META_PLACEHOLDER, DOCUMENT_SCRIPTS_PLACEHOLDER, DOCUMENT_SCRIPT_ATTRIBUTES_END, DOCUMENT_SCRIPT_ATTRIBUTES_START, DOCUMENT_SCRIPT_PLACEHOLDER_END, DOCUMENT_SCRIPT_PLACEHOLDER_START, DOCUMENT_SSRDATASCRIPT_PLACEHOLDER, DOCUMENT_SSR_PLACEHOLDER, DOCUMENT_STYLE_PLACEHOLDER_END, DOCUMENT_STYLE_PLACEHOLDER_START, DOCUMENT_TITLE_PLACEHOLDER, DOC_EXT, HEAD_PARTICALS_SEPARATOR, HTML_SEPARATOR, PLACEHOLDER_REPLACER_MAP, TOP_PARTICALS_SEPARATOR } from "../constants";
|
|
12
12
|
var debug = createDebugger("html_genarate");
|
|
13
13
|
var getDocumenByEntryName = function getDocumenByEntryName2(entrypoints, entryName, fallbackDir) {
|
|
14
14
|
var _entrypoints_find;
|
|
@@ -189,10 +189,10 @@ var documentPlugin = function() {
|
|
|
189
189
|
return item.tagName === "title";
|
|
190
190
|
}).join("").replace("<title>", "").replace("</title>", "") || templateParameters.title;
|
|
191
191
|
if (html.includes(DOCUMENT_SCRIPT_PLACEHOLDER_START) && html.includes(DOCUMENT_SCRIPT_PLACEHOLDER_END)) {
|
|
192
|
-
nonce = config.security.nonce;
|
|
192
|
+
nonce = (config.security || {}).nonce;
|
|
193
193
|
nonceAttr = nonce ? "nonce=".concat(nonce) : "";
|
|
194
|
-
html = html.replace(new RegExp("".concat(DOCUMENT_SCRIPT_PLACEHOLDER_START, "(.*?)").concat(DOCUMENT_SCRIPT_PLACEHOLDER_END), "g"), function(_scriptStr, $1) {
|
|
195
|
-
return "<script ".concat(nonceAttr, ">").concat(decodeURIComponent($
|
|
194
|
+
html = html.replace(new RegExp("".concat(DOCUMENT_SCRIPT_PLACEHOLDER_START).concat(DOCUMENT_SCRIPT_ATTRIBUTES_START, "(.*)").concat(DOCUMENT_SCRIPT_ATTRIBUTES_END, "(.*?)").concat(DOCUMENT_SCRIPT_PLACEHOLDER_END), "g"), function(_scriptStr, $1, $2) {
|
|
195
|
+
return "<script ".concat(decodeURIComponent($1), " ").concat(nonceAttr, ">").concat(decodeURIComponent($2), "</script>");
|
|
196
196
|
});
|
|
197
197
|
}
|
|
198
198
|
if (html.includes(DOCUMENT_STYLE_PLACEHOLDER_START) && html.includes(DOCUMENT_STYLE_PLACEHOLDER_END)) {
|
|
@@ -21,6 +21,8 @@ var DOCUMENT_SCRIPTS_PLACEHOLDER = encodeURIComponent("<!-- chunk scripts placeh
|
|
|
21
21
|
var DOCUMENT_LINKS_PLACEHOLDER = encodeURIComponent("<!-- chunk links placeholder -->");
|
|
22
22
|
var DOCUMENT_SCRIPT_PLACEHOLDER_START = encodeURIComponent("<!-- script-start -->");
|
|
23
23
|
var DOCUMENT_SCRIPT_PLACEHOLDER_END = encodeURIComponent("<!-- script-end -->");
|
|
24
|
+
var DOCUMENT_SCRIPT_ATTRIBUTES_START = encodeURIComponent("<!-- script-scriptpProperties-start -->");
|
|
25
|
+
var DOCUMENT_SCRIPT_ATTRIBUTES_END = encodeURIComponent("<!-- script-scriptpProperties-end -->");
|
|
24
26
|
var DOCUMENT_STYLE_PLACEHOLDER_START = encodeURIComponent("<!-- style-start -->");
|
|
25
27
|
var DOCUMENT_STYLE_PLACEHOLDER_END = encodeURIComponent("<!-- style-end -->");
|
|
26
28
|
var DOCUMENT_COMMENT_PLACEHOLDER_START = encodeURIComponent("<!-- comment-start -->");
|
|
@@ -36,6 +38,8 @@ export {
|
|
|
36
38
|
DOCUMENT_LINKS_PLACEHOLDER,
|
|
37
39
|
DOCUMENT_META_PLACEHOLDER,
|
|
38
40
|
DOCUMENT_SCRIPTS_PLACEHOLDER,
|
|
41
|
+
DOCUMENT_SCRIPT_ATTRIBUTES_END,
|
|
42
|
+
DOCUMENT_SCRIPT_ATTRIBUTES_START,
|
|
39
43
|
DOCUMENT_SCRIPT_PLACEHOLDER_END,
|
|
40
44
|
DOCUMENT_SCRIPT_PLACEHOLDER_START,
|
|
41
45
|
DOCUMENT_SSRDATASCRIPT_PLACEHOLDER,
|