@modern-js/runtime 2.0.0-beta.0 → 2.0.0-beta.1
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 +77 -0
- package/dist/js/modern/cli/index.js +3 -5
- package/dist/js/modern/core/app-config.js +2 -1
- package/dist/js/modern/core/compatible.js +63 -46
- package/dist/js/modern/core/index.js +3 -2
- package/dist/js/modern/core/loader/loaderManager.js +12 -34
- package/dist/js/modern/core/loader/useLoader.js +8 -26
- package/dist/js/modern/core/plugin.js +6 -28
- package/dist/js/modern/document/Body.js +17 -0
- package/dist/js/modern/document/DocumentContext.js +6 -0
- package/dist/js/modern/document/DocumentStructrueContext.js +7 -0
- package/dist/js/modern/document/Head.js +24 -0
- package/dist/js/modern/document/Html.js +92 -0
- package/dist/js/modern/document/Root.js +31 -0
- package/dist/js/modern/document/Scripts.js +10 -0
- package/dist/js/modern/document/cli/index.js +130 -0
- package/dist/js/modern/document/constants.js +19 -0
- package/dist/js/modern/document/index.js +8 -0
- package/dist/js/modern/index.js +1 -1
- package/dist/js/modern/router/cli/index.js +0 -16
- package/dist/js/modern/router/runtime/plugin.js +0 -9
- package/dist/js/modern/router/runtime/plugin.node.js +18 -24
- package/dist/js/modern/router/runtime/root/index.js +19 -0
- package/dist/js/modern/router/runtime/root/load.js +61 -0
- package/dist/js/modern/router/runtime/utils.js +16 -35
- package/dist/js/modern/router/runtime/withRouter.js +1 -3
- package/dist/js/modern/ssr/cli/index.js +2 -23
- package/dist/js/modern/ssr/index.js +23 -34
- package/dist/js/modern/ssr/index.node.js +0 -13
- package/dist/js/modern/ssr/prefetch.js +0 -7
- package/dist/js/modern/ssr/react/prerender/index.js +2 -23
- package/dist/js/modern/ssr/react/prerender/util.js +2 -17
- package/dist/js/modern/ssr/react/withCallback/index.js +0 -1
- package/dist/js/modern/ssr/serverRender/helmet.js +12 -20
- package/dist/js/modern/ssr/serverRender/index.js +1 -2
- package/dist/js/modern/ssr/serverRender/renderToStream/buildTemplate.after.js +5 -5
- package/dist/js/modern/ssr/serverRender/renderToStream/bulidTemplate.before.js +45 -11
- package/dist/js/modern/ssr/serverRender/renderToStream/index.js +6 -39
- package/dist/js/modern/ssr/serverRender/renderToStream/loadable.js +0 -2
- package/dist/js/modern/ssr/serverRender/renderToStream/renderToPipe.js +26 -15
- package/dist/js/modern/ssr/serverRender/renderToStream/template.js +14 -18
- package/dist/js/modern/ssr/serverRender/renderToString/entry.js +2 -34
- package/dist/js/modern/ssr/serverRender/renderToString/index.js +0 -2
- package/dist/js/modern/ssr/serverRender/renderToString/loadable.js +0 -10
- package/dist/js/modern/ssr/serverRender/renderToString/reduce.js +0 -2
- package/dist/js/modern/ssr/serverRender/renderToString/template.js +0 -15
- package/dist/js/modern/ssr/serverRender/renderToString/type.js +0 -1
- package/dist/js/modern/ssr/serverRender/utils.js +2 -6
- package/dist/js/modern/ssr/utils.js +0 -11
- package/dist/js/modern/state/cli/index.js +0 -10
- package/dist/js/modern/state/runtime/plugin.js +1 -14
- package/dist/js/node/cli/index.js +3 -13
- package/dist/js/node/common.js +0 -2
- package/dist/js/node/core/app-config.js +2 -5
- package/dist/js/node/core/compatible.js +63 -64
- package/dist/js/node/core/index.js +0 -16
- package/dist/js/node/core/loader/index.js +0 -2
- package/dist/js/node/core/loader/loaderManager.js +12 -37
- package/dist/js/node/core/loader/useLoader.js +8 -31
- package/dist/js/node/core/plugin.js +5 -34
- package/dist/js/node/document/Body.js +26 -0
- package/dist/js/node/document/DocumentContext.js +14 -0
- package/dist/js/node/document/DocumentStructrueContext.js +15 -0
- package/dist/js/node/document/Head.js +33 -0
- package/dist/js/node/document/Html.js +98 -0
- package/dist/js/node/document/Root.js +41 -0
- package/dist/js/node/document/Scripts.js +17 -0
- package/dist/js/node/document/cli/index.js +140 -0
- package/dist/js/node/document/constants.js +36 -0
- package/dist/js/node/document/index.js +93 -0
- package/dist/js/node/exports/head.js +0 -5
- package/dist/js/node/exports/loadable.js +0 -5
- package/dist/js/node/exports/server.js +0 -2
- package/dist/js/node/exports/styled.js +0 -5
- package/dist/js/node/index.js +0 -8
- package/dist/js/node/router/cli/index.js +0 -20
- package/dist/js/node/router/index.js +0 -4
- package/dist/js/node/router/runtime/DefaultNotFound.js +1 -5
- package/dist/js/node/router/runtime/index.js +0 -5
- package/dist/js/node/router/runtime/plugin.js +0 -17
- package/dist/js/node/router/runtime/plugin.node.js +16 -38
- package/dist/js/node/router/runtime/root/index.js +26 -0
- package/dist/js/node/router/runtime/root/load.js +69 -0
- package/dist/js/node/router/runtime/utils.js +16 -44
- package/dist/js/node/router/runtime/withRouter.js +0 -9
- package/dist/js/node/runtime-context.js +0 -2
- package/dist/js/node/ssr/cli/index.js +2 -26
- package/dist/js/node/ssr/index.js +23 -45
- package/dist/js/node/ssr/index.node.js +0 -23
- package/dist/js/node/ssr/prefetch.js +0 -11
- package/dist/js/node/ssr/react/index.js +0 -2
- package/dist/js/node/ssr/react/nossr/index.js +0 -6
- package/dist/js/node/ssr/react/prerender/index.js +2 -30
- package/dist/js/node/ssr/react/prerender/util.js +2 -25
- package/dist/js/node/ssr/react/withCallback/index.js +1 -4
- package/dist/js/node/ssr/serverRender/helmet.js +13 -20
- package/dist/js/node/ssr/serverRender/index.js +1 -4
- package/dist/js/node/ssr/serverRender/renderToStream/buildTemplate.after.js +5 -9
- package/dist/js/node/ssr/serverRender/renderToStream/buildTemplate.share.js +0 -1
- package/dist/js/node/ssr/serverRender/renderToStream/bulidTemplate.before.js +43 -15
- package/dist/js/node/ssr/serverRender/renderToStream/index.js +6 -48
- package/dist/js/node/ssr/serverRender/renderToStream/loadable.js +0 -4
- package/dist/js/node/ssr/serverRender/renderToStream/renderToPipe.js +26 -17
- package/dist/js/node/ssr/serverRender/renderToStream/styledComponent.js +0 -2
- package/dist/js/node/ssr/serverRender/renderToStream/template.js +16 -23
- package/dist/js/node/ssr/serverRender/renderToString/entry.js +2 -51
- package/dist/js/node/ssr/serverRender/renderToString/index.js +0 -10
- package/dist/js/node/ssr/serverRender/renderToString/loadable.js +0 -14
- package/dist/js/node/ssr/serverRender/renderToString/reduce.js +0 -3
- package/dist/js/node/ssr/serverRender/renderToString/styledComponent.js +0 -3
- package/dist/js/node/ssr/serverRender/renderToString/template.js +0 -18
- package/dist/js/node/ssr/serverRender/renderToString/type.js +0 -1
- package/dist/js/node/ssr/serverRender/types.js +0 -1
- package/dist/js/node/ssr/serverRender/utils.js +2 -8
- package/dist/js/node/ssr/utils.js +0 -20
- package/dist/js/node/state/cli/index.js +0 -15
- package/dist/js/node/state/index.js +0 -4
- package/dist/js/node/state/plugins.js +0 -11
- package/dist/js/node/state/runtime/index.js +0 -7
- package/dist/js/node/state/runtime/plugin.js +1 -25
- package/dist/js/treeshaking/cli/index.js +3 -3
- package/dist/js/treeshaking/core/app-config.js +2 -1
- package/dist/js/treeshaking/core/compatible.js +66 -63
- package/dist/js/treeshaking/core/index.js +3 -2
- package/dist/js/treeshaking/core/loader/loaderManager.js +19 -51
- package/dist/js/treeshaking/core/loader/useLoader.js +11 -28
- package/dist/js/treeshaking/core/plugin.js +6 -51
- package/dist/js/treeshaking/document/Body.js +14 -0
- package/dist/js/treeshaking/document/DocumentContext.js +6 -0
- package/dist/js/treeshaking/document/DocumentStructrueContext.js +7 -0
- package/dist/js/treeshaking/document/Head.js +21 -0
- package/dist/js/treeshaking/document/Html.js +104 -0
- package/dist/js/treeshaking/document/Root.js +24 -0
- package/dist/js/treeshaking/document/Scripts.js +10 -0
- package/dist/js/treeshaking/document/cli/index.js +170 -0
- package/dist/js/treeshaking/document/constants.js +16 -0
- package/dist/js/treeshaking/document/index.js +8 -0
- package/dist/js/treeshaking/index.js +1 -1
- package/dist/js/treeshaking/router/cli/index.js +6 -18
- package/dist/js/treeshaking/router/runtime/plugin.js +5 -13
- package/dist/js/treeshaking/router/runtime/plugin.node.js +23 -36
- package/dist/js/treeshaking/router/runtime/root/index.js +17 -0
- package/dist/js/treeshaking/router/runtime/root/load.js +102 -0
- package/dist/js/treeshaking/router/runtime/utils.js +21 -39
- package/dist/js/treeshaking/router/runtime/withRouter.js +1 -0
- package/dist/js/treeshaking/ssr/cli/index.js +9 -31
- package/dist/js/treeshaking/ssr/index.js +26 -40
- package/dist/js/treeshaking/ssr/index.node.js +12 -29
- package/dist/js/treeshaking/ssr/prefetch.js +0 -13
- package/dist/js/treeshaking/ssr/react/nossr/index.js +3 -4
- package/dist/js/treeshaking/ssr/react/prerender/index.js +2 -21
- package/dist/js/treeshaking/ssr/react/prerender/util.js +3 -20
- package/dist/js/treeshaking/ssr/react/withCallback/index.js +1 -2
- package/dist/js/treeshaking/ssr/serverRender/helmet.js +12 -11
- package/dist/js/treeshaking/ssr/serverRender/index.js +1 -9
- package/dist/js/treeshaking/ssr/serverRender/renderToStream/buildTemplate.after.js +5 -6
- package/dist/js/treeshaking/ssr/serverRender/renderToStream/bulidTemplate.before.js +46 -15
- package/dist/js/treeshaking/ssr/serverRender/renderToStream/index.js +9 -79
- package/dist/js/treeshaking/ssr/serverRender/renderToStream/loadable.js +3 -5
- package/dist/js/treeshaking/ssr/serverRender/renderToStream/renderToPipe.js +46 -35
- package/dist/js/treeshaking/ssr/serverRender/renderToStream/template.js +17 -24
- package/dist/js/treeshaking/ssr/serverRender/renderToString/entry.js +20 -73
- package/dist/js/treeshaking/ssr/serverRender/renderToString/index.js +2 -6
- package/dist/js/treeshaking/ssr/serverRender/renderToString/loadable.js +5 -16
- package/dist/js/treeshaking/ssr/serverRender/renderToString/reduce.js +0 -2
- package/dist/js/treeshaking/ssr/serverRender/renderToString/template.js +2 -18
- package/dist/js/treeshaking/ssr/serverRender/renderToString/type.js +0 -1
- package/dist/js/treeshaking/ssr/serverRender/utils.js +5 -10
- package/dist/js/treeshaking/ssr/utils.js +8 -17
- package/dist/js/treeshaking/state/cli/index.js +3 -10
- package/dist/js/treeshaking/state/runtime/plugin.js +2 -10
- package/dist/types/cli/index.d.ts +0 -2
- package/dist/types/core/compatible.d.ts +5 -5
- package/dist/types/core/index.d.ts +1 -1
- 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 -13
- package/dist/types/document/Body.d.ts +4 -0
- package/dist/types/document/DocumentContext.d.ts +13 -0
- package/dist/types/document/DocumentStructrueContext.d.ts +10 -0
- package/dist/types/document/Head.d.ts +5 -0
- package/dist/types/document/Html.d.ts +4 -0
- package/dist/types/document/Root.d.ts +8 -0
- package/dist/types/document/Scripts.d.ts +2 -0
- package/dist/types/document/cli/index.d.ts +3 -0
- package/dist/types/document/constants.d.ts +14 -0
- package/dist/types/document/index.d.ts +8 -0
- package/dist/types/exports/server.d.ts +3 -3
- package/dist/types/index.d.ts +1 -1
- package/dist/types/router/cli/index.d.ts +0 -2
- package/dist/types/router/runtime/root/index.d.ts +8 -0
- package/dist/types/router/runtime/root/load.d.ts +22 -0
- package/dist/types/router/runtime/types.d.ts +0 -2
- package/dist/types/runtime-context.d.ts +1 -0
- package/dist/types/ssr/cli/index.d.ts +0 -2
- package/dist/types/ssr/prefetch.d.ts +2 -2
- package/dist/types/ssr/serverRender/renderToStream/buildTemplate.after.d.ts +3 -2
- package/dist/types/ssr/serverRender/renderToStream/bulidTemplate.before.d.ts +2 -1
- package/dist/types/ssr/serverRender/renderToStream/renderToPipe.d.ts +3 -3
- package/dist/types/ssr/serverRender/renderToStream/template.d.ts +2 -2
- package/dist/types/ssr/serverRender/types.d.ts +1 -4
- package/dist/types/state/cli/index.d.ts +0 -2
- package/dist/types/state/types.d.ts +0 -1
- package/package.json +19 -11
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,82 @@
|
|
|
1
1
|
# @modern-js/runtime
|
|
2
2
|
|
|
3
|
+
## 2.0.0-beta.1
|
|
4
|
+
|
|
5
|
+
### Major Changes
|
|
6
|
+
|
|
7
|
+
- dda38c9: chore: v2
|
|
8
|
+
|
|
9
|
+
### Minor Changes
|
|
10
|
+
|
|
11
|
+
- c9e800d39a: feat: support React18 streaming SSR
|
|
12
|
+
feat: 支持 React18 流式 SSR
|
|
13
|
+
- 543be9558e: feat: compile server loader and support handle loader request
|
|
14
|
+
feat: 编译 server loader 并支持处理 loader 的请求
|
|
15
|
+
|
|
16
|
+
### Patch Changes
|
|
17
|
+
|
|
18
|
+
- 2344eb2: fix: bootstrap function params type define
|
|
19
|
+
|
|
20
|
+
fix: 修复 bootstrap 函数参数类型定义
|
|
21
|
+
|
|
22
|
+
- a11fcf8: feat: fallback logic of streaming ssr
|
|
23
|
+
feat: streaming ssr 降级逻辑
|
|
24
|
+
- b18fa8f: feat: remove @loadable/component in streaming ssr
|
|
25
|
+
feat: 移除 streaming ssr 中的 @loadable/component 逻辑
|
|
26
|
+
- 3e57f2b: feat: add document feature with plugin
|
|
27
|
+
|
|
28
|
+
feat: 增加 document 功能插件
|
|
29
|
+
|
|
30
|
+
- fbf5eed: fix: fix ssg failure due to lack of Web Response API
|
|
31
|
+
fix: 修复因为缺少 Web Response API 而导致 ssg 失败
|
|
32
|
+
- a2509bfbdb: feat: bump esbuild from 0.14.38 to 0.15.7
|
|
33
|
+
|
|
34
|
+
feat: 将 esbuild 从 0.14.38 版本升级至 0.15.7 版本
|
|
35
|
+
|
|
36
|
+
- 4369648ae2: fix: fix html template of streaming ssr
|
|
37
|
+
fix: 修复流式渲染的 html 模版
|
|
38
|
+
- 92c0994: chore: remove `registerPrefetch`
|
|
39
|
+
chore: 移除 `registerPrefetch`
|
|
40
|
+
- 6bda14ed71: feat: refactor router with react-router@6.4
|
|
41
|
+
|
|
42
|
+
feat: 使用 react-router@6.4 重构路由模块
|
|
43
|
+
|
|
44
|
+
- 92004d1: feat: support load chunks parallelly
|
|
45
|
+
feat: 支持并行加载 chunks
|
|
46
|
+
- 40ed587: feat: inject css chunk into html for streaming ssr
|
|
47
|
+
feat: streaming ssr 返回的 html 注入 css chunk
|
|
48
|
+
- 60d5378632: fix: function extname should not return array
|
|
49
|
+
fix: 函数 extname 不应该返回一个数组
|
|
50
|
+
- 8b8e1bb571: feat: support nested routes
|
|
51
|
+
feat: 支持嵌套路由
|
|
52
|
+
- 3bbea92b2a: feat: support Hook、Middleware new API
|
|
53
|
+
feat: 支持 Hook、Middleware 的新 API
|
|
54
|
+
- 18aaf42: fix: fix server loader redirects
|
|
55
|
+
fix: 修复 server loader 重定向错误
|
|
56
|
+
- fcace5b5b9: fix: remove overmuch `@modernjs/utils` dependency import in ssr runtime & SSR hydrate error
|
|
57
|
+
fix: 去除 ssr 运行时过多的 `@modernjs/utils` 依赖引入 & SSR hydrate 错误
|
|
58
|
+
- Updated dependencies [92f0ead]
|
|
59
|
+
- Updated dependencies [edd1cfb1af]
|
|
60
|
+
- Updated dependencies [cc971eabfc]
|
|
61
|
+
- Updated dependencies [5b9049f]
|
|
62
|
+
- Updated dependencies [6bda14ed71]
|
|
63
|
+
- Updated dependencies [92004d1]
|
|
64
|
+
- Updated dependencies [b8bbe036c7]
|
|
65
|
+
- Updated dependencies [40ed587]
|
|
66
|
+
- Updated dependencies [87c1ff8]
|
|
67
|
+
- Updated dependencies [d5a31df781]
|
|
68
|
+
- Updated dependencies [dda38c9]
|
|
69
|
+
- Updated dependencies [102d32e4ba]
|
|
70
|
+
- Updated dependencies [8b8e1bb571]
|
|
71
|
+
- Updated dependencies [3bbea92b2a]
|
|
72
|
+
- Updated dependencies [f179749]
|
|
73
|
+
- Updated dependencies [abf3421]
|
|
74
|
+
- Updated dependencies [543be9558e]
|
|
75
|
+
- Updated dependencies [14b712d]
|
|
76
|
+
- @modern-js/utils@2.0.0-beta.1
|
|
77
|
+
- @modern-js/types@2.0.0-beta.1
|
|
78
|
+
- @modern-js/plugin@2.0.0-beta.1
|
|
79
|
+
|
|
3
80
|
## 2.0.0-beta.0
|
|
4
81
|
|
|
5
82
|
### Major Changes
|
|
@@ -3,10 +3,11 @@ import { PLUGIN_SCHEMAS, cleanRequireCache, isReact18 } from '@modern-js/utils';
|
|
|
3
3
|
import PluginState from "../state/cli";
|
|
4
4
|
import PluginSSR from "../ssr/cli";
|
|
5
5
|
import PluginRouter from "../router/cli";
|
|
6
|
+
import Document from "../document/cli";
|
|
6
7
|
export default (() => ({
|
|
7
8
|
name: '@modern-js/runtime',
|
|
8
|
-
post: ['@modern-js/plugin-router', '@modern-js/plugin-ssr', '@modern-js/plugin-state', '@modern-js/plugin-design-token'],
|
|
9
|
-
usePlugins: [PluginState(), PluginSSR(), PluginRouter()],
|
|
9
|
+
post: ['@modern-js/plugin-router', '@modern-js/plugin-ssr', '@modern-js/plugin-document', '@modern-js/plugin-state', '@modern-js/plugin-design-token'],
|
|
10
|
+
usePlugins: [PluginState(), PluginSSR(), PluginRouter(), Document()],
|
|
10
11
|
setup: api => {
|
|
11
12
|
return {
|
|
12
13
|
config() {
|
|
@@ -28,15 +29,12 @@ export default (() => ({
|
|
|
28
29
|
}
|
|
29
30
|
};
|
|
30
31
|
},
|
|
31
|
-
|
|
32
32
|
validateSchema() {
|
|
33
33
|
return PLUGIN_SCHEMAS['@modern-js/runtime'];
|
|
34
34
|
},
|
|
35
|
-
|
|
36
35
|
async beforeRestart() {
|
|
37
36
|
cleanRequireCache([require.resolve("../state/cli"), require.resolve("../router/cli"), require.resolve("../ssr/cli")]);
|
|
38
37
|
}
|
|
39
|
-
|
|
40
38
|
};
|
|
41
39
|
}
|
|
42
40
|
}));
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
const APP_CONFIG_SYMBOL = 'config';
|
|
2
|
-
export const getConfig = Component =>
|
|
2
|
+
export const getConfig = Component =>
|
|
3
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
3
4
|
// @ts-expect-error
|
|
4
5
|
Component[APP_CONFIG_SYMBOL];
|
|
5
6
|
export const defineConfig = (Component, config) => {
|
|
@@ -1,15 +1,9 @@
|
|
|
1
1
|
const _excluded = ["context"];
|
|
2
|
-
|
|
3
2
|
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
3
|
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
|
-
|
|
7
4
|
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; }
|
|
8
|
-
|
|
9
5
|
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; }
|
|
10
|
-
|
|
11
6
|
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; }
|
|
12
|
-
|
|
13
7
|
import React, { useContext, useMemo } from 'react';
|
|
14
8
|
import defaultReactDOM from 'react-dom';
|
|
15
9
|
import hoistNonReactStatics from 'hoist-non-react-statics';
|
|
@@ -18,19 +12,17 @@ import { runtime } from "./plugin";
|
|
|
18
12
|
import { createLoaderManager } from "./loader/loaderManager";
|
|
19
13
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
20
14
|
const IS_REACT18 = process.env.IS_REACT18 === 'true';
|
|
21
|
-
|
|
15
|
+
const ROUTE_MANIFEST = `_MODERNJS_ROUTE_MANIFEST`;
|
|
22
16
|
function isClientArgs(id) {
|
|
23
17
|
return typeof id === 'string' || typeof HTMLElement !== 'undefined' && id instanceof HTMLElement;
|
|
24
18
|
}
|
|
25
|
-
|
|
26
19
|
const runnerMap = new WeakMap();
|
|
27
|
-
|
|
28
20
|
const getInitialContext = runner => ({
|
|
29
21
|
loaderManager: createLoaderManager({}),
|
|
30
22
|
runner,
|
|
31
|
-
isBrowser: true
|
|
23
|
+
isBrowser: true,
|
|
24
|
+
routeManifest: typeof window !== 'undefined' && window[ROUTE_MANIFEST]
|
|
32
25
|
});
|
|
33
|
-
|
|
34
26
|
export const createApp = ({
|
|
35
27
|
plugins
|
|
36
28
|
}) => {
|
|
@@ -38,7 +30,6 @@ export const createApp = ({
|
|
|
38
30
|
appRuntime.usePlugin(...plugins);
|
|
39
31
|
return App => {
|
|
40
32
|
const runner = appRuntime.init();
|
|
41
|
-
|
|
42
33
|
const WrapperComponent = props => {
|
|
43
34
|
const element = /*#__PURE__*/React.createElement(App || React.Fragment, _objectSpread({}, props), props.children);
|
|
44
35
|
const context = useContext(RuntimeReactContext);
|
|
@@ -52,11 +43,9 @@ export const createApp = ({
|
|
|
52
43
|
}) => element
|
|
53
44
|
});
|
|
54
45
|
};
|
|
55
|
-
|
|
56
46
|
if (App) {
|
|
57
47
|
hoistNonReactStatics(WrapperComponent, App);
|
|
58
48
|
}
|
|
59
|
-
|
|
60
49
|
const HOCApp = runner.hoc({
|
|
61
50
|
App: WrapperComponent
|
|
62
51
|
}, {
|
|
@@ -65,14 +54,13 @@ export const createApp = ({
|
|
|
65
54
|
}) => {
|
|
66
55
|
const WrapComponent = _ref => {
|
|
67
56
|
var _contextValue;
|
|
68
|
-
|
|
69
57
|
let {
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
let contextValue = context; // We should construct the context, when root component is not passed into `bootstrap`.
|
|
58
|
+
context
|
|
59
|
+
} = _ref,
|
|
60
|
+
props = _objectWithoutProperties(_ref, _excluded);
|
|
61
|
+
let contextValue = context;
|
|
75
62
|
|
|
63
|
+
// We should construct the context, when root component is not passed into `bootstrap`.
|
|
76
64
|
if (!((_contextValue = contextValue) !== null && _contextValue !== void 0 && _contextValue.runner)) {
|
|
77
65
|
contextValue = getInitialContext(runner);
|
|
78
66
|
runner.init({
|
|
@@ -82,18 +70,15 @@ export const createApp = ({
|
|
|
82
70
|
context: context1
|
|
83
71
|
}) => {
|
|
84
72
|
var _App$init;
|
|
85
|
-
|
|
86
73
|
return App === null || App === void 0 ? void 0 : (_App$init = App.init) === null || _App$init === void 0 ? void 0 : _App$init.call(App, context1);
|
|
87
74
|
}
|
|
88
75
|
});
|
|
89
76
|
}
|
|
90
|
-
|
|
91
77
|
return /*#__PURE__*/_jsx(RuntimeReactContext.Provider, {
|
|
92
78
|
value: contextValue,
|
|
93
79
|
children: /*#__PURE__*/_jsx(App, _objectSpread({}, props))
|
|
94
80
|
});
|
|
95
81
|
};
|
|
96
|
-
|
|
97
82
|
return hoistNonReactStatics(WrapComponent, App);
|
|
98
83
|
}
|
|
99
84
|
});
|
|
@@ -110,19 +95,20 @@ id,
|
|
|
110
95
|
/**
|
|
111
96
|
* root.render need use root to run function
|
|
112
97
|
*/
|
|
113
|
-
root, ReactDOM = defaultReactDOM
|
|
98
|
+
root, ReactDOM = defaultReactDOM
|
|
99
|
+
// eslint-disable-next-line consistent-return
|
|
100
|
+
) => {
|
|
114
101
|
let App = BootApp;
|
|
115
|
-
let runner = runnerMap.get(App);
|
|
102
|
+
let runner = runnerMap.get(App);
|
|
116
103
|
|
|
104
|
+
// ensure Component used is created by `createApp`
|
|
117
105
|
if (!runner) {
|
|
118
106
|
App = createApp({
|
|
119
107
|
plugins: []
|
|
120
108
|
})(App);
|
|
121
109
|
runner = runnerMap.get(App);
|
|
122
110
|
}
|
|
123
|
-
|
|
124
111
|
const context = getInitialContext(runner);
|
|
125
|
-
|
|
126
112
|
const runInit = _context => runner.init({
|
|
127
113
|
context: _context
|
|
128
114
|
}, {
|
|
@@ -130,33 +116,27 @@ root, ReactDOM = defaultReactDOM) => {
|
|
|
130
116
|
context: context1
|
|
131
117
|
}) => {
|
|
132
118
|
var _App, _App$init2;
|
|
133
|
-
|
|
134
119
|
return (_App = App) === null || _App === void 0 ? void 0 : (_App$init2 = _App.init) === null || _App$init2 === void 0 ? void 0 : _App$init2.call(_App, context1);
|
|
135
120
|
}
|
|
136
|
-
});
|
|
137
|
-
|
|
121
|
+
});
|
|
138
122
|
|
|
123
|
+
// don't mount the App, let user in charge of it.
|
|
139
124
|
if (!id) {
|
|
140
125
|
return /*#__PURE__*/React.createElement(App, {
|
|
141
126
|
context
|
|
142
127
|
});
|
|
143
128
|
}
|
|
144
|
-
|
|
145
129
|
const isBrowser = typeof window !== 'undefined' && window.name !== 'nodejs';
|
|
146
|
-
|
|
147
130
|
if (isBrowser) {
|
|
148
131
|
if (isClientArgs(id)) {
|
|
149
132
|
var _ssrData$data, _ssrData$data2;
|
|
150
|
-
|
|
151
133
|
const ssrData = window._SSR_DATA;
|
|
152
134
|
const loadersData = (ssrData === null || ssrData === void 0 ? void 0 : (_ssrData$data = ssrData.data) === null || _ssrData$data === void 0 ? void 0 : _ssrData$data.loadersData) || {};
|
|
153
135
|
const initialLoadersState = Object.keys(loadersData).reduce((res, key) => {
|
|
154
136
|
const loaderData = loadersData[key];
|
|
155
|
-
|
|
156
137
|
if (loaderData.loading !== false) {
|
|
157
138
|
return res;
|
|
158
139
|
}
|
|
159
|
-
|
|
160
140
|
res[key] = loaderData;
|
|
161
141
|
return res;
|
|
162
142
|
}, {});
|
|
@@ -169,29 +149,41 @@ root, ReactDOM = defaultReactDOM) => {
|
|
|
169
149
|
} : {}));
|
|
170
150
|
context.initialData = ssrData === null || ssrData === void 0 ? void 0 : (_ssrData$data2 = ssrData.data) === null || _ssrData$data2 === void 0 ? void 0 : _ssrData$data2.initialData;
|
|
171
151
|
const initialData = await runInit(context);
|
|
172
|
-
|
|
173
152
|
if (initialData) {
|
|
174
153
|
context.initialData = initialData;
|
|
175
154
|
}
|
|
155
|
+
const rootElement = typeof id !== 'string' ? id : document.getElementById(id || 'root');
|
|
176
156
|
|
|
177
|
-
|
|
178
|
-
|
|
157
|
+
// https://reactjs.org/blog/2022/03/08/react-18-upgrade-guide.html
|
|
179
158
|
const ModernRender = App => {
|
|
180
159
|
if (IS_REACT18) {
|
|
181
|
-
(root
|
|
160
|
+
if (root) {
|
|
161
|
+
root.render(App);
|
|
162
|
+
} else if (ReactDOM.createRoot) {
|
|
163
|
+
ReactDOM.createRoot(rootElement).render(App);
|
|
164
|
+
} else {
|
|
165
|
+
throw Error('The `bootstrap` `ReactDOM` parameter needs to provide the `createRoot` method');
|
|
166
|
+
}
|
|
182
167
|
} else {
|
|
168
|
+
if (!ReactDOM.render) {
|
|
169
|
+
throw Error('The `bootstrap` `ReactDOM` parameter needs to provide the `render` method');
|
|
170
|
+
}
|
|
183
171
|
ReactDOM.render(App, rootElement);
|
|
184
172
|
}
|
|
185
173
|
};
|
|
186
|
-
|
|
187
174
|
const ModernHydrate = (App, callback) => {
|
|
188
175
|
if (IS_REACT18) {
|
|
176
|
+
if (!ReactDOM.hydrateRoot) {
|
|
177
|
+
throw Error('The `bootstrap` `ReactDOM` parameter needs to provide the `hydrateRoot` method');
|
|
178
|
+
}
|
|
189
179
|
ReactDOM.hydrateRoot(rootElement, App);
|
|
190
180
|
} else {
|
|
181
|
+
if (!ReactDOM.hydrate) {
|
|
182
|
+
throw Error('The `bootstrap` `ReactDOM` parameter needs to provide the `hydrate` method');
|
|
183
|
+
}
|
|
191
184
|
ReactDOM.hydrate(App, rootElement, callback);
|
|
192
185
|
}
|
|
193
186
|
};
|
|
194
|
-
|
|
195
187
|
return runner.client({
|
|
196
188
|
App,
|
|
197
189
|
context,
|
|
@@ -219,12 +211,37 @@ root, ReactDOM = defaultReactDOM) => {
|
|
|
219
211
|
skipStatic: process.env.NODE_ENV === 'production' && !id.staticGenerate
|
|
220
212
|
})
|
|
221
213
|
});
|
|
214
|
+
|
|
215
|
+
// Handle redirects from React Router with an HTTP redirect
|
|
216
|
+
const isRedirectResponse = result => {
|
|
217
|
+
if (typeof Response !== 'undefined' &&
|
|
218
|
+
// fix: ssg workflow doesn't inject Web Response
|
|
219
|
+
result instanceof Response && result.status >= 300 && result.status <= 399) {
|
|
220
|
+
const {
|
|
221
|
+
status
|
|
222
|
+
} = result;
|
|
223
|
+
const redirectUrl = result.headers.get('Location') || '/';
|
|
224
|
+
const {
|
|
225
|
+
ssrContext
|
|
226
|
+
} = context;
|
|
227
|
+
if (ssrContext) {
|
|
228
|
+
ssrContext.res.statusCode = status;
|
|
229
|
+
ssrContext.res.setHeader('Location', redirectUrl);
|
|
230
|
+
ssrContext.redirection.status = status;
|
|
231
|
+
ssrContext.redirection.url = redirectUrl;
|
|
232
|
+
}
|
|
233
|
+
return true;
|
|
234
|
+
}
|
|
235
|
+
return false;
|
|
236
|
+
};
|
|
222
237
|
const initialData = await runInit(context);
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
238
|
+
if (!isRedirectResponse(initialData)) {
|
|
239
|
+
context.initialData = initialData;
|
|
240
|
+
return runner.server({
|
|
241
|
+
App,
|
|
242
|
+
context
|
|
243
|
+
});
|
|
244
|
+
}
|
|
228
245
|
}
|
|
229
246
|
};
|
|
230
247
|
export const useRuntimeContext = () => {
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
export { createPlugin, createRuntime, runtime, registerInit
|
|
2
|
-
export { defineConfig, getConfig } from "./app-config";
|
|
1
|
+
export { createPlugin, createRuntime, runtime, registerInit } from "./plugin";
|
|
2
|
+
export { defineConfig, getConfig } from "./app-config";
|
|
3
3
|
|
|
4
|
+
// compatible
|
|
4
5
|
export * from "./compatible";
|
|
5
6
|
export { RuntimeReactContext, ServerRouterContext } from "../runtime-context";
|
|
6
7
|
export * from "./loader";
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import invariant from 'invariant';
|
|
2
|
-
|
|
3
2
|
/**
|
|
4
3
|
* Calc id from string or object
|
|
5
4
|
*/
|
|
@@ -7,28 +6,24 @@ const createGetId = () => {
|
|
|
7
6
|
const idCache = new Map();
|
|
8
7
|
return objectId => {
|
|
9
8
|
const cachedId = idCache.get(objectId);
|
|
10
|
-
|
|
11
9
|
if (cachedId) {
|
|
12
10
|
return cachedId;
|
|
13
|
-
}
|
|
14
|
-
|
|
11
|
+
}
|
|
15
12
|
|
|
13
|
+
// WARNING: id should be unique after serialize.
|
|
16
14
|
const id = JSON.stringify(objectId);
|
|
17
15
|
invariant(id, 'params should be not null value');
|
|
18
16
|
idCache.set(objectId, id);
|
|
19
17
|
return id;
|
|
20
18
|
};
|
|
21
19
|
};
|
|
22
|
-
|
|
23
20
|
export let LoaderStatus;
|
|
24
|
-
|
|
25
21
|
(function (LoaderStatus) {
|
|
26
22
|
LoaderStatus[LoaderStatus["idle"] = 0] = "idle";
|
|
27
23
|
LoaderStatus[LoaderStatus["loading"] = 1] = "loading";
|
|
28
24
|
LoaderStatus[LoaderStatus["fulfilled"] = 2] = "fulfilled";
|
|
29
25
|
LoaderStatus[LoaderStatus["rejected"] = 3] = "rejected";
|
|
30
26
|
})(LoaderStatus || (LoaderStatus = {}));
|
|
31
|
-
|
|
32
27
|
const createLoader = (id, initialData = {
|
|
33
28
|
loading: false,
|
|
34
29
|
reloading: false,
|
|
@@ -43,16 +38,13 @@ const createLoader = (id, initialData = {
|
|
|
43
38
|
} = initialData;
|
|
44
39
|
let hasLoaded = false;
|
|
45
40
|
const handlers = new Set();
|
|
46
|
-
|
|
47
41
|
const load = async () => {
|
|
48
42
|
if (skip) {
|
|
49
43
|
return promise;
|
|
50
44
|
}
|
|
51
|
-
|
|
52
45
|
if (status === LoaderStatus.loading) {
|
|
53
46
|
return promise;
|
|
54
47
|
}
|
|
55
|
-
|
|
56
48
|
status = LoaderStatus.loading;
|
|
57
49
|
notify();
|
|
58
50
|
promise = loaderFn().then(value => {
|
|
@@ -70,7 +62,6 @@ const createLoader = (id, initialData = {
|
|
|
70
62
|
});
|
|
71
63
|
return promise;
|
|
72
64
|
};
|
|
73
|
-
|
|
74
65
|
const getResult = () => ({
|
|
75
66
|
loading: !hasLoaded && status === LoaderStatus.loading,
|
|
76
67
|
reloading: hasLoaded && status === LoaderStatus.loading,
|
|
@@ -79,35 +70,29 @@ const createLoader = (id, initialData = {
|
|
|
79
70
|
// redundant fields for ssr log
|
|
80
71
|
_error: error
|
|
81
72
|
});
|
|
82
|
-
|
|
83
73
|
const notify = () => {
|
|
84
74
|
// don't iterate handlers directly, since it could be modified during iteration
|
|
85
75
|
[...handlers].forEach(handler => {
|
|
86
76
|
handler(status, getResult());
|
|
87
77
|
});
|
|
88
78
|
};
|
|
89
|
-
|
|
90
79
|
const onChange = handler => {
|
|
91
80
|
handlers.add(handler);
|
|
92
81
|
return () => {
|
|
93
82
|
handlers.delete(handler);
|
|
94
83
|
};
|
|
95
84
|
};
|
|
96
|
-
|
|
97
85
|
return {
|
|
98
86
|
get result() {
|
|
99
87
|
return getResult();
|
|
100
88
|
},
|
|
101
|
-
|
|
102
89
|
get promise() {
|
|
103
90
|
return promise;
|
|
104
91
|
},
|
|
105
|
-
|
|
106
92
|
onChange,
|
|
107
93
|
load
|
|
108
94
|
};
|
|
109
95
|
};
|
|
110
|
-
|
|
111
96
|
/**
|
|
112
97
|
* Create loaders manager. It's returned instance will add to context
|
|
113
98
|
* @param initialDataMap used to initialing loader data
|
|
@@ -119,67 +104,60 @@ export const createLoaderManager = (initialDataMap, managerOptions = {}) => {
|
|
|
119
104
|
} = managerOptions;
|
|
120
105
|
const loadersMap = new Map();
|
|
121
106
|
const getId = createGetId();
|
|
122
|
-
|
|
123
107
|
const add = (loaderFn, loaderOptions) => {
|
|
124
108
|
const id = getId(loaderOptions.params);
|
|
125
|
-
let loader = loadersMap.get(id);
|
|
109
|
+
let loader = loadersMap.get(id);
|
|
126
110
|
|
|
111
|
+
// private property for opting out loader cache, maybe change in future
|
|
127
112
|
const cache = loaderOptions._cache;
|
|
128
|
-
|
|
129
113
|
if (!loader || cache === false) {
|
|
130
114
|
// ignore non-static loader on static phase
|
|
131
|
-
const ignoreNonStatic = skipNonStatic && !loaderOptions.static;
|
|
115
|
+
const ignoreNonStatic = skipNonStatic && !loaderOptions.static;
|
|
132
116
|
|
|
117
|
+
// ignore static loader on non-static phase
|
|
133
118
|
const ignoreStatic = skipStatic && loaderOptions.static;
|
|
134
119
|
const skipExec = ignoreNonStatic || ignoreStatic;
|
|
135
120
|
loader = createLoader(id, typeof initialDataMap[id] !== 'undefined' ? initialDataMap[id] : {
|
|
136
121
|
data: loaderOptions.initialData
|
|
137
|
-
}, loaderFn,
|
|
122
|
+
}, loaderFn,
|
|
123
|
+
// Todo whether static loader is exec when CSR
|
|
138
124
|
skipExec);
|
|
139
125
|
loadersMap.set(id, loader);
|
|
140
126
|
}
|
|
141
|
-
|
|
142
127
|
return id;
|
|
143
128
|
};
|
|
129
|
+
const get = id => loadersMap.get(id);
|
|
144
130
|
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
131
|
+
// check if there has pending loaders
|
|
148
132
|
const hasPendingLoaders = () => {
|
|
149
133
|
for (const loader of loadersMap.values()) {
|
|
150
134
|
const {
|
|
151
135
|
promise
|
|
152
136
|
} = loader;
|
|
153
|
-
|
|
154
137
|
if (promise instanceof Promise) {
|
|
155
138
|
return true;
|
|
156
139
|
}
|
|
157
140
|
}
|
|
158
|
-
|
|
159
141
|
return false;
|
|
160
|
-
};
|
|
161
|
-
|
|
142
|
+
};
|
|
162
143
|
|
|
144
|
+
// waiting for all pending loaders to be settled
|
|
163
145
|
const awaitPendingLoaders = async () => {
|
|
164
146
|
const pendingLoaders = [];
|
|
165
|
-
|
|
166
147
|
for (const [id, loader] of loadersMap) {
|
|
167
148
|
const {
|
|
168
149
|
promise
|
|
169
150
|
} = loader;
|
|
170
|
-
|
|
171
151
|
if (promise instanceof Promise) {
|
|
172
152
|
pendingLoaders.push([id, loader]);
|
|
173
153
|
}
|
|
174
154
|
}
|
|
175
|
-
|
|
176
155
|
await Promise.all(pendingLoaders.map(item => item[1].promise));
|
|
177
156
|
return pendingLoaders.reduce((res, [id, loader]) => {
|
|
178
157
|
res[id] = loader.result;
|
|
179
158
|
return res;
|
|
180
159
|
}, {});
|
|
181
160
|
};
|
|
182
|
-
|
|
183
161
|
return {
|
|
184
162
|
hasPendingLoaders,
|
|
185
163
|
awaitPendingLoaders,
|
|
@@ -1,14 +1,10 @@
|
|
|
1
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
2
|
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
3
|
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
4
|
import { useContext, useRef, useMemo, useState, useCallback, useEffect } from 'react';
|
|
8
5
|
import invariant from 'invariant';
|
|
9
6
|
import { RuntimeReactContext } from "../../runtime-context";
|
|
10
7
|
import { LoaderStatus } from "./loaderManager";
|
|
11
|
-
|
|
12
8
|
const useLoader = (loaderFn, options = {
|
|
13
9
|
params: undefined
|
|
14
10
|
}) => {
|
|
@@ -18,29 +14,24 @@ const useLoader = (loaderFn, options = {
|
|
|
18
14
|
loaderManager
|
|
19
15
|
} = context;
|
|
20
16
|
const loaderRef = useRef();
|
|
21
|
-
const unlistenLoaderChangeRef = useRef(null);
|
|
17
|
+
const unlistenLoaderChangeRef = useRef(null);
|
|
22
18
|
|
|
19
|
+
// SSR render should ignore `_cache` prop
|
|
23
20
|
if (isSSRRender && Object.prototype.hasOwnProperty.call(options, '_cache')) {
|
|
24
21
|
delete options._cache;
|
|
25
22
|
}
|
|
26
|
-
|
|
27
23
|
const load = useCallback(params => {
|
|
28
24
|
var _unlistenLoaderChange, _window, _window$_SSR_DATA, _window$_SSR_DATA$dat, _window$_SSR_DATA$dat2, _loaderRef$current2;
|
|
29
|
-
|
|
30
25
|
if (typeof params === 'undefined') {
|
|
31
26
|
var _loaderRef$current;
|
|
32
|
-
|
|
33
27
|
return (_loaderRef$current = loaderRef.current) === null || _loaderRef$current === void 0 ? void 0 : _loaderRef$current.load();
|
|
34
28
|
}
|
|
35
|
-
|
|
36
29
|
const id = loaderManager.add(() => {
|
|
37
30
|
try {
|
|
38
31
|
const res = loaderFn(context, params);
|
|
39
|
-
|
|
40
32
|
if (res instanceof Promise) {
|
|
41
33
|
return res;
|
|
42
34
|
}
|
|
43
|
-
|
|
44
35
|
return Promise.resolve(res);
|
|
45
36
|
} catch (e) {
|
|
46
37
|
return Promise.reject(e);
|
|
@@ -48,37 +39,31 @@ const useLoader = (loaderFn, options = {
|
|
|
48
39
|
}, _objectSpread(_objectSpread({}, options), {}, {
|
|
49
40
|
params
|
|
50
41
|
}));
|
|
51
|
-
loaderRef.current = loaderManager.get(id);
|
|
52
|
-
|
|
42
|
+
loaderRef.current = loaderManager.get(id);
|
|
43
|
+
// unsubscribe old loader onChange event
|
|
53
44
|
(_unlistenLoaderChange = unlistenLoaderChangeRef.current) === null || _unlistenLoaderChange === void 0 ? void 0 : _unlistenLoaderChange.call(unlistenLoaderChangeRef);
|
|
54
|
-
|
|
55
45
|
if (isSSRRender) {
|
|
56
46
|
return undefined;
|
|
57
|
-
}
|
|
58
|
-
|
|
47
|
+
}
|
|
59
48
|
|
|
49
|
+
// skip this loader, then try to unlisten loader change
|
|
60
50
|
if (options.skip) {
|
|
61
51
|
return undefined;
|
|
62
|
-
}
|
|
63
|
-
|
|
52
|
+
}
|
|
64
53
|
|
|
54
|
+
// do not load data again in CSR hydrate stage if SSR data exists
|
|
65
55
|
if (context._hydration && ((_window = window) === null || _window === void 0 ? void 0 : (_window$_SSR_DATA = _window._SSR_DATA) === null || _window$_SSR_DATA === void 0 ? void 0 : (_window$_SSR_DATA$dat = _window$_SSR_DATA.data) === null || _window$_SSR_DATA$dat === void 0 ? void 0 : (_window$_SSR_DATA$dat2 = _window$_SSR_DATA$dat.loadersData[id]) === null || _window$_SSR_DATA$dat2 === void 0 ? void 0 : _window$_SSR_DATA$dat2.error) === null) {
|
|
66
56
|
return undefined;
|
|
67
57
|
}
|
|
68
|
-
|
|
69
58
|
const res = loaderRef.current.load();
|
|
70
59
|
unlistenLoaderChangeRef.current = (_loaderRef$current2 = loaderRef.current) === null || _loaderRef$current2 === void 0 ? void 0 : _loaderRef$current2.onChange((_status, _result) => {
|
|
71
60
|
setResult(_result);
|
|
72
|
-
|
|
73
61
|
if (_status === LoaderStatus.fulfilled) {
|
|
74
62
|
var _options$onSuccess;
|
|
75
|
-
|
|
76
63
|
options === null || options === void 0 ? void 0 : (_options$onSuccess = options.onSuccess) === null || _options$onSuccess === void 0 ? void 0 : _options$onSuccess.call(options, _result.data);
|
|
77
64
|
}
|
|
78
|
-
|
|
79
65
|
if (_status === LoaderStatus.rejected) {
|
|
80
66
|
var _options$onError;
|
|
81
|
-
|
|
82
67
|
options === null || options === void 0 ? void 0 : (_options$onError = options.onError) === null || _options$onError === void 0 ? void 0 : _options$onError.call(options, _result.error);
|
|
83
68
|
}
|
|
84
69
|
});
|
|
@@ -86,12 +71,10 @@ const useLoader = (loaderFn, options = {
|
|
|
86
71
|
}, [options.skip]);
|
|
87
72
|
useEffect(() => () => {
|
|
88
73
|
var _unlistenLoaderChange2;
|
|
89
|
-
|
|
90
74
|
(_unlistenLoaderChange2 = unlistenLoaderChangeRef.current) === null || _unlistenLoaderChange2 === void 0 ? void 0 : _unlistenLoaderChange2.call(unlistenLoaderChangeRef);
|
|
91
75
|
}, []);
|
|
92
76
|
useMemo(() => {
|
|
93
77
|
var _options$params;
|
|
94
|
-
|
|
95
78
|
const p = (_options$params = options.params) !== null && _options$params !== void 0 ? _options$params : loaderFn.id;
|
|
96
79
|
invariant(typeof p !== 'undefined' && p !== null, 'Params is required in useLoader');
|
|
97
80
|
load(p);
|
|
@@ -101,5 +84,4 @@ const useLoader = (loaderFn, options = {
|
|
|
101
84
|
reload: load
|
|
102
85
|
});
|
|
103
86
|
};
|
|
104
|
-
|
|
105
87
|
export default useLoader;
|