@modern-js/runtime 2.5.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 +55 -0
- package/dist/cjs/cli/index.js +9 -0
- package/dist/cjs/common.js +6 -0
- package/dist/cjs/core/{app-config.js → appConfig.js} +8 -4
- package/dist/cjs/core/compatible.js +11 -10
- package/dist/cjs/core/index.js +6 -6
- package/dist/cjs/core/loader/index.js +4 -0
- package/dist/cjs/core/loader/loaderManager.js +6 -0
- package/dist/cjs/core/loader/useLoader.js +6 -2
- package/dist/cjs/core/types.js +15 -0
- package/dist/cjs/document/Body.js +6 -8
- package/dist/cjs/document/DocumentContext.js +4 -0
- package/dist/cjs/document/DocumentStructureContext.js +4 -0
- package/dist/cjs/document/Head.js +7 -11
- package/dist/cjs/document/Html.js +24 -22
- package/dist/cjs/document/Links.js +1 -3
- package/dist/cjs/document/Root.js +8 -14
- package/dist/cjs/document/Script.js +5 -7
- package/dist/cjs/document/Scripts.js +1 -3
- package/dist/cjs/document/cli/index.js +8 -2
- package/dist/cjs/exports/head.js +4 -0
- package/dist/cjs/exports/loadable.js +4 -0
- package/dist/cjs/exports/styled.js +4 -0
- package/dist/cjs/router/cli/index.js +3 -7
- package/dist/cjs/router/index.js +4 -0
- package/dist/cjs/router/runtime/DefaultNotFound.js +13 -10
- 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 +18 -6
- package/dist/cjs/router/runtime/plugin.node.js +16 -49
- package/dist/cjs/router/runtime/utils.js +79 -101
- package/dist/cjs/router/runtime/withRouter.js +9 -6
- package/dist/cjs/{runtime-context.js → runtimeContext.js} +3 -3
- package/dist/cjs/ssr/cli/babel-plugin-ssr-loader-id.js +4 -0
- package/dist/cjs/ssr/cli/index.js +6 -0
- package/dist/cjs/ssr/index.js +10 -24
- package/dist/cjs/ssr/index.node.js +5 -0
- package/dist/cjs/ssr/prefetch.js +3 -6
- package/dist/cjs/ssr/react/nossr/index.js +4 -0
- package/dist/cjs/ssr/react/prerender/index.js +4 -0
- package/dist/cjs/ssr/serverRender/renderToStream/buildTemplate.after.js +7 -13
- package/dist/cjs/ssr/serverRender/renderToStream/bulidTemplate.before.js +5 -0
- package/dist/cjs/ssr/serverRender/renderToStream/index.js +4 -0
- 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 +28 -11
- package/dist/cjs/ssr/serverRender/renderToString/index.js +4 -0
- package/dist/cjs/ssr/serverRender/renderToString/loadable.js +1 -1
- package/dist/cjs/ssr/serverRender/time.worker.js +1 -1
- package/dist/cjs/ssr/serverRender/utils.js +1 -1
- package/dist/cjs/ssr/utils.js +16 -4
- package/dist/cjs/state/index.js +4 -0
- package/dist/cjs/state/plugins.js +4 -0
- package/dist/cjs/state/runtime/index.js +4 -0
- package/dist/cjs/state/runtime/plugin.js +5 -7
- package/dist/esm/cli/index.js +5 -1
- package/dist/esm/common.js +3 -1
- package/dist/esm/core/{app-config.js → appConfig.js} +3 -1
- package/dist/esm/core/compatible.js +4 -2
- package/dist/esm/core/index.js +2 -2
- package/dist/esm/core/loader/loaderManager.js +3 -1
- package/dist/esm/core/loader/useLoader.js +1 -1
- package/dist/esm/core/types.js +1 -0
- package/dist/esm/document/cli/index.js +4 -2
- package/dist/esm/router/cli/index.js +1 -5
- 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/prefetch.js +1 -0
- package/dist/esm/ssr/serverRender/renderToStream/buildTemplate.after.js +37 -10
- package/dist/esm/ssr/serverRender/renderToStream/bulidTemplate.before.js +1 -0
- 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 +37 -13
- package/dist/esm/ssr/serverRender/time.worker.js +1 -1
- package/dist/esm/ssr/utils.js +6 -4
- package/dist/esm-node/cli/index.js +5 -0
- package/dist/esm-node/common.js +4 -0
- package/dist/esm-node/core/{app-config.js → appConfig.js} +5 -1
- package/dist/esm-node/core/compatible.js +5 -8
- package/dist/esm-node/core/index.js +2 -2
- package/dist/esm-node/core/loader/loaderManager.js +2 -0
- package/dist/esm-node/core/loader/useLoader.js +1 -1
- package/dist/esm-node/core/types.js +0 -0
- package/dist/esm-node/document/Body.js +6 -8
- package/dist/esm-node/document/Head.js +7 -11
- package/dist/esm-node/document/Html.js +24 -22
- package/dist/esm-node/document/Links.js +1 -3
- package/dist/esm-node/document/Root.js +8 -14
- package/dist/esm-node/document/Script.js +5 -7
- package/dist/esm-node/document/Scripts.js +1 -3
- package/dist/esm-node/document/cli/index.js +4 -2
- package/dist/esm-node/router/cli/index.js +2 -5
- package/dist/esm-node/router/runtime/DefaultNotFound.js +13 -10
- 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 -7
- package/dist/esm-node/router/runtime/plugin.node.js +12 -52
- package/dist/esm-node/router/runtime/utils.js +70 -101
- package/dist/esm-node/router/runtime/withRouter.js +9 -6
- package/dist/esm-node/ssr/cli/index.js +2 -0
- package/dist/esm-node/ssr/index.js +6 -24
- package/dist/esm-node/ssr/index.node.js +1 -0
- package/dist/esm-node/ssr/prefetch.js +3 -6
- package/dist/esm-node/ssr/serverRender/renderToStream/buildTemplate.after.js +7 -7
- package/dist/esm-node/ssr/serverRender/renderToStream/bulidTemplate.before.js +1 -0
- 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 +24 -11
- package/dist/esm-node/ssr/serverRender/renderToString/loadable.js +1 -1
- package/dist/esm-node/ssr/serverRender/time.worker.js +1 -1
- package/dist/esm-node/ssr/serverRender/utils.js +1 -1
- package/dist/esm-node/ssr/utils.js +6 -4
- package/dist/esm-node/state/runtime/plugin.js +1 -7
- 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/dist/types/ssr/serverRender/renderToString/type.d.ts +1 -0
- package/package.json +14 -15
- package/dist/cjs/ssr/prefetch.worker.js +0 -67
- package/dist/cjs/ssr/serverRender/renderToStream/index.worker.js +0 -64
- package/dist/cjs/ssr/serverRender/renderToString/index.worker.js +0 -58
- package/dist/esm/ssr/prefetch.worker.js +0 -191
- package/dist/esm/ssr/serverRender/renderToStream/index.worker.js +0 -32
- package/dist/esm/ssr/serverRender/renderToString/index.worker.js +0 -167
- package/dist/esm-node/ssr/prefetch.worker.js +0 -46
- package/dist/esm-node/ssr/serverRender/renderToStream/index.worker.js +0 -35
- package/dist/esm-node/ssr/serverRender/renderToString/index.worker.js +0 -29
- package/dist/types/ssr/prefetch.worker.d.ts +0 -13
- package/dist/types/ssr/serverRender/renderToStream/index.worker.d.ts +0 -6
- package/dist/types/ssr/serverRender/renderToString/index.worker.d.ts +0 -6
- /package/dist/esm/{runtime-context.js → runtimeContext.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/dist/esm/ssr/utils.js
CHANGED
|
@@ -72,6 +72,7 @@ function _unsupportedIterableToArray(o, minLen) {
|
|
|
72
72
|
if (n === "Map" || n === "Set") return Array.from(n);
|
|
73
73
|
if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
|
|
74
74
|
}
|
|
75
|
+
import cookieTool from "cookie";
|
|
75
76
|
var isReact18 = function() {
|
|
76
77
|
return process.env.IS_REACT18 === "true";
|
|
77
78
|
};
|
|
@@ -79,6 +80,7 @@ var formatServer = function(request) {
|
|
|
79
80
|
var _ref = request.headers || {}, _ref_cookie = _ref.cookie, cookie = _ref_cookie === void 0 ? "" : _ref_cookie, tmp = _ref["user-agent"], userAgent = tmp === void 0 ? "" : tmp, referer = _ref.referer;
|
|
80
81
|
return _objectSpread({
|
|
81
82
|
cookie: cookie,
|
|
83
|
+
cookieMap: cookieTool.parse(cookie || "") || {},
|
|
82
84
|
userAgent: userAgent,
|
|
83
85
|
referer: referer
|
|
84
86
|
}, request);
|
|
@@ -93,15 +95,15 @@ var getQuery = function() {
|
|
|
93
95
|
}, {});
|
|
94
96
|
};
|
|
95
97
|
var formatClient = function(request) {
|
|
96
|
-
var _request_headers
|
|
98
|
+
var _request_headers;
|
|
97
99
|
return {
|
|
98
100
|
params: request.params || {},
|
|
99
101
|
host: request.host || location.host,
|
|
100
102
|
pathname: request.pathname || location.pathname,
|
|
101
103
|
headers: request.headers || {},
|
|
102
|
-
cookieMap:
|
|
103
|
-
cookie:
|
|
104
|
-
userAgent: ((
|
|
104
|
+
cookieMap: cookieTool.parse(document.cookie || "") || {},
|
|
105
|
+
cookie: document.cookie || "",
|
|
106
|
+
userAgent: ((_request_headers = request.headers) === null || _request_headers === void 0 ? void 0 : _request_headers["user-agent"]) || navigator.userAgent,
|
|
105
107
|
referer: request.referer || document.referrer,
|
|
106
108
|
query: request.query || getQuery(),
|
|
107
109
|
url: location.href
|
|
@@ -24,6 +24,11 @@ var cli_default = () => ({
|
|
|
24
24
|
runtimeByEntries: {},
|
|
25
25
|
source: {
|
|
26
26
|
alias: {
|
|
27
|
+
/**
|
|
28
|
+
* twin.macro inserts styled-components into the code during the compilation process
|
|
29
|
+
* But it will not be installed under the user project.
|
|
30
|
+
* So need to add alias
|
|
31
|
+
*/
|
|
27
32
|
"styled-components": require.resolve("styled-components")
|
|
28
33
|
},
|
|
29
34
|
globalVars: {
|
package/dist/esm-node/common.js
CHANGED
|
@@ -1,4 +1,8 @@
|
|
|
1
1
|
const isBrowser = () => typeof window !== "undefined" && window.name !== "nodejs";
|
|
2
|
+
const JSX_SHELL_STREAM_END_MARK = "<!--<?- SHELL_STREAM_END ?>-->";
|
|
3
|
+
const ESCAPED_SHELL_STREAM_END_MARK = "<!--<?- SHELL_STREAM_END ?>-->";
|
|
2
4
|
export {
|
|
5
|
+
ESCAPED_SHELL_STREAM_END_MARK,
|
|
6
|
+
JSX_SHELL_STREAM_END_MARK,
|
|
3
7
|
isBrowser
|
|
4
8
|
};
|
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
const APP_CONFIG_SYMBOL = "config";
|
|
2
|
-
const getConfig = (Component) =>
|
|
2
|
+
const getConfig = (Component) => (
|
|
3
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
4
|
+
// @ts-expect-error
|
|
5
|
+
Component[APP_CONFIG_SYMBOL]
|
|
6
|
+
);
|
|
3
7
|
const defineConfig = (Component, config) => {
|
|
4
8
|
Component[APP_CONFIG_SYMBOL] = config;
|
|
5
9
|
return Component;
|
|
@@ -4,7 +4,7 @@ import hoistNonReactStatics from "hoist-non-react-statics";
|
|
|
4
4
|
import { ROUTE_MANIFEST } from "@modern-js/utils/constants";
|
|
5
5
|
import {
|
|
6
6
|
RuntimeReactContext
|
|
7
|
-
} from "../
|
|
7
|
+
} from "../runtimeContext";
|
|
8
8
|
import { runtime } from "./plugin";
|
|
9
9
|
import { createLoaderManager } from "./loader/loaderManager";
|
|
10
10
|
const IS_REACT18 = process.env.IS_REACT18 === "true";
|
|
@@ -58,12 +58,7 @@ const createApp = ({ plugins }) => {
|
|
|
58
58
|
}
|
|
59
59
|
);
|
|
60
60
|
}
|
|
61
|
-
return /* @__PURE__ */ jsx(RuntimeReactContext.Provider, {
|
|
62
|
-
value: contextValue,
|
|
63
|
-
children: /* @__PURE__ */ jsx(App2, {
|
|
64
|
-
...props
|
|
65
|
-
})
|
|
66
|
-
});
|
|
61
|
+
return /* @__PURE__ */ jsx(RuntimeReactContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsx(App2, { ...props }) });
|
|
67
62
|
};
|
|
68
63
|
return hoistNonReactStatics(WrapComponent, App2);
|
|
69
64
|
}
|
|
@@ -190,12 +185,14 @@ const bootstrap = async (BootApp, id, root, ReactDOM) => {
|
|
|
190
185
|
{},
|
|
191
186
|
{
|
|
192
187
|
skipNonStatic: id.staticGenerate,
|
|
188
|
+
// if not static generate, only non-static loader can exec on prod env
|
|
193
189
|
skipStatic: process.env.NODE_ENV === "production" && !id.staticGenerate
|
|
194
190
|
}
|
|
195
191
|
)
|
|
196
192
|
});
|
|
197
193
|
const isRedirectResponse = (result) => {
|
|
198
|
-
if (typeof Response !== "undefined" &&
|
|
194
|
+
if (typeof Response !== "undefined" && // fix: ssg workflow doesn't inject Web Response
|
|
195
|
+
result instanceof Response && result.status >= 300 && result.status <= 399) {
|
|
199
196
|
const { status } = result;
|
|
200
197
|
const redirectUrl = result.headers.get("Location") || "/";
|
|
201
198
|
const { ssrContext } = context;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { createPlugin, createRuntime, runtime, registerInit } from "./plugin";
|
|
2
|
-
import { defineConfig, getConfig } from "./
|
|
2
|
+
import { defineConfig, getConfig } from "./appConfig";
|
|
3
3
|
export * from "./compatible";
|
|
4
|
-
import { RuntimeReactContext, ServerRouterContext } from "../
|
|
4
|
+
import { RuntimeReactContext, ServerRouterContext } from "../runtimeContext";
|
|
5
5
|
export * from "./loader";
|
|
6
6
|
export * from "@modern-js/plugin";
|
|
7
7
|
export {
|
|
@@ -59,6 +59,7 @@ const createLoader = (id, initialData = {
|
|
|
59
59
|
reloading: hasLoaded && status === 1 /* loading */,
|
|
60
60
|
data,
|
|
61
61
|
error: error instanceof Error ? `${error.message}` : error,
|
|
62
|
+
// redundant fields for ssr log
|
|
62
63
|
_error: error
|
|
63
64
|
});
|
|
64
65
|
const notify = () => {
|
|
@@ -99,6 +100,7 @@ const createLoaderManager = (initialDataMap, managerOptions = {}) => {
|
|
|
99
100
|
id,
|
|
100
101
|
typeof initialDataMap[id] !== "undefined" ? initialDataMap[id] : { data: loaderOptions.initialData },
|
|
101
102
|
loaderFn,
|
|
103
|
+
// Todo whether static loader is exec when CSR
|
|
102
104
|
skipExec
|
|
103
105
|
);
|
|
104
106
|
loadersMap.set(id, loader);
|
|
@@ -7,7 +7,7 @@ import {
|
|
|
7
7
|
useEffect
|
|
8
8
|
} from "react";
|
|
9
9
|
import invariant from "invariant";
|
|
10
|
-
import { RuntimeReactContext } from "../../
|
|
10
|
+
import { RuntimeReactContext } from "../../runtimeContext";
|
|
11
11
|
import { LoaderStatus } from "./loaderManager";
|
|
12
12
|
const useLoader = (loaderFn, options = { params: void 0 }) => {
|
|
13
13
|
const context = useContext(RuntimeReactContext);
|
|
File without changes
|
|
@@ -9,14 +9,12 @@ import { DefaultRoot } from "./Root";
|
|
|
9
9
|
function Body(props) {
|
|
10
10
|
const { hasSetRoot } = useContext(DocumentStructureContext);
|
|
11
11
|
const { children } = props;
|
|
12
|
-
return /* @__PURE__ */ jsxs("body", {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
]
|
|
19
|
-
});
|
|
12
|
+
return /* @__PURE__ */ jsxs("body", { children: [
|
|
13
|
+
hasSetRoot ? null : /* @__PURE__ */ jsx(DefaultRoot, {}),
|
|
14
|
+
children,
|
|
15
|
+
`${DOCUMENT_CHUNKSMAP_PLACEHOLDER}`,
|
|
16
|
+
`${DOCUMENT_SSRDATASCRIPT_PLACEHOLDER}`
|
|
17
|
+
] });
|
|
20
18
|
}
|
|
21
19
|
export {
|
|
22
20
|
Body
|
|
@@ -7,19 +7,15 @@ import { DOCUMENT_META_PLACEHOLDER } from "./constants";
|
|
|
7
7
|
function Head(props) {
|
|
8
8
|
const { hasSetScripts, hasSetLinks } = useContext(DocumentStructureContext);
|
|
9
9
|
const { children } = props;
|
|
10
|
-
return /* @__PURE__ */ jsxs("head", {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
]
|
|
17
|
-
});
|
|
10
|
+
return /* @__PURE__ */ jsxs("head", { children: [
|
|
11
|
+
`${DOCUMENT_META_PLACEHOLDER}`,
|
|
12
|
+
!hasSetLinks && /* @__PURE__ */ jsx(Links, {}),
|
|
13
|
+
!hasSetScripts && /* @__PURE__ */ jsx(Scripts, {}),
|
|
14
|
+
children
|
|
15
|
+
] });
|
|
18
16
|
}
|
|
19
17
|
function DefaultHead() {
|
|
20
|
-
return /* @__PURE__ */ jsx("head", {
|
|
21
|
-
children: `${DOCUMENT_META_PLACEHOLDER}`
|
|
22
|
-
});
|
|
18
|
+
return /* @__PURE__ */ jsx("head", { children: `${DOCUMENT_META_PLACEHOLDER}` });
|
|
23
19
|
}
|
|
24
20
|
export {
|
|
25
21
|
DefaultHead,
|
|
@@ -34,29 +34,31 @@ function Html(props) {
|
|
|
34
34
|
const notMissMustChild = [
|
|
35
35
|
hasSetHead,
|
|
36
36
|
hasSetBody
|
|
37
|
+
// hasSetScripts,
|
|
38
|
+
// hasSetRoot,
|
|
37
39
|
].every((item) => item);
|
|
38
40
|
if (!notMissMustChild) {
|
|
39
|
-
return /* @__PURE__ */ jsx("html", {
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
});
|
|
41
|
+
return /* @__PURE__ */ jsx("html", { children: /* @__PURE__ */ jsxs("body", { style: { color: "red" }, children: [
|
|
42
|
+
`Miss the `,
|
|
43
|
+
[
|
|
44
|
+
hasSetHead,
|
|
45
|
+
hasSetBody
|
|
46
|
+
// hasSetScripts,
|
|
47
|
+
// hasSetRoot,
|
|
48
|
+
].map((item, index) => {
|
|
49
|
+
return item ? null : [
|
|
50
|
+
"Head",
|
|
51
|
+
"Body"
|
|
52
|
+
// 'Scripts',
|
|
53
|
+
// 'Root',
|
|
54
|
+
][index];
|
|
55
|
+
}),
|
|
56
|
+
` Element`
|
|
57
|
+
] }) });
|
|
57
58
|
}
|
|
58
|
-
return /* @__PURE__ */ jsx("html", {
|
|
59
|
-
|
|
59
|
+
return /* @__PURE__ */ jsx("html", { children: /* @__PURE__ */ jsxs(
|
|
60
|
+
DocumentStructureContext.Provider,
|
|
61
|
+
{
|
|
60
62
|
value: {
|
|
61
63
|
hasSetHead,
|
|
62
64
|
hasSetScripts,
|
|
@@ -70,8 +72,8 @@ function Html(props) {
|
|
|
70
72
|
!hasSetBody && /* @__PURE__ */ jsx(Body, {}),
|
|
71
73
|
children
|
|
72
74
|
]
|
|
73
|
-
}
|
|
74
|
-
});
|
|
75
|
+
}
|
|
76
|
+
) });
|
|
75
77
|
}
|
|
76
78
|
export {
|
|
77
79
|
Html
|
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
import { Fragment, jsx } from "react/jsx-runtime";
|
|
2
2
|
import { DOCUMENT_LINKS_PLACEHOLDER } from "./constants";
|
|
3
3
|
function Links() {
|
|
4
|
-
return /* @__PURE__ */ jsx(Fragment, {
|
|
5
|
-
children: DOCUMENT_LINKS_PLACEHOLDER
|
|
6
|
-
});
|
|
4
|
+
return /* @__PURE__ */ jsx(Fragment, { children: DOCUMENT_LINKS_PLACEHOLDER });
|
|
7
5
|
}
|
|
8
6
|
export {
|
|
9
7
|
Links
|
|
@@ -7,25 +7,19 @@ function Root(props) {
|
|
|
7
7
|
const {
|
|
8
8
|
templateParams: { mountId = "root" }
|
|
9
9
|
} = useContext(DocumentContext);
|
|
10
|
-
return /* @__PURE__ */ jsxs("div", {
|
|
11
|
-
|
|
12
|
-
children
|
|
13
|
-
|
|
14
|
-
children
|
|
15
|
-
]
|
|
16
|
-
});
|
|
10
|
+
return /* @__PURE__ */ jsxs("div", { id: `${rootId || mountId}`, children: [
|
|
11
|
+
`${DOCUMENT_SSR_PLACEHOLDER}`,
|
|
12
|
+
children
|
|
13
|
+
] });
|
|
17
14
|
}
|
|
18
15
|
function DefaultRoot(props) {
|
|
19
16
|
const {
|
|
20
17
|
templateParams: { mountId = "root" }
|
|
21
18
|
} = useContext(DocumentContext);
|
|
22
|
-
return /* @__PURE__ */ jsxs("div", {
|
|
23
|
-
|
|
24
|
-
children
|
|
25
|
-
|
|
26
|
-
props.children
|
|
27
|
-
]
|
|
28
|
-
});
|
|
19
|
+
return /* @__PURE__ */ jsxs("div", { id: `${mountId}`, children: [
|
|
20
|
+
`${DOCUMENT_SSR_PLACEHOLDER}`,
|
|
21
|
+
props.children
|
|
22
|
+
] });
|
|
29
23
|
}
|
|
30
24
|
export {
|
|
31
25
|
DefaultRoot,
|
|
@@ -7,13 +7,11 @@ function Script(props) {
|
|
|
7
7
|
const { content } = props;
|
|
8
8
|
const contentStr = content.toString();
|
|
9
9
|
const contentIIFE = encodeURIComponent(`(${contentStr})()`);
|
|
10
|
-
return /* @__PURE__ */ jsxs(Fragment, {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
]
|
|
16
|
-
});
|
|
10
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
11
|
+
`${DOCUMENT_SCRIPT_PLACEHOLDER_START}`,
|
|
12
|
+
`${contentIIFE}`,
|
|
13
|
+
`${DOCUMENT_SCRIPT_PLACEHOLDER_END}`
|
|
14
|
+
] });
|
|
17
15
|
}
|
|
18
16
|
export {
|
|
19
17
|
Script
|
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
import { Fragment, jsx } from "react/jsx-runtime";
|
|
2
2
|
import { DOCUMENT_SCRIPTS_PLACEHOLDER } from "./constants";
|
|
3
3
|
function Scripts() {
|
|
4
|
-
return /* @__PURE__ */ jsx(Fragment, {
|
|
5
|
-
children: `${DOCUMENT_SCRIPTS_PLACEHOLDER}`
|
|
6
|
-
});
|
|
4
|
+
return /* @__PURE__ */ jsx(Fragment, { children: `${DOCUMENT_SCRIPTS_PLACEHOLDER}` });
|
|
7
5
|
}
|
|
8
6
|
export {
|
|
9
7
|
Scripts
|
|
@@ -60,7 +60,7 @@ var cli_default = () => ({
|
|
|
60
60
|
}
|
|
61
61
|
return async ({ htmlWebpackPlugin }) => {
|
|
62
62
|
const documentParams = getDocParams({
|
|
63
|
-
config: api.
|
|
63
|
+
config: api.useResolvedConfigContext(),
|
|
64
64
|
entryName,
|
|
65
65
|
templateParameters
|
|
66
66
|
});
|
|
@@ -91,6 +91,7 @@ var cli_default = () => ({
|
|
|
91
91
|
entryPoints: [documentFilePath],
|
|
92
92
|
outfile: htmlOutputFile,
|
|
93
93
|
platform: "node",
|
|
94
|
+
// change esbuild use the rootDir tsconfig.json as default to tempTsConfigFile
|
|
94
95
|
tsconfig: tempTsConfigFile,
|
|
95
96
|
target: "es6",
|
|
96
97
|
loader: {
|
|
@@ -147,7 +148,7 @@ var cli_default = () => ({
|
|
|
147
148
|
`${DOCUMENT_SCRIPT_PLACEHOLDER_START}(.*?)${DOCUMENT_SCRIPT_PLACEHOLDER_END}`,
|
|
148
149
|
"g"
|
|
149
150
|
),
|
|
150
|
-
(_scriptStr, $1) => `<script>${decodeURIComponent($1)}
|
|
151
|
+
(_scriptStr, $1) => `<script>${decodeURIComponent($1)}</script>`
|
|
151
152
|
);
|
|
152
153
|
}
|
|
153
154
|
const finalHtml = `<!DOCTYPE html>${html}`.replace(DOCUMENT_META_PLACEHOLDER, metas).replace(DOCUMENT_SSR_PLACEHOLDER, HTML_SEPARATOR).replace(DOCUMENT_SCRIPTS_PLACEHOLDER, scripts).replace(DOCUMENT_LINKS_PLACEHOLDER, links).replace(
|
|
@@ -173,6 +174,7 @@ var cli_default = () => ({
|
|
|
173
174
|
) : { ...options == null ? void 0 : options.templateParameters };
|
|
174
175
|
const templateContent = documentEntry(
|
|
175
176
|
entry.entryName,
|
|
177
|
+
// options,
|
|
176
178
|
hackParameters
|
|
177
179
|
);
|
|
178
180
|
const documentHtmlOptions = templateContent ? {
|
|
@@ -1,14 +1,11 @@
|
|
|
1
1
|
import {
|
|
2
2
|
getEntryOptions,
|
|
3
3
|
createRuntimeExportsUtils,
|
|
4
|
-
PLUGIN_SCHEMAS
|
|
4
|
+
PLUGIN_SCHEMAS,
|
|
5
|
+
isRouterV5 as isV5
|
|
5
6
|
} from "@modern-js/utils";
|
|
6
7
|
const PLUGIN_IDENTIFIER = "router";
|
|
7
8
|
const ROUTES_IDENTIFIER = "routes";
|
|
8
|
-
const isV5 = (config) => {
|
|
9
|
-
var _a, _b;
|
|
10
|
-
return ((_b = (_a = config == null ? void 0 : config.runtime) == null ? void 0 : _a.router) == null ? void 0 : _b.mode) === "react-router-5";
|
|
11
|
-
};
|
|
12
9
|
var cli_default = () => ({
|
|
13
10
|
name: "@modern-js/plugin-router",
|
|
14
11
|
required: ["@modern-js/runtime"],
|
|
@@ -1,14 +1,17 @@
|
|
|
1
1
|
import { jsx } from "react/jsx-runtime";
|
|
2
|
-
const DefaultNotFound = () => /* @__PURE__ */ jsx(
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
}
|
|
2
|
+
const DefaultNotFound = () => /* @__PURE__ */ jsx(
|
|
3
|
+
"div",
|
|
4
|
+
{
|
|
5
|
+
style: {
|
|
6
|
+
margin: "150px auto",
|
|
7
|
+
textAlign: "center",
|
|
8
|
+
display: "flex",
|
|
9
|
+
alignItems: "center",
|
|
10
|
+
justifyContent: "center"
|
|
11
|
+
},
|
|
12
|
+
children: "404"
|
|
13
|
+
}
|
|
14
|
+
);
|
|
12
15
|
export {
|
|
13
16
|
DefaultNotFound
|
|
14
17
|
};
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Suspense, useEffect, useRef, useMemo, useContext } from "react";
|
|
3
|
+
import {
|
|
4
|
+
Await,
|
|
5
|
+
UNSAFE_DataRouterContext as DataRouterContext,
|
|
6
|
+
useAsyncError
|
|
7
|
+
} from "react-router-dom";
|
|
8
|
+
import { serializeJson } from "@modern-js/utils/serialize";
|
|
9
|
+
import { JSX_SHELL_STREAM_END_MARK } from "../../common";
|
|
10
|
+
import { serializeErrors } from "./utils";
|
|
11
|
+
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}}))};`;
|
|
12
|
+
const resolveFnStr = `function r(e,r,o,A){A?_ROUTER_DATA.r[e][r].reject(A):_ROUTER_DATA.r[e][r].resolve(o)};`;
|
|
13
|
+
const preResolvedFnStr = `function p(e,r){return void 0!==r?Promise.reject(new Error(r.message)):Promise.resovle(e)};`;
|
|
14
|
+
const DeferredDataScripts = () => {
|
|
15
|
+
const context = useContext(DataRouterContext);
|
|
16
|
+
const { staticContext } = context || {};
|
|
17
|
+
const hydratedRef = useRef(false);
|
|
18
|
+
useEffect(() => {
|
|
19
|
+
hydratedRef.current = true;
|
|
20
|
+
}, []);
|
|
21
|
+
const deferredScripts = useMemo(() => {
|
|
22
|
+
if (!staticContext) {
|
|
23
|
+
return null;
|
|
24
|
+
}
|
|
25
|
+
const activeDeferreds = staticContext.activeDeferreds || [];
|
|
26
|
+
const _ROUTER_DATA = {
|
|
27
|
+
loaderData: staticContext.loaderData,
|
|
28
|
+
errors: serializeErrors(staticContext.errors)
|
|
29
|
+
};
|
|
30
|
+
let initialScripts = [
|
|
31
|
+
`_ROUTER_DATA = ${serializeJson(_ROUTER_DATA)};`,
|
|
32
|
+
`_ROUTER_DATA.s = ${setupFnStr}`,
|
|
33
|
+
`_ROUTER_DATA.r = ${resolveFnStr}`,
|
|
34
|
+
`_ROUTER_DATA.p = ${preResolvedFnStr}`
|
|
35
|
+
].join("\n");
|
|
36
|
+
const deferredDataScripts = [];
|
|
37
|
+
initialScripts += Object.entries(activeDeferreds).map(([routeId, deferredData]) => {
|
|
38
|
+
const pendingKeys = new Set(deferredData.pendingKeys);
|
|
39
|
+
const { deferredKeys } = deferredData;
|
|
40
|
+
const deferredKeyPromiseStr = deferredKeys.map((key) => {
|
|
41
|
+
if (pendingKeys.has(key)) {
|
|
42
|
+
deferredDataScripts.push(
|
|
43
|
+
/* @__PURE__ */ jsx(
|
|
44
|
+
DeferredDataScript,
|
|
45
|
+
{
|
|
46
|
+
data: deferredData.data[key],
|
|
47
|
+
dataKey: key,
|
|
48
|
+
routeId
|
|
49
|
+
},
|
|
50
|
+
`${routeId} | ${key}`
|
|
51
|
+
)
|
|
52
|
+
);
|
|
53
|
+
return `${JSON.stringify(key)}: _ROUTER_DATA.s(${JSON.stringify(
|
|
54
|
+
routeId
|
|
55
|
+
)},${JSON.stringify(key)}) `;
|
|
56
|
+
} else {
|
|
57
|
+
const trackedPromise = deferredData.data[key];
|
|
58
|
+
if (typeof trackedPromise._error !== "undefined") {
|
|
59
|
+
const error = {
|
|
60
|
+
message: trackedPromise._error.message,
|
|
61
|
+
stack: process.env.NODE_ENV !== "production" ? trackedPromise._error.stack : void 0
|
|
62
|
+
};
|
|
63
|
+
return `${JSON.stringify(
|
|
64
|
+
key
|
|
65
|
+
)}: _ROUTER_DATA.p(${void 0}, ${serializeJson(error)})`;
|
|
66
|
+
} else {
|
|
67
|
+
if (typeof trackedPromise._data === "undefined") {
|
|
68
|
+
throw new Error(
|
|
69
|
+
`The deferred data for ${key} was not resolved, did you forget to return data from a deferred promise`
|
|
70
|
+
);
|
|
71
|
+
}
|
|
72
|
+
return `${JSON.stringify(key)}: _ROUTER_DATA.p(${serializeJson(
|
|
73
|
+
trackedPromise._data
|
|
74
|
+
)})`;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}).join(",\n");
|
|
78
|
+
return `Object.assign(_ROUTER_DATA.loaderData[${JSON.stringify(
|
|
79
|
+
routeId
|
|
80
|
+
)}], {${deferredKeyPromiseStr}});`;
|
|
81
|
+
}).join("\n");
|
|
82
|
+
return [initialScripts, deferredDataScripts];
|
|
83
|
+
}, []);
|
|
84
|
+
if (!deferredScripts) {
|
|
85
|
+
return null;
|
|
86
|
+
}
|
|
87
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
88
|
+
!hydratedRef.current && /* @__PURE__ */ jsx(
|
|
89
|
+
"script",
|
|
90
|
+
{
|
|
91
|
+
async: true,
|
|
92
|
+
suppressHydrationWarning: true,
|
|
93
|
+
dangerouslySetInnerHTML: { __html: deferredScripts[0] }
|
|
94
|
+
}
|
|
95
|
+
),
|
|
96
|
+
!hydratedRef.current && deferredScripts[1],
|
|
97
|
+
JSX_SHELL_STREAM_END_MARK
|
|
98
|
+
] });
|
|
99
|
+
};
|
|
100
|
+
const DeferredDataScript = ({
|
|
101
|
+
data,
|
|
102
|
+
routeId,
|
|
103
|
+
dataKey
|
|
104
|
+
}) => {
|
|
105
|
+
return /* @__PURE__ */ jsx(Suspense, { children: typeof document === "undefined" && data && dataKey && routeId ? /* @__PURE__ */ jsx(
|
|
106
|
+
Await,
|
|
107
|
+
{
|
|
108
|
+
resolve: data,
|
|
109
|
+
errorElement: /* @__PURE__ */ jsx(ErrorDeferredDataScript, { routeId, dataKey }),
|
|
110
|
+
children: (data2) => /* @__PURE__ */ jsx(
|
|
111
|
+
"script",
|
|
112
|
+
{
|
|
113
|
+
async: true,
|
|
114
|
+
suppressHydrationWarning: true,
|
|
115
|
+
dangerouslySetInnerHTML: {
|
|
116
|
+
__html: `_ROUTER_DATA.r(${JSON.stringify(
|
|
117
|
+
routeId
|
|
118
|
+
)}, ${JSON.stringify(dataKey)}, ${serializeJson(data2)});`
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
)
|
|
122
|
+
}
|
|
123
|
+
) : null });
|
|
124
|
+
};
|
|
125
|
+
const ErrorDeferredDataScript = ({
|
|
126
|
+
routeId,
|
|
127
|
+
dataKey
|
|
128
|
+
}) => {
|
|
129
|
+
const error = useAsyncError();
|
|
130
|
+
return /* @__PURE__ */ jsx(
|
|
131
|
+
"script",
|
|
132
|
+
{
|
|
133
|
+
suppressHydrationWarning: true,
|
|
134
|
+
dangerouslySetInnerHTML: {
|
|
135
|
+
__html: `_ROUTER_DATA.r(${JSON.stringify(routeId)}, ${JSON.stringify(
|
|
136
|
+
dataKey
|
|
137
|
+
)}, ${void 0}, ${serializeJson({
|
|
138
|
+
message: error.message,
|
|
139
|
+
stack: error.stack
|
|
140
|
+
})});`
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
);
|
|
144
|
+
};
|
|
145
|
+
var DeferredDataScripts_default = DeferredDataScripts;
|
|
146
|
+
export {
|
|
147
|
+
DeferredDataScripts_default as default
|
|
148
|
+
};
|