@modern-js/runtime 2.58.0 → 2.58.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 (31) hide show
  1. package/dist/cjs/cli/code.js +1 -1
  2. package/dist/cjs/cli/template.js +4 -1
  3. package/dist/cjs/core/server/requestHandler.js +7 -3
  4. package/dist/cjs/core/server/stream/afterTemplate.js +20 -3
  5. package/dist/cjs/core/server/stream/beforeTemplate.js +18 -11
  6. package/dist/cjs/core/server/stream/createReadableStream.js +3 -1
  7. package/dist/cjs/core/server/stream/createReadableStream.worker.js +3 -2
  8. package/dist/cjs/core/server/stream/shared.js +1 -0
  9. package/dist/cjs/core/server/string/ssrData.js +1 -1
  10. package/dist/esm/cli/code.js +1 -1
  11. package/dist/esm/cli/template.js +2 -1
  12. package/dist/esm/core/server/requestHandler.js +7 -3
  13. package/dist/esm/core/server/stream/afterTemplate.js +41 -3
  14. package/dist/esm/core/server/stream/beforeTemplate.js +20 -17
  15. package/dist/esm/core/server/stream/createReadableStream.js +4 -2
  16. package/dist/esm/core/server/stream/createReadableStream.worker.js +4 -3
  17. package/dist/esm/core/server/stream/shared.js +1 -0
  18. package/dist/esm/core/server/string/ssrData.js +1 -1
  19. package/dist/esm-node/cli/code.js +1 -1
  20. package/dist/esm-node/cli/template.js +4 -1
  21. package/dist/esm-node/core/server/requestHandler.js +7 -3
  22. package/dist/esm-node/core/server/stream/afterTemplate.js +20 -3
  23. package/dist/esm-node/core/server/stream/beforeTemplate.js +18 -11
  24. package/dist/esm-node/core/server/stream/createReadableStream.js +3 -1
  25. package/dist/esm-node/core/server/stream/createReadableStream.worker.js +3 -2
  26. package/dist/esm-node/core/server/stream/shared.js +1 -0
  27. package/dist/esm-node/core/server/string/ssrData.js +1 -1
  28. package/dist/types/core/server/stream/afterTemplate.d.ts +1 -0
  29. package/dist/types/core/server/stream/beforeTemplate.d.ts +1 -0
  30. package/dist/types/core/server/stream/shared.d.ts +1 -0
  31. package/package.json +17 -17
@@ -78,7 +78,7 @@ const generateCode = async (entrypoints, appContext, config, onCollectRuntimePlu
78
78
  const ssrMode = getSSRMode(entryName, config);
79
79
  if (enableAsyncEntry) {
80
80
  const bootstrapFile = import_path.default.resolve(internalDirectory, `./${entryName}/${import_constants.ENTRY_BOOTSTRAP_FILE_NAME}`);
81
- import_utils.fs.outputFileSync(bootstrapFile, `import('./${import_constants.INDEX_FILE_NAME}');`, "utf8");
81
+ import_utils.fs.outputFileSync(bootstrapFile, `import(/* webpackChunkName: "async-${entryName}" */ './${import_constants.INDEX_FILE_NAME}');`, "utf8");
82
82
  const bootstrapServerFile = import_path.default.resolve(internalDirectory, `./${entryName}/${import_constants.ENTRY_SERVER_BOOTSTRAP_FILE_NAME}`);
83
83
  if (ssrMode) {
84
84
  import_utils.fs.outputFileSync(bootstrapServerFile, `export const requestHandler = import('./${import_constants.SERVER_ENTRY_POINT_FILE_NAME}').then((m) => m.requestHandler)`, "utf8");
@@ -69,7 +69,10 @@ const getImportRuntimeConfigCode = (srcDirectory, internalSrcAlias, runtimeConfi
69
69
  }
70
70
  return `let runtimeConfig;`;
71
71
  };
72
- const getRegisterRuntimePluginCode = (entryName, name, config) => `plugins.push(${name}Plugin(mergeConfig(${JSON.stringify(config)}, (runtimeConfig || {})['${name}'], ((runtimeConfig || {})['${name}ByEntries'] || {})['${entryName}'], (getGlobalAppConfig() || {})['${name}'])));`;
72
+ const getRegisterRuntimePluginCode = (entryName, name, config) => {
73
+ const configName = name === "garfish" ? "masterApp" : name;
74
+ return `plugins.push(${name}Plugin(mergeConfig(${JSON.stringify(config)}, (runtimeConfig || {})['${configName}'], ((runtimeConfig || {})['${configName}ByEntries'] || {})['${entryName}'], (getGlobalAppConfig() || {})['${configName}'])));`;
75
+ };
73
76
  const runtimeRegister = ({ entryName, srcDirectory, internalSrcAlias, metaName, runtimeConfigFile, runtimePlugins }) => `import { registerPlugin, mergeConfig } from '@${metaName}/runtime/plugin';
74
77
  import { getGlobalAppConfig, getGlobalLayoutApp } from '@${metaName}/runtime/context';
75
78
  ${getImportRuntimeConfigCode(srcDirectory, internalSrcAlias, runtimeConfigFile)}
@@ -33,12 +33,15 @@ function createSSRContext(request, options) {
33
33
  const { config, loaderContext, onError, onTiming, locals, resource, params, responseProxy, logger, metrics, reporter } = options;
34
34
  const { nonce } = config;
35
35
  const { entryName, route } = resource;
36
- const cookie = request.headers.get("cookie");
36
+ const { headers } = request;
37
+ const cookie = headers.get("cookie") || "";
37
38
  const cookieMap = (0, import_request.parseCookie)(request);
38
39
  const pathname = (0, import_request.getPathname)(request);
39
40
  const query = (0, import_request.parseQuery)(request);
40
41
  const headersData = (0, import_request.parseHeaders)(request);
41
42
  const url = new URL(request.url);
43
+ const host = headers.get("X-Forwarded-Host") || headers.get("host") || url.host;
44
+ const protocal = `${headers.get("X-Forwarded-Proto") || url.protocol || "http"}:`;
42
45
  const ssrConfig = (0, import_utils.getSSRConfigByEntry)(entryName, config.ssr, config.ssrByEntries);
43
46
  const ssrMode = (0, import_utils.getSSRMode)(ssrConfig);
44
47
  const loaderFailureMode = typeof ssrConfig === "object" ? ssrConfig.loaderFailureMode : void 0;
@@ -50,15 +53,16 @@ function createSSRContext(request, options) {
50
53
  logger,
51
54
  metrics,
52
55
  request: {
56
+ url: request.url.replace(url.host, host).replace(url.protocol, protocal),
53
57
  baseUrl: route.urlPath,
54
- userAgent: request.headers.get("user-agent"),
58
+ userAgent: headers.get("user-agent"),
55
59
  cookie,
56
60
  cookieMap,
57
61
  pathname,
58
62
  query,
59
63
  params,
60
64
  headers: headersData,
61
- host: url.host,
65
+ host,
62
66
  raw: request
63
67
  },
64
68
  response: {
@@ -26,7 +26,7 @@ var import_utils = require("../utils");
26
26
  var import_constants = require("../constants");
27
27
  var import_shared = require("../shared");
28
28
  function buildShellAfterTemplate(afterAppTemplate, options) {
29
- const { request, config, ssrConfig, runtimeContext, renderLevel } = options;
29
+ const { request, config, ssrConfig, runtimeContext, renderLevel, entryName } = options;
30
30
  const callbacks = [
31
31
  createReplaceSSRData({
32
32
  request,
@@ -34,8 +34,25 @@ function buildShellAfterTemplate(afterAppTemplate, options) {
34
34
  nonce: config.nonce,
35
35
  runtimeContext,
36
36
  renderLevel
37
- })
37
+ }),
38
+ (template) => injectJs(template, entryName, config.nonce)
38
39
  ];
40
+ async function injectJs(template, entryName2, nonce) {
41
+ const { routeManifest } = runtimeContext;
42
+ const { routeAssets } = routeManifest;
43
+ const asyncEntry = routeAssets[`async-${entryName2}`];
44
+ if (asyncEntry) {
45
+ var _assets_filter;
46
+ const { assets } = asyncEntry;
47
+ const jsChunkStr = assets === null || assets === void 0 ? void 0 : (_assets_filter = assets.filter((asset) => asset.endsWith(".js"))) === null || _assets_filter === void 0 ? void 0 : _assets_filter.map((asset) => {
48
+ return `<script src=${asset} nonce="${nonce}"></script>`;
49
+ }).join(" ");
50
+ if (jsChunkStr) {
51
+ return (0, import_utils.safeReplace)(template, "<!--<?- chunksMap.js ?>-->", jsChunkStr);
52
+ }
53
+ }
54
+ return template;
55
+ }
39
56
  return (0, import_shared.buildHtml)(afterAppTemplate, callbacks);
40
57
  }
41
58
  function createReplaceSSRData(options) {
@@ -59,7 +76,7 @@ function createReplaceSSRData(options) {
59
76
  params: request.params,
60
77
  pathname: request.pathname,
61
78
  host: request.host,
62
- url: request.raw.url,
79
+ url: request.url,
63
80
  headers
64
81
  }
65
82
  },
@@ -55,15 +55,15 @@ const checkIsInline = (chunk, enableInline) => {
55
55
  }
56
56
  };
57
57
  async function buildShellBeforeTemplate(beforeAppTemplate, options) {
58
- const { config, runtimeContext, styledComponentsStyleTags } = options;
58
+ const { config, runtimeContext, styledComponentsStyleTags, entryName } = options;
59
59
  const helmetData = import_react_helmet.default.renderStatic();
60
60
  const callbacks = [
61
61
  (0, import_helmet.createReplaceHelemt)(helmetData),
62
62
  // @TODO: prefetch scripts of lazy component
63
- (template) => injectCss(template, styledComponentsStyleTags)
63
+ (template) => injectCss(template, entryName, styledComponentsStyleTags)
64
64
  ];
65
65
  return (0, import_shared.buildHtml)(beforeAppTemplate, callbacks);
66
- async function injectCss(template, styledComponentsStyleTags2) {
66
+ async function injectCss(template, entryName2, styledComponentsStyleTags2) {
67
67
  let css = await getCssChunks();
68
68
  if (styledComponentsStyleTags2) {
69
69
  css += styledComponentsStyleTags2;
@@ -75,22 +75,29 @@ async function buildShellBeforeTemplate(beforeAppTemplate, options) {
75
75
  return "";
76
76
  }
77
77
  const { routeAssets } = routeManifest;
78
- const cssChunks = [];
79
78
  const matches = (0, import_router.matchRoutes)(routes, routerContext.location, routerContext.basename);
80
- matches === null || matches === void 0 ? void 0 : matches.forEach((match, index) => {
79
+ const matchedRouteManifests = matches === null || matches === void 0 ? void 0 : matches.map((match, index) => {
81
80
  if (!index) {
82
81
  return;
83
82
  }
84
83
  const routeId = match.route.id;
85
84
  if (routeId) {
86
85
  const routeManifest2 = routeAssets[routeId];
87
- if (routeManifest2) {
88
- const { referenceCssAssets = [] } = routeManifest2;
89
- const _cssChunks = referenceCssAssets.filter((asset) => (asset === null || asset === void 0 ? void 0 : asset.endsWith(".css")) && !template.includes(asset));
90
- cssChunks.push(..._cssChunks);
91
- }
86
+ return routeManifest2;
92
87
  }
93
- });
88
+ }).filter(Boolean);
89
+ const asyncEntry = routeAssets[`async-${entryName2}`];
90
+ if (asyncEntry) {
91
+ matchedRouteManifests === null || matchedRouteManifests === void 0 ? void 0 : matchedRouteManifests.push(asyncEntry);
92
+ }
93
+ const cssChunks = matchedRouteManifests ? matchedRouteManifests === null || matchedRouteManifests === void 0 ? void 0 : matchedRouteManifests.reduce((chunks, routeManifest2) => {
94
+ const { referenceCssAssets = [] } = routeManifest2;
95
+ const _cssChunks = referenceCssAssets.filter((asset) => (asset === null || asset === void 0 ? void 0 : asset.endsWith(".css")) && !template.includes(asset));
96
+ return [
97
+ ...chunks,
98
+ ..._cssChunks
99
+ ];
100
+ }, []) : [];
94
101
  const { enableInlineStyles } = config;
95
102
  const styles = await Promise.all(cssChunks.map(async (chunk) => {
96
103
  const link = `<link href="${chunk}" rel="stylesheet" />`;
@@ -41,7 +41,7 @@ var import_template = require("./template");
41
41
  var import_shared = require("./shared");
42
42
  const createReadableStreamFromElement = async (request, rootElement, options) => {
43
43
  const { renderToPipeableStream } = await Promise.resolve().then(() => __toESM(require("react-dom/server")));
44
- const { runtimeContext, htmlTemplate, config, ssrConfig } = options;
44
+ const { runtimeContext, htmlTemplate, config, ssrConfig, entryName } = options;
45
45
  let shellChunkStatus = import_shared.ShellChunkStatus.START;
46
46
  let renderLevel = import_constants.RenderLevel.SERVER_RENDER;
47
47
  const forceStream2String = Boolean(process.env.MODERN_JS_STREAM_TO_STRING);
@@ -63,6 +63,7 @@ const createReadableStreamFromElement = async (request, rootElement, options) =>
63
63
  renderLevel,
64
64
  runtimeContext,
65
65
  config,
66
+ entryName,
66
67
  styledComponentsStyleTags
67
68
  }).then(({ shellAfter, shellBefore }) => {
68
69
  const body = new import_stream.Transform({
@@ -101,6 +102,7 @@ const createReadableStreamFromElement = async (request, rootElement, options) =>
101
102
  ssrConfig,
102
103
  renderLevel,
103
104
  runtimeContext,
105
+ entryName,
104
106
  config
105
107
  }).then(({ shellAfter, shellBefore }) => {
106
108
  var _options_onShellError;
@@ -40,13 +40,14 @@ var import_template = require("./template");
40
40
  const createReadableStreamFromElement = async (request, rootElement, options) => {
41
41
  let shellChunkStatus = import_shared.ShellChunkStatus.START;
42
42
  const chunkVec = [];
43
- const { htmlTemplate, runtimeContext, config, ssrConfig } = options;
43
+ const { htmlTemplate, runtimeContext, config, ssrConfig, entryName } = options;
44
44
  const { shellBefore, shellAfter } = await (0, import_template.getTemplates)(htmlTemplate, {
45
45
  renderLevel: import_constants.RenderLevel.SERVER_RENDER,
46
46
  runtimeContext,
47
47
  ssrConfig,
48
48
  request,
49
- config
49
+ config,
50
+ entryName
50
51
  });
51
52
  try {
52
53
  var _options_onShellReady;
@@ -72,6 +72,7 @@ function createRenderStreaming(createReadableStreamFromElement) {
72
72
  htmlTemplate,
73
73
  runtimeContext,
74
74
  ssrConfig,
75
+ entryName,
75
76
  onShellReady() {
76
77
  const cost = end();
77
78
  onTiming(import_tracer.SSRTimings.RENDER_SHELL, cost);
@@ -66,7 +66,7 @@ function getSSRData() {
66
66
  query: request.query,
67
67
  pathname: request.pathname,
68
68
  host: request.host,
69
- url: request.raw.url,
69
+ url: request.url,
70
70
  headers
71
71
  },
72
72
  reporter: {
@@ -65,7 +65,7 @@ var generateCode = function() {
65
65
  ssrMode = getSSRMode(entryName, config);
66
66
  if (enableAsyncEntry) {
67
67
  bootstrapFile = path.resolve(internalDirectory, "./".concat(entryName, "/").concat(ENTRY_BOOTSTRAP_FILE_NAME));
68
- fs.outputFileSync(bootstrapFile, "import('./".concat(INDEX_FILE_NAME, "');"), "utf8");
68
+ fs.outputFileSync(bootstrapFile, 'import(/* webpackChunkName: "async-'.concat(entryName, `" */ './`).concat(INDEX_FILE_NAME, "');"), "utf8");
69
69
  bootstrapServerFile = path.resolve(internalDirectory, "./".concat(entryName, "/").concat(ENTRY_SERVER_BOOTSTRAP_FILE_NAME));
70
70
  if (ssrMode) {
71
71
  fs.outputFileSync(bootstrapServerFile, "export const requestHandler = import('./".concat(SERVER_ENTRY_POINT_FILE_NAME, "').then((m) => m.requestHandler)"), "utf8");
@@ -32,7 +32,8 @@ var getImportRuntimeConfigCode = function(srcDirectory, internalSrcAlias, runtim
32
32
  return "let runtimeConfig;";
33
33
  };
34
34
  var getRegisterRuntimePluginCode = function(entryName, name, config) {
35
- return "plugins.push(".concat(name, "Plugin(mergeConfig(").concat(JSON.stringify(config), ", (runtimeConfig || {})['").concat(name, "'], ((runtimeConfig || {})['").concat(name, "ByEntries'] || {})['").concat(entryName, "'], (getGlobalAppConfig() || {})['").concat(name, "'])));");
35
+ var configName = name === "garfish" ? "masterApp" : name;
36
+ return "plugins.push(".concat(name, "Plugin(mergeConfig(").concat(JSON.stringify(config), ", (runtimeConfig || {})['").concat(configName, "'], ((runtimeConfig || {})['").concat(configName, "ByEntries'] || {})['").concat(entryName, "'], (getGlobalAppConfig() || {})['").concat(configName, "'])));");
36
37
  };
37
38
  var runtimeRegister = function(param) {
38
39
  var entryName = param.entryName, srcDirectory = param.srcDirectory, internalSrcAlias = param.internalSrcAlias, metaName = param.metaName, runtimeConfigFile = param.runtimeConfigFile, runtimePlugins = param.runtimePlugins;
@@ -16,12 +16,15 @@ function createSSRContext(request, options) {
16
16
  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;
17
17
  var nonce = config.nonce;
18
18
  var entryName = resource.entryName, route = resource.route;
19
- var cookie = request.headers.get("cookie");
19
+ var headers = request.headers;
20
+ var cookie = headers.get("cookie") || "";
20
21
  var cookieMap = parseCookie(request);
21
22
  var pathname = getPathname(request);
22
23
  var query = parseQuery(request);
23
24
  var headersData = parseHeaders(request);
24
25
  var url = new URL(request.url);
26
+ var host = headers.get("X-Forwarded-Host") || headers.get("host") || url.host;
27
+ var protocal = "".concat(headers.get("X-Forwarded-Proto") || url.protocol || "http", ":");
25
28
  var ssrConfig = getSSRConfigByEntry(entryName, config.ssr, config.ssrByEntries);
26
29
  var ssrMode = getSSRMode(ssrConfig);
27
30
  var loaderFailureMode = typeof ssrConfig === "object" ? ssrConfig.loaderFailureMode : void 0;
@@ -33,15 +36,16 @@ function createSSRContext(request, options) {
33
36
  logger,
34
37
  metrics,
35
38
  request: {
39
+ url: request.url.replace(url.host, host).replace(url.protocol, protocal),
36
40
  baseUrl: route.urlPath,
37
- userAgent: request.headers.get("user-agent"),
41
+ userAgent: headers.get("user-agent"),
38
42
  cookie,
39
43
  cookieMap,
40
44
  pathname,
41
45
  query,
42
46
  params,
43
47
  headers: headersData,
44
- host: url.host,
48
+ host,
45
49
  raw: request
46
50
  },
47
51
  response: {
@@ -1,10 +1,12 @@
1
+ import { _ as _async_to_generator } from "@swc/helpers/_/_async_to_generator";
1
2
  import { _ as _sliced_to_array } from "@swc/helpers/_/_sliced_to_array";
3
+ import { _ as _ts_generator } from "@swc/helpers/_/_ts_generator";
2
4
  import { serializeJson } from "@modern-js/runtime-utils/node";
3
5
  import { attributesToString, safeReplace } from "../utils";
4
6
  import { SSR_DATA_PLACEHOLDER } from "../constants";
5
7
  import { buildHtml } from "../shared";
6
8
  function buildShellAfterTemplate(afterAppTemplate, options) {
7
- var request = options.request, config = options.config, ssrConfig = options.ssrConfig, runtimeContext = options.runtimeContext, renderLevel = options.renderLevel;
9
+ var request = options.request, config = options.config, ssrConfig = options.ssrConfig, runtimeContext = options.runtimeContext, renderLevel = options.renderLevel, entryName = options.entryName;
8
10
  var callbacks = [
9
11
  createReplaceSSRData({
10
12
  request,
@@ -12,8 +14,44 @@ function buildShellAfterTemplate(afterAppTemplate, options) {
12
14
  nonce: config.nonce,
13
15
  runtimeContext,
14
16
  renderLevel
15
- })
17
+ }),
18
+ function(template) {
19
+ return injectJs(template, entryName, config.nonce);
20
+ }
16
21
  ];
22
+ function injectJs(template, entryName2, nonce) {
23
+ return _injectJs.apply(this, arguments);
24
+ }
25
+ function _injectJs() {
26
+ _injectJs = _async_to_generator(function(template, entryName2, nonce) {
27
+ var routeManifest, routeAssets, asyncEntry, _assets_filter, assets, jsChunkStr;
28
+ return _ts_generator(this, function(_state) {
29
+ routeManifest = runtimeContext.routeManifest;
30
+ routeAssets = routeManifest.routeAssets;
31
+ asyncEntry = routeAssets["async-".concat(entryName2)];
32
+ if (asyncEntry) {
33
+ ;
34
+ assets = asyncEntry.assets;
35
+ jsChunkStr = assets === null || assets === void 0 ? void 0 : (_assets_filter = assets.filter(function(asset) {
36
+ return asset.endsWith(".js");
37
+ })) === null || _assets_filter === void 0 ? void 0 : _assets_filter.map(function(asset) {
38
+ return "<script src=".concat(asset, ' nonce="').concat(nonce, '"></script>');
39
+ }).join(" ");
40
+ if (jsChunkStr) {
41
+ return [
42
+ 2,
43
+ safeReplace(template, "<!--<?- chunksMap.js ?>-->", jsChunkStr)
44
+ ];
45
+ }
46
+ }
47
+ return [
48
+ 2,
49
+ template
50
+ ];
51
+ });
52
+ });
53
+ return _injectJs.apply(this, arguments);
54
+ }
17
55
  return buildHtml(afterAppTemplate, callbacks);
18
56
  }
19
57
  function createReplaceSSRData(options) {
@@ -40,7 +78,7 @@ function createReplaceSSRData(options) {
40
78
  params: request.params,
41
79
  pathname: request.pathname,
42
80
  host: request.host,
43
- url: request.raw.url,
81
+ url: request.url,
44
82
  headers
45
83
  }
46
84
  },
@@ -54,19 +54,19 @@ function buildShellBeforeTemplate(beforeAppTemplate, options) {
54
54
  }
55
55
  function _buildShellBeforeTemplate() {
56
56
  _buildShellBeforeTemplate = _async_to_generator(function(beforeAppTemplate, options) {
57
- var config, runtimeContext, styledComponentsStyleTags, helmetData, callbacks;
58
- function injectCss(template, styledComponentsStyleTags2) {
57
+ var config, runtimeContext, styledComponentsStyleTags, entryName, helmetData, callbacks;
58
+ function injectCss(template, entryName2, styledComponentsStyleTags2) {
59
59
  return _injectCss.apply(this, arguments);
60
60
  }
61
61
  function _injectCss() {
62
- _injectCss = _async_to_generator(function(template, styledComponentsStyleTags2) {
62
+ _injectCss = _async_to_generator(function(template, entryName2, styledComponentsStyleTags2) {
63
63
  var css;
64
64
  function getCssChunks() {
65
65
  return _getCssChunks.apply(this, arguments);
66
66
  }
67
67
  function _getCssChunks() {
68
68
  _getCssChunks = _async_to_generator(function() {
69
- var routeManifest, routerContext, routes, routeAssets, cssChunks, matches, enableInlineStyles, styles;
69
+ var routeManifest, routerContext, routes, routeAssets, matches, matchedRouteManifests, asyncEntry, cssChunks, enableInlineStyles, styles;
70
70
  return _ts_generator(this, function(_state) {
71
71
  switch (_state.label) {
72
72
  case 0:
@@ -78,25 +78,28 @@ function _buildShellBeforeTemplate() {
78
78
  ];
79
79
  }
80
80
  routeAssets = routeManifest.routeAssets;
81
- cssChunks = [];
82
81
  matches = matchRoutes(routes, routerContext.location, routerContext.basename);
83
- matches === null || matches === void 0 ? void 0 : matches.forEach(function(match, index) {
82
+ matchedRouteManifests = matches === null || matches === void 0 ? void 0 : matches.map(function(match, index) {
84
83
  if (!index) {
85
84
  return;
86
85
  }
87
86
  var routeId = match.route.id;
88
87
  if (routeId) {
89
88
  var routeManifest2 = routeAssets[routeId];
90
- if (routeManifest2) {
91
- var _cssChunks;
92
- var _routeManifest_referenceCssAssets = routeManifest2.referenceCssAssets, referenceCssAssets = _routeManifest_referenceCssAssets === void 0 ? [] : _routeManifest_referenceCssAssets;
93
- var _cssChunks1 = referenceCssAssets.filter(function(asset) {
94
- return (asset === null || asset === void 0 ? void 0 : asset.endsWith(".css")) && !template.includes(asset);
95
- });
96
- (_cssChunks = cssChunks).push.apply(_cssChunks, _to_consumable_array(_cssChunks1));
97
- }
89
+ return routeManifest2;
98
90
  }
99
- });
91
+ }).filter(Boolean);
92
+ asyncEntry = routeAssets["async-".concat(entryName2)];
93
+ if (asyncEntry) {
94
+ matchedRouteManifests === null || matchedRouteManifests === void 0 ? void 0 : matchedRouteManifests.push(asyncEntry);
95
+ }
96
+ cssChunks = matchedRouteManifests ? matchedRouteManifests === null || matchedRouteManifests === void 0 ? void 0 : matchedRouteManifests.reduce(function(chunks, routeManifest2) {
97
+ var _routeManifest_referenceCssAssets = routeManifest2.referenceCssAssets, referenceCssAssets = _routeManifest_referenceCssAssets === void 0 ? [] : _routeManifest_referenceCssAssets;
98
+ var _cssChunks = referenceCssAssets.filter(function(asset) {
99
+ return (asset === null || asset === void 0 ? void 0 : asset.endsWith(".css")) && !template.includes(asset);
100
+ });
101
+ return _to_consumable_array(chunks).concat(_to_consumable_array(_cssChunks));
102
+ }, []) : [];
100
103
  enableInlineStyles = config.enableInlineStyles;
101
104
  return [
102
105
  4,
@@ -163,13 +166,13 @@ function _buildShellBeforeTemplate() {
163
166
  return _injectCss.apply(this, arguments);
164
167
  }
165
168
  return _ts_generator(this, function(_state) {
166
- config = options.config, runtimeContext = options.runtimeContext, styledComponentsStyleTags = options.styledComponentsStyleTags;
169
+ config = options.config, runtimeContext = options.runtimeContext, styledComponentsStyleTags = options.styledComponentsStyleTags, entryName = options.entryName;
167
170
  helmetData = ReactHelmet.renderStatic();
168
171
  callbacks = [
169
172
  createReplaceHelemt(helmetData),
170
173
  // @TODO: prefetch scripts of lazy component
171
174
  function(template) {
172
- return injectCss(template, styledComponentsStyleTags);
175
+ return injectCss(template, entryName, styledComponentsStyleTags);
173
176
  }
174
177
  ];
175
178
  return [
@@ -12,7 +12,7 @@ import { getTemplates } from "./template";
12
12
  import { ShellChunkStatus, getReadableStreamFromString } from "./shared";
13
13
  var createReadableStreamFromElement = function() {
14
14
  var _ref = _async_to_generator(function(request, rootElement, options) {
15
- var renderToPipeableStream, runtimeContext, htmlTemplate, config, ssrConfig, shellChunkStatus, renderLevel, forceStream2String, isbot, onReady, sheet, chunkVec, root;
15
+ var renderToPipeableStream, runtimeContext, htmlTemplate, config, ssrConfig, entryName, shellChunkStatus, renderLevel, forceStream2String, isbot, onReady, sheet, chunkVec, root;
16
16
  return _ts_generator(this, function(_state) {
17
17
  switch (_state.label) {
18
18
  case 0:
@@ -22,7 +22,7 @@ var createReadableStreamFromElement = function() {
22
22
  ];
23
23
  case 1:
24
24
  renderToPipeableStream = _state.sent().renderToPipeableStream;
25
- runtimeContext = options.runtimeContext, htmlTemplate = options.htmlTemplate, config = options.config, ssrConfig = options.ssrConfig;
25
+ runtimeContext = options.runtimeContext, htmlTemplate = options.htmlTemplate, config = options.config, ssrConfig = options.ssrConfig, entryName = options.entryName;
26
26
  shellChunkStatus = ShellChunkStatus.START;
27
27
  renderLevel = RenderLevel.SERVER_RENDER;
28
28
  forceStream2String = Boolean(process.env.MODERN_JS_STREAM_TO_STRING);
@@ -47,6 +47,7 @@ var createReadableStreamFromElement = function() {
47
47
  renderLevel,
48
48
  runtimeContext,
49
49
  config,
50
+ entryName,
50
51
  styledComponentsStyleTags
51
52
  }).then(function(param) {
52
53
  var shellAfter = param.shellAfter, shellBefore = param.shellBefore;
@@ -85,6 +86,7 @@ var createReadableStreamFromElement = function() {
85
86
  ssrConfig,
86
87
  renderLevel,
87
88
  runtimeContext,
89
+ entryName,
88
90
  config
89
91
  }).then(function(param) {
90
92
  var shellAfter = param.shellAfter, shellBefore = param.shellBefore;
@@ -8,13 +8,13 @@ import { ShellChunkStatus, encodeForWebStream, getReadableStreamFromString } fro
8
8
  import { getTemplates } from "./template";
9
9
  var createReadableStreamFromElement = function() {
10
10
  var _ref = _async_to_generator(function(request, rootElement, options) {
11
- var shellChunkStatus, chunkVec, htmlTemplate, runtimeContext, config, ssrConfig, _ref2, shellBefore, shellAfter, _options_onShellReady, readableOriginal, isbot, reader, stream, e, fallbackHtml, stream1;
11
+ var shellChunkStatus, chunkVec, htmlTemplate, runtimeContext, config, ssrConfig, entryName, _ref2, shellBefore, shellAfter, _options_onShellReady, readableOriginal, isbot, reader, stream, e, fallbackHtml, stream1;
12
12
  return _ts_generator(this, function(_state) {
13
13
  switch (_state.label) {
14
14
  case 0:
15
15
  shellChunkStatus = ShellChunkStatus.START;
16
16
  chunkVec = [];
17
- htmlTemplate = options.htmlTemplate, runtimeContext = options.runtimeContext, config = options.config, ssrConfig = options.ssrConfig;
17
+ htmlTemplate = options.htmlTemplate, runtimeContext = options.runtimeContext, config = options.config, ssrConfig = options.ssrConfig, entryName = options.entryName;
18
18
  return [
19
19
  4,
20
20
  getTemplates(htmlTemplate, {
@@ -22,7 +22,8 @@ var createReadableStreamFromElement = function() {
22
22
  runtimeContext,
23
23
  ssrConfig,
24
24
  request,
25
- config
25
+ config,
26
+ entryName
26
27
  })
27
28
  ];
28
29
  case 1:
@@ -59,6 +59,7 @@ function createRenderStreaming(createReadableStreamFromElement) {
59
59
  htmlTemplate,
60
60
  runtimeContext,
61
61
  ssrConfig,
62
+ entryName,
62
63
  onShellReady: function onShellReady() {
63
64
  var cost = end();
64
65
  onTiming(SSRTimings.RENDER_SHELL, cost);
@@ -52,7 +52,7 @@ function getSSRData() {
52
52
  query: request.query,
53
53
  pathname: request.pathname,
54
54
  host: request.host,
55
- url: request.raw.url,
55
+ url: request.url,
56
56
  headers
57
57
  },
58
58
  reporter: {
@@ -45,7 +45,7 @@ const generateCode = async (entrypoints, appContext, config, onCollectRuntimePlu
45
45
  const ssrMode = getSSRMode(entryName, config);
46
46
  if (enableAsyncEntry) {
47
47
  const bootstrapFile = path.resolve(internalDirectory, `./${entryName}/${ENTRY_BOOTSTRAP_FILE_NAME}`);
48
- fs.outputFileSync(bootstrapFile, `import('./${INDEX_FILE_NAME}');`, "utf8");
48
+ fs.outputFileSync(bootstrapFile, `import(/* webpackChunkName: "async-${entryName}" */ './${INDEX_FILE_NAME}');`, "utf8");
49
49
  const bootstrapServerFile = path.resolve(internalDirectory, `./${entryName}/${ENTRY_SERVER_BOOTSTRAP_FILE_NAME}`);
50
50
  if (ssrMode) {
51
51
  fs.outputFileSync(bootstrapServerFile, `export const requestHandler = import('./${SERVER_ENTRY_POINT_FILE_NAME}').then((m) => m.requestHandler)`, "utf8");
@@ -33,7 +33,10 @@ const getImportRuntimeConfigCode = (srcDirectory, internalSrcAlias, runtimeConfi
33
33
  }
34
34
  return `let runtimeConfig;`;
35
35
  };
36
- const getRegisterRuntimePluginCode = (entryName, name, config) => `plugins.push(${name}Plugin(mergeConfig(${JSON.stringify(config)}, (runtimeConfig || {})['${name}'], ((runtimeConfig || {})['${name}ByEntries'] || {})['${entryName}'], (getGlobalAppConfig() || {})['${name}'])));`;
36
+ const getRegisterRuntimePluginCode = (entryName, name, config) => {
37
+ const configName = name === "garfish" ? "masterApp" : name;
38
+ return `plugins.push(${name}Plugin(mergeConfig(${JSON.stringify(config)}, (runtimeConfig || {})['${configName}'], ((runtimeConfig || {})['${configName}ByEntries'] || {})['${entryName}'], (getGlobalAppConfig() || {})['${configName}'])));`;
39
+ };
37
40
  const runtimeRegister = ({ entryName, srcDirectory, internalSrcAlias, metaName, runtimeConfigFile, runtimePlugins }) => `import { registerPlugin, mergeConfig } from '@${metaName}/runtime/plugin';
38
41
  import { getGlobalAppConfig, getGlobalLayoutApp } from '@${metaName}/runtime/context';
39
42
  ${getImportRuntimeConfigCode(srcDirectory, internalSrcAlias, runtimeConfigFile)}
@@ -10,12 +10,15 @@ function createSSRContext(request, options) {
10
10
  const { config, loaderContext, onError, onTiming, locals, resource, params, responseProxy, logger, metrics, reporter } = options;
11
11
  const { nonce } = config;
12
12
  const { entryName, route } = resource;
13
- const cookie = request.headers.get("cookie");
13
+ const { headers } = request;
14
+ const cookie = headers.get("cookie") || "";
14
15
  const cookieMap = parseCookie(request);
15
16
  const pathname = getPathname(request);
16
17
  const query = parseQuery(request);
17
18
  const headersData = parseHeaders(request);
18
19
  const url = new URL(request.url);
20
+ const host = headers.get("X-Forwarded-Host") || headers.get("host") || url.host;
21
+ const protocal = `${headers.get("X-Forwarded-Proto") || url.protocol || "http"}:`;
19
22
  const ssrConfig = getSSRConfigByEntry(entryName, config.ssr, config.ssrByEntries);
20
23
  const ssrMode = getSSRMode(ssrConfig);
21
24
  const loaderFailureMode = typeof ssrConfig === "object" ? ssrConfig.loaderFailureMode : void 0;
@@ -27,15 +30,16 @@ function createSSRContext(request, options) {
27
30
  logger,
28
31
  metrics,
29
32
  request: {
33
+ url: request.url.replace(url.host, host).replace(url.protocol, protocal),
30
34
  baseUrl: route.urlPath,
31
- userAgent: request.headers.get("user-agent"),
35
+ userAgent: headers.get("user-agent"),
32
36
  cookie,
33
37
  cookieMap,
34
38
  pathname,
35
39
  query,
36
40
  params,
37
41
  headers: headersData,
38
- host: url.host,
42
+ host,
39
43
  raw: request
40
44
  },
41
45
  response: {
@@ -3,7 +3,7 @@ import { attributesToString, safeReplace } from "../utils";
3
3
  import { SSR_DATA_PLACEHOLDER } from "../constants";
4
4
  import { buildHtml } from "../shared";
5
5
  function buildShellAfterTemplate(afterAppTemplate, options) {
6
- const { request, config, ssrConfig, runtimeContext, renderLevel } = options;
6
+ const { request, config, ssrConfig, runtimeContext, renderLevel, entryName } = options;
7
7
  const callbacks = [
8
8
  createReplaceSSRData({
9
9
  request,
@@ -11,8 +11,25 @@ function buildShellAfterTemplate(afterAppTemplate, options) {
11
11
  nonce: config.nonce,
12
12
  runtimeContext,
13
13
  renderLevel
14
- })
14
+ }),
15
+ (template) => injectJs(template, entryName, config.nonce)
15
16
  ];
17
+ async function injectJs(template, entryName2, nonce) {
18
+ const { routeManifest } = runtimeContext;
19
+ const { routeAssets } = routeManifest;
20
+ const asyncEntry = routeAssets[`async-${entryName2}`];
21
+ if (asyncEntry) {
22
+ var _assets_filter;
23
+ const { assets } = asyncEntry;
24
+ const jsChunkStr = assets === null || assets === void 0 ? void 0 : (_assets_filter = assets.filter((asset) => asset.endsWith(".js"))) === null || _assets_filter === void 0 ? void 0 : _assets_filter.map((asset) => {
25
+ return `<script src=${asset} nonce="${nonce}"></script>`;
26
+ }).join(" ");
27
+ if (jsChunkStr) {
28
+ return safeReplace(template, "<!--<?- chunksMap.js ?>-->", jsChunkStr);
29
+ }
30
+ }
31
+ return template;
32
+ }
16
33
  return buildHtml(afterAppTemplate, callbacks);
17
34
  }
18
35
  function createReplaceSSRData(options) {
@@ -36,7 +53,7 @@ function createReplaceSSRData(options) {
36
53
  params: request.params,
37
54
  pathname: request.pathname,
38
55
  host: request.host,
39
- url: request.raw.url,
56
+ url: request.url,
40
57
  headers
41
58
  }
42
59
  },
@@ -22,15 +22,15 @@ const checkIsInline = (chunk, enableInline) => {
22
22
  }
23
23
  };
24
24
  async function buildShellBeforeTemplate(beforeAppTemplate, options) {
25
- const { config, runtimeContext, styledComponentsStyleTags } = options;
25
+ const { config, runtimeContext, styledComponentsStyleTags, entryName } = options;
26
26
  const helmetData = ReactHelmet.renderStatic();
27
27
  const callbacks = [
28
28
  createReplaceHelemt(helmetData),
29
29
  // @TODO: prefetch scripts of lazy component
30
- (template) => injectCss(template, styledComponentsStyleTags)
30
+ (template) => injectCss(template, entryName, styledComponentsStyleTags)
31
31
  ];
32
32
  return buildHtml(beforeAppTemplate, callbacks);
33
- async function injectCss(template, styledComponentsStyleTags2) {
33
+ async function injectCss(template, entryName2, styledComponentsStyleTags2) {
34
34
  let css = await getCssChunks();
35
35
  if (styledComponentsStyleTags2) {
36
36
  css += styledComponentsStyleTags2;
@@ -42,22 +42,29 @@ async function buildShellBeforeTemplate(beforeAppTemplate, options) {
42
42
  return "";
43
43
  }
44
44
  const { routeAssets } = routeManifest;
45
- const cssChunks = [];
46
45
  const matches = matchRoutes(routes, routerContext.location, routerContext.basename);
47
- matches === null || matches === void 0 ? void 0 : matches.forEach((match, index) => {
46
+ const matchedRouteManifests = matches === null || matches === void 0 ? void 0 : matches.map((match, index) => {
48
47
  if (!index) {
49
48
  return;
50
49
  }
51
50
  const routeId = match.route.id;
52
51
  if (routeId) {
53
52
  const routeManifest2 = routeAssets[routeId];
54
- if (routeManifest2) {
55
- const { referenceCssAssets = [] } = routeManifest2;
56
- const _cssChunks = referenceCssAssets.filter((asset) => (asset === null || asset === void 0 ? void 0 : asset.endsWith(".css")) && !template.includes(asset));
57
- cssChunks.push(..._cssChunks);
58
- }
53
+ return routeManifest2;
59
54
  }
60
- });
55
+ }).filter(Boolean);
56
+ const asyncEntry = routeAssets[`async-${entryName2}`];
57
+ if (asyncEntry) {
58
+ matchedRouteManifests === null || matchedRouteManifests === void 0 ? void 0 : matchedRouteManifests.push(asyncEntry);
59
+ }
60
+ const cssChunks = matchedRouteManifests ? matchedRouteManifests === null || matchedRouteManifests === void 0 ? void 0 : matchedRouteManifests.reduce((chunks, routeManifest2) => {
61
+ const { referenceCssAssets = [] } = routeManifest2;
62
+ const _cssChunks = referenceCssAssets.filter((asset) => (asset === null || asset === void 0 ? void 0 : asset.endsWith(".css")) && !template.includes(asset));
63
+ return [
64
+ ...chunks,
65
+ ..._cssChunks
66
+ ];
67
+ }, []) : [];
61
68
  const { enableInlineStyles } = config;
62
69
  const styles = await Promise.all(cssChunks.map(async (chunk) => {
63
70
  const link = `<link href="${chunk}" rel="stylesheet" />`;
@@ -8,7 +8,7 @@ import { getTemplates } from "./template";
8
8
  import { ShellChunkStatus, getReadableStreamFromString } from "./shared";
9
9
  const createReadableStreamFromElement = async (request, rootElement, options) => {
10
10
  const { renderToPipeableStream } = await import("react-dom/server");
11
- const { runtimeContext, htmlTemplate, config, ssrConfig } = options;
11
+ const { runtimeContext, htmlTemplate, config, ssrConfig, entryName } = options;
12
12
  let shellChunkStatus = ShellChunkStatus.START;
13
13
  let renderLevel = RenderLevel.SERVER_RENDER;
14
14
  const forceStream2String = Boolean(process.env.MODERN_JS_STREAM_TO_STRING);
@@ -30,6 +30,7 @@ const createReadableStreamFromElement = async (request, rootElement, options) =>
30
30
  renderLevel,
31
31
  runtimeContext,
32
32
  config,
33
+ entryName,
33
34
  styledComponentsStyleTags
34
35
  }).then(({ shellAfter, shellBefore }) => {
35
36
  const body = new Transform({
@@ -68,6 +69,7 @@ const createReadableStreamFromElement = async (request, rootElement, options) =>
68
69
  ssrConfig,
69
70
  renderLevel,
70
71
  runtimeContext,
72
+ entryName,
71
73
  config
72
74
  }).then(({ shellAfter, shellBefore }) => {
73
75
  var _options_onShellError;
@@ -7,13 +7,14 @@ import { getTemplates } from "./template";
7
7
  const createReadableStreamFromElement = async (request, rootElement, options) => {
8
8
  let shellChunkStatus = ShellChunkStatus.START;
9
9
  const chunkVec = [];
10
- const { htmlTemplate, runtimeContext, config, ssrConfig } = options;
10
+ const { htmlTemplate, runtimeContext, config, ssrConfig, entryName } = options;
11
11
  const { shellBefore, shellAfter } = await getTemplates(htmlTemplate, {
12
12
  renderLevel: RenderLevel.SERVER_RENDER,
13
13
  runtimeContext,
14
14
  ssrConfig,
15
15
  request,
16
- config
16
+ config,
17
+ entryName
17
18
  });
18
19
  try {
19
20
  var _options_onShellReady;
@@ -46,6 +46,7 @@ function createRenderStreaming(createReadableStreamFromElement) {
46
46
  htmlTemplate,
47
47
  runtimeContext,
48
48
  ssrConfig,
49
+ entryName,
49
50
  onShellReady() {
50
51
  const cost = end();
51
52
  onTiming(SSRTimings.RENDER_SHELL, cost);
@@ -43,7 +43,7 @@ function getSSRData() {
43
43
  query: request.query,
44
44
  pathname: request.pathname,
45
45
  host: request.host,
46
- url: request.raw.url,
46
+ url: request.url,
47
47
  headers
48
48
  },
49
49
  reporter: {
@@ -7,6 +7,7 @@ export type BuildShellAfterTemplateOptions = {
7
7
  renderLevel: RenderLevel;
8
8
  ssrConfig: SSRConfig;
9
9
  request: Request;
10
+ entryName: string;
10
11
  config: HandleRequestConfig;
11
12
  };
12
13
  export declare function buildShellAfterTemplate(afterAppTemplate: string, options: BuildShellAfterTemplateOptions): Promise<string>;
@@ -2,6 +2,7 @@ import { RuntimeContext } from '../../context';
2
2
  import { HandleRequestConfig } from '../requestHandler';
3
3
  export interface BuildShellBeforeTemplateOptions {
4
4
  runtimeContext: RuntimeContext;
5
+ entryName: string;
5
6
  config: HandleRequestConfig;
6
7
  styledComponentsStyleTags?: string;
7
8
  }
@@ -7,6 +7,7 @@ export type CreateReadableStreamFromElementOptions = {
7
7
  config: HandleRequestConfig;
8
8
  ssrConfig: SSRConfig;
9
9
  htmlTemplate: string;
10
+ entryName: string;
10
11
  onShellReady?: () => void;
11
12
  onShellError?: (error: unknown) => void;
12
13
  onAllReady?: () => void;
package/package.json CHANGED
@@ -15,7 +15,7 @@
15
15
  "modern",
16
16
  "modern.js"
17
17
  ],
18
- "version": "2.58.0",
18
+ "version": "2.58.1",
19
19
  "engines": {
20
20
  "node": ">=14.17.6"
21
21
  },
@@ -177,8 +177,6 @@
177
177
  "dependencies": {
178
178
  "@babel/core": "^7.24.7",
179
179
  "@babel/types": "^7.24.7",
180
- "cookie": "0.5.0",
181
- "isbot": "3.7.1",
182
180
  "@loadable/babel-plugin": "5.15.3",
183
181
  "@loadable/component": "5.15.3",
184
182
  "@loadable/server": "5.15.3",
@@ -188,35 +186,37 @@
188
186
  "@modern-js-reduck/plugin-immutable": "^1.1.10",
189
187
  "@modern-js-reduck/react": "^1.1.10",
190
188
  "@modern-js-reduck/store": "^1.1.10",
189
+ "@swc/helpers": "0.5.3",
191
190
  "@types/loadable__component": "^5.13.4",
192
191
  "@types/react-helmet": "^6.1.2",
193
192
  "@types/styled-components": "^5.1.14",
194
- "esbuild": "0.17.19",
193
+ "cookie": "0.5.0",
195
194
  "es-module-lexer": "^1.1.0",
195
+ "esbuild": "0.17.19",
196
196
  "invariant": "^2.2.4",
197
+ "isbot": "3.7.1",
197
198
  "react-helmet": "^6.1.0",
198
199
  "react-is": "^18",
199
200
  "react-side-effect": "^2.1.1",
200
201
  "styled-components": "^5.3.1",
201
- "@swc/helpers": "0.5.3",
202
- "@modern-js/types": "2.58.0",
203
- "@modern-js/plugin": "2.58.0",
204
- "@modern-js/utils": "2.58.0",
205
- "@modern-js/plugin-data-loader": "2.58.0",
206
- "@modern-js/runtime-utils": "2.58.0"
202
+ "@modern-js/plugin": "2.58.1",
203
+ "@modern-js/runtime-utils": "2.58.1",
204
+ "@modern-js/plugin-data-loader": "2.58.1",
205
+ "@modern-js/types": "2.58.1",
206
+ "@modern-js/utils": "2.58.1"
207
207
  },
208
208
  "peerDependencies": {
209
209
  "react": ">=17",
210
210
  "react-dom": ">=17"
211
211
  },
212
212
  "devDependencies": {
213
- "@rsbuild/core": "1.0.1-beta.9",
214
- "@types/cookie": "0.5.1",
215
213
  "@remix-run/web-fetch": "^4.1.3",
214
+ "@rsbuild/core": "1.0.1-beta.13",
216
215
  "@testing-library/react": "^13.4.0",
216
+ "@types/cookie": "0.5.1",
217
217
  "@types/invariant": "^2.2.30",
218
- "@types/loadable__server": "5.12.11",
219
218
  "@types/jest": "^29",
219
+ "@types/loadable__server": "5.12.11",
220
220
  "@types/loadable__webpack-plugin": "^5.7.3",
221
221
  "@types/node": "^14",
222
222
  "@types/react-side-effect": "^1.1.1",
@@ -226,10 +226,10 @@
226
226
  "ts-jest": "^29.1.0",
227
227
  "typescript": "^5",
228
228
  "webpack": "^5.93.0",
229
- "@modern-js/app-tools": "2.58.0",
230
- "@modern-js/core": "2.58.0",
231
- "@scripts/jest-config": "2.58.0",
232
- "@scripts/build": "2.58.0"
229
+ "@modern-js/app-tools": "2.58.1",
230
+ "@modern-js/core": "2.58.1",
231
+ "@scripts/build": "2.58.1",
232
+ "@scripts/jest-config": "2.58.1"
233
233
  },
234
234
  "sideEffects": false,
235
235
  "publishConfig": {