@modern-js/runtime 2.63.1 → 2.63.3

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 (30) hide show
  1. package/dist/cjs/core/server/requestHandler.js +2 -3
  2. package/dist/cjs/core/server/stream/afterTemplate.js +3 -6
  3. package/dist/cjs/core/server/string/index.js +2 -1
  4. package/dist/cjs/core/server/string/loadable.js +13 -3
  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 +2 -2
  9. package/dist/esm/core/server/requestHandler.js +3 -4
  10. package/dist/esm/core/server/stream/afterTemplate.js +4 -5
  11. package/dist/esm/core/server/string/index.js +2 -1
  12. package/dist/esm/core/server/string/loadable.js +17 -5
  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 +2 -2
  17. package/dist/esm-node/core/server/requestHandler.js +3 -4
  18. package/dist/esm-node/core/server/stream/afterTemplate.js +4 -7
  19. package/dist/esm-node/core/server/string/index.js +2 -1
  20. package/dist/esm-node/core/server/string/loadable.js +13 -3
  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 +2 -2
  25. package/dist/types/core/server/string/loadable.d.ts +3 -2
  26. package/dist/types/core/server/string/ssrData.d.ts +1 -0
  27. package/dist/types/core/server/utils.d.ts +0 -1
  28. package/dist/types/core/types.d.ts +1 -1
  29. package/dist/types/router/runtime/DeferredDataScripts.node.d.ts +1 -1
  30. package/package.json +12 -12
@@ -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, {
@@ -80,8 +80,18 @@ class LoadableCollector {
80
80
  if (!this.extractor) {
81
81
  return;
82
82
  }
83
- const { extractor } = this;
84
- const chunks = extractor.getChunkAssets(extractor.chunks);
83
+ const { extractor, options } = this;
84
+ const { entryName, config } = options;
85
+ const asyncChunks = [];
86
+ if (config.enableAsyncEntry) {
87
+ try {
88
+ asyncChunks.push(...extractor.getChunkAssets([
89
+ `async-${entryName}`
90
+ ]));
91
+ } catch (e) {
92
+ }
93
+ }
94
+ const chunks = [].concat(asyncChunks).concat(extractor.getChunkAssets(extractor.chunks));
85
95
  const scriptChunks = generateChunks(chunks, "js");
86
96
  const styleChunks = generateChunks(chunks, "css");
87
97
  this.emitLoadableScripts(extractor);
@@ -132,7 +142,7 @@ class LoadableCollector {
132
142
  chunkSet.jsChunk += scripts.filter((script) => Boolean(script)).join("");
133
143
  }
134
144
  async emitStyleAssets(chunks) {
135
- const { template, chunkSet, config } = this.options;
145
+ const { template, chunkSet, config, entryName } = this.options;
136
146
  const { enableInlineStyles } = config;
137
147
  const atrributes = (0, import_utils.attributesToString)(this.generateAttributes());
138
148
  const linkRegExp = /<link .*?href="([^"]+)".*?>/g;
@@ -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);
@@ -128,7 +128,7 @@ const routerPlugin = (userConfig = {}) => {
128
128
  return () => {
129
129
  const context = (0, import_react.useContext)(import_core.RuntimeReactContext);
130
130
  const { remixRouter, routerContext, ssrContext } = context;
131
- const { nonce, mode, inlineScript } = ssrContext;
131
+ const { nonce, mode, useJsonScript } = ssrContext;
132
132
  const routerWrapper = /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, {
133
133
  children: [
134
134
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_router.StaticRouterProvider, {
@@ -141,7 +141,7 @@ const routerPlugin = (userConfig = {}) => {
141
141
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_DeferredDataScripts.default, {
142
142
  nonce,
143
143
  context: routerContext,
144
- inlineScript
144
+ useJsonScript
145
145
  }),
146
146
  mode === "stream" && import_common.JSX_SHELL_STREAM_END_MARK
147
147
  ]
@@ -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, {
@@ -3,6 +3,7 @@ import { _ as _class_call_check } from "@swc/helpers/_/_class_call_check";
3
3
  import { _ as _create_class } from "@swc/helpers/_/_create_class";
4
4
  import { _ as _instanceof } from "@swc/helpers/_/_instanceof";
5
5
  import { _ as _object_spread } from "@swc/helpers/_/_object_spread";
6
+ import { _ as _to_consumable_array } from "@swc/helpers/_/_to_consumable_array";
6
7
  import { _ as _ts_generator } from "@swc/helpers/_/_ts_generator";
7
8
  import { ChunkExtractor } from "@loadable/server";
8
9
  import { attributesToString, checkIsNode } from "../utils";
@@ -83,7 +84,7 @@ var LoadableCollector = /* @__PURE__ */ function() {
83
84
  _proto.effect = function effect() {
84
85
  var _this = this;
85
86
  return _async_to_generator(function() {
86
- var extractor, chunks, scriptChunks, styleChunks;
87
+ var extractor, options, entryName, config, asyncChunks, _asyncChunks, chunks, scriptChunks, styleChunks;
87
88
  return _ts_generator(this, function(_state) {
88
89
  switch (_state.label) {
89
90
  case 0:
@@ -92,8 +93,19 @@ var LoadableCollector = /* @__PURE__ */ function() {
92
93
  2
93
94
  ];
94
95
  }
95
- extractor = _this.extractor;
96
- chunks = extractor.getChunkAssets(extractor.chunks);
96
+ extractor = _this.extractor, options = _this.options;
97
+ entryName = options.entryName, config = options.config;
98
+ asyncChunks = [];
99
+ if (config.enableAsyncEntry) {
100
+ try {
101
+ ;
102
+ (_asyncChunks = asyncChunks).push.apply(_asyncChunks, _to_consumable_array(extractor.getChunkAssets([
103
+ "async-".concat(entryName)
104
+ ])));
105
+ } catch (e) {
106
+ }
107
+ }
108
+ chunks = [].concat(asyncChunks).concat(extractor.getChunkAssets(extractor.chunks));
97
109
  scriptChunks = generateChunks(chunks, "js");
98
110
  styleChunks = generateChunks(chunks, "css");
99
111
  _this.emitLoadableScripts(extractor);
@@ -220,11 +232,11 @@ var LoadableCollector = /* @__PURE__ */ function() {
220
232
  _proto.emitStyleAssets = function emitStyleAssets(chunks) {
221
233
  var _this = this;
222
234
  return _async_to_generator(function() {
223
- var _this_options, template, chunkSet, config, enableInlineStyles, atrributes, linkRegExp, matchs, existedLinks, _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iterator, _step, match, css;
235
+ var _this_options, template, chunkSet, config, entryName, enableInlineStyles, atrributes, linkRegExp, matchs, existedLinks, _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iterator, _step, match, css;
224
236
  return _ts_generator(this, function(_state) {
225
237
  switch (_state.label) {
226
238
  case 0:
227
- _this_options = _this.options, template = _this_options.template, chunkSet = _this_options.chunkSet, config = _this_options.config;
239
+ _this_options = _this.options, template = _this_options.template, chunkSet = _this_options.chunkSet, config = _this_options.config, entryName = _this_options.entryName;
228
240
  enableInlineStyles = config.enableInlineStyles;
229
241
  atrributes = attributesToString(_this.generateAttributes());
230
242
  linkRegExp = /<link .*?href="([^"]+)".*?>/g;
@@ -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];
@@ -123,7 +123,7 @@ var routerPlugin = function() {
123
123
  return function() {
124
124
  var context = useContext(RuntimeReactContext);
125
125
  var remixRouter = context.remixRouter, routerContext = context.routerContext, ssrContext = context.ssrContext;
126
- var nonce = ssrContext.nonce, mode = ssrContext.mode, inlineScript = ssrContext.inlineScript;
126
+ var nonce = ssrContext.nonce, mode = ssrContext.mode, useJsonScript = ssrContext.useJsonScript;
127
127
  var routerWrapper = /* @__PURE__ */ _jsxs(_Fragment, {
128
128
  children: [
129
129
  /* @__PURE__ */ _jsx(StaticRouterProvider, {
@@ -136,7 +136,7 @@ var routerPlugin = function() {
136
136
  /* @__PURE__ */ _jsx(DeferredDataScripts, {
137
137
  nonce,
138
138
  context: routerContext,
139
- inlineScript
139
+ useJsonScript
140
140
  }),
141
141
  mode === "stream" && JSX_SHELL_STREAM_END_MARK
142
142
  ]
@@ -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, {
@@ -47,8 +47,18 @@ class LoadableCollector {
47
47
  if (!this.extractor) {
48
48
  return;
49
49
  }
50
- const { extractor } = this;
51
- const chunks = extractor.getChunkAssets(extractor.chunks);
50
+ const { extractor, options } = this;
51
+ const { entryName, config } = options;
52
+ const asyncChunks = [];
53
+ if (config.enableAsyncEntry) {
54
+ try {
55
+ asyncChunks.push(...extractor.getChunkAssets([
56
+ `async-${entryName}`
57
+ ]));
58
+ } catch (e) {
59
+ }
60
+ }
61
+ const chunks = [].concat(asyncChunks).concat(extractor.getChunkAssets(extractor.chunks));
52
62
  const scriptChunks = generateChunks(chunks, "js");
53
63
  const styleChunks = generateChunks(chunks, "css");
54
64
  this.emitLoadableScripts(extractor);
@@ -99,7 +109,7 @@ class LoadableCollector {
99
109
  chunkSet.jsChunk += scripts.filter((script) => Boolean(script)).join("");
100
110
  }
101
111
  async emitStyleAssets(chunks) {
102
- const { template, chunkSet, config } = this.options;
112
+ const { template, chunkSet, config, entryName } = this.options;
103
113
  const { enableInlineStyles } = config;
104
114
  const atrributes = attributesToString(this.generateAttributes());
105
115
  const linkRegExp = /<link .*?href="([^"]+)".*?>/g;
@@ -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);
@@ -94,7 +94,7 @@ const routerPlugin = (userConfig = {}) => {
94
94
  return () => {
95
95
  const context = useContext(RuntimeReactContext);
96
96
  const { remixRouter, routerContext, ssrContext } = context;
97
- const { nonce, mode, inlineScript } = ssrContext;
97
+ const { nonce, mode, useJsonScript } = ssrContext;
98
98
  const routerWrapper = /* @__PURE__ */ _jsxs(_Fragment, {
99
99
  children: [
100
100
  /* @__PURE__ */ _jsx(StaticRouterProvider, {
@@ -107,7 +107,7 @@ const routerPlugin = (userConfig = {}) => {
107
107
  /* @__PURE__ */ _jsx(DeferredDataScripts, {
108
108
  nonce,
109
109
  context: routerContext,
110
- inlineScript
110
+ useJsonScript
111
111
  }),
112
112
  mode === "stream" && JSX_SHELL_STREAM_END_MARK
113
113
  ]
@@ -2,8 +2,8 @@ import type { ReactElement } from 'react';
2
2
  import type { ChunkSet, Collector } from './types';
3
3
  declare module '@loadable/server' {
4
4
  interface ChunkExtractor {
5
- chunks: Chunk;
6
- getChunkAssets: (chunks: Chunk) => Chunk[];
5
+ chunks: string[];
6
+ getChunkAssets: (chunks: string[]) => Chunk[];
7
7
  }
8
8
  }
9
9
  export interface LoadableCollectorOptions {
@@ -20,6 +20,7 @@ export interface LoadableCollectorConfig {
20
20
  enableInlineStyles?: boolean | RegExp;
21
21
  enableInlineScripts?: boolean | RegExp;
22
22
  crossorigin?: boolean | 'anonymous' | 'use-credentials';
23
+ enableAsyncEntry?: boolean;
23
24
  }
24
25
  export declare class LoadableCollector implements Collector {
25
26
  private options;
@@ -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.1",
18
+ "version": "2.63.3",
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-data-loader": "2.63.1",
204
- "@modern-js/runtime-utils": "2.63.1",
205
- "@modern-js/plugin": "2.63.1",
206
- "@modern-js/types": "2.63.1",
207
- "@modern-js/utils": "2.63.1"
203
+ "@modern-js/plugin": "2.63.3",
204
+ "@modern-js/plugin-data-loader": "2.63.3",
205
+ "@modern-js/types": "2.63.3",
206
+ "@modern-js/runtime-utils": "2.63.3",
207
+ "@modern-js/utils": "2.63.3"
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.8",
215
+ "@rsbuild/core": "1.1.10",
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.1",
232
- "@scripts/build": "2.63.1",
233
- "@modern-js/core": "2.63.1",
234
- "@scripts/jest-config": "2.63.1"
230
+ "webpack": "^5.97.1",
231
+ "@modern-js/app-tools": "2.63.3",
232
+ "@modern-js/core": "2.63.3",
233
+ "@scripts/build": "2.63.3",
234
+ "@scripts/jest-config": "2.63.3"
235
235
  },
236
236
  "sideEffects": false,
237
237
  "publishConfig": {