@modern-js/runtime 1.4.4 → 1.16.0

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 (88) hide show
  1. package/CHANGELOG.md +65 -0
  2. package/dist/js/modern/cli/index.js +6 -6
  3. package/dist/js/modern/core/app-config.js +10 -0
  4. package/dist/js/modern/core/compatible.js +241 -0
  5. package/dist/js/modern/core/index.js +7 -0
  6. package/dist/js/modern/core/loader/index.js +1 -0
  7. package/dist/js/modern/core/loader/loaderManager.js +189 -0
  8. package/dist/js/modern/core/loader/useLoader.js +105 -0
  9. package/dist/js/modern/core/plugin.js +63 -0
  10. package/dist/js/modern/core/runtime-context.js +2 -0
  11. package/dist/js/modern/exports/styled.js +2 -2
  12. package/dist/js/modern/index.js +1 -1
  13. package/dist/js/modern/router/runtime/plugin.js +1 -1
  14. package/dist/js/modern/router/runtime/utils.js +3 -1
  15. package/dist/js/modern/ssr/index.js +34 -13
  16. package/dist/js/modern/ssr/index.node.js +1 -1
  17. package/dist/js/modern/ssr/prefetch.js +2 -2
  18. package/dist/js/modern/ssr/react/withCallback/index.js +17 -0
  19. package/dist/js/modern/ssr/serverRender/helmet.js +2 -2
  20. package/dist/js/modern/ssr/serverRender/index.js +1 -1
  21. package/dist/js/modern/ssr/serverRender/styledComponent.js +1 -1
  22. package/dist/js/modern/ssr/utils.js +9 -3
  23. package/dist/js/modern/state/runtime/plugin.js +1 -1
  24. package/dist/js/node/cli/index.js +5 -5
  25. package/dist/js/node/core/app-config.js +22 -0
  26. package/dist/js/node/core/compatible.js +271 -0
  27. package/dist/js/node/core/index.js +111 -0
  28. package/dist/js/node/core/loader/index.js +15 -0
  29. package/dist/js/node/core/loader/loaderManager.js +201 -0
  30. package/dist/js/node/core/loader/useLoader.js +118 -0
  31. package/dist/js/node/core/plugin.js +79 -0
  32. package/dist/js/node/core/runtime-context.js +11 -0
  33. package/dist/js/node/exports/styled.js +5 -5
  34. package/dist/js/node/index.js +10 -10
  35. package/dist/js/node/router/runtime/plugin.js +3 -3
  36. package/dist/js/node/router/runtime/utils.js +3 -1
  37. package/dist/js/node/ssr/index.js +37 -15
  38. package/dist/js/node/ssr/index.node.js +2 -2
  39. package/dist/js/node/ssr/react/withCallback/index.js +27 -0
  40. package/dist/js/node/ssr/serverRender/helmet.js +2 -2
  41. package/dist/js/node/ssr/serverRender/index.js +2 -2
  42. package/dist/js/node/ssr/serverRender/styledComponent.js +2 -2
  43. package/dist/js/node/ssr/utils.js +9 -3
  44. package/dist/js/node/state/runtime/plugin.js +3 -3
  45. package/dist/js/treeshaking/cli/index.js +6 -6
  46. package/dist/js/treeshaking/core/app-config.js +13 -0
  47. package/dist/js/treeshaking/core/compatible.js +297 -0
  48. package/dist/js/treeshaking/core/index.js +7 -0
  49. package/dist/js/treeshaking/core/loader/index.js +1 -0
  50. package/dist/js/treeshaking/core/loader/loaderManager.js +267 -0
  51. package/dist/js/treeshaking/core/loader/useLoader.js +107 -0
  52. package/dist/js/treeshaking/core/plugin.js +105 -0
  53. package/dist/js/treeshaking/core/runtime-context.js +2 -0
  54. package/dist/js/treeshaking/exports/styled.js +2 -2
  55. package/dist/js/treeshaking/index.js +1 -1
  56. package/dist/js/treeshaking/router/runtime/plugin.js +1 -1
  57. package/dist/js/treeshaking/router/runtime/utils.js +3 -1
  58. package/dist/js/treeshaking/ssr/index.js +45 -33
  59. package/dist/js/treeshaking/ssr/index.node.js +1 -1
  60. package/dist/js/treeshaking/ssr/prefetch.js +2 -2
  61. package/dist/js/treeshaking/ssr/react/withCallback/index.js +16 -0
  62. package/dist/js/treeshaking/ssr/serverRender/helmet.js +2 -2
  63. package/dist/js/treeshaking/ssr/serverRender/index.js +1 -1
  64. package/dist/js/treeshaking/ssr/serverRender/styledComponent.js +1 -1
  65. package/dist/js/treeshaking/ssr/utils.js +8 -3
  66. package/dist/js/treeshaking/state/runtime/plugin.js +1 -1
  67. package/dist/types/core/app-config.d.ts +6 -0
  68. package/dist/types/core/compatible.d.ts +17 -0
  69. package/dist/types/core/index.d.ts +9 -0
  70. package/dist/types/core/loader/index.d.ts +2 -0
  71. package/dist/types/core/loader/loaderManager.d.ts +57 -0
  72. package/dist/types/core/loader/useLoader.d.ts +54 -0
  73. package/dist/types/core/plugin.d.ts +215 -0
  74. package/dist/types/core/runtime-context.d.ts +13 -0
  75. package/dist/types/exports/styled.d.ts +2 -2
  76. package/dist/types/index.d.ts +4 -9
  77. package/dist/types/router/runtime/plugin.d.ts +1 -1
  78. package/dist/types/ssr/index.d.ts +2 -2
  79. package/dist/types/ssr/index.node.d.ts +1 -1
  80. package/dist/types/ssr/prefetch.d.ts +2 -2
  81. package/dist/types/ssr/react/nossr/index.d.ts +1 -1
  82. package/dist/types/ssr/react/withCallback/index.d.ts +5 -0
  83. package/dist/types/ssr/serverRender/entry.d.ts +1 -1
  84. package/dist/types/ssr/serverRender/index.d.ts +1 -1
  85. package/dist/types/ssr/serverRender/type.d.ts +1 -1
  86. package/dist/types/state/runtime/plugin.d.ts +2 -2
  87. package/lib/types.d.ts +10 -0
  88. package/package.json +39 -27
@@ -6,12 +6,14 @@ Object.defineProperty(exports, "__esModule", {
6
6
  var _exportNames = {};
7
7
  exports.default = void 0;
8
8
 
9
- var _reactDom = _interopRequireDefault(require("react-dom"));
10
-
11
9
  var _component = require("@loadable/component");
12
10
 
11
+ var _hoistNonReactStatics = _interopRequireDefault(require("hoist-non-react-statics"));
12
+
13
13
  var _type = require("./serverRender/type");
14
14
 
15
+ var _withCallback = require("./react/withCallback");
16
+
15
17
  var _utils = require("./utils");
16
18
 
17
19
  var _jsxRuntime = require("react/jsx-runtime");
@@ -38,6 +40,8 @@ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { va
38
40
 
39
41
  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; }
40
42
 
43
+ const IS_REACT18 = process.env.IS_REACT18 === 'true';
44
+
41
45
  const ssr = () => ({
42
46
  name: '@modern-js/plugin-ssr',
43
47
  setup: () => {
@@ -46,38 +50,52 @@ const ssr = () => ({
46
50
  client: async ({
47
51
  App,
48
52
  context,
49
- rootElement
53
+ ModernRender,
54
+ ModernHydrate
50
55
  }) => {
51
56
  var _window, _window$_SSR_DATA;
52
57
 
53
58
  const renderLevel = (_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.renderLevel;
54
59
 
55
60
  if (renderLevel === _type.RenderLevel.CLIENT_RENDER) {
56
- var _prefetch, _ref;
57
-
58
- await (App === null || App === void 0 ? void 0 : (_prefetch = (_ref = App).prefetch) === null || _prefetch === void 0 ? void 0 : _prefetch.call(_ref, context));
59
-
60
- _reactDom.default.render( /*#__PURE__*/(0, _jsxRuntime.jsx)(App, {
61
+ // prefetch block render while csr
62
+ // await (App as any)?.prefetch?.(context);
63
+ ModernRender( /*#__PURE__*/(0, _jsxRuntime.jsx)(App, {
61
64
  context: context
62
- }), rootElement);
65
+ }));
63
66
  } else if (renderLevel === _type.RenderLevel.SERVER_RENDER) {
64
67
  (0, _component.loadableReady)(() => {
65
68
  const hydrateContext = _objectSpread(_objectSpread({}, context), {}, {
66
69
  _hydration: true
67
70
  });
68
71
 
69
- _reactDom.default.hydrate( /*#__PURE__*/(0, _jsxRuntime.jsx)(App, {
70
- context: hydrateContext
71
- }), rootElement, () => {
72
+ const callback = () => {
72
73
  // won't cause component re-render because context's reference identity doesn't change
73
74
  delete hydrateContext._hydration;
74
- });
75
+ }; // callback: https://github.com/reactwg/react-18/discussions/5
76
+
77
+
78
+ if (IS_REACT18) {
79
+ let SSRApp = () => /*#__PURE__*/(0, _jsxRuntime.jsx)(_withCallback.WithCallback, {
80
+ callback: callback,
81
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(App, {
82
+ context: hydrateContext
83
+ })
84
+ });
85
+
86
+ SSRApp = (0, _hoistNonReactStatics.default)(SSRApp, App);
87
+ ModernHydrate( /*#__PURE__*/(0, _jsxRuntime.jsx)(SSRApp, {}));
88
+ } else {
89
+ ModernHydrate( /*#__PURE__*/(0, _jsxRuntime.jsx)(App, {
90
+ context: hydrateContext
91
+ }), callback);
92
+ }
75
93
  });
76
94
  } else {
77
95
  // unknown renderlevel or renderlevel is server prefetch.
78
- _reactDom.default.render( /*#__PURE__*/(0, _jsxRuntime.jsx)(App, {
96
+ ModernHydrate( /*#__PURE__*/(0, _jsxRuntime.jsx)(App, {
79
97
  context: context
80
- }), rootElement);
98
+ }));
81
99
  }
82
100
  },
83
101
 
@@ -89,6 +107,10 @@ const ssr = () => ({
89
107
  const request = (_window2 = window) === null || _window2 === void 0 ? void 0 : (_window2$_SSR_DATA = _window2._SSR_DATA) === null || _window2$_SSR_DATA === void 0 ? void 0 : (_window2$_SSR_DATA$co = _window2$_SSR_DATA.context) === null || _window2$_SSR_DATA$co === void 0 ? void 0 : _window2$_SSR_DATA$co.request;
90
108
 
91
109
  if (!request) {
110
+ context.ssrContext = _objectSpread(_objectSpread({}, context.ssrContext), {}, {
111
+ response: mockResp,
112
+ request: (0, _utils.formatClient)({})
113
+ });
92
114
  return next({
93
115
  context
94
116
  });
@@ -8,7 +8,7 @@ exports.default = void 0;
8
8
 
9
9
  var _path = _interopRequireDefault(require("path"));
10
10
 
11
- var _runtimeCore = require("@modern-js/runtime-core");
11
+ var _core = require("../core");
12
12
 
13
13
  var _common = require("../common");
14
14
 
@@ -49,7 +49,7 @@ const plugin = () => ({
49
49
  context
50
50
  }) => {
51
51
  if (!registeredApps.has(App)) {
52
- (0, _runtimeCore.registerPrefetch)(App, _context => (0, _prefetch.default)(App, _context));
52
+ (0, _core.registerPrefetch)(App, _context => (0, _prefetch.default)(App, _context));
53
53
  registeredApps.add(App);
54
54
  }
55
55
 
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.WithCallback = void 0;
7
+
8
+ var _react = require("react");
9
+
10
+ // See https://github.com/reactwg/react-18/discussions/5#discussioncomment-2276079
11
+ const WithCallback = ({
12
+ callback,
13
+ children
14
+ }) => {
15
+ const once = (0, _react.useRef)(false);
16
+ (0, _react.useLayoutEffect)(() => {
17
+ if (once.current) {
18
+ return;
19
+ }
20
+
21
+ once.current = true;
22
+ callback();
23
+ }, [callback]);
24
+ return children;
25
+ };
26
+
27
+ exports.WithCallback = WithCallback;
@@ -8,8 +8,8 @@ exports.default = helmet;
8
8
  const RE_HTML_ATTR = /<html[^>]*>/;
9
9
  const RE_BODY_ATTR = /<body[^>]*>/;
10
10
  const RE_LAST_IN_HEAD = /<\/head>/;
11
- const RE_TITLE = /<title[^>]*>([\s\S\n\r]*?)<\/title>/g;
12
- const TEST_TITLE_CONTENT = /(?<=<title[^>]*>)([\s\S\n\r]*?)([.|\S])([\s\S\n\r]*?)(?=<\/title>)/g; // 通过 react-helmet 修改模板
11
+ const RE_TITLE = /<title[^>]*>([\s\S\n\r]*?)<\/title>/;
12
+ const TEST_TITLE_CONTENT = /(?<=<title[^>]*>)([\s\S\n\r]*?)([.|\S])([\s\S\n\r]*?)(?=<\/title>)/; // 通过 react-helmet 修改模板
13
13
 
14
14
  function helmet(content, helmetData) {
15
15
  let result = content;
@@ -5,10 +5,10 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.render = void 0;
7
7
 
8
- var _runtimeCore = require("@modern-js/runtime-core");
9
-
10
8
  var _ssr = require("@modern-js/utils/ssr");
11
9
 
10
+ var _core = require("../../core");
11
+
12
12
  var _prerender = require("../react/prerender");
13
13
 
14
14
  var _entry = _interopRequireDefault(require("./entry"));
@@ -5,10 +5,10 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.toHtml = void 0;
7
7
 
8
- var _styled = require("@modern-js/runtime-core/styled");
8
+ var _styledComponents = require("styled-components");
9
9
 
10
10
  const toHtml = (jsx, renderer, next) => {
11
- const sheet = new _styled.ServerStyleSheet();
11
+ const sheet = new _styledComponents.ServerStyleSheet();
12
12
  const html = next(sheet.collectStyles(jsx));
13
13
  const css = sheet.getStyleTags();
14
14
  renderer.result.chunksMap.css += css;
@@ -28,19 +28,25 @@ exports.formatServer = formatServer;
28
28
 
29
29
  const getQuery = () => window.location.search.substring(1).split('&').reduce((res, item) => {
30
30
  const [key, value] = item.split('=');
31
- res[key] = value;
31
+
32
+ if (key) {
33
+ res[key] = value;
34
+ }
35
+
32
36
  return res;
33
37
  }, {});
34
38
 
35
39
  const formatClient = request => {
40
+ var _request$headers, _request$headers2;
41
+
36
42
  return {
37
43
  params: request.params || {},
38
44
  host: request.host || location.host,
39
45
  pathname: request.pathname || location.pathname,
40
46
  headers: request.headers || {},
41
47
  cookieMap: request.cookieMap || {},
42
- cookie: request.headers.cookie || document.cookie,
43
- userAgent: request.headers['user-agent'] || navigator.userAgent,
48
+ cookie: ((_request$headers = request.headers) === null || _request$headers === void 0 ? void 0 : _request$headers.cookie) || document.cookie,
49
+ userAgent: ((_request$headers2 = request.headers) === null || _request$headers2 === void 0 ? void 0 : _request$headers2['user-agent']) || navigator.userAgent,
44
50
  referer: request.referer || document.referrer,
45
51
  query: request.query || getQuery(),
46
52
  url: location.href
@@ -8,14 +8,14 @@ exports.default = void 0;
8
8
 
9
9
  var _react = require("react");
10
10
 
11
- var _runtimeCore = require("@modern-js/runtime-core");
12
-
13
11
  var _store = require("@modern-js-reduck/store");
14
12
 
15
13
  var _react2 = require("@modern-js-reduck/react");
16
14
 
17
15
  var _hoistNonReactStatics = _interopRequireDefault(require("hoist-non-react-statics"));
18
16
 
17
+ var _core = require("../../core");
18
+
19
19
  var _common = require("../../common");
20
20
 
21
21
  var _jsxRuntime = require("react/jsx-runtime");
@@ -51,7 +51,7 @@ const state = config => ({
51
51
  }, next) {
52
52
  const getStateApp = props => {
53
53
  // eslint-disable-next-line react-hooks/rules-of-hooks
54
- const context = (0, _react.useContext)(_runtimeCore.RuntimeReactContext);
54
+ const context = (0, _react.useContext)(_core.RuntimeReactContext);
55
55
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(_react2.Provider, {
56
56
  store: context.store,
57
57
  config: config,
@@ -1,7 +1,7 @@
1
1
  import _regeneratorRuntime from "@babel/runtime/helpers/esm/regeneratorRuntime";
2
2
  import _asyncToGenerator from "@babel/runtime/helpers/esm/asyncToGenerator";
3
3
  import path from 'path';
4
- import { PLUGIN_SCHEMAS, createRuntimeExportsUtils, cleanRequireCache } from '@modern-js/utils';
4
+ import { PLUGIN_SCHEMAS, createRuntimeExportsUtils, cleanRequireCache, isReact18 } from '@modern-js/utils';
5
5
  import PluginState from "../state/cli";
6
6
  import PluginSSR from "../ssr/cli";
7
7
  import PluginRouter from "../router/cli";
@@ -14,8 +14,9 @@ export default (function () {
14
14
  var runtimeExportsUtils = {};
15
15
  return {
16
16
  config: function config() {
17
- var dir = api.useAppContext().internalDirectory;
17
+ var dir = api.useAppContext().internalDirectory || '';
18
18
  runtimeExportsUtils = createRuntimeExportsUtils(dir, 'index');
19
+ process.env.IS_REACT18 = isReact18(path.join(dir, '../../')).toString();
19
20
  return {
20
21
  runtime: {},
21
22
  runtimeByEntries: {},
@@ -28,10 +29,9 @@ export default (function () {
28
29
  * But it will not be installed under the user project.
29
30
  * So need to add alias
30
31
  */
31
- 'styled-components': require.resolve('styled-components', {
32
- paths: [require.resolve('@modern-js/runtime-core')]
33
- })
34
- }
32
+ 'styled-components': require.resolve('styled-components')
33
+ },
34
+ envVars: ['IS_REACT18']
35
35
  }
36
36
  };
37
37
  },
@@ -0,0 +1,13 @@
1
+ var APP_CONFIG_SYMBOL = 'config';
2
+ export var getConfig = function getConfig(Component) {
3
+ return (// eslint-disable-next-line @typescript-eslint/ban-ts-comment
4
+ // @ts-expect-error
5
+ Component[APP_CONFIG_SYMBOL]
6
+ );
7
+ };
8
+ export var defineConfig = function defineConfig(Component, config) {
9
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
10
+ // @ts-expect-error
11
+ Component[APP_CONFIG_SYMBOL] = config;
12
+ return Component;
13
+ };
@@ -0,0 +1,297 @@
1
+ import _regeneratorRuntime from "@babel/runtime/helpers/esm/regeneratorRuntime";
2
+ import _asyncToGenerator from "@babel/runtime/helpers/esm/asyncToGenerator";
3
+ import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties";
4
+ import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
5
+ import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray";
6
+ var _excluded = ["context"];
7
+ import React, { useContext, useMemo } from 'react';
8
+ import defaultReactDOM from 'react-dom';
9
+ import hoistNonReactStatics from 'hoist-non-react-statics';
10
+ import { runtime } from "./plugin";
11
+ import { RuntimeReactContext } from "./runtime-context";
12
+ import { createLoaderManager } from "./loader/loaderManager";
13
+ import { jsx as _jsx } from "react/jsx-runtime";
14
+ var IS_REACT18 = process.env.IS_REACT18 === 'true';
15
+
16
+ function isClientArgs(id) {
17
+ return typeof id === 'string' || typeof HTMLElement !== 'undefined' && id instanceof HTMLElement;
18
+ }
19
+
20
+ var runnerMap = new WeakMap();
21
+
22
+ var getInitialContext = function getInitialContext(runner) {
23
+ return {
24
+ loaderManager: createLoaderManager({}),
25
+ runner: runner,
26
+ isBrowser: true
27
+ };
28
+ };
29
+
30
+ export var createApp = function createApp(_ref) {
31
+ var plugins = _ref.plugins;
32
+ var appRuntime = runtime.clone();
33
+ appRuntime.usePlugin.apply(appRuntime, _toConsumableArray(plugins));
34
+ return function (App) {
35
+ var runner = appRuntime.init();
36
+
37
+ var WrapperComponent = function WrapperComponent(props) {
38
+ var element = /*#__PURE__*/React.createElement(App || React.Fragment, _objectSpread({}, props), props.children);
39
+ var context = useContext(RuntimeReactContext);
40
+ return runner.provide({
41
+ element: element,
42
+ props: _objectSpread({}, props),
43
+ context: context
44
+ }, {
45
+ onLast: function onLast(_ref2) {
46
+ var element = _ref2.element;
47
+ return element;
48
+ }
49
+ });
50
+ };
51
+
52
+ if (App) {
53
+ hoistNonReactStatics(WrapperComponent, App);
54
+ }
55
+
56
+ var HOCApp = runner.hoc({
57
+ App: WrapperComponent
58
+ }, {
59
+ onLast: function onLast(_ref3) {
60
+ var App = _ref3.App;
61
+
62
+ var WrapComponent = function WrapComponent(_ref4) {
63
+ var _contextValue;
64
+
65
+ var context = _ref4.context,
66
+ props = _objectWithoutProperties(_ref4, _excluded);
67
+
68
+ var contextValue = context; // We should construct the context, when root component is not passed into `bootstrap`.
69
+
70
+ if (!((_contextValue = contextValue) !== null && _contextValue !== void 0 && _contextValue.runner)) {
71
+ contextValue = getInitialContext(runner);
72
+ runner.init({
73
+ context: contextValue
74
+ }, {
75
+ onLast: function onLast(_ref5) {
76
+ var _App$init;
77
+
78
+ var context1 = _ref5.context;
79
+ return App === null || App === void 0 ? void 0 : (_App$init = App.init) === null || _App$init === void 0 ? void 0 : _App$init.call(App, context1);
80
+ }
81
+ });
82
+ }
83
+
84
+ return /*#__PURE__*/_jsx(RuntimeReactContext.Provider, {
85
+ value: contextValue,
86
+ children: /*#__PURE__*/_jsx(App, _objectSpread({}, props))
87
+ });
88
+ };
89
+
90
+ return hoistNonReactStatics(WrapComponent, App);
91
+ }
92
+ });
93
+ runnerMap.set(HOCApp, runner);
94
+ return HOCApp;
95
+ };
96
+ };
97
+ export var bootstrap = /*#__PURE__*/function () {
98
+ var _ref6 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(BootApp,
99
+ /**
100
+ * When csr, id is root id.
101
+ * When ssr, id is serverContext
102
+ */
103
+ id,
104
+ /**
105
+ * root.render need use root to run function
106
+ */
107
+ root) {
108
+ var render,
109
+ hydrate,
110
+ App,
111
+ runner,
112
+ context,
113
+ runInit,
114
+ isBrowser,
115
+ _ssrData$data,
116
+ _ssrData$data2,
117
+ ssrData,
118
+ loadersData,
119
+ initialLoadersState,
120
+ initialData,
121
+ _rootElement,
122
+ ModernRender,
123
+ ModernHydrate,
124
+ _initialData,
125
+ _args = arguments;
126
+
127
+ return _regeneratorRuntime().wrap(function _callee$(_context2) {
128
+ while (1) {
129
+ switch (_context2.prev = _context2.next) {
130
+ case 0:
131
+ render = _args.length > 3 && _args[3] !== undefined ? _args[3] : defaultReactDOM.render;
132
+ hydrate = _args.length > 4 && _args[4] !== undefined ? _args[4] : defaultReactDOM.hydrate;
133
+ App = BootApp;
134
+ runner = runnerMap.get(App); // ensure Component used is created by `createApp`
135
+
136
+ if (!runner) {
137
+ App = createApp({
138
+ plugins: []
139
+ })(App);
140
+ runner = runnerMap.get(App);
141
+ }
142
+
143
+ context = getInitialContext(runner);
144
+
145
+ runInit = function runInit(_context) {
146
+ return runner.init({
147
+ context: _context
148
+ }, {
149
+ onLast: function onLast(_ref7) {
150
+ var _App, _App$init2;
151
+
152
+ var context1 = _ref7.context;
153
+ 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);
154
+ }
155
+ });
156
+ }; // don't mount the App, let user in charge of it.
157
+
158
+
159
+ if (id) {
160
+ _context2.next = 9;
161
+ break;
162
+ }
163
+
164
+ return _context2.abrupt("return", /*#__PURE__*/React.createElement(App, {
165
+ context: context
166
+ }));
167
+
168
+ case 9:
169
+ isBrowser = typeof window !== 'undefined' && window.name !== 'nodejs';
170
+
171
+ if (!isBrowser) {
172
+ _context2.next = 30;
173
+ break;
174
+ }
175
+
176
+ if (!isClientArgs(id)) {
177
+ _context2.next = 27;
178
+ break;
179
+ }
180
+
181
+ ssrData = window._SSR_DATA;
182
+ loadersData = (ssrData === null || ssrData === void 0 ? void 0 : (_ssrData$data = ssrData.data) === null || _ssrData$data === void 0 ? void 0 : _ssrData$data.loadersData) || {};
183
+ initialLoadersState = Object.keys(loadersData).reduce(function (res, key) {
184
+ var loaderData = loadersData[key];
185
+
186
+ if (loaderData.loading !== false) {
187
+ return res;
188
+ }
189
+
190
+ res[key] = loaderData;
191
+ return res;
192
+ }, {});
193
+ Object.assign(context, _objectSpread({
194
+ loaderManager: createLoaderManager(initialLoadersState, {
195
+ skipStatic: true
196
+ })
197
+ }, ssrData ? {
198
+ ssrContext: ssrData === null || ssrData === void 0 ? void 0 : ssrData.context
199
+ } : {}));
200
+ context.initialData = ssrData === null || ssrData === void 0 ? void 0 : (_ssrData$data2 = ssrData.data) === null || _ssrData$data2 === void 0 ? void 0 : _ssrData$data2.initialData;
201
+ _context2.next = 19;
202
+ return runInit(context);
203
+
204
+ case 19:
205
+ initialData = _context2.sent;
206
+
207
+ if (initialData) {
208
+ context.initialData = initialData;
209
+ }
210
+
211
+ _rootElement = typeof id !== 'string' ? id : document.getElementById(id || 'root'); // https://reactjs.org/blog/2022/03/08/react-18-upgrade-guide.html
212
+
213
+ ModernRender = function ModernRender(App) {
214
+ if (IS_REACT18) {
215
+ root.render(App);
216
+ } else {
217
+ render(App, _rootElement);
218
+ }
219
+ };
220
+
221
+ ModernHydrate = function ModernHydrate(App, callback) {
222
+ if (IS_REACT18) {
223
+ hydrate(_rootElement, App);
224
+ } else {
225
+ hydrate(App, _rootElement, callback);
226
+ }
227
+ };
228
+
229
+ return _context2.abrupt("return", runner.client({
230
+ App: App,
231
+ context: context,
232
+ ModernRender: ModernRender,
233
+ ModernHydrate: ModernHydrate
234
+ }, {
235
+ onLast: function onLast(_ref8) {
236
+ var App = _ref8.App;
237
+ ModernRender( /*#__PURE__*/React.createElement(App, {
238
+ context: context
239
+ }));
240
+ }
241
+ }));
242
+
243
+ case 27:
244
+ throw Error('`bootstrap` needs id in browser environment, it needs to be string or element');
245
+
246
+ case 28:
247
+ _context2.next = 36;
248
+ break;
249
+
250
+ case 30:
251
+ Object.assign(context, {
252
+ ssrContext: id,
253
+ isBrowser: false,
254
+ loaderManager: createLoaderManager({}, {
255
+ skipNonStatic: id.staticGenerate,
256
+ // if not static generate, only non-static loader can exec on prod env
257
+ skipStatic: process.env.NODE_ENV === 'production' && !id.staticGenerate
258
+ })
259
+ });
260
+ _context2.next = 33;
261
+ return runInit(context);
262
+
263
+ case 33:
264
+ _initialData = _context2.sent;
265
+ context.initialData = _initialData;
266
+ return _context2.abrupt("return", runner.server({
267
+ App: App,
268
+ context: context
269
+ }));
270
+
271
+ case 36:
272
+ case "end":
273
+ return _context2.stop();
274
+ }
275
+ }
276
+ }, _callee);
277
+ }));
278
+
279
+ return function bootstrap(_x, _x2, _x3) {
280
+ return _ref6.apply(this, arguments);
281
+ };
282
+ }();
283
+ export var useRuntimeContext = function useRuntimeContext() {
284
+ var context = useContext(RuntimeReactContext);
285
+ var memoizedContext = useMemo(function () {
286
+ return context.runner.pickContext({
287
+ context: context,
288
+ pickedContext: {}
289
+ }, {
290
+ onLast: function onLast(_ref9) {
291
+ var pickedContext = _ref9.pickedContext;
292
+ return pickedContext;
293
+ }
294
+ });
295
+ }, [context]);
296
+ return memoizedContext;
297
+ };
@@ -0,0 +1,7 @@
1
+ export { createPlugin, createRuntime, runtime, registerInit, registerPrefetch } from "./plugin";
2
+ export { defineConfig, getConfig } from "./app-config";
3
+ // compatible
4
+ export * from "./compatible";
5
+ export { RuntimeReactContext } from "./runtime-context";
6
+ export * from "./loader";
7
+ export * from '@modern-js/plugin';
@@ -0,0 +1 @@
1
+ export { default as useLoader } from "./useLoader";