@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
|
@@ -4,11 +4,12 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.getLocation = getLocation;
|
|
7
|
+
exports.getRouteComponents = getRouteComponents;
|
|
7
8
|
exports.renderRoutes = renderRoutes;
|
|
8
9
|
exports.standardSlash = standardSlash;
|
|
9
10
|
exports.urlJoin = void 0;
|
|
10
11
|
|
|
11
|
-
var _react =
|
|
12
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
12
13
|
|
|
13
14
|
var _reactRouterDom = require("react-router-dom");
|
|
14
15
|
|
|
@@ -18,7 +19,13 @@ var _jsxRuntime = require("react/jsx-runtime");
|
|
|
18
19
|
|
|
19
20
|
const _excluded = ["Component"];
|
|
20
21
|
|
|
21
|
-
function
|
|
22
|
+
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); }
|
|
23
|
+
|
|
24
|
+
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; }
|
|
25
|
+
|
|
26
|
+
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
|
|
27
|
+
|
|
28
|
+
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
|
|
22
29
|
|
|
23
30
|
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; }
|
|
24
31
|
|
|
@@ -26,18 +33,65 @@ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { va
|
|
|
26
33
|
|
|
27
34
|
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; }
|
|
28
35
|
|
|
29
|
-
|
|
36
|
+
const renderNestedRoute = (nestedRoute, parent) => {
|
|
37
|
+
const {
|
|
38
|
+
children,
|
|
39
|
+
index,
|
|
40
|
+
id,
|
|
41
|
+
component: Component
|
|
42
|
+
} = nestedRoute;
|
|
43
|
+
const childElements = children === null || children === void 0 ? void 0 : children.map(childRoute => {
|
|
44
|
+
return renderNestedRoute(childRoute, nestedRoute);
|
|
45
|
+
});
|
|
46
|
+
const routeProps = {
|
|
47
|
+
caseSensitive: nestedRoute.caseSensitive,
|
|
48
|
+
path: nestedRoute.path,
|
|
49
|
+
id: nestedRoute.id,
|
|
50
|
+
loader: nestedRoute.loader,
|
|
51
|
+
action: nestedRoute.action,
|
|
52
|
+
hasErrorBoundary: nestedRoute.hasErrorBoundary,
|
|
53
|
+
shouldRevalidate: nestedRoute.shouldRevalidate,
|
|
54
|
+
handle: nestedRoute.handle,
|
|
55
|
+
index: nestedRoute.index,
|
|
56
|
+
errorElement: nestedRoute.errorElement
|
|
57
|
+
};
|
|
30
58
|
|
|
31
|
-
|
|
59
|
+
if (nestedRoute.error) {
|
|
60
|
+
const errorElement = /*#__PURE__*/(0, _jsxRuntime.jsx)(nestedRoute.error, {});
|
|
61
|
+
routeProps.errorElement = errorElement;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
if (Component) {
|
|
65
|
+
if (parent !== null && parent !== void 0 && parent.loading) {
|
|
66
|
+
const Loading = parent.loading;
|
|
67
|
+
routeProps.element = /*#__PURE__*/(0, _jsxRuntime.jsx)(_react.Suspense, {
|
|
68
|
+
fallback: /*#__PURE__*/(0, _jsxRuntime.jsx)(Loading, {}),
|
|
69
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(Component, {})
|
|
70
|
+
});
|
|
71
|
+
} else {
|
|
72
|
+
routeProps.element = /*#__PURE__*/(0, _jsxRuntime.jsx)(_react.Suspense, {
|
|
73
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(Component, {})
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
}
|
|
32
77
|
|
|
33
|
-
|
|
78
|
+
const routeElement = index ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactRouterDom.Route, _objectSpread(_objectSpread({}, routeProps), {}, {
|
|
79
|
+
index: true
|
|
80
|
+
}), id) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactRouterDom.Route, _objectSpread(_objectSpread({}, routeProps), {}, {
|
|
81
|
+
index: false,
|
|
82
|
+
children: childElements
|
|
83
|
+
}), id);
|
|
84
|
+
return routeElement;
|
|
85
|
+
};
|
|
86
|
+
|
|
87
|
+
function getRouteComponents(routes, globalApp) {
|
|
34
88
|
const Layout = _ref => {
|
|
35
89
|
let {
|
|
36
90
|
Component
|
|
37
91
|
} = _ref,
|
|
38
92
|
props = _objectWithoutProperties(_ref, _excluded);
|
|
39
93
|
|
|
40
|
-
const GlobalLayout =
|
|
94
|
+
const GlobalLayout = globalApp;
|
|
41
95
|
|
|
42
96
|
if (!GlobalLayout) {
|
|
43
97
|
return /*#__PURE__*/(0, _jsxRuntime.jsx)(Component, _objectSpread({}, props));
|
|
@@ -48,38 +102,46 @@ function renderRoutes(routesConfig, extraProps = {}) {
|
|
|
48
102
|
}, props));
|
|
49
103
|
};
|
|
50
104
|
|
|
51
|
-
const
|
|
52
|
-
var _routesConfig$routes;
|
|
105
|
+
const routeElements = [];
|
|
53
106
|
|
|
54
|
-
|
|
55
|
-
|
|
107
|
+
for (const route of routes) {
|
|
108
|
+
if (route.type === 'nested') {
|
|
109
|
+
const routeElement = renderNestedRoute(route);
|
|
110
|
+
routeElements.push(routeElement);
|
|
111
|
+
} else {
|
|
112
|
+
const routeElement = /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactRouterDom.Route, {
|
|
56
113
|
path: route.path,
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
};
|
|
63
|
-
|
|
64
|
-
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactRouterDom.Route, {
|
|
65
|
-
path: "/",
|
|
66
|
-
render: props => {
|
|
67
|
-
const matchedRoute = findMatchedRoute(props.location.pathname);
|
|
68
|
-
|
|
69
|
-
if (!matchedRoute) {
|
|
70
|
-
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_DefaultNotFound.DefaultNotFound, {});
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactRouterDom.Route, {
|
|
74
|
-
path: matchedRoute.path,
|
|
75
|
-
exact: matchedRoute.exact,
|
|
76
|
-
sensitive: matchedRoute.sensitive,
|
|
77
|
-
render: routeProps => /*#__PURE__*/(0, _jsxRuntime.jsx)(Layout, _objectSpread(_objectSpread({
|
|
78
|
-
Component: matchedRoute.component
|
|
79
|
-
}, routeProps), extraProps))
|
|
80
|
-
});
|
|
114
|
+
element: /*#__PURE__*/(0, _jsxRuntime.jsx)(Layout, {
|
|
115
|
+
Component: route.component
|
|
116
|
+
})
|
|
117
|
+
}, route.path);
|
|
118
|
+
routeElements.push(routeElement);
|
|
81
119
|
}
|
|
82
|
-
}
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
routeElements.push( /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactRouterDom.Route, {
|
|
123
|
+
path: "*",
|
|
124
|
+
element: /*#__PURE__*/(0, _jsxRuntime.jsx)(_DefaultNotFound.DefaultNotFound, {})
|
|
125
|
+
}, "*"));
|
|
126
|
+
return routeElements;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
function renderRoutes(routesConfig) {
|
|
130
|
+
if (!routesConfig) {
|
|
131
|
+
return null;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
const {
|
|
135
|
+
routes,
|
|
136
|
+
globalApp
|
|
137
|
+
} = routesConfig;
|
|
138
|
+
|
|
139
|
+
if (!routes) {
|
|
140
|
+
return null;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
const routeElements = getRouteComponents(routes, globalApp);
|
|
144
|
+
return routeElements;
|
|
83
145
|
}
|
|
84
146
|
|
|
85
147
|
function getLocation(serverContext) {
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.withRouter = void 0;
|
|
7
|
+
|
|
8
|
+
var _react = _interopRequireDefault(require("react"));
|
|
9
|
+
|
|
10
|
+
var _reactRouterDom = require("react-router-dom");
|
|
11
|
+
|
|
12
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
13
|
+
|
|
14
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
15
|
+
|
|
16
|
+
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; }
|
|
17
|
+
|
|
18
|
+
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; }
|
|
19
|
+
|
|
20
|
+
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; }
|
|
21
|
+
|
|
22
|
+
const withRouter = Component => {
|
|
23
|
+
return props => {
|
|
24
|
+
const location = (0, _reactRouterDom.useLocation)();
|
|
25
|
+
const params = (0, _reactRouterDom.useParams)();
|
|
26
|
+
const navigate = (0, _reactRouterDom.useNavigate)();
|
|
27
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(Component, _objectSpread(_objectSpread({}, props), {}, {
|
|
28
|
+
location: location,
|
|
29
|
+
params: params,
|
|
30
|
+
navigate: navigate
|
|
31
|
+
}));
|
|
32
|
+
};
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
exports.withRouter = withRouter;
|
|
@@ -3,9 +3,11 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.RuntimeReactContext = void 0;
|
|
6
|
+
exports.ServerRouterContext = exports.RuntimeReactContext = void 0;
|
|
7
7
|
|
|
8
8
|
var _react = require("react");
|
|
9
9
|
|
|
10
10
|
const RuntimeReactContext = /*#__PURE__*/(0, _react.createContext)({});
|
|
11
|
-
exports.RuntimeReactContext = RuntimeReactContext;
|
|
11
|
+
exports.RuntimeReactContext = RuntimeReactContext;
|
|
12
|
+
const ServerRouterContext = /*#__PURE__*/(0, _react.createContext)({});
|
|
13
|
+
exports.ServerRouterContext = ServerRouterContext;
|
|
@@ -9,6 +9,28 @@ var _utils = require("@modern-js/utils");
|
|
|
9
9
|
|
|
10
10
|
const PLUGIN_IDENTIFIER = 'ssr';
|
|
11
11
|
|
|
12
|
+
const hasStringSSREntry = userConfig => {
|
|
13
|
+
const isStreaming = ssr => ssr && typeof ssr === 'object' && ssr.mode === 'stream';
|
|
14
|
+
|
|
15
|
+
const {
|
|
16
|
+
server
|
|
17
|
+
} = userConfig;
|
|
18
|
+
|
|
19
|
+
if (server !== null && server !== void 0 && server.ssr && !isStreaming(server.ssr)) {
|
|
20
|
+
return true;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
if (server !== null && server !== void 0 && server.ssrByEntries && typeof server.ssrByEntries === 'object') {
|
|
24
|
+
for (const name of Object.keys(server.ssrByEntries)) {
|
|
25
|
+
if (!isStreaming(server.ssrByEntries[name])) {
|
|
26
|
+
return true;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
return false;
|
|
32
|
+
};
|
|
33
|
+
|
|
12
34
|
var _default = () => ({
|
|
13
35
|
name: '@modern-js/plugin-ssr',
|
|
14
36
|
required: ['@modern-js/runtime'],
|
|
@@ -32,9 +54,9 @@ var _default = () => ({
|
|
|
32
54
|
}) => {
|
|
33
55
|
const userConfig = api.useResolvedConfigContext();
|
|
34
56
|
|
|
35
|
-
if ((0, _utils.isUseSSRBundle)(userConfig) && name !== 'server') {
|
|
57
|
+
if ((0, _utils.isUseSSRBundle)(userConfig) && name !== 'server' && hasStringSSREntry(userConfig)) {
|
|
36
58
|
// eslint-disable-next-line @typescript-eslint/no-require-imports, @typescript-eslint/no-var-requires
|
|
37
|
-
const LoadableWebpackPlugin = require('@
|
|
59
|
+
const LoadableWebpackPlugin = require('@loadable/webpack-plugin');
|
|
38
60
|
|
|
39
61
|
chain.plugin(CHAIN_ID.PLUGIN.LOADABLE).use(LoadableWebpackPlugin, [{
|
|
40
62
|
filename: _utils.LOADABLE_STATS_FILE
|
|
@@ -44,7 +66,7 @@ var _default = () => ({
|
|
|
44
66
|
babel: config => {
|
|
45
67
|
const userConfig = api.useResolvedConfigContext();
|
|
46
68
|
|
|
47
|
-
if ((0, _utils.isUseSSRBundle)(userConfig)) {
|
|
69
|
+
if ((0, _utils.isUseSSRBundle)(userConfig) && hasStringSSREntry(userConfig)) {
|
|
48
70
|
config.plugins.push(require.resolve('@loadable/babel-plugin'));
|
|
49
71
|
}
|
|
50
72
|
}
|
|
@@ -57,7 +79,8 @@ var _default = () => ({
|
|
|
57
79
|
imports
|
|
58
80
|
}) {
|
|
59
81
|
const {
|
|
60
|
-
entryName
|
|
82
|
+
entryName,
|
|
83
|
+
fileSystemRoutes
|
|
61
84
|
} = entrypoint;
|
|
62
85
|
const userConfig = api.useResolvedConfigContext();
|
|
63
86
|
const {
|
|
@@ -67,6 +90,21 @@ var _default = () => ({
|
|
|
67
90
|
pluginsExportsUtils.addExport(`export { default as ssr } from '@modern-js/runtime/ssr'`); // if use ssg then set ssr config to true
|
|
68
91
|
|
|
69
92
|
const ssrConfig = (0, _utils.getEntryOptions)(entryName, userConfig.server.ssr, userConfig.server.ssrByEntries, packageName);
|
|
93
|
+
|
|
94
|
+
if (typeof ssrConfig === 'object' && ssrConfig.mode === 'stream') {
|
|
95
|
+
var _runtimeConfig$router;
|
|
96
|
+
|
|
97
|
+
const runtimeConfig = (0, _utils.getEntryOptions)(entryName, userConfig.runtime, userConfig.runtimeByEntries, packageName);
|
|
98
|
+
|
|
99
|
+
if (runtimeConfig !== null && runtimeConfig !== void 0 && (_runtimeConfig$router = runtimeConfig.router) !== null && _runtimeConfig$router !== void 0 && _runtimeConfig$router.legacy) {
|
|
100
|
+
throw new Error(`Legacy router plugin doesn't support streaming SSR, check your config 'runtime.router'`);
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
if (fileSystemRoutes && !entrypoint.nestedRoutesEntry) {
|
|
104
|
+
throw new Error(`You should switch to file-system based router to support streaming SSR.`);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
|
|
70
108
|
const ssgConfig = userConfig.output.ssg;
|
|
71
109
|
const useSSG = (0, _utils.isSingleEntry)(entrypoints) ? Boolean(ssgConfig) : ssgConfig === true || typeof (ssgConfig === null || ssgConfig === void 0 ? void 0 : ssgConfig[0]) === 'function' || Boolean(ssgConfig === null || ssgConfig === void 0 ? void 0 : ssgConfig[entryName]);
|
|
72
110
|
ssrConfigMap.set(entryName, ssrConfig || useSSG);
|
|
@@ -93,7 +131,7 @@ var _default = () => ({
|
|
|
93
131
|
if (ssrConfigMap.get(entrypoint.entryName)) {
|
|
94
132
|
plugins.push({
|
|
95
133
|
name: PLUGIN_IDENTIFIER,
|
|
96
|
-
options: ssrConfigMap.get(entrypoint.entryName)
|
|
134
|
+
options: JSON.stringify(ssrConfigMap.get(entrypoint.entryName))
|
|
97
135
|
});
|
|
98
136
|
}
|
|
99
137
|
|
|
@@ -12,7 +12,7 @@ var _component = require("@loadable/component");
|
|
|
12
12
|
|
|
13
13
|
var _hoistNonReactStatics = _interopRequireDefault(require("hoist-non-react-statics"));
|
|
14
14
|
|
|
15
|
-
var
|
|
15
|
+
var _types = require("./serverRender/types");
|
|
16
16
|
|
|
17
17
|
var _withCallback = require("./react/withCallback");
|
|
18
18
|
|
|
@@ -42,9 +42,7 @@ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { va
|
|
|
42
42
|
|
|
43
43
|
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; }
|
|
44
44
|
|
|
45
|
-
const
|
|
46
|
-
|
|
47
|
-
const ssr = _ => ({
|
|
45
|
+
const ssr = config => ({
|
|
48
46
|
name: '@modern-js/plugin-ssr',
|
|
49
47
|
setup: () => {
|
|
50
48
|
const mockResp = (0, _utils.mockResponse)();
|
|
@@ -55,49 +53,74 @@ const ssr = _ => ({
|
|
|
55
53
|
ModernRender,
|
|
56
54
|
ModernHydrate
|
|
57
55
|
}) => {
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
if (IS_REACT18) {
|
|
80
|
-
let SSRApp = () => /*#__PURE__*/(0, _jsxRuntime.jsx)(_withCallback.WithCallback, {
|
|
81
|
-
callback: callback,
|
|
82
|
-
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(App, {
|
|
83
|
-
context: hydrateContext
|
|
84
|
-
})
|
|
85
|
-
});
|
|
56
|
+
const hydrateContext = _objectSpread(_objectSpread({}, context), {}, {
|
|
57
|
+
_hydration: true
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
const callback = () => {
|
|
61
|
+
// won't cause component re-render because context's reference identity doesn't change
|
|
62
|
+
delete hydrateContext._hydration;
|
|
63
|
+
}; // react streamSSR hydrate
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
if ((0, _utils.isReact18)() && config.mode === 'stream') {
|
|
67
|
+
return streamSSRHydrate();
|
|
68
|
+
} // react stringSSR hydrate
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
return stringSSRHydrate();
|
|
72
|
+
|
|
73
|
+
function stringSSRHydrate() {
|
|
74
|
+
var _window, _window$_SSR_DATA;
|
|
86
75
|
|
|
87
|
-
|
|
88
|
-
|
|
76
|
+
// if render level not exist, use client render
|
|
77
|
+
const renderLevel = ((_window = window) === null || _window === void 0 ? void 0 : (_window$_SSR_DATA = _window._SSR_DATA) === null || _window$_SSR_DATA === void 0 ? void 0 : _window$_SSR_DATA.renderLevel) || _types.RenderLevel.CLIENT_RENDER; // client render and server prefetch use same logic
|
|
78
|
+
|
|
79
|
+
if (renderLevel === _types.RenderLevel.CLIENT_RENDER || renderLevel === _types.RenderLevel.SERVER_PREFETCH) {
|
|
80
|
+
ModernRender( /*#__PURE__*/(0, _jsxRuntime.jsx)(App, {
|
|
81
|
+
context: context
|
|
82
|
+
}));
|
|
83
|
+
} else if (renderLevel === _types.RenderLevel.SERVER_RENDER) {
|
|
84
|
+
if ((0, _utils.isReact18)()) {
|
|
85
|
+
(0, _component.loadableReady)(() => {
|
|
86
|
+
// callback: https://github.com/reactwg/react-18/discussions/5
|
|
87
|
+
let SSRApp = () => /*#__PURE__*/(0, _jsxRuntime.jsx)(_withCallback.WithCallback, {
|
|
88
|
+
callback: callback,
|
|
89
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(App, {
|
|
90
|
+
context: hydrateContext
|
|
91
|
+
})
|
|
92
|
+
});
|
|
93
|
+
|
|
94
|
+
SSRApp = (0, _hoistNonReactStatics.default)(SSRApp, App);
|
|
95
|
+
ModernHydrate( /*#__PURE__*/(0, _jsxRuntime.jsx)(SSRApp, {}));
|
|
96
|
+
});
|
|
89
97
|
} else {
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
98
|
+
(0, _component.loadableReady)(() => {
|
|
99
|
+
ModernHydrate( /*#__PURE__*/(0, _jsxRuntime.jsx)(App, {
|
|
100
|
+
context: hydrateContext
|
|
101
|
+
}), callback);
|
|
102
|
+
});
|
|
93
103
|
}
|
|
104
|
+
} else {
|
|
105
|
+
// unknown renderlevel or renderlevel is server prefetch.
|
|
106
|
+
console.warn(`unknow render level: ${renderLevel}, execute render()`);
|
|
107
|
+
ModernRender( /*#__PURE__*/(0, _jsxRuntime.jsx)(App, {
|
|
108
|
+
context: context
|
|
109
|
+
}));
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
function streamSSRHydrate() {
|
|
114
|
+
// callback: https://github.com/reactwg/react-18/discussions/5
|
|
115
|
+
let SSRApp = () => /*#__PURE__*/(0, _jsxRuntime.jsx)(_withCallback.WithCallback, {
|
|
116
|
+
callback: callback,
|
|
117
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(App, {
|
|
118
|
+
context: hydrateContext
|
|
119
|
+
})
|
|
94
120
|
});
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
ModernRender( /*#__PURE__*/(0, _jsxRuntime.jsx)(App, {
|
|
99
|
-
context: context
|
|
100
|
-
}));
|
|
121
|
+
|
|
122
|
+
SSRApp = (0, _hoistNonReactStatics.default)(SSRApp, App);
|
|
123
|
+
ModernHydrate( /*#__PURE__*/(0, _jsxRuntime.jsx)(SSRApp, {}));
|
|
101
124
|
}
|
|
102
125
|
},
|
|
103
126
|
|
|
@@ -10,12 +10,12 @@ exports.ssr = exports.default = void 0;
|
|
|
10
10
|
|
|
11
11
|
var _core = require("../core");
|
|
12
12
|
|
|
13
|
-
var _serverRender = require("./serverRender");
|
|
14
|
-
|
|
15
13
|
var _prefetch = _interopRequireDefault(require("./prefetch"));
|
|
16
14
|
|
|
17
15
|
var _utils = require("./utils");
|
|
18
16
|
|
|
17
|
+
var _serverRender = _interopRequireDefault(require("./serverRender"));
|
|
18
|
+
|
|
19
19
|
var _react = require("./react");
|
|
20
20
|
|
|
21
21
|
Object.keys(_react).forEach(function (key) {
|
|
@@ -53,7 +53,11 @@ const ssr = (config = {}) => ({
|
|
|
53
53
|
registeredApps.add(App);
|
|
54
54
|
}
|
|
55
55
|
|
|
56
|
-
const html = await (0, _serverRender.
|
|
56
|
+
const html = await (0, _serverRender.default)({
|
|
57
|
+
context: context,
|
|
58
|
+
App: App,
|
|
59
|
+
config
|
|
60
|
+
});
|
|
57
61
|
return html;
|
|
58
62
|
},
|
|
59
63
|
|
|
@@ -3,43 +3,21 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.
|
|
6
|
+
exports.default = serverRender;
|
|
7
7
|
|
|
8
|
-
var
|
|
8
|
+
var _utils = require("../utils");
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
/* eslint-disable eslint-comments/disable-enable-pair */
|
|
11
11
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
var _measure = require("./measure");
|
|
15
|
-
|
|
16
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
17
|
-
|
|
18
|
-
const render = async (ctx, config, App) => {
|
|
19
|
-
const {
|
|
20
|
-
ssrContext
|
|
21
|
-
} = ctx;
|
|
22
|
-
return (0, _ssr.run)(ssrContext.request.headers, async () => {
|
|
23
|
-
const entry = new _entry.default({
|
|
24
|
-
ctx: ssrContext,
|
|
25
|
-
App,
|
|
26
|
-
config
|
|
27
|
-
});
|
|
28
|
-
entry.metrics.emitCounter('app.visit.count', 1);
|
|
29
|
-
const end = (0, _measure.time)();
|
|
30
|
-
const html = await entry.renderToHtml(ctx);
|
|
31
|
-
const cost = end();
|
|
32
|
-
entry.logger.info('App Render Total cost = %d ms', cost);
|
|
33
|
-
entry.metrics.emitTimer('app.render.cost', cost);
|
|
34
|
-
|
|
35
|
-
const cacheConfig = _prerender.PreRender.config();
|
|
36
|
-
|
|
37
|
-
if (cacheConfig) {
|
|
38
|
-
ctx.ssrContext.cacheConfig = cacheConfig;
|
|
39
|
-
}
|
|
12
|
+
/* eslint-disable @typescript-eslint/no-var-requires */
|
|
40
13
|
|
|
14
|
+
/* eslint-disable @typescript-eslint/no-require-imports */
|
|
15
|
+
async function serverRender(options) {
|
|
16
|
+
if ((0, _utils.isReact18)() && options.config.mode === 'stream') {
|
|
17
|
+
const pipe = await require("./renderToStream").render(options);
|
|
18
|
+
return pipe;
|
|
19
|
+
} else {
|
|
20
|
+
const html = await require("./renderToString").render(options);
|
|
41
21
|
return html;
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
exports.render = render;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.buildShellAfterTemplate = buildShellAfterTemplate;
|
|
7
|
+
|
|
8
|
+
var _serializeJavascript = _interopRequireDefault(require("serialize-javascript"));
|
|
9
|
+
|
|
10
|
+
var _buildTemplate = require("./buildTemplate.share");
|
|
11
|
+
|
|
12
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
13
|
+
|
|
14
|
+
function buildShellAfterTemplate(afterAppTemplate, options) {
|
|
15
|
+
const callbacks = [injectSSRDataScript];
|
|
16
|
+
return (0, _buildTemplate.buildTemplate)(afterAppTemplate, callbacks);
|
|
17
|
+
|
|
18
|
+
function injectSSRDataScript(template) {
|
|
19
|
+
const ssrDataScript = buildSSRDataScript();
|
|
20
|
+
return template.replace('<!--<?- SSRDataScript ?>-->', ssrDataScript);
|
|
21
|
+
|
|
22
|
+
function buildSSRDataScript() {
|
|
23
|
+
const {
|
|
24
|
+
ssrContext
|
|
25
|
+
} = options.context;
|
|
26
|
+
const {
|
|
27
|
+
request
|
|
28
|
+
} = ssrContext;
|
|
29
|
+
const SSRData = {
|
|
30
|
+
context: {
|
|
31
|
+
request: {
|
|
32
|
+
params: request.params,
|
|
33
|
+
query: request.query,
|
|
34
|
+
pathname: request.pathname,
|
|
35
|
+
host: request.host,
|
|
36
|
+
url: request.url,
|
|
37
|
+
headers: request.headers,
|
|
38
|
+
cookieMap: request.cookieMap
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
return `
|
|
43
|
+
<script>window._SSR_DATA = ${(0, _serializeJavascript.default)(SSRData, {
|
|
44
|
+
isJSON: true
|
|
45
|
+
})}</script>
|
|
46
|
+
`;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.HEAD_REG_EXP = void 0;
|
|
7
|
+
exports.buildTemplate = buildTemplate;
|
|
8
|
+
// share script
|
|
9
|
+
const HEAD_REG_EXP = /<head(.|\n)*>(.|\n)*<\/head>/;
|
|
10
|
+
exports.HEAD_REG_EXP = HEAD_REG_EXP;
|
|
11
|
+
|
|
12
|
+
function buildTemplate(template, callbacks) {
|
|
13
|
+
return callbacks.reduce((template, buildTemplateCb) => buildTemplateCb(template), template);
|
|
14
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.buildShellBeforeTemplate = buildShellBeforeTemplate;
|
|
7
|
+
|
|
8
|
+
var _reactHelmet = _interopRequireDefault(require("react-helmet"));
|
|
9
|
+
|
|
10
|
+
var _helmet = _interopRequireDefault(require("../helmet"));
|
|
11
|
+
|
|
12
|
+
var _buildTemplate = require("./buildTemplate.share");
|
|
13
|
+
|
|
14
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
15
|
+
|
|
16
|
+
// build head template
|
|
17
|
+
function getHeadTemplate(beforeEntryTemplate) {
|
|
18
|
+
const callbacks = [headTemplate => {
|
|
19
|
+
const helmetData = _reactHelmet.default.renderStatic();
|
|
20
|
+
|
|
21
|
+
return helmetData ? (0, _helmet.default)(headTemplate, helmetData) : headTemplate;
|
|
22
|
+
}];
|
|
23
|
+
const [headTemplate = ''] = beforeEntryTemplate.match(_buildTemplate.HEAD_REG_EXP) || [];
|
|
24
|
+
|
|
25
|
+
if (!headTemplate.length) {
|
|
26
|
+
return '';
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
return (0, _buildTemplate.buildTemplate)(headTemplate, callbacks); // @TODO: inject css chunks of lazy components
|
|
30
|
+
// @TODO: prefetch scripts of lazy component
|
|
31
|
+
} // build script
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
function buildShellBeforeTemplate(beforeAppTemplate) {
|
|
35
|
+
const headTemplate = getHeadTemplate(beforeAppTemplate);
|
|
36
|
+
return beforeAppTemplate.replace(_buildTemplate.HEAD_REG_EXP, headTemplate);
|
|
37
|
+
}
|