@modern-js/runtime 1.21.5 → 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.
Files changed (256) hide show
  1. package/CHANGELOG.md +117 -18
  2. package/dist/js/modern/cli/index.js +3 -5
  3. package/dist/js/modern/core/app-config.js +2 -1
  4. package/dist/js/modern/core/compatible.js +47 -48
  5. package/dist/js/modern/core/index.js +4 -3
  6. package/dist/js/modern/core/loader/loaderManager.js +12 -34
  7. package/dist/js/modern/core/loader/useLoader.js +8 -26
  8. package/dist/js/modern/core/plugin.js +6 -28
  9. package/dist/js/modern/document/Body.js +17 -0
  10. package/dist/js/modern/document/DocumentContext.js +6 -0
  11. package/dist/js/modern/document/DocumentStructrueContext.js +7 -0
  12. package/dist/js/modern/document/Head.js +24 -0
  13. package/dist/js/modern/document/Html.js +92 -0
  14. package/dist/js/modern/document/Root.js +31 -0
  15. package/dist/js/modern/document/Scripts.js +10 -0
  16. package/dist/js/modern/document/cli/index.js +130 -0
  17. package/dist/js/modern/document/constants.js +19 -0
  18. package/dist/js/modern/document/index.js +8 -0
  19. package/dist/js/modern/index.js +2 -1
  20. package/dist/js/modern/router/cli/index.js +20 -20
  21. package/dist/js/modern/router/runtime/index.js +1 -1
  22. package/dist/js/modern/router/runtime/plugin.js +25 -52
  23. package/dist/js/modern/router/runtime/plugin.node.js +137 -0
  24. package/dist/js/modern/router/runtime/root/index.js +19 -0
  25. package/dist/js/modern/router/runtime/root/load.js +61 -0
  26. package/dist/js/modern/router/runtime/types.js +1 -0
  27. package/dist/js/modern/router/runtime/utils.js +99 -58
  28. package/dist/js/modern/router/runtime/withRouter.js +20 -0
  29. package/dist/js/modern/runtime-context.js +2 -1
  30. package/dist/js/modern/ssr/cli/index.js +35 -17
  31. package/dist/js/modern/ssr/index.js +64 -51
  32. package/dist/js/modern/ssr/index.node.js +6 -15
  33. package/dist/js/modern/ssr/prefetch.js +0 -7
  34. package/dist/js/modern/ssr/react/prerender/index.js +2 -23
  35. package/dist/js/modern/ssr/react/prerender/util.js +2 -17
  36. package/dist/js/modern/ssr/react/withCallback/index.js +0 -1
  37. package/dist/js/modern/ssr/serverRender/helmet.js +12 -20
  38. package/dist/js/modern/ssr/serverRender/index.js +12 -27
  39. package/dist/js/modern/ssr/serverRender/renderToStream/buildTemplate.after.js +38 -0
  40. package/dist/js/modern/ssr/serverRender/renderToStream/buildTemplate.share.js +5 -0
  41. package/dist/js/modern/ssr/serverRender/renderToStream/bulidTemplate.before.js +58 -0
  42. package/dist/js/modern/ssr/serverRender/renderToStream/index.js +40 -0
  43. package/dist/js/modern/ssr/serverRender/renderToStream/loadable.js +24 -0
  44. package/dist/js/modern/ssr/serverRender/renderToStream/renderToPipe.js +72 -0
  45. package/dist/js/modern/ssr/serverRender/renderToStream/styledComponent.js +11 -0
  46. package/dist/js/modern/ssr/serverRender/renderToStream/template.js +18 -0
  47. package/dist/js/modern/ssr/serverRender/renderToStream/type.js +0 -0
  48. package/dist/js/modern/ssr/serverRender/{entry.js → renderToString/entry.js} +6 -40
  49. package/dist/js/modern/ssr/serverRender/renderToString/index.js +29 -0
  50. package/dist/js/modern/ssr/serverRender/{loadable.js → renderToString/loadable.js} +2 -24
  51. package/dist/js/modern/ssr/serverRender/{reduce.js → renderToString/reduce.js} +0 -2
  52. package/dist/js/modern/ssr/serverRender/{styledComponent.js → renderToString/styledComponent.js} +0 -0
  53. package/dist/js/modern/ssr/serverRender/{template.js → renderToString/template.js} +0 -15
  54. package/dist/js/modern/ssr/serverRender/{type.js → renderToString/type.js} +0 -2
  55. package/dist/js/modern/ssr/serverRender/types.js +2 -0
  56. package/dist/js/modern/ssr/serverRender/utils.js +20 -0
  57. package/dist/js/modern/ssr/utils.js +8 -13
  58. package/dist/js/modern/state/cli/index.js +0 -10
  59. package/dist/js/modern/state/runtime/plugin.js +1 -14
  60. package/dist/js/node/cli/index.js +3 -13
  61. package/dist/js/node/common.js +0 -2
  62. package/dist/js/node/core/app-config.js +2 -5
  63. package/dist/js/node/core/compatible.js +47 -66
  64. package/dist/js/node/core/index.js +8 -17
  65. package/dist/js/node/core/loader/index.js +0 -2
  66. package/dist/js/node/core/loader/loaderManager.js +12 -37
  67. package/dist/js/node/core/loader/useLoader.js +8 -31
  68. package/dist/js/node/core/plugin.js +5 -34
  69. package/dist/js/node/document/Body.js +26 -0
  70. package/dist/js/node/document/DocumentContext.js +14 -0
  71. package/dist/js/node/document/DocumentStructrueContext.js +15 -0
  72. package/dist/js/node/document/Head.js +33 -0
  73. package/dist/js/node/document/Html.js +98 -0
  74. package/dist/js/node/document/Root.js +41 -0
  75. package/dist/js/node/document/Scripts.js +17 -0
  76. package/dist/js/node/document/cli/index.js +140 -0
  77. package/dist/js/node/document/constants.js +36 -0
  78. package/dist/js/node/document/index.js +93 -0
  79. package/dist/js/node/exports/head.js +0 -5
  80. package/dist/js/node/exports/loadable.js +0 -5
  81. package/dist/js/node/exports/server.js +0 -2
  82. package/dist/js/node/exports/styled.js +0 -5
  83. package/dist/js/node/index.js +5 -5
  84. package/dist/js/node/router/cli/index.js +20 -24
  85. package/dist/js/node/router/index.js +0 -4
  86. package/dist/js/node/router/runtime/DefaultNotFound.js +1 -5
  87. package/dist/js/node/router/runtime/index.js +4 -9
  88. package/dist/js/node/router/runtime/plugin.js +23 -65
  89. package/dist/js/node/router/runtime/plugin.node.js +147 -0
  90. package/dist/js/node/router/runtime/root/index.js +26 -0
  91. package/dist/js/node/router/runtime/root/load.js +69 -0
  92. package/dist/js/node/router/runtime/types.js +5 -0
  93. package/dist/js/node/router/runtime/utils.js +101 -67
  94. package/dist/js/node/router/runtime/withRouter.js +26 -0
  95. package/dist/js/node/runtime-context.js +4 -4
  96. package/dist/js/node/ssr/cli/index.js +35 -21
  97. package/dist/js/node/ssr/index.js +63 -62
  98. package/dist/js/node/ssr/index.node.js +6 -25
  99. package/dist/js/node/ssr/prefetch.js +0 -11
  100. package/dist/js/node/ssr/react/index.js +0 -2
  101. package/dist/js/node/ssr/react/nossr/index.js +0 -6
  102. package/dist/js/node/ssr/react/prerender/index.js +2 -30
  103. package/dist/js/node/ssr/react/prerender/util.js +2 -25
  104. package/dist/js/node/ssr/react/withCallback/index.js +1 -4
  105. package/dist/js/node/ssr/serverRender/helmet.js +13 -20
  106. package/dist/js/node/ssr/serverRender/index.js +14 -39
  107. package/dist/js/node/ssr/serverRender/renderToStream/buildTemplate.after.js +45 -0
  108. package/dist/js/node/ssr/serverRender/renderToStream/buildTemplate.share.js +13 -0
  109. package/dist/js/node/ssr/serverRender/renderToStream/bulidTemplate.before.js +65 -0
  110. package/dist/js/node/ssr/serverRender/renderToStream/index.js +48 -0
  111. package/dist/js/node/ssr/serverRender/renderToStream/loadable.js +30 -0
  112. package/dist/js/node/ssr/serverRender/renderToStream/renderToPipe.js +79 -0
  113. package/dist/js/node/ssr/serverRender/renderToStream/styledComponent.js +17 -0
  114. package/dist/js/node/ssr/serverRender/renderToStream/template.js +25 -0
  115. package/dist/js/node/ssr/serverRender/renderToStream/type.js +0 -0
  116. package/dist/js/node/ssr/serverRender/{entry.js → renderToString/entry.js} +13 -64
  117. package/dist/js/node/ssr/serverRender/renderToString/index.js +37 -0
  118. package/dist/js/node/ssr/serverRender/{loadable.js → renderToString/loadable.js} +3 -28
  119. package/dist/js/node/ssr/serverRender/{reduce.js → renderToString/reduce.js} +0 -3
  120. package/dist/js/node/ssr/serverRender/{styledComponent.js → renderToString/styledComponent.js} +0 -3
  121. package/dist/js/node/ssr/serverRender/{template.js → renderToString/template.js} +0 -18
  122. package/dist/js/node/ssr/serverRender/{type.js → renderToString/type.js} +0 -2
  123. package/dist/js/node/ssr/serverRender/types.js +12 -0
  124. package/dist/js/node/ssr/serverRender/utils.js +28 -0
  125. package/dist/js/node/ssr/utils.js +10 -21
  126. package/dist/js/node/state/cli/index.js +0 -15
  127. package/dist/js/node/state/index.js +0 -4
  128. package/dist/js/node/state/plugins.js +0 -11
  129. package/dist/js/node/state/runtime/index.js +0 -7
  130. package/dist/js/node/state/runtime/plugin.js +1 -25
  131. package/dist/js/treeshaking/cli/index.js +3 -3
  132. package/dist/js/treeshaking/core/app-config.js +2 -1
  133. package/dist/js/treeshaking/core/compatible.js +50 -65
  134. package/dist/js/treeshaking/core/index.js +4 -3
  135. package/dist/js/treeshaking/core/loader/loaderManager.js +19 -51
  136. package/dist/js/treeshaking/core/loader/useLoader.js +11 -28
  137. package/dist/js/treeshaking/core/plugin.js +6 -51
  138. package/dist/js/treeshaking/document/Body.js +14 -0
  139. package/dist/js/treeshaking/document/DocumentContext.js +6 -0
  140. package/dist/js/treeshaking/document/DocumentStructrueContext.js +7 -0
  141. package/dist/js/treeshaking/document/Head.js +21 -0
  142. package/dist/js/treeshaking/document/Html.js +104 -0
  143. package/dist/js/treeshaking/document/Root.js +24 -0
  144. package/dist/js/treeshaking/document/Scripts.js +10 -0
  145. package/dist/js/treeshaking/document/cli/index.js +170 -0
  146. package/dist/js/treeshaking/document/constants.js +16 -0
  147. package/dist/js/treeshaking/document/index.js +8 -0
  148. package/dist/js/treeshaking/index.js +2 -1
  149. package/dist/js/treeshaking/router/cli/index.js +26 -22
  150. package/dist/js/treeshaking/router/runtime/index.js +1 -1
  151. package/dist/js/treeshaking/router/runtime/plugin.js +28 -54
  152. package/dist/js/treeshaking/router/runtime/plugin.node.js +161 -0
  153. package/dist/js/treeshaking/router/runtime/root/index.js +17 -0
  154. package/dist/js/treeshaking/router/runtime/root/load.js +102 -0
  155. package/dist/js/treeshaking/router/runtime/types.js +1 -0
  156. package/dist/js/treeshaking/router/runtime/utils.js +104 -58
  157. package/dist/js/treeshaking/router/runtime/withRouter.js +18 -0
  158. package/dist/js/treeshaking/runtime-context.js +2 -1
  159. package/dist/js/treeshaking/ssr/cli/index.js +43 -23
  160. package/dist/js/treeshaking/ssr/index.js +74 -59
  161. package/dist/js/treeshaking/ssr/index.node.js +18 -31
  162. package/dist/js/treeshaking/ssr/prefetch.js +0 -13
  163. package/dist/js/treeshaking/ssr/react/nossr/index.js +3 -4
  164. package/dist/js/treeshaking/ssr/react/prerender/index.js +2 -21
  165. package/dist/js/treeshaking/ssr/react/prerender/util.js +3 -20
  166. package/dist/js/treeshaking/ssr/react/withCallback/index.js +1 -2
  167. package/dist/js/treeshaking/ssr/serverRender/helmet.js +12 -11
  168. package/dist/js/treeshaking/ssr/serverRender/index.js +33 -55
  169. package/dist/js/treeshaking/ssr/serverRender/renderToStream/buildTemplate.after.js +32 -0
  170. package/dist/js/treeshaking/ssr/serverRender/renderToStream/buildTemplate.share.js +7 -0
  171. package/dist/js/treeshaking/ssr/serverRender/renderToStream/bulidTemplate.before.js +60 -0
  172. package/dist/js/treeshaking/ssr/serverRender/renderToStream/index.js +50 -0
  173. package/dist/js/treeshaking/ssr/serverRender/renderToStream/loadable.js +22 -0
  174. package/dist/js/treeshaking/ssr/serverRender/renderToStream/renderToPipe.js +68 -0
  175. package/dist/js/treeshaking/ssr/serverRender/renderToStream/styledComponent.js +10 -0
  176. package/dist/js/treeshaking/ssr/serverRender/renderToStream/template.js +22 -0
  177. package/dist/js/treeshaking/ssr/serverRender/renderToStream/type.js +0 -0
  178. package/dist/js/treeshaking/ssr/serverRender/{entry.js → renderToString/entry.js} +23 -76
  179. package/dist/js/treeshaking/ssr/serverRender/renderToString/index.js +44 -0
  180. package/dist/js/treeshaking/ssr/serverRender/{loadable.js → renderToString/loadable.js} +7 -34
  181. package/dist/js/treeshaking/ssr/serverRender/{reduce.js → renderToString/reduce.js} +0 -2
  182. package/dist/js/treeshaking/ssr/serverRender/{styledComponent.js → renderToString/styledComponent.js} +0 -0
  183. package/dist/js/treeshaking/ssr/serverRender/{template.js → renderToString/template.js} +2 -18
  184. package/dist/js/treeshaking/ssr/serverRender/{type.js → renderToString/type.js} +0 -2
  185. package/dist/js/treeshaking/ssr/serverRender/types.js +2 -0
  186. package/dist/js/treeshaking/ssr/serverRender/utils.js +28 -0
  187. package/dist/js/treeshaking/ssr/utils.js +20 -17
  188. package/dist/js/treeshaking/state/cli/index.js +3 -10
  189. package/dist/js/treeshaking/state/runtime/plugin.js +2 -10
  190. package/dist/types/cli/index.d.ts +0 -2
  191. package/dist/types/common.d.ts +0 -2
  192. package/dist/types/core/compatible.d.ts +2 -2
  193. package/dist/types/core/index.d.ts +2 -2
  194. package/dist/types/core/loader/loaderManager.d.ts +0 -1
  195. package/dist/types/core/loader/useLoader.d.ts +0 -5
  196. package/dist/types/core/plugin.d.ts +2 -14
  197. package/dist/types/document/Body.d.ts +4 -0
  198. package/dist/types/document/DocumentContext.d.ts +13 -0
  199. package/dist/types/document/DocumentStructrueContext.d.ts +10 -0
  200. package/dist/types/document/Head.d.ts +5 -0
  201. package/dist/types/document/Html.d.ts +4 -0
  202. package/dist/types/document/Root.d.ts +8 -0
  203. package/dist/types/document/Scripts.d.ts +2 -0
  204. package/dist/types/document/cli/index.d.ts +3 -0
  205. package/dist/types/document/constants.d.ts +14 -0
  206. package/dist/types/document/index.d.ts +8 -0
  207. package/dist/types/exports/server.d.ts +21 -1
  208. package/dist/types/index.d.ts +2 -1
  209. package/dist/types/router/cli/index.d.ts +0 -2
  210. package/dist/types/router/runtime/DefaultNotFound.d.ts +1 -0
  211. package/dist/types/router/runtime/index.d.ts +3 -3
  212. package/dist/types/router/runtime/plugin.d.ts +2 -45
  213. package/dist/types/router/runtime/plugin.node.d.ts +8 -0
  214. package/dist/types/router/runtime/root/index.d.ts +8 -0
  215. package/dist/types/router/runtime/root/load.d.ts +22 -0
  216. package/dist/types/router/runtime/types.d.ts +36 -0
  217. package/dist/types/router/runtime/utils.d.ts +5 -2
  218. package/dist/types/router/runtime/withRouter.d.ts +8 -0
  219. package/dist/types/runtime-context.d.ts +3 -1
  220. package/dist/types/ssr/cli/index.d.ts +0 -2
  221. package/dist/types/ssr/index.d.ts +2 -2
  222. package/dist/types/ssr/index.node.d.ts +1 -1
  223. package/dist/types/ssr/prefetch.d.ts +2 -2
  224. package/dist/types/ssr/react/nossr/index.d.ts +3 -1
  225. package/dist/types/ssr/serverRender/index.d.ts +2 -3
  226. package/dist/types/ssr/serverRender/renderToStream/buildTemplate.after.d.ts +7 -0
  227. package/dist/types/ssr/serverRender/renderToStream/buildTemplate.share.d.ts +3 -0
  228. package/dist/types/ssr/serverRender/renderToStream/bulidTemplate.before.d.ts +2 -0
  229. package/dist/types/ssr/serverRender/renderToStream/index.d.ts +6 -0
  230. package/dist/types/ssr/serverRender/renderToStream/loadable.d.ts +16 -0
  231. package/dist/types/ssr/serverRender/renderToStream/renderToPipe.d.ts +8 -0
  232. package/dist/types/ssr/serverRender/renderToStream/styledComponent.d.ts +12 -0
  233. package/dist/types/ssr/serverRender/renderToStream/template.d.ts +3 -0
  234. package/dist/types/ssr/serverRender/renderToStream/type.d.ts +4 -0
  235. package/dist/types/ssr/serverRender/{entry.d.ts → renderToString/entry.d.ts} +2 -2
  236. package/dist/types/ssr/serverRender/renderToString/index.d.ts +6 -0
  237. package/dist/types/ssr/serverRender/{loadable.d.ts → renderToString/loadable.d.ts} +0 -0
  238. package/dist/types/ssr/serverRender/{reduce.d.ts → renderToString/reduce.d.ts} +0 -0
  239. package/dist/types/ssr/serverRender/{styledComponent.d.ts → renderToString/styledComponent.d.ts} +0 -0
  240. package/dist/types/ssr/serverRender/{template.d.ts → renderToString/template.d.ts} +0 -0
  241. package/dist/types/ssr/serverRender/{type.d.ts → renderToString/type.d.ts} +1 -8
  242. package/dist/types/ssr/serverRender/types.d.ts +15 -0
  243. package/dist/types/ssr/serverRender/utils.d.ts +3 -0
  244. package/dist/types/ssr/utils.d.ts +4 -2
  245. package/dist/types/state/cli/index.d.ts +0 -2
  246. package/dist/types/state/runtime/plugin.d.ts +1 -1
  247. package/dist/types/state/types.d.ts +0 -1
  248. package/package.json +63 -71
  249. package/types/index.d.ts +13 -0
  250. package/types/router.d.ts +14 -0
  251. package/dist/js/modern/ssr/serverRender/measure.js +0 -11
  252. package/dist/js/node/ssr/serverRender/measure.js +0 -20
  253. package/dist/js/treeshaking/ssr/serverRender/measure.js +0 -17
  254. package/dist/types/ssr/serverRender/measure.d.ts +0 -1
  255. package/lib/types.d.ts +0 -10
  256. package/type.d.ts +0 -5
@@ -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); // SSR render should ignore `_cache` prop
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); // unsubscribe old loader onChange event
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
- } // skip this loader, then try to unlisten loader change
58
-
47
+ }
59
48
 
49
+ // skip this loader, then try to unlisten loader change
60
50
  if (options.skip) {
61
51
  return undefined;
62
- } // do not load data again in CSR hydrate stage if SSR data exists
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;
@@ -1,12 +1,8 @@
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
1
  import { createManager, createPipeline, createAsyncPipeline } from '@modern-js/plugin';
8
2
  import { createLoaderManager } from "./loader/loaderManager";
9
- const hoc = createPipeline(); // eslint-disable-next-line @typescript-eslint/no-empty-interface
3
+ const hoc = createPipeline();
4
+
5
+ // eslint-disable-next-line @typescript-eslint/no-empty-interface
10
6
 
11
7
  const provide = createPipeline();
12
8
  const client = createAsyncPipeline();
@@ -21,43 +17,25 @@ const runtimeHooks = {
21
17
  init,
22
18
  pickContext
23
19
  };
20
+
24
21
  /** All hooks of runtime plugin. */
25
22
 
26
23
  export const createRuntime = () => createManager(runtimeHooks);
24
+
27
25
  /**
28
26
  * register init hook. It would be revoked both ssr and csr.
29
27
  */
30
-
31
28
  const registerInit = (App, _init) => {
32
29
  const originalInit = App.init;
33
-
34
30
  App.init = async context => {
35
31
  if (!context.loaderManager) {
36
32
  context.loaderManager = createLoaderManager({});
37
33
  }
38
-
39
34
  await Promise.all([originalInit === null || originalInit === void 0 ? void 0 : originalInit(context), _init === null || _init === void 0 ? void 0 : _init(context)]);
40
35
  };
41
36
  };
42
- /**
43
- * register prefetch hook. It would be revoked both ssr and csr.
44
- * But if ssr success, It wont exec in csr again.
45
- * If ssr prefetch failed, It will fallback to exec in csr.
46
- */
47
-
48
-
49
- const registerPrefetch = (App, prefetch) => {
50
- const originalPrefetch = App.prefetch;
51
-
52
- App.prefetch = async context => {
53
- const originResult = await (originalPrefetch === null || originalPrefetch === void 0 ? void 0 : originalPrefetch(context));
54
- const result = await (prefetch === null || prefetch === void 0 ? void 0 : prefetch(context));
55
- return _objectSpread(_objectSpread({}, originResult), result);
56
- };
57
- };
58
-
59
37
  export const runtime = createRuntime();
60
38
  export const {
61
39
  createPlugin
62
40
  } = runtime;
63
- export { registerInit, registerPrefetch };
41
+ export { registerInit };
@@ -0,0 +1,17 @@
1
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
2
+ import React, { useContext } from 'react';
3
+ import { DOCUMENT_CHUNKSMAP_PLACEHOLDER, DOCUMENT_SSRDATASCRIPT_PLACEHOLDER } from "./constants";
4
+ import { DocumentStructrueContext } from "./DocumentStructrueContext";
5
+ import { DefaultRoot } from "./Root";
6
+ import { jsxs as _jsxs } from "react/jsx-runtime";
7
+ export function Body(props) {
8
+ const {
9
+ hasSetRoot
10
+ } = useContext(DocumentStructrueContext);
11
+ const {
12
+ children
13
+ } = props;
14
+ return /*#__PURE__*/_jsxs("body", {
15
+ children: [hasSetRoot ? null : DefaultRoot, children, `${DOCUMENT_CHUNKSMAP_PLACEHOLDER}`, `${DOCUMENT_SSRDATASCRIPT_PLACEHOLDER}`]
16
+ });
17
+ }
@@ -0,0 +1,6 @@
1
+ import React from 'react';
2
+ export const DocumentContext = /*#__PURE__*/React.createContext({
3
+ config: {},
4
+ templateParams: {},
5
+ processEnv: {}
6
+ });
@@ -0,0 +1,7 @@
1
+ import React from 'react';
2
+ export const DocumentStructrueContext = /*#__PURE__*/React.createContext({
3
+ hasSetHead: false,
4
+ hasSetScripts: false,
5
+ hasSetBody: false,
6
+ hasSetRoot: false
7
+ });
@@ -0,0 +1,24 @@
1
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
2
+ import React, { useContext } from 'react';
3
+ import { DocumentStructrueContext } from "./DocumentStructrueContext";
4
+ import { Scripts } from "./Scripts";
5
+ import { DOCUMENT_META_PLACEHOLDER } from "./constants";
6
+ import { jsx as _jsx } from "react/jsx-runtime";
7
+ import { jsxs as _jsxs } from "react/jsx-runtime";
8
+ export function Head(props) {
9
+ const {
10
+ hasSetScripts
11
+ } = useContext(DocumentStructrueContext);
12
+ const {
13
+ children
14
+ } = props;
15
+ // todo: verify the children
16
+ return /*#__PURE__*/_jsxs("head", {
17
+ children: [`${DOCUMENT_META_PLACEHOLDER}`, !hasSetScripts && /*#__PURE__*/_jsx(Scripts, {}), children]
18
+ });
19
+ }
20
+ export function DefaultHead() {
21
+ return /*#__PURE__*/_jsx("head", {
22
+ children: `${DOCUMENT_META_PLACEHOLDER}`
23
+ });
24
+ }
@@ -0,0 +1,92 @@
1
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
2
+ import React from 'react';
3
+ import { Body } from "./Body";
4
+ import { DocumentStructrueContext } from "./DocumentStructrueContext";
5
+ import { Head } from "./Head";
6
+
7
+ /**
8
+ * get the directly son element
9
+ */
10
+ import { jsxs as _jsxs } from "react/jsx-runtime";
11
+ import { jsx as _jsx } from "react/jsx-runtime";
12
+ function findTargetChild(tag, children) {
13
+ return children.find(item => getEleType(item) === tag);
14
+ }
15
+
16
+ /**
17
+ * get the type of react element
18
+ */
19
+ function getEleType(ele) {
20
+ // fixme: 非 react 的类型,有点儿问题。
21
+ return typeof (ele === null || ele === void 0 ? void 0 : ele.type) === 'function' ? ele.type.name : ele === null || ele === void 0 ? void 0 : ele.type;
22
+ }
23
+
24
+ /**
25
+ * get the children(grandChild included) with target type
26
+ * @param tag the element type
27
+ * @param children son element
28
+ * @returns target element
29
+ */
30
+ function findTargetElement(tag, children) {
31
+ if (children.length === 0) {
32
+ return null;
33
+ }
34
+ let nextChildren = [];
35
+ for (const item of children) {
36
+ var _item$props;
37
+ if (tag === getEleType(item)) {
38
+ return item;
39
+ }
40
+ if (item !== null && item !== void 0 && (_item$props = item.props) !== null && _item$props !== void 0 && _item$props.children) {
41
+ nextChildren = nextChildren.concat(item.props.children);
42
+ }
43
+ }
44
+ return findTargetElement(tag, nextChildren);
45
+ }
46
+ export function Html(props) {
47
+ const {
48
+ children
49
+ } = props;
50
+
51
+ // deal with the component with default
52
+ const hasSetHead = Boolean(findTargetChild('Head', children));
53
+ const hasSetScripts = Boolean(findTargetElement('Scripts', children));
54
+ const hasSetBody = Boolean(findTargetChild('Body', children));
55
+ const hasSetRoot = Boolean(findTargetElement('Root', children));
56
+ const notMissMustChild = [hasSetHead, hasSetBody
57
+ // hasSetScripts,
58
+ // hasSetRoot,
59
+ ].every(item => item);
60
+
61
+ // todo: or throw an error
62
+ if (!notMissMustChild) {
63
+ return /*#__PURE__*/_jsx("html", {
64
+ children: /*#__PURE__*/_jsxs("body", {
65
+ style: {
66
+ color: 'red'
67
+ },
68
+ children: [`Miss the `, [hasSetHead, hasSetBody
69
+ // hasSetScripts,
70
+ // hasSetRoot,
71
+ ].map((item, index) => {
72
+ return item ? null : ['Head', 'Body'
73
+ // 'Scripts',
74
+ // 'Root',
75
+ ][index];
76
+ }), ` Element`]
77
+ })
78
+ });
79
+ }
80
+ return /*#__PURE__*/_jsx("html", {
81
+ children: /*#__PURE__*/_jsxs(DocumentStructrueContext.Provider, {
82
+ value: {
83
+ hasSetHead,
84
+ hasSetScripts,
85
+ hasSetRoot,
86
+ hasSetBody,
87
+ docChild: children
88
+ },
89
+ children: [!hasSetHead && /*#__PURE__*/_jsx(Head, {}), !hasSetBody && /*#__PURE__*/_jsx(Body, {}), children]
90
+ })
91
+ });
92
+ }
@@ -0,0 +1,31 @@
1
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
2
+ import React, { useContext } from 'react';
3
+ import { DocumentContext } from "./DocumentContext";
4
+ import { DOCUMENT_SSR_PLACEHOLDER } from "./constants";
5
+ import { jsxs as _jsxs } from "react/jsx-runtime";
6
+ export function Root(props) {
7
+ const {
8
+ rootId,
9
+ children
10
+ } = props;
11
+ const {
12
+ templateParams: {
13
+ mountId = 'root'
14
+ }
15
+ } = useContext(DocumentContext);
16
+ return /*#__PURE__*/_jsxs("div", {
17
+ id: `${rootId || mountId}`,
18
+ children: [`${DOCUMENT_SSR_PLACEHOLDER}`, children]
19
+ });
20
+ }
21
+ export function DefaultRoot(props) {
22
+ const {
23
+ templateParams: {
24
+ mountId
25
+ }
26
+ } = useContext(DocumentContext);
27
+ return /*#__PURE__*/_jsxs("div", {
28
+ id: `${mountId}`,
29
+ children: [`${DOCUMENT_SSR_PLACEHOLDER}`, props.children]
30
+ });
31
+ }
@@ -0,0 +1,10 @@
1
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
2
+ import React from 'react';
3
+ import { DOCUMENT_SCRIPTS_PLACEHOLDER } from "./constants";
4
+ import { Fragment as _Fragment } from "react/jsx-runtime";
5
+ import { jsx as _jsx } from "react/jsx-runtime";
6
+ export function Scripts() {
7
+ return /*#__PURE__*/_jsx(_Fragment, {
8
+ children: `${DOCUMENT_SCRIPTS_PLACEHOLDER}`
9
+ });
10
+ }
@@ -0,0 +1,130 @@
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
+ 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; }
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; }
4
+ import path from 'path';
5
+ import React from 'react';
6
+ import ReactDomServer from 'react-dom/server';
7
+ import { build } from 'esbuild';
8
+ import { createDebugger, findExists } from '@modern-js/utils';
9
+ import { DocumentContext } from "../DocumentContext";
10
+ import { DOCUMENT_SCRIPTS_PLACEHOLDER, DOCUMENT_FILE_NAME, DOCUMENT_META_PLACEHOLDER, PLACEHOLDER_REPLACER_MAP, DOC_EXT, DOCUMENT_SSR_PLACEHOLDER, DOCUMENT_CHUNKSMAP_PLACEHOLDER, DOCUMENT_SSRDATASCRIPT_PLACEHOLDER, HTML_SEPARATOR } from "../constants";
11
+ const debug = createDebugger('html_genarate');
12
+ const getDocumenByEntryName = function getDocumenByEntryName(entrypoints, entryName) {
13
+ var _entrypoints$find;
14
+ const entryDir = (_entrypoints$find = entrypoints.find(item => item.entryName === entryName)) === null || _entrypoints$find === void 0 ? void 0 : _entrypoints$find.absoluteEntryDir;
15
+ const docFile = findExists(DOC_EXT.map(item => `${entryDir}${path.sep}${DOCUMENT_FILE_NAME}.${item}`));
16
+ return docFile || undefined;
17
+ };
18
+ export default (() => ({
19
+ name: '@modern-js/plugin-document',
20
+ pre: ['@modern-js/plugin-analyze'],
21
+ setup: async api => {
22
+ // get params for document.tsx
23
+ function getDocParams(params) {
24
+ const {
25
+ config,
26
+ templateParameters,
27
+ entryName
28
+ } = params;
29
+ // for enough params, devide as:process, config, templateParams
30
+ return {
31
+ processEnv: process.env,
32
+ config: {
33
+ output: config.output
34
+ },
35
+ entryName,
36
+ templateParams: templateParameters
37
+ };
38
+ }
39
+ const documentEntry = (entryName, templateParameters) => {
40
+ const {
41
+ entrypoints,
42
+ internalDirectory
43
+ } = api.useAppContext();
44
+ // search the document.[tsx|jsx|js|ts] under entry
45
+ // if not, use main as default
46
+ let documentFilePath = getDocumenByEntryName(entrypoints, entryName);
47
+ if (!documentFilePath) {
48
+ documentFilePath = getDocumenByEntryName(entrypoints, 'main');
49
+ }
50
+ // if no document file, do nothing as default
51
+ if (!documentFilePath) {
52
+ return null;
53
+ }
54
+ return async ({
55
+ htmlWebpackPlugin
56
+ }) => {
57
+ const documentParams = getDocParams({
58
+ config: api.useConfigContext(),
59
+ entryName,
60
+ templateParameters
61
+ });
62
+ const htmlOutputFile = path.join(internalDirectory, `./document/_${entryName}.html.js`);
63
+ // transform document file to html string
64
+ await build({
65
+ entryPoints: [documentFilePath],
66
+ // write: false,
67
+ outfile: htmlOutputFile,
68
+ platform: 'node',
69
+ target: 'es6',
70
+ loader: {
71
+ '.ts': 'ts',
72
+ '.tsx': 'tsx'
73
+ },
74
+ bundle: true,
75
+ plugins: [{
76
+ name: 'make-all-packages-external',
77
+ setup(build) {
78
+ // https://github.com/evanw/esbuild/issues/619#issuecomment-751995294
79
+ build.onResolve({
80
+ filter: /^[^./]|^\.[^./]|^\.\.[^/]/
81
+ }, args => {
82
+ let external = true;
83
+ // FIXME: windows external entrypoint
84
+ if (args.kind === 'entry-point') {
85
+ external = false;
86
+ }
87
+ return {
88
+ path: args.path,
89
+ external
90
+ };
91
+ });
92
+ }
93
+ }]
94
+ });
95
+ const Document = (await import(htmlOutputFile)).default;
96
+ const HTMLElement = /*#__PURE__*/React.createElement(DocumentContext.Provider, {
97
+ value: documentParams
98
+ }, /*#__PURE__*/React.createElement(Document, null));
99
+ const html = ReactDomServer.renderToStaticMarkup(HTMLElement);
100
+ debug("entry %s's document jsx rendered html: %o", entryName, html);
101
+ const scripts = [htmlWebpackPlugin.tags.headTags.filter(item => item.tagName === 'script').join(''), htmlWebpackPlugin.tags.bodyTags.toString()].join('');
102
+ const metas = [templateParameters.meta, htmlWebpackPlugin.tags.headTags.filter(item => item.tagName !== 'script').join('')].join('');
103
+
104
+ // replace the html placeholder while transfer string to jsx component is not a easy way
105
+ return `<!DOCTYPE html>${html}`.replace(DOCUMENT_META_PLACEHOLDER, metas).replace(DOCUMENT_SSR_PLACEHOLDER, HTML_SEPARATOR).replace(DOCUMENT_SCRIPTS_PLACEHOLDER, scripts).replace(DOCUMENT_CHUNKSMAP_PLACEHOLDER, PLACEHOLDER_REPLACER_MAP[DOCUMENT_CHUNKSMAP_PLACEHOLDER]).replace(DOCUMENT_SSRDATASCRIPT_PLACEHOLDER, PLACEHOLDER_REPLACER_MAP[DOCUMENT_SSRDATASCRIPT_PLACEHOLDER]);
106
+ };
107
+ };
108
+ return {
109
+ config: () => {
110
+ return {
111
+ tools: {
112
+ htmlPlugin: (options, entry) => {
113
+ // just for reuse the baseParames calculate by builder:
114
+ // https://github.com/modern-js-dev/modern.js/blob/1abb452a87ae1adbcf8da47d62c05da39cbe4d69/packages/builder/builder-webpack-provider/src/plugins/html.ts#L69-L103
115
+ const hackParameters = typeof (options === null || options === void 0 ? void 0 : options.templateParameters) === 'function' ? options === null || options === void 0 ? void 0 : options.templateParameters({}, {}, {}, {}) : _objectSpread({}, options === null || options === void 0 ? void 0 : options.templateParameters);
116
+ const templateContent = documentEntry(entry.entryName,
117
+ // options,
118
+ hackParameters);
119
+ const documentHtmlOptions = templateContent ? {
120
+ templateContent,
121
+ inject: false
122
+ } : {};
123
+ return _objectSpread(_objectSpread({}, options), documentHtmlOptions);
124
+ }
125
+ }
126
+ };
127
+ }
128
+ };
129
+ }
130
+ }));
@@ -0,0 +1,19 @@
1
+ export const DOC_EXT = ['jsx', 'tsx', 'ts', 'js'];
2
+ export const DOCUMENT_META_PLACEHOLDER = encodeURIComponent('<%= meta %>');
3
+ export const HTML_SEPARATOR = '<!--<?- html ?>-->';
4
+ export const HTML_CHUNKSMAP_SEPARATOR = '<!--<?- chunksMap.js ?>-->';
5
+ export const HTML_SSRDATASCRIPT_SEPARATOR = '<!--<?- SSRDataScript ?>-->';
6
+ // export const HTML_BOTTOMTPL_SEPARATOR = '<!--<?- bottomTemplate ?>-->'; // document jsx not need bottom
7
+
8
+ export const DOCUMENT_SSR_PLACEHOLDER = encodeURIComponent(HTML_SEPARATOR);
9
+ export const DOCUMENT_CHUNKSMAP_PLACEHOLDER = encodeURIComponent(HTML_CHUNKSMAP_SEPARATOR);
10
+ export const DOCUMENT_SSRDATASCRIPT_PLACEHOLDER = encodeURIComponent(HTML_SSRDATASCRIPT_SEPARATOR);
11
+ export const DOCUMENT_FILE_NAME = 'document';
12
+ export const DOCUMENT_SCRIPTS_PLACEHOLDER = encodeURIComponent('<!-- chunk scripts placeholder -->');
13
+ export const DOCUMENT_NO_SCRIPTE_PLACEHOLDER = encodeURIComponent('<!-- no-script -->');
14
+ export const PLACEHOLDER_REPLACER_MAP = {
15
+ [DOCUMENT_NO_SCRIPTE_PLACEHOLDER]: `We're sorry but react app doesn't work properly without JavaScript enabled. Please enable it to continue.`,
16
+ [DOCUMENT_SSR_PLACEHOLDER]: HTML_SEPARATOR,
17
+ [DOCUMENT_CHUNKSMAP_PLACEHOLDER]: HTML_CHUNKSMAP_SEPARATOR,
18
+ [DOCUMENT_SSRDATASCRIPT_PLACEHOLDER]: HTML_SSRDATASCRIPT_SEPARATOR
19
+ };
@@ -0,0 +1,8 @@
1
+ export * from "./Html";
2
+ export * from "./DocumentContext";
3
+ export * from "./DocumentStructrueContext";
4
+ export * from "./Head";
5
+ export * from "./Body";
6
+ export * from "./Root";
7
+ export * from "./Scripts";
8
+ export * from "./constants";
@@ -1 +1,2 @@
1
- export { createApp, createPlugin, useLoader, bootstrap, RuntimeReactContext, registerPrefetch, defineConfig, registerInit, useRuntimeContext } from "./core";
1
+ export { isBrowser } from "./common";
2
+ export { createApp, createPlugin, useLoader, bootstrap, RuntimeReactContext, defineConfig, registerInit, useRuntimeContext } from "./core";
@@ -1,9 +1,6 @@
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 { getEntryOptions, createRuntimeExportsUtils, PLUGIN_SCHEMAS } from '@modern-js/utils';
8
5
  const PLUGIN_IDENTIFIER = 'router';
9
6
  const ROUTES_IDENTIFIER = 'routes';
@@ -25,47 +22,47 @@ export default (() => ({
25
22
  }
26
23
  };
27
24
  },
28
-
29
25
  validateSchema() {
30
26
  return PLUGIN_SCHEMAS['@modern-js/plugin-router'];
31
27
  },
32
-
33
28
  modifyEntryImports({
34
29
  entrypoint,
35
30
  imports
36
31
  }) {
32
+ var _userConfig$runtime, _userConfig$runtime$r;
37
33
  const {
38
34
  entryName,
39
35
  fileSystemRoutes
40
36
  } = entrypoint;
41
37
  const userConfig = api.useResolvedConfigContext();
38
+ 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
39
  const {
43
40
  packageName
44
41
  } = api.useAppContext();
45
42
  const runtimeConfig = getEntryOptions(entryName, userConfig.runtime, userConfig.runtimeByEntries, packageName);
46
43
  runtimeConfigMap.set(entryName, runtimeConfig);
47
-
48
44
  if (runtimeConfig !== null && runtimeConfig !== void 0 && runtimeConfig.router) {
49
- imports.push({
50
- value: '@modern-js/runtime/plugins',
51
- specifiers: [{
52
- imported: PLUGIN_IDENTIFIER
53
- }]
54
- });
45
+ if (!isLegacy) {
46
+ imports.push({
47
+ value: '@modern-js/runtime/plugins',
48
+ specifiers: [{
49
+ imported: PLUGIN_IDENTIFIER
50
+ }]
51
+ });
52
+ }
55
53
  } else if (fileSystemRoutes) {
56
54
  throw new Error(`should enable runtime.router for entry ${entryName}`);
57
55
  }
58
-
59
56
  return {
60
57
  entrypoint,
61
58
  imports
62
59
  };
63
60
  },
64
-
65
61
  modifyEntryRuntimePlugins({
66
62
  entrypoint,
67
63
  plugins
68
64
  }) {
65
+ var _userConfig$runtime2, _userConfig$runtime2$;
69
66
  const {
70
67
  entryName,
71
68
  fileSystemRoutes
@@ -73,9 +70,10 @@ export default (() => ({
73
70
  const {
74
71
  serverRoutes
75
72
  } = api.useAppContext();
73
+ const userConfig = api.useResolvedConfigContext();
74
+ 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
75
  const runtimeConfig = runtimeConfigMap.get(entryName);
77
-
78
- if (runtimeConfig.router) {
76
+ if (runtimeConfig.router && !isLegacy) {
79
77
  // Todo: plugin-router best to only handle manage client route.
80
78
  // here support base server route usage, part for compatibility
81
79
  const serverBase = serverRoutes.filter(route => route.entryName === entryName).map(route => route.urlPath).sort((a, b) => a.length - b.length > 0 ? -1 : 1);
@@ -88,17 +86,19 @@ export default (() => ({
88
86
  })).replace(/"routesConfig"\s*:\s*"((\S|\s)+)"/g, '"routesConfig": $1,')
89
87
  });
90
88
  }
91
-
92
89
  return {
93
90
  entrypoint,
94
91
  plugins
95
92
  };
96
93
  },
97
-
98
94
  addRuntimeExports() {
99
- pluginsExportsUtils.addExport(`export { default as router } from '@modern-js/runtime/router'`);
95
+ var _userConfig$runtime3, _userConfig$runtime3$;
96
+ const userConfig = api.useResolvedConfigContext();
97
+ 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);
98
+ if (!isLegacy) {
99
+ pluginsExportsUtils.addExport(`export { default as router } from '@modern-js/runtime/router'`);
100
+ }
100
101
  }
101
-
102
102
  };
103
103
  }
104
104
  }));
@@ -1,4 +1,4 @@
1
1
  import { routerPlugin } from "./plugin";
2
2
  export default routerPlugin;
3
3
  export * from 'react-router-dom';
4
- export * from 'history';
4
+ export * from "./withRouter";