vite-plugin-react-server 0.3.5 → 0.3.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/dist/index.d.ts +3 -2
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/node_modules/magic-string/dist/magic-string.es.js +2 -2
  4. package/dist/node_modules/magic-string/dist/magic-string.es.js.map +1 -1
  5. package/dist/package.json +2 -3
  6. package/dist/plugin/loader/createBuildLoader.d.ts.map +1 -1
  7. package/dist/plugin/loader/createBuildLoader.js +8 -22
  8. package/dist/plugin/loader/createBuildLoader.js.map +1 -1
  9. package/dist/plugin/preserver/plugin.d.ts +1 -2
  10. package/dist/plugin/preserver/plugin.d.ts.map +1 -1
  11. package/dist/plugin/preserver/plugin.js.map +1 -1
  12. package/dist/plugin/react-server/index.d.ts +1 -2
  13. package/dist/plugin/react-server/index.d.ts.map +1 -1
  14. package/dist/plugin/react-server/plugin.d.ts +3 -4
  15. package/dist/plugin/react-server/plugin.d.ts.map +1 -1
  16. package/dist/plugin/react-server/plugin.js +17 -15
  17. package/dist/plugin/react-server/plugin.js.map +1 -1
  18. package/dist/plugin/transformer/plugin.d.ts +1 -2
  19. package/dist/plugin/transformer/plugin.d.ts.map +1 -1
  20. package/dist/plugin/transformer/plugin.js +14 -6
  21. package/dist/plugin/transformer/plugin.js.map +1 -1
  22. package/dist/plugin/worker/html/renderPages.d.ts.map +1 -1
  23. package/dist/plugin/worker/html/renderPages.js +3 -1
  24. package/dist/plugin/worker/html/renderPages.js.map +1 -1
  25. package/dist/tsconfig.tsbuildinfo +1 -1
  26. package/package.json +2 -3
  27. package/plugin/loader/createBuildLoader.ts +7 -23
  28. package/plugin/preserver/plugin.ts +21 -22
  29. package/plugin/react-server/index.ts +1 -2
  30. package/plugin/react-server/plugin.ts +23 -24
  31. package/plugin/transformer/plugin.ts +30 -20
  32. package/plugin/worker/html/renderPages.ts +3 -2
  33. package/dist/_virtual/sourcemap-codec.umd.js +0 -11
  34. package/dist/_virtual/sourcemap-codec.umd.js.map +0 -1
  35. package/dist/_virtual/sourcemap-codec.umd2.js +0 -9
  36. package/dist/_virtual/sourcemap-codec.umd2.js.map +0 -1
  37. package/dist/node_modules/@jridgewell/sourcemap-codec/dist/sourcemap-codec.umd.js +0 -457
  38. package/dist/node_modules/@jridgewell/sourcemap-codec/dist/sourcemap-codec.umd.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../../plugin/react-server/plugin.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,IAAI,YAAY,EAAE,MAAM,QAAQ,CAAC;AACrD,OAAO,KAAK,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,MAAM,CAAC;AAYjD,OAAO,KAAK,EAGV,qBAAqB,EAGtB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAYvD,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,mBAAmB,GAC3B,UAAU,GAAG,YAAY,GAAG;IAAE,IAAI,EAAE,qBAAqB,CAAA;CAAE,CA2a7D"}
1
+ {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../../plugin/react-server/plugin.ts"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAGV,qBAAqB,EAGtB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAKvD,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,mBAAmB,GAC3B,OAAO,MAAM,EAAE,MAAM,CAAC;IAAE,IAAI,EAAE,qBAAqB,CAAC;IAAE,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;CAAE,CAAE,CA4a9F"}
@@ -3,24 +3,24 @@
3
3
  * Copyright (c) Nico Brinkkemper
4
4
  * MIT License
5
5
  */
6
+ import { readdirSync } from 'fs';
6
7
  import { resolve, join } from 'node:path';
7
8
  import { performance } from 'node:perf_hooks';
8
9
  import 'node:worker_threads';
10
+ import React__default from 'react';
9
11
  import { createLogger } from 'vite';
10
12
  import { checkFilesExist } from '../checkFilesExist.js';
11
- import { tryManifest } from '../helpers/tryManifest.js';
13
+ import { DEFAULT_CONFIG } from '../config/defaults.js';
14
+ import { getPluginRoot } from '../config/getPaths.js';
12
15
  import { resolveOptions } from '../config/resolveOptions.js';
13
16
  import { resolvePages } from '../config/resolvePages.js';
14
17
  import { resolveUserConfig } from '../config/resolveUserConfig.js';
18
+ import { getModuleManifest } from '../helpers/getModuleManifest.js';
19
+ import { tryManifest } from '../helpers/tryManifest.js';
20
+ import { createBuildLoader } from '../loader/createBuildLoader.js';
15
21
  import { createWorker } from '../worker/createWorker.js';
16
22
  import { renderPages } from '../worker/html/renderPages.js';
17
23
  import { createHandler } from './createHandler.js';
18
- import { readdirSync } from 'fs';
19
- import { DEFAULT_CONFIG } from '../config/defaults.js';
20
- import { getPluginRoot } from '../config/getPaths.js';
21
- import { getModuleManifest } from '../helpers/getModuleManifest.js';
22
- import { createBuildLoader } from '../loader/createBuildLoader.js';
23
- import React__default from 'react';
24
24
 
25
25
  function reactServerPlugin(options) {
26
26
  const timing = {
@@ -45,8 +45,8 @@ function reactServerPlugin(options) {
45
45
  return {
46
46
  name: "vite:react-stream-server",
47
47
  enforce: "post",
48
- meta: { timing },
49
48
  api: {
49
+ meta: { timing },
50
50
  addCssFile(path) {
51
51
  buildCssFiles.add(path);
52
52
  }
@@ -71,7 +71,9 @@ function reactServerPlugin(options) {
71
71
  throw new Error("Transformer plugin not installed");
72
72
  }
73
73
  if (preserverIndex < transformerIndex) {
74
- throw new Error("Transformer plugin isn't installed or isn't running before preserver");
74
+ throw new Error(
75
+ "Transformer plugin isn't installed or isn't running before preserver"
76
+ );
75
77
  }
76
78
  },
77
79
  async configureServer(server) {
@@ -145,18 +147,18 @@ function reactServerPlugin(options) {
145
147
  },
146
148
  async config(config, configEnv) {
147
149
  if (typeof config.root === "string" && config.root !== root) {
148
- console.log("[vite-plugin-react-server] Root dir changed", config.root, root);
150
+ console.log(
151
+ "[vite-plugin-react-server] Root dir changed",
152
+ config.root,
153
+ root
154
+ );
149
155
  root = config.root;
150
156
  }
151
157
  const resolvedPages = await resolvePages(userOptions.build.pages);
152
158
  if (resolvedPages.type === "error") {
153
159
  throw resolvedPages.error;
154
160
  }
155
- files = await checkFilesExist(
156
- resolvedPages.pages,
157
- userOptions,
158
- root
159
- );
161
+ files = await checkFilesExist(resolvedPages.pages, userOptions, root);
160
162
  const resolvedConfig = resolveUserConfig({
161
163
  condition: "react-server",
162
164
  config,
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.js","sources":["../../../plugin/react-server/plugin.ts"],"sourcesContent":["import { join, resolve } from \"node:path\";\nimport { performance } from \"node:perf_hooks\";\nimport { Worker } from \"node:worker_threads\";\nimport type { Plugin as RollupPlugin } from \"rollup\";\nimport type { Plugin as VitePlugin } from \"vite\";\nimport {\n createLogger,\n type ResolvedConfig,\n type UserConfig,\n type ViteDevServer,\n} from \"vite\";\nimport { checkFilesExist } from \"../checkFilesExist.js\";\nimport { tryManifest } from \"../helpers/tryManifest.js\";\nimport { resolveOptions } from \"../config/resolveOptions.js\";\nimport { resolvePages } from \"../config/resolvePages.js\";\nimport { resolveUserConfig } from \"../config/resolveUserConfig.js\";\nimport type {\n BuildTiming,\n CheckFilesExistReturn,\n ReactStreamPluginMeta,\n ResolvedUserConfig,\n ResolvedUserOptions,\n} from \"../types.js\";\nimport { type StreamPluginOptions } from \"../types.js\";\nimport { createWorker } from \"../worker/createWorker.js\";\nimport { renderPages } from \"../worker/html/renderPages.js\";\nimport { createHandler } from \"./createHandler.js\";\nimport { readdirSync } from \"fs\";\nimport type { ServerResponse } from \"node:http\";\nimport { DEFAULT_CONFIG } from \"../config/defaults.js\";\nimport { getPluginRoot } from \"../config/getPaths.js\";\nimport { getModuleManifest } from \"../helpers/getModuleManifest.js\";\nimport { createBuildLoader } from '../loader/createBuildLoader.js';\nimport React from \"react\";\n\nexport function reactServerPlugin(\n options: StreamPluginOptions\n): VitePlugin & RollupPlugin & { meta: ReactStreamPluginMeta } {\n const timing: BuildTiming = {\n start: performance.now(),\n };\n\n let files: CheckFilesExistReturn;\n // let env: Awaited<ReturnType<typeof getEnv>>;\n let worker: Worker;\n let finalConfig: ResolvedConfig;\n let cssModules = new Set<string>();\n let clientComponents = new Map<string, string>();\n // let define: Record<string, string>;\n let buildCssFiles = new Set<string>();\n let root: string = process.cwd();\n let userConfig: ResolvedUserConfig;\n let userOptions: ResolvedUserOptions;\n let moduleGraph: Record<\n string,\n {\n file: string;\n src: string;\n name: string;\n isEntry: boolean;\n imports: string[];\n dynamicImports: string[];\n }\n > = {};\n\n interface BuildStats {\n htmlFiles: number;\n clientComponents: number;\n cssFiles: number;\n totalRoutes: number;\n timing: {\n config: number;\n build: number;\n render: number;\n total: number;\n };\n }\n\n const resolvedOptions = resolveOptions(options);\n if (resolvedOptions.type === \"error\") {\n throw resolvedOptions.error;\n }\n userOptions = resolvedOptions.userOptions;\n root = userOptions.projectRoot;\n return {\n name: \"vite:react-stream-server\",\n enforce: \"post\",\n meta: { timing } as ReactStreamPluginMeta,\n api: {\n addCssFile(path: string) {\n buildCssFiles.add(path);\n },\n },\n configResolved(resolvedConfig) {\n finalConfig = resolvedConfig;\n timing.configResolved = performance.now();\n if (finalConfig.command === \"build\") {\n finalConfig = {\n ...finalConfig,\n mode: \"production\",\n };\n }\n\n // Verify transformer runs first, preserver runs last\n const plugins = finalConfig.plugins;\n const transformerIndex = plugins.findIndex(\n (p) => p.name === \"vite:react-stream-transformer\"\n );\n const preserverIndex = plugins.findIndex(\n (p) => p.name === \"vite-plugin-react-server:preserve-directives\"\n );\n\n if (transformerIndex === -1) {\n throw new Error(\"Transformer plugin not installed\");\n }\n if (preserverIndex < transformerIndex) {\n throw new Error(\"Transformer plugin isn't installed or isn't running before preserver\");\n }\n },\n async configureServer(server: ViteDevServer) {\n if (server.config.root !== root) {\n console.log(\n \"[vite-plugin-react-server] Root dir changed\",\n server.config.root,\n root\n );\n root = server.config.root;\n }\n\n const activeStreams = new Set<ServerResponse>();\n\n // Handle Vite server restarts\n server.ws.on(\"restart\", (path) => {\n console.log(\n \"[vite-plugin-react-server] 🔧 Plugin changed, preparing for restart:\",\n path\n );\n\n // Close streams with restart message\n for (const res of activeStreams) {\n res.writeHead(503, {\n \"Content-Type\": \"text/x-component\",\n \"Retry-After\": \"1\",\n });\n res.end('{\"error\":\"Server restarting...\"}');\n }\n activeStreams.clear();\n });\n\n server.ws.on(\"connection\", (_socket, _req) => {\n console.log(\"[vite-plugin-react-server] hooking up ws connection\");\n });\n\n server.ws.on(\"listening\", () => {\n console.log(\"[vite-plugin-react-server] hooking up ws listening\");\n });\n\n server.middlewares.use(async (req, res, next) => {\n if (req.headers.accept !== \"text/x-component\") return next();\n console.log(\"[vite-plugin-react-server] middleware called\");\n try {\n const handler = await createHandler(\n req.url ?? \"\",\n {\n Page: userOptions.Page,\n props: userOptions.props,\n build: userOptions.build,\n Html: React.Fragment,\n pageExportName: userOptions.pageExportName,\n propsExportName: userOptions.propsExportName,\n moduleBase: userOptions.moduleBase,\n moduleBasePath: userOptions.moduleBasePath,\n projectRoot: root,\n },\n {\n cssFiles: Array.from(cssModules),\n logger: createLogger(),\n loader: server.ssrLoadModule,\n moduleGraph: server.moduleGraph,\n }\n );\n if (handler.type === \"success\") {\n handler.stream?.pipe(res);\n }\n activeStreams.add(res);\n } finally {\n res.on(\"close\", () => {\n console.log(\n \"[vite-plugin-react-server] ➖ Stream closed for:\",\n req.url\n );\n activeStreams.delete(res);\n });\n }\n });\n },\n async config(config, configEnv): Promise<UserConfig> {\n if(typeof config.root === 'string' && config.root !== root) {\n console.log(\"[vite-plugin-react-server] Root dir changed\", config.root, root);\n root = config.root\n }\n const resolvedPages = await resolvePages(userOptions.build.pages);\n if (resolvedPages.type === \"error\") {\n throw resolvedPages.error;\n }\n\n files = await checkFilesExist(\n resolvedPages.pages,\n userOptions,\n root\n );\n\n const resolvedConfig = resolveUserConfig({\n condition: \"react-server\",\n config,\n configEnv,\n userOptions,\n files,\n });\n\n if (resolvedConfig.type === \"error\") {\n throw resolvedConfig.error;\n }\n\n userConfig = resolvedConfig.userConfig;\n\n return resolvedConfig.userConfig;\n },\n async buildStart() {\n if (!timing.buildStart) {\n timing.buildStart = performance.now();\n } else {\n console.log(\"Build already started\");\n }\n },\n async closeBundle() {\n if (!userConfig || finalConfig.command !== \"build\") return;\n try {\n timing.renderStart = performance.now();\n\n const resolvedServerManifest = tryManifest({\n root,\n outDir: userOptions.build.server,\n ssrManifest: false,\n });\n\n const serverManifest =\n resolvedServerManifest.type === \"error\"\n ? getModuleManifest.bind(this)()\n : resolvedServerManifest.manifest;\n // Get worker path from manifest\n // Look for the html-worker entry directly\n let htmlWorkerPath = serverManifest[\"html-worker\"]?.file;\n\n if (options.htmlWorkerPath) {\n htmlWorkerPath = join(root, options.htmlWorkerPath);\n } else {\n htmlWorkerPath = join(\n getPluginRoot(),\n DEFAULT_CONFIG.HTML_WORKER_PATH\n );\n }\n\n // Initialize worker with path from server directory\n const workerPath = resolve(\n root,\n userOptions.build.server,\n htmlWorkerPath\n );\n\n worker = await createWorker({\n projectRoot: userOptions.projectRoot,\n workerPath,\n condition: \"react-server\",\n reverseCondition: true,\n mode: finalConfig.mode as \"production\" | \"development\",\n nodeOptions: \"--conditions=react-client\",\n });\n\n\n // Get routes directly from pages\n const resolvedPages = await resolvePages(userOptions.build.pages);\n if (resolvedPages.type === \"error\") {\n throw resolvedPages.error;\n }\n const routes = resolvedPages.pages;\n console.log(\"[plugin] Routes to render:\", routes);\n\n const entries = Object.values(serverManifest).filter(\n (entry) => entry.isEntry\n );\n const css = entries.flatMap((entry) => entry.css);\n const loader = createBuildLoader({ \n root,\n userConfig,\n pluginContext: this\n });\n\n const { failedRoutes, completedRoutes } = await renderPages(routes, {\n pipableStreamOptions: {\n bootstrapModules: entries.map((entry) => \"/\" + entry.file),\n },\n moduleBasePath: userOptions.moduleBasePath,\n moduleBaseURL: userOptions.moduleBaseURL,\n clientCss: css?.map((css) => \"/\" + css) ?? [],\n userConfig,\n pluginOptions: userOptions,\n worker: worker,\n manifest: serverManifest,\n loader,\n onCssFile: (path: string) => {\n if (buildCssFiles && path.endsWith(\".css\")) {\n buildCssFiles.add(path);\n }\n },\n });\n\n // Debug render results\n console.log(\"[vite-plugin-react-server] Render results:\", {\n failedRoutes,\n completedRoutes,\n });\n\n if (failedRoutes.size) {\n console.error(\n \"[vite-plugin-react-server] Failed to render routes:\",\n failedRoutes\n );\n }\n console.log(\"[vite-plugin-react-server] Render complete\");\n console.log(\"[vite-plugin-react-server] Terminating worker\");\n if (worker) await worker.terminate();\n\n timing.renderEnd = performance.now();\n timing.total = (timing.renderEnd - timing.start) / 1000;\n\n // Collect stats\n const stats: BuildStats = {\n htmlFiles: routes.length,\n clientComponents: clientComponents.size,\n cssFiles: cssModules.size,\n totalRoutes: routes.length,\n timing: {\n config: ((timing.configResolved ?? 0) - timing.start) / 1000,\n build:\n ((timing.buildStart ?? 0) - (timing.configResolved ?? 0)) / 1000,\n render:\n ((timing.renderEnd ?? 0) - (timing.renderStart ?? 0)) / 1000,\n total: (timing.renderEnd ?? 0 - timing.start) / 1000,\n },\n };\n\n // Format duration helper\n const formatDuration = (seconds: number) => {\n if (seconds < 0.001) {\n return `${(seconds * 1000000).toFixed(0)}μs`;\n }\n if (seconds < 1) {\n return `${(seconds * 1000).toFixed(0)}ms`;\n }\n return `${seconds.toFixed(2)}s`;\n };\n\n console.log(\"\\n[vite-plugin-react-server] Build Summary:\");\n console.log(\"─\".repeat(50));\n console.log(`�� Generated ${stats.htmlFiles} HTML files`);\n console.log(`🎯 Processed ${stats.clientComponents} client components`);\n console.log(`🎨 Included ${stats.cssFiles} CSS files`);\n console.log(`🛣️ Total routes: ${stats.totalRoutes}`);\n console.log(\"─\".repeat(50));\n console.log(\"⏱️ Timing:\");\n console.log(` Config: ${formatDuration(stats.timing.config)}`);\n console.log(` Build: ${formatDuration(stats.timing.build)}`);\n console.log(` Render: ${formatDuration(stats.timing.render)}`);\n console.log(\" \".repeat(12));\n console.log(` Total: ${formatDuration(stats.timing.total)}`);\n console.log(\"─\".repeat(50));\n\n // Ensure worker is terminated\n if (worker) {\n console.log(\"[vite-plugin-react-server] Terminating worker...\");\n await worker.terminate();\n worker = null as any;\n }\n } catch (error) {\n console.error(\"[vite-plugin-react-server] Build failed:\", error);\n // Make sure to terminate worker even on error\n if (worker) await worker.terminate();\n throw error;\n }\n },\n async buildEnd(error) {\n if (error) {\n console.error(\"[vite-plugin-react-server] Build error:\", error);\n }\n if (worker) await worker.terminate();\n },\n handleHotUpdate({ file }) {\n if (file.endsWith(\".css\")) {\n cssModules.add(file);\n }\n },\n async renderChunk(_code: string, chunk: any, _options: any) {\n const moduleIds = this.getModuleIds();\n const fallbackManifestEntries = Object.fromEntries(\n Array.from(moduleIds)\n .map((module) => {\n const moduleInfo = this.getModuleInfo(module);\n if (!moduleInfo) return [module, null];\n const {\n code,\n id,\n isEntry,\n importedIds,\n dynamicallyImportedIds,\n ...rest\n } = moduleInfo;\n return [\n chunk.name ?? id,\n {\n file: chunk.fileName,\n src: module,\n name: chunk.name ?? id,\n isEntry: chunk.isEntry ?? isEntry,\n imports: chunk.imports ?? importedIds,\n dynamicImports: chunk.dynamicImports ?? dynamicallyImportedIds,\n directive: rest.meta[\"directive\"],\n css: chunk.viteMetadata?.importedCss ?? [],\n assets: chunk.viteMetadata?.importedAssets ?? [],\n },\n ];\n })\n .filter(Boolean)\n );\n\n moduleGraph = {\n ...moduleGraph,\n ...fallbackManifestEntries,\n };\n\n if (chunk.fileName.includes(\"html-worker\")) {\n const workerPath = resolve(\n root,\n userOptions.build.server,\n chunk.fileName\n );\n console.log(\"Files in output dir:\", {\n files: readdirSync(resolve(root, userOptions.build.server)),\n workerPath,\n });\n\n // Don't initialize worker during build phase\n if (finalConfig.command === \"build\") {\n return null;\n }\n\n worker = await createWorker({\n projectRoot: userOptions.projectRoot,\n workerPath,\n });\n }\n return null;\n },\n };\n}\n"],"names":["React","css"],"mappings":"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"}
1
+ {"version":3,"file":"plugin.js","sources":["../../../plugin/react-server/plugin.ts"],"sourcesContent":["import { readdirSync } from \"fs\";\nimport type { ServerResponse } from \"node:http\";\nimport { join, resolve } from \"node:path\";\nimport { performance } from \"node:perf_hooks\";\nimport { Worker } from \"node:worker_threads\";\nimport React from \"react\";\nimport {\n createLogger,\n type ResolvedConfig,\n type UserConfig,\n type ViteDevServer,\n} from \"vite\";\nimport { checkFilesExist } from \"../checkFilesExist.js\";\nimport { DEFAULT_CONFIG } from \"../config/defaults.js\";\nimport { getPluginRoot } from \"../config/getPaths.js\";\nimport { resolveOptions } from \"../config/resolveOptions.js\";\nimport { resolvePages } from \"../config/resolvePages.js\";\nimport { resolveUserConfig } from \"../config/resolveUserConfig.js\";\nimport { getModuleManifest } from \"../helpers/getModuleManifest.js\";\nimport { tryManifest } from \"../helpers/tryManifest.js\";\nimport { createBuildLoader } from '../loader/createBuildLoader.js';\nimport type {\n BuildTiming,\n CheckFilesExistReturn,\n ReactStreamPluginMeta,\n ResolvedUserConfig,\n ResolvedUserOptions,\n} from \"../types.js\";\nimport { type StreamPluginOptions } from \"../types.js\";\nimport { createWorker } from \"../worker/createWorker.js\";\nimport { renderPages } from \"../worker/html/renderPages.js\";\nimport { createHandler } from \"./createHandler.js\";\n\nexport function reactServerPlugin(\n options: StreamPluginOptions\n): import(\"vite\").Plugin<{ meta: ReactStreamPluginMeta, addCssFile: (path: string) => void } > {\n const timing: BuildTiming = {\n start: performance.now(),\n };\n\n let files: CheckFilesExistReturn;\n // let env: Awaited<ReturnType<typeof getEnv>>;\n let worker: Worker;\n let finalConfig: ResolvedConfig;\n let cssModules = new Set<string>();\n let clientComponents = new Map<string, string>();\n // let define: Record<string, string>;\n let buildCssFiles = new Set<string>();\n let root: string = process.cwd();\n let userConfig: ResolvedUserConfig;\n let userOptions: ResolvedUserOptions;\n let moduleGraph: Record<\n string,\n {\n file: string;\n src: string;\n name: string;\n isEntry: boolean;\n imports: string[];\n dynamicImports: string[];\n }\n > = {};\n\n interface BuildStats {\n htmlFiles: number;\n clientComponents: number;\n cssFiles: number;\n totalRoutes: number;\n timing: {\n config: number;\n build: number;\n render: number;\n total: number;\n };\n }\n\n const resolvedOptions = resolveOptions(options);\n if (resolvedOptions.type === \"error\") {\n throw resolvedOptions.error;\n }\n userOptions = resolvedOptions.userOptions;\n root = userOptions.projectRoot;\n return {\n name: \"vite:react-stream-server\",\n enforce: \"post\",\n api: {\n meta: { timing },\n addCssFile(path: string) {\n buildCssFiles.add(path);\n },\n },\n configResolved(resolvedConfig) {\n finalConfig = resolvedConfig;\n timing.configResolved = performance.now();\n if (finalConfig.command === \"build\") {\n finalConfig = {\n ...finalConfig,\n mode: \"production\",\n };\n }\n\n // Verify transformer runs first, preserver runs last\n const plugins = finalConfig.plugins;\n const transformerIndex = plugins.findIndex(\n (p) => p.name === \"vite:react-stream-transformer\"\n );\n const preserverIndex = plugins.findIndex(\n (p) => p.name === \"vite-plugin-react-server:preserve-directives\"\n );\n\n if (transformerIndex === -1) {\n throw new Error(\"Transformer plugin not installed\");\n }\n if (preserverIndex < transformerIndex) {\n throw new Error(\n \"Transformer plugin isn't installed or isn't running before preserver\"\n );\n }\n },\n async configureServer(server: ViteDevServer) {\n if (server.config.root !== root) {\n console.log(\n \"[vite-plugin-react-server] Root dir changed\",\n server.config.root,\n root\n );\n root = server.config.root;\n }\n\n const activeStreams = new Set<ServerResponse>();\n\n // Handle Vite server restarts\n server.ws.on(\"restart\", (path) => {\n console.log(\n \"[vite-plugin-react-server] 🔧 Plugin changed, preparing for restart:\",\n path\n );\n\n // Close streams with restart message\n for (const res of activeStreams) {\n res.writeHead(503, {\n \"Content-Type\": \"text/x-component\",\n \"Retry-After\": \"1\",\n });\n res.end('{\"error\":\"Server restarting...\"}');\n }\n activeStreams.clear();\n });\n\n server.ws.on(\"connection\", (_socket, _req) => {\n console.log(\"[vite-plugin-react-server] hooking up ws connection\");\n });\n\n server.ws.on(\"listening\", () => {\n console.log(\"[vite-plugin-react-server] hooking up ws listening\");\n });\n\n server.middlewares.use(async (req, res, next) => {\n if (req.headers.accept !== \"text/x-component\") return next();\n console.log(\"[vite-plugin-react-server] middleware called\");\n try {\n const handler = await createHandler(\n req.url ?? \"\",\n {\n Page: userOptions.Page,\n props: userOptions.props,\n build: userOptions.build,\n Html: React.Fragment,\n pageExportName: userOptions.pageExportName,\n propsExportName: userOptions.propsExportName,\n moduleBase: userOptions.moduleBase,\n moduleBasePath: userOptions.moduleBasePath,\n projectRoot: root,\n },\n {\n cssFiles: Array.from(cssModules),\n logger: createLogger(),\n loader: server.ssrLoadModule,\n moduleGraph: server.moduleGraph,\n }\n );\n if (handler.type === \"success\") {\n handler.stream?.pipe(res);\n }\n activeStreams.add(res);\n } finally {\n res.on(\"close\", () => {\n console.log(\n \"[vite-plugin-react-server] ➖ Stream closed for:\",\n req.url\n );\n activeStreams.delete(res);\n });\n }\n });\n },\n async config(config, configEnv): Promise<UserConfig> {\n if (typeof config.root === \"string\" && config.root !== root) {\n console.log(\n \"[vite-plugin-react-server] Root dir changed\",\n config.root,\n root\n );\n root = config.root;\n }\n const resolvedPages = await resolvePages(userOptions.build.pages);\n if (resolvedPages.type === \"error\") {\n throw resolvedPages.error;\n }\n\n files = await checkFilesExist(resolvedPages.pages, userOptions, root);\n\n const resolvedConfig = resolveUserConfig({\n condition: \"react-server\",\n config,\n configEnv,\n userOptions,\n files,\n });\n\n if (resolvedConfig.type === \"error\") {\n throw resolvedConfig.error;\n }\n\n userConfig = resolvedConfig.userConfig;\n\n return resolvedConfig.userConfig;\n },\n async buildStart() {\n if (!timing.buildStart) {\n timing.buildStart = performance.now();\n } else {\n console.log(\"Build already started\");\n }\n },\n async closeBundle() {\n if (!userConfig || finalConfig.command !== \"build\") return;\n try {\n timing.renderStart = performance.now();\n\n const resolvedServerManifest = tryManifest({\n root,\n outDir: userOptions.build.server,\n ssrManifest: false,\n });\n\n const serverManifest =\n resolvedServerManifest.type === \"error\"\n ? getModuleManifest.bind(this)()\n : resolvedServerManifest.manifest;\n // Get worker path from manifest\n // Look for the html-worker entry directly\n let htmlWorkerPath = serverManifest[\"html-worker\"]?.file;\n\n if (options.htmlWorkerPath) {\n htmlWorkerPath = join(root, options.htmlWorkerPath);\n } else {\n htmlWorkerPath = join(\n getPluginRoot(),\n DEFAULT_CONFIG.HTML_WORKER_PATH\n );\n }\n\n // Initialize worker with path from server directory\n const workerPath = resolve(\n root,\n userOptions.build.server,\n htmlWorkerPath\n );\n\n worker = await createWorker({\n projectRoot: userOptions.projectRoot,\n workerPath,\n condition: \"react-server\",\n reverseCondition: true,\n mode: finalConfig.mode as \"production\" | \"development\",\n nodeOptions: \"--conditions=react-client\",\n });\n\n // Get routes directly from pages\n const resolvedPages = await resolvePages(userOptions.build.pages);\n if (resolvedPages.type === \"error\") {\n throw resolvedPages.error;\n }\n const routes = resolvedPages.pages;\n console.log(\"[plugin] Routes to render:\", routes);\n\n const entries = Object.values(serverManifest).filter(\n (entry) => entry.isEntry\n );\n const css = entries.flatMap((entry) => entry.css);\n const loader = createBuildLoader({\n root,\n userConfig,\n pluginContext: this,\n });\n\n const { failedRoutes, completedRoutes } = await renderPages(routes, {\n pipableStreamOptions: {\n bootstrapModules: entries.map((entry) => \"/\" + entry.file),\n },\n moduleBasePath: userOptions.moduleBasePath,\n moduleBaseURL: userOptions.moduleBaseURL,\n clientCss: css?.map((css) => \"/\" + css) ?? [],\n userConfig,\n pluginOptions: userOptions,\n worker: worker,\n manifest: serverManifest,\n loader,\n onCssFile: (path: string) => {\n if (buildCssFiles && path.endsWith(\".css\")) {\n buildCssFiles.add(path);\n }\n },\n });\n\n // Debug render results\n console.log(\"[vite-plugin-react-server] Render results:\", {\n failedRoutes,\n completedRoutes,\n });\n\n if (failedRoutes.size) {\n console.error(\n \"[vite-plugin-react-server] Failed to render routes:\",\n failedRoutes\n );\n }\n console.log(\"[vite-plugin-react-server] Render complete\");\n console.log(\"[vite-plugin-react-server] Terminating worker\");\n if (worker) await worker.terminate();\n\n timing.renderEnd = performance.now();\n timing.total = (timing.renderEnd - timing.start) / 1000;\n\n // Collect stats\n const stats: BuildStats = {\n htmlFiles: routes.length,\n clientComponents: clientComponents.size,\n cssFiles: cssModules.size,\n totalRoutes: routes.length,\n timing: {\n config: ((timing.configResolved ?? 0) - timing.start) / 1000,\n build:\n ((timing.buildStart ?? 0) - (timing.configResolved ?? 0)) / 1000,\n render:\n ((timing.renderEnd ?? 0) - (timing.renderStart ?? 0)) / 1000,\n total: (timing.renderEnd ?? 0 - timing.start) / 1000,\n },\n };\n\n // Format duration helper\n const formatDuration = (seconds: number) => {\n if (seconds < 0.001) {\n return `${(seconds * 1000000).toFixed(0)}μs`;\n }\n if (seconds < 1) {\n return `${(seconds * 1000).toFixed(0)}ms`;\n }\n return `${seconds.toFixed(2)}s`;\n };\n\n console.log(\"\\n[vite-plugin-react-server] Build Summary:\");\n console.log(\"─\".repeat(50));\n console.log(`�� Generated ${stats.htmlFiles} HTML files`);\n console.log(`🎯 Processed ${stats.clientComponents} client components`);\n console.log(`🎨 Included ${stats.cssFiles} CSS files`);\n console.log(`🛣️ Total routes: ${stats.totalRoutes}`);\n console.log(\"─\".repeat(50));\n console.log(\"⏱️ Timing:\");\n console.log(` Config: ${formatDuration(stats.timing.config)}`);\n console.log(` Build: ${formatDuration(stats.timing.build)}`);\n console.log(` Render: ${formatDuration(stats.timing.render)}`);\n console.log(\" \".repeat(12));\n console.log(` Total: ${formatDuration(stats.timing.total)}`);\n console.log(\"─\".repeat(50));\n\n // Ensure worker is terminated\n if (worker) {\n console.log(\"[vite-plugin-react-server] Terminating worker...\");\n await worker.terminate();\n worker = null as any;\n }\n } catch (error) {\n console.error(\"[vite-plugin-react-server] Build failed:\", error);\n // Make sure to terminate worker even on error\n if (worker) await worker.terminate();\n throw error;\n }\n },\n async buildEnd(error) {\n if (error) {\n console.error(\"[vite-plugin-react-server] Build error:\", error);\n }\n if (worker) await worker.terminate();\n },\n handleHotUpdate({ file }) {\n if (file.endsWith(\".css\")) {\n cssModules.add(file);\n }\n },\n async renderChunk(_code: string, chunk: any, _options: any) {\n const moduleIds = this.getModuleIds();\n const fallbackManifestEntries = Object.fromEntries(\n Array.from(moduleIds)\n .map((module) => {\n const moduleInfo = this.getModuleInfo(module);\n if (!moduleInfo) return [module, null];\n const {\n code,\n id,\n isEntry,\n importedIds,\n dynamicallyImportedIds,\n ...rest\n } = moduleInfo;\n return [\n chunk.name ?? id,\n {\n file: chunk.fileName,\n src: module,\n name: chunk.name ?? id,\n isEntry: chunk.isEntry ?? isEntry,\n imports: chunk.imports ?? importedIds,\n dynamicImports: chunk.dynamicImports ?? dynamicallyImportedIds,\n directive: rest.meta[\"directive\"],\n css: chunk.viteMetadata?.importedCss ?? [],\n assets: chunk.viteMetadata?.importedAssets ?? [],\n },\n ];\n })\n .filter(Boolean)\n );\n\n moduleGraph = {\n ...moduleGraph,\n ...fallbackManifestEntries,\n };\n\n if (chunk.fileName.includes(\"html-worker\")) {\n const workerPath = resolve(\n root,\n userOptions.build.server,\n chunk.fileName\n );\n console.log(\"Files in output dir:\", {\n files: readdirSync(resolve(root, userOptions.build.server)),\n workerPath,\n });\n\n // Don't initialize worker during build phase\n if (finalConfig.command === \"build\") {\n return null;\n }\n\n worker = await createWorker({\n projectRoot: userOptions.projectRoot,\n workerPath,\n });\n }\n return null;\n },\n };\n}\n"],"names":["React","css"],"mappings":"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"}
@@ -1,4 +1,3 @@
1
- import type { Plugin } from "vite";
2
1
  import type { StreamPluginOptions } from "../types.js";
3
2
  /**
4
3
  * Plugin for transforming React Client Components.
@@ -24,5 +23,5 @@ import type { StreamPluginOptions } from "../types.js";
24
23
  * });
25
24
  * ```
26
25
  */
27
- export declare function reactTransformPlugin(options?: StreamPluginOptions): Plugin;
26
+ export declare function reactTransformPlugin(options?: StreamPluginOptions): import("vite").Plugin;
28
27
  //# sourceMappingURL=plugin.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../../plugin/transformer/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAGnC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAIvD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,wBAAgB,oBAAoB,CAClC,OAAO,CAAC,EAAE,mBAAmB,GAC5B,MAAM,CAgGR"}
1
+ {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../../plugin/transformer/plugin.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAKvD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,wBAAgB,oBAAoB,CAClC,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,MAAM,EAAE,MAAM,CA2GvB"}
@@ -12,7 +12,9 @@ function reactTransformPlugin(options) {
12
12
  console.log("react-server");
13
13
  } else {
14
14
  console.log(process.env["NODE_OPTIONS"]);
15
- throw new Error('react-server condition not found, set NODE_OPTIONS="--conditions react-server"');
15
+ throw new Error(
16
+ 'react-server condition not found, set NODE_OPTIONS="--conditions react-server"'
17
+ );
16
18
  }
17
19
  const projectRoot = options?.projectRoot || process.cwd();
18
20
  let transformClientComponent;
@@ -44,10 +46,13 @@ function reactTransformPlugin(options) {
44
46
  config(config) {
45
47
  const existingInput = config.build?.rollupOptions?.input || {};
46
48
  const currentInputs = typeof existingInput === "string" ? { default: existingInput } : existingInput;
47
- const entries = Array.from(clientComponents).reduce((acc, path) => ({
48
- ...acc,
49
- [path.replace(DEFAULT_CONFIG.FILE_REGEX, "")]: path
50
- }), {});
49
+ const entries = Array.from(clientComponents).reduce(
50
+ (acc, path) => ({
51
+ ...acc,
52
+ [path.replace(DEFAULT_CONFIG.FILE_REGEX, "")]: path
53
+ }),
54
+ {}
55
+ );
51
56
  return {
52
57
  build: {
53
58
  rollupOptions: {
@@ -77,7 +82,10 @@ function reactTransformPlugin(options) {
77
82
  },
78
83
  // Log final client components list
79
84
  buildEnd() {
80
- console.log("[TransformerPlugin] Final client components:", Array.from(clientComponents));
85
+ console.log(
86
+ "[TransformerPlugin] Final client components:",
87
+ Array.from(clientComponents)
88
+ );
81
89
  }
82
90
  };
83
91
  }
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.js","sources":["../../../plugin/transformer/plugin.ts"],"sourcesContent":["import type { Plugin } from \"vite\";\nimport { DEFAULT_CONFIG } from \"../config/defaults.js\";\nimport { createClientComponentTransformer } from \"./transformer-client-components.js\";\nimport type { StreamPluginOptions } from \"../types.js\";\nimport { createServerActionTransformer } from \"./transformer-server-actions.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 reactTransformPlugin(\n options?: StreamPluginOptions\n): Plugin {\n if(process.env['NODE_OPTIONS']?.match(/--conditions[= ]react-server/)) {\n console.log('react-server')\n } else {\n console.log(process.env['NODE_OPTIONS'])\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 includeClient = options?.autoDiscover?.clientComponents || DEFAULT_CONFIG.AUTO_DISCOVER.clientComponents;\n // const includeServerFunctions = options?.autoDiscover?.serverFunctions || DEFAULT_CONFIG.AUTO_DISCOVER.serverFunctions;\n let transformClientComponent: any;\n let transformServerAction: any;\n // get the file we are imported from (parent)\n\n // Track client components\n const clientComponents = new Set<string>();\n\n return {\n name: \"vite:react-stream-transformer\",\n enforce: 'post',\n\n configResolved(config) {\n transformClientComponent = createClientComponentTransformer({\n moduleId:\n options?.moduleId ||\n DEFAULT_CONFIG.MODULE_ID({\n projectRoot: projectRoot,\n output: {\n dir: config.build?.outDir ?? DEFAULT_CONFIG.BUILD.server,\n },\n isProduction: config.isProduction,\n }),\n }).transform;\n transformServerAction = createServerActionTransformer({\n moduleId:\n options?.moduleId ||\n DEFAULT_CONFIG.MODULE_ID({\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 config(config) {\n // Get existing inputs\n const existingInput = config.build?.rollupOptions?.input || {};\n const currentInputs = typeof existingInput === 'string' ? { default: existingInput } : existingInput;\n\n // Add client components\n const entries = Array.from(clientComponents).reduce((acc, path) => ({\n ...acc,\n [path.replace(DEFAULT_CONFIG.FILE_REGEX, '')]: path\n }), {});\n\n return {\n build: {\n rollupOptions: {\n input: {\n ...currentInputs,\n ...entries\n }\n }\n }\n };\n },\n\n buildStart() {\n // Reset client components at start of each build\n clientComponents.clear();\n },\n\n async transform(code: string, id: string, options?: { ssr?: boolean }) {\n // Check for directives\n const hasClientDirective = code.match(/^[\"']use client[\"'];?/);\n if (!hasClientDirective) {\n const hasServerDirective = code.match(/^[\"']use server[\"'];?/);\n if (!hasServerDirective) {\n return null;\n }\n return transformServerAction.bind(this)(code, id, options);\n }\n\n // Track client component and transform\n clientComponents.add(id);\n console.log('[TransformerPlugin] Found client component:', id);\n return transformClientComponent.bind(this)(code, id, options);\n },\n\n // Log final client components list\n buildEnd() {\n console.log('[TransformerPlugin] Final client components:', Array.from(clientComponents));\n }\n };\n}\n"],"names":["options"],"mappings":"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"}
1
+ {"version":3,"file":"plugin.js","sources":["../../../plugin/transformer/plugin.ts"],"sourcesContent":["import { DEFAULT_CONFIG } from \"../config/defaults.js\";\nimport type { StreamPluginOptions } from \"../types.js\";\nimport { createClientComponentTransformer } from \"./transformer-client-components.js\";\nimport { createServerActionTransformer } from \"./transformer-server-actions.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 reactTransformPlugin(\n options?: StreamPluginOptions\n): import(\"vite\").Plugin {\n if (process.env[\"NODE_OPTIONS\"]?.match(/--conditions[= ]react-server/)) {\n console.log(\"react-server\");\n } else {\n console.log(process.env[\"NODE_OPTIONS\"]);\n throw new Error(\n 'react-server condition not found, set NODE_OPTIONS=\"--conditions react-server\"'\n );\n }\n const projectRoot = options?.projectRoot || process.cwd();\n // const includeClient = options?.autoDiscover?.clientComponents || DEFAULT_CONFIG.AUTO_DISCOVER.clientComponents;\n // const includeServerFunctions = options?.autoDiscover?.serverFunctions || DEFAULT_CONFIG.AUTO_DISCOVER.serverFunctions;\n let transformClientComponent: any;\n let transformServerAction: any;\n // get the file we are imported from (parent)\n\n // Track client components\n const clientComponents = new Set<string>();\n\n return {\n name: \"vite:react-stream-transformer\",\n enforce: \"post\",\n\n configResolved(config) {\n transformClientComponent = createClientComponentTransformer({\n moduleId:\n options?.moduleId ||\n DEFAULT_CONFIG.MODULE_ID({\n projectRoot: projectRoot,\n output: {\n dir: config.build?.outDir ?? DEFAULT_CONFIG.BUILD.server,\n },\n isProduction: config.isProduction,\n }),\n }).transform;\n transformServerAction = createServerActionTransformer({\n moduleId:\n options?.moduleId ||\n DEFAULT_CONFIG.MODULE_ID({\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 config(config) {\n // Get existing inputs\n const existingInput = config.build?.rollupOptions?.input || {};\n const currentInputs =\n typeof existingInput === \"string\"\n ? { default: existingInput }\n : existingInput;\n\n // Add client components\n const entries = Array.from(clientComponents).reduce(\n (acc, path) => ({\n ...acc,\n [path.replace(DEFAULT_CONFIG.FILE_REGEX, \"\")]: path,\n }),\n {}\n );\n\n return {\n build: {\n rollupOptions: {\n input: {\n ...currentInputs,\n ...entries,\n },\n },\n },\n };\n },\n\n buildStart() {\n // Reset client components at start of each build\n clientComponents.clear();\n },\n\n async transform(code: string, id: string, options?: { ssr?: boolean }) {\n // Check for directives\n const hasClientDirective = code.match(/^[\"']use client[\"'];?/);\n if (!hasClientDirective) {\n const hasServerDirective = code.match(/^[\"']use server[\"'];?/);\n if (!hasServerDirective) {\n return null;\n }\n return transformServerAction.bind(this)(code, id, options);\n }\n\n // Track client component and transform\n clientComponents.add(id);\n console.log(\"[TransformerPlugin] Found client component:\", id);\n return transformClientComponent.bind(this)(code, id, options);\n },\n\n // Log final client components list\n buildEnd() {\n console.log(\n \"[TransformerPlugin] Final client components:\",\n Array.from(clientComponents)\n );\n },\n };\n}\n"],"names":["options"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"renderPages.d.ts","sourceRoot":"","sources":["../../../../plugin/worker/html/renderPages.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAElD,OAAO,KAAK,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAG9E,UAAU,qBAAqB;IAC7B,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;IACxB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IACnC,SAAS,CAAC,EAAE;QACV,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KAClC,CAAC;CACH;AAED,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,UAAU,EAAE,kBAAkB,CAAC;IAC/B,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;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,wBAAsB,WAAW,CAC/B,MAAM,EAAE,MAAM,EAAE,EAChB,OAAO,EAAE,kBAAkB;;;GA0I5B"}
1
+ {"version":3,"file":"renderPages.d.ts","sourceRoot":"","sources":["../../../../plugin/worker/html/renderPages.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAElD,OAAO,KAAK,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAI9E,UAAU,qBAAqB;IAC7B,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;IACxB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IACnC,SAAS,CAAC,EAAE;QACV,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KAClC,CAAC;CACH;AAED,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,UAAU,EAAE,kBAAkB,CAAC;IAC/B,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;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,wBAAsB,WAAW,CAC/B,MAAM,EAAE,MAAM,EAAE,EAChB,OAAO,EAAE,kBAAkB;;;GA0I5B"}
@@ -3,10 +3,11 @@
3
3
  * Copyright (c) Nico Brinkkemper
4
4
  * MIT License
5
5
  */
6
- import { resolve, join } from 'node:path';
6
+ import { resolve, join, dirname } from 'node:path';
7
7
  import { Transform } from 'node:stream';
8
8
  import { createHandler } from '../../react-server/createHandler.js';
9
9
  import { writeFile, mkdir } from 'node:fs/promises';
10
+ import { mkdirSync } from 'node:fs';
10
11
 
11
12
  async function renderPages(routes, options) {
12
13
  console.log("[renderPages] Starting render for routes:", routes);
@@ -44,6 +45,7 @@ async function renderPages(routes, options) {
44
45
  clearTimeout(timeout);
45
46
  for (const [route, html] of htmlContent) {
46
47
  const outputPath = route === "/" ? join(htmlRoot, "index.html") : join(htmlRoot, route, "index.html");
48
+ mkdirSync(dirname(outputPath), { recursive: true });
47
49
  const writePromise = writeFile(outputPath, html).catch((error) => {
48
50
  failedRoutes.set(route, error);
49
51
  });
@@ -1 +1 @@
1
- {"version":3,"file":"renderPages.js","sources":["../../../../plugin/worker/html/renderPages.ts"],"sourcesContent":["import { join, resolve as resolvePath } from \"node:path\";\nimport { Transform } from \"node:stream\";\nimport type { Worker } from \"node:worker_threads\";\nimport { createHandler } from \"../../react-server/createHandler.js\";\nimport type { ResolvedUserConfig, StreamPluginOptions } from \"../../types.js\";\nimport { mkdir, writeFile } from \"node:fs/promises\";\n\ninterface PipeableStreamOptions {\n bootstrapModules?: string[];\n bootstrapScripts?: string[];\n bootstrapScriptContent?: string;\n signal?: AbortSignal;\n identifierPrefix?: string;\n namespaceURI?: string;\n nonce?: string;\n progressiveChunkSize?: number;\n onShellReady?: () => void;\n onAllReady?: () => void;\n onError?: (error: unknown) => void;\n importMap?: {\n imports?: Record<string, string>;\n };\n}\n\ntype RenderPagesOptions = {\n pluginOptions: Required<\n Pick<\n StreamPluginOptions,\n \"moduleBase\" | \"moduleBasePath\" | \"moduleBaseURL\" | \"projectRoot\"\n >\n > &\n Pick<\n StreamPluginOptions,\n \"Page\" | \"props\" | \"build\" | \"Html\" | \"pageExportName\" | \"propsExportName\"\n >;\n userConfig: ResolvedUserConfig;\n manifest: Record<string, { file: string }>;\n worker: Worker;\n pipableStreamOptions?: PipeableStreamOptions;\n loader: (id: string) => Promise<Record<string, any>>;\n onCssFile?: (path: string) => void;\n clientCss?: string[];\n moduleBasePath: string;\n moduleBaseURL: string;\n};\n\nexport async function renderPages(\n routes: string[],\n options: RenderPagesOptions\n) {\n console.log(\"[renderPages] Starting render for routes:\", routes);\n\n const destinationRoot = resolvePath(options.userConfig.root, options.userConfig.build.outDir);\n const failedRoutes = new Map<string, Error>();\n const moduleRootPath = join(destinationRoot, options.moduleBasePath);\n const moduleBaseURL = options.moduleBaseURL;\n const htmlRoot = join(\n options.userConfig.root,\n options.pluginOptions.build?.client ?? options.userConfig.build.outDir.replace('server', 'client')\n );\n console.log(\"[renderPages] HTML root:\", htmlRoot);\n\n const streamStarted = new Set<string>();\n const completedRoutes = new Set<string>();\n const htmlContent = new Map<string, string>();\n const writePromises = new Map<string, Promise<void>>();\n\n // Create a promise that resolves when all routes are complete\n const allRoutesComplete = new Promise<void>((resolve, reject) => {\n const timeout = setTimeout(() => {\n reject(new Error(`Render timeout - Started: ${streamStarted.size}, Completed: ${completedRoutes.size}`));\n }, 5000);\n\n options.worker.on(\"message\", function messageHandler(msg: any) {\n switch (msg.type) {\n case \"SHELL_READY\": {\n streamStarted.add(msg.id);\n break;\n }\n case \"HTML_READY\": {\n htmlContent.set(msg.id, msg.html);\n break;\n }\n case \"ALL_READY\": {\n completedRoutes.add(msg.id);\n \n if (completedRoutes.size === routes.length) {\n options.worker.removeListener(\"message\", messageHandler);\n clearTimeout(timeout);\n \n // Write all HTML files\n for (const [route, html] of htmlContent) {\n const outputPath = route === '/' \n ? join(htmlRoot, 'index.html')\n : join(htmlRoot, route, 'index.html');\n \n const writePromise = writeFile(outputPath, html)\n .catch(error => {\n failedRoutes.set(route, error as Error);\n });\n writePromises.set(route, writePromise);\n }\n\n // Wait for all files to be written\n Promise.all(writePromises.values())\n .then(() => resolve())\n .catch(reject);\n }\n break;\n }\n case \"ERROR\": {\n console.error(\"[renderPages] Worker error:\", msg.error);\n if (msg.id) {\n failedRoutes.set(msg.id, new Error(msg.error));\n }\n break;\n }\n }\n });\n });\n\n try {\n await mkdir(htmlRoot, { recursive: true });\n\n const renderPromises = routes.map(async (route) => {\n console.log(\"[renderPages] Processing route:\", route);\n \n try {\n const result = await createHandler(route, options.pluginOptions, {\n loader: options.loader,\n manifest: options.manifest,\n });\n\n if (result.type !== \"success\") {\n console.log(\"[renderPages] Handler failed:\", result);\n return;\n }\n\n const htmlOutputPath = route === '/' \n ? resolvePath(htmlRoot, 'index.html')\n : resolvePath(htmlRoot, route, 'index.html');\n\n const transform = new Transform({\n transform(chunk, _encoding, callback) {\n options.worker.postMessage({\n type: \"RSC_CHUNK\",\n id: route,\n chunk: chunk,\n moduleRootPath: moduleRootPath,\n moduleBaseURL: moduleBaseURL,\n htmlOutputPath,\n outDir: options.userConfig.build.outDir,\n pipableStreamOptions: options.pipableStreamOptions ?? {},\n });\n callback(null, chunk);\n },\n flush(callback) {\n options.worker.postMessage({\n type: \"RSC_END\",\n id: route,\n });\n callback();\n }\n });\n \n result.stream.pipe(transform);\n\n } catch (error) {\n failedRoutes.set(route, error as Error);\n }\n });\n\n // Wait for both the render promises and all routes to complete\n await Promise.all([\n Promise.all(renderPromises),\n allRoutesComplete\n ]);\n\n } finally {\n await options.worker.terminate();\n }\n\n return {\n failedRoutes,\n completedRoutes\n };\n}\n"],"names":["resolvePath"],"mappings":"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"}
1
+ {"version":3,"file":"renderPages.js","sources":["../../../../plugin/worker/html/renderPages.ts"],"sourcesContent":["import { dirname, join, resolve as resolvePath } from \"node:path\";\nimport { Transform } from \"node:stream\";\nimport type { Worker } from \"node:worker_threads\";\nimport { createHandler } from \"../../react-server/createHandler.js\";\nimport type { ResolvedUserConfig, StreamPluginOptions } from \"../../types.js\";\nimport { mkdir, writeFile } from \"node:fs/promises\";\nimport { mkdirSync } from \"node:fs\";\n\ninterface PipeableStreamOptions {\n bootstrapModules?: string[];\n bootstrapScripts?: string[];\n bootstrapScriptContent?: string;\n signal?: AbortSignal;\n identifierPrefix?: string;\n namespaceURI?: string;\n nonce?: string;\n progressiveChunkSize?: number;\n onShellReady?: () => void;\n onAllReady?: () => void;\n onError?: (error: unknown) => void;\n importMap?: {\n imports?: Record<string, string>;\n };\n}\n\ntype RenderPagesOptions = {\n pluginOptions: Required<\n Pick<\n StreamPluginOptions,\n \"moduleBase\" | \"moduleBasePath\" | \"moduleBaseURL\" | \"projectRoot\"\n >\n > &\n Pick<\n StreamPluginOptions,\n \"Page\" | \"props\" | \"build\" | \"Html\" | \"pageExportName\" | \"propsExportName\"\n >;\n userConfig: ResolvedUserConfig;\n manifest: Record<string, { file: string }>;\n worker: Worker;\n pipableStreamOptions?: PipeableStreamOptions;\n loader: (id: string) => Promise<Record<string, any>>;\n onCssFile?: (path: string) => void;\n clientCss?: string[];\n moduleBasePath: string;\n moduleBaseURL: string;\n};\n\nexport async function renderPages(\n routes: string[],\n options: RenderPagesOptions\n) {\n console.log(\"[renderPages] Starting render for routes:\", routes);\n\n const destinationRoot = resolvePath(options.userConfig.root, options.userConfig.build.outDir);\n const failedRoutes = new Map<string, Error>();\n const moduleRootPath = join(destinationRoot, options.moduleBasePath);\n const moduleBaseURL = options.moduleBaseURL;\n const htmlRoot = join(\n options.userConfig.root,\n options.pluginOptions.build?.client ?? options.userConfig.build.outDir.replace('server', 'client')\n );\n console.log(\"[renderPages] HTML root:\", htmlRoot);\n\n const streamStarted = new Set<string>();\n const completedRoutes = new Set<string>();\n const htmlContent = new Map<string, string>();\n const writePromises = new Map<string, Promise<void>>();\n\n // Create a promise that resolves when all routes are complete\n const allRoutesComplete = new Promise<void>((resolve, reject) => {\n const timeout = setTimeout(() => {\n reject(new Error(`Render timeout - Started: ${streamStarted.size}, Completed: ${completedRoutes.size}`));\n }, 5000);\n\n options.worker.on(\"message\", function messageHandler(msg: any) {\n switch (msg.type) {\n case \"SHELL_READY\": {\n streamStarted.add(msg.id);\n break;\n }\n case \"HTML_READY\": {\n htmlContent.set(msg.id, msg.html);\n break;\n }\n case \"ALL_READY\": {\n completedRoutes.add(msg.id);\n \n if (completedRoutes.size === routes.length) {\n options.worker.removeListener(\"message\", messageHandler);\n clearTimeout(timeout);\n \n // Write all HTML files\n for (const [route, html] of htmlContent) {\n const outputPath = route === '/' \n ? join(htmlRoot, 'index.html')\n : join(htmlRoot, route, 'index.html');\n mkdirSync(dirname(outputPath), { recursive: true });\n const writePromise = writeFile(outputPath, html)\n .catch(error => {\n failedRoutes.set(route, error as Error);\n });\n writePromises.set(route, writePromise);\n }\n\n // Wait for all files to be written\n Promise.all(writePromises.values())\n .then(() => resolve())\n .catch(reject);\n }\n break;\n }\n case \"ERROR\": {\n console.error(\"[renderPages] Worker error:\", msg.error);\n if (msg.id) {\n failedRoutes.set(msg.id, new Error(msg.error));\n }\n break;\n }\n }\n });\n });\n\n try {\n await mkdir(htmlRoot, { recursive: true });\n\n const renderPromises = routes.map(async (route) => {\n console.log(\"[renderPages] Processing route:\", route);\n \n try {\n const result = await createHandler(route, options.pluginOptions, {\n loader: options.loader,\n manifest: options.manifest,\n });\n\n if (result.type !== \"success\") {\n console.log(\"[renderPages] Handler failed:\", result);\n return;\n }\n\n const htmlOutputPath = route === '/' \n ? resolvePath(htmlRoot, 'index.html')\n : resolvePath(htmlRoot, route, 'index.html');\n\n const transform = new Transform({\n transform(chunk, _encoding, callback) {\n options.worker.postMessage({\n type: \"RSC_CHUNK\",\n id: route,\n chunk: chunk,\n moduleRootPath: moduleRootPath,\n moduleBaseURL: moduleBaseURL,\n htmlOutputPath,\n outDir: options.userConfig.build.outDir,\n pipableStreamOptions: options.pipableStreamOptions ?? {},\n });\n callback(null, chunk);\n },\n flush(callback) {\n options.worker.postMessage({\n type: \"RSC_END\",\n id: route,\n });\n callback();\n }\n });\n \n result.stream.pipe(transform);\n\n } catch (error) {\n failedRoutes.set(route, error as Error);\n }\n });\n\n // Wait for both the render promises and all routes to complete\n await Promise.all([\n Promise.all(renderPromises),\n allRoutesComplete\n ]);\n\n } finally {\n await options.worker.terminate();\n }\n\n return {\n failedRoutes,\n completedRoutes\n };\n}\n"],"names":["resolvePath"],"mappings":";;;;;;;;;;;AA+CsB,eAAA,WAAA,CACpB,QACA,OACA,EAAA;AACA,EAAQ,OAAA,CAAA,GAAA,CAAI,6CAA6C,MAAM,CAAA;AAE/D,EAAM,MAAA,eAAA,GAAkBA,QAAY,OAAQ,CAAA,UAAA,CAAW,MAAM,OAAQ,CAAA,UAAA,CAAW,MAAM,MAAM,CAAA;AAC5F,EAAM,MAAA,YAAA,uBAAmB,GAAmB,EAAA;AAC5C,EAAA,MAAM,cAAiB,GAAA,IAAA,CAAK,eAAiB,EAAA,OAAA,CAAQ,cAAc,CAAA;AACnE,EAAA,MAAM,gBAAgB,OAAQ,CAAA,aAAA;AAC9B,EAAA,MAAM,QAAW,GAAA,IAAA;AAAA,IACf,QAAQ,UAAW,CAAA,IAAA;AAAA,IACnB,OAAA,CAAQ,aAAc,CAAA,KAAA,EAAO,MAAU,IAAA,OAAA,CAAQ,WAAW,KAAM,CAAA,MAAA,CAAO,OAAQ,CAAA,QAAA,EAAU,QAAQ;AAAA,GACnG;AACA,EAAQ,OAAA,CAAA,GAAA,CAAI,4BAA4B,QAAQ,CAAA;AAEhD,EAAM,MAAA,aAAA,uBAAoB,GAAY,EAAA;AACtC,EAAM,MAAA,eAAA,uBAAsB,GAAY,EAAA;AACxC,EAAM,MAAA,WAAA,uBAAkB,GAAoB,EAAA;AAC5C,EAAM,MAAA,aAAA,uBAAoB,GAA2B,EAAA;AAGrD,EAAA,MAAM,iBAAoB,GAAA,IAAI,OAAc,CAAA,CAAC,SAAS,MAAW,KAAA;AAC/D,IAAM,MAAA,OAAA,GAAU,WAAW,MAAM;AAC/B,MAAO,MAAA,CAAA,IAAI,MAAM,CAA6B,0BAAA,EAAA,aAAA,CAAc,IAAI,CAAgB,aAAA,EAAA,eAAA,CAAgB,IAAI,CAAA,CAAE,CAAC,CAAA;AAAA,OACtG,GAAI,CAAA;AAEP,IAAA,OAAA,CAAQ,MAAO,CAAA,EAAA,CAAG,SAAW,EAAA,SAAS,eAAe,GAAU,EAAA;AAC7D,MAAA,QAAQ,IAAI,IAAM;AAAA,QAChB,KAAK,aAAe,EAAA;AAClB,UAAc,aAAA,CAAA,GAAA,CAAI,IAAI,EAAE,CAAA;AACxB,UAAA;AAAA;AACF,QACA,KAAK,YAAc,EAAA;AACjB,UAAA,WAAA,CAAY,GAAI,CAAA,GAAA,CAAI,EAAI,EAAA,GAAA,CAAI,IAAI,CAAA;AAChC,UAAA;AAAA;AACF,QACA,KAAK,WAAa,EAAA;AAChB,UAAgB,eAAA,CAAA,GAAA,CAAI,IAAI,EAAE,CAAA;AAE1B,UAAI,IAAA,eAAA,CAAgB,IAAS,KAAA,MAAA,CAAO,MAAQ,EAAA;AAC1C,YAAQ,OAAA,CAAA,MAAA,CAAO,cAAe,CAAA,SAAA,EAAW,cAAc,CAAA;AACvD,YAAA,YAAA,CAAa,OAAO,CAAA;AAGpB,YAAA,KAAA,MAAW,CAAC,KAAA,EAAO,IAAI,CAAA,IAAK,WAAa,EAAA;AACvC,cAAM,MAAA,UAAA,GAAa,KAAU,KAAA,GAAA,GACzB,IAAK,CAAA,QAAA,EAAU,YAAY,CAC3B,GAAA,IAAA,CAAK,QAAU,EAAA,KAAA,EAAO,YAAY,CAAA;AACtC,cAAA,SAAA,CAAU,QAAQ,UAAU,CAAA,EAAG,EAAE,SAAA,EAAW,MAAM,CAAA;AAClD,cAAA,MAAM,eAAe,SAAU,CAAA,UAAA,EAAY,IAAI,CAAA,CAC5C,MAAM,CAAS,KAAA,KAAA;AACd,gBAAa,YAAA,CAAA,GAAA,CAAI,OAAO,KAAc,CAAA;AAAA,eACvC,CAAA;AACH,cAAc,aAAA,CAAA,GAAA,CAAI,OAAO,YAAY,CAAA;AAAA;AAIvC,YAAQ,OAAA,CAAA,GAAA,CAAI,aAAc,CAAA,MAAA,EAAQ,CAAA,CAC/B,IAAK,CAAA,MAAM,OAAQ,EAAC,CACpB,CAAA,KAAA,CAAM,MAAM,CAAA;AAAA;AAEjB,UAAA;AAAA;AACF,QACA,KAAK,OAAS,EAAA;AACZ,UAAQ,OAAA,CAAA,KAAA,CAAM,6BAA+B,EAAA,GAAA,CAAI,KAAK,CAAA;AACtD,UAAA,IAAI,IAAI,EAAI,EAAA;AACV,YAAA,YAAA,CAAa,IAAI,GAAI,CAAA,EAAA,EAAI,IAAI,KAAM,CAAA,GAAA,CAAI,KAAK,CAAC,CAAA;AAAA;AAE/C,UAAA;AAAA;AACF;AACF,KACD,CAAA;AAAA,GACF,CAAA;AAED,EAAI,IAAA;AACF,IAAA,MAAM,KAAM,CAAA,QAAA,EAAU,EAAE,SAAA,EAAW,MAAM,CAAA;AAEzC,IAAA,MAAM,cAAiB,GAAA,MAAA,CAAO,GAAI,CAAA,OAAO,KAAU,KAAA;AACjD,MAAQ,OAAA,CAAA,GAAA,CAAI,mCAAmC,KAAK,CAAA;AAEpD,MAAI,IAAA;AACF,QAAA,MAAM,MAAS,GAAA,MAAM,aAAc,CAAA,KAAA,EAAO,QAAQ,aAAe,EAAA;AAAA,UAC/D,QAAQ,OAAQ,CAAA,MAAA;AAAA,UAChB,UAAU,OAAQ,CAAA;AAAA,SACnB,CAAA;AAED,QAAI,IAAA,MAAA,CAAO,SAAS,SAAW,EAAA;AAC7B,UAAQ,OAAA,CAAA,GAAA,CAAI,iCAAiC,MAAM,CAAA;AACnD,UAAA;AAAA;AAGF,QAAM,MAAA,cAAA,GAAiB,KAAU,KAAA,GAAA,GAC7BA,OAAY,CAAA,QAAA,EAAU,YAAY,CAClC,GAAAA,OAAA,CAAY,QAAU,EAAA,KAAA,EAAO,YAAY,CAAA;AAE7C,QAAM,MAAA,SAAA,GAAY,IAAI,SAAU,CAAA;AAAA,UAC9B,SAAA,CAAU,KAAO,EAAA,SAAA,EAAW,QAAU,EAAA;AACpC,YAAA,OAAA,CAAQ,OAAO,WAAY,CAAA;AAAA,cACzB,IAAM,EAAA,WAAA;AAAA,cACN,EAAI,EAAA,KAAA;AAAA,cACJ,KAAA;AAAA,cACA,cAAA;AAAA,cACA,aAAA;AAAA,cACA,cAAA;AAAA,cACA,MAAA,EAAQ,OAAQ,CAAA,UAAA,CAAW,KAAM,CAAA,MAAA;AAAA,cACjC,oBAAA,EAAsB,OAAQ,CAAA,oBAAA,IAAwB;AAAC,aACxD,CAAA;AACD,YAAA,QAAA,CAAS,MAAM,KAAK,CAAA;AAAA,WACtB;AAAA,UACA,MAAM,QAAU,EAAA;AACd,YAAA,OAAA,CAAQ,OAAO,WAAY,CAAA;AAAA,cACzB,IAAM,EAAA,SAAA;AAAA,cACN,EAAI,EAAA;AAAA,aACL,CAAA;AACD,YAAS,QAAA,EAAA;AAAA;AACX,SACD,CAAA;AAED,QAAO,MAAA,CAAA,MAAA,CAAO,KAAK,SAAS,CAAA;AAAA,eAErB,KAAO,EAAA;AACd,QAAa,YAAA,CAAA,GAAA,CAAI,OAAO,KAAc,CAAA;AAAA;AACxC,KACD,CAAA;AAGD,IAAA,MAAM,QAAQ,GAAI,CAAA;AAAA,MAChB,OAAA,CAAQ,IAAI,cAAc,CAAA;AAAA,MAC1B;AAAA,KACD,CAAA;AAAA,GAED,SAAA;AACA,IAAM,MAAA,OAAA,CAAQ,OAAO,SAAU,EAAA;AAAA;AAGjC,EAAO,OAAA;AAAA,IACL,YAAA;AAAA,IACA;AAAA,GACF;AACF;;;;"}