@modern-js/runtime 1.3.5 → 1.4.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 +46 -0
- package/dist/js/modern/cli/index.js +4 -4
- package/dist/js/modern/common.js +1 -0
- package/dist/js/modern/exports/model.js +2 -1
- package/dist/js/modern/exports/router.js +2 -1
- package/dist/js/modern/exports/server.js +0 -1
- package/dist/js/modern/exports/ssr.js +2 -1
- package/dist/js/modern/router/cli/index.js +106 -0
- package/dist/js/modern/router/index.js +2 -0
- package/dist/js/modern/router/runtime/DefaultNotFound.js +13 -0
- package/dist/js/modern/router/runtime/index.js +4 -0
- package/dist/js/modern/router/runtime/plugin.js +88 -0
- package/dist/js/modern/router/runtime/utils.js +108 -0
- package/dist/js/modern/ssr/cli/index.js +120 -0
- package/dist/js/modern/ssr/index.js +109 -0
- package/dist/js/modern/ssr/index.node.js +78 -0
- package/dist/js/modern/ssr/prefetch.js +58 -0
- package/dist/js/modern/ssr/react/index.js +2 -0
- package/dist/js/modern/ssr/react/nossr/index.js +13 -0
- package/dist/js/modern/ssr/react/prerender/index.js +104 -0
- package/dist/js/modern/ssr/react/prerender/type.js +0 -0
- package/dist/js/modern/ssr/react/prerender/util.js +99 -0
- package/dist/js/modern/ssr/serverRender/entry.js +179 -0
- package/dist/js/modern/ssr/serverRender/helmet.js +46 -0
- package/dist/js/modern/ssr/serverRender/index.js +29 -0
- package/dist/js/modern/ssr/serverRender/loadable.js +48 -0
- package/dist/js/modern/ssr/serverRender/measure.js +11 -0
- package/dist/js/modern/ssr/serverRender/reduce.js +7 -0
- package/dist/js/modern/ssr/serverRender/styledComponent.js +8 -0
- package/dist/js/modern/ssr/serverRender/template.js +90 -0
- package/dist/js/modern/ssr/serverRender/type.js +8 -0
- package/dist/js/modern/ssr/utils.js +51 -0
- package/dist/js/modern/state/cli/index.js +110 -0
- package/dist/js/modern/state/index.js +2 -0
- package/dist/js/modern/state/plugins.js +7 -0
- package/dist/js/modern/state/runtime/index.js +4 -0
- package/dist/js/modern/state/runtime/plugin.js +71 -0
- package/dist/js/modern/state/types.js +1 -0
- package/dist/js/node/cli/index.js +5 -5
- package/dist/js/node/common.js +10 -0
- package/dist/js/node/exports/model.js +19 -5
- package/dist/js/node/exports/router.js +19 -5
- package/dist/js/node/exports/server.js +0 -17
- package/dist/js/node/exports/ssr.js +19 -5
- package/dist/js/node/router/cli/index.js +122 -0
- package/dist/js/node/router/index.js +30 -0
- package/dist/js/node/router/runtime/DefaultNotFound.js +26 -0
- package/dist/js/node/router/runtime/index.js +39 -0
- package/dist/js/node/router/runtime/plugin.js +111 -0
- package/dist/js/node/router/runtime/utils.js +128 -0
- package/dist/js/node/ssr/cli/index.js +136 -0
- package/dist/js/node/ssr/index.js +138 -0
- package/dist/js/node/ssr/index.node.js +105 -0
- package/dist/js/node/ssr/prefetch.js +75 -0
- package/dist/js/node/ssr/react/index.js +21 -0
- package/dist/js/node/ssr/react/nossr/index.js +28 -0
- package/dist/js/node/ssr/react/prerender/index.js +121 -0
- package/dist/js/node/ssr/react/prerender/type.js +0 -0
- package/dist/js/node/ssr/react/prerender/util.js +119 -0
- package/dist/js/node/ssr/serverRender/entry.js +208 -0
- package/dist/js/node/ssr/serverRender/helmet.js +52 -0
- package/dist/js/node/ssr/serverRender/index.js +46 -0
- package/dist/js/node/ssr/serverRender/loadable.js +60 -0
- package/dist/js/node/ssr/serverRender/measure.js +20 -0
- package/dist/js/node/ssr/serverRender/reduce.js +14 -0
- package/dist/js/node/ssr/serverRender/styledComponent.js +18 -0
- package/dist/js/node/ssr/serverRender/template.js +103 -0
- package/dist/js/node/ssr/serverRender/type.js +15 -0
- package/dist/js/node/ssr/utils.js +65 -0
- package/dist/js/node/state/cli/index.js +127 -0
- package/dist/js/node/state/index.js +30 -0
- package/dist/js/node/state/plugins.js +35 -0
- package/dist/js/node/state/runtime/index.js +61 -0
- package/dist/js/node/state/runtime/plugin.js +101 -0
- package/dist/js/node/state/types.js +5 -0
- package/dist/js/treeshaking/cli/index.js +4 -4
- package/dist/js/treeshaking/common.js +3 -0
- package/dist/js/treeshaking/exports/model.js +2 -1
- package/dist/js/treeshaking/exports/router.js +2 -1
- package/dist/js/treeshaking/exports/server.js +0 -1
- package/dist/js/treeshaking/exports/ssr.js +2 -1
- package/dist/js/treeshaking/router/cli/index.js +100 -0
- package/dist/js/treeshaking/router/index.js +2 -0
- package/dist/js/treeshaking/router/runtime/DefaultNotFound.js +15 -0
- package/dist/js/treeshaking/router/runtime/index.js +4 -0
- package/dist/js/treeshaking/router/runtime/plugin.js +89 -0
- package/dist/js/treeshaking/router/runtime/utils.js +106 -0
- package/dist/js/treeshaking/ssr/cli/index.js +113 -0
- package/dist/js/treeshaking/ssr/index.js +129 -0
- package/dist/js/treeshaking/ssr/index.node.js +100 -0
- package/dist/js/treeshaking/ssr/prefetch.js +97 -0
- package/dist/js/treeshaking/ssr/react/index.js +2 -0
- package/dist/js/treeshaking/ssr/react/nossr/index.js +16 -0
- package/dist/js/treeshaking/ssr/react/prerender/index.js +119 -0
- package/dist/js/treeshaking/ssr/react/prerender/type.js +0 -0
- package/dist/js/treeshaking/ssr/react/prerender/util.js +115 -0
- package/dist/js/treeshaking/ssr/serverRender/entry.js +267 -0
- package/dist/js/treeshaking/ssr/serverRender/helmet.js +37 -0
- package/dist/js/treeshaking/ssr/serverRender/index.js +69 -0
- package/dist/js/treeshaking/ssr/serverRender/loadable.js +59 -0
- package/dist/js/treeshaking/ssr/serverRender/measure.js +17 -0
- package/dist/js/treeshaking/ssr/serverRender/reduce.js +11 -0
- package/dist/js/treeshaking/ssr/serverRender/styledComponent.js +8 -0
- package/dist/js/treeshaking/ssr/serverRender/template.js +111 -0
- package/dist/js/treeshaking/ssr/serverRender/type.js +8 -0
- package/dist/js/treeshaking/ssr/utils.js +53 -0
- package/dist/js/treeshaking/state/cli/index.js +100 -0
- package/dist/js/treeshaking/state/index.js +2 -0
- package/dist/js/treeshaking/state/plugins.js +13 -0
- package/dist/js/treeshaking/state/runtime/index.js +4 -0
- package/dist/js/treeshaking/state/runtime/plugin.js +63 -0
- package/dist/js/treeshaking/state/types.js +1 -0
- package/dist/types/common.d.ts +1 -0
- package/dist/types/exports/model.d.ts +2 -1
- package/dist/types/exports/router.d.ts +2 -1
- package/dist/types/exports/server.d.ts +0 -1
- package/dist/types/exports/ssr.d.ts +2 -1
- package/dist/types/index.d.ts +2 -2
- package/dist/types/router/cli/index.d.ts +5 -0
- package/dist/types/router/index.d.ts +2 -0
- package/dist/types/router/runtime/DefaultNotFound.d.ts +2 -0
- package/dist/types/router/runtime/index.d.ts +6 -0
- package/dist/types/router/runtime/plugin.d.ts +51 -0
- package/dist/types/router/runtime/utils.d.ts +6 -0
- package/dist/types/ssr/cli/index.d.ts +5 -0
- package/dist/types/ssr/index.d.ts +18 -0
- package/dist/types/ssr/index.node.d.ts +4 -0
- package/dist/types/ssr/prefetch.d.ts +13 -0
- package/dist/types/ssr/react/index.d.ts +2 -0
- package/dist/types/ssr/react/nossr/index.d.ts +2 -0
- package/dist/types/ssr/react/prerender/index.d.ts +1 -0
- package/dist/types/ssr/react/prerender/type.d.ts +29 -0
- package/dist/types/ssr/react/prerender/util.d.ts +6 -0
- package/dist/types/ssr/serverRender/entry.d.ts +20 -0
- package/dist/types/ssr/serverRender/helmet.d.ts +2 -0
- package/dist/types/ssr/serverRender/index.d.ts +8 -0
- package/dist/types/ssr/serverRender/loadable.d.ts +2 -0
- package/dist/types/ssr/serverRender/measure.d.ts +1 -0
- package/dist/types/ssr/serverRender/reduce.d.ts +3 -0
- package/dist/types/ssr/serverRender/styledComponent.d.ts +2 -0
- package/dist/types/ssr/serverRender/template.d.ts +14 -0
- package/dist/types/ssr/serverRender/type.d.ts +32 -0
- package/dist/types/ssr/utils.d.ts +8 -0
- package/dist/types/state/cli/index.d.ts +5 -0
- package/dist/types/state/index.d.ts +2 -0
- package/dist/types/state/plugins.d.ts +4 -0
- package/dist/types/state/runtime/index.d.ts +4 -0
- package/dist/types/state/runtime/plugin.d.ts +17 -0
- package/dist/types/state/types.d.ts +17 -0
- package/package.json +37 -20
- package/types/model.d.ts +1 -1
- package/types/state.d.ts +4 -0
- package/dist/js/modern/exports/request.js +0 -1
- package/dist/js/node/exports/request.js +0 -13
- package/dist/js/treeshaking/exports/request.js +0 -1
- package/dist/types/exports/request.d.ts +0 -1
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import _regeneratorRuntime from "@babel/runtime/helpers/esm/regeneratorRuntime";
|
|
2
|
+
import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
|
|
3
|
+
import _asyncToGenerator from "@babel/runtime/helpers/esm/asyncToGenerator";
|
|
4
|
+
import ReactDOM from 'react-dom';
|
|
5
|
+
import { loadableReady } from '@loadable/component';
|
|
6
|
+
import { RenderLevel } from "./serverRender/type";
|
|
7
|
+
import { formatClient, mockResponse } from "./utils";
|
|
8
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
9
|
+
|
|
10
|
+
var ssr = function ssr() {
|
|
11
|
+
return {
|
|
12
|
+
name: '@modern-js/plugin-ssr',
|
|
13
|
+
setup: function setup() {
|
|
14
|
+
var mockResp = mockResponse();
|
|
15
|
+
return {
|
|
16
|
+
client: function () {
|
|
17
|
+
var _client = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(_ref) {
|
|
18
|
+
var _window, _window$_SSR_DATA;
|
|
19
|
+
|
|
20
|
+
var App, context, rootElement, renderLevel, _prefetch, _ref2;
|
|
21
|
+
|
|
22
|
+
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
23
|
+
while (1) {
|
|
24
|
+
switch (_context.prev = _context.next) {
|
|
25
|
+
case 0:
|
|
26
|
+
App = _ref.App, context = _ref.context, rootElement = _ref.rootElement;
|
|
27
|
+
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;
|
|
28
|
+
|
|
29
|
+
if (!(renderLevel === RenderLevel.CLIENT_RENDER)) {
|
|
30
|
+
_context.next = 8;
|
|
31
|
+
break;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
_context.next = 5;
|
|
35
|
+
return App === null || App === void 0 ? void 0 : (_prefetch = (_ref2 = App).prefetch) === null || _prefetch === void 0 ? void 0 : _prefetch.call(_ref2, context);
|
|
36
|
+
|
|
37
|
+
case 5:
|
|
38
|
+
ReactDOM.render( /*#__PURE__*/_jsx(App, {
|
|
39
|
+
context: context
|
|
40
|
+
}), rootElement);
|
|
41
|
+
_context.next = 9;
|
|
42
|
+
break;
|
|
43
|
+
|
|
44
|
+
case 8:
|
|
45
|
+
if (renderLevel === RenderLevel.SERVER_RENDER) {
|
|
46
|
+
loadableReady(function () {
|
|
47
|
+
var hydrateContext = _objectSpread(_objectSpread({}, context), {}, {
|
|
48
|
+
_hydration: true
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
ReactDOM.hydrate( /*#__PURE__*/_jsx(App, {
|
|
52
|
+
context: hydrateContext
|
|
53
|
+
}), rootElement, function () {
|
|
54
|
+
// won't cause component re-render because context's reference identity doesn't change
|
|
55
|
+
delete hydrateContext._hydration;
|
|
56
|
+
});
|
|
57
|
+
});
|
|
58
|
+
} else {
|
|
59
|
+
// unknown renderlevel or renderlevel is server prefetch.
|
|
60
|
+
ReactDOM.render( /*#__PURE__*/_jsx(App, {
|
|
61
|
+
context: context
|
|
62
|
+
}), rootElement);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
case 9:
|
|
66
|
+
case "end":
|
|
67
|
+
return _context.stop();
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}, _callee);
|
|
71
|
+
}));
|
|
72
|
+
|
|
73
|
+
function client(_x) {
|
|
74
|
+
return _client.apply(this, arguments);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
return client;
|
|
78
|
+
}(),
|
|
79
|
+
init: function init(_ref3, next) {
|
|
80
|
+
var _window2, _window2$_SSR_DATA, _window2$_SSR_DATA$co;
|
|
81
|
+
|
|
82
|
+
var context = _ref3.context;
|
|
83
|
+
var 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;
|
|
84
|
+
|
|
85
|
+
if (!request) {
|
|
86
|
+
return next({
|
|
87
|
+
context: context
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
context.ssrContext.response = mockResp;
|
|
92
|
+
context.ssrContext.request = formatClient(request);
|
|
93
|
+
return next({
|
|
94
|
+
context: context
|
|
95
|
+
});
|
|
96
|
+
},
|
|
97
|
+
pickContext: function pickContext(_ref4, next) {
|
|
98
|
+
var _window3, _window3$_SSR_DATA, _window3$_SSR_DATA$co;
|
|
99
|
+
|
|
100
|
+
var context = _ref4.context,
|
|
101
|
+
pickedContext = _ref4.pickedContext;
|
|
102
|
+
var request = (_window3 = window) === null || _window3 === void 0 ? void 0 : (_window3$_SSR_DATA = _window3._SSR_DATA) === null || _window3$_SSR_DATA === void 0 ? void 0 : (_window3$_SSR_DATA$co = _window3$_SSR_DATA.context) === null || _window3$_SSR_DATA$co === void 0 ? void 0 : _window3$_SSR_DATA$co.request;
|
|
103
|
+
var initialData = context.initialData;
|
|
104
|
+
|
|
105
|
+
if (!request) {
|
|
106
|
+
return next({
|
|
107
|
+
context: context,
|
|
108
|
+
pickedContext: _objectSpread(_objectSpread({}, pickedContext), {}, {
|
|
109
|
+
initialData: initialData
|
|
110
|
+
})
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
return next({
|
|
115
|
+
context: context,
|
|
116
|
+
pickedContext: _objectSpread(_objectSpread({}, pickedContext), {}, {
|
|
117
|
+
initialData: initialData,
|
|
118
|
+
request: request,
|
|
119
|
+
response: mockResp
|
|
120
|
+
})
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
};
|
|
126
|
+
};
|
|
127
|
+
|
|
128
|
+
export default ssr;
|
|
129
|
+
export * from "./react";
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
|
|
2
|
+
import _regeneratorRuntime from "@babel/runtime/helpers/esm/regeneratorRuntime";
|
|
3
|
+
import _asyncToGenerator from "@babel/runtime/helpers/esm/asyncToGenerator";
|
|
4
|
+
|
|
5
|
+
/* eslint-disable @typescript-eslint/no-var-requires */
|
|
6
|
+
|
|
7
|
+
/* eslint-disable @typescript-eslint/no-require-imports */
|
|
8
|
+
import path from 'path';
|
|
9
|
+
import { registerPrefetch } from '@modern-js/runtime-core';
|
|
10
|
+
import { isBrowser } from "../common";
|
|
11
|
+
import prefetch from "./prefetch";
|
|
12
|
+
import { formatServer } from "./utils";
|
|
13
|
+
var registeredApps = new WeakSet();
|
|
14
|
+
|
|
15
|
+
var plugin = function plugin() {
|
|
16
|
+
return {
|
|
17
|
+
name: '@modern-js/plugin-ssr',
|
|
18
|
+
setup: function setup() {
|
|
19
|
+
return {
|
|
20
|
+
server: function () {
|
|
21
|
+
var _server = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(_ref) {
|
|
22
|
+
var App, context, html;
|
|
23
|
+
return _regeneratorRuntime().wrap(function _callee$(_context2) {
|
|
24
|
+
while (1) {
|
|
25
|
+
switch (_context2.prev = _context2.next) {
|
|
26
|
+
case 0:
|
|
27
|
+
App = _ref.App, context = _ref.context;
|
|
28
|
+
|
|
29
|
+
if (!registeredApps.has(App)) {
|
|
30
|
+
registerPrefetch(App, function (_context) {
|
|
31
|
+
return prefetch(App, _context);
|
|
32
|
+
});
|
|
33
|
+
registeredApps.add(App);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
if (isBrowser()) {
|
|
37
|
+
_context2.next = 7;
|
|
38
|
+
break;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
_context2.next = 5;
|
|
42
|
+
return require("./serverRender").render(context, (context === null || context === void 0 ? void 0 : context.ssrContext.distDir) || path.join(process.cwd(), 'dist'), App);
|
|
43
|
+
|
|
44
|
+
case 5:
|
|
45
|
+
html = _context2.sent;
|
|
46
|
+
return _context2.abrupt("return", html);
|
|
47
|
+
|
|
48
|
+
case 7:
|
|
49
|
+
return _context2.abrupt("return", null);
|
|
50
|
+
|
|
51
|
+
case 8:
|
|
52
|
+
case "end":
|
|
53
|
+
return _context2.stop();
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}, _callee);
|
|
57
|
+
}));
|
|
58
|
+
|
|
59
|
+
function server(_x) {
|
|
60
|
+
return _server.apply(this, arguments);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
return server;
|
|
64
|
+
}(),
|
|
65
|
+
init: function init(_ref2, next) {
|
|
66
|
+
var context = _ref2.context;
|
|
67
|
+
var request = context.ssrContext.request;
|
|
68
|
+
context.ssrContext.request = formatServer(request);
|
|
69
|
+
return next({
|
|
70
|
+
context: context
|
|
71
|
+
});
|
|
72
|
+
},
|
|
73
|
+
pickContext: function pickContext(_ref3, next) {
|
|
74
|
+
var context = _ref3.context,
|
|
75
|
+
pickedContext = _ref3.pickedContext;
|
|
76
|
+
|
|
77
|
+
var _context$ssrContext = context === null || context === void 0 ? void 0 : context.ssrContext,
|
|
78
|
+
request = _context$ssrContext.request,
|
|
79
|
+
response = _context$ssrContext.response;
|
|
80
|
+
|
|
81
|
+
var initialData = context.initialData;
|
|
82
|
+
return next({
|
|
83
|
+
context: context,
|
|
84
|
+
pickedContext: _objectSpread(_objectSpread({}, pickedContext), {}, {
|
|
85
|
+
initialData: initialData,
|
|
86
|
+
request: request,
|
|
87
|
+
response: response
|
|
88
|
+
})
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
};
|
|
94
|
+
};
|
|
95
|
+
|
|
96
|
+
export default plugin;
|
|
97
|
+
export * from "./react";
|
|
98
|
+
/* eslint-enable @typescript-eslint/no-require-imports */
|
|
99
|
+
|
|
100
|
+
/* eslint-enable @typescript-eslint/no-var-requires */
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import _regeneratorRuntime from "@babel/runtime/helpers/esm/regeneratorRuntime";
|
|
2
|
+
import _asyncToGenerator from "@babel/runtime/helpers/esm/asyncToGenerator";
|
|
3
|
+
import path from 'path';
|
|
4
|
+
import fs from 'fs';
|
|
5
|
+
import { renderToStaticMarkup } from 'react-dom/server';
|
|
6
|
+
import { run } from '@modern-js/utils/ssr';
|
|
7
|
+
import { LOADABLE_STATS_FILE } from '@modern-js/utils/constants';
|
|
8
|
+
import { ChunkExtractor } from '@loadable/server'; // todo: SSRContext
|
|
9
|
+
|
|
10
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
11
|
+
|
|
12
|
+
var prefetch = /*#__PURE__*/function () {
|
|
13
|
+
var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2(App, context) {
|
|
14
|
+
return _regeneratorRuntime().wrap(function _callee2$(_context2) {
|
|
15
|
+
while (1) {
|
|
16
|
+
switch (_context2.prev = _context2.next) {
|
|
17
|
+
case 0:
|
|
18
|
+
return _context2.abrupt("return", run(context.ssrContext.request.headers, /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
|
|
19
|
+
var _context$store;
|
|
20
|
+
|
|
21
|
+
var ssrContext, loadablefile, extractor, loadersData;
|
|
22
|
+
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
23
|
+
while (1) {
|
|
24
|
+
switch (_context.prev = _context.next) {
|
|
25
|
+
case 0:
|
|
26
|
+
ssrContext = context.ssrContext;
|
|
27
|
+
loadablefile = path.resolve(ssrContext.distDir, LOADABLE_STATS_FILE);
|
|
28
|
+
|
|
29
|
+
if (fs.existsSync(loadablefile)) {
|
|
30
|
+
extractor = new ChunkExtractor({
|
|
31
|
+
statsFile: path.resolve(ssrContext.distDir, LOADABLE_STATS_FILE),
|
|
32
|
+
entrypoints: [ssrContext.entryName].filter(Boolean)
|
|
33
|
+
});
|
|
34
|
+
renderToStaticMarkup(extractor.collectChunks( /*#__PURE__*/_jsx(App, {
|
|
35
|
+
context: context
|
|
36
|
+
})));
|
|
37
|
+
} else {
|
|
38
|
+
renderToStaticMarkup( /*#__PURE__*/_jsx(App, {
|
|
39
|
+
context: context
|
|
40
|
+
}));
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
if (context.loaderManager.hasPendingLoaders()) {
|
|
44
|
+
_context.next = 5;
|
|
45
|
+
break;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
return _context.abrupt("return", {
|
|
49
|
+
initialData: context.initialData,
|
|
50
|
+
i18nData: context.__i18nData__
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
case 5:
|
|
54
|
+
_context.next = 7;
|
|
55
|
+
return context.loaderManager.awaitPendingLoaders();
|
|
56
|
+
|
|
57
|
+
case 7:
|
|
58
|
+
loadersData = _context.sent;
|
|
59
|
+
Object.keys(loadersData).forEach(function (id) {
|
|
60
|
+
var data = loadersData[id];
|
|
61
|
+
|
|
62
|
+
if (data._error) {
|
|
63
|
+
ssrContext.logger.error('App Prefetch Loader', data._error);
|
|
64
|
+
ssrContext.metrics.emitCounter('app.prefetch.loader.error', 1);
|
|
65
|
+
delete data._error;
|
|
66
|
+
}
|
|
67
|
+
});
|
|
68
|
+
return _context.abrupt("return", {
|
|
69
|
+
loadersData: loadersData,
|
|
70
|
+
initialData: context.initialData,
|
|
71
|
+
i18nData: context.__i18nData__,
|
|
72
|
+
// todo: move to plugin state
|
|
73
|
+
storeState: context === null || context === void 0 ? void 0 : (_context$store = context.store) === null || _context$store === void 0 ? void 0 : _context$store.getState()
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
case 10:
|
|
77
|
+
case "end":
|
|
78
|
+
return _context.stop();
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}, _callee);
|
|
82
|
+
}))));
|
|
83
|
+
|
|
84
|
+
case 1:
|
|
85
|
+
case "end":
|
|
86
|
+
return _context2.stop();
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}, _callee2);
|
|
90
|
+
}));
|
|
91
|
+
|
|
92
|
+
return function prefetch(_x, _x2) {
|
|
93
|
+
return _ref.apply(this, arguments);
|
|
94
|
+
};
|
|
95
|
+
}();
|
|
96
|
+
|
|
97
|
+
export default prefetch;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
|
|
2
|
+
import React, { useEffect, useState } from 'react';
|
|
3
|
+
var csr = false;
|
|
4
|
+
export var NoSSR = function NoSSR(props) {
|
|
5
|
+
var _useState = useState(csr),
|
|
6
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
7
|
+
isMounted = _useState2[0],
|
|
8
|
+
setMounted = _useState2[1];
|
|
9
|
+
|
|
10
|
+
useEffect(function () {
|
|
11
|
+
csr = true;
|
|
12
|
+
setMounted(true);
|
|
13
|
+
});
|
|
14
|
+
var children = props.children;
|
|
15
|
+
return /*#__PURE__*/React.createElement(React.Fragment, null, isMounted ? children : null);
|
|
16
|
+
};
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import _classCallCheck from "@babel/runtime/helpers/esm/classCallCheck";
|
|
2
|
+
import _createClass from "@babel/runtime/helpers/esm/createClass";
|
|
3
|
+
import _inherits from "@babel/runtime/helpers/esm/inherits";
|
|
4
|
+
import _createSuper from "@babel/runtime/helpers/esm/createSuper";
|
|
5
|
+
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
|
|
6
|
+
import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
|
|
7
|
+
import withSideEffect from 'react-side-effect';
|
|
8
|
+
import React, { createElement } from 'react';
|
|
9
|
+
import { getOutermostProperty, aggKeysFromPropsList, exist, aggMatchesFromPropsList } from "./util";
|
|
10
|
+
var PROP_NAMES = {
|
|
11
|
+
INTERVAL: 'interval',
|
|
12
|
+
STALE_LIMIT: 'staleLimit',
|
|
13
|
+
LEVEL: 'level',
|
|
14
|
+
INCLUDES: 'includes',
|
|
15
|
+
EXCLUDES: 'excludes',
|
|
16
|
+
FALLBACK: 'fallback',
|
|
17
|
+
MATCHES: 'matches'
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
var handleClientStateChange = function handleClientStateChange() {// not used
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
var mapStateOnServer = function mapStateOnServer(reduceProps) {
|
|
24
|
+
var defaultProps = {
|
|
25
|
+
interval: 10,
|
|
26
|
+
staleLimit: false,
|
|
27
|
+
level: 0,
|
|
28
|
+
includes: null,
|
|
29
|
+
excludes: null,
|
|
30
|
+
fallback: false,
|
|
31
|
+
matches: null
|
|
32
|
+
};
|
|
33
|
+
return Object.keys(defaultProps).reduce(function (props, key) {
|
|
34
|
+
var propKey = key;
|
|
35
|
+
var reduceProp = reduceProps[propKey];
|
|
36
|
+
var nextProps = props;
|
|
37
|
+
|
|
38
|
+
if (exist(reduceProp)) {
|
|
39
|
+
nextProps = _objectSpread(_objectSpread({}, props), {}, _defineProperty({}, propKey, reduceProp));
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
return nextProps;
|
|
43
|
+
}, defaultProps);
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
var reducePropsToState = function reducePropsToState(propsList) {
|
|
47
|
+
var reduceProps = {
|
|
48
|
+
interval: getOutermostProperty(propsList, PROP_NAMES.INTERVAL),
|
|
49
|
+
staleLimit: getOutermostProperty(propsList, PROP_NAMES.STALE_LIMIT),
|
|
50
|
+
level: getOutermostProperty(propsList, PROP_NAMES.LEVEL),
|
|
51
|
+
includes: aggKeysFromPropsList(propsList, PROP_NAMES.INCLUDES),
|
|
52
|
+
excludes: aggKeysFromPropsList(propsList, PROP_NAMES.EXCLUDES),
|
|
53
|
+
fallback: getOutermostProperty(propsList, PROP_NAMES.FALLBACK),
|
|
54
|
+
matches: aggMatchesFromPropsList(propsList, PROP_NAMES.MATCHES)
|
|
55
|
+
};
|
|
56
|
+
return reduceProps;
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
function factory(Component) {
|
|
60
|
+
var Spr = /*#__PURE__*/function (_React$Component) {
|
|
61
|
+
_inherits(Spr, _React$Component);
|
|
62
|
+
|
|
63
|
+
var _super = _createSuper(Spr);
|
|
64
|
+
|
|
65
|
+
function Spr() {
|
|
66
|
+
_classCallCheck(this, Spr);
|
|
67
|
+
|
|
68
|
+
return _super.apply(this, arguments);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
_createClass(Spr, [{
|
|
72
|
+
key: "verify",
|
|
73
|
+
value: function verify() {
|
|
74
|
+
return true;
|
|
75
|
+
}
|
|
76
|
+
}, {
|
|
77
|
+
key: "render",
|
|
78
|
+
value: function render() {
|
|
79
|
+
var newProps = _objectSpread({}, this.props);
|
|
80
|
+
|
|
81
|
+
var validate = this.verify();
|
|
82
|
+
|
|
83
|
+
if (!validate) {
|
|
84
|
+
throw new Error('invalid props, check usage');
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
return /*#__PURE__*/createElement(Component, _objectSpread({}, newProps));
|
|
88
|
+
}
|
|
89
|
+
}], [{
|
|
90
|
+
key: "canUseDOM",
|
|
91
|
+
get: function get() {
|
|
92
|
+
return Component.canUseDOM;
|
|
93
|
+
},
|
|
94
|
+
set: function set(canUseDOM) {
|
|
95
|
+
Component.canUseDOM = canUseDOM;
|
|
96
|
+
}
|
|
97
|
+
}]);
|
|
98
|
+
|
|
99
|
+
return Spr;
|
|
100
|
+
}(React.Component);
|
|
101
|
+
|
|
102
|
+
_defineProperty(Spr, "peek", Component.peek);
|
|
103
|
+
|
|
104
|
+
_defineProperty(Spr, "rewind", Component.rewind);
|
|
105
|
+
|
|
106
|
+
_defineProperty(Spr, "config", function () {
|
|
107
|
+
var mappedState = Component.rewind();
|
|
108
|
+
return mappedState;
|
|
109
|
+
});
|
|
110
|
+
|
|
111
|
+
return Spr;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
var NullComponent = function NullComponent() {
|
|
115
|
+
return null;
|
|
116
|
+
};
|
|
117
|
+
|
|
118
|
+
var SprSideEffects = withSideEffect(reducePropsToState, handleClientStateChange, mapStateOnServer)(NullComponent);
|
|
119
|
+
export var PreRender = factory(SprSideEffects);
|
|
File without changes
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import _createForOfIteratorHelper from "@babel/runtime/helpers/esm/createForOfIteratorHelper";
|
|
2
|
+
var REQUEST_META = ['header', 'query'];
|
|
3
|
+
export var getInnermostProperty = function getInnermostProperty(propsList, propName) {
|
|
4
|
+
for (var i = propsList.length - 1; i >= 0; i--) {
|
|
5
|
+
var props = propsList[i];
|
|
6
|
+
|
|
7
|
+
if (props.hasOwnProperty(propName)) {
|
|
8
|
+
return props[propName];
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
return null;
|
|
13
|
+
};
|
|
14
|
+
export var getOutermostProperty = function getOutermostProperty(propsList, propName) {
|
|
15
|
+
var _iterator = _createForOfIteratorHelper(propsList),
|
|
16
|
+
_step;
|
|
17
|
+
|
|
18
|
+
try {
|
|
19
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
20
|
+
var props = _step.value;
|
|
21
|
+
|
|
22
|
+
if (props.hasOwnProperty(propName)) {
|
|
23
|
+
return props[propName];
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
} catch (err) {
|
|
27
|
+
_iterator.e(err);
|
|
28
|
+
} finally {
|
|
29
|
+
_iterator.f();
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
return null;
|
|
33
|
+
};
|
|
34
|
+
export var aggKeysFromPropsList = function aggKeysFromPropsList(propsList, propName) {
|
|
35
|
+
var initResult = REQUEST_META.reduce(function (result, next) {
|
|
36
|
+
var key = next;
|
|
37
|
+
result[key] = [];
|
|
38
|
+
return result;
|
|
39
|
+
}, {});
|
|
40
|
+
var res = propsList.filter(function (props) {
|
|
41
|
+
return usefulObject(props[propName]);
|
|
42
|
+
}).reduce(function (result, next) {
|
|
43
|
+
REQUEST_META.forEach(function (key) {
|
|
44
|
+
var prop = next[propName];
|
|
45
|
+
|
|
46
|
+
if (prop !== null && prop !== void 0 && prop.hasOwnProperty(key) && usefulArray(prop[key])) {
|
|
47
|
+
result[key] = unique(result[key].concat(prop[key]));
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
return result;
|
|
51
|
+
}, initResult);
|
|
52
|
+
return REQUEST_META.reduce(function (result, next) {
|
|
53
|
+
var _result$key;
|
|
54
|
+
|
|
55
|
+
var key = next;
|
|
56
|
+
|
|
57
|
+
if (result[key] && ((_result$key = result[key]) === null || _result$key === void 0 ? void 0 : _result$key.length) === 0) {
|
|
58
|
+
delete result[key];
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
return result;
|
|
62
|
+
}, res);
|
|
63
|
+
};
|
|
64
|
+
export var aggMatchesFromPropsList = function aggMatchesFromPropsList(propsList, propName) {
|
|
65
|
+
var initResult = REQUEST_META.reduce(function (result, next) {
|
|
66
|
+
var key = next;
|
|
67
|
+
result[key] = {};
|
|
68
|
+
return result;
|
|
69
|
+
}, {});
|
|
70
|
+
var res = propsList.filter(function (props) {
|
|
71
|
+
return usefulObject(props[propName]);
|
|
72
|
+
}).reduce(function (result, next) {
|
|
73
|
+
REQUEST_META.forEach(function (key) {
|
|
74
|
+
var prop = next[propName]; // 这边目前是浅拷贝,越后渲染优先级越高
|
|
75
|
+
|
|
76
|
+
if (prop !== null && prop !== void 0 && prop.hasOwnProperty(key) && usefulObject(prop[key])) {
|
|
77
|
+
result[key] = Object.assign(result[key], prop[key]);
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
return result;
|
|
81
|
+
}, initResult);
|
|
82
|
+
return REQUEST_META.reduce(function (result, next) {
|
|
83
|
+
var key = next;
|
|
84
|
+
|
|
85
|
+
if (result[key] && Object.keys(result[key]).length === 0) {
|
|
86
|
+
delete result[key];
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
return result;
|
|
90
|
+
}, res);
|
|
91
|
+
};
|
|
92
|
+
|
|
93
|
+
function unique(arr) {
|
|
94
|
+
return Array.from(new Set(arr));
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
function usefulObject(target) {
|
|
98
|
+
if (!exist(target)) {
|
|
99
|
+
return false;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
return target.constructor === Object && Object.keys(target).length > 0;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
function usefulArray(target) {
|
|
106
|
+
if (!exist(target)) {
|
|
107
|
+
return false;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
return Array.isArray(target) && target.length > 0;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
export function exist(target) {
|
|
114
|
+
return target != null;
|
|
115
|
+
}
|