@modern-js/runtime 2.20.0 → 2.21.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 +38 -0
- package/dist/cjs/document/cli/index.js +5 -2
- package/dist/cjs/router/runtime/DeferredDataScripts.node.js +4 -4
- package/dist/cjs/router/runtime/PrefetchLink.js +7 -7
- package/dist/cjs/router/runtime/index.js +55 -56
- package/dist/cjs/router/runtime/plugin.js +7 -7
- package/dist/cjs/router/runtime/plugin.node.js +7 -7
- package/dist/cjs/router/runtime/server.js +1 -1
- package/dist/cjs/router/runtime/utils.js +6 -5
- package/dist/cjs/router/runtime/withRouter.js +4 -4
- package/dist/cjs/ssr/cli/index.js +1 -1
- package/dist/cjs/ssr/serverRender/renderToStream/buildTemplate.after.js +6 -2
- package/dist/cjs/ssr/serverRender/renderToStream/bulidTemplate.before.js +2 -2
- package/dist/cjs/ssr/serverRender/renderToStream/renderToPipe.js +10 -12
- package/dist/cjs/ssr/serverRender/renderToStream/renderToPipe.worker.js +11 -11
- package/dist/cjs/ssr/serverRender/renderToString/entry.js +10 -4
- package/dist/cjs/ssr/serverRender/renderToString/loadable.js +7 -4
- package/dist/cjs/ssr/serverRender/utils.js +7 -1
- package/dist/esm/document/cli/index.js +6 -3
- package/dist/esm/router/runtime/DeferredDataScripts.node.js +1 -1
- package/dist/esm/router/runtime/PrefetchLink.js +1 -1
- package/dist/esm/router/runtime/index.js +6 -4
- package/dist/esm/router/runtime/plugin.js +1 -1
- package/dist/esm/router/runtime/plugin.node.js +3 -3
- package/dist/esm/router/runtime/server.js +1 -1
- package/dist/esm/router/runtime/utils.js +3 -2
- package/dist/esm/router/runtime/withRouter.js +1 -1
- package/dist/esm/ssr/cli/index.js +1 -1
- package/dist/esm/ssr/serverRender/renderToStream/buildTemplate.after.js +6 -2
- package/dist/esm/ssr/serverRender/renderToStream/bulidTemplate.before.js +1 -1
- package/dist/esm/ssr/serverRender/renderToStream/renderToPipe.js +10 -12
- package/dist/esm/ssr/serverRender/renderToStream/renderToPipe.worker.js +12 -12
- package/dist/esm/ssr/serverRender/renderToString/entry.js +11 -5
- package/dist/esm/ssr/serverRender/renderToString/loadable.js +8 -5
- package/dist/esm/ssr/serverRender/utils.js +7 -0
- package/dist/esm-node/document/cli/index.js +5 -2
- package/dist/esm-node/router/runtime/DeferredDataScripts.node.js +1 -1
- package/dist/esm-node/router/runtime/PrefetchLink.js +1 -1
- package/dist/esm-node/router/runtime/index.js +6 -4
- package/dist/esm-node/router/runtime/plugin.js +1 -1
- package/dist/esm-node/router/runtime/plugin.node.js +3 -3
- package/dist/esm-node/router/runtime/server.js +1 -1
- package/dist/esm-node/router/runtime/utils.js +3 -2
- package/dist/esm-node/router/runtime/withRouter.js +1 -1
- package/dist/esm-node/ssr/cli/index.js +1 -1
- package/dist/esm-node/ssr/serverRender/renderToStream/buildTemplate.after.js +6 -2
- package/dist/esm-node/ssr/serverRender/renderToStream/bulidTemplate.before.js +1 -1
- package/dist/esm-node/ssr/serverRender/renderToStream/renderToPipe.js +10 -12
- package/dist/esm-node/ssr/serverRender/renderToStream/renderToPipe.worker.js +11 -11
- package/dist/esm-node/ssr/serverRender/renderToString/entry.js +11 -5
- package/dist/esm-node/ssr/serverRender/renderToString/loadable.js +8 -5
- package/dist/esm-node/ssr/serverRender/utils.js +5 -0
- package/dist/types/cli/index.d.ts +0 -2
- package/dist/types/core/loader/loaderManager.d.ts +0 -1
- package/dist/types/core/loader/useLoader.d.ts +0 -5
- package/dist/types/core/plugin.d.ts +1 -6
- package/dist/types/document/cli/index.d.ts +0 -2
- package/dist/types/router/cli/index.d.ts +0 -2
- package/dist/types/router/runtime/DeferredDataScripts.d.ts +0 -1
- package/dist/types/router/runtime/DeferredDataScripts.node.d.ts +0 -1
- package/dist/types/router/runtime/PrefetchLink.d.ts +1 -3
- package/dist/types/router/runtime/hooks.d.ts +1 -1
- package/dist/types/router/runtime/index.d.ts +3 -4
- package/dist/types/router/runtime/server.d.ts +1 -1
- package/dist/types/router/runtime/types.d.ts +1 -3
- package/dist/types/router/runtime/utils.d.ts +1 -3
- package/dist/types/router/runtime/withRouter.d.ts +1 -1
- package/dist/types/runtimeContext.d.ts +1 -1
- package/dist/types/ssr/cli/index.d.ts +0 -2
- package/dist/types/ssr/serverRender/renderToStream/type.d.ts +2 -2
- package/dist/types/ssr/serverRender/renderToString/entry.d.ts +1 -0
- package/dist/types/ssr/serverRender/renderToString/type.d.ts +1 -0
- package/dist/types/ssr/serverRender/utils.d.ts +2 -1
- package/dist/types/state/cli/index.d.ts +0 -2
- package/dist/types/state/types.d.ts +0 -1
- package/package.json +27 -20
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,43 @@
|
|
|
1
1
|
# @modern-js/runtime
|
|
2
2
|
|
|
3
|
+
## 2.21.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- 0a1aa3b: feat: the runtime package export `loadable_bundler_plugin`
|
|
8
|
+
feat: runtime 包导出 `loadable_bundler_plugin`
|
|
9
|
+
|
|
10
|
+
### Patch Changes
|
|
11
|
+
|
|
12
|
+
- e81eeaf: refactor: guard react-router version consistency
|
|
13
|
+
refactor: 保证 react-router 相关包的版本一致性
|
|
14
|
+
- 26dcf3a: chore: bump typescript to v5 in devDependencies
|
|
15
|
+
|
|
16
|
+
chore: 升级 devDependencies 中的 typescript 版本到 v5
|
|
17
|
+
|
|
18
|
+
- 8b7c6d4: chore: update reduck
|
|
19
|
+
chore: 更新 reduck
|
|
20
|
+
- 807f04a: fix(plugin-runtime): streaming ssr split chunk so that can't match `SHELL_STREAM_END_MARK`
|
|
21
|
+
fix(plugin-runtime): streaming ssr chunk 进行分割导致无法匹配 `SHELL_STREAM_END_MARK`
|
|
22
|
+
- 0fc15ca: fix: fix `@modern-js/utils` subpath exports
|
|
23
|
+
fix: 修复 `@modern-js/utils` 子路径导出
|
|
24
|
+
- 43b4e83: feat: support security.nonce for add nonce attribute on script tag
|
|
25
|
+
feat: 支持 security.nonce 配置,为 script 标签添加 nonce 属性
|
|
26
|
+
- ad78387: chore(deps): bump babel-related dependencies to latest version
|
|
27
|
+
|
|
28
|
+
chore(deps): 升级 babel 相关依赖到最新版本
|
|
29
|
+
|
|
30
|
+
- Updated dependencies [e81eeaf]
|
|
31
|
+
- Updated dependencies [26dcf3a]
|
|
32
|
+
- Updated dependencies [1ef03dc]
|
|
33
|
+
- Updated dependencies [056627f]
|
|
34
|
+
- Updated dependencies [0fc15ca]
|
|
35
|
+
- Updated dependencies [43b4e83]
|
|
36
|
+
- Updated dependencies [ad78387]
|
|
37
|
+
- @modern-js/utils@2.21.0
|
|
38
|
+
- @modern-js/plugin@2.21.0
|
|
39
|
+
- @modern-js/types@2.21.0
|
|
40
|
+
|
|
3
41
|
## 2.20.0
|
|
4
42
|
|
|
5
43
|
### Patch Changes
|
|
@@ -62,8 +62,9 @@ const _default = () => {
|
|
|
62
62
|
return null;
|
|
63
63
|
}
|
|
64
64
|
return async ({ htmlWebpackPlugin }) => {
|
|
65
|
+
const config = api.useResolvedConfigContext();
|
|
65
66
|
const documentParams = getDocParams({
|
|
66
|
-
config
|
|
67
|
+
config,
|
|
67
68
|
entryName,
|
|
68
69
|
templateParameters
|
|
69
70
|
});
|
|
@@ -137,7 +138,9 @@ const _default = () => {
|
|
|
137
138
|
htmlWebpackPlugin.tags.headTags.filter((item) => item.tagName !== "script" && item.tagName !== "link").join("")
|
|
138
139
|
].join("");
|
|
139
140
|
if (html.includes(_constants.DOCUMENT_SCRIPT_PLACEHOLDER_START) && html.includes(_constants.DOCUMENT_SCRIPT_PLACEHOLDER_END)) {
|
|
140
|
-
|
|
141
|
+
const { nonce } = config.security;
|
|
142
|
+
const nonceAttr = nonce ? `nonce=${nonce}` : "";
|
|
143
|
+
html = html.replace(new RegExp(`${_constants.DOCUMENT_SCRIPT_PLACEHOLDER_START}(.*?)${_constants.DOCUMENT_SCRIPT_PLACEHOLDER_END}`, "g"), (_scriptStr, $1) => `<script ${nonceAttr}>${decodeURIComponent($1)}</script>`);
|
|
141
144
|
}
|
|
142
145
|
if (html.includes(_constants.DOCUMENT_COMMENT_PLACEHOLDER_START) && html.includes(_constants.DOCUMENT_COMMENT_PLACEHOLDER_END)) {
|
|
143
146
|
html = html.replace(new RegExp(`${_constants.DOCUMENT_COMMENT_PLACEHOLDER_START}(.*?)${_constants.DOCUMENT_COMMENT_PLACEHOLDER_END}`, "g"), (_scriptStr, $1) => `${decodeURIComponent($1)}`);
|
|
@@ -8,7 +8,7 @@ Object.defineProperty(exports, "default", {
|
|
|
8
8
|
});
|
|
9
9
|
const _jsxruntime = require("react/jsx-runtime");
|
|
10
10
|
const _react = require("react");
|
|
11
|
-
const
|
|
11
|
+
const _router = require("@modern-js/utils/runtime/router");
|
|
12
12
|
const _runtimenode = require("@modern-js/utils/runtime-node");
|
|
13
13
|
const _common = require("../../common");
|
|
14
14
|
const _utils = require("./utils");
|
|
@@ -16,7 +16,7 @@ const setupFnStr = `function s(r,e){_ROUTER_DATA.r=_ROUTER_DATA.r||{},_ROUTER_DA
|
|
|
16
16
|
const resolveFnStr = `function r(e,r,o,A){A?_ROUTER_DATA.r[e][r].reject(A):_ROUTER_DATA.r[e][r].resolve(o)};`;
|
|
17
17
|
const preResolvedFnStr = `function p(e,r){return void 0!==r?Promise.reject(new Error(r.message)):Promise.resolve(e)};`;
|
|
18
18
|
const DeferredDataScripts = () => {
|
|
19
|
-
const context = (0, _react.useContext)(
|
|
19
|
+
const context = (0, _react.useContext)(_router.UNSAFE_DataRouterContext);
|
|
20
20
|
const { staticContext } = context || {};
|
|
21
21
|
const hydratedRef = (0, _react.useRef)(false);
|
|
22
22
|
(0, _react.useEffect)(() => {
|
|
@@ -91,7 +91,7 @@ const DeferredDataScripts = () => {
|
|
|
91
91
|
};
|
|
92
92
|
const DeferredDataScript = ({ data, routeId, dataKey }) => {
|
|
93
93
|
return /* @__PURE__ */ (0, _jsxruntime.jsx)(_react.Suspense, {
|
|
94
|
-
children: typeof document === "undefined" && data && dataKey && routeId ? /* @__PURE__ */ (0, _jsxruntime.jsx)(
|
|
94
|
+
children: typeof document === "undefined" && data && dataKey && routeId ? /* @__PURE__ */ (0, _jsxruntime.jsx)(_router.Await, {
|
|
95
95
|
resolve: data,
|
|
96
96
|
errorElement: /* @__PURE__ */ (0, _jsxruntime.jsx)(ErrorDeferredDataScript, {
|
|
97
97
|
routeId,
|
|
@@ -108,7 +108,7 @@ const DeferredDataScript = ({ data, routeId, dataKey }) => {
|
|
|
108
108
|
});
|
|
109
109
|
};
|
|
110
110
|
const ErrorDeferredDataScript = ({ routeId, dataKey }) => {
|
|
111
|
-
const error = (0,
|
|
111
|
+
const error = (0, _router.useAsyncError)();
|
|
112
112
|
return /* @__PURE__ */ (0, _jsxruntime.jsx)("script", {
|
|
113
113
|
suppressHydrationWarning: true,
|
|
114
114
|
dangerouslySetInnerHTML: {
|
|
@@ -17,7 +17,7 @@ _export(exports, {
|
|
|
17
17
|
const _interop_require_wildcard = require("@swc/helpers/_/_interop_require_wildcard");
|
|
18
18
|
const _jsxruntime = require("react/jsx-runtime");
|
|
19
19
|
const _react = /* @__PURE__ */ _interop_require_wildcard._(require("react"));
|
|
20
|
-
const
|
|
20
|
+
const _router = require("@modern-js/utils/runtime/router");
|
|
21
21
|
const _core = require("../../core");
|
|
22
22
|
function composeEventHandlers(theirHandler, ourHandler) {
|
|
23
23
|
return (event) => {
|
|
@@ -119,7 +119,7 @@ const PrefetchPageLinks = ({ pathname }) => {
|
|
|
119
119
|
const context = (0, _react.useContext)(_core.RuntimeReactContext);
|
|
120
120
|
const { routeManifest, routes } = context;
|
|
121
121
|
const { routeAssets } = routeManifest;
|
|
122
|
-
const matches = Array.isArray(routes) ? (0,
|
|
122
|
+
const matches = Array.isArray(routes) ? (0, _router.matchRoutes)(routes, pathname) : [];
|
|
123
123
|
if (Array.isArray(matches)) {
|
|
124
124
|
matches === null || matches === void 0 ? void 0 : matches.forEach((match) => loadRouteModule(match.route, routeAssets));
|
|
125
125
|
}
|
|
@@ -133,8 +133,8 @@ const PrefetchPageLinks = ({ pathname }) => {
|
|
|
133
133
|
});
|
|
134
134
|
};
|
|
135
135
|
const PrefetchDataLinks = ({ matches, pathname, routeManifest }) => {
|
|
136
|
-
const currentMatches = (0,
|
|
137
|
-
const basename = (0,
|
|
136
|
+
const currentMatches = (0, _router.useMatches)();
|
|
137
|
+
const basename = (0, _router.useHref)("/");
|
|
138
138
|
const dataHrefs = (0, _react.useMemo)(() => {
|
|
139
139
|
return matches === null || matches === void 0 ? void 0 : matches.filter((match, index) => {
|
|
140
140
|
if (!match.route.loader || typeof match.route.loader !== "function" || match.route.loader.length === 0) {
|
|
@@ -165,7 +165,7 @@ const createPrefetchLink = (Link2) => {
|
|
|
165
165
|
return /* @__PURE__ */ _react.default.forwardRef(({ to, prefetch = "none", ...props }, forwardedRef) => {
|
|
166
166
|
const isAbsolute = typeof to === "string" && ABSOLUTE_URL_REGEX.test(to);
|
|
167
167
|
const [shouldPrefetch, prefetchHandlers] = usePrefetchBehavior(prefetch, props);
|
|
168
|
-
const resolvedPath = (0,
|
|
168
|
+
const resolvedPath = (0, _router.useResolvedPath)(to);
|
|
169
169
|
const { pathname } = resolvedPath;
|
|
170
170
|
return /* @__PURE__ */ (0, _jsxruntime.jsxs)(_jsxruntime.Fragment, {
|
|
171
171
|
children: [
|
|
@@ -182,7 +182,7 @@ const createPrefetchLink = (Link2) => {
|
|
|
182
182
|
});
|
|
183
183
|
});
|
|
184
184
|
};
|
|
185
|
-
const Link = createPrefetchLink(
|
|
185
|
+
const Link = createPrefetchLink(_router.Link);
|
|
186
186
|
Link.displayName = "Link";
|
|
187
|
-
const NavLink = createPrefetchLink(
|
|
187
|
+
const NavLink = createPrefetchLink(_router.NavLink);
|
|
188
188
|
NavLink.displayName = "NavLink";
|
|
@@ -16,75 +16,74 @@ _export(exports, {
|
|
|
16
16
|
NavLink: () => _PrefetchLink.NavLink,
|
|
17
17
|
useRouteLoaderData: () => useRouteLoaderData,
|
|
18
18
|
// Routers
|
|
19
|
-
createBrowserRouter: () =>
|
|
20
|
-
createHashRouter: () =>
|
|
21
|
-
createMemoryRouter: () =>
|
|
22
|
-
RouterProvider: () =>
|
|
19
|
+
createBrowserRouter: () => _router.createBrowserRouter,
|
|
20
|
+
createHashRouter: () => _router.createHashRouter,
|
|
21
|
+
createMemoryRouter: () => _router.createMemoryRouter,
|
|
22
|
+
RouterProvider: () => _router.RouterProvider,
|
|
23
23
|
// Router Components
|
|
24
|
-
BrowserRouter: () =>
|
|
25
|
-
HashRouter: () =>
|
|
26
|
-
MemoryRouter: () =>
|
|
27
|
-
Router: () =>
|
|
24
|
+
BrowserRouter: () => _router.BrowserRouter,
|
|
25
|
+
HashRouter: () => _router.HashRouter,
|
|
26
|
+
MemoryRouter: () => _router.MemoryRouter,
|
|
27
|
+
Router: () => _router.Router,
|
|
28
28
|
// Components
|
|
29
|
-
Await: () =>
|
|
30
|
-
Form: () =>
|
|
31
|
-
Navigate: () =>
|
|
32
|
-
Outlet: () =>
|
|
33
|
-
Route: () =>
|
|
34
|
-
Routes: () =>
|
|
35
|
-
ScrollRestoration: () =>
|
|
29
|
+
Await: () => _router.Await,
|
|
30
|
+
Form: () => _router.Form,
|
|
31
|
+
Navigate: () => _router.Navigate,
|
|
32
|
+
Outlet: () => _router.Outlet,
|
|
33
|
+
Route: () => _router.Route,
|
|
34
|
+
Routes: () => _router.Routes,
|
|
35
|
+
ScrollRestoration: () => _router.ScrollRestoration,
|
|
36
36
|
// Hooks
|
|
37
|
-
useActionData: () =>
|
|
38
|
-
useAsyncError: () =>
|
|
39
|
-
useAsyncValue: () =>
|
|
40
|
-
useBeforeUnload: () =>
|
|
41
|
-
useFetcher: () =>
|
|
42
|
-
useFetchers: () =>
|
|
43
|
-
useFormAction: () =>
|
|
44
|
-
useHref: () =>
|
|
45
|
-
useInRouterContext: () =>
|
|
46
|
-
useLinkClickHandler: () =>
|
|
47
|
-
useLoaderData: () =>
|
|
48
|
-
useLocation: () =>
|
|
49
|
-
useMatch: () =>
|
|
50
|
-
useMatches: () =>
|
|
51
|
-
useNavigate: () =>
|
|
52
|
-
useNavigation: () =>
|
|
53
|
-
useNavigationType: () =>
|
|
54
|
-
useOutlet: () =>
|
|
55
|
-
useOutletContext: () =>
|
|
56
|
-
useParams: () =>
|
|
57
|
-
useResolvedPath: () =>
|
|
58
|
-
useRevalidator: () =>
|
|
59
|
-
useRouteError: () =>
|
|
60
|
-
useRoutes: () =>
|
|
61
|
-
useSearchParams: () =>
|
|
62
|
-
useSubmit: () =>
|
|
37
|
+
useActionData: () => _router.useActionData,
|
|
38
|
+
useAsyncError: () => _router.useAsyncError,
|
|
39
|
+
useAsyncValue: () => _router.useAsyncValue,
|
|
40
|
+
useBeforeUnload: () => _router.useBeforeUnload,
|
|
41
|
+
useFetcher: () => _router.useFetcher,
|
|
42
|
+
useFetchers: () => _router.useFetchers,
|
|
43
|
+
useFormAction: () => _router.useFormAction,
|
|
44
|
+
useHref: () => _router.useHref,
|
|
45
|
+
useInRouterContext: () => _router.useInRouterContext,
|
|
46
|
+
useLinkClickHandler: () => _router.useLinkClickHandler,
|
|
47
|
+
useLoaderData: () => _router.useLoaderData,
|
|
48
|
+
useLocation: () => _router.useLocation,
|
|
49
|
+
useMatch: () => _router.useMatch,
|
|
50
|
+
useMatches: () => _router.useMatches,
|
|
51
|
+
useNavigate: () => _router.useNavigate,
|
|
52
|
+
useNavigation: () => _router.useNavigation,
|
|
53
|
+
useNavigationType: () => _router.useNavigationType,
|
|
54
|
+
useOutlet: () => _router.useOutlet,
|
|
55
|
+
useOutletContext: () => _router.useOutletContext,
|
|
56
|
+
useParams: () => _router.useParams,
|
|
57
|
+
useResolvedPath: () => _router.useResolvedPath,
|
|
58
|
+
useRevalidator: () => _router.useRevalidator,
|
|
59
|
+
useRouteError: () => _router.useRouteError,
|
|
60
|
+
useRoutes: () => _router.useRoutes,
|
|
61
|
+
useSearchParams: () => _router.useSearchParams,
|
|
62
|
+
useSubmit: () => _router.useSubmit,
|
|
63
63
|
// Utilities
|
|
64
|
-
createRoutesFromChildren: () =>
|
|
65
|
-
createRoutesFromElements: () =>
|
|
66
|
-
createSearchParams: () =>
|
|
67
|
-
generatePath: () =>
|
|
68
|
-
isRouteErrorResponse: () =>
|
|
69
|
-
matchPath: () =>
|
|
70
|
-
matchRoutes: () =>
|
|
71
|
-
renderMatches: () =>
|
|
72
|
-
resolvePath: () =>
|
|
73
|
-
createPath: () =>
|
|
74
|
-
unstable_useBlocker: () =>
|
|
75
|
-
unstable_usePrompt: () =>
|
|
64
|
+
createRoutesFromChildren: () => _router.createRoutesFromChildren,
|
|
65
|
+
createRoutesFromElements: () => _router.createRoutesFromElements,
|
|
66
|
+
createSearchParams: () => _router.createSearchParams,
|
|
67
|
+
generatePath: () => _router.generatePath,
|
|
68
|
+
isRouteErrorResponse: () => _router.isRouteErrorResponse,
|
|
69
|
+
matchPath: () => _router.matchPath,
|
|
70
|
+
matchRoutes: () => _router.matchRoutes,
|
|
71
|
+
renderMatches: () => _router.renderMatches,
|
|
72
|
+
resolvePath: () => _router.resolvePath,
|
|
73
|
+
createPath: () => _router.createPath,
|
|
74
|
+
unstable_useBlocker: () => _router.unstable_useBlocker,
|
|
75
|
+
unstable_usePrompt: () => _router.unstable_usePrompt,
|
|
76
76
|
defer: () => _router.defer,
|
|
77
77
|
json: () => _router.json,
|
|
78
78
|
redirect: () => _router.redirect
|
|
79
79
|
});
|
|
80
80
|
const _export_star = require("@swc/helpers/_/_export_star");
|
|
81
|
-
const
|
|
81
|
+
const _router = require("@modern-js/utils/runtime/router");
|
|
82
82
|
const _plugin = require("./plugin");
|
|
83
83
|
_export_star._(require("./withRouter"), exports);
|
|
84
84
|
const _PrefetchLink = require("./PrefetchLink");
|
|
85
|
-
const _router = require("@modern-js/utils/runtime/router");
|
|
86
85
|
const _default = _plugin.routerPlugin;
|
|
87
86
|
const useRouteLoaderData = (routeId) => {
|
|
88
87
|
const realRouteId = routeId.replace(/\[(.*?)\]/g, "($1)");
|
|
89
|
-
return (0,
|
|
88
|
+
return (0, _router.useRouteLoaderData)(realRouteId);
|
|
90
89
|
};
|
|
@@ -18,7 +18,7 @@ _export(exports, {
|
|
|
18
18
|
const _interop_require_default = require("@swc/helpers/_/_interop_require_default");
|
|
19
19
|
const _jsxruntime = require("react/jsx-runtime");
|
|
20
20
|
const _react = /* @__PURE__ */ _interop_require_default._(require("react"));
|
|
21
|
-
const
|
|
21
|
+
const _router = require("@modern-js/utils/runtime/router");
|
|
22
22
|
const _hoistnonreactstatics = /* @__PURE__ */ _interop_require_default._(require("hoist-non-react-statics"));
|
|
23
23
|
const _runtimebrowser = require("@modern-js/utils/runtime-browser");
|
|
24
24
|
const _hooks = require("./hooks");
|
|
@@ -50,8 +50,8 @@ const routerPlugin = ({ serverBase = [], supportHtml5History = true, basename =
|
|
|
50
50
|
return {
|
|
51
51
|
init({ context }, next) {
|
|
52
52
|
context.router = {
|
|
53
|
-
useMatches:
|
|
54
|
-
useLocation:
|
|
53
|
+
useMatches: _router.useMatches,
|
|
54
|
+
useLocation: _router.useLocation
|
|
55
55
|
};
|
|
56
56
|
Object.defineProperty(context, "routes", {
|
|
57
57
|
get() {
|
|
@@ -72,7 +72,7 @@ const routerPlugin = ({ serverBase = [], supportHtml5History = true, basename =
|
|
|
72
72
|
return (props) => {
|
|
73
73
|
var _window__SERVER_DATA;
|
|
74
74
|
beforeCreateRouter = false;
|
|
75
|
-
routes = createRoutes ? createRoutes() : (0,
|
|
75
|
+
routes = createRoutes ? createRoutes() : (0, _router.createRoutesFromElements)((0, _utils.renderRoutes)({
|
|
76
76
|
routesConfig: finalRouteConfig,
|
|
77
77
|
props
|
|
78
78
|
}));
|
|
@@ -87,16 +87,16 @@ const routerPlugin = ({ serverBase = [], supportHtml5History = true, basename =
|
|
|
87
87
|
errors: (0, _utils.deserializeErrors)(hydrationData.errors)
|
|
88
88
|
};
|
|
89
89
|
}
|
|
90
|
-
const router = supportHtml5History ? (0,
|
|
90
|
+
const router = supportHtml5History ? (0, _router.createBrowserRouter)(routes, {
|
|
91
91
|
basename: _basename,
|
|
92
92
|
hydrationData
|
|
93
|
-
}) : (0,
|
|
93
|
+
}) : (0, _router.createHashRouter)(routes, {
|
|
94
94
|
basename: _basename,
|
|
95
95
|
hydrationData
|
|
96
96
|
});
|
|
97
97
|
return /* @__PURE__ */ (0, _jsxruntime.jsx)(App, {
|
|
98
98
|
...props,
|
|
99
|
-
children: /* @__PURE__ */ (0, _jsxruntime.jsx)(
|
|
99
|
+
children: /* @__PURE__ */ (0, _jsxruntime.jsx)(_router.RouterProvider, {
|
|
100
100
|
router
|
|
101
101
|
})
|
|
102
102
|
});
|
|
@@ -18,10 +18,10 @@ const _interop_require_default = require("@swc/helpers/_/_interop_require_defaul
|
|
|
18
18
|
const _interop_require_wildcard = require("@swc/helpers/_/_interop_require_wildcard");
|
|
19
19
|
const _jsxruntime = require("react/jsx-runtime");
|
|
20
20
|
const _react = /* @__PURE__ */ _interop_require_wildcard._(require("react"));
|
|
21
|
-
const
|
|
22
|
-
const
|
|
21
|
+
const _remixrouter = require("@modern-js/utils/runtime/remix-router");
|
|
22
|
+
const _router = require("@modern-js/utils/runtime-node/router");
|
|
23
23
|
const _hoistnonreactstatics = /* @__PURE__ */ _interop_require_default._(require("hoist-non-react-statics"));
|
|
24
|
-
const
|
|
24
|
+
const _router1 = require("@modern-js/utils/runtime/router");
|
|
25
25
|
const _core = require("../../core");
|
|
26
26
|
const _utils = require("./utils");
|
|
27
27
|
const _fetch = require("./fetch");
|
|
@@ -70,11 +70,11 @@ const routerPlugin = ({ basename = "", routesConfig, createRoutes }) => {
|
|
|
70
70
|
const { request, mode: ssrMode } = context.ssrContext;
|
|
71
71
|
const baseUrl = request.baseUrl;
|
|
72
72
|
const _basename = baseUrl === "/" ? (0, _utils.urlJoin)(baseUrl, basename) : baseUrl;
|
|
73
|
-
const routes = createRoutes ? createRoutes() : (0,
|
|
73
|
+
const routes = createRoutes ? createRoutes() : (0, _router1.createRoutesFromElements)((0, _utils.renderRoutes)({
|
|
74
74
|
routesConfig,
|
|
75
75
|
ssrMode
|
|
76
76
|
}));
|
|
77
|
-
const { query } = (0,
|
|
77
|
+
const { query } = (0, _remixrouter.createStaticHandler)(routes, {
|
|
78
78
|
basename: _basename
|
|
79
79
|
});
|
|
80
80
|
const remixRequest = createFetchRequest(request);
|
|
@@ -82,7 +82,7 @@ const routerPlugin = ({ basename = "", routesConfig, createRoutes }) => {
|
|
|
82
82
|
if (routerContext instanceof Response) {
|
|
83
83
|
return routerContext;
|
|
84
84
|
}
|
|
85
|
-
const router = (0,
|
|
85
|
+
const router = (0, _router.createStaticRouter)(routes, routerContext);
|
|
86
86
|
context.router = router;
|
|
87
87
|
context.routerContext = routerContext;
|
|
88
88
|
context.routes = routes;
|
|
@@ -104,7 +104,7 @@ const routerPlugin = ({ basename = "", routesConfig, createRoutes }) => {
|
|
|
104
104
|
const { router, routerContext } = (0, _react.useContext)(_core.RuntimeReactContext);
|
|
105
105
|
return /* @__PURE__ */ (0, _jsxruntime.jsx)(App, {
|
|
106
106
|
...props,
|
|
107
|
-
children: /* @__PURE__ */ (0, _jsxruntime.jsx)(
|
|
107
|
+
children: /* @__PURE__ */ (0, _jsxruntime.jsx)(_router.StaticRouterProvider, {
|
|
108
108
|
router,
|
|
109
109
|
context: routerContext,
|
|
110
110
|
hydrate: false
|
|
@@ -21,8 +21,9 @@ _export(exports, {
|
|
|
21
21
|
const _interop_require_default = require("@swc/helpers/_/_interop_require_default");
|
|
22
22
|
const _jsxruntime = require("react/jsx-runtime");
|
|
23
23
|
const _react = /* @__PURE__ */ _interop_require_default._(require("react"));
|
|
24
|
-
const _reactrouterdom = require("react-router-dom");
|
|
25
24
|
const _router = require("@modern-js/utils/runtime/router");
|
|
25
|
+
const _remixrouter = require("@modern-js/utils/runtime/remix-router");
|
|
26
|
+
const _nestedroutes = require("@modern-js/utils/runtime/nested-routes");
|
|
26
27
|
const _DefaultNotFound = require("./DefaultNotFound");
|
|
27
28
|
const _DeferredDataScripts = /* @__PURE__ */ _interop_require_default._(require("./DeferredDataScripts"));
|
|
28
29
|
function getRouteComponents(routes, { globalApp, ssrMode, props }) {
|
|
@@ -41,13 +42,13 @@ function getRouteComponents(routes, { globalApp, ssrMode, props }) {
|
|
|
41
42
|
const routeElements = [];
|
|
42
43
|
for (const route of routes) {
|
|
43
44
|
if (route.type === "nested") {
|
|
44
|
-
const routeElement = (0,
|
|
45
|
+
const routeElement = (0, _nestedroutes.renderNestedRoute)(route, {
|
|
45
46
|
DeferredDataComponent: ssrMode === "stream" ? _DeferredDataScripts.default : void 0,
|
|
46
47
|
props
|
|
47
48
|
});
|
|
48
49
|
routeElements.push(routeElement);
|
|
49
50
|
} else {
|
|
50
|
-
const routeElement = /* @__PURE__ */ (0, _jsxruntime.jsx)(
|
|
51
|
+
const routeElement = /* @__PURE__ */ (0, _jsxruntime.jsx)(_router.Route, {
|
|
51
52
|
path: route.path,
|
|
52
53
|
element: /* @__PURE__ */ (0, _jsxruntime.jsx)(Layout, {
|
|
53
54
|
Component: route.component
|
|
@@ -56,7 +57,7 @@ function getRouteComponents(routes, { globalApp, ssrMode, props }) {
|
|
|
56
57
|
routeElements.push(routeElement);
|
|
57
58
|
}
|
|
58
59
|
}
|
|
59
|
-
routeElements.push(/* @__PURE__ */ (0, _jsxruntime.jsx)(
|
|
60
|
+
routeElements.push(/* @__PURE__ */ (0, _jsxruntime.jsx)(_router.Route, {
|
|
60
61
|
path: "*",
|
|
61
62
|
element: /* @__PURE__ */ (0, _jsxruntime.jsx)(_DefaultNotFound.DefaultNotFound, {})
|
|
62
63
|
}, "*"));
|
|
@@ -140,7 +141,7 @@ function deserializeErrors(errors) {
|
|
|
140
141
|
const serialized = {};
|
|
141
142
|
for (const [key, val] of entries) {
|
|
142
143
|
if (val && val.__type === "RouteErrorResponse") {
|
|
143
|
-
serialized[key] = new
|
|
144
|
+
serialized[key] = new _remixrouter.ErrorResponse(val.status, val.statusText, val.data, val.internal === true);
|
|
144
145
|
} else if (val && val.__type === "Error") {
|
|
145
146
|
const error = new Error(val.message);
|
|
146
147
|
error.stack = val.stack;
|
|
@@ -9,12 +9,12 @@ Object.defineProperty(exports, "withRouter", {
|
|
|
9
9
|
const _interop_require_default = require("@swc/helpers/_/_interop_require_default");
|
|
10
10
|
const _jsxruntime = require("react/jsx-runtime");
|
|
11
11
|
const _react = /* @__PURE__ */ _interop_require_default._(require("react"));
|
|
12
|
-
const
|
|
12
|
+
const _router = require("@modern-js/utils/runtime/router");
|
|
13
13
|
const withRouter = (Component) => {
|
|
14
14
|
return (props) => {
|
|
15
|
-
const location = (0,
|
|
16
|
-
const params = (0,
|
|
17
|
-
const navigate = (0,
|
|
15
|
+
const location = (0, _router.useLocation)();
|
|
16
|
+
const params = (0, _router.useParams)();
|
|
17
|
+
const navigate = (0, _router.useNavigate)();
|
|
18
18
|
return /* @__PURE__ */ (0, _jsxruntime.jsx)(Component, {
|
|
19
19
|
...props,
|
|
20
20
|
location,
|
|
@@ -67,7 +67,7 @@ const _default = () => {
|
|
|
67
67
|
source: {
|
|
68
68
|
alias: {
|
|
69
69
|
// ensure that all packages use the same storage in @modern-js/utils/runtime-node
|
|
70
|
-
"@modern-js/utils/runtime-node": require.resolve("@modern-js/utils/runtime-node"),
|
|
70
|
+
"@modern-js/utils/runtime-node$": require.resolve("@modern-js/utils/runtime-node"),
|
|
71
71
|
"@modern-js/runtime/plugins": pluginsExportsUtils.getPath()
|
|
72
72
|
},
|
|
73
73
|
globalVars: (values, { target }) => {
|
|
@@ -7,6 +7,7 @@ Object.defineProperty(exports, "buildShellAfterTemplate", {
|
|
|
7
7
|
get: () => buildShellAfterTemplate
|
|
8
8
|
});
|
|
9
9
|
const _runtimenode = require("@modern-js/utils/runtime-node");
|
|
10
|
+
const _utils = require("../utils");
|
|
10
11
|
const _buildTemplateshare = require("./buildTemplate.share");
|
|
11
12
|
function buildShellAfterTemplate(afterAppTemplate, options) {
|
|
12
13
|
const callbacks = [
|
|
@@ -18,7 +19,7 @@ function buildShellAfterTemplate(afterAppTemplate, options) {
|
|
|
18
19
|
return template.replace("<!--<?- SSRDataScript ?>-->", ssrDataScript);
|
|
19
20
|
function buildSSRDataScript() {
|
|
20
21
|
const { context: { ssrContext, initialData, __i18nData__ }, renderLevel } = options;
|
|
21
|
-
const { request, enableUnsafeCtx } = ssrContext;
|
|
22
|
+
const { request, enableUnsafeCtx, nonce } = ssrContext;
|
|
22
23
|
const unsafeContext = {
|
|
23
24
|
headers: request.headers
|
|
24
25
|
};
|
|
@@ -39,8 +40,11 @@ function buildShellAfterTemplate(afterAppTemplate, options) {
|
|
|
39
40
|
},
|
|
40
41
|
renderLevel
|
|
41
42
|
};
|
|
43
|
+
const attrsStr = (0, _utils.attributesToString)({
|
|
44
|
+
nonce
|
|
45
|
+
});
|
|
42
46
|
return `
|
|
43
|
-
<script>window._SSR_DATA = ${(0, _runtimenode.serializeJson)(SSRData)}</script>
|
|
47
|
+
<script${attrsStr}>window._SSR_DATA = ${(0, _runtimenode.serializeJson)(SSRData)}</script>
|
|
44
48
|
`;
|
|
45
49
|
}
|
|
46
50
|
}
|
|
@@ -8,7 +8,7 @@ Object.defineProperty(exports, "buildShellBeforeTemplate", {
|
|
|
8
8
|
});
|
|
9
9
|
const _interop_require_default = require("@swc/helpers/_/_interop_require_default");
|
|
10
10
|
const _reacthelmet = /* @__PURE__ */ _interop_require_default._(require("react-helmet"));
|
|
11
|
-
const
|
|
11
|
+
const _router = require("@modern-js/utils/runtime/router");
|
|
12
12
|
const _helmet = /* @__PURE__ */ _interop_require_default._(require("../helmet"));
|
|
13
13
|
const _utils = require("../utils");
|
|
14
14
|
const _buildTemplateshare = require("./buildTemplate.share");
|
|
@@ -35,7 +35,7 @@ function getHeadTemplate(beforeEntryTemplate, context) {
|
|
|
35
35
|
}
|
|
36
36
|
const { routeAssets } = routeManifest;
|
|
37
37
|
const cssChunks = [];
|
|
38
|
-
const matches = (0,
|
|
38
|
+
const matches = (0, _router.matchRoutes)(routes, routerContext.location, routerContext.basename);
|
|
39
39
|
matches === null || matches === void 0 ? void 0 : matches.forEach((match, index) => {
|
|
40
40
|
if (!index) {
|
|
41
41
|
return;
|
|
@@ -12,13 +12,13 @@ const _common = require("../../../common");
|
|
|
12
12
|
const _template = require("./template");
|
|
13
13
|
var ShellChunkStatus;
|
|
14
14
|
(function(ShellChunkStatus2) {
|
|
15
|
-
ShellChunkStatus2[ShellChunkStatus2["
|
|
16
|
-
ShellChunkStatus2[ShellChunkStatus2["
|
|
17
|
-
ShellChunkStatus2[ShellChunkStatus2["FINIESH"] = 2] = "FINIESH";
|
|
15
|
+
ShellChunkStatus2[ShellChunkStatus2["START"] = 0] = "START";
|
|
16
|
+
ShellChunkStatus2[ShellChunkStatus2["FINIESH"] = 1] = "FINIESH";
|
|
18
17
|
})(ShellChunkStatus || (ShellChunkStatus = {}));
|
|
19
18
|
function renderToPipe(rootElement, context, options) {
|
|
20
|
-
let shellChunkStatus = ShellChunkStatus.
|
|
19
|
+
let shellChunkStatus = ShellChunkStatus.START;
|
|
21
20
|
const { ssrContext } = context;
|
|
21
|
+
const chunkVec = [];
|
|
22
22
|
const forUserPipe = (stream) => {
|
|
23
23
|
return new Promise((resolve) => {
|
|
24
24
|
let renderToPipeableStream;
|
|
@@ -28,6 +28,7 @@ function renderToPipe(rootElement, context, options) {
|
|
|
28
28
|
}
|
|
29
29
|
const { pipe } = renderToPipeableStream(rootElement, {
|
|
30
30
|
...options,
|
|
31
|
+
nonce: ssrContext === null || ssrContext === void 0 ? void 0 : ssrContext.nonce,
|
|
31
32
|
onShellReady() {
|
|
32
33
|
var _options_onShellReady;
|
|
33
34
|
const { shellAfter, shellBefore } = (0, _template.getTemplates)(context, _types.RenderLevel.SERVER_RENDER);
|
|
@@ -36,16 +37,13 @@ function renderToPipe(rootElement, context, options) {
|
|
|
36
37
|
transform(chunk, _encoding, callback) {
|
|
37
38
|
try {
|
|
38
39
|
if (shellChunkStatus !== ShellChunkStatus.FINIESH) {
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
}
|
|
44
|
-
if (shellChunkStatus === ShellChunkStatus.START && concatedChunk.endsWith(_common.ESCAPED_SHELL_STREAM_END_MARK)) {
|
|
45
|
-
concatedChunk = concatedChunk.replace(_common.ESCAPED_SHELL_STREAM_END_MARK, shellAfter);
|
|
40
|
+
chunkVec.push(chunk.toString());
|
|
41
|
+
let concatedChunk = chunkVec.join("");
|
|
42
|
+
if (concatedChunk.endsWith(_common.ESCAPED_SHELL_STREAM_END_MARK)) {
|
|
43
|
+
concatedChunk = concatedChunk.replace(_common.ESCAPED_SHELL_STREAM_END_MARK, "");
|
|
46
44
|
shellChunkStatus = ShellChunkStatus.FINIESH;
|
|
45
|
+
this.push(`${shellBefore}${concatedChunk}${shellAfter}`);
|
|
47
46
|
}
|
|
48
|
-
this.push(concatedChunk);
|
|
49
47
|
} else {
|
|
50
48
|
this.push(chunk);
|
|
51
49
|
}
|
|
@@ -11,12 +11,12 @@ const _common = require("../../../common");
|
|
|
11
11
|
const _template = require("./template");
|
|
12
12
|
var ShellChunkStatus;
|
|
13
13
|
(function(ShellChunkStatus2) {
|
|
14
|
-
ShellChunkStatus2[ShellChunkStatus2["
|
|
15
|
-
ShellChunkStatus2[ShellChunkStatus2["
|
|
16
|
-
ShellChunkStatus2[ShellChunkStatus2["FINIESH"] = 2] = "FINIESH";
|
|
14
|
+
ShellChunkStatus2[ShellChunkStatus2["START"] = 0] = "START";
|
|
15
|
+
ShellChunkStatus2[ShellChunkStatus2["FINIESH"] = 1] = "FINIESH";
|
|
17
16
|
})(ShellChunkStatus || (ShellChunkStatus = {}));
|
|
18
17
|
function renderToPipe(rootElement, context, options) {
|
|
19
|
-
let shellChunkStatus = ShellChunkStatus.
|
|
18
|
+
let shellChunkStatus = ShellChunkStatus.START;
|
|
19
|
+
const chunkVec = [];
|
|
20
20
|
const { ssrContext } = context;
|
|
21
21
|
const forUserPipe = async () => {
|
|
22
22
|
let renderToReadableStream;
|
|
@@ -28,6 +28,7 @@ function renderToPipe(rootElement, context, options) {
|
|
|
28
28
|
try {
|
|
29
29
|
const readableOriginal = await renderToReadableStream(rootElement, {
|
|
30
30
|
...options,
|
|
31
|
+
nonce: ssrContext === null || ssrContext === void 0 ? void 0 : ssrContext.nonce,
|
|
31
32
|
onError(error) {
|
|
32
33
|
var _options_onError;
|
|
33
34
|
ssrContext.logger.error("An error occurs during streaming SSR", error);
|
|
@@ -45,14 +46,13 @@ function renderToPipe(rootElement, context, options) {
|
|
|
45
46
|
return;
|
|
46
47
|
}
|
|
47
48
|
if (shellChunkStatus !== ShellChunkStatus.FINIESH) {
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
if (shellChunkStatus === ShellChunkStatus.START && concatedChunk.endsWith(_common.ESCAPED_SHELL_STREAM_END_MARK)) {
|
|
54
|
-
concatedChunk = concatedChunk.replace(_common.ESCAPED_SHELL_STREAM_END_MARK, shellAfter);
|
|
49
|
+
const chunk = new TextDecoder().decode(value);
|
|
50
|
+
chunkVec.push(chunk);
|
|
51
|
+
let concatedChunk = chunkVec.join("");
|
|
52
|
+
if (concatedChunk.endsWith(_common.ESCAPED_SHELL_STREAM_END_MARK)) {
|
|
53
|
+
concatedChunk = concatedChunk.replace(_common.ESCAPED_SHELL_STREAM_END_MARK, "");
|
|
55
54
|
shellChunkStatus = ShellChunkStatus.FINIESH;
|
|
55
|
+
controller.enqueue(encodeForWebStream(`${shellBefore}${concatedChunk}${shellAfter}`));
|
|
56
56
|
}
|
|
57
57
|
controller.enqueue(encodeForWebStream(concatedChunk));
|
|
58
58
|
} else {
|