@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.
- package/CHANGELOG.md +65 -0
- package/dist/js/modern/cli/index.js +6 -6
- package/dist/js/modern/core/app-config.js +10 -0
- package/dist/js/modern/core/compatible.js +241 -0
- package/dist/js/modern/core/index.js +7 -0
- package/dist/js/modern/core/loader/index.js +1 -0
- package/dist/js/modern/core/loader/loaderManager.js +189 -0
- package/dist/js/modern/core/loader/useLoader.js +105 -0
- package/dist/js/modern/core/plugin.js +63 -0
- package/dist/js/modern/core/runtime-context.js +2 -0
- package/dist/js/modern/exports/styled.js +2 -2
- package/dist/js/modern/index.js +1 -1
- package/dist/js/modern/router/runtime/plugin.js +1 -1
- package/dist/js/modern/router/runtime/utils.js +3 -1
- package/dist/js/modern/ssr/index.js +34 -13
- package/dist/js/modern/ssr/index.node.js +1 -1
- package/dist/js/modern/ssr/prefetch.js +2 -2
- package/dist/js/modern/ssr/react/withCallback/index.js +17 -0
- package/dist/js/modern/ssr/serverRender/helmet.js +2 -2
- package/dist/js/modern/ssr/serverRender/index.js +1 -1
- package/dist/js/modern/ssr/serverRender/styledComponent.js +1 -1
- package/dist/js/modern/ssr/utils.js +9 -3
- package/dist/js/modern/state/runtime/plugin.js +1 -1
- package/dist/js/node/cli/index.js +5 -5
- package/dist/js/node/core/app-config.js +22 -0
- package/dist/js/node/core/compatible.js +271 -0
- package/dist/js/node/core/index.js +111 -0
- package/dist/js/node/core/loader/index.js +15 -0
- package/dist/js/node/core/loader/loaderManager.js +201 -0
- package/dist/js/node/core/loader/useLoader.js +118 -0
- package/dist/js/node/core/plugin.js +79 -0
- package/dist/js/node/core/runtime-context.js +11 -0
- package/dist/js/node/exports/styled.js +5 -5
- package/dist/js/node/index.js +10 -10
- package/dist/js/node/router/runtime/plugin.js +3 -3
- package/dist/js/node/router/runtime/utils.js +3 -1
- package/dist/js/node/ssr/index.js +37 -15
- package/dist/js/node/ssr/index.node.js +2 -2
- package/dist/js/node/ssr/react/withCallback/index.js +27 -0
- package/dist/js/node/ssr/serverRender/helmet.js +2 -2
- package/dist/js/node/ssr/serverRender/index.js +2 -2
- package/dist/js/node/ssr/serverRender/styledComponent.js +2 -2
- package/dist/js/node/ssr/utils.js +9 -3
- package/dist/js/node/state/runtime/plugin.js +3 -3
- package/dist/js/treeshaking/cli/index.js +6 -6
- package/dist/js/treeshaking/core/app-config.js +13 -0
- package/dist/js/treeshaking/core/compatible.js +297 -0
- package/dist/js/treeshaking/core/index.js +7 -0
- package/dist/js/treeshaking/core/loader/index.js +1 -0
- package/dist/js/treeshaking/core/loader/loaderManager.js +267 -0
- package/dist/js/treeshaking/core/loader/useLoader.js +107 -0
- package/dist/js/treeshaking/core/plugin.js +105 -0
- package/dist/js/treeshaking/core/runtime-context.js +2 -0
- package/dist/js/treeshaking/exports/styled.js +2 -2
- package/dist/js/treeshaking/index.js +1 -1
- package/dist/js/treeshaking/router/runtime/plugin.js +1 -1
- package/dist/js/treeshaking/router/runtime/utils.js +3 -1
- package/dist/js/treeshaking/ssr/index.js +45 -33
- package/dist/js/treeshaking/ssr/index.node.js +1 -1
- package/dist/js/treeshaking/ssr/prefetch.js +2 -2
- package/dist/js/treeshaking/ssr/react/withCallback/index.js +16 -0
- package/dist/js/treeshaking/ssr/serverRender/helmet.js +2 -2
- package/dist/js/treeshaking/ssr/serverRender/index.js +1 -1
- package/dist/js/treeshaking/ssr/serverRender/styledComponent.js +1 -1
- package/dist/js/treeshaking/ssr/utils.js +8 -3
- package/dist/js/treeshaking/state/runtime/plugin.js +1 -1
- package/dist/types/core/app-config.d.ts +6 -0
- package/dist/types/core/compatible.d.ts +17 -0
- package/dist/types/core/index.d.ts +9 -0
- package/dist/types/core/loader/index.d.ts +2 -0
- package/dist/types/core/loader/loaderManager.d.ts +57 -0
- package/dist/types/core/loader/useLoader.d.ts +54 -0
- package/dist/types/core/plugin.d.ts +215 -0
- package/dist/types/core/runtime-context.d.ts +13 -0
- package/dist/types/exports/styled.d.ts +2 -2
- package/dist/types/index.d.ts +4 -9
- package/dist/types/router/runtime/plugin.d.ts +1 -1
- package/dist/types/ssr/index.d.ts +2 -2
- package/dist/types/ssr/index.node.d.ts +1 -1
- package/dist/types/ssr/prefetch.d.ts +2 -2
- package/dist/types/ssr/react/nossr/index.d.ts +1 -1
- package/dist/types/ssr/react/withCallback/index.d.ts +5 -0
- package/dist/types/ssr/serverRender/entry.d.ts +1 -1
- package/dist/types/ssr/serverRender/index.d.ts +1 -1
- package/dist/types/ssr/serverRender/type.d.ts +1 -1
- package/dist/types/state/runtime/plugin.d.ts +2 -2
- package/lib/types.d.ts +10 -0
- 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
|
-
|
|
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
|
-
|
|
57
|
-
|
|
58
|
-
|
|
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
|
-
})
|
|
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
|
-
|
|
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
|
-
|
|
96
|
+
ModernHydrate( /*#__PURE__*/(0, _jsxRuntime.jsx)(App, {
|
|
79
97
|
context: context
|
|
80
|
-
})
|
|
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
|
|
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,
|
|
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
|
|
12
|
-
const TEST_TITLE_CONTENT = /(?<=<title[^>]*>)([\s\S\n\r]*?)([.|\S])([\s\S\n\r]*?)(?=<\/title>)
|
|
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
|
|
8
|
+
var _styledComponents = require("styled-components");
|
|
9
9
|
|
|
10
10
|
const toHtml = (jsx, renderer, next) => {
|
|
11
|
-
const sheet = new
|
|
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
|
-
|
|
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)(
|
|
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
|
-
|
|
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";
|