@modern-js/runtime 2.0.0-beta.0 → 2.0.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (204) hide show
  1. package/CHANGELOG.md +77 -0
  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 +63 -46
  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 +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 +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 -10
  51. package/dist/js/modern/state/runtime/plugin.js +1 -14
  52. package/dist/js/node/cli/index.js +3 -13
  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 +63 -64
  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 +140 -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 -15
  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 +3 -3
  122. package/dist/js/treeshaking/core/app-config.js +2 -1
  123. package/dist/js/treeshaking/core/compatible.js +66 -63
  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 +170 -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 -10
  171. package/dist/js/treeshaking/state/runtime/plugin.js +2 -10
  172. package/dist/types/cli/index.d.ts +0 -2
  173. package/dist/types/core/compatible.d.ts +5 -5
  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 +1 -13
  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 +0 -2
  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 +0 -2
  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 +1 -4
  202. package/dist/types/state/cli/index.d.ts +0 -2
  203. package/dist/types/state/types.d.ts +0 -1
  204. package/package.json +19 -11
@@ -4,65 +4,43 @@ 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
8
  var _reactDom = _interopRequireDefault(require("react-dom"));
11
-
12
9
  var _hoistNonReactStatics = _interopRequireDefault(require("hoist-non-react-statics"));
13
-
14
10
  var _runtimeContext = require("../runtime-context");
15
-
16
11
  var _plugin = require("./plugin");
17
-
18
12
  var _loaderManager = require("./loader/loaderManager");
19
-
20
13
  var _jsxRuntime = require("react/jsx-runtime");
21
-
22
14
  const _excluded = ["context"];
23
-
24
15
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
25
-
26
16
  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
17
  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
18
  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
19
  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
20
  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
21
  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
22
  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
23
  const IS_REACT18 = process.env.IS_REACT18 === 'true';
41
-
24
+ const ROUTE_MANIFEST = `_MODERNJS_ROUTE_MANIFEST`;
42
25
  function isClientArgs(id) {
43
26
  return typeof id === 'string' || typeof HTMLElement !== 'undefined' && id instanceof HTMLElement;
44
27
  }
45
-
46
28
  const runnerMap = new WeakMap();
47
-
48
29
  const getInitialContext = runner => ({
49
30
  loaderManager: (0, _loaderManager.createLoaderManager)({}),
50
31
  runner,
51
- isBrowser: true
32
+ isBrowser: true,
33
+ routeManifest: typeof window !== 'undefined' && window[ROUTE_MANIFEST]
52
34
  });
53
-
54
35
  const createApp = ({
55
36
  plugins
56
37
  }) => {
57
38
  const appRuntime = _plugin.runtime.clone();
58
-
59
39
  appRuntime.usePlugin(...plugins);
60
40
  return App => {
61
41
  const runner = appRuntime.init();
62
-
63
42
  const WrapperComponent = props => {
64
43
  const element = /*#__PURE__*/_react.default.createElement(App || _react.default.Fragment, _objectSpread({}, props), props.children);
65
-
66
44
  const context = (0, _react.useContext)(_runtimeContext.RuntimeReactContext);
67
45
  return runner.provide({
68
46
  element,
@@ -74,11 +52,9 @@ const createApp = ({
74
52
  }) => element
75
53
  });
76
54
  };
77
-
78
55
  if (App) {
79
56
  (0, _hoistNonReactStatics.default)(WrapperComponent, App);
80
57
  }
81
-
82
58
  const HOCApp = runner.hoc({
83
59
  App: WrapperComponent
84
60
  }, {
@@ -87,14 +63,13 @@ const createApp = ({
87
63
  }) => {
88
64
  const WrapComponent = _ref => {
89
65
  var _contextValue;
90
-
91
66
  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`.
67
+ context
68
+ } = _ref,
69
+ props = _objectWithoutProperties(_ref, _excluded);
70
+ let contextValue = context;
97
71
 
72
+ // We should construct the context, when root component is not passed into `bootstrap`.
98
73
  if (!((_contextValue = contextValue) !== null && _contextValue !== void 0 && _contextValue.runner)) {
99
74
  contextValue = getInitialContext(runner);
100
75
  runner.init({
@@ -104,18 +79,15 @@ const createApp = ({
104
79
  context: context1
105
80
  }) => {
106
81
  var _App$init;
107
-
108
82
  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
83
  }
110
84
  });
111
85
  }
112
-
113
86
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(_runtimeContext.RuntimeReactContext.Provider, {
114
87
  value: contextValue,
115
88
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)(App, _objectSpread({}, props))
116
89
  });
117
90
  };
118
-
119
91
  return (0, _hoistNonReactStatics.default)(WrapComponent, App);
120
92
  }
121
93
  });
@@ -123,9 +95,7 @@ const createApp = ({
123
95
  return HOCApp;
124
96
  };
125
97
  };
126
-
127
98
  exports.createApp = createApp;
128
-
129
99
  const bootstrap = async (BootApp,
130
100
  /**
131
101
  * When csr, id is root id.
@@ -135,19 +105,20 @@ id,
135
105
  /**
136
106
  * root.render need use root to run function
137
107
  */
138
- root, ReactDOM = _reactDom.default) => {
108
+ root, ReactDOM = _reactDom.default
109
+ // eslint-disable-next-line consistent-return
110
+ ) => {
139
111
  let App = BootApp;
140
- let runner = runnerMap.get(App); // ensure Component used is created by `createApp`
112
+ let runner = runnerMap.get(App);
141
113
 
114
+ // ensure Component used is created by `createApp`
142
115
  if (!runner) {
143
116
  App = createApp({
144
117
  plugins: []
145
118
  })(App);
146
119
  runner = runnerMap.get(App);
147
120
  }
148
-
149
121
  const context = getInitialContext(runner);
150
-
151
122
  const runInit = _context => runner.init({
152
123
  context: _context
153
124
  }, {
@@ -155,33 +126,27 @@ root, ReactDOM = _reactDom.default) => {
155
126
  context: context1
156
127
  }) => {
157
128
  var _App, _App$init2;
158
-
159
129
  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
130
  }
161
- }); // don't mount the App, let user in charge of it.
162
-
131
+ });
163
132
 
133
+ // don't mount the App, let user in charge of it.
164
134
  if (!id) {
165
135
  return /*#__PURE__*/_react.default.createElement(App, {
166
136
  context
167
137
  });
168
138
  }
169
-
170
139
  const isBrowser = typeof window !== 'undefined' && window.name !== 'nodejs';
171
-
172
140
  if (isBrowser) {
173
141
  if (isClientArgs(id)) {
174
142
  var _ssrData$data, _ssrData$data2;
175
-
176
143
  const ssrData = window._SSR_DATA;
177
144
  const loadersData = (ssrData === null || ssrData === void 0 ? void 0 : (_ssrData$data = ssrData.data) === null || _ssrData$data === void 0 ? void 0 : _ssrData$data.loadersData) || {};
178
145
  const initialLoadersState = Object.keys(loadersData).reduce((res, key) => {
179
146
  const loaderData = loadersData[key];
180
-
181
147
  if (loaderData.loading !== false) {
182
148
  return res;
183
149
  }
184
-
185
150
  res[key] = loaderData;
186
151
  return res;
187
152
  }, {});
@@ -194,29 +159,41 @@ root, ReactDOM = _reactDom.default) => {
194
159
  } : {}));
195
160
  context.initialData = ssrData === null || ssrData === void 0 ? void 0 : (_ssrData$data2 = ssrData.data) === null || _ssrData$data2 === void 0 ? void 0 : _ssrData$data2.initialData;
196
161
  const initialData = await runInit(context);
197
-
198
162
  if (initialData) {
199
163
  context.initialData = initialData;
200
164
  }
165
+ const rootElement = typeof id !== 'string' ? id : document.getElementById(id || 'root');
201
166
 
202
- const rootElement = typeof id !== 'string' ? id : document.getElementById(id || 'root'); // https://reactjs.org/blog/2022/03/08/react-18-upgrade-guide.html
203
-
167
+ // https://reactjs.org/blog/2022/03/08/react-18-upgrade-guide.html
204
168
  const ModernRender = App => {
205
169
  if (IS_REACT18) {
206
- (root || ReactDOM.createRoot(rootElement)).render(App);
170
+ if (root) {
171
+ root.render(App);
172
+ } else if (ReactDOM.createRoot) {
173
+ ReactDOM.createRoot(rootElement).render(App);
174
+ } else {
175
+ throw Error('The `bootstrap` `ReactDOM` parameter needs to provide the `createRoot` method');
176
+ }
207
177
  } else {
178
+ if (!ReactDOM.render) {
179
+ throw Error('The `bootstrap` `ReactDOM` parameter needs to provide the `render` method');
180
+ }
208
181
  ReactDOM.render(App, rootElement);
209
182
  }
210
183
  };
211
-
212
184
  const ModernHydrate = (App, callback) => {
213
185
  if (IS_REACT18) {
186
+ if (!ReactDOM.hydrateRoot) {
187
+ throw Error('The `bootstrap` `ReactDOM` parameter needs to provide the `hydrateRoot` method');
188
+ }
214
189
  ReactDOM.hydrateRoot(rootElement, App);
215
190
  } else {
191
+ if (!ReactDOM.hydrate) {
192
+ throw Error('The `bootstrap` `ReactDOM` parameter needs to provide the `hydrate` method');
193
+ }
216
194
  ReactDOM.hydrate(App, rootElement, callback);
217
195
  }
218
196
  };
219
-
220
197
  return runner.client({
221
198
  App,
222
199
  context,
@@ -244,17 +221,40 @@ root, ReactDOM = _reactDom.default) => {
244
221
  skipStatic: process.env.NODE_ENV === 'production' && !id.staticGenerate
245
222
  })
246
223
  });
224
+
225
+ // Handle redirects from React Router with an HTTP redirect
226
+ const isRedirectResponse = result => {
227
+ if (typeof Response !== 'undefined' &&
228
+ // fix: ssg workflow doesn't inject Web Response
229
+ result instanceof Response && result.status >= 300 && result.status <= 399) {
230
+ const {
231
+ status
232
+ } = result;
233
+ const redirectUrl = result.headers.get('Location') || '/';
234
+ const {
235
+ ssrContext
236
+ } = context;
237
+ if (ssrContext) {
238
+ ssrContext.res.statusCode = status;
239
+ ssrContext.res.setHeader('Location', redirectUrl);
240
+ ssrContext.redirection.status = status;
241
+ ssrContext.redirection.url = redirectUrl;
242
+ }
243
+ return true;
244
+ }
245
+ return false;
246
+ };
247
247
  const initialData = await runInit(context);
248
- context.initialData = initialData;
249
- return runner.server({
250
- App,
251
- context
252
- });
248
+ if (!isRedirectResponse(initialData)) {
249
+ context.initialData = initialData;
250
+ return runner.server({
251
+ App,
252
+ context
253
+ });
254
+ }
253
255
  }
254
256
  };
255
-
256
257
  exports.bootstrap = bootstrap;
257
-
258
258
  const useRuntimeContext = () => {
259
259
  const context = (0, _react.useContext)(_runtimeContext.RuntimeReactContext);
260
260
  const memoizedContext = (0, _react.useMemo)(() => context.runner.pickContext({
@@ -267,5 +267,4 @@ const useRuntimeContext = () => {
267
267
  }), [context]);
268
268
  return memoizedContext;
269
269
  };
270
-
271
270
  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;