@modern-js/runtime 1.21.2 → 2.0.0-beta.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 +52 -0
- package/dist/js/modern/cli/index.js +1 -1
- package/dist/js/modern/core/index.js +1 -1
- package/dist/js/modern/index.js +1 -0
- package/dist/js/modern/router/cli/index.js +24 -8
- package/dist/js/modern/router/runtime/index.js +1 -1
- package/dist/js/modern/router/runtime/plugin.js +26 -44
- package/dist/js/modern/router/runtime/plugin.node.js +143 -0
- package/dist/js/modern/router/runtime/types.js +1 -0
- package/dist/js/modern/router/runtime/utils.js +97 -37
- package/dist/js/modern/router/runtime/withRouter.js +22 -0
- package/dist/js/modern/runtime-context.js +2 -1
- package/dist/js/modern/ssr/cli/index.js +44 -5
- package/dist/js/modern/ssr/index.js +67 -43
- package/dist/js/modern/ssr/index.node.js +6 -2
- package/dist/js/modern/ssr/serverRender/index.js +12 -26
- package/dist/js/modern/ssr/serverRender/renderToStream/buildTemplate.after.js +38 -0
- package/dist/js/modern/ssr/serverRender/renderToStream/buildTemplate.share.js +5 -0
- package/dist/js/modern/ssr/serverRender/renderToStream/bulidTemplate.before.js +24 -0
- package/dist/js/modern/ssr/serverRender/renderToStream/index.js +73 -0
- package/dist/js/modern/ssr/serverRender/renderToStream/loadable.js +26 -0
- package/dist/js/modern/ssr/serverRender/renderToStream/renderToPipe.js +61 -0
- package/dist/js/modern/ssr/serverRender/renderToStream/styledComponent.js +11 -0
- package/dist/js/modern/ssr/serverRender/renderToStream/template.js +22 -0
- package/dist/js/modern/ssr/serverRender/renderToStream/type.js +0 -0
- package/dist/js/modern/ssr/serverRender/{entry.js → renderToString/entry.js} +4 -6
- package/dist/js/modern/ssr/serverRender/renderToString/index.js +31 -0
- package/dist/js/modern/ssr/serverRender/{loadable.js → renderToString/loadable.js} +5 -13
- package/dist/js/modern/ssr/serverRender/{reduce.js → renderToString/reduce.js} +0 -0
- package/dist/js/modern/ssr/serverRender/{styledComponent.js → renderToString/styledComponent.js} +0 -0
- package/dist/js/modern/ssr/serverRender/{template.js → renderToString/template.js} +0 -0
- package/dist/js/modern/ssr/serverRender/{type.js → renderToString/type.js} +0 -1
- package/dist/js/modern/ssr/serverRender/types.js +2 -0
- package/dist/js/modern/ssr/serverRender/utils.js +24 -0
- package/dist/js/modern/ssr/utils.js +9 -3
- package/dist/js/node/cli/index.js +1 -1
- package/dist/js/node/core/index.js +8 -1
- package/dist/js/node/index.js +8 -0
- package/dist/js/node/router/cli/index.js +24 -8
- package/dist/js/node/router/runtime/index.js +4 -4
- package/dist/js/node/router/runtime/plugin.js +24 -49
- package/dist/js/node/router/runtime/plugin.node.js +169 -0
- package/dist/js/node/router/runtime/types.js +5 -0
- package/dist/js/node/router/runtime/utils.js +97 -35
- package/dist/js/node/router/runtime/withRouter.js +35 -0
- package/dist/js/node/runtime-context.js +4 -2
- package/dist/js/node/ssr/cli/index.js +43 -5
- package/dist/js/node/ssr/index.js +66 -43
- package/dist/js/node/ssr/index.node.js +7 -3
- package/dist/js/node/ssr/serverRender/index.js +13 -35
- package/dist/js/node/ssr/serverRender/renderToStream/buildTemplate.after.js +49 -0
- package/dist/js/node/ssr/serverRender/renderToStream/buildTemplate.share.js +14 -0
- package/dist/js/node/ssr/serverRender/renderToStream/bulidTemplate.before.js +37 -0
- package/dist/js/node/ssr/serverRender/renderToStream/index.js +90 -0
- package/dist/js/node/ssr/serverRender/renderToStream/loadable.js +34 -0
- package/dist/js/node/ssr/serverRender/renderToStream/renderToPipe.js +70 -0
- package/dist/js/node/ssr/serverRender/renderToStream/styledComponent.js +19 -0
- package/dist/js/node/ssr/serverRender/renderToStream/template.js +32 -0
- package/dist/js/node/ssr/serverRender/renderToStream/type.js +0 -0
- package/dist/js/node/ssr/serverRender/{entry.js → renderToString/entry.js} +13 -15
- package/dist/js/node/ssr/serverRender/renderToString/index.js +47 -0
- package/dist/js/node/ssr/serverRender/{loadable.js → renderToString/loadable.js} +7 -14
- package/dist/js/node/ssr/serverRender/{reduce.js → renderToString/reduce.js} +0 -0
- package/dist/js/node/ssr/serverRender/{styledComponent.js → renderToString/styledComponent.js} +0 -0
- package/dist/js/node/ssr/serverRender/{template.js → renderToString/template.js} +0 -0
- package/dist/js/node/ssr/serverRender/{type.js → renderToString/type.js} +0 -1
- package/dist/js/node/ssr/serverRender/types.js +13 -0
- package/dist/js/node/ssr/serverRender/utils.js +34 -0
- package/dist/js/node/ssr/utils.js +13 -4
- package/dist/js/treeshaking/cli/index.js +1 -1
- package/dist/js/treeshaking/core/index.js +1 -1
- package/dist/js/treeshaking/index.js +1 -0
- package/dist/js/treeshaking/router/cli/index.js +24 -8
- package/dist/js/treeshaking/router/runtime/index.js +1 -1
- package/dist/js/treeshaking/router/runtime/plugin.js +25 -43
- package/dist/js/treeshaking/router/runtime/plugin.node.js +174 -0
- package/dist/js/treeshaking/router/runtime/types.js +1 -0
- package/dist/js/treeshaking/router/runtime/utils.js +100 -36
- package/dist/js/treeshaking/router/runtime/withRouter.js +17 -0
- package/dist/js/treeshaking/runtime-context.js +2 -1
- package/dist/js/treeshaking/ssr/cli/index.js +47 -5
- package/dist/js/treeshaking/ssr/index.js +74 -45
- package/dist/js/treeshaking/ssr/index.node.js +6 -2
- package/dist/js/treeshaking/ssr/serverRender/index.js +41 -55
- package/dist/js/treeshaking/ssr/serverRender/renderToStream/buildTemplate.after.js +33 -0
- package/dist/js/treeshaking/ssr/serverRender/renderToStream/buildTemplate.share.js +7 -0
- package/dist/js/treeshaking/ssr/serverRender/renderToStream/bulidTemplate.before.js +29 -0
- package/dist/js/treeshaking/ssr/serverRender/renderToStream/index.js +120 -0
- package/dist/js/treeshaking/ssr/serverRender/renderToStream/loadable.js +24 -0
- package/dist/js/treeshaking/ssr/serverRender/renderToStream/renderToPipe.js +57 -0
- package/dist/js/treeshaking/ssr/serverRender/renderToStream/styledComponent.js +10 -0
- package/dist/js/treeshaking/ssr/serverRender/renderToStream/template.js +29 -0
- package/dist/js/treeshaking/ssr/serverRender/renderToStream/type.js +0 -0
- package/dist/js/treeshaking/ssr/serverRender/{entry.js → renderToString/entry.js} +3 -3
- package/dist/js/treeshaking/ssr/serverRender/renderToString/index.js +48 -0
- package/dist/js/treeshaking/ssr/serverRender/{loadable.js → renderToString/loadable.js} +5 -17
- package/dist/js/treeshaking/ssr/serverRender/{reduce.js → renderToString/reduce.js} +0 -0
- package/dist/js/treeshaking/ssr/serverRender/{styledComponent.js → renderToString/styledComponent.js} +0 -0
- package/dist/js/treeshaking/ssr/serverRender/{template.js → renderToString/template.js} +0 -0
- package/dist/js/treeshaking/ssr/serverRender/{type.js → renderToString/type.js} +0 -1
- package/dist/js/treeshaking/ssr/serverRender/types.js +2 -0
- package/dist/js/treeshaking/ssr/serverRender/{measure.js → utils.js} +16 -0
- package/dist/js/treeshaking/ssr/utils.js +15 -3
- package/dist/types/common.d.ts +0 -2
- package/dist/types/core/index.d.ts +1 -1
- package/dist/types/core/plugin.d.ts +1 -1
- package/dist/types/exports/server.d.ts +21 -1
- package/dist/types/index.d.ts +1 -0
- package/dist/types/router/runtime/DefaultNotFound.d.ts +1 -0
- package/dist/types/router/runtime/index.d.ts +3 -3
- package/dist/types/router/runtime/plugin.d.ts +2 -45
- package/dist/types/router/runtime/plugin.node.d.ts +8 -0
- package/dist/types/router/runtime/types.d.ts +38 -0
- package/dist/types/router/runtime/utils.d.ts +5 -2
- package/dist/types/router/runtime/withRouter.d.ts +8 -0
- package/dist/types/runtime-context.d.ts +2 -1
- package/dist/types/ssr/index.d.ts +2 -2
- package/dist/types/ssr/index.node.d.ts +1 -1
- package/dist/types/ssr/react/nossr/index.d.ts +3 -1
- package/dist/types/ssr/serverRender/index.d.ts +2 -3
- package/dist/types/ssr/serverRender/renderToStream/buildTemplate.after.d.ts +6 -0
- package/dist/types/ssr/serverRender/renderToStream/buildTemplate.share.d.ts +3 -0
- package/dist/types/ssr/serverRender/renderToStream/bulidTemplate.before.d.ts +1 -0
- package/dist/types/ssr/serverRender/renderToStream/index.d.ts +6 -0
- package/dist/types/ssr/serverRender/renderToStream/loadable.d.ts +16 -0
- package/dist/types/ssr/serverRender/renderToStream/renderToPipe.d.ts +8 -0
- package/dist/types/ssr/serverRender/renderToStream/styledComponent.d.ts +12 -0
- package/dist/types/ssr/serverRender/renderToStream/template.d.ts +3 -0
- package/dist/types/ssr/serverRender/renderToStream/type.d.ts +4 -0
- package/dist/types/ssr/serverRender/{entry.d.ts → renderToString/entry.d.ts} +2 -2
- package/dist/types/ssr/serverRender/renderToString/index.d.ts +6 -0
- package/dist/types/ssr/serverRender/{loadable.d.ts → renderToString/loadable.d.ts} +0 -0
- package/dist/types/ssr/serverRender/{reduce.d.ts → renderToString/reduce.d.ts} +0 -0
- package/dist/types/ssr/serverRender/{styledComponent.d.ts → renderToString/styledComponent.d.ts} +0 -0
- package/dist/types/ssr/serverRender/{template.d.ts → renderToString/template.d.ts} +0 -0
- package/dist/types/ssr/serverRender/{type.d.ts → renderToString/type.d.ts} +1 -8
- package/dist/types/ssr/serverRender/types.d.ts +18 -0
- package/dist/types/ssr/serverRender/utils.d.ts +3 -0
- package/dist/types/ssr/utils.d.ts +4 -2
- package/dist/types/state/runtime/plugin.d.ts +1 -1
- package/package.json +57 -73
- package/types/index.d.ts +13 -0
- package/types/router.d.ts +14 -0
- package/dist/js/modern/ssr/serverRender/measure.js +0 -11
- package/dist/js/node/ssr/serverRender/measure.js +0 -20
- package/dist/types/ssr/serverRender/measure.d.ts +0 -1
- package/lib/types.d.ts +0 -10
- package/type.d.ts +0 -5
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,57 @@
|
|
|
1
1
|
# @modern-js/runtime
|
|
2
2
|
|
|
3
|
+
## 2.0.0-beta.0
|
|
4
|
+
|
|
5
|
+
### Major Changes
|
|
6
|
+
|
|
7
|
+
- dda38c9: chore: v2
|
|
8
|
+
|
|
9
|
+
### Minor Changes
|
|
10
|
+
|
|
11
|
+
- c9e800d39: feat: support React18 streaming SSR
|
|
12
|
+
feat: 支持 React18 流式 SSR
|
|
13
|
+
- 543be95: feat: compile server loader and support handle loader request
|
|
14
|
+
feat: 编译 server loader 并支持处理 loader 的请求
|
|
15
|
+
|
|
16
|
+
### Patch Changes
|
|
17
|
+
|
|
18
|
+
- b18fa8f: feat: remove @loadable/component in streaming ssr
|
|
19
|
+
feat: 移除 streaming ssr 中的 @loadable/component 逻辑
|
|
20
|
+
- a2509bf: feat: bump esbuild from 0.14.38 to 0.15.7
|
|
21
|
+
|
|
22
|
+
feat: 将 esbuild 从 0.14.38 版本升级至 0.15.7 版本
|
|
23
|
+
|
|
24
|
+
- 4369648ae: fix: fix html template of streaming ssr
|
|
25
|
+
fix: 修复流式渲染的 html 模版
|
|
26
|
+
- 6bda14ed7: feat: refactor router with react-router@6.4
|
|
27
|
+
|
|
28
|
+
feat: 使用 react-router@6.4 重构路由模块
|
|
29
|
+
|
|
30
|
+
- 60d5378: fix: function extname should not return array
|
|
31
|
+
fix: 函数 extname 不应该返回一个数组
|
|
32
|
+
- 8b8e1bb57: feat: support nested routes
|
|
33
|
+
feat: 支持嵌套路由
|
|
34
|
+
- 3bbea92b2: feat: support Hook、Middleware new API
|
|
35
|
+
feat: 支持 Hook、Middleware 的新 API
|
|
36
|
+
- fcace5b5b: fix: remove overmuch `@modernjs/utils` dependency import in ssr runtime & SSR hydrate error
|
|
37
|
+
fix: 去除 ssr 运行时过多的 `@modernjs/utils` 依赖引入 & SSR hydrate 错误
|
|
38
|
+
- Updated dependencies [edd1cfb1a]
|
|
39
|
+
- Updated dependencies [cc971eabf]
|
|
40
|
+
- Updated dependencies [5b9049f]
|
|
41
|
+
- Updated dependencies [6bda14ed7]
|
|
42
|
+
- Updated dependencies [b8bbe036c]
|
|
43
|
+
- Updated dependencies [d5a31df78]
|
|
44
|
+
- Updated dependencies [dda38c9]
|
|
45
|
+
- Updated dependencies [102d32e4b]
|
|
46
|
+
- Updated dependencies [8b8e1bb57]
|
|
47
|
+
- Updated dependencies [3bbea92b2]
|
|
48
|
+
- Updated dependencies [abf3421]
|
|
49
|
+
- Updated dependencies [543be95]
|
|
50
|
+
- Updated dependencies [14b712d]
|
|
51
|
+
- @modern-js/utils@2.0.0-beta.0
|
|
52
|
+
- @modern-js/types@2.0.0-beta.0
|
|
53
|
+
- @modern-js/plugin@2.0.0-beta.0
|
|
54
|
+
|
|
3
55
|
## 1.21.2
|
|
4
56
|
|
|
5
57
|
### Patch Changes
|
|
@@ -6,7 +6,7 @@ import PluginRouter from "../router/cli";
|
|
|
6
6
|
export default (() => ({
|
|
7
7
|
name: '@modern-js/runtime',
|
|
8
8
|
post: ['@modern-js/plugin-router', '@modern-js/plugin-ssr', '@modern-js/plugin-state', '@modern-js/plugin-design-token'],
|
|
9
|
-
usePlugins: [PluginState(),
|
|
9
|
+
usePlugins: [PluginState(), PluginSSR(), PluginRouter()],
|
|
10
10
|
setup: api => {
|
|
11
11
|
return {
|
|
12
12
|
config() {
|
|
@@ -2,6 +2,6 @@ export { createPlugin, createRuntime, runtime, registerInit, registerPrefetch }
|
|
|
2
2
|
export { defineConfig, getConfig } from "./app-config"; // compatible
|
|
3
3
|
|
|
4
4
|
export * from "./compatible";
|
|
5
|
-
export { RuntimeReactContext } from "../runtime-context";
|
|
5
|
+
export { RuntimeReactContext, ServerRouterContext } from "../runtime-context";
|
|
6
6
|
export * from "./loader";
|
|
7
7
|
export * from '@modern-js/plugin';
|
package/dist/js/modern/index.js
CHANGED
|
@@ -34,11 +34,14 @@ export default (() => ({
|
|
|
34
34
|
entrypoint,
|
|
35
35
|
imports
|
|
36
36
|
}) {
|
|
37
|
+
var _userConfig$runtime, _userConfig$runtime$r;
|
|
38
|
+
|
|
37
39
|
const {
|
|
38
40
|
entryName,
|
|
39
41
|
fileSystemRoutes
|
|
40
42
|
} = entrypoint;
|
|
41
43
|
const userConfig = api.useResolvedConfigContext();
|
|
44
|
+
const isLegacy = Boolean(userConfig === null || userConfig === void 0 ? void 0 : (_userConfig$runtime = userConfig.runtime) === null || _userConfig$runtime === void 0 ? void 0 : (_userConfig$runtime$r = _userConfig$runtime.router) === null || _userConfig$runtime$r === void 0 ? void 0 : _userConfig$runtime$r.legacy);
|
|
42
45
|
const {
|
|
43
46
|
packageName
|
|
44
47
|
} = api.useAppContext();
|
|
@@ -46,12 +49,14 @@ export default (() => ({
|
|
|
46
49
|
runtimeConfigMap.set(entryName, runtimeConfig);
|
|
47
50
|
|
|
48
51
|
if (runtimeConfig !== null && runtimeConfig !== void 0 && runtimeConfig.router) {
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
52
|
+
if (!isLegacy) {
|
|
53
|
+
imports.push({
|
|
54
|
+
value: '@modern-js/runtime/plugins',
|
|
55
|
+
specifiers: [{
|
|
56
|
+
imported: PLUGIN_IDENTIFIER
|
|
57
|
+
}]
|
|
58
|
+
});
|
|
59
|
+
}
|
|
55
60
|
} else if (fileSystemRoutes) {
|
|
56
61
|
throw new Error(`should enable runtime.router for entry ${entryName}`);
|
|
57
62
|
}
|
|
@@ -66,6 +71,8 @@ export default (() => ({
|
|
|
66
71
|
entrypoint,
|
|
67
72
|
plugins
|
|
68
73
|
}) {
|
|
74
|
+
var _userConfig$runtime2, _userConfig$runtime2$;
|
|
75
|
+
|
|
69
76
|
const {
|
|
70
77
|
entryName,
|
|
71
78
|
fileSystemRoutes
|
|
@@ -73,9 +80,11 @@ export default (() => ({
|
|
|
73
80
|
const {
|
|
74
81
|
serverRoutes
|
|
75
82
|
} = api.useAppContext();
|
|
83
|
+
const userConfig = api.useResolvedConfigContext();
|
|
84
|
+
const isLegacy = Boolean(userConfig === null || userConfig === void 0 ? void 0 : (_userConfig$runtime2 = userConfig.runtime) === null || _userConfig$runtime2 === void 0 ? void 0 : (_userConfig$runtime2$ = _userConfig$runtime2.router) === null || _userConfig$runtime2$ === void 0 ? void 0 : _userConfig$runtime2$.legacy);
|
|
76
85
|
const runtimeConfig = runtimeConfigMap.get(entryName);
|
|
77
86
|
|
|
78
|
-
if (runtimeConfig.router) {
|
|
87
|
+
if (runtimeConfig.router && !isLegacy) {
|
|
79
88
|
// Todo: plugin-router best to only handle manage client route.
|
|
80
89
|
// here support base server route usage, part for compatibility
|
|
81
90
|
const serverBase = serverRoutes.filter(route => route.entryName === entryName).map(route => route.urlPath).sort((a, b) => a.length - b.length > 0 ? -1 : 1);
|
|
@@ -96,7 +105,14 @@ export default (() => ({
|
|
|
96
105
|
},
|
|
97
106
|
|
|
98
107
|
addRuntimeExports() {
|
|
99
|
-
|
|
108
|
+
var _userConfig$runtime3, _userConfig$runtime3$;
|
|
109
|
+
|
|
110
|
+
const userConfig = api.useResolvedConfigContext();
|
|
111
|
+
const isLegacy = Boolean(userConfig === null || userConfig === void 0 ? void 0 : (_userConfig$runtime3 = userConfig.runtime) === null || _userConfig$runtime3 === void 0 ? void 0 : (_userConfig$runtime3$ = _userConfig$runtime3.router) === null || _userConfig$runtime3$ === void 0 ? void 0 : _userConfig$runtime3$.legacy);
|
|
112
|
+
|
|
113
|
+
if (!isLegacy) {
|
|
114
|
+
pluginsExportsUtils.addExport(`export { default as router } from '@modern-js/runtime/router'`);
|
|
115
|
+
}
|
|
100
116
|
}
|
|
101
117
|
|
|
102
118
|
};
|
|
@@ -4,23 +4,17 @@ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { va
|
|
|
4
4
|
|
|
5
5
|
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
6
6
|
|
|
7
|
-
import React
|
|
8
|
-
import {
|
|
9
|
-
import { Router, StaticRouter } from 'react-router-dom';
|
|
7
|
+
import React from 'react';
|
|
8
|
+
import { createBrowserRouter, createHashRouter, RouterProvider, createRoutesFromElements } from 'react-router-dom';
|
|
10
9
|
import hoistNonReactStatics from 'hoist-non-react-statics';
|
|
11
|
-
import {
|
|
12
|
-
import { isBrowser } from "../../common";
|
|
13
|
-
import { renderRoutes, getLocation, urlJoin } from "./utils";
|
|
10
|
+
import { renderRoutes } from "./utils";
|
|
14
11
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
15
12
|
export const routerPlugin = ({
|
|
16
13
|
serverBase: _serverBase = [],
|
|
17
|
-
history: customHistory,
|
|
18
14
|
supportHtml5History: _supportHtml5History = true,
|
|
19
15
|
routesConfig,
|
|
20
|
-
|
|
16
|
+
createRoutes
|
|
21
17
|
}) => {
|
|
22
|
-
const isBrow = isBrowser();
|
|
23
|
-
|
|
24
18
|
const select = pathname => _serverBase.find(baseUrl => pathname.search(baseUrl) === 0) || '/';
|
|
25
19
|
|
|
26
20
|
return {
|
|
@@ -30,49 +24,37 @@ export const routerPlugin = ({
|
|
|
30
24
|
hoc: ({
|
|
31
25
|
App
|
|
32
26
|
}, next) => {
|
|
27
|
+
// can not get routes config, skip wrapping React Router.
|
|
28
|
+
// e.g. App.tsx as the entrypoint
|
|
29
|
+
if (!routesConfig) {
|
|
30
|
+
return next({
|
|
31
|
+
App
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
|
|
33
35
|
const getRouteApp = () => {
|
|
34
|
-
|
|
36
|
+
return props => {
|
|
35
37
|
var _window$_SERVER_DATA;
|
|
36
38
|
|
|
39
|
+
const routeElements = renderRoutes(routesConfig);
|
|
40
|
+
const routes = createRoutes ? createRoutes() : createRoutesFromElements(routeElements);
|
|
37
41
|
const baseUrl = ((_window$_SERVER_DATA = window._SERVER_DATA) === null || _window$_SERVER_DATA === void 0 ? void 0 : _window$_SERVER_DATA.router.baseUrl) || select(location.pathname);
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
children: /*#__PURE__*/_jsx(App, _objectSpread(_objectSpread({}, props), {}, {
|
|
43
|
-
children: routesConfig ? renderRoutes(routesConfig, props) : null
|
|
44
|
-
}))
|
|
45
|
-
});
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
return props => {
|
|
49
|
-
const runtimeContext = useContext(RuntimeReactContext);
|
|
50
|
-
const {
|
|
51
|
-
ssrContext
|
|
52
|
-
} = runtimeContext;
|
|
53
|
-
const location = getLocation(ssrContext);
|
|
54
|
-
const routerContext = (ssrContext === null || ssrContext === void 0 ? void 0 : ssrContext.redirection) || {};
|
|
55
|
-
const request = ssrContext === null || ssrContext === void 0 ? void 0 : ssrContext.request;
|
|
56
|
-
const baseUrl = request === null || request === void 0 ? void 0 : request.baseUrl;
|
|
57
|
-
const basename = baseUrl === '/' ? urlJoin(baseUrl, _historyOptions.basename) : baseUrl;
|
|
58
|
-
return /*#__PURE__*/_jsx(StaticRouter, {
|
|
59
|
-
basename: basename === '/' ? '' : basename,
|
|
60
|
-
location: location,
|
|
61
|
-
context: routerContext,
|
|
62
|
-
children: /*#__PURE__*/_jsx(App, _objectSpread(_objectSpread({}, props), {}, {
|
|
63
|
-
children: routesConfig ? renderRoutes(routesConfig, props) : null
|
|
64
|
-
}))
|
|
42
|
+
const router = _supportHtml5History ? createBrowserRouter(routes, {
|
|
43
|
+
basename: baseUrl
|
|
44
|
+
}) : createHashRouter(routes, {
|
|
45
|
+
basename: baseUrl
|
|
65
46
|
});
|
|
47
|
+
return /*#__PURE__*/_jsx(App, _objectSpread(_objectSpread({}, props), {}, {
|
|
48
|
+
children: /*#__PURE__*/_jsx(RouterProvider, {
|
|
49
|
+
router: router
|
|
50
|
+
})
|
|
51
|
+
}));
|
|
66
52
|
};
|
|
67
53
|
};
|
|
68
54
|
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
if (App) {
|
|
72
|
-
RouteApp = hoistNonReactStatics(RouteApp, App);
|
|
73
|
-
}
|
|
55
|
+
const RouteApp = getRouteApp();
|
|
74
56
|
|
|
75
|
-
if (routesConfig
|
|
57
|
+
if (routesConfig.globalApp) {
|
|
76
58
|
return next({
|
|
77
59
|
App: hoistNonReactStatics(RouteApp, routesConfig.globalApp)
|
|
78
60
|
});
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
2
|
+
|
|
3
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
4
|
+
|
|
5
|
+
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
6
|
+
|
|
7
|
+
import React, { useContext } from 'react';
|
|
8
|
+
import { unstable_createStaticHandler as createStaticHandler } from '@remix-run/router';
|
|
9
|
+
import { unstable_createStaticRouter as createStaticRouter, unstable_StaticRouterProvider as StaticRouterProvider } from 'react-router-dom/server';
|
|
10
|
+
import hoistNonReactStatics from 'hoist-non-react-statics';
|
|
11
|
+
import { installGlobals } from '@remix-run/node';
|
|
12
|
+
import { createRoutesFromElements } from 'react-router-dom';
|
|
13
|
+
import { RuntimeReactContext } from "../../core";
|
|
14
|
+
import { renderRoutes } from "./utils"; // Polyfill Web Fetch API
|
|
15
|
+
|
|
16
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
17
|
+
installGlobals(); // TODO: polish
|
|
18
|
+
|
|
19
|
+
function createFetchRequest(req) {
|
|
20
|
+
// const origin = `${req.protocol}://${req.get('host')}`;
|
|
21
|
+
const origin = `${req.protocol}://${req.host}`; // Note: This had to take originalUrl into account for presumably vite's proxying
|
|
22
|
+
|
|
23
|
+
const url = new URL(req.originalUrl || req.url, origin);
|
|
24
|
+
const controller = new AbortController(); // req.on('close', () => {
|
|
25
|
+
// controller.abort();
|
|
26
|
+
// });
|
|
27
|
+
|
|
28
|
+
const init = {
|
|
29
|
+
method: req.method,
|
|
30
|
+
headers: createFetchHeaders(req.headers),
|
|
31
|
+
signal: controller.signal
|
|
32
|
+
}; // if (req.method !== 'GET' && req.method !== 'HEAD') {
|
|
33
|
+
// init.body = req.body;
|
|
34
|
+
// }
|
|
35
|
+
|
|
36
|
+
return new Request(url.href, init);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export function createFetchHeaders(requestHeaders) {
|
|
40
|
+
const headers = new Headers();
|
|
41
|
+
|
|
42
|
+
for (const [key, values] of Object.entries(requestHeaders)) {
|
|
43
|
+
if (values) {
|
|
44
|
+
if (Array.isArray(values)) {
|
|
45
|
+
for (const value of values) {
|
|
46
|
+
headers.append(key, value);
|
|
47
|
+
}
|
|
48
|
+
} else {
|
|
49
|
+
headers.set(key, values);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
return headers;
|
|
55
|
+
}
|
|
56
|
+
export const routerPlugin = ({
|
|
57
|
+
routesConfig,
|
|
58
|
+
createRoutes
|
|
59
|
+
}) => {
|
|
60
|
+
return {
|
|
61
|
+
name: '@modern-js/plugin-router',
|
|
62
|
+
setup: () => {
|
|
63
|
+
return {
|
|
64
|
+
async init({
|
|
65
|
+
context
|
|
66
|
+
}, next) {
|
|
67
|
+
// can not get routes config, skip wrapping React Router.
|
|
68
|
+
// e.g. App.tsx as the entrypoint
|
|
69
|
+
if (!routesConfig) {
|
|
70
|
+
return next({
|
|
71
|
+
context
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
const {
|
|
76
|
+
request
|
|
77
|
+
} = context.ssrContext;
|
|
78
|
+
const routeElements = renderRoutes(routesConfig);
|
|
79
|
+
const routes = createRoutes ? createRoutes() : createRoutesFromElements(routeElements);
|
|
80
|
+
const {
|
|
81
|
+
query
|
|
82
|
+
} = createStaticHandler(routes);
|
|
83
|
+
const remixRequest = createFetchRequest(request);
|
|
84
|
+
const routerContext = await query(remixRequest);
|
|
85
|
+
|
|
86
|
+
if (routerContext instanceof Response) {
|
|
87
|
+
// TODO: resolve repsonse ?
|
|
88
|
+
return next({
|
|
89
|
+
context
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
const router = createStaticRouter(routes, routerContext);
|
|
94
|
+
context.router = router;
|
|
95
|
+
context.routerContext = routerContext;
|
|
96
|
+
return next({
|
|
97
|
+
context
|
|
98
|
+
});
|
|
99
|
+
},
|
|
100
|
+
|
|
101
|
+
hoc: ({
|
|
102
|
+
App
|
|
103
|
+
}, next) => {
|
|
104
|
+
// can not get routes config, skip wrapping React Router.
|
|
105
|
+
// e.g. App.tsx as the entrypoint
|
|
106
|
+
if (!routesConfig) {
|
|
107
|
+
return next({
|
|
108
|
+
App
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
const getRouteApp = () => {
|
|
113
|
+
return props => {
|
|
114
|
+
const {
|
|
115
|
+
router,
|
|
116
|
+
routerContext
|
|
117
|
+
} = useContext(RuntimeReactContext);
|
|
118
|
+
return /*#__PURE__*/_jsx(App, _objectSpread(_objectSpread({}, props), {}, {
|
|
119
|
+
children: /*#__PURE__*/_jsx(StaticRouterProvider, {
|
|
120
|
+
router: router,
|
|
121
|
+
context: routerContext,
|
|
122
|
+
nonce: "the-nonce"
|
|
123
|
+
})
|
|
124
|
+
}));
|
|
125
|
+
};
|
|
126
|
+
};
|
|
127
|
+
|
|
128
|
+
const RouteApp = getRouteApp();
|
|
129
|
+
|
|
130
|
+
if (routesConfig.globalApp) {
|
|
131
|
+
return next({
|
|
132
|
+
App: hoistNonReactStatics(RouteApp, routesConfig.globalApp)
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
return next({
|
|
137
|
+
App: RouteApp
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
};
|
|
143
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -1,28 +1,80 @@
|
|
|
1
1
|
const _excluded = ["Component"];
|
|
2
2
|
|
|
3
|
+
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
|
|
4
|
+
|
|
5
|
+
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
|
|
6
|
+
|
|
3
7
|
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
4
8
|
|
|
5
9
|
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
6
10
|
|
|
7
11
|
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
8
12
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
|
|
12
|
-
|
|
13
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
14
|
-
import React from 'react';
|
|
15
|
-
import { Route, matchPath } from 'react-router-dom';
|
|
13
|
+
import React, { Suspense } from 'react';
|
|
14
|
+
import { Route } from 'react-router-dom';
|
|
16
15
|
import { DefaultNotFound } from "./DefaultNotFound";
|
|
17
16
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
18
|
-
|
|
17
|
+
|
|
18
|
+
const renderNestedRoute = (nestedRoute, parent) => {
|
|
19
|
+
const {
|
|
20
|
+
children,
|
|
21
|
+
index,
|
|
22
|
+
id,
|
|
23
|
+
component: Component
|
|
24
|
+
} = nestedRoute;
|
|
25
|
+
const childElements = children === null || children === void 0 ? void 0 : children.map(childRoute => {
|
|
26
|
+
return renderNestedRoute(childRoute, nestedRoute);
|
|
27
|
+
});
|
|
28
|
+
const routeProps = {
|
|
29
|
+
caseSensitive: nestedRoute.caseSensitive,
|
|
30
|
+
path: nestedRoute.path,
|
|
31
|
+
id: nestedRoute.id,
|
|
32
|
+
loader: nestedRoute.loader,
|
|
33
|
+
action: nestedRoute.action,
|
|
34
|
+
hasErrorBoundary: nestedRoute.hasErrorBoundary,
|
|
35
|
+
shouldRevalidate: nestedRoute.shouldRevalidate,
|
|
36
|
+
handle: nestedRoute.handle,
|
|
37
|
+
index: nestedRoute.index,
|
|
38
|
+
errorElement: nestedRoute.errorElement
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
if (nestedRoute.error) {
|
|
42
|
+
const errorElement = /*#__PURE__*/_jsx(nestedRoute.error, {});
|
|
43
|
+
|
|
44
|
+
routeProps.errorElement = errorElement;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
if (Component) {
|
|
48
|
+
if (parent !== null && parent !== void 0 && parent.loading) {
|
|
49
|
+
const Loading = parent.loading;
|
|
50
|
+
routeProps.element = /*#__PURE__*/_jsx(Suspense, {
|
|
51
|
+
fallback: /*#__PURE__*/_jsx(Loading, {}),
|
|
52
|
+
children: /*#__PURE__*/_jsx(Component, {})
|
|
53
|
+
});
|
|
54
|
+
} else {
|
|
55
|
+
routeProps.element = /*#__PURE__*/_jsx(Suspense, {
|
|
56
|
+
children: /*#__PURE__*/_jsx(Component, {})
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
const routeElement = index ? /*#__PURE__*/_jsx(Route, _objectSpread(_objectSpread({}, routeProps), {}, {
|
|
62
|
+
index: true
|
|
63
|
+
}), id) : /*#__PURE__*/_jsx(Route, _objectSpread(_objectSpread({}, routeProps), {}, {
|
|
64
|
+
index: false,
|
|
65
|
+
children: childElements
|
|
66
|
+
}), id);
|
|
67
|
+
return routeElement;
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
export function getRouteComponents(routes, globalApp) {
|
|
19
71
|
const Layout = _ref => {
|
|
20
72
|
let {
|
|
21
73
|
Component
|
|
22
74
|
} = _ref,
|
|
23
75
|
props = _objectWithoutProperties(_ref, _excluded);
|
|
24
76
|
|
|
25
|
-
const GlobalLayout =
|
|
77
|
+
const GlobalLayout = globalApp;
|
|
26
78
|
|
|
27
79
|
if (!GlobalLayout) {
|
|
28
80
|
return /*#__PURE__*/_jsx(Component, _objectSpread({}, props));
|
|
@@ -33,38 +85,46 @@ export function renderRoutes(routesConfig, extraProps = {}) {
|
|
|
33
85
|
}, props));
|
|
34
86
|
};
|
|
35
87
|
|
|
36
|
-
const
|
|
37
|
-
var _routesConfig$routes;
|
|
88
|
+
const routeElements = [];
|
|
38
89
|
|
|
39
|
-
|
|
40
|
-
|
|
90
|
+
for (const route of routes) {
|
|
91
|
+
if (route.type === 'nested') {
|
|
92
|
+
const routeElement = renderNestedRoute(route);
|
|
93
|
+
routeElements.push(routeElement);
|
|
94
|
+
} else {
|
|
95
|
+
const routeElement = /*#__PURE__*/_jsx(Route, {
|
|
41
96
|
path: route.path,
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
});
|
|
47
|
-
};
|
|
97
|
+
element: /*#__PURE__*/_jsx(Layout, {
|
|
98
|
+
Component: route.component
|
|
99
|
+
})
|
|
100
|
+
}, route.path);
|
|
48
101
|
|
|
49
|
-
|
|
50
|
-
path: "/",
|
|
51
|
-
render: props => {
|
|
52
|
-
const matchedRoute = findMatchedRoute(props.location.pathname);
|
|
53
|
-
|
|
54
|
-
if (!matchedRoute) {
|
|
55
|
-
return /*#__PURE__*/_jsx(DefaultNotFound, {});
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
return /*#__PURE__*/_jsx(Route, {
|
|
59
|
-
path: matchedRoute.path,
|
|
60
|
-
exact: matchedRoute.exact,
|
|
61
|
-
sensitive: matchedRoute.sensitive,
|
|
62
|
-
render: routeProps => /*#__PURE__*/_jsx(Layout, _objectSpread(_objectSpread({
|
|
63
|
-
Component: matchedRoute.component
|
|
64
|
-
}, routeProps), extraProps))
|
|
65
|
-
});
|
|
102
|
+
routeElements.push(routeElement);
|
|
66
103
|
}
|
|
67
|
-
}
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
routeElements.push( /*#__PURE__*/_jsx(Route, {
|
|
107
|
+
path: "*",
|
|
108
|
+
element: /*#__PURE__*/_jsx(DefaultNotFound, {})
|
|
109
|
+
}, "*"));
|
|
110
|
+
return routeElements;
|
|
111
|
+
}
|
|
112
|
+
export function renderRoutes(routesConfig) {
|
|
113
|
+
if (!routesConfig) {
|
|
114
|
+
return null;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
const {
|
|
118
|
+
routes,
|
|
119
|
+
globalApp
|
|
120
|
+
} = routesConfig;
|
|
121
|
+
|
|
122
|
+
if (!routes) {
|
|
123
|
+
return null;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
const routeElements = getRouteComponents(routes, globalApp);
|
|
127
|
+
return routeElements;
|
|
68
128
|
}
|
|
69
129
|
export function getLocation(serverContext) {
|
|
70
130
|
var _url$replace;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
2
|
+
|
|
3
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
4
|
+
|
|
5
|
+
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
6
|
+
|
|
7
|
+
// legacy withRouter
|
|
8
|
+
import React from 'react';
|
|
9
|
+
import { useLocation, useNavigate, useParams } from 'react-router-dom';
|
|
10
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
11
|
+
export const withRouter = Component => {
|
|
12
|
+
return props => {
|
|
13
|
+
const location = useLocation();
|
|
14
|
+
const params = useParams();
|
|
15
|
+
const navigate = useNavigate();
|
|
16
|
+
return /*#__PURE__*/_jsx(Component, _objectSpread(_objectSpread({}, props), {}, {
|
|
17
|
+
location: location,
|
|
18
|
+
params: params,
|
|
19
|
+
navigate: navigate
|
|
20
|
+
}));
|
|
21
|
+
};
|
|
22
|
+
};
|