@bleedingdev/modern-js-runtime 3.2.0-ultramodern.102 → 3.2.0-ultramodern.104

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 (179) hide show
  1. package/dist/cjs/boundary-debugger/index.js +15 -11
  2. package/dist/cjs/cache/index.js +9 -5
  3. package/dist/cjs/cli/alias.js +9 -5
  4. package/dist/cjs/cli/code.js +9 -5
  5. package/dist/cjs/cli/constants.js +20 -16
  6. package/dist/cjs/cli/entry.js +9 -5
  7. package/dist/cjs/cli/index.js +9 -5
  8. package/dist/cjs/cli/ssr/index.js +9 -5
  9. package/dist/cjs/cli/ssr/loadable-bundler-plugin.js +9 -5
  10. package/dist/cjs/cli/ssr/mode.js +12 -8
  11. package/dist/cjs/cli/template.js +9 -5
  12. package/dist/cjs/cli/template.server.js +9 -5
  13. package/dist/cjs/common.js +14 -10
  14. package/dist/cjs/core/browser/hydrate.js +9 -5
  15. package/dist/cjs/core/browser/index.js +9 -5
  16. package/dist/cjs/core/browser/withCallback.js +9 -5
  17. package/dist/cjs/core/compat/hooks.js +14 -10
  18. package/dist/cjs/core/compat/index.js +9 -5
  19. package/dist/cjs/core/compat/requestContext.js +13 -9
  20. package/dist/cjs/core/config.js +12 -8
  21. package/dist/cjs/core/constants.js +15 -10
  22. package/dist/cjs/core/context/index.js +9 -5
  23. package/dist/cjs/core/context/monitors/default.js +12 -8
  24. package/dist/cjs/core/context/monitors/index.js +9 -5
  25. package/dist/cjs/core/context/monitors/index.server.js +9 -5
  26. package/dist/cjs/core/context/request/index.js +12 -8
  27. package/dist/cjs/core/context/request/index.server.js +9 -5
  28. package/dist/cjs/core/context/response/index.js +15 -11
  29. package/dist/cjs/core/context/response/index.server.js +9 -5
  30. package/dist/cjs/core/context/runtime.js +9 -5
  31. package/dist/cjs/core/context/serverPayload/index.js +13 -9
  32. package/dist/cjs/core/context/serverPayload/index.server.js +9 -5
  33. package/dist/cjs/core/index.js +9 -5
  34. package/dist/cjs/core/plugin/index.js +9 -5
  35. package/dist/cjs/core/react/index.js +9 -5
  36. package/dist/cjs/core/react/wrapper.js +9 -5
  37. package/dist/cjs/core/server/constants.js +15 -11
  38. package/dist/cjs/core/server/federatedCss.js +11 -7
  39. package/dist/cjs/core/server/helmet.js +9 -5
  40. package/dist/cjs/core/server/index.js +9 -5
  41. package/dist/cjs/core/server/react/index.js +9 -5
  42. package/dist/cjs/core/server/react/no-ssr-cache/index.js +9 -5
  43. package/dist/cjs/core/server/react/nossr/index.js +9 -5
  44. package/dist/cjs/core/server/requestHandler.js +9 -5
  45. package/dist/cjs/core/server/scriptOrder.js +14 -10
  46. package/dist/cjs/core/server/server.js +9 -5
  47. package/dist/cjs/core/server/shared.js +12 -8
  48. package/dist/cjs/core/server/stream/afterTemplate.js +9 -5
  49. package/dist/cjs/core/server/stream/beforeTemplate.js +10 -6
  50. package/dist/cjs/core/server/stream/beforeTemplate.worker.js +10 -6
  51. package/dist/cjs/core/server/stream/createReadableStream.js +9 -5
  52. package/dist/cjs/core/server/stream/createReadableStream.worker.js +9 -5
  53. package/dist/cjs/core/server/stream/deferredScript.js +9 -5
  54. package/dist/cjs/core/server/stream/index.js +9 -5
  55. package/dist/cjs/core/server/stream/shared.js +9 -5
  56. package/dist/cjs/core/server/stream/template.js +9 -5
  57. package/dist/cjs/core/server/string/index.js +9 -5
  58. package/dist/cjs/core/server/string/loadable.js +9 -5
  59. package/dist/cjs/core/server/string/ssrData.js +9 -5
  60. package/dist/cjs/core/server/tracer.js +13 -9
  61. package/dist/cjs/core/server/utils.js +9 -5
  62. package/dist/cjs/document/Body.js +9 -5
  63. package/dist/cjs/document/Comment.js +9 -5
  64. package/dist/cjs/document/DocumentContext.js +9 -5
  65. package/dist/cjs/document/DocumentStructureContext.js +9 -5
  66. package/dist/cjs/document/Head.js +9 -5
  67. package/dist/cjs/document/Html.js +9 -5
  68. package/dist/cjs/document/Links.js +9 -5
  69. package/dist/cjs/document/Root.js +9 -5
  70. package/dist/cjs/document/Script.js +9 -5
  71. package/dist/cjs/document/Scripts.js +9 -5
  72. package/dist/cjs/document/Style.js +9 -5
  73. package/dist/cjs/document/Title.js +9 -5
  74. package/dist/cjs/document/cli/index.js +12 -6
  75. package/dist/cjs/document/constants.js +9 -5
  76. package/dist/cjs/document/index.js +9 -5
  77. package/dist/cjs/exports/config-routes.js +12 -8
  78. package/dist/cjs/exports/head.js +18 -10
  79. package/dist/cjs/exports/loadable.js +27 -18
  80. package/dist/cjs/exports/tanstack-router.js +9 -5
  81. package/dist/cjs/index.js +9 -5
  82. package/dist/cjs/internal.js +9 -5
  83. package/dist/cjs/react-server.js +9 -5
  84. package/dist/cjs/router/cli/code/getClientRoutes/getRoutes.js +9 -5
  85. package/dist/cjs/router/cli/code/getClientRoutes/index.js +9 -5
  86. package/dist/cjs/router/cli/code/getClientRoutes/utils.js +9 -5
  87. package/dist/cjs/router/cli/code/index.js +9 -5
  88. package/dist/cjs/router/cli/code/inspect.js +9 -5
  89. package/dist/cjs/router/cli/code/makeLegalIdentifier.js +12 -8
  90. package/dist/cjs/router/cli/code/nestedRoutes.js +9 -5
  91. package/dist/cjs/router/cli/code/tanstackTypes.js +9 -5
  92. package/dist/cjs/router/cli/code/templates.js +9 -5
  93. package/dist/cjs/router/cli/code/utils.js +9 -5
  94. package/dist/cjs/router/cli/config-routes/converter.js +9 -5
  95. package/dist/cjs/router/cli/config-routes/parseRouteConfig.js +9 -5
  96. package/dist/cjs/router/cli/constants.js +23 -19
  97. package/dist/cjs/router/cli/entry.js +9 -5
  98. package/dist/cjs/router/cli/handler.js +9 -5
  99. package/dist/cjs/router/cli/index.js +9 -5
  100. package/dist/cjs/router/index.js +9 -5
  101. package/dist/cjs/router/internal.js +12 -8
  102. package/dist/cjs/router/runtime/CSSLinks.js +9 -5
  103. package/dist/cjs/router/runtime/DefaultNotFound.js +9 -5
  104. package/dist/cjs/router/runtime/DeferredDataScripts.js +12 -8
  105. package/dist/cjs/router/runtime/DeferredDataScripts.node.js +9 -5
  106. package/dist/cjs/router/runtime/PrefetchLink.js +162 -26
  107. package/dist/cjs/router/runtime/constants.js +9 -5
  108. package/dist/cjs/router/runtime/hooks.js +9 -5
  109. package/dist/cjs/router/runtime/index.js +15 -10
  110. package/dist/cjs/router/runtime/internal.js +9 -5
  111. package/dist/cjs/router/runtime/lifecycle.js +18 -14
  112. package/dist/cjs/router/runtime/plugin.js +9 -5
  113. package/dist/cjs/router/runtime/plugin.node.js +9 -5
  114. package/dist/cjs/router/runtime/routerHelper.js +9 -5
  115. package/dist/cjs/router/runtime/rsc-router.js +9 -5
  116. package/dist/cjs/router/runtime/rsc.js +9 -5
  117. package/dist/cjs/router/runtime/server.js +9 -5
  118. package/dist/cjs/router/runtime/tanstack/basepathRewrite.js +12 -8
  119. package/dist/cjs/router/runtime/tanstack/dataMutation.js +9 -5
  120. package/dist/cjs/router/runtime/tanstack/hydrationBoundary.js +9 -5
  121. package/dist/cjs/router/runtime/tanstack/outlet.js +10 -6
  122. package/dist/cjs/router/runtime/tanstack/plugin.js +42 -41
  123. package/dist/cjs/router/runtime/tanstack/plugin.node.js +9 -5
  124. package/dist/cjs/router/runtime/tanstack/prefetchLink.js +10 -6
  125. package/dist/cjs/router/runtime/tanstack/routeTree.js +9 -5
  126. package/dist/cjs/router/runtime/tanstack/rsc/ClientSlot.js +9 -5
  127. package/dist/cjs/router/runtime/tanstack/rsc/CompositeComponent.js +9 -5
  128. package/dist/cjs/router/runtime/tanstack/rsc/ReplayableStream.js +14 -9
  129. package/dist/cjs/router/runtime/tanstack/rsc/RscNodeRenderer.js +9 -5
  130. package/dist/cjs/router/runtime/tanstack/rsc/SlotContext.js +9 -5
  131. package/dist/cjs/router/runtime/tanstack/rsc/client.js +9 -5
  132. package/dist/cjs/router/runtime/tanstack/rsc/createRscProxy.js +9 -5
  133. package/dist/cjs/router/runtime/tanstack/rsc/index.js +9 -5
  134. package/dist/cjs/router/runtime/tanstack/rsc/server.js +9 -5
  135. package/dist/cjs/router/runtime/tanstack/rsc/slotUsageSanitizer.js +9 -5
  136. package/dist/cjs/router/runtime/tanstack/rsc/symbols.js +20 -15
  137. package/dist/cjs/router/runtime/utils.js +9 -5
  138. package/dist/cjs/router/runtime/withRouter.js +9 -5
  139. package/dist/cjs/rsc/client.js +12 -8
  140. package/dist/cjs/rsc/server.js +9 -5
  141. package/dist/cjs/rsc/server.worker.js +9 -5
  142. package/dist/cjs/ssr/index.node.js +13 -9
  143. package/dist/cjs/ssr/serverRender/renderToStream/buildTemplate.after.js +9 -5
  144. package/dist/cjs/ssr/serverRender/renderToString/entry.js +9 -5
  145. package/dist/cjs/ssr/serverRender/types.js +9 -5
  146. package/dist/esm/boundary-debugger/index.mjs +6 -6
  147. package/dist/esm/core/server/federatedCss.mjs +2 -2
  148. package/dist/esm/core/server/scriptOrder.mjs +2 -2
  149. package/dist/esm/core/server/stream/beforeTemplate.mjs +1 -1
  150. package/dist/esm/core/server/stream/beforeTemplate.worker.mjs +1 -1
  151. package/dist/esm/document/cli/index.mjs +3 -1
  152. package/dist/esm/exports/head.mjs +9 -5
  153. package/dist/esm/exports/loadable.mjs +12 -6
  154. package/dist/esm/router/runtime/PrefetchLink.mjs +153 -21
  155. package/dist/esm/router/runtime/tanstack/outlet.mjs +1 -1
  156. package/dist/esm/router/runtime/tanstack/plugin.mjs +33 -36
  157. package/dist/esm/router/runtime/tanstack/prefetchLink.mjs +1 -1
  158. package/dist/esm-node/boundary-debugger/index.mjs +6 -6
  159. package/dist/esm-node/core/server/federatedCss.mjs +2 -2
  160. package/dist/esm-node/core/server/scriptOrder.mjs +2 -2
  161. package/dist/esm-node/core/server/stream/beforeTemplate.mjs +1 -1
  162. package/dist/esm-node/core/server/stream/beforeTemplate.worker.mjs +1 -1
  163. package/dist/esm-node/document/cli/index.mjs +3 -1
  164. package/dist/esm-node/exports/head.mjs +9 -5
  165. package/dist/esm-node/exports/loadable.mjs +12 -6
  166. package/dist/esm-node/router/runtime/PrefetchLink.mjs +153 -21
  167. package/dist/esm-node/router/runtime/tanstack/outlet.mjs +1 -1
  168. package/dist/esm-node/router/runtime/tanstack/plugin.mjs +33 -36
  169. package/dist/esm-node/router/runtime/tanstack/prefetchLink.mjs +1 -1
  170. package/dist/types/cli/entry.d.ts +2 -2
  171. package/dist/types/core/context/response/index.server.d.ts +4 -1
  172. package/dist/types/core/plugin/index.d.ts +1 -1
  173. package/dist/types/core/server/utils.d.ts +11 -1
  174. package/dist/types/exports/head.d.ts +4 -4
  175. package/dist/types/exports/loadable.d.ts +1 -1
  176. package/dist/types/router/cli/code/utils.d.ts +1 -1
  177. package/dist/types/router/cli/entry.d.ts +1 -1
  178. package/dist/types/router/runtime/PrefetchLink.d.ts +5 -1
  179. package/package.json +10 -10
@@ -24,11 +24,15 @@ function __webpack_require__(moduleId) {
24
24
  };
25
25
  })();
26
26
  (()=>{
27
- __webpack_require__.d = (exports1, definition)=>{
28
- for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
29
- enumerable: true,
30
- get: definition[key]
31
- });
27
+ __webpack_require__.d = (exports1, getters, values)=>{
28
+ var define = (defs, kind)=>{
29
+ for(var key in defs)if (__webpack_require__.o(defs, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
30
+ enumerable: true,
31
+ [kind]: defs[key]
32
+ });
33
+ };
34
+ define(getters, "get");
35
+ define(values, "value");
32
36
  };
33
37
  })();
34
38
  (()=>{
@@ -33,11 +33,15 @@ function __webpack_require__(moduleId) {
33
33
  };
34
34
  })();
35
35
  (()=>{
36
- __webpack_require__.d = (exports1, definition)=>{
37
- for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
38
- enumerable: true,
39
- get: definition[key]
40
- });
36
+ __webpack_require__.d = (exports1, getters, values)=>{
37
+ var define = (defs, kind)=>{
38
+ for(var key in defs)if (__webpack_require__.o(defs, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
39
+ enumerable: true,
40
+ [kind]: defs[key]
41
+ });
42
+ };
43
+ define(getters, "get");
44
+ define(values, "value");
41
45
  };
42
46
  })();
43
47
  (()=>{
@@ -56,10 +60,6 @@ function __webpack_require__(moduleId) {
56
60
  var __webpack_exports__ = {};
57
61
  (()=>{
58
62
  __webpack_require__.r(__webpack_exports__);
59
- __webpack_require__.d(__webpack_exports__, {
60
- default: ()=>__rspack_default_export,
61
- ssr: ()=>ssr
62
- });
63
63
  var _serverRender__rspack_import_0 = __webpack_require__("./serverRender");
64
64
  var _serverRender__rspack_import_0_default = /*#__PURE__*/ __webpack_require__.n(_serverRender__rspack_import_0);
65
65
  var _serverRender_tracker__rspack_import_1 = __webpack_require__("./serverRender/tracker");
@@ -109,6 +109,10 @@ var __webpack_exports__ = {};
109
109
  })
110
110
  });
111
111
  const __rspack_default_export = ssr;
112
+ __webpack_require__.d(__webpack_exports__, {}, {
113
+ default: __rspack_default_export,
114
+ ssr: ssr
115
+ });
112
116
  })();
113
117
  exports["default"] = __webpack_exports__["default"];
114
118
  exports.ssr = __webpack_exports__.ssr;
@@ -1,11 +1,15 @@
1
1
  "use strict";
2
2
  var __webpack_require__ = {};
3
3
  (()=>{
4
- __webpack_require__.d = (exports1, definition)=>{
5
- for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
6
- enumerable: true,
7
- get: definition[key]
8
- });
4
+ __webpack_require__.d = (exports1, getters, values)=>{
5
+ var define = (defs, kind)=>{
6
+ for(var key in defs)if (__webpack_require__.o(defs, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
7
+ enumerable: true,
8
+ [kind]: defs[key]
9
+ });
10
+ };
11
+ define(getters, "get");
12
+ define(values, "value");
9
13
  };
10
14
  })();
11
15
  (()=>{
@@ -10,11 +10,15 @@ var __webpack_require__ = {};
10
10
  };
11
11
  })();
12
12
  (()=>{
13
- __webpack_require__.d = (exports1, definition)=>{
14
- for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
15
- enumerable: true,
16
- get: definition[key]
17
- });
13
+ __webpack_require__.d = (exports1, getters, values)=>{
14
+ var define = (defs, kind)=>{
15
+ for(var key in defs)if (__webpack_require__.o(defs, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
16
+ enumerable: true,
17
+ [kind]: defs[key]
18
+ });
19
+ };
20
+ define(getters, "get");
21
+ define(values, "value");
18
22
  };
19
23
  })();
20
24
  (()=>{
@@ -1,11 +1,15 @@
1
1
  "use strict";
2
2
  var __webpack_require__ = {};
3
3
  (()=>{
4
- __webpack_require__.d = (exports1, definition)=>{
5
- for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
6
- enumerable: true,
7
- get: definition[key]
8
- });
4
+ __webpack_require__.d = (exports1, getters, values)=>{
5
+ var define = (defs, kind)=>{
6
+ for(var key in defs)if (__webpack_require__.o(defs, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
7
+ enumerable: true,
8
+ [kind]: defs[key]
9
+ });
10
+ };
11
+ define(getters, "get");
12
+ define(values, "value");
9
13
  };
10
14
  })();
11
15
  (()=>{
@@ -50,7 +50,7 @@ const readQueryEnabledOverride = ()=>{
50
50
  const detectLanguage = ()=>{
51
51
  if ("u" < typeof document) return 'en';
52
52
  const htmlLanguage = document.documentElement.lang;
53
- if (htmlLanguage) return htmlLanguage.split('-')[0] || 'en';
53
+ if ('' !== htmlLanguage) return htmlLanguage.split('-')[0] || 'en';
54
54
  if ("u" < typeof window) return 'en';
55
55
  return window.location.pathname.split('/').filter(Boolean)[0] || 'en';
56
56
  };
@@ -69,7 +69,7 @@ const getBoundaryId = (element)=>element.dataset.modernBoundaryId ?? element.dat
69
69
  const collectBoundaryElements = (legacySelector)=>{
70
70
  const elements = new Set();
71
71
  for (const element of document.querySelectorAll(boundarySelector))elements.add(element);
72
- if (!legacySelector) return Array.from(elements);
72
+ if (void 0 === legacySelector || '' === legacySelector) return Array.from(elements);
73
73
  try {
74
74
  for (const element of document.querySelectorAll(legacySelector))elements.add(element);
75
75
  } catch {}
@@ -113,7 +113,7 @@ function BoundaryDebugger({ controlMode = 'visible', enabledByDefault = false, l
113
113
  const seenBoxes = new Set();
114
114
  const nextBoxes = collectBoundaryElements(legacySelector).map((element)=>{
115
115
  const boundaryId = getBoundaryId(element);
116
- if (!boundaryId) return;
116
+ if (void 0 === boundaryId || '' === boundaryId) return;
117
117
  const rect = element.getBoundingClientRect();
118
118
  if (rect.width <= 0 || rect.height <= 0) return;
119
119
  const rectKey = formatRectKey(rect);
@@ -124,7 +124,7 @@ function BoundaryDebugger({ controlMode = 'visible', enabledByDefault = false, l
124
124
  const color = boundary?.color ?? palette[hashBoundaryId(boundaryId) % palette.length];
125
125
  const label = boundary?.label ?? boundary?.appId ?? boundaryId;
126
126
  const expose = element.dataset.modernMfExpose;
127
- const detail = expose && expose !== label && expose !== boundaryId ? expose : void 0;
127
+ const detail = void 0 !== expose && '' !== expose && expose !== label && expose !== boundaryId ? expose : void 0;
128
128
  const box = {
129
129
  color,
130
130
  height: rect.height,
@@ -134,7 +134,7 @@ function BoundaryDebugger({ controlMode = 'visible', enabledByDefault = false, l
134
134
  top: rect.top,
135
135
  width: rect.width
136
136
  };
137
- if (detail) box.detail = detail;
137
+ if (void 0 !== detail) box.detail = detail;
138
138
  return box;
139
139
  }).filter((box)=>void 0 !== box);
140
140
  setBoxes(nextBoxes);
@@ -227,7 +227,7 @@ function BoundaryDebugger({ controlMode = 'visible', enabledByDefault = false, l
227
227
  /*#__PURE__*/ jsx("span", {
228
228
  children: box.label
229
229
  }),
230
- box.detail ? /*#__PURE__*/ jsx("span", {
230
+ void 0 !== box.detail && '' !== box.detail ? /*#__PURE__*/ jsx("span", {
231
231
  style: {
232
232
  font: '700 10px/1.1 system-ui, sans-serif',
233
233
  opacity: 0.82,
@@ -1,10 +1,10 @@
1
1
  import { attributesToString } from "./utils.mjs";
2
2
  const createFederatedCssLinks = (assets, options)=>{
3
- if (!assets?.length) return '';
3
+ if (void 0 === assets || 0 === assets.length) return '';
4
4
  const seen = new Set(options.existingAssets || []);
5
5
  const attributes = attributesToString(options.attributes || {});
6
6
  const links = [];
7
- for (const asset of assets)if (!(!asset || seen.has(asset) || options.template.includes(asset))) {
7
+ for (const asset of assets)if (!('' === asset || seen.has(asset) || options.template.includes(asset))) {
8
8
  seen.add(asset);
9
9
  links.push(`<link${attributes} href="${asset}" rel="stylesheet" />`);
10
10
  }
@@ -16,10 +16,10 @@ function isEntryScript(src, entryName, asyncEntry) {
16
16
  return basename === `${prefix}.js` || basename.startsWith(`${prefix}.`) || basename.startsWith(`${prefix}-`);
17
17
  }
18
18
  function injectBeforeHydrationEntryScript(template, scripts, entryName = 'index') {
19
- if (!scripts) return template;
19
+ if ('' === scripts) return template;
20
20
  const scriptTags = getScriptTags(template);
21
21
  const target = scriptTags.find((match)=>isEntryScript(match.src, entryName, false)) ?? scriptTags.find((match)=>isEntryScript(match.src, entryName, true));
22
- if (!target) return template;
22
+ if (void 0 === target) return template;
23
23
  return `${template.slice(0, target.index)}${scripts}${template.slice(target.index)}`;
24
24
  }
25
25
  export { injectBeforeHydrationEntryScript };
@@ -45,7 +45,7 @@ async function buildShellBeforeTemplate(beforeAppTemplate, options) {
45
45
  if (!index) return;
46
46
  const routeId = match.route.id;
47
47
  if (routeId) return routeAssets[routeId];
48
- }).filter(Boolean) ?? [];
48
+ }).filter((routeManifest)=>void 0 !== routeManifest) ?? [];
49
49
  }
50
50
  const asyncEntry = routeAssets[`async-${entryName}`];
51
51
  if (asyncEntry) matchedRouteManifests.push(asyncEntry);
@@ -39,7 +39,7 @@ async function buildShellBeforeTemplate(beforeAppTemplate, options) {
39
39
  if (!index) return;
40
40
  const routeId = match.route.id;
41
41
  if (routeId) return routeAssets[routeId];
42
- }).filter(Boolean) ?? [];
42
+ }).filter((routeManifest)=>void 0 !== routeManifest) ?? [];
43
43
  }
44
44
  const asyncEntry = routeAssets[`async-${entryName}`];
45
45
  if (asyncEntry) matchedRouteManifests.push(asyncEntry);
@@ -299,7 +299,7 @@ const documentPlugin = ()=>({
299
299
  const { entrypoints, internalDirectory, appDirectory } = api.getAppContext();
300
300
  const documentFilePath = getDocumentByEntryName(entrypoints, entryName, appDirectory);
301
301
  if (!documentFilePath) return null;
302
- return async ({ htmlPlugin })=>{
302
+ return async (templateData)=>{
303
303
  const config = api.getNormalizedConfig();
304
304
  const documentParams = getDocParams({
305
305
  config: config,
@@ -318,6 +318,8 @@ const documentPlugin = ()=>({
318
318
  debug("entry %s's document jsx rendered html: %o", entryName, html);
319
319
  const { partialsByEntrypoint } = api.getAppContext();
320
320
  html = processPartials(html, entryName, partialsByEntrypoint || {});
321
+ const htmlPlugin = templateData.htmlPlugin || templateData.htmlWebpackPlugin || templateData.htmlRspackPlugin;
322
+ if (!htmlPlugin) throw new Error('Failed to get HTML plugin tags from template parameters.');
321
323
  const { scripts, links, metas, titles } = extractHtmlTags(htmlPlugin, templateParameters);
322
324
  return processPlaceholders(html, config, scripts, links, metas, titles);
323
325
  };
@@ -40,7 +40,7 @@ const createAttributeDatum = (attributes)=>({
40
40
  const createTitleDatum = (title, attributes)=>({
41
41
  toComponent: ()=>[],
42
42
  toString: ()=>{
43
- if (!title) return '';
43
+ if (void 0 === title || '' === title) return '';
44
44
  const attrs = attributesToString(attributes, true);
45
45
  return `<title ${attrs}>${escapeHtml(title)}</title>`;
46
46
  }
@@ -57,6 +57,10 @@ const createEmptyHelmetState = ()=>({
57
57
  style: createDatum('style', []),
58
58
  title: createTitleDatum(void 0, {})
59
59
  });
60
+ const normalizeHelmetTitle = (title)=>{
61
+ if ('string' == typeof title) return title;
62
+ if (Array.isArray(title)) return title.map((part)=>String(part)).join('');
63
+ };
60
64
  const mergeAttributes = (current, next)=>({
61
65
  ...current,
62
66
  ...next ?? {}
@@ -86,7 +90,7 @@ const collectHelmetProps = (current, props)=>{
86
90
  const baseState = current ?? createEmptyHelmetState();
87
91
  const draft = {
88
92
  base: [
89
- ...props.base ? [
93
+ ...void 0 !== props.base ? [
90
94
  props.base
91
95
  ] : []
92
96
  ],
@@ -107,11 +111,11 @@ const collectHelmetProps = (current, props)=>{
107
111
  style: [
108
112
  ...props.style ?? []
109
113
  ],
110
- title: 'string' == typeof props.title ? props.title : Array.isArray(props.title) ? props.title.join('') : void 0,
114
+ title: normalizeHelmetTitle(props.title),
111
115
  titleAttributes: props.titleAttributes ?? {}
112
116
  };
113
117
  collectChildren(props.children, draft);
114
- const title = draft.title && props.titleTemplate ? props.titleTemplate.replaceAll('%s', draft.title) : draft.title ?? props.defaultTitle;
118
+ const title = void 0 !== draft.title && '' !== draft.title && void 0 !== props.titleTemplate ? props.titleTemplate.replaceAll('%s', draft.title) : draft.title ?? props.defaultTitle;
115
119
  return {
116
120
  base: createDatum('base', [
117
121
  ...baseState.__baseTags ?? [],
@@ -173,7 +177,7 @@ const collectHelmetProps = (current, props)=>{
173
177
  };
174
178
  const head_Helmet = (props)=>{
175
179
  const runtimeContext = react.useContext(InternalRuntimeContext);
176
- if (runtimeContext && !runtimeContext.isBrowser) {
180
+ if (null !== runtimeContext && false === runtimeContext.isBrowser) {
177
181
  runtimeContext._helmetContext ??= {};
178
182
  runtimeContext._helmetContext.helmet = collectHelmetProps(runtimeContext._helmetContext.helmet ?? void 0, props);
179
183
  return null;
@@ -1,21 +1,27 @@
1
1
  import * as __rspack_external__loadable_component_0aaae075 from "@loadable/component";
2
2
  export * from "@loadable/component";
3
+ function asLoadableNamespace(value) {
4
+ return 'object' == typeof value && null !== value ? value : {};
5
+ }
3
6
  function resolveLoadable(module) {
4
- const namespace = module;
5
- const defaultExport = namespace.default;
7
+ const namespace = asLoadableNamespace(module);
8
+ const defaultExport = asLoadableNamespace(namespace.default);
6
9
  const candidates = [
7
10
  module,
8
11
  namespace.default,
9
12
  defaultExport?.default
10
13
  ];
11
14
  const loadable = candidates.find((candidate)=>'function' == typeof candidate);
12
- if (!loadable) throw new TypeError('Modern.js runtime loadable export must resolve to a function');
15
+ if ('function' != typeof loadable) throw new TypeError('Modern.js runtime loadable export must resolve to a function');
13
16
  return loadable;
14
17
  }
15
18
  const loadable_loadable = resolveLoadable(__rspack_external__loadable_component_0aaae075);
16
- const lazy = __rspack_external__loadable_component_0aaae075.lazy ?? __rspack_external__loadable_component_0aaae075["default"]?.lazy ?? loadable_loadable.lazy;
17
- const loadableReady = __rspack_external__loadable_component_0aaae075.loadableReady ?? __rspack_external__loadable_component_0aaae075["default"]?.loadableReady ?? loadable_loadable.loadableReady;
18
- const __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED = __rspack_external__loadable_component_0aaae075.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED ?? __rspack_external__loadable_component_0aaae075["default"]?.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED ?? loadable_loadable.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;
19
+ const loadableNamespace = asLoadableNamespace(__rspack_external__loadable_component_0aaae075);
20
+ const loadableDefaultNamespace = asLoadableNamespace(loadableNamespace.default);
21
+ const callableLoadableNamespace = asLoadableNamespace(loadable_loadable);
22
+ const lazy = loadableNamespace.lazy ?? loadableDefaultNamespace.lazy ?? callableLoadableNamespace.lazy;
23
+ const loadableReady = loadableNamespace.loadableReady ?? loadableDefaultNamespace.loadableReady ?? callableLoadableNamespace.loadableReady;
24
+ const __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED = loadableNamespace.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED ?? loadableDefaultNamespace.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED ?? callableLoadableNamespace.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;
19
25
  const exports_loadable = loadable_loadable;
20
26
  export default exports_loadable;
21
27
  export { __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED, lazy, loadableReady };
@@ -10,45 +10,142 @@ function composeEventHandlers(theirHandler, ourHandler) {
10
10
  };
11
11
  }
12
12
  const ABSOLUTE_URL_REGEX = /^(?:[a-z][a-z0-9+.-]*:|\/\/)/i;
13
- function usePrefetchBehavior(prefetch, theirElementProps) {
14
- const [maybePrefetch, setMaybePrefetch] = react.useState(false);
13
+ const DEFAULT_PREFETCH_BEHAVIOR = 'render';
14
+ const DEFAULT_PRELOAD_BEHAVIOR = 'viewport';
15
+ const INTENT_DELAY = 100;
16
+ const VIEWPORT_ROOT_MARGIN = '200px';
17
+ const MAX_CONCURRENT_WARMUPS = 4;
18
+ const WARMUP_TTL = 30000;
19
+ const SLOW_EFFECTIVE_TYPES = new Set([
20
+ 'slow-2g',
21
+ '2g'
22
+ ]);
23
+ const warmupCache = new Map();
24
+ const warmupQueue = [];
25
+ let activeWarmups = 0;
26
+ const getWarmupTimestamp = ()=>performance.now();
27
+ const getConnection = ()=>{
28
+ const nav = globalThis.navigator;
29
+ return nav?.connection || nav?.mozConnection || nav?.webkitConnection;
30
+ };
31
+ const shouldWarmupOnCurrentNetwork = ()=>{
32
+ const connection = getConnection();
33
+ if (connection?.saveData) return false;
34
+ if ('string' == typeof connection?.effectiveType && SLOW_EFFECTIVE_TYPES.has(connection.effectiveType)) return false;
35
+ return true;
36
+ };
37
+ const pruneWarmupCache = (now = getWarmupTimestamp())=>{
38
+ for (const [key, timestamp] of warmupCache)if (now - timestamp > WARMUP_TTL) warmupCache.delete(key);
39
+ };
40
+ const runNextWarmup = ()=>{
41
+ while(activeWarmups < MAX_CONCURRENT_WARMUPS && warmupQueue.length > 0){
42
+ const task = warmupQueue.shift();
43
+ if (task.cancelled) continue;
44
+ activeWarmups += 1;
45
+ task.run().catch((error)=>{
46
+ console.error(error);
47
+ warmupCache.delete(task.key);
48
+ }).finally(()=>{
49
+ activeWarmups -= 1;
50
+ runNextWarmup();
51
+ });
52
+ }
53
+ };
54
+ const scheduleWarmup = (key, run)=>{
55
+ if (!shouldWarmupOnCurrentNetwork()) return ()=>{};
56
+ pruneWarmupCache();
57
+ if (warmupCache.has(key)) return ()=>{};
58
+ warmupCache.set(key, getWarmupTimestamp());
59
+ const task = {
60
+ key,
61
+ run,
62
+ cancelled: false
63
+ };
64
+ warmupQueue.push(task);
65
+ runNextWarmup();
66
+ return ()=>{
67
+ task.cancelled = true;
68
+ };
69
+ };
70
+ const setRef = (ref, value)=>{
71
+ if (!ref) return;
72
+ if ('function' == typeof ref) return void ref(value);
73
+ try {
74
+ ref.current = value;
75
+ } catch {}
76
+ };
77
+ const isDataWarmupEnabled = (route)=>{
78
+ const handle = route.handle;
79
+ return handle?.navigationWarmup?.data === true;
80
+ };
81
+ function usePrefetchBehavior(prefetch, preload, theirElementProps) {
82
+ const [maybeWarmup, setMaybeWarmup] = react.useState(false);
15
83
  const [shouldPrefetch, setShouldPrefetch] = react.useState(false);
84
+ const [shouldPreload, setShouldPreload] = react.useState(false);
85
+ const [viewportElement, setViewportElement] = react.useState(null);
16
86
  const { onFocus, onBlur, onMouseEnter, onMouseLeave, onTouchStart } = theirElementProps;
17
87
  react.useEffect(()=>{
18
88
  if ('render' === prefetch) setShouldPrefetch(true);
89
+ if ('render' === preload) setShouldPreload(true);
19
90
  }, [
20
- prefetch
91
+ prefetch,
92
+ preload
21
93
  ]);
22
94
  const setIntent = ()=>{
23
- if ('intent' === prefetch) setMaybePrefetch(true);
95
+ if ('intent' === prefetch || 'intent' === preload) setMaybeWarmup(true);
24
96
  };
25
97
  const cancelIntent = ()=>{
26
- if ('intent' === prefetch) {
27
- setMaybePrefetch(false);
98
+ if ('intent' === prefetch || 'intent' === preload) {
99
+ setMaybeWarmup(false);
28
100
  setShouldPrefetch(false);
101
+ setShouldPreload(false);
29
102
  }
30
103
  };
31
104
  react.useEffect(()=>{
32
- if (maybePrefetch) {
105
+ if (maybeWarmup) {
33
106
  const id = setTimeout(()=>{
34
- setShouldPrefetch(true);
35
- }, 100);
107
+ if ('intent' === prefetch) setShouldPrefetch(true);
108
+ if ('intent' === preload) setShouldPreload(true);
109
+ }, INTENT_DELAY);
36
110
  return ()=>{
37
111
  clearTimeout(id);
38
112
  };
39
113
  }
40
114
  }, [
41
- maybePrefetch
115
+ maybeWarmup,
116
+ prefetch,
117
+ preload
118
+ ]);
119
+ react.useEffect(()=>{
120
+ if (!viewportElement || 'viewport' !== prefetch && 'viewport' !== preload || "u" < typeof IntersectionObserver) return;
121
+ const observer = new IntersectionObserver((entries)=>{
122
+ if (!entries.some((entry)=>entry.isIntersecting)) return;
123
+ if ('viewport' === prefetch) setShouldPrefetch(true);
124
+ if ('viewport' === preload) setShouldPreload(true);
125
+ observer.disconnect();
126
+ }, {
127
+ rootMargin: VIEWPORT_ROOT_MARGIN
128
+ });
129
+ observer.observe(viewportElement);
130
+ return ()=>{
131
+ observer.disconnect();
132
+ };
133
+ }, [
134
+ prefetch,
135
+ preload,
136
+ viewportElement
42
137
  ]);
43
138
  return [
44
139
  shouldPrefetch,
140
+ shouldPreload,
45
141
  {
46
142
  onFocus: composeEventHandlers(onFocus, setIntent),
47
143
  onBlur: composeEventHandlers(onBlur, cancelIntent),
48
144
  onMouseEnter: composeEventHandlers(onMouseEnter, setIntent),
49
145
  onMouseLeave: composeEventHandlers(onMouseLeave, cancelIntent),
50
146
  onTouchStart: composeEventHandlers(onTouchStart, setIntent)
51
- }
147
+ },
148
+ setViewportElement
52
149
  ];
53
150
  }
54
151
  async function loadRouteModule(route, routeAssets) {
@@ -83,14 +180,34 @@ const getDataHref = (route, pathname, basename)=>{
83
180
  const url = getRequestUrl(path, id);
84
181
  return createDataHref(url.toString());
85
182
  };
86
- const PrefetchPageLinks = ({ path })=>{
183
+ const PrefetchPageLinks = ({ path, includeData })=>{
87
184
  const { pathname } = path;
88
185
  const context = useContext(InternalRuntimeContext);
89
186
  const { routeManifest, routes } = context;
90
187
  const { routeAssets } = routeManifest || {};
91
- const matches = Array.isArray(routes) ? matchRoutes(routes, pathname) : [];
92
- if (Array.isArray(matches) && routeAssets) matches?.forEach((match)=>loadRouteModule(match.route, routeAssets));
93
- if (!window._SSR_DATA) return null;
188
+ const allowNetworkWarmup = shouldWarmupOnCurrentNetwork();
189
+ const matches = useMemo(()=>Array.isArray(routes) ? matchRoutes(routes, pathname) : [], [
190
+ pathname,
191
+ routes
192
+ ]);
193
+ react.useEffect(()=>{
194
+ if (!allowNetworkWarmup || !Array.isArray(matches) || !routeAssets || !__webpack_chunk_load__) return;
195
+ const cancellations = matches.map((match)=>{
196
+ const routeId = match.route.id;
197
+ const routeAsset = routeId ? routeAssets[routeId] : void 0;
198
+ const chunkIds = routeAsset?.chunkIds;
199
+ if (!routeId || !Array.isArray(chunkIds) || 0 === chunkIds.length) return ()=>{};
200
+ return scheduleWarmup(`route-module:${routeId}:${chunkIds.join(',')}`, ()=>loadRouteModule(match.route, routeAssets));
201
+ });
202
+ return ()=>{
203
+ cancellations.forEach((cancel)=>cancel());
204
+ };
205
+ }, [
206
+ allowNetworkWarmup,
207
+ matches,
208
+ routeAssets
209
+ ]);
210
+ if (!allowNetworkWarmup || !includeData || !window._SSR_DATA) return null;
94
211
  return /*#__PURE__*/ jsx(PrefetchDataLinks, {
95
212
  matches: matches,
96
213
  path: path,
@@ -102,7 +219,7 @@ const PrefetchDataLinks = ({ matches, path, routeManifest })=>{
102
219
  const currentMatches = useMatches();
103
220
  const basename = useHref('/');
104
221
  const dataHrefs = useMemo(()=>matches?.filter((match, index)=>{
105
- if (!match.route.loader || 'function' != typeof match.route.loader || 0 === match.route.loader.length) return false;
222
+ if (!isDataWarmupEnabled(match.route) || !match.route.loader || 'function' != typeof match.route.loader || 0 === match.route.loader.length) return false;
106
223
  if (match.route.shouldRevalidate) {
107
224
  const currentUrl = new URL(location.pathname + location.search + location.hash, window.origin);
108
225
  const nextUrl = new URL(pathname + search + hash, window.origin);
@@ -129,20 +246,35 @@ const PrefetchDataLinks = ({ matches, path, routeManifest })=>{
129
246
  children: dataHrefs
130
247
  });
131
248
  };
132
- const createPrefetchLink = (Link)=>/*#__PURE__*/ react.forwardRef(({ to, prefetch = 'none', ...props }, forwardedRef)=>{
249
+ const normalizePreloadBehavior = (preload, prefetch)=>{
250
+ if (false === preload || 'none' === preload) return 'none';
251
+ if (void 0 !== preload) return preload;
252
+ if ('none' === prefetch) return 'none';
253
+ return DEFAULT_PRELOAD_BEHAVIOR;
254
+ };
255
+ const createPrefetchLink = (Link)=>/*#__PURE__*/ react.forwardRef(({ to, prefetch = DEFAULT_PREFETCH_BEHAVIOR, preload, ...props }, forwardedRef)=>{
133
256
  const isAbsolute = 'string' == typeof to && ABSOLUTE_URL_REGEX.test(to);
134
- const [shouldPrefetch, prefetchHandlers] = usePrefetchBehavior(prefetch, props);
257
+ const resolvedPreload = normalizePreloadBehavior(preload, prefetch);
258
+ const [shouldPrefetch, shouldPreload, prefetchHandlers, setViewportElement] = usePrefetchBehavior(prefetch, resolvedPreload, props);
259
+ const setAnchorRef = react.useCallback((element)=>{
260
+ setViewportElement(element);
261
+ setRef(forwardedRef, element);
262
+ }, [
263
+ forwardedRef,
264
+ setViewportElement
265
+ ]);
135
266
  const resolvedPath = useResolvedPath(to);
136
267
  return /*#__PURE__*/ jsxs(Fragment, {
137
268
  children: [
138
269
  /*#__PURE__*/ jsx(Link, {
139
- ref: forwardedRef,
270
+ ref: setAnchorRef,
140
271
  to: to,
141
272
  ...props,
142
273
  ...prefetchHandlers
143
274
  }),
144
- shouldPrefetch && __webpack_chunk_load__ && !isAbsolute ? /*#__PURE__*/ jsx(PrefetchPageLinks, {
145
- path: resolvedPath
275
+ (shouldPrefetch || shouldPreload) && !isAbsolute ? /*#__PURE__*/ jsx(PrefetchPageLinks, {
276
+ path: resolvedPath,
277
+ includeData: shouldPrefetch
146
278
  }) : null
147
279
  ]
148
280
  });
@@ -5,7 +5,7 @@ const outlet_Outlet = /*#__PURE__*/ memo(function() {
5
5
  return /*#__PURE__*/ jsx(Outlet, {});
6
6
  });
7
7
  function withModernRouteMatchContext(component, _routeId) {
8
- if (!component) return component;
8
+ if (null == component) return component;
9
9
  const Component = component;
10
10
  const WrappedRouteComponent = (props)=>/*#__PURE__*/ createElement(Component, props);
11
11
  const preloadable = component;