@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.
Files changed (204) hide show
  1. package/CHANGELOG.md +158 -0
  2. package/dist/js/modern/cli/index.js +6 -6
  3. package/dist/js/modern/core/app-config.js +2 -1
  4. package/dist/js/modern/core/compatible.js +66 -48
  5. package/dist/js/modern/core/index.js +3 -2
  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 +132 -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 +1 -1
  20. package/dist/js/modern/router/cli/index.js +0 -16
  21. package/dist/js/modern/router/runtime/plugin.js +0 -9
  22. package/dist/js/modern/router/runtime/plugin.node.js +18 -24
  23. package/dist/js/modern/router/runtime/root/index.js +19 -0
  24. package/dist/js/modern/router/runtime/root/load.js +61 -0
  25. package/dist/js/modern/router/runtime/utils.js +16 -35
  26. package/dist/js/modern/router/runtime/withRouter.js +1 -3
  27. package/dist/js/modern/ssr/cli/index.js +2 -23
  28. package/dist/js/modern/ssr/index.js +23 -34
  29. package/dist/js/modern/ssr/index.node.js +0 -13
  30. package/dist/js/modern/ssr/prefetch.js +0 -7
  31. package/dist/js/modern/ssr/react/prerender/index.js +2 -23
  32. package/dist/js/modern/ssr/react/prerender/util.js +2 -17
  33. package/dist/js/modern/ssr/react/withCallback/index.js +0 -1
  34. package/dist/js/modern/ssr/serverRender/helmet.js +12 -20
  35. package/dist/js/modern/ssr/serverRender/index.js +1 -2
  36. package/dist/js/modern/ssr/serverRender/renderToStream/buildTemplate.after.js +5 -5
  37. package/dist/js/modern/ssr/serverRender/renderToStream/bulidTemplate.before.js +45 -11
  38. package/dist/js/modern/ssr/serverRender/renderToStream/index.js +6 -39
  39. package/dist/js/modern/ssr/serverRender/renderToStream/loadable.js +0 -2
  40. package/dist/js/modern/ssr/serverRender/renderToStream/renderToPipe.js +26 -15
  41. package/dist/js/modern/ssr/serverRender/renderToStream/template.js +14 -18
  42. package/dist/js/modern/ssr/serverRender/renderToString/entry.js +2 -34
  43. package/dist/js/modern/ssr/serverRender/renderToString/index.js +0 -2
  44. package/dist/js/modern/ssr/serverRender/renderToString/loadable.js +0 -10
  45. package/dist/js/modern/ssr/serverRender/renderToString/reduce.js +0 -2
  46. package/dist/js/modern/ssr/serverRender/renderToString/template.js +0 -15
  47. package/dist/js/modern/ssr/serverRender/renderToString/type.js +0 -1
  48. package/dist/js/modern/ssr/serverRender/utils.js +2 -6
  49. package/dist/js/modern/ssr/utils.js +0 -11
  50. package/dist/js/modern/state/cli/index.js +0 -11
  51. package/dist/js/modern/state/runtime/plugin.js +1 -14
  52. package/dist/js/node/cli/index.js +6 -14
  53. package/dist/js/node/common.js +0 -2
  54. package/dist/js/node/core/app-config.js +2 -5
  55. package/dist/js/node/core/compatible.js +66 -66
  56. package/dist/js/node/core/index.js +0 -16
  57. package/dist/js/node/core/loader/index.js +0 -2
  58. package/dist/js/node/core/loader/loaderManager.js +12 -37
  59. package/dist/js/node/core/loader/useLoader.js +8 -31
  60. package/dist/js/node/core/plugin.js +5 -34
  61. package/dist/js/node/document/Body.js +26 -0
  62. package/dist/js/node/document/DocumentContext.js +14 -0
  63. package/dist/js/node/document/DocumentStructrueContext.js +15 -0
  64. package/dist/js/node/document/Head.js +33 -0
  65. package/dist/js/node/document/Html.js +98 -0
  66. package/dist/js/node/document/Root.js +41 -0
  67. package/dist/js/node/document/Scripts.js +17 -0
  68. package/dist/js/node/document/cli/index.js +142 -0
  69. package/dist/js/node/document/constants.js +36 -0
  70. package/dist/js/node/document/index.js +93 -0
  71. package/dist/js/node/exports/head.js +0 -5
  72. package/dist/js/node/exports/loadable.js +0 -5
  73. package/dist/js/node/exports/server.js +0 -2
  74. package/dist/js/node/exports/styled.js +0 -5
  75. package/dist/js/node/index.js +0 -8
  76. package/dist/js/node/router/cli/index.js +0 -20
  77. package/dist/js/node/router/index.js +0 -4
  78. package/dist/js/node/router/runtime/DefaultNotFound.js +1 -5
  79. package/dist/js/node/router/runtime/index.js +0 -5
  80. package/dist/js/node/router/runtime/plugin.js +0 -17
  81. package/dist/js/node/router/runtime/plugin.node.js +16 -38
  82. package/dist/js/node/router/runtime/root/index.js +26 -0
  83. package/dist/js/node/router/runtime/root/load.js +69 -0
  84. package/dist/js/node/router/runtime/utils.js +16 -44
  85. package/dist/js/node/router/runtime/withRouter.js +0 -9
  86. package/dist/js/node/runtime-context.js +0 -2
  87. package/dist/js/node/ssr/cli/index.js +2 -26
  88. package/dist/js/node/ssr/index.js +23 -45
  89. package/dist/js/node/ssr/index.node.js +0 -23
  90. package/dist/js/node/ssr/prefetch.js +0 -11
  91. package/dist/js/node/ssr/react/index.js +0 -2
  92. package/dist/js/node/ssr/react/nossr/index.js +0 -6
  93. package/dist/js/node/ssr/react/prerender/index.js +2 -30
  94. package/dist/js/node/ssr/react/prerender/util.js +2 -25
  95. package/dist/js/node/ssr/react/withCallback/index.js +1 -4
  96. package/dist/js/node/ssr/serverRender/helmet.js +13 -20
  97. package/dist/js/node/ssr/serverRender/index.js +1 -4
  98. package/dist/js/node/ssr/serverRender/renderToStream/buildTemplate.after.js +5 -9
  99. package/dist/js/node/ssr/serverRender/renderToStream/buildTemplate.share.js +0 -1
  100. package/dist/js/node/ssr/serverRender/renderToStream/bulidTemplate.before.js +43 -15
  101. package/dist/js/node/ssr/serverRender/renderToStream/index.js +6 -48
  102. package/dist/js/node/ssr/serverRender/renderToStream/loadable.js +0 -4
  103. package/dist/js/node/ssr/serverRender/renderToStream/renderToPipe.js +26 -17
  104. package/dist/js/node/ssr/serverRender/renderToStream/styledComponent.js +0 -2
  105. package/dist/js/node/ssr/serverRender/renderToStream/template.js +16 -23
  106. package/dist/js/node/ssr/serverRender/renderToString/entry.js +2 -51
  107. package/dist/js/node/ssr/serverRender/renderToString/index.js +0 -10
  108. package/dist/js/node/ssr/serverRender/renderToString/loadable.js +0 -14
  109. package/dist/js/node/ssr/serverRender/renderToString/reduce.js +0 -3
  110. package/dist/js/node/ssr/serverRender/renderToString/styledComponent.js +0 -3
  111. package/dist/js/node/ssr/serverRender/renderToString/template.js +0 -18
  112. package/dist/js/node/ssr/serverRender/renderToString/type.js +0 -1
  113. package/dist/js/node/ssr/serverRender/types.js +0 -1
  114. package/dist/js/node/ssr/serverRender/utils.js +2 -8
  115. package/dist/js/node/ssr/utils.js +0 -20
  116. package/dist/js/node/state/cli/index.js +0 -16
  117. package/dist/js/node/state/index.js +0 -4
  118. package/dist/js/node/state/plugins.js +0 -11
  119. package/dist/js/node/state/runtime/index.js +0 -7
  120. package/dist/js/node/state/runtime/plugin.js +1 -25
  121. package/dist/js/treeshaking/cli/index.js +6 -4
  122. package/dist/js/treeshaking/core/app-config.js +2 -1
  123. package/dist/js/treeshaking/core/compatible.js +74 -81
  124. package/dist/js/treeshaking/core/index.js +3 -2
  125. package/dist/js/treeshaking/core/loader/loaderManager.js +19 -51
  126. package/dist/js/treeshaking/core/loader/useLoader.js +11 -28
  127. package/dist/js/treeshaking/core/plugin.js +6 -51
  128. package/dist/js/treeshaking/document/Body.js +14 -0
  129. package/dist/js/treeshaking/document/DocumentContext.js +6 -0
  130. package/dist/js/treeshaking/document/DocumentStructrueContext.js +7 -0
  131. package/dist/js/treeshaking/document/Head.js +21 -0
  132. package/dist/js/treeshaking/document/Html.js +104 -0
  133. package/dist/js/treeshaking/document/Root.js +24 -0
  134. package/dist/js/treeshaking/document/Scripts.js +10 -0
  135. package/dist/js/treeshaking/document/cli/index.js +175 -0
  136. package/dist/js/treeshaking/document/constants.js +16 -0
  137. package/dist/js/treeshaking/document/index.js +8 -0
  138. package/dist/js/treeshaking/index.js +1 -1
  139. package/dist/js/treeshaking/router/cli/index.js +6 -18
  140. package/dist/js/treeshaking/router/runtime/plugin.js +5 -13
  141. package/dist/js/treeshaking/router/runtime/plugin.node.js +23 -36
  142. package/dist/js/treeshaking/router/runtime/root/index.js +17 -0
  143. package/dist/js/treeshaking/router/runtime/root/load.js +102 -0
  144. package/dist/js/treeshaking/router/runtime/utils.js +21 -39
  145. package/dist/js/treeshaking/router/runtime/withRouter.js +1 -0
  146. package/dist/js/treeshaking/ssr/cli/index.js +9 -31
  147. package/dist/js/treeshaking/ssr/index.js +26 -40
  148. package/dist/js/treeshaking/ssr/index.node.js +12 -29
  149. package/dist/js/treeshaking/ssr/prefetch.js +0 -13
  150. package/dist/js/treeshaking/ssr/react/nossr/index.js +3 -4
  151. package/dist/js/treeshaking/ssr/react/prerender/index.js +2 -21
  152. package/dist/js/treeshaking/ssr/react/prerender/util.js +3 -20
  153. package/dist/js/treeshaking/ssr/react/withCallback/index.js +1 -2
  154. package/dist/js/treeshaking/ssr/serverRender/helmet.js +12 -11
  155. package/dist/js/treeshaking/ssr/serverRender/index.js +1 -9
  156. package/dist/js/treeshaking/ssr/serverRender/renderToStream/buildTemplate.after.js +5 -6
  157. package/dist/js/treeshaking/ssr/serverRender/renderToStream/bulidTemplate.before.js +46 -15
  158. package/dist/js/treeshaking/ssr/serverRender/renderToStream/index.js +9 -79
  159. package/dist/js/treeshaking/ssr/serverRender/renderToStream/loadable.js +3 -5
  160. package/dist/js/treeshaking/ssr/serverRender/renderToStream/renderToPipe.js +46 -35
  161. package/dist/js/treeshaking/ssr/serverRender/renderToStream/template.js +17 -24
  162. package/dist/js/treeshaking/ssr/serverRender/renderToString/entry.js +20 -73
  163. package/dist/js/treeshaking/ssr/serverRender/renderToString/index.js +2 -6
  164. package/dist/js/treeshaking/ssr/serverRender/renderToString/loadable.js +5 -16
  165. package/dist/js/treeshaking/ssr/serverRender/renderToString/reduce.js +0 -2
  166. package/dist/js/treeshaking/ssr/serverRender/renderToString/template.js +2 -18
  167. package/dist/js/treeshaking/ssr/serverRender/renderToString/type.js +0 -1
  168. package/dist/js/treeshaking/ssr/serverRender/utils.js +5 -10
  169. package/dist/js/treeshaking/ssr/utils.js +8 -17
  170. package/dist/js/treeshaking/state/cli/index.js +3 -11
  171. package/dist/js/treeshaking/state/runtime/plugin.js +2 -10
  172. package/dist/types/cli/index.d.ts +2 -4
  173. package/dist/types/core/compatible.d.ts +8 -10
  174. package/dist/types/core/index.d.ts +1 -1
  175. package/dist/types/core/loader/loaderManager.d.ts +0 -1
  176. package/dist/types/core/loader/useLoader.d.ts +0 -5
  177. package/dist/types/core/plugin.d.ts +16 -28
  178. package/dist/types/document/Body.d.ts +4 -0
  179. package/dist/types/document/DocumentContext.d.ts +13 -0
  180. package/dist/types/document/DocumentStructrueContext.d.ts +10 -0
  181. package/dist/types/document/Head.d.ts +5 -0
  182. package/dist/types/document/Html.d.ts +4 -0
  183. package/dist/types/document/Root.d.ts +8 -0
  184. package/dist/types/document/Scripts.d.ts +2 -0
  185. package/dist/types/document/cli/index.d.ts +3 -0
  186. package/dist/types/document/constants.d.ts +14 -0
  187. package/dist/types/document/index.d.ts +8 -0
  188. package/dist/types/exports/server.d.ts +3 -3
  189. package/dist/types/index.d.ts +1 -1
  190. package/dist/types/router/cli/index.d.ts +2 -4
  191. package/dist/types/router/runtime/root/index.d.ts +8 -0
  192. package/dist/types/router/runtime/root/load.d.ts +22 -0
  193. package/dist/types/router/runtime/types.d.ts +0 -2
  194. package/dist/types/runtime-context.d.ts +1 -0
  195. package/dist/types/ssr/cli/index.d.ts +2 -4
  196. package/dist/types/ssr/prefetch.d.ts +2 -2
  197. package/dist/types/ssr/serverRender/renderToStream/buildTemplate.after.d.ts +3 -2
  198. package/dist/types/ssr/serverRender/renderToStream/bulidTemplate.before.d.ts +2 -1
  199. package/dist/types/ssr/serverRender/renderToStream/renderToPipe.d.ts +3 -3
  200. package/dist/types/ssr/serverRender/renderToStream/template.d.ts +2 -2
  201. package/dist/types/ssr/serverRender/types.d.ts +3 -6
  202. package/dist/types/state/cli/index.d.ts +2 -4
  203. package/dist/types/state/types.d.ts +0 -1
  204. package/package.json +24 -15
@@ -5,18 +5,15 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.getConfig = exports.defineConfig = void 0;
7
7
  const APP_CONFIG_SYMBOL = 'config';
8
-
9
- const getConfig = Component => // eslint-disable-next-line @typescript-eslint/ban-ts-comment
8
+ const getConfig = Component =>
9
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
10
10
  // @ts-expect-error
11
11
  Component[APP_CONFIG_SYMBOL];
12
-
13
12
  exports.getConfig = getConfig;
14
-
15
13
  const defineConfig = (Component, config) => {
16
14
  // eslint-disable-next-line @typescript-eslint/ban-ts-comment
17
15
  // @ts-expect-error
18
16
  Component[APP_CONFIG_SYMBOL] = config;
19
17
  return Component;
20
18
  };
21
-
22
19
  exports.defineConfig = defineConfig;
@@ -4,65 +4,42 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.useRuntimeContext = exports.createApp = exports.bootstrap = void 0;
7
-
8
7
  var _react = _interopRequireWildcard(require("react"));
9
-
10
- var _reactDom = _interopRequireDefault(require("react-dom"));
11
-
12
8
  var _hoistNonReactStatics = _interopRequireDefault(require("hoist-non-react-statics"));
13
-
14
9
  var _runtimeContext = require("../runtime-context");
15
-
16
10
  var _plugin = require("./plugin");
17
-
18
11
  var _loaderManager = require("./loader/loaderManager");
19
-
20
12
  var _jsxRuntime = require("react/jsx-runtime");
21
-
22
13
  const _excluded = ["context"];
23
-
24
14
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
25
-
26
15
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
27
-
28
16
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
29
-
30
17
  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; }
31
-
32
18
  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; }
33
-
34
19
  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; }
35
-
36
20
  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; }
37
-
38
21
  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; }
39
-
40
22
  const IS_REACT18 = process.env.IS_REACT18 === 'true';
41
-
23
+ const ROUTE_MANIFEST = `_MODERNJS_ROUTE_MANIFEST`;
42
24
  function isClientArgs(id) {
43
25
  return typeof id === 'string' || typeof HTMLElement !== 'undefined' && id instanceof HTMLElement;
44
26
  }
45
-
46
27
  const runnerMap = new WeakMap();
47
-
48
28
  const getInitialContext = runner => ({
49
29
  loaderManager: (0, _loaderManager.createLoaderManager)({}),
50
30
  runner,
51
- isBrowser: true
31
+ isBrowser: true,
32
+ routeManifest: typeof window !== 'undefined' && window[ROUTE_MANIFEST]
52
33
  });
53
-
54
34
  const createApp = ({
55
35
  plugins
56
36
  }) => {
57
37
  const appRuntime = _plugin.runtime.clone();
58
-
59
38
  appRuntime.usePlugin(...plugins);
60
39
  return App => {
61
40
  const runner = appRuntime.init();
62
-
63
41
  const WrapperComponent = props => {
64
42
  const element = /*#__PURE__*/_react.default.createElement(App || _react.default.Fragment, _objectSpread({}, props), props.children);
65
-
66
43
  const context = (0, _react.useContext)(_runtimeContext.RuntimeReactContext);
67
44
  return runner.provide({
68
45
  element,
@@ -74,11 +51,9 @@ const createApp = ({
74
51
  }) => element
75
52
  });
76
53
  };
77
-
78
54
  if (App) {
79
55
  (0, _hoistNonReactStatics.default)(WrapperComponent, App);
80
56
  }
81
-
82
57
  const HOCApp = runner.hoc({
83
58
  App: WrapperComponent
84
59
  }, {
@@ -87,14 +62,13 @@ const createApp = ({
87
62
  }) => {
88
63
  const WrapComponent = _ref => {
89
64
  var _contextValue;
90
-
91
65
  let {
92
- context
93
- } = _ref,
94
- props = _objectWithoutProperties(_ref, _excluded);
95
-
96
- let contextValue = context; // We should construct the context, when root component is not passed into `bootstrap`.
66
+ context
67
+ } = _ref,
68
+ props = _objectWithoutProperties(_ref, _excluded);
69
+ let contextValue = context;
97
70
 
71
+ // We should construct the context, when root component is not passed into `bootstrap`.
98
72
  if (!((_contextValue = contextValue) !== null && _contextValue !== void 0 && _contextValue.runner)) {
99
73
  contextValue = getInitialContext(runner);
100
74
  runner.init({
@@ -104,18 +78,15 @@ const createApp = ({
104
78
  context: context1
105
79
  }) => {
106
80
  var _App$init;
107
-
108
81
  return App === null || App === void 0 ? void 0 : (_App$init = App.init) === null || _App$init === void 0 ? void 0 : _App$init.call(App, context1);
109
82
  }
110
83
  });
111
84
  }
112
-
113
85
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(_runtimeContext.RuntimeReactContext.Provider, {
114
86
  value: contextValue,
115
87
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)(App, _objectSpread({}, props))
116
88
  });
117
89
  };
118
-
119
90
  return (0, _hoistNonReactStatics.default)(WrapComponent, App);
120
91
  }
121
92
  });
@@ -123,9 +94,7 @@ const createApp = ({
123
94
  return HOCApp;
124
95
  };
125
96
  };
126
-
127
97
  exports.createApp = createApp;
128
-
129
98
  const bootstrap = async (BootApp,
130
99
  /**
131
100
  * When csr, id is root id.
@@ -135,19 +104,20 @@ id,
135
104
  /**
136
105
  * root.render need use root to run function
137
106
  */
138
- root, ReactDOM = _reactDom.default) => {
107
+ root, ReactDOM
108
+ // eslint-disable-next-line consistent-return
109
+ ) => {
139
110
  let App = BootApp;
140
- let runner = runnerMap.get(App); // ensure Component used is created by `createApp`
111
+ let runner = runnerMap.get(App);
141
112
 
113
+ // ensure Component used is created by `createApp`
142
114
  if (!runner) {
143
115
  App = createApp({
144
116
  plugins: []
145
117
  })(App);
146
118
  runner = runnerMap.get(App);
147
119
  }
148
-
149
120
  const context = getInitialContext(runner);
150
-
151
121
  const runInit = _context => runner.init({
152
122
  context: _context
153
123
  }, {
@@ -155,33 +125,27 @@ root, ReactDOM = _reactDom.default) => {
155
125
  context: context1
156
126
  }) => {
157
127
  var _App, _App$init2;
158
-
159
128
  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);
160
129
  }
161
- }); // don't mount the App, let user in charge of it.
162
-
130
+ });
163
131
 
132
+ // don't mount the App, let user in charge of it.
164
133
  if (!id) {
165
134
  return /*#__PURE__*/_react.default.createElement(App, {
166
135
  context
167
136
  });
168
137
  }
169
-
170
138
  const isBrowser = typeof window !== 'undefined' && window.name !== 'nodejs';
171
-
172
139
  if (isBrowser) {
173
140
  if (isClientArgs(id)) {
174
141
  var _ssrData$data, _ssrData$data2;
175
-
176
142
  const ssrData = window._SSR_DATA;
177
143
  const loadersData = (ssrData === null || ssrData === void 0 ? void 0 : (_ssrData$data = ssrData.data) === null || _ssrData$data === void 0 ? void 0 : _ssrData$data.loadersData) || {};
178
144
  const initialLoadersState = Object.keys(loadersData).reduce((res, key) => {
179
145
  const loaderData = loadersData[key];
180
-
181
146
  if (loaderData.loading !== false) {
182
147
  return res;
183
148
  }
184
-
185
149
  res[key] = loaderData;
186
150
  return res;
187
151
  }, {});
@@ -194,29 +158,43 @@ root, ReactDOM = _reactDom.default) => {
194
158
  } : {}));
195
159
  context.initialData = ssrData === null || ssrData === void 0 ? void 0 : (_ssrData$data2 = ssrData.data) === null || _ssrData$data2 === void 0 ? void 0 : _ssrData$data2.initialData;
196
160
  const initialData = await runInit(context);
197
-
198
161
  if (initialData) {
199
162
  context.initialData = initialData;
200
163
  }
201
-
202
- const rootElement = typeof id !== 'string' ? id : document.getElementById(id || 'root'); // https://reactjs.org/blog/2022/03/08/react-18-upgrade-guide.html
203
-
164
+ const rootElement = typeof id !== 'string' ? id : document.getElementById(id || 'root');
165
+ if (!ReactDOM) {
166
+ throw Error('The `bootstrap` need provide `ReactDOM` parameter');
167
+ }
168
+ // https://reactjs.org/blog/2022/03/08/react-18-upgrade-guide.html
204
169
  const ModernRender = App => {
205
170
  if (IS_REACT18) {
206
- (root || ReactDOM.createRoot(rootElement)).render(App);
171
+ if (root) {
172
+ root.render(App);
173
+ } else if (ReactDOM.createRoot) {
174
+ ReactDOM.createRoot(rootElement).render(App);
175
+ } else {
176
+ throw Error('The `bootstrap` `ReactDOM` parameter needs to provide the `createRoot` method');
177
+ }
207
178
  } else {
179
+ if (!ReactDOM.render) {
180
+ throw Error('The `bootstrap` `ReactDOM` parameter needs to provide the `render` method');
181
+ }
208
182
  ReactDOM.render(App, rootElement);
209
183
  }
210
184
  };
211
-
212
185
  const ModernHydrate = (App, callback) => {
213
186
  if (IS_REACT18) {
187
+ if (!ReactDOM.hydrateRoot) {
188
+ throw Error('The `bootstrap` `ReactDOM` parameter needs to provide the `hydrateRoot` method');
189
+ }
214
190
  ReactDOM.hydrateRoot(rootElement, App);
215
191
  } else {
192
+ if (!ReactDOM.hydrate) {
193
+ throw Error('The `bootstrap` `ReactDOM` parameter needs to provide the `hydrate` method');
194
+ }
216
195
  ReactDOM.hydrate(App, rootElement, callback);
217
196
  }
218
197
  };
219
-
220
198
  return runner.client({
221
199
  App,
222
200
  context,
@@ -244,17 +222,40 @@ root, ReactDOM = _reactDom.default) => {
244
222
  skipStatic: process.env.NODE_ENV === 'production' && !id.staticGenerate
245
223
  })
246
224
  });
225
+
226
+ // Handle redirects from React Router with an HTTP redirect
227
+ const isRedirectResponse = result => {
228
+ if (typeof Response !== 'undefined' &&
229
+ // fix: ssg workflow doesn't inject Web Response
230
+ result instanceof Response && result.status >= 300 && result.status <= 399) {
231
+ const {
232
+ status
233
+ } = result;
234
+ const redirectUrl = result.headers.get('Location') || '/';
235
+ const {
236
+ ssrContext
237
+ } = context;
238
+ if (ssrContext) {
239
+ ssrContext.res.statusCode = status;
240
+ ssrContext.res.setHeader('Location', redirectUrl);
241
+ ssrContext.redirection.status = status;
242
+ ssrContext.redirection.url = redirectUrl;
243
+ }
244
+ return true;
245
+ }
246
+ return false;
247
+ };
247
248
  const initialData = await runInit(context);
248
- context.initialData = initialData;
249
- return runner.server({
250
- App,
251
- context
252
- });
249
+ if (!isRedirectResponse(initialData)) {
250
+ context.initialData = initialData;
251
+ return runner.server({
252
+ App,
253
+ context
254
+ });
255
+ }
253
256
  }
254
257
  };
255
-
256
258
  exports.bootstrap = bootstrap;
257
-
258
259
  const useRuntimeContext = () => {
259
260
  const context = (0, _react.useContext)(_runtimeContext.RuntimeReactContext);
260
261
  const memoizedContext = (0, _react.useMemo)(() => context.runner.pickContext({
@@ -267,5 +268,4 @@ const useRuntimeContext = () => {
267
268
  }), [context]);
268
269
  return memoizedContext;
269
270
  };
270
-
271
271
  exports.useRuntimeContext = useRuntimeContext;
@@ -8,7 +8,6 @@ var _exportNames = {
8
8
  createRuntime: true,
9
9
  runtime: true,
10
10
  registerInit: true,
11
- registerPrefetch: true,
12
11
  defineConfig: true,
13
12
  getConfig: true,
14
13
  RuntimeReactContext: true,
@@ -56,25 +55,15 @@ Object.defineProperty(exports, "registerInit", {
56
55
  return _plugin.registerInit;
57
56
  }
58
57
  });
59
- Object.defineProperty(exports, "registerPrefetch", {
60
- enumerable: true,
61
- get: function () {
62
- return _plugin.registerPrefetch;
63
- }
64
- });
65
58
  Object.defineProperty(exports, "runtime", {
66
59
  enumerable: true,
67
60
  get: function () {
68
61
  return _plugin.runtime;
69
62
  }
70
63
  });
71
-
72
64
  var _plugin = require("./plugin");
73
-
74
65
  var _appConfig = require("./app-config");
75
-
76
66
  var _compatible = require("./compatible");
77
-
78
67
  Object.keys(_compatible).forEach(function (key) {
79
68
  if (key === "default" || key === "__esModule") return;
80
69
  if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
@@ -86,11 +75,8 @@ Object.keys(_compatible).forEach(function (key) {
86
75
  }
87
76
  });
88
77
  });
89
-
90
78
  var _runtimeContext = require("../runtime-context");
91
-
92
79
  var _loader = require("./loader");
93
-
94
80
  Object.keys(_loader).forEach(function (key) {
95
81
  if (key === "default" || key === "__esModule") return;
96
82
  if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
@@ -102,9 +88,7 @@ Object.keys(_loader).forEach(function (key) {
102
88
  }
103
89
  });
104
90
  });
105
-
106
91
  var _plugin2 = require("@modern-js/plugin");
107
-
108
92
  Object.keys(_plugin2).forEach(function (key) {
109
93
  if (key === "default" || key === "__esModule") return;
110
94
  if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
@@ -9,7 +9,5 @@ Object.defineProperty(exports, "useLoader", {
9
9
  return _useLoader.default;
10
10
  }
11
11
  });
12
-
13
12
  var _useLoader = _interopRequireDefault(require("./useLoader"));
14
-
15
13
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
@@ -4,11 +4,8 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.createLoaderManager = exports.LoaderStatus = void 0;
7
-
8
7
  var _invariant = _interopRequireDefault(require("invariant"));
9
-
10
8
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11
-
12
9
  /**
13
10
  * Calc id from string or object
14
11
  */
@@ -16,29 +13,25 @@ const createGetId = () => {
16
13
  const idCache = new Map();
17
14
  return objectId => {
18
15
  const cachedId = idCache.get(objectId);
19
-
20
16
  if (cachedId) {
21
17
  return cachedId;
22
- } // WARNING: id should be unique after serialize.
23
-
18
+ }
24
19
 
20
+ // WARNING: id should be unique after serialize.
25
21
  const id = JSON.stringify(objectId);
26
22
  (0, _invariant.default)(id, 'params should be not null value');
27
23
  idCache.set(objectId, id);
28
24
  return id;
29
25
  };
30
26
  };
31
-
32
27
  let LoaderStatus;
33
28
  exports.LoaderStatus = LoaderStatus;
34
-
35
29
  (function (LoaderStatus) {
36
30
  LoaderStatus[LoaderStatus["idle"] = 0] = "idle";
37
31
  LoaderStatus[LoaderStatus["loading"] = 1] = "loading";
38
32
  LoaderStatus[LoaderStatus["fulfilled"] = 2] = "fulfilled";
39
33
  LoaderStatus[LoaderStatus["rejected"] = 3] = "rejected";
40
34
  })(LoaderStatus || (exports.LoaderStatus = LoaderStatus = {}));
41
-
42
35
  const createLoader = (id, initialData = {
43
36
  loading: false,
44
37
  reloading: false,
@@ -53,16 +46,13 @@ const createLoader = (id, initialData = {
53
46
  } = initialData;
54
47
  let hasLoaded = false;
55
48
  const handlers = new Set();
56
-
57
49
  const load = async () => {
58
50
  if (skip) {
59
51
  return promise;
60
52
  }
61
-
62
53
  if (status === LoaderStatus.loading) {
63
54
  return promise;
64
55
  }
65
-
66
56
  status = LoaderStatus.loading;
67
57
  notify();
68
58
  promise = loaderFn().then(value => {
@@ -80,7 +70,6 @@ const createLoader = (id, initialData = {
80
70
  });
81
71
  return promise;
82
72
  };
83
-
84
73
  const getResult = () => ({
85
74
  loading: !hasLoaded && status === LoaderStatus.loading,
86
75
  reloading: hasLoaded && status === LoaderStatus.loading,
@@ -89,35 +78,29 @@ const createLoader = (id, initialData = {
89
78
  // redundant fields for ssr log
90
79
  _error: error
91
80
  });
92
-
93
81
  const notify = () => {
94
82
  // don't iterate handlers directly, since it could be modified during iteration
95
83
  [...handlers].forEach(handler => {
96
84
  handler(status, getResult());
97
85
  });
98
86
  };
99
-
100
87
  const onChange = handler => {
101
88
  handlers.add(handler);
102
89
  return () => {
103
90
  handlers.delete(handler);
104
91
  };
105
92
  };
106
-
107
93
  return {
108
94
  get result() {
109
95
  return getResult();
110
96
  },
111
-
112
97
  get promise() {
113
98
  return promise;
114
99
  },
115
-
116
100
  onChange,
117
101
  load
118
102
  };
119
103
  };
120
-
121
104
  /**
122
105
  * Create loaders manager. It's returned instance will add to context
123
106
  * @param initialDataMap used to initialing loader data
@@ -129,67 +112,60 @@ const createLoaderManager = (initialDataMap, managerOptions = {}) => {
129
112
  } = managerOptions;
130
113
  const loadersMap = new Map();
131
114
  const getId = createGetId();
132
-
133
115
  const add = (loaderFn, loaderOptions) => {
134
116
  const id = getId(loaderOptions.params);
135
- let loader = loadersMap.get(id); // private property for opting out loader cache, maybe change in future
117
+ let loader = loadersMap.get(id);
136
118
 
119
+ // private property for opting out loader cache, maybe change in future
137
120
  const cache = loaderOptions._cache;
138
-
139
121
  if (!loader || cache === false) {
140
122
  // ignore non-static loader on static phase
141
- const ignoreNonStatic = skipNonStatic && !loaderOptions.static; // ignore static loader on non-static phase
123
+ const ignoreNonStatic = skipNonStatic && !loaderOptions.static;
142
124
 
125
+ // ignore static loader on non-static phase
143
126
  const ignoreStatic = skipStatic && loaderOptions.static;
144
127
  const skipExec = ignoreNonStatic || ignoreStatic;
145
128
  loader = createLoader(id, typeof initialDataMap[id] !== 'undefined' ? initialDataMap[id] : {
146
129
  data: loaderOptions.initialData
147
- }, loaderFn, // Todo whether static loader is exec when CSR
130
+ }, loaderFn,
131
+ // Todo whether static loader is exec when CSR
148
132
  skipExec);
149
133
  loadersMap.set(id, loader);
150
134
  }
151
-
152
135
  return id;
153
136
  };
137
+ const get = id => loadersMap.get(id);
154
138
 
155
- const get = id => loadersMap.get(id); // check if there has pending loaders
156
-
157
-
139
+ // check if there has pending loaders
158
140
  const hasPendingLoaders = () => {
159
141
  for (const loader of loadersMap.values()) {
160
142
  const {
161
143
  promise
162
144
  } = loader;
163
-
164
145
  if (promise instanceof Promise) {
165
146
  return true;
166
147
  }
167
148
  }
168
-
169
149
  return false;
170
- }; // waiting for all pending loaders to be settled
171
-
150
+ };
172
151
 
152
+ // waiting for all pending loaders to be settled
173
153
  const awaitPendingLoaders = async () => {
174
154
  const pendingLoaders = [];
175
-
176
155
  for (const [id, loader] of loadersMap) {
177
156
  const {
178
157
  promise
179
158
  } = loader;
180
-
181
159
  if (promise instanceof Promise) {
182
160
  pendingLoaders.push([id, loader]);
183
161
  }
184
162
  }
185
-
186
163
  await Promise.all(pendingLoaders.map(item => item[1].promise));
187
164
  return pendingLoaders.reduce((res, [id, loader]) => {
188
165
  res[id] = loader.result;
189
166
  return res;
190
167
  }, {});
191
168
  };
192
-
193
169
  return {
194
170
  hasPendingLoaders,
195
171
  awaitPendingLoaders,
@@ -197,5 +173,4 @@ const createLoaderManager = (initialDataMap, managerOptions = {}) => {
197
173
  get
198
174
  };
199
175
  };
200
-
201
176
  exports.createLoaderManager = createLoaderManager;
@@ -4,23 +4,14 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = void 0;
7
-
8
7
  var _react = require("react");
9
-
10
8
  var _invariant = _interopRequireDefault(require("invariant"));
11
-
12
9
  var _runtimeContext = require("../../runtime-context");
13
-
14
10
  var _loaderManager = require("./loaderManager");
15
-
16
11
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
17
-
18
12
  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; }
19
-
20
13
  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; }
21
-
22
14
  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; }
23
-
24
15
  const useLoader = (loaderFn, options = {
25
16
  params: undefined
26
17
  }) => {
@@ -30,29 +21,24 @@ const useLoader = (loaderFn, options = {
30
21
  loaderManager
31
22
  } = context;
32
23
  const loaderRef = (0, _react.useRef)();
33
- const unlistenLoaderChangeRef = (0, _react.useRef)(null); // SSR render should ignore `_cache` prop
24
+ const unlistenLoaderChangeRef = (0, _react.useRef)(null);
34
25
 
26
+ // SSR render should ignore `_cache` prop
35
27
  if (isSSRRender && Object.prototype.hasOwnProperty.call(options, '_cache')) {
36
28
  delete options._cache;
37
29
  }
38
-
39
30
  const load = (0, _react.useCallback)(params => {
40
31
  var _unlistenLoaderChange, _window, _window$_SSR_DATA, _window$_SSR_DATA$dat, _window$_SSR_DATA$dat2, _loaderRef$current2;
41
-
42
32
  if (typeof params === 'undefined') {
43
33
  var _loaderRef$current;
44
-
45
34
  return (_loaderRef$current = loaderRef.current) === null || _loaderRef$current === void 0 ? void 0 : _loaderRef$current.load();
46
35
  }
47
-
48
36
  const id = loaderManager.add(() => {
49
37
  try {
50
38
  const res = loaderFn(context, params);
51
-
52
39
  if (res instanceof Promise) {
53
40
  return res;
54
41
  }
55
-
56
42
  return Promise.resolve(res);
57
43
  } catch (e) {
58
44
  return Promise.reject(e);
@@ -60,37 +46,31 @@ const useLoader = (loaderFn, options = {
60
46
  }, _objectSpread(_objectSpread({}, options), {}, {
61
47
  params
62
48
  }));
63
- loaderRef.current = loaderManager.get(id); // unsubscribe old loader onChange event
64
-
49
+ loaderRef.current = loaderManager.get(id);
50
+ // unsubscribe old loader onChange event
65
51
  (_unlistenLoaderChange = unlistenLoaderChangeRef.current) === null || _unlistenLoaderChange === void 0 ? void 0 : _unlistenLoaderChange.call(unlistenLoaderChangeRef);
66
-
67
52
  if (isSSRRender) {
68
53
  return undefined;
69
- } // skip this loader, then try to unlisten loader change
70
-
54
+ }
71
55
 
56
+ // skip this loader, then try to unlisten loader change
72
57
  if (options.skip) {
73
58
  return undefined;
74
- } // do not load data again in CSR hydrate stage if SSR data exists
75
-
59
+ }
76
60
 
61
+ // do not load data again in CSR hydrate stage if SSR data exists
77
62
  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) {
78
63
  return undefined;
79
64
  }
80
-
81
65
  const res = loaderRef.current.load();
82
66
  unlistenLoaderChangeRef.current = (_loaderRef$current2 = loaderRef.current) === null || _loaderRef$current2 === void 0 ? void 0 : _loaderRef$current2.onChange((_status, _result) => {
83
67
  setResult(_result);
84
-
85
68
  if (_status === _loaderManager.LoaderStatus.fulfilled) {
86
69
  var _options$onSuccess;
87
-
88
70
  options === null || options === void 0 ? void 0 : (_options$onSuccess = options.onSuccess) === null || _options$onSuccess === void 0 ? void 0 : _options$onSuccess.call(options, _result.data);
89
71
  }
90
-
91
72
  if (_status === _loaderManager.LoaderStatus.rejected) {
92
73
  var _options$onError;
93
-
94
74
  options === null || options === void 0 ? void 0 : (_options$onError = options.onError) === null || _options$onError === void 0 ? void 0 : _options$onError.call(options, _result.error);
95
75
  }
96
76
  });
@@ -98,12 +78,10 @@ const useLoader = (loaderFn, options = {
98
78
  }, [options.skip]);
99
79
  (0, _react.useEffect)(() => () => {
100
80
  var _unlistenLoaderChange2;
101
-
102
81
  (_unlistenLoaderChange2 = unlistenLoaderChangeRef.current) === null || _unlistenLoaderChange2 === void 0 ? void 0 : _unlistenLoaderChange2.call(unlistenLoaderChangeRef);
103
82
  }, []);
104
83
  (0, _react.useMemo)(() => {
105
84
  var _options$params;
106
-
107
85
  const p = (_options$params = options.params) !== null && _options$params !== void 0 ? _options$params : loaderFn.id;
108
86
  (0, _invariant.default)(typeof p !== 'undefined' && p !== null, 'Params is required in useLoader');
109
87
  load(p);
@@ -113,6 +91,5 @@ const useLoader = (loaderFn, options = {
113
91
  reload: load
114
92
  });
115
93
  };
116
-
117
94
  var _default = useLoader;
118
95
  exports.default = _default;