@modern-js/runtime 1.21.2 → 2.0.0-beta.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 +52 -0
- package/dist/js/modern/cli/index.js +1 -1
- package/dist/js/modern/core/index.js +1 -1
- package/dist/js/modern/index.js +1 -0
- package/dist/js/modern/router/cli/index.js +24 -8
- package/dist/js/modern/router/runtime/index.js +1 -1
- package/dist/js/modern/router/runtime/plugin.js +26 -44
- package/dist/js/modern/router/runtime/plugin.node.js +143 -0
- package/dist/js/modern/router/runtime/types.js +1 -0
- package/dist/js/modern/router/runtime/utils.js +97 -37
- package/dist/js/modern/router/runtime/withRouter.js +22 -0
- package/dist/js/modern/runtime-context.js +2 -1
- package/dist/js/modern/ssr/cli/index.js +44 -5
- package/dist/js/modern/ssr/index.js +67 -43
- package/dist/js/modern/ssr/index.node.js +6 -2
- package/dist/js/modern/ssr/serverRender/index.js +12 -26
- package/dist/js/modern/ssr/serverRender/renderToStream/buildTemplate.after.js +38 -0
- package/dist/js/modern/ssr/serverRender/renderToStream/buildTemplate.share.js +5 -0
- package/dist/js/modern/ssr/serverRender/renderToStream/bulidTemplate.before.js +24 -0
- package/dist/js/modern/ssr/serverRender/renderToStream/index.js +73 -0
- package/dist/js/modern/ssr/serverRender/renderToStream/loadable.js +26 -0
- package/dist/js/modern/ssr/serverRender/renderToStream/renderToPipe.js +61 -0
- package/dist/js/modern/ssr/serverRender/renderToStream/styledComponent.js +11 -0
- package/dist/js/modern/ssr/serverRender/renderToStream/template.js +22 -0
- package/dist/js/modern/ssr/serverRender/renderToStream/type.js +0 -0
- package/dist/js/modern/ssr/serverRender/{entry.js → renderToString/entry.js} +4 -6
- package/dist/js/modern/ssr/serverRender/renderToString/index.js +31 -0
- package/dist/js/modern/ssr/serverRender/{loadable.js → renderToString/loadable.js} +5 -13
- package/dist/js/modern/ssr/serverRender/{reduce.js → renderToString/reduce.js} +0 -0
- package/dist/js/modern/ssr/serverRender/{styledComponent.js → renderToString/styledComponent.js} +0 -0
- package/dist/js/modern/ssr/serverRender/{template.js → renderToString/template.js} +0 -0
- package/dist/js/modern/ssr/serverRender/{type.js → renderToString/type.js} +0 -1
- package/dist/js/modern/ssr/serverRender/types.js +2 -0
- package/dist/js/modern/ssr/serverRender/utils.js +24 -0
- package/dist/js/modern/ssr/utils.js +9 -3
- package/dist/js/node/cli/index.js +1 -1
- package/dist/js/node/core/index.js +8 -1
- package/dist/js/node/index.js +8 -0
- package/dist/js/node/router/cli/index.js +24 -8
- package/dist/js/node/router/runtime/index.js +4 -4
- package/dist/js/node/router/runtime/plugin.js +24 -49
- package/dist/js/node/router/runtime/plugin.node.js +169 -0
- package/dist/js/node/router/runtime/types.js +5 -0
- package/dist/js/node/router/runtime/utils.js +97 -35
- package/dist/js/node/router/runtime/withRouter.js +35 -0
- package/dist/js/node/runtime-context.js +4 -2
- package/dist/js/node/ssr/cli/index.js +43 -5
- package/dist/js/node/ssr/index.js +66 -43
- package/dist/js/node/ssr/index.node.js +7 -3
- package/dist/js/node/ssr/serverRender/index.js +13 -35
- package/dist/js/node/ssr/serverRender/renderToStream/buildTemplate.after.js +49 -0
- package/dist/js/node/ssr/serverRender/renderToStream/buildTemplate.share.js +14 -0
- package/dist/js/node/ssr/serverRender/renderToStream/bulidTemplate.before.js +37 -0
- package/dist/js/node/ssr/serverRender/renderToStream/index.js +90 -0
- package/dist/js/node/ssr/serverRender/renderToStream/loadable.js +34 -0
- package/dist/js/node/ssr/serverRender/renderToStream/renderToPipe.js +70 -0
- package/dist/js/node/ssr/serverRender/renderToStream/styledComponent.js +19 -0
- package/dist/js/node/ssr/serverRender/renderToStream/template.js +32 -0
- package/dist/js/node/ssr/serverRender/renderToStream/type.js +0 -0
- package/dist/js/node/ssr/serverRender/{entry.js → renderToString/entry.js} +13 -15
- package/dist/js/node/ssr/serverRender/renderToString/index.js +47 -0
- package/dist/js/node/ssr/serverRender/{loadable.js → renderToString/loadable.js} +7 -14
- package/dist/js/node/ssr/serverRender/{reduce.js → renderToString/reduce.js} +0 -0
- package/dist/js/node/ssr/serverRender/{styledComponent.js → renderToString/styledComponent.js} +0 -0
- package/dist/js/node/ssr/serverRender/{template.js → renderToString/template.js} +0 -0
- package/dist/js/node/ssr/serverRender/{type.js → renderToString/type.js} +0 -1
- package/dist/js/node/ssr/serverRender/types.js +13 -0
- package/dist/js/node/ssr/serverRender/utils.js +34 -0
- package/dist/js/node/ssr/utils.js +13 -4
- package/dist/js/treeshaking/cli/index.js +1 -1
- package/dist/js/treeshaking/core/index.js +1 -1
- package/dist/js/treeshaking/index.js +1 -0
- package/dist/js/treeshaking/router/cli/index.js +24 -8
- package/dist/js/treeshaking/router/runtime/index.js +1 -1
- package/dist/js/treeshaking/router/runtime/plugin.js +25 -43
- package/dist/js/treeshaking/router/runtime/plugin.node.js +174 -0
- package/dist/js/treeshaking/router/runtime/types.js +1 -0
- package/dist/js/treeshaking/router/runtime/utils.js +100 -36
- package/dist/js/treeshaking/router/runtime/withRouter.js +17 -0
- package/dist/js/treeshaking/runtime-context.js +2 -1
- package/dist/js/treeshaking/ssr/cli/index.js +47 -5
- package/dist/js/treeshaking/ssr/index.js +74 -45
- package/dist/js/treeshaking/ssr/index.node.js +6 -2
- package/dist/js/treeshaking/ssr/serverRender/index.js +41 -55
- package/dist/js/treeshaking/ssr/serverRender/renderToStream/buildTemplate.after.js +33 -0
- package/dist/js/treeshaking/ssr/serverRender/renderToStream/buildTemplate.share.js +7 -0
- package/dist/js/treeshaking/ssr/serverRender/renderToStream/bulidTemplate.before.js +29 -0
- package/dist/js/treeshaking/ssr/serverRender/renderToStream/index.js +120 -0
- package/dist/js/treeshaking/ssr/serverRender/renderToStream/loadable.js +24 -0
- package/dist/js/treeshaking/ssr/serverRender/renderToStream/renderToPipe.js +57 -0
- package/dist/js/treeshaking/ssr/serverRender/renderToStream/styledComponent.js +10 -0
- package/dist/js/treeshaking/ssr/serverRender/renderToStream/template.js +29 -0
- package/dist/js/treeshaking/ssr/serverRender/renderToStream/type.js +0 -0
- package/dist/js/treeshaking/ssr/serverRender/{entry.js → renderToString/entry.js} +3 -3
- package/dist/js/treeshaking/ssr/serverRender/renderToString/index.js +48 -0
- package/dist/js/treeshaking/ssr/serverRender/{loadable.js → renderToString/loadable.js} +5 -17
- package/dist/js/treeshaking/ssr/serverRender/{reduce.js → renderToString/reduce.js} +0 -0
- package/dist/js/treeshaking/ssr/serverRender/{styledComponent.js → renderToString/styledComponent.js} +0 -0
- package/dist/js/treeshaking/ssr/serverRender/{template.js → renderToString/template.js} +0 -0
- package/dist/js/treeshaking/ssr/serverRender/{type.js → renderToString/type.js} +0 -1
- package/dist/js/treeshaking/ssr/serverRender/types.js +2 -0
- package/dist/js/treeshaking/ssr/serverRender/{measure.js → utils.js} +16 -0
- package/dist/js/treeshaking/ssr/utils.js +15 -3
- package/dist/types/common.d.ts +0 -2
- package/dist/types/core/index.d.ts +1 -1
- package/dist/types/core/plugin.d.ts +1 -1
- package/dist/types/exports/server.d.ts +21 -1
- package/dist/types/index.d.ts +1 -0
- package/dist/types/router/runtime/DefaultNotFound.d.ts +1 -0
- package/dist/types/router/runtime/index.d.ts +3 -3
- package/dist/types/router/runtime/plugin.d.ts +2 -45
- package/dist/types/router/runtime/plugin.node.d.ts +8 -0
- package/dist/types/router/runtime/types.d.ts +38 -0
- package/dist/types/router/runtime/utils.d.ts +5 -2
- package/dist/types/router/runtime/withRouter.d.ts +8 -0
- package/dist/types/runtime-context.d.ts +2 -1
- package/dist/types/ssr/index.d.ts +2 -2
- package/dist/types/ssr/index.node.d.ts +1 -1
- package/dist/types/ssr/react/nossr/index.d.ts +3 -1
- package/dist/types/ssr/serverRender/index.d.ts +2 -3
- package/dist/types/ssr/serverRender/renderToStream/buildTemplate.after.d.ts +6 -0
- package/dist/types/ssr/serverRender/renderToStream/buildTemplate.share.d.ts +3 -0
- package/dist/types/ssr/serverRender/renderToStream/bulidTemplate.before.d.ts +1 -0
- package/dist/types/ssr/serverRender/renderToStream/index.d.ts +6 -0
- package/dist/types/ssr/serverRender/renderToStream/loadable.d.ts +16 -0
- package/dist/types/ssr/serverRender/renderToStream/renderToPipe.d.ts +8 -0
- package/dist/types/ssr/serverRender/renderToStream/styledComponent.d.ts +12 -0
- package/dist/types/ssr/serverRender/renderToStream/template.d.ts +3 -0
- package/dist/types/ssr/serverRender/renderToStream/type.d.ts +4 -0
- package/dist/types/ssr/serverRender/{entry.d.ts → renderToString/entry.d.ts} +2 -2
- package/dist/types/ssr/serverRender/renderToString/index.d.ts +6 -0
- package/dist/types/ssr/serverRender/{loadable.d.ts → renderToString/loadable.d.ts} +0 -0
- package/dist/types/ssr/serverRender/{reduce.d.ts → renderToString/reduce.d.ts} +0 -0
- package/dist/types/ssr/serverRender/{styledComponent.d.ts → renderToString/styledComponent.d.ts} +0 -0
- package/dist/types/ssr/serverRender/{template.d.ts → renderToString/template.d.ts} +0 -0
- package/dist/types/ssr/serverRender/{type.d.ts → renderToString/type.d.ts} +1 -8
- package/dist/types/ssr/serverRender/types.d.ts +18 -0
- package/dist/types/ssr/serverRender/utils.d.ts +3 -0
- package/dist/types/ssr/utils.d.ts +4 -2
- package/dist/types/state/runtime/plugin.d.ts +1 -1
- package/package.json +57 -73
- package/types/index.d.ts +13 -0
- package/types/router.d.ts +14 -0
- package/dist/js/modern/ssr/serverRender/measure.js +0 -11
- package/dist/js/node/ssr/serverRender/measure.js +0 -20
- package/dist/types/ssr/serverRender/measure.d.ts +0 -1
- package/lib/types.d.ts +0 -10
- package/type.d.ts +0 -5
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.render = void 0;
|
|
7
|
+
|
|
8
|
+
var _react = require("react");
|
|
9
|
+
|
|
10
|
+
var _ssr = require("@modern-js/utils/ssr");
|
|
11
|
+
|
|
12
|
+
var _prerender = require("../../react/prerender");
|
|
13
|
+
|
|
14
|
+
var _utils = require("../utils");
|
|
15
|
+
|
|
16
|
+
var _template = require("./template");
|
|
17
|
+
|
|
18
|
+
var _renderToPipe = _interopRequireDefault(require("./renderToPipe"));
|
|
19
|
+
|
|
20
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
21
|
+
|
|
22
|
+
const render = ({
|
|
23
|
+
App,
|
|
24
|
+
context
|
|
25
|
+
}) => {
|
|
26
|
+
const {
|
|
27
|
+
ssrContext
|
|
28
|
+
} = context;
|
|
29
|
+
|
|
30
|
+
if (!ssrContext) {
|
|
31
|
+
throw new Error('The "ssrContext" must not be undefined, but received undefined');
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
return (0, _ssr.run)(ssrContext.request.headers, async () => {
|
|
35
|
+
const end_all = (0, _utils.time)();
|
|
36
|
+
const rootElement = /*#__PURE__*/(0, _react.createElement)(App, {
|
|
37
|
+
context: Object.assign(context || {}, {
|
|
38
|
+
ssr: true
|
|
39
|
+
})
|
|
40
|
+
});
|
|
41
|
+
const getTemplates = (0, _template.createTemplates)(context);
|
|
42
|
+
const end = (0, _utils.time)();
|
|
43
|
+
const pipe = (0, _renderToPipe.default)(rootElement, getTemplates, {
|
|
44
|
+
onShellReady() {
|
|
45
|
+
// set cacheConfig
|
|
46
|
+
const cacheConfig = _prerender.PreRender.config();
|
|
47
|
+
|
|
48
|
+
if (cacheConfig) {
|
|
49
|
+
context.ssrContext.cacheConfig = cacheConfig;
|
|
50
|
+
}
|
|
51
|
+
},
|
|
52
|
+
|
|
53
|
+
onAllReady() {
|
|
54
|
+
// computed render html cost
|
|
55
|
+
const cost = end();
|
|
56
|
+
ssrContext.logger.debug('App Render To HTML cost = %d ms', cost);
|
|
57
|
+
ssrContext.metrics.emitTimer('app.render.html.cost', cost); // computed all ssr const
|
|
58
|
+
|
|
59
|
+
const cost_all = end_all();
|
|
60
|
+
ssrContext.logger.info('App Render Total cost = %d ms', cost_all);
|
|
61
|
+
ssrContext.metrics.emitTimer('app.render.cost', cost_all);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
});
|
|
65
|
+
return pipe;
|
|
66
|
+
}); // eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
67
|
+
|
|
68
|
+
async function prefetch(App, context) {
|
|
69
|
+
const {
|
|
70
|
+
prefetch
|
|
71
|
+
} = App;
|
|
72
|
+
const ssrContext = context.ssrContext;
|
|
73
|
+
let prefetchData;
|
|
74
|
+
const end = (0, _utils.time)();
|
|
75
|
+
|
|
76
|
+
try {
|
|
77
|
+
prefetchData = prefetch ? await prefetch(context) : null;
|
|
78
|
+
const prefetchCost = end();
|
|
79
|
+
ssrContext.logger.debug(`App Prefetch cost = %d ms`, prefetchCost);
|
|
80
|
+
ssrContext.metrics.emitTimer('app.prefetch.cost', prefetchCost);
|
|
81
|
+
} catch (e) {
|
|
82
|
+
ssrContext.logger.error('App Prefetch Render', e);
|
|
83
|
+
ssrContext.metrics.emitCounter('app.prefetch.render.error', 1);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
return prefetchData || {};
|
|
87
|
+
}
|
|
88
|
+
};
|
|
89
|
+
|
|
90
|
+
exports.render = render;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.getLoadableChunks = getLoadableChunks;
|
|
7
|
+
|
|
8
|
+
var _server = require("@loadable/server");
|
|
9
|
+
|
|
10
|
+
function getLoadableChunks({
|
|
11
|
+
context,
|
|
12
|
+
jsx
|
|
13
|
+
}) {
|
|
14
|
+
const {
|
|
15
|
+
loadableStats,
|
|
16
|
+
entryName
|
|
17
|
+
} = context.ssrContext;
|
|
18
|
+
|
|
19
|
+
if (!loadableStats) {
|
|
20
|
+
return {
|
|
21
|
+
jsx
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
const extractor = new _server.ChunkExtractor({
|
|
26
|
+
stats: loadableStats,
|
|
27
|
+
entrypoints: [entryName]
|
|
28
|
+
});
|
|
29
|
+
const collectedJsx = extractor.collectChunks(jsx);
|
|
30
|
+
return {
|
|
31
|
+
jsx: collectedJsx,
|
|
32
|
+
chunkExtractor: extractor
|
|
33
|
+
};
|
|
34
|
+
}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
|
|
8
|
+
var _stream = require("stream");
|
|
9
|
+
|
|
10
|
+
var _server = require("react-dom/server");
|
|
11
|
+
|
|
12
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
13
|
+
|
|
14
|
+
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; }
|
|
15
|
+
|
|
16
|
+
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; }
|
|
17
|
+
|
|
18
|
+
function renderToPipe(rootElement, getTemplates, options) {
|
|
19
|
+
let isShellStream = true;
|
|
20
|
+
|
|
21
|
+
const forUserPipe = stream => {
|
|
22
|
+
return new Promise(resolve => {
|
|
23
|
+
const {
|
|
24
|
+
pipe
|
|
25
|
+
} = (0, _server.renderToPipeableStream)(rootElement, _objectSpread(_objectSpread({}, options), {}, {
|
|
26
|
+
onShellReady() {
|
|
27
|
+
var _options$onShellReady;
|
|
28
|
+
|
|
29
|
+
options === null || options === void 0 ? void 0 : (_options$onShellReady = options.onShellReady) === null || _options$onShellReady === void 0 ? void 0 : _options$onShellReady.call(options);
|
|
30
|
+
const {
|
|
31
|
+
shellAfter,
|
|
32
|
+
shellBefore
|
|
33
|
+
} = getTemplates();
|
|
34
|
+
const injectableTransform = new _stream.Transform({
|
|
35
|
+
transform(chunk, _encoding, callback) {
|
|
36
|
+
try {
|
|
37
|
+
if (isShellStream) {
|
|
38
|
+
this.push(joinChunk(shellBefore, chunk, shellAfter));
|
|
39
|
+
isShellStream = false;
|
|
40
|
+
} else {
|
|
41
|
+
this.push(chunk);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
callback();
|
|
45
|
+
} catch (e) {
|
|
46
|
+
if (e instanceof Error) {
|
|
47
|
+
callback(e);
|
|
48
|
+
} else {
|
|
49
|
+
callback(new Error('Received unkown error when streaming'));
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
});
|
|
55
|
+
resolve(pipe(injectableTransform).pipe(stream));
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
}));
|
|
59
|
+
});
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
return forUserPipe;
|
|
63
|
+
|
|
64
|
+
function joinChunk(before = '', chunk, after = '') {
|
|
65
|
+
return `${before}${chunk.toString()}${after}`;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
var _default = renderToPipe;
|
|
70
|
+
exports.default = _default;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.getStyledComponentCss = getStyledComponentCss;
|
|
7
|
+
|
|
8
|
+
var _styledComponents = require("styled-components");
|
|
9
|
+
|
|
10
|
+
function getStyledComponentCss({
|
|
11
|
+
jsx
|
|
12
|
+
}) {
|
|
13
|
+
const sheet = new _styledComponents.ServerStyleSheet();
|
|
14
|
+
const collectedJsx = sheet.collectStyles(jsx);
|
|
15
|
+
return {
|
|
16
|
+
styleSheet: sheet,
|
|
17
|
+
jsx: collectedJsx
|
|
18
|
+
};
|
|
19
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.createTemplates = createTemplates;
|
|
7
|
+
|
|
8
|
+
var _buildTemplate = require("./buildTemplate.after");
|
|
9
|
+
|
|
10
|
+
var _bulidTemplate = require("./bulidTemplate.before");
|
|
11
|
+
|
|
12
|
+
const HTML_SEPARATOR = '<!--<?- html ?>-->';
|
|
13
|
+
|
|
14
|
+
function createTemplates(context) {
|
|
15
|
+
const getTemplates = () => {
|
|
16
|
+
const {
|
|
17
|
+
template
|
|
18
|
+
} = context.ssrContext;
|
|
19
|
+
const [beforeAppTemplate = '', afterAppHtmlTemplate = ''] = template.split(HTML_SEPARATOR) || []; // templates injected some variables
|
|
20
|
+
|
|
21
|
+
const builtBeforeTemplate = (0, _bulidTemplate.buildShellBeforeTemplate)(beforeAppTemplate);
|
|
22
|
+
const builtAfterTemplate = (0, _buildTemplate.buildShellAfterTemplate)(afterAppHtmlTemplate, {
|
|
23
|
+
context
|
|
24
|
+
});
|
|
25
|
+
return {
|
|
26
|
+
shellBefore: builtBeforeTemplate,
|
|
27
|
+
shellAfter: builtAfterTemplate
|
|
28
|
+
};
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
return getTemplates;
|
|
32
|
+
}
|
|
File without changes
|
|
@@ -13,11 +13,13 @@ var _serializeJavascript = _interopRequireDefault(require("serialize-javascript"
|
|
|
13
13
|
|
|
14
14
|
var _reactHelmet = _interopRequireDefault(require("react-helmet"));
|
|
15
15
|
|
|
16
|
-
var
|
|
16
|
+
var _helmet = _interopRequireDefault(require("../helmet"));
|
|
17
|
+
|
|
18
|
+
var _types = require("../types");
|
|
17
19
|
|
|
18
|
-
var
|
|
20
|
+
var _utils = require("../utils");
|
|
19
21
|
|
|
20
|
-
var
|
|
22
|
+
var _template = require("./template");
|
|
21
23
|
|
|
22
24
|
var _reduce = require("./reduce");
|
|
23
25
|
|
|
@@ -25,8 +27,6 @@ var loadableRenderer = _interopRequireWildcard(require("./loadable"));
|
|
|
25
27
|
|
|
26
28
|
var styledComponentRenderer = _interopRequireWildcard(require("./styledComponent"));
|
|
27
29
|
|
|
28
|
-
var _measure = require("./measure");
|
|
29
|
-
|
|
30
30
|
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); }
|
|
31
31
|
|
|
32
32
|
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; }
|
|
@@ -93,7 +93,7 @@ class Entry {
|
|
|
93
93
|
this.metrics = ctx.metrics;
|
|
94
94
|
this.logger = ctx.logger;
|
|
95
95
|
this.result = {
|
|
96
|
-
renderLevel:
|
|
96
|
+
renderLevel: _types.RenderLevel.CLIENT_RENDER,
|
|
97
97
|
html: '',
|
|
98
98
|
chunksMap: {
|
|
99
99
|
js: '',
|
|
@@ -103,9 +103,7 @@ class Entry {
|
|
|
103
103
|
}
|
|
104
104
|
|
|
105
105
|
async renderToHtml(context) {
|
|
106
|
-
const
|
|
107
|
-
ssrContext
|
|
108
|
-
} = context;
|
|
106
|
+
const ssrContext = context.ssrContext;
|
|
109
107
|
|
|
110
108
|
if (ssrContext.redirection.url) {
|
|
111
109
|
return '';
|
|
@@ -117,7 +115,7 @@ class Entry {
|
|
|
117
115
|
return '';
|
|
118
116
|
}
|
|
119
117
|
|
|
120
|
-
if (this.result.renderLevel >=
|
|
118
|
+
if (this.result.renderLevel >= _types.RenderLevel.SERVER_PREFETCH) {
|
|
121
119
|
this.result.html = this.renderToString(context);
|
|
122
120
|
}
|
|
123
121
|
|
|
@@ -149,16 +147,16 @@ class Entry {
|
|
|
149
147
|
}
|
|
150
148
|
} = this;
|
|
151
149
|
let prefetchData;
|
|
152
|
-
const end = (0,
|
|
150
|
+
const end = (0, _utils.time)();
|
|
153
151
|
|
|
154
152
|
try {
|
|
155
153
|
prefetchData = prefetch ? await prefetch(context) : null;
|
|
156
|
-
this.result.renderLevel =
|
|
154
|
+
this.result.renderLevel = _types.RenderLevel.SERVER_PREFETCH;
|
|
157
155
|
const prefetchCost = end();
|
|
158
156
|
this.logger.debug(`App Prefetch cost = %d ms`, prefetchCost);
|
|
159
157
|
this.metrics.emitTimer('app.prefetch.cost', prefetchCost);
|
|
160
158
|
} catch (e) {
|
|
161
|
-
this.result.renderLevel =
|
|
159
|
+
this.result.renderLevel = _types.RenderLevel.CLIENT_RENDER;
|
|
162
160
|
this.logger.error('App Prefetch Render', e);
|
|
163
161
|
this.metrics.emitCounter('app.prefetch.render.error', 1);
|
|
164
162
|
}
|
|
@@ -168,7 +166,7 @@ class Entry {
|
|
|
168
166
|
|
|
169
167
|
renderToString(context) {
|
|
170
168
|
let html = '';
|
|
171
|
-
const end = (0,
|
|
169
|
+
const end = (0, _utils.time)();
|
|
172
170
|
const {
|
|
173
171
|
ssrContext
|
|
174
172
|
} = context;
|
|
@@ -191,7 +189,7 @@ class Entry {
|
|
|
191
189
|
const cost = end();
|
|
192
190
|
this.logger.debug('App Render To HTML cost = %d ms', cost);
|
|
193
191
|
this.metrics.emitTimer('app.render.html.cost', cost);
|
|
194
|
-
this.result.renderLevel =
|
|
192
|
+
this.result.renderLevel = _types.RenderLevel.SERVER_RENDER;
|
|
195
193
|
} catch (e) {
|
|
196
194
|
this.logger.error('App Render To HTML', e);
|
|
197
195
|
this.metrics.emitCounter('app.render.html.error', 1);
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.render = void 0;
|
|
7
|
+
|
|
8
|
+
var _ssr = require("@modern-js/utils/ssr");
|
|
9
|
+
|
|
10
|
+
var _prerender = require("../../react/prerender");
|
|
11
|
+
|
|
12
|
+
var _utils = require("../utils");
|
|
13
|
+
|
|
14
|
+
var _entry = _interopRequireDefault(require("./entry"));
|
|
15
|
+
|
|
16
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
17
|
+
|
|
18
|
+
const render = ({
|
|
19
|
+
App,
|
|
20
|
+
context,
|
|
21
|
+
config
|
|
22
|
+
}) => {
|
|
23
|
+
const ssrContext = context.ssrContext;
|
|
24
|
+
return (0, _ssr.run)(ssrContext.request.headers, async () => {
|
|
25
|
+
const entry = new _entry.default({
|
|
26
|
+
ctx: ssrContext,
|
|
27
|
+
App,
|
|
28
|
+
config
|
|
29
|
+
});
|
|
30
|
+
entry.metrics.emitCounter('app.visit.count', 1);
|
|
31
|
+
const end = (0, _utils.time)();
|
|
32
|
+
const html = await entry.renderToHtml(context);
|
|
33
|
+
const cost = end();
|
|
34
|
+
entry.logger.info('App Render Total cost = %d ms', cost);
|
|
35
|
+
entry.metrics.emitTimer('app.render.cost', cost);
|
|
36
|
+
|
|
37
|
+
const cacheConfig = _prerender.PreRender.config();
|
|
38
|
+
|
|
39
|
+
if (cacheConfig) {
|
|
40
|
+
context.ssrContext.cacheConfig = cacheConfig;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
return html;
|
|
44
|
+
});
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
exports.render = render;
|
|
@@ -7,24 +7,17 @@ exports.toHtml = void 0;
|
|
|
7
7
|
|
|
8
8
|
var _server = require("@loadable/server");
|
|
9
9
|
|
|
10
|
-
var _utils = require("
|
|
10
|
+
var _utils = require("../../utils");
|
|
11
11
|
|
|
12
|
-
|
|
13
|
-
return uri.match(/\.[^.]+$/) || '';
|
|
14
|
-
};
|
|
15
|
-
|
|
16
|
-
function getLoadableScripts(extractor) {
|
|
17
|
-
const check = scripts => (scripts || '').includes('__LOADABLE_REQUIRED_CHUNKS___ext');
|
|
12
|
+
var _utils2 = require("../utils");
|
|
18
13
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
if (!check(scripts)) {
|
|
14
|
+
const extname = uri => {
|
|
15
|
+
if (typeof uri !== 'string' || !uri.includes('.')) {
|
|
22
16
|
return '';
|
|
23
17
|
}
|
|
24
18
|
|
|
25
|
-
return
|
|
26
|
-
|
|
27
|
-
}
|
|
19
|
+
return `.${uri === null || uri === void 0 ? void 0 : uri.split('.').pop()}` || '';
|
|
20
|
+
};
|
|
28
21
|
|
|
29
22
|
const toHtml = (jsx, renderer, next) => {
|
|
30
23
|
const {
|
|
@@ -46,7 +39,7 @@ const toHtml = (jsx, renderer, next) => {
|
|
|
46
39
|
});
|
|
47
40
|
const html = next(extractor.collectChunks(jsx));
|
|
48
41
|
const chunks = extractor.getChunkAssets(extractor.chunks);
|
|
49
|
-
chunksMap.js = (chunksMap.js || '') + getLoadableScripts(extractor);
|
|
42
|
+
chunksMap.js = (chunksMap.js || '') + (0, _utils2.getLoadableScripts)(extractor);
|
|
50
43
|
|
|
51
44
|
for (const v of chunks) {
|
|
52
45
|
const fileType = extname(v.url).slice(1);
|
|
File without changes
|
package/dist/js/node/ssr/serverRender/{styledComponent.js → renderToString/styledComponent.js}
RENAMED
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
Object.defineProperty(exports, "RenderLevel", {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: function () {
|
|
9
|
+
return _type.RenderLevel;
|
|
10
|
+
}
|
|
11
|
+
});
|
|
12
|
+
|
|
13
|
+
var _type = require("./renderToString/type");
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.getLoadableScripts = getLoadableScripts;
|
|
7
|
+
exports.time = void 0;
|
|
8
|
+
|
|
9
|
+
function getLoadableScripts(extractor) {
|
|
10
|
+
const check = scripts => (scripts || '').includes('__LOADABLE_REQUIRED_CHUNKS___ext');
|
|
11
|
+
|
|
12
|
+
const scripts = extractor.getScriptTags();
|
|
13
|
+
|
|
14
|
+
if (!check(scripts)) {
|
|
15
|
+
return '';
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
return scripts.split('</script>') // 前两个 script为 loadable 必须的 script
|
|
19
|
+
.slice(0, 2).map(i => `${i}</script>`).join('');
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
const getLatency = hrtime => {
|
|
23
|
+
const [s, ns] = process.hrtime(hrtime);
|
|
24
|
+
return s * 1e3 + ns / 1e6;
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
const time = () => {
|
|
28
|
+
const hrtime = process.hrtime();
|
|
29
|
+
return () => {
|
|
30
|
+
return getLatency(hrtime);
|
|
31
|
+
};
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
exports.time = time;
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.mockResponse = exports.isCrossOrigin = exports.formatServer = exports.formatClient = void 0;
|
|
6
|
+
exports.mockResponse = exports.isReact18 = exports.isCrossOrigin = exports.formatServer = exports.formatClient = void 0;
|
|
7
7
|
|
|
8
8
|
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; }
|
|
9
9
|
|
|
@@ -11,6 +11,10 @@ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { va
|
|
|
11
11
|
|
|
12
12
|
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; }
|
|
13
13
|
|
|
14
|
+
const isReact18 = () => process.env.IS_REACT18 === 'true';
|
|
15
|
+
|
|
16
|
+
exports.isReact18 = isReact18;
|
|
17
|
+
|
|
14
18
|
const formatServer = request => {
|
|
15
19
|
const {
|
|
16
20
|
cookie = '',
|
|
@@ -58,11 +62,16 @@ exports.formatClient = formatClient;
|
|
|
58
62
|
const mockResponse = () => {
|
|
59
63
|
return {
|
|
60
64
|
setHeader() {
|
|
61
|
-
console.
|
|
65
|
+
console.warn('response.setHeader() can only be used in the server side');
|
|
62
66
|
},
|
|
63
67
|
|
|
64
68
|
status() {
|
|
65
|
-
console.
|
|
69
|
+
console.warn('response.status() can only be used in the server side');
|
|
70
|
+
},
|
|
71
|
+
|
|
72
|
+
get locals() {
|
|
73
|
+
console.warn('response.locals can only be used in the server side');
|
|
74
|
+
return {};
|
|
66
75
|
}
|
|
67
76
|
|
|
68
77
|
};
|
|
@@ -70,7 +79,7 @@ const mockResponse = () => {
|
|
|
70
79
|
|
|
71
80
|
exports.mockResponse = mockResponse;
|
|
72
81
|
|
|
73
|
-
const isCrossOrigin = (url, base) => {
|
|
82
|
+
const isCrossOrigin = (url = '', base) => {
|
|
74
83
|
if (url.startsWith('/') || url.startsWith('./')) {
|
|
75
84
|
return false;
|
|
76
85
|
} else if (!url.includes(base)) {
|
|
@@ -9,7 +9,7 @@ export default (function () {
|
|
|
9
9
|
return {
|
|
10
10
|
name: '@modern-js/runtime',
|
|
11
11
|
post: ['@modern-js/plugin-router', '@modern-js/plugin-ssr', '@modern-js/plugin-state', '@modern-js/plugin-design-token'],
|
|
12
|
-
usePlugins: [PluginState(),
|
|
12
|
+
usePlugins: [PluginState(), PluginSSR(), PluginRouter()],
|
|
13
13
|
setup: function setup(api) {
|
|
14
14
|
return {
|
|
15
15
|
config: function config() {
|
|
@@ -2,6 +2,6 @@ export { createPlugin, createRuntime, runtime, registerInit, registerPrefetch }
|
|
|
2
2
|
export { defineConfig, getConfig } from "./app-config"; // compatible
|
|
3
3
|
|
|
4
4
|
export * from "./compatible";
|
|
5
|
-
export { RuntimeReactContext } from "../runtime-context";
|
|
5
|
+
export { RuntimeReactContext, ServerRouterContext } from "../runtime-context";
|
|
6
6
|
export * from "./loader";
|
|
7
7
|
export * from '@modern-js/plugin';
|
|
@@ -25,11 +25,14 @@ export default (function () {
|
|
|
25
25
|
return PLUGIN_SCHEMAS['@modern-js/plugin-router'];
|
|
26
26
|
},
|
|
27
27
|
modifyEntryImports: function modifyEntryImports(_ref) {
|
|
28
|
+
var _userConfig$runtime, _userConfig$runtime$r;
|
|
29
|
+
|
|
28
30
|
var entrypoint = _ref.entrypoint,
|
|
29
31
|
imports = _ref.imports;
|
|
30
32
|
var entryName = entrypoint.entryName,
|
|
31
33
|
fileSystemRoutes = entrypoint.fileSystemRoutes;
|
|
32
34
|
var userConfig = api.useResolvedConfigContext();
|
|
35
|
+
var isLegacy = Boolean(userConfig === null || userConfig === void 0 ? void 0 : (_userConfig$runtime = userConfig.runtime) === null || _userConfig$runtime === void 0 ? void 0 : (_userConfig$runtime$r = _userConfig$runtime.router) === null || _userConfig$runtime$r === void 0 ? void 0 : _userConfig$runtime$r.legacy);
|
|
33
36
|
|
|
34
37
|
var _api$useAppContext = api.useAppContext(),
|
|
35
38
|
packageName = _api$useAppContext.packageName;
|
|
@@ -38,12 +41,14 @@ export default (function () {
|
|
|
38
41
|
runtimeConfigMap.set(entryName, runtimeConfig);
|
|
39
42
|
|
|
40
43
|
if (runtimeConfig !== null && runtimeConfig !== void 0 && runtimeConfig.router) {
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
44
|
+
if (!isLegacy) {
|
|
45
|
+
imports.push({
|
|
46
|
+
value: '@modern-js/runtime/plugins',
|
|
47
|
+
specifiers: [{
|
|
48
|
+
imported: PLUGIN_IDENTIFIER
|
|
49
|
+
}]
|
|
50
|
+
});
|
|
51
|
+
}
|
|
47
52
|
} else if (fileSystemRoutes) {
|
|
48
53
|
throw new Error("should enable runtime.router for entry ".concat(entryName));
|
|
49
54
|
}
|
|
@@ -54,6 +59,8 @@ export default (function () {
|
|
|
54
59
|
};
|
|
55
60
|
},
|
|
56
61
|
modifyEntryRuntimePlugins: function modifyEntryRuntimePlugins(_ref2) {
|
|
62
|
+
var _userConfig$runtime2, _userConfig$runtime2$;
|
|
63
|
+
|
|
57
64
|
var entrypoint = _ref2.entrypoint,
|
|
58
65
|
plugins = _ref2.plugins;
|
|
59
66
|
var entryName = entrypoint.entryName,
|
|
@@ -62,9 +69,11 @@ export default (function () {
|
|
|
62
69
|
var _api$useAppContext2 = api.useAppContext(),
|
|
63
70
|
serverRoutes = _api$useAppContext2.serverRoutes;
|
|
64
71
|
|
|
72
|
+
var userConfig = api.useResolvedConfigContext();
|
|
73
|
+
var isLegacy = Boolean(userConfig === null || userConfig === void 0 ? void 0 : (_userConfig$runtime2 = userConfig.runtime) === null || _userConfig$runtime2 === void 0 ? void 0 : (_userConfig$runtime2$ = _userConfig$runtime2.router) === null || _userConfig$runtime2$ === void 0 ? void 0 : _userConfig$runtime2$.legacy);
|
|
65
74
|
var runtimeConfig = runtimeConfigMap.get(entryName);
|
|
66
75
|
|
|
67
|
-
if (runtimeConfig.router) {
|
|
76
|
+
if (runtimeConfig.router && !isLegacy) {
|
|
68
77
|
// Todo: plugin-router best to only handle manage client route.
|
|
69
78
|
// here support base server route usage, part for compatibility
|
|
70
79
|
var serverBase = serverRoutes.filter(function (route) {
|
|
@@ -90,7 +99,14 @@ export default (function () {
|
|
|
90
99
|
};
|
|
91
100
|
},
|
|
92
101
|
addRuntimeExports: function addRuntimeExports() {
|
|
93
|
-
|
|
102
|
+
var _userConfig$runtime3, _userConfig$runtime3$;
|
|
103
|
+
|
|
104
|
+
var userConfig = api.useResolvedConfigContext();
|
|
105
|
+
var isLegacy = Boolean(userConfig === null || userConfig === void 0 ? void 0 : (_userConfig$runtime3 = userConfig.runtime) === null || _userConfig$runtime3 === void 0 ? void 0 : (_userConfig$runtime3$ = _userConfig$runtime3.router) === null || _userConfig$runtime3$ === void 0 ? void 0 : _userConfig$runtime3$.legacy);
|
|
106
|
+
|
|
107
|
+
if (!isLegacy) {
|
|
108
|
+
pluginsExportsUtils.addExport("export { default as router } from '@modern-js/runtime/router'");
|
|
109
|
+
}
|
|
94
110
|
}
|
|
95
111
|
};
|
|
96
112
|
}
|