ssr-plugin-react 7.0.5 → 7.0.7
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 +317 -432
- package/README.md +105 -105
- package/cjs/entry/context.d.ts +1 -1
- package/cjs/entry/context.d.ts.map +1 -1
- package/cjs/entry/context.js +5 -5
- package/cjs/entry/context.js.map +1 -1
- package/cjs/entry/create.d.ts +2 -3
- package/cjs/entry/create.d.ts.map +1 -1
- package/cjs/entry/create.js +10 -5
- package/cjs/entry/create.js.map +1 -1
- package/cjs/entry/react17-client-entry.d.ts.map +1 -1
- package/cjs/entry/react17-client-entry.js +7 -8
- package/cjs/entry/react17-client-entry.js.map +1 -1
- package/cjs/entry/react18-client-entry.d.ts.map +1 -1
- package/cjs/entry/react18-client-entry.js +6 -8
- package/cjs/entry/react18-client-entry.js.map +1 -1
- package/cjs/entry/server-entry.d.ts +2 -2
- package/cjs/entry/server-entry.d.ts.map +1 -1
- package/cjs/entry/server-entry.js +42 -28
- package/cjs/entry/server-entry.js.map +1 -1
- package/cjs/index.js +9 -9
- package/cjs/index.js.map +1 -1
- package/esm/entry/context.d.ts +1 -1
- package/esm/entry/context.d.ts.map +1 -1
- package/esm/entry/context.js +7 -7
- package/esm/entry/context.js.map +1 -1
- package/esm/entry/create.d.ts +2 -3
- package/esm/entry/create.d.ts.map +1 -1
- package/esm/entry/create.js +16 -11
- package/esm/entry/create.js.map +1 -1
- package/esm/entry/react17-client-entry.d.ts.map +1 -1
- package/esm/entry/react17-client-entry.js +14 -15
- package/esm/entry/react17-client-entry.js.map +1 -1
- package/esm/entry/react18-client-entry.d.ts.map +1 -1
- package/esm/entry/react18-client-entry.js +13 -15
- package/esm/entry/react18-client-entry.js.map +1 -1
- package/esm/entry/server-entry.d.ts +2 -2
- package/esm/entry/server-entry.d.ts.map +1 -1
- package/esm/entry/server-entry.js +51 -37
- package/esm/entry/server-entry.js.map +1 -1
- package/esm/index.js +11 -11
- package/esm/index.js.map +1 -1
- package/package.json +31 -32
- package/src/entry/context.tsx +33 -29
- package/src/entry/create.ts +27 -24
- package/src/entry/react17-client-entry.tsx +66 -66
- package/src/entry/react18-client-entry.tsx +72 -72
- package/src/entry/server-entry.tsx +192 -141
- package/src/index.ts +38 -38
- package/tsconfig.cjs.json +2 -4
- package/tsconfig.esm.json +2 -4
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
import { PassThrough } from
|
|
2
|
-
import * as React from
|
|
3
|
-
import { createElement } from
|
|
4
|
-
import * as ReactDOMServer from
|
|
5
|
-
import { StaticRouter } from
|
|
6
|
-
import { findRoute, getManifest, logGreen, normalizePath, getAsyncCssChunk, getAsyncJsChunk, splitPageInfo, reactRefreshFragment, localStorageWrapper, checkRoute, useStore, isReact18, getClientEntry } from
|
|
7
|
-
import { serialize } from
|
|
8
|
-
import { AppContext } from
|
|
9
|
-
import { Routes, ssrCreateContext, createStore } from
|
|
1
|
+
import { PassThrough } from "stream";
|
|
2
|
+
import * as React from "react";
|
|
3
|
+
import { createElement } from "react";
|
|
4
|
+
import * as ReactDOMServer from "react-dom/server";
|
|
5
|
+
import { StaticRouter } from "react-router-dom";
|
|
6
|
+
import { findRoute, getManifest, logGreen, normalizePath, getAsyncCssChunk, getAsyncJsChunk, splitPageInfo, reactRefreshFragment, localStorageWrapper, checkRoute, useStore, isReact18, getClientEntry, } from "ssr-common-utils";
|
|
7
|
+
import { serialize } from "ssr-serialize-javascript";
|
|
8
|
+
import { AppContext } from "./context";
|
|
9
|
+
import { Routes, ssrCreateContext, createStore } from "./create";
|
|
10
10
|
const { FeRoutes, layoutFetch, state, Layout } = Routes;
|
|
11
11
|
const serverRender = async (ctx, config) => {
|
|
12
12
|
var _a;
|
|
13
13
|
const context = ssrCreateContext();
|
|
14
|
-
const { mode, parallelFetch, prefix, isVite, isDev, clientPrefix, onReady, onError, stream, rootId, hashRouter, streamHighWaterMark } = config;
|
|
14
|
+
const { mode, parallelFetch, prefix, isVite, isDev, clientPrefix, onReady, onError, stream, rootId, hashRouter, streamHighWaterMark, } = config;
|
|
15
15
|
const rawPath = (_a = ctx.request.path) !== null && _a !== void 0 ? _a : ctx.request.url;
|
|
16
16
|
const path = normalizePath(rawPath, prefix);
|
|
17
17
|
const routeItem = findRoute(FeRoutes, path);
|
|
@@ -26,8 +26,8 @@ const serverRender = async (ctx, config) => {
|
|
|
26
26
|
? [
|
|
27
27
|
React.createElement("script", { src: "/@vite/client", type: "module", key: "vite-client" }),
|
|
28
28
|
React.createElement("script", { key: "vite-react-refresh", type: "module", dangerouslySetInnerHTML: {
|
|
29
|
-
__html: reactRefreshFragment
|
|
30
|
-
} })
|
|
29
|
+
__html: reactRefreshFragment,
|
|
30
|
+
} }),
|
|
31
31
|
]
|
|
32
32
|
: dynamicCssOrder
|
|
33
33
|
.map((css) => manifest[css])
|
|
@@ -37,27 +37,35 @@ const serverRender = async (ctx, config) => {
|
|
|
37
37
|
: dynamicJsOrder
|
|
38
38
|
.map((js) => manifest[js])
|
|
39
39
|
.filter(Boolean)
|
|
40
|
-
.map((js) => React.createElement("link", { href: js, as: "script", rel: isVite ?
|
|
40
|
+
.map((js) => (React.createElement("link", { href: js, as: "script", rel: isVite ? "modulepreload" : "preload", key: js }))));
|
|
41
41
|
const injectScript = [
|
|
42
42
|
...(isVite
|
|
43
43
|
? [
|
|
44
44
|
React.createElement("script", { key: "viteWindowInit", dangerouslySetInnerHTML: {
|
|
45
|
-
__html:
|
|
46
|
-
} })
|
|
45
|
+
__html: "window.__USE_VITE__=true",
|
|
46
|
+
} }),
|
|
47
|
+
]
|
|
48
|
+
: []),
|
|
49
|
+
...(isVite && isDev
|
|
50
|
+
? [
|
|
51
|
+
React.createElement("script", { type: "module", src: `/node_modules/ssr-plugin-react/esm/entry/${getClientEntry()}.js`, key: "vite-react-entry" }),
|
|
47
52
|
]
|
|
48
53
|
: []),
|
|
49
|
-
...(isVite && isDev ? [React.createElement("script", { type: "module", src: `/node_modules/ssr-plugin-react/esm/entry/${getClientEntry()}.js`, key: "vite-react-entry" })] : []),
|
|
50
54
|
...dynamicJsOrder
|
|
51
55
|
.map((js) => manifest[js])
|
|
52
56
|
.filter(Boolean)
|
|
53
|
-
.map((item) => React.createElement("script", { key: item, src: item, type: isVite ?
|
|
57
|
+
.map((item) => (React.createElement("script", { key: item, src: item, type: isVite ? "module" : "text/javascript" }))),
|
|
54
58
|
];
|
|
55
59
|
const staticList = {
|
|
56
60
|
injectCss,
|
|
57
|
-
injectScript
|
|
61
|
+
injectScript,
|
|
58
62
|
};
|
|
59
|
-
const isCsr = !!(mode ===
|
|
60
|
-
const Component = isCsr
|
|
63
|
+
const isCsr = !!(mode === "csr" || ((_a = ctx.request.query) === null || _a === void 0 ? void 0 : _a.csr));
|
|
64
|
+
const Component = isCsr
|
|
65
|
+
? React.Fragment
|
|
66
|
+
: component.name === "dynamicComponent"
|
|
67
|
+
? (await component()).default
|
|
68
|
+
: component;
|
|
61
69
|
if (isCsr) {
|
|
62
70
|
logGreen(`Current path ${path} use csr render mode`);
|
|
63
71
|
}
|
|
@@ -66,25 +74,29 @@ const serverRender = async (ctx, config) => {
|
|
|
66
74
|
const currentFetch = fetch ? (await fetch()).default : null;
|
|
67
75
|
const lF = layoutFetch ? layoutFetch({ ctx }) : Promise.resolve({});
|
|
68
76
|
const CF = currentFetch ? currentFetch({ ctx }) : Promise.resolve({});
|
|
69
|
-
[layoutFetchData, fetchData] = parallelFetch
|
|
77
|
+
[layoutFetchData, fetchData] = parallelFetch
|
|
78
|
+
? await Promise.all([lF, CF])
|
|
79
|
+
: [await lF, await CF];
|
|
70
80
|
}
|
|
71
|
-
const combineData = isCsr
|
|
72
|
-
|
|
81
|
+
const combineData = isCsr
|
|
82
|
+
? null
|
|
83
|
+
: Object.assign({}, state !== null && state !== void 0 ? state : {}, layoutFetchData !== null && layoutFetchData !== void 0 ? layoutFetchData : {}, fetchData !== null && fetchData !== void 0 ? fetchData : {});
|
|
84
|
+
const ssrDevInfo = { manifest: isDev ? manifest : "", rootId };
|
|
73
85
|
const innerHTML = splitPageInfo({
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
86
|
+
"window.__USE_SSR__": !isCsr,
|
|
87
|
+
"window.__INITIAL_DATA__": isCsr ? {} : serialize(combineData),
|
|
88
|
+
"window.__USE_VITE__": isVite,
|
|
89
|
+
"window.prefix": `"${prefix}"`,
|
|
90
|
+
"window.clientPrefix": `"${clientPrefix !== null && clientPrefix !== void 0 ? clientPrefix : ""}"`,
|
|
91
|
+
"window.ssrDevInfo": JSON.stringify(ssrDevInfo),
|
|
92
|
+
"window.hashRouter": Boolean(hashRouter),
|
|
93
|
+
"window.__VALTIO_DATA__": isCsr ? {} : serialize(useStore()),
|
|
82
94
|
});
|
|
83
95
|
const injectState = React.createElement("script", { dangerouslySetInnerHTML: { __html: innerHTML } });
|
|
84
96
|
// with jsx type error, use createElement here
|
|
85
97
|
const ele = createElement(StaticRouter, {
|
|
86
98
|
location: ctx.request.url,
|
|
87
|
-
basename: prefix ===
|
|
99
|
+
basename: prefix === "/" ? undefined : prefix,
|
|
88
100
|
}, createElement(AppContext, {
|
|
89
101
|
context: context,
|
|
90
102
|
initialState: combineData,
|
|
@@ -92,8 +104,8 @@ const serverRender = async (ctx, config) => {
|
|
|
92
104
|
ctx: ctx,
|
|
93
105
|
config: config,
|
|
94
106
|
staticList: staticList,
|
|
95
|
-
injectState: injectState
|
|
96
|
-
}, createElement(Component, null))
|
|
107
|
+
injectState: injectState,
|
|
108
|
+
}, createElement(Component, null)),
|
|
97
109
|
}));
|
|
98
110
|
// for ctx.body will loose asynclocalstorage context, consume stream in advance like vue2/3
|
|
99
111
|
if (isReact18()) {
|
|
@@ -101,19 +113,21 @@ const serverRender = async (ctx, config) => {
|
|
|
101
113
|
? ReactDOMServer
|
|
102
114
|
.renderToPipeableStream(ele, {
|
|
103
115
|
onAllReady: onReady,
|
|
104
|
-
onError: onError
|
|
116
|
+
onError: onError,
|
|
105
117
|
})
|
|
106
118
|
.pipe(new PassThrough({ highWaterMark: streamHighWaterMark }))
|
|
107
119
|
: ReactDOMServer.renderToString(ele);
|
|
108
120
|
}
|
|
109
121
|
else {
|
|
110
|
-
return stream
|
|
122
|
+
return stream
|
|
123
|
+
? ReactDOMServer.renderToNodeStream(ele).pipe(new PassThrough({ highWaterMark: streamHighWaterMark }))
|
|
124
|
+
: ReactDOMServer.renderToString(ele);
|
|
111
125
|
}
|
|
112
126
|
};
|
|
113
127
|
return await localStorageWrapper.run({
|
|
114
128
|
context: context,
|
|
115
129
|
ctx,
|
|
116
|
-
store: createStore()
|
|
130
|
+
store: createStore(),
|
|
117
131
|
}, fn);
|
|
118
132
|
};
|
|
119
133
|
export { serverRender, Routes };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server-entry.js","sourceRoot":"","sources":["../../src/entry/server-entry.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,
|
|
1
|
+
{"version":3,"file":"server-entry.js","sourceRoot":"","sources":["../../src/entry/server-entry.tsx"],"names":[],"mappings":"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"}
|
package/esm/index.js
CHANGED
|
@@ -1,20 +1,20 @@
|
|
|
1
|
-
import { resolve } from
|
|
2
|
-
import { loadConfig, getCwd } from
|
|
1
|
+
import { resolve } from "path";
|
|
2
|
+
import { loadConfig, getCwd } from "ssr-common-utils";
|
|
3
3
|
const { tool } = loadConfig();
|
|
4
4
|
export function clientPlugin() {
|
|
5
5
|
const cwd = getCwd();
|
|
6
|
-
const webpackPath = resolve(cwd,
|
|
7
|
-
const vitePath = resolve(cwd,
|
|
8
|
-
const rspackPath = resolve(cwd,
|
|
6
|
+
const webpackPath = resolve(cwd, "./node_modules/ssr-webpack");
|
|
7
|
+
const vitePath = resolve(cwd, "./node_modules/ssr-vite");
|
|
8
|
+
const rspackPath = resolve(cwd, "./node_modules/ssr-rspack");
|
|
9
9
|
return {
|
|
10
|
-
name:
|
|
10
|
+
name: "plugin-react",
|
|
11
11
|
start: async () => {
|
|
12
|
-
if (tool ===
|
|
12
|
+
if (tool === "vite") {
|
|
13
13
|
const { start } = await import(vitePath);
|
|
14
14
|
await start();
|
|
15
15
|
}
|
|
16
16
|
else {
|
|
17
|
-
if (tool ===
|
|
17
|
+
if (tool === "rspack") {
|
|
18
18
|
const { start } = await import(rspackPath);
|
|
19
19
|
await start();
|
|
20
20
|
return;
|
|
@@ -24,12 +24,12 @@ export function clientPlugin() {
|
|
|
24
24
|
}
|
|
25
25
|
},
|
|
26
26
|
build: async () => {
|
|
27
|
-
if (tool ===
|
|
27
|
+
if (tool === "vite") {
|
|
28
28
|
const { build } = await import(vitePath);
|
|
29
29
|
await build();
|
|
30
30
|
}
|
|
31
31
|
else {
|
|
32
|
-
if (tool ===
|
|
32
|
+
if (tool === "rspack") {
|
|
33
33
|
const { build } = await import(rspackPath);
|
|
34
34
|
await build();
|
|
35
35
|
return;
|
|
@@ -37,7 +37,7 @@ export function clientPlugin() {
|
|
|
37
37
|
const { build } = await import(webpackPath);
|
|
38
38
|
await build();
|
|
39
39
|
}
|
|
40
|
-
}
|
|
40
|
+
},
|
|
41
41
|
};
|
|
42
42
|
}
|
|
43
43
|
//# sourceMappingURL=index.js.map
|
package/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC/B,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAEtD,MAAM,EAAE,IAAI,EAAE,GAAG,UAAU,EAAE,CAAC;AAE9B,MAAM,UAAU,YAAY;IAC1B,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC;IACrB,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,EAAE,4BAA4B,CAAC,CAAC;IAC/D,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,EAAE,yBAAyB,CAAC,CAAC;IACzD,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,EAAE,2BAA2B,CAAC,CAAC;IAC7D,OAAO;QACL,IAAI,EAAE,cAAc;QACpB,KAAK,EAAE,KAAK,IAAI,EAAE;YAChB,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;gBACpB,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC;gBACzC,MAAM,KAAK,EAAE,CAAC;YAChB,CAAC;iBAAM,CAAC;gBACN,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;oBACtB,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC;oBAC3C,MAAM,KAAK,EAAE,CAAC;oBACd,OAAO;gBACT,CAAC;gBACD,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC;gBAC5C,MAAM,KAAK,EAAE,CAAC;YAChB,CAAC;QACH,CAAC;QACD,KAAK,EAAE,KAAK,IAAI,EAAE;YAChB,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;gBACpB,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC;gBACzC,MAAM,KAAK,EAAE,CAAC;YAChB,CAAC;iBAAM,CAAC;gBACN,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;oBACtB,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC;oBAC3C,MAAM,KAAK,EAAE,CAAC;oBACd,OAAO;gBACT,CAAC;gBACD,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC;gBAC5C,MAAM,KAAK,EAAE,CAAC;YAChB,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,59 +1,58 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ssr-plugin-react",
|
|
3
|
-
"version": "7.0.
|
|
3
|
+
"version": "7.0.7",
|
|
4
4
|
"description": "plugin-react for ssr",
|
|
5
|
-
"main": "./cjs/index.js",
|
|
6
|
-
"module": "./esm/index.js",
|
|
7
|
-
"sideEffects": false,
|
|
8
|
-
"scripts": {
|
|
9
|
-
"build": "concurrently \"tsc -p ./tsconfig.cjs.json \" \" tsc -p ./tsconfig.esm.json\"",
|
|
10
|
-
"watch": "concurrently \"tsc -w -p ./tsconfig.cjs.json \" \"tsc -w -p ./tsconfig.esm.json \""
|
|
11
|
-
},
|
|
12
|
-
"repository": {
|
|
13
|
-
"type": "git",
|
|
14
|
-
"url": "git+https://github.com/zhangyuang/ssr.git"
|
|
15
|
-
},
|
|
16
5
|
"keywords": [
|
|
17
6
|
"cli",
|
|
7
|
+
"react",
|
|
18
8
|
"serverless",
|
|
19
9
|
"ssr",
|
|
20
|
-
"react",
|
|
21
10
|
"vue"
|
|
22
11
|
],
|
|
23
|
-
"
|
|
24
|
-
"license": "MIT",
|
|
12
|
+
"homepage": "https://github.com/zhangyuang/ssr#readme",
|
|
25
13
|
"bugs": {
|
|
26
14
|
"url": "https://github.com/zhangyuang/ssr/issues"
|
|
27
15
|
},
|
|
28
|
-
"
|
|
29
|
-
|
|
16
|
+
"license": "MIT",
|
|
17
|
+
"author": "zhangyuang",
|
|
18
|
+
"repository": {
|
|
19
|
+
"type": "git",
|
|
20
|
+
"url": "git+https://github.com/zhangyuang/ssr.git"
|
|
21
|
+
},
|
|
22
|
+
"sideEffects": false,
|
|
23
|
+
"main": "./cjs/index.js",
|
|
24
|
+
"module": "./esm/index.js",
|
|
25
|
+
"scripts": {
|
|
26
|
+
"build": "concurrently \"tsc -p ./tsconfig.cjs.json \" \" tsc -p ./tsconfig.esm.json\"",
|
|
27
|
+
"watch": "concurrently \"tsc -w -p ./tsconfig.cjs.json \" \"tsc -w -p ./tsconfig.esm.json \""
|
|
30
28
|
},
|
|
31
|
-
"homepage": "https://github.com/zhangyuang/ssr#readme",
|
|
32
29
|
"dependencies": {
|
|
33
|
-
"
|
|
34
|
-
"@vitejs/plugin-react
|
|
35
|
-
"@vitejs/plugin-react": "^4.0.0",
|
|
30
|
+
"@pmmmwh/react-refresh-webpack-plugin": "^0.5.5",
|
|
31
|
+
"@vitejs/plugin-react": "^6.0.1",
|
|
36
32
|
"babel-preset-react-app": "^10.0.0",
|
|
33
|
+
"ssr-common-utils": "^7.0.0",
|
|
37
34
|
"ssr-hoc-react": "^7.0.0",
|
|
38
|
-
"@pmmmwh/react-refresh-webpack-plugin": "^0.5.5",
|
|
39
35
|
"valtio": "^1.13.2"
|
|
40
36
|
},
|
|
41
|
-
"peerDependencies": {
|
|
42
|
-
"react": ">=17.0.1",
|
|
43
|
-
"react-dom": ">=17.0.0",
|
|
44
|
-
"react-router": "^5.1.8",
|
|
45
|
-
"react-router-dom": "^5.0.0"
|
|
46
|
-
},
|
|
47
37
|
"devDependencies": {
|
|
48
|
-
"@types/react18": "npm:@types/react@^18.0.0",
|
|
49
|
-
"@types/react-dom18": "npm:@types/react-dom@^18.0.0",
|
|
50
38
|
"@types/react": "^17.0.0",
|
|
51
39
|
"@types/react-dom": "^17.0.0",
|
|
40
|
+
"@types/react-dom18": "npm:@types/react-dom@^18.0.0",
|
|
52
41
|
"@types/react-router-dom": "^5.1.3",
|
|
42
|
+
"@types/react18": "npm:@types/react@^18.0.0",
|
|
53
43
|
"@types/webpack": "^4.41.10",
|
|
54
44
|
"concurrently": "^5.1.0",
|
|
55
45
|
"ssr-types": "workspace:*",
|
|
56
|
-
"ssr-
|
|
57
|
-
"ssr-
|
|
46
|
+
"ssr-vite": "workspace:*",
|
|
47
|
+
"ssr-webpack": "workspace:*"
|
|
48
|
+
},
|
|
49
|
+
"peerDependencies": {
|
|
50
|
+
"react": ">=17.0.1",
|
|
51
|
+
"react-dom": ">=17.0.0",
|
|
52
|
+
"react-router": "^5.1.8",
|
|
53
|
+
"react-router-dom": "^5.0.0"
|
|
54
|
+
},
|
|
55
|
+
"engines": {
|
|
56
|
+
"node": ">=14.17.0"
|
|
58
57
|
}
|
|
59
58
|
}
|
package/src/entry/context.tsx
CHANGED
|
@@ -1,42 +1,46 @@
|
|
|
1
|
-
import { useReducer, createElement } from
|
|
2
|
-
import { IProps, Action, IWindow, ReactRoutesType } from
|
|
3
|
-
import { Routes } from
|
|
1
|
+
import { useReducer, createElement } from "react";
|
|
2
|
+
import { IProps, Action, IWindow, ReactRoutesType } from "ssr-types";
|
|
3
|
+
import { Routes } from "./create";
|
|
4
4
|
|
|
5
|
-
const { reducer, state } = Routes as ReactRoutesType
|
|
5
|
+
const { reducer, state } = Routes as ReactRoutesType;
|
|
6
6
|
|
|
7
|
-
const userState = state ?? {}
|
|
8
|
-
const userReducer = reducer ?? function () {}
|
|
7
|
+
const userState = state ?? {};
|
|
8
|
+
const userReducer = reducer ?? function () {};
|
|
9
9
|
|
|
10
|
-
const isDev = process.env.NODE_ENV !==
|
|
10
|
+
const isDev = process.env.NODE_ENV !== "production";
|
|
11
11
|
|
|
12
|
-
declare const window: IWindow
|
|
12
|
+
declare const window: IWindow;
|
|
13
13
|
|
|
14
14
|
function defaultReducer(state: any, action: Action) {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
15
|
+
switch (action.type) {
|
|
16
|
+
case "updateContext":
|
|
17
|
+
if (isDev) {
|
|
18
|
+
console.log("[SSR:updateContext]: dispatch updateContext with action");
|
|
19
|
+
console.log(action);
|
|
20
|
+
}
|
|
21
|
+
return { ...state, ...action.payload };
|
|
22
|
+
}
|
|
23
23
|
}
|
|
24
24
|
|
|
25
25
|
function combineReducer(state: any, action: any) {
|
|
26
|
-
|
|
26
|
+
return defaultReducer(state, action) || userReducer(state, action);
|
|
27
27
|
}
|
|
28
28
|
|
|
29
29
|
export function AppContext(props: IProps) {
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
30
|
+
const initialState = Object.assign(
|
|
31
|
+
{},
|
|
32
|
+
userState ?? {},
|
|
33
|
+
__isBrowser__ ? window?.__INITIAL_DATA__ : props.initialState,
|
|
34
|
+
);
|
|
35
|
+
const [state, dispatch] = useReducer(combineReducer, initialState);
|
|
36
|
+
return createElement(
|
|
37
|
+
props.context.Provider,
|
|
38
|
+
{
|
|
39
|
+
value: {
|
|
40
|
+
state,
|
|
41
|
+
dispatch,
|
|
42
|
+
},
|
|
43
|
+
},
|
|
44
|
+
props.children as any,
|
|
45
|
+
);
|
|
42
46
|
}
|
package/src/entry/create.ts
CHANGED
|
@@ -1,28 +1,31 @@
|
|
|
1
|
-
import * as declareRoutes from
|
|
2
|
-
import * as ManualRoutes from
|
|
3
|
-
import { createContext } from
|
|
4
|
-
import { combineRoutes } from
|
|
5
|
-
import { deepClone } from
|
|
6
|
-
import
|
|
7
|
-
import { ReactRoutesType } from
|
|
8
|
-
import { proxy } from 'valtio'
|
|
1
|
+
import * as declareRoutes from "_build/ssr-declare-routes";
|
|
2
|
+
import * as ManualRoutes from "_build/ssr-manual-routes";
|
|
3
|
+
import { createContext } from "react";
|
|
4
|
+
import { combineRoutes } from "ssr-common-utils";
|
|
5
|
+
import { deepClone } from "ssr-deepclone";
|
|
6
|
+
import { proxy } from "valtio";
|
|
7
|
+
import type { IContext, ReactRoutesType } from "ssr-types";
|
|
9
8
|
|
|
10
|
-
export const Routes = combineRoutes(declareRoutes, ManualRoutes) as ReactRoutesType
|
|
9
|
+
export const Routes = combineRoutes(declareRoutes, ManualRoutes) as ReactRoutesType;
|
|
11
10
|
export const ssrCreateContext = () => {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
}
|
|
11
|
+
const STORE_CONTEXT = createContext<IContext>({
|
|
12
|
+
state: {},
|
|
13
|
+
});
|
|
14
|
+
if (__isBrowser__) {
|
|
15
|
+
window.STORE_CONTEXT = STORE_CONTEXT;
|
|
16
|
+
}
|
|
17
|
+
return STORE_CONTEXT;
|
|
18
|
+
};
|
|
20
19
|
|
|
21
|
-
export function createStore(
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
20
|
+
export function createStore() {
|
|
21
|
+
const { store } = Routes;
|
|
22
|
+
const storeInstance = __isBrowser__ ? store : proxy(deepClone(store));
|
|
23
|
+
if (__isBrowser__) {
|
|
24
|
+
for (const key in storeInstance) {
|
|
25
|
+
if (__isBrowser__ && window.__VALTIO_DATA__?.[key]) {
|
|
26
|
+
Object.assign(storeInstance[key], window.__VALTIO_DATA__[key]);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
return storeInstance;
|
|
28
31
|
}
|
|
@@ -1,73 +1,73 @@
|
|
|
1
|
-
import type { LayoutProps } from
|
|
2
|
-
import ReactDOM from
|
|
3
|
-
import { createElement } from
|
|
4
|
-
import { BrowserRouter, Route, Switch } from
|
|
5
|
-
import { preloadComponent, isMicro, setStoreContext, setStore } from
|
|
6
|
-
import { wrapComponent } from
|
|
7
|
-
import { ssrCreateContext, Routes, createStore } from
|
|
8
|
-
import { AppContext } from
|
|
1
|
+
import type { LayoutProps } from "ssr-types";
|
|
2
|
+
import ReactDOM from "react-dom";
|
|
3
|
+
import { createElement } from "react";
|
|
4
|
+
import { BrowserRouter, Route, Switch } from "react-router-dom";
|
|
5
|
+
import { preloadComponent, isMicro, setStoreContext, setStore } from "ssr-common-utils";
|
|
6
|
+
import { wrapComponent } from "ssr-hoc-react";
|
|
7
|
+
import { ssrCreateContext, Routes, createStore } from "./create";
|
|
8
|
+
import { AppContext } from "./context";
|
|
9
9
|
|
|
10
|
-
const { FeRoutes, layoutFetch, App } = Routes
|
|
10
|
+
const { FeRoutes, layoutFetch, App } = Routes;
|
|
11
11
|
|
|
12
12
|
const clientRender = async (): Promise<void> => {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
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
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
13
|
+
const IApp =
|
|
14
|
+
App ??
|
|
15
|
+
function (props: LayoutProps) {
|
|
16
|
+
return props.children!;
|
|
17
|
+
};
|
|
18
|
+
const context = ssrCreateContext() as any;
|
|
19
|
+
setStoreContext(context);
|
|
20
|
+
const store = createStore();
|
|
21
|
+
setStore(store ?? {});
|
|
22
|
+
const baseName = isMicro() ? window.clientPrefix : window.prefix;
|
|
23
|
+
const routes = await preloadComponent(FeRoutes, baseName);
|
|
24
|
+
const container = document.querySelector(window.ssrDevInfo.rootId ?? "#app")!;
|
|
25
|
+
const ele = createElement(
|
|
26
|
+
//@ts-ignore
|
|
27
|
+
BrowserRouter,
|
|
28
|
+
{
|
|
29
|
+
basename: baseName,
|
|
30
|
+
},
|
|
31
|
+
createElement(AppContext, {
|
|
32
|
+
context,
|
|
33
|
+
children: createElement(
|
|
34
|
+
Switch,
|
|
35
|
+
null,
|
|
36
|
+
createElement(
|
|
37
|
+
IApp as any,
|
|
38
|
+
null,
|
|
39
|
+
createElement(
|
|
40
|
+
Switch,
|
|
41
|
+
null,
|
|
42
|
+
routes.map((item) => {
|
|
43
|
+
const { fetch, component, path } = item;
|
|
44
|
+
component.fetch = fetch;
|
|
45
|
+
component.layoutFetch = layoutFetch;
|
|
46
|
+
const WrappedComponent = wrapComponent(component);
|
|
47
|
+
return createElement(Route, {
|
|
48
|
+
exact: true,
|
|
49
|
+
key: path,
|
|
50
|
+
path: path,
|
|
51
|
+
render: (props) =>
|
|
52
|
+
createElement(WrappedComponent, {
|
|
53
|
+
...props,
|
|
54
|
+
key: props.history.location.key,
|
|
55
|
+
}),
|
|
56
|
+
});
|
|
57
|
+
}),
|
|
58
|
+
),
|
|
59
|
+
),
|
|
60
|
+
),
|
|
61
|
+
}),
|
|
62
|
+
);
|
|
63
63
|
|
|
64
|
-
|
|
64
|
+
ReactDOM[window.__USE_SSR__ ? "hydrate" : "render"](ele, container);
|
|
65
65
|
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
}
|
|
66
|
+
if (!window.__USE_VITE__) {
|
|
67
|
+
(module as any)?.hot?.accept?.();
|
|
68
|
+
}
|
|
69
|
+
};
|
|
70
70
|
|
|
71
|
-
clientRender()
|
|
71
|
+
clientRender();
|
|
72
72
|
|
|
73
|
-
export { clientRender }
|
|
73
|
+
export { clientRender };
|