@modern-js/runtime 2.61.0 → 2.62.1

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.
Files changed (46) hide show
  1. package/dist/cjs/core/server/requestHandler.js +2 -0
  2. package/dist/cjs/core/server/stream/afterTemplate.js +9 -5
  3. package/dist/cjs/core/server/string/ssrData.js +1 -1
  4. package/dist/cjs/core/server/utils.js +8 -0
  5. package/dist/cjs/document/Script.js +9 -3
  6. package/dist/cjs/document/cli/index.js +2 -2
  7. package/dist/cjs/document/constants.js +6 -0
  8. package/dist/cjs/router/runtime/DeferredDataScripts.node.js +40 -18
  9. package/dist/cjs/router/runtime/constants.js +13 -0
  10. package/dist/cjs/router/runtime/plugin.js +0 -7
  11. package/dist/cjs/router/runtime/plugin.node.js +4 -3
  12. package/dist/esm/core/server/requestHandler.js +3 -1
  13. package/dist/esm/core/server/stream/afterTemplate.js +6 -2
  14. package/dist/esm/core/server/string/ssrData.js +2 -2
  15. package/dist/esm/core/server/utils.js +8 -0
  16. package/dist/esm/document/Script.js +13 -5
  17. package/dist/esm/document/cli/index.js +4 -4
  18. package/dist/esm/document/constants.js +4 -0
  19. package/dist/esm/router/runtime/DeferredDataScripts.node.js +40 -20
  20. package/dist/esm/router/runtime/constants.js +9 -0
  21. package/dist/esm/router/runtime/plugin.js +0 -7
  22. package/dist/esm/router/runtime/plugin.node.js +4 -3
  23. package/dist/esm-node/core/server/requestHandler.js +3 -1
  24. package/dist/esm-node/core/server/stream/afterTemplate.js +8 -4
  25. package/dist/esm-node/core/server/string/ssrData.js +2 -2
  26. package/dist/esm-node/core/server/utils.js +7 -0
  27. package/dist/esm-node/document/Script.js +11 -5
  28. package/dist/esm-node/document/cli/index.js +3 -3
  29. package/dist/esm-node/document/constants.js +4 -0
  30. package/dist/esm-node/router/runtime/DeferredDataScripts.node.js +40 -18
  31. package/dist/esm-node/router/runtime/constants.js +9 -0
  32. package/dist/esm-node/router/runtime/plugin.js +0 -7
  33. package/dist/esm-node/router/runtime/plugin.node.js +4 -3
  34. package/dist/types/core/context/runtime.d.ts +1 -5
  35. package/dist/types/core/server/stream/afterTemplate.d.ts +1 -1
  36. package/dist/types/core/server/utils.d.ts +1 -0
  37. package/dist/types/core/types.d.ts +1 -0
  38. package/dist/types/document/Script.d.ts +5 -4
  39. package/dist/types/document/constants.d.ts +2 -0
  40. package/dist/types/router/runtime/DeferredDataScripts.node.d.ts +1 -0
  41. package/dist/types/router/runtime/constants.d.ts +34 -0
  42. package/package.json +15 -12
  43. package/scripts/gen-static.ts +26 -0
  44. package/static/modern-inline.js +1 -0
  45. package/static/modern-run-router-data-fn.js +1 -0
  46. 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("../constants");
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 ssrDataScript = `
90
- <script${attrsStr}>window._SSR_DATA = ${(0, import_node.serializeJson)(ssrData)}</script>
91
- `;
92
- return (template) => (0, import_utils.safeReplace)(template, import_constants.SSR_DATA_PLACEHOLDER, ssrDataScript);
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 = typeof ssrConfig === "boolean" ? true : (ssrConfig === null || ssrConfig === void 0 ? void 0 : ssrConfig.inlineScript) !== false;
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($1)}</script>`);
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("./constants");
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 = `_ROUTER_DATA = ${(0, import_node.serializeJson)(_ROUTER_DATA)};`;
46
- const initialScript1 = [
47
- `_ROUTER_DATA.s = ${import_constants.setupFnStr}`,
48
- `_ROUTER_DATA.r = ${import_constants.resolveFnStr}`,
49
- `_ROUTER_DATA.p = ${import_constants.preResolvedFnStr}`,
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
- async: true,
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: `${fnName}(${fnArgs.map((argv) => `${JSON.stringify(argv)}`).join(",")})`
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: `_ROUTER_DATA.r(${JSON.stringify(routeId)}, ${JSON.stringify(dataKey)}, ${(0, import_node.serializeJson)(data2)});`
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: `_ROUTER_DATA.r(${JSON.stringify(routeId)}, ${JSON.stringify(dataKey)}, ${void 0}, ${(0, import_node.serializeJson)({
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 ssrDataScript = "\n <script".concat(attrsStr, ">window._SSR_DATA = ").concat(serializeJson(ssrData), "</script>\n ");
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 = typeof ssrConfig === "boolean" ? true : (ssrConfig === null || ssrConfig === void 0 ? void 0 : ssrConfig.inlineScript) !== false;
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 { jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
- import { DOCUMENT_SCRIPT_PLACEHOLDER_END, DOCUMENT_SCRIPT_PLACEHOLDER_START } from "./constants";
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
- var contentStr = content.toString();
6
- var contentIIFE = encodeURIComponent("(".concat(contentStr, ")()"));
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($1), "</script>");
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,