@modern-js/runtime 2.40.0 → 2.42.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 (140) hide show
  1. package/dist/cjs/core/loader/loaderManager.js +7 -7
  2. package/dist/cjs/document/DocumentStructureContext.js +2 -1
  3. package/dist/cjs/document/Head.js +7 -5
  4. package/dist/cjs/document/Html.js +2 -0
  5. package/dist/cjs/document/Title.js +34 -0
  6. package/dist/cjs/document/cli/index.js +5 -1
  7. package/dist/cjs/document/constants.js +3 -0
  8. package/dist/cjs/router/runtime/index.js +6 -2
  9. package/dist/cjs/router/runtime/plugin.js +2 -2
  10. package/dist/cjs/router/runtime/{shouldRevalidate.js → routeModule.js} +19 -5
  11. package/dist/cjs/ssr/index.js +3 -3
  12. package/dist/cjs/ssr/serverRender/renderToStream/renderToPipe.js +3 -3
  13. package/dist/cjs/ssr/serverRender/renderToStream/renderToPipe.worker.js +3 -3
  14. package/dist/cjs/ssr/serverRender/renderToString/entry.js +3 -2
  15. package/dist/cjs/ssr/serverRender/renderToString/loadable.js +2 -2
  16. package/dist/cjs/ssr/serverRender/tracker.js +18 -15
  17. package/dist/esm/core/loader/loaderManager.js +7 -7
  18. package/dist/esm/document/DocumentStructureContext.js +2 -1
  19. package/dist/esm/document/Head.js +7 -5
  20. package/dist/esm/document/Html.js +2 -0
  21. package/dist/esm/document/Title.js +10 -0
  22. package/dist/esm/document/cli/index.js +9 -3
  23. package/dist/esm/document/constants.js +2 -0
  24. package/dist/esm/router/runtime/index.js +3 -1
  25. package/dist/esm/router/runtime/plugin.js +1 -1
  26. package/dist/esm/router/runtime/{shouldRevalidate.js → routeModule.js} +13 -1
  27. package/dist/esm/ssr/cli/babel-plugin-ssr-loader-id.js +3 -3
  28. package/dist/esm/ssr/index.js +1 -1
  29. package/dist/esm/ssr/serverRender/renderToStream/buildTemplate.after.js +6 -6
  30. package/dist/esm/ssr/serverRender/renderToStream/bulidTemplate.before.js +14 -14
  31. package/dist/esm/ssr/serverRender/renderToStream/renderToPipe.js +3 -3
  32. package/dist/esm/ssr/serverRender/renderToStream/renderToPipe.worker.js +3 -3
  33. package/dist/esm/ssr/serverRender/renderToString/entry.js +2 -1
  34. package/dist/esm/ssr/serverRender/renderToString/loadable.js +2 -2
  35. package/dist/esm/ssr/serverRender/tracker.js +18 -15
  36. package/dist/esm-node/core/loader/loaderManager.js +7 -7
  37. package/dist/esm-node/document/DocumentStructureContext.js +2 -1
  38. package/dist/esm-node/document/Head.js +7 -5
  39. package/dist/esm-node/document/Html.js +2 -0
  40. package/dist/esm-node/document/Title.js +10 -0
  41. package/dist/esm-node/document/cli/index.js +6 -2
  42. package/dist/esm-node/document/constants.js +2 -0
  43. package/dist/esm-node/router/runtime/index.js +3 -1
  44. package/dist/esm-node/router/runtime/plugin.js +1 -1
  45. package/dist/esm-node/router/runtime/{shouldRevalidate.js → routeModule.js} +13 -1
  46. package/dist/esm-node/ssr/index.js +1 -1
  47. package/dist/esm-node/ssr/serverRender/renderToStream/renderToPipe.js +3 -3
  48. package/dist/esm-node/ssr/serverRender/renderToStream/renderToPipe.worker.js +3 -3
  49. package/dist/esm-node/ssr/serverRender/renderToString/entry.js +3 -2
  50. package/dist/esm-node/ssr/serverRender/renderToString/loadable.js +2 -2
  51. package/dist/esm-node/ssr/serverRender/tracker.js +18 -15
  52. package/dist/types/cli/index.d.ts +1 -1
  53. package/dist/types/common.d.ts +3 -3
  54. package/dist/types/config.d.ts +5 -5
  55. package/dist/types/core/appConfig.d.ts +1 -1
  56. package/dist/types/core/compatible.d.ts +8 -11
  57. package/dist/types/core/index.d.ts +1 -1
  58. package/dist/types/core/loader/index.d.ts +1 -1
  59. package/dist/types/core/loader/loaderManager.d.ts +38 -38
  60. package/dist/types/core/loader/useLoader.d.ts +31 -31
  61. package/dist/types/core/plugin.d.ts +178 -177
  62. package/dist/types/core/types.d.ts +12 -12
  63. package/dist/types/document/Body.d.ts +2 -2
  64. package/dist/types/document/Comment.d.ts +3 -3
  65. package/dist/types/document/DocumentContext.d.ts +9 -9
  66. package/dist/types/document/DocumentStructureContext.d.ts +8 -7
  67. package/dist/types/document/Head.d.ts +2 -2
  68. package/dist/types/document/Html.d.ts +2 -2
  69. package/dist/types/document/Links.d.ts +1 -1
  70. package/dist/types/document/Root.d.ts +4 -4
  71. package/dist/types/document/Script.d.ts +2 -2
  72. package/dist/types/document/Scripts.d.ts +1 -1
  73. package/dist/types/document/Style.d.ts +3 -3
  74. package/dist/types/document/Title.d.ts +2 -0
  75. package/dist/types/document/cli/index.d.ts +1 -1
  76. package/dist/types/document/constants.d.ts +3 -2
  77. package/dist/types/document/index.d.ts +1 -1
  78. package/dist/types/exports/head.d.ts +1 -1
  79. package/dist/types/exports/loadable.d.ts +1 -1
  80. package/dist/types/exports/server.d.ts +9 -17
  81. package/dist/types/exports/styled.d.ts +1 -1
  82. package/dist/types/index.d.ts +3 -3
  83. package/dist/types/router/cli/index.d.ts +1 -1
  84. package/dist/types/router/index.d.ts +1 -1
  85. package/dist/types/router/runtime/DefaultNotFound.d.ts +1 -1
  86. package/dist/types/router/runtime/DeferredDataScripts.d.ts +1 -1
  87. package/dist/types/router/runtime/DeferredDataScripts.node.d.ts +2 -2
  88. package/dist/types/router/runtime/PrefetchLink.d.ts +3 -3
  89. package/dist/types/router/runtime/fetch.d.ts +1 -1
  90. package/dist/types/router/runtime/fetch.node.d.ts +1 -1
  91. package/dist/types/router/runtime/fetch.worker.d.ts +1 -1
  92. package/dist/types/router/runtime/hooks.d.ts +1 -1
  93. package/dist/types/router/runtime/index.d.ts +3 -3
  94. package/dist/types/router/runtime/plugin.d.ts +1 -7
  95. package/dist/types/router/runtime/plugin.node.d.ts +2 -6
  96. package/dist/types/router/runtime/routeModule.d.ts +6 -0
  97. package/dist/types/router/runtime/server.d.ts +1 -1
  98. package/dist/types/router/runtime/types.d.ts +41 -41
  99. package/dist/types/router/runtime/utils.d.ts +11 -21
  100. package/dist/types/router/runtime/withRouter.d.ts +4 -4
  101. package/dist/types/runtimeContext.d.ts +26 -26
  102. package/dist/types/ssr/cli/babel-plugin-ssr-loader-id.d.ts +1 -1
  103. package/dist/types/ssr/cli/index.d.ts +1 -1
  104. package/dist/types/ssr/cli/loadable-bundler-plugin.d.ts +1 -1
  105. package/dist/types/ssr/index.d.ts +5 -5
  106. package/dist/types/ssr/index.node.d.ts +1 -1
  107. package/dist/types/ssr/prefetch.d.ts +9 -9
  108. package/dist/types/ssr/react/index.d.ts +1 -1
  109. package/dist/types/ssr/react/nossr/index.d.ts +3 -3
  110. package/dist/types/ssr/react/prerender/index.d.ts +1 -1
  111. package/dist/types/ssr/react/prerender/type.d.ts +17 -17
  112. package/dist/types/ssr/react/prerender/util.d.ts +1 -1
  113. package/dist/types/ssr/react/withCallback/index.d.ts +3 -3
  114. package/dist/types/ssr/serverRender/helmet.d.ts +1 -1
  115. package/dist/types/ssr/serverRender/index.d.ts +1 -1
  116. package/dist/types/ssr/serverRender/renderToStream/buildTemplate.after.d.ts +3 -3
  117. package/dist/types/ssr/serverRender/renderToStream/buildTemplate.share.d.ts +1 -1
  118. package/dist/types/ssr/serverRender/renderToStream/bulidTemplate.before.d.ts +1 -1
  119. package/dist/types/ssr/serverRender/renderToStream/index.d.ts +1 -4
  120. package/dist/types/ssr/serverRender/renderToStream/renderToPipe.d.ts +1 -1
  121. package/dist/types/ssr/serverRender/renderToStream/renderToPipe.worker.d.ts +1 -1
  122. package/dist/types/ssr/serverRender/renderToStream/template.d.ts +3 -3
  123. package/dist/types/ssr/serverRender/renderToString/buildHtml.d.ts +1 -1
  124. package/dist/types/ssr/serverRender/renderToString/entry.d.ts +19 -19
  125. package/dist/types/ssr/serverRender/renderToString/index.d.ts +1 -5
  126. package/dist/types/ssr/serverRender/renderToString/loadable.d.ts +18 -18
  127. package/dist/types/ssr/serverRender/renderToString/render.d.ts +8 -8
  128. package/dist/types/ssr/serverRender/renderToString/styledComponent.d.ts +7 -7
  129. package/dist/types/ssr/serverRender/renderToString/type.d.ts +10 -10
  130. package/dist/types/ssr/serverRender/tracker.d.ts +14 -19
  131. package/dist/types/ssr/serverRender/types.d.ts +17 -17
  132. package/dist/types/ssr/serverRender/utils.d.ts +1 -1
  133. package/dist/types/ssr/utils.d.ts +4 -4
  134. package/dist/types/state/cli/index.d.ts +1 -1
  135. package/dist/types/state/index.d.ts +1 -1
  136. package/dist/types/state/plugins.d.ts +1 -1
  137. package/dist/types/state/runtime/index.d.ts +1 -1
  138. package/dist/types/state/runtime/plugin.d.ts +3 -3
  139. package/package.json +11 -11
  140. package/dist/types/router/runtime/shouldRevalidate.d.ts +0 -2
@@ -5,7 +5,7 @@ import { jsx as _jsx } from "react/jsx-runtime";
5
5
  import { useContext, useMemo } from "react";
6
6
  import { createBrowserRouter, createHashRouter, RouterProvider, createRoutesFromElements, useMatches, useLocation } from "@modern-js/runtime-utils/router";
7
7
  import hoistNonReactStatics from "hoist-non-react-statics";
8
- import { parsedJSONFromElement } from "@modern-js/runtime-utils/browser";
8
+ import { parsedJSONFromElement } from "@modern-js/runtime-utils/parsed";
9
9
  import { RuntimeReactContext } from "../../core";
10
10
  import { modifyRoutes as modifyRoutesHook } from "./hooks";
11
11
  import { deserializeErrors, renderRoutes, urlJoin } from "./utils";
@@ -9,6 +9,18 @@ var createShouldRevalidate = function(routeId) {
9
9
  return arg.defaultShouldRevalidate;
10
10
  };
11
11
  };
12
+ var handleRouteModule = function(routeModule, routeId) {
13
+ if (typeof document !== "undefined") {
14
+ window[ROUTE_MODULES][routeId] = routeModule;
15
+ }
16
+ return routeModule;
17
+ };
18
+ var handleRouteModuleError = function(error) {
19
+ console.error(error);
20
+ return null;
21
+ };
12
22
  export {
13
- createShouldRevalidate
23
+ createShouldRevalidate,
24
+ handleRouteModule,
25
+ handleRouteModuleError
14
26
  };
@@ -62,12 +62,12 @@ var require_babel_plugin_ssr_loader_id = __commonJS({
62
62
  ])), []);
63
63
  }
64
64
  module.exports = function() {
65
- var genId = function genId2() {
66
- return "".concat(hash, "_").concat(index++);
67
- };
68
65
  var useLoader = null;
69
66
  var hash = "";
70
67
  var index = 0;
68
+ function genId() {
69
+ return "".concat(hash, "_").concat(index++);
70
+ }
71
71
  return {
72
72
  name: "babel-plugin-ssr-loader-id",
73
73
  pre: function pre() {
@@ -5,7 +5,7 @@ import { _ as _ts_generator } from "@swc/helpers/_/_ts_generator";
5
5
  import { jsx as _jsx } from "react/jsx-runtime";
6
6
  import { loadableReady } from "@loadable/component";
7
7
  import hoistNonReactStatics from "hoist-non-react-statics";
8
- import { parsedJSONFromElement } from "@modern-js/runtime-utils/browser";
8
+ 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";
@@ -3,7 +3,11 @@ import { serializeJson } from "@modern-js/runtime-utils/node";
3
3
  import { attributesToString } from "../utils";
4
4
  import { buildTemplate } from "./buildTemplate.share";
5
5
  function buildShellAfterTemplate(afterAppTemplate, options) {
6
- var injectSSRDataScript = function injectSSRDataScript2(template) {
6
+ var callbacks = [
7
+ injectSSRDataScript
8
+ ];
9
+ return buildTemplate(afterAppTemplate, callbacks);
10
+ function injectSSRDataScript(template) {
7
11
  var ssrDataScript = buildSSRDataScript();
8
12
  return template.replace("<!--<?- SSRDataScript ?>-->", ssrDataScript);
9
13
  function buildSSRDataScript() {
@@ -36,11 +40,7 @@ function buildShellAfterTemplate(afterAppTemplate, options) {
36
40
  });
37
41
  return "\n <script".concat(attrsStr, ">window._SSR_DATA = ").concat(serializeJson(SSRData), "</script>\n ");
38
42
  }
39
- };
40
- var callbacks = [
41
- injectSSRDataScript
42
- ];
43
- return buildTemplate(afterAppTemplate, callbacks);
43
+ }
44
44
  }
45
45
  export {
46
46
  buildShellAfterTemplate
@@ -6,7 +6,20 @@ import helmetReplace from "../helmet";
6
6
  import { CSS_CHUNKS_PLACEHOLDER } from "../utils";
7
7
  import { HEAD_REG_EXP, buildTemplate } from "./buildTemplate.share";
8
8
  function getHeadTemplate(beforeEntryTemplate, context) {
9
- var injectCss = function injectCss2(headTemplate2) {
9
+ var callbacks = [
10
+ function(headTemplate2) {
11
+ var helmetData = ReactHelmet.renderStatic();
12
+ return helmetData ? helmetReplace(headTemplate2, helmetData) : headTemplate2;
13
+ },
14
+ // @TODO: prefetch scripts of lazy component
15
+ injectCss
16
+ ];
17
+ var _ref = _sliced_to_array(beforeEntryTemplate.match(HEAD_REG_EXP) || [], 1), tmp = _ref[0], headTemplate = tmp === void 0 ? "" : tmp;
18
+ if (!headTemplate.length) {
19
+ return "";
20
+ }
21
+ return buildTemplate(headTemplate, callbacks);
22
+ function injectCss(headTemplate2) {
10
23
  return headTemplate2.replace(CSS_CHUNKS_PLACEHOLDER, getCssChunks());
11
24
  function getCssChunks() {
12
25
  var routeManifest = context.routeManifest, routerContext = context.routerContext, routes = context.routes;
@@ -38,20 +51,7 @@ function getHeadTemplate(beforeEntryTemplate, context) {
38
51
  });
39
52
  return "".concat(styleLinks.join(""));
40
53
  }
41
- };
42
- var callbacks = [
43
- function(headTemplate2) {
44
- var helmetData = ReactHelmet.renderStatic();
45
- return helmetData ? helmetReplace(headTemplate2, helmetData) : headTemplate2;
46
- },
47
- // @TODO: prefetch scripts of lazy component
48
- injectCss
49
- ];
50
- var _ref = _sliced_to_array(beforeEntryTemplate.match(HEAD_REG_EXP) || [], 1), tmp = _ref[0], headTemplate = tmp === void 0 ? "" : tmp;
51
- if (!headTemplate.length) {
52
- return "";
53
54
  }
54
- return buildTemplate(headTemplate, callbacks);
55
55
  }
56
56
  function buildShellBeforeTemplate(beforeAppTemplate, context) {
57
57
  var headTemplate = getHeadTemplate(beforeAppTemplate, context);
@@ -11,7 +11,7 @@ var ShellChunkStatus;
11
11
  ShellChunkStatus2[ShellChunkStatus2["FINIESH"] = 1] = "FINIESH";
12
12
  })(ShellChunkStatus || (ShellChunkStatus = {}));
13
13
  function renderToPipe(rootElement, context, options) {
14
- var shellChunkStatus = ShellChunkStatus.START;
14
+ var shellChunkStatus = 0;
15
15
  var ssrContext = context.ssrContext;
16
16
  var chunkVec = [];
17
17
  var forUserPipe = function(stream) {
@@ -30,12 +30,12 @@ function renderToPipe(rootElement, context, options) {
30
30
  var injectableTransform = new Transform({
31
31
  transform: function transform(chunk, _encoding, callback) {
32
32
  try {
33
- if (shellChunkStatus !== ShellChunkStatus.FINIESH) {
33
+ if (shellChunkStatus !== 1) {
34
34
  chunkVec.push(chunk.toString());
35
35
  var concatedChunk = chunkVec.join("");
36
36
  if (concatedChunk.endsWith(ESCAPED_SHELL_STREAM_END_MARK)) {
37
37
  concatedChunk = concatedChunk.replace(ESCAPED_SHELL_STREAM_END_MARK, "");
38
- shellChunkStatus = ShellChunkStatus.FINIESH;
38
+ shellChunkStatus = 1;
39
39
  this.push("".concat(shellBefore).concat(concatedChunk).concat(shellAfter));
40
40
  }
41
41
  } else {
@@ -12,7 +12,7 @@ var ShellChunkStatus;
12
12
  ShellChunkStatus2[ShellChunkStatus2["FINIESH"] = 1] = "FINIESH";
13
13
  })(ShellChunkStatus || (ShellChunkStatus = {}));
14
14
  function renderToPipe(rootElement, context, options) {
15
- var shellChunkStatus = ShellChunkStatus.START;
15
+ var shellChunkStatus = 0;
16
16
  var chunkVec = [];
17
17
  var ssrContext = context.ssrContext;
18
18
  var forUserPipe = function() {
@@ -70,13 +70,13 @@ function renderToPipe(rootElement, context, options) {
70
70
  2
71
71
  ];
72
72
  }
73
- if (shellChunkStatus !== ShellChunkStatus.FINIESH) {
73
+ if (shellChunkStatus !== 1) {
74
74
  chunk = new TextDecoder().decode(value);
75
75
  chunkVec.push(chunk);
76
76
  concatedChunk = chunkVec.join("");
77
77
  if (concatedChunk.endsWith(ESCAPED_SHELL_STREAM_END_MARK)) {
78
78
  concatedChunk = concatedChunk.replace(ESCAPED_SHELL_STREAM_END_MARK, "");
79
- shellChunkStatus = ShellChunkStatus.FINIESH;
79
+ shellChunkStatus = 1;
80
80
  controller.enqueue(encodeForWebStream("".concat(shellBefore).concat(concatedChunk).concat(shellAfter)));
81
81
  }
82
82
  } else {
@@ -41,7 +41,8 @@ var buildTemplateData = function(context, data, renderLevel, tracker) {
41
41
  renderLevel
42
42
  };
43
43
  };
44
- var Entry = /* @__PURE__ */ function() {
44
+ var Entry;
45
+ Entry = /* @__PURE__ */ function() {
45
46
  "use strict";
46
47
  function Entry2(options) {
47
48
  _class_call_check(this, Entry2);
@@ -39,13 +39,13 @@ var readAsset = function() {
39
39
  case 0:
40
40
  return [
41
41
  4,
42
- import("node:fs/promises")
42
+ import("fs/promises")
43
43
  ];
44
44
  case 1:
45
45
  fs = _state.sent();
46
46
  return [
47
47
  4,
48
- import("node:path")
48
+ import("path")
49
49
  ];
50
50
  case 2:
51
51
  path = _state.sent();
@@ -15,41 +15,44 @@ var SSRErrors;
15
15
  SSRErrors2[SSRErrors2["RENDER_SHELL"] = 4] = "RENDER_SHELL";
16
16
  })(SSRErrors || (SSRErrors = {}));
17
17
  var _obj;
18
- var errors = (_obj = {}, _define_property(_obj, SSRErrors.PRERENDER, {
19
- reporter: "SSR Error - App Prerender",
18
+ var errors = (_obj = {}, _define_property(_obj, 0, {
19
+ reporter: "App Prerender",
20
20
  logger: "App Prerender",
21
21
  metrics: "app.prerender.error"
22
- }), _define_property(_obj, SSRErrors.USE_LOADER, {
23
- reporter: "SSR Error - App run useLoader",
22
+ }), _define_property(_obj, 1, {
23
+ reporter: "App run useLoader",
24
24
  logger: "App run useLoader",
25
25
  metrics: "app.useloader.error"
26
- }), _define_property(_obj, SSRErrors.RENDER_HTML, {
27
- reporter: "SSR Error - App Render To HTML",
26
+ }), _define_property(_obj, 2, {
27
+ reporter: "App Render To HTML",
28
28
  logger: "App Render To HTML",
29
29
  metrics: "app.render.html.error"
30
- }), _define_property(_obj, SSRErrors.RENDER_STREAM, {
31
- reporter: "SSR Error - App Render To Streaming",
30
+ }), _define_property(_obj, 3, {
31
+ reporter: "App Render To Streaming",
32
32
  logger: "An error occurs during streaming SSR",
33
33
  metrics: "app.render.streaming.error"
34
- }), _define_property(_obj, SSRErrors.RENDER_SHELL, {
34
+ }), _define_property(_obj, 4, {
35
35
  metrics: "app.render.streaming.shell.error"
36
36
  }), _obj);
37
37
  var _obj1;
38
- var timings = (_obj1 = {}, _define_property(_obj1, SSRTimings.PRERENDER, {
38
+ var timings = (_obj1 = {}, _define_property(_obj1, 0, {
39
39
  reporter: "ssr-prerender",
40
40
  serverTiming: "ssr-prerender",
41
41
  metrics: "app.prerender.cost",
42
42
  logger: "App Prerender cost = %d ms"
43
- }), _define_property(_obj1, SSRTimings.RENDER_HTML, {
43
+ }), _define_property(_obj1, 1, {
44
44
  reporter: "ssr-render-html",
45
45
  serverTiming: "ssr-render-html",
46
46
  metrics: "app.render.html.cost",
47
47
  logger: "App Render To HTML cost = %d ms"
48
- }), _define_property(_obj1, SSRTimings.RENDER_SHELL, {
49
- reporter: "ssr-render-shell"
50
- }), _define_property(_obj1, SSRTimings.USE_LOADER, {
48
+ }), _define_property(_obj1, 2, {
49
+ reporter: "ssr-render-shell",
50
+ metrics: "app.render.shell.cost",
51
+ logger: "App Render To Shell cost = %d ms"
52
+ }), _define_property(_obj1, 3, {
51
53
  reporter: "use-loader",
52
54
  serverTiming: "use-loader",
55
+ metrics: "app.useloader.cost",
53
56
  logger: "App run useLoader cost = %d ms"
54
57
  }), _obj1);
55
58
  function createSSRTracker(param) {
@@ -60,7 +63,7 @@ function createSSRTracker(param) {
60
63
  },
61
64
  trackError: function trackError(key, e) {
62
65
  var _errors_key = errors[key], reporterContent = _errors_key.reporter, metricsContent = _errors_key.metrics, loggerContent = _errors_key.logger;
63
- reporterContent && reporter.reportError(reporterContent, e);
66
+ reporterContent && reporter.reportError("SSR Error - ".concat(reporterContent), e);
64
67
  metricsContent && metrics.emitCounter(metricsContent, 1);
65
68
  loggerContent && logger.error(loggerContent, e);
66
69
  },
@@ -26,7 +26,7 @@ const createLoader = (id, initialData = {
26
26
  error: void 0
27
27
  }, loaderFn, skip = false) => {
28
28
  let promise;
29
- let status = LoaderStatus.idle;
29
+ let status = 0;
30
30
  let { data, error } = initialData;
31
31
  let hasLoaded = false;
32
32
  const handlers = /* @__PURE__ */ new Set();
@@ -34,19 +34,19 @@ const createLoader = (id, initialData = {
34
34
  if (skip) {
35
35
  return promise;
36
36
  }
37
- if (status === LoaderStatus.loading) {
37
+ if (status === 1) {
38
38
  return promise;
39
39
  }
40
- status = LoaderStatus.loading;
40
+ status = 1;
41
41
  notify();
42
42
  promise = loaderFn().then((value) => {
43
43
  data = value;
44
44
  error = null;
45
- status = LoaderStatus.fulfilled;
45
+ status = 2;
46
46
  }).catch((e) => {
47
47
  error = e;
48
48
  data = null;
49
- status = LoaderStatus.rejected;
49
+ status = 3;
50
50
  }).finally(() => {
51
51
  promise = null;
52
52
  hasLoaded = true;
@@ -55,8 +55,8 @@ const createLoader = (id, initialData = {
55
55
  return promise;
56
56
  };
57
57
  const getResult = () => ({
58
- loading: !hasLoaded && status === LoaderStatus.loading,
59
- reloading: hasLoaded && status === LoaderStatus.loading,
58
+ loading: !hasLoaded && status === 1,
59
+ reloading: hasLoaded && status === 1,
60
60
  data,
61
61
  error: error instanceof Error ? `${error.message}` : error,
62
62
  // redundant fields for ssr log
@@ -4,7 +4,8 @@ const DocumentStructureContext = /* @__PURE__ */ React.createContext({
4
4
  hasSetScripts: false,
5
5
  hasSetBody: false,
6
6
  hasSetRoot: false,
7
- hasSetLinks: false
7
+ hasSetLinks: false,
8
+ hasSetTitle: false
8
9
  });
9
10
  export {
10
11
  DocumentStructureContext
@@ -3,25 +3,27 @@ import { useContext } from "react";
3
3
  import { DocumentStructureContext } from "./DocumentStructureContext";
4
4
  import { Scripts } from "./Scripts";
5
5
  import { Links } from "./Links";
6
+ import { Title } from "./Title";
6
7
  import { DOCUMENT_META_PLACEHOLDER, HEAD_PARTICALS_SEPARATOR, TOP_PARTICALS_SEPARATOR } from "./constants";
7
8
  function Head(props) {
8
- const { hasSetScripts, hasSetLinks } = useContext(DocumentStructureContext);
9
+ const { hasSetScripts, hasSetLinks, hasSetTitle } = useContext(DocumentStructureContext);
9
10
  const { children, ...rest } = props;
10
11
  return /* @__PURE__ */ _jsxs("head", {
11
12
  ...rest,
12
13
  children: [
13
- `${TOP_PARTICALS_SEPARATOR}`,
14
- `${DOCUMENT_META_PLACEHOLDER}`,
14
+ TOP_PARTICALS_SEPARATOR,
15
+ DOCUMENT_META_PLACEHOLDER,
16
+ !hasSetTitle && /* @__PURE__ */ _jsx(Title, {}),
15
17
  !hasSetLinks && /* @__PURE__ */ _jsx(Links, {}),
16
18
  !hasSetScripts && /* @__PURE__ */ _jsx(Scripts, {}),
17
- `${HEAD_PARTICALS_SEPARATOR}`,
19
+ HEAD_PARTICALS_SEPARATOR,
18
20
  children
19
21
  ]
20
22
  });
21
23
  }
22
24
  function DefaultHead() {
23
25
  return /* @__PURE__ */ _jsx("head", {
24
- children: `${DOCUMENT_META_PLACEHOLDER}`
26
+ children: DOCUMENT_META_PLACEHOLDER
25
27
  });
26
28
  }
27
29
  export {
@@ -31,6 +31,7 @@ function Html(props) {
31
31
  const hasSetLinks = Boolean(findTargetElement("Links", children));
32
32
  const hasSetBody = Boolean(findTargetChild("Body", children));
33
33
  const hasSetRoot = Boolean(findTargetElement("Root", children));
34
+ const hasSetTitle = Boolean(findTargetElement("title", children));
34
35
  const notMissMustChild = [
35
36
  hasSetHead,
36
37
  hasSetBody
@@ -66,6 +67,7 @@ function Html(props) {
66
67
  hasSetLinks,
67
68
  hasSetRoot,
68
69
  hasSetBody,
70
+ hasSetTitle,
69
71
  docChild: children
70
72
  },
71
73
  children: [
@@ -0,0 +1,10 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { DOCUMENT_TITLE_PLACEHOLDER } from "./constants";
3
+ function Title() {
4
+ return /* @__PURE__ */ _jsx("title", {
5
+ children: DOCUMENT_TITLE_PLACEHOLDER
6
+ });
7
+ }
8
+ export {
9
+ Title
10
+ };
@@ -4,7 +4,7 @@ import ReactDomServer from "react-dom/server";
4
4
  import { build } from "esbuild";
5
5
  import { createDebugger, findExists, fs } from "@modern-js/utils";
6
6
  import { DocumentContext } from "../DocumentContext";
7
- import { DOCUMENT_SCRIPTS_PLACEHOLDER, DOCUMENT_LINKS_PLACEHOLDER, DOCUMENT_FILE_NAME, DOCUMENT_META_PLACEHOLDER, PLACEHOLDER_REPLACER_MAP, DOC_EXT, DOCUMENT_SSR_PLACEHOLDER, DOCUMENT_CHUNKSMAP_PLACEHOLDER, DOCUMENT_SSRDATASCRIPT_PLACEHOLDER, DOCUMENT_SCRIPT_PLACEHOLDER_START, DOCUMENT_SCRIPT_PLACEHOLDER_END, HTML_SEPARATOR, DOCUMENT_COMMENT_PLACEHOLDER_START, DOCUMENT_COMMENT_PLACEHOLDER_END, DOCUMENT_STYLE_PLACEHOLDER_START, DOCUMENT_STYLE_PLACEHOLDER_END, TOP_PARTICALS_SEPARATOR, HEAD_PARTICALS_SEPARATOR, BODY_PARTICALS_SEPARATOR } from "../constants";
7
+ import { DOCUMENT_SCRIPTS_PLACEHOLDER, DOCUMENT_LINKS_PLACEHOLDER, DOCUMENT_FILE_NAME, DOCUMENT_META_PLACEHOLDER, PLACEHOLDER_REPLACER_MAP, DOC_EXT, DOCUMENT_SSR_PLACEHOLDER, DOCUMENT_CHUNKSMAP_PLACEHOLDER, DOCUMENT_SSRDATASCRIPT_PLACEHOLDER, DOCUMENT_SCRIPT_PLACEHOLDER_START, DOCUMENT_SCRIPT_PLACEHOLDER_END, HTML_SEPARATOR, DOCUMENT_COMMENT_PLACEHOLDER_START, DOCUMENT_COMMENT_PLACEHOLDER_END, DOCUMENT_STYLE_PLACEHOLDER_START, DOCUMENT_STYLE_PLACEHOLDER_END, DOCUMENT_TITLE_PLACEHOLDER, TOP_PARTICALS_SEPARATOR, HEAD_PARTICALS_SEPARATOR, BODY_PARTICALS_SEPARATOR } from "../constants";
8
8
  const debug = createDebugger("html_genarate");
9
9
  const getDocumenByEntryName = function(entrypoints, entryName, fallbackDir) {
10
10
  var _entrypoints_find;
@@ -132,6 +132,10 @@ const documentPlugin = () => ({
132
132
  templateParameters.meta,
133
133
  htmlWebpackPlugin.tags.headTags.filter((item) => item.tagName !== "script" && item.tagName !== "link").join("")
134
134
  ].join("");
135
+ const titles = [
136
+ templateParameters.title,
137
+ htmlWebpackPlugin.tags.headTags.filter((item) => item.tagName === "title").join("")
138
+ ].join("");
135
139
  if (html.includes(DOCUMENT_SCRIPT_PLACEHOLDER_START) && html.includes(DOCUMENT_SCRIPT_PLACEHOLDER_END)) {
136
140
  const { nonce } = config.security;
137
141
  const nonceAttr = nonce ? `nonce=${nonce}` : "";
@@ -143,7 +147,7 @@ const documentPlugin = () => ({
143
147
  if (html.includes(DOCUMENT_COMMENT_PLACEHOLDER_START) && html.includes(DOCUMENT_COMMENT_PLACEHOLDER_END)) {
144
148
  html = html.replace(new RegExp(`${DOCUMENT_COMMENT_PLACEHOLDER_START}(.*?)${DOCUMENT_COMMENT_PLACEHOLDER_END}`, "g"), (_scriptStr, $1) => `${decodeURIComponent($1)}`);
145
149
  }
146
- const finalHtml = `<!DOCTYPE html>${html}`.replace(DOCUMENT_META_PLACEHOLDER, metas).replace(DOCUMENT_SSR_PLACEHOLDER, HTML_SEPARATOR).replace(DOCUMENT_SCRIPTS_PLACEHOLDER, scripts).replace(DOCUMENT_LINKS_PLACEHOLDER, links).replace(DOCUMENT_CHUNKSMAP_PLACEHOLDER, PLACEHOLDER_REPLACER_MAP[DOCUMENT_CHUNKSMAP_PLACEHOLDER]).replace(DOCUMENT_SSRDATASCRIPT_PLACEHOLDER, PLACEHOLDER_REPLACER_MAP[DOCUMENT_SSRDATASCRIPT_PLACEHOLDER]);
150
+ const finalHtml = `<!DOCTYPE html>${html}`.replace(DOCUMENT_META_PLACEHOLDER, metas).replace(DOCUMENT_SSR_PLACEHOLDER, HTML_SEPARATOR).replace(DOCUMENT_SCRIPTS_PLACEHOLDER, scripts).replace(DOCUMENT_LINKS_PLACEHOLDER, links).replace(DOCUMENT_CHUNKSMAP_PLACEHOLDER, PLACEHOLDER_REPLACER_MAP[DOCUMENT_CHUNKSMAP_PLACEHOLDER]).replace(DOCUMENT_SSRDATASCRIPT_PLACEHOLDER, PLACEHOLDER_REPLACER_MAP[DOCUMENT_SSRDATASCRIPT_PLACEHOLDER]).replace(DOCUMENT_TITLE_PLACEHOLDER, titles);
147
151
  return finalHtml;
148
152
  };
149
153
  };
@@ -6,6 +6,7 @@ const DOC_EXT = [
6
6
  "js"
7
7
  ];
8
8
  const DOCUMENT_META_PLACEHOLDER = encodeURIComponent("<%= meta %>");
9
+ const DOCUMENT_TITLE_PLACEHOLDER = encodeURIComponent("<%= title %>");
9
10
  const HTML_SEPARATOR = "<!--<?- html ?>-->";
10
11
  const HEAD_PARTICALS_SEPARATOR = encodeURIComponent("<!--<?- partials.head ?>-->");
11
12
  const BODY_PARTICALS_SEPARATOR = encodeURIComponent("<!--<?- partials.body ?>-->");
@@ -43,6 +44,7 @@ export {
43
44
  DOCUMENT_SSR_PLACEHOLDER,
44
45
  DOCUMENT_STYLE_PLACEHOLDER_END,
45
46
  DOCUMENT_STYLE_PLACEHOLDER_START,
47
+ DOCUMENT_TITLE_PLACEHOLDER,
46
48
  DOC_EXT,
47
49
  HEAD_PARTICALS_SEPARATOR,
48
50
  HTML_SEPARATOR,
@@ -9,7 +9,7 @@ const useRouteLoaderData = (routeId) => {
9
9
  const realRouteId = routeId.replace(/\[(.*?)\]/g, "($1)");
10
10
  return useRouteData(realRouteId);
11
11
  };
12
- import { createShouldRevalidate } from "./shouldRevalidate";
12
+ import { createShouldRevalidate, handleRouteModule, handleRouteModuleError } from "./routeModule";
13
13
  import {
14
14
  createBrowserRouter,
15
15
  createHashRouter,
@@ -94,6 +94,8 @@ export {
94
94
  runtime_default as default,
95
95
  defer,
96
96
  generatePath,
97
+ handleRouteModule,
98
+ handleRouteModuleError,
97
99
  isRouteErrorResponse,
98
100
  json,
99
101
  matchPath,
@@ -2,7 +2,7 @@ import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { useContext, useMemo } from "react";
3
3
  import { createBrowserRouter, createHashRouter, RouterProvider, createRoutesFromElements, useMatches, useLocation } from "@modern-js/runtime-utils/router";
4
4
  import hoistNonReactStatics from "hoist-non-react-statics";
5
- import { parsedJSONFromElement } from "@modern-js/runtime-utils/browser";
5
+ import { parsedJSONFromElement } from "@modern-js/runtime-utils/parsed";
6
6
  import { RuntimeReactContext } from "../../core";
7
7
  import { modifyRoutes as modifyRoutesHook } from "./hooks";
8
8
  import { deserializeErrors, renderRoutes, urlJoin } from "./utils";
@@ -9,6 +9,18 @@ const createShouldRevalidate = (routeId) => {
9
9
  return arg.defaultShouldRevalidate;
10
10
  };
11
11
  };
12
+ const handleRouteModule = (routeModule, routeId) => {
13
+ if (typeof document !== "undefined") {
14
+ window[ROUTE_MODULES][routeId] = routeModule;
15
+ }
16
+ return routeModule;
17
+ };
18
+ const handleRouteModuleError = (error) => {
19
+ console.error(error);
20
+ return null;
21
+ };
12
22
  export {
13
- createShouldRevalidate
23
+ createShouldRevalidate,
24
+ handleRouteModule,
25
+ handleRouteModuleError
14
26
  };
@@ -1,7 +1,7 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { loadableReady } from "@loadable/component";
3
3
  import hoistNonReactStatics from "hoist-non-react-statics";
4
- import { parsedJSONFromElement } from "@modern-js/runtime-utils/browser";
4
+ import { parsedJSONFromElement } from "@modern-js/runtime-utils/parsed";
5
5
  import { RenderLevel } from "./serverRender/types";
6
6
  import { WithCallback } from "./react/withCallback";
7
7
  import { formatClient, mockResponse, isReact18 } from "./utils";
@@ -8,7 +8,7 @@ var ShellChunkStatus;
8
8
  ShellChunkStatus2[ShellChunkStatus2["FINIESH"] = 1] = "FINIESH";
9
9
  })(ShellChunkStatus || (ShellChunkStatus = {}));
10
10
  function renderToPipe(rootElement, context, options) {
11
- let shellChunkStatus = ShellChunkStatus.START;
11
+ let shellChunkStatus = 0;
12
12
  const { ssrContext } = context;
13
13
  const chunkVec = [];
14
14
  const forUserPipe = (stream) => {
@@ -28,12 +28,12 @@ function renderToPipe(rootElement, context, options) {
28
28
  const injectableTransform = new Transform({
29
29
  transform(chunk, _encoding, callback) {
30
30
  try {
31
- if (shellChunkStatus !== ShellChunkStatus.FINIESH) {
31
+ if (shellChunkStatus !== 1) {
32
32
  chunkVec.push(chunk.toString());
33
33
  let concatedChunk = chunkVec.join("");
34
34
  if (concatedChunk.endsWith(ESCAPED_SHELL_STREAM_END_MARK)) {
35
35
  concatedChunk = concatedChunk.replace(ESCAPED_SHELL_STREAM_END_MARK, "");
36
- shellChunkStatus = ShellChunkStatus.FINIESH;
36
+ shellChunkStatus = 1;
37
37
  this.push(`${shellBefore}${concatedChunk}${shellAfter}`);
38
38
  }
39
39
  } else {
@@ -8,7 +8,7 @@ var ShellChunkStatus;
8
8
  ShellChunkStatus2[ShellChunkStatus2["FINIESH"] = 1] = "FINIESH";
9
9
  })(ShellChunkStatus || (ShellChunkStatus = {}));
10
10
  function renderToPipe(rootElement, context, options) {
11
- let shellChunkStatus = ShellChunkStatus.START;
11
+ let shellChunkStatus = 0;
12
12
  const chunkVec = [];
13
13
  const { ssrContext } = context;
14
14
  const forUserPipe = async () => {
@@ -36,13 +36,13 @@ function renderToPipe(rootElement, context, options) {
36
36
  controller.close();
37
37
  return;
38
38
  }
39
- if (shellChunkStatus !== ShellChunkStatus.FINIESH) {
39
+ if (shellChunkStatus !== 1) {
40
40
  const chunk = new TextDecoder().decode(value);
41
41
  chunkVec.push(chunk);
42
42
  let concatedChunk = chunkVec.join("");
43
43
  if (concatedChunk.endsWith(ESCAPED_SHELL_STREAM_END_MARK)) {
44
44
  concatedChunk = concatedChunk.replace(ESCAPED_SHELL_STREAM_END_MARK, "");
45
- shellChunkStatus = ShellChunkStatus.FINIESH;
45
+ shellChunkStatus = 1;
46
46
  controller.enqueue(encodeForWebStream(`${shellBefore}${concatedChunk}${shellAfter}`));
47
47
  }
48
48
  } else {
@@ -36,7 +36,8 @@ const buildTemplateData = (context, data, renderLevel, tracker) => {
36
36
  renderLevel
37
37
  };
38
38
  };
39
- class Entry {
39
+ var Entry;
40
+ Entry = class Entry2 {
40
41
  async renderToHtml(context) {
41
42
  var _ssrContext_redirection, _ssrContext_redirection1, _ssrContext_redirection2;
42
43
  const ssrContext = context.ssrContext;
@@ -153,7 +154,7 @@ class Entry {
153
154
  }
154
155
  };
155
156
  }
156
- }
157
+ };
157
158
  export {
158
159
  Entry as default
159
160
  };
@@ -20,8 +20,8 @@ const checkIsInline = (chunk, enableInline) => {
20
20
  }
21
21
  };
22
22
  const readAsset = async (chunk) => {
23
- const fs = await import("node:fs/promises");
24
- const path = await import("node:path");
23
+ const fs = await import("fs/promises");
24
+ const path = await import("path");
25
25
  const filepath = path.resolve(__dirname, chunk.filename);
26
26
  return fs.readFile(filepath, "utf-8");
27
27
  };