@modern-js/runtime 2.41.0 → 2.42.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (122) hide show
  1. package/dist/cjs/document/DocumentStructureContext.js +2 -1
  2. package/dist/cjs/document/Head.js +7 -5
  3. package/dist/cjs/document/Html.js +2 -0
  4. package/dist/cjs/document/Title.js +34 -0
  5. package/dist/cjs/document/cli/index.js +5 -1
  6. package/dist/cjs/document/constants.js +3 -0
  7. package/dist/cjs/router/runtime/index.js +6 -2
  8. package/dist/cjs/router/runtime/plugin.js +2 -2
  9. package/dist/cjs/router/runtime/{shouldRevalidate.js → routeModule.js} +19 -5
  10. package/dist/cjs/ssr/index.js +3 -3
  11. package/dist/cjs/ssr/serverRender/tracker.js +9 -6
  12. package/dist/esm/document/DocumentStructureContext.js +2 -1
  13. package/dist/esm/document/Head.js +7 -5
  14. package/dist/esm/document/Html.js +2 -0
  15. package/dist/esm/document/Title.js +10 -0
  16. package/dist/esm/document/cli/index.js +9 -3
  17. package/dist/esm/document/constants.js +2 -0
  18. package/dist/esm/router/runtime/index.js +3 -1
  19. package/dist/esm/router/runtime/plugin.js +1 -1
  20. package/dist/esm/router/runtime/{shouldRevalidate.js → routeModule.js} +13 -1
  21. package/dist/esm/ssr/index.js +1 -1
  22. package/dist/esm/ssr/serverRender/tracker.js +9 -6
  23. package/dist/esm-node/document/DocumentStructureContext.js +2 -1
  24. package/dist/esm-node/document/Head.js +7 -5
  25. package/dist/esm-node/document/Html.js +2 -0
  26. package/dist/esm-node/document/Title.js +10 -0
  27. package/dist/esm-node/document/cli/index.js +6 -2
  28. package/dist/esm-node/document/constants.js +2 -0
  29. package/dist/esm-node/router/runtime/index.js +3 -1
  30. package/dist/esm-node/router/runtime/plugin.js +1 -1
  31. package/dist/esm-node/router/runtime/{shouldRevalidate.js → routeModule.js} +13 -1
  32. package/dist/esm-node/ssr/index.js +1 -1
  33. package/dist/esm-node/ssr/serverRender/tracker.js +9 -6
  34. package/dist/types/cli/index.d.ts +1 -1
  35. package/dist/types/common.d.ts +3 -3
  36. package/dist/types/config.d.ts +5 -5
  37. package/dist/types/core/appConfig.d.ts +1 -1
  38. package/dist/types/core/compatible.d.ts +8 -11
  39. package/dist/types/core/index.d.ts +1 -1
  40. package/dist/types/core/loader/index.d.ts +1 -1
  41. package/dist/types/core/loader/loaderManager.d.ts +38 -38
  42. package/dist/types/core/loader/useLoader.d.ts +31 -31
  43. package/dist/types/core/plugin.d.ts +178 -177
  44. package/dist/types/core/types.d.ts +12 -12
  45. package/dist/types/document/Body.d.ts +2 -2
  46. package/dist/types/document/Comment.d.ts +3 -3
  47. package/dist/types/document/DocumentContext.d.ts +9 -9
  48. package/dist/types/document/DocumentStructureContext.d.ts +8 -7
  49. package/dist/types/document/Head.d.ts +2 -2
  50. package/dist/types/document/Html.d.ts +2 -2
  51. package/dist/types/document/Links.d.ts +1 -1
  52. package/dist/types/document/Root.d.ts +4 -4
  53. package/dist/types/document/Script.d.ts +2 -2
  54. package/dist/types/document/Scripts.d.ts +1 -1
  55. package/dist/types/document/Style.d.ts +3 -3
  56. package/dist/types/document/Title.d.ts +2 -0
  57. package/dist/types/document/cli/index.d.ts +1 -1
  58. package/dist/types/document/constants.d.ts +3 -2
  59. package/dist/types/document/index.d.ts +1 -1
  60. package/dist/types/exports/head.d.ts +1 -1
  61. package/dist/types/exports/loadable.d.ts +1 -1
  62. package/dist/types/exports/server.d.ts +9 -17
  63. package/dist/types/exports/styled.d.ts +1 -1
  64. package/dist/types/index.d.ts +3 -3
  65. package/dist/types/router/cli/index.d.ts +1 -1
  66. package/dist/types/router/index.d.ts +1 -1
  67. package/dist/types/router/runtime/DefaultNotFound.d.ts +1 -1
  68. package/dist/types/router/runtime/DeferredDataScripts.d.ts +1 -1
  69. package/dist/types/router/runtime/DeferredDataScripts.node.d.ts +2 -2
  70. package/dist/types/router/runtime/PrefetchLink.d.ts +3 -3
  71. package/dist/types/router/runtime/fetch.d.ts +1 -1
  72. package/dist/types/router/runtime/fetch.node.d.ts +1 -1
  73. package/dist/types/router/runtime/fetch.worker.d.ts +1 -1
  74. package/dist/types/router/runtime/hooks.d.ts +1 -1
  75. package/dist/types/router/runtime/index.d.ts +3 -3
  76. package/dist/types/router/runtime/plugin.d.ts +1 -7
  77. package/dist/types/router/runtime/plugin.node.d.ts +2 -6
  78. package/dist/types/router/runtime/routeModule.d.ts +6 -0
  79. package/dist/types/router/runtime/server.d.ts +1 -1
  80. package/dist/types/router/runtime/types.d.ts +41 -41
  81. package/dist/types/router/runtime/utils.d.ts +11 -21
  82. package/dist/types/router/runtime/withRouter.d.ts +4 -4
  83. package/dist/types/runtimeContext.d.ts +26 -26
  84. package/dist/types/ssr/cli/babel-plugin-ssr-loader-id.d.ts +1 -1
  85. package/dist/types/ssr/cli/index.d.ts +1 -1
  86. package/dist/types/ssr/cli/loadable-bundler-plugin.d.ts +1 -1
  87. package/dist/types/ssr/index.d.ts +5 -5
  88. package/dist/types/ssr/index.node.d.ts +1 -1
  89. package/dist/types/ssr/prefetch.d.ts +9 -9
  90. package/dist/types/ssr/react/index.d.ts +1 -1
  91. package/dist/types/ssr/react/nossr/index.d.ts +3 -3
  92. package/dist/types/ssr/react/prerender/index.d.ts +1 -1
  93. package/dist/types/ssr/react/prerender/type.d.ts +17 -17
  94. package/dist/types/ssr/react/prerender/util.d.ts +1 -1
  95. package/dist/types/ssr/react/withCallback/index.d.ts +3 -3
  96. package/dist/types/ssr/serverRender/helmet.d.ts +1 -1
  97. package/dist/types/ssr/serverRender/index.d.ts +1 -1
  98. package/dist/types/ssr/serverRender/renderToStream/buildTemplate.after.d.ts +3 -3
  99. package/dist/types/ssr/serverRender/renderToStream/buildTemplate.share.d.ts +1 -1
  100. package/dist/types/ssr/serverRender/renderToStream/bulidTemplate.before.d.ts +1 -1
  101. package/dist/types/ssr/serverRender/renderToStream/index.d.ts +1 -4
  102. package/dist/types/ssr/serverRender/renderToStream/renderToPipe.d.ts +1 -1
  103. package/dist/types/ssr/serverRender/renderToStream/renderToPipe.worker.d.ts +1 -1
  104. package/dist/types/ssr/serverRender/renderToStream/template.d.ts +3 -3
  105. package/dist/types/ssr/serverRender/renderToString/buildHtml.d.ts +1 -1
  106. package/dist/types/ssr/serverRender/renderToString/entry.d.ts +19 -19
  107. package/dist/types/ssr/serverRender/renderToString/index.d.ts +1 -5
  108. package/dist/types/ssr/serverRender/renderToString/loadable.d.ts +18 -18
  109. package/dist/types/ssr/serverRender/renderToString/render.d.ts +8 -8
  110. package/dist/types/ssr/serverRender/renderToString/styledComponent.d.ts +7 -7
  111. package/dist/types/ssr/serverRender/renderToString/type.d.ts +10 -10
  112. package/dist/types/ssr/serverRender/tracker.d.ts +14 -19
  113. package/dist/types/ssr/serverRender/types.d.ts +17 -17
  114. package/dist/types/ssr/serverRender/utils.d.ts +1 -1
  115. package/dist/types/ssr/utils.d.ts +4 -4
  116. package/dist/types/state/cli/index.d.ts +1 -1
  117. package/dist/types/state/index.d.ts +1 -1
  118. package/dist/types/state/plugins.d.ts +1 -1
  119. package/dist/types/state/runtime/index.d.ts +1 -1
  120. package/dist/types/state/runtime/plugin.d.ts +3 -3
  121. package/package.json +10 -10
  122. package/dist/types/router/runtime/shouldRevalidate.d.ts +0 -2
@@ -37,7 +37,8 @@ const DocumentStructureContext = /* @__PURE__ */ import_react.default.createCont
37
37
  hasSetScripts: false,
38
38
  hasSetBody: false,
39
39
  hasSetRoot: false,
40
- hasSetLinks: false
40
+ hasSetLinks: false,
41
+ hasSetTitle: false
41
42
  });
42
43
  // Annotate the CommonJS export names for ESM import in node:
43
44
  0 && (module.exports = {
@@ -27,25 +27,27 @@ var import_react = require("react");
27
27
  var import_DocumentStructureContext = require("./DocumentStructureContext");
28
28
  var import_Scripts = require("./Scripts");
29
29
  var import_Links = require("./Links");
30
+ var import_Title = require("./Title");
30
31
  var import_constants = require("./constants");
31
32
  function Head(props) {
32
- const { hasSetScripts, hasSetLinks } = (0, import_react.useContext)(import_DocumentStructureContext.DocumentStructureContext);
33
+ const { hasSetScripts, hasSetLinks, hasSetTitle } = (0, import_react.useContext)(import_DocumentStructureContext.DocumentStructureContext);
33
34
  const { children, ...rest } = props;
34
35
  return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("head", {
35
36
  ...rest,
36
37
  children: [
37
- `${import_constants.TOP_PARTICALS_SEPARATOR}`,
38
- `${import_constants.DOCUMENT_META_PLACEHOLDER}`,
38
+ import_constants.TOP_PARTICALS_SEPARATOR,
39
+ import_constants.DOCUMENT_META_PLACEHOLDER,
40
+ !hasSetTitle && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_Title.Title, {}),
39
41
  !hasSetLinks && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_Links.Links, {}),
40
42
  !hasSetScripts && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_Scripts.Scripts, {}),
41
- `${import_constants.HEAD_PARTICALS_SEPARATOR}`,
43
+ import_constants.HEAD_PARTICALS_SEPARATOR,
42
44
  children
43
45
  ]
44
46
  });
45
47
  }
46
48
  function DefaultHead() {
47
49
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("head", {
48
- children: `${import_constants.DOCUMENT_META_PLACEHOLDER}`
50
+ children: import_constants.DOCUMENT_META_PLACEHOLDER
49
51
  });
50
52
  }
51
53
  // Annotate the CommonJS export names for ESM import in node:
@@ -54,6 +54,7 @@ function Html(props) {
54
54
  const hasSetLinks = Boolean(findTargetElement("Links", children));
55
55
  const hasSetBody = Boolean(findTargetChild("Body", children));
56
56
  const hasSetRoot = Boolean(findTargetElement("Root", children));
57
+ const hasSetTitle = Boolean(findTargetElement("title", children));
57
58
  const notMissMustChild = [
58
59
  hasSetHead,
59
60
  hasSetBody
@@ -89,6 +90,7 @@ function Html(props) {
89
90
  hasSetLinks,
90
91
  hasSetRoot,
91
92
  hasSetBody,
93
+ hasSetTitle,
92
94
  docChild: children
93
95
  },
94
96
  children: [
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var Title_exports = {};
20
+ __export(Title_exports, {
21
+ Title: () => Title
22
+ });
23
+ module.exports = __toCommonJS(Title_exports);
24
+ var import_jsx_runtime = require("react/jsx-runtime");
25
+ var import_constants = require("./constants");
26
+ function Title() {
27
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("title", {
28
+ children: import_constants.DOCUMENT_TITLE_PLACEHOLDER
29
+ });
30
+ }
31
+ // Annotate the CommonJS export names for ESM import in node:
32
+ 0 && (module.exports = {
33
+ Title
34
+ });
@@ -167,6 +167,10 @@ const documentPlugin = () => ({
167
167
  templateParameters.meta,
168
168
  htmlWebpackPlugin.tags.headTags.filter((item) => item.tagName !== "script" && item.tagName !== "link").join("")
169
169
  ].join("");
170
+ const titles = [
171
+ templateParameters.title,
172
+ htmlWebpackPlugin.tags.headTags.filter((item) => item.tagName === "title").join("")
173
+ ].join("");
170
174
  if (html.includes(import_constants.DOCUMENT_SCRIPT_PLACEHOLDER_START) && html.includes(import_constants.DOCUMENT_SCRIPT_PLACEHOLDER_END)) {
171
175
  const { nonce } = config.security;
172
176
  const nonceAttr = nonce ? `nonce=${nonce}` : "";
@@ -178,7 +182,7 @@ const documentPlugin = () => ({
178
182
  if (html.includes(import_constants.DOCUMENT_COMMENT_PLACEHOLDER_START) && html.includes(import_constants.DOCUMENT_COMMENT_PLACEHOLDER_END)) {
179
183
  html = html.replace(new RegExp(`${import_constants.DOCUMENT_COMMENT_PLACEHOLDER_START}(.*?)${import_constants.DOCUMENT_COMMENT_PLACEHOLDER_END}`, "g"), (_scriptStr, $1) => `${decodeURIComponent($1)}`);
180
184
  }
181
- const finalHtml = `<!DOCTYPE html>${html}`.replace(import_constants.DOCUMENT_META_PLACEHOLDER, metas).replace(import_constants.DOCUMENT_SSR_PLACEHOLDER, import_constants.HTML_SEPARATOR).replace(import_constants.DOCUMENT_SCRIPTS_PLACEHOLDER, scripts).replace(import_constants.DOCUMENT_LINKS_PLACEHOLDER, links).replace(import_constants.DOCUMENT_CHUNKSMAP_PLACEHOLDER, import_constants.PLACEHOLDER_REPLACER_MAP[import_constants.DOCUMENT_CHUNKSMAP_PLACEHOLDER]).replace(import_constants.DOCUMENT_SSRDATASCRIPT_PLACEHOLDER, import_constants.PLACEHOLDER_REPLACER_MAP[import_constants.DOCUMENT_SSRDATASCRIPT_PLACEHOLDER]);
185
+ const finalHtml = `<!DOCTYPE html>${html}`.replace(import_constants.DOCUMENT_META_PLACEHOLDER, metas).replace(import_constants.DOCUMENT_SSR_PLACEHOLDER, import_constants.HTML_SEPARATOR).replace(import_constants.DOCUMENT_SCRIPTS_PLACEHOLDER, scripts).replace(import_constants.DOCUMENT_LINKS_PLACEHOLDER, links).replace(import_constants.DOCUMENT_CHUNKSMAP_PLACEHOLDER, import_constants.PLACEHOLDER_REPLACER_MAP[import_constants.DOCUMENT_CHUNKSMAP_PLACEHOLDER]).replace(import_constants.DOCUMENT_SSRDATASCRIPT_PLACEHOLDER, import_constants.PLACEHOLDER_REPLACER_MAP[import_constants.DOCUMENT_SSRDATASCRIPT_PLACEHOLDER]).replace(import_constants.DOCUMENT_TITLE_PLACEHOLDER, titles);
182
186
  return finalHtml;
183
187
  };
184
188
  };
@@ -32,6 +32,7 @@ __export(constants_exports, {
32
32
  DOCUMENT_SSR_PLACEHOLDER: () => DOCUMENT_SSR_PLACEHOLDER,
33
33
  DOCUMENT_STYLE_PLACEHOLDER_END: () => DOCUMENT_STYLE_PLACEHOLDER_END,
34
34
  DOCUMENT_STYLE_PLACEHOLDER_START: () => DOCUMENT_STYLE_PLACEHOLDER_START,
35
+ DOCUMENT_TITLE_PLACEHOLDER: () => DOCUMENT_TITLE_PLACEHOLDER,
35
36
  DOC_EXT: () => DOC_EXT,
36
37
  HEAD_PARTICALS_SEPARATOR: () => HEAD_PARTICALS_SEPARATOR,
37
38
  HTML_SEPARATOR: () => HTML_SEPARATOR,
@@ -48,6 +49,7 @@ const DOC_EXT = [
48
49
  "js"
49
50
  ];
50
51
  const DOCUMENT_META_PLACEHOLDER = encodeURIComponent("<%= meta %>");
52
+ const DOCUMENT_TITLE_PLACEHOLDER = encodeURIComponent("<%= title %>");
51
53
  const HTML_SEPARATOR = "<!--<?- html ?>-->";
52
54
  const HEAD_PARTICALS_SEPARATOR = encodeURIComponent("<!--<?- partials.head ?>-->");
53
55
  const BODY_PARTICALS_SEPARATOR = encodeURIComponent("<!--<?- partials.body ?>-->");
@@ -86,6 +88,7 @@ const PLACEHOLDER_REPLACER_MAP = {
86
88
  DOCUMENT_SSR_PLACEHOLDER,
87
89
  DOCUMENT_STYLE_PLACEHOLDER_END,
88
90
  DOCUMENT_STYLE_PLACEHOLDER_START,
91
+ DOCUMENT_TITLE_PLACEHOLDER,
89
92
  DOC_EXT,
90
93
  HEAD_PARTICALS_SEPARATOR,
91
94
  HTML_SEPARATOR,
@@ -40,10 +40,12 @@ __export(runtime_exports, {
40
40
  createRoutesFromChildren: () => import_router2.createRoutesFromChildren,
41
41
  createRoutesFromElements: () => import_router2.createRoutesFromElements,
42
42
  createSearchParams: () => import_router2.createSearchParams,
43
- createShouldRevalidate: () => import_shouldRevalidate.createShouldRevalidate,
43
+ createShouldRevalidate: () => import_routeModule.createShouldRevalidate,
44
44
  default: () => runtime_default,
45
45
  defer: () => import_router2.defer,
46
46
  generatePath: () => import_router2.generatePath,
47
+ handleRouteModule: () => import_routeModule.handleRouteModule,
48
+ handleRouteModuleError: () => import_routeModule.handleRouteModuleError,
47
49
  isRouteErrorResponse: () => import_router2.isRouteErrorResponse,
48
50
  json: () => import_router2.json,
49
51
  matchPath: () => import_router2.matchPath,
@@ -90,7 +92,7 @@ var import_utils = require("./utils");
90
92
  var import_plugin2 = require("./plugin");
91
93
  __reExport(runtime_exports, require("./withRouter"), module.exports);
92
94
  var import_PrefetchLink = require("./PrefetchLink");
93
- var import_shouldRevalidate = require("./shouldRevalidate");
95
+ var import_routeModule = require("./routeModule");
94
96
  var import_router2 = require("@modern-js/runtime-utils/router");
95
97
  var runtime_default = import_plugin.routerPlugin;
96
98
  const useRouteLoaderData = (routeId) => {
@@ -123,6 +125,8 @@ const useRouteLoaderData = (routeId) => {
123
125
  createShouldRevalidate,
124
126
  defer,
125
127
  generatePath,
128
+ handleRouteModule,
129
+ handleRouteModuleError,
126
130
  isRouteErrorResponse,
127
131
  json,
128
132
  matchPath,
@@ -38,7 +38,7 @@ var import_jsx_runtime = require("react/jsx-runtime");
38
38
  var import_react = require("react");
39
39
  var import_router = require("@modern-js/runtime-utils/router");
40
40
  var import_hoist_non_react_statics = __toESM(require("hoist-non-react-statics"));
41
- var import_browser = require("@modern-js/runtime-utils/browser");
41
+ var import_parsed = require("@modern-js/runtime-utils/parsed");
42
42
  var import_core = require("../../core");
43
43
  var import_hooks = require("./hooks");
44
44
  var import_utils = require("./utils");
@@ -59,7 +59,7 @@ const routerPlugin = ({ serverBase = [], supportHtml5History = true, basename =
59
59
  const select = (pathname) => serverBase.find((baseUrl) => pathname.search(baseUrl) === 0) || "/";
60
60
  let routes = [];
61
61
  finalRouteConfig = routesConfig;
62
- window._SERVER_DATA = (0, import_browser.parsedJSONFromElement)("__MODERN_SERVER_DATA__");
62
+ window._SERVER_DATA = (0, import_parsed.parsedJSONFromElement)("__MODERN_SERVER_DATA__");
63
63
  return {
64
64
  name: "@modern-js/plugin-router",
65
65
  registerHook: {
@@ -16,11 +16,13 @@ var __copyProps = (to, from, except, desc) => {
16
16
  return to;
17
17
  };
18
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
- var shouldRevalidate_exports = {};
20
- __export(shouldRevalidate_exports, {
21
- createShouldRevalidate: () => createShouldRevalidate
19
+ var routeModule_exports = {};
20
+ __export(routeModule_exports, {
21
+ createShouldRevalidate: () => createShouldRevalidate,
22
+ handleRouteModule: () => handleRouteModule,
23
+ handleRouteModuleError: () => handleRouteModuleError
22
24
  });
23
- module.exports = __toCommonJS(shouldRevalidate_exports);
25
+ module.exports = __toCommonJS(routeModule_exports);
24
26
  var import_constants = require("@modern-js/utils/universal/constants");
25
27
  const createShouldRevalidate = (routeId) => {
26
28
  return (arg) => {
@@ -32,7 +34,19 @@ const createShouldRevalidate = (routeId) => {
32
34
  return arg.defaultShouldRevalidate;
33
35
  };
34
36
  };
37
+ const handleRouteModule = (routeModule, routeId) => {
38
+ if (typeof document !== "undefined") {
39
+ window[import_constants.ROUTE_MODULES][routeId] = routeModule;
40
+ }
41
+ return routeModule;
42
+ };
43
+ const handleRouteModuleError = (error) => {
44
+ console.error(error);
45
+ return null;
46
+ };
35
47
  // Annotate the CommonJS export names for ESM import in node:
36
48
  0 && (module.exports = {
37
- createShouldRevalidate
49
+ createShouldRevalidate,
50
+ handleRouteModule,
51
+ handleRouteModuleError
38
52
  });
@@ -36,7 +36,7 @@ module.exports = __toCommonJS(ssr_exports);
36
36
  var import_jsx_runtime = require("react/jsx-runtime");
37
37
  var import_component = require("@loadable/component");
38
38
  var import_hoist_non_react_statics = __toESM(require("hoist-non-react-statics"));
39
- var import_browser = require("@modern-js/runtime-utils/browser");
39
+ var import_parsed = require("@modern-js/runtime-utils/parsed");
40
40
  var import_types = require("./serverRender/types");
41
41
  var import_withCallback = require("./react/withCallback");
42
42
  var import_utils = require("./utils");
@@ -47,8 +47,8 @@ const ssr = (config) => ({
47
47
  setup: () => {
48
48
  const mockResp = (0, import_utils.mockResponse)();
49
49
  if (config.inlineScript === false) {
50
- window._SSR_DATA = (0, import_browser.parsedJSONFromElement)(import_utils2.SSR_DATA_JSON_ID);
51
- window._ROUTER_DATA = (0, import_browser.parsedJSONFromElement)(import_utils2.ROUTER_DATA_JSON_ID);
50
+ window._SSR_DATA = (0, import_parsed.parsedJSONFromElement)(import_utils2.SSR_DATA_JSON_ID);
51
+ window._ROUTER_DATA = (0, import_parsed.parsedJSONFromElement)(import_utils2.ROUTER_DATA_JSON_ID);
52
52
  }
53
53
  return {
54
54
  client: async ({ App, context, ModernRender, ModernHydrate }) => {
@@ -40,22 +40,22 @@ var SSRErrors;
40
40
  })(SSRErrors || (SSRErrors = {}));
41
41
  const errors = {
42
42
  [0]: {
43
- reporter: "SSR Error - App Prerender",
43
+ reporter: "App Prerender",
44
44
  logger: "App Prerender",
45
45
  metrics: "app.prerender.error"
46
46
  },
47
47
  [1]: {
48
- reporter: "SSR Error - App run useLoader",
48
+ reporter: "App run useLoader",
49
49
  logger: "App run useLoader",
50
50
  metrics: "app.useloader.error"
51
51
  },
52
52
  [2]: {
53
- reporter: "SSR Error - App Render To HTML",
53
+ reporter: "App Render To HTML",
54
54
  logger: "App Render To HTML",
55
55
  metrics: "app.render.html.error"
56
56
  },
57
57
  [3]: {
58
- reporter: "SSR Error - App Render To Streaming",
58
+ reporter: "App Render To Streaming",
59
59
  logger: "An error occurs during streaming SSR",
60
60
  metrics: "app.render.streaming.error"
61
61
  },
@@ -77,11 +77,14 @@ const timings = {
77
77
  logger: "App Render To HTML cost = %d ms"
78
78
  },
79
79
  [2]: {
80
- reporter: "ssr-render-shell"
80
+ reporter: "ssr-render-shell",
81
+ metrics: "app.render.shell.cost",
82
+ logger: "App Render To Shell cost = %d ms"
81
83
  },
82
84
  [3]: {
83
85
  reporter: "use-loader",
84
86
  serverTiming: "use-loader",
87
+ metrics: "app.useloader.cost",
85
88
  logger: "App run useLoader cost = %d ms"
86
89
  }
87
90
  };
@@ -92,7 +95,7 @@ function createSSRTracker({ reporter, serverTiming, metrics, logger }) {
92
95
  },
93
96
  trackError(key, e) {
94
97
  const { reporter: reporterContent, metrics: metricsContent, logger: loggerContent } = errors[key];
95
- reporterContent && reporter.reportError(reporterContent, e);
98
+ reporterContent && reporter.reportError(`SSR Error - ${reporterContent}`, e);
96
99
  metricsContent && metrics.emitCounter(metricsContent, 1);
97
100
  loggerContent && logger.error(loggerContent, e);
98
101
  },
@@ -4,7 +4,8 @@ var 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
@@ -6,26 +6,28 @@ import { useContext } from "react";
6
6
  import { DocumentStructureContext } from "./DocumentStructureContext";
7
7
  import { Scripts } from "./Scripts";
8
8
  import { Links } from "./Links";
9
+ import { Title } from "./Title";
9
10
  import { DOCUMENT_META_PLACEHOLDER, HEAD_PARTICALS_SEPARATOR, TOP_PARTICALS_SEPARATOR } from "./constants";
10
11
  function Head(props) {
11
- var _useContext = useContext(DocumentStructureContext), hasSetScripts = _useContext.hasSetScripts, hasSetLinks = _useContext.hasSetLinks;
12
+ var _useContext = useContext(DocumentStructureContext), hasSetScripts = _useContext.hasSetScripts, hasSetLinks = _useContext.hasSetLinks, hasSetTitle = _useContext.hasSetTitle;
12
13
  var children = props.children, rest = _object_without_properties(props, [
13
14
  "children"
14
15
  ]);
15
16
  return /* @__PURE__ */ _jsxs("head", _object_spread_props(_object_spread({}, rest), {
16
17
  children: [
17
- "".concat(TOP_PARTICALS_SEPARATOR),
18
- "".concat(DOCUMENT_META_PLACEHOLDER),
18
+ TOP_PARTICALS_SEPARATOR,
19
+ DOCUMENT_META_PLACEHOLDER,
20
+ !hasSetTitle && /* @__PURE__ */ _jsx(Title, {}),
19
21
  !hasSetLinks && /* @__PURE__ */ _jsx(Links, {}),
20
22
  !hasSetScripts && /* @__PURE__ */ _jsx(Scripts, {}),
21
- "".concat(HEAD_PARTICALS_SEPARATOR),
23
+ HEAD_PARTICALS_SEPARATOR,
22
24
  children
23
25
  ]
24
26
  }));
25
27
  }
26
28
  function DefaultHead() {
27
29
  return /* @__PURE__ */ _jsx("head", {
28
- children: "".concat(DOCUMENT_META_PLACEHOLDER)
30
+ children: DOCUMENT_META_PLACEHOLDER
29
31
  });
30
32
  }
31
33
  export {
@@ -55,6 +55,7 @@ function Html(props) {
55
55
  var hasSetLinks = Boolean(findTargetElement("Links", children));
56
56
  var hasSetBody = Boolean(findTargetChild("Body", children));
57
57
  var hasSetRoot = Boolean(findTargetElement("Root", children));
58
+ var hasSetTitle = Boolean(findTargetElement("title", children));
58
59
  var notMissMustChild = [
59
60
  hasSetHead,
60
61
  hasSetBody
@@ -91,6 +92,7 @@ function Html(props) {
91
92
  hasSetLinks,
92
93
  hasSetRoot,
93
94
  hasSetBody,
95
+ hasSetTitle,
94
96
  docChild: children
95
97
  },
96
98
  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
+ };
@@ -8,7 +8,7 @@ import ReactDomServer from "react-dom/server";
8
8
  import { build } from "esbuild";
9
9
  import { createDebugger, findExists, fs } from "@modern-js/utils";
10
10
  import { DocumentContext } from "../DocumentContext";
11
- 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";
11
+ 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";
12
12
  var debug = createDebugger("html_genarate");
13
13
  var getDocumenByEntryName = function getDocumenByEntryName2(entrypoints, entryName, fallbackDir) {
14
14
  var _entrypoints_find;
@@ -57,7 +57,7 @@ var documentPlugin = function() {
57
57
  }
58
58
  return function() {
59
59
  var _ref2 = _async_to_generator(function(param) {
60
- var htmlWebpackPlugin, config, documentParams, tempTsConfigFile, userTsConfigFilePath, tsConfig, err, htmlOutputFile, Document, HTMLElement, html, partialsByEntrypoint, scripts, partialsContent, links, metas, nonce, nonceAttr, finalHtml;
60
+ var htmlWebpackPlugin, config, documentParams, tempTsConfigFile, userTsConfigFilePath, tsConfig, err, htmlOutputFile, Document, HTMLElement, html, partialsByEntrypoint, scripts, partialsContent, links, metas, titles, nonce, nonceAttr, finalHtml;
61
61
  return _ts_generator(this, function(_state2) {
62
62
  switch (_state2.label) {
63
63
  case 0:
@@ -185,6 +185,12 @@ var documentPlugin = function() {
185
185
  return item.tagName !== "script" && item.tagName !== "link";
186
186
  }).join("")
187
187
  ].join("");
188
+ titles = [
189
+ templateParameters.title,
190
+ htmlWebpackPlugin.tags.headTags.filter(function(item) {
191
+ return item.tagName === "title";
192
+ }).join("")
193
+ ].join("");
188
194
  if (html.includes(DOCUMENT_SCRIPT_PLACEHOLDER_START) && html.includes(DOCUMENT_SCRIPT_PLACEHOLDER_END)) {
189
195
  nonce = config.security.nonce;
190
196
  nonceAttr = nonce ? "nonce=".concat(nonce) : "";
@@ -202,7 +208,7 @@ var documentPlugin = function() {
202
208
  return "".concat(decodeURIComponent($1));
203
209
  });
204
210
  }
205
- finalHtml = "<!DOCTYPE html>".concat(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]);
211
+ finalHtml = "<!DOCTYPE html>".concat(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);
206
212
  return [
207
213
  2,
208
214
  finalHtml
@@ -7,6 +7,7 @@ var DOC_EXT = [
7
7
  "js"
8
8
  ];
9
9
  var DOCUMENT_META_PLACEHOLDER = encodeURIComponent("<%= meta %>");
10
+ var DOCUMENT_TITLE_PLACEHOLDER = encodeURIComponent("<%= title %>");
10
11
  var HTML_SEPARATOR = "<!--<?- html ?>-->";
11
12
  var HEAD_PARTICALS_SEPARATOR = encodeURIComponent("<!--<?- partials.head ?>-->");
12
13
  var BODY_PARTICALS_SEPARATOR = encodeURIComponent("<!--<?- partials.body ?>-->");
@@ -41,6 +42,7 @@ export {
41
42
  DOCUMENT_SSR_PLACEHOLDER,
42
43
  DOCUMENT_STYLE_PLACEHOLDER_END,
43
44
  DOCUMENT_STYLE_PLACEHOLDER_START,
45
+ DOCUMENT_TITLE_PLACEHOLDER,
44
46
  DOC_EXT,
45
47
  HEAD_PARTICALS_SEPARATOR,
46
48
  HTML_SEPARATOR,
@@ -9,7 +9,7 @@ var useRouteLoaderData = function(routeId) {
9
9
  var 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,
@@ -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
  };
@@ -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";
@@ -16,19 +16,19 @@ var SSRErrors;
16
16
  })(SSRErrors || (SSRErrors = {}));
17
17
  var _obj;
18
18
  var errors = (_obj = {}, _define_property(_obj, 0, {
19
- reporter: "SSR Error - App Prerender",
19
+ reporter: "App Prerender",
20
20
  logger: "App Prerender",
21
21
  metrics: "app.prerender.error"
22
22
  }), _define_property(_obj, 1, {
23
- reporter: "SSR Error - App run useLoader",
23
+ reporter: "App run useLoader",
24
24
  logger: "App run useLoader",
25
25
  metrics: "app.useloader.error"
26
26
  }), _define_property(_obj, 2, {
27
- reporter: "SSR Error - App Render To HTML",
27
+ reporter: "App Render To HTML",
28
28
  logger: "App Render To HTML",
29
29
  metrics: "app.render.html.error"
30
30
  }), _define_property(_obj, 3, {
31
- reporter: "SSR Error - App Render To Streaming",
31
+ reporter: "App Render To Streaming",
32
32
  logger: "An error occurs during streaming SSR",
33
33
  metrics: "app.render.streaming.error"
34
34
  }), _define_property(_obj, 4, {
@@ -46,10 +46,13 @@ var timings = (_obj1 = {}, _define_property(_obj1, 0, {
46
46
  metrics: "app.render.html.cost",
47
47
  logger: "App Render To HTML cost = %d ms"
48
48
  }), _define_property(_obj1, 2, {
49
- reporter: "ssr-render-shell"
49
+ reporter: "ssr-render-shell",
50
+ metrics: "app.render.shell.cost",
51
+ logger: "App Render To Shell cost = %d ms"
50
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
  },
@@ -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
+ };