@modern-js/runtime 2.43.0 → 2.45.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 (51) hide show
  1. package/dist/cjs/ssr/cli/index.js +3 -7
  2. package/dist/cjs/ssr/prefetch.js +1 -2
  3. package/dist/cjs/ssr/serverRender/renderToStream/buildTemplate.share.js +1 -1
  4. package/dist/cjs/ssr/serverRender/renderToStream/bulidTemplate.before.js +36 -10
  5. package/dist/cjs/ssr/serverRender/renderToStream/index.js +2 -2
  6. package/dist/cjs/ssr/serverRender/renderToStream/renderToPipe.js +32 -30
  7. package/dist/cjs/ssr/serverRender/renderToStream/renderToPipe.worker.js +3 -3
  8. package/dist/cjs/ssr/serverRender/renderToStream/template.js +3 -3
  9. package/dist/cjs/ssr/serverRender/renderToString/entry.js +0 -2
  10. package/dist/cjs/ssr/serverRender/renderToString/index.js +0 -1
  11. package/dist/cjs/ssr/serverRender/renderToString/loadable.js +4 -7
  12. package/dist/cjs/ssr/serverRender/tracker.js +8 -20
  13. package/dist/cjs/ssr/serverRender/utils.js +6 -0
  14. package/dist/esm/ssr/cli/index.js +5 -8
  15. package/dist/esm/ssr/prefetch.js +1 -2
  16. package/dist/esm/ssr/serverRender/renderToStream/buildTemplate.share.js +5 -3
  17. package/dist/esm/ssr/serverRender/renderToStream/bulidTemplate.before.js +168 -33
  18. package/dist/esm/ssr/serverRender/renderToStream/index.js +2 -2
  19. package/dist/esm/ssr/serverRender/renderToStream/renderToPipe.js +34 -30
  20. package/dist/esm/ssr/serverRender/renderToStream/renderToPipe.worker.js +23 -13
  21. package/dist/esm/ssr/serverRender/renderToStream/template.js +37 -11
  22. package/dist/esm/ssr/serverRender/renderToString/entry.js +0 -2
  23. package/dist/esm/ssr/serverRender/renderToString/index.js +0 -1
  24. package/dist/esm/ssr/serverRender/renderToString/loadable.js +5 -8
  25. package/dist/esm/ssr/serverRender/tracker.js +8 -20
  26. package/dist/esm/ssr/serverRender/utils.js +5 -0
  27. package/dist/esm-node/ssr/cli/index.js +3 -7
  28. package/dist/esm-node/ssr/prefetch.js +1 -2
  29. package/dist/esm-node/ssr/serverRender/renderToStream/buildTemplate.share.js +1 -1
  30. package/dist/esm-node/ssr/serverRender/renderToStream/bulidTemplate.before.js +37 -11
  31. package/dist/esm-node/ssr/serverRender/renderToStream/index.js +2 -2
  32. package/dist/esm-node/ssr/serverRender/renderToStream/renderToPipe.js +32 -30
  33. package/dist/esm-node/ssr/serverRender/renderToStream/renderToPipe.worker.js +3 -3
  34. package/dist/esm-node/ssr/serverRender/renderToStream/template.js +3 -3
  35. package/dist/esm-node/ssr/serverRender/renderToString/entry.js +0 -2
  36. package/dist/esm-node/ssr/serverRender/renderToString/index.js +0 -1
  37. package/dist/esm-node/ssr/serverRender/renderToString/loadable.js +5 -8
  38. package/dist/esm-node/ssr/serverRender/tracker.js +8 -20
  39. package/dist/esm-node/ssr/serverRender/utils.js +5 -0
  40. package/dist/types/ssr/serverRender/renderToStream/buildTemplate.after.d.ts +1 -1
  41. package/dist/types/ssr/serverRender/renderToStream/buildTemplate.share.d.ts +2 -2
  42. package/dist/types/ssr/serverRender/renderToStream/bulidTemplate.before.d.ts +2 -2
  43. package/dist/types/ssr/serverRender/renderToStream/index.d.ts +1 -1
  44. package/dist/types/ssr/serverRender/renderToStream/renderToPipe.d.ts +2 -2
  45. package/dist/types/ssr/serverRender/renderToStream/renderToPipe.worker.d.ts +2 -2
  46. package/dist/types/ssr/serverRender/renderToStream/template.d.ts +2 -2
  47. package/dist/types/ssr/serverRender/renderToString/entry.d.ts +0 -1
  48. package/dist/types/ssr/serverRender/tracker.d.ts +1 -1
  49. package/dist/types/ssr/serverRender/types.d.ts +1 -1
  50. package/dist/types/ssr/serverRender/utils.d.ts +1 -0
  51. package/package.json +10 -10
@@ -154,24 +154,20 @@ const ssrPlugin = () => ({
154
154
  },
155
155
  modifyEntryRuntimePlugins({ entrypoint, plugins, bundlerConfigs }) {
156
156
  if (ssrConfigMap.get(entrypoint.entryName)) {
157
- var _bundlerConfigs_find_output, _bundlerConfigs_find, _config_server, _config_server1;
157
+ var _bundlerConfigs_find_output, _bundlerConfigs_find;
158
158
  const chunkLoadingGlobal = bundlerConfigs === null || bundlerConfigs === void 0 ? void 0 : (_bundlerConfigs_find = bundlerConfigs.find((config2) => config2.name === "client")) === 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;
159
159
  const config = api.useResolvedConfigContext();
160
160
  const { enableInlineScripts, enableInlineStyles } = config.output;
161
161
  const { crossorigin, scriptLoading } = config.html;
162
- const disablePrerender = typeof ((_config_server = config.server) === null || _config_server === void 0 ? void 0 : _config_server.ssr) === "object" ? Boolean(config.server.ssr.disablePrerender) : false;
163
- const unsafeHeaders = typeof ((_config_server1 = config.server) === null || _config_server1 === void 0 ? void 0 : _config_server1.ssr) === "object" ? config.server.ssr.unsafeHeaders : void 0;
164
162
  plugins.push({
165
163
  name: PLUGIN_IDENTIFIER,
166
164
  options: JSON.stringify({
165
+ scriptLoading,
167
166
  ...ssrConfigMap.get(entrypoint.entryName) || {},
168
167
  crossorigin,
169
- scriptLoading,
170
168
  chunkLoadingGlobal,
171
- disablePrerender,
172
169
  enableInlineScripts: typeof enableInlineScripts === "function" ? void 0 : enableInlineScripts,
173
- enableInlineStyles: typeof enableInlineStyles === "function" ? void 0 : enableInlineStyles,
174
- unsafeHeaders
170
+ enableInlineStyles: typeof enableInlineStyles === "function" ? void 0 : enableInlineStyles
175
171
  })
176
172
  });
177
173
  }
@@ -77,8 +77,7 @@ const prefetch = async (App, context, config, tracker) => (0, import_node.run)(c
77
77
  Object.keys(loadersData).forEach((id) => {
78
78
  const data = loadersData[id];
79
79
  if (data._error) {
80
- ssrContext.logger.error("App Prefetch Loader", data._error);
81
- ssrContext.metrics.emitCounter("app.prefetch.loader.error", 1);
80
+ ssrContext.logger.error("App Load use-loader", data._error);
82
81
  delete data._error;
83
82
  }
84
83
  });
@@ -24,7 +24,7 @@ __export(buildTemplate_share_exports, {
24
24
  module.exports = __toCommonJS(buildTemplate_share_exports);
25
25
  const HEAD_REG_EXP = /<head(.|\n)*>(.|\n)*<\/head>/;
26
26
  function buildTemplate(template, callbacks) {
27
- return callbacks.reduce((template2, buildTemplateCb) => buildTemplateCb(template2), template);
27
+ return callbacks.reduce((promise, buildTemplateCb) => promise.then((template2) => buildTemplateCb(template2)), Promise.resolve(template));
28
28
  }
29
29
  // Annotate the CommonJS export names for ESM import in node:
30
30
  0 && (module.exports = {
@@ -37,7 +37,24 @@ var import_helmet = __toESM(require("../helmet"));
37
37
  var import_constants = require("../constants");
38
38
  var import_utils = require("../utils");
39
39
  var import_buildTemplate = require("./buildTemplate.share");
40
- function getHeadTemplate(beforeEntryTemplate, context) {
40
+ const readAsset = async (chunk) => {
41
+ const fs = await Promise.resolve().then(() => __toESM(require("fs/promises")));
42
+ const path = await Promise.resolve().then(() => __toESM(require("path")));
43
+ const filepath = path.join(__dirname, chunk);
44
+ return fs.readFile(filepath, "utf-8");
45
+ };
46
+ const checkIsInline = (chunk, enableInline) => {
47
+ if (process.env.NODE_ENV === "production") {
48
+ if (enableInline instanceof RegExp) {
49
+ return enableInline.test(chunk);
50
+ } else {
51
+ return Boolean(enableInline);
52
+ }
53
+ } else {
54
+ return false;
55
+ }
56
+ };
57
+ function getHeadTemplate(beforeEntryTemplate, context, pluginConfig) {
41
58
  const callbacks = [
42
59
  (headTemplate2) => {
43
60
  const helmetData = import_react_helmet.default.renderStatic();
@@ -51,9 +68,10 @@ function getHeadTemplate(beforeEntryTemplate, context) {
51
68
  return "";
52
69
  }
53
70
  return (0, import_buildTemplate.buildTemplate)(headTemplate, callbacks);
54
- function injectCss(headTemplate2) {
55
- return (0, import_utils.safeReplace)(headTemplate2, import_constants.CHUNK_CSS_PLACEHOLDER, getCssChunks());
56
- function getCssChunks() {
71
+ async function injectCss(headTemplate2) {
72
+ const css = await getCssChunks();
73
+ return (0, import_utils.safeReplace)(headTemplate2, import_constants.CHUNK_CSS_PLACEHOLDER, css);
74
+ async function getCssChunks() {
57
75
  const { routeManifest, routerContext, routes } = context;
58
76
  if (!routeManifest || !routerContext || !routes) {
59
77
  return "";
@@ -75,15 +93,23 @@ function getHeadTemplate(beforeEntryTemplate, context) {
75
93
  }
76
94
  }
77
95
  });
78
- const styleLinks = cssChunks.map((chunk) => {
79
- return `<link href="${chunk}" rel="stylesheet" />`;
80
- });
81
- return `${styleLinks.join("")}`;
96
+ const { enableInlineStyles } = pluginConfig;
97
+ const styles = await Promise.all(cssChunks.map(async (chunk) => {
98
+ const link = `<link href="${chunk}" rel="stylesheet" />`;
99
+ if ((0, import_utils.checkIsNode)() && checkIsInline(chunk, enableInlineStyles)) {
100
+ return readAsset(chunk).then((content) => `<style>${content}</style>`).catch((_) => {
101
+ return link;
102
+ });
103
+ } else {
104
+ return link;
105
+ }
106
+ }));
107
+ return `${styles.join("")}`;
82
108
  }
83
109
  }
84
110
  }
85
- function buildShellBeforeTemplate(beforeAppTemplate, context) {
86
- const headTemplate = getHeadTemplate(beforeAppTemplate, context);
111
+ async function buildShellBeforeTemplate(beforeAppTemplate, context, pluginConfig) {
112
+ const headTemplate = await getHeadTemplate(beforeAppTemplate, context, pluginConfig);
87
113
  return beforeAppTemplate.replace(import_buildTemplate.HEAD_REG_EXP, headTemplate);
88
114
  }
89
115
  // Annotate the CommonJS export names for ESM import in node:
@@ -36,7 +36,7 @@ var import_node = require("@modern-js/runtime-utils/node");
36
36
  var import_time = require("@modern-js/runtime-utils/time");
37
37
  var import_tracker = require("../tracker");
38
38
  var import_renderToPipe = __toESM(require("./renderToPipe"));
39
- const render = ({ App, context }) => {
39
+ const render = ({ App, context, config }) => {
40
40
  const { ssrContext } = context;
41
41
  if (!ssrContext) {
42
42
  throw new Error('The "ssrContext" must not be undefined, but received undefined');
@@ -49,7 +49,7 @@ const render = ({ App, context }) => {
49
49
  })
50
50
  });
51
51
  const { tracker } = ssrContext;
52
- const pipe = (0, import_renderToPipe.default)(rootElement, context, {
52
+ const pipe = (0, import_renderToPipe.default)(rootElement, context, config, {
53
53
  onShellReady() {
54
54
  const cost = end();
55
55
  tracker.trackTiming(import_tracker.SSRTimings.RENDER_SHELL, cost);
@@ -30,7 +30,7 @@ var ShellChunkStatus;
30
30
  ShellChunkStatus2[ShellChunkStatus2["START"] = 0] = "START";
31
31
  ShellChunkStatus2[ShellChunkStatus2["FINIESH"] = 1] = "FINIESH";
32
32
  })(ShellChunkStatus || (ShellChunkStatus = {}));
33
- function renderToPipe(rootElement, context, options) {
33
+ function renderToPipe(rootElement, context, pluginConfig, options) {
34
34
  let shellChunkStatus = 0;
35
35
  const { ssrContext } = context;
36
36
  const chunkVec = [];
@@ -45,41 +45,43 @@ function renderToPipe(rootElement, context, options) {
45
45
  ...options,
46
46
  nonce: ssrContext === null || ssrContext === void 0 ? void 0 : ssrContext.nonce,
47
47
  onShellReady() {
48
- var _options_onShellReady;
49
- const { shellAfter, shellBefore } = (0, import_template.getTemplates)(context, import_types.RenderLevel.SERVER_RENDER);
50
- options === null || options === void 0 ? void 0 : (_options_onShellReady = options.onShellReady) === null || _options_onShellReady === void 0 ? void 0 : _options_onShellReady.call(options);
51
- const injectableTransform = new import_stream.Transform({
52
- transform(chunk, _encoding, callback) {
53
- try {
54
- if (shellChunkStatus !== 1) {
55
- chunkVec.push(chunk.toString());
56
- let concatedChunk = chunkVec.join("");
57
- if (concatedChunk.endsWith(import_common.ESCAPED_SHELL_STREAM_END_MARK)) {
58
- concatedChunk = concatedChunk.replace(import_common.ESCAPED_SHELL_STREAM_END_MARK, "");
59
- shellChunkStatus = 1;
60
- this.push(`${shellBefore}${concatedChunk}${shellAfter}`);
48
+ (0, import_template.getTemplates)(context, import_types.RenderLevel.SERVER_RENDER, pluginConfig).then(({ shellAfter, shellBefore }) => {
49
+ var _options_onShellReady;
50
+ options === null || options === void 0 ? void 0 : (_options_onShellReady = options.onShellReady) === null || _options_onShellReady === void 0 ? void 0 : _options_onShellReady.call(options);
51
+ const injectableTransform = new import_stream.Transform({
52
+ transform(chunk, _encoding, callback) {
53
+ try {
54
+ if (shellChunkStatus !== 1) {
55
+ chunkVec.push(chunk.toString());
56
+ let concatedChunk = chunkVec.join("");
57
+ if (concatedChunk.endsWith(import_common.ESCAPED_SHELL_STREAM_END_MARK)) {
58
+ concatedChunk = concatedChunk.replace(import_common.ESCAPED_SHELL_STREAM_END_MARK, "");
59
+ shellChunkStatus = 1;
60
+ this.push(`${shellBefore}${concatedChunk}${shellAfter}`);
61
+ }
62
+ } else {
63
+ this.push(chunk);
64
+ }
65
+ callback();
66
+ } catch (e) {
67
+ if (e instanceof Error) {
68
+ callback(e);
69
+ } else {
70
+ callback(new Error("Received unkown error when streaming"));
61
71
  }
62
- } else {
63
- this.push(chunk);
64
- }
65
- callback();
66
- } catch (e) {
67
- if (e instanceof Error) {
68
- callback(e);
69
- } else {
70
- callback(new Error("Received unkown error when streaming"));
71
72
  }
72
73
  }
73
- }
74
+ });
75
+ resolve(pipe(injectableTransform).pipe(stream));
74
76
  });
75
- resolve(pipe(injectableTransform).pipe(stream));
76
77
  },
77
78
  onShellError(error) {
78
- var _options_onShellError;
79
- const { shellAfter, shellBefore } = (0, import_template.getTemplates)(context, import_types.RenderLevel.CLIENT_RENDER);
80
- const fallbackHtml = `${shellBefore}${shellAfter}`;
81
- resolve(fallbackHtml);
82
- options === null || options === void 0 ? void 0 : (_options_onShellError = options.onShellError) === null || _options_onShellError === void 0 ? void 0 : _options_onShellError.call(options, error);
79
+ (0, import_template.getTemplates)(context, import_types.RenderLevel.CLIENT_RENDER, pluginConfig).then(({ shellAfter, shellBefore }) => {
80
+ var _options_onShellError;
81
+ const fallbackHtml = `${shellBefore}${shellAfter}`;
82
+ resolve(fallbackHtml);
83
+ options === null || options === void 0 ? void 0 : (_options_onShellError = options.onShellError) === null || _options_onShellError === void 0 ? void 0 : _options_onShellError.call(options, error);
84
+ });
83
85
  }
84
86
  });
85
87
  });
@@ -30,7 +30,7 @@ var ShellChunkStatus;
30
30
  ShellChunkStatus2[ShellChunkStatus2["START"] = 0] = "START";
31
31
  ShellChunkStatus2[ShellChunkStatus2["FINIESH"] = 1] = "FINIESH";
32
32
  })(ShellChunkStatus || (ShellChunkStatus = {}));
33
- function renderToPipe(rootElement, context, options) {
33
+ function renderToPipe(rootElement, context, pluginConfig, options) {
34
34
  let shellChunkStatus = 0;
35
35
  const chunkVec = [];
36
36
  const { ssrContext } = context;
@@ -40,7 +40,7 @@ function renderToPipe(rootElement, context, options) {
40
40
  ({ renderToReadableStream } = require("react-dom/server"));
41
41
  } catch (e) {
42
42
  }
43
- const { shellAfter, shellBefore } = (0, import_template.getTemplates)(context, import_types.RenderLevel.SERVER_RENDER);
43
+ const { shellAfter, shellBefore } = await (0, import_template.getTemplates)(context, import_types.RenderLevel.SERVER_RENDER, pluginConfig);
44
44
  try {
45
45
  const readableOriginal = await renderToReadableStream(rootElement, {
46
46
  ...options,
@@ -79,7 +79,7 @@ function renderToPipe(rootElement, context, options) {
79
79
  return injectableStream;
80
80
  } catch (err) {
81
81
  ssrContext === null || ssrContext === void 0 ? void 0 : ssrContext.tracker.trackError(import_tracker.SSRErrors.RENDER_SHELL, err);
82
- const { shellAfter: shellAfter2, shellBefore: shellBefore2 } = (0, import_template.getTemplates)(context, import_types.RenderLevel.CLIENT_RENDER);
82
+ const { shellAfter: shellAfter2, shellBefore: shellBefore2 } = await (0, import_template.getTemplates)(context, import_types.RenderLevel.CLIENT_RENDER, pluginConfig);
83
83
  const fallbackHtml = `${shellBefore2}${shellAfter2}`;
84
84
  return fallbackHtml;
85
85
  }
@@ -24,11 +24,11 @@ module.exports = __toCommonJS(template_exports);
24
24
  var import_buildTemplate = require("./buildTemplate.after");
25
25
  var import_bulidTemplate = require("./bulidTemplate.before");
26
26
  const HTML_SEPARATOR = "<!--<?- html ?>-->";
27
- const getTemplates = (context, renderLevel) => {
27
+ const getTemplates = async (context, renderLevel, pluginConfig) => {
28
28
  const { ssrContext } = context;
29
29
  const [beforeAppTemplate = "", afterAppHtmlTemplate = ""] = ssrContext.template.split(HTML_SEPARATOR) || [];
30
- const builtBeforeTemplate = (0, import_bulidTemplate.buildShellBeforeTemplate)(beforeAppTemplate, context);
31
- const builtAfterTemplate = (0, import_buildTemplate.buildShellAfterTemplate)(afterAppHtmlTemplate, {
30
+ const builtBeforeTemplate = await (0, import_bulidTemplate.buildShellBeforeTemplate)(beforeAppTemplate, context, pluginConfig);
31
+ const builtAfterTemplate = await (0, import_buildTemplate.buildShellAfterTemplate)(afterAppHtmlTemplate, {
32
32
  context,
33
33
  renderLevel
34
34
  });
@@ -161,7 +161,6 @@ class Entry {
161
161
  constructor(options) {
162
162
  (0, import_define_property._)(this, "entryName", void 0);
163
163
  (0, import_define_property._)(this, "result", void 0);
164
- (0, import_define_property._)(this, "metrics", void 0);
165
164
  (0, import_define_property._)(this, "tracker", void 0);
166
165
  (0, import_define_property._)(this, "template", void 0);
167
166
  (0, import_define_property._)(this, "App", void 0);
@@ -177,7 +176,6 @@ class Entry {
177
176
  this.pluginConfig = config;
178
177
  this.routeManifest = ctx.routeManifest;
179
178
  this.tracker = ctx.tracker;
180
- this.metrics = ctx.metrics;
181
179
  this.htmlModifiers = ctx.htmlModifiers;
182
180
  this.nonce = nonce;
183
181
  this.result = {
@@ -41,7 +41,6 @@ const render = ({ App, context, config }) => {
41
41
  App,
42
42
  config
43
43
  });
44
- entry.metrics.emitCounter("app.visit.count", 1);
45
44
  const html = await entry.renderToHtml(context);
46
45
  return html;
47
46
  });
@@ -58,10 +58,6 @@ const readAsset = async (chunk) => {
58
58
  const filepath = path.resolve(__dirname, chunk.filename);
59
59
  return fs.readFile(filepath, "utf-8");
60
60
  };
61
- const checkIsNode = () => {
62
- var _process_release;
63
- return typeof process !== "undefined" && ((_process_release = process.release) === null || _process_release === void 0 ? void 0 : _process_release.name) === "node";
64
- };
65
61
  class LoadableCollector {
66
62
  get existsAssets() {
67
63
  var _routeManifest_routeAssets_entryName, _routeManifest_routeAssets;
@@ -109,7 +105,8 @@ class LoadableCollector {
109
105
  const { scriptLoading = "defer", enableInlineScripts } = config;
110
106
  const scriptLoadingAtr = {
111
107
  defer: scriptLoading === "defer" ? true : void 0,
112
- type: scriptLoading === "module" ? "module" : void 0
108
+ type: scriptLoading === "module" ? "module" : void 0,
109
+ async: scriptLoading === "async" ? true : void 0
113
110
  };
114
111
  const attributes = (0, import_utils.attributesToString)(this.generateAttributes({
115
112
  nonce,
@@ -121,7 +118,7 @@ class LoadableCollector {
121
118
  return !jsChunkReg.test(template) && !((_this_existsAssets = this.existsAssets) === null || _this_existsAssets === void 0 ? void 0 : _this_existsAssets.includes(chunk.path));
122
119
  }).map(async (chunk) => {
123
120
  const script = `<script${attributes} src="${chunk.url}"></script>`;
124
- if (checkIsInline(chunk, enableInlineScripts) && checkIsNode()) {
121
+ if ((0, import_utils.checkIsNode)() && checkIsInline(chunk, enableInlineScripts)) {
125
122
  return readAsset(chunk).then((content) => `<script>${content}</script>`).catch((_) => {
126
123
  return script;
127
124
  });
@@ -140,7 +137,7 @@ class LoadableCollector {
140
137
  return !cssChunkReg.test(template) && !((_this_existsAssets = this.existsAssets) === null || _this_existsAssets === void 0 ? void 0 : _this_existsAssets.includes(chunk.path));
141
138
  }).map(async (chunk) => {
142
139
  const link = `<link${atrributes} href="${chunk.url}" rel="stylesheet" />`;
143
- if (checkIsInline(chunk, enableInlineStyles) && checkIsNode()) {
140
+ if ((0, import_utils.checkIsNode)() && checkIsInline(chunk, enableInlineStyles)) {
144
141
  return readAsset(chunk).then((content) => `<style>${content}</style>`).catch((_) => {
145
142
  return link;
146
143
  });
@@ -41,69 +41,57 @@ var SSRErrors;
41
41
  const errors = {
42
42
  [0]: {
43
43
  reporter: "App Prerender",
44
- logger: "App Prerender",
45
- metrics: "app.prerender.error"
44
+ logger: "App Prerender"
46
45
  },
47
46
  [1]: {
48
47
  reporter: "App run useLoader",
49
- logger: "App run useLoader",
50
- metrics: "app.useloader.error"
48
+ logger: "App run useLoader"
51
49
  },
52
50
  [2]: {
53
51
  reporter: "App Render To HTML",
54
- logger: "App Render To HTML",
55
- metrics: "app.render.html.error"
52
+ logger: "App Render To HTML"
56
53
  },
57
54
  [3]: {
58
55
  reporter: "App Render To Streaming",
59
- logger: "An error occurs during streaming SSR",
60
- metrics: "app.render.streaming.error"
56
+ logger: "An error occurs during streaming SSR"
61
57
  },
62
- [4]: {
63
- metrics: "app.render.streaming.shell.error"
64
- }
58
+ [4]: {}
65
59
  };
66
60
  const timings = {
67
61
  [0]: {
68
62
  reporter: "ssr-prerender",
69
63
  serverTiming: "ssr-prerender",
70
- metrics: "app.prerender.cost",
71
64
  logger: "App Prerender cost = %d ms"
72
65
  },
73
66
  [1]: {
74
67
  reporter: "ssr-render-html",
75
68
  serverTiming: "ssr-render-html",
76
- metrics: "app.render.html.cost",
77
69
  logger: "App Render To HTML cost = %d ms"
78
70
  },
79
71
  [2]: {
80
72
  reporter: "ssr-render-shell",
81
- metrics: "app.render.shell.cost",
82
73
  logger: "App Render To Shell cost = %d ms"
83
74
  },
84
75
  [3]: {
85
76
  reporter: "use-loader",
86
77
  serverTiming: "use-loader",
87
- metrics: "app.useloader.cost",
88
78
  logger: "App run useLoader cost = %d ms"
89
79
  }
90
80
  };
91
- function createSSRTracker({ reporter, serverTiming, metrics, logger }) {
81
+ function createSSRTracker({ reporter, serverTiming, logger }) {
92
82
  const tracker = {
93
83
  get sessionId() {
94
84
  return reporter.sessionId;
95
85
  },
96
86
  trackError(key, e) {
97
- const { reporter: reporterContent, metrics: metricsContent, logger: loggerContent } = errors[key];
87
+ const { reporter: reporterContent, logger: loggerContent } = errors[key];
98
88
  reporterContent && reporter.reportError(`SSR Error - ${reporterContent}`, e);
99
- metricsContent && metrics.emitCounter(metricsContent, 1);
100
89
  loggerContent && logger.error(loggerContent, e);
101
90
  },
102
91
  trackTiming(key, cost) {
103
- const { reporter: reporterName, serverTiming: serverTimingName, logger: loggerName, metrics: metricsName } = timings[key];
92
+ const { reporter: reporterName, serverTiming: serverTimingName, logger: loggerName } = timings[key];
104
93
  reporterName && reporter.reportTiming(reporterName, cost);
105
94
  serverTimingName && serverTiming.addServeTiming(serverTimingName, cost);
106
- metricsName && metrics.emitTimer(metricsName, cost);
107
95
  loggerName && logger.debug(loggerName, cost);
108
96
  }
109
97
  };
@@ -19,6 +19,7 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
19
19
  var utils_exports = {};
20
20
  __export(utils_exports, {
21
21
  attributesToString: () => attributesToString,
22
+ checkIsNode: () => checkIsNode,
22
23
  safeReplace: () => safeReplace
23
24
  });
24
25
  module.exports = __toCommonJS(utils_exports);
@@ -30,8 +31,13 @@ function attributesToString(attributes) {
30
31
  function safeReplace(source, searchValue, replaceValue) {
31
32
  return source.replace(searchValue, () => replaceValue);
32
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
+ }
33
38
  // Annotate the CommonJS export names for ESM import in node:
34
39
  0 && (module.exports = {
35
40
  attributesToString,
41
+ checkIsNode,
36
42
  safeReplace
37
43
  });
@@ -146,25 +146,22 @@ 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, _config_server1;
149
+ var _bundlerConfigs_find_output, _bundlerConfigs_find;
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;
153
153
  var config = api.useResolvedConfigContext();
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
- 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;
158
156
  plugins.push({
159
157
  name: PLUGIN_IDENTIFIER,
160
- options: JSON.stringify(_object_spread_props(_object_spread({}, ssrConfigMap.get(entrypoint.entryName) || {}), {
158
+ options: JSON.stringify(_object_spread_props(_object_spread({
159
+ scriptLoading
160
+ }, ssrConfigMap.get(entrypoint.entryName) || {}), {
161
161
  crossorigin,
162
- scriptLoading,
163
162
  chunkLoadingGlobal,
164
- disablePrerender,
165
163
  enableInlineScripts: typeof enableInlineScripts === "function" ? void 0 : enableInlineScripts,
166
- enableInlineStyles: typeof enableInlineStyles === "function" ? void 0 : enableInlineStyles,
167
- unsafeHeaders
164
+ enableInlineStyles: typeof enableInlineStyles === "function" ? void 0 : enableInlineStyles
168
165
  }))
169
166
  });
170
167
  }
@@ -84,8 +84,7 @@ var prefetch = function() {
84
84
  Object.keys(loadersData).forEach(function(id) {
85
85
  var data = loadersData[id];
86
86
  if (data._error) {
87
- ssrContext.logger.error("App Prefetch Loader", data._error);
88
- ssrContext.metrics.emitCounter("app.prefetch.loader.error", 1);
87
+ ssrContext.logger.error("App Load use-loader", data._error);
89
88
  delete data._error;
90
89
  }
91
90
  });
@@ -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,