vite-plugin-react-server 0.1.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/LICENSE +21 -0
- package/README.md +289 -0
- package/dist/build/createBuildConfig.d.ts +12 -0
- package/dist/build/createBuildConfig.d.ts.map +1 -0
- package/dist/build/createBuildConfig.js +55 -0
- package/dist/build/createBuildConfig.js.map +1 -0
- package/dist/checkFilesExist.d.ts +8 -0
- package/dist/checkFilesExist.d.ts.map +1 -0
- package/dist/checkFilesExist.js +61 -0
- package/dist/checkFilesExist.js.map +1 -0
- package/dist/collect-css-manifest.d.ts +4 -0
- package/dist/collect-css-manifest.d.ts.map +1 -0
- package/dist/collect-css-manifest.js +57 -0
- package/dist/collect-css-manifest.js.map +1 -0
- package/dist/components.d.ts +13 -0
- package/dist/components.d.ts.map +1 -0
- package/dist/components.js +13 -0
- package/dist/components.js.map +1 -0
- package/dist/copy-dir.d.ts +4 -0
- package/dist/copy-dir.d.ts.map +1 -0
- package/dist/getEnv.d.ts +19 -0
- package/dist/getEnv.d.ts.map +1 -0
- package/dist/getEnv.js +76 -0
- package/dist/getEnv.js.map +1 -0
- package/dist/helpers/normalizedRelativePath.d.ts +9 -0
- package/dist/helpers/normalizedRelativePath.d.ts.map +1 -0
- package/dist/helpers/normalizedRelativePath.js +31 -0
- package/dist/helpers/normalizedRelativePath.js.map +1 -0
- package/dist/helpers/tryManifest.d.ts +8 -0
- package/dist/helpers/tryManifest.d.ts.map +1 -0
- package/dist/html/createPageLoader.d.ts +26 -0
- package/dist/html/createPageLoader.d.ts.map +1 -0
- package/dist/html/createPageLoader.js +70 -0
- package/dist/html/createPageLoader.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -0
- package/dist/manifest.d.ts +6 -0
- package/dist/manifest.d.ts.map +1 -0
- package/dist/module-graph.d.ts +10 -0
- package/dist/module-graph.d.ts.map +1 -0
- package/dist/options.d.ts +86 -0
- package/dist/options.d.ts.map +1 -0
- package/dist/options.js +251 -0
- package/dist/options.js.map +1 -0
- package/dist/plugin.d.ts +8 -0
- package/dist/plugin.d.ts.map +1 -0
- package/dist/plugin.js +31 -0
- package/dist/plugin.js.map +1 -0
- package/dist/react-client/plugin.d.ts +4 -0
- package/dist/react-client/plugin.d.ts.map +1 -0
- package/dist/react-client/plugin.js +28 -0
- package/dist/react-client/plugin.js.map +1 -0
- package/dist/react-server/createDevMiddleware.d.ts +8 -0
- package/dist/react-server/createDevMiddleware.d.ts.map +1 -0
- package/dist/react-server/createDevServer.d.ts +4 -0
- package/dist/react-server/createDevServer.d.ts.map +1 -0
- package/dist/react-server/createHandler.d.ts +23 -0
- package/dist/react-server/createHandler.d.ts.map +1 -0
- package/dist/react-server/createHandler.js +110 -0
- package/dist/react-server/createHandler.js.map +1 -0
- package/dist/react-server/createReactNodeStreamer.d.ts +10 -0
- package/dist/react-server/createReactNodeStreamer.d.ts.map +1 -0
- package/dist/react-server/createRscStream.d.ts +4 -0
- package/dist/react-server/createRscStream.d.ts.map +1 -0
- package/dist/react-server/createRscStream.js +47 -0
- package/dist/react-server/createRscStream.js.map +1 -0
- package/dist/react-server/createSsrHandler.d.ts +4 -0
- package/dist/react-server/createSsrHandler.d.ts.map +1 -0
- package/dist/react-server/plugin.d.ts +8 -0
- package/dist/react-server/plugin.d.ts.map +1 -0
- package/dist/react-server/plugin.js +298 -0
- package/dist/react-server/plugin.js.map +1 -0
- package/dist/resolvePage.d.ts +19 -0
- package/dist/resolvePage.d.ts.map +1 -0
- package/dist/resolvePage.js +44 -0
- package/dist/resolvePage.js.map +1 -0
- package/dist/resolveProps.d.ts +19 -0
- package/dist/resolveProps.d.ts.map +1 -0
- package/dist/resolveProps.js +90 -0
- package/dist/resolveProps.js.map +1 -0
- package/dist/server.d.ts +2 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/transformer/index.d.ts +28 -0
- package/dist/transformer/index.d.ts.map +1 -0
- package/dist/transformer/index.js +54 -0
- package/dist/transformer/index.js.map +1 -0
- package/dist/transformer/preserveDirectives.d.ts +4 -0
- package/dist/transformer/preserveDirectives.d.ts.map +1 -0
- package/dist/transformer/preserveDirectives.js +72 -0
- package/dist/transformer/preserveDirectives.js.map +1 -0
- package/dist/transformer/preserver.d.ts +2 -0
- package/dist/transformer/preserver.d.ts.map +1 -0
- package/dist/transformer/transformer.d.ts +30 -0
- package/dist/transformer/transformer.d.ts.map +1 -0
- package/dist/transformer/transformer.js +80 -0
- package/dist/transformer/transformer.js.map +1 -0
- package/dist/transformer/types.d.ts +15 -0
- package/dist/transformer/types.d.ts.map +1 -0
- package/dist/types.d.ts +197 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/worker/createHtmlStream.d.ts +7 -0
- package/dist/worker/createHtmlStream.d.ts.map +1 -0
- package/dist/worker/createWorker.d.ts +3 -0
- package/dist/worker/createWorker.d.ts.map +1 -0
- package/dist/worker/createWorker.js +33 -0
- package/dist/worker/createWorker.js.map +1 -0
- package/dist/worker/loader.d.ts +15 -0
- package/dist/worker/loader.d.ts.map +1 -0
- package/dist/worker/renderPages.d.ts +18 -0
- package/dist/worker/renderPages.d.ts.map +1 -0
- package/dist/worker/renderPages.js +99 -0
- package/dist/worker/renderPages.js.map +1 -0
- package/dist/worker/types.d.ts +31 -0
- package/dist/worker/types.d.ts.map +1 -0
- package/dist/worker/worker.d.ts +7 -0
- package/dist/worker/worker.d.ts.map +1 -0
- package/package.json +116 -0
- package/src/build/createBuildConfig.ts +74 -0
- package/src/checkFilesExist.ts +67 -0
- package/src/collect-css-manifest.ts +76 -0
- package/src/components.tsx +14 -0
- package/src/copy-dir.ts +27 -0
- package/src/getEnv.ts +135 -0
- package/src/helpers/normalizedRelativePath.ts +59 -0
- package/src/helpers/tryManifest.ts +23 -0
- package/src/html/createPageLoader.ts +99 -0
- package/src/index.ts +4 -0
- package/src/manifest.ts +24 -0
- package/src/module-graph.ts +48 -0
- package/src/options.ts +351 -0
- package/src/plugin.ts +31 -0
- package/src/react-client/plugin.ts +34 -0
- package/src/react-server/createDevMiddleware.ts +75 -0
- package/src/react-server/createDevServer.ts +10 -0
- package/src/react-server/createHandler.ts +144 -0
- package/src/react-server/createReactNodeStreamer.ts +25 -0
- package/src/react-server/createRscStream.ts +52 -0
- package/src/react-server/createSsrHandler.ts +147 -0
- package/src/react-server/plugin.ts +349 -0
- package/src/resolvePage.ts +65 -0
- package/src/resolveProps.ts +122 -0
- package/src/server.tsx +0 -0
- package/src/transformer/README.md +44 -0
- package/src/transformer/index.ts +112 -0
- package/src/transformer/preserveDirectives.ts +100 -0
- package/src/transformer/preserver.ts +47 -0
- package/src/transformer/transformer.ts +123 -0
- package/src/transformer/types.ts +15 -0
- package/src/types.ts +245 -0
- package/src/worker/createHtmlStream.ts +76 -0
- package/src/worker/createWorker.ts +39 -0
- package/src/worker/loader.ts +16 -0
- package/src/worker/renderPages.ts +144 -0
- package/src/worker/types.ts +38 -0
- package/src/worker/worker.tsx +136 -0
- package/tsconfig.json +79 -0
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { normalizePath } from "vite";
|
|
2
|
+
import { DEFAULT_CONFIG } from "../options.js";
|
|
3
|
+
import { createRscTransformer } from "./transformer.js";
|
|
4
|
+
function viteReactClientTransformPlugin(options) {
|
|
5
|
+
if (process.env["NODE_OPTIONS"]?.match(/--conditions=react-server/)) {
|
|
6
|
+
console.log("react-server");
|
|
7
|
+
} else {
|
|
8
|
+
throw new Error('react-server condition not found, set NODE_OPTIONS="--conditions react-server"');
|
|
9
|
+
}
|
|
10
|
+
const projectRoot = process.cwd();
|
|
11
|
+
const include = DEFAULT_CONFIG.FILE_REGEX;
|
|
12
|
+
const exclude = options?.exclude;
|
|
13
|
+
let transform;
|
|
14
|
+
return {
|
|
15
|
+
name: "vite:react-stream-transformer",
|
|
16
|
+
enforce: "pre",
|
|
17
|
+
configResolved(config) {
|
|
18
|
+
transform = createRscTransformer({
|
|
19
|
+
moduleId: moduleIdDefault({
|
|
20
|
+
projectRoot,
|
|
21
|
+
output: {
|
|
22
|
+
dir: config.build?.outDir ?? DEFAULT_CONFIG.BUILD.server
|
|
23
|
+
},
|
|
24
|
+
isProduction: config.isProduction
|
|
25
|
+
})
|
|
26
|
+
}).transform;
|
|
27
|
+
},
|
|
28
|
+
transform(code, id, opts) {
|
|
29
|
+
if (!matchPattern(id, include) || exclude) {
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
32
|
+
const directiveMatch = code.startsWith('"use client"') || code.startsWith("'use client'");
|
|
33
|
+
if (!directiveMatch) return null;
|
|
34
|
+
return transform(code, id, opts);
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
const moduleIdDefault = ({
|
|
39
|
+
projectRoot,
|
|
40
|
+
output: _,
|
|
41
|
+
isProduction
|
|
42
|
+
}) => (moduleId) => {
|
|
43
|
+
const normalized = normalizePath(moduleId);
|
|
44
|
+
const noRoot = normalized.startsWith(projectRoot) ? normalized.slice(projectRoot.length) : normalized;
|
|
45
|
+
if (!isProduction) {
|
|
46
|
+
return noRoot;
|
|
47
|
+
}
|
|
48
|
+
return noRoot.replace(DEFAULT_CONFIG.FILE_REGEX, ".js");
|
|
49
|
+
};
|
|
50
|
+
const matchPattern = (file, pattern) => Array.isArray(pattern) ? pattern.some((p) => file.match(p)) : file.match(pattern);
|
|
51
|
+
export {
|
|
52
|
+
viteReactClientTransformPlugin
|
|
53
|
+
};
|
|
54
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/transformer/index.ts"],"sourcesContent":["import type { Plugin } from \"vite\";\nimport { normalizePath } from \"vite\";\nimport { DEFAULT_CONFIG } from \"../options.js\";\nimport { createRscTransformer } from \"./transformer.js\";\nimport type { ViteReactClientTransformOptions } from \"./types.js\";\n\n\n/**\n * Plugin for transforming React Client Components.\n *\n * Core responsibilities:\n * 1. Detects \"use client\" directives\n * 2. Transforms client components for RSC boundaries\n * 3. Adds client reference metadata for RSC\n *\n * When a component is marked with \"use client\", it:\n * - Gets transformed into a client reference\n * - Maintains module ID for RSC boundaries\n * - Preserves class/function behavior\n *\n * @example\n * ```ts\n * export default defineConfig({\n * plugins: [\n * viteReactClientTransformPlugin({\n * projectRoot: process.cwd(),\n * })\n * ]\n * });\n * ```\n */\n\nexport function viteReactClientTransformPlugin(\n options?: ViteReactClientTransformOptions\n): Plugin {\n if(process.env['NODE_OPTIONS']?.match(/--conditions=react-server/)) {\n console.log('react-server')\n } else {\n throw new Error('react-server condition not found, set NODE_OPTIONS=\"--conditions react-server\"')\n }\n const projectRoot = options?.projectRoot || process.cwd();\n const include = options?.include || DEFAULT_CONFIG.FILE_REGEX;\n const exclude = options?.exclude;\n let transform: any;\n // get the file we are imported from (parent)\n\n return {\n name: \"vite:react-stream-transformer\",\n enforce: \"pre\",\n\n configResolved(config) {\n transform = createRscTransformer({\n moduleId:\n options?.moduleId ||\n moduleIdDefault({\n projectRoot: projectRoot,\n output: {\n dir: config.build?.outDir ?? DEFAULT_CONFIG.BUILD.server,\n },\n isProduction: config.isProduction,\n }),\n }).transform;\n },\n\n transform(code: string, id: string, opts) {\n // Skip if file doesn't match patterns\n if (\n !matchPattern(id, include) ||\n (exclude && matchPattern(id, exclude))\n ) {\n return null;\n }\n\n // Look for use client directive at start of file (no exceptions)\n const directiveMatch =\n code.startsWith('\"use client\"') || code.startsWith(\"'use client'\");\n if (!directiveMatch) return null;\n\n // Transform client components\n return transform(code, id, opts);\n },\n };\n}\n\nconst moduleIdDefault =\n ({\n projectRoot,\n output: _,\n isProduction,\n }: {\n isProduction: boolean;\n projectRoot: string;\n output: { dir: string };\n }) =>\n (moduleId: string) => {\n const normalized = normalizePath(moduleId);\n const noRoot = normalized.startsWith(projectRoot)\n ? normalized.slice(projectRoot.length)\n : normalized;\n if (!isProduction) {\n return noRoot;\n }\n return noRoot.replace(DEFAULT_CONFIG.FILE_REGEX, \".js\");\n };\n\nconst matchPattern = (\n file: string,\n pattern: string | RegExp | (string | RegExp)[]\n) =>\n Array.isArray(pattern)\n ? pattern.some((p) => file.match(p as RegExp))\n : file.match(pattern as RegExp);\n"],"names":[],"mappings":";;;AAgCO,SAAS,+BACd,SACQ;AACR,MAAG,QAAQ,IAAI,cAAc,GAAG,MAAM,2BAA2B,GAAG;AAClE,YAAQ,IAAI,cAAc;AAAA,EAAA,OACrB;AACC,UAAA,IAAI,MAAM,gFAAgF;AAAA,EAAA;AAElG,QAAM,cAAsC,QAAQ,IAAI;AAClD,QAAA,UAA8B,eAAe;AACnD,QAAM,UAAU,SAAS;AACrB,MAAA;AAGG,SAAA;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IAET,eAAe,QAAQ;AACrB,kBAAY,qBAAqB;AAAA,QAC/B,UAEE,gBAAgB;AAAA,UACd;AAAA,UACA,QAAQ;AAAA,YACN,KAAK,OAAO,OAAO,UAAU,eAAe,MAAM;AAAA,UACpD;AAAA,UACA,cAAc,OAAO;AAAA,QACtB,CAAA;AAAA,MACJ,CAAA,EAAE;AAAA,IACL;AAAA,IAEA,UAAU,MAAc,IAAY,MAAM;AAGtC,UAAA,CAAC,aAAa,IAAI,OAAO,KACxB,SACD;AACO,eAAA;AAAA,MAAA;AAIT,YAAM,iBACJ,KAAK,WAAW,cAAc,KAAK,KAAK,WAAW,cAAc;AAC/D,UAAA,CAAC,eAAuB,QAAA;AAGrB,aAAA,UAAU,MAAM,IAAI,IAAI;AAAA,IAAA;AAAA,EAEnC;AACF;AAEA,MAAM,kBACJ,CAAC;AAAA,EACC;AAAA,EACA,QAAQ;AAAA,EACR;AACF,MAKA,CAAC,aAAqB;AACd,QAAA,aAAa,cAAc,QAAQ;AACnC,QAAA,SAAS,WAAW,WAAW,WAAW,IAC5C,WAAW,MAAM,YAAY,MAAM,IACnC;AACJ,MAAI,CAAC,cAAc;AACV,WAAA;AAAA,EAAA;AAET,SAAO,OAAO,QAAQ,eAAe,YAAY,KAAK;AACxD;AAEF,MAAM,eAAe,CACnB,MACA,YAEA,MAAM,QAAQ,OAAO,IACjB,QAAQ,KAAK,CAAC,MAAM,KAAK,MAAM,CAAW,CAAC,IAC3C,KAAK,MAAM,OAAiB;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preserveDirectives.d.ts","sourceRoot":"","sources":["../../src/transformer/preserveDirectives.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAGrC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAQ3C,wBAAgB,kBAAkB,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,GAAG,MAAM,CAuF7E"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { SourceMapGenerator } from "source-map";
|
|
2
|
+
import { DEFAULT_CONFIG } from "../options.js";
|
|
3
|
+
const REACT_DIRECTIVES = /* @__PURE__ */ new Set(["use client", "use server", "use no-memo"]);
|
|
4
|
+
function preserveDirectives(options) {
|
|
5
|
+
const meta = {
|
|
6
|
+
directives: {}
|
|
7
|
+
};
|
|
8
|
+
const fileRegex = DEFAULT_CONFIG.FILE_REGEX;
|
|
9
|
+
return {
|
|
10
|
+
name: "react-preserve-directives",
|
|
11
|
+
transform: {
|
|
12
|
+
order: "post",
|
|
13
|
+
handler(code, id) {
|
|
14
|
+
if (!fileRegex.test(id)) {
|
|
15
|
+
return null;
|
|
16
|
+
}
|
|
17
|
+
const ast = this.parse(code);
|
|
18
|
+
if (ast.type !== "Program") {
|
|
19
|
+
return null;
|
|
20
|
+
}
|
|
21
|
+
let hasDirectives = false;
|
|
22
|
+
const directives = /* @__PURE__ */ new Set();
|
|
23
|
+
for (const node of ast.body) {
|
|
24
|
+
if (node.type !== "ExpressionStatement") {
|
|
25
|
+
break;
|
|
26
|
+
}
|
|
27
|
+
if (node.expression.type === "Literal" && typeof node.expression.value === "string" && REACT_DIRECTIVES.has(node.expression.value)) {
|
|
28
|
+
directives.add(node.expression.value);
|
|
29
|
+
hasDirectives = true;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
if (!hasDirectives) return null;
|
|
33
|
+
meta.directives[id] = directives;
|
|
34
|
+
const map = new SourceMapGenerator({
|
|
35
|
+
file: id,
|
|
36
|
+
sourceRoot: ""
|
|
37
|
+
});
|
|
38
|
+
map.setSourceContent(id, code);
|
|
39
|
+
return {
|
|
40
|
+
code,
|
|
41
|
+
map: map.toString(),
|
|
42
|
+
meta: { directives: Array.from(directives) }
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
},
|
|
46
|
+
renderChunk(code, chunk) {
|
|
47
|
+
const moduleIds = chunk.moduleIds;
|
|
48
|
+
const chunkDirectives = moduleIds.map((id) => meta.directives[id]).filter((dirs) => !!dirs).reduce((acc, dirs) => {
|
|
49
|
+
dirs.forEach((d) => acc.add(d));
|
|
50
|
+
return acc;
|
|
51
|
+
}, /* @__PURE__ */ new Set());
|
|
52
|
+
if (chunkDirectives.size) {
|
|
53
|
+
const directiveCode = Array.from(chunkDirectives).map((d) => `"${d}";`).join("\n");
|
|
54
|
+
return {
|
|
55
|
+
code: `${directiveCode}
|
|
56
|
+
${code}`
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
return null;
|
|
60
|
+
},
|
|
61
|
+
onLog(level, log) {
|
|
62
|
+
if (log.code === "MODULE_LEVEL_DIRECTIVE" && level === "warn") {
|
|
63
|
+
return false;
|
|
64
|
+
}
|
|
65
|
+
return this.warn(log);
|
|
66
|
+
}
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
export {
|
|
70
|
+
preserveDirectives
|
|
71
|
+
};
|
|
72
|
+
//# sourceMappingURL=preserveDirectives.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preserveDirectives.js","sources":["../../src/transformer/preserveDirectives.ts"],"sourcesContent":["import type { Node } from \"estree\";\nimport type { Plugin } from \"rollup\";\nimport { SourceMapGenerator } from \"source-map\";\nimport { DEFAULT_CONFIG } from \"../options.js\";\nimport type { Options } from \"../types.js\";\n\nconst REACT_DIRECTIVES = new Set([\"use client\", \"use server\", \"use no-memo\"]);\n\ninterface PreserveDirectiveMeta {\n directives: Record<string, Set<string>>;\n}\n\nexport function preserveDirectives(options?: Pick<Options, \"include\">): Plugin {\n const meta: PreserveDirectiveMeta = {\n directives: {},\n };\n const fileRegex = options?.include ?? DEFAULT_CONFIG.FILE_REGEX;\n\n return {\n name: \"react-preserve-directives\",\n transform: {\n order: \"post\",\n handler(code, id) {\n if (!fileRegex.test(id)) {\n return null;\n }\n\n const ast = this.parse(code) as Node;\n if (ast.type !== \"Program\") {\n return null;\n }\n\n let hasDirectives = false;\n const directives = new Set<string>();\n\n // Look for directives at start of file\n for (const node of ast.body) {\n if (node.type !== \"ExpressionStatement\") {\n break;\n }\n\n if (\n node.expression.type === \"Literal\" &&\n typeof node.expression.value === \"string\" &&\n REACT_DIRECTIVES.has(node.expression.value)\n ) {\n directives.add(node.expression.value);\n hasDirectives = true;\n }\n }\n\n if (!hasDirectives) return null;\n\n meta.directives[id] = directives;\n\n // Generate source map\n const map = new SourceMapGenerator({\n file: id,\n sourceRoot: \"\",\n });\n map.setSourceContent(id, code);\n\n return {\n code,\n map: map.toString(),\n meta: { directives: Array.from(directives) },\n };\n },\n },\n\n renderChunk(code, chunk) {\n const moduleIds = chunk.moduleIds;\n const chunkDirectives = moduleIds\n .map((id) => meta.directives[id])\n .filter((dirs): dirs is Set<string> => !!dirs)\n .reduce((acc, dirs) => {\n dirs.forEach((d) => acc.add(d));\n return acc;\n }, new Set<string>());\n\n if (chunkDirectives.size) {\n const directiveCode = Array.from(chunkDirectives)\n .map((d) => `\"${d}\";`)\n .join(\"\\n\");\n return {\n code: `${directiveCode}\\n${code}`,\n };\n }\n\n return null;\n },\n\n onLog(level, log) {\n if (log.code === \"MODULE_LEVEL_DIRECTIVE\" && level === \"warn\") {\n return false;\n }\n return this.warn(log);\n },\n };\n}\n"],"names":[],"mappings":";;AAMA,MAAM,mBAAuB,oBAAA,IAAI,CAAC,cAAc,cAAc,aAAa,CAAC;AAMrE,SAAS,mBAAmB,SAA4C;AAC7E,QAAM,OAA8B;AAAA,IAClC,YAAY,CAAA;AAAA,EACd;AACM,QAAA,YAAgC,eAAe;AAE9C,SAAA;AAAA,IACL,MAAM;AAAA,IACN,WAAW;AAAA,MACT,OAAO;AAAA,MACP,QAAQ,MAAM,IAAI;AAChB,YAAI,CAAC,UAAU,KAAK,EAAE,GAAG;AAChB,iBAAA;AAAA,QAAA;AAGH,cAAA,MAAM,KAAK,MAAM,IAAI;AACvB,YAAA,IAAI,SAAS,WAAW;AACnB,iBAAA;AAAA,QAAA;AAGT,YAAI,gBAAgB;AACd,cAAA,iCAAiB,IAAY;AAGxB,mBAAA,QAAQ,IAAI,MAAM;AACvB,cAAA,KAAK,SAAS,uBAAuB;AACvC;AAAA,UAAA;AAGF,cACE,KAAK,WAAW,SAAS,aACzB,OAAO,KAAK,WAAW,UAAU,YACjC,iBAAiB,IAAI,KAAK,WAAW,KAAK,GAC1C;AACW,uBAAA,IAAI,KAAK,WAAW,KAAK;AACpB,4BAAA;AAAA,UAAA;AAAA,QAClB;AAGE,YAAA,CAAC,cAAsB,QAAA;AAEtB,aAAA,WAAW,EAAE,IAAI;AAGhB,cAAA,MAAM,IAAI,mBAAmB;AAAA,UACjC,MAAM;AAAA,UACN,YAAY;AAAA,QAAA,CACb;AACG,YAAA,iBAAiB,IAAI,IAAI;AAEtB,eAAA;AAAA,UACL;AAAA,UACA,KAAK,IAAI,SAAS;AAAA,UAClB,MAAM,EAAE,YAAY,MAAM,KAAK,UAAU,EAAE;AAAA,QAC7C;AAAA,MAAA;AAAA,IAEJ;AAAA,IAEA,YAAY,MAAM,OAAO;AACvB,YAAM,YAAY,MAAM;AAClB,YAAA,kBAAkB,UACrB,IAAI,CAAC,OAAO,KAAK,WAAW,EAAE,CAAC,EAC/B,OAAO,CAAC,SAA8B,CAAC,CAAC,IAAI,EAC5C,OAAO,CAAC,KAAK,SAAS;AACrB,aAAK,QAAQ,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC;AACvB,eAAA;AAAA,MAAA,GACF,oBAAA,IAAA,CAAa;AAEtB,UAAI,gBAAgB,MAAM;AACxB,cAAM,gBAAgB,MAAM,KAAK,eAAe,EAC7C,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,EACpB,KAAK,IAAI;AACL,eAAA;AAAA,UACL,MAAM,GAAG,aAAa;AAAA,EAAK,IAAI;AAAA,QACjC;AAAA,MAAA;AAGK,aAAA;AAAA,IACT;AAAA,IAEA,MAAM,OAAO,KAAK;AAChB,UAAI,IAAI,SAAS,4BAA4B,UAAU,QAAQ;AACtD,eAAA;AAAA,MAAA;AAEF,aAAA,KAAK,KAAK,GAAG;AAAA,IAAA;AAAA,EAExB;AACF;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preserver.d.ts","sourceRoot":"","sources":["../../src/transformer/preserver.ts"],"names":[],"mappings":"AAOA,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAuCjD"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { TransformerOptions } from "./types.js";
|
|
2
|
+
export declare function createRscTransformer(options: TransformerOptions): {
|
|
3
|
+
name: string;
|
|
4
|
+
enforce: "post";
|
|
5
|
+
transform(code: string, path: string, { ssr }: {
|
|
6
|
+
inMap: null | string;
|
|
7
|
+
ssr: boolean;
|
|
8
|
+
}): Promise<{
|
|
9
|
+
code: string;
|
|
10
|
+
map: string;
|
|
11
|
+
} | null>;
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* transformedCode += `
|
|
15
|
+
const ${exportName}Ref = Object.defineProperties(
|
|
16
|
+
${
|
|
17
|
+
isClass
|
|
18
|
+
? `class extends ${exportName} {
|
|
19
|
+
constructor(...args) { super(...args); }
|
|
20
|
+
}`
|
|
21
|
+
: `function(...args) { return ${exportName}.apply(null, args); }`
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
$$typeof: { value: Symbol.for("react.client.reference") },
|
|
25
|
+
$$id: { value: ${JSON.stringify(moduleId + "#" + exportName)} }
|
|
26
|
+
}
|
|
27
|
+
);
|
|
28
|
+
export { ${exportName}Ref as ${exportName} };`;
|
|
29
|
+
*/
|
|
30
|
+
//# sourceMappingURL=transformer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transformer.d.ts","sourceRoot":"","sources":["../../src/transformer/transformer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAErD,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,kBAAkB;;;oBAMpD,MAAM,QACN,MAAM,WACH;QAAE,KAAK,EAAE,IAAI,GAAG,MAAM,CAAC;QAAC,GAAG,EAAE,OAAO,CAAA;KAAE;;;;EA6FpD;AAED;;;;;;;;;;;;;;;;GAgBG"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { SourceMapGenerator } from "source-map";
|
|
2
|
+
function createRscTransformer(options) {
|
|
3
|
+
return {
|
|
4
|
+
name: "vite:react-stream-transformer",
|
|
5
|
+
enforce: "post",
|
|
6
|
+
async transform(code, path, { ssr }) {
|
|
7
|
+
try {
|
|
8
|
+
let transformedCode = code;
|
|
9
|
+
const directiveMatch = code.match(/^["']use client["'];?/);
|
|
10
|
+
const moduleId = options.moduleId(path, ssr);
|
|
11
|
+
console.log("[RSC Transform] Module path transformation:", {
|
|
12
|
+
original: path,
|
|
13
|
+
transformed: moduleId
|
|
14
|
+
});
|
|
15
|
+
const exportMatches = Array.from(
|
|
16
|
+
code.matchAll(/export\s+(?:const|let|var|function|class)\s+(\w+)/g)
|
|
17
|
+
);
|
|
18
|
+
if (!exportMatches.length) {
|
|
19
|
+
console.warn(`[RSC] No exports found in client component: ${path}`);
|
|
20
|
+
return null;
|
|
21
|
+
}
|
|
22
|
+
for (const [fullMatch, exportName] of exportMatches) {
|
|
23
|
+
if (!exportName) {
|
|
24
|
+
console.warn(`[RSC] Invalid export in client component: ${path}`);
|
|
25
|
+
continue;
|
|
26
|
+
}
|
|
27
|
+
const isClass = fullMatch.includes("class");
|
|
28
|
+
transformedCode = transformedCode.replace(
|
|
29
|
+
fullMatch,
|
|
30
|
+
fullMatch.replace("export ", "")
|
|
31
|
+
);
|
|
32
|
+
if (!directiveMatch || directiveMatch.index !== 0) {
|
|
33
|
+
transformedCode += `
|
|
34
|
+
const ${exportName}Ref = Object.defineProperties(
|
|
35
|
+
${isClass ? `class extends ${exportName} {
|
|
36
|
+
constructor(...args) { super(...args); }
|
|
37
|
+
}` : `function(...args) { return ${exportName}.apply(null, args); }`},
|
|
38
|
+
{
|
|
39
|
+
$$typeof: { value: Symbol.for("react.server.reference") },
|
|
40
|
+
$$id: { value: ${JSON.stringify(moduleId + "#" + exportName)} },
|
|
41
|
+
$$filepath: { value: ${JSON.stringify(path)} },
|
|
42
|
+
$$async: { value: true }
|
|
43
|
+
}
|
|
44
|
+
);
|
|
45
|
+
export { ${exportName}Ref as ${exportName} };
|
|
46
|
+
`;
|
|
47
|
+
} else {
|
|
48
|
+
transformedCode += `
|
|
49
|
+
const ${exportName}Ref = Object.defineProperties(
|
|
50
|
+
${isClass ? `class extends ${exportName} {
|
|
51
|
+
constructor(...args) { super(...args); }
|
|
52
|
+
}` : `function(...args) { return ${exportName}.apply(null, args); }`},
|
|
53
|
+
{
|
|
54
|
+
$$typeof: { value: Symbol.for("react.client.reference") },
|
|
55
|
+
$$id: { value: ${JSON.stringify(moduleId + "#" + exportName)} },
|
|
56
|
+
$$filepath: { value: ${JSON.stringify(path)} }
|
|
57
|
+
}
|
|
58
|
+
);
|
|
59
|
+
export { ${exportName}Ref as ${exportName} };
|
|
60
|
+
`;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
return {
|
|
64
|
+
code: transformedCode,
|
|
65
|
+
map: new SourceMapGenerator({ file: path }).toString()
|
|
66
|
+
};
|
|
67
|
+
} catch (error) {
|
|
68
|
+
console.error(
|
|
69
|
+
`[RSC] Error transforming client component: ${path}`,
|
|
70
|
+
error
|
|
71
|
+
);
|
|
72
|
+
throw error;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
export {
|
|
78
|
+
createRscTransformer
|
|
79
|
+
};
|
|
80
|
+
//# sourceMappingURL=transformer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transformer.js","sources":["../../src/transformer/transformer.ts"],"sourcesContent":["import { SourceMapGenerator } from \"source-map\";\nimport type { TransformerOptions } from \"./types.js\";\n\nexport function createRscTransformer(options: TransformerOptions) {\n return {\n name: \"vite:react-stream-transformer\",\n enforce: \"post\" as const,\n\n async transform(\n code: string,\n path: string,\n { ssr }: { inMap: null | string; ssr: boolean }\n ) {\n try {\n let transformedCode = code;\n const directiveMatch = code.match(/^[\"']use client[\"'];?/);\n const moduleId = options.moduleId(path, ssr);\n\n // Log the path transformation\n console.log(\"[RSC Transform] Module path transformation:\", {\n original: path,\n transformed: moduleId,\n });\n\n // Find all named exports\n const exportMatches = Array.from(\n code.matchAll(/export\\s+(?:const|let|var|function|class)\\s+(\\w+)/g)\n );\n\n if (!exportMatches.length) {\n console.warn(`[RSC] No exports found in client component: ${path}`);\n return null;\n }\n\n // Transform each export\n for (const [fullMatch, exportName] of exportMatches) {\n if (!exportName) {\n console.warn(`[RSC] Invalid export in client component: ${path}`);\n continue;\n }\n\n const isClass = fullMatch.includes(\"class\");\n\n // Remove export keyword\n transformedCode = transformedCode.replace(\n fullMatch,\n fullMatch.replace(\"export \", \"\")\n );\n\n if (!directiveMatch || directiveMatch.index !== 0) {\n // Server component\n transformedCode += `\nconst ${exportName}Ref = Object.defineProperties(\n ${\n isClass\n ? `class extends ${exportName} {\n constructor(...args) { super(...args); }\n }`\n : `function(...args) { return ${exportName}.apply(null, args); }`\n },\n {\n $$typeof: { value: Symbol.for(\"react.server.reference\") },\n $$id: { value: ${JSON.stringify(moduleId + \"#\" + exportName)} },\n $$filepath: { value: ${JSON.stringify(path)} },\n $$async: { value: true }\n }\n);\nexport { ${exportName}Ref as ${exportName} };\n`;\n } else {\n // Client component\n transformedCode += `\nconst ${exportName}Ref = Object.defineProperties(\n ${\n isClass\n ? `class extends ${exportName} {\n constructor(...args) { super(...args); }\n }`\n : `function(...args) { return ${exportName}.apply(null, args); }`\n },\n {\n $$typeof: { value: Symbol.for(\"react.client.reference\") },\n $$id: { value: ${JSON.stringify(moduleId + \"#\" + exportName)} },\n $$filepath: { value: ${JSON.stringify(path)} }\n }\n);\nexport { ${exportName}Ref as ${exportName} };\n`;\n }\n }\n\n return {\n code: transformedCode,\n map: new SourceMapGenerator({ file: path }).toString(),\n };\n } catch (error) {\n console.error(\n `[RSC] Error transforming client component: ${path}`,\n error\n );\n throw error;\n }\n },\n };\n}\n\n/**\n * transformedCode += `\nconst ${exportName}Ref = Object.defineProperties(\n ${\n isClass\n ? `class extends ${exportName} {\n constructor(...args) { super(...args); }\n }`\n : `function(...args) { return ${exportName}.apply(null, args); }`\n },\n {\n $$typeof: { value: Symbol.for(\"react.client.reference\") },\n $$id: { value: ${JSON.stringify(moduleId + \"#\" + exportName)} }\n }\n);\nexport { ${exportName}Ref as ${exportName} };`;\n */\n"],"names":[],"mappings":";AAGO,SAAS,qBAAqB,SAA6B;AACzD,SAAA;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IAET,MAAM,UACJ,MACA,MACA,EAAE,OACF;AACI,UAAA;AACF,YAAI,kBAAkB;AAChB,cAAA,iBAAiB,KAAK,MAAM,uBAAuB;AACzD,cAAM,WAAW,QAAQ,SAAS,MAAM,GAAG;AAG3C,gBAAQ,IAAI,+CAA+C;AAAA,UACzD,UAAU;AAAA,UACV,aAAa;AAAA,QAAA,CACd;AAGD,cAAM,gBAAgB,MAAM;AAAA,UAC1B,KAAK,SAAS,oDAAoD;AAAA,QACpE;AAEI,YAAA,CAAC,cAAc,QAAQ;AACjB,kBAAA,KAAK,+CAA+C,IAAI,EAAE;AAC3D,iBAAA;AAAA,QAAA;AAIT,mBAAW,CAAC,WAAW,UAAU,KAAK,eAAe;AACnD,cAAI,CAAC,YAAY;AACP,oBAAA,KAAK,6CAA6C,IAAI,EAAE;AAChE;AAAA,UAAA;AAGI,gBAAA,UAAU,UAAU,SAAS,OAAO;AAG1C,4BAAkB,gBAAgB;AAAA,YAChC;AAAA,YACA,UAAU,QAAQ,WAAW,EAAE;AAAA,UACjC;AAEA,cAAI,CAAC,kBAAkB,eAAe,UAAU,GAAG;AAE9B,+BAAA;AAAA,QACvB,UAAU;AAAA,IAEd,UACI,iBAAiB,UAAU;AAAA;AAAA,aAG3B,8BAA8B,UAAU,uBAC9C;AAAA;AAAA;AAAA,qBAGmB,KAAK,UAAU,WAAW,MAAM,UAAU,CAAC;AAAA,2BACrC,KAAK,UAAU,IAAI,CAAC;AAAA;AAAA;AAAA;AAAA,WAIpC,UAAU,UAAU,UAAU;AAAA;AAAA,UAAA,OAExB;AAEc,+BAAA;AAAA,QACvB,UAAU;AAAA,IAEd,UACI,iBAAiB,UAAU;AAAA;AAAA,aAG3B,8BAA8B,UAAU,uBAC9C;AAAA;AAAA;AAAA,qBAGmB,KAAK,UAAU,WAAW,MAAM,UAAU,CAAC;AAAA,2BACrC,KAAK,UAAU,IAAI,CAAC;AAAA;AAAA;AAAA,WAGpC,UAAU,UAAU,UAAU;AAAA;AAAA,UAAA;AAAA,QAE/B;AAGK,eAAA;AAAA,UACL,MAAM;AAAA,UACN,KAAK,IAAI,mBAAmB,EAAE,MAAM,KAAK,CAAC,EAAE,SAAS;AAAA,QACvD;AAAA,eACO,OAAO;AACN,gBAAA;AAAA,UACN,8CAA8C,IAAI;AAAA,UAClD;AAAA,QACF;AACM,cAAA;AAAA,MAAA;AAAA,IACR;AAAA,EAEJ;AACF;"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export interface ViteReactClientTransformOptions {
|
|
2
|
+
projectRoot?: string;
|
|
3
|
+
moduleId?: (path: string, ssr: boolean) => string;
|
|
4
|
+
validateModuleId?: (moduleId: string) => boolean;
|
|
5
|
+
include?: string | RegExp | (string | RegExp)[];
|
|
6
|
+
exclude?: string | RegExp | (string | RegExp)[];
|
|
7
|
+
}
|
|
8
|
+
export interface TransformerOptions {
|
|
9
|
+
moduleId: (path: string, ssr: boolean) => string;
|
|
10
|
+
/**
|
|
11
|
+
* Optional validation function for module IDs
|
|
12
|
+
*/
|
|
13
|
+
validateModuleId?: (moduleId: string) => boolean;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/transformer/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,+BAA+B;IAC9C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,KAAK,MAAM,CAAC;IAClD,gBAAgB,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC;IACjD,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;IAChD,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;CACjD;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,KAAK,MAAM,CAAC;IACjD;;OAEG;IACH,gBAAgB,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC;CAClD"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
import type { AliasOptions, Connect, Logger, Manifest, ModuleGraph, ViteDevServer } from "vite";
|
|
2
|
+
export interface StreamPluginOptionsClient {
|
|
3
|
+
outDir?: string;
|
|
4
|
+
build?: BuildConfig;
|
|
5
|
+
assetsDir?: string;
|
|
6
|
+
projectRoot?: string;
|
|
7
|
+
moduleBase?: string;
|
|
8
|
+
moduleBasePath?: string;
|
|
9
|
+
moduleBaseURL?: string;
|
|
10
|
+
clientComponents?: AliasOptions;
|
|
11
|
+
cssFiles?: AliasOptions;
|
|
12
|
+
}
|
|
13
|
+
export type ResolvedUserOptions = Required<Pick<StreamPluginOptions, "moduleBase" | "moduleBasePath" | "moduleBaseURL" | "projectRoot" | "build" | "Page" | "props" | "Html" | "pageExportName" | "propsExportName" | "collectCss" | "collectAssets" | "assetsDir">> & {
|
|
14
|
+
build: NonNullable<Required<StreamPluginOptions["build"]>>;
|
|
15
|
+
};
|
|
16
|
+
export interface StreamPluginOptions {
|
|
17
|
+
projectRoot?: string;
|
|
18
|
+
assetsDir?: string;
|
|
19
|
+
moduleBase?: string;
|
|
20
|
+
moduleBasePath?: string;
|
|
21
|
+
moduleBaseURL?: string;
|
|
22
|
+
clientEntry?: string;
|
|
23
|
+
serverOutDir?: string;
|
|
24
|
+
clientOutDir?: string;
|
|
25
|
+
autoDiscover?: {
|
|
26
|
+
pagePattern?: string;
|
|
27
|
+
propsPattern?: string;
|
|
28
|
+
};
|
|
29
|
+
Page: string | ((url: string) => string);
|
|
30
|
+
props?: undefined | string | ((url: string) => string);
|
|
31
|
+
workerPath?: string;
|
|
32
|
+
loaderPath?: string;
|
|
33
|
+
pageExportName?: string;
|
|
34
|
+
propsExportName?: string;
|
|
35
|
+
Html?: React.FC<{
|
|
36
|
+
manifest: Manifest;
|
|
37
|
+
pageProps: any;
|
|
38
|
+
route: string;
|
|
39
|
+
url: string;
|
|
40
|
+
children: React.ReactNode;
|
|
41
|
+
}>;
|
|
42
|
+
collectCss?: boolean;
|
|
43
|
+
collectAssets?: boolean;
|
|
44
|
+
build?: BuildConfig;
|
|
45
|
+
}
|
|
46
|
+
export interface CreateHandlerOptions<T = any> {
|
|
47
|
+
loader: (id: string) => Promise<T>;
|
|
48
|
+
manifest?: Manifest;
|
|
49
|
+
moduleGraph?: ModuleGraph;
|
|
50
|
+
cssFiles?: string[];
|
|
51
|
+
onCssFile?: (path: string) => void;
|
|
52
|
+
logger?: Logger;
|
|
53
|
+
pipableStreamOptions?: any;
|
|
54
|
+
}
|
|
55
|
+
export type ModuleLoader = (url: string, context?: any, defaultLoad?: any) => Promise<Record<string, any>>;
|
|
56
|
+
export interface BaseProps {
|
|
57
|
+
manifest: Manifest;
|
|
58
|
+
children?: React.ReactNode;
|
|
59
|
+
assets?: {
|
|
60
|
+
css?: string[];
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
export type StreamResult = {
|
|
64
|
+
type: "success";
|
|
65
|
+
stream: any;
|
|
66
|
+
assets?: {
|
|
67
|
+
css?: string[];
|
|
68
|
+
};
|
|
69
|
+
} | {
|
|
70
|
+
type: "error";
|
|
71
|
+
error: unknown;
|
|
72
|
+
} | {
|
|
73
|
+
type: "skip";
|
|
74
|
+
};
|
|
75
|
+
export interface RscStreamOptions {
|
|
76
|
+
Page: React.ComponentType;
|
|
77
|
+
props: any;
|
|
78
|
+
Html: any;
|
|
79
|
+
logger?: Console | Logger;
|
|
80
|
+
cssFiles?: string[];
|
|
81
|
+
route: string;
|
|
82
|
+
url: string;
|
|
83
|
+
pipableStreamOptions?: any;
|
|
84
|
+
moduleBasePath: string;
|
|
85
|
+
}
|
|
86
|
+
export interface RouteConfig {
|
|
87
|
+
path: string;
|
|
88
|
+
pattern?: {
|
|
89
|
+
page?: string;
|
|
90
|
+
props?: string;
|
|
91
|
+
};
|
|
92
|
+
paths?: {
|
|
93
|
+
page: string;
|
|
94
|
+
props: string;
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
export interface BuildOutput {
|
|
98
|
+
dir?: string;
|
|
99
|
+
rsc?: string;
|
|
100
|
+
ext?: string;
|
|
101
|
+
}
|
|
102
|
+
export interface BuildConfig {
|
|
103
|
+
pages: string[] | (() => Promise<string[]> | string[]);
|
|
104
|
+
client?: string;
|
|
105
|
+
server?: string;
|
|
106
|
+
}
|
|
107
|
+
export interface RscResolver {
|
|
108
|
+
/**
|
|
109
|
+
* Get RSC data for static generation
|
|
110
|
+
* @param path - Route path (e.g. "/", "/about")
|
|
111
|
+
*/
|
|
112
|
+
getRscData: (path: string) => Promise<{
|
|
113
|
+
Page: React.ComponentType;
|
|
114
|
+
props: any;
|
|
115
|
+
}>;
|
|
116
|
+
}
|
|
117
|
+
export interface Options {
|
|
118
|
+
include?: RegExp;
|
|
119
|
+
projectRoot?: string;
|
|
120
|
+
moduleBase: string;
|
|
121
|
+
moduleBasePath?: string;
|
|
122
|
+
Html?: React.ComponentType<React.PropsWithChildren<{
|
|
123
|
+
manifest: Manifest;
|
|
124
|
+
}>>;
|
|
125
|
+
Page: string | ((url: string) => string);
|
|
126
|
+
props?: string | ((url: string) => string);
|
|
127
|
+
pageExportName?: string;
|
|
128
|
+
propsExportName?: string;
|
|
129
|
+
collectCss?: boolean;
|
|
130
|
+
collectAssets?: boolean;
|
|
131
|
+
emitCss?: boolean;
|
|
132
|
+
moduleLoader?: (server: ViteDevServer) => ModuleLoader;
|
|
133
|
+
build?: BuildConfig;
|
|
134
|
+
outDir?: string;
|
|
135
|
+
/**
|
|
136
|
+
* Configure static asset copying
|
|
137
|
+
* - true: Copy all assets
|
|
138
|
+
* - false: Don't copy assets
|
|
139
|
+
* - Function: Custom filter for which files to copy
|
|
140
|
+
*/
|
|
141
|
+
copyAssets?: boolean | ((file: string) => boolean);
|
|
142
|
+
}
|
|
143
|
+
export type RequestHandler = Connect.NextHandleFunction;
|
|
144
|
+
export interface SsrStreamOptions {
|
|
145
|
+
url: string;
|
|
146
|
+
controller: AbortController;
|
|
147
|
+
loader: (id: string) => Promise<any>;
|
|
148
|
+
Html: any;
|
|
149
|
+
options: StreamPluginOptions;
|
|
150
|
+
pageExportName: string;
|
|
151
|
+
propsExportName: string;
|
|
152
|
+
moduleGraph: any;
|
|
153
|
+
bootstrapModules?: string[];
|
|
154
|
+
importMap?: Record<string, string[]>;
|
|
155
|
+
clientComponents?: boolean;
|
|
156
|
+
onlyClientComponents?: boolean;
|
|
157
|
+
}
|
|
158
|
+
export type RscServerConfig = {
|
|
159
|
+
/** How to get RSC data (e.g. HTTP, direct import, etc) */
|
|
160
|
+
getRscComponent: (url: string) => React.Usable<React.ReactNode>;
|
|
161
|
+
/** Base URL for client assets */
|
|
162
|
+
clientBase?: string;
|
|
163
|
+
/** SSR stream rendering options */
|
|
164
|
+
ssrOptions?: SsrStreamOptions;
|
|
165
|
+
};
|
|
166
|
+
export interface RscServerModule {
|
|
167
|
+
/**
|
|
168
|
+
* Get RSC data for a route
|
|
169
|
+
* @param path - Route path (e.g. "/", "/about")
|
|
170
|
+
* @returns Page component and props
|
|
171
|
+
*/
|
|
172
|
+
getRscData: (path: string) => Promise<{
|
|
173
|
+
/** Page component to render */
|
|
174
|
+
Page: React.ComponentType;
|
|
175
|
+
/** Props to pass to the page */
|
|
176
|
+
props: any;
|
|
177
|
+
}>;
|
|
178
|
+
}
|
|
179
|
+
export interface RegisterComponentMessage {
|
|
180
|
+
type: "REGISTER_COMPONENT";
|
|
181
|
+
id: string;
|
|
182
|
+
code: string;
|
|
183
|
+
}
|
|
184
|
+
export type RscBuildResult = string[];
|
|
185
|
+
export interface ReactStreamPluginMeta {
|
|
186
|
+
timing: BuildTiming;
|
|
187
|
+
}
|
|
188
|
+
export interface BuildTiming {
|
|
189
|
+
start: number;
|
|
190
|
+
configResolved?: number;
|
|
191
|
+
buildStart?: number;
|
|
192
|
+
buildEnd?: number;
|
|
193
|
+
renderStart?: number;
|
|
194
|
+
renderEnd?: number;
|
|
195
|
+
total?: number;
|
|
196
|
+
}
|
|
197
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { Writable } from "node:stream";
|
|
2
|
+
import type { RenderState } from "./types.js";
|
|
3
|
+
export declare function createHtmlStream(renderState: RenderState, writeStream: Writable): {
|
|
4
|
+
stream: import("react-dom/server").PipeableStream;
|
|
5
|
+
writeStream: Writable;
|
|
6
|
+
};
|
|
7
|
+
//# sourceMappingURL=createHtmlStream.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createHtmlStream.d.ts","sourceRoot":"","sources":["../../src/worker/createHtmlStream.ts"],"names":[],"mappings":"AACA,OAAO,EAAY,QAAQ,EAAE,MAAM,aAAa,CAAC;AAIjD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAS9C,wBAAgB,gBAAgB,CAC9B,WAAW,EAAE,WAAW,EACxB,WAAW,EAAE,QAAQ;;;EA2DtB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createWorker.d.ts","sourceRoot":"","sources":["../../src/worker/createWorker.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAE7C,wBAAsB,YAAY,CAChC,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,YAAY,GAAG,aAAa,mBA+BnC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { resolve } from "node:path";
|
|
2
|
+
import { Worker } from "node:worker_threads";
|
|
3
|
+
async function createWorker(projectRoot, outDir, fileName, mode) {
|
|
4
|
+
console.log("[Worker] Creating worker...");
|
|
5
|
+
const workerPath = resolve(projectRoot, outDir, fileName);
|
|
6
|
+
console.log("[Worker] Worker path:", workerPath);
|
|
7
|
+
try {
|
|
8
|
+
const worker = new Worker(workerPath, {
|
|
9
|
+
env: {
|
|
10
|
+
NODE_OPTIONS: "",
|
|
11
|
+
NODE_PATH: resolve(projectRoot, "node_modules"),
|
|
12
|
+
NODE_ENV: mode
|
|
13
|
+
}
|
|
14
|
+
});
|
|
15
|
+
worker.setMaxListeners(1e3);
|
|
16
|
+
await new Promise((resolve2, reject) => {
|
|
17
|
+
worker.once("message", (message) => {
|
|
18
|
+
if (message.type === "READY") {
|
|
19
|
+
resolve2();
|
|
20
|
+
}
|
|
21
|
+
});
|
|
22
|
+
worker.once("error", reject);
|
|
23
|
+
});
|
|
24
|
+
return worker;
|
|
25
|
+
} catch (error) {
|
|
26
|
+
console.error("[Worker] Startup error:", error);
|
|
27
|
+
throw error;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
export {
|
|
31
|
+
createWorker
|
|
32
|
+
};
|
|
33
|
+
//# sourceMappingURL=createWorker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createWorker.js","sources":["../../src/worker/createWorker.ts"],"sourcesContent":["import { resolve } from \"node:path\";\nimport { Worker } from \"node:worker_threads\";\n\nexport async function createWorker(\n projectRoot: string,\n outDir: string,\n fileName: string,\n mode: \"production\" | \"development\"\n) {\n console.log(\"[Worker] Creating worker...\");\n const workerPath = resolve(projectRoot, outDir, fileName);\n console.log(\"[Worker] Worker path:\", workerPath);\n\n try {\n const worker = new Worker(workerPath, {\n env: {\n NODE_OPTIONS: \"\",\n NODE_PATH: resolve(projectRoot, \"node_modules\"),\n NODE_ENV: mode,\n },\n });\n worker.setMaxListeners(1000);\n\n // Wait for worker to be ready\n await new Promise<void>((resolve, reject) => {\n worker.once(\"message\", (message) => {\n if (message.type === \"READY\") {\n resolve();\n }\n });\n worker.once(\"error\", reject);\n });\n\n return worker;\n } catch (error) {\n console.error(\"[Worker] Startup error:\", error);\n throw error;\n }\n}\n"],"names":["resolve"],"mappings":";;AAGA,eAAsB,aACpB,aACA,QACA,UACA,MACA;AACA,UAAQ,IAAI,6BAA6B;AACzC,QAAM,aAAa,QAAQ,aAAa,QAAQ,QAAQ;AAChD,UAAA,IAAI,yBAAyB,UAAU;AAE3C,MAAA;AACI,UAAA,SAAS,IAAI,OAAO,YAAY;AAAA,MACpC,KAAK;AAAA,QACH,cAAc;AAAA,QACd,WAAW,QAAQ,aAAa,cAAc;AAAA,QAC9C,UAAU;AAAA,MAAA;AAAA,IACZ,CACD;AACD,WAAO,gBAAgB,GAAI;AAG3B,UAAM,IAAI,QAAc,CAACA,UAAS,WAAW;AACpC,aAAA,KAAK,WAAW,CAAC,YAAY;AAC9B,YAAA,QAAQ,SAAS,SAAS;AAC5BA,mBAAQ;AAAA,QAAA;AAAA,MACV,CACD;AACM,aAAA,KAAK,SAAS,MAAM;AAAA,IAAA,CAC5B;AAEM,WAAA;AAAA,WACA,OAAO;AACN,YAAA,MAAM,2BAA2B,KAAK;AACxC,UAAA;AAAA,EAAA;AAEV;"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Extension point for custom module loading in the worker thread.
|
|
3
|
+
* This file can be overridden via the plugin options:
|
|
4
|
+
*
|
|
5
|
+
* ```ts
|
|
6
|
+
* reactStreamPlugin({
|
|
7
|
+
* loaderPath: './my-custom-loader.ts'
|
|
8
|
+
* })
|
|
9
|
+
* ```
|
|
10
|
+
*
|
|
11
|
+
* The default loader provides basic module loading functionality.
|
|
12
|
+
* Override this if you need custom module resolution or transformation.
|
|
13
|
+
*/
|
|
14
|
+
export declare function load(id: string): Promise<any>;
|
|
15
|
+
//# sourceMappingURL=loader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/worker/loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,wBAAgB,IAAI,CAAC,EAAE,EAAE,MAAM,gBAE9B"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { Worker } from "node:worker_threads";
|
|
2
|
+
import type { PipeableStreamOptions } from "react-dom/server.node";
|
|
3
|
+
import type { StreamPluginOptions } from "../types.js";
|
|
4
|
+
type RenderPagesOptions = {
|
|
5
|
+
pluginOptions: Required<Pick<StreamPluginOptions, "moduleBase" | "moduleBasePath" | "moduleBaseURL" | "projectRoot">> & Pick<StreamPluginOptions, "Page" | "props" | "build" | "Html" | "pageExportName" | "propsExportName">;
|
|
6
|
+
outDir: string;
|
|
7
|
+
manifest: Record<string, {
|
|
8
|
+
file: string;
|
|
9
|
+
}>;
|
|
10
|
+
worker: Worker;
|
|
11
|
+
pipableStreamOptions?: PipeableStreamOptions;
|
|
12
|
+
loader: (id: string) => Promise<Record<string, any>>;
|
|
13
|
+
onCssFile?: (path: string) => void;
|
|
14
|
+
clientCss?: string[];
|
|
15
|
+
};
|
|
16
|
+
export declare function renderPages(routes: string[], options: RenderPagesOptions): Promise<void>;
|
|
17
|
+
export {};
|
|
18
|
+
//# sourceMappingURL=renderPages.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"renderPages.d.ts","sourceRoot":"","sources":["../../src/worker/renderPages.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAEnE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAMvD,KAAK,kBAAkB,GAAG;IACxB,aAAa,EAAE,QAAQ,CACrB,IAAI,CACF,mBAAmB,EACnB,YAAY,GAAG,gBAAgB,GAAG,eAAe,GAAG,aAAa,CAClE,CACF,GACC,IAAI,CACF,mBAAmB,EACnB,MAAM,GAAG,OAAO,GAAG,OAAO,GAAG,MAAM,GAAG,gBAAgB,GAAG,iBAAiB,CAC3E,CAAC;IACJ,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC3C,MAAM,EAAE,MAAM,CAAC;IACf,oBAAoB,CAAC,EAAE,qBAAqB,CAAC;IAC7C,MAAM,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;IACrD,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB,CAAC;AAEF,wBAAsB,WAAW,CAC/B,MAAM,EAAE,MAAM,EAAE,EAChB,OAAO,EAAE,kBAAkB,iBA8G5B"}
|