@modern-js/runtime 2.6.0 → 2.8.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 (82) hide show
  1. package/CHANGELOG.md +53 -0
  2. package/README.md +2 -2
  3. package/dist/cjs/cli/index.js +4 -3
  4. package/dist/cjs/common.js +6 -0
  5. package/dist/cjs/core/{app-config.js → appConfig.js} +3 -3
  6. package/dist/cjs/core/compatible.js +4 -4
  7. package/dist/cjs/core/index.js +6 -6
  8. package/dist/cjs/core/loader/useLoader.js +2 -2
  9. package/dist/cjs/core/types.js +15 -0
  10. package/dist/cjs/router/runtime/DeferredDataScripts.js +165 -0
  11. package/dist/cjs/router/runtime/index.js +116 -3
  12. package/dist/cjs/router/runtime/plugin.js +14 -1
  13. package/dist/cjs/router/runtime/plugin.node.js +12 -52
  14. package/dist/cjs/router/runtime/utils.js +68 -69
  15. package/dist/cjs/{runtime-context.js → runtimeContext.js} +3 -3
  16. package/dist/cjs/ssr/cli/index.js +3 -2
  17. package/dist/cjs/ssr/index.node.js +1 -0
  18. package/dist/cjs/ssr/serverRender/renderToStream/buildTemplate.after.js +2 -14
  19. package/dist/cjs/ssr/serverRender/renderToStream/bulidTemplate.before.js +5 -1
  20. package/dist/cjs/ssr/serverRender/renderToStream/renderToPipe.js +22 -7
  21. package/dist/cjs/ssr/serverRender/renderToStream/template.js +2 -1
  22. package/dist/cjs/ssr/serverRender/renderToString/entry.js +19 -8
  23. package/dist/cjs/state/runtime/index.js +2 -8
  24. package/dist/esm/cli/index.js +4 -3
  25. package/dist/esm/common.js +3 -1
  26. package/dist/esm/core/compatible.js +1 -1
  27. package/dist/esm/core/index.js +2 -2
  28. package/dist/esm/core/loader/useLoader.js +1 -1
  29. package/dist/esm/core/types.js +1 -0
  30. package/dist/esm/router/runtime/DeferredDataScripts.js +166 -0
  31. package/dist/esm/router/runtime/index.js +3 -2
  32. package/dist/esm/router/runtime/plugin.js +11 -3
  33. package/dist/esm/router/runtime/plugin.node.js +11 -68
  34. package/dist/esm/router/runtime/utils.js +138 -81
  35. package/dist/esm/ssr/cli/index.js +4 -3
  36. package/dist/esm/ssr/index.node.js +1 -0
  37. package/dist/esm/ssr/serverRender/renderToStream/buildTemplate.after.js +2 -4
  38. package/dist/esm/ssr/serverRender/renderToStream/bulidTemplate.before.js +1 -1
  39. package/dist/esm/ssr/serverRender/renderToStream/renderToPipe.js +19 -8
  40. package/dist/esm/ssr/serverRender/renderToStream/template.js +2 -1
  41. package/dist/esm/ssr/serverRender/renderToString/entry.js +15 -7
  42. package/dist/esm/state/runtime/index.js +1 -2
  43. package/dist/esm-node/cli/index.js +4 -3
  44. package/dist/esm-node/common.js +4 -0
  45. package/dist/esm-node/core/compatible.js +1 -1
  46. package/dist/esm-node/core/index.js +2 -2
  47. package/dist/esm-node/core/loader/useLoader.js +1 -1
  48. package/dist/esm-node/core/types.js +0 -0
  49. package/dist/esm-node/router/runtime/DeferredDataScripts.js +148 -0
  50. package/dist/esm-node/router/runtime/index.js +113 -2
  51. package/dist/esm-node/router/runtime/plugin.js +15 -2
  52. package/dist/esm-node/router/runtime/plugin.node.js +12 -55
  53. package/dist/esm-node/router/runtime/utils.js +59 -69
  54. package/dist/esm-node/ssr/cli/index.js +4 -3
  55. package/dist/esm-node/ssr/index.node.js +1 -0
  56. package/dist/esm-node/ssr/serverRender/renderToStream/buildTemplate.after.js +2 -4
  57. package/dist/esm-node/ssr/serverRender/renderToStream/bulidTemplate.before.js +5 -1
  58. package/dist/esm-node/ssr/serverRender/renderToStream/renderToPipe.js +22 -7
  59. package/dist/esm-node/ssr/serverRender/renderToStream/template.js +2 -1
  60. package/dist/esm-node/ssr/serverRender/renderToString/entry.js +19 -8
  61. package/dist/esm-node/state/runtime/index.js +1 -4
  62. package/dist/types/common.d.ts +3 -1
  63. package/dist/types/core/compatible.d.ts +1 -1
  64. package/dist/types/core/index.d.ts +4 -3
  65. package/dist/types/core/loader/index.d.ts +1 -2
  66. package/dist/types/core/loader/useLoader.d.ts +1 -15
  67. package/dist/types/core/plugin.d.ts +15 -15
  68. package/dist/types/core/types.d.ts +22 -0
  69. package/dist/types/index.d.ts +1 -1
  70. package/dist/types/router/runtime/DeferredDataScripts.d.ts +8 -0
  71. package/dist/types/router/runtime/index.d.ts +4 -2
  72. package/dist/types/router/runtime/utils.d.ts +23 -4
  73. package/dist/types/{runtime-context.d.ts → runtimeContext.d.ts} +2 -0
  74. package/dist/types/ssr/serverRender/renderToStream/buildTemplate.after.d.ts +2 -0
  75. package/dist/types/state/runtime/index.d.ts +0 -1
  76. package/package.json +15 -18
  77. package/types/router.d.ts +1 -1
  78. /package/dist/esm/core/{app-config.js → appConfig.js} +0 -0
  79. /package/dist/esm/{runtime-context.js → runtimeContext.js} +0 -0
  80. /package/dist/esm-node/core/{app-config.js → appConfig.js} +0 -0
  81. /package/dist/esm-node/{runtime-context.js → runtimeContext.js} +0 -0
  82. /package/dist/types/core/{app-config.d.ts → appConfig.d.ts} +0 -0
package/CHANGELOG.md CHANGED
@@ -1,5 +1,58 @@
1
1
  # @modern-js/runtime
2
2
 
3
+ ## 2.8.0
4
+
5
+ ### Patch Changes
6
+
7
+ - 3ef832741b: fix: fix types pathname for model field
8
+ fix: 修复 model 字段对应的 types 路径
9
+ - 9330022f4e: fix: add missing react-router type
10
+ fix: 添加丢失的 react-router 导出类型
11
+ - 40747e6fdd: fix: fix the order of runtime plugins
12
+ fix: 修复 runtime plugin 执行顺序
13
+ - 58a1fc64da: fix: pass basename to `matchRoutes`
14
+ fix: 修复 `matchRoutes` 未传入 basename 参数
15
+ - 4cfea8ce49: fix: remove esbuild from bff-core
16
+ fix: 从 bff-core 移除 esbuild
17
+ - 1f6ca2c7fb: fix: nested routes in ssg
18
+ fix: 修复嵌套路由在 SSG 中的问题
19
+ - 9c9ebba6f2: fix: fix duplicate re-exports of reduck
20
+ fix: 修复从 reduck 重复导出的 API
21
+ - Updated dependencies [1104a9f18b]
22
+ - Updated dependencies [70d82e1408]
23
+ - Updated dependencies [1f6ca2c7fb]
24
+ - @modern-js/utils@2.8.0
25
+ - @modern-js/types@2.8.0
26
+ - @modern-js/plugin@2.8.0
27
+
28
+ ## 2.7.0
29
+
30
+ ### Minor Changes
31
+
32
+ - dcad887024: feat: support deferred data for streaming ssr
33
+ feat: 流式渲染支持 deferred data
34
+
35
+ ### Patch Changes
36
+
37
+ - a4672f7c16: fix: lock @modern-js/utils/ssr by webpack alias
38
+ fix: 通过 webpack 别名将 @modern-js/utils/ssr 锁到同一版本
39
+ - 7fff9020e1: chore: make file naming consistent
40
+
41
+ chore: 统一文件命名为小驼峰格式
42
+
43
+ - 1eea234fdd: chore: make test files naming consistent
44
+
45
+ chore: 统一测试文件命名为小驼峰格式
46
+
47
+ - Updated dependencies [0f15fc597c]
48
+ - Updated dependencies [dcad887024]
49
+ - Updated dependencies [a4672f7c16]
50
+ - Updated dependencies [7fff9020e1]
51
+ - Updated dependencies [84bfb439b8]
52
+ - @modern-js/utils@2.7.0
53
+ - @modern-js/types@2.7.0
54
+ - @modern-js/plugin@2.7.0
55
+
3
56
  ## 2.6.0
4
57
 
5
58
  ### Patch Changes
package/README.md CHANGED
@@ -19,8 +19,8 @@ Please follow [Quick Start](https://modernjs.dev/en/guides/get-started/quick-sta
19
19
 
20
20
  ## Contributing
21
21
 
22
- Please read the [Contributing Guide](https://github.com/modern-js-dev/modern.js/blob/main/CONTRIBUTING.md).
22
+ Please read the [Contributing Guide](https://github.com/web-infra-dev/modern.js/blob/main/CONTRIBUTING.md).
23
23
 
24
24
  ## License
25
25
 
26
- Modern.js is [MIT licensed](https://github.com/modern-js-dev/modern.js/blob/main/LICENSE).
26
+ Modern.js is [MIT licensed](https://github.com/web-infra-dev/modern.js/blob/main/LICENSE).
@@ -39,13 +39,14 @@ var import_cli4 = __toESM(require("../document/cli"));
39
39
  var cli_default = () => ({
40
40
  name: "@modern-js/runtime",
41
41
  post: [
42
- "@modern-js/plugin-router",
43
42
  "@modern-js/plugin-ssr",
44
- "@modern-js/plugin-document",
45
43
  "@modern-js/plugin-state",
44
+ "@modern-js/plugin-router",
45
+ "@modern-js/plugin-document",
46
46
  "@modern-js/plugin-design-token"
47
47
  ],
48
- usePlugins: [(0, import_cli.default)(), (0, import_cli2.default)(), (0, import_cli3.default)(), (0, import_cli4.default)()],
48
+ // the order of runtime plugins is affected by runtime hooks, mainly `init` and `hoc` hooks
49
+ usePlugins: [(0, import_cli2.default)(), (0, import_cli.default)(), (0, import_cli3.default)(), (0, import_cli4.default)()],
49
50
  setup: (api) => {
50
51
  return {
51
52
  config() {
@@ -17,11 +17,17 @@ var __copyProps = (to, from, except, desc) => {
17
17
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
18
18
  var common_exports = {};
19
19
  __export(common_exports, {
20
+ ESCAPED_SHELL_STREAM_END_MARK: () => ESCAPED_SHELL_STREAM_END_MARK,
21
+ JSX_SHELL_STREAM_END_MARK: () => JSX_SHELL_STREAM_END_MARK,
20
22
  isBrowser: () => isBrowser
21
23
  });
22
24
  module.exports = __toCommonJS(common_exports);
23
25
  const isBrowser = () => typeof window !== "undefined" && window.name !== "nodejs";
26
+ const JSX_SHELL_STREAM_END_MARK = "<!--<?- SHELL_STREAM_END ?>-->";
27
+ const ESCAPED_SHELL_STREAM_END_MARK = "&lt;!--&lt;?- SHELL_STREAM_END ?&gt;--&gt;";
24
28
  // Annotate the CommonJS export names for ESM import in node:
25
29
  0 && (module.exports = {
30
+ ESCAPED_SHELL_STREAM_END_MARK,
31
+ JSX_SHELL_STREAM_END_MARK,
26
32
  isBrowser
27
33
  });
@@ -15,12 +15,12 @@ var __copyProps = (to, from, except, desc) => {
15
15
  return to;
16
16
  };
17
17
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
18
- var app_config_exports = {};
19
- __export(app_config_exports, {
18
+ var appConfig_exports = {};
19
+ __export(appConfig_exports, {
20
20
  defineConfig: () => defineConfig,
21
21
  getConfig: () => getConfig
22
22
  });
23
- module.exports = __toCommonJS(app_config_exports);
23
+ module.exports = __toCommonJS(appConfig_exports);
24
24
  const APP_CONFIG_SYMBOL = "config";
25
25
  const getConfig = (Component) => (
26
26
  // eslint-disable-next-line @typescript-eslint/ban-ts-comment
@@ -36,7 +36,7 @@ var import_jsx_runtime = require("react/jsx-runtime");
36
36
  var import_react = __toESM(require("react"));
37
37
  var import_hoist_non_react_statics = __toESM(require("hoist-non-react-statics"));
38
38
  var import_constants = require("@modern-js/utils/constants");
39
- var import_runtime_context = require("../runtime-context");
39
+ var import_runtimeContext = require("../runtimeContext");
40
40
  var import_plugin = require("./plugin");
41
41
  var import_loaderManager = require("./loader/loaderManager");
42
42
  const IS_REACT18 = process.env.IS_REACT18 === "true";
@@ -61,7 +61,7 @@ const createApp = ({ plugins }) => {
61
61
  { ...props },
62
62
  props.children
63
63
  );
64
- const context = (0, import_react.useContext)(import_runtime_context.RuntimeReactContext);
64
+ const context = (0, import_react.useContext)(import_runtimeContext.RuntimeReactContext);
65
65
  return runner.provide(
66
66
  { element, props: { ...props }, context },
67
67
  {
@@ -90,7 +90,7 @@ const createApp = ({ plugins }) => {
90
90
  }
91
91
  );
92
92
  }
93
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_runtime_context.RuntimeReactContext.Provider, { value: contextValue, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(App2, { ...props }) });
93
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_runtimeContext.RuntimeReactContext.Provider, { value: contextValue, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(App2, { ...props }) });
94
94
  };
95
95
  return (0, import_hoist_non_react_statics.default)(WrapComponent, App2);
96
96
  }
@@ -250,7 +250,7 @@ const bootstrap = async (BootApp, id, root, ReactDOM) => {
250
250
  }
251
251
  };
252
252
  const useRuntimeContext = () => {
253
- const context = (0, import_react.useContext)(import_runtime_context.RuntimeReactContext);
253
+ const context = (0, import_react.useContext)(import_runtimeContext.RuntimeReactContext);
254
254
  const memoizedContext = (0, import_react.useMemo)(
255
255
  () => context.runner.pickContext(
256
256
  { context, pickedContext: {} },
@@ -18,20 +18,20 @@ var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "defau
18
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
19
  var core_exports = {};
20
20
  __export(core_exports, {
21
- RuntimeReactContext: () => import_runtime_context.RuntimeReactContext,
22
- ServerRouterContext: () => import_runtime_context.ServerRouterContext,
21
+ RuntimeReactContext: () => import_runtimeContext.RuntimeReactContext,
22
+ ServerRouterContext: () => import_runtimeContext.ServerRouterContext,
23
23
  createPlugin: () => import_plugin.createPlugin,
24
24
  createRuntime: () => import_plugin.createRuntime,
25
- defineConfig: () => import_app_config.defineConfig,
26
- getConfig: () => import_app_config.getConfig,
25
+ defineConfig: () => import_appConfig.defineConfig,
26
+ getConfig: () => import_appConfig.getConfig,
27
27
  registerInit: () => import_plugin.registerInit,
28
28
  runtime: () => import_plugin.runtime
29
29
  });
30
30
  module.exports = __toCommonJS(core_exports);
31
31
  var import_plugin = require("./plugin");
32
- var import_app_config = require("./app-config");
32
+ var import_appConfig = require("./appConfig");
33
33
  __reExport(core_exports, require("./compatible"), module.exports);
34
- var import_runtime_context = require("../runtime-context");
34
+ var import_runtimeContext = require("../runtimeContext");
35
35
  __reExport(core_exports, require("./loader"), module.exports);
36
36
  __reExport(core_exports, require("@modern-js/plugin"), module.exports);
37
37
  // Annotate the CommonJS export names for ESM import in node:
@@ -32,10 +32,10 @@ __export(useLoader_exports, {
32
32
  module.exports = __toCommonJS(useLoader_exports);
33
33
  var import_react = require("react");
34
34
  var import_invariant = __toESM(require("invariant"));
35
- var import_runtime_context = require("../../runtime-context");
35
+ var import_runtimeContext = require("../../runtimeContext");
36
36
  var import_loaderManager = require("./loaderManager");
37
37
  const useLoader = (loaderFn, options = { params: void 0 }) => {
38
- const context = (0, import_react.useContext)(import_runtime_context.RuntimeReactContext);
38
+ const context = (0, import_react.useContext)(import_runtimeContext.RuntimeReactContext);
39
39
  const isSSRRender = Boolean(context.ssr);
40
40
  const { loaderManager } = context;
41
41
  const loaderRef = (0, import_react.useRef)();
@@ -0,0 +1,15 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __copyProps = (to, from, except, desc) => {
6
+ if (from && typeof from === "object" || typeof from === "function") {
7
+ for (let key of __getOwnPropNames(from))
8
+ if (!__hasOwnProp.call(to, key) && key !== except)
9
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
10
+ }
11
+ return to;
12
+ };
13
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
14
+ var types_exports = {};
15
+ module.exports = __toCommonJS(types_exports);
@@ -0,0 +1,165 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __export = (target, all) => {
6
+ for (var name in all)
7
+ __defProp(target, name, { get: all[name], enumerable: true });
8
+ };
9
+ var __copyProps = (to, from, except, desc) => {
10
+ if (from && typeof from === "object" || typeof from === "function") {
11
+ for (let key of __getOwnPropNames(from))
12
+ if (!__hasOwnProp.call(to, key) && key !== except)
13
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
14
+ }
15
+ return to;
16
+ };
17
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
18
+ var DeferredDataScripts_exports = {};
19
+ __export(DeferredDataScripts_exports, {
20
+ default: () => DeferredDataScripts_default
21
+ });
22
+ module.exports = __toCommonJS(DeferredDataScripts_exports);
23
+ var import_jsx_runtime = require("react/jsx-runtime");
24
+ var import_react = require("react");
25
+ var import_react_router_dom = require("react-router-dom");
26
+ var import_serialize = require("@modern-js/utils/serialize");
27
+ var import_common = require("../../common");
28
+ var import_utils = require("./utils");
29
+ const setupFnStr = `function s(r,e){_ROUTER_DATA.r=_ROUTER_DATA.r||{},_ROUTER_DATA.r[r]=_ROUTER_DATA.r[r]||{};return new Promise((function(A,R){_ROUTER_DATA.r[r][e]={resolve:A,reject:R}}))};`;
30
+ const resolveFnStr = `function r(e,r,o,A){A?_ROUTER_DATA.r[e][r].reject(A):_ROUTER_DATA.r[e][r].resolve(o)};`;
31
+ const preResolvedFnStr = `function p(e,r){return void 0!==r?Promise.reject(new Error(r.message)):Promise.resovle(e)};`;
32
+ const DeferredDataScripts = () => {
33
+ const context = (0, import_react.useContext)(import_react_router_dom.UNSAFE_DataRouterContext);
34
+ const { staticContext } = context || {};
35
+ const hydratedRef = (0, import_react.useRef)(false);
36
+ (0, import_react.useEffect)(() => {
37
+ hydratedRef.current = true;
38
+ }, []);
39
+ const deferredScripts = (0, import_react.useMemo)(() => {
40
+ if (!staticContext) {
41
+ return null;
42
+ }
43
+ const activeDeferreds = staticContext.activeDeferreds || [];
44
+ const _ROUTER_DATA = {
45
+ loaderData: staticContext.loaderData,
46
+ errors: (0, import_utils.serializeErrors)(staticContext.errors)
47
+ };
48
+ let initialScripts = [
49
+ `_ROUTER_DATA = ${(0, import_serialize.serializeJson)(_ROUTER_DATA)};`,
50
+ `_ROUTER_DATA.s = ${setupFnStr}`,
51
+ `_ROUTER_DATA.r = ${resolveFnStr}`,
52
+ `_ROUTER_DATA.p = ${preResolvedFnStr}`
53
+ ].join("\n");
54
+ const deferredDataScripts = [];
55
+ initialScripts += Object.entries(activeDeferreds).map(([routeId, deferredData]) => {
56
+ const pendingKeys = new Set(deferredData.pendingKeys);
57
+ const { deferredKeys } = deferredData;
58
+ const deferredKeyPromiseStr = deferredKeys.map((key) => {
59
+ if (pendingKeys.has(key)) {
60
+ deferredDataScripts.push(
61
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
62
+ DeferredDataScript,
63
+ {
64
+ data: deferredData.data[key],
65
+ dataKey: key,
66
+ routeId
67
+ },
68
+ `${routeId} | ${key}`
69
+ )
70
+ );
71
+ return `${JSON.stringify(key)}: _ROUTER_DATA.s(${JSON.stringify(
72
+ routeId
73
+ )},${JSON.stringify(key)}) `;
74
+ } else {
75
+ const trackedPromise = deferredData.data[key];
76
+ if (typeof trackedPromise._error !== "undefined") {
77
+ const error = {
78
+ message: trackedPromise._error.message,
79
+ stack: process.env.NODE_ENV !== "production" ? trackedPromise._error.stack : void 0
80
+ };
81
+ return `${JSON.stringify(
82
+ key
83
+ )}: _ROUTER_DATA.p(${void 0}, ${(0, import_serialize.serializeJson)(error)})`;
84
+ } else {
85
+ if (typeof trackedPromise._data === "undefined") {
86
+ throw new Error(
87
+ `The deferred data for ${key} was not resolved, did you forget to return data from a deferred promise`
88
+ );
89
+ }
90
+ return `${JSON.stringify(key)}: _ROUTER_DATA.p(${(0, import_serialize.serializeJson)(
91
+ trackedPromise._data
92
+ )})`;
93
+ }
94
+ }
95
+ }).join(",\n");
96
+ return `Object.assign(_ROUTER_DATA.loaderData[${JSON.stringify(
97
+ routeId
98
+ )}], {${deferredKeyPromiseStr}});`;
99
+ }).join("\n");
100
+ return [initialScripts, deferredDataScripts];
101
+ }, []);
102
+ if (!deferredScripts) {
103
+ return null;
104
+ }
105
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
106
+ !hydratedRef.current && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
107
+ "script",
108
+ {
109
+ async: true,
110
+ suppressHydrationWarning: true,
111
+ dangerouslySetInnerHTML: { __html: deferredScripts[0] }
112
+ }
113
+ ),
114
+ !hydratedRef.current && deferredScripts[1],
115
+ import_common.JSX_SHELL_STREAM_END_MARK
116
+ ] });
117
+ };
118
+ const DeferredDataScript = ({
119
+ data,
120
+ routeId,
121
+ dataKey
122
+ }) => {
123
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react.Suspense, { children: typeof document === "undefined" && data && dataKey && routeId ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
124
+ import_react_router_dom.Await,
125
+ {
126
+ resolve: data,
127
+ errorElement: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ErrorDeferredDataScript, { routeId, dataKey }),
128
+ children: (data2) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
129
+ "script",
130
+ {
131
+ async: true,
132
+ suppressHydrationWarning: true,
133
+ dangerouslySetInnerHTML: {
134
+ __html: `_ROUTER_DATA.r(${JSON.stringify(
135
+ routeId
136
+ )}, ${JSON.stringify(dataKey)}, ${(0, import_serialize.serializeJson)(data2)});`
137
+ }
138
+ }
139
+ )
140
+ }
141
+ ) : null });
142
+ };
143
+ const ErrorDeferredDataScript = ({
144
+ routeId,
145
+ dataKey
146
+ }) => {
147
+ const error = (0, import_react_router_dom.useAsyncError)();
148
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
149
+ "script",
150
+ {
151
+ suppressHydrationWarning: true,
152
+ dangerouslySetInnerHTML: {
153
+ __html: `_ROUTER_DATA.r(${JSON.stringify(routeId)}, ${JSON.stringify(
154
+ dataKey
155
+ )}, ${void 0}, ${(0, import_serialize.serializeJson)({
156
+ message: error.message,
157
+ stack: error.stack
158
+ })});`
159
+ }
160
+ }
161
+ );
162
+ };
163
+ var DeferredDataScripts_default = DeferredDataScripts;
164
+ // Annotate the CommonJS export names for ESM import in node:
165
+ 0 && (module.exports = {});
@@ -18,16 +18,129 @@ var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "defau
18
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
19
  var runtime_exports = {};
20
20
  __export(runtime_exports, {
21
+ Await: () => import_react_router_dom.Await,
22
+ BrowserRouter: () => import_react_router_dom.BrowserRouter,
23
+ Form: () => import_react_router_dom.Form,
24
+ HashRouter: () => import_react_router_dom.HashRouter,
25
+ Link: () => import_react_router_dom.Link,
26
+ MemoryRouter: () => import_react_router_dom.MemoryRouter,
27
+ NavLink: () => import_react_router_dom.NavLink,
28
+ Navigate: () => import_react_router_dom.Navigate,
29
+ Outlet: () => import_react_router_dom.Outlet,
30
+ Route: () => import_react_router_dom.Route,
31
+ Router: () => import_react_router_dom.Router,
32
+ RouterProvider: () => import_react_router_dom.RouterProvider,
33
+ Routes: () => import_react_router_dom.Routes,
34
+ ScrollRestoration: () => import_react_router_dom.ScrollRestoration,
35
+ createBrowserRouter: () => import_react_router_dom.createBrowserRouter,
36
+ createHashRouter: () => import_react_router_dom.createHashRouter,
37
+ createMemoryRouter: () => import_react_router_dom.createMemoryRouter,
38
+ createRoutesFromChildren: () => import_react_router_dom.createRoutesFromChildren,
39
+ createRoutesFromElements: () => import_react_router_dom.createRoutesFromElements,
40
+ createSearchParams: () => import_react_router_dom.createSearchParams,
21
41
  default: () => runtime_default,
22
- modifyRoutes: () => import_plugin2.modifyRoutes
42
+ defer: () => import_remix_router.defer,
43
+ generatePath: () => import_react_router_dom.generatePath,
44
+ isRouteErrorResponse: () => import_react_router_dom.isRouteErrorResponse,
45
+ json: () => import_remix_router.json,
46
+ matchPath: () => import_react_router_dom.matchPath,
47
+ matchRoutes: () => import_react_router_dom.matchRoutes,
48
+ modifyRoutes: () => import_plugin2.modifyRoutes,
49
+ redirect: () => import_remix_router.redirect,
50
+ renderMatches: () => import_react_router_dom.renderMatches,
51
+ resolvePath: () => import_react_router_dom.resolvePath,
52
+ useActionData: () => import_react_router_dom.useActionData,
53
+ useAsyncError: () => import_react_router_dom.useAsyncError,
54
+ useAsyncValue: () => import_react_router_dom.useAsyncValue,
55
+ useBeforeUnload: () => import_react_router_dom.useBeforeUnload,
56
+ useFetcher: () => import_react_router_dom.useFetcher,
57
+ useFetchers: () => import_react_router_dom.useFetchers,
58
+ useFormAction: () => import_react_router_dom.useFormAction,
59
+ useHref: () => import_react_router_dom.useHref,
60
+ useInRouterContext: () => import_react_router_dom.useInRouterContext,
61
+ useLinkClickHandler: () => import_react_router_dom.useLinkClickHandler,
62
+ useLoaderData: () => import_react_router_dom.useLoaderData,
63
+ useLocation: () => import_react_router_dom.useLocation,
64
+ useMatch: () => import_react_router_dom.useMatch,
65
+ useMatches: () => import_react_router_dom.useMatches,
66
+ useNavigate: () => import_react_router_dom.useNavigate,
67
+ useNavigation: () => import_react_router_dom.useNavigation,
68
+ useNavigationType: () => import_react_router_dom.useNavigationType,
69
+ useOutlet: () => import_react_router_dom.useOutlet,
70
+ useOutletContext: () => import_react_router_dom.useOutletContext,
71
+ useParams: () => import_react_router_dom.useParams,
72
+ useResolvedPath: () => import_react_router_dom.useResolvedPath,
73
+ useRevalidator: () => import_react_router_dom.useRevalidator,
74
+ useRouteError: () => import_react_router_dom.useRouteError,
75
+ useRouteLoaderData: () => import_react_router_dom.useRouteLoaderData,
76
+ useRoutes: () => import_react_router_dom.useRoutes,
77
+ useSearchParams: () => import_react_router_dom.useSearchParams,
78
+ useSubmit: () => import_react_router_dom.useSubmit
23
79
  });
24
80
  module.exports = __toCommonJS(runtime_exports);
25
81
  var import_plugin = require("./plugin");
26
82
  var import_plugin2 = require("./plugin");
27
- __reExport(runtime_exports, require("react-router-dom"), module.exports);
28
83
  __reExport(runtime_exports, require("./withRouter"), module.exports);
84
+ var import_react_router_dom = require("react-router-dom");
85
+ var import_remix_router = require("@modern-js/utils/remix-router");
29
86
  var runtime_default = import_plugin.routerPlugin;
30
87
  // Annotate the CommonJS export names for ESM import in node:
31
88
  0 && (module.exports = {
32
- modifyRoutes
89
+ Await,
90
+ BrowserRouter,
91
+ Form,
92
+ HashRouter,
93
+ Link,
94
+ MemoryRouter,
95
+ NavLink,
96
+ Navigate,
97
+ Outlet,
98
+ Route,
99
+ Router,
100
+ RouterProvider,
101
+ Routes,
102
+ ScrollRestoration,
103
+ createBrowserRouter,
104
+ createHashRouter,
105
+ createMemoryRouter,
106
+ createRoutesFromChildren,
107
+ createRoutesFromElements,
108
+ createSearchParams,
109
+ defer,
110
+ generatePath,
111
+ isRouteErrorResponse,
112
+ json,
113
+ matchPath,
114
+ matchRoutes,
115
+ modifyRoutes,
116
+ redirect,
117
+ renderMatches,
118
+ resolvePath,
119
+ useActionData,
120
+ useAsyncError,
121
+ useAsyncValue,
122
+ useBeforeUnload,
123
+ useFetcher,
124
+ useFetchers,
125
+ useFormAction,
126
+ useHref,
127
+ useInRouterContext,
128
+ useLinkClickHandler,
129
+ useLoaderData,
130
+ useLocation,
131
+ useMatch,
132
+ useMatches,
133
+ useNavigate,
134
+ useNavigation,
135
+ useNavigationType,
136
+ useOutlet,
137
+ useOutletContext,
138
+ useParams,
139
+ useResolvedPath,
140
+ useRevalidator,
141
+ useRouteError,
142
+ useRouteLoaderData,
143
+ useRoutes,
144
+ useSearchParams,
145
+ useSubmit
33
146
  });
@@ -83,7 +83,20 @@ const routerPlugin = ({
83
83
  const routes = createRoutes ? createRoutes() : (0, import_react_router_dom.createRoutesFromElements)((0, import_utils.renderRoutes)(finalRouteConfig));
84
84
  const baseUrl = ((_a = window._SERVER_DATA) == null ? void 0 : _a.router.baseUrl) || select(location.pathname);
85
85
  const _basename = baseUrl === "/" ? (0, import_utils.urlJoin)(baseUrl, basename) : baseUrl;
86
- const router = supportHtml5History ? (0, import_react_router_dom.createBrowserRouter)(routes, { basename: _basename }) : (0, import_react_router_dom.createHashRouter)(routes, { basename: _basename });
86
+ let hydrationData = window._ROUTER_DATA;
87
+ if (hydrationData == null ? void 0 : hydrationData.errors) {
88
+ hydrationData = {
89
+ ...hydrationData,
90
+ errors: (0, import_utils.deserializeErrors)(hydrationData.errors)
91
+ };
92
+ }
93
+ const router = supportHtml5History ? (0, import_react_router_dom.createBrowserRouter)(routes, {
94
+ basename: _basename,
95
+ hydrationData
96
+ }) : (0, import_react_router_dom.createHashRouter)(routes, {
97
+ basename: _basename,
98
+ hydrationData
99
+ });
87
100
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(App, { ...props, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react_router_dom.RouterProvider, { router }) });
88
101
  };
89
102
  };
@@ -34,8 +34,7 @@ __export(plugin_node_exports, {
34
34
  module.exports = __toCommonJS(plugin_node_exports);
35
35
  var import_jsx_runtime = require("react/jsx-runtime");
36
36
  var import_react = require("react");
37
- var import_serialize_javascript = __toESM(require("serialize-javascript"));
38
- var import_router = require("@remix-run/router");
37
+ var import_remix_router = require("@modern-js/utils/remix-router");
39
38
  var import_server = require("react-router-dom/server");
40
39
  var import_hoist_non_react_statics = __toESM(require("hoist-non-react-statics"));
41
40
  var import_react_router_dom = require("react-router-dom");
@@ -69,26 +68,6 @@ function createFetchHeaders(requestHeaders) {
69
68
  }
70
69
  return headers;
71
70
  }
72
- function serializeErrors(errors) {
73
- if (!errors) {
74
- return null;
75
- }
76
- const entries = Object.entries(errors);
77
- const serialized = {};
78
- for (const [key, val] of entries) {
79
- if ((0, import_router.isRouteErrorResponse)(val)) {
80
- serialized[key] = { ...val, __type: "RouteErrorResponse" };
81
- } else if (val instanceof Error) {
82
- serialized[key] = {
83
- message: val.message,
84
- __type: "Error"
85
- };
86
- } else {
87
- serialized[key] = val;
88
- }
89
- }
90
- return serialized;
91
- }
92
71
  const routerPlugin = ({
93
72
  basename = "",
94
73
  routesConfig,
@@ -102,11 +81,11 @@ const routerPlugin = ({
102
81
  if (!routesConfig && !createRoutes) {
103
82
  return next({ context });
104
83
  }
105
- const { request } = context.ssrContext;
84
+ const { request, mode: ssrMode } = context.ssrContext;
106
85
  const baseUrl = request.baseUrl;
107
86
  const _basename = baseUrl === "/" ? (0, import_utils.urlJoin)(baseUrl, basename) : baseUrl;
108
- const routes = createRoutes ? createRoutes() : (0, import_react_router_dom.createRoutesFromElements)((0, import_utils.renderRoutes)(routesConfig));
109
- const { query } = (0, import_router.createStaticHandler)(routes, {
87
+ const routes = createRoutes ? createRoutes() : (0, import_react_router_dom.createRoutesFromElements)((0, import_utils.renderRoutes)(routesConfig, ssrMode));
88
+ const { query } = (0, import_remix_router.createStaticHandler)(routes, {
110
89
  basename: _basename
111
90
  });
112
91
  const remixRequest = createFetchRequest(request);
@@ -128,33 +107,14 @@ const routerPlugin = ({
128
107
  const getRouteApp = () => {
129
108
  return (props) => {
130
109
  const { router, routerContext } = (0, import_react.useContext)(import_core.RuntimeReactContext);
131
- const data = {
132
- loaderData: routerContext.loaderData,
133
- actionData: routerContext.actionData,
134
- errors: serializeErrors(routerContext.errors)
135
- };
136
- const hydrateScript = `window.__staticRouterHydrationData = ${(0, import_serialize_javascript.default)(
137
- data,
138
- { isJSON: true }
139
- )};`;
140
- return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(App, { ...props, children: [
141
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
142
- import_server.StaticRouterProvider,
143
- {
144
- router,
145
- context: routerContext,
146
- hydrate: false
147
- }
148
- ),
149
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
150
- "script",
151
- {
152
- suppressHydrationWarning: true,
153
- id: "the-nonce",
154
- dangerouslySetInnerHTML: { __html: hydrateScript }
155
- }
156
- )
157
- ] });
110
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(App, { ...props, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
111
+ import_server.StaticRouterProvider,
112
+ {
113
+ router,
114
+ context: routerContext,
115
+ hydrate: false
116
+ }
117
+ ) });
158
118
  };
159
119
  };
160
120
  const RouteApp = getRouteApp();