@modern-js/runtime 2.42.2 → 2.44.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (79) hide show
  1. package/dist/cjs/cli/index.js +2 -3
  2. package/dist/cjs/ssr/cli/index.js +6 -4
  3. package/dist/cjs/ssr/index.js +11 -3
  4. package/dist/cjs/ssr/react/prerender/index.js +1 -0
  5. package/dist/cjs/ssr/serverRender/{renderToString/type.js → constants.js} +21 -11
  6. package/dist/cjs/ssr/serverRender/helmet.js +5 -4
  7. package/dist/cjs/ssr/serverRender/index.js +2 -2
  8. package/dist/cjs/ssr/serverRender/renderToStream/buildTemplate.after.js +2 -1
  9. package/dist/cjs/ssr/serverRender/renderToStream/buildTemplate.share.js +1 -1
  10. package/dist/cjs/ssr/serverRender/renderToStream/bulidTemplate.before.js +37 -10
  11. package/dist/cjs/ssr/serverRender/renderToStream/index.js +2 -7
  12. package/dist/cjs/ssr/serverRender/renderToStream/renderToPipe.js +32 -30
  13. package/dist/cjs/ssr/serverRender/renderToStream/renderToPipe.worker.js +3 -3
  14. package/dist/cjs/ssr/serverRender/renderToStream/template.js +3 -3
  15. package/dist/cjs/ssr/serverRender/renderToString/buildHtml.js +6 -12
  16. package/dist/cjs/ssr/serverRender/renderToString/entry.js +14 -12
  17. package/dist/cjs/ssr/serverRender/renderToString/index.js +0 -5
  18. package/dist/cjs/ssr/serverRender/renderToString/loadable.js +2 -6
  19. package/dist/cjs/ssr/serverRender/types.js +7 -2
  20. package/dist/cjs/ssr/serverRender/utils.js +13 -11
  21. package/dist/esm/cli/index.js +2 -3
  22. package/dist/esm/ssr/cli/index.js +6 -4
  23. package/dist/esm/ssr/index.js +10 -2
  24. package/dist/esm/ssr/react/prerender/index.js +1 -0
  25. package/dist/esm/ssr/serverRender/constants.js +14 -0
  26. package/dist/esm/ssr/serverRender/helmet.js +5 -4
  27. package/dist/esm/ssr/serverRender/index.js +2 -2
  28. package/dist/esm/ssr/serverRender/renderToStream/buildTemplate.after.js +3 -2
  29. package/dist/esm/ssr/serverRender/renderToStream/buildTemplate.share.js +5 -3
  30. package/dist/esm/ssr/serverRender/renderToStream/bulidTemplate.before.js +169 -33
  31. package/dist/esm/ssr/serverRender/renderToStream/index.js +2 -7
  32. package/dist/esm/ssr/serverRender/renderToStream/renderToPipe.js +34 -30
  33. package/dist/esm/ssr/serverRender/renderToStream/renderToPipe.worker.js +23 -13
  34. package/dist/esm/ssr/serverRender/renderToStream/template.js +37 -11
  35. package/dist/esm/ssr/serverRender/renderToString/buildHtml.js +6 -13
  36. package/dist/esm/ssr/serverRender/renderToString/entry.js +19 -13
  37. package/dist/esm/ssr/serverRender/renderToString/index.js +1 -6
  38. package/dist/esm/ssr/serverRender/renderToString/loadable.js +3 -7
  39. package/dist/esm/ssr/serverRender/types.js +6 -1
  40. package/dist/esm/ssr/serverRender/utils.js +12 -7
  41. package/dist/esm-node/cli/index.js +2 -3
  42. package/dist/esm-node/ssr/cli/index.js +6 -4
  43. package/dist/esm-node/ssr/index.js +9 -1
  44. package/dist/esm-node/ssr/react/prerender/index.js +1 -0
  45. package/dist/esm-node/ssr/serverRender/constants.js +14 -0
  46. package/dist/esm-node/ssr/serverRender/helmet.js +5 -4
  47. package/dist/esm-node/ssr/serverRender/index.js +2 -2
  48. package/dist/esm-node/ssr/serverRender/renderToStream/buildTemplate.after.js +3 -2
  49. package/dist/esm-node/ssr/serverRender/renderToStream/buildTemplate.share.js +1 -1
  50. package/dist/esm-node/ssr/serverRender/renderToStream/bulidTemplate.before.js +38 -11
  51. package/dist/esm-node/ssr/serverRender/renderToStream/index.js +2 -7
  52. package/dist/esm-node/ssr/serverRender/renderToStream/renderToPipe.js +32 -30
  53. package/dist/esm-node/ssr/serverRender/renderToStream/renderToPipe.worker.js +3 -3
  54. package/dist/esm-node/ssr/serverRender/renderToStream/template.js +3 -3
  55. package/dist/esm-node/ssr/serverRender/renderToString/buildHtml.js +6 -12
  56. package/dist/esm-node/ssr/serverRender/renderToString/entry.js +13 -11
  57. package/dist/esm-node/ssr/serverRender/renderToString/index.js +0 -5
  58. package/dist/esm-node/ssr/serverRender/renderToString/loadable.js +3 -7
  59. package/dist/esm-node/ssr/serverRender/types.js +6 -1
  60. package/dist/esm-node/ssr/serverRender/utils.js +10 -7
  61. package/dist/types/exports/server.d.ts +1 -0
  62. package/dist/types/ssr/react/prerender/index.d.ts +4 -0
  63. package/dist/types/ssr/serverRender/constants.d.ts +6 -0
  64. package/dist/types/ssr/serverRender/renderToStream/buildTemplate.after.d.ts +1 -1
  65. package/dist/types/ssr/serverRender/renderToStream/buildTemplate.share.d.ts +2 -2
  66. package/dist/types/ssr/serverRender/renderToStream/bulidTemplate.before.d.ts +2 -2
  67. package/dist/types/ssr/serverRender/renderToStream/index.d.ts +1 -1
  68. package/dist/types/ssr/serverRender/renderToStream/renderToPipe.d.ts +2 -2
  69. package/dist/types/ssr/serverRender/renderToStream/renderToPipe.worker.d.ts +2 -2
  70. package/dist/types/ssr/serverRender/renderToStream/template.d.ts +2 -2
  71. package/dist/types/ssr/serverRender/renderToString/entry.d.ts +1 -2
  72. package/dist/types/ssr/serverRender/renderToString/loadable.d.ts +1 -2
  73. package/dist/types/ssr/serverRender/renderToString/styledComponent.d.ts +1 -1
  74. package/dist/types/ssr/serverRender/types.d.ts +15 -2
  75. package/dist/types/ssr/serverRender/utils.d.ts +8 -3
  76. package/package.json +12 -12
  77. package/dist/esm/ssr/serverRender/renderToString/type.js +0 -9
  78. package/dist/esm-node/ssr/serverRender/renderToString/type.js +0 -9
  79. package/dist/types/ssr/serverRender/renderToString/type.d.ts +0 -13
@@ -18,24 +18,26 @@ var __copyProps = (to, from, except, desc) => {
18
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
19
  var utils_exports = {};
20
20
  __export(utils_exports, {
21
- CSS_CHUNKS_PLACEHOLDER: () => CSS_CHUNKS_PLACEHOLDER,
22
- ROUTER_DATA_JSON_ID: () => ROUTER_DATA_JSON_ID,
23
- SSR_DATA_JSON_ID: () => SSR_DATA_JSON_ID,
24
- attributesToString: () => attributesToString
21
+ attributesToString: () => attributesToString,
22
+ checkIsNode: () => checkIsNode,
23
+ safeReplace: () => safeReplace
25
24
  });
26
25
  module.exports = __toCommonJS(utils_exports);
27
- const CSS_CHUNKS_PLACEHOLDER = "<!--<?- chunksMap.css ?>-->";
28
- const SSR_DATA_JSON_ID = "__MODERN_SSR_DATA__";
29
- const ROUTER_DATA_JSON_ID = "__MODERN_ROUTER_DATA__";
30
26
  function attributesToString(attributes) {
31
27
  return Object.entries(attributes).reduce((str, [key, value]) => {
32
28
  return value === void 0 ? str : `${str} ${key}="${value}"`;
33
29
  }, "");
34
30
  }
31
+ function safeReplace(source, searchValue, replaceValue) {
32
+ return source.replace(searchValue, () => replaceValue);
33
+ }
34
+ function checkIsNode() {
35
+ var _process_release;
36
+ return typeof process !== "undefined" && ((_process_release = process.release) === null || _process_release === void 0 ? void 0 : _process_release.name) === "node";
37
+ }
35
38
  // Annotate the CommonJS export names for ESM import in node:
36
39
  0 && (module.exports = {
37
- CSS_CHUNKS_PLACEHOLDER,
38
- ROUTER_DATA_JSON_ID,
39
- SSR_DATA_JSON_ID,
40
- attributesToString
40
+ attributesToString,
41
+ checkIsNode,
42
+ safeReplace
41
43
  });
@@ -1,6 +1,5 @@
1
1
  import { _ as _async_to_generator } from "@swc/helpers/_/_async_to_generator";
2
2
  import { _ as _ts_generator } from "@swc/helpers/_/_ts_generator";
3
- import path from "path";
4
3
  import { isReact18, cleanRequireCache } from "@modern-js/utils";
5
4
  import { statePlugin } from "../state/cli";
6
5
  import { ssrPlugin } from "../ssr/cli";
@@ -26,8 +25,8 @@ var runtimePlugin = function() {
26
25
  setup: function(api) {
27
26
  return {
28
27
  config: function config() {
29
- var dir = api.useAppContext().internalDirectory || "";
30
- process.env.IS_REACT18 = isReact18(path.join(dir, "../../")).toString();
28
+ var appDir = api.useAppContext().appDirectory;
29
+ process.env.IS_REACT18 = isReact18(appDir).toString();
31
30
  return {
32
31
  runtime: {},
33
32
  runtimeByEntries: {},
@@ -94,11 +94,11 @@ var ssrPlugin = function() {
94
94
  },
95
95
  tools: {
96
96
  bundlerChain: function bundlerChain(chain, param) {
97
- var isServer = param.isServer, isServiceWorker = param.isServiceWorker, CHAIN_ID = param.CHAIN_ID;
97
+ var isServer = param.isServer, isServiceWorker = param.isServiceWorker;
98
98
  var userConfig = api.useResolvedConfigContext();
99
99
  if (isUseSSRBundle(userConfig) && !isServer && !isServiceWorker && checkUseStringSSR(userConfig)) {
100
100
  var LoadableBundlerPlugin = require("./loadable-bundler-plugin.js");
101
- chain.plugin(CHAIN_ID.PLUGIN.LOADABLE).use(LoadableBundlerPlugin, [
101
+ chain.plugin("loadable").use(LoadableBundlerPlugin, [
102
102
  {
103
103
  filename: LOADABLE_STATS_FILE
104
104
  }
@@ -146,7 +146,7 @@ var ssrPlugin = function() {
146
146
  modifyEntryRuntimePlugins: function modifyEntryRuntimePlugins(param) {
147
147
  var entrypoint = param.entrypoint, plugins = param.plugins, bundlerConfigs = param.bundlerConfigs;
148
148
  if (ssrConfigMap.get(entrypoint.entryName)) {
149
- var _bundlerConfigs_find_output, _bundlerConfigs_find, _config_server;
149
+ var _bundlerConfigs_find_output, _bundlerConfigs_find, _config_server, _config_server1;
150
150
  var chunkLoadingGlobal = bundlerConfigs === null || bundlerConfigs === void 0 ? void 0 : (_bundlerConfigs_find = bundlerConfigs.find(function(config2) {
151
151
  return config2.name === "client";
152
152
  })) === null || _bundlerConfigs_find === void 0 ? void 0 : (_bundlerConfigs_find_output = _bundlerConfigs_find.output) === null || _bundlerConfigs_find_output === void 0 ? void 0 : _bundlerConfigs_find_output.chunkLoadingGlobal;
@@ -154,6 +154,7 @@ var ssrPlugin = function() {
154
154
  var _config_output = config.output, enableInlineScripts = _config_output.enableInlineScripts, enableInlineStyles = _config_output.enableInlineStyles;
155
155
  var _config_html = config.html, crossorigin = _config_html.crossorigin, scriptLoading = _config_html.scriptLoading;
156
156
  var disablePrerender = typeof ((_config_server = config.server) === null || _config_server === void 0 ? void 0 : _config_server.ssr) === "object" ? Boolean(config.server.ssr.disablePrerender) : false;
157
+ var unsafeHeaders = typeof ((_config_server1 = config.server) === null || _config_server1 === void 0 ? void 0 : _config_server1.ssr) === "object" ? config.server.ssr.unsafeHeaders : void 0;
157
158
  plugins.push({
158
159
  name: PLUGIN_IDENTIFIER,
159
160
  options: JSON.stringify(_object_spread_props(_object_spread({}, ssrConfigMap.get(entrypoint.entryName) || {}), {
@@ -162,7 +163,8 @@ var ssrPlugin = function() {
162
163
  chunkLoadingGlobal,
163
164
  disablePrerender,
164
165
  enableInlineScripts: typeof enableInlineScripts === "function" ? void 0 : enableInlineScripts,
165
- enableInlineStyles: typeof enableInlineStyles === "function" ? void 0 : enableInlineStyles
166
+ enableInlineStyles: typeof enableInlineStyles === "function" ? void 0 : enableInlineStyles,
167
+ unsafeHeaders
166
168
  }))
167
169
  });
168
170
  }
@@ -9,7 +9,7 @@ import { parsedJSONFromElement } from "@modern-js/runtime-utils/parsed";
9
9
  import { RenderLevel } from "./serverRender/types";
10
10
  import { WithCallback } from "./react/withCallback";
11
11
  import { formatClient, mockResponse, isReact18 } from "./utils";
12
- import { ROUTER_DATA_JSON_ID, SSR_DATA_JSON_ID } from "./serverRender/utils";
12
+ import { ROUTER_DATA_JSON_ID, SSR_DATA_JSON_ID } from "./serverRender/constants";
13
13
  var ssr = function(config) {
14
14
  return {
15
15
  name: "@modern-js/plugin-ssr",
@@ -22,7 +22,7 @@ var ssr = function(config) {
22
22
  return {
23
23
  client: function() {
24
24
  var _ref = _async_to_generator(function(param) {
25
- var App, context, ModernRender, ModernHydrate, _window__SSR_DATA, _window, hydrateContext, callback, renderLevel;
25
+ var App, context, ModernRender, ModernHydrate, _window__SSR_DATA, _window, hydrateContext, ssrContext, _ssrContext_request, initialPathname, currentPathname, errorMsg, callback, renderLevel;
26
26
  function stringSSRHydrate() {
27
27
  if (renderLevel === RenderLevel.CLIENT_RENDER || renderLevel === RenderLevel.SERVER_PREFETCH) {
28
28
  ModernRender(/* @__PURE__ */ _jsx(App, {
@@ -85,6 +85,14 @@ var ssr = function(config) {
85
85
  },
86
86
  _hydration: true
87
87
  });
88
+ ssrContext = hydrateContext.ssrContext;
89
+ _ssrContext_request = ssrContext.request, initialPathname = _ssrContext_request.pathname;
90
+ currentPathname = window.location.pathname;
91
+ if (initialPathname !== currentPathname) {
92
+ errorMsg = "The initial URL ".concat(initialPathname, " and the URL ").concat(currentPathname, " to be hydrated do not match, reload.");
93
+ console.error(errorMsg);
94
+ window.location.reload();
95
+ }
88
96
  callback = function() {
89
97
  delete hydrateContext._hydration;
90
98
  };
@@ -76,6 +76,7 @@ function factory(Component) {
76
76
  if (!validate) {
77
77
  throw new Error("invalid props, check usage");
78
78
  }
79
+ console.error("[Warn] PreRender has been deprecated, please use SSR Cache instead. reference to docs: https://modernjs.dev/guides/advanced-features/ssr.html");
79
80
  return createElement(Component, _object_spread({}, newProps));
80
81
  }
81
82
  }
@@ -0,0 +1,14 @@
1
+ var HTML_PLACEHOLDER = "<!--<?- html ?>-->";
2
+ var SSR_DATA_PLACEHOLDER = "<!--<?- SSRDataScript ?>-->";
3
+ var CHUNK_JS_PLACEHOLDER = "<!--<?- chunksMap.js ?>-->";
4
+ var CHUNK_CSS_PLACEHOLDER = "<!--<?- chunksMap.css ?>-->";
5
+ var SSR_DATA_JSON_ID = "__MODERN_SSR_DATA__";
6
+ var ROUTER_DATA_JSON_ID = "__MODERN_ROUTER_DATA__";
7
+ export {
8
+ CHUNK_CSS_PLACEHOLDER,
9
+ CHUNK_JS_PLACEHOLDER,
10
+ HTML_PLACEHOLDER,
11
+ ROUTER_DATA_JSON_ID,
12
+ SSR_DATA_JSON_ID,
13
+ SSR_DATA_PLACEHOLDER
14
+ };
@@ -1,4 +1,5 @@
1
1
  import { EOL } from "os";
2
+ import { safeReplace } from "./utils";
2
3
  var RE_HTML_ATTR = /<html[^>]*>/;
3
4
  var RE_BODY_ATTR = /<body[^>]*>/;
4
5
  var RE_LAST_IN_HEAD = /<\/head>/;
@@ -8,11 +9,11 @@ function helmet(content, helmetData) {
8
9
  var result = content;
9
10
  var bodyAttributes = helmetData.bodyAttributes.toString();
10
11
  if (bodyAttributes) {
11
- result = result.replace(RE_BODY_ATTR, "<body ".concat(bodyAttributes, ">"));
12
+ result = safeReplace(result, RE_BODY_ATTR, "<body ".concat(bodyAttributes, ">"));
12
13
  }
13
14
  var htmlAttributes = helmetData.htmlAttributes.toString();
14
15
  if (htmlAttributes) {
15
- result = result.replace(RE_HTML_ATTR, "<html ".concat(htmlAttributes, ">"));
16
+ result = safeReplace(result, RE_HTML_ATTR, "<html ".concat(htmlAttributes, ">"));
16
17
  }
17
18
  var base = helmetData.base.toString();
18
19
  var link = helmetData.link.toString();
@@ -24,7 +25,7 @@ function helmet(content, helmetData) {
24
25
  var existTitleTag = RE_TITLE.test(content);
25
26
  var shouldReplaceTitle = existTitleTag && TEST_TITLE_CONTENT.test(title.trim());
26
27
  if (shouldReplaceTitle) {
27
- result = result.replace(RE_TITLE, title);
28
+ result = safeReplace(result, RE_TITLE, title);
28
29
  }
29
30
  var helmetStr = [
30
31
  base,
@@ -37,7 +38,7 @@ function helmet(content, helmetData) {
37
38
  ].reduce(function(pre, cur) {
38
39
  return pre + (cur.length > 0 ? " ".concat(cur).concat(EOL) : "");
39
40
  }, "");
40
- return result.replace(RE_LAST_IN_HEAD, "".concat(helmetStr, "</head>"));
41
+ return safeReplace(result, RE_LAST_IN_HEAD, "".concat(helmetStr, "</head>"));
41
42
  }
42
43
  export {
43
44
  helmet as default
@@ -1,7 +1,7 @@
1
1
  import { _ as _async_to_generator } from "@swc/helpers/_/_async_to_generator";
2
2
  import { _ as _ts_generator } from "@swc/helpers/_/_ts_generator";
3
3
  import { isReact18 } from "../utils";
4
- import { CSS_CHUNKS_PLACEHOLDER } from "./utils";
4
+ import { CHUNK_CSS_PLACEHOLDER } from "./constants";
5
5
  function serverRender(options) {
6
6
  return _serverRender.apply(this, arguments);
7
7
  }
@@ -13,7 +13,7 @@ function _serverRender() {
13
13
  case 0:
14
14
  if ((_options_context_ssrContext = options.context.ssrContext) === null || _options_context_ssrContext === void 0 ? void 0 : _options_context_ssrContext.template) {
15
15
  ;
16
- options.context.ssrContext.template = (_options_context_ssrContext1 = options.context.ssrContext) === null || _options_context_ssrContext1 === void 0 ? void 0 : _options_context_ssrContext1.template.replace("</head>", "".concat(CSS_CHUNKS_PLACEHOLDER, "</head>"));
16
+ options.context.ssrContext.template = (_options_context_ssrContext1 = options.context.ssrContext) === null || _options_context_ssrContext1 === void 0 ? void 0 : _options_context_ssrContext1.template.replace("</head>", "".concat(CHUNK_CSS_PLACEHOLDER, "</head>"));
17
17
  }
18
18
  if (!(isReact18() && options.config.mode === "stream"))
19
19
  return [
@@ -1,6 +1,7 @@
1
1
  import { _ as _object_spread } from "@swc/helpers/_/_object_spread";
2
2
  import { serializeJson } from "@modern-js/runtime-utils/node";
3
- import { attributesToString } from "../utils";
3
+ import { attributesToString, safeReplace } from "../utils";
4
+ import { SSR_DATA_PLACEHOLDER } from "../constants";
4
5
  import { buildTemplate } from "./buildTemplate.share";
5
6
  function buildShellAfterTemplate(afterAppTemplate, options) {
6
7
  var callbacks = [
@@ -9,7 +10,7 @@ function buildShellAfterTemplate(afterAppTemplate, options) {
9
10
  return buildTemplate(afterAppTemplate, callbacks);
10
11
  function injectSSRDataScript(template) {
11
12
  var ssrDataScript = buildSSRDataScript();
12
- return template.replace("<!--<?- SSRDataScript ?>-->", ssrDataScript);
13
+ return safeReplace(template, SSR_DATA_PLACEHOLDER, ssrDataScript);
13
14
  function buildSSRDataScript() {
14
15
  var _options_context = options.context, ssrContext = _options_context.ssrContext, initialData = _options_context.initialData, __i18nData__ = _options_context.__i18nData__, renderLevel = options.renderLevel;
15
16
  var request = ssrContext.request, enableUnsafeCtx = ssrContext.enableUnsafeCtx, nonce = ssrContext.nonce, tracker = ssrContext.tracker;
@@ -1,8 +1,10 @@
1
1
  var HEAD_REG_EXP = /<head(.|\n)*>(.|\n)*<\/head>/;
2
2
  function buildTemplate(template, callbacks) {
3
- return callbacks.reduce(function(template2, buildTemplateCb) {
4
- return buildTemplateCb(template2);
5
- }, template);
3
+ return callbacks.reduce(function(promise, buildTemplateCb) {
4
+ return promise.then(function(template2) {
5
+ return buildTemplateCb(template2);
6
+ });
7
+ }, Promise.resolve(template));
6
8
  }
7
9
  export {
8
10
  HEAD_REG_EXP,
@@ -1,11 +1,56 @@
1
+ import { _ as _async_to_generator } from "@swc/helpers/_/_async_to_generator";
2
+ import { _ as _instanceof } from "@swc/helpers/_/_instanceof";
1
3
  import { _ as _sliced_to_array } from "@swc/helpers/_/_sliced_to_array";
2
4
  import { _ as _to_consumable_array } from "@swc/helpers/_/_to_consumable_array";
5
+ import { _ as _ts_generator } from "@swc/helpers/_/_ts_generator";
3
6
  import ReactHelmet from "react-helmet";
4
7
  import { matchRoutes } from "@modern-js/runtime-utils/router";
5
8
  import helmetReplace from "../helmet";
6
- import { CSS_CHUNKS_PLACEHOLDER } from "../utils";
9
+ import { CHUNK_CSS_PLACEHOLDER } from "../constants";
10
+ import { checkIsNode, safeReplace } from "../utils";
7
11
  import { HEAD_REG_EXP, buildTemplate } from "./buildTemplate.share";
8
- function getHeadTemplate(beforeEntryTemplate, context) {
12
+ var readAsset = function() {
13
+ var _ref = _async_to_generator(function(chunk) {
14
+ var fs, path, filepath;
15
+ return _ts_generator(this, function(_state) {
16
+ switch (_state.label) {
17
+ case 0:
18
+ return [
19
+ 4,
20
+ import("fs/promises")
21
+ ];
22
+ case 1:
23
+ fs = _state.sent();
24
+ return [
25
+ 4,
26
+ import("path")
27
+ ];
28
+ case 2:
29
+ path = _state.sent();
30
+ filepath = path.join(__dirname, chunk);
31
+ return [
32
+ 2,
33
+ fs.readFile(filepath, "utf-8")
34
+ ];
35
+ }
36
+ });
37
+ });
38
+ return function readAsset2(chunk) {
39
+ return _ref.apply(this, arguments);
40
+ };
41
+ }();
42
+ var checkIsInline = function(chunk, enableInline) {
43
+ if (process.env.NODE_ENV === "production") {
44
+ if (_instanceof(enableInline, RegExp)) {
45
+ return enableInline.test(chunk);
46
+ } else {
47
+ return Boolean(enableInline);
48
+ }
49
+ } else {
50
+ return false;
51
+ }
52
+ };
53
+ function getHeadTemplate(beforeEntryTemplate, context, pluginConfig) {
9
54
  var callbacks = [
10
55
  function(headTemplate2) {
11
56
  var helmetData = ReactHelmet.renderStatic();
@@ -20,42 +65,133 @@ function getHeadTemplate(beforeEntryTemplate, context) {
20
65
  }
21
66
  return buildTemplate(headTemplate, callbacks);
22
67
  function injectCss(headTemplate2) {
23
- return headTemplate2.replace(CSS_CHUNKS_PLACEHOLDER, getCssChunks());
24
- function getCssChunks() {
25
- var routeManifest = context.routeManifest, routerContext = context.routerContext, routes = context.routes;
26
- if (!routeManifest || !routerContext || !routes) {
27
- return "";
68
+ return _injectCss.apply(this, arguments);
69
+ }
70
+ function _injectCss() {
71
+ _injectCss = _async_to_generator(function(headTemplate2) {
72
+ var css;
73
+ function getCssChunks() {
74
+ return _getCssChunks.apply(this, arguments);
28
75
  }
29
- var routeAssets = routeManifest.routeAssets;
30
- var cssChunks = [];
31
- var matches = matchRoutes(routes, routerContext.location, routerContext.basename);
32
- matches === null || matches === void 0 ? void 0 : matches.forEach(function(match, index) {
33
- if (!index) {
34
- return;
35
- }
36
- var routeId = match.route.id;
37
- if (routeId) {
38
- var routeManifest2 = routeAssets[routeId];
39
- if (routeManifest2) {
40
- var _cssChunks;
41
- var _routeManifest_referenceCssAssets = routeManifest2.referenceCssAssets, referenceCssAssets = _routeManifest_referenceCssAssets === void 0 ? [] : _routeManifest_referenceCssAssets;
42
- var _cssChunks1 = referenceCssAssets.filter(function(asset) {
43
- return (asset === null || asset === void 0 ? void 0 : asset.endsWith(".css")) && !headTemplate2.includes(asset);
44
- });
45
- (_cssChunks = cssChunks).push.apply(_cssChunks, _to_consumable_array(_cssChunks1));
46
- }
76
+ function _getCssChunks() {
77
+ _getCssChunks = _async_to_generator(function() {
78
+ var routeManifest, routerContext, routes, routeAssets, cssChunks, matches, enableInlineStyles, styles;
79
+ return _ts_generator(this, function(_state) {
80
+ switch (_state.label) {
81
+ case 0:
82
+ routeManifest = context.routeManifest, routerContext = context.routerContext, routes = context.routes;
83
+ if (!routeManifest || !routerContext || !routes) {
84
+ return [
85
+ 2,
86
+ ""
87
+ ];
88
+ }
89
+ routeAssets = routeManifest.routeAssets;
90
+ cssChunks = [];
91
+ matches = matchRoutes(routes, routerContext.location, routerContext.basename);
92
+ matches === null || matches === void 0 ? void 0 : matches.forEach(function(match, index) {
93
+ if (!index) {
94
+ return;
95
+ }
96
+ var routeId = match.route.id;
97
+ if (routeId) {
98
+ var routeManifest2 = routeAssets[routeId];
99
+ if (routeManifest2) {
100
+ var _cssChunks;
101
+ var _routeManifest_referenceCssAssets = routeManifest2.referenceCssAssets, referenceCssAssets = _routeManifest_referenceCssAssets === void 0 ? [] : _routeManifest_referenceCssAssets;
102
+ var _cssChunks1 = referenceCssAssets.filter(function(asset) {
103
+ return (asset === null || asset === void 0 ? void 0 : asset.endsWith(".css")) && !headTemplate2.includes(asset);
104
+ });
105
+ (_cssChunks = cssChunks).push.apply(_cssChunks, _to_consumable_array(_cssChunks1));
106
+ }
107
+ }
108
+ });
109
+ enableInlineStyles = pluginConfig.enableInlineStyles;
110
+ return [
111
+ 4,
112
+ Promise.all(cssChunks.map(function() {
113
+ var _ref2 = _async_to_generator(function(chunk) {
114
+ var link;
115
+ return _ts_generator(this, function(_state2) {
116
+ link = '<link href="'.concat(chunk, '" rel="stylesheet" />');
117
+ if (checkIsNode() && checkIsInline(chunk, enableInlineStyles)) {
118
+ return [
119
+ 2,
120
+ readAsset(chunk).then(function(content) {
121
+ return "<style>".concat(content, "</style>");
122
+ }).catch(function(_) {
123
+ return link;
124
+ })
125
+ ];
126
+ } else {
127
+ return [
128
+ 2,
129
+ link
130
+ ];
131
+ }
132
+ return [
133
+ 2
134
+ ];
135
+ });
136
+ });
137
+ return function(chunk) {
138
+ return _ref2.apply(this, arguments);
139
+ };
140
+ }()))
141
+ ];
142
+ case 1:
143
+ styles = _state.sent();
144
+ return [
145
+ 2,
146
+ "".concat(styles.join(""))
147
+ ];
148
+ }
149
+ });
150
+ });
151
+ return _getCssChunks.apply(this, arguments);
152
+ }
153
+ return _ts_generator(this, function(_state) {
154
+ switch (_state.label) {
155
+ case 0:
156
+ return [
157
+ 4,
158
+ getCssChunks()
159
+ ];
160
+ case 1:
161
+ css = _state.sent();
162
+ return [
163
+ 2,
164
+ safeReplace(headTemplate2, CHUNK_CSS_PLACEHOLDER, css)
165
+ ];
47
166
  }
48
167
  });
49
- var styleLinks = cssChunks.map(function(chunk) {
50
- return '<link href="'.concat(chunk, '" rel="stylesheet" />');
51
- });
52
- return "".concat(styleLinks.join(""));
53
- }
168
+ });
169
+ return _injectCss.apply(this, arguments);
54
170
  }
55
171
  }
56
- function buildShellBeforeTemplate(beforeAppTemplate, context) {
57
- var headTemplate = getHeadTemplate(beforeAppTemplate, context);
58
- return beforeAppTemplate.replace(HEAD_REG_EXP, headTemplate);
172
+ function buildShellBeforeTemplate(beforeAppTemplate, context, pluginConfig) {
173
+ return _buildShellBeforeTemplate.apply(this, arguments);
174
+ }
175
+ function _buildShellBeforeTemplate() {
176
+ _buildShellBeforeTemplate = _async_to_generator(function(beforeAppTemplate, context, pluginConfig) {
177
+ var headTemplate;
178
+ return _ts_generator(this, function(_state) {
179
+ switch (_state.label) {
180
+ case 0:
181
+ return [
182
+ 4,
183
+ getHeadTemplate(beforeAppTemplate, context, pluginConfig)
184
+ ];
185
+ case 1:
186
+ headTemplate = _state.sent();
187
+ return [
188
+ 2,
189
+ beforeAppTemplate.replace(HEAD_REG_EXP, headTemplate)
190
+ ];
191
+ }
192
+ });
193
+ });
194
+ return _buildShellBeforeTemplate.apply(this, arguments);
59
195
  }
60
196
  export {
61
197
  buildShellBeforeTemplate
@@ -3,11 +3,10 @@ import { _ as _ts_generator } from "@swc/helpers/_/_ts_generator";
3
3
  import { createElement } from "react";
4
4
  import { run } from "@modern-js/runtime-utils/node";
5
5
  import { time } from "@modern-js/runtime-utils/time";
6
- import { PreRender } from "../../react/prerender";
7
6
  import { SSRErrors, SSRTimings } from "../tracker";
8
7
  import renderToPipe from "./renderToPipe";
9
8
  var render = function(param) {
10
- var App = param.App, context = param.context;
9
+ var App = param.App, context = param.context, config = param.config;
11
10
  var ssrContext = context.ssrContext;
12
11
  if (!ssrContext) {
13
12
  throw new Error('The "ssrContext" must not be undefined, but received undefined');
@@ -22,12 +21,8 @@ var render = function(param) {
22
21
  })
23
22
  });
24
23
  tracker = ssrContext.tracker;
25
- pipe = renderToPipe(rootElement, context, {
24
+ pipe = renderToPipe(rootElement, context, config, {
26
25
  onShellReady: function onShellReady() {
27
- var cacheConfig = PreRender.config();
28
- if (cacheConfig) {
29
- ssrContext.cacheConfig = cacheConfig;
30
- }
31
26
  var cost = end();
32
27
  tracker.trackTiming(SSRTimings.RENDER_SHELL, cost);
33
28
  },
@@ -10,7 +10,7 @@ var ShellChunkStatus;
10
10
  ShellChunkStatus2[ShellChunkStatus2["START"] = 0] = "START";
11
11
  ShellChunkStatus2[ShellChunkStatus2["FINIESH"] = 1] = "FINIESH";
12
12
  })(ShellChunkStatus || (ShellChunkStatus = {}));
13
- function renderToPipe(rootElement, context, options) {
13
+ function renderToPipe(rootElement, context, pluginConfig, options) {
14
14
  var shellChunkStatus = 0;
15
15
  var ssrContext = context.ssrContext;
16
16
  var chunkVec = [];
@@ -24,41 +24,45 @@ function renderToPipe(rootElement, context, options) {
24
24
  var pipe = renderToPipeableStream(rootElement, _object_spread_props(_object_spread({}, options), {
25
25
  nonce: ssrContext === null || ssrContext === void 0 ? void 0 : ssrContext.nonce,
26
26
  onShellReady: function onShellReady() {
27
- var _options_onShellReady;
28
- var _getTemplates = getTemplates(context, RenderLevel.SERVER_RENDER), shellAfter = _getTemplates.shellAfter, shellBefore = _getTemplates.shellBefore;
29
- options === null || options === void 0 ? void 0 : (_options_onShellReady = options.onShellReady) === null || _options_onShellReady === void 0 ? void 0 : _options_onShellReady.call(options);
30
- var injectableTransform = new Transform({
31
- transform: function transform(chunk, _encoding, callback) {
32
- try {
33
- if (shellChunkStatus !== 1) {
34
- chunkVec.push(chunk.toString());
35
- var concatedChunk = chunkVec.join("");
36
- if (concatedChunk.endsWith(ESCAPED_SHELL_STREAM_END_MARK)) {
37
- concatedChunk = concatedChunk.replace(ESCAPED_SHELL_STREAM_END_MARK, "");
38
- shellChunkStatus = 1;
39
- this.push("".concat(shellBefore).concat(concatedChunk).concat(shellAfter));
27
+ getTemplates(context, RenderLevel.SERVER_RENDER, pluginConfig).then(function(param) {
28
+ var shellAfter = param.shellAfter, shellBefore = param.shellBefore;
29
+ var _options_onShellReady;
30
+ options === null || options === void 0 ? void 0 : (_options_onShellReady = options.onShellReady) === null || _options_onShellReady === void 0 ? void 0 : _options_onShellReady.call(options);
31
+ var injectableTransform = new Transform({
32
+ transform: function transform(chunk, _encoding, callback) {
33
+ try {
34
+ if (shellChunkStatus !== 1) {
35
+ chunkVec.push(chunk.toString());
36
+ var concatedChunk = chunkVec.join("");
37
+ if (concatedChunk.endsWith(ESCAPED_SHELL_STREAM_END_MARK)) {
38
+ concatedChunk = concatedChunk.replace(ESCAPED_SHELL_STREAM_END_MARK, "");
39
+ shellChunkStatus = 1;
40
+ this.push("".concat(shellBefore).concat(concatedChunk).concat(shellAfter));
41
+ }
42
+ } else {
43
+ this.push(chunk);
44
+ }
45
+ callback();
46
+ } catch (e) {
47
+ if (_instanceof(e, Error)) {
48
+ callback(e);
49
+ } else {
50
+ callback(new Error("Received unkown error when streaming"));
40
51
  }
41
- } else {
42
- this.push(chunk);
43
- }
44
- callback();
45
- } catch (e) {
46
- if (_instanceof(e, Error)) {
47
- callback(e);
48
- } else {
49
- callback(new Error("Received unkown error when streaming"));
50
52
  }
51
53
  }
52
- }
54
+ });
55
+ resolve(pipe(injectableTransform).pipe(stream));
53
56
  });
54
- resolve(pipe(injectableTransform).pipe(stream));
55
57
  },
56
58
  onShellError: function onShellError(error) {
57
- var _options_onShellError;
58
- var _getTemplates = getTemplates(context, RenderLevel.CLIENT_RENDER), shellAfter = _getTemplates.shellAfter, shellBefore = _getTemplates.shellBefore;
59
- var fallbackHtml = "".concat(shellBefore).concat(shellAfter);
60
- resolve(fallbackHtml);
61
- options === null || options === void 0 ? void 0 : (_options_onShellError = options.onShellError) === null || _options_onShellError === void 0 ? void 0 : _options_onShellError.call(options, error);
59
+ getTemplates(context, RenderLevel.CLIENT_RENDER, pluginConfig).then(function(param) {
60
+ var shellAfter = param.shellAfter, shellBefore = param.shellBefore;
61
+ var _options_onShellError;
62
+ var fallbackHtml = "".concat(shellBefore).concat(shellAfter);
63
+ resolve(fallbackHtml);
64
+ options === null || options === void 0 ? void 0 : (_options_onShellError = options.onShellError) === null || _options_onShellError === void 0 ? void 0 : _options_onShellError.call(options, error);
65
+ });
62
66
  }
63
67
  })).pipe;
64
68
  });