@modern-js/runtime 2.0.0-beta.0 → 2.0.0-beta.2
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 +158 -0
- package/dist/js/modern/cli/index.js +6 -6
- package/dist/js/modern/core/app-config.js +2 -1
- package/dist/js/modern/core/compatible.js +66 -48
- 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 +132 -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 -11
- package/dist/js/modern/state/runtime/plugin.js +1 -14
- package/dist/js/node/cli/index.js +6 -14
- 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 +66 -66
- 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 +142 -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 -16
- 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 +6 -4
- package/dist/js/treeshaking/core/app-config.js +2 -1
- package/dist/js/treeshaking/core/compatible.js +74 -81
- 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 +175 -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 -11
- package/dist/js/treeshaking/state/runtime/plugin.js +2 -10
- package/dist/types/cli/index.d.ts +2 -4
- package/dist/types/core/compatible.d.ts +8 -10
- 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 +16 -28
- 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 +2 -4
- 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 +2 -4
- 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 +3 -6
- package/dist/types/state/cli/index.d.ts +2 -4
- package/dist/types/state/types.d.ts +0 -1
- package/package.json +24 -15
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,163 @@
|
|
|
1
1
|
# @modern-js/runtime
|
|
2
2
|
|
|
3
|
+
## 2.0.0-beta.2
|
|
4
|
+
|
|
5
|
+
### Major Changes
|
|
6
|
+
|
|
7
|
+
- dda38c9c3e: 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
|
+
- b18fa8f3ed: 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
|
+
- e4357f1: fix: change default document file and name
|
|
37
|
+
|
|
38
|
+
fix: 重置默认的 document 文件和文件名
|
|
39
|
+
|
|
40
|
+
- 4369648ae2: fix: fix html template of streaming ssr
|
|
41
|
+
fix: 修复流式渲染的 html 模版
|
|
42
|
+
- 92c0994: chore: remove `registerPrefetch`
|
|
43
|
+
chore: 移除 `registerPrefetch`
|
|
44
|
+
- 6bda14ed71: feat: refactor router with react-router@6.4
|
|
45
|
+
|
|
46
|
+
feat: 使用 react-router@6.4 重构路由模块
|
|
47
|
+
|
|
48
|
+
- 92004d1: feat: support load chunks parallelly
|
|
49
|
+
feat: 支持并行加载 chunks
|
|
50
|
+
- 40ed587: feat: inject css chunk into html for streaming ssr
|
|
51
|
+
feat: streaming ssr 返回的 html 注入 css chunk
|
|
52
|
+
- 60d5378632: fix: function extname should not return array
|
|
53
|
+
fix: 函数 extname 不应该返回一个数组
|
|
54
|
+
- 8b8e1bb571: feat: support nested routes
|
|
55
|
+
feat: 支持嵌套路由
|
|
56
|
+
- 3bbea92b2a: feat: support Hook、Middleware new API
|
|
57
|
+
feat: 支持 Hook、Middleware 的新 API
|
|
58
|
+
- 18aaf42: fix: fix server loader redirects
|
|
59
|
+
fix: 修复 server loader 重定向错误
|
|
60
|
+
- fcace5b5b9: fix: remove overmuch `@modernjs/utils` dependency import in ssr runtime & SSR hydrate error
|
|
61
|
+
fix: 去除 ssr 运行时过多的 `@modernjs/utils` 依赖引入 & SSR hydrate 错误
|
|
62
|
+
- Updated dependencies [92f0ead]
|
|
63
|
+
- Updated dependencies [edd1cfb1af]
|
|
64
|
+
- Updated dependencies [cc971eabfc]
|
|
65
|
+
- Updated dependencies [5b9049f2e9]
|
|
66
|
+
- Updated dependencies [6bda14ed71]
|
|
67
|
+
- Updated dependencies [92004d1]
|
|
68
|
+
- Updated dependencies [b8bbe036c7]
|
|
69
|
+
- Updated dependencies [40ed587]
|
|
70
|
+
- Updated dependencies [87c1ff8]
|
|
71
|
+
- Updated dependencies [d5a31df781]
|
|
72
|
+
- Updated dependencies [dda38c9c3e]
|
|
73
|
+
- Updated dependencies [102d32e4ba]
|
|
74
|
+
- Updated dependencies [8b8e1bb571]
|
|
75
|
+
- Updated dependencies [3bbea92b2a]
|
|
76
|
+
- Updated dependencies [f179749]
|
|
77
|
+
- Updated dependencies [abf3421a75]
|
|
78
|
+
- Updated dependencies [543be9558e]
|
|
79
|
+
- Updated dependencies [14b712da84]
|
|
80
|
+
- @modern-js/utils@2.0.0-beta.2
|
|
81
|
+
- @modern-js/types@2.0.0-beta.2
|
|
82
|
+
- @modern-js/plugin@2.0.0-beta.2
|
|
83
|
+
|
|
84
|
+
## 2.0.0-beta.1
|
|
85
|
+
|
|
86
|
+
### Major Changes
|
|
87
|
+
|
|
88
|
+
- dda38c9: chore: v2
|
|
89
|
+
|
|
90
|
+
### Minor Changes
|
|
91
|
+
|
|
92
|
+
- c9e800d39a: feat: support React18 streaming SSR
|
|
93
|
+
feat: 支持 React18 流式 SSR
|
|
94
|
+
- 543be9558e: feat: compile server loader and support handle loader request
|
|
95
|
+
feat: 编译 server loader 并支持处理 loader 的请求
|
|
96
|
+
|
|
97
|
+
### Patch Changes
|
|
98
|
+
|
|
99
|
+
- 2344eb2: fix: bootstrap function params type define
|
|
100
|
+
|
|
101
|
+
fix: 修复 bootstrap 函数参数类型定义
|
|
102
|
+
|
|
103
|
+
- a11fcf8: feat: fallback logic of streaming ssr
|
|
104
|
+
feat: streaming ssr 降级逻辑
|
|
105
|
+
- b18fa8f: feat: remove @loadable/component in streaming ssr
|
|
106
|
+
feat: 移除 streaming ssr 中的 @loadable/component 逻辑
|
|
107
|
+
- 3e57f2b: feat: add document feature with plugin
|
|
108
|
+
|
|
109
|
+
feat: 增加 document 功能插件
|
|
110
|
+
|
|
111
|
+
- fbf5eed: fix: fix ssg failure due to lack of Web Response API
|
|
112
|
+
fix: 修复因为缺少 Web Response API 而导致 ssg 失败
|
|
113
|
+
- a2509bfbdb: feat: bump esbuild from 0.14.38 to 0.15.7
|
|
114
|
+
|
|
115
|
+
feat: 将 esbuild 从 0.14.38 版本升级至 0.15.7 版本
|
|
116
|
+
|
|
117
|
+
- 4369648ae2: fix: fix html template of streaming ssr
|
|
118
|
+
fix: 修复流式渲染的 html 模版
|
|
119
|
+
- 92c0994: chore: remove `registerPrefetch`
|
|
120
|
+
chore: 移除 `registerPrefetch`
|
|
121
|
+
- 6bda14ed71: feat: refactor router with react-router@6.4
|
|
122
|
+
|
|
123
|
+
feat: 使用 react-router@6.4 重构路由模块
|
|
124
|
+
|
|
125
|
+
- 92004d1: feat: support load chunks parallelly
|
|
126
|
+
feat: 支持并行加载 chunks
|
|
127
|
+
- 40ed587: feat: inject css chunk into html for streaming ssr
|
|
128
|
+
feat: streaming ssr 返回的 html 注入 css chunk
|
|
129
|
+
- 60d5378632: fix: function extname should not return array
|
|
130
|
+
fix: 函数 extname 不应该返回一个数组
|
|
131
|
+
- 8b8e1bb571: feat: support nested routes
|
|
132
|
+
feat: 支持嵌套路由
|
|
133
|
+
- 3bbea92b2a: feat: support Hook、Middleware new API
|
|
134
|
+
feat: 支持 Hook、Middleware 的新 API
|
|
135
|
+
- 18aaf42: fix: fix server loader redirects
|
|
136
|
+
fix: 修复 server loader 重定向错误
|
|
137
|
+
- fcace5b5b9: fix: remove overmuch `@modernjs/utils` dependency import in ssr runtime & SSR hydrate error
|
|
138
|
+
fix: 去除 ssr 运行时过多的 `@modernjs/utils` 依赖引入 & SSR hydrate 错误
|
|
139
|
+
- Updated dependencies [92f0ead]
|
|
140
|
+
- Updated dependencies [edd1cfb1af]
|
|
141
|
+
- Updated dependencies [cc971eabfc]
|
|
142
|
+
- Updated dependencies [5b9049f]
|
|
143
|
+
- Updated dependencies [6bda14ed71]
|
|
144
|
+
- Updated dependencies [92004d1]
|
|
145
|
+
- Updated dependencies [b8bbe036c7]
|
|
146
|
+
- Updated dependencies [40ed587]
|
|
147
|
+
- Updated dependencies [87c1ff8]
|
|
148
|
+
- Updated dependencies [d5a31df781]
|
|
149
|
+
- Updated dependencies [dda38c9]
|
|
150
|
+
- Updated dependencies [102d32e4ba]
|
|
151
|
+
- Updated dependencies [8b8e1bb571]
|
|
152
|
+
- Updated dependencies [3bbea92b2a]
|
|
153
|
+
- Updated dependencies [f179749]
|
|
154
|
+
- Updated dependencies [abf3421]
|
|
155
|
+
- Updated dependencies [543be9558e]
|
|
156
|
+
- Updated dependencies [14b712d]
|
|
157
|
+
- @modern-js/utils@2.0.0-beta.1
|
|
158
|
+
- @modern-js/types@2.0.0-beta.1
|
|
159
|
+
- @modern-js/plugin@2.0.0-beta.1
|
|
160
|
+
|
|
3
161
|
## 2.0.0-beta.0
|
|
4
162
|
|
|
5
163
|
### 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() {
|
|
@@ -24,19 +25,18 @@ export default (() => ({
|
|
|
24
25
|
*/
|
|
25
26
|
'styled-components': require.resolve('styled-components')
|
|
26
27
|
},
|
|
27
|
-
|
|
28
|
+
globalVars: {
|
|
29
|
+
'process.env.IS_REACT18': process.env.IS_REACT18
|
|
30
|
+
}
|
|
28
31
|
}
|
|
29
32
|
};
|
|
30
33
|
},
|
|
31
|
-
|
|
32
34
|
validateSchema() {
|
|
33
35
|
return PLUGIN_SCHEMAS['@modern-js/runtime'];
|
|
34
36
|
},
|
|
35
|
-
|
|
36
37
|
async beforeRestart() {
|
|
37
38
|
cleanRequireCache([require.resolve("../state/cli"), require.resolve("../router/cli"), require.resolve("../ssr/cli")]);
|
|
38
39
|
}
|
|
39
|
-
|
|
40
40
|
};
|
|
41
41
|
}
|
|
42
42
|
}));
|
|
@@ -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,36 +1,27 @@
|
|
|
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
|
-
import defaultReactDOM from 'react-dom';
|
|
15
8
|
import hoistNonReactStatics from 'hoist-non-react-statics';
|
|
16
9
|
import { RuntimeReactContext } from "../runtime-context";
|
|
17
10
|
import { runtime } from "./plugin";
|
|
18
11
|
import { createLoaderManager } from "./loader/loaderManager";
|
|
19
12
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
20
13
|
const IS_REACT18 = process.env.IS_REACT18 === 'true';
|
|
21
|
-
|
|
14
|
+
const ROUTE_MANIFEST = `_MODERNJS_ROUTE_MANIFEST`;
|
|
22
15
|
function isClientArgs(id) {
|
|
23
16
|
return typeof id === 'string' || typeof HTMLElement !== 'undefined' && id instanceof HTMLElement;
|
|
24
17
|
}
|
|
25
|
-
|
|
26
18
|
const runnerMap = new WeakMap();
|
|
27
|
-
|
|
28
19
|
const getInitialContext = runner => ({
|
|
29
20
|
loaderManager: createLoaderManager({}),
|
|
30
21
|
runner,
|
|
31
|
-
isBrowser: true
|
|
22
|
+
isBrowser: true,
|
|
23
|
+
routeManifest: typeof window !== 'undefined' && window[ROUTE_MANIFEST]
|
|
32
24
|
});
|
|
33
|
-
|
|
34
25
|
export const createApp = ({
|
|
35
26
|
plugins
|
|
36
27
|
}) => {
|
|
@@ -38,7 +29,6 @@ export const createApp = ({
|
|
|
38
29
|
appRuntime.usePlugin(...plugins);
|
|
39
30
|
return App => {
|
|
40
31
|
const runner = appRuntime.init();
|
|
41
|
-
|
|
42
32
|
const WrapperComponent = props => {
|
|
43
33
|
const element = /*#__PURE__*/React.createElement(App || React.Fragment, _objectSpread({}, props), props.children);
|
|
44
34
|
const context = useContext(RuntimeReactContext);
|
|
@@ -52,11 +42,9 @@ export const createApp = ({
|
|
|
52
42
|
}) => element
|
|
53
43
|
});
|
|
54
44
|
};
|
|
55
|
-
|
|
56
45
|
if (App) {
|
|
57
46
|
hoistNonReactStatics(WrapperComponent, App);
|
|
58
47
|
}
|
|
59
|
-
|
|
60
48
|
const HOCApp = runner.hoc({
|
|
61
49
|
App: WrapperComponent
|
|
62
50
|
}, {
|
|
@@ -65,14 +53,13 @@ export const createApp = ({
|
|
|
65
53
|
}) => {
|
|
66
54
|
const WrapComponent = _ref => {
|
|
67
55
|
var _contextValue;
|
|
68
|
-
|
|
69
56
|
let {
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
let contextValue = context; // We should construct the context, when root component is not passed into `bootstrap`.
|
|
57
|
+
context
|
|
58
|
+
} = _ref,
|
|
59
|
+
props = _objectWithoutProperties(_ref, _excluded);
|
|
60
|
+
let contextValue = context;
|
|
75
61
|
|
|
62
|
+
// We should construct the context, when root component is not passed into `bootstrap`.
|
|
76
63
|
if (!((_contextValue = contextValue) !== null && _contextValue !== void 0 && _contextValue.runner)) {
|
|
77
64
|
contextValue = getInitialContext(runner);
|
|
78
65
|
runner.init({
|
|
@@ -82,18 +69,15 @@ export const createApp = ({
|
|
|
82
69
|
context: context1
|
|
83
70
|
}) => {
|
|
84
71
|
var _App$init;
|
|
85
|
-
|
|
86
72
|
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
73
|
}
|
|
88
74
|
});
|
|
89
75
|
}
|
|
90
|
-
|
|
91
76
|
return /*#__PURE__*/_jsx(RuntimeReactContext.Provider, {
|
|
92
77
|
value: contextValue,
|
|
93
78
|
children: /*#__PURE__*/_jsx(App, _objectSpread({}, props))
|
|
94
79
|
});
|
|
95
80
|
};
|
|
96
|
-
|
|
97
81
|
return hoistNonReactStatics(WrapComponent, App);
|
|
98
82
|
}
|
|
99
83
|
});
|
|
@@ -110,19 +94,20 @@ id,
|
|
|
110
94
|
/**
|
|
111
95
|
* root.render need use root to run function
|
|
112
96
|
*/
|
|
113
|
-
root, ReactDOM
|
|
97
|
+
root, ReactDOM
|
|
98
|
+
// eslint-disable-next-line consistent-return
|
|
99
|
+
) => {
|
|
114
100
|
let App = BootApp;
|
|
115
|
-
let runner = runnerMap.get(App);
|
|
101
|
+
let runner = runnerMap.get(App);
|
|
116
102
|
|
|
103
|
+
// ensure Component used is created by `createApp`
|
|
117
104
|
if (!runner) {
|
|
118
105
|
App = createApp({
|
|
119
106
|
plugins: []
|
|
120
107
|
})(App);
|
|
121
108
|
runner = runnerMap.get(App);
|
|
122
109
|
}
|
|
123
|
-
|
|
124
110
|
const context = getInitialContext(runner);
|
|
125
|
-
|
|
126
111
|
const runInit = _context => runner.init({
|
|
127
112
|
context: _context
|
|
128
113
|
}, {
|
|
@@ -130,33 +115,27 @@ root, ReactDOM = defaultReactDOM) => {
|
|
|
130
115
|
context: context1
|
|
131
116
|
}) => {
|
|
132
117
|
var _App, _App$init2;
|
|
133
|
-
|
|
134
118
|
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
119
|
}
|
|
136
|
-
});
|
|
137
|
-
|
|
120
|
+
});
|
|
138
121
|
|
|
122
|
+
// don't mount the App, let user in charge of it.
|
|
139
123
|
if (!id) {
|
|
140
124
|
return /*#__PURE__*/React.createElement(App, {
|
|
141
125
|
context
|
|
142
126
|
});
|
|
143
127
|
}
|
|
144
|
-
|
|
145
128
|
const isBrowser = typeof window !== 'undefined' && window.name !== 'nodejs';
|
|
146
|
-
|
|
147
129
|
if (isBrowser) {
|
|
148
130
|
if (isClientArgs(id)) {
|
|
149
131
|
var _ssrData$data, _ssrData$data2;
|
|
150
|
-
|
|
151
132
|
const ssrData = window._SSR_DATA;
|
|
152
133
|
const loadersData = (ssrData === null || ssrData === void 0 ? void 0 : (_ssrData$data = ssrData.data) === null || _ssrData$data === void 0 ? void 0 : _ssrData$data.loadersData) || {};
|
|
153
134
|
const initialLoadersState = Object.keys(loadersData).reduce((res, key) => {
|
|
154
135
|
const loaderData = loadersData[key];
|
|
155
|
-
|
|
156
136
|
if (loaderData.loading !== false) {
|
|
157
137
|
return res;
|
|
158
138
|
}
|
|
159
|
-
|
|
160
139
|
res[key] = loaderData;
|
|
161
140
|
return res;
|
|
162
141
|
}, {});
|
|
@@ -169,29 +148,43 @@ root, ReactDOM = defaultReactDOM) => {
|
|
|
169
148
|
} : {}));
|
|
170
149
|
context.initialData = ssrData === null || ssrData === void 0 ? void 0 : (_ssrData$data2 = ssrData.data) === null || _ssrData$data2 === void 0 ? void 0 : _ssrData$data2.initialData;
|
|
171
150
|
const initialData = await runInit(context);
|
|
172
|
-
|
|
173
151
|
if (initialData) {
|
|
174
152
|
context.initialData = initialData;
|
|
175
153
|
}
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
154
|
+
const rootElement = typeof id !== 'string' ? id : document.getElementById(id || 'root');
|
|
155
|
+
if (!ReactDOM) {
|
|
156
|
+
throw Error('The `bootstrap` need provide `ReactDOM` parameter');
|
|
157
|
+
}
|
|
158
|
+
// https://reactjs.org/blog/2022/03/08/react-18-upgrade-guide.html
|
|
179
159
|
const ModernRender = App => {
|
|
180
160
|
if (IS_REACT18) {
|
|
181
|
-
(root
|
|
161
|
+
if (root) {
|
|
162
|
+
root.render(App);
|
|
163
|
+
} else if (ReactDOM.createRoot) {
|
|
164
|
+
ReactDOM.createRoot(rootElement).render(App);
|
|
165
|
+
} else {
|
|
166
|
+
throw Error('The `bootstrap` `ReactDOM` parameter needs to provide the `createRoot` method');
|
|
167
|
+
}
|
|
182
168
|
} else {
|
|
169
|
+
if (!ReactDOM.render) {
|
|
170
|
+
throw Error('The `bootstrap` `ReactDOM` parameter needs to provide the `render` method');
|
|
171
|
+
}
|
|
183
172
|
ReactDOM.render(App, rootElement);
|
|
184
173
|
}
|
|
185
174
|
};
|
|
186
|
-
|
|
187
175
|
const ModernHydrate = (App, callback) => {
|
|
188
176
|
if (IS_REACT18) {
|
|
177
|
+
if (!ReactDOM.hydrateRoot) {
|
|
178
|
+
throw Error('The `bootstrap` `ReactDOM` parameter needs to provide the `hydrateRoot` method');
|
|
179
|
+
}
|
|
189
180
|
ReactDOM.hydrateRoot(rootElement, App);
|
|
190
181
|
} else {
|
|
182
|
+
if (!ReactDOM.hydrate) {
|
|
183
|
+
throw Error('The `bootstrap` `ReactDOM` parameter needs to provide the `hydrate` method');
|
|
184
|
+
}
|
|
191
185
|
ReactDOM.hydrate(App, rootElement, callback);
|
|
192
186
|
}
|
|
193
187
|
};
|
|
194
|
-
|
|
195
188
|
return runner.client({
|
|
196
189
|
App,
|
|
197
190
|
context,
|
|
@@ -219,12 +212,37 @@ root, ReactDOM = defaultReactDOM) => {
|
|
|
219
212
|
skipStatic: process.env.NODE_ENV === 'production' && !id.staticGenerate
|
|
220
213
|
})
|
|
221
214
|
});
|
|
215
|
+
|
|
216
|
+
// Handle redirects from React Router with an HTTP redirect
|
|
217
|
+
const isRedirectResponse = result => {
|
|
218
|
+
if (typeof Response !== 'undefined' &&
|
|
219
|
+
// fix: ssg workflow doesn't inject Web Response
|
|
220
|
+
result instanceof Response && result.status >= 300 && result.status <= 399) {
|
|
221
|
+
const {
|
|
222
|
+
status
|
|
223
|
+
} = result;
|
|
224
|
+
const redirectUrl = result.headers.get('Location') || '/';
|
|
225
|
+
const {
|
|
226
|
+
ssrContext
|
|
227
|
+
} = context;
|
|
228
|
+
if (ssrContext) {
|
|
229
|
+
ssrContext.res.statusCode = status;
|
|
230
|
+
ssrContext.res.setHeader('Location', redirectUrl);
|
|
231
|
+
ssrContext.redirection.status = status;
|
|
232
|
+
ssrContext.redirection.url = redirectUrl;
|
|
233
|
+
}
|
|
234
|
+
return true;
|
|
235
|
+
}
|
|
236
|
+
return false;
|
|
237
|
+
};
|
|
222
238
|
const initialData = await runInit(context);
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
239
|
+
if (!isRedirectResponse(initialData)) {
|
|
240
|
+
context.initialData = initialData;
|
|
241
|
+
return runner.server({
|
|
242
|
+
App,
|
|
243
|
+
context
|
|
244
|
+
});
|
|
245
|
+
}
|
|
228
246
|
}
|
|
229
247
|
};
|
|
230
248
|
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,
|