@modern-js/runtime 2.63.0 → 2.63.2

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 (29) hide show
  1. package/dist/cjs/cli/template.js +1 -1
  2. package/dist/cjs/core/server/requestHandler.js +2 -3
  3. package/dist/cjs/core/server/stream/afterTemplate.js +3 -6
  4. package/dist/cjs/core/server/string/index.js +2 -1
  5. package/dist/cjs/core/server/string/ssrData.js +5 -7
  6. package/dist/cjs/core/server/utils.js +0 -8
  7. package/dist/cjs/router/runtime/DeferredDataScripts.node.js +4 -4
  8. package/dist/cjs/router/runtime/plugin.node.js +6 -4
  9. package/dist/esm/cli/template.js +1 -1
  10. package/dist/esm/core/server/requestHandler.js +3 -4
  11. package/dist/esm/core/server/stream/afterTemplate.js +4 -5
  12. package/dist/esm/core/server/string/index.js +2 -1
  13. package/dist/esm/core/server/string/ssrData.js +4 -6
  14. package/dist/esm/core/server/utils.js +0 -8
  15. package/dist/esm/router/runtime/DeferredDataScripts.node.js +4 -4
  16. package/dist/esm/router/runtime/plugin.node.js +7 -5
  17. package/dist/esm-node/cli/template.js +1 -1
  18. package/dist/esm-node/core/server/requestHandler.js +3 -4
  19. package/dist/esm-node/core/server/stream/afterTemplate.js +4 -7
  20. package/dist/esm-node/core/server/string/index.js +2 -1
  21. package/dist/esm-node/core/server/string/ssrData.js +6 -8
  22. package/dist/esm-node/core/server/utils.js +0 -7
  23. package/dist/esm-node/router/runtime/DeferredDataScripts.node.js +4 -4
  24. package/dist/esm-node/router/runtime/plugin.node.js +6 -4
  25. package/dist/types/core/server/string/ssrData.d.ts +1 -0
  26. package/dist/types/core/server/utils.d.ts +0 -1
  27. package/dist/types/core/types.d.ts +1 -1
  28. package/dist/types/router/runtime/DeferredDataScripts.node.d.ts +1 -1
  29. package/package.json +12 -12
@@ -89,7 +89,7 @@ const runtimeGlobalContext = ({ srcDirectory, internalSrcAlias, metaName, entry,
89
89
  return `import { setGlobalContext } from '@${metaName}/runtime/context'
90
90
 
91
91
  import App from '${// We need to get the path of App.tsx here, but the entry is `src/entry.tsx`
92
- (0, import_utils.formatImportPath)(customEntry ? entry.replace("entry.tsx", "App").replace(srcDirectory, internalSrcAlias) : entry.replace(srcDirectory, internalSrcAlias).replace(".tsx", ""))}';
92
+ (0, import_utils.formatImportPath)(customEntry ? entry.replace(/entry\.[tj]sx/, "App").replace(srcDirectory, internalSrcAlias) : entry.replace(srcDirectory, internalSrcAlias).replace(/\.[tj]sx/, ""))}';
93
93
 
94
94
  setGlobalContext({
95
95
  App,
@@ -31,7 +31,7 @@ var import_constants = require("./constants");
31
31
  var import_utils = require("./utils");
32
32
  function createSSRContext(request, options) {
33
33
  const { config, loaderContext, onError, onTiming, locals, resource, params, responseProxy, logger, metrics, reporter } = options;
34
- const { nonce } = config;
34
+ const { nonce, useJsonScript } = config;
35
35
  const { entryName, route } = resource;
36
36
  const { headers } = request;
37
37
  const cookie = headers.get("cookie") || "";
@@ -47,10 +47,10 @@ 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);
51
50
  const loaderFailureMode = typeof ssrConfig === "object" ? ssrConfig.loaderFailureMode : void 0;
52
51
  return {
53
52
  nonce,
53
+ useJsonScript,
54
54
  loaderContext,
55
55
  redirection: {},
56
56
  htmlModifiers: [],
@@ -80,7 +80,6 @@ function createSSRContext(request, options) {
80
80
  },
81
81
  reporter,
82
82
  mode: ssrMode,
83
- inlineScript,
84
83
  onError,
85
84
  onTiming,
86
85
  loaderFailureMode
@@ -33,6 +33,7 @@ function buildShellAfterTemplate(afterAppTemplate, options) {
33
33
  request,
34
34
  ssrConfig,
35
35
  nonce: config.nonce,
36
+ useJsonScript: config.useJsonScript,
36
37
  runtimeContext,
37
38
  renderLevel
38
39
  }),
@@ -57,7 +58,7 @@ function buildShellAfterTemplate(afterAppTemplate, options) {
57
58
  return (0, import_shared.buildHtml)(afterAppTemplate, callbacks);
58
59
  }
59
60
  function createReplaceSSRData(options) {
60
- const { runtimeContext, nonce, renderLevel, ssrConfig } = options;
61
+ const { runtimeContext, nonce, renderLevel, useJsonScript, ssrConfig } = options;
61
62
  const { request, reporter } = runtimeContext.ssrContext;
62
63
  const headers = typeof ssrConfig === "object" && ssrConfig.unsafeHeaders ? Object.fromEntries(Object.entries(request.headers).filter(([key, _]) => {
63
64
  var _ssrConfig_unsafeHeaders_map, _ssrConfig_unsafeHeaders;
@@ -87,12 +88,8 @@ function createReplaceSSRData(options) {
87
88
  const attrsStr = (0, import_utils.attributesToString)({
88
89
  nonce
89
90
  });
90
- const inlineScript = (0, import_utils.getSSRInlineScript)(ssrConfig);
91
- const useInlineScript = inlineScript !== false;
92
91
  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>`;
92
+ const ssrDataScript = useJsonScript ? `<script type="application/json" id="${import_constants.SSR_DATA_JSON_ID}">${serializeSSRData}</script>` : `<script${attrsStr}>window._SSR_DATA = ${serializeSSRData}</script>`;
96
93
  return (template) => (0, import_utils.safeReplace)(template, import_constants2.SSR_DATA_PLACEHOLDER, ssrDataScript);
97
94
  }
98
95
  // Annotate the CommonJS export names for ESM import in node:
@@ -91,7 +91,8 @@ const renderString = async (request, serverRoot, options) => {
91
91
  ssrContext: runtimeContext.ssrContext,
92
92
  chunkSet,
93
93
  routerContext,
94
- nonce: config.nonce
94
+ nonce: config.nonce,
95
+ useJsonScript: config.useJsonScript
95
96
  })
96
97
  ];
97
98
  const rootElement = (0, import_wrapper.wrapRuntimeContextProvider)(serverRoot, Object.assign(runtimeContext, {
@@ -78,19 +78,17 @@ function getSSRData() {
78
78
  };
79
79
  }
80
80
  function getSSRDataScripts(ssrData, routerData) {
81
- const { nonce, ssrConfig } = (0, import_class_private_field_get._)(this, _options);
82
- const inlineScript = (0, import_utils.getSSRInlineScript)(ssrConfig);
83
- const useInlineScript = inlineScript !== false;
81
+ const { nonce, useJsonScript = false } = (0, import_class_private_field_get._)(this, _options);
84
82
  const serializeSSRData = (0, import_node.serializeJson)(ssrData);
85
83
  const attrsStr = (0, import_utils.attributesToString)({
86
84
  nonce
87
85
  });
88
- let ssrDataScripts = useInlineScript ? `<script${attrsStr}>window._SSR_DATA = ${serializeSSRData}</script>` : `<script type="application/json" id="${import_constants.SSR_DATA_JSON_ID}">${serializeSSRData}</script>`;
86
+ let ssrDataScripts = useJsonScript ? `<script type="application/json" id="${import_constants.SSR_DATA_JSON_ID}">${serializeSSRData}</script>` : `<script${attrsStr}>window._SSR_DATA = ${serializeSSRData}</script>`;
89
87
  if (routerData) {
90
88
  const serializedRouterData = (0, import_node.serializeJson)(routerData);
91
- ssrDataScripts += useInlineScript ? `
92
- <script${attrsStr}>window._ROUTER_DATA = ${serializedRouterData}</script>` : `
93
- <script type="application/json" id="${import_constants.ROUTER_DATA_JSON_ID}">${serializedRouterData}</script>`;
89
+ ssrDataScripts += useJsonScript ? `
90
+ <script type="application/json" id="${import_constants.ROUTER_DATA_JSON_ID}">${serializedRouterData}</script>` : `
91
+ <script${attrsStr}>window._ROUTER_DATA = ${serializedRouterData}</script>`;
94
92
  }
95
93
  return ssrDataScripts;
96
94
  }
@@ -21,7 +21,6 @@ __export(utils_exports, {
21
21
  attributesToString: () => attributesToString,
22
22
  checkIsNode: () => checkIsNode,
23
23
  getSSRConfigByEntry: () => getSSRConfigByEntry,
24
- getSSRInlineScript: () => getSSRInlineScript,
25
24
  getSSRMode: () => getSSRMode,
26
25
  safeReplace: () => safeReplace,
27
26
  serializeErrors: () => serializeErrors
@@ -76,18 +75,11 @@ function getSSRMode(ssrConfig) {
76
75
  }
77
76
  return (ssrConfig === null || ssrConfig === void 0 ? void 0 : ssrConfig.mode) === "stream" ? "stream" : "string";
78
77
  }
79
- function getSSRInlineScript(ssrConfig) {
80
- if (typeof ssrConfig === "object") {
81
- return ssrConfig.inlineScript === void 0 ? true : ssrConfig.inlineScript;
82
- }
83
- return true;
84
- }
85
78
  // Annotate the CommonJS export names for ESM import in node:
86
79
  0 && (module.exports = {
87
80
  attributesToString,
88
81
  checkIsNode,
89
82
  getSSRConfigByEntry,
90
- getSSRInlineScript,
91
83
  getSSRMode,
92
84
  safeReplace,
93
85
  serializeErrors
@@ -30,7 +30,7 @@ var import_constants2 = require("./constants");
30
30
  var import_utils = require("./utils");
31
31
  const DeferredDataScripts = (props) => {
32
32
  const staticContext = props === null || props === void 0 ? void 0 : props.context;
33
- const inlineScript = props === null || props === void 0 ? void 0 : props.inlineScript;
33
+ const useJsonScript = props === null || props === void 0 ? void 0 : props.useJsonScript;
34
34
  const hydratedRef = (0, import_react.useRef)(false);
35
35
  (0, import_react.useEffect)(() => {
36
36
  hydratedRef.current = true;
@@ -44,11 +44,11 @@ const DeferredDataScripts = (props) => {
44
44
  loaderData: staticContext.loaderData,
45
45
  errors: (0, import_utils.serializeErrors)(staticContext.errors)
46
46
  };
47
- const initialScript0 = inlineScript ? "" : `${(0, import_node.serializeJson)(_ROUTER_DATA)}`;
48
- const initialScript1 = inlineScript ? [
47
+ const initialScript0 = useJsonScript ? `${(0, import_node.serializeJson)(_ROUTER_DATA)}` : "";
48
+ const initialScript1 = useJsonScript ? import_constants2.modernInline : [
49
49
  `_ROUTER_DATA = ${(0, import_node.serializeJson)(_ROUTER_DATA)};`,
50
50
  import_constants2.modernInline
51
- ].join("\n") : import_constants2.modernInline;
51
+ ].join("\n");
52
52
  const deferredDataScripts = [];
53
53
  const initialScripts = Object.entries(activeDeferreds).map(([routeId, deferredData]) => {
54
54
  const pendingKeys = new Set(deferredData.pendingKeys);
@@ -109,9 +109,11 @@ const routerPlugin = (userConfig = {}) => {
109
109
  if (routerContext instanceof Response) {
110
110
  return interrupt(routerContext);
111
111
  }
112
- if (routerContext.statusCode >= 500 && routerContext.statusCode < 600 && loaderFailureMode === "clientRender") {
112
+ if (routerContext.statusCode >= 500 && routerContext.statusCode < 600 && // TODO: if loaderFailureMode is not 'errroBoundary', error log will not be printed.
113
+ loaderFailureMode === "clientRender") {
113
114
  routerContext.statusCode = 200;
114
- throw routerContext.errors[0];
115
+ const errors = Object.values(routerContext.errors);
116
+ throw errors[0];
115
117
  }
116
118
  const router = (0, import_router.createStaticRouter)(routes, routerContext);
117
119
  context.routerContext = routerContext;
@@ -126,7 +128,7 @@ const routerPlugin = (userConfig = {}) => {
126
128
  return () => {
127
129
  const context = (0, import_react.useContext)(import_core.RuntimeReactContext);
128
130
  const { remixRouter, routerContext, ssrContext } = context;
129
- const { nonce, mode, inlineScript } = ssrContext;
131
+ const { nonce, mode, useJsonScript } = ssrContext;
130
132
  const routerWrapper = /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, {
131
133
  children: [
132
134
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_router.StaticRouterProvider, {
@@ -139,7 +141,7 @@ const routerPlugin = (userConfig = {}) => {
139
141
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_DeferredDataScripts.default, {
140
142
  nonce,
141
143
  context: routerContext,
142
- inlineScript
144
+ useJsonScript
143
145
  }),
144
146
  mode === "stream" && import_common.JSX_SHELL_STREAM_END_MARK
145
147
  ]
@@ -44,7 +44,7 @@ var runtimeRegister = function(param) {
44
44
  };
45
45
  var runtimeGlobalContext = function(param) {
46
46
  var srcDirectory = param.srcDirectory, internalSrcAlias = param.internalSrcAlias, metaName = param.metaName, entry = param.entry, customEntry = param.customEntry;
47
- return "import { setGlobalContext } from '@".concat(metaName, "/runtime/context'\n\nimport App from '").concat(formatImportPath(customEntry ? entry.replace("entry.tsx", "App").replace(srcDirectory, internalSrcAlias) : entry.replace(srcDirectory, internalSrcAlias).replace(".tsx", "")), "';\n\nsetGlobalContext({\n App,\n});");
47
+ return "import { setGlobalContext } from '@".concat(metaName, "/runtime/context'\n\nimport App from '").concat(formatImportPath(customEntry ? entry.replace(/entry\.[tj]sx/, "App").replace(srcDirectory, internalSrcAlias) : entry.replace(srcDirectory, internalSrcAlias).replace(/\.[tj]sx/, "")), "';\n\nsetGlobalContext({\n App,\n});");
48
48
  };
49
49
  export {
50
50
  index,
@@ -12,10 +12,10 @@ 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, getSSRInlineScript, getSSRMode } from "./utils";
15
+ import { getSSRConfigByEntry, 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
- var nonce = config.nonce;
18
+ var nonce = config.nonce, useJsonScript = config.useJsonScript;
19
19
  var entryName = resource.entryName, route = resource.route;
20
20
  var headers = request.headers;
21
21
  var cookie = headers.get("cookie") || "";
@@ -31,10 +31,10 @@ 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);
35
34
  var loaderFailureMode = (typeof ssrConfig === "undefined" ? "undefined" : _type_of(ssrConfig)) === "object" ? ssrConfig.loaderFailureMode : void 0;
36
35
  return {
37
36
  nonce,
37
+ useJsonScript,
38
38
  loaderContext,
39
39
  redirection: {},
40
40
  htmlModifiers: [],
@@ -64,7 +64,6 @@ function createSSRContext(request, options) {
64
64
  },
65
65
  reporter,
66
66
  mode: ssrMode,
67
- inlineScript,
68
67
  onError,
69
68
  onTiming,
70
69
  loaderFailureMode
@@ -6,7 +6,7 @@ import { serializeJson } from "@modern-js/runtime-utils/node";
6
6
  import { SSR_DATA_JSON_ID } from "../../constants";
7
7
  import { SSR_DATA_PLACEHOLDER } from "../constants";
8
8
  import { buildHtml } from "../shared";
9
- import { attributesToString, getSSRInlineScript, safeReplace } from "../utils";
9
+ import { attributesToString, safeReplace } from "../utils";
10
10
  function buildShellAfterTemplate(afterAppTemplate, options) {
11
11
  var request = options.request, config = options.config, ssrConfig = options.ssrConfig, runtimeContext = options.runtimeContext, renderLevel = options.renderLevel, entryName = options.entryName;
12
12
  var callbacks = [
@@ -14,6 +14,7 @@ function buildShellAfterTemplate(afterAppTemplate, options) {
14
14
  request,
15
15
  ssrConfig,
16
16
  nonce: config.nonce,
17
+ useJsonScript: config.useJsonScript,
17
18
  runtimeContext,
18
19
  renderLevel
19
20
  }),
@@ -57,7 +58,7 @@ function buildShellAfterTemplate(afterAppTemplate, options) {
57
58
  return buildHtml(afterAppTemplate, callbacks);
58
59
  }
59
60
  function createReplaceSSRData(options) {
60
- var runtimeContext = options.runtimeContext, nonce = options.nonce, renderLevel = options.renderLevel, ssrConfig = options.ssrConfig;
61
+ var runtimeContext = options.runtimeContext, nonce = options.nonce, renderLevel = options.renderLevel, useJsonScript = options.useJsonScript, ssrConfig = options.ssrConfig;
61
62
  var _runtimeContext_ssrContext = runtimeContext.ssrContext, request = _runtimeContext_ssrContext.request, reporter = _runtimeContext_ssrContext.reporter;
62
63
  var headers = (typeof ssrConfig === "undefined" ? "undefined" : _type_of(ssrConfig)) === "object" && ssrConfig.unsafeHeaders ? Object.fromEntries(Object.entries(request.headers).filter(function(param) {
63
64
  var _param = _sliced_to_array(param, 2), key = _param[0], _ = _param[1];
@@ -90,10 +91,8 @@ function createReplaceSSRData(options) {
90
91
  var attrsStr = attributesToString({
91
92
  nonce
92
93
  });
93
- var inlineScript = getSSRInlineScript(ssrConfig);
94
- var useInlineScript = inlineScript !== false;
95
94
  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>");
95
+ var ssrDataScript = useJsonScript ? '<script type="application/json" id="'.concat(SSR_DATA_JSON_ID, '">').concat(serializeSSRData, "</script>") : "<script".concat(attrsStr, ">window._SSR_DATA = ").concat(serializeSSRData, "</script>");
97
96
  return function(template) {
98
97
  return safeReplace(template, SSR_DATA_PLACEHOLDER, ssrDataScript);
99
98
  };
@@ -90,7 +90,8 @@ var renderString = function() {
90
90
  ssrContext: runtimeContext.ssrContext,
91
91
  chunkSet,
92
92
  routerContext,
93
- nonce: config.nonce
93
+ nonce: config.nonce,
94
+ useJsonScript: config.useJsonScript
94
95
  })
95
96
  ];
96
97
  rootElement = wrapRuntimeContextProvider(serverRoot, Object.assign(runtimeContext, {
@@ -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, getSSRInlineScript, serializeErrors } from "../utils";
11
+ import { attributesToString, 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";
@@ -65,17 +65,15 @@ function getSSRData() {
65
65
  };
66
66
  }
67
67
  function getSSRDataScripts(ssrData, routerData) {
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 = getSSRInlineScript(ssrConfig);
70
- var useInlineScript = inlineScript !== false;
68
+ var _$_class_private_field_get = _class_private_field_get(this, _options), nonce = _$_class_private_field_get.nonce, _class_private_field_get_useJsonScript = _$_class_private_field_get.useJsonScript, useJsonScript = _class_private_field_get_useJsonScript === void 0 ? false : _class_private_field_get_useJsonScript;
71
69
  var serializeSSRData = serializeJson(ssrData);
72
70
  var attrsStr = attributesToString({
73
71
  nonce
74
72
  });
75
- var ssrDataScripts = useInlineScript ? "<script".concat(attrsStr, ">window._SSR_DATA = ").concat(serializeSSRData, "</script>") : '<script type="application/json" id="'.concat(SSR_DATA_JSON_ID, '">').concat(serializeSSRData, "</script>");
73
+ var ssrDataScripts = useJsonScript ? '<script type="application/json" id="'.concat(SSR_DATA_JSON_ID, '">').concat(serializeSSRData, "</script>") : "<script".concat(attrsStr, ">window._SSR_DATA = ").concat(serializeSSRData, "</script>");
76
74
  if (routerData) {
77
75
  var serializedRouterData = serializeJson(routerData);
78
- ssrDataScripts += useInlineScript ? "\n<script".concat(attrsStr, ">window._ROUTER_DATA = ").concat(serializedRouterData, "</script>") : '\n<script type="application/json" id="'.concat(ROUTER_DATA_JSON_ID, '">').concat(serializedRouterData, "</script>");
76
+ ssrDataScripts += useJsonScript ? '\n<script type="application/json" id="'.concat(ROUTER_DATA_JSON_ID, '">').concat(serializedRouterData, "</script>") : "\n<script".concat(attrsStr, ">window._ROUTER_DATA = ").concat(serializedRouterData, "</script>");
79
77
  }
80
78
  return ssrDataScripts;
81
79
  }
@@ -2,7 +2,6 @@ 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";
6
5
  import { isRouteErrorResponse } from "@modern-js/runtime-utils/remix-router";
7
6
  function attributesToString(attributes) {
8
7
  return Object.entries(attributes).reduce(function(str, param) {
@@ -71,17 +70,10 @@ function getSSRMode(ssrConfig) {
71
70
  }
72
71
  return (ssrConfig === null || ssrConfig === void 0 ? void 0 : ssrConfig.mode) === "stream" ? "stream" : "string";
73
72
  }
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
- }
80
73
  export {
81
74
  attributesToString,
82
75
  checkIsNode,
83
76
  getSSRConfigByEntry,
84
- getSSRInlineScript,
85
77
  getSSRMode,
86
78
  safeReplace,
87
79
  serializeErrors
@@ -8,7 +8,7 @@ import { modernInline, runRouterDataFnStr, runWindowFnStr } from "./constants";
8
8
  import { serializeErrors } from "./utils";
9
9
  var DeferredDataScripts = function(props) {
10
10
  var staticContext = props === null || props === void 0 ? void 0 : props.context;
11
- var inlineScript = props === null || props === void 0 ? void 0 : props.inlineScript;
11
+ var useJsonScript = props === null || props === void 0 ? void 0 : props.useJsonScript;
12
12
  var hydratedRef = useRef(false);
13
13
  useEffect(function() {
14
14
  hydratedRef.current = true;
@@ -22,11 +22,11 @@ var DeferredDataScripts = function(props) {
22
22
  loaderData: staticContext.loaderData,
23
23
  errors: serializeErrors(staticContext.errors)
24
24
  };
25
- var initialScript0 = inlineScript ? "" : "".concat(serializeJson(_ROUTER_DATA));
26
- var initialScript1 = inlineScript ? [
25
+ var initialScript0 = useJsonScript ? "".concat(serializeJson(_ROUTER_DATA)) : "";
26
+ var initialScript1 = useJsonScript ? modernInline : [
27
27
  "_ROUTER_DATA = ".concat(serializeJson(_ROUTER_DATA), ";"),
28
28
  modernInline
29
- ].join("\n") : modernInline;
29
+ ].join("\n");
30
30
  var deferredDataScripts = [];
31
31
  var initialScripts = Object.entries(activeDeferreds).map(function(param) {
32
32
  var _param = _sliced_to_array(param, 2), routeId = _param[0], deferredData = _param[1];
@@ -40,7 +40,7 @@ var routerPlugin = function() {
40
40
  return {
41
41
  beforeRender: function beforeRender(context, interrupt) {
42
42
  return _async_to_generator(function() {
43
- var _context_ssrContext, _context_ssrContext_onTiming, _context_ssrContext1, pluginConfig, _merge, _merge_basename, basename, routesConfig, createRoutes, _context_ssrContext2, request, ssrMode, nonce, _context_ssrContext_loaderFailureMode, loaderFailureMode, baseUrl, _basename, reporter, requestContext, runner, routes, query, remixRequest, end, routerContext, cost, router;
43
+ var _context_ssrContext, _context_ssrContext_onTiming, _context_ssrContext1, pluginConfig, _merge, _merge_basename, basename, routesConfig, createRoutes, _context_ssrContext2, request, ssrMode, nonce, _context_ssrContext_loaderFailureMode, loaderFailureMode, baseUrl, _basename, reporter, requestContext, runner, routes, query, remixRequest, end, routerContext, cost, errors, router;
44
44
  return _ts_generator(this, function(_state) {
45
45
  switch (_state.label) {
46
46
  case 0:
@@ -98,9 +98,11 @@ var routerPlugin = function() {
98
98
  interrupt(routerContext)
99
99
  ];
100
100
  }
101
- if (routerContext.statusCode >= 500 && routerContext.statusCode < 600 && loaderFailureMode === "clientRender") {
101
+ if (routerContext.statusCode >= 500 && routerContext.statusCode < 600 && // TODO: if loaderFailureMode is not 'errroBoundary', error log will not be printed.
102
+ loaderFailureMode === "clientRender") {
102
103
  routerContext.statusCode = 200;
103
- throw routerContext.errors[0];
104
+ errors = Object.values(routerContext.errors);
105
+ throw errors[0];
104
106
  }
105
107
  router = createStaticRouter(routes, routerContext);
106
108
  context.routerContext = routerContext;
@@ -121,7 +123,7 @@ var routerPlugin = function() {
121
123
  return function() {
122
124
  var context = useContext(RuntimeReactContext);
123
125
  var remixRouter = context.remixRouter, routerContext = context.routerContext, ssrContext = context.ssrContext;
124
- var nonce = ssrContext.nonce, mode = ssrContext.mode, inlineScript = ssrContext.inlineScript;
126
+ var nonce = ssrContext.nonce, mode = ssrContext.mode, useJsonScript = ssrContext.useJsonScript;
125
127
  var routerWrapper = /* @__PURE__ */ _jsxs(_Fragment, {
126
128
  children: [
127
129
  /* @__PURE__ */ _jsx(StaticRouterProvider, {
@@ -134,7 +136,7 @@ var routerPlugin = function() {
134
136
  /* @__PURE__ */ _jsx(DeferredDataScripts, {
135
137
  nonce,
136
138
  context: routerContext,
137
- inlineScript
139
+ useJsonScript
138
140
  }),
139
141
  mode === "stream" && JSX_SHELL_STREAM_END_MARK
140
142
  ]
@@ -53,7 +53,7 @@ const runtimeGlobalContext = ({ srcDirectory, internalSrcAlias, metaName, entry,
53
53
  return `import { setGlobalContext } from '@${metaName}/runtime/context'
54
54
 
55
55
  import App from '${// We need to get the path of App.tsx here, but the entry is `src/entry.tsx`
56
- formatImportPath(customEntry ? entry.replace("entry.tsx", "App").replace(srcDirectory, internalSrcAlias) : entry.replace(srcDirectory, internalSrcAlias).replace(".tsx", ""))}';
56
+ formatImportPath(customEntry ? entry.replace(/entry\.[tj]sx/, "App").replace(srcDirectory, internalSrcAlias) : entry.replace(srcDirectory, internalSrcAlias).replace(/\.[tj]sx/, ""))}';
57
57
 
58
58
  setGlobalContext({
59
59
  App,
@@ -5,10 +5,10 @@ import { createLoaderManager } from "../loader/loaderManager";
5
5
  import { getGlobalRunner } from "../plugin/runner";
6
6
  import { createRoot } from "../react";
7
7
  import { CHUNK_CSS_PLACEHOLDER } from "./constants";
8
- import { getSSRConfigByEntry, getSSRInlineScript, getSSRMode } from "./utils";
8
+ import { getSSRConfigByEntry, getSSRMode } from "./utils";
9
9
  function createSSRContext(request, options) {
10
10
  const { config, loaderContext, onError, onTiming, locals, resource, params, responseProxy, logger, metrics, reporter } = options;
11
- const { nonce } = config;
11
+ const { nonce, useJsonScript } = config;
12
12
  const { entryName, route } = resource;
13
13
  const { headers } = request;
14
14
  const cookie = headers.get("cookie") || "";
@@ -24,10 +24,10 @@ function createSSRContext(request, options) {
24
24
  }
25
25
  const ssrConfig = getSSRConfigByEntry(entryName, config.ssr, config.ssrByEntries);
26
26
  const ssrMode = getSSRMode(ssrConfig);
27
- const inlineScript = getSSRInlineScript(ssrConfig);
28
27
  const loaderFailureMode = typeof ssrConfig === "object" ? ssrConfig.loaderFailureMode : void 0;
29
28
  return {
30
29
  nonce,
30
+ useJsonScript,
31
31
  loaderContext,
32
32
  redirection: {},
33
33
  htmlModifiers: [],
@@ -57,7 +57,6 @@ function createSSRContext(request, options) {
57
57
  },
58
58
  reporter,
59
59
  mode: ssrMode,
60
- inlineScript,
61
60
  onError,
62
61
  onTiming,
63
62
  loaderFailureMode
@@ -2,7 +2,7 @@ import { serializeJson } from "@modern-js/runtime-utils/node";
2
2
  import { SSR_DATA_JSON_ID } from "../../constants";
3
3
  import { SSR_DATA_PLACEHOLDER } from "../constants";
4
4
  import { buildHtml } from "../shared";
5
- import { attributesToString, getSSRInlineScript, safeReplace } from "../utils";
5
+ import { attributesToString, safeReplace } from "../utils";
6
6
  function buildShellAfterTemplate(afterAppTemplate, options) {
7
7
  const { request, config, ssrConfig, runtimeContext, renderLevel, entryName } = options;
8
8
  const callbacks = [
@@ -10,6 +10,7 @@ function buildShellAfterTemplate(afterAppTemplate, options) {
10
10
  request,
11
11
  ssrConfig,
12
12
  nonce: config.nonce,
13
+ useJsonScript: config.useJsonScript,
13
14
  runtimeContext,
14
15
  renderLevel
15
16
  }),
@@ -34,7 +35,7 @@ function buildShellAfterTemplate(afterAppTemplate, options) {
34
35
  return buildHtml(afterAppTemplate, callbacks);
35
36
  }
36
37
  function createReplaceSSRData(options) {
37
- const { runtimeContext, nonce, renderLevel, ssrConfig } = options;
38
+ const { runtimeContext, nonce, renderLevel, useJsonScript, ssrConfig } = options;
38
39
  const { request, reporter } = runtimeContext.ssrContext;
39
40
  const headers = typeof ssrConfig === "object" && ssrConfig.unsafeHeaders ? Object.fromEntries(Object.entries(request.headers).filter(([key, _]) => {
40
41
  var _ssrConfig_unsafeHeaders_map, _ssrConfig_unsafeHeaders;
@@ -64,12 +65,8 @@ function createReplaceSSRData(options) {
64
65
  const attrsStr = attributesToString({
65
66
  nonce
66
67
  });
67
- const inlineScript = getSSRInlineScript(ssrConfig);
68
- const useInlineScript = inlineScript !== false;
69
68
  const serializeSSRData = serializeJson(ssrData);
70
- const ssrDataScript = useInlineScript ? `
71
- <script${attrsStr}>window._SSR_DATA = ${serializeSSRData}</script>
72
- ` : `<script type="application/json" id="${SSR_DATA_JSON_ID}">${serializeSSRData}</script>`;
69
+ const ssrDataScript = useJsonScript ? `<script type="application/json" id="${SSR_DATA_JSON_ID}">${serializeSSRData}</script>` : `<script${attrsStr}>window._SSR_DATA = ${serializeSSRData}</script>`;
73
70
  return (template) => safeReplace(template, SSR_DATA_PLACEHOLDER, ssrDataScript);
74
71
  }
75
72
  export {
@@ -58,7 +58,8 @@ const renderString = async (request, serverRoot, options) => {
58
58
  ssrContext: runtimeContext.ssrContext,
59
59
  chunkSet,
60
60
  routerContext,
61
- nonce: config.nonce
61
+ nonce: config.nonce,
62
+ useJsonScript: config.useJsonScript
62
63
  })
63
64
  ];
64
65
  const rootElement = wrapRuntimeContextProvider(serverRoot, Object.assign(runtimeContext, {
@@ -5,7 +5,7 @@ import { _ as _class_private_method_get } from "@swc/helpers/_/_class_private_me
5
5
  import { _ as _class_private_method_init } from "@swc/helpers/_/_class_private_method_init";
6
6
  import { serializeJson } from "@modern-js/runtime-utils/node";
7
7
  import { ROUTER_DATA_JSON_ID, SSR_DATA_JSON_ID } from "../../constants";
8
- import { attributesToString, getSSRInlineScript, serializeErrors } from "../utils";
8
+ import { attributesToString, serializeErrors } from "../utils";
9
9
  var _options = /* @__PURE__ */ new WeakMap(), _getSSRData = /* @__PURE__ */ new WeakSet(), _getSSRDataScripts = /* @__PURE__ */ new WeakSet();
10
10
  class SSRDataCollector {
11
11
  effect() {
@@ -55,19 +55,17 @@ function getSSRData() {
55
55
  };
56
56
  }
57
57
  function getSSRDataScripts(ssrData, routerData) {
58
- const { nonce, ssrConfig } = _class_private_field_get(this, _options);
59
- const inlineScript = getSSRInlineScript(ssrConfig);
60
- const useInlineScript = inlineScript !== false;
58
+ const { nonce, useJsonScript = false } = _class_private_field_get(this, _options);
61
59
  const serializeSSRData = serializeJson(ssrData);
62
60
  const attrsStr = attributesToString({
63
61
  nonce
64
62
  });
65
- let ssrDataScripts = useInlineScript ? `<script${attrsStr}>window._SSR_DATA = ${serializeSSRData}</script>` : `<script type="application/json" id="${SSR_DATA_JSON_ID}">${serializeSSRData}</script>`;
63
+ let ssrDataScripts = useJsonScript ? `<script type="application/json" id="${SSR_DATA_JSON_ID}">${serializeSSRData}</script>` : `<script${attrsStr}>window._SSR_DATA = ${serializeSSRData}</script>`;
66
64
  if (routerData) {
67
65
  const serializedRouterData = serializeJson(routerData);
68
- ssrDataScripts += useInlineScript ? `
69
- <script${attrsStr}>window._ROUTER_DATA = ${serializedRouterData}</script>` : `
70
- <script type="application/json" id="${ROUTER_DATA_JSON_ID}">${serializedRouterData}</script>`;
66
+ ssrDataScripts += useJsonScript ? `
67
+ <script type="application/json" id="${ROUTER_DATA_JSON_ID}">${serializedRouterData}</script>` : `
68
+ <script${attrsStr}>window._ROUTER_DATA = ${serializedRouterData}</script>`;
71
69
  }
72
70
  return ssrDataScripts;
73
71
  }
@@ -47,17 +47,10 @@ function getSSRMode(ssrConfig) {
47
47
  }
48
48
  return (ssrConfig === null || ssrConfig === void 0 ? void 0 : ssrConfig.mode) === "stream" ? "stream" : "string";
49
49
  }
50
- function getSSRInlineScript(ssrConfig) {
51
- if (typeof ssrConfig === "object") {
52
- return ssrConfig.inlineScript === void 0 ? true : ssrConfig.inlineScript;
53
- }
54
- return true;
55
- }
56
50
  export {
57
51
  attributesToString,
58
52
  checkIsNode,
59
53
  getSSRConfigByEntry,
60
- getSSRInlineScript,
61
54
  getSSRMode,
62
55
  safeReplace,
63
56
  serializeErrors
@@ -7,7 +7,7 @@ import { modernInline, runRouterDataFnStr, runWindowFnStr } from "./constants";
7
7
  import { serializeErrors } from "./utils";
8
8
  const DeferredDataScripts = (props) => {
9
9
  const staticContext = props === null || props === void 0 ? void 0 : props.context;
10
- const inlineScript = props === null || props === void 0 ? void 0 : props.inlineScript;
10
+ const useJsonScript = props === null || props === void 0 ? void 0 : props.useJsonScript;
11
11
  const hydratedRef = useRef(false);
12
12
  useEffect(() => {
13
13
  hydratedRef.current = true;
@@ -21,11 +21,11 @@ const DeferredDataScripts = (props) => {
21
21
  loaderData: staticContext.loaderData,
22
22
  errors: serializeErrors(staticContext.errors)
23
23
  };
24
- const initialScript0 = inlineScript ? "" : `${serializeJson(_ROUTER_DATA)}`;
25
- const initialScript1 = inlineScript ? [
24
+ const initialScript0 = useJsonScript ? `${serializeJson(_ROUTER_DATA)}` : "";
25
+ const initialScript1 = useJsonScript ? modernInline : [
26
26
  `_ROUTER_DATA = ${serializeJson(_ROUTER_DATA)};`,
27
27
  modernInline
28
- ].join("\n") : modernInline;
28
+ ].join("\n");
29
29
  const deferredDataScripts = [];
30
30
  const initialScripts = Object.entries(activeDeferreds).map(([routeId, deferredData]) => {
31
31
  const pendingKeys = new Set(deferredData.pendingKeys);
@@ -75,9 +75,11 @@ const routerPlugin = (userConfig = {}) => {
75
75
  if (routerContext instanceof Response) {
76
76
  return interrupt(routerContext);
77
77
  }
78
- if (routerContext.statusCode >= 500 && routerContext.statusCode < 600 && loaderFailureMode === "clientRender") {
78
+ if (routerContext.statusCode >= 500 && routerContext.statusCode < 600 && // TODO: if loaderFailureMode is not 'errroBoundary', error log will not be printed.
79
+ loaderFailureMode === "clientRender") {
79
80
  routerContext.statusCode = 200;
80
- throw routerContext.errors[0];
81
+ const errors = Object.values(routerContext.errors);
82
+ throw errors[0];
81
83
  }
82
84
  const router = createStaticRouter(routes, routerContext);
83
85
  context.routerContext = routerContext;
@@ -92,7 +94,7 @@ const routerPlugin = (userConfig = {}) => {
92
94
  return () => {
93
95
  const context = useContext(RuntimeReactContext);
94
96
  const { remixRouter, routerContext, ssrContext } = context;
95
- const { nonce, mode, inlineScript } = ssrContext;
97
+ const { nonce, mode, useJsonScript } = ssrContext;
96
98
  const routerWrapper = /* @__PURE__ */ _jsxs(_Fragment, {
97
99
  children: [
98
100
  /* @__PURE__ */ _jsx(StaticRouterProvider, {
@@ -105,7 +107,7 @@ const routerPlugin = (userConfig = {}) => {
105
107
  /* @__PURE__ */ _jsx(DeferredDataScripts, {
106
108
  nonce,
107
109
  context: routerContext,
108
- inlineScript
110
+ useJsonScript
109
111
  }),
110
112
  mode === "stream" && JSX_SHELL_STREAM_END_MARK
111
113
  ]
@@ -10,6 +10,7 @@ export interface SSRDataCreatorOptions {
10
10
  ssrConfig?: SSRConfig;
11
11
  routerContext?: StaticHandlerContext;
12
12
  nonce?: string;
13
+ useJsonScript?: boolean;
13
14
  }
14
15
  export declare class SSRDataCollector implements Collector {
15
16
  #private;
@@ -17,4 +17,3 @@ export declare function checkIsNode(): boolean;
17
17
  export declare function serializeErrors(errors: StaticHandlerContext['errors']): StaticHandlerContext['errors'];
18
18
  export declare function getSSRConfigByEntry(entryName: string, ssr?: ServerUserConfig['ssr'], ssrByEntries?: ServerUserConfig['ssrByEntries']): import("@modern-js/app-tools").SSR;
19
19
  export declare function getSSRMode(ssrConfig?: SSRConfig): 'string' | 'stream' | false;
20
- export declare function getSSRInlineScript(ssrConfig?: SSRConfig): boolean;
@@ -52,7 +52,7 @@ export type SSRServerContext = Pick<BaseSSRServerContext, 'redirection' | 'respo
52
52
  loaderFailureMode?: 'clientRender' | 'errorBoundary';
53
53
  onError?: (e: unknown) => void;
54
54
  onTiming?: (name: string, dur: number) => void;
55
- inlineScript?: boolean;
55
+ useJsonScript?: boolean;
56
56
  };
57
57
  interface TSSRBaseContext {
58
58
  request: BaseSSRServerContext['request'] & {
@@ -6,7 +6,7 @@ import type { StaticHandlerContext } from '@modern-js/runtime-utils/remix-router
6
6
  */
7
7
  declare const DeferredDataScripts: (props?: {
8
8
  nonce?: string;
9
- inlineScript?: boolean;
9
+ useJsonScript?: boolean;
10
10
  context: StaticHandlerContext;
11
11
  }) => import("react").JSX.Element | null;
12
12
  export default DeferredDataScripts;
package/package.json CHANGED
@@ -15,7 +15,7 @@
15
15
  "modern",
16
16
  "modern.js"
17
17
  ],
18
- "version": "2.63.0",
18
+ "version": "2.63.2",
19
19
  "engines": {
20
20
  "node": ">=14.17.6"
21
21
  },
@@ -200,11 +200,11 @@
200
200
  "react-is": "^18",
201
201
  "react-side-effect": "^2.1.1",
202
202
  "styled-components": "^5.3.1",
203
- "@modern-js/plugin": "2.63.0",
204
- "@modern-js/plugin-data-loader": "2.63.0",
205
- "@modern-js/types": "2.63.0",
206
- "@modern-js/utils": "2.63.0",
207
- "@modern-js/runtime-utils": "2.63.0"
203
+ "@modern-js/plugin": "2.63.2",
204
+ "@modern-js/types": "2.63.2",
205
+ "@modern-js/utils": "2.63.2",
206
+ "@modern-js/runtime-utils": "2.63.2",
207
+ "@modern-js/plugin-data-loader": "2.63.2"
208
208
  },
209
209
  "peerDependencies": {
210
210
  "react": ">=17",
@@ -212,7 +212,7 @@
212
212
  },
213
213
  "devDependencies": {
214
214
  "@remix-run/web-fetch": "^4.1.3",
215
- "@rsbuild/core": "~1.1.5",
215
+ "@rsbuild/core": "1.1.9",
216
216
  "@testing-library/react": "^13.4.0",
217
217
  "@types/cookie": "0.6.0",
218
218
  "@types/invariant": "^2.2.30",
@@ -227,11 +227,11 @@
227
227
  "ts-jest": "^29.1.0",
228
228
  "ts-node": "^10.9.1",
229
229
  "typescript": "^5",
230
- "webpack": "^5.96.1",
231
- "@modern-js/app-tools": "2.63.0",
232
- "@scripts/jest-config": "2.63.0",
233
- "@modern-js/core": "2.63.0",
234
- "@scripts/build": "2.63.0"
230
+ "webpack": "^5.97.1",
231
+ "@modern-js/app-tools": "2.63.2",
232
+ "@modern-js/core": "2.63.2",
233
+ "@scripts/build": "2.63.2",
234
+ "@scripts/jest-config": "2.63.2"
235
235
  },
236
236
  "sideEffects": false,
237
237
  "publishConfig": {