@modern-js/runtime 1.3.5 → 1.4.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +67 -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 +36 -20
- package/types/model.d.ts +4 -1
- 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,105 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
var _exportNames = {};
|
|
7
|
+
exports.default = void 0;
|
|
8
|
+
|
|
9
|
+
var _path = _interopRequireDefault(require("path"));
|
|
10
|
+
|
|
11
|
+
var _runtimeCore = require("@modern-js/runtime-core");
|
|
12
|
+
|
|
13
|
+
var _common = require("../common");
|
|
14
|
+
|
|
15
|
+
var _prefetch = _interopRequireDefault(require("./prefetch"));
|
|
16
|
+
|
|
17
|
+
var _utils = require("./utils");
|
|
18
|
+
|
|
19
|
+
var _react = require("./react");
|
|
20
|
+
|
|
21
|
+
Object.keys(_react).forEach(function (key) {
|
|
22
|
+
if (key === "default" || key === "__esModule") return;
|
|
23
|
+
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
|
|
24
|
+
if (key in exports && exports[key] === _react[key]) return;
|
|
25
|
+
Object.defineProperty(exports, key, {
|
|
26
|
+
enumerable: true,
|
|
27
|
+
get: function () {
|
|
28
|
+
return _react[key];
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
34
|
+
|
|
35
|
+
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; }
|
|
36
|
+
|
|
37
|
+
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; }
|
|
38
|
+
|
|
39
|
+
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
|
+
|
|
41
|
+
const registeredApps = new WeakSet();
|
|
42
|
+
|
|
43
|
+
const plugin = () => ({
|
|
44
|
+
name: '@modern-js/plugin-ssr',
|
|
45
|
+
setup: () => {
|
|
46
|
+
return {
|
|
47
|
+
server: async ({
|
|
48
|
+
App,
|
|
49
|
+
context
|
|
50
|
+
}) => {
|
|
51
|
+
if (!registeredApps.has(App)) {
|
|
52
|
+
(0, _runtimeCore.registerPrefetch)(App, _context => (0, _prefetch.default)(App, _context));
|
|
53
|
+
registeredApps.add(App);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
if (!(0, _common.isBrowser)()) {
|
|
57
|
+
const html = await require("./serverRender").render(context, (context === null || context === void 0 ? void 0 : context.ssrContext.distDir) || _path.default.join(process.cwd(), 'dist'), App);
|
|
58
|
+
return html;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
return null;
|
|
62
|
+
},
|
|
63
|
+
|
|
64
|
+
init({
|
|
65
|
+
context
|
|
66
|
+
}, next) {
|
|
67
|
+
const {
|
|
68
|
+
request
|
|
69
|
+
} = context.ssrContext;
|
|
70
|
+
context.ssrContext.request = (0, _utils.formatServer)(request);
|
|
71
|
+
return next({
|
|
72
|
+
context
|
|
73
|
+
});
|
|
74
|
+
},
|
|
75
|
+
|
|
76
|
+
pickContext: ({
|
|
77
|
+
context,
|
|
78
|
+
pickedContext
|
|
79
|
+
}, next) => {
|
|
80
|
+
const {
|
|
81
|
+
request,
|
|
82
|
+
response
|
|
83
|
+
} = context === null || context === void 0 ? void 0 : context.ssrContext;
|
|
84
|
+
const {
|
|
85
|
+
initialData
|
|
86
|
+
} = context;
|
|
87
|
+
return next({
|
|
88
|
+
context,
|
|
89
|
+
pickedContext: _objectSpread(_objectSpread({}, pickedContext), {}, {
|
|
90
|
+
initialData,
|
|
91
|
+
request,
|
|
92
|
+
response
|
|
93
|
+
})
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
});
|
|
99
|
+
|
|
100
|
+
var _default = plugin;
|
|
101
|
+
/* eslint-enable @typescript-eslint/no-require-imports */
|
|
102
|
+
|
|
103
|
+
/* eslint-enable @typescript-eslint/no-var-requires */
|
|
104
|
+
|
|
105
|
+
exports.default = _default;
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
|
|
8
|
+
var _path = _interopRequireDefault(require("path"));
|
|
9
|
+
|
|
10
|
+
var _fs = _interopRequireDefault(require("fs"));
|
|
11
|
+
|
|
12
|
+
var _server = require("react-dom/server");
|
|
13
|
+
|
|
14
|
+
var _ssr = require("@modern-js/utils/ssr");
|
|
15
|
+
|
|
16
|
+
var _constants = require("@modern-js/utils/constants");
|
|
17
|
+
|
|
18
|
+
var _server2 = require("@loadable/server");
|
|
19
|
+
|
|
20
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
21
|
+
|
|
22
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
23
|
+
|
|
24
|
+
// todo: SSRContext
|
|
25
|
+
const prefetch = async (App, context) => (0, _ssr.run)(context.ssrContext.request.headers, async () => {
|
|
26
|
+
var _context$store;
|
|
27
|
+
|
|
28
|
+
const {
|
|
29
|
+
ssrContext
|
|
30
|
+
} = context;
|
|
31
|
+
|
|
32
|
+
const loadablefile = _path.default.resolve(ssrContext.distDir, _constants.LOADABLE_STATS_FILE);
|
|
33
|
+
|
|
34
|
+
if (_fs.default.existsSync(loadablefile)) {
|
|
35
|
+
const extractor = new _server2.ChunkExtractor({
|
|
36
|
+
statsFile: _path.default.resolve(ssrContext.distDir, _constants.LOADABLE_STATS_FILE),
|
|
37
|
+
entrypoints: [ssrContext.entryName].filter(Boolean)
|
|
38
|
+
});
|
|
39
|
+
(0, _server.renderToStaticMarkup)(extractor.collectChunks( /*#__PURE__*/(0, _jsxRuntime.jsx)(App, {
|
|
40
|
+
context: context
|
|
41
|
+
})));
|
|
42
|
+
} else {
|
|
43
|
+
(0, _server.renderToStaticMarkup)( /*#__PURE__*/(0, _jsxRuntime.jsx)(App, {
|
|
44
|
+
context: context
|
|
45
|
+
}));
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
if (!context.loaderManager.hasPendingLoaders()) {
|
|
49
|
+
return {
|
|
50
|
+
initialData: context.initialData,
|
|
51
|
+
i18nData: context.__i18nData__
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
const loadersData = await context.loaderManager.awaitPendingLoaders();
|
|
56
|
+
Object.keys(loadersData).forEach(id => {
|
|
57
|
+
const data = loadersData[id];
|
|
58
|
+
|
|
59
|
+
if (data._error) {
|
|
60
|
+
ssrContext.logger.error('App Prefetch Loader', data._error);
|
|
61
|
+
ssrContext.metrics.emitCounter('app.prefetch.loader.error', 1);
|
|
62
|
+
delete data._error;
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
return {
|
|
66
|
+
loadersData,
|
|
67
|
+
initialData: context.initialData,
|
|
68
|
+
i18nData: context.__i18nData__,
|
|
69
|
+
// todo: move to plugin state
|
|
70
|
+
storeState: context === null || context === void 0 ? void 0 : (_context$store = context.store) === null || _context$store === void 0 ? void 0 : _context$store.getState()
|
|
71
|
+
};
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
var _default = prefetch;
|
|
75
|
+
exports.default = _default;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
Object.defineProperty(exports, "NoSSR", {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: function () {
|
|
9
|
+
return _nossr.NoSSR;
|
|
10
|
+
}
|
|
11
|
+
});
|
|
12
|
+
Object.defineProperty(exports, "PreRender", {
|
|
13
|
+
enumerable: true,
|
|
14
|
+
get: function () {
|
|
15
|
+
return _prerender.PreRender;
|
|
16
|
+
}
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
var _prerender = require("./prerender");
|
|
20
|
+
|
|
21
|
+
var _nossr = require("./nossr");
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.NoSSR = void 0;
|
|
7
|
+
|
|
8
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
9
|
+
|
|
10
|
+
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); }
|
|
11
|
+
|
|
12
|
+
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; }
|
|
13
|
+
|
|
14
|
+
let csr = false;
|
|
15
|
+
|
|
16
|
+
const NoSSR = props => {
|
|
17
|
+
const [isMounted, setMounted] = (0, _react.useState)(csr);
|
|
18
|
+
(0, _react.useEffect)(() => {
|
|
19
|
+
csr = true;
|
|
20
|
+
setMounted(true);
|
|
21
|
+
});
|
|
22
|
+
const {
|
|
23
|
+
children
|
|
24
|
+
} = props;
|
|
25
|
+
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, isMounted ? children : null);
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
exports.NoSSR = NoSSR;
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.PreRender = void 0;
|
|
7
|
+
|
|
8
|
+
var _reactSideEffect = _interopRequireDefault(require("react-side-effect"));
|
|
9
|
+
|
|
10
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
11
|
+
|
|
12
|
+
var _util = require("./util");
|
|
13
|
+
|
|
14
|
+
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); }
|
|
15
|
+
|
|
16
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
17
|
+
|
|
18
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
19
|
+
|
|
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; }
|
|
21
|
+
|
|
22
|
+
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; }
|
|
23
|
+
|
|
24
|
+
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; }
|
|
25
|
+
|
|
26
|
+
const PROP_NAMES = {
|
|
27
|
+
INTERVAL: 'interval',
|
|
28
|
+
STALE_LIMIT: 'staleLimit',
|
|
29
|
+
LEVEL: 'level',
|
|
30
|
+
INCLUDES: 'includes',
|
|
31
|
+
EXCLUDES: 'excludes',
|
|
32
|
+
FALLBACK: 'fallback',
|
|
33
|
+
MATCHES: 'matches'
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
const handleClientStateChange = () => {// not used
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
const mapStateOnServer = reduceProps => {
|
|
40
|
+
const defaultProps = {
|
|
41
|
+
interval: 10,
|
|
42
|
+
staleLimit: false,
|
|
43
|
+
level: 0,
|
|
44
|
+
includes: null,
|
|
45
|
+
excludes: null,
|
|
46
|
+
fallback: false,
|
|
47
|
+
matches: null
|
|
48
|
+
};
|
|
49
|
+
return Object.keys(defaultProps).reduce((props, key) => {
|
|
50
|
+
const propKey = key;
|
|
51
|
+
const reduceProp = reduceProps[propKey];
|
|
52
|
+
let nextProps = props;
|
|
53
|
+
|
|
54
|
+
if ((0, _util.exist)(reduceProp)) {
|
|
55
|
+
nextProps = _objectSpread(_objectSpread({}, props), {}, {
|
|
56
|
+
[propKey]: reduceProp
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
return nextProps;
|
|
61
|
+
}, defaultProps);
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
const reducePropsToState = propsList => {
|
|
65
|
+
const reduceProps = {
|
|
66
|
+
interval: (0, _util.getOutermostProperty)(propsList, PROP_NAMES.INTERVAL),
|
|
67
|
+
staleLimit: (0, _util.getOutermostProperty)(propsList, PROP_NAMES.STALE_LIMIT),
|
|
68
|
+
level: (0, _util.getOutermostProperty)(propsList, PROP_NAMES.LEVEL),
|
|
69
|
+
includes: (0, _util.aggKeysFromPropsList)(propsList, PROP_NAMES.INCLUDES),
|
|
70
|
+
excludes: (0, _util.aggKeysFromPropsList)(propsList, PROP_NAMES.EXCLUDES),
|
|
71
|
+
fallback: (0, _util.getOutermostProperty)(propsList, PROP_NAMES.FALLBACK),
|
|
72
|
+
matches: (0, _util.aggMatchesFromPropsList)(propsList, PROP_NAMES.MATCHES)
|
|
73
|
+
};
|
|
74
|
+
return reduceProps;
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
function factory(Component) {
|
|
78
|
+
class Spr extends _react.default.Component {
|
|
79
|
+
static set canUseDOM(canUseDOM) {
|
|
80
|
+
Component.canUseDOM = canUseDOM;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
static get canUseDOM() {
|
|
84
|
+
return Component.canUseDOM;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
verify() {
|
|
88
|
+
return true;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
render() {
|
|
92
|
+
const newProps = _objectSpread({}, this.props);
|
|
93
|
+
|
|
94
|
+
const validate = this.verify();
|
|
95
|
+
|
|
96
|
+
if (!validate) {
|
|
97
|
+
throw new Error('invalid props, check usage');
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
return /*#__PURE__*/(0, _react.createElement)(Component, _objectSpread({}, newProps));
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
_defineProperty(Spr, "peek", Component.peek);
|
|
106
|
+
|
|
107
|
+
_defineProperty(Spr, "rewind", Component.rewind);
|
|
108
|
+
|
|
109
|
+
_defineProperty(Spr, "config", () => {
|
|
110
|
+
const mappedState = Component.rewind();
|
|
111
|
+
return mappedState;
|
|
112
|
+
});
|
|
113
|
+
|
|
114
|
+
return Spr;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
const NullComponent = () => null;
|
|
118
|
+
|
|
119
|
+
const SprSideEffects = (0, _reactSideEffect.default)(reducePropsToState, handleClientStateChange, mapStateOnServer)(NullComponent);
|
|
120
|
+
const PreRender = factory(SprSideEffects);
|
|
121
|
+
exports.PreRender = PreRender;
|
|
File without changes
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.aggMatchesFromPropsList = exports.aggKeysFromPropsList = void 0;
|
|
7
|
+
exports.exist = exist;
|
|
8
|
+
exports.getOutermostProperty = exports.getInnermostProperty = void 0;
|
|
9
|
+
const REQUEST_META = ['header', 'query'];
|
|
10
|
+
|
|
11
|
+
const getInnermostProperty = function getInnermostProperty(propsList, propName) {
|
|
12
|
+
for (let i = propsList.length - 1; i >= 0; i--) {
|
|
13
|
+
const props = propsList[i];
|
|
14
|
+
|
|
15
|
+
if (props.hasOwnProperty(propName)) {
|
|
16
|
+
return props[propName];
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
return null;
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
exports.getInnermostProperty = getInnermostProperty;
|
|
24
|
+
|
|
25
|
+
const getOutermostProperty = function getOutermostProperty(propsList, propName) {
|
|
26
|
+
for (const props of propsList) {
|
|
27
|
+
if (props.hasOwnProperty(propName)) {
|
|
28
|
+
return props[propName];
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
return null;
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
exports.getOutermostProperty = getOutermostProperty;
|
|
36
|
+
|
|
37
|
+
const aggKeysFromPropsList = function aggKeysFromPropsList(propsList, propName) {
|
|
38
|
+
const initResult = REQUEST_META.reduce((result, next) => {
|
|
39
|
+
const key = next;
|
|
40
|
+
result[key] = [];
|
|
41
|
+
return result;
|
|
42
|
+
}, {});
|
|
43
|
+
const res = propsList.filter(props => usefulObject(props[propName])).reduce((result, next) => {
|
|
44
|
+
REQUEST_META.forEach(key => {
|
|
45
|
+
const prop = next[propName];
|
|
46
|
+
|
|
47
|
+
if (prop !== null && prop !== void 0 && prop.hasOwnProperty(key) && usefulArray(prop[key])) {
|
|
48
|
+
result[key] = unique(result[key].concat(prop[key]));
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
return result;
|
|
52
|
+
}, initResult);
|
|
53
|
+
return REQUEST_META.reduce((result, next) => {
|
|
54
|
+
var _result$key;
|
|
55
|
+
|
|
56
|
+
const key = next;
|
|
57
|
+
|
|
58
|
+
if (result[key] && ((_result$key = result[key]) === null || _result$key === void 0 ? void 0 : _result$key.length) === 0) {
|
|
59
|
+
delete result[key];
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
return result;
|
|
63
|
+
}, res);
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
exports.aggKeysFromPropsList = aggKeysFromPropsList;
|
|
67
|
+
|
|
68
|
+
const aggMatchesFromPropsList = function aggMatchesFromPropsList(propsList, propName) {
|
|
69
|
+
const initResult = REQUEST_META.reduce((result, next) => {
|
|
70
|
+
const key = next;
|
|
71
|
+
result[key] = {};
|
|
72
|
+
return result;
|
|
73
|
+
}, {});
|
|
74
|
+
const res = propsList.filter(props => usefulObject(props[propName])).reduce((result, next) => {
|
|
75
|
+
REQUEST_META.forEach(key => {
|
|
76
|
+
const prop = next[propName]; // 这边目前是浅拷贝,越后渲染优先级越高
|
|
77
|
+
|
|
78
|
+
if (prop !== null && prop !== void 0 && prop.hasOwnProperty(key) && usefulObject(prop[key])) {
|
|
79
|
+
result[key] = Object.assign(result[key], prop[key]);
|
|
80
|
+
}
|
|
81
|
+
});
|
|
82
|
+
return result;
|
|
83
|
+
}, initResult);
|
|
84
|
+
return REQUEST_META.reduce((result, next) => {
|
|
85
|
+
const key = next;
|
|
86
|
+
|
|
87
|
+
if (result[key] && Object.keys(result[key]).length === 0) {
|
|
88
|
+
delete result[key];
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
return result;
|
|
92
|
+
}, res);
|
|
93
|
+
};
|
|
94
|
+
|
|
95
|
+
exports.aggMatchesFromPropsList = aggMatchesFromPropsList;
|
|
96
|
+
|
|
97
|
+
function unique(arr) {
|
|
98
|
+
return Array.from(new Set(arr));
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
function usefulObject(target) {
|
|
102
|
+
if (!exist(target)) {
|
|
103
|
+
return false;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
return target.constructor === Object && Object.keys(target).length > 0;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
function usefulArray(target) {
|
|
110
|
+
if (!exist(target)) {
|
|
111
|
+
return false;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
return Array.isArray(target) && target.length > 0;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
function exist(target) {
|
|
118
|
+
return target != null;
|
|
119
|
+
}
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
|
|
8
|
+
var _path = _interopRequireDefault(require("path"));
|
|
9
|
+
|
|
10
|
+
var _constants = require("@modern-js/utils/constants");
|
|
11
|
+
|
|
12
|
+
var _react = _interopRequireDefault(require("react"));
|
|
13
|
+
|
|
14
|
+
var _server = _interopRequireDefault(require("react-dom/server"));
|
|
15
|
+
|
|
16
|
+
var _serializeJavascript = _interopRequireDefault(require("serialize-javascript"));
|
|
17
|
+
|
|
18
|
+
var _reactHelmet = _interopRequireDefault(require("react-helmet"));
|
|
19
|
+
|
|
20
|
+
var _template = require("./template");
|
|
21
|
+
|
|
22
|
+
var _type = require("./type");
|
|
23
|
+
|
|
24
|
+
var _helmet = _interopRequireDefault(require("./helmet"));
|
|
25
|
+
|
|
26
|
+
var _reduce = require("./reduce");
|
|
27
|
+
|
|
28
|
+
var loadableRenderer = _interopRequireWildcard(require("./loadable"));
|
|
29
|
+
|
|
30
|
+
var styledComponentRenderer = _interopRequireWildcard(require("./styledComponent"));
|
|
31
|
+
|
|
32
|
+
var _measure = require("./measure");
|
|
33
|
+
|
|
34
|
+
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); }
|
|
35
|
+
|
|
36
|
+
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; }
|
|
37
|
+
|
|
38
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
39
|
+
|
|
40
|
+
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; }
|
|
41
|
+
|
|
42
|
+
const buildTemplateData = (context, data, renderLevel) => {
|
|
43
|
+
const {
|
|
44
|
+
request
|
|
45
|
+
} = context;
|
|
46
|
+
return {
|
|
47
|
+
data,
|
|
48
|
+
context: {
|
|
49
|
+
request: {
|
|
50
|
+
params: request.params,
|
|
51
|
+
query: request.query,
|
|
52
|
+
pathname: request.pathname,
|
|
53
|
+
host: request.host,
|
|
54
|
+
url: request.url,
|
|
55
|
+
headers: request.headers,
|
|
56
|
+
cookieMap: request.cookieMap
|
|
57
|
+
}
|
|
58
|
+
},
|
|
59
|
+
renderLevel
|
|
60
|
+
};
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
class Entry {
|
|
64
|
+
constructor(options) {
|
|
65
|
+
_defineProperty(this, "entryName", void 0);
|
|
66
|
+
|
|
67
|
+
_defineProperty(this, "result", void 0);
|
|
68
|
+
|
|
69
|
+
_defineProperty(this, "metrics", void 0);
|
|
70
|
+
|
|
71
|
+
_defineProperty(this, "logger", void 0);
|
|
72
|
+
|
|
73
|
+
_defineProperty(this, "App", void 0);
|
|
74
|
+
|
|
75
|
+
_defineProperty(this, "fragments", void 0);
|
|
76
|
+
|
|
77
|
+
const {
|
|
78
|
+
ctx
|
|
79
|
+
} = options;
|
|
80
|
+
const {
|
|
81
|
+
entryName,
|
|
82
|
+
template: templateHTML
|
|
83
|
+
} = ctx;
|
|
84
|
+
this.fragments = (0, _template.toFragments)(templateHTML);
|
|
85
|
+
this.entryName = entryName;
|
|
86
|
+
this.App = options.App;
|
|
87
|
+
this.metrics = ctx.metrics;
|
|
88
|
+
this.logger = ctx.logger;
|
|
89
|
+
this.result = {
|
|
90
|
+
renderLevel: _type.RenderLevel.CLIENT_RENDER,
|
|
91
|
+
html: '',
|
|
92
|
+
chunksMap: {
|
|
93
|
+
js: '',
|
|
94
|
+
css: ''
|
|
95
|
+
}
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
async renderToHtml(context) {
|
|
100
|
+
const {
|
|
101
|
+
ssrContext
|
|
102
|
+
} = context;
|
|
103
|
+
|
|
104
|
+
if (ssrContext.redirection.url) {
|
|
105
|
+
return '';
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
const prefetchData = await this.prefetch(context);
|
|
109
|
+
|
|
110
|
+
if (ssrContext.redirection.url) {
|
|
111
|
+
return '';
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
if (this.result.renderLevel >= _type.RenderLevel.SERVER_PREFETCH) {
|
|
115
|
+
this.result.html = this.renderToString(context);
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
if (ssrContext.redirection.url) {
|
|
119
|
+
return '';
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
let html = '';
|
|
123
|
+
const templateData = buildTemplateData(ssrContext, prefetchData, this.result.renderLevel);
|
|
124
|
+
const SSRData = this.getSSRDataScript(templateData);
|
|
125
|
+
|
|
126
|
+
for (const fragment of this.fragments) {
|
|
127
|
+
if (fragment.isVariable && fragment.content === 'SSRDataScript') {
|
|
128
|
+
html += fragment.getValue(SSRData);
|
|
129
|
+
} else {
|
|
130
|
+
html += fragment.getValue(this.result);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
const helmetData = _reactHelmet.default.renderStatic();
|
|
135
|
+
|
|
136
|
+
return helmetData ? (0, _helmet.default)(html, helmetData) : html;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
async prefetch(context) {
|
|
140
|
+
const {
|
|
141
|
+
App: {
|
|
142
|
+
prefetch
|
|
143
|
+
}
|
|
144
|
+
} = this;
|
|
145
|
+
let prefetchData;
|
|
146
|
+
const end = (0, _measure.time)();
|
|
147
|
+
|
|
148
|
+
try {
|
|
149
|
+
prefetchData = prefetch ? await prefetch(context) : null;
|
|
150
|
+
this.result.renderLevel = _type.RenderLevel.SERVER_PREFETCH;
|
|
151
|
+
const prefetchCost = end();
|
|
152
|
+
this.logger.debug(`App Prefetch cost = %d ms`, prefetchCost);
|
|
153
|
+
this.metrics.emitTimer('app.prefetch.cost', prefetchCost);
|
|
154
|
+
} catch (e) {
|
|
155
|
+
this.result.renderLevel = _type.RenderLevel.CLIENT_RENDER;
|
|
156
|
+
this.logger.error('App Prefetch Render', e);
|
|
157
|
+
this.metrics.emitCounter('app.prefetch.render.error', 1);
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
return prefetchData || {};
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
renderToString(context) {
|
|
164
|
+
let html = '';
|
|
165
|
+
const end = (0, _measure.time)();
|
|
166
|
+
const {
|
|
167
|
+
ssrContext
|
|
168
|
+
} = context;
|
|
169
|
+
|
|
170
|
+
try {
|
|
171
|
+
const App = /*#__PURE__*/_react.default.createElement(this.App, {
|
|
172
|
+
context: Object.assign(context, {
|
|
173
|
+
ssr: true
|
|
174
|
+
})
|
|
175
|
+
}); // Todo render Hook
|
|
176
|
+
|
|
177
|
+
|
|
178
|
+
const renderContext = {
|
|
179
|
+
loadableManifest: _path.default.resolve(ssrContext.distDir, _constants.LOADABLE_STATS_FILE),
|
|
180
|
+
result: this.result,
|
|
181
|
+
entryName: this.entryName
|
|
182
|
+
};
|
|
183
|
+
html = (0, _reduce.reduce)(App, renderContext, [styledComponentRenderer.toHtml, loadableRenderer.toHtml, jsx => _server.default.renderToString(jsx)]);
|
|
184
|
+
const cost = end();
|
|
185
|
+
this.logger.debug('App Render To HTML cost = %d ms', cost);
|
|
186
|
+
this.metrics.emitTimer('app.render.html.cost', cost);
|
|
187
|
+
this.result.renderLevel = _type.RenderLevel.SERVER_RENDER;
|
|
188
|
+
} catch (e) {
|
|
189
|
+
this.logger.error('App Render To HTML', e);
|
|
190
|
+
this.metrics.emitCounter('app.render.html.error', 1);
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
return html;
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
getSSRDataScript(templateData) {
|
|
197
|
+
return {
|
|
198
|
+
SSRDataScript: `
|
|
199
|
+
<script>window._SSR_DATA = ${(0, _serializeJavascript.default)(templateData, {
|
|
200
|
+
isJSON: true
|
|
201
|
+
})}</script>
|
|
202
|
+
`
|
|
203
|
+
};
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
exports.default = Entry;
|