@modern-js/runtime 2.0.0-beta.0 → 2.0.0-beta.1
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 +77 -0
- package/dist/js/modern/cli/index.js +3 -5
- package/dist/js/modern/core/app-config.js +2 -1
- package/dist/js/modern/core/compatible.js +63 -46
- package/dist/js/modern/core/index.js +3 -2
- package/dist/js/modern/core/loader/loaderManager.js +12 -34
- package/dist/js/modern/core/loader/useLoader.js +8 -26
- package/dist/js/modern/core/plugin.js +6 -28
- package/dist/js/modern/document/Body.js +17 -0
- package/dist/js/modern/document/DocumentContext.js +6 -0
- package/dist/js/modern/document/DocumentStructrueContext.js +7 -0
- package/dist/js/modern/document/Head.js +24 -0
- package/dist/js/modern/document/Html.js +92 -0
- package/dist/js/modern/document/Root.js +31 -0
- package/dist/js/modern/document/Scripts.js +10 -0
- package/dist/js/modern/document/cli/index.js +130 -0
- package/dist/js/modern/document/constants.js +19 -0
- package/dist/js/modern/document/index.js +8 -0
- package/dist/js/modern/index.js +1 -1
- package/dist/js/modern/router/cli/index.js +0 -16
- package/dist/js/modern/router/runtime/plugin.js +0 -9
- package/dist/js/modern/router/runtime/plugin.node.js +18 -24
- package/dist/js/modern/router/runtime/root/index.js +19 -0
- package/dist/js/modern/router/runtime/root/load.js +61 -0
- package/dist/js/modern/router/runtime/utils.js +16 -35
- package/dist/js/modern/router/runtime/withRouter.js +1 -3
- package/dist/js/modern/ssr/cli/index.js +2 -23
- package/dist/js/modern/ssr/index.js +23 -34
- package/dist/js/modern/ssr/index.node.js +0 -13
- package/dist/js/modern/ssr/prefetch.js +0 -7
- package/dist/js/modern/ssr/react/prerender/index.js +2 -23
- package/dist/js/modern/ssr/react/prerender/util.js +2 -17
- package/dist/js/modern/ssr/react/withCallback/index.js +0 -1
- package/dist/js/modern/ssr/serverRender/helmet.js +12 -20
- package/dist/js/modern/ssr/serverRender/index.js +1 -2
- package/dist/js/modern/ssr/serverRender/renderToStream/buildTemplate.after.js +5 -5
- package/dist/js/modern/ssr/serverRender/renderToStream/bulidTemplate.before.js +45 -11
- package/dist/js/modern/ssr/serverRender/renderToStream/index.js +6 -39
- package/dist/js/modern/ssr/serverRender/renderToStream/loadable.js +0 -2
- package/dist/js/modern/ssr/serverRender/renderToStream/renderToPipe.js +26 -15
- package/dist/js/modern/ssr/serverRender/renderToStream/template.js +14 -18
- package/dist/js/modern/ssr/serverRender/renderToString/entry.js +2 -34
- package/dist/js/modern/ssr/serverRender/renderToString/index.js +0 -2
- package/dist/js/modern/ssr/serverRender/renderToString/loadable.js +0 -10
- package/dist/js/modern/ssr/serverRender/renderToString/reduce.js +0 -2
- package/dist/js/modern/ssr/serverRender/renderToString/template.js +0 -15
- package/dist/js/modern/ssr/serverRender/renderToString/type.js +0 -1
- package/dist/js/modern/ssr/serverRender/utils.js +2 -6
- package/dist/js/modern/ssr/utils.js +0 -11
- package/dist/js/modern/state/cli/index.js +0 -10
- package/dist/js/modern/state/runtime/plugin.js +1 -14
- package/dist/js/node/cli/index.js +3 -13
- package/dist/js/node/common.js +0 -2
- package/dist/js/node/core/app-config.js +2 -5
- package/dist/js/node/core/compatible.js +63 -64
- package/dist/js/node/core/index.js +0 -16
- package/dist/js/node/core/loader/index.js +0 -2
- package/dist/js/node/core/loader/loaderManager.js +12 -37
- package/dist/js/node/core/loader/useLoader.js +8 -31
- package/dist/js/node/core/plugin.js +5 -34
- package/dist/js/node/document/Body.js +26 -0
- package/dist/js/node/document/DocumentContext.js +14 -0
- package/dist/js/node/document/DocumentStructrueContext.js +15 -0
- package/dist/js/node/document/Head.js +33 -0
- package/dist/js/node/document/Html.js +98 -0
- package/dist/js/node/document/Root.js +41 -0
- package/dist/js/node/document/Scripts.js +17 -0
- package/dist/js/node/document/cli/index.js +140 -0
- package/dist/js/node/document/constants.js +36 -0
- package/dist/js/node/document/index.js +93 -0
- package/dist/js/node/exports/head.js +0 -5
- package/dist/js/node/exports/loadable.js +0 -5
- package/dist/js/node/exports/server.js +0 -2
- package/dist/js/node/exports/styled.js +0 -5
- package/dist/js/node/index.js +0 -8
- package/dist/js/node/router/cli/index.js +0 -20
- package/dist/js/node/router/index.js +0 -4
- package/dist/js/node/router/runtime/DefaultNotFound.js +1 -5
- package/dist/js/node/router/runtime/index.js +0 -5
- package/dist/js/node/router/runtime/plugin.js +0 -17
- package/dist/js/node/router/runtime/plugin.node.js +16 -38
- package/dist/js/node/router/runtime/root/index.js +26 -0
- package/dist/js/node/router/runtime/root/load.js +69 -0
- package/dist/js/node/router/runtime/utils.js +16 -44
- package/dist/js/node/router/runtime/withRouter.js +0 -9
- package/dist/js/node/runtime-context.js +0 -2
- package/dist/js/node/ssr/cli/index.js +2 -26
- package/dist/js/node/ssr/index.js +23 -45
- package/dist/js/node/ssr/index.node.js +0 -23
- package/dist/js/node/ssr/prefetch.js +0 -11
- package/dist/js/node/ssr/react/index.js +0 -2
- package/dist/js/node/ssr/react/nossr/index.js +0 -6
- package/dist/js/node/ssr/react/prerender/index.js +2 -30
- package/dist/js/node/ssr/react/prerender/util.js +2 -25
- package/dist/js/node/ssr/react/withCallback/index.js +1 -4
- package/dist/js/node/ssr/serverRender/helmet.js +13 -20
- package/dist/js/node/ssr/serverRender/index.js +1 -4
- package/dist/js/node/ssr/serverRender/renderToStream/buildTemplate.after.js +5 -9
- package/dist/js/node/ssr/serverRender/renderToStream/buildTemplate.share.js +0 -1
- package/dist/js/node/ssr/serverRender/renderToStream/bulidTemplate.before.js +43 -15
- package/dist/js/node/ssr/serverRender/renderToStream/index.js +6 -48
- package/dist/js/node/ssr/serverRender/renderToStream/loadable.js +0 -4
- package/dist/js/node/ssr/serverRender/renderToStream/renderToPipe.js +26 -17
- package/dist/js/node/ssr/serverRender/renderToStream/styledComponent.js +0 -2
- package/dist/js/node/ssr/serverRender/renderToStream/template.js +16 -23
- package/dist/js/node/ssr/serverRender/renderToString/entry.js +2 -51
- package/dist/js/node/ssr/serverRender/renderToString/index.js +0 -10
- package/dist/js/node/ssr/serverRender/renderToString/loadable.js +0 -14
- package/dist/js/node/ssr/serverRender/renderToString/reduce.js +0 -3
- package/dist/js/node/ssr/serverRender/renderToString/styledComponent.js +0 -3
- package/dist/js/node/ssr/serverRender/renderToString/template.js +0 -18
- package/dist/js/node/ssr/serverRender/renderToString/type.js +0 -1
- package/dist/js/node/ssr/serverRender/types.js +0 -1
- package/dist/js/node/ssr/serverRender/utils.js +2 -8
- package/dist/js/node/ssr/utils.js +0 -20
- package/dist/js/node/state/cli/index.js +0 -15
- package/dist/js/node/state/index.js +0 -4
- package/dist/js/node/state/plugins.js +0 -11
- package/dist/js/node/state/runtime/index.js +0 -7
- package/dist/js/node/state/runtime/plugin.js +1 -25
- package/dist/js/treeshaking/cli/index.js +3 -3
- package/dist/js/treeshaking/core/app-config.js +2 -1
- package/dist/js/treeshaking/core/compatible.js +66 -63
- package/dist/js/treeshaking/core/index.js +3 -2
- package/dist/js/treeshaking/core/loader/loaderManager.js +19 -51
- package/dist/js/treeshaking/core/loader/useLoader.js +11 -28
- package/dist/js/treeshaking/core/plugin.js +6 -51
- package/dist/js/treeshaking/document/Body.js +14 -0
- package/dist/js/treeshaking/document/DocumentContext.js +6 -0
- package/dist/js/treeshaking/document/DocumentStructrueContext.js +7 -0
- package/dist/js/treeshaking/document/Head.js +21 -0
- package/dist/js/treeshaking/document/Html.js +104 -0
- package/dist/js/treeshaking/document/Root.js +24 -0
- package/dist/js/treeshaking/document/Scripts.js +10 -0
- package/dist/js/treeshaking/document/cli/index.js +170 -0
- package/dist/js/treeshaking/document/constants.js +16 -0
- package/dist/js/treeshaking/document/index.js +8 -0
- package/dist/js/treeshaking/index.js +1 -1
- package/dist/js/treeshaking/router/cli/index.js +6 -18
- package/dist/js/treeshaking/router/runtime/plugin.js +5 -13
- package/dist/js/treeshaking/router/runtime/plugin.node.js +23 -36
- package/dist/js/treeshaking/router/runtime/root/index.js +17 -0
- package/dist/js/treeshaking/router/runtime/root/load.js +102 -0
- package/dist/js/treeshaking/router/runtime/utils.js +21 -39
- package/dist/js/treeshaking/router/runtime/withRouter.js +1 -0
- package/dist/js/treeshaking/ssr/cli/index.js +9 -31
- package/dist/js/treeshaking/ssr/index.js +26 -40
- package/dist/js/treeshaking/ssr/index.node.js +12 -29
- package/dist/js/treeshaking/ssr/prefetch.js +0 -13
- package/dist/js/treeshaking/ssr/react/nossr/index.js +3 -4
- package/dist/js/treeshaking/ssr/react/prerender/index.js +2 -21
- package/dist/js/treeshaking/ssr/react/prerender/util.js +3 -20
- package/dist/js/treeshaking/ssr/react/withCallback/index.js +1 -2
- package/dist/js/treeshaking/ssr/serverRender/helmet.js +12 -11
- package/dist/js/treeshaking/ssr/serverRender/index.js +1 -9
- package/dist/js/treeshaking/ssr/serverRender/renderToStream/buildTemplate.after.js +5 -6
- package/dist/js/treeshaking/ssr/serverRender/renderToStream/bulidTemplate.before.js +46 -15
- package/dist/js/treeshaking/ssr/serverRender/renderToStream/index.js +9 -79
- package/dist/js/treeshaking/ssr/serverRender/renderToStream/loadable.js +3 -5
- package/dist/js/treeshaking/ssr/serverRender/renderToStream/renderToPipe.js +46 -35
- package/dist/js/treeshaking/ssr/serverRender/renderToStream/template.js +17 -24
- package/dist/js/treeshaking/ssr/serverRender/renderToString/entry.js +20 -73
- package/dist/js/treeshaking/ssr/serverRender/renderToString/index.js +2 -6
- package/dist/js/treeshaking/ssr/serverRender/renderToString/loadable.js +5 -16
- package/dist/js/treeshaking/ssr/serverRender/renderToString/reduce.js +0 -2
- package/dist/js/treeshaking/ssr/serverRender/renderToString/template.js +2 -18
- package/dist/js/treeshaking/ssr/serverRender/renderToString/type.js +0 -1
- package/dist/js/treeshaking/ssr/serverRender/utils.js +5 -10
- package/dist/js/treeshaking/ssr/utils.js +8 -17
- package/dist/js/treeshaking/state/cli/index.js +3 -10
- package/dist/js/treeshaking/state/runtime/plugin.js +2 -10
- package/dist/types/cli/index.d.ts +0 -2
- package/dist/types/core/compatible.d.ts +5 -5
- package/dist/types/core/index.d.ts +1 -1
- package/dist/types/core/loader/loaderManager.d.ts +0 -1
- package/dist/types/core/loader/useLoader.d.ts +0 -5
- package/dist/types/core/plugin.d.ts +1 -13
- package/dist/types/document/Body.d.ts +4 -0
- package/dist/types/document/DocumentContext.d.ts +13 -0
- package/dist/types/document/DocumentStructrueContext.d.ts +10 -0
- package/dist/types/document/Head.d.ts +5 -0
- package/dist/types/document/Html.d.ts +4 -0
- package/dist/types/document/Root.d.ts +8 -0
- package/dist/types/document/Scripts.d.ts +2 -0
- package/dist/types/document/cli/index.d.ts +3 -0
- package/dist/types/document/constants.d.ts +14 -0
- package/dist/types/document/index.d.ts +8 -0
- package/dist/types/exports/server.d.ts +3 -3
- package/dist/types/index.d.ts +1 -1
- package/dist/types/router/cli/index.d.ts +0 -2
- package/dist/types/router/runtime/root/index.d.ts +8 -0
- package/dist/types/router/runtime/root/load.d.ts +22 -0
- package/dist/types/router/runtime/types.d.ts +0 -2
- package/dist/types/runtime-context.d.ts +1 -0
- package/dist/types/ssr/cli/index.d.ts +0 -2
- package/dist/types/ssr/prefetch.d.ts +2 -2
- package/dist/types/ssr/serverRender/renderToStream/buildTemplate.after.d.ts +3 -2
- package/dist/types/ssr/serverRender/renderToStream/bulidTemplate.before.d.ts +2 -1
- package/dist/types/ssr/serverRender/renderToStream/renderToPipe.d.ts +3 -3
- package/dist/types/ssr/serverRender/renderToStream/template.d.ts +2 -2
- package/dist/types/ssr/serverRender/types.d.ts +1 -4
- package/dist/types/state/cli/index.d.ts +0 -2
- package/dist/types/state/types.d.ts +0 -1
- package/package.json +19 -11
|
@@ -4,25 +4,15 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.PreRender = void 0;
|
|
7
|
-
|
|
8
7
|
var _reactSideEffect = _interopRequireDefault(require("react-side-effect"));
|
|
9
|
-
|
|
10
8
|
var _react = _interopRequireWildcard(require("react"));
|
|
11
|
-
|
|
12
9
|
var _util = require("./util");
|
|
13
|
-
|
|
14
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); }
|
|
15
|
-
|
|
16
11
|
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
12
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
19
|
-
|
|
20
13
|
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
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; }
|
|
23
|
-
|
|
24
15
|
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
16
|
const PROP_NAMES = {
|
|
27
17
|
INTERVAL: 'interval',
|
|
28
18
|
STALE_LIMIT: 'staleLimit',
|
|
@@ -32,10 +22,9 @@ const PROP_NAMES = {
|
|
|
32
22
|
FALLBACK: 'fallback',
|
|
33
23
|
MATCHES: 'matches'
|
|
34
24
|
};
|
|
35
|
-
|
|
36
|
-
|
|
25
|
+
const handleClientStateChange = () => {
|
|
26
|
+
// not used
|
|
37
27
|
};
|
|
38
|
-
|
|
39
28
|
const mapStateOnServer = reduceProps => {
|
|
40
29
|
const defaultProps = {
|
|
41
30
|
interval: 10,
|
|
@@ -50,17 +39,14 @@ const mapStateOnServer = reduceProps => {
|
|
|
50
39
|
const propKey = key;
|
|
51
40
|
const reduceProp = reduceProps[propKey];
|
|
52
41
|
let nextProps = props;
|
|
53
|
-
|
|
54
42
|
if ((0, _util.exist)(reduceProp)) {
|
|
55
43
|
nextProps = _objectSpread(_objectSpread({}, props), {}, {
|
|
56
44
|
[propKey]: reduceProp
|
|
57
45
|
});
|
|
58
46
|
}
|
|
59
|
-
|
|
60
47
|
return nextProps;
|
|
61
48
|
}, defaultProps);
|
|
62
49
|
};
|
|
63
|
-
|
|
64
50
|
const reducePropsToState = propsList => {
|
|
65
51
|
const reduceProps = {
|
|
66
52
|
interval: (0, _util.getOutermostProperty)(propsList, PROP_NAMES.INTERVAL),
|
|
@@ -73,49 +59,35 @@ const reducePropsToState = propsList => {
|
|
|
73
59
|
};
|
|
74
60
|
return reduceProps;
|
|
75
61
|
};
|
|
76
|
-
|
|
77
62
|
function factory(Component) {
|
|
78
63
|
class Spr extends _react.default.Component {
|
|
79
64
|
static set canUseDOM(canUseDOM) {
|
|
80
65
|
Component.canUseDOM = canUseDOM;
|
|
81
66
|
}
|
|
82
|
-
|
|
83
67
|
static get canUseDOM() {
|
|
84
68
|
return Component.canUseDOM;
|
|
85
69
|
}
|
|
86
|
-
|
|
87
70
|
verify() {
|
|
88
71
|
return true;
|
|
89
72
|
}
|
|
90
|
-
|
|
91
73
|
render() {
|
|
92
74
|
const newProps = _objectSpread({}, this.props);
|
|
93
|
-
|
|
94
75
|
const validate = this.verify();
|
|
95
|
-
|
|
96
76
|
if (!validate) {
|
|
97
77
|
throw new Error('invalid props, check usage');
|
|
98
78
|
}
|
|
99
|
-
|
|
100
79
|
return /*#__PURE__*/(0, _react.createElement)(Component, _objectSpread({}, newProps));
|
|
101
80
|
}
|
|
102
|
-
|
|
103
81
|
}
|
|
104
|
-
|
|
105
82
|
_defineProperty(Spr, "peek", Component.peek);
|
|
106
|
-
|
|
107
83
|
_defineProperty(Spr, "rewind", Component.rewind);
|
|
108
|
-
|
|
109
84
|
_defineProperty(Spr, "config", () => {
|
|
110
85
|
const mappedState = Component.rewind();
|
|
111
86
|
return mappedState;
|
|
112
87
|
});
|
|
113
|
-
|
|
114
88
|
return Spr;
|
|
115
89
|
}
|
|
116
|
-
|
|
117
90
|
const NullComponent = () => null;
|
|
118
|
-
|
|
119
91
|
const SprSideEffects = (0, _reactSideEffect.default)(reducePropsToState, handleClientStateChange, mapStateOnServer)(NullComponent);
|
|
120
92
|
const PreRender = factory(SprSideEffects);
|
|
121
93
|
exports.PreRender = PreRender;
|
|
@@ -7,33 +7,25 @@ exports.aggMatchesFromPropsList = exports.aggKeysFromPropsList = void 0;
|
|
|
7
7
|
exports.exist = exist;
|
|
8
8
|
exports.getOutermostProperty = exports.getInnermostProperty = void 0;
|
|
9
9
|
const REQUEST_META = ['header', 'query'];
|
|
10
|
-
|
|
11
10
|
const getInnermostProperty = function getInnermostProperty(propsList, propName) {
|
|
12
11
|
for (let i = propsList.length - 1; i >= 0; i--) {
|
|
13
12
|
const props = propsList[i];
|
|
14
|
-
|
|
15
13
|
if (props.hasOwnProperty(propName)) {
|
|
16
14
|
return props[propName];
|
|
17
15
|
}
|
|
18
16
|
}
|
|
19
|
-
|
|
20
17
|
return null;
|
|
21
18
|
};
|
|
22
|
-
|
|
23
19
|
exports.getInnermostProperty = getInnermostProperty;
|
|
24
|
-
|
|
25
20
|
const getOutermostProperty = function getOutermostProperty(propsList, propName) {
|
|
26
21
|
for (const props of propsList) {
|
|
27
22
|
if (props.hasOwnProperty(propName)) {
|
|
28
23
|
return props[propName];
|
|
29
24
|
}
|
|
30
25
|
}
|
|
31
|
-
|
|
32
26
|
return null;
|
|
33
27
|
};
|
|
34
|
-
|
|
35
28
|
exports.getOutermostProperty = getOutermostProperty;
|
|
36
|
-
|
|
37
29
|
const aggKeysFromPropsList = function aggKeysFromPropsList(propsList, propName) {
|
|
38
30
|
const initResult = REQUEST_META.reduce((result, next) => {
|
|
39
31
|
const key = next;
|
|
@@ -43,7 +35,6 @@ const aggKeysFromPropsList = function aggKeysFromPropsList(propsList, propName)
|
|
|
43
35
|
const res = propsList.filter(props => usefulObject(props[propName])).reduce((result, next) => {
|
|
44
36
|
REQUEST_META.forEach(key => {
|
|
45
37
|
const prop = next[propName];
|
|
46
|
-
|
|
47
38
|
if (prop !== null && prop !== void 0 && prop.hasOwnProperty(key) && usefulArray(prop[key])) {
|
|
48
39
|
result[key] = unique(result[key].concat(prop[key]));
|
|
49
40
|
}
|
|
@@ -52,19 +43,14 @@ const aggKeysFromPropsList = function aggKeysFromPropsList(propsList, propName)
|
|
|
52
43
|
}, initResult);
|
|
53
44
|
return REQUEST_META.reduce((result, next) => {
|
|
54
45
|
var _result$key;
|
|
55
|
-
|
|
56
46
|
const key = next;
|
|
57
|
-
|
|
58
47
|
if (result[key] && ((_result$key = result[key]) === null || _result$key === void 0 ? void 0 : _result$key.length) === 0) {
|
|
59
48
|
delete result[key];
|
|
60
49
|
}
|
|
61
|
-
|
|
62
50
|
return result;
|
|
63
51
|
}, res);
|
|
64
52
|
};
|
|
65
|
-
|
|
66
53
|
exports.aggKeysFromPropsList = aggKeysFromPropsList;
|
|
67
|
-
|
|
68
54
|
const aggMatchesFromPropsList = function aggMatchesFromPropsList(propsList, propName) {
|
|
69
55
|
const initResult = REQUEST_META.reduce((result, next) => {
|
|
70
56
|
const key = next;
|
|
@@ -73,8 +59,8 @@ const aggMatchesFromPropsList = function aggMatchesFromPropsList(propsList, prop
|
|
|
73
59
|
}, {});
|
|
74
60
|
const res = propsList.filter(props => usefulObject(props[propName])).reduce((result, next) => {
|
|
75
61
|
REQUEST_META.forEach(key => {
|
|
76
|
-
const prop = next[propName];
|
|
77
|
-
|
|
62
|
+
const prop = next[propName];
|
|
63
|
+
// 这边目前是浅拷贝,越后渲染优先级越高
|
|
78
64
|
if (prop !== null && prop !== void 0 && prop.hasOwnProperty(key) && usefulObject(prop[key])) {
|
|
79
65
|
result[key] = Object.assign(result[key], prop[key]);
|
|
80
66
|
}
|
|
@@ -83,37 +69,28 @@ const aggMatchesFromPropsList = function aggMatchesFromPropsList(propsList, prop
|
|
|
83
69
|
}, initResult);
|
|
84
70
|
return REQUEST_META.reduce((result, next) => {
|
|
85
71
|
const key = next;
|
|
86
|
-
|
|
87
72
|
if (result[key] && Object.keys(result[key]).length === 0) {
|
|
88
73
|
delete result[key];
|
|
89
74
|
}
|
|
90
|
-
|
|
91
75
|
return result;
|
|
92
76
|
}, res);
|
|
93
77
|
};
|
|
94
|
-
|
|
95
78
|
exports.aggMatchesFromPropsList = aggMatchesFromPropsList;
|
|
96
|
-
|
|
97
79
|
function unique(arr) {
|
|
98
80
|
return Array.from(new Set(arr));
|
|
99
81
|
}
|
|
100
|
-
|
|
101
82
|
function usefulObject(target) {
|
|
102
83
|
if (!exist(target)) {
|
|
103
84
|
return false;
|
|
104
85
|
}
|
|
105
|
-
|
|
106
86
|
return target.constructor === Object && Object.keys(target).length > 0;
|
|
107
87
|
}
|
|
108
|
-
|
|
109
88
|
function usefulArray(target) {
|
|
110
89
|
if (!exist(target)) {
|
|
111
90
|
return false;
|
|
112
91
|
}
|
|
113
|
-
|
|
114
92
|
return Array.isArray(target) && target.length > 0;
|
|
115
93
|
}
|
|
116
|
-
|
|
117
94
|
function exist(target) {
|
|
118
95
|
return target != null;
|
|
119
96
|
}
|
|
@@ -4,10 +4,9 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.WithCallback = void 0;
|
|
7
|
-
|
|
8
7
|
var _react = require("react");
|
|
9
|
-
|
|
10
8
|
// See https://github.com/reactwg/react-18/discussions/5#discussioncomment-2276079
|
|
9
|
+
|
|
11
10
|
const WithCallback = ({
|
|
12
11
|
callback,
|
|
13
12
|
children
|
|
@@ -17,11 +16,9 @@ const WithCallback = ({
|
|
|
17
16
|
if (once.current) {
|
|
18
17
|
return;
|
|
19
18
|
}
|
|
20
|
-
|
|
21
19
|
once.current = true;
|
|
22
20
|
callback();
|
|
23
21
|
}, [callback]);
|
|
24
22
|
return children;
|
|
25
23
|
};
|
|
26
|
-
|
|
27
24
|
exports.WithCallback = WithCallback;
|
|
@@ -4,49 +4,42 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = helmet;
|
|
7
|
+
var _os = require("os");
|
|
7
8
|
// 用于 react-helmet 正则替换
|
|
9
|
+
|
|
8
10
|
const RE_HTML_ATTR = /<html[^>]*>/;
|
|
9
11
|
const RE_BODY_ATTR = /<body[^>]*>/;
|
|
10
12
|
const RE_LAST_IN_HEAD = /<\/head>/;
|
|
11
13
|
const RE_TITLE = /<title[^>]*>([\s\S\n\r]*?)<\/title>/;
|
|
12
|
-
const TEST_TITLE_CONTENT = /(?<=<title[^>]*>)([\s\S\n\r]*?)([.|\S])([\s\S\n\r]*?)(?=<\/title>)/;
|
|
14
|
+
const TEST_TITLE_CONTENT = /(?<=<title[^>]*>)([\s\S\n\r]*?)([.|\S])([\s\S\n\r]*?)(?=<\/title>)/;
|
|
13
15
|
|
|
16
|
+
// 通过 react-helmet 修改模板
|
|
14
17
|
function helmet(content, helmetData) {
|
|
15
18
|
let result = content;
|
|
16
19
|
const bodyAttributes = helmetData.bodyAttributes.toString();
|
|
17
|
-
|
|
18
20
|
if (bodyAttributes) {
|
|
19
21
|
result = result.replace(RE_BODY_ATTR, `<body ${bodyAttributes}>`);
|
|
20
22
|
}
|
|
21
|
-
|
|
22
23
|
const htmlAttributes = helmetData.htmlAttributes.toString();
|
|
23
|
-
|
|
24
24
|
if (htmlAttributes) {
|
|
25
25
|
result = result.replace(RE_HTML_ATTR, `<html ${htmlAttributes}>`);
|
|
26
26
|
}
|
|
27
|
-
|
|
28
27
|
const base = helmetData.base.toString();
|
|
29
28
|
const link = helmetData.link.toString();
|
|
30
29
|
const meta = helmetData.meta.toString();
|
|
31
30
|
const noscript = helmetData.noscript.toString();
|
|
32
31
|
const script = helmetData.script.toString();
|
|
33
32
|
const style = helmetData.style.toString();
|
|
34
|
-
const title = helmetData.title.toString();
|
|
35
|
-
|
|
36
|
-
const existTitle = RE_TITLE.test(content);
|
|
33
|
+
const title = helmetData.title.toString();
|
|
37
34
|
|
|
38
|
-
|
|
35
|
+
// 如果模板中存在 title,且 helmetData title 有内容则做替换
|
|
36
|
+
const existTitleTag = RE_TITLE.test(content);
|
|
37
|
+
const shouldReplaceTitle = existTitleTag && TEST_TITLE_CONTENT.test(title.trim());
|
|
38
|
+
if (shouldReplaceTitle) {
|
|
39
39
|
result = result.replace(RE_TITLE, title);
|
|
40
40
|
}
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
${meta}
|
|
46
|
-
${noscript}
|
|
47
|
-
${script}
|
|
48
|
-
${style}
|
|
49
|
-
${existTitle ? '' : title}
|
|
50
|
-
</head>
|
|
51
|
-
`);
|
|
41
|
+
const helmetStr = [base, link, meta, noscript, script, style, !existTitleTag ? title : ''].reduce((pre, cur) => {
|
|
42
|
+
return pre + (cur.length > 0 ? ` ${cur}${_os.EOL}` : '');
|
|
43
|
+
}, '');
|
|
44
|
+
return result.replace(RE_LAST_IN_HEAD, `${helmetStr}</head>`);
|
|
52
45
|
}
|
|
@@ -4,14 +4,11 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = serverRender;
|
|
7
|
-
|
|
8
7
|
var _utils = require("../utils");
|
|
9
|
-
|
|
10
8
|
/* eslint-disable eslint-comments/disable-enable-pair */
|
|
11
|
-
|
|
12
9
|
/* eslint-disable @typescript-eslint/no-var-requires */
|
|
13
|
-
|
|
14
10
|
/* eslint-disable @typescript-eslint/no-require-imports */
|
|
11
|
+
|
|
15
12
|
async function serverRender(options) {
|
|
16
13
|
if ((0, _utils.isReact18)() && options.config.mode === 'stream') {
|
|
17
14
|
const pipe = await require("./renderToStream").render(options);
|
|
@@ -4,25 +4,20 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.buildShellAfterTemplate = buildShellAfterTemplate;
|
|
7
|
-
|
|
8
7
|
var _serializeJavascript = _interopRequireDefault(require("serialize-javascript"));
|
|
9
|
-
|
|
10
8
|
var _buildTemplate = require("./buildTemplate.share");
|
|
11
|
-
|
|
12
9
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
13
|
-
|
|
14
10
|
function buildShellAfterTemplate(afterAppTemplate, options) {
|
|
15
11
|
const callbacks = [injectSSRDataScript];
|
|
16
12
|
return (0, _buildTemplate.buildTemplate)(afterAppTemplate, callbacks);
|
|
17
|
-
|
|
18
13
|
function injectSSRDataScript(template) {
|
|
19
14
|
const ssrDataScript = buildSSRDataScript();
|
|
20
15
|
return template.replace('<!--<?- SSRDataScript ?>-->', ssrDataScript);
|
|
21
|
-
|
|
22
16
|
function buildSSRDataScript() {
|
|
23
17
|
const {
|
|
24
|
-
ssrContext
|
|
25
|
-
|
|
18
|
+
ssrContext,
|
|
19
|
+
renderLevel
|
|
20
|
+
} = options;
|
|
26
21
|
const {
|
|
27
22
|
request
|
|
28
23
|
} = ssrContext;
|
|
@@ -37,7 +32,8 @@ function buildShellAfterTemplate(afterAppTemplate, options) {
|
|
|
37
32
|
headers: request.headers,
|
|
38
33
|
cookieMap: request.cookieMap
|
|
39
34
|
}
|
|
40
|
-
}
|
|
35
|
+
},
|
|
36
|
+
renderLevel
|
|
41
37
|
};
|
|
42
38
|
return `
|
|
43
39
|
<script>window._SSR_DATA = ${(0, _serializeJavascript.default)(SSRData, {
|
|
@@ -8,7 +8,6 @@ exports.buildTemplate = buildTemplate;
|
|
|
8
8
|
// share script
|
|
9
9
|
const HEAD_REG_EXP = /<head(.|\n)*>(.|\n)*<\/head>/;
|
|
10
10
|
exports.HEAD_REG_EXP = HEAD_REG_EXP;
|
|
11
|
-
|
|
12
11
|
function buildTemplate(template, callbacks) {
|
|
13
12
|
return callbacks.reduce((template, buildTemplateCb) => buildTemplateCb(template), template);
|
|
14
13
|
}
|
|
@@ -4,34 +4,62 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.buildShellBeforeTemplate = buildShellBeforeTemplate;
|
|
7
|
-
|
|
8
7
|
var _reactHelmet = _interopRequireDefault(require("react-helmet"));
|
|
9
|
-
|
|
8
|
+
var _reactRouterDom = require("react-router-dom");
|
|
10
9
|
var _helmet = _interopRequireDefault(require("../helmet"));
|
|
11
|
-
|
|
12
10
|
var _buildTemplate = require("./buildTemplate.share");
|
|
13
|
-
|
|
14
11
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
12
|
+
const CSS_CHUNKS_PLACEHOLDER = '<!--<?- chunksMap.css ?>-->';
|
|
15
13
|
|
|
16
14
|
// build head template
|
|
17
|
-
function getHeadTemplate(beforeEntryTemplate) {
|
|
15
|
+
function getHeadTemplate(beforeEntryTemplate, context) {
|
|
18
16
|
const callbacks = [headTemplate => {
|
|
19
17
|
const helmetData = _reactHelmet.default.renderStatic();
|
|
20
|
-
|
|
21
18
|
return helmetData ? (0, _helmet.default)(headTemplate, helmetData) : headTemplate;
|
|
22
|
-
}
|
|
19
|
+
},
|
|
20
|
+
// @TODO: prefetch scripts of lazy component
|
|
21
|
+
injectCss];
|
|
23
22
|
const [headTemplate = ''] = beforeEntryTemplate.match(_buildTemplate.HEAD_REG_EXP) || [];
|
|
24
|
-
|
|
25
23
|
if (!headTemplate.length) {
|
|
26
24
|
return '';
|
|
27
25
|
}
|
|
26
|
+
return (0, _buildTemplate.buildTemplate)(headTemplate, callbacks);
|
|
27
|
+
function injectCss(headTemplate) {
|
|
28
|
+
return headTemplate.replace(CSS_CHUNKS_PLACEHOLDER, getCssChunks());
|
|
29
|
+
function getCssChunks() {
|
|
30
|
+
const {
|
|
31
|
+
routeManifest,
|
|
32
|
+
routerContext,
|
|
33
|
+
routes
|
|
34
|
+
} = context;
|
|
35
|
+
if (!routeManifest || !routerContext || !routes) {
|
|
36
|
+
return '';
|
|
37
|
+
}
|
|
38
|
+
const {
|
|
39
|
+
routeAssets
|
|
40
|
+
} = routeManifest;
|
|
41
|
+
const cssChunks = [];
|
|
42
|
+
const matches = (0, _reactRouterDom.matchRoutes)(routes, routerContext.location);
|
|
43
|
+
matches === null || matches === void 0 ? void 0 : matches.forEach(match => {
|
|
44
|
+
const routeId = match.route.id;
|
|
45
|
+
if (routeId) {
|
|
46
|
+
const {
|
|
47
|
+
assets = []
|
|
48
|
+
} = routeAssets[routeId];
|
|
49
|
+
const _cssChunks = assets.filter(asset => asset === null || asset === void 0 ? void 0 : asset.endsWith('.css'));
|
|
50
|
+
cssChunks.push(..._cssChunks);
|
|
51
|
+
}
|
|
52
|
+
});
|
|
53
|
+
const styleLinks = cssChunks.map(chunk => {
|
|
54
|
+
return `<link href="${chunk}" rel="stylesheet" />`;
|
|
55
|
+
});
|
|
56
|
+
return `${styleLinks.join('')}`;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
28
60
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
function buildShellBeforeTemplate(beforeAppTemplate) {
|
|
35
|
-
const headTemplate = getHeadTemplate(beforeAppTemplate);
|
|
61
|
+
// build script
|
|
62
|
+
function buildShellBeforeTemplate(beforeAppTemplate, context) {
|
|
63
|
+
const headTemplate = getHeadTemplate(beforeAppTemplate, context);
|
|
36
64
|
return beforeAppTemplate.replace(_buildTemplate.HEAD_REG_EXP, headTemplate);
|
|
37
65
|
}
|
|
@@ -4,21 +4,12 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.render = void 0;
|
|
7
|
-
|
|
8
7
|
var _react = require("react");
|
|
9
|
-
|
|
10
8
|
var _ssr = require("@modern-js/utils/ssr");
|
|
11
|
-
|
|
12
9
|
var _prerender = require("../../react/prerender");
|
|
13
|
-
|
|
14
10
|
var _utils = require("../utils");
|
|
15
|
-
|
|
16
|
-
var _template = require("./template");
|
|
17
|
-
|
|
18
11
|
var _renderToPipe = _interopRequireDefault(require("./renderToPipe"));
|
|
19
|
-
|
|
20
12
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
21
|
-
|
|
22
13
|
const render = ({
|
|
23
14
|
App,
|
|
24
15
|
context
|
|
@@ -26,65 +17,32 @@ const render = ({
|
|
|
26
17
|
const {
|
|
27
18
|
ssrContext
|
|
28
19
|
} = context;
|
|
29
|
-
|
|
30
20
|
if (!ssrContext) {
|
|
31
21
|
throw new Error('The "ssrContext" must not be undefined, but received undefined');
|
|
32
22
|
}
|
|
33
|
-
|
|
34
23
|
return (0, _ssr.run)(ssrContext.request.headers, async () => {
|
|
35
|
-
const
|
|
24
|
+
const end = (0, _utils.time)();
|
|
36
25
|
const rootElement = /*#__PURE__*/(0, _react.createElement)(App, {
|
|
37
26
|
context: Object.assign(context || {}, {
|
|
38
27
|
ssr: true
|
|
39
28
|
})
|
|
40
29
|
});
|
|
41
|
-
const
|
|
42
|
-
const end = (0, _utils.time)();
|
|
43
|
-
const pipe = (0, _renderToPipe.default)(rootElement, getTemplates, {
|
|
30
|
+
const pipe = (0, _renderToPipe.default)(rootElement, context, {
|
|
44
31
|
onShellReady() {
|
|
45
32
|
// set cacheConfig
|
|
46
33
|
const cacheConfig = _prerender.PreRender.config();
|
|
47
|
-
|
|
48
34
|
if (cacheConfig) {
|
|
49
|
-
|
|
35
|
+
ssrContext.cacheConfig = cacheConfig;
|
|
50
36
|
}
|
|
51
37
|
},
|
|
52
|
-
|
|
53
38
|
onAllReady() {
|
|
54
|
-
//
|
|
39
|
+
// calculate streaming ssr cost
|
|
55
40
|
const cost = end();
|
|
56
41
|
ssrContext.logger.debug('App Render To HTML cost = %d ms', cost);
|
|
57
|
-
ssrContext.metrics.emitTimer('app.render.html.cost', cost);
|
|
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);
|
|
42
|
+
ssrContext.metrics.emitTimer('app.render.html.cost', cost);
|
|
62
43
|
}
|
|
63
|
-
|
|
64
44
|
});
|
|
65
45
|
return pipe;
|
|
66
|
-
});
|
|
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
|
-
}
|
|
46
|
+
});
|
|
88
47
|
};
|
|
89
|
-
|
|
90
48
|
exports.render = render;
|
|
@@ -4,9 +4,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.getLoadableChunks = getLoadableChunks;
|
|
7
|
-
|
|
8
7
|
var _server = require("@loadable/server");
|
|
9
|
-
|
|
10
8
|
function getLoadableChunks({
|
|
11
9
|
context,
|
|
12
10
|
jsx
|
|
@@ -15,13 +13,11 @@ function getLoadableChunks({
|
|
|
15
13
|
loadableStats,
|
|
16
14
|
entryName
|
|
17
15
|
} = context.ssrContext;
|
|
18
|
-
|
|
19
16
|
if (!loadableStats) {
|
|
20
17
|
return {
|
|
21
18
|
jsx
|
|
22
19
|
};
|
|
23
20
|
}
|
|
24
|
-
|
|
25
21
|
const extractor = new _server.ChunkExtractor({
|
|
26
22
|
stats: loadableStats,
|
|
27
23
|
entrypoints: [entryName]
|
|
@@ -4,20 +4,18 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
|
-
|
|
8
7
|
var _stream = require("stream");
|
|
9
|
-
|
|
10
8
|
var _server = require("react-dom/server");
|
|
11
|
-
|
|
9
|
+
var _types = require("../types");
|
|
10
|
+
var _template = require("./template");
|
|
12
11
|
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
12
|
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
13
|
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) {
|
|
14
|
+
function renderToPipe(rootElement, context, options) {
|
|
19
15
|
let isShellStream = true;
|
|
20
|
-
|
|
16
|
+
const {
|
|
17
|
+
ssrContext
|
|
18
|
+
} = context;
|
|
21
19
|
const forUserPipe = stream => {
|
|
22
20
|
return new Promise(resolve => {
|
|
23
21
|
const {
|
|
@@ -25,12 +23,11 @@ function renderToPipe(rootElement, getTemplates, options) {
|
|
|
25
23
|
} = (0, _server.renderToPipeableStream)(rootElement, _objectSpread(_objectSpread({}, options), {}, {
|
|
26
24
|
onShellReady() {
|
|
27
25
|
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
26
|
const {
|
|
31
27
|
shellAfter,
|
|
32
28
|
shellBefore
|
|
33
|
-
} = getTemplates();
|
|
29
|
+
} = (0, _template.getTemplates)(context, _types.RenderLevel.SERVER_RENDER);
|
|
30
|
+
options === null || options === void 0 ? void 0 : (_options$onShellReady = options.onShellReady) === null || _options$onShellReady === void 0 ? void 0 : _options$onShellReady.call(options);
|
|
34
31
|
const injectableTransform = new _stream.Transform({
|
|
35
32
|
transform(chunk, _encoding, callback) {
|
|
36
33
|
try {
|
|
@@ -40,7 +37,6 @@ function renderToPipe(rootElement, getTemplates, options) {
|
|
|
40
37
|
} else {
|
|
41
38
|
this.push(chunk);
|
|
42
39
|
}
|
|
43
|
-
|
|
44
40
|
callback();
|
|
45
41
|
} catch (e) {
|
|
46
42
|
if (e instanceof Error) {
|
|
@@ -50,21 +46,34 @@ function renderToPipe(rootElement, getTemplates, options) {
|
|
|
50
46
|
}
|
|
51
47
|
}
|
|
52
48
|
}
|
|
53
|
-
|
|
54
49
|
});
|
|
55
50
|
resolve(pipe(injectableTransform).pipe(stream));
|
|
51
|
+
},
|
|
52
|
+
onShellError(error) {
|
|
53
|
+
var _options$onShellError;
|
|
54
|
+
// Don't log error in `onShellError` callback, since it has been logged in `onError` callback
|
|
55
|
+
ssrContext.metrics.emitCounter('app.render.streaming.shell.error', 1);
|
|
56
|
+
const {
|
|
57
|
+
shellAfter,
|
|
58
|
+
shellBefore
|
|
59
|
+
} = (0, _template.getTemplates)(context, _types.RenderLevel.CLIENT_RENDER);
|
|
60
|
+
const fallbackHtml = `${shellBefore}${shellAfter}`;
|
|
61
|
+
resolve(fallbackHtml);
|
|
62
|
+
options === null || options === void 0 ? void 0 : (_options$onShellError = options.onShellError) === null || _options$onShellError === void 0 ? void 0 : _options$onShellError.call(options, error);
|
|
63
|
+
},
|
|
64
|
+
onError(error) {
|
|
65
|
+
var _options$onError;
|
|
66
|
+
ssrContext.logger.error('An error occurs during streaming SSR', error);
|
|
67
|
+
ssrContext.metrics.emitCounter('app.render.streaming.error', 1);
|
|
68
|
+
options === null || options === void 0 ? void 0 : (_options$onError = options.onError) === null || _options$onError === void 0 ? void 0 : _options$onError.call(options, error);
|
|
56
69
|
}
|
|
57
|
-
|
|
58
70
|
}));
|
|
59
71
|
});
|
|
60
72
|
};
|
|
61
|
-
|
|
62
73
|
return forUserPipe;
|
|
63
|
-
|
|
64
74
|
function joinChunk(before = '', chunk, after = '') {
|
|
65
75
|
return `${before}${chunk.toString()}${after}`;
|
|
66
76
|
}
|
|
67
77
|
}
|
|
68
|
-
|
|
69
78
|
var _default = renderToPipe;
|
|
70
79
|
exports.default = _default;
|