@modern-js/runtime 2.6.0 → 2.7.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.
- package/CHANGELOG.md +28 -0
- package/dist/cjs/common.js +6 -0
- package/dist/cjs/core/{app-config.js → appConfig.js} +3 -3
- package/dist/cjs/core/compatible.js +4 -4
- package/dist/cjs/core/index.js +6 -6
- package/dist/cjs/core/loader/useLoader.js +2 -2
- package/dist/cjs/core/types.js +15 -0
- package/dist/cjs/router/runtime/DeferredDataScripts.js +165 -0
- package/dist/cjs/router/runtime/index.js +116 -3
- package/dist/cjs/router/runtime/plugin.js +14 -1
- package/dist/cjs/router/runtime/plugin.node.js +12 -52
- package/dist/cjs/router/runtime/utils.js +68 -69
- package/dist/cjs/{runtime-context.js → runtimeContext.js} +3 -3
- package/dist/cjs/ssr/cli/index.js +2 -0
- package/dist/cjs/ssr/index.node.js +1 -0
- package/dist/cjs/ssr/serverRender/renderToStream/buildTemplate.after.js +2 -14
- package/dist/cjs/ssr/serverRender/renderToStream/renderToPipe.js +22 -7
- package/dist/cjs/ssr/serverRender/renderToStream/template.js +2 -1
- package/dist/cjs/ssr/serverRender/renderToString/entry.js +19 -8
- package/dist/esm/common.js +3 -1
- package/dist/esm/core/compatible.js +1 -1
- package/dist/esm/core/index.js +2 -2
- package/dist/esm/core/loader/useLoader.js +1 -1
- package/dist/esm/core/types.js +1 -0
- package/dist/esm/router/runtime/DeferredDataScripts.js +166 -0
- package/dist/esm/router/runtime/index.js +3 -2
- package/dist/esm/router/runtime/plugin.js +11 -3
- package/dist/esm/router/runtime/plugin.node.js +11 -68
- package/dist/esm/router/runtime/utils.js +138 -81
- package/dist/esm/ssr/cli/index.js +2 -0
- package/dist/esm/ssr/index.node.js +1 -0
- package/dist/esm/ssr/serverRender/renderToStream/buildTemplate.after.js +2 -4
- package/dist/esm/ssr/serverRender/renderToStream/renderToPipe.js +19 -8
- package/dist/esm/ssr/serverRender/renderToStream/template.js +2 -1
- package/dist/esm/ssr/serverRender/renderToString/entry.js +15 -7
- package/dist/esm-node/common.js +4 -0
- package/dist/esm-node/core/compatible.js +1 -1
- package/dist/esm-node/core/index.js +2 -2
- package/dist/esm-node/core/loader/useLoader.js +1 -1
- package/dist/esm-node/core/types.js +0 -0
- package/dist/esm-node/router/runtime/DeferredDataScripts.js +148 -0
- package/dist/esm-node/router/runtime/index.js +113 -2
- package/dist/esm-node/router/runtime/plugin.js +15 -2
- package/dist/esm-node/router/runtime/plugin.node.js +12 -55
- package/dist/esm-node/router/runtime/utils.js +59 -69
- package/dist/esm-node/ssr/cli/index.js +2 -0
- package/dist/esm-node/ssr/index.node.js +1 -0
- package/dist/esm-node/ssr/serverRender/renderToStream/buildTemplate.after.js +2 -4
- package/dist/esm-node/ssr/serverRender/renderToStream/renderToPipe.js +22 -7
- package/dist/esm-node/ssr/serverRender/renderToStream/template.js +2 -1
- package/dist/esm-node/ssr/serverRender/renderToString/entry.js +19 -8
- package/dist/types/common.d.ts +3 -1
- package/dist/types/core/compatible.d.ts +1 -1
- package/dist/types/core/index.d.ts +4 -3
- package/dist/types/core/loader/index.d.ts +1 -2
- package/dist/types/core/loader/useLoader.d.ts +1 -15
- package/dist/types/core/plugin.d.ts +15 -15
- package/dist/types/core/types.d.ts +22 -0
- package/dist/types/index.d.ts +1 -1
- package/dist/types/router/runtime/DeferredDataScripts.d.ts +8 -0
- package/dist/types/router/runtime/index.d.ts +4 -2
- package/dist/types/router/runtime/utils.d.ts +23 -4
- package/dist/types/{runtime-context.d.ts → runtimeContext.d.ts} +2 -0
- package/dist/types/ssr/serverRender/renderToStream/buildTemplate.after.d.ts +2 -0
- package/package.json +12 -15
- /package/dist/esm/core/{app-config.js → appConfig.js} +0 -0
- /package/dist/esm/{runtime-context.js → runtimeContext.js} +0 -0
- /package/dist/esm-node/core/{app-config.js → appConfig.js} +0 -0
- /package/dist/esm-node/{runtime-context.js → runtimeContext.js} +0 -0
- /package/dist/types/core/{app-config.d.ts → appConfig.d.ts} +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,33 @@
|
|
|
1
1
|
# @modern-js/runtime
|
|
2
2
|
|
|
3
|
+
## 2.7.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- dcad887024: feat: support deferred data for streaming ssr
|
|
8
|
+
feat: 流式渲染支持 deferred data
|
|
9
|
+
|
|
10
|
+
### Patch Changes
|
|
11
|
+
|
|
12
|
+
- a4672f7c16: fix: lock @modern-js/utils/ssr by webpack alias
|
|
13
|
+
fix: 通过 webpack 别名将 @modern-js/utils/ssr 锁到同一版本
|
|
14
|
+
- 7fff9020e1: chore: make file naming consistent
|
|
15
|
+
|
|
16
|
+
chore: 统一文件命名为小驼峰格式
|
|
17
|
+
|
|
18
|
+
- 1eea234fdd: chore: make test files naming consistent
|
|
19
|
+
|
|
20
|
+
chore: 统一测试文件命名为小驼峰格式
|
|
21
|
+
|
|
22
|
+
- Updated dependencies [0f15fc597c]
|
|
23
|
+
- Updated dependencies [dcad887024]
|
|
24
|
+
- Updated dependencies [a4672f7c16]
|
|
25
|
+
- Updated dependencies [7fff9020e1]
|
|
26
|
+
- Updated dependencies [84bfb439b8]
|
|
27
|
+
- @modern-js/utils@2.7.0
|
|
28
|
+
- @modern-js/types@2.7.0
|
|
29
|
+
- @modern-js/plugin@2.7.0
|
|
30
|
+
|
|
3
31
|
## 2.6.0
|
|
4
32
|
|
|
5
33
|
### Patch Changes
|
package/dist/cjs/common.js
CHANGED
|
@@ -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 = "<!--<?- SHELL_STREAM_END ?>-->";
|
|
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
|
|
19
|
-
__export(
|
|
18
|
+
var appConfig_exports = {};
|
|
19
|
+
__export(appConfig_exports, {
|
|
20
20
|
defineConfig: () => defineConfig,
|
|
21
21
|
getConfig: () => getConfig
|
|
22
22
|
});
|
|
23
|
-
module.exports = __toCommonJS(
|
|
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
|
|
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)(
|
|
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)(
|
|
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)(
|
|
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: {} },
|
package/dist/cjs/core/index.js
CHANGED
|
@@ -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: () =>
|
|
22
|
-
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: () =>
|
|
26
|
-
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
|
|
32
|
+
var import_appConfig = require("./appConfig");
|
|
33
33
|
__reExport(core_exports, require("./compatible"), module.exports);
|
|
34
|
-
var
|
|
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
|
|
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)(
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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,
|
|
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
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
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();
|