@vitejs/plugin-rsc 0.4.10 → 0.4.12
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/README.md +4 -3
- package/dist/browser-D8OPzpF5.js +35 -0
- package/dist/browser-DjnGtEmB.d.ts +15 -0
- package/dist/browser-Dw18EFgE.d.ts +6 -0
- package/dist/browser-LizIyxet.js +17 -0
- package/dist/browser-QWbIPyhO.js +17 -0
- package/dist/browser.d.ts +4 -0
- package/dist/browser.js +7 -0
- package/dist/client-edAdk2GF.js +23 -0
- package/dist/core/browser.d.ts +2 -0
- package/dist/core/browser.js +5 -0
- package/dist/core/plugin.d.ts +6 -0
- package/dist/core/plugin.js +3 -0
- package/dist/core/rsc.d.ts +3 -0
- package/dist/core/rsc.js +5 -0
- package/dist/core/ssr.d.ts +3 -0
- package/dist/core/ssr.js +5 -0
- package/dist/dist-DEF94lDJ.js +41 -0
- package/dist/encryption-utils-BDwwcMVT.js +73 -0
- package/dist/extra/browser.d.ts +7 -0
- package/dist/extra/browser.js +83 -0
- package/dist/extra/rsc.d.ts +2 -0
- package/dist/extra/rsc.js +60 -0
- package/dist/extra/ssr.d.ts +10 -0
- package/dist/extra/ssr.js +35 -0
- package/dist/index-BHqtj9tT.d.ts +26 -0
- package/dist/index.d.ts +24 -0
- package/dist/index.js +8 -0
- package/dist/plugin-BvUB-eig.js +1470 -0
- package/dist/plugin-CZbI4rhS.js +24 -0
- package/dist/plugin-Dg2agPFN.d.ts +88 -0
- package/dist/plugin.d.ts +2 -0
- package/dist/plugin.js +8 -0
- package/dist/react/browser.d.ts +4 -0
- package/dist/react/browser.js +6 -0
- package/dist/react/rsc.d.ts +4 -0
- package/dist/react/rsc.js +6 -0
- package/dist/react/ssr.d.ts +4 -0
- package/dist/react/ssr.js +6 -0
- package/dist/rpc-tGuLT8PD.js +47 -0
- package/dist/rsc-BOV3yNSd.d.ts +12 -0
- package/dist/rsc-Cmvt9txp.d.ts +13 -0
- package/dist/rsc-DHfL29FT.js +36 -0
- package/dist/rsc-DKA6wwTB.js +78 -0
- package/dist/rsc-DgrejoNf.d.ts +15 -0
- package/dist/rsc-DmPsJrxF.js +42 -0
- package/dist/rsc-html-stream/browser.d.ts +4 -0
- package/dist/rsc-html-stream/browser.js +7 -0
- package/dist/rsc-html-stream/ssr.d.ts +6 -0
- package/dist/rsc-html-stream/ssr.js +7 -0
- package/dist/rsc.d.ts +13 -0
- package/dist/rsc.js +8 -0
- package/dist/server-DS3S6m0g.js +67 -0
- package/dist/shared-CEyKoKAb.js +22 -0
- package/dist/ssr-BOIYlvSn.js +23 -0
- package/dist/ssr-D5pxP29F.js +18 -0
- package/dist/ssr-D708H86k.d.ts +7 -0
- package/dist/ssr-DgSrGrln.d.ts +9 -0
- package/dist/ssr-Do_Ok_bB.js +47 -0
- package/dist/ssr.d.ts +4 -0
- package/dist/ssr.js +7 -0
- package/dist/utils/rpc.d.ts +7 -0
- package/dist/utils/rpc.js +3 -0
- package/dist/vendor/react-server-dom/LICENSE +21 -0
- package/dist/vendor/react-server-dom/README.md +5 -0
- package/dist/vendor/react-server-dom/cjs/react-server-dom-webpack-client.browser.development.js +2785 -0
- package/dist/vendor/react-server-dom/cjs/react-server-dom-webpack-client.browser.production.js +1664 -0
- package/dist/vendor/react-server-dom/cjs/react-server-dom-webpack-client.edge.development.js +2959 -0
- package/dist/vendor/react-server-dom/cjs/react-server-dom-webpack-client.edge.production.js +1845 -0
- package/dist/vendor/react-server-dom/cjs/react-server-dom-webpack-client.node.development.js +3002 -0
- package/dist/vendor/react-server-dom/cjs/react-server-dom-webpack-client.node.production.js +1894 -0
- package/dist/vendor/react-server-dom/cjs/react-server-dom-webpack-client.node.unbundled.development.js +2964 -0
- package/dist/vendor/react-server-dom/cjs/react-server-dom-webpack-client.node.unbundled.production.js +1859 -0
- package/dist/vendor/react-server-dom/cjs/react-server-dom-webpack-node-register.js +69 -0
- package/dist/vendor/react-server-dom/cjs/react-server-dom-webpack-plugin.js +400 -0
- package/dist/vendor/react-server-dom/cjs/react-server-dom-webpack-server.browser.development.js +4079 -0
- package/dist/vendor/react-server-dom/cjs/react-server-dom-webpack-server.browser.production.js +2806 -0
- package/dist/vendor/react-server-dom/cjs/react-server-dom-webpack-server.edge.development.js +4187 -0
- package/dist/vendor/react-server-dom/cjs/react-server-dom-webpack-server.edge.production.js +2845 -0
- package/dist/vendor/react-server-dom/cjs/react-server-dom-webpack-server.node.development.js +4195 -0
- package/dist/vendor/react-server-dom/cjs/react-server-dom-webpack-server.node.production.js +2902 -0
- package/dist/vendor/react-server-dom/cjs/react-server-dom-webpack-server.node.unbundled.development.js +4158 -0
- package/dist/vendor/react-server-dom/cjs/react-server-dom-webpack-server.node.unbundled.production.js +2868 -0
- package/dist/vendor/react-server-dom/client.browser.js +7 -0
- package/dist/vendor/react-server-dom/client.edge.js +7 -0
- package/dist/vendor/react-server-dom/client.js +3 -0
- package/dist/vendor/react-server-dom/client.node.js +7 -0
- package/dist/vendor/react-server-dom/client.node.unbundled.js +7 -0
- package/dist/vendor/react-server-dom/esm/package.json +3 -0
- package/dist/vendor/react-server-dom/esm/react-server-dom-webpack-node-loader.production.js +515 -0
- package/dist/vendor/react-server-dom/index.js +12 -0
- package/dist/vendor/react-server-dom/node-register.js +3 -0
- package/dist/vendor/react-server-dom/package.json +111 -0
- package/dist/vendor/react-server-dom/plugin.js +3 -0
- package/dist/vendor/react-server-dom/server.browser.js +17 -0
- package/dist/vendor/react-server-dom/server.edge.js +18 -0
- package/dist/vendor/react-server-dom/server.js +6 -0
- package/dist/vendor/react-server-dom/server.node.js +18 -0
- package/dist/vendor/react-server-dom/server.node.unbundled.js +18 -0
- package/dist/vendor/react-server-dom/static.browser.js +12 -0
- package/dist/vendor/react-server-dom/static.edge.js +12 -0
- package/dist/vendor/react-server-dom/static.js +6 -0
- package/dist/vendor/react-server-dom/static.node.js +12 -0
- package/dist/vendor/react-server-dom/static.node.unbundled.js +12 -0
- package/dist/vite-utils-CcqBE-C4.js +64 -0
- package/dist/vite-utils.d.ts +21 -0
- package/dist/vite-utils.js +3 -0
- package/package.json +3 -2
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
//#region src/core/plugin.ts
|
|
2
|
+
function vitePluginRscCore() {
|
|
3
|
+
return [{
|
|
4
|
+
name: "rsc:patch-react-server-dom-webpack",
|
|
5
|
+
transform(originalCode, _id, _options) {
|
|
6
|
+
let code = originalCode;
|
|
7
|
+
if (code.includes("__webpack_require__.u")) code = code.replaceAll("__webpack_require__.u", "({}).u");
|
|
8
|
+
if (code.includes("__webpack_require__")) code = code.replaceAll("__webpack_require__", "__vite_rsc_require__");
|
|
9
|
+
if (code !== originalCode) return {
|
|
10
|
+
code,
|
|
11
|
+
map: null
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
}, {
|
|
15
|
+
name: "rsc:workaround-linked-dep",
|
|
16
|
+
apply: () => !import.meta.url.includes("/node_modules/"),
|
|
17
|
+
configEnvironment() {
|
|
18
|
+
return { build: { commonjsOptions: { include: [/\/node_modules\//, /\/vendor\/react-server-dom\//] } } };
|
|
19
|
+
}
|
|
20
|
+
}];
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
//#endregion
|
|
24
|
+
export { vitePluginRscCore };
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import MagicString from "magic-string";
|
|
2
|
+
import { Plugin, ViteDevServer, parseAstAsync } from "vite";
|
|
3
|
+
import { Program } from "estree";
|
|
4
|
+
|
|
5
|
+
//#region src/transforms/wrap-export.d.ts
|
|
6
|
+
type ExportMeta = {
|
|
7
|
+
declName?: string;
|
|
8
|
+
isFunction?: boolean;
|
|
9
|
+
defaultExportIdentifierName?: string;
|
|
10
|
+
};
|
|
11
|
+
type TransformWrapExportFilter = (name: string, meta: ExportMeta) => boolean;
|
|
12
|
+
//#endregion
|
|
13
|
+
//#region src/plugin.d.ts
|
|
14
|
+
type RscPluginOptions = {
|
|
15
|
+
/**
|
|
16
|
+
* shorthand for configuring `environments.(name).build.rollupOptions.input.index`
|
|
17
|
+
*/
|
|
18
|
+
entries?: Partial<Record<"client" | "ssr" | "rsc", string>>;
|
|
19
|
+
/** @deprecated use `serverHandler: false` */
|
|
20
|
+
disableServerHandler?: boolean;
|
|
21
|
+
/** @default { enviornmentName: "rsc", entryName: "index" } */
|
|
22
|
+
serverHandler?: {
|
|
23
|
+
environmentName: string;
|
|
24
|
+
entryName: string;
|
|
25
|
+
} | false;
|
|
26
|
+
/** @default false */
|
|
27
|
+
loadModuleDevProxy?: boolean;
|
|
28
|
+
rscCssTransform?: false | {
|
|
29
|
+
filter?: (id: string) => boolean;
|
|
30
|
+
};
|
|
31
|
+
ignoredPackageWarnings?: (string | RegExp)[];
|
|
32
|
+
/**
|
|
33
|
+
* This option allows customizing how client build copies assets from server build.
|
|
34
|
+
* By default, all assets are copied, but frameworks might want to establish some convention
|
|
35
|
+
* to tighten security based on this option.
|
|
36
|
+
*/
|
|
37
|
+
copyServerAssetsToClient?: (fileName: string) => boolean;
|
|
38
|
+
defineEncryptionKey?: string;
|
|
39
|
+
/**
|
|
40
|
+
* Allows enabling action closure encryption for debugging purpose.
|
|
41
|
+
* @default true
|
|
42
|
+
*/
|
|
43
|
+
enableActionEncryption?: boolean;
|
|
44
|
+
/** Escape hatch for Waku's `allowServer` */
|
|
45
|
+
keepUseCientProxy?: boolean;
|
|
46
|
+
};
|
|
47
|
+
declare function vitePluginRsc(rscPluginOptions?: RscPluginOptions): Plugin[];
|
|
48
|
+
//
|
|
49
|
+
// collect client reference dependency chunk for modulepreload
|
|
50
|
+
//
|
|
51
|
+
type AssetsManifest = {
|
|
52
|
+
bootstrapScriptContent: string;
|
|
53
|
+
clientReferenceDeps: Record<string, AssetDeps>;
|
|
54
|
+
serverResources?: Record<string, {
|
|
55
|
+
css: string[];
|
|
56
|
+
}>;
|
|
57
|
+
};
|
|
58
|
+
type AssetDeps = {
|
|
59
|
+
js: string[];
|
|
60
|
+
css: string[];
|
|
61
|
+
};
|
|
62
|
+
//
|
|
63
|
+
// support findSourceMapURL
|
|
64
|
+
// https://github.com/facebook/react/pull/29708
|
|
65
|
+
// https://github.com/facebook/react/pull/30741
|
|
66
|
+
//
|
|
67
|
+
declare function vitePluginFindSourceMapURL(): Plugin[];
|
|
68
|
+
declare function findSourceMapURL(server: ViteDevServer, filename: string, environmentName: string): Promise<object | undefined>;
|
|
69
|
+
//
|
|
70
|
+
// css support
|
|
71
|
+
//
|
|
72
|
+
declare function vitePluginRscCss(rscCssOptions?: Pick<RscPluginOptions, "rscCssTransform">): Plugin[];
|
|
73
|
+
declare function transformRscCssExport(options: {
|
|
74
|
+
ast: Awaited<ReturnType<typeof parseAstAsync>>;
|
|
75
|
+
code: string;
|
|
76
|
+
id?: string;
|
|
77
|
+
filter: TransformWrapExportFilter;
|
|
78
|
+
}): Promise<{
|
|
79
|
+
output: MagicString;
|
|
80
|
+
} | undefined>;
|
|
81
|
+
/**
|
|
82
|
+
* temporary workaround for
|
|
83
|
+
* - https://github.com/cloudflare/workers-sdk/issues/9538 (fixed in @cloudflare/vite-plugin@1.8.0)
|
|
84
|
+
* - https://github.com/vitejs/vite/pull/20077 (fixed in vite@7.0.0)
|
|
85
|
+
*/
|
|
86
|
+
declare function __fix_cloudflare(): Plugin;
|
|
87
|
+
//#endregion
|
|
88
|
+
export { AssetDeps, AssetsManifest, RscPluginOptions, __fix_cloudflare, findSourceMapURL, transformRscCssExport, vitePluginFindSourceMapURL, vitePluginRsc, vitePluginRscCss };
|
package/dist/plugin.d.ts
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import { AssetDeps, AssetsManifest, RscPluginOptions, __fix_cloudflare, findSourceMapURL, transformRscCssExport, vitePluginFindSourceMapURL, vitePluginRsc, vitePluginRscCss } from "./plugin-Dg2agPFN.js";
|
|
2
|
+
export { AssetDeps, AssetsManifest, RscPluginOptions, __fix_cloudflare, vitePluginRsc as default, findSourceMapURL, transformRscCssExport, vitePluginFindSourceMapURL, vitePluginRscCss };
|
package/dist/plugin.js
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import "./dist-DEF94lDJ.js";
|
|
2
|
+
import "./plugin-CZbI4rhS.js";
|
|
3
|
+
import { __fix_cloudflare, findSourceMapURL, transformRscCssExport, vitePluginFindSourceMapURL, vitePluginRsc, vitePluginRscCss } from "./plugin-BvUB-eig.js";
|
|
4
|
+
import "./encryption-utils-BDwwcMVT.js";
|
|
5
|
+
import "./rpc-tGuLT8PD.js";
|
|
6
|
+
import "./vite-utils-CcqBE-C4.js";
|
|
7
|
+
|
|
8
|
+
export { __fix_cloudflare, vitePluginRsc as default, findSourceMapURL, transformRscCssExport, vitePluginFindSourceMapURL, vitePluginRscCss };
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { CallServerCallback } from "../index-BHqtj9tT.js";
|
|
2
|
+
import { setRequireModule } from "../browser-Dw18EFgE.js";
|
|
3
|
+
import { callServer, createFromFetch, createFromReadableStream, createServerReference, createTemporaryReferenceSet, encodeReply, findSourceMapURL, setServerCallback } from "../browser-DjnGtEmB.js";
|
|
4
|
+
export { CallServerCallback, callServer, createFromFetch, createFromReadableStream, createServerReference, createTemporaryReferenceSet, encodeReply, findSourceMapURL, setRequireModule, setServerCallback };
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import "../dist-DEF94lDJ.js";
|
|
2
|
+
import "../shared-CEyKoKAb.js";
|
|
3
|
+
import { setRequireModule } from "../browser-QWbIPyhO.js";
|
|
4
|
+
import { callServer, createFromFetch, createFromReadableStream, createServerReference, createTemporaryReferenceSet, encodeReply, findSourceMapURL, setServerCallback } from "../browser-D8OPzpF5.js";
|
|
5
|
+
|
|
6
|
+
export { callServer, createFromFetch, createFromReadableStream, createServerReference, createTemporaryReferenceSet, encodeReply, findSourceMapURL, setRequireModule, setServerCallback };
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import "../index-BHqtj9tT.js";
|
|
2
|
+
import { loadServerAction, setRequireModule } from "../rsc-BOV3yNSd.js";
|
|
3
|
+
import { createClientTemporaryReferenceSet, createFromReadableStream, createTemporaryReferenceSet, decodeAction, decodeFormState, decodeReply, encodeReply, registerClientReference, registerServerReference, renderToReadableStream } from "../rsc-DgrejoNf.js";
|
|
4
|
+
export { createClientTemporaryReferenceSet, createFromReadableStream, createTemporaryReferenceSet, decodeAction, decodeFormState, decodeReply, encodeReply, loadServerAction, registerClientReference, registerServerReference, renderToReadableStream, setRequireModule };
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import "../dist-DEF94lDJ.js";
|
|
2
|
+
import "../shared-CEyKoKAb.js";
|
|
3
|
+
import { loadServerAction, setRequireModule } from "../rsc-DKA6wwTB.js";
|
|
4
|
+
import { createClientTemporaryReferenceSet, createFromReadableStream, createTemporaryReferenceSet, decodeAction, decodeFormState, decodeReply, encodeReply, registerClientReference, registerServerReference, renderToReadableStream } from "../rsc-DHfL29FT.js";
|
|
5
|
+
|
|
6
|
+
export { createClientTemporaryReferenceSet, createFromReadableStream, createTemporaryReferenceSet, decodeAction, decodeFormState, decodeReply, encodeReply, loadServerAction, registerClientReference, registerServerReference, renderToReadableStream, setRequireModule };
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import "../index-BHqtj9tT.js";
|
|
2
|
+
import { setRequireModule } from "../ssr-DgSrGrln.js";
|
|
3
|
+
import { callServer, createFromReadableStream, createServerReference, findSourceMapURL } from "../ssr-D708H86k.js";
|
|
4
|
+
export { callServer, createFromReadableStream, createServerReference, findSourceMapURL, setRequireModule };
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import "../dist-DEF94lDJ.js";
|
|
2
|
+
import "../shared-CEyKoKAb.js";
|
|
3
|
+
import { setRequireModule } from "../ssr-BOIYlvSn.js";
|
|
4
|
+
import { callServer, createFromReadableStream, createServerReference, findSourceMapURL } from "../ssr-D5pxP29F.js";
|
|
5
|
+
|
|
6
|
+
export { callServer, createFromReadableStream, createServerReference, findSourceMapURL, setRequireModule };
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { decode, encode } from "turbo-stream";
|
|
2
|
+
|
|
3
|
+
//#region src/utils/rpc.ts
|
|
4
|
+
function createRpcServer(handlers) {
|
|
5
|
+
return async (request) => {
|
|
6
|
+
if (!request.body) throw new Error(`loadModuleDevProxy error: missing request body`);
|
|
7
|
+
const reqPayload = await decode(request.body.pipeThrough(new TextDecoderStream()));
|
|
8
|
+
const handler = handlers[reqPayload.method];
|
|
9
|
+
if (!handler) throw new Error(`loadModuleDevProxy error: unknown method ${reqPayload.method}`);
|
|
10
|
+
const resPayload = {
|
|
11
|
+
ok: true,
|
|
12
|
+
data: void 0
|
|
13
|
+
};
|
|
14
|
+
try {
|
|
15
|
+
resPayload.data = await handler(...reqPayload.args);
|
|
16
|
+
} catch (e) {
|
|
17
|
+
resPayload.ok = false;
|
|
18
|
+
resPayload.data = e;
|
|
19
|
+
}
|
|
20
|
+
return new Response(encode(resPayload));
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
function createRpcClient(options) {
|
|
24
|
+
async function callRpc(method, args) {
|
|
25
|
+
const reqPayload = {
|
|
26
|
+
method,
|
|
27
|
+
args
|
|
28
|
+
};
|
|
29
|
+
const body = encode(reqPayload).pipeThrough(new TextEncoderStream());
|
|
30
|
+
const res = await fetch(options.endpoint, {
|
|
31
|
+
method: "POST",
|
|
32
|
+
body,
|
|
33
|
+
duplex: "half"
|
|
34
|
+
});
|
|
35
|
+
if (!res.ok || !res.body) throw new Error(`loadModuleDevProxy error: ${res.status} ${res.statusText}`);
|
|
36
|
+
const resPayload = await decode(res.body.pipeThrough(new TextDecoderStream()));
|
|
37
|
+
if (!resPayload.ok) throw resPayload.data;
|
|
38
|
+
return resPayload.data;
|
|
39
|
+
}
|
|
40
|
+
return new Proxy({}, { get(_target, p, _receiver) {
|
|
41
|
+
if (typeof p !== "string" || p === "then") return;
|
|
42
|
+
return (...args) => callRpc(p, args);
|
|
43
|
+
} });
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
//#endregion
|
|
47
|
+
export { createRpcClient, createRpcServer };
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { BundlerConfig, ModuleMap } from "./index-BHqtj9tT.js";
|
|
2
|
+
|
|
3
|
+
//#region src/core/rsc.d.ts
|
|
4
|
+
declare function setRequireModule(options: {
|
|
5
|
+
load: (id: string) => unknown;
|
|
6
|
+
}): void;
|
|
7
|
+
declare function loadServerAction(id: string): Promise<Function>;
|
|
8
|
+
declare function createServerManifest(): BundlerConfig;
|
|
9
|
+
declare function createServerDecodeClientManifest(): ModuleMap;
|
|
10
|
+
declare function createClientManifest(): BundlerConfig;
|
|
11
|
+
//#endregion
|
|
12
|
+
export { createClientManifest, createServerDecodeClientManifest, createServerManifest, loadServerAction, setRequireModule };
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { ReactFormState } from "react-dom/client";
|
|
2
|
+
|
|
3
|
+
//#region src/extra/rsc.d.ts
|
|
4
|
+
type RscPayload = {
|
|
5
|
+
root: React.ReactNode;
|
|
6
|
+
formState?: ReactFormState;
|
|
7
|
+
returnValue?: unknown;
|
|
8
|
+
};
|
|
9
|
+
declare function renderRequest(request: Request, root: React.ReactNode, options?: {
|
|
10
|
+
nonce?: string;
|
|
11
|
+
}): Promise<Response>;
|
|
12
|
+
//#endregion
|
|
13
|
+
export { RscPayload, renderRequest };
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { createClientManifest, createServerDecodeClientManifest, createServerManifest } from "./rsc-DKA6wwTB.js";
|
|
2
|
+
import * as ReactServer from "@vitejs/plugin-rsc/vendor/react-server-dom/server.edge";
|
|
3
|
+
import * as ReactClient from "@vitejs/plugin-rsc/vendor/react-server-dom/client.edge";
|
|
4
|
+
|
|
5
|
+
//#region src/react/rsc.ts
|
|
6
|
+
function renderToReadableStream(data, options) {
|
|
7
|
+
return ReactServer.renderToReadableStream(data, createClientManifest(), options);
|
|
8
|
+
}
|
|
9
|
+
function createFromReadableStream(stream, options = {}) {
|
|
10
|
+
return ReactClient.createFromReadableStream(stream, {
|
|
11
|
+
serverConsumerManifest: {
|
|
12
|
+
serverModuleMap: createServerManifest(),
|
|
13
|
+
moduleMap: createServerDecodeClientManifest()
|
|
14
|
+
},
|
|
15
|
+
...options
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
function registerClientReference(proxy, id, name) {
|
|
19
|
+
return ReactServer.registerClientReference(proxy, id, name);
|
|
20
|
+
}
|
|
21
|
+
const registerServerReference = ReactServer.registerServerReference;
|
|
22
|
+
function decodeReply(body, options) {
|
|
23
|
+
return ReactServer.decodeReply(body, createServerManifest(), options);
|
|
24
|
+
}
|
|
25
|
+
function decodeAction(body) {
|
|
26
|
+
return ReactServer.decodeAction(body, createServerManifest());
|
|
27
|
+
}
|
|
28
|
+
function decodeFormState(actionResult, body) {
|
|
29
|
+
return ReactServer.decodeFormState(actionResult, body, createServerManifest());
|
|
30
|
+
}
|
|
31
|
+
const createTemporaryReferenceSet = ReactServer.createTemporaryReferenceSet;
|
|
32
|
+
const encodeReply = ReactClient.encodeReply;
|
|
33
|
+
const createClientTemporaryReferenceSet = ReactClient.createTemporaryReferenceSet;
|
|
34
|
+
|
|
35
|
+
//#endregion
|
|
36
|
+
export { createClientTemporaryReferenceSet, createFromReadableStream, createTemporaryReferenceSet, decodeAction, decodeFormState, decodeReply, encodeReply, registerClientReference, registerServerReference, renderToReadableStream };
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { memoize, tinyassert } from "./dist-DEF94lDJ.js";
|
|
2
|
+
import { SERVER_DECODE_CLIENT_PREFIX, SERVER_REFERENCE_PREFIX, createReferenceCacheTag, removeReferenceCacheTag, setInternalRequire } from "./shared-CEyKoKAb.js";
|
|
3
|
+
import * as ReactServer from "@vitejs/plugin-rsc/vendor/react-server-dom/server.edge";
|
|
4
|
+
|
|
5
|
+
//#region src/core/rsc.ts
|
|
6
|
+
let init = false;
|
|
7
|
+
let requireModule;
|
|
8
|
+
function setRequireModule(options) {
|
|
9
|
+
if (init) return;
|
|
10
|
+
init = true;
|
|
11
|
+
requireModule = (id) => {
|
|
12
|
+
return options.load(removeReferenceCacheTag(id));
|
|
13
|
+
};
|
|
14
|
+
globalThis.__vite_rsc_server_require__ = memoize(async (id) => {
|
|
15
|
+
if (id.startsWith(SERVER_DECODE_CLIENT_PREFIX)) {
|
|
16
|
+
id = id.slice(SERVER_DECODE_CLIENT_PREFIX.length);
|
|
17
|
+
id = removeReferenceCacheTag(id);
|
|
18
|
+
return new Proxy({}, { get(target, name, _receiver) {
|
|
19
|
+
if (typeof name !== "string" || name === "then") return;
|
|
20
|
+
return target[name] ??= ReactServer.registerClientReference(() => {
|
|
21
|
+
throw new Error(`Unexpectedly client reference export '${name}' is called on server`);
|
|
22
|
+
}, id, name);
|
|
23
|
+
} });
|
|
24
|
+
}
|
|
25
|
+
return requireModule(id);
|
|
26
|
+
});
|
|
27
|
+
setInternalRequire();
|
|
28
|
+
}
|
|
29
|
+
async function loadServerAction(id) {
|
|
30
|
+
const [file, name] = id.split("#");
|
|
31
|
+
const mod = await requireModule(file);
|
|
32
|
+
return mod[name];
|
|
33
|
+
}
|
|
34
|
+
function createServerManifest() {
|
|
35
|
+
const cacheTag = import.meta.env.DEV ? createReferenceCacheTag() : "";
|
|
36
|
+
return new Proxy({}, { get(_target, $$id, _receiver) {
|
|
37
|
+
tinyassert(typeof $$id === "string");
|
|
38
|
+
let [id, name] = $$id.split("#");
|
|
39
|
+
tinyassert(id);
|
|
40
|
+
tinyassert(name);
|
|
41
|
+
return {
|
|
42
|
+
id: SERVER_REFERENCE_PREFIX + id + cacheTag,
|
|
43
|
+
name,
|
|
44
|
+
chunks: [],
|
|
45
|
+
async: true
|
|
46
|
+
};
|
|
47
|
+
} });
|
|
48
|
+
}
|
|
49
|
+
function createServerDecodeClientManifest() {
|
|
50
|
+
return new Proxy({}, { get(_target, id) {
|
|
51
|
+
return new Proxy({}, { get(_target$1, name) {
|
|
52
|
+
return {
|
|
53
|
+
id: SERVER_REFERENCE_PREFIX + SERVER_DECODE_CLIENT_PREFIX + id,
|
|
54
|
+
name,
|
|
55
|
+
chunks: [],
|
|
56
|
+
async: true
|
|
57
|
+
};
|
|
58
|
+
} });
|
|
59
|
+
} });
|
|
60
|
+
}
|
|
61
|
+
function createClientManifest() {
|
|
62
|
+
const cacheTag = import.meta.env.DEV ? createReferenceCacheTag() : "";
|
|
63
|
+
return new Proxy({}, { get(_target, $$id, _receiver) {
|
|
64
|
+
tinyassert(typeof $$id === "string");
|
|
65
|
+
let [id, name] = $$id.split("#");
|
|
66
|
+
tinyassert(id);
|
|
67
|
+
tinyassert(name);
|
|
68
|
+
return {
|
|
69
|
+
id: id + cacheTag,
|
|
70
|
+
name,
|
|
71
|
+
chunks: [],
|
|
72
|
+
async: true
|
|
73
|
+
};
|
|
74
|
+
} });
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
//#endregion
|
|
78
|
+
export { createClientManifest, createServerDecodeClientManifest, createServerManifest, loadServerAction, setRequireModule };
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { ReactFormState } from "react-dom/client";
|
|
2
|
+
|
|
3
|
+
//#region src/react/rsc.d.ts
|
|
4
|
+
declare function renderToReadableStream<T>(data: T, options?: object): ReadableStream<Uint8Array>;
|
|
5
|
+
declare function createFromReadableStream<T>(stream: ReadableStream<Uint8Array>, options?: object): Promise<T>;
|
|
6
|
+
declare function registerClientReference<T>(proxy: T, id: string, name: string): T;
|
|
7
|
+
declare const registerServerReference: <T>(ref: T, id: string, name: string) => T;
|
|
8
|
+
declare function decodeReply(body: string | FormData, options?: unknown): Promise<unknown[]>;
|
|
9
|
+
declare function decodeAction(body: FormData): Promise<() => Promise<void>>;
|
|
10
|
+
declare function decodeFormState(actionResult: unknown, body: FormData): Promise<ReactFormState | undefined>;
|
|
11
|
+
declare const createTemporaryReferenceSet: () => unknown;
|
|
12
|
+
declare const encodeReply: (v: unknown[], options?: unknown) => Promise<string | FormData>;
|
|
13
|
+
declare const createClientTemporaryReferenceSet: () => unknown;
|
|
14
|
+
//#endregion
|
|
15
|
+
export { createClientTemporaryReferenceSet, createFromReadableStream, createTemporaryReferenceSet, decodeAction, decodeFormState, decodeReply, encodeReply, registerClientReference, registerServerReference, renderToReadableStream };
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { once } from "./dist-DEF94lDJ.js";
|
|
2
|
+
import { arrayToStream, concatArrayStream, decryptBuffer, encryptBuffer, fromBase64 } from "./encryption-utils-BDwwcMVT.js";
|
|
3
|
+
import { setRequireModule } from "./rsc-DKA6wwTB.js";
|
|
4
|
+
import { createFromReadableStream, renderToReadableStream } from "./rsc-DHfL29FT.js";
|
|
5
|
+
import serverReferences from "virtual:vite-rsc/server-references";
|
|
6
|
+
import encryptionKeySource from "virtual:vite-rsc/encryption-key";
|
|
7
|
+
|
|
8
|
+
//#region src/utils/encryption-runtime.ts
|
|
9
|
+
async function encryptActionBoundArgs(originalValue) {
|
|
10
|
+
const serialized = renderToReadableStream(originalValue);
|
|
11
|
+
const serializedBuffer = await concatArrayStream(serialized);
|
|
12
|
+
return encryptBuffer(serializedBuffer, await getEncryptionKey());
|
|
13
|
+
}
|
|
14
|
+
async function decryptActionBoundArgs(encrypted) {
|
|
15
|
+
const serializedBuffer = await decryptBuffer(await encrypted, await getEncryptionKey());
|
|
16
|
+
const serialized = arrayToStream(new Uint8Array(serializedBuffer));
|
|
17
|
+
return createFromReadableStream(serialized);
|
|
18
|
+
}
|
|
19
|
+
const getEncryptionKey = /* @__PURE__ */ once(async () => {
|
|
20
|
+
const resolved = await encryptionKeySource();
|
|
21
|
+
const key = await crypto.subtle.importKey("raw", fromBase64(resolved), { name: "AES-GCM" }, true, ["encrypt", "decrypt"]);
|
|
22
|
+
return key;
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
//#endregion
|
|
26
|
+
//#region src/rsc.tsx
|
|
27
|
+
initialize();
|
|
28
|
+
function initialize() {
|
|
29
|
+
setRequireModule({ load: async (id) => {
|
|
30
|
+
if (!import.meta.env.__vite_rsc_build__) return import(
|
|
31
|
+
/* @vite-ignore */
|
|
32
|
+
id);
|
|
33
|
+
else {
|
|
34
|
+
const import_ = serverReferences[id];
|
|
35
|
+
if (!import_) throw new Error(`server reference not found '${id}'`);
|
|
36
|
+
return import_();
|
|
37
|
+
}
|
|
38
|
+
} });
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
//#endregion
|
|
42
|
+
export { decryptActionBoundArgs, encryptActionBoundArgs };
|
package/dist/rsc.d.ts
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import "./index-BHqtj9tT.js";
|
|
2
|
+
import { createClientManifest, createServerManifest, loadServerAction, setRequireModule } from "./rsc-BOV3yNSd.js";
|
|
3
|
+
import { createClientTemporaryReferenceSet, createFromReadableStream, createTemporaryReferenceSet, decodeAction, decodeFormState, decodeReply, encodeReply, registerClientReference, registerServerReference, renderToReadableStream } from "./rsc-DgrejoNf.js";
|
|
4
|
+
|
|
5
|
+
//#region src/utils/encryption-runtime.d.ts
|
|
6
|
+
// based on
|
|
7
|
+
// https://github.com/parcel-bundler/parcel/blob/9855f558a69edde843b1464f39a6010f6b421efe/packages/transformers/js/src/rsc-utils.js
|
|
8
|
+
// https://github.com/vercel/next.js/blob/c10c10daf9e95346c31c24dc49d6b7cda48b5bc8/packages/next/src/server/app-render/encryption.ts
|
|
9
|
+
// https://github.com/vercel/next.js/pull/56377
|
|
10
|
+
declare function encryptActionBoundArgs(originalValue: unknown): Promise<string>;
|
|
11
|
+
declare function decryptActionBoundArgs(encrypted: ReturnType<typeof encryptActionBoundArgs>): Promise<unknown>;
|
|
12
|
+
//#endregion
|
|
13
|
+
export { createClientManifest, createClientTemporaryReferenceSet, createFromReadableStream, createServerManifest, createTemporaryReferenceSet, decodeAction, decodeFormState, decodeReply, decryptActionBoundArgs, encodeReply, encryptActionBoundArgs, loadServerAction, registerClientReference, registerServerReference, renderToReadableStream, setRequireModule };
|
package/dist/rsc.js
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import "./dist-DEF94lDJ.js";
|
|
2
|
+
import "./shared-CEyKoKAb.js";
|
|
3
|
+
import "./encryption-utils-BDwwcMVT.js";
|
|
4
|
+
import { createClientManifest, createServerManifest, loadServerAction, setRequireModule } from "./rsc-DKA6wwTB.js";
|
|
5
|
+
import { createClientTemporaryReferenceSet, createFromReadableStream, createTemporaryReferenceSet, decodeAction, decodeFormState, decodeReply, encodeReply, registerClientReference, registerServerReference, renderToReadableStream } from "./rsc-DHfL29FT.js";
|
|
6
|
+
import { decryptActionBoundArgs, encryptActionBoundArgs } from "./rsc-DmPsJrxF.js";
|
|
7
|
+
|
|
8
|
+
export { createClientManifest, createClientTemporaryReferenceSet, createFromReadableStream, createServerManifest, createTemporaryReferenceSet, decodeAction, decodeFormState, decodeReply, decryptActionBoundArgs, encodeReply, encryptActionBoundArgs, loadServerAction, registerClientReference, registerServerReference, renderToReadableStream, setRequireModule };
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
//#region ../../node_modules/.pnpm/rsc-html-stream@0.0.6/node_modules/rsc-html-stream/server.js
|
|
2
|
+
const encoder = new TextEncoder();
|
|
3
|
+
const trailer = "</body></html>";
|
|
4
|
+
function injectRSCPayload(rscStream, options) {
|
|
5
|
+
let decoder = new TextDecoder();
|
|
6
|
+
let resolveFlightDataPromise;
|
|
7
|
+
let flightDataPromise = new Promise((resolve) => resolveFlightDataPromise = resolve);
|
|
8
|
+
let startedRSC = false;
|
|
9
|
+
let nonce = options && typeof options.nonce === "string" ? options.nonce : void 0;
|
|
10
|
+
let buffered = [];
|
|
11
|
+
let timeout = null;
|
|
12
|
+
function flushBufferedChunks(controller) {
|
|
13
|
+
for (let chunk of buffered) {
|
|
14
|
+
let buf = decoder.decode(chunk, { stream: true });
|
|
15
|
+
if (buf.endsWith(trailer)) buf = buf.slice(0, -14);
|
|
16
|
+
controller.enqueue(encoder.encode(buf));
|
|
17
|
+
}
|
|
18
|
+
let remaining = decoder.decode();
|
|
19
|
+
if (remaining.length) {
|
|
20
|
+
if (remaining.endsWith(trailer)) remaining = remaining.slice(0, -14);
|
|
21
|
+
controller.enqueue(encoder.encode(remaining));
|
|
22
|
+
}
|
|
23
|
+
buffered.length = 0;
|
|
24
|
+
timeout = null;
|
|
25
|
+
}
|
|
26
|
+
return new TransformStream({
|
|
27
|
+
transform(chunk, controller) {
|
|
28
|
+
buffered.push(chunk);
|
|
29
|
+
if (timeout) return;
|
|
30
|
+
timeout = setTimeout(async () => {
|
|
31
|
+
flushBufferedChunks(controller);
|
|
32
|
+
if (!startedRSC) {
|
|
33
|
+
startedRSC = true;
|
|
34
|
+
writeRSCStream(rscStream, controller, nonce).catch((err) => controller.error(err)).then(resolveFlightDataPromise);
|
|
35
|
+
}
|
|
36
|
+
}, 0);
|
|
37
|
+
},
|
|
38
|
+
async flush(controller) {
|
|
39
|
+
await flightDataPromise;
|
|
40
|
+
if (timeout) {
|
|
41
|
+
clearTimeout(timeout);
|
|
42
|
+
flushBufferedChunks(controller);
|
|
43
|
+
}
|
|
44
|
+
controller.enqueue(encoder.encode(trailer));
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
async function writeRSCStream(rscStream, controller, nonce) {
|
|
49
|
+
let decoder = new TextDecoder("utf-8", { fatal: true });
|
|
50
|
+
for await (let chunk of rscStream) try {
|
|
51
|
+
writeChunk(JSON.stringify(decoder.decode(chunk, { stream: true })), controller, nonce);
|
|
52
|
+
} catch (err) {
|
|
53
|
+
let base64 = JSON.stringify(btoa(String.fromCodePoint(...chunk)));
|
|
54
|
+
writeChunk(`Uint8Array.from(atob(${base64}), m => m.codePointAt(0))`, controller, nonce);
|
|
55
|
+
}
|
|
56
|
+
let remaining = decoder.decode();
|
|
57
|
+
if (remaining.length) writeChunk(JSON.stringify(remaining), controller, nonce);
|
|
58
|
+
}
|
|
59
|
+
function writeChunk(chunk, controller, nonce) {
|
|
60
|
+
controller.enqueue(encoder.encode(`<script${nonce ? ` nonce="${nonce}"` : ""}>${escapeScript(`(self.__FLIGHT_DATA||=[]).push(${chunk})`)}<\/script>`));
|
|
61
|
+
}
|
|
62
|
+
function escapeScript(script) {
|
|
63
|
+
return script.replace(/<!--/g, "<\\!--").replace(/<\/(script)/gi, "</\\$1");
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
//#endregion
|
|
67
|
+
export { injectRSCPayload };
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
//#region src/core/shared.ts
|
|
2
|
+
const SERVER_REFERENCE_PREFIX = "$$server:";
|
|
3
|
+
const SERVER_DECODE_CLIENT_PREFIX = "$$decode-client:";
|
|
4
|
+
function createReferenceCacheTag() {
|
|
5
|
+
const cache = Math.random().toString(36).slice(2);
|
|
6
|
+
return "$$cache=" + cache;
|
|
7
|
+
}
|
|
8
|
+
function removeReferenceCacheTag(id) {
|
|
9
|
+
return id.split("$$cache=")[0];
|
|
10
|
+
}
|
|
11
|
+
function setInternalRequire() {
|
|
12
|
+
globalThis.__vite_rsc_require__ = (id) => {
|
|
13
|
+
if (id.startsWith(SERVER_REFERENCE_PREFIX)) {
|
|
14
|
+
id = id.slice(9);
|
|
15
|
+
return globalThis.__vite_rsc_server_require__(id);
|
|
16
|
+
}
|
|
17
|
+
return globalThis.__vite_rsc_client_require__(id);
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
//#endregion
|
|
22
|
+
export { SERVER_DECODE_CLIENT_PREFIX, SERVER_REFERENCE_PREFIX, createReferenceCacheTag, removeReferenceCacheTag, setInternalRequire };
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { memoize } from "./dist-DEF94lDJ.js";
|
|
2
|
+
import { removeReferenceCacheTag, setInternalRequire } from "./shared-CEyKoKAb.js";
|
|
3
|
+
|
|
4
|
+
//#region src/core/ssr.ts
|
|
5
|
+
let init = false;
|
|
6
|
+
function setRequireModule(options) {
|
|
7
|
+
if (init) return;
|
|
8
|
+
init = true;
|
|
9
|
+
const requireModule = memoize((id) => {
|
|
10
|
+
return options.load(removeReferenceCacheTag(id));
|
|
11
|
+
});
|
|
12
|
+
const clientRequire = (id) => {
|
|
13
|
+
return requireModule(id);
|
|
14
|
+
};
|
|
15
|
+
globalThis.__vite_rsc_client_require__ = clientRequire;
|
|
16
|
+
setInternalRequire();
|
|
17
|
+
}
|
|
18
|
+
function createServerConsumerManifest() {
|
|
19
|
+
return {};
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
//#endregion
|
|
23
|
+
export { createServerConsumerManifest, setRequireModule };
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { createServerConsumerManifest } from "./ssr-BOIYlvSn.js";
|
|
2
|
+
import * as ReactClient from "@vitejs/plugin-rsc/vendor/react-server-dom/client.edge";
|
|
3
|
+
|
|
4
|
+
//#region src/react/ssr.ts
|
|
5
|
+
function createFromReadableStream(stream, options = {}) {
|
|
6
|
+
return ReactClient.createFromReadableStream(stream, {
|
|
7
|
+
serverConsumerManifest: createServerConsumerManifest(),
|
|
8
|
+
...options
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
function createServerReference(id) {
|
|
12
|
+
return ReactClient.createServerReference(id);
|
|
13
|
+
}
|
|
14
|
+
const callServer = null;
|
|
15
|
+
const findSourceMapURL = null;
|
|
16
|
+
|
|
17
|
+
//#endregion
|
|
18
|
+
export { callServer, createFromReadableStream, createServerReference, findSourceMapURL };
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
//#region src/react/ssr.d.ts
|
|
2
|
+
declare function createFromReadableStream<T>(stream: ReadableStream<Uint8Array>, options?: object): Promise<T>;
|
|
3
|
+
declare function createServerReference(id: string): unknown;
|
|
4
|
+
declare const callServer: null;
|
|
5
|
+
declare const findSourceMapURL: null;
|
|
6
|
+
//#endregion
|
|
7
|
+
export { callServer, createFromReadableStream, createServerReference, findSourceMapURL };
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { ServerConsumerManifest } from "./index-BHqtj9tT.js";
|
|
2
|
+
|
|
3
|
+
//#region src/core/ssr.d.ts
|
|
4
|
+
declare function setRequireModule(options: {
|
|
5
|
+
load: (id: string) => unknown;
|
|
6
|
+
}): void;
|
|
7
|
+
declare function createServerConsumerManifest(): ServerConsumerManifest;
|
|
8
|
+
//#endregion
|
|
9
|
+
export { createServerConsumerManifest, setRequireModule };
|