@modern-js/runtime 1.21.5 → 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 +117 -18
- 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 +47 -48
- package/dist/js/modern/core/index.js +4 -3
- 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 +2 -1
- package/dist/js/modern/router/cli/index.js +20 -20
- package/dist/js/modern/router/runtime/index.js +1 -1
- package/dist/js/modern/router/runtime/plugin.js +25 -52
- package/dist/js/modern/router/runtime/plugin.node.js +137 -0
- 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/types.js +1 -0
- package/dist/js/modern/router/runtime/utils.js +99 -58
- package/dist/js/modern/router/runtime/withRouter.js +20 -0
- package/dist/js/modern/runtime-context.js +2 -1
- package/dist/js/modern/ssr/cli/index.js +35 -17
- package/dist/js/modern/ssr/index.js +64 -51
- package/dist/js/modern/ssr/index.node.js +6 -15
- 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 +12 -27
- 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 +58 -0
- package/dist/js/modern/ssr/serverRender/renderToStream/index.js +40 -0
- package/dist/js/modern/ssr/serverRender/renderToStream/loadable.js +24 -0
- package/dist/js/modern/ssr/serverRender/renderToStream/renderToPipe.js +72 -0
- package/dist/js/modern/ssr/serverRender/renderToStream/styledComponent.js +11 -0
- package/dist/js/modern/ssr/serverRender/renderToStream/template.js +18 -0
- package/dist/js/modern/ssr/serverRender/renderToStream/type.js +0 -0
- package/dist/js/modern/ssr/serverRender/{entry.js → renderToString/entry.js} +6 -40
- package/dist/js/modern/ssr/serverRender/renderToString/index.js +29 -0
- package/dist/js/modern/ssr/serverRender/{loadable.js → renderToString/loadable.js} +2 -24
- package/dist/js/modern/ssr/serverRender/{reduce.js → renderToString/reduce.js} +0 -2
- 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 -15
- package/dist/js/modern/ssr/serverRender/{type.js → renderToString/type.js} +0 -2
- package/dist/js/modern/ssr/serverRender/types.js +2 -0
- package/dist/js/modern/ssr/serverRender/utils.js +20 -0
- package/dist/js/modern/ssr/utils.js +8 -13
- 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 +47 -66
- package/dist/js/node/core/index.js +8 -17
- 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 +5 -5
- package/dist/js/node/router/cli/index.js +20 -24
- 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 +4 -9
- package/dist/js/node/router/runtime/plugin.js +23 -65
- package/dist/js/node/router/runtime/plugin.node.js +147 -0
- 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/types.js +5 -0
- package/dist/js/node/router/runtime/utils.js +101 -67
- package/dist/js/node/router/runtime/withRouter.js +26 -0
- package/dist/js/node/runtime-context.js +4 -4
- package/dist/js/node/ssr/cli/index.js +35 -21
- package/dist/js/node/ssr/index.js +63 -62
- package/dist/js/node/ssr/index.node.js +6 -25
- 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 +14 -39
- package/dist/js/node/ssr/serverRender/renderToStream/buildTemplate.after.js +45 -0
- package/dist/js/node/ssr/serverRender/renderToStream/buildTemplate.share.js +13 -0
- package/dist/js/node/ssr/serverRender/renderToStream/bulidTemplate.before.js +65 -0
- package/dist/js/node/ssr/serverRender/renderToStream/index.js +48 -0
- package/dist/js/node/ssr/serverRender/renderToStream/loadable.js +30 -0
- package/dist/js/node/ssr/serverRender/renderToStream/renderToPipe.js +79 -0
- package/dist/js/node/ssr/serverRender/renderToStream/styledComponent.js +17 -0
- package/dist/js/node/ssr/serverRender/renderToStream/template.js +25 -0
- package/dist/js/node/ssr/serverRender/renderToStream/type.js +0 -0
- package/dist/js/node/ssr/serverRender/{entry.js → renderToString/entry.js} +13 -64
- package/dist/js/node/ssr/serverRender/renderToString/index.js +37 -0
- package/dist/js/node/ssr/serverRender/{loadable.js → renderToString/loadable.js} +3 -28
- package/dist/js/node/ssr/serverRender/{reduce.js → renderToString/reduce.js} +0 -3
- package/dist/js/node/ssr/serverRender/{styledComponent.js → renderToString/styledComponent.js} +0 -3
- package/dist/js/node/ssr/serverRender/{template.js → renderToString/template.js} +0 -18
- package/dist/js/node/ssr/serverRender/{type.js → renderToString/type.js} +0 -2
- package/dist/js/node/ssr/serverRender/types.js +12 -0
- package/dist/js/node/ssr/serverRender/utils.js +28 -0
- package/dist/js/node/ssr/utils.js +10 -21
- 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 +50 -65
- package/dist/js/treeshaking/core/index.js +4 -3
- 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 +2 -1
- package/dist/js/treeshaking/router/cli/index.js +26 -22
- package/dist/js/treeshaking/router/runtime/index.js +1 -1
- package/dist/js/treeshaking/router/runtime/plugin.js +28 -54
- package/dist/js/treeshaking/router/runtime/plugin.node.js +161 -0
- 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/types.js +1 -0
- package/dist/js/treeshaking/router/runtime/utils.js +104 -58
- package/dist/js/treeshaking/router/runtime/withRouter.js +18 -0
- package/dist/js/treeshaking/runtime-context.js +2 -1
- package/dist/js/treeshaking/ssr/cli/index.js +43 -23
- package/dist/js/treeshaking/ssr/index.js +74 -59
- package/dist/js/treeshaking/ssr/index.node.js +18 -31
- 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 +33 -55
- package/dist/js/treeshaking/ssr/serverRender/renderToStream/buildTemplate.after.js +32 -0
- package/dist/js/treeshaking/ssr/serverRender/renderToStream/buildTemplate.share.js +7 -0
- package/dist/js/treeshaking/ssr/serverRender/renderToStream/bulidTemplate.before.js +60 -0
- package/dist/js/treeshaking/ssr/serverRender/renderToStream/index.js +50 -0
- package/dist/js/treeshaking/ssr/serverRender/renderToStream/loadable.js +22 -0
- package/dist/js/treeshaking/ssr/serverRender/renderToStream/renderToPipe.js +68 -0
- package/dist/js/treeshaking/ssr/serverRender/renderToStream/styledComponent.js +10 -0
- package/dist/js/treeshaking/ssr/serverRender/renderToStream/template.js +22 -0
- package/dist/js/treeshaking/ssr/serverRender/renderToStream/type.js +0 -0
- package/dist/js/treeshaking/ssr/serverRender/{entry.js → renderToString/entry.js} +23 -76
- package/dist/js/treeshaking/ssr/serverRender/renderToString/index.js +44 -0
- package/dist/js/treeshaking/ssr/serverRender/{loadable.js → renderToString/loadable.js} +7 -34
- package/dist/js/treeshaking/ssr/serverRender/{reduce.js → renderToString/reduce.js} +0 -2
- package/dist/js/treeshaking/ssr/serverRender/{styledComponent.js → renderToString/styledComponent.js} +0 -0
- package/dist/js/treeshaking/ssr/serverRender/{template.js → renderToString/template.js} +2 -18
- package/dist/js/treeshaking/ssr/serverRender/{type.js → renderToString/type.js} +0 -2
- package/dist/js/treeshaking/ssr/serverRender/types.js +2 -0
- package/dist/js/treeshaking/ssr/serverRender/utils.js +28 -0
- package/dist/js/treeshaking/ssr/utils.js +20 -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/common.d.ts +0 -2
- package/dist/types/core/compatible.d.ts +2 -2
- package/dist/types/core/index.d.ts +2 -2
- 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 +2 -14
- 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 +21 -1
- package/dist/types/index.d.ts +2 -1
- package/dist/types/router/cli/index.d.ts +0 -2
- 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/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 +36 -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 +3 -1
- package/dist/types/ssr/cli/index.d.ts +0 -2
- package/dist/types/ssr/index.d.ts +2 -2
- package/dist/types/ssr/index.node.d.ts +1 -1
- package/dist/types/ssr/prefetch.d.ts +2 -2
- 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 +7 -0
- package/dist/types/ssr/serverRender/renderToStream/buildTemplate.share.d.ts +3 -0
- package/dist/types/ssr/serverRender/renderToStream/bulidTemplate.before.d.ts +2 -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 +15 -0
- package/dist/types/ssr/serverRender/utils.d.ts +3 -0
- package/dist/types/ssr/utils.d.ts +4 -2
- package/dist/types/state/cli/index.d.ts +0 -2
- package/dist/types/state/runtime/plugin.d.ts +1 -1
- package/dist/types/state/types.d.ts +0 -1
- package/package.json +63 -71
- 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/js/treeshaking/ssr/serverRender/measure.js +0 -17
- package/dist/types/ssr/serverRender/measure.d.ts +0 -1
- package/lib/types.d.ts +0 -10
- package/type.d.ts +0 -5
|
@@ -3,12 +3,11 @@ import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
|
|
|
3
3
|
import _asyncToGenerator from "@babel/runtime/helpers/esm/asyncToGenerator";
|
|
4
4
|
import { loadableReady } from '@loadable/component';
|
|
5
5
|
import hoistNonReactStatics from 'hoist-non-react-statics';
|
|
6
|
-
import { RenderLevel } from "./serverRender/
|
|
6
|
+
import { RenderLevel } from "./serverRender/types";
|
|
7
7
|
import { WithCallback } from "./react/withCallback";
|
|
8
|
-
import { formatClient, mockResponse } from "./utils";
|
|
8
|
+
import { formatClient, mockResponse, isReact18 } from "./utils";
|
|
9
9
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
10
|
-
var
|
|
11
|
-
export var ssr = function ssr(_) {
|
|
10
|
+
export var ssr = function ssr(config) {
|
|
12
11
|
return {
|
|
13
12
|
name: '@modern-js/plugin-ssr',
|
|
14
13
|
setup: function setup() {
|
|
@@ -17,78 +16,98 @@ export var ssr = function ssr(_) {
|
|
|
17
16
|
client: function () {
|
|
18
17
|
var _client = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(_ref) {
|
|
19
18
|
var _window, _window$_SSR_DATA;
|
|
20
|
-
|
|
21
|
-
var App, context, ModernRender, ModernHydrate, renderLevel;
|
|
19
|
+
var App, context, ModernRender, ModernHydrate, hydrateContext, callback, renderLevel, stringSSRHydrate, streamSSRHydrate;
|
|
22
20
|
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
23
21
|
while (1) {
|
|
24
22
|
switch (_context.prev = _context.next) {
|
|
25
23
|
case 0:
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
});
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
24
|
+
streamSSRHydrate = function _streamSSRHydrate() {
|
|
25
|
+
if (renderLevel === RenderLevel.SERVER_RENDER) {
|
|
26
|
+
// callback: https://github.com/reactwg/react-18/discussions/5
|
|
27
|
+
var SSRApp = function SSRApp() {
|
|
28
|
+
return /*#__PURE__*/_jsx(WithCallback, {
|
|
29
|
+
callback: callback,
|
|
30
|
+
children: /*#__PURE__*/_jsx(App, {
|
|
31
|
+
context: hydrateContext
|
|
32
|
+
})
|
|
33
|
+
});
|
|
34
|
+
};
|
|
35
|
+
SSRApp = hoistNonReactStatics(SSRApp, App);
|
|
36
|
+
ModernHydrate( /*#__PURE__*/_jsx(SSRApp, {}));
|
|
37
|
+
} else {
|
|
38
|
+
ModernRender( /*#__PURE__*/_jsx(App, {
|
|
39
|
+
context: context
|
|
40
|
+
}));
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
stringSSRHydrate = function _stringSSRHydrate() {
|
|
44
|
+
// client render and server prefetch use same logic
|
|
45
|
+
if (renderLevel === RenderLevel.CLIENT_RENDER || renderLevel === RenderLevel.SERVER_PREFETCH) {
|
|
46
|
+
ModernRender( /*#__PURE__*/_jsx(App, {
|
|
47
|
+
context: context
|
|
48
|
+
}));
|
|
49
|
+
} else if (renderLevel === RenderLevel.SERVER_RENDER) {
|
|
50
|
+
if (isReact18()) {
|
|
51
|
+
loadableReady(function () {
|
|
52
|
+
// callback: https://github.com/reactwg/react-18/discussions/5
|
|
53
|
+
var SSRApp = function SSRApp() {
|
|
54
|
+
return /*#__PURE__*/_jsx(WithCallback, {
|
|
55
|
+
callback: callback,
|
|
56
|
+
children: /*#__PURE__*/_jsx(App, {
|
|
57
|
+
context: hydrateContext
|
|
58
|
+
})
|
|
59
|
+
});
|
|
60
|
+
};
|
|
61
|
+
SSRApp = hoistNonReactStatics(SSRApp, App);
|
|
62
|
+
ModernHydrate( /*#__PURE__*/_jsx(SSRApp, {}));
|
|
63
|
+
});
|
|
58
64
|
} else {
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
65
|
+
loadableReady(function () {
|
|
66
|
+
ModernHydrate( /*#__PURE__*/_jsx(App, {
|
|
67
|
+
context: hydrateContext
|
|
68
|
+
}), callback);
|
|
69
|
+
});
|
|
62
70
|
}
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
}
|
|
71
|
+
} else {
|
|
72
|
+
// unknown renderlevel or renderlevel is server prefetch.
|
|
73
|
+
console.warn("unknow render level: ".concat(renderLevel, ", execute render()"));
|
|
74
|
+
ModernRender( /*#__PURE__*/_jsx(App, {
|
|
75
|
+
context: context
|
|
76
|
+
}));
|
|
77
|
+
}
|
|
78
|
+
};
|
|
79
|
+
App = _ref.App, context = _ref.context, ModernRender = _ref.ModernRender, ModernHydrate = _ref.ModernHydrate;
|
|
80
|
+
hydrateContext = _objectSpread(_objectSpread({}, context), {}, {
|
|
81
|
+
_hydration: true
|
|
82
|
+
});
|
|
83
|
+
callback = function callback() {
|
|
84
|
+
// won't cause component re-render because context's reference identity doesn't change
|
|
85
|
+
delete hydrateContext._hydration;
|
|
86
|
+
}; // if render level not exist, use client render
|
|
87
|
+
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) || RenderLevel.CLIENT_RENDER; // react streamSSR hydrate
|
|
88
|
+
if (!(isReact18() && config.mode === 'stream')) {
|
|
89
|
+
_context.next = 8;
|
|
90
|
+
break;
|
|
70
91
|
}
|
|
71
|
-
|
|
72
|
-
case
|
|
92
|
+
return _context.abrupt("return", streamSSRHydrate());
|
|
93
|
+
case 8:
|
|
94
|
+
return _context.abrupt("return", stringSSRHydrate());
|
|
95
|
+
case 9:
|
|
73
96
|
case "end":
|
|
74
97
|
return _context.stop();
|
|
75
98
|
}
|
|
76
99
|
}
|
|
77
100
|
}, _callee);
|
|
78
101
|
}));
|
|
79
|
-
|
|
80
102
|
function client(_x) {
|
|
81
103
|
return _client.apply(this, arguments);
|
|
82
104
|
}
|
|
83
|
-
|
|
84
105
|
return client;
|
|
85
106
|
}(),
|
|
86
107
|
init: function init(_ref2, next) {
|
|
87
108
|
var _window2, _window2$_SSR_DATA, _window2$_SSR_DATA$co;
|
|
88
|
-
|
|
89
109
|
var context = _ref2.context;
|
|
90
110
|
var request = (_window2 = window) === null || _window2 === void 0 ? void 0 : (_window2$_SSR_DATA = _window2._SSR_DATA) === null || _window2$_SSR_DATA === void 0 ? void 0 : (_window2$_SSR_DATA$co = _window2$_SSR_DATA.context) === null || _window2$_SSR_DATA$co === void 0 ? void 0 : _window2$_SSR_DATA$co.request;
|
|
91
|
-
|
|
92
111
|
if (!request) {
|
|
93
112
|
context.ssrContext = _objectSpread(_objectSpread({}, context.ssrContext), {}, {
|
|
94
113
|
response: mockResp,
|
|
@@ -98,7 +117,6 @@ export var ssr = function ssr(_) {
|
|
|
98
117
|
context: context
|
|
99
118
|
});
|
|
100
119
|
}
|
|
101
|
-
|
|
102
120
|
context.ssrContext.response = mockResp;
|
|
103
121
|
context.ssrContext.request = formatClient(request);
|
|
104
122
|
return next({
|
|
@@ -107,12 +125,10 @@ export var ssr = function ssr(_) {
|
|
|
107
125
|
},
|
|
108
126
|
pickContext: function pickContext(_ref3, next) {
|
|
109
127
|
var _window3, _window3$_SSR_DATA, _window3$_SSR_DATA$co;
|
|
110
|
-
|
|
111
128
|
var context = _ref3.context,
|
|
112
|
-
|
|
129
|
+
pickedContext = _ref3.pickedContext;
|
|
113
130
|
var request = (_window3 = window) === null || _window3 === void 0 ? void 0 : (_window3$_SSR_DATA = _window3._SSR_DATA) === null || _window3$_SSR_DATA === void 0 ? void 0 : (_window3$_SSR_DATA$co = _window3$_SSR_DATA.context) === null || _window3$_SSR_DATA$co === void 0 ? void 0 : _window3$_SSR_DATA$co.request;
|
|
114
131
|
var initialData = context.initialData;
|
|
115
|
-
|
|
116
132
|
if (!request) {
|
|
117
133
|
return next({
|
|
118
134
|
context: context,
|
|
@@ -121,7 +137,6 @@ export var ssr = function ssr(_) {
|
|
|
121
137
|
})
|
|
122
138
|
});
|
|
123
139
|
}
|
|
124
|
-
|
|
125
140
|
return next({
|
|
126
141
|
context: context,
|
|
127
142
|
pickedContext: _objectSpread(_objectSpread({}, pickedContext), {}, {
|
|
@@ -1,11 +1,8 @@
|
|
|
1
1
|
import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
|
|
2
2
|
import _regeneratorRuntime from "@babel/runtime/helpers/esm/regeneratorRuntime";
|
|
3
3
|
import _asyncToGenerator from "@babel/runtime/helpers/esm/asyncToGenerator";
|
|
4
|
-
import { registerPrefetch } from "../core";
|
|
5
|
-
import { render } from "./serverRender";
|
|
6
|
-
import prefetch from "./prefetch";
|
|
7
4
|
import { formatServer } from "./utils";
|
|
8
|
-
|
|
5
|
+
import render from "./serverRender";
|
|
9
6
|
export var ssr = function ssr() {
|
|
10
7
|
var config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
11
8
|
return {
|
|
@@ -15,44 +12,36 @@ export var ssr = function ssr() {
|
|
|
15
12
|
server: function () {
|
|
16
13
|
var _server = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(_ref) {
|
|
17
14
|
var App, context, html;
|
|
18
|
-
return _regeneratorRuntime().wrap(function _callee$(
|
|
15
|
+
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
19
16
|
while (1) {
|
|
20
|
-
switch (
|
|
17
|
+
switch (_context.prev = _context.next) {
|
|
21
18
|
case 0:
|
|
22
19
|
App = _ref.App, context = _ref.context;
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
case 4:
|
|
35
|
-
html = _context2.sent;
|
|
36
|
-
return _context2.abrupt("return", html);
|
|
37
|
-
|
|
38
|
-
case 6:
|
|
20
|
+
_context.next = 3;
|
|
21
|
+
return render({
|
|
22
|
+
context: context,
|
|
23
|
+
App: App,
|
|
24
|
+
config: config
|
|
25
|
+
});
|
|
26
|
+
case 3:
|
|
27
|
+
html = _context.sent;
|
|
28
|
+
return _context.abrupt("return", html);
|
|
29
|
+
case 5:
|
|
39
30
|
case "end":
|
|
40
|
-
return
|
|
31
|
+
return _context.stop();
|
|
41
32
|
}
|
|
42
33
|
}
|
|
43
34
|
}, _callee);
|
|
44
35
|
}));
|
|
45
|
-
|
|
46
36
|
function server(_x) {
|
|
47
37
|
return _server.apply(this, arguments);
|
|
48
38
|
}
|
|
49
|
-
|
|
50
39
|
return server;
|
|
51
40
|
}(),
|
|
52
41
|
init: function init(_ref2, next) {
|
|
53
42
|
var context = _ref2.context;
|
|
54
43
|
var _ref3 = context.ssrContext,
|
|
55
|
-
|
|
44
|
+
request = _ref3.request;
|
|
56
45
|
context.ssrContext.request = formatServer(request);
|
|
57
46
|
return next({
|
|
58
47
|
context: context
|
|
@@ -60,13 +49,11 @@ export var ssr = function ssr() {
|
|
|
60
49
|
},
|
|
61
50
|
pickContext: function pickContext(_ref4, next) {
|
|
62
51
|
var context = _ref4.context,
|
|
63
|
-
|
|
64
|
-
|
|
52
|
+
pickedContext = _ref4.pickedContext;
|
|
65
53
|
// eslint-disable-next-line @typescript-eslint/no-non-null-asserted-optional-chain
|
|
66
54
|
var _ref5 = context === null || context === void 0 ? void 0 : context.ssrContext,
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
55
|
+
request = _ref5.request,
|
|
56
|
+
response = _ref5.response;
|
|
70
57
|
var initialData = context.initialData;
|
|
71
58
|
return next({
|
|
72
59
|
context: context,
|
|
@@ -4,7 +4,6 @@ import { renderToStaticMarkup } from 'react-dom/server';
|
|
|
4
4
|
import { run } from '@modern-js/utils/ssr';
|
|
5
5
|
import { ChunkExtractor } from '@loadable/server';
|
|
6
6
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
7
|
-
|
|
8
7
|
// todo: SSRContext
|
|
9
8
|
var prefetch = /*#__PURE__*/function () {
|
|
10
9
|
var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2(App, context) {
|
|
@@ -14,16 +13,13 @@ var prefetch = /*#__PURE__*/function () {
|
|
|
14
13
|
case 0:
|
|
15
14
|
return _context2.abrupt("return", run(context.ssrContext.request.headers, /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
|
|
16
15
|
var _context$store;
|
|
17
|
-
|
|
18
16
|
var ssrContext, _ref3, loadableStats, extractor, loadersData;
|
|
19
|
-
|
|
20
17
|
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
21
18
|
while (1) {
|
|
22
19
|
switch (_context.prev = _context.next) {
|
|
23
20
|
case 0:
|
|
24
21
|
ssrContext = context.ssrContext;
|
|
25
22
|
_ref3 = ssrContext, loadableStats = _ref3.loadableStats;
|
|
26
|
-
|
|
27
23
|
if (loadableStats) {
|
|
28
24
|
extractor = new ChunkExtractor({
|
|
29
25
|
stats: loadableStats,
|
|
@@ -37,26 +33,21 @@ var prefetch = /*#__PURE__*/function () {
|
|
|
37
33
|
context: context
|
|
38
34
|
}));
|
|
39
35
|
}
|
|
40
|
-
|
|
41
36
|
if (context.loaderManager.hasPendingLoaders()) {
|
|
42
37
|
_context.next = 5;
|
|
43
38
|
break;
|
|
44
39
|
}
|
|
45
|
-
|
|
46
40
|
return _context.abrupt("return", {
|
|
47
41
|
initialData: context.initialData,
|
|
48
42
|
i18nData: context.__i18nData__
|
|
49
43
|
});
|
|
50
|
-
|
|
51
44
|
case 5:
|
|
52
45
|
_context.next = 7;
|
|
53
46
|
return context.loaderManager.awaitPendingLoaders();
|
|
54
|
-
|
|
55
47
|
case 7:
|
|
56
48
|
loadersData = _context.sent;
|
|
57
49
|
Object.keys(loadersData).forEach(function (id) {
|
|
58
50
|
var data = loadersData[id];
|
|
59
|
-
|
|
60
51
|
if (data._error) {
|
|
61
52
|
ssrContext.logger.error('App Prefetch Loader', data._error);
|
|
62
53
|
ssrContext.metrics.emitCounter('app.prefetch.loader.error', 1);
|
|
@@ -70,7 +61,6 @@ var prefetch = /*#__PURE__*/function () {
|
|
|
70
61
|
// todo: move to plugin state
|
|
71
62
|
storeState: context === null || context === void 0 ? void 0 : (_context$store = context.store) === null || _context$store === void 0 ? void 0 : _context$store.getState()
|
|
72
63
|
});
|
|
73
|
-
|
|
74
64
|
case 10:
|
|
75
65
|
case "end":
|
|
76
66
|
return _context.stop();
|
|
@@ -78,7 +68,6 @@ var prefetch = /*#__PURE__*/function () {
|
|
|
78
68
|
}
|
|
79
69
|
}, _callee);
|
|
80
70
|
}))));
|
|
81
|
-
|
|
82
71
|
case 1:
|
|
83
72
|
case "end":
|
|
84
73
|
return _context2.stop();
|
|
@@ -86,10 +75,8 @@ var prefetch = /*#__PURE__*/function () {
|
|
|
86
75
|
}
|
|
87
76
|
}, _callee2);
|
|
88
77
|
}));
|
|
89
|
-
|
|
90
78
|
return function prefetch(_x, _x2) {
|
|
91
79
|
return _ref.apply(this, arguments);
|
|
92
80
|
};
|
|
93
81
|
}();
|
|
94
|
-
|
|
95
82
|
export default prefetch;
|
|
@@ -3,10 +3,9 @@ import React, { useEffect, useState } from 'react';
|
|
|
3
3
|
var csr = false;
|
|
4
4
|
export var NoSSR = function NoSSR(props) {
|
|
5
5
|
var _useState = useState(csr),
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
6
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
7
|
+
isMounted = _useState2[0],
|
|
8
|
+
setMounted = _useState2[1];
|
|
10
9
|
useEffect(function () {
|
|
11
10
|
csr = true;
|
|
12
11
|
setMounted(true);
|
|
@@ -16,10 +16,9 @@ var PROP_NAMES = {
|
|
|
16
16
|
FALLBACK: 'fallback',
|
|
17
17
|
MATCHES: 'matches'
|
|
18
18
|
};
|
|
19
|
-
|
|
20
|
-
|
|
19
|
+
var handleClientStateChange = function handleClientStateChange() {
|
|
20
|
+
// not used
|
|
21
21
|
};
|
|
22
|
-
|
|
23
22
|
var mapStateOnServer = function mapStateOnServer(reduceProps) {
|
|
24
23
|
var defaultProps = {
|
|
25
24
|
interval: 10,
|
|
@@ -34,15 +33,12 @@ var mapStateOnServer = function mapStateOnServer(reduceProps) {
|
|
|
34
33
|
var propKey = key;
|
|
35
34
|
var reduceProp = reduceProps[propKey];
|
|
36
35
|
var nextProps = props;
|
|
37
|
-
|
|
38
36
|
if (exist(reduceProp)) {
|
|
39
37
|
nextProps = _objectSpread(_objectSpread({}, props), {}, _defineProperty({}, propKey, reduceProp));
|
|
40
38
|
}
|
|
41
|
-
|
|
42
39
|
return nextProps;
|
|
43
40
|
}, defaultProps);
|
|
44
41
|
};
|
|
45
|
-
|
|
46
42
|
var reducePropsToState = function reducePropsToState(propsList) {
|
|
47
43
|
var reduceProps = {
|
|
48
44
|
interval: getOutermostProperty(propsList, PROP_NAMES.INTERVAL),
|
|
@@ -55,19 +51,14 @@ var reducePropsToState = function reducePropsToState(propsList) {
|
|
|
55
51
|
};
|
|
56
52
|
return reduceProps;
|
|
57
53
|
};
|
|
58
|
-
|
|
59
54
|
function factory(Component) {
|
|
60
55
|
var Spr = /*#__PURE__*/function (_React$Component) {
|
|
61
56
|
_inherits(Spr, _React$Component);
|
|
62
|
-
|
|
63
57
|
var _super = _createSuper(Spr);
|
|
64
|
-
|
|
65
58
|
function Spr() {
|
|
66
59
|
_classCallCheck(this, Spr);
|
|
67
|
-
|
|
68
60
|
return _super.apply(this, arguments);
|
|
69
61
|
}
|
|
70
|
-
|
|
71
62
|
_createClass(Spr, [{
|
|
72
63
|
key: "verify",
|
|
73
64
|
value: function verify() {
|
|
@@ -77,13 +68,10 @@ function factory(Component) {
|
|
|
77
68
|
key: "render",
|
|
78
69
|
value: function render() {
|
|
79
70
|
var newProps = _objectSpread({}, this.props);
|
|
80
|
-
|
|
81
71
|
var validate = this.verify();
|
|
82
|
-
|
|
83
72
|
if (!validate) {
|
|
84
73
|
throw new Error('invalid props, check usage');
|
|
85
74
|
}
|
|
86
|
-
|
|
87
75
|
return /*#__PURE__*/createElement(Component, _objectSpread({}, newProps));
|
|
88
76
|
}
|
|
89
77
|
}], [{
|
|
@@ -95,25 +83,18 @@ function factory(Component) {
|
|
|
95
83
|
Component.canUseDOM = canUseDOM;
|
|
96
84
|
}
|
|
97
85
|
}]);
|
|
98
|
-
|
|
99
86
|
return Spr;
|
|
100
87
|
}(React.Component);
|
|
101
|
-
|
|
102
88
|
_defineProperty(Spr, "peek", Component.peek);
|
|
103
|
-
|
|
104
89
|
_defineProperty(Spr, "rewind", Component.rewind);
|
|
105
|
-
|
|
106
90
|
_defineProperty(Spr, "config", function () {
|
|
107
91
|
var mappedState = Component.rewind();
|
|
108
92
|
return mappedState;
|
|
109
93
|
});
|
|
110
|
-
|
|
111
94
|
return Spr;
|
|
112
95
|
}
|
|
113
|
-
|
|
114
96
|
var NullComponent = function NullComponent() {
|
|
115
97
|
return null;
|
|
116
98
|
};
|
|
117
|
-
|
|
118
99
|
var SprSideEffects = withSideEffect(reducePropsToState, handleClientStateChange, mapStateOnServer)(NullComponent);
|
|
119
100
|
export var PreRender = factory(SprSideEffects);
|
|
@@ -3,22 +3,18 @@ var REQUEST_META = ['header', 'query'];
|
|
|
3
3
|
export var getInnermostProperty = function getInnermostProperty(propsList, propName) {
|
|
4
4
|
for (var i = propsList.length - 1; i >= 0; i--) {
|
|
5
5
|
var props = propsList[i];
|
|
6
|
-
|
|
7
6
|
if (props.hasOwnProperty(propName)) {
|
|
8
7
|
return props[propName];
|
|
9
8
|
}
|
|
10
9
|
}
|
|
11
|
-
|
|
12
10
|
return null;
|
|
13
11
|
};
|
|
14
12
|
export var getOutermostProperty = function getOutermostProperty(propsList, propName) {
|
|
15
13
|
var _iterator = _createForOfIteratorHelper(propsList),
|
|
16
|
-
|
|
17
|
-
|
|
14
|
+
_step;
|
|
18
15
|
try {
|
|
19
16
|
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
20
17
|
var props = _step.value;
|
|
21
|
-
|
|
22
18
|
if (props.hasOwnProperty(propName)) {
|
|
23
19
|
return props[propName];
|
|
24
20
|
}
|
|
@@ -28,7 +24,6 @@ export var getOutermostProperty = function getOutermostProperty(propsList, propN
|
|
|
28
24
|
} finally {
|
|
29
25
|
_iterator.f();
|
|
30
26
|
}
|
|
31
|
-
|
|
32
27
|
return null;
|
|
33
28
|
};
|
|
34
29
|
export var aggKeysFromPropsList = function aggKeysFromPropsList(propsList, propName) {
|
|
@@ -42,7 +37,6 @@ export var aggKeysFromPropsList = function aggKeysFromPropsList(propsList, propN
|
|
|
42
37
|
}).reduce(function (result, next) {
|
|
43
38
|
REQUEST_META.forEach(function (key) {
|
|
44
39
|
var prop = next[propName];
|
|
45
|
-
|
|
46
40
|
if (prop !== null && prop !== void 0 && prop.hasOwnProperty(key) && usefulArray(prop[key])) {
|
|
47
41
|
result[key] = unique(result[key].concat(prop[key]));
|
|
48
42
|
}
|
|
@@ -51,13 +45,10 @@ export var aggKeysFromPropsList = function aggKeysFromPropsList(propsList, propN
|
|
|
51
45
|
}, initResult);
|
|
52
46
|
return REQUEST_META.reduce(function (result, next) {
|
|
53
47
|
var _result$key;
|
|
54
|
-
|
|
55
48
|
var key = next;
|
|
56
|
-
|
|
57
49
|
if (result[key] && ((_result$key = result[key]) === null || _result$key === void 0 ? void 0 : _result$key.length) === 0) {
|
|
58
50
|
delete result[key];
|
|
59
51
|
}
|
|
60
|
-
|
|
61
52
|
return result;
|
|
62
53
|
}, res);
|
|
63
54
|
};
|
|
@@ -71,8 +62,8 @@ export var aggMatchesFromPropsList = function aggMatchesFromPropsList(propsList,
|
|
|
71
62
|
return usefulObject(props[propName]);
|
|
72
63
|
}).reduce(function (result, next) {
|
|
73
64
|
REQUEST_META.forEach(function (key) {
|
|
74
|
-
var prop = next[propName];
|
|
75
|
-
|
|
65
|
+
var prop = next[propName];
|
|
66
|
+
// 这边目前是浅拷贝,越后渲染优先级越高
|
|
76
67
|
if (prop !== null && prop !== void 0 && prop.hasOwnProperty(key) && usefulObject(prop[key])) {
|
|
77
68
|
result[key] = Object.assign(result[key], prop[key]);
|
|
78
69
|
}
|
|
@@ -81,35 +72,27 @@ export var aggMatchesFromPropsList = function aggMatchesFromPropsList(propsList,
|
|
|
81
72
|
}, initResult);
|
|
82
73
|
return REQUEST_META.reduce(function (result, next) {
|
|
83
74
|
var key = next;
|
|
84
|
-
|
|
85
75
|
if (result[key] && Object.keys(result[key]).length === 0) {
|
|
86
76
|
delete result[key];
|
|
87
77
|
}
|
|
88
|
-
|
|
89
78
|
return result;
|
|
90
79
|
}, res);
|
|
91
80
|
};
|
|
92
|
-
|
|
93
81
|
function unique(arr) {
|
|
94
82
|
return Array.from(new Set(arr));
|
|
95
83
|
}
|
|
96
|
-
|
|
97
84
|
function usefulObject(target) {
|
|
98
85
|
if (!exist(target)) {
|
|
99
86
|
return false;
|
|
100
87
|
}
|
|
101
|
-
|
|
102
88
|
return target.constructor === Object && Object.keys(target).length > 0;
|
|
103
89
|
}
|
|
104
|
-
|
|
105
90
|
function usefulArray(target) {
|
|
106
91
|
if (!exist(target)) {
|
|
107
92
|
return false;
|
|
108
93
|
}
|
|
109
|
-
|
|
110
94
|
return Array.isArray(target) && target.length > 0;
|
|
111
95
|
}
|
|
112
|
-
|
|
113
96
|
export function exist(target) {
|
|
114
97
|
return target != null;
|
|
115
98
|
}
|
|
@@ -2,13 +2,12 @@
|
|
|
2
2
|
import { useRef, useLayoutEffect } from 'react';
|
|
3
3
|
export var WithCallback = function WithCallback(_ref) {
|
|
4
4
|
var callback = _ref.callback,
|
|
5
|
-
|
|
5
|
+
children = _ref.children;
|
|
6
6
|
var once = useRef(false);
|
|
7
7
|
useLayoutEffect(function () {
|
|
8
8
|
if (once.current) {
|
|
9
9
|
return;
|
|
10
10
|
}
|
|
11
|
-
|
|
12
11
|
once.current = true;
|
|
13
12
|
callback();
|
|
14
13
|
}, [callback]);
|
|
@@ -1,37 +1,38 @@
|
|
|
1
1
|
// 用于 react-helmet 正则替换
|
|
2
|
+
import { EOL } from 'os';
|
|
2
3
|
var RE_HTML_ATTR = /<html[^>]*>/;
|
|
3
4
|
var RE_BODY_ATTR = /<body[^>]*>/;
|
|
4
5
|
var RE_LAST_IN_HEAD = /<\/head>/;
|
|
5
6
|
var RE_TITLE = /<title[^>]*>([\s\S\n\r]*?)<\/title>/;
|
|
6
|
-
var TEST_TITLE_CONTENT = /(?<=<title[^>]*>)([\s\S\n\r]*?)([.|\S])([\s\S\n\r]*?)(?=<\/title>)/;
|
|
7
|
+
var TEST_TITLE_CONTENT = /(?<=<title[^>]*>)([\s\S\n\r]*?)([.|\S])([\s\S\n\r]*?)(?=<\/title>)/;
|
|
7
8
|
|
|
9
|
+
// 通过 react-helmet 修改模板
|
|
8
10
|
export default function helmet(content, helmetData) {
|
|
9
11
|
var result = content;
|
|
10
12
|
var bodyAttributes = helmetData.bodyAttributes.toString();
|
|
11
|
-
|
|
12
13
|
if (bodyAttributes) {
|
|
13
14
|
result = result.replace(RE_BODY_ATTR, "<body ".concat(bodyAttributes, ">"));
|
|
14
15
|
}
|
|
15
|
-
|
|
16
16
|
var htmlAttributes = helmetData.htmlAttributes.toString();
|
|
17
|
-
|
|
18
17
|
if (htmlAttributes) {
|
|
19
18
|
result = result.replace(RE_HTML_ATTR, "<html ".concat(htmlAttributes, ">"));
|
|
20
19
|
}
|
|
21
|
-
|
|
22
20
|
var base = helmetData.base.toString();
|
|
23
21
|
var link = helmetData.link.toString();
|
|
24
22
|
var meta = helmetData.meta.toString();
|
|
25
23
|
var noscript = helmetData.noscript.toString();
|
|
26
24
|
var script = helmetData.script.toString();
|
|
27
25
|
var style = helmetData.style.toString();
|
|
28
|
-
var title = helmetData.title.toString();
|
|
29
|
-
|
|
30
|
-
var existTitle = RE_TITLE.test(content);
|
|
26
|
+
var title = helmetData.title.toString();
|
|
31
27
|
|
|
32
|
-
|
|
28
|
+
// 如果模板中存在 title,且 helmetData title 有内容则做替换
|
|
29
|
+
var existTitleTag = RE_TITLE.test(content);
|
|
30
|
+
var shouldReplaceTitle = existTitleTag && TEST_TITLE_CONTENT.test(title.trim());
|
|
31
|
+
if (shouldReplaceTitle) {
|
|
33
32
|
result = result.replace(RE_TITLE, title);
|
|
34
33
|
}
|
|
35
|
-
|
|
36
|
-
|
|
34
|
+
var helmetStr = [base, link, meta, noscript, script, style, !existTitleTag ? title : ''].reduce(function (pre, cur) {
|
|
35
|
+
return pre + (cur.length > 0 ? " ".concat(cur).concat(EOL) : '');
|
|
36
|
+
}, '');
|
|
37
|
+
return result.replace(RE_LAST_IN_HEAD, "".concat(helmetStr, "</head>"));
|
|
37
38
|
}
|