@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
@@ -1,10 +1,9 @@
1
1
  import { createElement } from "react";
2
2
  import { run } from "@modern-js/runtime-utils/node";
3
3
  import { time } from "@modern-js/runtime-utils/time";
4
- import { PreRender } from "../../react/prerender";
5
4
  import { SSRErrors, SSRTimings } from "../tracker";
6
5
  import renderToPipe from "./renderToPipe";
7
- const render = ({ App, context }) => {
6
+ const render = ({ App, context, config }) => {
8
7
  const { ssrContext } = context;
9
8
  if (!ssrContext) {
10
9
  throw new Error('The "ssrContext" must not be undefined, but received undefined');
@@ -17,12 +16,8 @@ const render = ({ App, context }) => {
17
16
  })
18
17
  });
19
18
  const { tracker } = ssrContext;
20
- const pipe = renderToPipe(rootElement, context, {
19
+ const pipe = renderToPipe(rootElement, context, config, {
21
20
  onShellReady() {
22
- const cacheConfig = PreRender.config();
23
- if (cacheConfig) {
24
- ssrContext.cacheConfig = cacheConfig;
25
- }
26
21
  const cost = end();
27
22
  tracker.trackTiming(SSRTimings.RENDER_SHELL, cost);
28
23
  },
@@ -7,7 +7,7 @@ var ShellChunkStatus;
7
7
  ShellChunkStatus2[ShellChunkStatus2["START"] = 0] = "START";
8
8
  ShellChunkStatus2[ShellChunkStatus2["FINIESH"] = 1] = "FINIESH";
9
9
  })(ShellChunkStatus || (ShellChunkStatus = {}));
10
- function renderToPipe(rootElement, context, options) {
10
+ function renderToPipe(rootElement, context, pluginConfig, options) {
11
11
  let shellChunkStatus = 0;
12
12
  const { ssrContext } = context;
13
13
  const chunkVec = [];
@@ -22,41 +22,43 @@ function renderToPipe(rootElement, context, options) {
22
22
  ...options,
23
23
  nonce: ssrContext === null || ssrContext === void 0 ? void 0 : ssrContext.nonce,
24
24
  onShellReady() {
25
- var _options_onShellReady;
26
- const { shellAfter, shellBefore } = getTemplates(context, RenderLevel.SERVER_RENDER);
27
- options === null || options === void 0 ? void 0 : (_options_onShellReady = options.onShellReady) === null || _options_onShellReady === void 0 ? void 0 : _options_onShellReady.call(options);
28
- const injectableTransform = new Transform({
29
- transform(chunk, _encoding, callback) {
30
- try {
31
- if (shellChunkStatus !== 1) {
32
- chunkVec.push(chunk.toString());
33
- let concatedChunk = chunkVec.join("");
34
- if (concatedChunk.endsWith(ESCAPED_SHELL_STREAM_END_MARK)) {
35
- concatedChunk = concatedChunk.replace(ESCAPED_SHELL_STREAM_END_MARK, "");
36
- shellChunkStatus = 1;
37
- this.push(`${shellBefore}${concatedChunk}${shellAfter}`);
25
+ getTemplates(context, RenderLevel.SERVER_RENDER, pluginConfig).then(({ shellAfter, shellBefore }) => {
26
+ var _options_onShellReady;
27
+ options === null || options === void 0 ? void 0 : (_options_onShellReady = options.onShellReady) === null || _options_onShellReady === void 0 ? void 0 : _options_onShellReady.call(options);
28
+ const injectableTransform = new Transform({
29
+ transform(chunk, _encoding, callback) {
30
+ try {
31
+ if (shellChunkStatus !== 1) {
32
+ chunkVec.push(chunk.toString());
33
+ let concatedChunk = chunkVec.join("");
34
+ if (concatedChunk.endsWith(ESCAPED_SHELL_STREAM_END_MARK)) {
35
+ concatedChunk = concatedChunk.replace(ESCAPED_SHELL_STREAM_END_MARK, "");
36
+ shellChunkStatus = 1;
37
+ this.push(`${shellBefore}${concatedChunk}${shellAfter}`);
38
+ }
39
+ } else {
40
+ this.push(chunk);
41
+ }
42
+ callback();
43
+ } catch (e) {
44
+ if (e instanceof Error) {
45
+ callback(e);
46
+ } else {
47
+ callback(new Error("Received unkown error when streaming"));
38
48
  }
39
- } else {
40
- this.push(chunk);
41
- }
42
- callback();
43
- } catch (e) {
44
- if (e instanceof Error) {
45
- callback(e);
46
- } else {
47
- callback(new Error("Received unkown error when streaming"));
48
49
  }
49
50
  }
50
- }
51
+ });
52
+ resolve(pipe(injectableTransform).pipe(stream));
51
53
  });
52
- resolve(pipe(injectableTransform).pipe(stream));
53
54
  },
54
55
  onShellError(error) {
55
- var _options_onShellError;
56
- const { shellAfter, shellBefore } = getTemplates(context, RenderLevel.CLIENT_RENDER);
57
- const fallbackHtml = `${shellBefore}${shellAfter}`;
58
- resolve(fallbackHtml);
59
- options === null || options === void 0 ? void 0 : (_options_onShellError = options.onShellError) === null || _options_onShellError === void 0 ? void 0 : _options_onShellError.call(options, error);
56
+ getTemplates(context, RenderLevel.CLIENT_RENDER, pluginConfig).then(({ shellAfter, shellBefore }) => {
57
+ var _options_onShellError;
58
+ const fallbackHtml = `${shellBefore}${shellAfter}`;
59
+ resolve(fallbackHtml);
60
+ options === null || options === void 0 ? void 0 : (_options_onShellError = options.onShellError) === null || _options_onShellError === void 0 ? void 0 : _options_onShellError.call(options, error);
61
+ });
60
62
  }
61
63
  });
62
64
  });
@@ -7,7 +7,7 @@ var ShellChunkStatus;
7
7
  ShellChunkStatus2[ShellChunkStatus2["START"] = 0] = "START";
8
8
  ShellChunkStatus2[ShellChunkStatus2["FINIESH"] = 1] = "FINIESH";
9
9
  })(ShellChunkStatus || (ShellChunkStatus = {}));
10
- function renderToPipe(rootElement, context, options) {
10
+ function renderToPipe(rootElement, context, pluginConfig, options) {
11
11
  let shellChunkStatus = 0;
12
12
  const chunkVec = [];
13
13
  const { ssrContext } = context;
@@ -17,7 +17,7 @@ function renderToPipe(rootElement, context, options) {
17
17
  ({ renderToReadableStream } = require("react-dom/server"));
18
18
  } catch (e) {
19
19
  }
20
- const { shellAfter, shellBefore } = getTemplates(context, RenderLevel.SERVER_RENDER);
20
+ const { shellAfter, shellBefore } = await getTemplates(context, RenderLevel.SERVER_RENDER, pluginConfig);
21
21
  try {
22
22
  const readableOriginal = await renderToReadableStream(rootElement, {
23
23
  ...options,
@@ -56,7 +56,7 @@ function renderToPipe(rootElement, context, options) {
56
56
  return injectableStream;
57
57
  } catch (err) {
58
58
  ssrContext === null || ssrContext === void 0 ? void 0 : ssrContext.tracker.trackError(SSRErrors.RENDER_SHELL, err);
59
- const { shellAfter: shellAfter2, shellBefore: shellBefore2 } = getTemplates(context, RenderLevel.CLIENT_RENDER);
59
+ const { shellAfter: shellAfter2, shellBefore: shellBefore2 } = await getTemplates(context, RenderLevel.CLIENT_RENDER, pluginConfig);
60
60
  const fallbackHtml = `${shellBefore2}${shellAfter2}`;
61
61
  return fallbackHtml;
62
62
  }
@@ -1,11 +1,11 @@
1
1
  import { buildShellAfterTemplate } from "./buildTemplate.after";
2
2
  import { buildShellBeforeTemplate } from "./bulidTemplate.before";
3
3
  const HTML_SEPARATOR = "<!--<?- html ?>-->";
4
- const getTemplates = (context, renderLevel) => {
4
+ const getTemplates = async (context, renderLevel, pluginConfig) => {
5
5
  const { ssrContext } = context;
6
6
  const [beforeAppTemplate = "", afterAppHtmlTemplate = ""] = ssrContext.template.split(HTML_SEPARATOR) || [];
7
- const builtBeforeTemplate = buildShellBeforeTemplate(beforeAppTemplate, context);
8
- const builtAfterTemplate = buildShellAfterTemplate(afterAppHtmlTemplate, {
7
+ const builtBeforeTemplate = await buildShellBeforeTemplate(beforeAppTemplate, context, pluginConfig);
8
+ const builtAfterTemplate = await buildShellAfterTemplate(afterAppHtmlTemplate, {
9
9
  context,
10
10
  renderLevel
11
11
  });
@@ -1,25 +1,19 @@
1
- function unsafeReplace(source, searchValue, replaceValue) {
2
- const [s1, s2] = source.split(searchValue);
3
- return s1 + replaceValue + s2;
4
- }
1
+ import { safeReplace } from "../utils";
2
+ import { HTML_PLACEHOLDER, SSR_DATA_PLACEHOLDER, CHUNK_JS_PLACEHOLDER, CHUNK_CSS_PLACEHOLDER } from "../constants";
5
3
  function buildHtml(template, callbacks) {
6
4
  return callbacks.reduce((tmp, cb) => cb(tmp), template);
7
5
  }
8
6
  function createReplaceHtml(html) {
9
- const HTML_REMARK = "<!--<?- html ?>-->";
10
- return (template) => unsafeReplace(template, HTML_REMARK, html);
7
+ return (template) => safeReplace(template, HTML_PLACEHOLDER, html);
11
8
  }
12
9
  function createReplaceSSRDataScript(data) {
13
- const SSR_DATA_REMARK = "<!--<?- SSRDataScript ?>-->";
14
- return (template) => unsafeReplace(template, SSR_DATA_REMARK, data);
10
+ return (template) => safeReplace(template, SSR_DATA_PLACEHOLDER, data);
15
11
  }
16
12
  function createReplaceChunkJs(js) {
17
- const CHUNK_JS_REMARK = "<!--<?- chunksMap.js ?>-->";
18
- return (template) => unsafeReplace(template, CHUNK_JS_REMARK, js);
13
+ return (template) => safeReplace(template, CHUNK_JS_PLACEHOLDER, js);
19
14
  }
20
15
  function createReplaceChunkCss(css) {
21
- const CHUNK_CSS_REG = "<!--<?- chunksMap.css ?>-->";
22
- return (template) => unsafeReplace(template, CHUNK_CSS_REG, css);
16
+ return (template) => safeReplace(template, CHUNK_CSS_PLACEHOLDER, css);
23
17
  }
24
18
  export {
25
19
  buildHtml,
@@ -7,17 +7,20 @@ import { serializeErrors } from "../../../router/runtime/utils";
7
7
  import helmetReplace from "../helmet";
8
8
  import { RenderLevel } from "../types";
9
9
  import prefetch from "../../prefetch";
10
- import { ROUTER_DATA_JSON_ID, SSR_DATA_JSON_ID, attributesToString } from "../utils";
10
+ import { ROUTER_DATA_JSON_ID, SSR_DATA_JSON_ID } from "../constants";
11
+ import { attributesToString } from "../utils";
11
12
  import { SSRErrors, SSRTimings } from "../tracker";
12
13
  import { createLoadableCollector } from "./loadable";
13
14
  import { createRender } from "./render";
14
15
  import { createStyledCollector } from "./styledComponent";
15
16
  import { buildHtml, createReplaceChunkCss, createReplaceChunkJs, createReplaceHtml, createReplaceSSRDataScript } from "./buildHtml";
16
- const buildTemplateData = (context, data, renderLevel, tracker) => {
17
- const { request, enableUnsafeCtx } = context;
18
- const unsafeContext = {
19
- headers: request.headers
20
- };
17
+ const buildTemplateData = (context, data, renderLevel, tracker, config) => {
18
+ const { request } = context;
19
+ const { unsafeHeaders } = config;
20
+ const headers = unsafeHeaders ? Object.fromEntries(Object.entries(request.headers).filter(([key, _]) => {
21
+ var _unsafeHeaders_map;
22
+ return unsafeHeaders === null || unsafeHeaders === void 0 ? void 0 : (_unsafeHeaders_map = unsafeHeaders.map((header) => header.toLowerCase())) === null || _unsafeHeaders_map === void 0 ? void 0 : _unsafeHeaders_map.includes(key.toLowerCase());
23
+ })) : void 0;
21
24
  return {
22
25
  data,
23
26
  context: {
@@ -27,7 +30,7 @@ const buildTemplateData = (context, data, renderLevel, tracker) => {
27
30
  pathname: request.pathname,
28
31
  host: request.host,
29
32
  url: request.url,
30
- ...enableUnsafeCtx ? unsafeContext : {}
33
+ headers
31
34
  },
32
35
  reporter: {
33
36
  sessionId: tracker.sessionId
@@ -36,8 +39,7 @@ const buildTemplateData = (context, data, renderLevel, tracker) => {
36
39
  renderLevel
37
40
  };
38
41
  };
39
- var Entry;
40
- Entry = class Entry2 {
42
+ class Entry {
41
43
  async renderToHtml(context) {
42
44
  var _ssrContext_redirection, _ssrContext_redirection1, _ssrContext_redirection2;
43
45
  const ssrContext = context.ssrContext;
@@ -59,7 +61,7 @@ Entry = class Entry2 {
59
61
  loaderData: routerContext.loaderData,
60
62
  errors: serializeErrors(routerContext.errors)
61
63
  } : void 0;
62
- const templateData = buildTemplateData(ssrContext, prefetchData, this.result.renderLevel, this.tracker);
64
+ const templateData = buildTemplateData(ssrContext, prefetchData, this.result.renderLevel, this.tracker, this.pluginConfig);
63
65
  const ssrDataScripts = this.getSSRDataScript(templateData, routerData);
64
66
  const html = buildHtml(this.template, [
65
67
  createReplaceChunkCss(this.result.chunksMap.css),
@@ -154,7 +156,7 @@ Entry = class Entry2 {
154
156
  }
155
157
  };
156
158
  }
157
- };
159
+ }
158
160
  export {
159
161
  Entry as default
160
162
  };
@@ -1,5 +1,4 @@
1
1
  import { run } from "@modern-js/runtime-utils/node";
2
- import { PreRender } from "../../react/prerender";
3
2
  import SSREntry from "./entry";
4
3
  const render = ({ App, context, config }) => {
5
4
  const ssrContext = context.ssrContext;
@@ -11,10 +10,6 @@ const render = ({ App, context, config }) => {
11
10
  });
12
11
  entry.metrics.emitCounter("app.visit.count", 1);
13
12
  const html = await entry.renderToHtml(context);
14
- const cacheConfig = PreRender.config();
15
- if (cacheConfig) {
16
- context.ssrContext.cacheConfig = cacheConfig;
17
- }
18
13
  return html;
19
14
  });
20
15
  };
@@ -1,6 +1,6 @@
1
1
  import { _ as _define_property } from "@swc/helpers/_/_define_property";
2
2
  import { ChunkExtractor } from "@loadable/server";
3
- import { attributesToString } from "../utils";
3
+ import { attributesToString, checkIsNode } from "../utils";
4
4
  const extname = (uri) => {
5
5
  if (typeof uri !== "string" || !uri.includes(".")) {
6
6
  return "";
@@ -25,10 +25,6 @@ const readAsset = async (chunk) => {
25
25
  const filepath = path.resolve(__dirname, chunk.filename);
26
26
  return fs.readFile(filepath, "utf-8");
27
27
  };
28
- const checkIsNode = () => {
29
- var _process_release;
30
- return typeof process !== "undefined" && ((_process_release = process.release) === null || _process_release === void 0 ? void 0 : _process_release.name) === "node";
31
- };
32
28
  class LoadableCollector {
33
29
  get existsAssets() {
34
30
  var _routeManifest_routeAssets_entryName, _routeManifest_routeAssets;
@@ -88,7 +84,7 @@ class LoadableCollector {
88
84
  return !jsChunkReg.test(template) && !((_this_existsAssets = this.existsAssets) === null || _this_existsAssets === void 0 ? void 0 : _this_existsAssets.includes(chunk.path));
89
85
  }).map(async (chunk) => {
90
86
  const script = `<script${attributes} src="${chunk.url}"></script>`;
91
- if (checkIsInline(chunk, enableInlineScripts) && checkIsNode()) {
87
+ if (checkIsNode() && checkIsInline(chunk, enableInlineScripts)) {
92
88
  return readAsset(chunk).then((content) => `<script>${content}</script>`).catch((_) => {
93
89
  return script;
94
90
  });
@@ -107,7 +103,7 @@ class LoadableCollector {
107
103
  return !cssChunkReg.test(template) && !((_this_existsAssets = this.existsAssets) === null || _this_existsAssets === void 0 ? void 0 : _this_existsAssets.includes(chunk.path));
108
104
  }).map(async (chunk) => {
109
105
  const link = `<link${atrributes} href="${chunk.url}" rel="stylesheet" />`;
110
- if (checkIsInline(chunk, enableInlineStyles) && checkIsNode()) {
106
+ if (checkIsNode() && checkIsInline(chunk, enableInlineStyles)) {
111
107
  return readAsset(chunk).then((content) => `<style>${content}</style>`).catch((_) => {
112
108
  return link;
113
109
  });
@@ -1,4 +1,9 @@
1
- import { RenderLevel } from "./renderToString/type";
1
+ var RenderLevel;
2
+ (function(RenderLevel2) {
3
+ RenderLevel2[RenderLevel2["CLIENT_RENDER"] = 0] = "CLIENT_RENDER";
4
+ RenderLevel2[RenderLevel2["SERVER_PREFETCH"] = 1] = "SERVER_PREFETCH";
5
+ RenderLevel2[RenderLevel2["SERVER_RENDER"] = 2] = "SERVER_RENDER";
6
+ })(RenderLevel || (RenderLevel = {}));
2
7
  export {
3
8
  RenderLevel
4
9
  };
@@ -1,14 +1,17 @@
1
- const CSS_CHUNKS_PLACEHOLDER = "<!--<?- chunksMap.css ?>-->";
2
- const SSR_DATA_JSON_ID = "__MODERN_SSR_DATA__";
3
- const ROUTER_DATA_JSON_ID = "__MODERN_ROUTER_DATA__";
4
1
  function attributesToString(attributes) {
5
2
  return Object.entries(attributes).reduce((str, [key, value]) => {
6
3
  return value === void 0 ? str : `${str} ${key}="${value}"`;
7
4
  }, "");
8
5
  }
6
+ function safeReplace(source, searchValue, replaceValue) {
7
+ return source.replace(searchValue, () => replaceValue);
8
+ }
9
+ function checkIsNode() {
10
+ var _process_release;
11
+ return typeof process !== "undefined" && ((_process_release = process.release) === null || _process_release === void 0 ? void 0 : _process_release.name) === "node";
12
+ }
9
13
  export {
10
- CSS_CHUNKS_PLACEHOLDER,
11
- ROUTER_DATA_JSON_ID,
12
- SSR_DATA_JSON_ID,
13
- attributesToString
14
+ attributesToString,
15
+ checkIsNode,
16
+ safeReplace
14
17
  };
@@ -1,4 +1,5 @@
1
1
  import { AfterMatchContext, AfterRenderContext, MiddlewareContext, NextFunction } from '@modern-js/types';
2
+ export type { Container, CacheControl, CacheOptionProvider, CacheOption, } from '@modern-js/types';
2
3
  export declare const hook: (attacher: ({ addMiddleware, afterMatch, afterRender, }: {
3
4
  addMiddleware: (mid: Middleware) => void;
4
5
  afterRender: (hook: AfterRenderHook) => void;
@@ -1 +1,5 @@
1
+ /**
2
+ * @deprecated
3
+ * The Prerender already has been deprecated, please use [SSR Cache](https://modernjs.dev/guides/advanced-features/ssr.html) instead.
4
+ */
1
5
  export declare const PreRender: any;
@@ -0,0 +1,6 @@
1
+ export declare const HTML_PLACEHOLDER = "<!--<?- html ?>-->";
2
+ export declare const SSR_DATA_PLACEHOLDER = "<!--<?- SSRDataScript ?>-->";
3
+ export declare const CHUNK_JS_PLACEHOLDER = "<!--<?- chunksMap.js ?>-->";
4
+ export declare const CHUNK_CSS_PLACEHOLDER = "<!--<?- chunksMap.css ?>-->";
5
+ export declare const SSR_DATA_JSON_ID = "__MODERN_SSR_DATA__";
6
+ export declare const ROUTER_DATA_JSON_ID = "__MODERN_ROUTER_DATA__";
@@ -3,5 +3,5 @@ type BuildShellAfterTemplateOptions = {
3
3
  context: RuntimeContext;
4
4
  renderLevel: RenderLevel;
5
5
  };
6
- export declare function buildShellAfterTemplate(afterAppTemplate: string, options: BuildShellAfterTemplateOptions): string;
6
+ export declare function buildShellAfterTemplate(afterAppTemplate: string, options: BuildShellAfterTemplateOptions): Promise<string>;
7
7
  export {};
@@ -1,3 +1,3 @@
1
1
  export declare const HEAD_REG_EXP: RegExp;
2
- export type BuildTemplateCb = (headTemplate: string) => string;
3
- export declare function buildTemplate(template: string, callbacks: BuildTemplateCb[]): string;
2
+ export type BuildTemplateCb = (headTemplate: string) => string | Promise<string>;
3
+ export declare function buildTemplate(template: string, callbacks: BuildTemplateCb[]): Promise<string>;
@@ -1,2 +1,2 @@
1
- import { RuntimeContext } from '../types';
2
- export declare function buildShellBeforeTemplate(beforeAppTemplate: string, context: RuntimeContext): string;
1
+ import { RuntimeContext, SSRPluginConfig } from '../types';
2
+ export declare function buildShellBeforeTemplate(beforeAppTemplate: string, context: RuntimeContext, pluginConfig: SSRPluginConfig): Promise<string>;
@@ -1,3 +1,3 @@
1
1
  /// <reference types="node" />
2
2
  import { ServerRenderOptions } from '../types';
3
- export declare const render: ({ App, context }: ServerRenderOptions) => Promise<import("./renderToPipe").Pipe<import("stream").Writable>>;
3
+ export declare const render: ({ App, context, config }: ServerRenderOptions) => Promise<import("./renderToPipe").Pipe<import("stream").Writable>>;
@@ -2,7 +2,7 @@
2
2
  /// <reference types="react" />
3
3
  import { Writable } from 'stream';
4
4
  import type { RenderToPipeableStreamOptions } from 'react-dom/server';
5
- import { RuntimeContext } from '../types';
5
+ import { RuntimeContext, SSRPluginConfig } from '../types';
6
6
  export type Pipe<T extends Writable> = (output: T) => Promise<T | string>;
7
- declare function renderToPipe(rootElement: React.ReactElement, context: RuntimeContext, options?: RenderToPipeableStreamOptions): Pipe<Writable>;
7
+ declare function renderToPipe(rootElement: React.ReactElement, context: RuntimeContext, pluginConfig: SSRPluginConfig, options?: RenderToPipeableStreamOptions): Pipe<Writable>;
8
8
  export default renderToPipe;
@@ -2,7 +2,7 @@
2
2
  /// <reference types="react" />
3
3
  import type { Writable } from 'stream';
4
4
  import type { RenderToReadableStreamOptions } from 'react-dom/server';
5
- import { RuntimeContext } from '../types';
5
+ import { RuntimeContext, SSRPluginConfig } from '../types';
6
6
  export type Pipe<T extends Writable> = (output: T) => Promise<T | string>;
7
- declare function renderToPipe(rootElement: React.ReactElement, context: RuntimeContext, options?: RenderToReadableStreamOptions): Promise<string | ReadableStream<any>>;
7
+ declare function renderToPipe(rootElement: React.ReactElement, context: RuntimeContext, pluginConfig: SSRPluginConfig, options?: RenderToReadableStreamOptions): Promise<string | ReadableStream<any>>;
8
8
  export default renderToPipe;
@@ -1,6 +1,6 @@
1
- import { RenderLevel, RuntimeContext } from '../types';
1
+ import { RenderLevel, RuntimeContext, SSRPluginConfig } from '../types';
2
2
  export type InjectTemplate = {
3
3
  shellBefore: string;
4
4
  shellAfter: string;
5
5
  };
6
- export declare const getTemplates: (context: RuntimeContext, renderLevel: RenderLevel) => InjectTemplate;
6
+ export declare const getTemplates: (context: RuntimeContext, renderLevel: RenderLevel, pluginConfig: SSRPluginConfig) => Promise<InjectTemplate>;
@@ -1,6 +1,5 @@
1
- import { RuntimeContext, ModernSSRReactComponent, SSRPluginConfig, SSRServerContext } from '../types';
1
+ import { RuntimeContext, ModernSSRReactComponent, SSRPluginConfig, SSRServerContext, RenderResult } from '../types';
2
2
  import { SSRTracker } from '../tracker';
3
- import { RenderResult } from './type';
4
3
  type EntryOptions = {
5
4
  ctx: SSRServerContext;
6
5
  App: ModernSSRReactComponent;
@@ -1,6 +1,5 @@
1
1
  import { ReactElement } from 'react';
2
- import { SSRPluginConfig } from '../types';
3
- import { RenderResult } from './type';
2
+ import { SSRPluginConfig, RenderResult } from '../types';
4
3
  import type { Collector } from './render';
5
4
  declare class LoadableCollector implements Collector {
6
5
  private options;
@@ -1,6 +1,6 @@
1
1
  import { ServerStyleSheet } from 'styled-components';
2
2
  import { ReactElement } from 'react';
3
- import type { RenderResult } from './type';
3
+ import type { RenderResult } from '../types';
4
4
  import type { Collector } from './render';
5
5
  declare class StyledCollector implements Collector {
6
6
  sheet: ServerStyleSheet;
@@ -2,9 +2,21 @@
2
2
  import { ServerUserConfig } from '@modern-js/app-tools';
3
3
  import type { BaseSSRServerContext } from '@modern-js/types';
4
4
  import type { RuntimeContext } from '../../core';
5
- import { RenderLevel } from './renderToString/type';
6
5
  import type { BuildHtmlCb } from './renderToString/buildHtml';
7
6
  import type { SSRTracker } from './tracker';
7
+ export declare enum RenderLevel {
8
+ CLIENT_RENDER = 0,
9
+ SERVER_PREFETCH = 1,
10
+ SERVER_RENDER = 2
11
+ }
12
+ export type RenderResult = {
13
+ renderLevel: RenderLevel;
14
+ html?: string;
15
+ chunksMap: {
16
+ js: string;
17
+ css: string;
18
+ };
19
+ };
8
20
  export type SSRServerContext = BaseSSRServerContext & {
9
21
  request: BaseSSRServerContext['request'] & {
10
22
  userAgent: string;
@@ -15,7 +27,7 @@ export type SSRServerContext = BaseSSRServerContext & {
15
27
  tracker: SSRTracker;
16
28
  };
17
29
  export type ModernSSRReactComponent = React.ComponentType<any>;
18
- export { RuntimeContext, RenderLevel };
30
+ export { RuntimeContext };
19
31
  export type SSRPluginConfig = {
20
32
  crossorigin?: boolean | 'anonymous' | 'use-credentials';
21
33
  scriptLoading?: 'defer' | 'blocking' | 'module';
@@ -23,6 +35,7 @@ export type SSRPluginConfig = {
23
35
  enableInlineScripts?: boolean | RegExp;
24
36
  disablePrerender?: boolean;
25
37
  chunkLoadingGlobal?: string;
38
+ unsafeHeaders?: string[];
26
39
  } & Exclude<ServerUserConfig['ssr'], boolean>;
27
40
  export type ServerRenderOptions = {
28
41
  App: ModernSSRReactComponent;
@@ -1,4 +1,9 @@
1
- export declare const CSS_CHUNKS_PLACEHOLDER = "<!--<?- chunksMap.css ?>-->";
2
- export declare const SSR_DATA_JSON_ID = "__MODERN_SSR_DATA__";
3
- export declare const ROUTER_DATA_JSON_ID = "__MODERN_ROUTER_DATA__";
4
1
  export declare function attributesToString(attributes: Record<string, any>): string;
2
+ /**
3
+ * @param source
4
+ * @param searchValue
5
+ * @param replaceValue
6
+ * @returns
7
+ */
8
+ export declare function safeReplace(source: string, searchValue: string | RegExp, replaceValue: string): string;
9
+ export declare function checkIsNode(): boolean;
package/package.json CHANGED
@@ -15,7 +15,7 @@
15
15
  "modern",
16
16
  "modern.js"
17
17
  ],
18
- "version": "2.42.2",
18
+ "version": "2.44.0",
19
19
  "engines": {
20
20
  "node": ">=14.17.6"
21
21
  },
@@ -147,7 +147,7 @@
147
147
  },
148
148
  "dependencies": {
149
149
  "@babel/core": "^7.23.2",
150
- "@babel/types": "^7.22.15",
150
+ "@babel/types": "^7.23.0",
151
151
  "cookie": "0.5.0",
152
152
  "@loadable/babel-plugin": "5.15.3",
153
153
  "@loadable/component": "5.15.3",
@@ -171,10 +171,10 @@
171
171
  "react-side-effect": "^2.1.1",
172
172
  "styled-components": "^5.3.1",
173
173
  "@swc/helpers": "0.5.3",
174
- "@modern-js/types": "2.42.2",
175
- "@modern-js/plugin": "2.42.2",
176
- "@modern-js/runtime-utils": "2.42.2",
177
- "@modern-js/utils": "2.42.2"
174
+ "@modern-js/types": "2.44.0",
175
+ "@modern-js/utils": "2.44.0",
176
+ "@modern-js/runtime-utils": "2.44.0",
177
+ "@modern-js/plugin": "2.44.0"
178
178
  },
179
179
  "peerDependencies": {
180
180
  "react": ">=17",
@@ -194,12 +194,12 @@
194
194
  "react-dom": "^18",
195
195
  "ts-jest": "^29.1.0",
196
196
  "typescript": "^5",
197
- "webpack": "^5.88.1",
198
- "@modern-js/core": "2.42.2",
199
- "@modern-js/app-tools": "2.42.2",
200
- "@scripts/build": "2.42.2",
201
- "@scripts/jest-config": "2.42.2",
202
- "@modern-js/server-core": "2.42.2"
197
+ "webpack": "^5.89.0",
198
+ "@modern-js/app-tools": "2.44.0",
199
+ "@modern-js/core": "2.44.0",
200
+ "@modern-js/server-core": "2.44.0",
201
+ "@scripts/build": "2.44.0",
202
+ "@scripts/jest-config": "2.44.0"
203
203
  },
204
204
  "sideEffects": false,
205
205
  "publishConfig": {
@@ -1,9 +0,0 @@
1
- var RenderLevel;
2
- (function(RenderLevel2) {
3
- RenderLevel2[RenderLevel2["CLIENT_RENDER"] = 0] = "CLIENT_RENDER";
4
- RenderLevel2[RenderLevel2["SERVER_PREFETCH"] = 1] = "SERVER_PREFETCH";
5
- RenderLevel2[RenderLevel2["SERVER_RENDER"] = 2] = "SERVER_RENDER";
6
- })(RenderLevel || (RenderLevel = {}));
7
- export {
8
- RenderLevel
9
- };
@@ -1,9 +0,0 @@
1
- var RenderLevel;
2
- (function(RenderLevel2) {
3
- RenderLevel2[RenderLevel2["CLIENT_RENDER"] = 0] = "CLIENT_RENDER";
4
- RenderLevel2[RenderLevel2["SERVER_PREFETCH"] = 1] = "SERVER_PREFETCH";
5
- RenderLevel2[RenderLevel2["SERVER_RENDER"] = 2] = "SERVER_RENDER";
6
- })(RenderLevel || (RenderLevel = {}));
7
- export {
8
- RenderLevel
9
- };
@@ -1,13 +0,0 @@
1
- export declare enum RenderLevel {
2
- CLIENT_RENDER = 0,
3
- SERVER_PREFETCH = 1,
4
- SERVER_RENDER = 2
5
- }
6
- export type RenderResult = {
7
- renderLevel: RenderLevel;
8
- html?: string;
9
- chunksMap: {
10
- js: string;
11
- css: string;
12
- };
13
- };