ssr-plugin-react 6.2.85 → 7.0.1-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 +41 -0
- package/README.md +0 -0
- package/cjs/entry/context.d.ts +0 -1
- package/cjs/entry/context.d.ts.map +1 -1
- package/cjs/entry/context.js +1 -2
- package/cjs/entry/context.js.map +1 -1
- package/cjs/entry/create.d.ts +0 -1
- package/cjs/entry/create.d.ts.map +1 -1
- package/cjs/entry/create.js +2 -2
- package/cjs/entry/create.js.map +1 -1
- package/cjs/entry/{client-entry.d.ts → react17-client-entry.d.ts} +1 -2
- package/cjs/entry/react17-client-entry.d.ts.map +1 -0
- package/cjs/entry/{client-entry.js → react17-client-entry.js} +11 -7
- package/cjs/entry/react17-client-entry.js.map +1 -0
- package/{esm/entry/client-entry.d.ts → cjs/entry/react18-client-entry.d.ts} +1 -2
- package/cjs/entry/react18-client-entry.d.ts.map +1 -0
- package/cjs/entry/react18-client-entry.js +62 -0
- package/cjs/entry/react18-client-entry.js.map +1 -0
- package/cjs/entry/server-entry.d.ts +0 -1
- package/cjs/entry/server-entry.d.ts.map +1 -1
- package/cjs/entry/server-entry.js +16 -4
- package/cjs/entry/server-entry.js.map +1 -1
- package/cjs/index.d.ts +0 -1
- package/cjs/index.d.ts.map +1 -1
- package/cjs/index.js +16 -36
- package/cjs/index.js.map +1 -1
- package/esm/entry/context.d.ts +0 -1
- package/esm/entry/context.d.ts.map +1 -1
- package/esm/entry/context.js.map +1 -1
- package/esm/entry/create.d.ts +0 -1
- package/esm/entry/create.d.ts.map +1 -1
- package/esm/entry/create.js.map +1 -1
- package/esm/entry/react17-client-entry.d.ts +3 -0
- package/esm/entry/react17-client-entry.d.ts.map +1 -0
- package/esm/entry/{client-entry.js → react17-client-entry.js} +11 -7
- package/esm/entry/react17-client-entry.js.map +1 -0
- package/esm/entry/react18-client-entry.d.ts +3 -0
- package/esm/entry/react18-client-entry.d.ts.map +1 -0
- package/esm/entry/react18-client-entry.js +59 -0
- package/esm/entry/react18-client-entry.js.map +1 -0
- package/esm/entry/server-entry.d.ts +0 -1
- package/esm/entry/server-entry.d.ts.map +1 -1
- package/esm/entry/server-entry.js +17 -5
- package/esm/entry/server-entry.js.map +1 -1
- package/esm/index.d.ts +0 -1
- package/esm/index.d.ts.map +1 -1
- package/esm/index.js +16 -21
- package/esm/index.js.map +1 -1
- package/package.json +27 -55
- package/src/entry/create.ts +0 -1
- package/src/entry/{client-entry.tsx → react17-client-entry.tsx} +37 -35
- package/src/entry/react18-client-entry.tsx +80 -0
- package/src/entry/server-entry.tsx +20 -5
- package/src/index.ts +16 -20
- package/.turbo/turbo-build.log +0 -7
- package/cjs/config/base.d.ts +0 -4
- package/cjs/config/base.d.ts.map +0 -1
- package/cjs/config/base.js +0 -49
- package/cjs/config/base.js.map +0 -1
- package/cjs/config/client.d.ts +0 -5
- package/cjs/config/client.d.ts.map +0 -1
- package/cjs/config/client.js +0 -54
- package/cjs/config/client.js.map +0 -1
- package/cjs/config/index.d.ts +0 -3
- package/cjs/config/index.d.ts.map +0 -1
- package/cjs/config/index.js +0 -19
- package/cjs/config/index.js.map +0 -1
- package/cjs/config/server.d.ts +0 -6
- package/cjs/config/server.d.ts.map +0 -1
- package/cjs/config/server.js +0 -39
- package/cjs/config/server.js.map +0 -1
- package/cjs/entry/client-entry.d.ts.map +0 -1
- package/cjs/entry/client-entry.js.map +0 -1
- package/cjs/tools/vite.d.ts +0 -9
- package/cjs/tools/vite.d.ts.map +0 -1
- package/cjs/tools/vite.js +0 -142
- package/cjs/tools/vite.js.map +0 -1
- package/cjs/tools/webpack.d.ts +0 -3
- package/cjs/tools/webpack.d.ts.map +0 -1
- package/cjs/tools/webpack.js +0 -23
- package/cjs/tools/webpack.js.map +0 -1
- package/esm/config/base.d.ts +0 -4
- package/esm/config/base.d.ts.map +0 -1
- package/esm/config/base.js +0 -46
- package/esm/config/base.js.map +0 -1
- package/esm/config/client.d.ts +0 -5
- package/esm/config/client.d.ts.map +0 -1
- package/esm/config/client.js +0 -51
- package/esm/config/client.js.map +0 -1
- package/esm/config/index.d.ts +0 -3
- package/esm/config/index.d.ts.map +0 -1
- package/esm/config/index.js +0 -3
- package/esm/config/index.js.map +0 -1
- package/esm/config/server.d.ts +0 -6
- package/esm/config/server.d.ts.map +0 -1
- package/esm/config/server.js +0 -36
- package/esm/config/server.js.map +0 -1
- package/esm/entry/client-entry.d.ts.map +0 -1
- package/esm/entry/client-entry.js.map +0 -1
- package/esm/tools/vite.d.ts +0 -9
- package/esm/tools/vite.d.ts.map +0 -1
- package/esm/tools/vite.js +0 -134
- package/esm/tools/vite.js.map +0 -1
- package/esm/tools/webpack.d.ts +0 -3
- package/esm/tools/webpack.d.ts.map +0 -1
- package/esm/tools/webpack.js +0 -18
- package/esm/tools/webpack.js.map +0 -1
- package/src/config/base.ts +0 -57
- package/src/config/client.ts +0 -62
- package/src/config/index.ts +0 -2
- package/src/config/server.ts +0 -43
- package/src/tools/vite.ts +0 -134
- package/src/tools/webpack.ts +0 -20
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
//@ts-ignore
|
|
2
|
+
import { hydrateRoot, createRoot } from 'react-dom/client';
|
|
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
|
+
const { FeRoutes, layoutFetch, App } = Routes;
|
|
10
|
+
const clientRender = async () => {
|
|
11
|
+
var _a, _b, _c;
|
|
12
|
+
const IApp = App !== null && App !== void 0 ? App : function (props) {
|
|
13
|
+
return props.children;
|
|
14
|
+
};
|
|
15
|
+
const context = ssrCreateContext();
|
|
16
|
+
setStoreContext(context);
|
|
17
|
+
const store = createStore(window.__VALTIO_DATA__);
|
|
18
|
+
setStore(store !== null && store !== void 0 ? store : {});
|
|
19
|
+
const baseName = isMicro() ? window.clientPrefix : window.prefix;
|
|
20
|
+
const routes = await preloadComponent(FeRoutes, baseName);
|
|
21
|
+
const container = document.querySelector((_a = window.ssrDevInfo.rootId) !== null && _a !== void 0 ? _a : '#app');
|
|
22
|
+
const ele = createElement(
|
|
23
|
+
//@ts-ignore
|
|
24
|
+
BrowserRouter, {
|
|
25
|
+
basename: baseName
|
|
26
|
+
}, createElement(AppContext, {
|
|
27
|
+
context,
|
|
28
|
+
children: createElement(Switch, null, createElement(IApp, null, createElement(Switch, null, routes.map((item) => {
|
|
29
|
+
const { fetch, component, path } = item;
|
|
30
|
+
component.fetch = fetch;
|
|
31
|
+
component.layoutFetch = layoutFetch;
|
|
32
|
+
const WrappedComponent = wrapComponent(component);
|
|
33
|
+
return createElement(Route, {
|
|
34
|
+
exact: true,
|
|
35
|
+
key: path,
|
|
36
|
+
path: path,
|
|
37
|
+
render: (props) => createElement(WrappedComponent, {
|
|
38
|
+
...props,
|
|
39
|
+
key: props.history.location.key
|
|
40
|
+
})
|
|
41
|
+
});
|
|
42
|
+
}))))
|
|
43
|
+
}));
|
|
44
|
+
if (window.__USE_SSR__) {
|
|
45
|
+
;
|
|
46
|
+
hydrateRoot(container, ele);
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
const root = createRoot(container);
|
|
50
|
+
root.render(ele);
|
|
51
|
+
}
|
|
52
|
+
if (!window.__USE_VITE__) {
|
|
53
|
+
;
|
|
54
|
+
(_c = (_b = module === null || module === void 0 ? void 0 : module.hot) === null || _b === void 0 ? void 0 : _b.accept) === null || _c === void 0 ? void 0 : _c.call(_b);
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
clientRender();
|
|
58
|
+
export { clientRender };
|
|
59
|
+
//# sourceMappingURL=react18-client-entry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"react18-client-entry.js","sourceRoot":"","sources":["../../src/entry/react18-client-entry.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
/// <reference types="node" />
|
|
2
1
|
import { ISSRContext, IConfig } from 'ssr-types';
|
|
3
2
|
import { Routes } from './create';
|
|
4
3
|
declare const serverRender: (ctx: ISSRContext, config: IConfig) => Promise<string | import("stream").Readable | NodeJS.ReadableStream | import("ssr-types").PipeableStream | {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server-entry.d.ts","sourceRoot":"","sources":["../../src/entry/server-entry.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"server-entry.d.ts","sourceRoot":"","sources":["../../src/entry/server-entry.tsx"],"names":[],"mappings":"AAOA,OAAO,EAAE,WAAW,EAAE,OAAO,EAAmD,MAAM,WAAW,CAAA;AAGjG,OAAO,EAAE,MAAM,EAAiC,MAAM,UAAU,CAAA;AAOhE,QAAA,MAAM,YAAY,GAAU,KAAK,WAAW,EAAE,QAAQ,OAAO;;;EAuI5D,CAAA;AAED,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,CAAA"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { PassThrough } from 'stream';
|
|
2
2
|
import * as React from 'react';
|
|
3
3
|
import { createElement } from 'react';
|
|
4
|
+
import * as ReactDOMServer from 'react-dom/server';
|
|
4
5
|
import { StaticRouter } from 'react-router-dom';
|
|
5
|
-
import {
|
|
6
|
-
import { findRoute, getManifest, logGreen, normalizePath, getAsyncCssChunk, getAsyncJsChunk, splitPageInfo, reactRefreshFragment, localStorageWrapper, checkRoute, useStore } from 'ssr-common-utils';
|
|
6
|
+
import { findRoute, getManifest, logGreen, normalizePath, getAsyncCssChunk, getAsyncJsChunk, splitPageInfo, reactRefreshFragment, localStorageWrapper, checkRoute, useStore, isReact18, getClientEntry } from 'ssr-common-utils';
|
|
7
7
|
import { serialize } from 'ssr-serialize-javascript';
|
|
8
8
|
import { AppContext } from './context';
|
|
9
9
|
import { Routes, ssrCreateContext, createStore } from './create';
|
|
@@ -11,7 +11,7 @@ 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, 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);
|
|
@@ -46,7 +46,7 @@ const serverRender = async (ctx, config) => {
|
|
|
46
46
|
} })
|
|
47
47
|
]
|
|
48
48
|
: []),
|
|
49
|
-
...(isVite && isDev ? [React.createElement("script", { type: "module", src:
|
|
49
|
+
...(isVite && isDev ? [React.createElement("script", { type: "module", src: `/node_modules/ssr-plugin-react/esm/entry/${getClientEntry()}.js`, key: "vite-react-entry" })] : []),
|
|
50
50
|
...dynamicJsOrder
|
|
51
51
|
.map((js) => manifest[js])
|
|
52
52
|
.filter(Boolean)
|
|
@@ -96,7 +96,19 @@ const serverRender = async (ctx, config) => {
|
|
|
96
96
|
}, createElement(Component, null))
|
|
97
97
|
}));
|
|
98
98
|
// for ctx.body will loose asynclocalstorage context, consume stream in advance like vue2/3
|
|
99
|
-
|
|
99
|
+
if (isReact18()) {
|
|
100
|
+
return stream
|
|
101
|
+
? ReactDOMServer
|
|
102
|
+
.renderToPipeableStream(ele, {
|
|
103
|
+
onAllReady: onReady,
|
|
104
|
+
onError: onError
|
|
105
|
+
})
|
|
106
|
+
.pipe(new PassThrough({ highWaterMark: streamHighWaterMark }))
|
|
107
|
+
: ReactDOMServer.renderToString(ele);
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
return stream ? ReactDOMServer.renderToNodeStream(ele).pipe(new PassThrough({ highWaterMark: streamHighWaterMark })) : ReactDOMServer.renderToString(ele);
|
|
111
|
+
}
|
|
100
112
|
};
|
|
101
113
|
return await localStorageWrapper.run({
|
|
102
114
|
context: context,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server-entry.js","sourceRoot":"","sources":["../../src/entry/server-entry.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"server-entry.js","sourceRoot":"","sources":["../../src/entry/server-entry.tsx"],"names":[],"mappings":"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"}
|
package/esm/index.d.ts
CHANGED
package/esm/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAMA,wBAAgB,YAAY;;;;EAsC3B"}
|
package/esm/index.js
CHANGED
|
@@ -1,51 +1,46 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { resolve } from 'path';
|
|
2
|
+
import { loadConfig, getCwd } from 'ssr-common-utils';
|
|
2
3
|
const { isVite, optimize } = loadConfig();
|
|
3
4
|
const spinner = require('ora')('Building');
|
|
4
5
|
export function clientPlugin() {
|
|
6
|
+
const cwd = getCwd();
|
|
7
|
+
const webpackPath = resolve(cwd, './node_modules/ssr-webpack');
|
|
8
|
+
const vitePath = resolve(cwd, './node_modules/ssr-vite');
|
|
5
9
|
return {
|
|
6
10
|
name: 'plugin-react',
|
|
7
11
|
start: async () => {
|
|
8
12
|
if (isVite) {
|
|
9
|
-
const {
|
|
10
|
-
await
|
|
13
|
+
const { start } = await import(vitePath);
|
|
14
|
+
await start();
|
|
11
15
|
}
|
|
12
16
|
else {
|
|
13
17
|
if (optimize) {
|
|
14
18
|
spinner.start();
|
|
15
|
-
const { viteBuildClient } = await import(
|
|
19
|
+
const { viteBuildClient } = await import(vitePath);
|
|
16
20
|
await viteBuildClient();
|
|
17
21
|
process.env.NODE_ENV = 'development';
|
|
18
22
|
spinner.stop();
|
|
19
|
-
const { webpackStart } = await import('./tools/webpack');
|
|
20
|
-
await webpackStart();
|
|
21
|
-
}
|
|
22
|
-
else {
|
|
23
|
-
const { webpackStart } = await import('./tools/webpack');
|
|
24
|
-
await webpackStart();
|
|
25
23
|
}
|
|
24
|
+
const { start } = await import(webpackPath);
|
|
25
|
+
await start();
|
|
26
26
|
}
|
|
27
27
|
},
|
|
28
28
|
build: async () => {
|
|
29
29
|
if (isVite) {
|
|
30
|
-
const {
|
|
31
|
-
await
|
|
30
|
+
const { build } = await import(vitePath);
|
|
31
|
+
await build();
|
|
32
32
|
}
|
|
33
33
|
else {
|
|
34
34
|
if (optimize) {
|
|
35
35
|
spinner.start();
|
|
36
|
-
const {
|
|
37
|
-
await
|
|
36
|
+
const { build } = await import(vitePath);
|
|
37
|
+
await build();
|
|
38
38
|
spinner.stop();
|
|
39
|
-
const { webpackBuild } = await import('./tools/webpack');
|
|
40
|
-
await webpackBuild();
|
|
41
|
-
}
|
|
42
|
-
else {
|
|
43
|
-
const { webpackBuild } = await import('./tools/webpack');
|
|
44
|
-
await webpackBuild();
|
|
45
39
|
}
|
|
40
|
+
const { build } = await import(webpackPath);
|
|
41
|
+
await build();
|
|
46
42
|
}
|
|
47
43
|
}
|
|
48
44
|
};
|
|
49
45
|
}
|
|
50
|
-
export * from './tools/vite';
|
|
51
46
|
//# 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,UAAU,EAAE,MAAM,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AAC9B,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AAErD,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,UAAU,EAAE,CAAA;AACzC,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,CAAA;AAE1C,MAAM,UAAU,YAAY;IAC3B,MAAM,GAAG,GAAG,MAAM,EAAE,CAAA;IACpB,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,EAAE,4BAA4B,CAAC,CAAA;IAC9D,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,EAAE,yBAAyB,CAAC,CAAA;IACxD,OAAO;QACN,IAAI,EAAE,cAAc;QACpB,KAAK,EAAE,KAAK,IAAI,EAAE;YACjB,IAAI,MAAM,EAAE,CAAC;gBACZ,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAA;gBACxC,MAAM,KAAK,EAAE,CAAA;YACd,CAAC;iBAAM,CAAC;gBACP,IAAI,QAAQ,EAAE,CAAC;oBACd,OAAO,CAAC,KAAK,EAAE,CAAA;oBACf,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAA;oBAClD,MAAM,eAAe,EAAE,CAAA;oBACvB,OAAO,CAAC,GAAG,CAAC,QAAQ,GAAG,aAAa,CAAA;oBACpC,OAAO,CAAC,IAAI,EAAE,CAAA;gBACf,CAAC;gBACD,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,CAAA;gBAC3C,MAAM,KAAK,EAAE,CAAA;YACd,CAAC;QACF,CAAC;QACD,KAAK,EAAE,KAAK,IAAI,EAAE;YACjB,IAAI,MAAM,EAAE,CAAC;gBACZ,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAA;gBACxC,MAAM,KAAK,EAAE,CAAA;YACd,CAAC;iBAAM,CAAC;gBACP,IAAI,QAAQ,EAAE,CAAC;oBACd,OAAO,CAAC,KAAK,EAAE,CAAA;oBACf,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAA;oBACxC,MAAM,KAAK,EAAE,CAAA;oBACb,OAAO,CAAC,IAAI,EAAE,CAAA;gBACf,CAAC;gBACD,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,CAAA;gBAC3C,MAAM,KAAK,EAAE,CAAA;YACd,CAAC;QACF,CAAC;KACD,CAAA;AACF,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,14 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ssr-plugin-react",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "7.0.1-beta.0",
|
|
4
4
|
"description": "plugin-react for ssr",
|
|
5
5
|
"main": "./cjs/index.js",
|
|
6
6
|
"module": "./esm/index.js",
|
|
7
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
8
|
"repository": {
|
|
13
9
|
"type": "git",
|
|
14
10
|
"url": "git+https://github.com/zhangyuang/ssr.git"
|
|
@@ -30,64 +26,40 @@
|
|
|
30
26
|
},
|
|
31
27
|
"homepage": "https://github.com/zhangyuang/ssr#readme",
|
|
32
28
|
"dependencies": {
|
|
33
|
-
"@babel/core": "^7.0.0",
|
|
34
|
-
"@babel/plugin-proposal-nullish-coalescing-operator": "^7.16.5",
|
|
35
|
-
"@babel/plugin-proposal-optional-chaining": "^7.16.5",
|
|
36
|
-
"@babel/plugin-proposal-private-methods": "^7.18.6",
|
|
37
|
-
"@babel/plugin-proposal-private-property-in-object": "^7.21.11",
|
|
38
|
-
"@babel/plugin-transform-runtime": "^7.9.6",
|
|
39
|
-
"@babel/preset-env": "^7.5.5",
|
|
40
|
-
"@pmmmwh/react-refresh-webpack-plugin": "^0.5.5",
|
|
41
|
-
"@types/semver": "^7.3.13",
|
|
42
29
|
"@vitejs/plugin-react": "^1.3.2",
|
|
43
|
-
"babel-loader": "^8.0.4",
|
|
44
|
-
"babel-plugin-import": "1.13.3",
|
|
45
30
|
"babel-preset-react-app": "^10.0.0",
|
|
46
|
-
"core-js": "^3.6.4",
|
|
47
|
-
"css-loader": "^5.2.7",
|
|
48
|
-
"file-loader": "^6.2.0",
|
|
49
|
-
"less": "^4.1.1",
|
|
50
|
-
"less-loader": "^7.3.0",
|
|
51
|
-
"optimize-css-assets-webpack-plugin": "^6.0.0",
|
|
52
|
-
"ora": "^4.0.4",
|
|
53
|
-
"postcss": "^8.0.0",
|
|
54
|
-
"postcss-discard-comments": "^5.0.0",
|
|
55
|
-
"postcss-flexbugs-fixes": "^5.0.0",
|
|
56
|
-
"postcss-loader": "^4.0.0",
|
|
57
|
-
"postcss-modules": "^4.0.0",
|
|
58
|
-
"postcss-preset-env": "7.6.0",
|
|
59
|
-
"postcss-safe-parser": "^6.0.0",
|
|
60
|
-
"react": "^17.0.1",
|
|
61
|
-
"react-dev-utils": "^11.0.4",
|
|
62
|
-
"react-dom": "^17.0.0",
|
|
63
31
|
"react-refresh": "^0.12.0",
|
|
64
|
-
"react-
|
|
65
|
-
"
|
|
66
|
-
"
|
|
67
|
-
"
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
"
|
|
71
|
-
"
|
|
72
|
-
"
|
|
73
|
-
"
|
|
74
|
-
"
|
|
75
|
-
"ssr-webpack4": "^4.46.2",
|
|
76
|
-
"terser-webpack-plugin": "^2.3.5",
|
|
77
|
-
"url-loader": "^4.1.1",
|
|
78
|
-
"valtio": "^1.11.2",
|
|
79
|
-
"vite": "^2.9.15",
|
|
80
|
-
"webpack-bundle-analyzer": "^3.6.1",
|
|
81
|
-
"webpack-chain": "^6.4.0",
|
|
82
|
-
"webpack-manifest-plugin": "^2.2.0",
|
|
83
|
-
"webpackbar": "^5.0.0-3"
|
|
32
|
+
"@pmmmwh/react-refresh-webpack-plugin": "^0.5.5",
|
|
33
|
+
"valtio": "^1.13.2",
|
|
34
|
+
"ssr-common-utils": "7.0.1-beta.0",
|
|
35
|
+
"ssr-hoc-react": "7.0.1-beta.0"
|
|
36
|
+
},
|
|
37
|
+
"peerDependencies": {
|
|
38
|
+
"react": ">=17.0.1",
|
|
39
|
+
"react-dom": ">=17.0.0",
|
|
40
|
+
"react-router": ">=5.2.1",
|
|
41
|
+
"react-router-dom": ">=5.1.2",
|
|
42
|
+
"webpack": "^4.0.0"
|
|
84
43
|
},
|
|
85
44
|
"devDependencies": {
|
|
45
|
+
"@types/react18": "npm:@types/react@^18.0.0",
|
|
46
|
+
"@types/react-dom18": "npm:@types/react-dom@^18.0.0",
|
|
86
47
|
"@types/react": "^17.0.0",
|
|
87
48
|
"@types/react-dom": "^17.0.0",
|
|
88
49
|
"@types/react-router-dom": "^5.1.3",
|
|
89
50
|
"@types/webpack": "^4.41.10",
|
|
90
51
|
"concurrently": "^5.1.0",
|
|
91
|
-
"ssr-types": "
|
|
52
|
+
"ssr-types": "7.0.1-beta.2",
|
|
53
|
+
"ssr-webpack": "7.0.1-beta.0",
|
|
54
|
+
"ssr-vite": "7.0.1-beta.0"
|
|
55
|
+
},
|
|
56
|
+
"peerDependenciesMeta": {
|
|
57
|
+
"webpack": {
|
|
58
|
+
"optional": true
|
|
59
|
+
}
|
|
60
|
+
},
|
|
61
|
+
"scripts": {
|
|
62
|
+
"build": "concurrently \"tsc -p ./tsconfig.cjs.json \" \" tsc -p ./tsconfig.esm.json\"",
|
|
63
|
+
"watch": "concurrently \"tsc -w -p ./tsconfig.cjs.json \" \"tsc -w -p ./tsconfig.esm.json \""
|
|
92
64
|
}
|
|
93
|
-
}
|
|
65
|
+
}
|
package/src/entry/create.ts
CHANGED
|
@@ -8,7 +8,6 @@ import { ReactRoutesType } from 'ssr-types'
|
|
|
8
8
|
import { proxy } from 'valtio'
|
|
9
9
|
|
|
10
10
|
export const Routes = combineRoutes(declareRoutes, ManualRoutes) as ReactRoutesType
|
|
11
|
-
|
|
12
11
|
export const ssrCreateContext = () => {
|
|
13
12
|
const STORE_CONTEXT = createContext<IContext>({
|
|
14
13
|
state: {}
|
|
@@ -1,10 +1,9 @@
|
|
|
1
|
+
import type { LayoutProps } from 'ssr-types'
|
|
2
|
+
import ReactDOM from 'react-dom'
|
|
1
3
|
import { createElement } from 'react'
|
|
2
|
-
import * as ReactDOM from 'react-dom'
|
|
3
|
-
import 'react-router' // for vite prebundle list
|
|
4
4
|
import { BrowserRouter, Route, Switch } from 'react-router-dom'
|
|
5
5
|
import { preloadComponent, isMicro, setStoreContext, setStore } from 'ssr-common-utils'
|
|
6
6
|
import { wrapComponent } from 'ssr-hoc-react'
|
|
7
|
-
import { LayoutProps } from 'ssr-types'
|
|
8
7
|
import { ssrCreateContext, Routes, createStore } from './create'
|
|
9
8
|
import { AppContext } from './context'
|
|
10
9
|
|
|
@@ -22,45 +21,48 @@ const clientRender = async (): Promise<void> => {
|
|
|
22
21
|
setStore(store ?? {})
|
|
23
22
|
const baseName = isMicro() ? window.clientPrefix : window.prefix
|
|
24
23
|
const routes = await preloadComponent(FeRoutes, baseName)
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
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,
|
|
35
38
|
null,
|
|
36
39
|
createElement(
|
|
37
|
-
|
|
40
|
+
Switch,
|
|
38
41
|
null,
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
key: location.pathname
|
|
54
|
-
})
|
|
55
|
-
})
|
|
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
56
|
})
|
|
57
|
-
)
|
|
57
|
+
})
|
|
58
58
|
)
|
|
59
59
|
)
|
|
60
|
-
|
|
61
|
-
)
|
|
62
|
-
document.querySelector(window.ssrDevInfo.rootId ?? '#app')
|
|
60
|
+
)
|
|
61
|
+
})
|
|
63
62
|
)
|
|
63
|
+
|
|
64
|
+
ReactDOM[window.__USE_SSR__ ? 'hydrate' : 'render'](ele, container)
|
|
65
|
+
|
|
64
66
|
if (!window.__USE_VITE__) {
|
|
65
67
|
;(module as any)?.hot?.accept?.()
|
|
66
68
|
}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import type { hydrateRoot as HydrateRoot, createRoot as CreateRoot } from 'react-dom18/client'
|
|
2
|
+
import type { LayoutProps } from 'ssr-types'
|
|
3
|
+
|
|
4
|
+
//@ts-ignore
|
|
5
|
+
import { hydrateRoot, createRoot } from 'react-dom/client'
|
|
6
|
+
import { createElement } from 'react'
|
|
7
|
+
import { BrowserRouter, Route, Switch } from 'react-router-dom'
|
|
8
|
+
import { preloadComponent, isMicro, setStoreContext, setStore } from 'ssr-common-utils'
|
|
9
|
+
import { wrapComponent } from 'ssr-hoc-react'
|
|
10
|
+
import { ssrCreateContext, Routes, createStore } from './create'
|
|
11
|
+
import { AppContext } from './context'
|
|
12
|
+
|
|
13
|
+
const { FeRoutes, layoutFetch, App } = Routes
|
|
14
|
+
|
|
15
|
+
const clientRender = async (): Promise<void> => {
|
|
16
|
+
const IApp =
|
|
17
|
+
App ??
|
|
18
|
+
function (props: LayoutProps) {
|
|
19
|
+
return props.children!
|
|
20
|
+
}
|
|
21
|
+
const context = ssrCreateContext() as any
|
|
22
|
+
setStoreContext(context)
|
|
23
|
+
const store = createStore(window.__VALTIO_DATA__)
|
|
24
|
+
setStore(store ?? {})
|
|
25
|
+
const baseName = isMicro() ? window.clientPrefix : window.prefix
|
|
26
|
+
const routes = await preloadComponent(FeRoutes, baseName)
|
|
27
|
+
const container = document.querySelector(window.ssrDevInfo.rootId ?? '#app')!
|
|
28
|
+
const ele = createElement(
|
|
29
|
+
//@ts-ignore
|
|
30
|
+
BrowserRouter,
|
|
31
|
+
{
|
|
32
|
+
basename: baseName
|
|
33
|
+
},
|
|
34
|
+
createElement(AppContext, {
|
|
35
|
+
context,
|
|
36
|
+
children: createElement(
|
|
37
|
+
Switch,
|
|
38
|
+
null,
|
|
39
|
+
createElement(
|
|
40
|
+
IApp as any,
|
|
41
|
+
null,
|
|
42
|
+
createElement(
|
|
43
|
+
Switch,
|
|
44
|
+
null,
|
|
45
|
+
routes.map((item) => {
|
|
46
|
+
const { fetch, component, path } = item
|
|
47
|
+
component.fetch = fetch
|
|
48
|
+
component.layoutFetch = layoutFetch
|
|
49
|
+
const WrappedComponent = wrapComponent(component)
|
|
50
|
+
return createElement(Route, {
|
|
51
|
+
exact: true,
|
|
52
|
+
key: path,
|
|
53
|
+
path: path,
|
|
54
|
+
render: (props) =>
|
|
55
|
+
createElement(WrappedComponent, {
|
|
56
|
+
...props,
|
|
57
|
+
key: props.history.location.key
|
|
58
|
+
})
|
|
59
|
+
})
|
|
60
|
+
})
|
|
61
|
+
)
|
|
62
|
+
)
|
|
63
|
+
)
|
|
64
|
+
})
|
|
65
|
+
)
|
|
66
|
+
if (window.__USE_SSR__) {
|
|
67
|
+
;(hydrateRoot as typeof HydrateRoot)(container, ele)
|
|
68
|
+
} else {
|
|
69
|
+
const root = (createRoot as typeof CreateRoot)(container)
|
|
70
|
+
root.render(ele)
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
if (!window.__USE_VITE__) {
|
|
74
|
+
;(module as any)?.hot?.accept?.()
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
clientRender()
|
|
79
|
+
|
|
80
|
+
export { clientRender }
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
+
import type { renderToPipeableStream } from 'react-dom18/server'
|
|
1
2
|
import { PassThrough } from 'stream'
|
|
2
3
|
import * as React from 'react'
|
|
3
4
|
import { createElement } from 'react'
|
|
5
|
+
import * as ReactDOMServer from 'react-dom/server'
|
|
4
6
|
import { StaticRouter } from 'react-router-dom'
|
|
5
|
-
import {
|
|
6
|
-
import { findRoute, getManifest, logGreen, normalizePath, getAsyncCssChunk, getAsyncJsChunk, splitPageInfo, reactRefreshFragment, localStorageWrapper, checkRoute, useStore } from 'ssr-common-utils'
|
|
7
|
+
import { findRoute, getManifest, logGreen, normalizePath, getAsyncCssChunk, getAsyncJsChunk, splitPageInfo, reactRefreshFragment, localStorageWrapper, checkRoute, useStore, isReact18, getClientEntry } from 'ssr-common-utils'
|
|
7
8
|
import { ISSRContext, IConfig, ReactESMPreloadFeRouteItem, DynamicFC, StaticFC } from 'ssr-types'
|
|
8
9
|
import { serialize } from 'ssr-serialize-javascript'
|
|
9
10
|
import { AppContext } from './context'
|
|
@@ -11,9 +12,12 @@ import { Routes, ssrCreateContext, createStore } from './create'
|
|
|
11
12
|
|
|
12
13
|
const { FeRoutes, layoutFetch, state, Layout } = Routes
|
|
13
14
|
|
|
15
|
+
type ReactDOMServerType = typeof ReactDOMServer & {
|
|
16
|
+
renderToPipeableStream: typeof renderToPipeableStream
|
|
17
|
+
}
|
|
14
18
|
const serverRender = async (ctx: ISSRContext, config: IConfig) => {
|
|
15
19
|
const context = ssrCreateContext()
|
|
16
|
-
const { mode, parallelFetch, prefix, isVite, isDev, clientPrefix, stream, rootId, hashRouter, streamHighWaterMark } = config
|
|
20
|
+
const { mode, parallelFetch, prefix, isVite, isDev, clientPrefix, onReady, onError, stream, rootId, hashRouter, streamHighWaterMark } = config
|
|
17
21
|
const rawPath = ctx.request.path ?? ctx.request.url
|
|
18
22
|
const path = normalizePath(rawPath, prefix)
|
|
19
23
|
const routeItem = findRoute<ReactESMPreloadFeRouteItem>(FeRoutes, path)
|
|
@@ -61,7 +65,7 @@ const serverRender = async (ctx: ISSRContext, config: IConfig) => {
|
|
|
61
65
|
/>
|
|
62
66
|
]
|
|
63
67
|
: []),
|
|
64
|
-
...(isVite && isDev ? [<script type="module" src=
|
|
68
|
+
...(isVite && isDev ? [<script type="module" src={`/node_modules/ssr-plugin-react/esm/entry/${getClientEntry()}.js`} key="vite-react-entry" />] : []),
|
|
65
69
|
...dynamicJsOrder
|
|
66
70
|
.map((js) => manifest[js])
|
|
67
71
|
.filter(Boolean)
|
|
@@ -124,7 +128,18 @@ const serverRender = async (ctx: ISSRContext, config: IConfig) => {
|
|
|
124
128
|
})
|
|
125
129
|
)
|
|
126
130
|
// for ctx.body will loose asynclocalstorage context, consume stream in advance like vue2/3
|
|
127
|
-
|
|
131
|
+
if (isReact18()) {
|
|
132
|
+
return stream
|
|
133
|
+
? (ReactDOMServer as ReactDOMServerType)
|
|
134
|
+
.renderToPipeableStream(ele, {
|
|
135
|
+
onAllReady: onReady,
|
|
136
|
+
onError: onError as any
|
|
137
|
+
})
|
|
138
|
+
.pipe(new PassThrough({ highWaterMark: streamHighWaterMark }))
|
|
139
|
+
: ReactDOMServer.renderToString(ele)
|
|
140
|
+
} else {
|
|
141
|
+
return stream ? ReactDOMServer.renderToNodeStream(ele).pipe(new PassThrough({ highWaterMark: streamHighWaterMark })) : ReactDOMServer.renderToString(ele)
|
|
142
|
+
}
|
|
128
143
|
}
|
|
129
144
|
|
|
130
145
|
return await localStorageWrapper.run(
|