vinext 0.0.20 → 0.0.21

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/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Plugin, UserConfig, ViteDevServer } from \"vite\";\nimport { loadEnv, parseAst } from \"vite\";\nimport { pagesRouter, apiRouter, invalidateRouteCache, matchRoute, patternToNextFormat as pagesPatternToNextFormat, type Route } from \"./routing/pages-router.js\";\nimport { appRouter, invalidateAppRouteCache } from \"./routing/app-router.js\";\nimport { createSSRHandler } from \"./server/dev-server.js\";\nimport { handleApiRoute } from \"./server/api-handler.js\";\nimport {\n generateRscEntry,\n generateSsrEntry,\n generateBrowserEntry,\n} from \"./server/app-dev-server.js\";\nimport {\n loadNextConfig,\n resolveNextConfig,\n type ResolvedNextConfig,\n type NextRedirect,\n type NextRewrite,\n type NextHeader,\n} from \"./config/next-config.js\";\n\nimport { findMiddlewareFile, isProxyFile, runMiddleware } from \"./server/middleware.js\";\nimport { generateSafeRegExpCode, generateMiddlewareMatcherCode, generateNormalizePathCode } from \"./server/middleware-codegen.js\";\nimport { normalizePath } from \"./server/normalize-path.js\";\nimport { findInstrumentationFile, runInstrumentation } from \"./server/instrumentation.js\";\nimport { validateDevRequest } from \"./server/dev-origin-check.js\";\nimport {\n safeRegExp,\n isExternalUrl,\n proxyExternalRequest,\n parseCookies,\n matchHeaders,\n matchRedirect,\n matchRewrite,\n type RequestContext,\n} from \"./config/config-matchers.js\";\nimport { scanMetadataFiles } from \"./server/metadata-routes.js\";\nimport { staticExportPages } from \"./build/static-export.js\";\nimport { detectPackageManager } from \"./utils/project.js\";\nimport tsconfigPaths from \"vite-tsconfig-paths\";\nimport MagicString from \"magic-string\";\nimport path from \"node:path\";\nimport { fileURLToPath, pathToFileURL } from \"node:url\";\nimport { createRequire } from \"node:module\";\nimport fs from \"node:fs\";\nimport commonjs from \"vite-plugin-commonjs\";\n\nconst __dirname = path.dirname(fileURLToPath(import.meta.url));\n\n/**\n * Fetch Google Fonts CSS, download .woff2 files, cache locally, and return\n * @font-face CSS with local file references.\n *\n * Cache dir structure: .vinext/fonts/<family-hash>/\n * - style.css (the rewritten @font-face CSS)\n * - *.woff2 (downloaded font files)\n */\nasync function fetchAndCacheFont(\n cssUrl: string,\n family: string,\n cacheDir: string,\n): Promise<string> {\n // Use a hash of the URL for the cache key\n const { createHash } = await import(\"node:crypto\");\n const urlHash = createHash(\"md5\").update(cssUrl).digest(\"hex\").slice(0, 12);\n const fontDir = path.join(cacheDir, `${family.toLowerCase().replace(/\\s+/g, \"-\")}-${urlHash}`);\n\n // Check if already cached\n const cachedCSSPath = path.join(fontDir, \"style.css\");\n if (fs.existsSync(cachedCSSPath)) {\n return fs.readFileSync(cachedCSSPath, \"utf-8\");\n }\n\n // Fetch CSS from Google Fonts (woff2 user-agent gives woff2 URLs)\n const cssResponse = await fetch(cssUrl, {\n headers: {\n \"User-Agent\": \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36\",\n },\n });\n if (!cssResponse.ok) {\n throw new Error(`Failed to fetch Google Fonts CSS: ${cssResponse.status}`);\n }\n let css = await cssResponse.text();\n\n // Extract all font file URLs\n const urlRe = /url\\((https:\\/\\/fonts\\.gstatic\\.com\\/[^)]+)\\)/g;\n const urls = new Map<string, string>(); // original URL -> local filename\n let urlMatch;\n while ((urlMatch = urlRe.exec(css)) !== null) {\n const fontUrl = urlMatch[1];\n if (!urls.has(fontUrl)) {\n const ext = fontUrl.includes(\".woff2\") ? \".woff2\" : fontUrl.includes(\".woff\") ? \".woff\" : \".ttf\";\n const fileHash = createHash(\"md5\").update(fontUrl).digest(\"hex\").slice(0, 8);\n urls.set(fontUrl, `${family.toLowerCase().replace(/\\s+/g, \"-\")}-${fileHash}${ext}`);\n }\n }\n\n // Download font files\n fs.mkdirSync(fontDir, { recursive: true });\n for (const [fontUrl, filename] of urls) {\n const filePath = path.join(fontDir, filename);\n if (!fs.existsSync(filePath)) {\n const fontResponse = await fetch(fontUrl);\n if (fontResponse.ok) {\n const buffer = Buffer.from(await fontResponse.arrayBuffer());\n fs.writeFileSync(filePath, buffer);\n }\n }\n // Rewrite CSS to use relative path (Vite will resolve /@fs/ for dev, or asset for build)\n css = css.split(fontUrl).join(filePath);\n }\n\n // Cache the rewritten CSS\n fs.writeFileSync(cachedCSSPath, css);\n return css;\n}\n\n/**\n * Safely parse a static JS object literal string into a plain object.\n * Uses Vite's parseAst (Rollup/acorn) so no code is ever evaluated.\n * Returns null if the expression contains anything dynamic (function calls,\n * template literals, identifiers, computed properties, etc.).\n *\n * Supports: string literals, numeric literals, boolean literals,\n * arrays of the above, and nested object literals.\n */\nfunction parseStaticObjectLiteral(objectStr: string): Record<string, unknown> | null {\n let ast: ReturnType<typeof parseAst>;\n try {\n // Wrap in parens so the parser treats `{…}` as an expression, not a block\n ast = parseAst(`(${objectStr})`);\n } catch {\n return null;\n }\n\n // The AST should be: Program > ExpressionStatement > ObjectExpression\n const body = ast.body;\n if (body.length !== 1 || body[0].type !== \"ExpressionStatement\") return null;\n\n const expr = body[0].expression;\n if (expr.type !== \"ObjectExpression\") return null;\n\n const result = extractStaticValue(expr);\n return result === undefined ? null : (result as Record<string, unknown>);\n}\n\n/**\n * Recursively extract a static value from an ESTree AST node.\n * Returns undefined (not null) if the node contains any dynamic expression.\n *\n * Uses `any` for the node parameter because Rollup's internal ESTree types\n * (estree.Expression, estree.ObjectExpression, etc.) aren't re-exported by Vite,\n * and the recursive traversal touches many different node shapes.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction extractStaticValue(node: any): unknown {\n switch (node.type) {\n case \"Literal\":\n // String, number, boolean, null\n return node.value;\n\n case \"UnaryExpression\":\n // Handle negative numbers: -1, -3.14\n if (node.operator === \"-\" && node.argument?.type === \"Literal\" && typeof node.argument.value === \"number\") {\n return -node.argument.value;\n }\n return undefined;\n\n case \"ArrayExpression\": {\n const arr: unknown[] = [];\n for (const elem of node.elements) {\n if (!elem) return undefined; // sparse array\n const val = extractStaticValue(elem);\n if (val === undefined) return undefined;\n arr.push(val);\n }\n return arr;\n }\n\n case \"ObjectExpression\": {\n const obj: Record<string, unknown> = {};\n for (const prop of node.properties) {\n if (prop.type !== \"Property\") return undefined; // SpreadElement etc.\n if (prop.computed) return undefined; // [expr]: val\n\n // Key can be Identifier (unquoted) or Literal (quoted)\n let key: string;\n if (prop.key.type === \"Identifier\") {\n key = prop.key.name;\n } else if (prop.key.type === \"Literal\" && typeof prop.key.value === \"string\") {\n key = prop.key.value;\n } else {\n return undefined;\n }\n\n const val = extractStaticValue(prop.value);\n if (val === undefined) return undefined;\n obj[key] = val;\n }\n return obj;\n }\n\n default:\n // TemplateLiteral, CallExpression, Identifier, etc. — reject\n return undefined;\n }\n}\n\n/**\n * Detect Vite major version at runtime by resolving from cwd.\n * The plugin may be installed in a workspace root with Vite 7 but used\n * by a project that has Vite 8 — so we resolve from cwd, not from\n * the plugin's own location.\n */\nfunction getViteMajorVersion(): number {\n try {\n const require = createRequire(path.join(process.cwd(), \"package.json\"));\n const vitePkg = require(\"vite/package.json\");\n return parseInt(vitePkg.version, 10);\n } catch {\n return 7; // default to Vite 7\n }\n}\n\n/**\n * PostCSS config file names to search for, in priority order.\n * Matches the same search order as postcss-load-config / lilconfig.\n */\nconst POSTCSS_CONFIG_FILES = [\n \"postcss.config.js\",\n \"postcss.config.cjs\",\n \"postcss.config.mjs\",\n \"postcss.config.ts\",\n \"postcss.config.cts\",\n \"postcss.config.mts\",\n \".postcssrc\",\n \".postcssrc.js\",\n \".postcssrc.cjs\",\n \".postcssrc.mjs\",\n \".postcssrc.ts\",\n \".postcssrc.cts\",\n \".postcssrc.mts\",\n \".postcssrc.json\",\n \".postcssrc.yaml\",\n \".postcssrc.yml\",\n];\n\n/**\n * Resolve PostCSS string plugin names in a project's PostCSS config.\n *\n * Next.js (via postcss-load-config) resolves string plugin names in the\n * object form `{ plugins: { \"pkg-name\": opts } }` but NOT in the array form\n * `{ plugins: [\"pkg-name\"] }`. Since many Next.js projects use the array\n * form (particularly with Tailwind CSS v4), we detect this case and resolve\n * the string names to actual plugin functions so Vite can use them.\n *\n * Returns the resolved PostCSS config object to inject into Vite's\n * `css.postcss`, or `undefined` if no resolution is needed.\n */\nasync function resolvePostcssStringPlugins(\n projectRoot: string,\n): Promise<{ plugins: any[] } | undefined> {\n // Find the PostCSS config file\n let configPath: string | null = null;\n for (const name of POSTCSS_CONFIG_FILES) {\n const candidate = path.join(projectRoot, name);\n if (fs.existsSync(candidate)) {\n configPath = candidate;\n break;\n }\n }\n if (!configPath) return undefined;\n\n // Load the config file\n let config: any;\n try {\n if (configPath.endsWith(\".json\") || configPath.endsWith(\".yaml\") || configPath.endsWith(\".yml\")) {\n // JSON/YAML configs use object form — postcss-load-config handles these fine\n return undefined;\n }\n // For .postcssrc without extension, check if it's JSON\n if (configPath.endsWith(\".postcssrc\")) {\n const content = fs.readFileSync(configPath, \"utf-8\").trim();\n if (content.startsWith(\"{\")) {\n // JSON format — postcss-load-config handles object form\n return undefined;\n }\n }\n const mod = await import(pathToFileURL(configPath).href);\n config = mod.default ?? mod;\n } catch {\n // If we can't load the config, let Vite/postcss-load-config handle it\n return undefined;\n }\n\n // Only process array-form plugins that contain string entries\n // (either bare strings or tuple form [\"plugin-name\", { options }])\n if (!config || !Array.isArray(config.plugins)) return undefined;\n const hasStringPlugins = config.plugins.some(\n (p: any) =>\n typeof p === \"string\" ||\n (Array.isArray(p) && typeof p[0] === \"string\"),\n );\n if (!hasStringPlugins) return undefined;\n\n // Resolve string plugin names to actual plugin functions\n const req = createRequire(path.join(projectRoot, \"package.json\"));\n const resolved = await Promise.all(\n config.plugins.filter(Boolean).map(async (plugin: any) => {\n if (typeof plugin === \"string\") {\n const resolved = req.resolve(plugin);\n const mod = await import(pathToFileURL(resolved).href);\n const fn = mod.default ?? mod;\n // If the export is a function, call it to get the plugin instance\n return typeof fn === \"function\" ? fn() : fn;\n }\n // Array tuple form: [\"plugin-name\", { options }]\n if (Array.isArray(plugin) && typeof plugin[0] === \"string\") {\n const [name, options] = plugin;\n const resolved = req.resolve(name);\n const mod = await import(pathToFileURL(resolved).href);\n const fn = mod.default ?? mod;\n return typeof fn === \"function\" ? fn(options) : fn;\n }\n // Already a function or plugin object — pass through\n return plugin;\n }),\n );\n\n return { plugins: resolved };\n}\n\n// Virtual module IDs for Pages Router production build\nconst VIRTUAL_SERVER_ENTRY = \"virtual:vinext-server-entry\";\nconst RESOLVED_SERVER_ENTRY = \"\\0\" + VIRTUAL_SERVER_ENTRY;\nconst VIRTUAL_CLIENT_ENTRY = \"virtual:vinext-client-entry\";\nconst RESOLVED_CLIENT_ENTRY = \"\\0\" + VIRTUAL_CLIENT_ENTRY;\n\n// Virtual module IDs for App Router entries\nconst VIRTUAL_RSC_ENTRY = \"virtual:vinext-rsc-entry\";\nconst RESOLVED_RSC_ENTRY = \"\\0\" + VIRTUAL_RSC_ENTRY;\nconst VIRTUAL_APP_SSR_ENTRY = \"virtual:vinext-app-ssr-entry\";\nconst RESOLVED_APP_SSR_ENTRY = \"\\0\" + VIRTUAL_APP_SSR_ENTRY;\nconst VIRTUAL_APP_BROWSER_ENTRY = \"virtual:vinext-app-browser-entry\";\nconst RESOLVED_APP_BROWSER_ENTRY = \"\\0\" + VIRTUAL_APP_BROWSER_ENTRY;\n\n/** Image file extensions handled by the vinext:image-imports plugin.\n * Shared between the Rolldown hook filter and the transform handler regex. */\nconst IMAGE_EXTS = \"png|jpe?g|gif|webp|avif|svg|ico|bmp|tiff?\";\n\n/**\n * Extract the npm package name from a module ID (file path).\n * Returns null if not in node_modules.\n *\n * Handles scoped packages (@org/pkg) and pnpm-style paths\n * (node_modules/.pnpm/pkg@ver/node_modules/pkg).\n */\nfunction getPackageName(id: string): string | null {\n const nmIdx = id.lastIndexOf(\"node_modules/\");\n if (nmIdx === -1) return null;\n const rest = id.slice(nmIdx + \"node_modules/\".length);\n if (rest.startsWith(\"@\")) {\n // Scoped package: @org/pkg\n const parts = rest.split(\"/\");\n return parts.length >= 2 ? parts[0] + \"/\" + parts[1] : null;\n }\n return rest.split(\"/\")[0] || null;\n}\n\n/** Absolute path to vinext's shims directory, used by clientManualChunks. */\nconst _shimsDir = path.resolve(__dirname, \"shims\") + \"/\";\n\n/**\n * manualChunks function for client builds.\n *\n * Splits the client bundle into:\n * - \"framework\" — React, ReactDOM, and scheduler (loaded on every page)\n * - \"vinext\" — vinext shims (router, head, link, etc.)\n *\n * All other vendor code is left to Rollup's default chunk-splitting\n * algorithm. Rollup automatically deduplicates shared modules into\n * common chunks based on the import graph — no manual intervention\n * needed.\n *\n * Why not split every npm package into its own chunk?\n * - Per-package splitting (`vendor-X`) creates 50-200+ chunks for a\n * typical app, far exceeding the ~25-request sweet spot for HTTP/2.\n * - gzip/brotli compress small files poorly — each file restarts with\n * an empty dictionary, losing ~5-15% total compressed size vs fewer\n * larger chunks (Khan Academy measured +2.5% wire size with 10x\n * more files containing less raw code).\n * - ES module evaluation has per-module overhead that compounds on\n * mobile devices.\n * - No major Vite-based framework (Remix, SvelteKit, Astro, TanStack)\n * uses per-package splitting. Next.js only isolates packages >160KB.\n * - Rollup's graph-based splitting already handles the common case\n * well: shared dependencies between routes get their own chunks,\n * and route-specific code stays in route chunks.\n */\nfunction clientManualChunks(id: string): string | undefined {\n // React framework — always loaded, shared across all pages.\n // Isolating React into its own chunk is the single highest-value\n // split: it's ~130KB compressed, loaded on every page, and its\n // content hash rarely changes between deploys.\n if (id.includes(\"node_modules\")) {\n const pkg = getPackageName(id);\n if (!pkg) return undefined;\n if (\n pkg === \"react\" ||\n pkg === \"react-dom\" ||\n pkg === \"scheduler\"\n ) {\n return \"framework\";\n }\n // Let Rollup handle all other vendor code via its default\n // graph-based splitting. This produces a reasonable number of\n // shared chunks (typically 5-15) based on actual import patterns,\n // with good compression efficiency.\n return undefined;\n }\n\n // vinext shims — small runtime, shared across all pages.\n // Use the absolute shims directory path to avoid matching user files\n // that happen to have \"/shims/\" in their path.\n if (id.startsWith(_shimsDir)) {\n return \"vinext\";\n }\n\n return undefined;\n}\n\n/**\n * Rollup output config with manualChunks for client code-splitting.\n * Used by both CLI builds and multi-environment builds.\n *\n * experimentalMinChunkSize merges tiny shared chunks (< 10KB) back into\n * their importers. This reduces HTTP request count and improves gzip\n * compression efficiency — small files restart the compression dictionary,\n * adding ~5-15% wire overhead vs fewer larger chunks.\n */\nconst clientOutputConfig = {\n manualChunks: clientManualChunks,\n experimentalMinChunkSize: 10_000,\n};\n\n/**\n * Rollup treeshake configuration for production client builds.\n *\n * Uses the 'recommended' preset as a safe base, then overrides\n * moduleSideEffects to strip unused re-exports from npm packages.\n *\n * The 'no-external' value for moduleSideEffects means:\n * - Local project modules: preserve side effects (CSS imports, polyfills)\n * - node_modules packages: treat as side-effect-free unless exports are used\n *\n * This is the single highest-impact optimization for large barrel-exporting\n * libraries like mermaid, @mui/material, lucide-react, etc. These libraries\n * re-export hundreds of sub-modules through barrel files. Without this,\n * Rollup preserves every sub-module even when only a few exports are consumed.\n *\n * Why 'no-external' instead of false (global side-effect-free)?\n * - User code may rely on import-time side effects (e.g., `import './global.css'`)\n * - 'no-external' is safe for app code while still enabling aggressive DCE for deps\n *\n * Why not the 'smallest' preset?\n * - 'smallest' also sets propertyReadSideEffects: false and\n * tryCatchDeoptimization: false, which can break specific libraries\n * that rely on property access side effects or try/catch for feature detection\n * - 'recommended' + 'no-external' gives most of the benefit with less risk\n */\nconst clientTreeshakeConfig = {\n preset: \"recommended\" as const,\n moduleSideEffects: \"no-external\" as const,\n};\n\n/**\n * Compute the set of chunk filenames that are ONLY reachable through dynamic\n * imports (i.e. behind React.lazy(), next/dynamic, or manual import()).\n *\n * These chunks should NOT be modulepreloaded in the HTML — they will be\n * fetched on demand when the dynamic import executes.\n *\n * Algorithm: Starting from all entry chunks in the build manifest, walk the\n * static `imports` tree (breadth-first). Any chunk file NOT reached by this\n * walk is only reachable through `dynamicImports` and is therefore \"lazy\".\n *\n * @param buildManifest - Vite's build manifest (manifest.json), which is a\n * Record<string, ManifestChunk> where each chunk has `file`, `imports`,\n * `dynamicImports`, `isEntry`, and `isDynamicEntry` fields.\n * @returns Array of chunk filenames (e.g. \"assets/mermaid-NOHMQCX5.js\") that\n * should be excluded from modulepreload hints.\n */\nfunction computeLazyChunks(\n buildManifest: Record<string, {\n file: string;\n isEntry?: boolean;\n isDynamicEntry?: boolean;\n imports?: string[];\n dynamicImports?: string[];\n css?: string[];\n }>\n): string[] {\n // Collect all chunk files that are statically reachable from entries\n const eagerFiles = new Set<string>();\n const visited = new Set<string>();\n const queue: string[] = [];\n\n // Start BFS from all entry chunks\n for (const key of Object.keys(buildManifest)) {\n const chunk = buildManifest[key];\n if (chunk.isEntry) {\n queue.push(key);\n }\n }\n\n while (queue.length > 0) {\n const key = queue.shift()!;\n if (visited.has(key)) continue;\n visited.add(key);\n\n const chunk = buildManifest[key];\n if (!chunk) continue;\n\n // Mark this chunk's file as eager\n eagerFiles.add(chunk.file);\n\n // Also mark its CSS as eager (CSS should always be preloaded to avoid FOUC)\n if (chunk.css) {\n for (const cssFile of chunk.css) {\n eagerFiles.add(cssFile);\n }\n }\n\n // Follow only static imports — NOT dynamicImports\n if (chunk.imports) {\n for (const imp of chunk.imports) {\n if (!visited.has(imp)) {\n queue.push(imp);\n }\n }\n }\n }\n\n // Any JS file in the manifest that's NOT in eagerFiles is a lazy chunk\n const lazyChunks: string[] = [];\n const allFiles = new Set<string>();\n for (const key of Object.keys(buildManifest)) {\n const chunk = buildManifest[key];\n if (chunk.file && !allFiles.has(chunk.file)) {\n allFiles.add(chunk.file);\n if (!eagerFiles.has(chunk.file) && chunk.file.endsWith(\".js\")) {\n lazyChunks.push(chunk.file);\n }\n }\n }\n\n return lazyChunks;\n}\n\nexport interface VinextOptions {\n /**\n * Base directory containing the app/ and pages/ directories.\n * Can be an absolute path or a path relative to the Vite root.\n *\n * By default, vinext auto-detects: checks for app/ and pages/ at the\n * project root first, then falls back to src/app/ and src/pages/.\n */\n appDir?: string;\n /**\n * Auto-register @vitejs/plugin-rsc when an app/ directory is detected.\n * Set to `false` to disable auto-registration (e.g. if you configure\n * @vitejs/plugin-rsc manually with custom options).\n * @default true\n */\n rsc?: boolean;\n}\n\nexport default function vinext(options: VinextOptions = {}): Plugin[] {\n let root: string;\n let pagesDir: string;\n let appDir: string;\n let hasAppDir = false;\n let hasPagesDir = false;\n let nextConfig: ResolvedNextConfig;\n let middlewarePath: string | null = null;\n let instrumentationPath: string | null = null;\n let hasCloudflarePlugin = false;\n let hasNitroPlugin = false;\n\n // Resolve shim paths - works both from source (.ts) and built (.js)\n const shimsDir = path.resolve(__dirname, \"shims\");\n\n // Shim alias map — populated in config(), used by resolveId() for .js variants\n let nextShimMap: Record<string, string> = {};\n\n /**\n * Generate the virtual SSR server entry module.\n * This is the entry point for `vite build --ssr`.\n */\n async function generateServerEntry(): Promise<string> {\n const pageRoutes = await pagesRouter(pagesDir);\n const apiRoutes = await apiRouter(pagesDir);\n\n // Generate import statements using absolute paths since virtual\n // modules don't have a real file location for relative resolution.\n const pageImports = pageRoutes.map((r: Route, i: number) => {\n const absPath = r.filePath.replace(/\\\\/g, \"/\");\n return `import * as page_${i} from ${JSON.stringify(absPath)};`;\n });\n\n const apiImports = apiRoutes.map((r: Route, i: number) => {\n const absPath = r.filePath.replace(/\\\\/g, \"/\");\n return `import * as api_${i} from ${JSON.stringify(absPath)};`;\n });\n\n // Build the route table — include filePath for SSR manifest lookup\n const pageRouteEntries = pageRoutes.map((r: Route, i: number) => {\n const absPath = r.filePath.replace(/\\\\/g, \"/\");\n return ` { pattern: ${JSON.stringify(r.pattern)}, isDynamic: ${r.isDynamic}, params: ${JSON.stringify(r.params)}, module: page_${i}, filePath: ${JSON.stringify(absPath)} }`;\n });\n\n const apiRouteEntries = apiRoutes.map((r: Route, i: number) => {\n return ` { pattern: ${JSON.stringify(r.pattern)}, isDynamic: ${r.isDynamic}, params: ${JSON.stringify(r.params)}, module: api_${i} }`;\n });\n\n // Check for _app and _document\n const hasApp = fs.existsSync(path.join(pagesDir, \"_app.tsx\")) || fs.existsSync(path.join(pagesDir, \"_app.jsx\")) || fs.existsSync(path.join(pagesDir, \"_app.ts\")) || fs.existsSync(path.join(pagesDir, \"_app.js\"));\n const hasDoc = fs.existsSync(path.join(pagesDir, \"_document.tsx\")) || fs.existsSync(path.join(pagesDir, \"_document.jsx\")) || fs.existsSync(path.join(pagesDir, \"_document.ts\")) || fs.existsSync(path.join(pagesDir, \"_document.js\"));\n\n // Use absolute paths for _app and _document too\n const appFileBase = path.join(pagesDir, \"_app\").replace(/\\\\/g, \"/\");\n const docFileBase = path.join(pagesDir, \"_document\").replace(/\\\\/g, \"/\");\n\n const appImportCode = hasApp\n ? `import { default as AppComponent } from ${JSON.stringify(appFileBase)};`\n : `const AppComponent = null;`;\n\n const docImportCode = hasDoc\n ? `import { default as DocumentComponent } from ${JSON.stringify(docFileBase)};`\n : `const DocumentComponent = null;`;\n\n // Serialize i18n config for embedding in the server entry\n const i18nConfigJson = nextConfig?.i18n\n ? JSON.stringify({\n locales: nextConfig.i18n.locales,\n defaultLocale: nextConfig.i18n.defaultLocale,\n localeDetection: nextConfig.i18n.localeDetection,\n })\n : \"null\";\n\n // Serialize the full resolved config for the production server.\n // This embeds redirects, rewrites, headers, basePath, trailingSlash\n // so prod-server.ts can apply them without loading next.config.js at runtime.\n const vinextConfigJson = JSON.stringify({\n basePath: nextConfig?.basePath ?? \"\",\n trailingSlash: nextConfig?.trailingSlash ?? false,\n redirects: nextConfig?.redirects ?? [],\n rewrites: nextConfig?.rewrites ?? { beforeFiles: [], afterFiles: [], fallback: [] },\n headers: nextConfig?.headers ?? [],\n i18n: nextConfig?.i18n ?? null,\n images: {\n deviceSizes: nextConfig?.images?.deviceSizes,\n imageSizes: nextConfig?.images?.imageSizes,\n dangerouslyAllowSVG: nextConfig?.images?.dangerouslyAllowSVG,\n contentDispositionType: nextConfig?.images?.contentDispositionType,\n contentSecurityPolicy: nextConfig?.images?.contentSecurityPolicy,\n },\n });\n\n // Generate middleware code if middleware.ts exists\n const middlewareImportCode = middlewarePath\n ? `import * as middlewareModule from ${JSON.stringify(middlewarePath.replace(/\\\\/g, \"/\"))};\nimport { NextRequest } from \"next/server\";`\n : \"\";\n\n // The matcher config is read from the middleware module at import time.\n // We inline the matching + execution logic so the prod server can call it.\n const middlewareExportCode = middlewarePath\n ? `\n// --- Middleware support (generated from middleware-codegen.ts) ---\n${generateNormalizePathCode(\"es5\")}\n${generateSafeRegExpCode(\"es5\")}\n${generateMiddlewareMatcherCode(\"es5\")}\n\nexport async function runMiddleware(request) {\n var isProxy = ${middlewarePath ? JSON.stringify(isProxyFile(middlewarePath)) : \"false\"};\n var middlewareFn = isProxy\n ? (middlewareModule.proxy ?? middlewareModule.default)\n : (middlewareModule.middleware ?? middlewareModule.default);\n if (typeof middlewareFn !== \"function\") {\n var fileType = isProxy ? \"Proxy\" : \"Middleware\";\n var expectedExport = isProxy ? \"proxy\" : \"middleware\";\n throw new Error(\"The \" + fileType + \" file must export a function named \\`\" + expectedExport + \"\\` or a \\`default\\` function.\");\n }\n\n var config = middlewareModule.config;\n var matcher = config && config.matcher;\n var url = new URL(request.url);\n\n // Normalize pathname before matching to prevent path-confusion bypasses\n // (percent-encoding like /%61dmin, double slashes like /dashboard//settings).\n var decodedPathname;\n try { decodedPathname = decodeURIComponent(url.pathname); } catch (e) {\n return { continue: false, response: new Response(\"Bad Request\", { status: 400 }) };\n }\n var normalizedPathname = __normalizePath(decodedPathname);\n\n if (!matchesMiddleware(normalizedPathname, matcher)) return { continue: true };\n\n // Construct a new Request with the decoded + normalized pathname so middleware\n // always sees the same canonical path that the router uses.\n var mwRequest = request;\n if (normalizedPathname !== url.pathname) {\n var mwUrl = new URL(url);\n mwUrl.pathname = normalizedPathname;\n mwRequest = new Request(mwUrl, request);\n }\n var nextRequest = mwRequest instanceof NextRequest ? mwRequest : new NextRequest(mwRequest);\n var response;\n try { response = await middlewareFn(nextRequest); }\n catch (e) {\n console.error(\"[vinext] Middleware error:\", e);\n return { continue: false, response: new Response(\"Internal Server Error\", { status: 500 }) };\n }\n\n if (!response) return { continue: true };\n\n if (response.headers.get(\"x-middleware-next\") === \"1\") {\n var rHeaders = new Headers();\n for (var [key, value] of response.headers) {\n // Keep x-middleware-request-* headers so the production server can\n // apply middleware-request header overrides before stripping internals\n // from the final client response.\n if (\n !key.startsWith(\"x-middleware-\") ||\n key.startsWith(\"x-middleware-request-\")\n ) rHeaders.append(key, value);\n }\n return { continue: true, responseHeaders: rHeaders };\n }\n\n if (response.status >= 300 && response.status < 400) {\n var location = response.headers.get(\"Location\") || response.headers.get(\"location\");\n if (location) return { continue: false, redirectUrl: location, redirectStatus: response.status };\n }\n\n var rewriteUrl = response.headers.get(\"x-middleware-rewrite\");\n if (rewriteUrl) {\n var rwHeaders = new Headers();\n for (var [k, v] of response.headers) {\n if (!k.startsWith(\"x-middleware-\") || k.startsWith(\"x-middleware-request-\")) rwHeaders.append(k, v);\n }\n var rewritePath;\n try { var parsed = new URL(rewriteUrl, request.url); rewritePath = parsed.pathname + parsed.search; }\n catch { rewritePath = rewriteUrl; }\n return { continue: true, rewriteUrl: rewritePath, rewriteStatus: response.status !== 200 ? response.status : undefined, responseHeaders: rwHeaders };\n }\n\n return { continue: false, response: response };\n}\n`\n : `\nexport async function runMiddleware() { return { continue: true }; }\n`;\n\n // The server entry is a self-contained module that uses Web-standard APIs\n // (Request/Response, renderToReadableStream) so it runs on Cloudflare Workers.\n return `\nimport React from \"react\";\nimport { renderToReadableStream } from \"react-dom/server.edge\";\nimport { resetSSRHead, getSSRHeadHTML } from \"next/head\";\nimport { flushPreloads } from \"next/dynamic\";\nimport { setSSRContext, wrapWithRouterContext } from \"next/router\";\nimport { getCacheHandler } from \"next/cache\";\nimport { runWithFetchCache } from \"vinext/fetch-cache\";\nimport { _runWithCacheState } from \"next/cache\";\nimport { runWithPrivateCache } from \"vinext/cache-runtime\";\nimport { runWithRouterState } from \"vinext/router-state\";\nimport { runWithHeadState } from \"vinext/head-state\";\nimport { safeJsonStringify } from \"vinext/html\";\nimport { getSSRFontLinks as _getSSRFontLinks, getSSRFontStyles as _getSSRFontStylesGoogle, getSSRFontPreloads as _getSSRFontPreloadsGoogle } from \"next/font/google\";\nimport { getSSRFontStyles as _getSSRFontStylesLocal, getSSRFontPreloads as _getSSRFontPreloadsLocal } from \"next/font/local\";\n${middlewareImportCode}\n\n// i18n config (embedded at build time)\nconst i18nConfig = ${i18nConfigJson};\n\n// Full resolved config for production server (embedded at build time)\nexport const vinextConfig = ${vinextConfigJson};\n\n// ISR cache helpers (inlined for the server entry)\nasync function isrGet(key) {\n const handler = getCacheHandler();\n const result = await handler.get(key);\n if (!result || !result.value) return null;\n return { value: result, isStale: result.cacheState === \"stale\" };\n}\nasync function isrSet(key, data, revalidateSeconds, tags) {\n const handler = getCacheHandler();\n await handler.set(key, data, { revalidate: revalidateSeconds, tags: tags || [] });\n}\nconst pendingRegenerations = new Map();\nfunction triggerBackgroundRegeneration(key, renderFn) {\n if (pendingRegenerations.has(key)) return;\n const promise = renderFn()\n .catch((err) => console.error(\"[vinext] ISR regen failed for \" + key + \":\", err))\n .finally(() => pendingRegenerations.delete(key));\n pendingRegenerations.set(key, promise);\n}\n\nasync function renderToStringAsync(element) {\n const stream = await renderToReadableStream(element);\n await stream.allReady;\n return new Response(stream).text();\n}\n\n${pageImports.join(\"\\n\")}\n${apiImports.join(\"\\n\")}\n\n${appImportCode}\n${docImportCode}\n\nconst pageRoutes = [\n${pageRouteEntries.join(\",\\n\")}\n];\n\nconst apiRoutes = [\n${apiRouteEntries.join(\",\\n\")}\n];\n\nfunction matchRoute(url, routes) {\n const pathname = url.split(\"?\")[0];\n let normalizedUrl = pathname === \"/\" ? \"/\" : pathname.replace(/\\\\/$/, \"\");\n // NOTE: Do NOT decodeURIComponent here. The pathname is already decoded at\n // the entry point. Decoding again would create a double-decode vector.\n for (const route of routes) {\n const params = matchPattern(normalizedUrl, route.pattern);\n if (params !== null) return { route, params };\n }\n return null;\n}\n\nfunction matchPattern(url, pattern) {\n const urlParts = url.split(\"/\").filter(Boolean);\n const patternParts = pattern.split(\"/\").filter(Boolean);\n const params = Object.create(null);\n for (let i = 0; i < patternParts.length; i++) {\n const pp = patternParts[i];\n if (pp.endsWith(\"+\")) {\n const paramName = pp.slice(1, -1);\n const remaining = urlParts.slice(i);\n if (remaining.length === 0) return null;\n params[paramName] = remaining;\n return params;\n }\n if (pp.endsWith(\"*\")) {\n const paramName = pp.slice(1, -1);\n params[paramName] = urlParts.slice(i);\n return params;\n }\n if (pp.startsWith(\":\")) {\n if (i >= urlParts.length) return null;\n params[pp.slice(1)] = urlParts[i];\n continue;\n }\n if (i >= urlParts.length || urlParts[i] !== pp) return null;\n }\n if (urlParts.length !== patternParts.length) return null;\n return params;\n}\n\nfunction parseQuery(url) {\n const qs = url.split(\"?\")[1];\n if (!qs) return {};\n const p = new URLSearchParams(qs);\n const q = {};\n for (const [k, v] of p) {\n if (k in q) {\n q[k] = Array.isArray(q[k]) ? q[k].concat(v) : [q[k], v];\n } else {\n q[k] = v;\n }\n }\n return q;\n}\n\nfunction patternToNextFormat(pattern) {\n return pattern\n .replace(/:([\\\\w]+)\\\\*/g, \"[[...$1]]\")\n .replace(/:([\\\\w]+)\\\\+/g, \"[...$1]\")\n .replace(/:([\\\\w]+)/g, \"[$1]\");\n}\n\nfunction collectAssetTags(manifest, moduleIds) {\n // Fall back to embedded manifest (set by vinext:cloudflare-build for Workers)\n const m = (manifest && Object.keys(manifest).length > 0)\n ? manifest\n : (typeof globalThis !== \"undefined\" && globalThis.__VINEXT_SSR_MANIFEST__) || null;\n const tags = [];\n const seen = new Set();\n\n // Load the set of lazy chunk filenames (only reachable via dynamic imports).\n // These should NOT get <link rel=\"modulepreload\"> or <script type=\"module\">\n // tags — they are fetched on demand when the dynamic import() executes (e.g.\n // chunks behind React.lazy() or next/dynamic boundaries).\n var lazyChunks = (typeof globalThis !== \"undefined\" && globalThis.__VINEXT_LAZY_CHUNKS__) || null;\n var lazySet = lazyChunks && lazyChunks.length > 0 ? new Set(lazyChunks) : null;\n\n // Inject the client entry script if embedded by vinext:cloudflare-build\n if (typeof globalThis !== \"undefined\" && globalThis.__VINEXT_CLIENT_ENTRY__) {\n const entry = globalThis.__VINEXT_CLIENT_ENTRY__;\n seen.add(entry);\n tags.push('<link rel=\"modulepreload\" href=\"/' + entry + '\" />');\n tags.push('<script type=\"module\" src=\"/' + entry + '\" crossorigin></script>');\n }\n if (m) {\n // Always inject shared chunks (framework, vinext runtime, entry) and\n // page-specific chunks. The manifest maps module file paths to their\n // associated JS/CSS assets.\n //\n // For page-specific injection, the module IDs may be absolute paths\n // while the manifest uses relative paths. Try both the original ID\n // and a suffix match to find the correct manifest entry.\n var allFiles = [];\n\n if (moduleIds && moduleIds.length > 0) {\n // Collect assets for the requested page modules\n for (var mi = 0; mi < moduleIds.length; mi++) {\n var id = moduleIds[mi];\n var files = m[id];\n if (!files) {\n // Absolute path didn't match — try matching by suffix.\n // Manifest keys are relative (e.g. \"pages/about.tsx\") while\n // moduleIds may be absolute (e.g. \"/home/.../pages/about.tsx\").\n for (var mk in m) {\n if (id.endsWith(\"/\" + mk) || id === mk) {\n files = m[mk];\n break;\n }\n }\n }\n if (files) {\n for (var fi = 0; fi < files.length; fi++) allFiles.push(files[fi]);\n }\n }\n\n // Also inject shared chunks that every page needs: framework,\n // vinext runtime, and the entry bootstrap. These are identified\n // by scanning all manifest values for chunk filenames containing\n // known prefixes.\n for (var key in m) {\n var vals = m[key];\n if (!vals) continue;\n for (var vi = 0; vi < vals.length; vi++) {\n var file = vals[vi];\n var basename = file.split(\"/\").pop() || \"\";\n if (\n basename.startsWith(\"framework-\") ||\n basename.startsWith(\"vinext-\") ||\n basename.includes(\"vinext-client-entry\") ||\n basename.includes(\"vinext-app-browser-entry\")\n ) {\n allFiles.push(file);\n }\n }\n }\n } else {\n // No specific modules — include all assets from manifest\n for (var akey in m) {\n var avals = m[akey];\n if (avals) {\n for (var ai = 0; ai < avals.length; ai++) allFiles.push(avals[ai]);\n }\n }\n }\n\n for (var ti = 0; ti < allFiles.length; ti++) {\n var tf = allFiles[ti];\n // Normalize: Vite's SSR manifest values include a leading '/'\n // (from base path), but we prepend '/' ourselves when building\n // href/src attributes. Strip any existing leading slash to avoid\n // producing protocol-relative URLs like \"//assets/chunk.js\".\n // This also ensures consistent keys for the seen-set dedup and\n // lazySet.has() checks (which use values without leading slash).\n if (tf.charAt(0) === '/') tf = tf.slice(1);\n if (seen.has(tf)) continue;\n seen.add(tf);\n if (tf.endsWith(\".css\")) {\n tags.push('<link rel=\"stylesheet\" href=\"/' + tf + '\" />');\n } else if (tf.endsWith(\".js\")) {\n // Skip lazy chunks — they are behind dynamic import() boundaries\n // (React.lazy, next/dynamic) and should only be fetched on demand.\n if (lazySet && lazySet.has(tf)) continue;\n tags.push('<link rel=\"modulepreload\" href=\"/' + tf + '\" />');\n tags.push('<script type=\"module\" src=\"/' + tf + '\" crossorigin></script>');\n }\n }\n }\n return tags.join(\"\\\\n \");\n}\n\n// i18n helpers\nfunction extractLocale(url) {\n if (!i18nConfig) return { locale: undefined, url, hadPrefix: false };\n const pathname = url.split(\"?\")[0];\n const parts = pathname.split(\"/\").filter(Boolean);\n const query = url.includes(\"?\") ? url.slice(url.indexOf(\"?\")) : \"\";\n if (parts.length > 0 && i18nConfig.locales.includes(parts[0])) {\n const locale = parts[0];\n const rest = \"/\" + parts.slice(1).join(\"/\");\n return { locale, url: (rest || \"/\") + query, hadPrefix: true };\n }\n return { locale: i18nConfig.defaultLocale, url, hadPrefix: false };\n}\n\nfunction detectLocaleFromHeaders(headers) {\n if (!i18nConfig) return null;\n const acceptLang = headers.get(\"accept-language\");\n if (!acceptLang) return null;\n const langs = acceptLang.split(\",\").map(function(part) {\n const pieces = part.trim().split(\";\");\n const q = pieces[1] ? parseFloat(pieces[1].replace(\"q=\", \"\")) : 1;\n return { lang: pieces[0].trim().toLowerCase(), q: q };\n }).sort(function(a, b) { return b.q - a.q; });\n for (let k = 0; k < langs.length; k++) {\n const lang = langs[k].lang;\n for (let j = 0; j < i18nConfig.locales.length; j++) {\n if (i18nConfig.locales[j].toLowerCase() === lang) return i18nConfig.locales[j];\n }\n const prefix = lang.split(\"-\")[0];\n for (let j = 0; j < i18nConfig.locales.length; j++) {\n const loc = i18nConfig.locales[j].toLowerCase();\n if (loc === prefix || loc.startsWith(prefix + \"-\")) return i18nConfig.locales[j];\n }\n }\n return null;\n}\n\nfunction parseCookieLocaleFromHeader(cookieHeader) {\n if (!i18nConfig || !cookieHeader) return null;\n const match = cookieHeader.match(/(?:^|;\\\\s*)NEXT_LOCALE=([^;]*)/);\n if (!match) return null;\n var value;\n try { value = decodeURIComponent(match[1].trim()); } catch (e) { return null; }\n if (i18nConfig.locales.indexOf(value) !== -1) return value;\n return null;\n}\n\nfunction parseCookies(cookieHeader) {\n const cookies = {};\n if (!cookieHeader) return cookies;\n for (const part of cookieHeader.split(\";\")) {\n const [key, ...rest] = part.split(\"=\");\n if (key) cookies[key.trim()] = rest.join(\"=\").trim();\n }\n return cookies;\n}\n\n// Lightweight req/res facade for getServerSideProps and API routes.\n// Next.js pages expect ctx.req/ctx.res with Node-like shapes.\nfunction createReqRes(request, url, query, body) {\n const headersObj = {};\n for (const [k, v] of request.headers) headersObj[k.toLowerCase()] = v;\n\n const req = {\n method: request.method,\n url: url,\n headers: headersObj,\n query: query,\n body: body,\n cookies: parseCookies(request.headers.get(\"cookie\")),\n };\n\n let resStatusCode = 200;\n const resHeaders = {};\n // set-cookie needs array support (multiple Set-Cookie headers are common)\n const setCookieHeaders = [];\n let resBody = null;\n let ended = false;\n let resolveResponse;\n const responsePromise = new Promise(function(r) { resolveResponse = r; });\n\n const res = {\n get statusCode() { return resStatusCode; },\n set statusCode(code) { resStatusCode = code; },\n writeHead: function(code, headers) {\n resStatusCode = code;\n if (headers) {\n for (const [k, v] of Object.entries(headers)) {\n if (k.toLowerCase() === \"set-cookie\") {\n if (Array.isArray(v)) { for (const c of v) setCookieHeaders.push(c); }\n else { setCookieHeaders.push(v); }\n } else {\n resHeaders[k] = v;\n }\n }\n }\n return res;\n },\n setHeader: function(name, value) {\n if (name.toLowerCase() === \"set-cookie\") {\n if (Array.isArray(value)) { for (const c of value) setCookieHeaders.push(c); }\n else { setCookieHeaders.push(value); }\n } else {\n resHeaders[name.toLowerCase()] = value;\n }\n return res;\n },\n getHeader: function(name) {\n if (name.toLowerCase() === \"set-cookie\") return setCookieHeaders.length > 0 ? setCookieHeaders : undefined;\n return resHeaders[name.toLowerCase()];\n },\n end: function(data) {\n if (ended) return;\n ended = true;\n if (data !== undefined && data !== null) resBody = data;\n const h = new Headers(resHeaders);\n for (const c of setCookieHeaders) h.append(\"set-cookie\", c);\n resolveResponse(new Response(resBody, { status: resStatusCode, headers: h }));\n },\n status: function(code) { resStatusCode = code; return res; },\n json: function(data) {\n resHeaders[\"content-type\"] = \"application/json\";\n res.end(JSON.stringify(data));\n },\n send: function(data) {\n if (typeof data === \"object\" && data !== null) { res.json(data); }\n else { if (!resHeaders[\"content-type\"]) resHeaders[\"content-type\"] = \"text/plain\"; res.end(String(data)); }\n },\n redirect: function(statusOrUrl, url2) {\n if (typeof statusOrUrl === \"string\") { res.writeHead(307, { Location: statusOrUrl }); }\n else { res.writeHead(statusOrUrl, { Location: url2 }); }\n res.end();\n },\n };\n\n return { req, res, responsePromise };\n}\n\n/**\n * Read request body as text with a size limit.\n * Throws if the body exceeds maxBytes. This prevents DoS via chunked\n * transfer encoding where Content-Length is absent or spoofed.\n */\nasync function readBodyWithLimit(request, maxBytes) {\n if (!request.body) return \"\";\n var reader = request.body.getReader();\n var decoder = new TextDecoder();\n var chunks = [];\n var totalSize = 0;\n for (;;) {\n var result = await reader.read();\n if (result.done) break;\n totalSize += result.value.byteLength;\n if (totalSize > maxBytes) {\n reader.cancel();\n throw new Error(\"Request body too large\");\n }\n chunks.push(decoder.decode(result.value, { stream: true }));\n }\n chunks.push(decoder.decode());\n return chunks.join(\"\");\n}\n\nexport async function renderPage(request, url, manifest) {\n const localeInfo = extractLocale(url);\n const locale = localeInfo.locale;\n const routeUrl = localeInfo.url;\n const cookieHeader = request.headers.get(\"cookie\") || \"\";\n\n // i18n redirect: check NEXT_LOCALE cookie first, then Accept-Language\n if (i18nConfig && !localeInfo.hadPrefix) {\n const cookieLocale = parseCookieLocaleFromHeader(cookieHeader);\n if (cookieLocale && cookieLocale !== i18nConfig.defaultLocale) {\n return new Response(null, { status: 307, headers: { Location: \"/\" + cookieLocale + routeUrl } });\n }\n if (!cookieLocale && i18nConfig.localeDetection !== false) {\n const detected = detectLocaleFromHeaders(request.headers);\n if (detected && detected !== i18nConfig.defaultLocale) {\n return new Response(null, { status: 307, headers: { Location: \"/\" + detected + routeUrl } });\n }\n }\n }\n\n const match = matchRoute(routeUrl, pageRoutes);\n if (!match) {\n return new Response(\"<!DOCTYPE html><html><body><h1>404 - Page not found</h1></body></html>\",\n { status: 404, headers: { \"Content-Type\": \"text/html\" } });\n }\n\n const { route, params } = match;\n return runWithRouterState(() =>\n runWithHeadState(() =>\n _runWithCacheState(() =>\n runWithPrivateCache(() =>\n runWithFetchCache(async () => {\n try {\n if (typeof setSSRContext === \"function\") {\n setSSRContext({\n pathname: routeUrl.split(\"?\")[0],\n query: { ...params, ...parseQuery(routeUrl) },\n asPath: routeUrl,\n locale: locale,\n locales: i18nConfig ? i18nConfig.locales : undefined,\n defaultLocale: i18nConfig ? i18nConfig.defaultLocale : undefined,\n });\n }\n\n if (i18nConfig) {\n globalThis.__VINEXT_LOCALE__ = locale;\n globalThis.__VINEXT_LOCALES__ = i18nConfig.locales;\n globalThis.__VINEXT_DEFAULT_LOCALE__ = i18nConfig.defaultLocale;\n }\n\n const pageModule = route.module;\n const PageComponent = pageModule.default;\n if (!PageComponent) {\n return new Response(\"Page has no default export\", { status: 500 });\n }\n\n // Handle getStaticPaths for dynamic routes\n if (typeof pageModule.getStaticPaths === \"function\" && route.isDynamic) {\n const pathsResult = await pageModule.getStaticPaths({\n locales: i18nConfig ? i18nConfig.locales : [],\n defaultLocale: i18nConfig ? i18nConfig.defaultLocale : \"\",\n });\n const fallback = pathsResult && pathsResult.fallback !== undefined ? pathsResult.fallback : false;\n\n if (fallback === false) {\n const paths = pathsResult && pathsResult.paths ? pathsResult.paths : [];\n const isValidPath = paths.some(function(p) {\n return Object.entries(p.params).every(function(entry) {\n var key = entry[0], val = entry[1];\n var actual = params[key];\n if (Array.isArray(val)) {\n return Array.isArray(actual) && val.join(\"/\") === actual.join(\"/\");\n }\n return String(val) === String(actual);\n });\n });\n if (!isValidPath) {\n return new Response(\"<!DOCTYPE html><html><body><h1>404 - Page not found</h1></body></html>\",\n { status: 404, headers: { \"Content-Type\": \"text/html\" } });\n }\n }\n }\n\n let pageProps = {};\n if (typeof pageModule.getServerSideProps === \"function\") {\n const { req, res } = createReqRes(request, routeUrl, parseQuery(routeUrl), undefined);\n const ctx = {\n params, req, res,\n query: parseQuery(routeUrl),\n resolvedUrl: routeUrl,\n locale: locale,\n locales: i18nConfig ? i18nConfig.locales : undefined,\n defaultLocale: i18nConfig ? i18nConfig.defaultLocale : undefined,\n };\n const result = await pageModule.getServerSideProps(ctx);\n if (result && result.props) pageProps = result.props;\n if (result && result.redirect) {\n var gsspStatus = result.redirect.statusCode != null ? result.redirect.statusCode : (result.redirect.permanent ? 308 : 307);\n return new Response(null, { status: gsspStatus, headers: { Location: sanitizeDestinationLocal(result.redirect.destination) } });\n }\n if (result && result.notFound) {\n return new Response(\"404\", { status: 404 });\n }\n }\n // Build font Link header early so it's available for ISR cached responses too.\n // Font preloads are module-level state populated at import time and persist across requests.\n var _fontLinkHeader = \"\";\n var _allFp = [];\n try {\n var _fpGoogle = typeof _getSSRFontPreloadsGoogle === \"function\" ? _getSSRFontPreloadsGoogle() : [];\n var _fpLocal = typeof _getSSRFontPreloadsLocal === \"function\" ? _getSSRFontPreloadsLocal() : [];\n _allFp = _fpGoogle.concat(_fpLocal);\n if (_allFp.length > 0) {\n _fontLinkHeader = _allFp.map(function(p) { return \"<\" + p.href + \">; rel=preload; as=font; type=\" + p.type + \"; crossorigin\"; }).join(\", \");\n }\n } catch (e) { /* font preloads not available */ }\n\n let isrRevalidateSeconds = null;\n if (typeof pageModule.getStaticProps === \"function\") {\n const pathname = routeUrl.split(\"?\")[0];\n const cacheKey = \"pages:\" + (pathname === \"/\" ? \"/\" : pathname.replace(/\\\\/$/, \"\"));\n const cached = await isrGet(cacheKey);\n\n if (cached && !cached.isStale && cached.value.value && cached.value.value.kind === \"PAGES\") {\n var _hitHeaders = {\n \"Content-Type\": \"text/html\", \"X-Vinext-Cache\": \"HIT\",\n \"Cache-Control\": \"s-maxage=\" + (cached.value.value.revalidate || 60) + \", stale-while-revalidate\",\n };\n if (_fontLinkHeader) _hitHeaders[\"Link\"] = _fontLinkHeader;\n return new Response(cached.value.value.html, { status: 200, headers: _hitHeaders });\n }\n\n if (cached && cached.isStale && cached.value.value && cached.value.value.kind === \"PAGES\") {\n triggerBackgroundRegeneration(cacheKey, async function() {\n const freshResult = await pageModule.getStaticProps({ params });\n if (freshResult && freshResult.props && typeof freshResult.revalidate === \"number\" && freshResult.revalidate > 0) {\n await isrSet(cacheKey, { kind: \"PAGES\", html: cached.value.value.html, pageData: freshResult.props, headers: undefined, status: undefined }, freshResult.revalidate);\n }\n });\n var _staleHeaders = {\n \"Content-Type\": \"text/html\", \"X-Vinext-Cache\": \"STALE\",\n \"Cache-Control\": \"s-maxage=0, stale-while-revalidate\",\n };\n if (_fontLinkHeader) _staleHeaders[\"Link\"] = _fontLinkHeader;\n return new Response(cached.value.value.html, { status: 200, headers: _staleHeaders });\n }\n\n const ctx = {\n params,\n locale: locale,\n locales: i18nConfig ? i18nConfig.locales : undefined,\n defaultLocale: i18nConfig ? i18nConfig.defaultLocale : undefined,\n };\n const result = await pageModule.getStaticProps(ctx);\n if (result && result.props) pageProps = result.props;\n if (result && result.redirect) {\n var gspStatus = result.redirect.statusCode != null ? result.redirect.statusCode : (result.redirect.permanent ? 308 : 307);\n return new Response(null, { status: gspStatus, headers: { Location: sanitizeDestinationLocal(result.redirect.destination) } });\n }\n if (result && result.notFound) {\n return new Response(\"404\", { status: 404 });\n }\n if (typeof result.revalidate === \"number\" && result.revalidate > 0) {\n isrRevalidateSeconds = result.revalidate;\n }\n }\n\n let element;\n if (AppComponent) {\n element = React.createElement(AppComponent, { Component: PageComponent, pageProps });\n } else {\n element = React.createElement(PageComponent, pageProps);\n }\n element = wrapWithRouterContext(element);\n\n if (typeof resetSSRHead === \"function\") resetSSRHead();\n if (typeof flushPreloads === \"function\") await flushPreloads();\n\n const ssrHeadHTML = typeof getSSRHeadHTML === \"function\" ? getSSRHeadHTML() : \"\";\n\n // Collect SSR font data (Google Font links, font preloads, font-face styles)\n var fontHeadHTML = \"\";\n function _escAttr(s) { return s.replace(/&/g, \"&amp;\").replace(/\"/g, \"&quot;\"); }\n try {\n var fontLinks = typeof _getSSRFontLinks === \"function\" ? _getSSRFontLinks() : [];\n for (var fl of fontLinks) { fontHeadHTML += '<link rel=\"stylesheet\" href=\"' + _escAttr(fl) + '\" />\\\\n '; }\n } catch (e) { /* next/font/google not used */ }\n // Emit <link rel=\"preload\"> for all font files (reuse _allFp collected earlier for Link header)\n for (var fp of _allFp) { fontHeadHTML += '<link rel=\"preload\" href=\"' + _escAttr(fp.href) + '\" as=\"font\" type=\"' + _escAttr(fp.type) + '\" crossorigin />\\\\n '; }\n try {\n var allFontStyles = [];\n if (typeof _getSSRFontStylesGoogle === \"function\") allFontStyles.push(..._getSSRFontStylesGoogle());\n if (typeof _getSSRFontStylesLocal === \"function\") allFontStyles.push(..._getSSRFontStylesLocal());\n if (allFontStyles.length > 0) { fontHeadHTML += '<style data-vinext-fonts>' + allFontStyles.join(\"\\\\n\") + '</style>\\\\n '; }\n } catch (e) { /* font styles not available */ }\n\n const pageModuleIds = route.filePath ? [route.filePath] : [];\n const assetTags = collectAssetTags(manifest, pageModuleIds);\n const nextDataPayload = {\n props: { pageProps }, page: patternToNextFormat(route.pattern), query: params, isFallback: false,\n };\n if (i18nConfig) {\n nextDataPayload.locale = locale;\n nextDataPayload.locales = i18nConfig.locales;\n nextDataPayload.defaultLocale = i18nConfig.defaultLocale;\n }\n const localeGlobals = i18nConfig\n ? \";window.__VINEXT_LOCALE__=\" + safeJsonStringify(locale) +\n \";window.__VINEXT_LOCALES__=\" + safeJsonStringify(i18nConfig.locales) +\n \";window.__VINEXT_DEFAULT_LOCALE__=\" + safeJsonStringify(i18nConfig.defaultLocale)\n : \"\";\n const nextDataScript = \"<script>window.__NEXT_DATA__ = \" + safeJsonStringify(nextDataPayload) + localeGlobals + \"</script>\";\n\n // Build the document shell with a placeholder for the streamed body\n var BODY_MARKER = \"<!--VINEXT_STREAM_BODY-->\";\n var shellHtml;\n if (DocumentComponent) {\n const docElement = React.createElement(DocumentComponent);\n shellHtml = await renderToStringAsync(docElement);\n shellHtml = shellHtml.replace(\"__NEXT_MAIN__\", BODY_MARKER);\n if (ssrHeadHTML || assetTags || fontHeadHTML) {\n shellHtml = shellHtml.replace(\"</head>\", \" \" + fontHeadHTML + ssrHeadHTML + \"\\\\n \" + assetTags + \"\\\\n</head>\");\n }\n shellHtml = shellHtml.replace(\"<!-- __NEXT_SCRIPTS__ -->\", nextDataScript);\n if (!shellHtml.includes(\"__NEXT_DATA__\")) {\n shellHtml = shellHtml.replace(\"</body>\", \" \" + nextDataScript + \"\\\\n</body>\");\n }\n } else {\n shellHtml = \"<!DOCTYPE html>\\\\n<html>\\\\n<head>\\\\n <meta charset=\\\\\"utf-8\\\\\" />\\\\n <meta name=\\\\\"viewport\\\\\" content=\\\\\"width=device-width, initial-scale=1\\\\\" />\\\\n \" + fontHeadHTML + ssrHeadHTML + \"\\\\n \" + assetTags + \"\\\\n</head>\\\\n<body>\\\\n <div id=\\\\\"__next\\\\\">\" + BODY_MARKER + \"</div>\\\\n \" + nextDataScript + \"\\\\n</body>\\\\n</html>\";\n }\n\n if (typeof setSSRContext === \"function\") setSSRContext(null);\n\n // Split the shell at the body marker\n var markerIdx = shellHtml.indexOf(BODY_MARKER);\n var shellPrefix = shellHtml.slice(0, markerIdx);\n var shellSuffix = shellHtml.slice(markerIdx + BODY_MARKER.length);\n\n // Start the React body stream — progressive SSR (no allReady wait)\n var bodyStream = await renderToReadableStream(element);\n var encoder = new TextEncoder();\n\n // Create a composite stream: prefix + body + suffix\n var compositeStream = new ReadableStream({\n async start(controller) {\n controller.enqueue(encoder.encode(shellPrefix));\n var reader = bodyStream.getReader();\n try {\n for (;;) {\n var chunk = await reader.read();\n if (chunk.done) break;\n controller.enqueue(chunk.value);\n }\n } finally {\n reader.releaseLock();\n }\n controller.enqueue(encoder.encode(shellSuffix));\n controller.close();\n }\n });\n\n // Cache the rendered HTML for ISR (needs the full string — re-render synchronously)\n if (isrRevalidateSeconds !== null && isrRevalidateSeconds > 0) {\n // Tee the stream so we can cache and respond simultaneously would be ideal,\n // but ISR responses are rare on first hit. Re-render to get complete HTML for cache.\n var isrElement;\n if (AppComponent) {\n isrElement = React.createElement(AppComponent, { Component: PageComponent, pageProps });\n } else {\n isrElement = React.createElement(PageComponent, pageProps);\n }\n isrElement = wrapWithRouterContext(isrElement);\n var isrHtml = await renderToStringAsync(isrElement);\n var fullHtml = shellPrefix + isrHtml + shellSuffix;\n var isrPathname = url.split(\"?\")[0];\n var isrCacheKey = \"pages:\" + (isrPathname === \"/\" ? \"/\" : isrPathname.replace(/\\\\/$/, \"\"));\n await isrSet(isrCacheKey, { kind: \"PAGES\", html: fullHtml, pageData: pageProps, headers: undefined, status: undefined }, isrRevalidateSeconds);\n }\n\n const responseHeaders = { \"Content-Type\": \"text/html\" };\n if (isrRevalidateSeconds) {\n responseHeaders[\"Cache-Control\"] = \"s-maxage=\" + isrRevalidateSeconds + \", stale-while-revalidate\";\n responseHeaders[\"X-Vinext-Cache\"] = \"MISS\";\n }\n // Set HTTP Link header for font preloading\n if (_fontLinkHeader) {\n responseHeaders[\"Link\"] = _fontLinkHeader;\n }\n return new Response(compositeStream, { status: 200, headers: responseHeaders });\n } catch (e) {\n console.error(\"[vinext] SSR error:\", e);\n return new Response(\"Internal Server Error\", { status: 500 });\n }\n }) // end runWithFetchCache\n ) // end runWithPrivateCache\n ) // end _runWithCacheState\n ) // end runWithHeadState\n ); // end runWithRouterState\n}\n\nexport async function handleApiRoute(request, url) {\n const match = matchRoute(url, apiRoutes);\n if (!match) {\n return new Response(\"404 - API route not found\", { status: 404 });\n }\n\n const { route, params } = match;\n const handler = route.module.default;\n if (typeof handler !== \"function\") {\n return new Response(\"API route does not export a default function\", { status: 500 });\n }\n\n const query = { ...params };\n const qs = url.split(\"?\")[1];\n if (qs) {\n for (const [k, v] of new URLSearchParams(qs)) {\n if (k in query) {\n // Multi-value: promote to array (Next.js returns string[] for duplicate keys)\n query[k] = Array.isArray(query[k]) ? query[k].concat(v) : [query[k], v];\n } else {\n query[k] = v;\n }\n }\n }\n\n // Parse request body (enforce 1MB limit to prevent memory exhaustion,\n // matching Next.js default bodyParser sizeLimit).\n // Check Content-Length first as a fast path, then enforce on the actual\n // stream to prevent bypasses via chunked transfer encoding.\n const contentLength = parseInt(request.headers.get(\"content-length\") || \"0\", 10);\n if (contentLength > 1 * 1024 * 1024) {\n return new Response(\"Request body too large\", { status: 413 });\n }\n let body;\n const ct = request.headers.get(\"content-type\") || \"\";\n let rawBody;\n try { rawBody = await readBodyWithLimit(request, 1 * 1024 * 1024); }\n catch { return new Response(\"Request body too large\", { status: 413 }); }\n if (!rawBody) {\n body = undefined;\n } else if (ct.includes(\"application/json\")) {\n try { body = JSON.parse(rawBody); } catch { body = rawBody; }\n } else {\n body = rawBody;\n }\n\n const { req, res, responsePromise } = createReqRes(request, url, query, body);\n\n try {\n await handler(req, res);\n // If handler didn't call res.end(), end it now.\n // The end() method is idempotent — safe to call twice.\n res.end();\n return await responsePromise;\n } catch (e) {\n console.error(\"[vinext] API error:\", e);\n return new Response(\"Internal Server Error\", { status: 500 });\n }\n}\n\n${middlewareExportCode}\n`;\n }\n\n /**\n * Generate the virtual client hydration entry module.\n * This is the entry point for `vite build` (client bundle).\n *\n * It maps route patterns to dynamic imports of page modules so Vite\n * code-splits each page into its own chunk. At runtime it reads\n * __NEXT_DATA__ to determine which page to hydrate.\n */\n async function generateClientEntry(): Promise<string> {\n const pageRoutes = await pagesRouter(pagesDir);\n\n const hasApp = fs.existsSync(path.join(pagesDir, \"_app.tsx\")) || fs.existsSync(path.join(pagesDir, \"_app.jsx\")) || fs.existsSync(path.join(pagesDir, \"_app.ts\")) || fs.existsSync(path.join(pagesDir, \"_app.js\"));\n\n // Build a map of route pattern -> dynamic import.\n // Keys must use Next.js bracket format (e.g. \"/user/[id]\") to match\n // __NEXT_DATA__.page which is set via patternToNextFormat() during SSR.\n const loaderEntries = pageRoutes.map((r: Route) => {\n const absPath = r.filePath.replace(/\\\\/g, \"/\");\n const nextFormatPattern = pagesPatternToNextFormat(r.pattern);\n // JSON.stringify safely escapes quotes, backslashes, and special chars in\n // both the route pattern and the absolute file path.\n // lgtm[js/bad-code-sanitization]\n return ` ${JSON.stringify(nextFormatPattern)}: () => import(${JSON.stringify(absPath)})`;\n });\n\n const appFileBase = path.join(pagesDir, \"_app\").replace(/\\\\/g, \"/\");\n\n return `\nimport React from \"react\";\nimport { hydrateRoot } from \"react-dom/client\";\n// Eagerly import the router shim so its module-level popstate listener is\n// registered. Without this, browser back/forward buttons do nothing because\n// navigateClient() is never invoked on history changes.\nimport \"next/router\";\n\nconst pageLoaders = {\n${loaderEntries.join(\",\\n\")}\n};\n\nasync function hydrate() {\n const nextData = window.__NEXT_DATA__;\n if (!nextData) {\n console.error(\"[vinext] No __NEXT_DATA__ found\");\n return;\n }\n\n const { pageProps } = nextData.props;\n const loader = pageLoaders[nextData.page];\n if (!loader) {\n console.error(\"[vinext] No page loader for route:\", nextData.page);\n return;\n }\n\n const pageModule = await loader();\n const PageComponent = pageModule.default;\n if (!PageComponent) {\n console.error(\"[vinext] Page module has no default export\");\n return;\n }\n\n let element;\n ${hasApp ? `\n try {\n const appModule = await import(${JSON.stringify(appFileBase)});\n const AppComponent = appModule.default;\n window.__VINEXT_APP__ = AppComponent;\n element = React.createElement(AppComponent, { Component: PageComponent, pageProps });\n } catch {\n element = React.createElement(PageComponent, pageProps);\n }\n ` : `\n element = React.createElement(PageComponent, pageProps);\n `}\n\n // Wrap with RouterContext.Provider so next/compat/router works during hydration\n const { wrapWithRouterContext } = await import(\"next/router\");\n element = wrapWithRouterContext(element);\n\n const container = document.getElementById(\"__next\");\n if (!container) {\n console.error(\"[vinext] No #__next element found\");\n return;\n }\n\n const root = hydrateRoot(container, element);\n window.__VINEXT_ROOT__ = root;\n}\n\nhydrate();\n`;\n }\n\n // Auto-register @vitejs/plugin-rsc when App Router is detected.\n // Check eagerly at call time using the same heuristic as config().\n // Must mirror the full detection logic: check {base}/app then {base}/src/app.\n const autoRsc = options.rsc !== false;\n const earlyBaseDir = options.appDir ?? process.cwd();\n const earlyAppDirExists =\n fs.existsSync(path.join(earlyBaseDir, \"app\")) ||\n fs.existsSync(path.join(earlyBaseDir, \"src\", \"app\"));\n\n // IMPORTANT: Resolve @vitejs/plugin-rsc subpath imports from the user's\n // project root, not from vinext's own package location. When vinext is\n // installed via symlink (npm file: deps, pnpm workspace:*), a bare\n // import() resolves from vinext's realpath, which can find a different\n // copy of the RSC plugin (and transitively a different copy of vite).\n // This causes instanceof RunnableDevEnvironment checks to fail at\n // runtime because the Vite server and the RSC plugin end up with\n // different class identities. Resolving from the project root ensures a\n // single shared vite instance.\n //\n // Pre-resolve both the main plugin and the /transforms subpath eagerly\n // so all import() calls in this module use consistent resolution.\n const earlyRequire = createRequire(path.join(earlyBaseDir, \"package.json\"));\n let resolvedRscPath: string | null = null;\n let resolvedRscTransformsPath: string | null = null;\n try {\n resolvedRscPath = earlyRequire.resolve(\"@vitejs/plugin-rsc\");\n resolvedRscTransformsPath = earlyRequire.resolve(\"@vitejs/plugin-rsc/transforms\");\n } catch {\n // @vitejs/plugin-rsc not installed — that's fine for Pages Router\n // projects. If App Router is detected, the error is thrown below.\n }\n\n // If app/ exists and auto-RSC is enabled, create a lazy Promise that\n // resolves to the configured RSC plugin array. Vite's asyncFlatten\n // will resolve this before processing the plugin list.\n let rscPluginPromise: Promise<Plugin[]> | null = null;\n if (earlyAppDirExists && autoRsc) {\n if (!resolvedRscPath) {\n throw new Error(\n \"vinext: App Router detected but @vitejs/plugin-rsc is not installed.\\n\" +\n \"Run: \" + detectPackageManager(process.cwd()) + \" @vitejs/plugin-rsc\",\n );\n }\n const rscImport = import(pathToFileURL(resolvedRscPath).href);\n rscPluginPromise = rscImport\n .then((mod) => {\n const rsc = mod.default;\n return rsc({\n entries: {\n rsc: VIRTUAL_RSC_ENTRY,\n ssr: VIRTUAL_APP_SSR_ENTRY,\n client: VIRTUAL_APP_BROWSER_ENTRY,\n },\n });\n });\n }\n\n const imageImportDimCache = new Map<string, { width: number; height: number }>();\n\n const plugins: (Plugin | Promise<Plugin[]>)[] = [\n // Resolve tsconfig paths/baseUrl aliases so real-world Next.js repos\n // that use @/*, #/*, or baseUrl imports work out of the box.\n tsconfigPaths(),\n // Transform CJS require()/module.exports to ESM before other plugins\n // analyze imports (RSC directive scanning, shim resolution, etc.)\n commonjs(),\n {\n name: \"vinext:config\",\n enforce: \"pre\",\n\n async config(config, env) {\n root = config.root ?? process.cwd();\n\n // Load .env files into process.env before anything else.\n // Next.js loads .env files before evaluating next.config.js, so\n // env vars are available in config, server-side code, and as\n // NEXT_PUBLIC_* defines for the client bundle.\n // Pass '' as prefix to load ALL vars, not just VITE_-prefixed ones.\n const mode = env?.mode ?? \"development\";\n const envDir = config.envDir ?? root;\n const dotenvVars = loadEnv(mode, envDir, \"\");\n for (const [key, value] of Object.entries(dotenvVars)) {\n if (process.env[key] === undefined) {\n process.env[key] = value;\n }\n }\n // Align NODE_ENV with Next.js semantics: build -> production, serve -> development.\n // Next.js unconditionally forces NODE_ENV during build/dev, so we do the same.\n let resolvedNodeEnv: string;\n if (mode === \"test\") {\n resolvedNodeEnv = \"test\";\n } else if (env?.command === \"build\") {\n resolvedNodeEnv = \"production\";\n } else {\n resolvedNodeEnv = \"development\";\n }\n if (process.env.NODE_ENV !== resolvedNodeEnv) {\n process.env.NODE_ENV = resolvedNodeEnv;\n }\n\n // Resolve the base directory for app/pages detection.\n // If appDir is provided, resolve it (supports both relative and absolute paths).\n // If not provided, auto-detect: check root first, then src/ subdirectory.\n let baseDir: string;\n if (options.appDir) {\n baseDir = path.isAbsolute(options.appDir)\n ? options.appDir\n : path.resolve(root, options.appDir);\n } else {\n // Auto-detect: prefer root-level app/ and pages/, fall back to src/\n const hasRootApp = fs.existsSync(path.join(root, \"app\"));\n const hasRootPages = fs.existsSync(path.join(root, \"pages\"));\n const hasSrcApp = fs.existsSync(path.join(root, \"src\", \"app\"));\n const hasSrcPages = fs.existsSync(path.join(root, \"src\", \"pages\"));\n\n if (hasRootApp || hasRootPages) {\n baseDir = root;\n } else if (hasSrcApp || hasSrcPages) {\n baseDir = path.join(root, \"src\");\n } else {\n baseDir = root;\n }\n }\n\n pagesDir = path.join(baseDir, \"pages\");\n appDir = path.join(baseDir, \"app\");\n hasPagesDir = fs.existsSync(pagesDir);\n hasAppDir = fs.existsSync(appDir);\n middlewarePath = findMiddlewareFile(root);\n instrumentationPath = findInstrumentationFile(root);\n\n // Load next.config.js if present (always from project root, not src/)\n const rawConfig = await loadNextConfig(root);\n nextConfig = await resolveNextConfig(rawConfig);\n\n // Merge env from next.config.js with NEXT_PUBLIC_* env vars\n const defines = getNextPublicEnvDefines();\n if (\n !config.define ||\n typeof config.define !== \"object\" ||\n !(\"process.env.NODE_ENV\" in config.define)\n ) {\n defines[\"process.env.NODE_ENV\"] = JSON.stringify(resolvedNodeEnv);\n }\n for (const [key, value] of Object.entries(nextConfig.env)) {\n // Skip NODE_ENV from next.config.js env — Next.js ignores it too,\n // and it would silently override the value we just set above.\n if (key === \"NODE_ENV\") continue;\n defines[`process.env.${key}`] = JSON.stringify(value);\n }\n // Expose basePath to client-side code\n defines[\"process.env.__NEXT_ROUTER_BASEPATH\"] = JSON.stringify(\n nextConfig.basePath,\n );\n // Expose image remote patterns for validation in next/image shim\n defines[\"process.env.__VINEXT_IMAGE_REMOTE_PATTERNS\"] = JSON.stringify(\n JSON.stringify(nextConfig.images?.remotePatterns ?? []),\n );\n defines[\"process.env.__VINEXT_IMAGE_DOMAINS\"] = JSON.stringify(\n JSON.stringify(nextConfig.images?.domains ?? []),\n );\n // Expose allowed image widths (union of deviceSizes + imageSizes) for\n // server-side validation. Matches Next.js behavior: only configured\n // sizes are accepted by the image optimization endpoint.\n {\n const deviceSizes = nextConfig.images?.deviceSizes ?? [640, 750, 828, 1080, 1200, 1920, 2048, 3840];\n const imageSizes = nextConfig.images?.imageSizes ?? [16, 32, 48, 64, 96, 128, 256, 384];\n defines[\"process.env.__VINEXT_IMAGE_DEVICE_SIZES\"] = JSON.stringify(\n JSON.stringify(deviceSizes),\n );\n defines[\"process.env.__VINEXT_IMAGE_SIZES\"] = JSON.stringify(\n JSON.stringify(imageSizes),\n );\n }\n // Expose dangerouslyAllowSVG flag for the image shim's auto-skip logic.\n // When false (default), .svg sources bypass the optimization endpoint.\n defines[\"process.env.__VINEXT_IMAGE_DANGEROUSLY_ALLOW_SVG\"] = JSON.stringify(\n String(nextConfig.images?.dangerouslyAllowSVG ?? false),\n );\n // Draft mode secret — generated once at build time so the\n // __prerender_bypass cookie is consistent across all server\n // instances (e.g. multiple Cloudflare Workers isolates).\n defines[\"process.env.__VINEXT_DRAFT_SECRET\"] = JSON.stringify(\n crypto.randomUUID(),\n );\n\n // Build the shim alias map — used by both resolve.alias and resolveId\n // (resolveId handles .js extension variants for libraries like nuqs)\n nextShimMap = {\n \"next/link\": path.join(shimsDir, \"link\"),\n \"next/head\": path.join(shimsDir, \"head\"),\n \"next/router\": path.join(shimsDir, \"router\"),\n \"next/compat/router\": path.join(shimsDir, \"compat-router\"),\n \"next/image\": path.join(shimsDir, \"image\"),\n \"next/legacy/image\": path.join(shimsDir, \"legacy-image\"),\n \"next/dynamic\": path.join(shimsDir, \"dynamic\"),\n \"next/app\": path.join(shimsDir, \"app\"),\n \"next/document\": path.join(shimsDir, \"document\"),\n \"next/config\": path.join(shimsDir, \"config\"),\n \"next/script\": path.join(shimsDir, \"script\"),\n \"next/server\": path.join(shimsDir, \"server\"),\n \"next/navigation\": path.join(shimsDir, \"navigation\"),\n \"next/headers\": path.join(shimsDir, \"headers\"),\n \"next/font/google\": path.join(shimsDir, \"font-google\"),\n \"next/font/local\": path.join(shimsDir, \"font-local\"),\n \"next/cache\": path.join(shimsDir, \"cache\"),\n \"next/form\": path.join(shimsDir, \"form\"),\n \"next/og\": path.join(shimsDir, \"og\"),\n \"next/web-vitals\": path.join(shimsDir, \"web-vitals\"),\n \"next/amp\": path.join(shimsDir, \"amp\"),\n \"next/error\": path.join(shimsDir, \"error\"),\n \"next/constants\": path.join(shimsDir, \"constants\"),\n // Internal next/dist/* paths used by popular libraries\n // (next-intl, @clerk/nextjs, @sentry/nextjs, next-nprogress-bar, etc.)\n \"next/dist/shared/lib/app-router-context.shared-runtime\": path.join(shimsDir, \"internal\", \"app-router-context\"),\n \"next/dist/shared/lib/app-router-context\": path.join(shimsDir, \"internal\", \"app-router-context\"),\n \"next/dist/shared/lib/router-context.shared-runtime\": path.join(shimsDir, \"internal\", \"router-context\"),\n \"next/dist/shared/lib/utils\": path.join(shimsDir, \"internal\", \"utils\"),\n \"next/dist/server/api-utils\": path.join(shimsDir, \"internal\", \"api-utils\"),\n \"next/dist/server/web/spec-extension/cookies\": path.join(shimsDir, \"internal\", \"cookies\"),\n \"next/dist/compiled/@edge-runtime/cookies\": path.join(shimsDir, \"internal\", \"cookies\"),\n \"next/dist/server/app-render/work-unit-async-storage.external\": path.join(shimsDir, \"internal\", \"work-unit-async-storage\"),\n \"next/dist/client/components/work-unit-async-storage.external\": path.join(shimsDir, \"internal\", \"work-unit-async-storage\"),\n \"next/dist/client/components/request-async-storage.external\": path.join(shimsDir, \"internal\", \"work-unit-async-storage\"),\n \"next/dist/client/components/request-async-storage\": path.join(shimsDir, \"internal\", \"work-unit-async-storage\"),\n // Re-export public modules for internal path imports\n \"next/dist/client/components/navigation\": path.join(shimsDir, \"navigation\"),\n \"next/dist/server/config-shared\": path.join(shimsDir, \"internal\", \"utils\"),\n // server-only / client-only marker packages\n \"server-only\": path.join(shimsDir, \"server-only\"),\n \"client-only\": path.join(shimsDir, \"client-only\"),\n \"vinext/error-boundary\": path.join(shimsDir, \"error-boundary\"),\n \"vinext/layout-segment-context\": path.join(shimsDir, \"layout-segment-context\"),\n \"vinext/metadata\": path.join(shimsDir, \"metadata\"),\n \"vinext/fetch-cache\": path.join(shimsDir, \"fetch-cache\"),\n \"vinext/cache-runtime\": path.join(shimsDir, \"cache-runtime\"),\n \"vinext/navigation-state\": path.join(shimsDir, \"navigation-state\"),\n \"vinext/router-state\": path.join(shimsDir, \"router-state\"),\n \"vinext/head-state\": path.join(shimsDir, \"head-state\"),\n \"vinext/instrumentation\": path.resolve(__dirname, \"server\", \"instrumentation\"),\n \"vinext/html\": path.resolve(__dirname, \"server\", \"html\"),\n };\n\n // Detect if Cloudflare's vite plugin is present — if so, skip\n // SSR externals (Workers bundle everything, can't have Node.js externals).\n const pluginsFlat: any[] = [];\n function flattenPlugins(arr: any[]) {\n for (const p of arr) {\n if (Array.isArray(p)) flattenPlugins(p);\n else if (p) pluginsFlat.push(p);\n }\n }\n flattenPlugins(config.plugins as any[] ?? []);\n hasCloudflarePlugin = pluginsFlat.some(\n (p: any) => p && typeof p === \"object\" && typeof p.name === \"string\" && (\n p.name === \"vite-plugin-cloudflare\" || p.name.startsWith(\"vite-plugin-cloudflare:\")\n ),\n );\n hasNitroPlugin = pluginsFlat.some(\n (p: any) => p && typeof p === \"object\" && typeof p.name === \"string\" && (\n p.name === \"nitro\" || p.name.startsWith(\"nitro:\")\n ),\n );\n\n // Resolve PostCSS string plugin names that Vite can't handle.\n // Next.js projects commonly use array-form plugins like\n // `plugins: [\"@tailwindcss/postcss\"]` which postcss-load-config\n // doesn't resolve (only object-form keys are resolved). We detect\n // this and resolve the strings to actual plugin functions, then\n // inject via css.postcss so Vite uses the resolved plugins.\n // Only do this if the user hasn't already set css.postcss inline.\n let postcssOverride: { plugins: any[] } | undefined;\n if (!config.css?.postcss || typeof config.css.postcss === \"string\") {\n postcssOverride = await resolvePostcssStringPlugins(root);\n }\n\n // Auto-inject @mdx-js/rollup when MDX files exist and no MDX plugin is\n // already configured. Applies remark/rehype plugins from next.config.\n const hasMdxPlugin = pluginsFlat.some(\n (p: any) => p && typeof p === \"object\" && typeof p.name === \"string\" &&\n (p.name === \"@mdx-js/rollup\" || p.name === \"mdx\"),\n );\n const mdxPlugins: any[] = [];\n if (!hasMdxPlugin && hasMdxFiles(root, hasAppDir ? appDir : null, hasPagesDir ? pagesDir : null)) {\n try {\n const mdxRollup = await import(\"@mdx-js/rollup\");\n const mdxPlugin = mdxRollup.default ?? mdxRollup;\n const mdxOpts: Record<string, unknown> = {};\n if (nextConfig.mdx) {\n if (nextConfig.mdx.remarkPlugins) mdxOpts.remarkPlugins = nextConfig.mdx.remarkPlugins;\n if (nextConfig.mdx.rehypePlugins) mdxOpts.rehypePlugins = nextConfig.mdx.rehypePlugins;\n if (nextConfig.mdx.recmaPlugins) mdxOpts.recmaPlugins = nextConfig.mdx.recmaPlugins;\n }\n mdxPlugins.push(mdxPlugin(mdxOpts));\n if (nextConfig.mdx) {\n console.log(\"[vinext] Auto-injected @mdx-js/rollup with remark/rehype plugins from next.config\");\n } else {\n console.log(\"[vinext] Auto-injected @mdx-js/rollup for MDX support\");\n }\n } catch {\n // @mdx-js/rollup not installed — warn but don't fail\n console.warn(\n \"[vinext] MDX files detected but @mdx-js/rollup is not installed. \" +\n \"Install it with: \" + detectPackageManager(process.cwd()) + \" @mdx-js/rollup\"\n );\n }\n }\n\n // Detect if this is a standalone SSR build (set by `vite build --ssr`\n // or `build.ssr` in config). SSR builds must NOT use manualChunks\n // because they use inlineDynamicImports which is incompatible.\n const isSSR = !!config.build?.ssr;\n // Detect if this is a multi-environment build (App Router or Cloudflare).\n // In multi-env builds, manualChunks must only be set per-environment\n // (on the client env), not globally — otherwise it leaks into RSC/SSR\n // environments where it can cause asset resolution issues.\n const isMultiEnv = hasAppDir || hasCloudflarePlugin || hasNitroPlugin;\n\n const viteConfig: UserConfig = {\n // Disable Vite's default HTML serving - we handle all routing\n appType: \"custom\",\n build: {\n rollupOptions: {\n // Suppress \"Module level directives cause errors when bundled\"\n // warnings for \"use client\" / \"use server\" directives. Our shims\n // and third-party libraries legitimately use these directives;\n // they are handled by the RSC plugin and are harmless in the\n // final bundle. We preserve any user-supplied onwarn so custom\n // warning handling is not lost.\n onwarn: (() => {\n const userOnwarn = config.build?.rollupOptions?.onwarn;\n return (warning, defaultHandler) => {\n if (\n warning.code === \"MODULE_LEVEL_DIRECTIVE\" &&\n (warning.message?.includes('\"use client\"') ||\n warning.message?.includes('\"use server\"'))\n ) {\n return;\n }\n if (userOnwarn) {\n userOnwarn(warning, defaultHandler);\n } else {\n defaultHandler(warning);\n }\n };\n })(),\n // Enable aggressive tree-shaking for client builds.\n // See clientTreeshakeConfig for rationale.\n // Only apply globally for standalone client builds (Pages Router\n // CLI). For multi-environment builds (App Router, Cloudflare),\n // treeshake is set per-environment on the client env below to\n // avoid leaking into RSC/SSR environments where\n // moduleSideEffects: 'no-external' could drop server packages\n // that rely on module-level side effects.\n ...(!isSSR && !isMultiEnv ? { treeshake: clientTreeshakeConfig } : {}),\n // Code-split client bundles: separate framework (React/ReactDOM),\n // vinext runtime (shims), and vendor packages into their own\n // chunks so pages only load the JS they need.\n // Only apply globally for standalone client builds (CLI Pages\n // Router). For multi-environment builds (App Router, Cloudflare),\n // manualChunks is set per-environment on the client env below\n // to avoid leaking into RSC/SSR environments.\n ...(!isSSR && !isMultiEnv ? { output: clientOutputConfig } : {}),\n },\n },\n // Let OPTIONS requests pass through Vite's CORS middleware to our\n // route handlers so they can set the Allow header and run user-defined\n // OPTIONS handlers. Without this, Vite's CORS middleware responds to\n // OPTIONS with a 204 before the request reaches vinext's handler.\n // Keep Vite's default restrictive origin policy by explicitly\n // setting it. Without the `origin` field, `preflightContinue: true`\n // would override Vite's default and allow any origin.\n server: {\n cors: {\n preflightContinue: true,\n origin: /^https?:\\/\\/(?:(?:[^:]+\\.)?localhost|127\\.0\\.0\\.1|\\[::1\\])(?::\\d+)?$/,\n },\n },\n // Externalize React packages from SSR transform — they are CJS and\n // must be loaded natively by Node, not through Vite's ESM evaluator.\n // Skip when targeting bundled runtimes (Cloudflare/Nitro bundle everything).\n ...(hasCloudflarePlugin || hasNitroPlugin ? {} : {\n ssr: {\n external: [\"react\", \"react-dom\", \"react-dom/server\"],\n },\n }),\n resolve: {\n alias: nextShimMap,\n // Dedupe React packages to prevent dual-instance errors.\n // When vinext is linked (npm link / bun link) or any dependency\n // brings its own React copy, multiple React instances can load,\n // causing cryptic \"Invalid hook call\" errors. This is a no-op\n // when only one copy exists.\n dedupe: [\n \"react\",\n \"react-dom\",\n \"react/jsx-runtime\",\n \"react/jsx-dev-runtime\",\n ],\n },\n // Exclude vinext from dependency optimization so esbuild doesn't\n // scan dist files containing virtual module imports (virtual:vinext-*)\n // that only resolve at Vite plugin time, not during pre-bundling.\n optimizeDeps: {\n exclude: [\"vinext\"],\n },\n // Enable JSX in .tsx/.jsx files\n // Vite 7 uses `esbuild` for transforms, Vite 8+ uses `oxc`\n ...(getViteMajorVersion() >= 8\n ? { oxc: { jsx: { runtime: \"automatic\" } } }\n : { esbuild: { jsx: \"automatic\" } }),\n // Define env vars for client bundle\n define: defines,\n // Set base path if configured\n ...(nextConfig.basePath ? { base: nextConfig.basePath + \"/\" } : {}),\n // Inject resolved PostCSS plugins if string names were found\n ...(postcssOverride ? { css: { postcss: postcssOverride } } : {}),\n };\n\n // If app/ directory exists, configure RSC environments\n if (hasAppDir) {\n // Compute optimizeDeps.entries so Vite discovers server-side\n // dependencies at startup instead of on first request. Without\n // this, deps imported in rsc/ssr environments are found lazily,\n // causing re-optimisation cascades and runtime errors (e.g.\n // \"Invalid hook call\" from duplicate React instances).\n // The entries must be relative to the project root.\n const relAppDir = path.relative(root, appDir);\n const appEntries = [\n `${relAppDir}/**/*.{tsx,ts,jsx,js}`,\n ];\n\n viteConfig.environments = {\n rsc: {\n ...(hasCloudflarePlugin || hasNitroPlugin ? {} : {\n resolve: {\n // Externalize native/heavy packages so the RSC environment\n // loads them natively via Node rather than through Vite's\n // ESM module evaluator (which can't handle native addons).\n // Note: Do NOT externalize react/react-dom here — they must\n // be bundled with the \"react-server\" condition for RSC.\n // Skip when targeting bundled runtimes (Cloudflare/Nitro).\n external: [\n \"satori\",\n \"@resvg/resvg-js\",\n \"yoga-wasm-web\",\n ],\n },\n }),\n optimizeDeps: {\n exclude: [\"vinext\"],\n entries: appEntries,\n },\n build: {\n outDir: \"dist/server\",\n rollupOptions: {\n input: { index: VIRTUAL_RSC_ENTRY },\n },\n },\n },\n ssr: {\n optimizeDeps: {\n exclude: [\"vinext\"],\n entries: appEntries,\n },\n build: {\n outDir: \"dist/server/ssr\",\n rollupOptions: {\n input: { index: VIRTUAL_APP_SSR_ENTRY },\n },\n },\n },\n client: {\n optimizeDeps: {\n exclude: [\"vinext\"],\n // React packages aren't crawled from app/ source files,\n // so must be pre-included to avoid late discovery (#25).\n include: [\n \"react\",\n \"react-dom\",\n \"react-dom/client\",\n \"react/jsx-runtime\",\n \"react/jsx-dev-runtime\",\n ],\n },\n build: {\n // When targeting Cloudflare Workers, enable manifest generation\n // so the vinext:cloudflare-build closeBundle hook can read the\n // client build manifest, compute lazy chunks (only reachable\n // via dynamic imports), and inject __VINEXT_LAZY_CHUNKS__ into\n // the worker entry. Without this, all chunks are modulepreloaded\n // on every page — defeating code-splitting for React.lazy() and\n // next/dynamic boundaries.\n ...(hasCloudflarePlugin ? { manifest: true } : {}),\n rollupOptions: {\n input: { index: VIRTUAL_APP_BROWSER_ENTRY },\n output: clientOutputConfig,\n treeshake: clientTreeshakeConfig,\n },\n },\n },\n };\n } else if (hasCloudflarePlugin) {\n // Pages Router on Cloudflare Workers: add a client environment\n // so the multi-environment build produces client JS bundles\n // alongside the worker. Without this, only the worker is built\n // and there's no client-side hydration.\n viteConfig.environments = {\n client: {\n build: {\n manifest: true,\n ssrManifest: true,\n rollupOptions: {\n input: { index: VIRTUAL_CLIENT_ENTRY },\n output: clientOutputConfig,\n treeshake: clientTreeshakeConfig,\n },\n },\n },\n };\n }\n\n // Add auto-injected MDX plugin if needed\n if (mdxPlugins.length > 0) {\n viteConfig.plugins = mdxPlugins;\n }\n\n return viteConfig;\n },\n\n configResolved(config) {\n // Detect double RSC plugin registration. When vinext auto-injects\n // @vitejs/plugin-rsc AND the user also registers it manually, the\n // RSC transform pipeline runs twice — doubling build time.\n // Rather than trying to magically fix this at runtime, fail fast\n // with a clear error telling the user how to fix their config.\n if (rscPluginPromise) {\n // Count top-level RSC plugins (name === \"rsc\") — each call to\n // the rsc() factory produces exactly one plugin with this name.\n const rscRootPlugins = config.plugins.filter(\n (p: any) => p && p.name === \"rsc\",\n );\n if (rscRootPlugins.length > 1) {\n throw new Error(\n \"[vinext] Duplicate @vitejs/plugin-rsc detected.\\n\" +\n \" vinext auto-registers @vitejs/plugin-rsc when app/ is detected.\\n\" +\n \" Your config also registers it manually, which doubles build time.\\n\\n\" +\n \" Fix: remove the explicit rsc() call from your plugins array.\\n\" +\n \" Or: pass rsc: false to vinext() if you want to configure rsc() yourself.\",\n );\n }\n }\n },\n\n resolveId: {\n // Hook filter: only invoke JS for next/* imports and virtual:vinext-* modules.\n // Matches \"next/navigation\", \"next/router.js\", \"virtual:vinext-rsc-entry\",\n // and \\0-prefixed re-imports from @vitejs/plugin-rsc.\n filter: {\n id: /(?:next\\/|virtual:vinext-)/,\n },\n handler(id) {\n // Strip \\0 prefix if present — @vitejs/plugin-rsc's generated\n // browser entry imports our virtual module using the already-resolved\n // ID (with \\0 prefix). We need to re-resolve it so the client\n // environment's import-analysis can find it.\n const cleanId = id.startsWith(\"\\0\") ? id.slice(1) : id;\n\n // Handle next/* imports with .js extension (e.g. \"next/navigation.js\")\n // Libraries like nuqs import \"next/navigation.js\" which doesn't match\n // our resolve.alias for \"next/navigation\". Strip the .js and resolve\n // through our shim map, appending .js to the resolved path.\n if (cleanId.startsWith(\"next/\") && cleanId.endsWith(\".js\")) {\n const withoutExt = cleanId.slice(0, -3);\n if (nextShimMap[withoutExt]) {\n const shimPath = nextShimMap[withoutExt];\n // Alias values don't include .js — append it for resolveId\n return shimPath.endsWith(\".js\") ? shimPath : shimPath + \".js\";\n }\n }\n\n // Pages Router virtual modules\n if (cleanId === VIRTUAL_SERVER_ENTRY) return RESOLVED_SERVER_ENTRY;\n if (cleanId === VIRTUAL_CLIENT_ENTRY) return RESOLVED_CLIENT_ENTRY;\n if (cleanId.endsWith(\"/\" + VIRTUAL_SERVER_ENTRY) || cleanId.endsWith(\"\\\\\" + VIRTUAL_SERVER_ENTRY)) {\n return RESOLVED_SERVER_ENTRY;\n }\n if (cleanId.endsWith(\"/\" + VIRTUAL_CLIENT_ENTRY) || cleanId.endsWith(\"\\\\\" + VIRTUAL_CLIENT_ENTRY)) {\n return RESOLVED_CLIENT_ENTRY;\n }\n // App Router virtual modules\n if (cleanId === VIRTUAL_RSC_ENTRY) return RESOLVED_RSC_ENTRY;\n if (cleanId === VIRTUAL_APP_SSR_ENTRY) return RESOLVED_APP_SSR_ENTRY;\n if (cleanId === VIRTUAL_APP_BROWSER_ENTRY) return RESOLVED_APP_BROWSER_ENTRY;\n if (cleanId.endsWith(\"/\" + VIRTUAL_RSC_ENTRY) || cleanId.endsWith(\"\\\\\" + VIRTUAL_RSC_ENTRY)) {\n return RESOLVED_RSC_ENTRY;\n }\n if (cleanId.endsWith(\"/\" + VIRTUAL_APP_SSR_ENTRY) || cleanId.endsWith(\"\\\\\" + VIRTUAL_APP_SSR_ENTRY)) {\n return RESOLVED_APP_SSR_ENTRY;\n }\n if (cleanId.endsWith(\"/\" + VIRTUAL_APP_BROWSER_ENTRY) || cleanId.endsWith(\"\\\\\" + VIRTUAL_APP_BROWSER_ENTRY)) {\n return RESOLVED_APP_BROWSER_ENTRY;\n }\n },\n },\n\n async load(id) {\n // Pages Router virtual modules\n if (id === RESOLVED_SERVER_ENTRY) {\n return await generateServerEntry();\n }\n if (id === RESOLVED_CLIENT_ENTRY) {\n return await generateClientEntry();\n }\n // App Router virtual modules\n if (id === RESOLVED_RSC_ENTRY && hasAppDir) {\n const routes = await appRouter(appDir);\n const metaRoutes = scanMetadataFiles(appDir);\n // Check for global-error.tsx at app root\n const globalErrorPath = findFileWithExts(appDir, \"global-error\");\n return generateRscEntry(appDir, routes, middlewarePath, metaRoutes, globalErrorPath, nextConfig?.basePath, nextConfig?.trailingSlash, {\n redirects: nextConfig?.redirects,\n rewrites: nextConfig?.rewrites,\n headers: nextConfig?.headers,\n allowedOrigins: nextConfig?.serverActionsAllowedOrigins,\n allowedDevOrigins: nextConfig?.serverActionsAllowedOrigins,\n });\n }\n if (id === RESOLVED_APP_SSR_ENTRY && hasAppDir) {\n return generateSsrEntry();\n }\n if (id === RESOLVED_APP_BROWSER_ENTRY && hasAppDir) {\n return generateBrowserEntry();\n }\n },\n },\n // Shim React canary/experimental APIs (ViewTransition, addTransitionType)\n // that exist in Next.js's bundled React canary but not in stable React 19.\n // Provides graceful no-op fallbacks so projects using these APIs degrade\n // instead of crashing with \"does not provide an export named 'ViewTransition'\".\n {\n name: \"vinext:react-canary\",\n enforce: \"pre\",\n\n resolveId(id) {\n if (id === \"virtual:vinext-react-canary\") return \"\\0virtual:vinext-react-canary\";\n },\n\n load(id) {\n if (id === \"\\0virtual:vinext-react-canary\") {\n return [\n `export * from \"react\";`,\n `export { default } from \"react\";`,\n `import * as _React from \"react\";`,\n `export const ViewTransition = _React.ViewTransition || function ViewTransition({ children }) { return children; };`,\n `export const addTransitionType = _React.addTransitionType || function addTransitionType() {};`,\n ].join(\"\\n\");\n }\n },\n\n transform(code, id) {\n // Only transform user source files, not node_modules or virtual modules\n if (id.includes(\"node_modules\")) return null;\n if (id.startsWith(\"\\0\")) return null;\n if (!/\\.(tsx?|jsx?|mjs)$/.test(id)) return null;\n\n // Quick check: does this file reference canary APIs and import from \"react\"?\n if (\n !(code.includes(\"ViewTransition\") || code.includes(\"addTransitionType\")) ||\n !/from\\s+['\"]react['\"]/.test(code)\n ) {\n return null;\n }\n\n // Only rewrite if the import actually destructures a canary API\n const canaryImportRegex = /import\\s*\\{[^}]*(ViewTransition|addTransitionType)[^}]*\\}\\s*from\\s*['\"]react['\"]/;\n if (!canaryImportRegex.test(code)) return null;\n\n // Rewrite all `from \"react\"` / `from 'react'` to use the canary shim.\n // This is safe because the virtual module re-exports everything from\n // react, so non-canary imports continue to work.\n const result = code.replace(\n /from\\s*['\"]react['\"]/g,\n 'from \"virtual:vinext-react-canary\"',\n );\n if (result !== code) {\n return { code: result, map: null };\n }\n return null;\n },\n },\n {\n name: \"vinext:pages-router\",\n\n // HMR: trigger full-reload for Pages Router page changes.\n // Without @vitejs/plugin-react (React Fast Refresh), component edits\n // can't be hot-updated. In theory Vite's default propagation should\n // reach the root and trigger a full-reload, but the Pages Router\n // injects hydration via inline <script type=\"module\"> which may not\n // be tracked in the module graph. Explicitly sending full-reload\n // ensures changes are always reflected in the browser.\n hotUpdate(options: { file: string; server: ViteDevServer; modules: any[] }) {\n if (!hasPagesDir || hasAppDir) return;\n const ext = /\\.(tsx?|jsx?|mdx)$/;\n if (options.file.startsWith(pagesDir) && ext.test(options.file)) {\n options.server.environments.client.hot.send({ type: \"full-reload\" });\n return [];\n }\n },\n\n configureServer(server: ViteDevServer) {\n // Watch pages directory for file additions/removals to invalidate route cache.\n const pageExtensions = /\\.(tsx?|jsx?|mdx)$/;\n\n /**\n * Invalidate the virtual RSC entry module in Vite's module graph.\n *\n * The App Router route table is baked into the virtual RSC entry\n * at generation time. When routes are added or removed, clearing\n * the route cache alone is not enough: the virtual module must\n * also be invalidated so Vite re-calls the load() hook to\n * regenerate the entry with the updated route table.\n */\n function invalidateRscEntryModule() {\n const rscEnv = server.environments[\"rsc\"];\n if (!rscEnv) return;\n const mod = rscEnv.moduleGraph.getModuleById(RESOLVED_RSC_ENTRY);\n if (mod) {\n rscEnv.moduleGraph.invalidateModule(mod);\n rscEnv.hot.send({ type: \"full-reload\" });\n }\n }\n\n server.watcher.on(\"add\", (filePath: string) => {\n if (hasPagesDir && filePath.startsWith(pagesDir) && pageExtensions.test(filePath)) {\n invalidateRouteCache(pagesDir);\n }\n if (hasAppDir && filePath.startsWith(appDir) && pageExtensions.test(filePath)) {\n invalidateAppRouteCache();\n invalidateRscEntryModule();\n }\n });\n server.watcher.on(\"unlink\", (filePath: string) => {\n if (hasPagesDir && filePath.startsWith(pagesDir) && pageExtensions.test(filePath)) {\n invalidateRouteCache(pagesDir);\n }\n if (hasAppDir && filePath.startsWith(appDir) && pageExtensions.test(filePath)) {\n invalidateAppRouteCache();\n invalidateRscEntryModule();\n }\n });\n\n // Run instrumentation.ts register() if present (once at server startup)\n if (instrumentationPath) {\n runInstrumentation(server, instrumentationPath).catch((err) => {\n console.error(\"[vinext] Instrumentation error:\", err);\n });\n }\n\n // Return a function to register middleware AFTER Vite's built-in middleware\n return () => {\n server.middlewares.use(async (req, res, next) => {\n try {\n let url: string = req.url ?? \"/\";\n\n // If no pages directory, skip this middleware entirely\n // (app router is handled by @vitejs/plugin-rsc's built-in middleware)\n if (!hasPagesDir) return next();\n\n // Skip Vite internal requests and static files\n if (\n url.startsWith(\"/@\") ||\n url.startsWith(\"/__vite\") ||\n url.startsWith(\"/node_modules\")\n ) {\n return next();\n }\n\n // Skip .rsc requests — those are for the App Router RSC handler\n if (url.split(\"?\")[0].endsWith(\".rsc\")) {\n return next();\n }\n\n // ── Cross-origin request protection ─────────────────────────\n // Block requests from non-localhost origins to prevent\n // cross-origin data exfiltration from the dev server.\n const blockReason = validateDevRequest(\n {\n origin: req.headers.origin as string | undefined,\n host: req.headers.host,\n \"x-forwarded-host\": req.headers[\"x-forwarded-host\"] as string | undefined,\n \"sec-fetch-site\": req.headers[\"sec-fetch-site\"] as string | undefined,\n \"sec-fetch-mode\": req.headers[\"sec-fetch-mode\"] as string | undefined,\n },\n nextConfig?.serverActionsAllowedOrigins,\n );\n if (blockReason) {\n console.warn(`[vinext] Blocked dev request: ${blockReason} (${url})`);\n res.writeHead(403, { \"Content-Type\": \"text/plain\" });\n res.end(\"Forbidden\");\n return;\n }\n\n // ── Image optimization passthrough (dev mode) ─────────────\n // In dev, redirect to the original asset URL so Vite serves it.\n if (url.split(\"?\")[0] === \"/_vinext/image\") {\n const imgParams = new URLSearchParams(url.split(\"?\")[1] ?? \"\");\n const rawImgUrl = imgParams.get(\"url\");\n // Normalize backslashes: browsers and the URL constructor treat\n // /\\evil.com as //evil.com, bypassing the // check.\n const imgUrl = rawImgUrl?.replaceAll(\"\\\\\", \"/\") ?? null;\n // Allowlist: must start with \"/\" but not \"//\" — blocks absolute\n // URLs, protocol-relative, backslash variants, and exotic schemes.\n if (!imgUrl || !imgUrl.startsWith(\"/\") || imgUrl.startsWith(\"//\")) {\n res.writeHead(400);\n res.end(!rawImgUrl ? \"Missing url parameter\" : \"Only relative URLs allowed\");\n return;\n }\n // Validate the constructed URL's origin hasn't changed (defense in depth).\n const resolvedImg = new URL(imgUrl, `http://${req.headers.host || \"localhost\"}`);\n if (resolvedImg.origin !== `http://${req.headers.host || \"localhost\"}`) {\n res.writeHead(400);\n res.end(\"Only relative URLs allowed\");\n return;\n }\n res.writeHead(302, { Location: imgUrl });\n res.end();\n return;\n }\n\n // Vite's built-in middleware may rewrite \"/\" to \"/index.html\".\n // Normalize it back so our router can match correctly.\n const rawPathname = url.split(\"?\")[0];\n if (rawPathname.endsWith(\"/index.html\")) {\n url = url.replace(\"/index.html\", \"/\");\n } else if (rawPathname.endsWith(\".html\")) {\n // Strip .html extensions (e.g. \"/about.html\" -> \"/about\")\n url = url.replace(/\\.html(?=\\?|$)/, \"\");\n }\n\n // Skip requests for files with extensions (static assets)\n let pathname = url.split(\"?\")[0];\n if (pathname.includes(\".\") && !pathname.endsWith(\".html\")) {\n return next();\n }\n\n // Guard against protocol-relative URL open redirects.\n // Normalize backslashes first: browsers treat /\\ as // in URL\n // context. Check the RAW pathname before normalizePath so the\n // guard fires before normalizePath collapses //.\n pathname = pathname.replaceAll(\"\\\\\", \"/\");\n if (pathname.startsWith(\"//\")) {\n res.writeHead(404);\n res.end(\"404 Not Found\");\n return;\n }\n\n // Normalize the pathname to prevent path-confusion attacks.\n // decodeURIComponent prevents /%61dmin bypassing /admin matchers.\n // normalizePath collapses // and resolves . / .. segments.\n try {\n pathname = normalizePath(decodeURIComponent(pathname));\n } catch {\n // Malformed percent-encoding (e.g. /%E0%A4%A) — return 400 instead of crashing.\n res.writeHead(400);\n res.end(\"Bad Request\");\n return;\n }\n\n // Strip basePath prefix from URL for route matching.\n // All internal routing uses basePath-free paths.\n //\n // NOTE: When basePath is set, we also set Vite's `base` config to\n // `basePath + \"/\"`. Vite's connect middleware stack strips the base\n // prefix from req.url before passing it to our middleware, so the\n // URL will already lack the basePath prefix. We still attempt to\n // strip it (for robustness) but don't reject paths that don't start\n // with basePath — Vite has already done the filtering.\n const bp = nextConfig?.basePath ?? \"\";\n if (bp && pathname.startsWith(bp)) {\n const stripped = pathname.slice(bp.length) || \"/\";\n const qs = url.includes(\"?\") ? url.slice(url.indexOf(\"?\")) : \"\";\n url = stripped + qs;\n pathname = stripped;\n }\n\n // Normalize trailing slash based on next.config.js trailingSlash setting.\n // Redirect to the canonical form if needed.\n if (nextConfig && pathname !== \"/\" && !pathname.startsWith(\"/api\")) {\n const hasTrailing = pathname.endsWith(\"/\");\n if (nextConfig.trailingSlash && !hasTrailing) {\n // trailingSlash: true — redirect /about → /about/\n const qs = url.includes(\"?\") ? url.slice(url.indexOf(\"?\")) : \"\";\n const dest = bp + pathname + \"/\" + qs;\n res.writeHead(308, { Location: dest });\n res.end();\n return;\n } else if (!nextConfig.trailingSlash && hasTrailing) {\n // trailingSlash: false (default) — redirect /about/ → /about\n const qs = url.includes(\"?\") ? url.slice(url.indexOf(\"?\")) : \"\";\n const dest = bp + pathname.replace(/\\/+$/, \"\") + qs;\n res.writeHead(308, { Location: dest });\n res.end();\n return;\n }\n }\n\n // Run middleware.ts if present\n if (middlewarePath) {\n // Only trust X-Forwarded-Proto when behind a trusted proxy\n const devTrustProxy = process.env.VINEXT_TRUST_PROXY === \"1\" || (process.env.VINEXT_TRUSTED_HOSTS ?? \"\").split(\",\").some(h => h.trim());\n const rawProto = devTrustProxy\n ? String(req.headers[\"x-forwarded-proto\"] || \"\").split(\",\")[0].trim()\n : \"\";\n const mwProto = rawProto === \"https\" || rawProto === \"http\" ? rawProto : \"http\";\n const origin = `${mwProto}://${req.headers.host || \"localhost\"}`;\n const middlewareRequest = new Request(new URL(url, origin), {\n method: req.method,\n headers: Object.fromEntries(\n Object.entries(req.headers)\n .filter(([, v]) => v !== undefined)\n .map(([k, v]) => [k, Array.isArray(v) ? v.join(\", \") : String(v)])\n ),\n });\n const result = await runMiddleware(server, middlewarePath, middlewareRequest);\n\n if (!result.continue) {\n if (result.redirectUrl) {\n res.writeHead(result.redirectStatus ?? 307, {\n Location: result.redirectUrl,\n });\n res.end();\n return;\n }\n if (result.response) {\n res.statusCode = result.response.status;\n for (const [key, value] of result.response.headers) {\n res.appendHeader(key, value);\n }\n const body = await result.response.text();\n res.end(body);\n return;\n }\n }\n\n // Apply middleware response headers\n if (result.responseHeaders) {\n for (const [key, value] of result.responseHeaders) {\n res.appendHeader(key, value);\n }\n }\n\n // Apply middleware rewrite (URL and optional status code)\n if (result.rewriteUrl) {\n url = result.rewriteUrl;\n }\n if (result.rewriteStatus) {\n (req as any).__vinextRewriteStatus = result.rewriteStatus;\n }\n }\n\n // Build request context once for has/missing condition checks\n // across headers, redirects, and rewrites.\n const reqUrl = new URL(url, `http://${req.headers.host || \"localhost\"}`);\n const reqCtxHeaders = new Headers(\n Object.fromEntries(\n Object.entries(req.headers)\n .filter(([, v]) => v !== undefined)\n .map(([k, v]) => [k, Array.isArray(v) ? v.join(\", \") : String(v)])\n ),\n );\n const reqCtx: RequestContext = {\n headers: reqCtxHeaders,\n cookies: parseCookies(reqCtxHeaders.get(\"cookie\")),\n query: reqUrl.searchParams,\n host: reqCtxHeaders.get(\"host\") ?? reqUrl.host,\n };\n\n // Apply custom headers from next.config.js\n if (nextConfig?.headers.length) {\n applyHeaders(pathname, res, nextConfig.headers, reqCtx);\n }\n\n // Apply redirects from next.config.js\n if (nextConfig?.redirects.length) {\n const redirected = applyRedirects(\n pathname,\n res,\n nextConfig.redirects,\n reqCtx,\n );\n if (redirected) return;\n }\n\n // Apply rewrites from next.config.js (beforeFiles)\n let resolvedUrl = url;\n if (nextConfig?.rewrites.beforeFiles.length) {\n resolvedUrl =\n applyRewrites(pathname, nextConfig.rewrites.beforeFiles, reqCtx) ??\n url;\n }\n\n // External rewrite from beforeFiles — proxy to external URL\n if (isExternalUrl(resolvedUrl)) {\n await proxyExternalRewriteNode(req, res, resolvedUrl);\n return;\n }\n\n // Handle API routes first (pages/api/*)\n const resolvedPathname = resolvedUrl.split(\"?\")[0];\n if (\n resolvedPathname.startsWith(\"/api/\") ||\n resolvedPathname === \"/api\"\n ) {\n const apiRoutes = await apiRouter(pagesDir);\n const handled = await handleApiRoute(\n server,\n req,\n res,\n resolvedUrl,\n apiRoutes,\n );\n if (handled) return;\n // No API route matched — fall through to 404\n res.statusCode = 404;\n res.end(\"404 - API route not found\");\n return;\n }\n\n const routes = await pagesRouter(pagesDir);\n\n // Apply afterFiles rewrites — these run after initial route matching\n // If beforeFiles already rewrote the URL, afterFiles still run on the\n // *resolved* pathname. Next.js applies these when route matching succeeds\n // but allows overriding with rewrites.\n if (nextConfig?.rewrites.afterFiles.length) {\n const afterRewrite = applyRewrites(\n resolvedUrl.split(\"?\")[0],\n nextConfig.rewrites.afterFiles,\n reqCtx,\n );\n if (afterRewrite) resolvedUrl = afterRewrite;\n }\n\n // External rewrite from afterFiles — proxy to external URL\n if (isExternalUrl(resolvedUrl)) {\n await proxyExternalRewriteNode(req, res, resolvedUrl);\n return;\n }\n\n const handler = createSSRHandler(server, routes, pagesDir, nextConfig?.i18n);\n const mwStatus = (req as any).__vinextRewriteStatus as number | undefined;\n\n // Try rendering the resolved URL\n const match = matchRoute(resolvedUrl.split(\"?\")[0], routes);\n if (match) {\n await handler(req, res, resolvedUrl, mwStatus);\n return;\n }\n\n // No route matched — try fallback rewrites\n if (nextConfig?.rewrites.fallback.length) {\n const fallbackRewrite = applyRewrites(\n resolvedUrl.split(\"?\")[0],\n nextConfig.rewrites.fallback,\n reqCtx,\n );\n if (fallbackRewrite) {\n // External fallback rewrite — proxy to external URL\n if (isExternalUrl(fallbackRewrite)) {\n await proxyExternalRewriteNode(req, res, fallbackRewrite);\n return;\n }\n await handler(req, res, fallbackRewrite, mwStatus);\n return;\n }\n }\n\n // No fallback matched — render as-is (will hit 404 handler)\n await handler(req, res, resolvedUrl, mwStatus);\n } catch (e) {\n next(e);\n }\n });\n };\n },\n },\n // Local image import transform:\n // When a source file imports a local image (e.g., `import hero from './hero.jpg'`),\n // this plugin transforms the default import to a StaticImageData object with\n // { src, width, height } so the next/image shim can set correct dimensions\n // on <img> tags, preventing CLS.\n //\n // Vite's default image import returns a URL string. We intercept this by\n // adding a `?vinext-meta` suffix: the original import gets the URL from Vite,\n // and we resolve the `?vinext-meta` virtual module to provide dimensions.\n {\n name: \"vinext:image-imports\",\n enforce: \"pre\",\n\n // Cache of image dimensions to avoid re-reading files\n _dimCache: imageImportDimCache,\n\n resolveId: {\n filter: { id: /\\?vinext-meta$/ },\n handler(source, _importer) {\n if (!source.endsWith(\"?vinext-meta\")) return null;\n // Resolve the real image path from the importer\n const realPath = source.replace(\"?vinext-meta\", \"\");\n return `\\0vinext-image-meta:${realPath}`;\n },\n },\n\n async load(id) {\n if (!id.startsWith(\"\\0vinext-image-meta:\")) return null;\n const imagePath = id.replace(\"\\0vinext-image-meta:\", \"\");\n\n // Read from cache first\n const cache = imageImportDimCache;\n let dims = cache.get(imagePath);\n if (!dims) {\n try {\n const { imageSize } = await import(\"image-size\");\n const buffer = fs.readFileSync(imagePath);\n const result = imageSize(buffer);\n dims = { width: result.width ?? 0, height: result.height ?? 0 };\n cache.set(imagePath, dims);\n } catch {\n dims = { width: 0, height: 0 };\n }\n }\n\n return `export default ${JSON.stringify(dims)};`;\n },\n\n transform: {\n // Hook filter: Rolldown evaluates these on the Rust side, skipping\n // the JS handler entirely for files that don't match.\n filter: {\n id: {\n include: /\\.(tsx?|jsx?|mjs)$/,\n exclude: /node_modules/,\n },\n code: new RegExp(`import\\\\s+\\\\w+\\\\s+from\\\\s+['\"][^'\"]+\\\\.(${IMAGE_EXTS})['\"]`),\n },\n async handler(code, id) {\n // Defensive guard — duplicates filter logic\n if (id.includes(\"node_modules\")) return null;\n if (id.startsWith(\"\\0\")) return null;\n if (!id.match(/\\.(tsx?|jsx?|mjs)$/)) return null;\n\n const imageImportRe = new RegExp(`import\\\\s+(\\\\w+)\\\\s+from\\\\s+['\"]([^'\"]+\\\\.(${IMAGE_EXTS}))['\"];?`, \"g\");\n if (!imageImportRe.test(code)) return null;\n\n imageImportRe.lastIndex = 0;\n\n const s = new MagicString(code);\n let hasChanges = false;\n\n let match;\n while ((match = imageImportRe.exec(code)) !== null) {\n const [fullMatch, varName, importPath] = match;\n const matchStart = match.index;\n const matchEnd = matchStart + fullMatch.length;\n\n // Resolve the absolute path of the image\n const dir = path.dirname(id);\n const absImagePath = path.resolve(dir, importPath);\n\n if (!fs.existsSync(absImagePath)) continue;\n\n // Replace the single import with two:\n // 1. Original import (Vite gives us the URL string)\n // 2. Meta import (we provide { width, height })\n // Combined into a StaticImageData object\n const urlVar = `__vinext_img_url_${varName}`;\n const metaVar = `__vinext_img_meta_${varName}`;\n const replacement =\n `import ${urlVar} from ${JSON.stringify(importPath)};\\n` +\n `import ${metaVar} from ${JSON.stringify(absImagePath + \"?vinext-meta\")};\\n` +\n `const ${varName} = { src: ${urlVar}, width: ${metaVar}.width, height: ${metaVar}.height };`;\n\n s.overwrite(matchStart, matchEnd, replacement);\n hasChanges = true;\n }\n\n if (!hasChanges) return null;\n\n return {\n code: s.toString(),\n map: s.generateMap({ hires: \"boundary\" }),\n };\n },\n },\n } as Plugin & { _dimCache: Map<string, { width: number; height: number }> },\n // Google Fonts self-hosting:\n // During production builds, fetches Google Fonts CSS + .woff2 files,\n // caches them locally in .vinext/fonts/, and rewrites font constructor\n // calls to pass _selfHostedCSS with @font-face rules pointing at local assets.\n // In dev mode, this plugin is a no-op (CDN loading is used instead).\n {\n name: \"vinext:google-fonts\",\n enforce: \"pre\",\n\n _isBuild: false,\n _fontCache: new Map<string, string>(), // url -> local @font-face CSS\n _cacheDir: \"\",\n\n configResolved(config) {\n (this as any)._isBuild = config.command === \"build\";\n (this as any)._cacheDir = path.join(config.root, \".vinext\", \"fonts\");\n },\n\n transform: {\n // Hook filter: only invoke JS when code contains 'next/font/google'.\n // The _isBuild runtime check can't be expressed as a filter, but this\n // still eliminates nearly all Rust-to-JS calls since very few files\n // import from next/font/google.\n filter: {\n id: {\n include: /\\.(tsx?|jsx?|mjs)$/,\n exclude: /node_modules/,\n },\n code: \"next/font/google\",\n },\n async handler(code, id) {\n if (!(this as any)._isBuild) return null;\n // Defensive guard — duplicates filter logic\n if (id.includes(\"node_modules\")) return null;\n if (id.startsWith(\"\\0\")) return null;\n if (!id.match(/\\.(tsx?|jsx?|mjs)$/)) return null;\n if (!code.includes(\"next/font/google\")) return null;\n\n // Match font constructor calls: Inter({ weight: ..., subsets: ... })\n // We look for PascalCase or Name_Name identifiers followed by ({...})\n // This regex captures the font name and the options object literal\n const fontCallRe = /\\b([A-Z][A-Za-z]*(?:_[A-Z][A-Za-z]*)*)\\s*\\(\\s*(\\{[^}]*\\})\\s*\\)/g;\n\n // Also need to verify these names came from next/font/google import\n const importRe = /import\\s*\\{([^}]+)\\}\\s*from\\s*['\"]next\\/font\\/google['\"]/;\n const importMatch = code.match(importRe);\n if (!importMatch) return null;\n\n const importedNames = new Set(\n importMatch[1].split(\",\").map((s) => s.trim()).filter(Boolean),\n );\n\n const s = new MagicString(code);\n let hasChanges = false;\n\n const cacheDir = (this as any)._cacheDir as string;\n const fontCache = (this as any)._fontCache as Map<string, string>;\n\n let match;\n while ((match = fontCallRe.exec(code)) !== null) {\n const [fullMatch, fontName, optionsStr] = match;\n if (!importedNames.has(fontName)) continue;\n\n // Convert PascalCase/Underscore to font family\n const family = fontName.replace(/_/g, \" \").replace(/([a-z])([A-Z])/g, \"$1 $2\");\n\n // Parse options safely via AST — no eval/new Function\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let options: Record<string, any> = {};\n try {\n const parsed = parseStaticObjectLiteral(optionsStr);\n if (!parsed) continue; // Contains dynamic expressions, skip\n options = parsed as Record<string, any>;\n } catch {\n continue; // Can't parse options statically, skip\n }\n\n // Build the Google Fonts CSS URL\n const weights = options.weight\n ? Array.isArray(options.weight) ? options.weight : [options.weight]\n : [];\n const styles = options.style\n ? Array.isArray(options.style) ? options.style : [options.style]\n : [];\n const display = options.display ?? \"swap\";\n\n let spec = family.replace(/\\s+/g, \"+\");\n if (weights.length > 0) {\n const hasItalic = styles.includes(\"italic\");\n if (hasItalic) {\n const pairs: string[] = [];\n for (const w of weights) { pairs.push(`0,${w}`); pairs.push(`1,${w}`); }\n spec += `:ital,wght@${pairs.join(\";\")}`;\n } else {\n spec += `:wght@${weights.join(\";\")}`;\n }\n } else if (styles.length === 0) {\n // Request full variable weight range when no weight specified.\n // Without this, Google Fonts returns only weight 400.\n spec += `:wght@100..900`;\n }\n const params = new URLSearchParams();\n params.set(\"family\", spec);\n params.set(\"display\", display);\n const cssUrl = `https://fonts.googleapis.com/css2?${params.toString()}`;\n\n // Check cache\n let localCSS = fontCache.get(cssUrl);\n if (!localCSS) {\n try {\n localCSS = await fetchAndCacheFont(cssUrl, family, cacheDir);\n fontCache.set(cssUrl, localCSS);\n } catch {\n // Fetch failed (offline?) — fall back to CDN mode\n continue;\n }\n }\n\n // Inject _selfHostedCSS into the options object\n const matchStart = match.index;\n const matchEnd = matchStart + fullMatch.length;\n const escapedCSS = JSON.stringify(localCSS);\n const closingBrace = optionsStr.lastIndexOf(\"}\");\n const optionsWithCSS = optionsStr.slice(0, closingBrace) +\n (optionsStr.slice(0, closingBrace).trim().endsWith(\"{\") ? \"\" : \", \") +\n `_selfHostedCSS: ${escapedCSS}` +\n optionsStr.slice(closingBrace);\n\n const replacement = `${fontName}(${optionsWithCSS})`;\n s.overwrite(matchStart, matchEnd, replacement);\n hasChanges = true;\n }\n\n if (!hasChanges) return null;\n return {\n code: s.toString(),\n map: s.generateMap({ hires: \"boundary\" }),\n };\n },\n },\n } as Plugin & { _isBuild: boolean; _fontCache: Map<string, string>; _cacheDir: string },\n // Local font path resolution:\n // When a source file calls localFont({ src: \"./font.woff2\" }) or\n // localFont({ src: [{ path: \"./font.woff2\" }] }), the relative paths\n // won't resolve in the browser because the CSS is injected at runtime.\n // This plugin rewrites those path strings into Vite asset import\n // references so that both dev (/@fs/...) and prod (/assets/font-xxx.woff2)\n // URLs are correct.\n {\n name: \"vinext:local-fonts\",\n enforce: \"pre\",\n\n transform: {\n filter: {\n id: {\n include: /\\.(tsx?|jsx?|mjs)$/,\n exclude: /node_modules/,\n },\n code: \"next/font/local\",\n },\n handler(code, id) {\n // Defensive guards — duplicate filter logic\n if (id.includes(\"node_modules\")) return null;\n if (id.startsWith(\"\\0\")) return null;\n if (!id.match(/\\.(tsx?|jsx?|mjs)$/)) return null;\n if (!code.includes(\"next/font/local\")) return null;\n // Skip vinext's own font-local shim — it contains example paths\n // in comments that would be incorrectly rewritten.\n if (id.includes(\"font-local\")) return null;\n\n // Verify there's actually an import from next/font/local\n const importRe = /import\\s+\\w+\\s+from\\s*['\"]next\\/font\\/local['\"]/;\n if (!importRe.test(code)) return null;\n\n const s = new MagicString(code);\n let hasChanges = false;\n let fontImportCounter = 0;\n const imports: string[] = [];\n\n // Match font file paths in `path: \"...\"` or `src: \"...\"` properties.\n // Captures: (1) property+colon prefix, (2) quote char, (3) the path.\n const fontPathRe = /((?:path|src)\\s*:\\s*)(['\"])([^'\"]+\\.(?:woff2?|ttf|otf|eot))\\2/g;\n\n let match;\n while ((match = fontPathRe.exec(code)) !== null) {\n const [fullMatch, prefix, _quote, fontPath] = match;\n const varName = `__vinext_local_font_${fontImportCounter++}`;\n\n // Add an import for this font file — Vite resolves it as a static\n // asset and returns the correct URL for both dev and prod.\n imports.push(`import ${varName} from ${JSON.stringify(fontPath)};`);\n\n // Replace: path: \"./font.woff2\" -> path: __vinext_local_font_0\n const matchStart = match.index;\n const matchEnd = matchStart + fullMatch.length;\n s.overwrite(matchStart, matchEnd, `${prefix}${varName}`);\n hasChanges = true;\n }\n\n if (!hasChanges) return null;\n\n // Prepend the asset imports at the top of the file\n s.prepend(imports.join(\"\\n\") + \"\\n\");\n\n return {\n code: s.toString(),\n map: s.generateMap({ hires: \"boundary\" }),\n };\n },\n },\n } as Plugin,\n // \"use cache\" directive transform:\n // Detects \"use cache\" at file-level or function-level and wraps the\n // exports/functions with registerCachedFunction() from vinext/cache-runtime.\n // Runs without enforce so it executes after JSX transform (parseAst needs plain JS).\n {\n name: \"vinext:use-cache\",\n\n transform: {\n // Hook filter: only invoke JS when code contains 'use cache'.\n // The vast majority of files don't use this directive.\n filter: {\n id: {\n include: /\\.(tsx?|jsx?|mjs)$/,\n exclude: /node_modules/,\n },\n code: \"use cache\",\n },\n async handler(code, id) {\n // Defensive guard — duplicates filter logic\n if (id.includes(\"node_modules\")) return null;\n if (id.startsWith(\"\\0\")) return null;\n if (!id.match(/\\.(tsx?|jsx?|mjs)$/)) return null;\n if (!code.includes(\"use cache\")) return null;\n\n if (!resolvedRscTransformsPath) {\n throw new Error(\n \"vinext: 'use cache' requires @vitejs/plugin-rsc to be installed.\\n\" +\n \"Run: \" + detectPackageManager(process.cwd()) + \" @vitejs/plugin-rsc\",\n );\n }\n const { transformWrapExport, transformHoistInlineDirective } = await import(pathToFileURL(resolvedRscTransformsPath).href);\n const ast = parseAst(code);\n\n // Check for file-level \"use cache\" directive\n const cacheDirective = (ast.body as any[]).find(\n (node: any) =>\n node.type === \"ExpressionStatement\" &&\n node.expression?.type === \"Literal\" &&\n typeof node.expression.value === \"string\" &&\n node.expression.value.startsWith(\"use cache\"),\n );\n\n if (cacheDirective) {\n // File-level \"use cache\" — wrap function exports with\n // registerCachedFunction. Page default exports are wrapped directly\n // (they're leaf components). Layout/template defaults are excluded\n // because they receive {children} from the framework.\n const directiveValue: string = cacheDirective.expression.value;\n const variant = directiveValue === \"use cache\" ? \"\" : directiveValue.replace(\"use cache:\", \"\").replace(\"use cache: \", \"\").trim();\n\n // Only skip default export wrapping for layouts and templates —\n // they receive {children} from the framework which requires\n // temporary reference handling that registerCachedFunction doesn't\n // support yet. Pages, not-found, loading, error, and default are\n // leaf components with no {children} prop and can be cached directly.\n const isLayoutOrTemplate = /\\/(layout|template)\\.(tsx?|jsx?|mjs)$/.test(id);\n\n const runtimeModuleUrl = pathToFileURL(path.join(shimsDir, \"cache-runtime.js\")).href;\n const result = transformWrapExport(code, ast as any, {\n runtime: (value: any, name: any) =>\n `(await import(${JSON.stringify(runtimeModuleUrl)})).registerCachedFunction(${value}, ${JSON.stringify(id + \":\" + name)}, ${JSON.stringify(variant)})`,\n rejectNonAsyncFunction: false,\n filter: (name: any, meta: any) => {\n // Skip non-functions (constants, types, etc.)\n if (meta.isFunction === false) return false;\n // Skip the default export on layout/template files — these\n // receive {children} from the framework, and caching them\n // requires temporary reference handling for the children slot.\n // Named exports (e.g. generateMetadata) are still wrapped.\n if (isLayoutOrTemplate && name === \"default\") return false;\n return true;\n },\n });\n\n if (result.exportNames.length > 0) {\n // Remove the directive itself so it doesn't cause runtime errors\n const output = result.output;\n output.overwrite(cacheDirective.start, cacheDirective.end, `/* \"use cache\" — wrapped by vinext */`);\n return {\n code: output.toString(),\n map: output.generateMap({ hires: \"boundary\" }),\n };\n }\n\n // Even if no exports were wrapped, still strip the directive\n // (e.g., layout/template file with only a default export)\n const output = new MagicString(code);\n output.overwrite(cacheDirective.start, cacheDirective.end, `/* \"use cache\" — handled by vinext */`);\n return {\n code: output.toString(),\n map: output.generateMap({ hires: \"boundary\" }),\n };\n }\n\n // Check for function-level \"use cache\" directives\n // (e.g., async function getData() { \"use cache\"; ... })\n const hasInlineCache = code.includes(\"use cache\") && !cacheDirective;\n if (hasInlineCache) {\n const runtimeModuleUrl2 = pathToFileURL(path.join(shimsDir, \"cache-runtime.js\")).href;\n\n try {\n const result = transformHoistInlineDirective(code, ast as any, {\n directive: /^use cache(:\\s*\\w+)?$/,\n runtime: (value: any, name: any, meta: any) => {\n const directiveMatch = meta.directiveMatch[0];\n const variant = directiveMatch === \"use cache\" ? \"\" : directiveMatch.replace(\"use cache:\", \"\").replace(\"use cache: \", \"\").trim();\n return `(await import(${JSON.stringify(runtimeModuleUrl2)})).registerCachedFunction(${value}, ${JSON.stringify(id + \":\" + name)}, ${JSON.stringify(variant)})`;\n },\n rejectNonAsyncFunction: false,\n });\n\n if (result.names.length > 0) {\n return {\n code: result.output.toString(),\n map: result.output.generateMap({ hires: \"boundary\" }),\n };\n }\n } catch {\n // If hoisting fails (e.g., complex closure), fall through\n }\n }\n\n return null;\n },\n },\n },\n // Copy @vercel/og assets (font, WASM) to the RSC output directory.\n // @vercel/og uses readFileSync(new URL(\"./font.ttf\", import.meta.url)) which\n // breaks when the module is bundled because Vite doesn't process\n // new URL(..., import.meta.url) for server-side (SSR/RSC) builds.\n // This plugin copies the required assets so they exist alongside the bundle.\n {\n name: \"vinext:og-assets\",\n apply: \"build\",\n enforce: \"post\",\n writeBundle: {\n sequential: true,\n order: \"post\",\n async handler(options) {\n const envName = this.environment?.name;\n if (envName !== \"rsc\") return;\n\n const outDir = options.dir;\n if (!outDir) return;\n\n // Check if the bundle references @vercel/og assets\n const indexPath = path.join(outDir, \"index.js\");\n if (!fs.existsSync(indexPath)) return;\n\n const content = fs.readFileSync(indexPath, \"utf-8\");\n const ogAssets = [\n \"noto-sans-v27-latin-regular.ttf\",\n \"resvg.wasm\",\n ];\n\n // Only copy if the bundle actually references these files\n const referencedAssets = ogAssets.filter(asset => content.includes(asset));\n if (referencedAssets.length === 0) return;\n\n // Find @vercel/og in node_modules\n try {\n const require = createRequire(import.meta.url);\n const ogPkgPath = require.resolve(\"@vercel/og/package.json\");\n const ogDistDir = path.join(path.dirname(ogPkgPath), \"dist\");\n\n for (const asset of referencedAssets) {\n const src = path.join(ogDistDir, asset);\n const dest = path.join(outDir, asset);\n if (fs.existsSync(src) && !fs.existsSync(dest)) {\n fs.copyFileSync(src, dest);\n }\n }\n } catch {\n // @vercel/og not installed — nothing to copy\n }\n },\n },\n },\n // Write image config JSON for the App Router production server.\n // The App Router RSC entry doesn't export vinextConfig (that's a Pages\n // Router pattern), so we write a separate JSON file at build time that\n // prod-server.ts reads at startup for SVG/security header config.\n {\n name: \"vinext:image-config\",\n apply: \"build\",\n enforce: \"post\",\n writeBundle: {\n sequential: true,\n order: \"post\",\n handler(options) {\n const envName = this.environment?.name;\n if (envName !== \"rsc\") return;\n\n const outDir = options.dir;\n if (!outDir) return;\n\n const imageConfig = {\n dangerouslyAllowSVG: nextConfig?.images?.dangerouslyAllowSVG,\n contentDispositionType: nextConfig?.images?.contentDispositionType,\n contentSecurityPolicy: nextConfig?.images?.contentSecurityPolicy,\n };\n\n fs.writeFileSync(\n path.join(outDir, \"image-config.json\"),\n JSON.stringify(imageConfig),\n );\n },\n },\n },\n // Cloudflare Workers production build integration:\n // After all environments are built, compute lazy chunks from the client\n // build manifest and inject globals into the worker entry.\n //\n // Pages Router: injects __VINEXT_CLIENT_ENTRY__, __VINEXT_SSR_MANIFEST__,\n // and __VINEXT_LAZY_CHUNKS__ into the worker entry (found via wrangler.json).\n // App Router: the RSC plugin handles __VINEXT_CLIENT_ENTRY__ via\n // loadBootstrapScriptContent(), but we still inject __VINEXT_LAZY_CHUNKS__\n // and __VINEXT_SSR_MANIFEST__ into the worker entry at dist/server/index.js.\n // Both: generates _headers file for immutable asset caching.\n {\n name: \"vinext:cloudflare-build\",\n apply: \"build\",\n enforce: \"post\",\n closeBundle: {\n sequential: true,\n order: \"post\",\n async handler() {\n const envName = this.environment?.name\n if (!envName || !hasCloudflarePlugin) return;\n if (envName !== \"client\") return;\n\n const envConfig = this.environment?.config;\n if (!envConfig) return;\n const buildRoot = envConfig.root ?? process.cwd();\n const distDir = path.resolve(buildRoot, \"dist\");\n if (!fs.existsSync(distDir)) return;\n\n const clientDir = path.resolve(buildRoot, \"dist\", \"client\");\n\n // Read build manifest and compute lazy chunks (only reachable via\n // dynamic imports). This runs for BOTH App Router and Pages Router.\n // clientEntryFile is only used by the Pages Router path below —\n // App Router gets its client entry via the RSC plugin instead.\n let lazyChunksData: string[] | null = null;\n let clientEntryFile: string | null = null;\n const buildManifestPath = path.join(clientDir, \".vite\", \"manifest.json\");\n if (fs.existsSync(buildManifestPath)) {\n try {\n const buildManifest = JSON.parse(fs.readFileSync(buildManifestPath, \"utf-8\"));\n for (const [, value] of Object.entries(buildManifest) as [string, any][]) {\n if (value && value.isEntry && value.file) {\n clientEntryFile = value.file;\n break;\n }\n }\n const lazy = computeLazyChunks(buildManifest);\n if (lazy.length > 0) lazyChunksData = lazy;\n } catch { /* ignore parse errors */ }\n }\n\n // Read SSR manifest for per-page CSS/JS injection\n let ssrManifestData: Record<string, string[]> | null = null;\n const ssrManifestPath = path.join(clientDir, \".vite\", \"ssr-manifest.json\");\n if (fs.existsSync(ssrManifestPath)) {\n try {\n ssrManifestData = JSON.parse(fs.readFileSync(ssrManifestPath, \"utf-8\"));\n } catch { /* ignore parse errors */ }\n }\n\n if (hasAppDir) {\n // App Router: the RSC plugin handles __VINEXT_CLIENT_ENTRY__\n // via loadBootstrapScriptContent(), but we still need to inject\n // __VINEXT_LAZY_CHUNKS__ and __VINEXT_SSR_MANIFEST__ into the\n // worker entry at dist/server/index.js.\n const workerEntry = path.resolve(distDir, \"server\", \"index.js\");\n if (fs.existsSync(workerEntry) && (lazyChunksData || ssrManifestData)) {\n let code = fs.readFileSync(workerEntry, \"utf-8\");\n const globals: string[] = [];\n if (ssrManifestData) {\n globals.push(`globalThis.__VINEXT_SSR_MANIFEST__ = ${JSON.stringify(ssrManifestData)};`);\n }\n if (lazyChunksData) {\n globals.push(`globalThis.__VINEXT_LAZY_CHUNKS__ = ${JSON.stringify(lazyChunksData)};`);\n }\n code = globals.join(\"\\n\") + \"\\n\" + code;\n fs.writeFileSync(workerEntry, code);\n }\n } else {\n // Pages Router: find worker output by scanning dist/ for a\n // directory containing wrangler.json (Cloudflare plugin default).\n let workerOutDir: string | null = null;\n for (const entry of fs.readdirSync(distDir)) {\n const candidate = path.join(distDir, entry);\n if (entry === \"client\") continue;\n if (fs.statSync(candidate).isDirectory() &&\n fs.existsSync(path.join(candidate, \"wrangler.json\"))) {\n workerOutDir = candidate;\n break;\n }\n }\n if (!workerOutDir) return;\n\n const workerEntry = path.join(workerOutDir, \"index.js\");\n if (!fs.existsSync(workerEntry)) return;\n\n // Fallback: scan dist/client/assets/ for the client entry chunk.\n // Pages Router uses \"vinext-client-entry\", App Router uses\n // \"vinext-app-browser-entry\".\n if (!clientEntryFile) {\n const assetsDir = path.join(clientDir, \"assets\");\n if (fs.existsSync(assetsDir)) {\n const files = fs.readdirSync(assetsDir);\n const entry = files.find((f: string) =>\n (f.includes(\"vinext-client-entry\") || f.includes(\"vinext-app-browser-entry\")) && f.endsWith(\".js\"));\n if (entry) clientEntryFile = \"assets/\" + entry;\n }\n }\n\n // Prepend globals to worker entry\n if (clientEntryFile || ssrManifestData || lazyChunksData) {\n let code = fs.readFileSync(workerEntry, \"utf-8\");\n const globals: string[] = [];\n if (clientEntryFile) {\n globals.push(`globalThis.__VINEXT_CLIENT_ENTRY__ = ${JSON.stringify(clientEntryFile)};`);\n }\n if (ssrManifestData) {\n globals.push(`globalThis.__VINEXT_SSR_MANIFEST__ = ${JSON.stringify(ssrManifestData)};`);\n }\n if (lazyChunksData) {\n globals.push(`globalThis.__VINEXT_LAZY_CHUNKS__ = ${JSON.stringify(lazyChunksData)};`);\n }\n code = globals.join(\"\\n\") + \"\\n\" + code;\n fs.writeFileSync(workerEntry, code);\n }\n }\n\n // Generate _headers file for Cloudflare Workers static asset caching.\n // Vite outputs content-hashed files (JS, CSS, fonts) to the assetsDir\n // (defaults to \"assets\"). These are safe to cache indefinitely since\n // the hash changes on any content change. Without this, Cloudflare\n // serves them with max-age=0 which forces unnecessary revalidation\n // on every page load.\n const headersPath = path.join(clientDir, \"_headers\");\n if (!fs.existsSync(headersPath)) {\n const assetsDir = envConfig.build?.assetsDir ?? \"assets\";\n const headersContent = [\n \"# Cache content-hashed assets immutably (generated by vinext)\",\n `/${assetsDir}/*`,\n \" Cache-Control: public, max-age=31536000, immutable\",\n \"\",\n ].join(\"\\n\");\n fs.writeFileSync(headersPath, headersContent);\n }\n },\n },\n },\n ];\n\n // Append auto-injected RSC plugins if applicable\n if (rscPluginPromise) {\n plugins.push(rscPluginPromise);\n }\n\n return plugins as Plugin[];\n}\n\n/**\n * Collect all NEXT_PUBLIC_* env vars and create Vite define entries\n * so they get inlined into the client bundle.\n */\nfunction getNextPublicEnvDefines(): Record<string, string> {\n const defines: Record<string, string> = {};\n for (const [key, value] of Object.entries(process.env)) {\n if (key.startsWith(\"NEXT_PUBLIC_\") && value !== undefined) {\n defines[`process.env.${key}`] = JSON.stringify(value);\n }\n }\n return defines;\n}\n\n/**\n * If the current position in `str` starts with a parenthesized group, consume\n * it and advance `re.lastIndex` past the closing `)`. Returns the group\n * contents or null if no group is present.\n */\nfunction extractConstraint(str: string, re: RegExp): string | null {\n if (str[re.lastIndex] !== \"(\") return null;\n const start = re.lastIndex + 1;\n let depth = 1;\n let i = start;\n while (i < str.length && depth > 0) {\n if (str[i] === \"(\") depth++;\n else if (str[i] === \")\") depth--;\n i++;\n }\n if (depth !== 0) return null;\n re.lastIndex = i;\n return str.slice(start, i - 1);\n}\n\n/**\n * Match a Next.js route pattern (e.g. \"/blog/:slug\", \"/docs/:path*\") against a pathname.\n * Returns matched params or null.\n *\n * Supports:\n * :param — matches a single path segment\n * :param* — matches zero or more segments (catch-all)\n * :param+ — matches one or more segments\n * (regex) — inline regex patterns in the source\n */\nexport function matchConfigPattern(\n pathname: string,\n pattern: string,\n): Record<string, string> | null {\n // If the pattern contains regex groups like (\\\\d+) or (.*), use regex matching.\n // Also enter this branch when a catch-all parameter (:param* or :param+) is\n // followed by a literal suffix (e.g. \"/:path*.md\"). Without this, the suffix\n // pattern falls through to the simple segment matcher which incorrectly treats\n // the whole segment (\":path*.md\") as a named parameter and matches everything.\n if (\n pattern.includes(\"(\") ||\n pattern.includes(\"\\\\\") ||\n /:[\\w-]+[*+][^/]/.test(pattern) ||\n /:[\\w-]+\\./.test(pattern)\n ) {\n try {\n // Extract named params and their constraints from the pattern.\n // :param(constraint) -> use constraint as the regex group\n // :param -> ([^/]+)\n // :param* -> (.*)\n // :param+ -> (.+)\n // Param names may contain hyphens (e.g. :auth-method, :sign-in).\n const paramNames: string[] = [];\n // Single-pass conversion with procedural suffix handling. The tokenizer\n // matches only simple, non-overlapping tokens; quantifier/constraint\n // suffixes after :param are consumed procedurally to avoid polynomial\n // backtracking in the regex engine.\n let regexStr = \"\";\n const tokenRe = /:([\\w-]+)|[.]|[^:.]+/g; // lgtm[js/redos] — alternatives are non-overlapping (`:` and `.` excluded from `[^:.]+`)\n let tok: RegExpExecArray | null;\n while ((tok = tokenRe.exec(pattern)) !== null) {\n if (tok[1] !== undefined) {\n const name = tok[1];\n const rest = pattern.slice(tokenRe.lastIndex);\n // Check for quantifier (* or +) with optional constraint\n if (rest.startsWith(\"*\") || rest.startsWith(\"+\")) {\n const quantifier = rest[0];\n tokenRe.lastIndex += 1;\n const constraint = extractConstraint(pattern, tokenRe);\n paramNames.push(name);\n if (constraint !== null) {\n regexStr += `(${constraint})`;\n } else {\n regexStr += quantifier === \"*\" ? \"(.*)\" : \"(.+)\";\n }\n } else {\n // Check for inline constraint without quantifier\n const constraint = extractConstraint(pattern, tokenRe);\n paramNames.push(name);\n regexStr += constraint !== null ? `(${constraint})` : \"([^/]+)\";\n }\n } else if (tok[0] === \".\") {\n regexStr += \"\\\\.\";\n } else {\n regexStr += tok[0];\n }\n }\n const re = safeRegExp(\"^\" + regexStr + \"$\");\n if (!re) return null;\n const match = re.exec(pathname);\n if (!match) return null;\n const params: Record<string, string> = {};\n for (let i = 0; i < paramNames.length; i++) {\n params[paramNames[i]] = match[i + 1] ?? \"\";\n }\n return params;\n } catch {\n // Fall through to segment-based matching\n }\n }\n\n // Check for catch-all patterns (:param* or :param+) without regex groups\n // Param names may contain hyphens (e.g. :sign-in*, :sign-up+).\n const catchAllMatch = pattern.match(/:([\\w-]+)(\\*|\\+)$/);\n if (catchAllMatch) {\n const prefix = pattern.slice(0, pattern.lastIndexOf(\":\"));\n const paramName = catchAllMatch[1];\n const isPlus = catchAllMatch[2] === \"+\";\n\n if (!pathname.startsWith(prefix.replace(/\\/$/, \"\"))) return null;\n\n const rest = pathname.slice(prefix.replace(/\\/$/, \"\").length);\n // For :path+ we need at least one segment (non-empty after the prefix)\n if (isPlus && (!rest || rest === \"/\")) return null;\n // For :path* zero segments is fine\n let restValue = rest.startsWith(\"/\") ? rest.slice(1) : rest;\n // NOTE: Do NOT decodeURIComponent here. The pathname is already decoded at\n // the entry point. Decoding again would create a double-decode vector.\n return { [paramName]: restValue };\n }\n\n // Simple segment-based matching for exact patterns and :param\n const parts = pattern.split(\"/\");\n const pathParts = pathname.split(\"/\");\n\n if (parts.length !== pathParts.length) return null;\n\n const params: Record<string, string> = {};\n for (let i = 0; i < parts.length; i++) {\n if (parts[i].startsWith(\":\")) {\n params[parts[i].slice(1)] = pathParts[i];\n } else if (parts[i] !== pathParts[i]) {\n return null;\n }\n }\n return params;\n}\n\n/**\n * Sanitize a redirect/rewrite destination by collapsing leading slashes and\n * backslashes to a single \"/\" for non-external URLs. Browsers interpret \"\\\"\n * as \"/\" in URL contexts, so \"\\/evil.com\" becomes \"//evil.com\" (protocol-relative).\n */\nfunction sanitizeDestinationLocal(dest: string): string {\n if (dest.startsWith(\"http://\") || dest.startsWith(\"https://\")) return dest;\n dest = dest.replace(/^[\\\\/]+/, \"/\");\n return dest;\n}\n\n/**\n * Apply redirect rules from next.config.js.\n * Returns true if a redirect was applied.\n */\nfunction applyRedirects(\n pathname: string,\n res: any,\n redirects: NextRedirect[],\n ctx: RequestContext,\n): boolean {\n const result = matchRedirect(pathname, redirects, ctx);\n if (result) {\n // Sanitize to prevent open redirect via protocol-relative URLs\n const dest = sanitizeDestinationLocal(result.destination);\n res.writeHead(result.permanent ? 308 : 307, { Location: dest });\n res.end();\n return true;\n }\n return false;\n}\n\n/**\n * Proxy an external rewrite in the Node.js dev server context.\n *\n * Converts the Node.js IncomingMessage into a Web Request, calls\n * proxyExternalRequest(), and pipes the response back to the Node.js\n * ServerResponse.\n */\nasync function proxyExternalRewriteNode(\n req: import(\"node:http\").IncomingMessage,\n res: import(\"node:http\").ServerResponse,\n externalUrl: string,\n): Promise<void> {\n try {\n const proto = \"http\";\n const host = req.headers.host || \"localhost\";\n const origin = `${proto}://${host}`;\n const method = req.method ?? \"GET\";\n const hasBody = method !== \"GET\" && method !== \"HEAD\";\n const init: RequestInit & { duplex?: string } = {\n method,\n headers: Object.fromEntries(\n Object.entries(req.headers)\n .filter(([, v]) => v !== undefined)\n .map(([k, v]) => [k, Array.isArray(v) ? v.join(\", \") : String(v)]),\n ),\n };\n if (hasBody) {\n const { Readable } = await import(\"node:stream\");\n init.body = Readable.toWeb(req) as unknown as ReadableStream;\n init.duplex = \"half\";\n }\n const webRequest = new Request(new URL(req.url ?? \"/\", origin), init);\n const proxyResponse = await proxyExternalRequest(webRequest, externalUrl);\n\n // Preserve multi-value headers (e.g. Set-Cookie) — Object.fromEntries()\n // would collapse them into a single value.\n const nodeHeaders: Record<string, string | string[]> = {};\n proxyResponse.headers.forEach((value, key) => {\n const existing = nodeHeaders[key];\n if (existing !== undefined) {\n nodeHeaders[key] = Array.isArray(existing)\n ? [...existing, value]\n : [existing, value];\n } else {\n nodeHeaders[key] = value;\n }\n });\n res.writeHead(proxyResponse.status, nodeHeaders);\n\n if (proxyResponse.body) {\n const { Readable: ReadableImport } = await import(\"node:stream\");\n const nodeStream = ReadableImport.fromWeb(proxyResponse.body as unknown as import(\"stream/web\").ReadableStream);\n nodeStream.pipe(res);\n } else {\n res.end();\n }\n } catch (e) {\n console.error(\"[vinext] External rewrite proxy error:\", e);\n if (!res.headersSent) {\n res.writeHead(502);\n res.end(\"Bad Gateway\");\n }\n }\n}\n\n/**\n * Apply rewrite rules from next.config.js.\n * Returns the rewritten URL or null if no rewrite matched.\n */\nfunction applyRewrites(\n pathname: string,\n rewrites: NextRewrite[],\n ctx: RequestContext,\n): string | null {\n const dest = matchRewrite(pathname, rewrites, ctx);\n if (dest) {\n // Sanitize to prevent open redirect via protocol-relative URLs\n return sanitizeDestinationLocal(dest);\n }\n return null;\n}\n\n/**\n * Apply custom header rules from next.config.js.\n */\nfunction applyHeaders(\n pathname: string,\n res: any,\n headers: NextHeader[],\n ctx: RequestContext,\n): void {\n const matched = matchHeaders(pathname, headers, ctx);\n for (const header of matched) {\n res.setHeader(header.key, header.value);\n }\n}\n\n/**\n * Find a file by name (without extension) in a directory.\n * Checks .tsx, .ts, .jsx, .js extensions.\n */\nfunction findFileWithExts(dir: string, name: string): string | null {\n const extensions = [\".tsx\", \".ts\", \".jsx\", \".js\"];\n for (const ext of extensions) {\n const filePath = path.join(dir, name + ext);\n if (fs.existsSync(filePath)) return filePath;\n }\n return null;\n}\n\n/**\n * Check if the project has .mdx files in app/ or pages/ directories.\n */\nfunction hasMdxFiles(root: string, appDir: string | null, pagesDir: string | null): boolean {\n const dirs = [appDir, pagesDir].filter(Boolean) as string[];\n for (const dir of dirs) {\n if (fs.existsSync(dir) && scanDirForMdx(dir)) return true;\n }\n return false;\n}\n\nfunction scanDirForMdx(dir: string): boolean {\n try {\n const entries = fs.readdirSync(dir, { withFileTypes: true });\n for (const entry of entries) {\n if (entry.name.startsWith(\".\") || entry.name === \"node_modules\") continue;\n const full = path.join(dir, entry.name);\n if (entry.isDirectory()) {\n if (scanDirForMdx(full)) return true;\n } else if (entry.isFile() && entry.name.endsWith(\".mdx\")) {\n return true;\n }\n }\n } catch {\n // ignore unreadable dirs\n }\n return false;\n}\n\n// Public exports for static export\nexport { staticExportPages, staticExportApp } from \"./build/static-export.js\";\nexport type { StaticExportResult, StaticExportOptions, AppStaticExportOptions } from \"./build/static-export.js\";\n\n// Exported for CLI and testing\nexport { clientManualChunks, clientOutputConfig, clientTreeshakeConfig, computeLazyChunks };\nexport { resolvePostcssStringPlugins as _resolvePostcssStringPlugins };\nexport { parseStaticObjectLiteral as _parseStaticObjectLiteral };\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Plugin, UserConfig, ViteDevServer } from \"vite\";\nimport { loadEnv, parseAst } from \"vite\";\nimport { pagesRouter, apiRouter, invalidateRouteCache, matchRoute, patternToNextFormat as pagesPatternToNextFormat, type Route } from \"./routing/pages-router.js\";\nimport { appRouter, invalidateAppRouteCache } from \"./routing/app-router.js\";\nimport { createSSRHandler } from \"./server/dev-server.js\";\nimport { handleApiRoute } from \"./server/api-handler.js\";\nimport {\n generateRscEntry,\n generateSsrEntry,\n generateBrowserEntry,\n} from \"./server/app-dev-server.js\";\nimport {\n loadNextConfig,\n resolveNextConfig,\n type ResolvedNextConfig,\n type NextRedirect,\n type NextRewrite,\n type NextHeader,\n} from \"./config/next-config.js\";\n\nimport { findMiddlewareFile, isProxyFile, runMiddleware } from \"./server/middleware.js\";\nimport { generateSafeRegExpCode, generateMiddlewareMatcherCode, generateNormalizePathCode } from \"./server/middleware-codegen.js\";\nimport { normalizePath } from \"./server/normalize-path.js\";\nimport { findInstrumentationFile, runInstrumentation } from \"./server/instrumentation.js\";\nimport { validateDevRequest } from \"./server/dev-origin-check.js\";\nimport {\n safeRegExp,\n isExternalUrl,\n proxyExternalRequest,\n parseCookies,\n matchHeaders,\n matchRedirect,\n matchRewrite,\n type RequestContext,\n} from \"./config/config-matchers.js\";\nimport { scanMetadataFiles } from \"./server/metadata-routes.js\";\nimport { staticExportPages } from \"./build/static-export.js\";\nimport { detectPackageManager } from \"./utils/project.js\";\nimport tsconfigPaths from \"vite-tsconfig-paths\";\nimport MagicString from \"magic-string\";\nimport path from \"node:path\";\nimport { fileURLToPath, pathToFileURL } from \"node:url\";\nimport { createRequire } from \"node:module\";\nimport fs from \"node:fs\";\nimport commonjs from \"vite-plugin-commonjs\";\n\nconst __dirname = path.dirname(fileURLToPath(import.meta.url));\n\n/**\n * Fetch Google Fonts CSS, download .woff2 files, cache locally, and return\n * @font-face CSS with local file references.\n *\n * Cache dir structure: .vinext/fonts/<family-hash>/\n * - style.css (the rewritten @font-face CSS)\n * - *.woff2 (downloaded font files)\n */\nasync function fetchAndCacheFont(\n cssUrl: string,\n family: string,\n cacheDir: string,\n): Promise<string> {\n // Use a hash of the URL for the cache key\n const { createHash } = await import(\"node:crypto\");\n const urlHash = createHash(\"md5\").update(cssUrl).digest(\"hex\").slice(0, 12);\n const fontDir = path.join(cacheDir, `${family.toLowerCase().replace(/\\s+/g, \"-\")}-${urlHash}`);\n\n // Check if already cached\n const cachedCSSPath = path.join(fontDir, \"style.css\");\n if (fs.existsSync(cachedCSSPath)) {\n return fs.readFileSync(cachedCSSPath, \"utf-8\");\n }\n\n // Fetch CSS from Google Fonts (woff2 user-agent gives woff2 URLs)\n const cssResponse = await fetch(cssUrl, {\n headers: {\n \"User-Agent\": \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36\",\n },\n });\n if (!cssResponse.ok) {\n throw new Error(`Failed to fetch Google Fonts CSS: ${cssResponse.status}`);\n }\n let css = await cssResponse.text();\n\n // Extract all font file URLs\n const urlRe = /url\\((https:\\/\\/fonts\\.gstatic\\.com\\/[^)]+)\\)/g;\n const urls = new Map<string, string>(); // original URL -> local filename\n let urlMatch;\n while ((urlMatch = urlRe.exec(css)) !== null) {\n const fontUrl = urlMatch[1];\n if (!urls.has(fontUrl)) {\n const ext = fontUrl.includes(\".woff2\") ? \".woff2\" : fontUrl.includes(\".woff\") ? \".woff\" : \".ttf\";\n const fileHash = createHash(\"md5\").update(fontUrl).digest(\"hex\").slice(0, 8);\n urls.set(fontUrl, `${family.toLowerCase().replace(/\\s+/g, \"-\")}-${fileHash}${ext}`);\n }\n }\n\n // Download font files\n fs.mkdirSync(fontDir, { recursive: true });\n for (const [fontUrl, filename] of urls) {\n const filePath = path.join(fontDir, filename);\n if (!fs.existsSync(filePath)) {\n const fontResponse = await fetch(fontUrl);\n if (fontResponse.ok) {\n const buffer = Buffer.from(await fontResponse.arrayBuffer());\n fs.writeFileSync(filePath, buffer);\n }\n }\n // Rewrite CSS to use relative path (Vite will resolve /@fs/ for dev, or asset for build)\n css = css.split(fontUrl).join(filePath);\n }\n\n // Cache the rewritten CSS\n fs.writeFileSync(cachedCSSPath, css);\n return css;\n}\n\n/**\n * Safely parse a static JS object literal string into a plain object.\n * Uses Vite's parseAst (Rollup/acorn) so no code is ever evaluated.\n * Returns null if the expression contains anything dynamic (function calls,\n * template literals, identifiers, computed properties, etc.).\n *\n * Supports: string literals, numeric literals, boolean literals,\n * arrays of the above, and nested object literals.\n */\nfunction parseStaticObjectLiteral(objectStr: string): Record<string, unknown> | null {\n let ast: ReturnType<typeof parseAst>;\n try {\n // Wrap in parens so the parser treats `{…}` as an expression, not a block\n ast = parseAst(`(${objectStr})`);\n } catch {\n return null;\n }\n\n // The AST should be: Program > ExpressionStatement > ObjectExpression\n const body = ast.body;\n if (body.length !== 1 || body[0].type !== \"ExpressionStatement\") return null;\n\n const expr = body[0].expression;\n if (expr.type !== \"ObjectExpression\") return null;\n\n const result = extractStaticValue(expr);\n return result === undefined ? null : (result as Record<string, unknown>);\n}\n\n/**\n * Recursively extract a static value from an ESTree AST node.\n * Returns undefined (not null) if the node contains any dynamic expression.\n *\n * Uses `any` for the node parameter because Rollup's internal ESTree types\n * (estree.Expression, estree.ObjectExpression, etc.) aren't re-exported by Vite,\n * and the recursive traversal touches many different node shapes.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction extractStaticValue(node: any): unknown {\n switch (node.type) {\n case \"Literal\":\n // String, number, boolean, null\n return node.value;\n\n case \"UnaryExpression\":\n // Handle negative numbers: -1, -3.14\n if (node.operator === \"-\" && node.argument?.type === \"Literal\" && typeof node.argument.value === \"number\") {\n return -node.argument.value;\n }\n return undefined;\n\n case \"ArrayExpression\": {\n const arr: unknown[] = [];\n for (const elem of node.elements) {\n if (!elem) return undefined; // sparse array\n const val = extractStaticValue(elem);\n if (val === undefined) return undefined;\n arr.push(val);\n }\n return arr;\n }\n\n case \"ObjectExpression\": {\n const obj: Record<string, unknown> = {};\n for (const prop of node.properties) {\n if (prop.type !== \"Property\") return undefined; // SpreadElement etc.\n if (prop.computed) return undefined; // [expr]: val\n\n // Key can be Identifier (unquoted) or Literal (quoted)\n let key: string;\n if (prop.key.type === \"Identifier\") {\n key = prop.key.name;\n } else if (prop.key.type === \"Literal\" && typeof prop.key.value === \"string\") {\n key = prop.key.value;\n } else {\n return undefined;\n }\n\n const val = extractStaticValue(prop.value);\n if (val === undefined) return undefined;\n obj[key] = val;\n }\n return obj;\n }\n\n default:\n // TemplateLiteral, CallExpression, Identifier, etc. — reject\n return undefined;\n }\n}\n\n/**\n * Detect Vite major version at runtime by resolving from cwd.\n * The plugin may be installed in a workspace root with Vite 7 but used\n * by a project that has Vite 8 — so we resolve from cwd, not from\n * the plugin's own location.\n */\nfunction getViteMajorVersion(): number {\n try {\n const require = createRequire(path.join(process.cwd(), \"package.json\"));\n const vitePkg = require(\"vite/package.json\");\n return parseInt(vitePkg.version, 10);\n } catch {\n return 7; // default to Vite 7\n }\n}\n\n/**\n * PostCSS config file names to search for, in priority order.\n * Matches the same search order as postcss-load-config / lilconfig.\n */\nconst POSTCSS_CONFIG_FILES = [\n \"postcss.config.js\",\n \"postcss.config.cjs\",\n \"postcss.config.mjs\",\n \"postcss.config.ts\",\n \"postcss.config.cts\",\n \"postcss.config.mts\",\n \".postcssrc\",\n \".postcssrc.js\",\n \".postcssrc.cjs\",\n \".postcssrc.mjs\",\n \".postcssrc.ts\",\n \".postcssrc.cts\",\n \".postcssrc.mts\",\n \".postcssrc.json\",\n \".postcssrc.yaml\",\n \".postcssrc.yml\",\n];\n\n/**\n * Resolve PostCSS string plugin names in a project's PostCSS config.\n *\n * Next.js (via postcss-load-config) resolves string plugin names in the\n * object form `{ plugins: { \"pkg-name\": opts } }` but NOT in the array form\n * `{ plugins: [\"pkg-name\"] }`. Since many Next.js projects use the array\n * form (particularly with Tailwind CSS v4), we detect this case and resolve\n * the string names to actual plugin functions so Vite can use them.\n *\n * Returns the resolved PostCSS config object to inject into Vite's\n * `css.postcss`, or `undefined` if no resolution is needed.\n */\nasync function resolvePostcssStringPlugins(\n projectRoot: string,\n): Promise<{ plugins: any[] } | undefined> {\n // Find the PostCSS config file\n let configPath: string | null = null;\n for (const name of POSTCSS_CONFIG_FILES) {\n const candidate = path.join(projectRoot, name);\n if (fs.existsSync(candidate)) {\n configPath = candidate;\n break;\n }\n }\n if (!configPath) return undefined;\n\n // Load the config file\n let config: any;\n try {\n if (configPath.endsWith(\".json\") || configPath.endsWith(\".yaml\") || configPath.endsWith(\".yml\")) {\n // JSON/YAML configs use object form — postcss-load-config handles these fine\n return undefined;\n }\n // For .postcssrc without extension, check if it's JSON\n if (configPath.endsWith(\".postcssrc\")) {\n const content = fs.readFileSync(configPath, \"utf-8\").trim();\n if (content.startsWith(\"{\")) {\n // JSON format — postcss-load-config handles object form\n return undefined;\n }\n }\n const mod = await import(pathToFileURL(configPath).href);\n config = mod.default ?? mod;\n } catch {\n // If we can't load the config, let Vite/postcss-load-config handle it\n return undefined;\n }\n\n // Only process array-form plugins that contain string entries\n // (either bare strings or tuple form [\"plugin-name\", { options }])\n if (!config || !Array.isArray(config.plugins)) return undefined;\n const hasStringPlugins = config.plugins.some(\n (p: any) =>\n typeof p === \"string\" ||\n (Array.isArray(p) && typeof p[0] === \"string\"),\n );\n if (!hasStringPlugins) return undefined;\n\n // Resolve string plugin names to actual plugin functions\n const req = createRequire(path.join(projectRoot, \"package.json\"));\n const resolved = await Promise.all(\n config.plugins.filter(Boolean).map(async (plugin: any) => {\n if (typeof plugin === \"string\") {\n const resolved = req.resolve(plugin);\n const mod = await import(pathToFileURL(resolved).href);\n const fn = mod.default ?? mod;\n // If the export is a function, call it to get the plugin instance\n return typeof fn === \"function\" ? fn() : fn;\n }\n // Array tuple form: [\"plugin-name\", { options }]\n if (Array.isArray(plugin) && typeof plugin[0] === \"string\") {\n const [name, options] = plugin;\n const resolved = req.resolve(name);\n const mod = await import(pathToFileURL(resolved).href);\n const fn = mod.default ?? mod;\n return typeof fn === \"function\" ? fn(options) : fn;\n }\n // Already a function or plugin object — pass through\n return plugin;\n }),\n );\n\n return { plugins: resolved };\n}\n\n// Virtual module IDs for Pages Router production build\nconst VIRTUAL_SERVER_ENTRY = \"virtual:vinext-server-entry\";\nconst RESOLVED_SERVER_ENTRY = \"\\0\" + VIRTUAL_SERVER_ENTRY;\nconst VIRTUAL_CLIENT_ENTRY = \"virtual:vinext-client-entry\";\nconst RESOLVED_CLIENT_ENTRY = \"\\0\" + VIRTUAL_CLIENT_ENTRY;\n\n// Virtual module IDs for App Router entries\nconst VIRTUAL_RSC_ENTRY = \"virtual:vinext-rsc-entry\";\nconst RESOLVED_RSC_ENTRY = \"\\0\" + VIRTUAL_RSC_ENTRY;\nconst VIRTUAL_APP_SSR_ENTRY = \"virtual:vinext-app-ssr-entry\";\nconst RESOLVED_APP_SSR_ENTRY = \"\\0\" + VIRTUAL_APP_SSR_ENTRY;\nconst VIRTUAL_APP_BROWSER_ENTRY = \"virtual:vinext-app-browser-entry\";\nconst RESOLVED_APP_BROWSER_ENTRY = \"\\0\" + VIRTUAL_APP_BROWSER_ENTRY;\n\n/** Image file extensions handled by the vinext:image-imports plugin.\n * Shared between the Rolldown hook filter and the transform handler regex. */\nconst IMAGE_EXTS = \"png|jpe?g|gif|webp|avif|svg|ico|bmp|tiff?\";\n\n/**\n * Extract the npm package name from a module ID (file path).\n * Returns null if not in node_modules.\n *\n * Handles scoped packages (@org/pkg) and pnpm-style paths\n * (node_modules/.pnpm/pkg@ver/node_modules/pkg).\n */\nfunction getPackageName(id: string): string | null {\n const nmIdx = id.lastIndexOf(\"node_modules/\");\n if (nmIdx === -1) return null;\n const rest = id.slice(nmIdx + \"node_modules/\".length);\n if (rest.startsWith(\"@\")) {\n // Scoped package: @org/pkg\n const parts = rest.split(\"/\");\n return parts.length >= 2 ? parts[0] + \"/\" + parts[1] : null;\n }\n return rest.split(\"/\")[0] || null;\n}\n\n/** Absolute path to vinext's shims directory, used by clientManualChunks. */\nconst _shimsDir = path.resolve(__dirname, \"shims\") + \"/\";\n\n/**\n * manualChunks function for client builds.\n *\n * Splits the client bundle into:\n * - \"framework\" — React, ReactDOM, and scheduler (loaded on every page)\n * - \"vinext\" — vinext shims (router, head, link, etc.)\n *\n * All other vendor code is left to Rollup's default chunk-splitting\n * algorithm. Rollup automatically deduplicates shared modules into\n * common chunks based on the import graph — no manual intervention\n * needed.\n *\n * Why not split every npm package into its own chunk?\n * - Per-package splitting (`vendor-X`) creates 50-200+ chunks for a\n * typical app, far exceeding the ~25-request sweet spot for HTTP/2.\n * - gzip/brotli compress small files poorly — each file restarts with\n * an empty dictionary, losing ~5-15% total compressed size vs fewer\n * larger chunks (Khan Academy measured +2.5% wire size with 10x\n * more files containing less raw code).\n * - ES module evaluation has per-module overhead that compounds on\n * mobile devices.\n * - No major Vite-based framework (Remix, SvelteKit, Astro, TanStack)\n * uses per-package splitting. Next.js only isolates packages >160KB.\n * - Rollup's graph-based splitting already handles the common case\n * well: shared dependencies between routes get their own chunks,\n * and route-specific code stays in route chunks.\n */\nfunction clientManualChunks(id: string): string | undefined {\n // React framework — always loaded, shared across all pages.\n // Isolating React into its own chunk is the single highest-value\n // split: it's ~130KB compressed, loaded on every page, and its\n // content hash rarely changes between deploys.\n if (id.includes(\"node_modules\")) {\n const pkg = getPackageName(id);\n if (!pkg) return undefined;\n if (\n pkg === \"react\" ||\n pkg === \"react-dom\" ||\n pkg === \"scheduler\"\n ) {\n return \"framework\";\n }\n // Let Rollup handle all other vendor code via its default\n // graph-based splitting. This produces a reasonable number of\n // shared chunks (typically 5-15) based on actual import patterns,\n // with good compression efficiency.\n return undefined;\n }\n\n // vinext shims — small runtime, shared across all pages.\n // Use the absolute shims directory path to avoid matching user files\n // that happen to have \"/shims/\" in their path.\n if (id.startsWith(_shimsDir)) {\n return \"vinext\";\n }\n\n return undefined;\n}\n\n/**\n * Rollup output config with manualChunks for client code-splitting.\n * Used by both CLI builds and multi-environment builds.\n *\n * experimentalMinChunkSize merges tiny shared chunks (< 10KB) back into\n * their importers. This reduces HTTP request count and improves gzip\n * compression efficiency — small files restart the compression dictionary,\n * adding ~5-15% wire overhead vs fewer larger chunks.\n */\nconst clientOutputConfig = {\n manualChunks: clientManualChunks,\n experimentalMinChunkSize: 10_000,\n};\n\n/**\n * Rollup treeshake configuration for production client builds.\n *\n * Uses the 'recommended' preset as a safe base, then overrides\n * moduleSideEffects to strip unused re-exports from npm packages.\n *\n * The 'no-external' value for moduleSideEffects means:\n * - Local project modules: preserve side effects (CSS imports, polyfills)\n * - node_modules packages: treat as side-effect-free unless exports are used\n *\n * This is the single highest-impact optimization for large barrel-exporting\n * libraries like mermaid, @mui/material, lucide-react, etc. These libraries\n * re-export hundreds of sub-modules through barrel files. Without this,\n * Rollup preserves every sub-module even when only a few exports are consumed.\n *\n * Why 'no-external' instead of false (global side-effect-free)?\n * - User code may rely on import-time side effects (e.g., `import './global.css'`)\n * - 'no-external' is safe for app code while still enabling aggressive DCE for deps\n *\n * Why not the 'smallest' preset?\n * - 'smallest' also sets propertyReadSideEffects: false and\n * tryCatchDeoptimization: false, which can break specific libraries\n * that rely on property access side effects or try/catch for feature detection\n * - 'recommended' + 'no-external' gives most of the benefit with less risk\n */\nconst clientTreeshakeConfig = {\n preset: \"recommended\" as const,\n moduleSideEffects: \"no-external\" as const,\n};\n\n/**\n * Compute the set of chunk filenames that are ONLY reachable through dynamic\n * imports (i.e. behind React.lazy(), next/dynamic, or manual import()).\n *\n * These chunks should NOT be modulepreloaded in the HTML — they will be\n * fetched on demand when the dynamic import executes.\n *\n * Algorithm: Starting from all entry chunks in the build manifest, walk the\n * static `imports` tree (breadth-first). Any chunk file NOT reached by this\n * walk is only reachable through `dynamicImports` and is therefore \"lazy\".\n *\n * @param buildManifest - Vite's build manifest (manifest.json), which is a\n * Record<string, ManifestChunk> where each chunk has `file`, `imports`,\n * `dynamicImports`, `isEntry`, and `isDynamicEntry` fields.\n * @returns Array of chunk filenames (e.g. \"assets/mermaid-NOHMQCX5.js\") that\n * should be excluded from modulepreload hints.\n */\nfunction computeLazyChunks(\n buildManifest: Record<string, {\n file: string;\n isEntry?: boolean;\n isDynamicEntry?: boolean;\n imports?: string[];\n dynamicImports?: string[];\n css?: string[];\n }>\n): string[] {\n // Collect all chunk files that are statically reachable from entries\n const eagerFiles = new Set<string>();\n const visited = new Set<string>();\n const queue: string[] = [];\n\n // Start BFS from all entry chunks\n for (const key of Object.keys(buildManifest)) {\n const chunk = buildManifest[key];\n if (chunk.isEntry) {\n queue.push(key);\n }\n }\n\n while (queue.length > 0) {\n const key = queue.shift()!;\n if (visited.has(key)) continue;\n visited.add(key);\n\n const chunk = buildManifest[key];\n if (!chunk) continue;\n\n // Mark this chunk's file as eager\n eagerFiles.add(chunk.file);\n\n // Also mark its CSS as eager (CSS should always be preloaded to avoid FOUC)\n if (chunk.css) {\n for (const cssFile of chunk.css) {\n eagerFiles.add(cssFile);\n }\n }\n\n // Follow only static imports — NOT dynamicImports\n if (chunk.imports) {\n for (const imp of chunk.imports) {\n if (!visited.has(imp)) {\n queue.push(imp);\n }\n }\n }\n }\n\n // Any JS file in the manifest that's NOT in eagerFiles is a lazy chunk\n const lazyChunks: string[] = [];\n const allFiles = new Set<string>();\n for (const key of Object.keys(buildManifest)) {\n const chunk = buildManifest[key];\n if (chunk.file && !allFiles.has(chunk.file)) {\n allFiles.add(chunk.file);\n if (!eagerFiles.has(chunk.file) && chunk.file.endsWith(\".js\")) {\n lazyChunks.push(chunk.file);\n }\n }\n }\n\n return lazyChunks;\n}\n\nexport interface VinextOptions {\n /**\n * Base directory containing the app/ and pages/ directories.\n * Can be an absolute path or a path relative to the Vite root.\n *\n * By default, vinext auto-detects: checks for app/ and pages/ at the\n * project root first, then falls back to src/app/ and src/pages/.\n */\n appDir?: string;\n /**\n * Auto-register @vitejs/plugin-rsc when an app/ directory is detected.\n * Set to `false` to disable auto-registration (e.g. if you configure\n * @vitejs/plugin-rsc manually with custom options).\n * @default true\n */\n rsc?: boolean;\n}\n\nexport default function vinext(options: VinextOptions = {}): Plugin[] {\n let root: string;\n let pagesDir: string;\n let appDir: string;\n let hasAppDir = false;\n let hasPagesDir = false;\n let nextConfig: ResolvedNextConfig;\n let middlewarePath: string | null = null;\n let instrumentationPath: string | null = null;\n let hasCloudflarePlugin = false;\n let hasNitroPlugin = false;\n\n // Resolve shim paths - works both from source (.ts) and built (.js)\n const shimsDir = path.resolve(__dirname, \"shims\");\n\n // Shim alias map — populated in config(), used by resolveId() for .js variants\n let nextShimMap: Record<string, string> = {};\n\n /**\n * Generate the virtual SSR server entry module.\n * This is the entry point for `vite build --ssr`.\n */\n async function generateServerEntry(): Promise<string> {\n const pageRoutes = await pagesRouter(pagesDir);\n const apiRoutes = await apiRouter(pagesDir);\n\n // Generate import statements using absolute paths since virtual\n // modules don't have a real file location for relative resolution.\n const pageImports = pageRoutes.map((r: Route, i: number) => {\n const absPath = r.filePath.replace(/\\\\/g, \"/\");\n return `import * as page_${i} from ${JSON.stringify(absPath)};`;\n });\n\n const apiImports = apiRoutes.map((r: Route, i: number) => {\n const absPath = r.filePath.replace(/\\\\/g, \"/\");\n return `import * as api_${i} from ${JSON.stringify(absPath)};`;\n });\n\n // Build the route table — include filePath for SSR manifest lookup\n const pageRouteEntries = pageRoutes.map((r: Route, i: number) => {\n const absPath = r.filePath.replace(/\\\\/g, \"/\");\n return ` { pattern: ${JSON.stringify(r.pattern)}, isDynamic: ${r.isDynamic}, params: ${JSON.stringify(r.params)}, module: page_${i}, filePath: ${JSON.stringify(absPath)} }`;\n });\n\n const apiRouteEntries = apiRoutes.map((r: Route, i: number) => {\n return ` { pattern: ${JSON.stringify(r.pattern)}, isDynamic: ${r.isDynamic}, params: ${JSON.stringify(r.params)}, module: api_${i} }`;\n });\n\n // Check for _app and _document\n const hasApp = fs.existsSync(path.join(pagesDir, \"_app.tsx\")) || fs.existsSync(path.join(pagesDir, \"_app.jsx\")) || fs.existsSync(path.join(pagesDir, \"_app.ts\")) || fs.existsSync(path.join(pagesDir, \"_app.js\"));\n const hasDoc = fs.existsSync(path.join(pagesDir, \"_document.tsx\")) || fs.existsSync(path.join(pagesDir, \"_document.jsx\")) || fs.existsSync(path.join(pagesDir, \"_document.ts\")) || fs.existsSync(path.join(pagesDir, \"_document.js\"));\n\n // Use absolute paths for _app and _document too\n const appFileBase = path.join(pagesDir, \"_app\").replace(/\\\\/g, \"/\");\n const docFileBase = path.join(pagesDir, \"_document\").replace(/\\\\/g, \"/\");\n\n const appImportCode = hasApp\n ? `import { default as AppComponent } from ${JSON.stringify(appFileBase)};`\n : `const AppComponent = null;`;\n\n const docImportCode = hasDoc\n ? `import { default as DocumentComponent } from ${JSON.stringify(docFileBase)};`\n : `const DocumentComponent = null;`;\n\n // Serialize i18n config for embedding in the server entry\n const i18nConfigJson = nextConfig?.i18n\n ? JSON.stringify({\n locales: nextConfig.i18n.locales,\n defaultLocale: nextConfig.i18n.defaultLocale,\n localeDetection: nextConfig.i18n.localeDetection,\n })\n : \"null\";\n\n // Serialize the full resolved config for the production server.\n // This embeds redirects, rewrites, headers, basePath, trailingSlash\n // so prod-server.ts can apply them without loading next.config.js at runtime.\n const vinextConfigJson = JSON.stringify({\n basePath: nextConfig?.basePath ?? \"\",\n trailingSlash: nextConfig?.trailingSlash ?? false,\n redirects: nextConfig?.redirects ?? [],\n rewrites: nextConfig?.rewrites ?? { beforeFiles: [], afterFiles: [], fallback: [] },\n headers: nextConfig?.headers ?? [],\n i18n: nextConfig?.i18n ?? null,\n images: {\n deviceSizes: nextConfig?.images?.deviceSizes,\n imageSizes: nextConfig?.images?.imageSizes,\n dangerouslyAllowSVG: nextConfig?.images?.dangerouslyAllowSVG,\n contentDispositionType: nextConfig?.images?.contentDispositionType,\n contentSecurityPolicy: nextConfig?.images?.contentSecurityPolicy,\n },\n });\n\n // Generate middleware code if middleware.ts exists\n const middlewareImportCode = middlewarePath\n ? `import * as middlewareModule from ${JSON.stringify(middlewarePath.replace(/\\\\/g, \"/\"))};\nimport { NextRequest } from \"next/server\";`\n : \"\";\n\n // The matcher config is read from the middleware module at import time.\n // We inline the matching + execution logic so the prod server can call it.\n const middlewareExportCode = middlewarePath\n ? `\n// --- Middleware support (generated from middleware-codegen.ts) ---\n${generateNormalizePathCode(\"es5\")}\n${generateSafeRegExpCode(\"es5\")}\n${generateMiddlewareMatcherCode(\"es5\")}\n\nexport async function runMiddleware(request) {\n var isProxy = ${middlewarePath ? JSON.stringify(isProxyFile(middlewarePath)) : \"false\"};\n var middlewareFn = isProxy\n ? (middlewareModule.proxy ?? middlewareModule.default)\n : (middlewareModule.middleware ?? middlewareModule.default);\n if (typeof middlewareFn !== \"function\") {\n var fileType = isProxy ? \"Proxy\" : \"Middleware\";\n var expectedExport = isProxy ? \"proxy\" : \"middleware\";\n throw new Error(\"The \" + fileType + \" file must export a function named \\`\" + expectedExport + \"\\` or a \\`default\\` function.\");\n }\n\n var config = middlewareModule.config;\n var matcher = config && config.matcher;\n var url = new URL(request.url);\n\n // Normalize pathname before matching to prevent path-confusion bypasses\n // (percent-encoding like /%61dmin, double slashes like /dashboard//settings).\n var decodedPathname;\n try { decodedPathname = decodeURIComponent(url.pathname); } catch (e) {\n return { continue: false, response: new Response(\"Bad Request\", { status: 400 }) };\n }\n var normalizedPathname = __normalizePath(decodedPathname);\n\n if (!matchesMiddleware(normalizedPathname, matcher)) return { continue: true };\n\n // Construct a new Request with the decoded + normalized pathname so middleware\n // always sees the same canonical path that the router uses.\n var mwRequest = request;\n if (normalizedPathname !== url.pathname) {\n var mwUrl = new URL(url);\n mwUrl.pathname = normalizedPathname;\n mwRequest = new Request(mwUrl, request);\n }\n var nextRequest = mwRequest instanceof NextRequest ? mwRequest : new NextRequest(mwRequest);\n var response;\n try { response = await middlewareFn(nextRequest); }\n catch (e) {\n console.error(\"[vinext] Middleware error:\", e);\n return { continue: false, response: new Response(\"Internal Server Error\", { status: 500 }) };\n }\n\n if (!response) return { continue: true };\n\n if (response.headers.get(\"x-middleware-next\") === \"1\") {\n var rHeaders = new Headers();\n for (var [key, value] of response.headers) {\n // Keep x-middleware-request-* headers so the production server can\n // apply middleware-request header overrides before stripping internals\n // from the final client response.\n if (\n !key.startsWith(\"x-middleware-\") ||\n key.startsWith(\"x-middleware-request-\")\n ) rHeaders.append(key, value);\n }\n return { continue: true, responseHeaders: rHeaders };\n }\n\n if (response.status >= 300 && response.status < 400) {\n var location = response.headers.get(\"Location\") || response.headers.get(\"location\");\n if (location) return { continue: false, redirectUrl: location, redirectStatus: response.status };\n }\n\n var rewriteUrl = response.headers.get(\"x-middleware-rewrite\");\n if (rewriteUrl) {\n var rwHeaders = new Headers();\n for (var [k, v] of response.headers) {\n if (!k.startsWith(\"x-middleware-\") || k.startsWith(\"x-middleware-request-\")) rwHeaders.append(k, v);\n }\n var rewritePath;\n try { var parsed = new URL(rewriteUrl, request.url); rewritePath = parsed.pathname + parsed.search; }\n catch { rewritePath = rewriteUrl; }\n return { continue: true, rewriteUrl: rewritePath, rewriteStatus: response.status !== 200 ? response.status : undefined, responseHeaders: rwHeaders };\n }\n\n return { continue: false, response: response };\n}\n`\n : `\nexport async function runMiddleware() { return { continue: true }; }\n`;\n\n // The server entry is a self-contained module that uses Web-standard APIs\n // (Request/Response, renderToReadableStream) so it runs on Cloudflare Workers.\n return `\nimport React from \"react\";\nimport { renderToReadableStream } from \"react-dom/server.edge\";\nimport { resetSSRHead, getSSRHeadHTML } from \"next/head\";\nimport { flushPreloads } from \"next/dynamic\";\nimport { setSSRContext, wrapWithRouterContext } from \"next/router\";\nimport { getCacheHandler } from \"next/cache\";\nimport { runWithFetchCache } from \"vinext/fetch-cache\";\nimport { _runWithCacheState } from \"next/cache\";\nimport { runWithPrivateCache } from \"vinext/cache-runtime\";\nimport { runWithRouterState } from \"vinext/router-state\";\nimport { runWithHeadState } from \"vinext/head-state\";\nimport { safeJsonStringify } from \"vinext/html\";\nimport { getSSRFontLinks as _getSSRFontLinks, getSSRFontStyles as _getSSRFontStylesGoogle, getSSRFontPreloads as _getSSRFontPreloadsGoogle } from \"next/font/google\";\nimport { getSSRFontStyles as _getSSRFontStylesLocal, getSSRFontPreloads as _getSSRFontPreloadsLocal } from \"next/font/local\";\n${middlewareImportCode}\n\n// i18n config (embedded at build time)\nconst i18nConfig = ${i18nConfigJson};\n\n// Full resolved config for production server (embedded at build time)\nexport const vinextConfig = ${vinextConfigJson};\n\n// ISR cache helpers (inlined for the server entry)\nasync function isrGet(key) {\n const handler = getCacheHandler();\n const result = await handler.get(key);\n if (!result || !result.value) return null;\n return { value: result, isStale: result.cacheState === \"stale\" };\n}\nasync function isrSet(key, data, revalidateSeconds, tags) {\n const handler = getCacheHandler();\n await handler.set(key, data, { revalidate: revalidateSeconds, tags: tags || [] });\n}\nconst pendingRegenerations = new Map();\nfunction triggerBackgroundRegeneration(key, renderFn) {\n if (pendingRegenerations.has(key)) return;\n const promise = renderFn()\n .catch((err) => console.error(\"[vinext] ISR regen failed for \" + key + \":\", err))\n .finally(() => pendingRegenerations.delete(key));\n pendingRegenerations.set(key, promise);\n}\n\nasync function renderToStringAsync(element) {\n const stream = await renderToReadableStream(element);\n await stream.allReady;\n return new Response(stream).text();\n}\n\n${pageImports.join(\"\\n\")}\n${apiImports.join(\"\\n\")}\n\n${appImportCode}\n${docImportCode}\n\nconst pageRoutes = [\n${pageRouteEntries.join(\",\\n\")}\n];\n\nconst apiRoutes = [\n${apiRouteEntries.join(\",\\n\")}\n];\n\nfunction matchRoute(url, routes) {\n const pathname = url.split(\"?\")[0];\n let normalizedUrl = pathname === \"/\" ? \"/\" : pathname.replace(/\\\\/$/, \"\");\n // NOTE: Do NOT decodeURIComponent here. The pathname is already decoded at\n // the entry point. Decoding again would create a double-decode vector.\n for (const route of routes) {\n const params = matchPattern(normalizedUrl, route.pattern);\n if (params !== null) return { route, params };\n }\n return null;\n}\n\nfunction matchPattern(url, pattern) {\n const urlParts = url.split(\"/\").filter(Boolean);\n const patternParts = pattern.split(\"/\").filter(Boolean);\n const params = Object.create(null);\n for (let i = 0; i < patternParts.length; i++) {\n const pp = patternParts[i];\n if (pp.endsWith(\"+\")) {\n const paramName = pp.slice(1, -1);\n const remaining = urlParts.slice(i);\n if (remaining.length === 0) return null;\n params[paramName] = remaining;\n return params;\n }\n if (pp.endsWith(\"*\")) {\n const paramName = pp.slice(1, -1);\n params[paramName] = urlParts.slice(i);\n return params;\n }\n if (pp.startsWith(\":\")) {\n if (i >= urlParts.length) return null;\n params[pp.slice(1)] = urlParts[i];\n continue;\n }\n if (i >= urlParts.length || urlParts[i] !== pp) return null;\n }\n if (urlParts.length !== patternParts.length) return null;\n return params;\n}\n\nfunction parseQuery(url) {\n const qs = url.split(\"?\")[1];\n if (!qs) return {};\n const p = new URLSearchParams(qs);\n const q = {};\n for (const [k, v] of p) {\n if (k in q) {\n q[k] = Array.isArray(q[k]) ? q[k].concat(v) : [q[k], v];\n } else {\n q[k] = v;\n }\n }\n return q;\n}\n\nfunction patternToNextFormat(pattern) {\n return pattern\n .replace(/:([\\\\w]+)\\\\*/g, \"[[...$1]]\")\n .replace(/:([\\\\w]+)\\\\+/g, \"[...$1]\")\n .replace(/:([\\\\w]+)/g, \"[$1]\");\n}\n\nfunction collectAssetTags(manifest, moduleIds) {\n // Fall back to embedded manifest (set by vinext:cloudflare-build for Workers)\n const m = (manifest && Object.keys(manifest).length > 0)\n ? manifest\n : (typeof globalThis !== \"undefined\" && globalThis.__VINEXT_SSR_MANIFEST__) || null;\n const tags = [];\n const seen = new Set();\n\n // Load the set of lazy chunk filenames (only reachable via dynamic imports).\n // These should NOT get <link rel=\"modulepreload\"> or <script type=\"module\">\n // tags — they are fetched on demand when the dynamic import() executes (e.g.\n // chunks behind React.lazy() or next/dynamic boundaries).\n var lazyChunks = (typeof globalThis !== \"undefined\" && globalThis.__VINEXT_LAZY_CHUNKS__) || null;\n var lazySet = lazyChunks && lazyChunks.length > 0 ? new Set(lazyChunks) : null;\n\n // Inject the client entry script if embedded by vinext:cloudflare-build\n if (typeof globalThis !== \"undefined\" && globalThis.__VINEXT_CLIENT_ENTRY__) {\n const entry = globalThis.__VINEXT_CLIENT_ENTRY__;\n seen.add(entry);\n tags.push('<link rel=\"modulepreload\" href=\"/' + entry + '\" />');\n tags.push('<script type=\"module\" src=\"/' + entry + '\" crossorigin></script>');\n }\n if (m) {\n // Always inject shared chunks (framework, vinext runtime, entry) and\n // page-specific chunks. The manifest maps module file paths to their\n // associated JS/CSS assets.\n //\n // For page-specific injection, the module IDs may be absolute paths\n // while the manifest uses relative paths. Try both the original ID\n // and a suffix match to find the correct manifest entry.\n var allFiles = [];\n\n if (moduleIds && moduleIds.length > 0) {\n // Collect assets for the requested page modules\n for (var mi = 0; mi < moduleIds.length; mi++) {\n var id = moduleIds[mi];\n var files = m[id];\n if (!files) {\n // Absolute path didn't match — try matching by suffix.\n // Manifest keys are relative (e.g. \"pages/about.tsx\") while\n // moduleIds may be absolute (e.g. \"/home/.../pages/about.tsx\").\n for (var mk in m) {\n if (id.endsWith(\"/\" + mk) || id === mk) {\n files = m[mk];\n break;\n }\n }\n }\n if (files) {\n for (var fi = 0; fi < files.length; fi++) allFiles.push(files[fi]);\n }\n }\n\n // Also inject shared chunks that every page needs: framework,\n // vinext runtime, and the entry bootstrap. These are identified\n // by scanning all manifest values for chunk filenames containing\n // known prefixes.\n for (var key in m) {\n var vals = m[key];\n if (!vals) continue;\n for (var vi = 0; vi < vals.length; vi++) {\n var file = vals[vi];\n var basename = file.split(\"/\").pop() || \"\";\n if (\n basename.startsWith(\"framework-\") ||\n basename.startsWith(\"vinext-\") ||\n basename.includes(\"vinext-client-entry\") ||\n basename.includes(\"vinext-app-browser-entry\")\n ) {\n allFiles.push(file);\n }\n }\n }\n } else {\n // No specific modules — include all assets from manifest\n for (var akey in m) {\n var avals = m[akey];\n if (avals) {\n for (var ai = 0; ai < avals.length; ai++) allFiles.push(avals[ai]);\n }\n }\n }\n\n for (var ti = 0; ti < allFiles.length; ti++) {\n var tf = allFiles[ti];\n // Normalize: Vite's SSR manifest values include a leading '/'\n // (from base path), but we prepend '/' ourselves when building\n // href/src attributes. Strip any existing leading slash to avoid\n // producing protocol-relative URLs like \"//assets/chunk.js\".\n // This also ensures consistent keys for the seen-set dedup and\n // lazySet.has() checks (which use values without leading slash).\n if (tf.charAt(0) === '/') tf = tf.slice(1);\n if (seen.has(tf)) continue;\n seen.add(tf);\n if (tf.endsWith(\".css\")) {\n tags.push('<link rel=\"stylesheet\" href=\"/' + tf + '\" />');\n } else if (tf.endsWith(\".js\")) {\n // Skip lazy chunks — they are behind dynamic import() boundaries\n // (React.lazy, next/dynamic) and should only be fetched on demand.\n if (lazySet && lazySet.has(tf)) continue;\n tags.push('<link rel=\"modulepreload\" href=\"/' + tf + '\" />');\n tags.push('<script type=\"module\" src=\"/' + tf + '\" crossorigin></script>');\n }\n }\n }\n return tags.join(\"\\\\n \");\n}\n\n// i18n helpers\nfunction extractLocale(url) {\n if (!i18nConfig) return { locale: undefined, url, hadPrefix: false };\n const pathname = url.split(\"?\")[0];\n const parts = pathname.split(\"/\").filter(Boolean);\n const query = url.includes(\"?\") ? url.slice(url.indexOf(\"?\")) : \"\";\n if (parts.length > 0 && i18nConfig.locales.includes(parts[0])) {\n const locale = parts[0];\n const rest = \"/\" + parts.slice(1).join(\"/\");\n return { locale, url: (rest || \"/\") + query, hadPrefix: true };\n }\n return { locale: i18nConfig.defaultLocale, url, hadPrefix: false };\n}\n\nfunction detectLocaleFromHeaders(headers) {\n if (!i18nConfig) return null;\n const acceptLang = headers.get(\"accept-language\");\n if (!acceptLang) return null;\n const langs = acceptLang.split(\",\").map(function(part) {\n const pieces = part.trim().split(\";\");\n const q = pieces[1] ? parseFloat(pieces[1].replace(\"q=\", \"\")) : 1;\n return { lang: pieces[0].trim().toLowerCase(), q: q };\n }).sort(function(a, b) { return b.q - a.q; });\n for (let k = 0; k < langs.length; k++) {\n const lang = langs[k].lang;\n for (let j = 0; j < i18nConfig.locales.length; j++) {\n if (i18nConfig.locales[j].toLowerCase() === lang) return i18nConfig.locales[j];\n }\n const prefix = lang.split(\"-\")[0];\n for (let j = 0; j < i18nConfig.locales.length; j++) {\n const loc = i18nConfig.locales[j].toLowerCase();\n if (loc === prefix || loc.startsWith(prefix + \"-\")) return i18nConfig.locales[j];\n }\n }\n return null;\n}\n\nfunction parseCookieLocaleFromHeader(cookieHeader) {\n if (!i18nConfig || !cookieHeader) return null;\n const match = cookieHeader.match(/(?:^|;\\\\s*)NEXT_LOCALE=([^;]*)/);\n if (!match) return null;\n var value;\n try { value = decodeURIComponent(match[1].trim()); } catch (e) { return null; }\n if (i18nConfig.locales.indexOf(value) !== -1) return value;\n return null;\n}\n\nfunction parseCookies(cookieHeader) {\n const cookies = {};\n if (!cookieHeader) return cookies;\n for (const part of cookieHeader.split(\";\")) {\n const [key, ...rest] = part.split(\"=\");\n if (key) cookies[key.trim()] = rest.join(\"=\").trim();\n }\n return cookies;\n}\n\n// Lightweight req/res facade for getServerSideProps and API routes.\n// Next.js pages expect ctx.req/ctx.res with Node-like shapes.\nfunction createReqRes(request, url, query, body) {\n const headersObj = {};\n for (const [k, v] of request.headers) headersObj[k.toLowerCase()] = v;\n\n const req = {\n method: request.method,\n url: url,\n headers: headersObj,\n query: query,\n body: body,\n cookies: parseCookies(request.headers.get(\"cookie\")),\n };\n\n let resStatusCode = 200;\n const resHeaders = {};\n // set-cookie needs array support (multiple Set-Cookie headers are common)\n const setCookieHeaders = [];\n let resBody = null;\n let ended = false;\n let resolveResponse;\n const responsePromise = new Promise(function(r) { resolveResponse = r; });\n\n const res = {\n get statusCode() { return resStatusCode; },\n set statusCode(code) { resStatusCode = code; },\n writeHead: function(code, headers) {\n resStatusCode = code;\n if (headers) {\n for (const [k, v] of Object.entries(headers)) {\n if (k.toLowerCase() === \"set-cookie\") {\n if (Array.isArray(v)) { for (const c of v) setCookieHeaders.push(c); }\n else { setCookieHeaders.push(v); }\n } else {\n resHeaders[k] = v;\n }\n }\n }\n return res;\n },\n setHeader: function(name, value) {\n if (name.toLowerCase() === \"set-cookie\") {\n if (Array.isArray(value)) { for (const c of value) setCookieHeaders.push(c); }\n else { setCookieHeaders.push(value); }\n } else {\n resHeaders[name.toLowerCase()] = value;\n }\n return res;\n },\n getHeader: function(name) {\n if (name.toLowerCase() === \"set-cookie\") return setCookieHeaders.length > 0 ? setCookieHeaders : undefined;\n return resHeaders[name.toLowerCase()];\n },\n end: function(data) {\n if (ended) return;\n ended = true;\n if (data !== undefined && data !== null) resBody = data;\n const h = new Headers(resHeaders);\n for (const c of setCookieHeaders) h.append(\"set-cookie\", c);\n resolveResponse(new Response(resBody, { status: resStatusCode, headers: h }));\n },\n status: function(code) { resStatusCode = code; return res; },\n json: function(data) {\n resHeaders[\"content-type\"] = \"application/json\";\n res.end(JSON.stringify(data));\n },\n send: function(data) {\n if (typeof data === \"object\" && data !== null) { res.json(data); }\n else { if (!resHeaders[\"content-type\"]) resHeaders[\"content-type\"] = \"text/plain\"; res.end(String(data)); }\n },\n redirect: function(statusOrUrl, url2) {\n if (typeof statusOrUrl === \"string\") { res.writeHead(307, { Location: statusOrUrl }); }\n else { res.writeHead(statusOrUrl, { Location: url2 }); }\n res.end();\n },\n };\n\n return { req, res, responsePromise };\n}\n\n/**\n * Read request body as text with a size limit.\n * Throws if the body exceeds maxBytes. This prevents DoS via chunked\n * transfer encoding where Content-Length is absent or spoofed.\n */\nasync function readBodyWithLimit(request, maxBytes) {\n if (!request.body) return \"\";\n var reader = request.body.getReader();\n var decoder = new TextDecoder();\n var chunks = [];\n var totalSize = 0;\n for (;;) {\n var result = await reader.read();\n if (result.done) break;\n totalSize += result.value.byteLength;\n if (totalSize > maxBytes) {\n reader.cancel();\n throw new Error(\"Request body too large\");\n }\n chunks.push(decoder.decode(result.value, { stream: true }));\n }\n chunks.push(decoder.decode());\n return chunks.join(\"\");\n}\n\nexport async function renderPage(request, url, manifest) {\n const localeInfo = extractLocale(url);\n const locale = localeInfo.locale;\n const routeUrl = localeInfo.url;\n const cookieHeader = request.headers.get(\"cookie\") || \"\";\n\n // i18n redirect: check NEXT_LOCALE cookie first, then Accept-Language\n if (i18nConfig && !localeInfo.hadPrefix) {\n const cookieLocale = parseCookieLocaleFromHeader(cookieHeader);\n if (cookieLocale && cookieLocale !== i18nConfig.defaultLocale) {\n return new Response(null, { status: 307, headers: { Location: \"/\" + cookieLocale + routeUrl } });\n }\n if (!cookieLocale && i18nConfig.localeDetection !== false) {\n const detected = detectLocaleFromHeaders(request.headers);\n if (detected && detected !== i18nConfig.defaultLocale) {\n return new Response(null, { status: 307, headers: { Location: \"/\" + detected + routeUrl } });\n }\n }\n }\n\n const match = matchRoute(routeUrl, pageRoutes);\n if (!match) {\n return new Response(\"<!DOCTYPE html><html><body><h1>404 - Page not found</h1></body></html>\",\n { status: 404, headers: { \"Content-Type\": \"text/html\" } });\n }\n\n const { route, params } = match;\n return runWithRouterState(() =>\n runWithHeadState(() =>\n _runWithCacheState(() =>\n runWithPrivateCache(() =>\n runWithFetchCache(async () => {\n try {\n if (typeof setSSRContext === \"function\") {\n setSSRContext({\n pathname: routeUrl.split(\"?\")[0],\n query: { ...params, ...parseQuery(routeUrl) },\n asPath: routeUrl,\n locale: locale,\n locales: i18nConfig ? i18nConfig.locales : undefined,\n defaultLocale: i18nConfig ? i18nConfig.defaultLocale : undefined,\n });\n }\n\n if (i18nConfig) {\n globalThis.__VINEXT_LOCALE__ = locale;\n globalThis.__VINEXT_LOCALES__ = i18nConfig.locales;\n globalThis.__VINEXT_DEFAULT_LOCALE__ = i18nConfig.defaultLocale;\n }\n\n const pageModule = route.module;\n const PageComponent = pageModule.default;\n if (!PageComponent) {\n return new Response(\"Page has no default export\", { status: 500 });\n }\n\n // Handle getStaticPaths for dynamic routes\n if (typeof pageModule.getStaticPaths === \"function\" && route.isDynamic) {\n const pathsResult = await pageModule.getStaticPaths({\n locales: i18nConfig ? i18nConfig.locales : [],\n defaultLocale: i18nConfig ? i18nConfig.defaultLocale : \"\",\n });\n const fallback = pathsResult && pathsResult.fallback !== undefined ? pathsResult.fallback : false;\n\n if (fallback === false) {\n const paths = pathsResult && pathsResult.paths ? pathsResult.paths : [];\n const isValidPath = paths.some(function(p) {\n return Object.entries(p.params).every(function(entry) {\n var key = entry[0], val = entry[1];\n var actual = params[key];\n if (Array.isArray(val)) {\n return Array.isArray(actual) && val.join(\"/\") === actual.join(\"/\");\n }\n return String(val) === String(actual);\n });\n });\n if (!isValidPath) {\n return new Response(\"<!DOCTYPE html><html><body><h1>404 - Page not found</h1></body></html>\",\n { status: 404, headers: { \"Content-Type\": \"text/html\" } });\n }\n }\n }\n\n let pageProps = {};\n if (typeof pageModule.getServerSideProps === \"function\") {\n const { req, res } = createReqRes(request, routeUrl, parseQuery(routeUrl), undefined);\n const ctx = {\n params, req, res,\n query: parseQuery(routeUrl),\n resolvedUrl: routeUrl,\n locale: locale,\n locales: i18nConfig ? i18nConfig.locales : undefined,\n defaultLocale: i18nConfig ? i18nConfig.defaultLocale : undefined,\n };\n const result = await pageModule.getServerSideProps(ctx);\n if (result && result.props) pageProps = result.props;\n if (result && result.redirect) {\n var gsspStatus = result.redirect.statusCode != null ? result.redirect.statusCode : (result.redirect.permanent ? 308 : 307);\n return new Response(null, { status: gsspStatus, headers: { Location: sanitizeDestinationLocal(result.redirect.destination) } });\n }\n if (result && result.notFound) {\n return new Response(\"404\", { status: 404 });\n }\n }\n // Build font Link header early so it's available for ISR cached responses too.\n // Font preloads are module-level state populated at import time and persist across requests.\n var _fontLinkHeader = \"\";\n var _allFp = [];\n try {\n var _fpGoogle = typeof _getSSRFontPreloadsGoogle === \"function\" ? _getSSRFontPreloadsGoogle() : [];\n var _fpLocal = typeof _getSSRFontPreloadsLocal === \"function\" ? _getSSRFontPreloadsLocal() : [];\n _allFp = _fpGoogle.concat(_fpLocal);\n if (_allFp.length > 0) {\n _fontLinkHeader = _allFp.map(function(p) { return \"<\" + p.href + \">; rel=preload; as=font; type=\" + p.type + \"; crossorigin\"; }).join(\", \");\n }\n } catch (e) { /* font preloads not available */ }\n\n let isrRevalidateSeconds = null;\n if (typeof pageModule.getStaticProps === \"function\") {\n const pathname = routeUrl.split(\"?\")[0];\n const cacheKey = \"pages:\" + (pathname === \"/\" ? \"/\" : pathname.replace(/\\\\/$/, \"\"));\n const cached = await isrGet(cacheKey);\n\n if (cached && !cached.isStale && cached.value.value && cached.value.value.kind === \"PAGES\") {\n var _hitHeaders = {\n \"Content-Type\": \"text/html\", \"X-Vinext-Cache\": \"HIT\",\n \"Cache-Control\": \"s-maxage=\" + (cached.value.value.revalidate || 60) + \", stale-while-revalidate\",\n };\n if (_fontLinkHeader) _hitHeaders[\"Link\"] = _fontLinkHeader;\n return new Response(cached.value.value.html, { status: 200, headers: _hitHeaders });\n }\n\n if (cached && cached.isStale && cached.value.value && cached.value.value.kind === \"PAGES\") {\n triggerBackgroundRegeneration(cacheKey, async function() {\n const freshResult = await pageModule.getStaticProps({ params });\n if (freshResult && freshResult.props && typeof freshResult.revalidate === \"number\" && freshResult.revalidate > 0) {\n await isrSet(cacheKey, { kind: \"PAGES\", html: cached.value.value.html, pageData: freshResult.props, headers: undefined, status: undefined }, freshResult.revalidate);\n }\n });\n var _staleHeaders = {\n \"Content-Type\": \"text/html\", \"X-Vinext-Cache\": \"STALE\",\n \"Cache-Control\": \"s-maxage=0, stale-while-revalidate\",\n };\n if (_fontLinkHeader) _staleHeaders[\"Link\"] = _fontLinkHeader;\n return new Response(cached.value.value.html, { status: 200, headers: _staleHeaders });\n }\n\n const ctx = {\n params,\n locale: locale,\n locales: i18nConfig ? i18nConfig.locales : undefined,\n defaultLocale: i18nConfig ? i18nConfig.defaultLocale : undefined,\n };\n const result = await pageModule.getStaticProps(ctx);\n if (result && result.props) pageProps = result.props;\n if (result && result.redirect) {\n var gspStatus = result.redirect.statusCode != null ? result.redirect.statusCode : (result.redirect.permanent ? 308 : 307);\n return new Response(null, { status: gspStatus, headers: { Location: sanitizeDestinationLocal(result.redirect.destination) } });\n }\n if (result && result.notFound) {\n return new Response(\"404\", { status: 404 });\n }\n if (typeof result.revalidate === \"number\" && result.revalidate > 0) {\n isrRevalidateSeconds = result.revalidate;\n }\n }\n\n let element;\n if (AppComponent) {\n element = React.createElement(AppComponent, { Component: PageComponent, pageProps });\n } else {\n element = React.createElement(PageComponent, pageProps);\n }\n element = wrapWithRouterContext(element);\n\n if (typeof resetSSRHead === \"function\") resetSSRHead();\n if (typeof flushPreloads === \"function\") await flushPreloads();\n\n const ssrHeadHTML = typeof getSSRHeadHTML === \"function\" ? getSSRHeadHTML() : \"\";\n\n // Collect SSR font data (Google Font links, font preloads, font-face styles)\n var fontHeadHTML = \"\";\n function _escAttr(s) { return s.replace(/&/g, \"&amp;\").replace(/\"/g, \"&quot;\"); }\n try {\n var fontLinks = typeof _getSSRFontLinks === \"function\" ? _getSSRFontLinks() : [];\n for (var fl of fontLinks) { fontHeadHTML += '<link rel=\"stylesheet\" href=\"' + _escAttr(fl) + '\" />\\\\n '; }\n } catch (e) { /* next/font/google not used */ }\n // Emit <link rel=\"preload\"> for all font files (reuse _allFp collected earlier for Link header)\n for (var fp of _allFp) { fontHeadHTML += '<link rel=\"preload\" href=\"' + _escAttr(fp.href) + '\" as=\"font\" type=\"' + _escAttr(fp.type) + '\" crossorigin />\\\\n '; }\n try {\n var allFontStyles = [];\n if (typeof _getSSRFontStylesGoogle === \"function\") allFontStyles.push(..._getSSRFontStylesGoogle());\n if (typeof _getSSRFontStylesLocal === \"function\") allFontStyles.push(..._getSSRFontStylesLocal());\n if (allFontStyles.length > 0) { fontHeadHTML += '<style data-vinext-fonts>' + allFontStyles.join(\"\\\\n\") + '</style>\\\\n '; }\n } catch (e) { /* font styles not available */ }\n\n const pageModuleIds = route.filePath ? [route.filePath] : [];\n const assetTags = collectAssetTags(manifest, pageModuleIds);\n const nextDataPayload = {\n props: { pageProps }, page: patternToNextFormat(route.pattern), query: params, isFallback: false,\n };\n if (i18nConfig) {\n nextDataPayload.locale = locale;\n nextDataPayload.locales = i18nConfig.locales;\n nextDataPayload.defaultLocale = i18nConfig.defaultLocale;\n }\n const localeGlobals = i18nConfig\n ? \";window.__VINEXT_LOCALE__=\" + safeJsonStringify(locale) +\n \";window.__VINEXT_LOCALES__=\" + safeJsonStringify(i18nConfig.locales) +\n \";window.__VINEXT_DEFAULT_LOCALE__=\" + safeJsonStringify(i18nConfig.defaultLocale)\n : \"\";\n const nextDataScript = \"<script>window.__NEXT_DATA__ = \" + safeJsonStringify(nextDataPayload) + localeGlobals + \"</script>\";\n\n // Build the document shell with a placeholder for the streamed body\n var BODY_MARKER = \"<!--VINEXT_STREAM_BODY-->\";\n var shellHtml;\n if (DocumentComponent) {\n const docElement = React.createElement(DocumentComponent);\n shellHtml = await renderToStringAsync(docElement);\n shellHtml = shellHtml.replace(\"__NEXT_MAIN__\", BODY_MARKER);\n if (ssrHeadHTML || assetTags || fontHeadHTML) {\n shellHtml = shellHtml.replace(\"</head>\", \" \" + fontHeadHTML + ssrHeadHTML + \"\\\\n \" + assetTags + \"\\\\n</head>\");\n }\n shellHtml = shellHtml.replace(\"<!-- __NEXT_SCRIPTS__ -->\", nextDataScript);\n if (!shellHtml.includes(\"__NEXT_DATA__\")) {\n shellHtml = shellHtml.replace(\"</body>\", \" \" + nextDataScript + \"\\\\n</body>\");\n }\n } else {\n shellHtml = \"<!DOCTYPE html>\\\\n<html>\\\\n<head>\\\\n <meta charset=\\\\\"utf-8\\\\\" />\\\\n <meta name=\\\\\"viewport\\\\\" content=\\\\\"width=device-width, initial-scale=1\\\\\" />\\\\n \" + fontHeadHTML + ssrHeadHTML + \"\\\\n \" + assetTags + \"\\\\n</head>\\\\n<body>\\\\n <div id=\\\\\"__next\\\\\">\" + BODY_MARKER + \"</div>\\\\n \" + nextDataScript + \"\\\\n</body>\\\\n</html>\";\n }\n\n if (typeof setSSRContext === \"function\") setSSRContext(null);\n\n // Split the shell at the body marker\n var markerIdx = shellHtml.indexOf(BODY_MARKER);\n var shellPrefix = shellHtml.slice(0, markerIdx);\n var shellSuffix = shellHtml.slice(markerIdx + BODY_MARKER.length);\n\n // Start the React body stream — progressive SSR (no allReady wait)\n var bodyStream = await renderToReadableStream(element);\n var encoder = new TextEncoder();\n\n // Create a composite stream: prefix + body + suffix\n var compositeStream = new ReadableStream({\n async start(controller) {\n controller.enqueue(encoder.encode(shellPrefix));\n var reader = bodyStream.getReader();\n try {\n for (;;) {\n var chunk = await reader.read();\n if (chunk.done) break;\n controller.enqueue(chunk.value);\n }\n } finally {\n reader.releaseLock();\n }\n controller.enqueue(encoder.encode(shellSuffix));\n controller.close();\n }\n });\n\n // Cache the rendered HTML for ISR (needs the full string — re-render synchronously)\n if (isrRevalidateSeconds !== null && isrRevalidateSeconds > 0) {\n // Tee the stream so we can cache and respond simultaneously would be ideal,\n // but ISR responses are rare on first hit. Re-render to get complete HTML for cache.\n var isrElement;\n if (AppComponent) {\n isrElement = React.createElement(AppComponent, { Component: PageComponent, pageProps });\n } else {\n isrElement = React.createElement(PageComponent, pageProps);\n }\n isrElement = wrapWithRouterContext(isrElement);\n var isrHtml = await renderToStringAsync(isrElement);\n var fullHtml = shellPrefix + isrHtml + shellSuffix;\n var isrPathname = url.split(\"?\")[0];\n var isrCacheKey = \"pages:\" + (isrPathname === \"/\" ? \"/\" : isrPathname.replace(/\\\\/$/, \"\"));\n await isrSet(isrCacheKey, { kind: \"PAGES\", html: fullHtml, pageData: pageProps, headers: undefined, status: undefined }, isrRevalidateSeconds);\n }\n\n const responseHeaders = { \"Content-Type\": \"text/html\" };\n if (isrRevalidateSeconds) {\n responseHeaders[\"Cache-Control\"] = \"s-maxage=\" + isrRevalidateSeconds + \", stale-while-revalidate\";\n responseHeaders[\"X-Vinext-Cache\"] = \"MISS\";\n }\n // Set HTTP Link header for font preloading\n if (_fontLinkHeader) {\n responseHeaders[\"Link\"] = _fontLinkHeader;\n }\n return new Response(compositeStream, { status: 200, headers: responseHeaders });\n } catch (e) {\n console.error(\"[vinext] SSR error:\", e);\n return new Response(\"Internal Server Error\", { status: 500 });\n }\n }) // end runWithFetchCache\n ) // end runWithPrivateCache\n ) // end _runWithCacheState\n ) // end runWithHeadState\n ); // end runWithRouterState\n}\n\nexport async function handleApiRoute(request, url) {\n const match = matchRoute(url, apiRoutes);\n if (!match) {\n return new Response(\"404 - API route not found\", { status: 404 });\n }\n\n const { route, params } = match;\n const handler = route.module.default;\n if (typeof handler !== \"function\") {\n return new Response(\"API route does not export a default function\", { status: 500 });\n }\n\n const query = { ...params };\n const qs = url.split(\"?\")[1];\n if (qs) {\n for (const [k, v] of new URLSearchParams(qs)) {\n if (k in query) {\n // Multi-value: promote to array (Next.js returns string[] for duplicate keys)\n query[k] = Array.isArray(query[k]) ? query[k].concat(v) : [query[k], v];\n } else {\n query[k] = v;\n }\n }\n }\n\n // Parse request body (enforce 1MB limit to prevent memory exhaustion,\n // matching Next.js default bodyParser sizeLimit).\n // Check Content-Length first as a fast path, then enforce on the actual\n // stream to prevent bypasses via chunked transfer encoding.\n const contentLength = parseInt(request.headers.get(\"content-length\") || \"0\", 10);\n if (contentLength > 1 * 1024 * 1024) {\n return new Response(\"Request body too large\", { status: 413 });\n }\n let body;\n const ct = request.headers.get(\"content-type\") || \"\";\n let rawBody;\n try { rawBody = await readBodyWithLimit(request, 1 * 1024 * 1024); }\n catch { return new Response(\"Request body too large\", { status: 413 }); }\n if (!rawBody) {\n body = undefined;\n } else if (ct.includes(\"application/json\")) {\n try { body = JSON.parse(rawBody); } catch { body = rawBody; }\n } else {\n body = rawBody;\n }\n\n const { req, res, responsePromise } = createReqRes(request, url, query, body);\n\n try {\n await handler(req, res);\n // If handler didn't call res.end(), end it now.\n // The end() method is idempotent — safe to call twice.\n res.end();\n return await responsePromise;\n } catch (e) {\n console.error(\"[vinext] API error:\", e);\n return new Response(\"Internal Server Error\", { status: 500 });\n }\n}\n\n${middlewareExportCode}\n`;\n }\n\n /**\n * Generate the virtual client hydration entry module.\n * This is the entry point for `vite build` (client bundle).\n *\n * It maps route patterns to dynamic imports of page modules so Vite\n * code-splits each page into its own chunk. At runtime it reads\n * __NEXT_DATA__ to determine which page to hydrate.\n */\n async function generateClientEntry(): Promise<string> {\n const pageRoutes = await pagesRouter(pagesDir);\n\n const hasApp = fs.existsSync(path.join(pagesDir, \"_app.tsx\")) || fs.existsSync(path.join(pagesDir, \"_app.jsx\")) || fs.existsSync(path.join(pagesDir, \"_app.ts\")) || fs.existsSync(path.join(pagesDir, \"_app.js\"));\n\n // Build a map of route pattern -> dynamic import.\n // Keys must use Next.js bracket format (e.g. \"/user/[id]\") to match\n // __NEXT_DATA__.page which is set via patternToNextFormat() during SSR.\n const loaderEntries = pageRoutes.map((r: Route) => {\n const absPath = r.filePath.replace(/\\\\/g, \"/\");\n const nextFormatPattern = pagesPatternToNextFormat(r.pattern);\n // JSON.stringify safely escapes quotes, backslashes, and special chars in\n // both the route pattern and the absolute file path.\n // lgtm[js/bad-code-sanitization]\n return ` ${JSON.stringify(nextFormatPattern)}: () => import(${JSON.stringify(absPath)})`;\n });\n\n const appFileBase = path.join(pagesDir, \"_app\").replace(/\\\\/g, \"/\");\n\n return `\nimport React from \"react\";\nimport { hydrateRoot } from \"react-dom/client\";\n// Eagerly import the router shim so its module-level popstate listener is\n// registered. Without this, browser back/forward buttons do nothing because\n// navigateClient() is never invoked on history changes.\nimport \"next/router\";\n\nconst pageLoaders = {\n${loaderEntries.join(\",\\n\")}\n};\n\nasync function hydrate() {\n const nextData = window.__NEXT_DATA__;\n if (!nextData) {\n console.error(\"[vinext] No __NEXT_DATA__ found\");\n return;\n }\n\n const { pageProps } = nextData.props;\n const loader = pageLoaders[nextData.page];\n if (!loader) {\n console.error(\"[vinext] No page loader for route:\", nextData.page);\n return;\n }\n\n const pageModule = await loader();\n const PageComponent = pageModule.default;\n if (!PageComponent) {\n console.error(\"[vinext] Page module has no default export\");\n return;\n }\n\n let element;\n ${hasApp ? `\n try {\n const appModule = await import(${JSON.stringify(appFileBase)});\n const AppComponent = appModule.default;\n window.__VINEXT_APP__ = AppComponent;\n element = React.createElement(AppComponent, { Component: PageComponent, pageProps });\n } catch {\n element = React.createElement(PageComponent, pageProps);\n }\n ` : `\n element = React.createElement(PageComponent, pageProps);\n `}\n\n // Wrap with RouterContext.Provider so next/compat/router works during hydration\n const { wrapWithRouterContext } = await import(\"next/router\");\n element = wrapWithRouterContext(element);\n\n const container = document.getElementById(\"__next\");\n if (!container) {\n console.error(\"[vinext] No #__next element found\");\n return;\n }\n\n const root = hydrateRoot(container, element);\n window.__VINEXT_ROOT__ = root;\n}\n\nhydrate();\n`;\n }\n\n // Auto-register @vitejs/plugin-rsc when App Router is detected.\n // Check eagerly at call time using the same heuristic as config().\n // Must mirror the full detection logic: check {base}/app then {base}/src/app.\n const autoRsc = options.rsc !== false;\n const earlyBaseDir = options.appDir ?? process.cwd();\n const earlyAppDirExists =\n fs.existsSync(path.join(earlyBaseDir, \"app\")) ||\n fs.existsSync(path.join(earlyBaseDir, \"src\", \"app\"));\n\n // IMPORTANT: Resolve @vitejs/plugin-rsc subpath imports from the user's\n // project root, not from vinext's own package location. When vinext is\n // installed via symlink (npm file: deps, pnpm workspace:*), a bare\n // import() resolves from vinext's realpath, which can find a different\n // copy of the RSC plugin (and transitively a different copy of vite).\n // This causes instanceof RunnableDevEnvironment checks to fail at\n // runtime because the Vite server and the RSC plugin end up with\n // different class identities. Resolving from the project root ensures a\n // single shared vite instance.\n //\n // Pre-resolve both the main plugin and the /transforms subpath eagerly\n // so all import() calls in this module use consistent resolution.\n const earlyRequire = createRequire(path.join(earlyBaseDir, \"package.json\"));\n let resolvedRscPath: string | null = null;\n let resolvedRscTransformsPath: string | null = null;\n try {\n resolvedRscPath = earlyRequire.resolve(\"@vitejs/plugin-rsc\");\n resolvedRscTransformsPath = earlyRequire.resolve(\"@vitejs/plugin-rsc/transforms\");\n } catch {\n // @vitejs/plugin-rsc not installed — that's fine for Pages Router\n // projects. If App Router is detected, the error is thrown below.\n }\n\n // If app/ exists and auto-RSC is enabled, create a lazy Promise that\n // resolves to the configured RSC plugin array. Vite's asyncFlatten\n // will resolve this before processing the plugin list.\n let rscPluginPromise: Promise<Plugin[]> | null = null;\n if (earlyAppDirExists && autoRsc) {\n if (!resolvedRscPath) {\n throw new Error(\n \"vinext: App Router detected but @vitejs/plugin-rsc is not installed.\\n\" +\n \"Run: \" + detectPackageManager(process.cwd()) + \" @vitejs/plugin-rsc\",\n );\n }\n const rscImport = import(pathToFileURL(resolvedRscPath).href);\n rscPluginPromise = rscImport\n .then((mod) => {\n const rsc = mod.default;\n return rsc({\n entries: {\n rsc: VIRTUAL_RSC_ENTRY,\n ssr: VIRTUAL_APP_SSR_ENTRY,\n client: VIRTUAL_APP_BROWSER_ENTRY,\n },\n });\n });\n }\n\n const imageImportDimCache = new Map<string, { width: number; height: number }>();\n\n // Shared state for the MDX proxy plugin. Populated during config() if MDX\n // files are detected and @mdx-js/rollup is installed.\n let mdxDelegate: Plugin | null = null;\n\n const plugins: (Plugin | Promise<Plugin[]>)[] = [\n // Resolve tsconfig paths/baseUrl aliases so real-world Next.js repos\n // that use @/*, #/*, or baseUrl imports work out of the box.\n tsconfigPaths(),\n // Transform CJS require()/module.exports to ESM before other plugins\n // analyze imports (RSC directive scanning, shim resolution, etc.)\n commonjs(),\n {\n name: \"vinext:config\",\n enforce: \"pre\",\n\n async config(config, env) {\n root = config.root ?? process.cwd();\n\n // Load .env files into process.env before anything else.\n // Next.js loads .env files before evaluating next.config.js, so\n // env vars are available in config, server-side code, and as\n // NEXT_PUBLIC_* defines for the client bundle.\n // Pass '' as prefix to load ALL vars, not just VITE_-prefixed ones.\n const mode = env?.mode ?? \"development\";\n const envDir = config.envDir ?? root;\n const dotenvVars = loadEnv(mode, envDir, \"\");\n for (const [key, value] of Object.entries(dotenvVars)) {\n if (process.env[key] === undefined) {\n process.env[key] = value;\n }\n }\n // Align NODE_ENV with Next.js semantics: build -> production, serve -> development.\n // Next.js unconditionally forces NODE_ENV during build/dev, so we do the same.\n let resolvedNodeEnv: string;\n if (mode === \"test\") {\n resolvedNodeEnv = \"test\";\n } else if (env?.command === \"build\") {\n resolvedNodeEnv = \"production\";\n } else {\n resolvedNodeEnv = \"development\";\n }\n if (process.env.NODE_ENV !== resolvedNodeEnv) {\n process.env.NODE_ENV = resolvedNodeEnv;\n }\n\n // Resolve the base directory for app/pages detection.\n // If appDir is provided, resolve it (supports both relative and absolute paths).\n // If not provided, auto-detect: check root first, then src/ subdirectory.\n let baseDir: string;\n if (options.appDir) {\n baseDir = path.isAbsolute(options.appDir)\n ? options.appDir\n : path.resolve(root, options.appDir);\n } else {\n // Auto-detect: prefer root-level app/ and pages/, fall back to src/\n const hasRootApp = fs.existsSync(path.join(root, \"app\"));\n const hasRootPages = fs.existsSync(path.join(root, \"pages\"));\n const hasSrcApp = fs.existsSync(path.join(root, \"src\", \"app\"));\n const hasSrcPages = fs.existsSync(path.join(root, \"src\", \"pages\"));\n\n if (hasRootApp || hasRootPages) {\n baseDir = root;\n } else if (hasSrcApp || hasSrcPages) {\n baseDir = path.join(root, \"src\");\n } else {\n baseDir = root;\n }\n }\n\n pagesDir = path.join(baseDir, \"pages\");\n appDir = path.join(baseDir, \"app\");\n hasPagesDir = fs.existsSync(pagesDir);\n hasAppDir = fs.existsSync(appDir);\n middlewarePath = findMiddlewareFile(root);\n instrumentationPath = findInstrumentationFile(root);\n\n // Load next.config.js if present (always from project root, not src/)\n const rawConfig = await loadNextConfig(root);\n nextConfig = await resolveNextConfig(rawConfig);\n\n // Merge env from next.config.js with NEXT_PUBLIC_* env vars\n const defines = getNextPublicEnvDefines();\n if (\n !config.define ||\n typeof config.define !== \"object\" ||\n !(\"process.env.NODE_ENV\" in config.define)\n ) {\n defines[\"process.env.NODE_ENV\"] = JSON.stringify(resolvedNodeEnv);\n }\n for (const [key, value] of Object.entries(nextConfig.env)) {\n // Skip NODE_ENV from next.config.js env — Next.js ignores it too,\n // and it would silently override the value we just set above.\n if (key === \"NODE_ENV\") continue;\n defines[`process.env.${key}`] = JSON.stringify(value);\n }\n // Expose basePath to client-side code\n defines[\"process.env.__NEXT_ROUTER_BASEPATH\"] = JSON.stringify(\n nextConfig.basePath,\n );\n // Expose image remote patterns for validation in next/image shim\n defines[\"process.env.__VINEXT_IMAGE_REMOTE_PATTERNS\"] = JSON.stringify(\n JSON.stringify(nextConfig.images?.remotePatterns ?? []),\n );\n defines[\"process.env.__VINEXT_IMAGE_DOMAINS\"] = JSON.stringify(\n JSON.stringify(nextConfig.images?.domains ?? []),\n );\n // Expose allowed image widths (union of deviceSizes + imageSizes) for\n // server-side validation. Matches Next.js behavior: only configured\n // sizes are accepted by the image optimization endpoint.\n {\n const deviceSizes = nextConfig.images?.deviceSizes ?? [640, 750, 828, 1080, 1200, 1920, 2048, 3840];\n const imageSizes = nextConfig.images?.imageSizes ?? [16, 32, 48, 64, 96, 128, 256, 384];\n defines[\"process.env.__VINEXT_IMAGE_DEVICE_SIZES\"] = JSON.stringify(\n JSON.stringify(deviceSizes),\n );\n defines[\"process.env.__VINEXT_IMAGE_SIZES\"] = JSON.stringify(\n JSON.stringify(imageSizes),\n );\n }\n // Expose dangerouslyAllowSVG flag for the image shim's auto-skip logic.\n // When false (default), .svg sources bypass the optimization endpoint.\n defines[\"process.env.__VINEXT_IMAGE_DANGEROUSLY_ALLOW_SVG\"] = JSON.stringify(\n String(nextConfig.images?.dangerouslyAllowSVG ?? false),\n );\n // Draft mode secret — generated once at build time so the\n // __prerender_bypass cookie is consistent across all server\n // instances (e.g. multiple Cloudflare Workers isolates).\n defines[\"process.env.__VINEXT_DRAFT_SECRET\"] = JSON.stringify(\n crypto.randomUUID(),\n );\n\n // Build the shim alias map — used by both resolve.alias and resolveId\n // (resolveId handles .js extension variants for libraries like nuqs)\n nextShimMap = {\n \"next/link\": path.join(shimsDir, \"link\"),\n \"next/head\": path.join(shimsDir, \"head\"),\n \"next/router\": path.join(shimsDir, \"router\"),\n \"next/compat/router\": path.join(shimsDir, \"compat-router\"),\n \"next/image\": path.join(shimsDir, \"image\"),\n \"next/legacy/image\": path.join(shimsDir, \"legacy-image\"),\n \"next/dynamic\": path.join(shimsDir, \"dynamic\"),\n \"next/app\": path.join(shimsDir, \"app\"),\n \"next/document\": path.join(shimsDir, \"document\"),\n \"next/config\": path.join(shimsDir, \"config\"),\n \"next/script\": path.join(shimsDir, \"script\"),\n \"next/server\": path.join(shimsDir, \"server\"),\n \"next/navigation\": path.join(shimsDir, \"navigation\"),\n \"next/headers\": path.join(shimsDir, \"headers\"),\n \"next/font/google\": path.join(shimsDir, \"font-google\"),\n \"next/font/local\": path.join(shimsDir, \"font-local\"),\n \"next/cache\": path.join(shimsDir, \"cache\"),\n \"next/form\": path.join(shimsDir, \"form\"),\n \"next/og\": path.join(shimsDir, \"og\"),\n \"next/web-vitals\": path.join(shimsDir, \"web-vitals\"),\n \"next/amp\": path.join(shimsDir, \"amp\"),\n \"next/error\": path.join(shimsDir, \"error\"),\n \"next/constants\": path.join(shimsDir, \"constants\"),\n // Internal next/dist/* paths used by popular libraries\n // (next-intl, @clerk/nextjs, @sentry/nextjs, next-nprogress-bar, etc.)\n \"next/dist/shared/lib/app-router-context.shared-runtime\": path.join(shimsDir, \"internal\", \"app-router-context\"),\n \"next/dist/shared/lib/app-router-context\": path.join(shimsDir, \"internal\", \"app-router-context\"),\n \"next/dist/shared/lib/router-context.shared-runtime\": path.join(shimsDir, \"internal\", \"router-context\"),\n \"next/dist/shared/lib/utils\": path.join(shimsDir, \"internal\", \"utils\"),\n \"next/dist/server/api-utils\": path.join(shimsDir, \"internal\", \"api-utils\"),\n \"next/dist/server/web/spec-extension/cookies\": path.join(shimsDir, \"internal\", \"cookies\"),\n \"next/dist/compiled/@edge-runtime/cookies\": path.join(shimsDir, \"internal\", \"cookies\"),\n \"next/dist/server/app-render/work-unit-async-storage.external\": path.join(shimsDir, \"internal\", \"work-unit-async-storage\"),\n \"next/dist/client/components/work-unit-async-storage.external\": path.join(shimsDir, \"internal\", \"work-unit-async-storage\"),\n \"next/dist/client/components/request-async-storage.external\": path.join(shimsDir, \"internal\", \"work-unit-async-storage\"),\n \"next/dist/client/components/request-async-storage\": path.join(shimsDir, \"internal\", \"work-unit-async-storage\"),\n // Re-export public modules for internal path imports\n \"next/dist/client/components/navigation\": path.join(shimsDir, \"navigation\"),\n \"next/dist/server/config-shared\": path.join(shimsDir, \"internal\", \"utils\"),\n // server-only / client-only marker packages\n \"server-only\": path.join(shimsDir, \"server-only\"),\n \"client-only\": path.join(shimsDir, \"client-only\"),\n \"vinext/error-boundary\": path.join(shimsDir, \"error-boundary\"),\n \"vinext/layout-segment-context\": path.join(shimsDir, \"layout-segment-context\"),\n \"vinext/metadata\": path.join(shimsDir, \"metadata\"),\n \"vinext/fetch-cache\": path.join(shimsDir, \"fetch-cache\"),\n \"vinext/cache-runtime\": path.join(shimsDir, \"cache-runtime\"),\n \"vinext/navigation-state\": path.join(shimsDir, \"navigation-state\"),\n \"vinext/router-state\": path.join(shimsDir, \"router-state\"),\n \"vinext/head-state\": path.join(shimsDir, \"head-state\"),\n \"vinext/instrumentation\": path.resolve(__dirname, \"server\", \"instrumentation\"),\n \"vinext/html\": path.resolve(__dirname, \"server\", \"html\"),\n };\n\n // Detect if Cloudflare's vite plugin is present — if so, skip\n // SSR externals (Workers bundle everything, can't have Node.js externals).\n const pluginsFlat: any[] = [];\n function flattenPlugins(arr: any[]) {\n for (const p of arr) {\n if (Array.isArray(p)) flattenPlugins(p);\n else if (p) pluginsFlat.push(p);\n }\n }\n flattenPlugins(config.plugins as any[] ?? []);\n hasCloudflarePlugin = pluginsFlat.some(\n (p: any) => p && typeof p === \"object\" && typeof p.name === \"string\" && (\n p.name === \"vite-plugin-cloudflare\" || p.name.startsWith(\"vite-plugin-cloudflare:\")\n ),\n );\n hasNitroPlugin = pluginsFlat.some(\n (p: any) => p && typeof p === \"object\" && typeof p.name === \"string\" && (\n p.name === \"nitro\" || p.name.startsWith(\"nitro:\")\n ),\n );\n\n // Resolve PostCSS string plugin names that Vite can't handle.\n // Next.js projects commonly use array-form plugins like\n // `plugins: [\"@tailwindcss/postcss\"]` which postcss-load-config\n // doesn't resolve (only object-form keys are resolved). We detect\n // this and resolve the strings to actual plugin functions, then\n // inject via css.postcss so Vite uses the resolved plugins.\n // Only do this if the user hasn't already set css.postcss inline.\n let postcssOverride: { plugins: any[] } | undefined;\n if (!config.css?.postcss || typeof config.css.postcss === \"string\") {\n postcssOverride = await resolvePostcssStringPlugins(root);\n }\n\n // Auto-inject @mdx-js/rollup when MDX files exist and no MDX plugin is\n // already configured. Applies remark/rehype plugins from next.config.\n const hasMdxPlugin = pluginsFlat.some(\n (p: any) => p && typeof p === \"object\" && typeof p.name === \"string\" &&\n (p.name === \"@mdx-js/rollup\" || p.name === \"mdx\"),\n );\n if (!hasMdxPlugin && hasMdxFiles(root, hasAppDir ? appDir : null, hasPagesDir ? pagesDir : null)) {\n try {\n const mdxRollup = await import(\"@mdx-js/rollup\");\n const mdxFactory = mdxRollup.default ?? mdxRollup;\n const mdxOpts: Record<string, unknown> = {};\n if (nextConfig.mdx) {\n if (nextConfig.mdx.remarkPlugins) mdxOpts.remarkPlugins = nextConfig.mdx.remarkPlugins;\n if (nextConfig.mdx.rehypePlugins) mdxOpts.rehypePlugins = nextConfig.mdx.rehypePlugins;\n if (nextConfig.mdx.recmaPlugins) mdxOpts.recmaPlugins = nextConfig.mdx.recmaPlugins;\n }\n mdxDelegate = mdxFactory(mdxOpts);\n if (nextConfig.mdx) {\n console.log(\"[vinext] Auto-injected @mdx-js/rollup with remark/rehype plugins from next.config\");\n } else {\n console.log(\"[vinext] Auto-injected @mdx-js/rollup for MDX support\");\n }\n } catch {\n // @mdx-js/rollup not installed — warn but don't fail\n console.warn(\n \"[vinext] MDX files detected but @mdx-js/rollup is not installed. \" +\n \"Install it with: \" + detectPackageManager(process.cwd()) + \" @mdx-js/rollup\"\n );\n }\n }\n\n // Detect if this is a standalone SSR build (set by `vite build --ssr`\n // or `build.ssr` in config). SSR builds must NOT use manualChunks\n // because they use inlineDynamicImports which is incompatible.\n const isSSR = !!config.build?.ssr;\n // Detect if this is a multi-environment build (App Router or Cloudflare).\n // In multi-env builds, manualChunks must only be set per-environment\n // (on the client env), not globally — otherwise it leaks into RSC/SSR\n // environments where it can cause asset resolution issues.\n const isMultiEnv = hasAppDir || hasCloudflarePlugin || hasNitroPlugin;\n\n const viteConfig: UserConfig = {\n // Disable Vite's default HTML serving - we handle all routing\n appType: \"custom\",\n build: {\n rollupOptions: {\n // Suppress \"Module level directives cause errors when bundled\"\n // warnings for \"use client\" / \"use server\" directives. Our shims\n // and third-party libraries legitimately use these directives;\n // they are handled by the RSC plugin and are harmless in the\n // final bundle. We preserve any user-supplied onwarn so custom\n // warning handling is not lost.\n onwarn: (() => {\n const userOnwarn = config.build?.rollupOptions?.onwarn;\n return (warning, defaultHandler) => {\n if (\n warning.code === \"MODULE_LEVEL_DIRECTIVE\" &&\n (warning.message?.includes('\"use client\"') ||\n warning.message?.includes('\"use server\"'))\n ) {\n return;\n }\n if (userOnwarn) {\n userOnwarn(warning, defaultHandler);\n } else {\n defaultHandler(warning);\n }\n };\n })(),\n // Enable aggressive tree-shaking for client builds.\n // See clientTreeshakeConfig for rationale.\n // Only apply globally for standalone client builds (Pages Router\n // CLI). For multi-environment builds (App Router, Cloudflare),\n // treeshake is set per-environment on the client env below to\n // avoid leaking into RSC/SSR environments where\n // moduleSideEffects: 'no-external' could drop server packages\n // that rely on module-level side effects.\n ...(!isSSR && !isMultiEnv ? { treeshake: clientTreeshakeConfig } : {}),\n // Code-split client bundles: separate framework (React/ReactDOM),\n // vinext runtime (shims), and vendor packages into their own\n // chunks so pages only load the JS they need.\n // Only apply globally for standalone client builds (CLI Pages\n // Router). For multi-environment builds (App Router, Cloudflare),\n // manualChunks is set per-environment on the client env below\n // to avoid leaking into RSC/SSR environments.\n ...(!isSSR && !isMultiEnv ? { output: clientOutputConfig } : {}),\n },\n },\n // Let OPTIONS requests pass through Vite's CORS middleware to our\n // route handlers so they can set the Allow header and run user-defined\n // OPTIONS handlers. Without this, Vite's CORS middleware responds to\n // OPTIONS with a 204 before the request reaches vinext's handler.\n // Keep Vite's default restrictive origin policy by explicitly\n // setting it. Without the `origin` field, `preflightContinue: true`\n // would override Vite's default and allow any origin.\n server: {\n cors: {\n preflightContinue: true,\n origin: /^https?:\\/\\/(?:(?:[^:]+\\.)?localhost|127\\.0\\.0\\.1|\\[::1\\])(?::\\d+)?$/,\n },\n },\n // Externalize React packages from SSR transform — they are CJS and\n // must be loaded natively by Node, not through Vite's ESM evaluator.\n // Skip when targeting bundled runtimes (Cloudflare/Nitro bundle everything).\n ...(hasCloudflarePlugin || hasNitroPlugin ? {} : {\n ssr: {\n external: [\"react\", \"react-dom\", \"react-dom/server\"],\n },\n }),\n resolve: {\n alias: nextShimMap,\n // Dedupe React packages to prevent dual-instance errors.\n // When vinext is linked (npm link / bun link) or any dependency\n // brings its own React copy, multiple React instances can load,\n // causing cryptic \"Invalid hook call\" errors. This is a no-op\n // when only one copy exists.\n dedupe: [\n \"react\",\n \"react-dom\",\n \"react/jsx-runtime\",\n \"react/jsx-dev-runtime\",\n ],\n },\n // Exclude vinext from dependency optimization so esbuild doesn't\n // scan dist files containing virtual module imports (virtual:vinext-*)\n // that only resolve at Vite plugin time, not during pre-bundling.\n optimizeDeps: {\n exclude: [\"vinext\"],\n },\n // Enable JSX in .tsx/.jsx files\n // Vite 7 uses `esbuild` for transforms, Vite 8+ uses `oxc`\n ...(getViteMajorVersion() >= 8\n ? { oxc: { jsx: { runtime: \"automatic\" } } }\n : { esbuild: { jsx: \"automatic\" } }),\n // Define env vars for client bundle\n define: defines,\n // Set base path if configured\n ...(nextConfig.basePath ? { base: nextConfig.basePath + \"/\" } : {}),\n // Inject resolved PostCSS plugins if string names were found\n ...(postcssOverride ? { css: { postcss: postcssOverride } } : {}),\n };\n\n // If app/ directory exists, configure RSC environments\n if (hasAppDir) {\n // Compute optimizeDeps.entries so Vite discovers server-side\n // dependencies at startup instead of on first request. Without\n // this, deps imported in rsc/ssr environments are found lazily,\n // causing re-optimisation cascades and runtime errors (e.g.\n // \"Invalid hook call\" from duplicate React instances).\n // The entries must be relative to the project root.\n const relAppDir = path.relative(root, appDir);\n const appEntries = [\n `${relAppDir}/**/*.{tsx,ts,jsx,js}`,\n ];\n\n viteConfig.environments = {\n rsc: {\n ...(hasCloudflarePlugin || hasNitroPlugin ? {} : {\n resolve: {\n // Externalize native/heavy packages so the RSC environment\n // loads them natively via Node rather than through Vite's\n // ESM module evaluator (which can't handle native addons).\n // Note: Do NOT externalize react/react-dom here — they must\n // be bundled with the \"react-server\" condition for RSC.\n // Skip when targeting bundled runtimes (Cloudflare/Nitro).\n external: [\n \"satori\",\n \"@resvg/resvg-js\",\n \"yoga-wasm-web\",\n ],\n },\n }),\n optimizeDeps: {\n exclude: [\"vinext\"],\n entries: appEntries,\n },\n build: {\n outDir: \"dist/server\",\n rollupOptions: {\n input: { index: VIRTUAL_RSC_ENTRY },\n },\n },\n },\n ssr: {\n optimizeDeps: {\n exclude: [\"vinext\"],\n entries: appEntries,\n },\n build: {\n outDir: \"dist/server/ssr\",\n rollupOptions: {\n input: { index: VIRTUAL_APP_SSR_ENTRY },\n },\n },\n },\n client: {\n optimizeDeps: {\n exclude: [\"vinext\"],\n // React packages aren't crawled from app/ source files,\n // so must be pre-included to avoid late discovery (#25).\n include: [\n \"react\",\n \"react-dom\",\n \"react-dom/client\",\n \"react/jsx-runtime\",\n \"react/jsx-dev-runtime\",\n ],\n },\n build: {\n // When targeting Cloudflare Workers, enable manifest generation\n // so the vinext:cloudflare-build closeBundle hook can read the\n // client build manifest, compute lazy chunks (only reachable\n // via dynamic imports), and inject __VINEXT_LAZY_CHUNKS__ into\n // the worker entry. Without this, all chunks are modulepreloaded\n // on every page — defeating code-splitting for React.lazy() and\n // next/dynamic boundaries.\n ...(hasCloudflarePlugin ? { manifest: true } : {}),\n rollupOptions: {\n input: { index: VIRTUAL_APP_BROWSER_ENTRY },\n output: clientOutputConfig,\n treeshake: clientTreeshakeConfig,\n },\n },\n },\n };\n } else if (hasCloudflarePlugin) {\n // Pages Router on Cloudflare Workers: add a client environment\n // so the multi-environment build produces client JS bundles\n // alongside the worker. Without this, only the worker is built\n // and there's no client-side hydration.\n viteConfig.environments = {\n client: {\n build: {\n manifest: true,\n ssrManifest: true,\n rollupOptions: {\n input: { index: VIRTUAL_CLIENT_ENTRY },\n output: clientOutputConfig,\n treeshake: clientTreeshakeConfig,\n },\n },\n },\n };\n }\n\n return viteConfig;\n },\n\n configResolved(config) {\n // Detect double RSC plugin registration. When vinext auto-injects\n // @vitejs/plugin-rsc AND the user also registers it manually, the\n // RSC transform pipeline runs twice — doubling build time.\n // Rather than trying to magically fix this at runtime, fail fast\n // with a clear error telling the user how to fix their config.\n if (rscPluginPromise) {\n // Count top-level RSC plugins (name === \"rsc\") — each call to\n // the rsc() factory produces exactly one plugin with this name.\n const rscRootPlugins = config.plugins.filter(\n (p: any) => p && p.name === \"rsc\",\n );\n if (rscRootPlugins.length > 1) {\n throw new Error(\n \"[vinext] Duplicate @vitejs/plugin-rsc detected.\\n\" +\n \" vinext auto-registers @vitejs/plugin-rsc when app/ is detected.\\n\" +\n \" Your config also registers it manually, which doubles build time.\\n\\n\" +\n \" Fix: remove the explicit rsc() call from your plugins array.\\n\" +\n \" Or: pass rsc: false to vinext() if you want to configure rsc() yourself.\",\n );\n }\n }\n },\n\n resolveId: {\n // Hook filter: only invoke JS for next/* imports and virtual:vinext-* modules.\n // Matches \"next/navigation\", \"next/router.js\", \"virtual:vinext-rsc-entry\",\n // and \\0-prefixed re-imports from @vitejs/plugin-rsc.\n filter: {\n id: /(?:next\\/|virtual:vinext-)/,\n },\n handler(id) {\n // Strip \\0 prefix if present — @vitejs/plugin-rsc's generated\n // browser entry imports our virtual module using the already-resolved\n // ID (with \\0 prefix). We need to re-resolve it so the client\n // environment's import-analysis can find it.\n const cleanId = id.startsWith(\"\\0\") ? id.slice(1) : id;\n\n // Handle next/* imports with .js extension (e.g. \"next/navigation.js\")\n // Libraries like nuqs import \"next/navigation.js\" which doesn't match\n // our resolve.alias for \"next/navigation\". Strip the .js and resolve\n // through our shim map, appending .js to the resolved path.\n if (cleanId.startsWith(\"next/\") && cleanId.endsWith(\".js\")) {\n const withoutExt = cleanId.slice(0, -3);\n if (nextShimMap[withoutExt]) {\n const shimPath = nextShimMap[withoutExt];\n // Alias values don't include .js — append it for resolveId\n return shimPath.endsWith(\".js\") ? shimPath : shimPath + \".js\";\n }\n }\n\n // Pages Router virtual modules\n if (cleanId === VIRTUAL_SERVER_ENTRY) return RESOLVED_SERVER_ENTRY;\n if (cleanId === VIRTUAL_CLIENT_ENTRY) return RESOLVED_CLIENT_ENTRY;\n if (cleanId.endsWith(\"/\" + VIRTUAL_SERVER_ENTRY) || cleanId.endsWith(\"\\\\\" + VIRTUAL_SERVER_ENTRY)) {\n return RESOLVED_SERVER_ENTRY;\n }\n if (cleanId.endsWith(\"/\" + VIRTUAL_CLIENT_ENTRY) || cleanId.endsWith(\"\\\\\" + VIRTUAL_CLIENT_ENTRY)) {\n return RESOLVED_CLIENT_ENTRY;\n }\n // App Router virtual modules\n if (cleanId === VIRTUAL_RSC_ENTRY) return RESOLVED_RSC_ENTRY;\n if (cleanId === VIRTUAL_APP_SSR_ENTRY) return RESOLVED_APP_SSR_ENTRY;\n if (cleanId === VIRTUAL_APP_BROWSER_ENTRY) return RESOLVED_APP_BROWSER_ENTRY;\n if (cleanId.endsWith(\"/\" + VIRTUAL_RSC_ENTRY) || cleanId.endsWith(\"\\\\\" + VIRTUAL_RSC_ENTRY)) {\n return RESOLVED_RSC_ENTRY;\n }\n if (cleanId.endsWith(\"/\" + VIRTUAL_APP_SSR_ENTRY) || cleanId.endsWith(\"\\\\\" + VIRTUAL_APP_SSR_ENTRY)) {\n return RESOLVED_APP_SSR_ENTRY;\n }\n if (cleanId.endsWith(\"/\" + VIRTUAL_APP_BROWSER_ENTRY) || cleanId.endsWith(\"\\\\\" + VIRTUAL_APP_BROWSER_ENTRY)) {\n return RESOLVED_APP_BROWSER_ENTRY;\n }\n },\n },\n\n async load(id) {\n // Pages Router virtual modules\n if (id === RESOLVED_SERVER_ENTRY) {\n return await generateServerEntry();\n }\n if (id === RESOLVED_CLIENT_ENTRY) {\n return await generateClientEntry();\n }\n // App Router virtual modules\n if (id === RESOLVED_RSC_ENTRY && hasAppDir) {\n const routes = await appRouter(appDir);\n const metaRoutes = scanMetadataFiles(appDir);\n // Check for global-error.tsx at app root\n const globalErrorPath = findFileWithExts(appDir, \"global-error\");\n return generateRscEntry(appDir, routes, middlewarePath, metaRoutes, globalErrorPath, nextConfig?.basePath, nextConfig?.trailingSlash, {\n redirects: nextConfig?.redirects,\n rewrites: nextConfig?.rewrites,\n headers: nextConfig?.headers,\n allowedOrigins: nextConfig?.serverActionsAllowedOrigins,\n allowedDevOrigins: nextConfig?.serverActionsAllowedOrigins,\n });\n }\n if (id === RESOLVED_APP_SSR_ENTRY && hasAppDir) {\n return generateSsrEntry();\n }\n if (id === RESOLVED_APP_BROWSER_ENTRY && hasAppDir) {\n return generateBrowserEntry();\n }\n },\n },\n // Proxy plugin for @mdx-js/rollup. The real MDX plugin is created lazily\n // during vinext:config's config() (when MDX files are detected), but\n // plugins returned from config() hooks run too late in the pipeline —\n // after vite:import-analysis. This top-level proxy with enforce:\"pre\"\n // ensures MDX transforms run at the correct stage. Both vinext:config\n // and this proxy are enforce:\"pre\", and vinext:config comes first in\n // the array, so mdxDelegate is already set when this proxy's hooks fire.\n {\n name: \"vinext:mdx\",\n enforce: \"pre\",\n config(config, env) {\n if (!mdxDelegate?.config) return;\n const hook = mdxDelegate.config;\n const fn = typeof hook === \"function\" ? hook : hook.handler;\n return fn.call(this, config, env);\n },\n transform(code, id, options) {\n if (!mdxDelegate?.transform) return;\n const hook = mdxDelegate.transform;\n const fn = typeof hook === \"function\" ? hook : hook.handler;\n return fn.call(this, code, id, options);\n },\n },\n // Shim React canary/experimental APIs (ViewTransition, addTransitionType)\n // that exist in Next.js's bundled React canary but not in stable React 19.\n // Provides graceful no-op fallbacks so projects using these APIs degrade\n // instead of crashing with \"does not provide an export named 'ViewTransition'\".\n {\n name: \"vinext:react-canary\",\n enforce: \"pre\",\n\n resolveId(id) {\n if (id === \"virtual:vinext-react-canary\") return \"\\0virtual:vinext-react-canary\";\n },\n\n load(id) {\n if (id === \"\\0virtual:vinext-react-canary\") {\n return [\n `export * from \"react\";`,\n `export { default } from \"react\";`,\n `import * as _React from \"react\";`,\n `export const ViewTransition = _React.ViewTransition || function ViewTransition({ children }) { return children; };`,\n `export const addTransitionType = _React.addTransitionType || function addTransitionType() {};`,\n ].join(\"\\n\");\n }\n },\n\n transform(code, id) {\n // Only transform user source files, not node_modules or virtual modules\n if (id.includes(\"node_modules\")) return null;\n if (id.startsWith(\"\\0\")) return null;\n if (!/\\.(tsx?|jsx?|mjs)$/.test(id)) return null;\n\n // Quick check: does this file reference canary APIs and import from \"react\"?\n if (\n !(code.includes(\"ViewTransition\") || code.includes(\"addTransitionType\")) ||\n !/from\\s+['\"]react['\"]/.test(code)\n ) {\n return null;\n }\n\n // Only rewrite if the import actually destructures a canary API\n const canaryImportRegex = /import\\s*\\{[^}]*(ViewTransition|addTransitionType)[^}]*\\}\\s*from\\s*['\"]react['\"]/;\n if (!canaryImportRegex.test(code)) return null;\n\n // Rewrite all `from \"react\"` / `from 'react'` to use the canary shim.\n // This is safe because the virtual module re-exports everything from\n // react, so non-canary imports continue to work.\n const result = code.replace(\n /from\\s*['\"]react['\"]/g,\n 'from \"virtual:vinext-react-canary\"',\n );\n if (result !== code) {\n return { code: result, map: null };\n }\n return null;\n },\n },\n {\n name: \"vinext:pages-router\",\n\n // HMR: trigger full-reload for Pages Router page changes.\n // Without @vitejs/plugin-react (React Fast Refresh), component edits\n // can't be hot-updated. In theory Vite's default propagation should\n // reach the root and trigger a full-reload, but the Pages Router\n // injects hydration via inline <script type=\"module\"> which may not\n // be tracked in the module graph. Explicitly sending full-reload\n // ensures changes are always reflected in the browser.\n hotUpdate(options: { file: string; server: ViteDevServer; modules: any[] }) {\n if (!hasPagesDir || hasAppDir) return;\n const ext = /\\.(tsx?|jsx?|mdx)$/;\n if (options.file.startsWith(pagesDir) && ext.test(options.file)) {\n options.server.environments.client.hot.send({ type: \"full-reload\" });\n return [];\n }\n },\n\n configureServer(server: ViteDevServer) {\n // Watch pages directory for file additions/removals to invalidate route cache.\n const pageExtensions = /\\.(tsx?|jsx?|mdx)$/;\n\n /**\n * Invalidate the virtual RSC entry module in Vite's module graph.\n *\n * The App Router route table is baked into the virtual RSC entry\n * at generation time. When routes are added or removed, clearing\n * the route cache alone is not enough: the virtual module must\n * also be invalidated so Vite re-calls the load() hook to\n * regenerate the entry with the updated route table.\n */\n function invalidateRscEntryModule() {\n const rscEnv = server.environments[\"rsc\"];\n if (!rscEnv) return;\n const mod = rscEnv.moduleGraph.getModuleById(RESOLVED_RSC_ENTRY);\n if (mod) {\n rscEnv.moduleGraph.invalidateModule(mod);\n rscEnv.hot.send({ type: \"full-reload\" });\n }\n }\n\n server.watcher.on(\"add\", (filePath: string) => {\n if (hasPagesDir && filePath.startsWith(pagesDir) && pageExtensions.test(filePath)) {\n invalidateRouteCache(pagesDir);\n }\n if (hasAppDir && filePath.startsWith(appDir) && pageExtensions.test(filePath)) {\n invalidateAppRouteCache();\n invalidateRscEntryModule();\n }\n });\n server.watcher.on(\"unlink\", (filePath: string) => {\n if (hasPagesDir && filePath.startsWith(pagesDir) && pageExtensions.test(filePath)) {\n invalidateRouteCache(pagesDir);\n }\n if (hasAppDir && filePath.startsWith(appDir) && pageExtensions.test(filePath)) {\n invalidateAppRouteCache();\n invalidateRscEntryModule();\n }\n });\n\n // Run instrumentation.ts register() if present (once at server startup)\n if (instrumentationPath) {\n runInstrumentation(server, instrumentationPath).catch((err) => {\n console.error(\"[vinext] Instrumentation error:\", err);\n });\n }\n\n // Return a function to register middleware AFTER Vite's built-in middleware\n return () => {\n server.middlewares.use(async (req, res, next) => {\n try {\n let url: string = req.url ?? \"/\";\n\n // If no pages directory, skip this middleware entirely\n // (app router is handled by @vitejs/plugin-rsc's built-in middleware)\n if (!hasPagesDir) return next();\n\n // Skip Vite internal requests and static files\n if (\n url.startsWith(\"/@\") ||\n url.startsWith(\"/__vite\") ||\n url.startsWith(\"/node_modules\")\n ) {\n return next();\n }\n\n // Skip .rsc requests — those are for the App Router RSC handler\n if (url.split(\"?\")[0].endsWith(\".rsc\")) {\n return next();\n }\n\n // ── Cross-origin request protection ─────────────────────────\n // Block requests from non-localhost origins to prevent\n // cross-origin data exfiltration from the dev server.\n const blockReason = validateDevRequest(\n {\n origin: req.headers.origin as string | undefined,\n host: req.headers.host,\n \"x-forwarded-host\": req.headers[\"x-forwarded-host\"] as string | undefined,\n \"sec-fetch-site\": req.headers[\"sec-fetch-site\"] as string | undefined,\n \"sec-fetch-mode\": req.headers[\"sec-fetch-mode\"] as string | undefined,\n },\n nextConfig?.serverActionsAllowedOrigins,\n );\n if (blockReason) {\n console.warn(`[vinext] Blocked dev request: ${blockReason} (${url})`);\n res.writeHead(403, { \"Content-Type\": \"text/plain\" });\n res.end(\"Forbidden\");\n return;\n }\n\n // ── Image optimization passthrough (dev mode) ─────────────\n // In dev, redirect to the original asset URL so Vite serves it.\n if (url.split(\"?\")[0] === \"/_vinext/image\") {\n const imgParams = new URLSearchParams(url.split(\"?\")[1] ?? \"\");\n const rawImgUrl = imgParams.get(\"url\");\n // Normalize backslashes: browsers and the URL constructor treat\n // /\\evil.com as //evil.com, bypassing the // check.\n const imgUrl = rawImgUrl?.replaceAll(\"\\\\\", \"/\") ?? null;\n // Allowlist: must start with \"/\" but not \"//\" — blocks absolute\n // URLs, protocol-relative, backslash variants, and exotic schemes.\n if (!imgUrl || !imgUrl.startsWith(\"/\") || imgUrl.startsWith(\"//\")) {\n res.writeHead(400);\n res.end(!rawImgUrl ? \"Missing url parameter\" : \"Only relative URLs allowed\");\n return;\n }\n // Validate the constructed URL's origin hasn't changed (defense in depth).\n const resolvedImg = new URL(imgUrl, `http://${req.headers.host || \"localhost\"}`);\n if (resolvedImg.origin !== `http://${req.headers.host || \"localhost\"}`) {\n res.writeHead(400);\n res.end(\"Only relative URLs allowed\");\n return;\n }\n res.writeHead(302, { Location: imgUrl });\n res.end();\n return;\n }\n\n // Vite's built-in middleware may rewrite \"/\" to \"/index.html\".\n // Normalize it back so our router can match correctly.\n const rawPathname = url.split(\"?\")[0];\n if (rawPathname.endsWith(\"/index.html\")) {\n url = url.replace(\"/index.html\", \"/\");\n } else if (rawPathname.endsWith(\".html\")) {\n // Strip .html extensions (e.g. \"/about.html\" -> \"/about\")\n url = url.replace(/\\.html(?=\\?|$)/, \"\");\n }\n\n // Skip requests for files with extensions (static assets)\n let pathname = url.split(\"?\")[0];\n if (pathname.includes(\".\") && !pathname.endsWith(\".html\")) {\n return next();\n }\n\n // Guard against protocol-relative URL open redirects.\n // Normalize backslashes first: browsers treat /\\ as // in URL\n // context. Check the RAW pathname before normalizePath so the\n // guard fires before normalizePath collapses //.\n pathname = pathname.replaceAll(\"\\\\\", \"/\");\n if (pathname.startsWith(\"//\")) {\n res.writeHead(404);\n res.end(\"404 Not Found\");\n return;\n }\n\n // Normalize the pathname to prevent path-confusion attacks.\n // decodeURIComponent prevents /%61dmin bypassing /admin matchers.\n // normalizePath collapses // and resolves . / .. segments.\n try {\n pathname = normalizePath(decodeURIComponent(pathname));\n } catch {\n // Malformed percent-encoding (e.g. /%E0%A4%A) — return 400 instead of crashing.\n res.writeHead(400);\n res.end(\"Bad Request\");\n return;\n }\n\n // Strip basePath prefix from URL for route matching.\n // All internal routing uses basePath-free paths.\n //\n // NOTE: When basePath is set, we also set Vite's `base` config to\n // `basePath + \"/\"`. Vite's connect middleware stack strips the base\n // prefix from req.url before passing it to our middleware, so the\n // URL will already lack the basePath prefix. We still attempt to\n // strip it (for robustness) but don't reject paths that don't start\n // with basePath — Vite has already done the filtering.\n const bp = nextConfig?.basePath ?? \"\";\n if (bp && pathname.startsWith(bp)) {\n const stripped = pathname.slice(bp.length) || \"/\";\n const qs = url.includes(\"?\") ? url.slice(url.indexOf(\"?\")) : \"\";\n url = stripped + qs;\n pathname = stripped;\n }\n\n // Normalize trailing slash based on next.config.js trailingSlash setting.\n // Redirect to the canonical form if needed.\n if (nextConfig && pathname !== \"/\" && !pathname.startsWith(\"/api\")) {\n const hasTrailing = pathname.endsWith(\"/\");\n if (nextConfig.trailingSlash && !hasTrailing) {\n // trailingSlash: true — redirect /about → /about/\n const qs = url.includes(\"?\") ? url.slice(url.indexOf(\"?\")) : \"\";\n const dest = bp + pathname + \"/\" + qs;\n res.writeHead(308, { Location: dest });\n res.end();\n return;\n } else if (!nextConfig.trailingSlash && hasTrailing) {\n // trailingSlash: false (default) — redirect /about/ → /about\n const qs = url.includes(\"?\") ? url.slice(url.indexOf(\"?\")) : \"\";\n const dest = bp + pathname.replace(/\\/+$/, \"\") + qs;\n res.writeHead(308, { Location: dest });\n res.end();\n return;\n }\n }\n\n // Run middleware.ts if present\n if (middlewarePath) {\n // Only trust X-Forwarded-Proto when behind a trusted proxy\n const devTrustProxy = process.env.VINEXT_TRUST_PROXY === \"1\" || (process.env.VINEXT_TRUSTED_HOSTS ?? \"\").split(\",\").some(h => h.trim());\n const rawProto = devTrustProxy\n ? String(req.headers[\"x-forwarded-proto\"] || \"\").split(\",\")[0].trim()\n : \"\";\n const mwProto = rawProto === \"https\" || rawProto === \"http\" ? rawProto : \"http\";\n const origin = `${mwProto}://${req.headers.host || \"localhost\"}`;\n const middlewareRequest = new Request(new URL(url, origin), {\n method: req.method,\n headers: Object.fromEntries(\n Object.entries(req.headers)\n .filter(([, v]) => v !== undefined)\n .map(([k, v]) => [k, Array.isArray(v) ? v.join(\", \") : String(v)])\n ),\n });\n const result = await runMiddleware(server, middlewarePath, middlewareRequest);\n\n if (!result.continue) {\n if (result.redirectUrl) {\n const redirectHeaders: Record<string, string | string[]> = { Location: result.redirectUrl };\n if (result.responseHeaders) {\n for (const [key, value] of result.responseHeaders) {\n const existing = redirectHeaders[key];\n if (existing === undefined) {\n redirectHeaders[key] = value;\n } else if (Array.isArray(existing)) {\n existing.push(value);\n } else {\n redirectHeaders[key] = [existing, value];\n }\n }\n }\n res.writeHead(result.redirectStatus ?? 307, redirectHeaders);\n res.end();\n return;\n }\n if (result.response) {\n res.statusCode = result.response.status;\n for (const [key, value] of result.response.headers) {\n res.appendHeader(key, value);\n }\n const body = await result.response.text();\n res.end(body);\n return;\n }\n }\n\n // Apply middleware response headers\n if (result.responseHeaders) {\n for (const [key, value] of result.responseHeaders) {\n res.appendHeader(key, value);\n }\n }\n\n // Apply middleware rewrite (URL and optional status code)\n if (result.rewriteUrl) {\n url = result.rewriteUrl;\n }\n if (result.rewriteStatus) {\n (req as any).__vinextRewriteStatus = result.rewriteStatus;\n }\n }\n\n // Build request context once for has/missing condition checks\n // across headers, redirects, and rewrites.\n const reqUrl = new URL(url, `http://${req.headers.host || \"localhost\"}`);\n const reqCtxHeaders = new Headers(\n Object.fromEntries(\n Object.entries(req.headers)\n .filter(([, v]) => v !== undefined)\n .map(([k, v]) => [k, Array.isArray(v) ? v.join(\", \") : String(v)])\n ),\n );\n const reqCtx: RequestContext = {\n headers: reqCtxHeaders,\n cookies: parseCookies(reqCtxHeaders.get(\"cookie\")),\n query: reqUrl.searchParams,\n host: reqCtxHeaders.get(\"host\") ?? reqUrl.host,\n };\n\n // Apply custom headers from next.config.js\n if (nextConfig?.headers.length) {\n applyHeaders(pathname, res, nextConfig.headers, reqCtx);\n }\n\n // Apply redirects from next.config.js\n if (nextConfig?.redirects.length) {\n const redirected = applyRedirects(\n pathname,\n res,\n nextConfig.redirects,\n reqCtx,\n );\n if (redirected) return;\n }\n\n // Apply rewrites from next.config.js (beforeFiles)\n let resolvedUrl = url;\n if (nextConfig?.rewrites.beforeFiles.length) {\n resolvedUrl =\n applyRewrites(pathname, nextConfig.rewrites.beforeFiles, reqCtx) ??\n url;\n }\n\n // External rewrite from beforeFiles — proxy to external URL\n if (isExternalUrl(resolvedUrl)) {\n await proxyExternalRewriteNode(req, res, resolvedUrl);\n return;\n }\n\n // Handle API routes first (pages/api/*)\n const resolvedPathname = resolvedUrl.split(\"?\")[0];\n if (\n resolvedPathname.startsWith(\"/api/\") ||\n resolvedPathname === \"/api\"\n ) {\n const apiRoutes = await apiRouter(pagesDir);\n const handled = await handleApiRoute(\n server,\n req,\n res,\n resolvedUrl,\n apiRoutes,\n );\n if (handled) return;\n\n // No API route matched — if app dir exists, let the RSC plugin handle it\n // (app/api/* route handlers live there). Otherwise hard-404.\n if (hasAppDir) return next();\n\n res.statusCode = 404;\n res.end(\"404 - API route not found\");\n return;\n }\n\n const routes = await pagesRouter(pagesDir);\n\n // Apply afterFiles rewrites — these run after initial route matching\n // If beforeFiles already rewrote the URL, afterFiles still run on the\n // *resolved* pathname. Next.js applies these when route matching succeeds\n // but allows overriding with rewrites.\n if (nextConfig?.rewrites.afterFiles.length) {\n const afterRewrite = applyRewrites(\n resolvedUrl.split(\"?\")[0],\n nextConfig.rewrites.afterFiles,\n reqCtx,\n );\n if (afterRewrite) resolvedUrl = afterRewrite;\n }\n\n // External rewrite from afterFiles — proxy to external URL\n if (isExternalUrl(resolvedUrl)) {\n await proxyExternalRewriteNode(req, res, resolvedUrl);\n return;\n }\n\n const handler = createSSRHandler(server, routes, pagesDir, nextConfig?.i18n);\n const mwStatus = (req as any).__vinextRewriteStatus as number | undefined;\n\n // Try rendering the resolved URL\n const match = matchRoute(resolvedUrl.split(\"?\")[0], routes);\n if (match) {\n await handler(req, res, resolvedUrl, mwStatus);\n return;\n }\n\n // No route matched — try fallback rewrites\n if (nextConfig?.rewrites.fallback.length) {\n const fallbackRewrite = applyRewrites(\n resolvedUrl.split(\"?\")[0],\n nextConfig.rewrites.fallback,\n reqCtx,\n );\n if (fallbackRewrite) {\n // External fallback rewrite — proxy to external URL\n if (isExternalUrl(fallbackRewrite)) {\n await proxyExternalRewriteNode(req, res, fallbackRewrite);\n return;\n }\n await handler(req, res, fallbackRewrite, mwStatus);\n return;\n }\n }\n\n // No fallback matched - if app dir exists, let the RSC plugin handle it,\n // otherwise render via the pages SSR handler (will 404 for unknown routes).\n if (hasAppDir) return next();\n\n await handler(req, res, resolvedUrl, mwStatus);\n } catch (e) {\n next(e);\n }\n });\n };\n },\n },\n // Local image import transform:\n // When a source file imports a local image (e.g., `import hero from './hero.jpg'`),\n // this plugin transforms the default import to a StaticImageData object with\n // { src, width, height } so the next/image shim can set correct dimensions\n // on <img> tags, preventing CLS.\n //\n // Vite's default image import returns a URL string. We intercept this by\n // adding a `?vinext-meta` suffix: the original import gets the URL from Vite,\n // and we resolve the `?vinext-meta` virtual module to provide dimensions.\n {\n name: \"vinext:image-imports\",\n enforce: \"pre\",\n\n // Cache of image dimensions to avoid re-reading files\n _dimCache: imageImportDimCache,\n\n resolveId: {\n filter: { id: /\\?vinext-meta$/ },\n handler(source, _importer) {\n if (!source.endsWith(\"?vinext-meta\")) return null;\n // Resolve the real image path from the importer\n const realPath = source.replace(\"?vinext-meta\", \"\");\n return `\\0vinext-image-meta:${realPath}`;\n },\n },\n\n async load(id) {\n if (!id.startsWith(\"\\0vinext-image-meta:\")) return null;\n const imagePath = id.replace(\"\\0vinext-image-meta:\", \"\");\n\n // Read from cache first\n const cache = imageImportDimCache;\n let dims = cache.get(imagePath);\n if (!dims) {\n try {\n const { imageSize } = await import(\"image-size\");\n const buffer = fs.readFileSync(imagePath);\n const result = imageSize(buffer);\n dims = { width: result.width ?? 0, height: result.height ?? 0 };\n cache.set(imagePath, dims);\n } catch {\n dims = { width: 0, height: 0 };\n }\n }\n\n return `export default ${JSON.stringify(dims)};`;\n },\n\n transform: {\n // Hook filter: Rolldown evaluates these on the Rust side, skipping\n // the JS handler entirely for files that don't match.\n filter: {\n id: {\n include: /\\.(tsx?|jsx?|mjs)$/,\n exclude: /node_modules/,\n },\n code: new RegExp(`import\\\\s+\\\\w+\\\\s+from\\\\s+['\"][^'\"]+\\\\.(${IMAGE_EXTS})['\"]`),\n },\n async handler(code, id) {\n // Defensive guard — duplicates filter logic\n if (id.includes(\"node_modules\")) return null;\n if (id.startsWith(\"\\0\")) return null;\n if (!id.match(/\\.(tsx?|jsx?|mjs)$/)) return null;\n\n const imageImportRe = new RegExp(`import\\\\s+(\\\\w+)\\\\s+from\\\\s+['\"]([^'\"]+\\\\.(${IMAGE_EXTS}))['\"];?`, \"g\");\n if (!imageImportRe.test(code)) return null;\n\n imageImportRe.lastIndex = 0;\n\n const s = new MagicString(code);\n let hasChanges = false;\n\n let match;\n while ((match = imageImportRe.exec(code)) !== null) {\n const [fullMatch, varName, importPath] = match;\n const matchStart = match.index;\n const matchEnd = matchStart + fullMatch.length;\n\n // Resolve the absolute path of the image\n const dir = path.dirname(id);\n const absImagePath = path.resolve(dir, importPath);\n\n if (!fs.existsSync(absImagePath)) continue;\n\n // Replace the single import with two:\n // 1. Original import (Vite gives us the URL string)\n // 2. Meta import (we provide { width, height })\n // Combined into a StaticImageData object\n const urlVar = `__vinext_img_url_${varName}`;\n const metaVar = `__vinext_img_meta_${varName}`;\n const replacement =\n `import ${urlVar} from ${JSON.stringify(importPath)};\\n` +\n `import ${metaVar} from ${JSON.stringify(absImagePath + \"?vinext-meta\")};\\n` +\n `const ${varName} = { src: ${urlVar}, width: ${metaVar}.width, height: ${metaVar}.height };`;\n\n s.overwrite(matchStart, matchEnd, replacement);\n hasChanges = true;\n }\n\n if (!hasChanges) return null;\n\n return {\n code: s.toString(),\n map: s.generateMap({ hires: \"boundary\" }),\n };\n },\n },\n } as Plugin & { _dimCache: Map<string, { width: number; height: number }> },\n // Google Fonts self-hosting:\n // During production builds, fetches Google Fonts CSS + .woff2 files,\n // caches them locally in .vinext/fonts/, and rewrites font constructor\n // calls to pass _selfHostedCSS with @font-face rules pointing at local assets.\n // In dev mode, this plugin is a no-op (CDN loading is used instead).\n {\n name: \"vinext:google-fonts\",\n enforce: \"pre\",\n\n _isBuild: false,\n _fontCache: new Map<string, string>(), // url -> local @font-face CSS\n _cacheDir: \"\",\n\n configResolved(config) {\n (this as any)._isBuild = config.command === \"build\";\n (this as any)._cacheDir = path.join(config.root, \".vinext\", \"fonts\");\n },\n\n transform: {\n // Hook filter: only invoke JS when code contains 'next/font/google'.\n // The _isBuild runtime check can't be expressed as a filter, but this\n // still eliminates nearly all Rust-to-JS calls since very few files\n // import from next/font/google.\n filter: {\n id: {\n include: /\\.(tsx?|jsx?|mjs)$/,\n exclude: /node_modules/,\n },\n code: \"next/font/google\",\n },\n async handler(code, id) {\n if (!(this as any)._isBuild) return null;\n // Defensive guard — duplicates filter logic\n if (id.includes(\"node_modules\")) return null;\n if (id.startsWith(\"\\0\")) return null;\n if (!id.match(/\\.(tsx?|jsx?|mjs)$/)) return null;\n if (!code.includes(\"next/font/google\")) return null;\n\n // Match font constructor calls: Inter({ weight: ..., subsets: ... })\n // We look for PascalCase or Name_Name identifiers followed by ({...})\n // This regex captures the font name and the options object literal\n const fontCallRe = /\\b([A-Z][A-Za-z]*(?:_[A-Z][A-Za-z]*)*)\\s*\\(\\s*(\\{[^}]*\\})\\s*\\)/g;\n\n // Also need to verify these names came from next/font/google import\n const importRe = /import\\s*\\{([^}]+)\\}\\s*from\\s*['\"]next\\/font\\/google['\"]/;\n const importMatch = code.match(importRe);\n if (!importMatch) return null;\n\n const importedNames = new Set(\n importMatch[1].split(\",\").map((s) => s.trim()).filter(Boolean),\n );\n\n const s = new MagicString(code);\n let hasChanges = false;\n\n const cacheDir = (this as any)._cacheDir as string;\n const fontCache = (this as any)._fontCache as Map<string, string>;\n\n let match;\n while ((match = fontCallRe.exec(code)) !== null) {\n const [fullMatch, fontName, optionsStr] = match;\n if (!importedNames.has(fontName)) continue;\n\n // Convert PascalCase/Underscore to font family\n const family = fontName.replace(/_/g, \" \").replace(/([a-z])([A-Z])/g, \"$1 $2\");\n\n // Parse options safely via AST — no eval/new Function\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let options: Record<string, any> = {};\n try {\n const parsed = parseStaticObjectLiteral(optionsStr);\n if (!parsed) continue; // Contains dynamic expressions, skip\n options = parsed as Record<string, any>;\n } catch {\n continue; // Can't parse options statically, skip\n }\n\n // Build the Google Fonts CSS URL\n const weights = options.weight\n ? Array.isArray(options.weight) ? options.weight : [options.weight]\n : [];\n const styles = options.style\n ? Array.isArray(options.style) ? options.style : [options.style]\n : [];\n const display = options.display ?? \"swap\";\n\n let spec = family.replace(/\\s+/g, \"+\");\n if (weights.length > 0) {\n const hasItalic = styles.includes(\"italic\");\n if (hasItalic) {\n const pairs: string[] = [];\n for (const w of weights) { pairs.push(`0,${w}`); pairs.push(`1,${w}`); }\n spec += `:ital,wght@${pairs.join(\";\")}`;\n } else {\n spec += `:wght@${weights.join(\";\")}`;\n }\n } else if (styles.length === 0) {\n // Request full variable weight range when no weight specified.\n // Without this, Google Fonts returns only weight 400.\n spec += `:wght@100..900`;\n }\n const params = new URLSearchParams();\n params.set(\"family\", spec);\n params.set(\"display\", display);\n const cssUrl = `https://fonts.googleapis.com/css2?${params.toString()}`;\n\n // Check cache\n let localCSS = fontCache.get(cssUrl);\n if (!localCSS) {\n try {\n localCSS = await fetchAndCacheFont(cssUrl, family, cacheDir);\n fontCache.set(cssUrl, localCSS);\n } catch {\n // Fetch failed (offline?) — fall back to CDN mode\n continue;\n }\n }\n\n // Inject _selfHostedCSS into the options object\n const matchStart = match.index;\n const matchEnd = matchStart + fullMatch.length;\n const escapedCSS = JSON.stringify(localCSS);\n const closingBrace = optionsStr.lastIndexOf(\"}\");\n const optionsWithCSS = optionsStr.slice(0, closingBrace) +\n (optionsStr.slice(0, closingBrace).trim().endsWith(\"{\") ? \"\" : \", \") +\n `_selfHostedCSS: ${escapedCSS}` +\n optionsStr.slice(closingBrace);\n\n const replacement = `${fontName}(${optionsWithCSS})`;\n s.overwrite(matchStart, matchEnd, replacement);\n hasChanges = true;\n }\n\n if (!hasChanges) return null;\n return {\n code: s.toString(),\n map: s.generateMap({ hires: \"boundary\" }),\n };\n },\n },\n } as Plugin & { _isBuild: boolean; _fontCache: Map<string, string>; _cacheDir: string },\n // Local font path resolution:\n // When a source file calls localFont({ src: \"./font.woff2\" }) or\n // localFont({ src: [{ path: \"./font.woff2\" }] }), the relative paths\n // won't resolve in the browser because the CSS is injected at runtime.\n // This plugin rewrites those path strings into Vite asset import\n // references so that both dev (/@fs/...) and prod (/assets/font-xxx.woff2)\n // URLs are correct.\n {\n name: \"vinext:local-fonts\",\n enforce: \"pre\",\n\n transform: {\n filter: {\n id: {\n include: /\\.(tsx?|jsx?|mjs)$/,\n exclude: /node_modules/,\n },\n code: \"next/font/local\",\n },\n handler(code, id) {\n // Defensive guards — duplicate filter logic\n if (id.includes(\"node_modules\")) return null;\n if (id.startsWith(\"\\0\")) return null;\n if (!id.match(/\\.(tsx?|jsx?|mjs)$/)) return null;\n if (!code.includes(\"next/font/local\")) return null;\n // Skip vinext's own font-local shim — it contains example paths\n // in comments that would be incorrectly rewritten.\n if (id.includes(\"font-local\")) return null;\n\n // Verify there's actually an import from next/font/local\n const importRe = /import\\s+\\w+\\s+from\\s*['\"]next\\/font\\/local['\"]/;\n if (!importRe.test(code)) return null;\n\n const s = new MagicString(code);\n let hasChanges = false;\n let fontImportCounter = 0;\n const imports: string[] = [];\n\n // Match font file paths in `path: \"...\"` or `src: \"...\"` properties.\n // Captures: (1) property+colon prefix, (2) quote char, (3) the path.\n const fontPathRe = /((?:path|src)\\s*:\\s*)(['\"])([^'\"]+\\.(?:woff2?|ttf|otf|eot))\\2/g;\n\n let match;\n while ((match = fontPathRe.exec(code)) !== null) {\n const [fullMatch, prefix, _quote, fontPath] = match;\n const varName = `__vinext_local_font_${fontImportCounter++}`;\n\n // Add an import for this font file — Vite resolves it as a static\n // asset and returns the correct URL for both dev and prod.\n imports.push(`import ${varName} from ${JSON.stringify(fontPath)};`);\n\n // Replace: path: \"./font.woff2\" -> path: __vinext_local_font_0\n const matchStart = match.index;\n const matchEnd = matchStart + fullMatch.length;\n s.overwrite(matchStart, matchEnd, `${prefix}${varName}`);\n hasChanges = true;\n }\n\n if (!hasChanges) return null;\n\n // Prepend the asset imports at the top of the file\n s.prepend(imports.join(\"\\n\") + \"\\n\");\n\n return {\n code: s.toString(),\n map: s.generateMap({ hires: \"boundary\" }),\n };\n },\n },\n } as Plugin,\n // \"use cache\" directive transform:\n // Detects \"use cache\" at file-level or function-level and wraps the\n // exports/functions with registerCachedFunction() from vinext/cache-runtime.\n // Runs without enforce so it executes after JSX transform (parseAst needs plain JS).\n {\n name: \"vinext:use-cache\",\n\n transform: {\n // Hook filter: only invoke JS when code contains 'use cache'.\n // The vast majority of files don't use this directive.\n filter: {\n id: {\n include: /\\.(tsx?|jsx?|mjs)$/,\n exclude: /node_modules/,\n },\n code: \"use cache\",\n },\n async handler(code, id) {\n // Defensive guard — duplicates filter logic\n if (id.includes(\"node_modules\")) return null;\n if (id.startsWith(\"\\0\")) return null;\n if (!id.match(/\\.(tsx?|jsx?|mjs)$/)) return null;\n if (!code.includes(\"use cache\")) return null;\n\n if (!resolvedRscTransformsPath) {\n throw new Error(\n \"vinext: 'use cache' requires @vitejs/plugin-rsc to be installed.\\n\" +\n \"Run: \" + detectPackageManager(process.cwd()) + \" @vitejs/plugin-rsc\",\n );\n }\n const { transformWrapExport, transformHoistInlineDirective } = await import(pathToFileURL(resolvedRscTransformsPath).href);\n const ast = parseAst(code);\n\n // Check for file-level \"use cache\" directive\n const cacheDirective = (ast.body as any[]).find(\n (node: any) =>\n node.type === \"ExpressionStatement\" &&\n node.expression?.type === \"Literal\" &&\n typeof node.expression.value === \"string\" &&\n node.expression.value.startsWith(\"use cache\"),\n );\n\n if (cacheDirective) {\n // File-level \"use cache\" — wrap function exports with\n // registerCachedFunction. Page default exports are wrapped directly\n // (they're leaf components). Layout/template defaults are excluded\n // because they receive {children} from the framework.\n const directiveValue: string = cacheDirective.expression.value;\n const variant = directiveValue === \"use cache\" ? \"\" : directiveValue.replace(\"use cache:\", \"\").replace(\"use cache: \", \"\").trim();\n\n // Only skip default export wrapping for layouts and templates —\n // they receive {children} from the framework which requires\n // temporary reference handling that registerCachedFunction doesn't\n // support yet. Pages, not-found, loading, error, and default are\n // leaf components with no {children} prop and can be cached directly.\n const isLayoutOrTemplate = /\\/(layout|template)\\.(tsx?|jsx?|mjs)$/.test(id);\n\n const runtimeModuleUrl = pathToFileURL(path.join(shimsDir, \"cache-runtime.js\")).href;\n const result = transformWrapExport(code, ast as any, {\n runtime: (value: any, name: any) =>\n `(await import(${JSON.stringify(runtimeModuleUrl)})).registerCachedFunction(${value}, ${JSON.stringify(id + \":\" + name)}, ${JSON.stringify(variant)})`,\n rejectNonAsyncFunction: false,\n filter: (name: any, meta: any) => {\n // Skip non-functions (constants, types, etc.)\n if (meta.isFunction === false) return false;\n // Skip the default export on layout/template files — these\n // receive {children} from the framework, and caching them\n // requires temporary reference handling for the children slot.\n // Named exports (e.g. generateMetadata) are still wrapped.\n if (isLayoutOrTemplate && name === \"default\") return false;\n return true;\n },\n });\n\n if (result.exportNames.length > 0) {\n // Remove the directive itself so it doesn't cause runtime errors\n const output = result.output;\n output.overwrite(cacheDirective.start, cacheDirective.end, `/* \"use cache\" — wrapped by vinext */`);\n return {\n code: output.toString(),\n map: output.generateMap({ hires: \"boundary\" }),\n };\n }\n\n // Even if no exports were wrapped, still strip the directive\n // (e.g., layout/template file with only a default export)\n const output = new MagicString(code);\n output.overwrite(cacheDirective.start, cacheDirective.end, `/* \"use cache\" — handled by vinext */`);\n return {\n code: output.toString(),\n map: output.generateMap({ hires: \"boundary\" }),\n };\n }\n\n // Check for function-level \"use cache\" directives\n // (e.g., async function getData() { \"use cache\"; ... })\n const hasInlineCache = code.includes(\"use cache\") && !cacheDirective;\n if (hasInlineCache) {\n const runtimeModuleUrl2 = pathToFileURL(path.join(shimsDir, \"cache-runtime.js\")).href;\n\n try {\n const result = transformHoistInlineDirective(code, ast as any, {\n directive: /^use cache(:\\s*\\w+)?$/,\n runtime: (value: any, name: any, meta: any) => {\n const directiveMatch = meta.directiveMatch[0];\n const variant = directiveMatch === \"use cache\" ? \"\" : directiveMatch.replace(\"use cache:\", \"\").replace(\"use cache: \", \"\").trim();\n return `(await import(${JSON.stringify(runtimeModuleUrl2)})).registerCachedFunction(${value}, ${JSON.stringify(id + \":\" + name)}, ${JSON.stringify(variant)})`;\n },\n rejectNonAsyncFunction: false,\n });\n\n if (result.names.length > 0) {\n return {\n code: result.output.toString(),\n map: result.output.generateMap({ hires: \"boundary\" }),\n };\n }\n } catch {\n // If hoisting fails (e.g., complex closure), fall through\n }\n }\n\n return null;\n },\n },\n },\n // Copy @vercel/og assets (font, WASM) to the RSC output directory.\n // @vercel/og uses readFileSync(new URL(\"./font.ttf\", import.meta.url)) which\n // breaks when the module is bundled because Vite doesn't process\n // new URL(..., import.meta.url) for server-side (SSR/RSC) builds.\n // This plugin copies the required assets so they exist alongside the bundle.\n {\n name: \"vinext:og-assets\",\n apply: \"build\",\n enforce: \"post\",\n writeBundle: {\n sequential: true,\n order: \"post\",\n async handler(options) {\n const envName = this.environment?.name;\n if (envName !== \"rsc\") return;\n\n const outDir = options.dir;\n if (!outDir) return;\n\n // Check if the bundle references @vercel/og assets\n const indexPath = path.join(outDir, \"index.js\");\n if (!fs.existsSync(indexPath)) return;\n\n const content = fs.readFileSync(indexPath, \"utf-8\");\n const ogAssets = [\n \"noto-sans-v27-latin-regular.ttf\",\n \"resvg.wasm\",\n ];\n\n // Only copy if the bundle actually references these files\n const referencedAssets = ogAssets.filter(asset => content.includes(asset));\n if (referencedAssets.length === 0) return;\n\n // Find @vercel/og in node_modules\n try {\n const require = createRequire(import.meta.url);\n const ogPkgPath = require.resolve(\"@vercel/og/package.json\");\n const ogDistDir = path.join(path.dirname(ogPkgPath), \"dist\");\n\n for (const asset of referencedAssets) {\n const src = path.join(ogDistDir, asset);\n const dest = path.join(outDir, asset);\n if (fs.existsSync(src) && !fs.existsSync(dest)) {\n fs.copyFileSync(src, dest);\n }\n }\n } catch {\n // @vercel/og not installed — nothing to copy\n }\n },\n },\n },\n // Write image config JSON for the App Router production server.\n // The App Router RSC entry doesn't export vinextConfig (that's a Pages\n // Router pattern), so we write a separate JSON file at build time that\n // prod-server.ts reads at startup for SVG/security header config.\n {\n name: \"vinext:image-config\",\n apply: \"build\",\n enforce: \"post\",\n writeBundle: {\n sequential: true,\n order: \"post\",\n handler(options) {\n const envName = this.environment?.name;\n if (envName !== \"rsc\") return;\n\n const outDir = options.dir;\n if (!outDir) return;\n\n const imageConfig = {\n dangerouslyAllowSVG: nextConfig?.images?.dangerouslyAllowSVG,\n contentDispositionType: nextConfig?.images?.contentDispositionType,\n contentSecurityPolicy: nextConfig?.images?.contentSecurityPolicy,\n };\n\n fs.writeFileSync(\n path.join(outDir, \"image-config.json\"),\n JSON.stringify(imageConfig),\n );\n },\n },\n },\n // Cloudflare Workers production build integration:\n // After all environments are built, compute lazy chunks from the client\n // build manifest and inject globals into the worker entry.\n //\n // Pages Router: injects __VINEXT_CLIENT_ENTRY__, __VINEXT_SSR_MANIFEST__,\n // and __VINEXT_LAZY_CHUNKS__ into the worker entry (found via wrangler.json).\n // App Router: the RSC plugin handles __VINEXT_CLIENT_ENTRY__ via\n // loadBootstrapScriptContent(), but we still inject __VINEXT_LAZY_CHUNKS__\n // and __VINEXT_SSR_MANIFEST__ into the worker entry at dist/server/index.js.\n // Both: generates _headers file for immutable asset caching.\n {\n name: \"vinext:cloudflare-build\",\n apply: \"build\",\n enforce: \"post\",\n closeBundle: {\n sequential: true,\n order: \"post\",\n async handler() {\n const envName = this.environment?.name\n if (!envName || !hasCloudflarePlugin) return;\n if (envName !== \"client\") return;\n\n const envConfig = this.environment?.config;\n if (!envConfig) return;\n const buildRoot = envConfig.root ?? process.cwd();\n const distDir = path.resolve(buildRoot, \"dist\");\n if (!fs.existsSync(distDir)) return;\n\n const clientDir = path.resolve(buildRoot, \"dist\", \"client\");\n\n // Read build manifest and compute lazy chunks (only reachable via\n // dynamic imports). This runs for BOTH App Router and Pages Router.\n // clientEntryFile is only used by the Pages Router path below —\n // App Router gets its client entry via the RSC plugin instead.\n let lazyChunksData: string[] | null = null;\n let clientEntryFile: string | null = null;\n const buildManifestPath = path.join(clientDir, \".vite\", \"manifest.json\");\n if (fs.existsSync(buildManifestPath)) {\n try {\n const buildManifest = JSON.parse(fs.readFileSync(buildManifestPath, \"utf-8\"));\n for (const [, value] of Object.entries(buildManifest) as [string, any][]) {\n if (value && value.isEntry && value.file) {\n clientEntryFile = value.file;\n break;\n }\n }\n const lazy = computeLazyChunks(buildManifest);\n if (lazy.length > 0) lazyChunksData = lazy;\n } catch { /* ignore parse errors */ }\n }\n\n // Read SSR manifest for per-page CSS/JS injection\n let ssrManifestData: Record<string, string[]> | null = null;\n const ssrManifestPath = path.join(clientDir, \".vite\", \"ssr-manifest.json\");\n if (fs.existsSync(ssrManifestPath)) {\n try {\n ssrManifestData = JSON.parse(fs.readFileSync(ssrManifestPath, \"utf-8\"));\n } catch { /* ignore parse errors */ }\n }\n\n if (hasAppDir) {\n // App Router: the RSC plugin handles __VINEXT_CLIENT_ENTRY__\n // via loadBootstrapScriptContent(), but we still need to inject\n // __VINEXT_LAZY_CHUNKS__ and __VINEXT_SSR_MANIFEST__ into the\n // worker entry at dist/server/index.js.\n const workerEntry = path.resolve(distDir, \"server\", \"index.js\");\n if (fs.existsSync(workerEntry) && (lazyChunksData || ssrManifestData)) {\n let code = fs.readFileSync(workerEntry, \"utf-8\");\n const globals: string[] = [];\n if (ssrManifestData) {\n globals.push(`globalThis.__VINEXT_SSR_MANIFEST__ = ${JSON.stringify(ssrManifestData)};`);\n }\n if (lazyChunksData) {\n globals.push(`globalThis.__VINEXT_LAZY_CHUNKS__ = ${JSON.stringify(lazyChunksData)};`);\n }\n code = globals.join(\"\\n\") + \"\\n\" + code;\n fs.writeFileSync(workerEntry, code);\n }\n } else {\n // Pages Router: find worker output by scanning dist/ for a\n // directory containing wrangler.json (Cloudflare plugin default).\n let workerOutDir: string | null = null;\n for (const entry of fs.readdirSync(distDir)) {\n const candidate = path.join(distDir, entry);\n if (entry === \"client\") continue;\n if (fs.statSync(candidate).isDirectory() &&\n fs.existsSync(path.join(candidate, \"wrangler.json\"))) {\n workerOutDir = candidate;\n break;\n }\n }\n if (!workerOutDir) return;\n\n const workerEntry = path.join(workerOutDir, \"index.js\");\n if (!fs.existsSync(workerEntry)) return;\n\n // Fallback: scan dist/client/assets/ for the client entry chunk.\n // Pages Router uses \"vinext-client-entry\", App Router uses\n // \"vinext-app-browser-entry\".\n if (!clientEntryFile) {\n const assetsDir = path.join(clientDir, \"assets\");\n if (fs.existsSync(assetsDir)) {\n const files = fs.readdirSync(assetsDir);\n const entry = files.find((f: string) =>\n (f.includes(\"vinext-client-entry\") || f.includes(\"vinext-app-browser-entry\")) && f.endsWith(\".js\"));\n if (entry) clientEntryFile = \"assets/\" + entry;\n }\n }\n\n // Prepend globals to worker entry\n if (clientEntryFile || ssrManifestData || lazyChunksData) {\n let code = fs.readFileSync(workerEntry, \"utf-8\");\n const globals: string[] = [];\n if (clientEntryFile) {\n globals.push(`globalThis.__VINEXT_CLIENT_ENTRY__ = ${JSON.stringify(clientEntryFile)};`);\n }\n if (ssrManifestData) {\n globals.push(`globalThis.__VINEXT_SSR_MANIFEST__ = ${JSON.stringify(ssrManifestData)};`);\n }\n if (lazyChunksData) {\n globals.push(`globalThis.__VINEXT_LAZY_CHUNKS__ = ${JSON.stringify(lazyChunksData)};`);\n }\n code = globals.join(\"\\n\") + \"\\n\" + code;\n fs.writeFileSync(workerEntry, code);\n }\n }\n\n // Generate _headers file for Cloudflare Workers static asset caching.\n // Vite outputs content-hashed files (JS, CSS, fonts) to the assetsDir\n // (defaults to \"assets\"). These are safe to cache indefinitely since\n // the hash changes on any content change. Without this, Cloudflare\n // serves them with max-age=0 which forces unnecessary revalidation\n // on every page load.\n const headersPath = path.join(clientDir, \"_headers\");\n if (!fs.existsSync(headersPath)) {\n const assetsDir = envConfig.build?.assetsDir ?? \"assets\";\n const headersContent = [\n \"# Cache content-hashed assets immutably (generated by vinext)\",\n `/${assetsDir}/*`,\n \" Cache-Control: public, max-age=31536000, immutable\",\n \"\",\n ].join(\"\\n\");\n fs.writeFileSync(headersPath, headersContent);\n }\n },\n },\n },\n ];\n\n // Append auto-injected RSC plugins if applicable\n if (rscPluginPromise) {\n plugins.push(rscPluginPromise);\n }\n\n return plugins as Plugin[];\n}\n\n/**\n * Collect all NEXT_PUBLIC_* env vars and create Vite define entries\n * so they get inlined into the client bundle.\n */\nfunction getNextPublicEnvDefines(): Record<string, string> {\n const defines: Record<string, string> = {};\n for (const [key, value] of Object.entries(process.env)) {\n if (key.startsWith(\"NEXT_PUBLIC_\") && value !== undefined) {\n defines[`process.env.${key}`] = JSON.stringify(value);\n }\n }\n return defines;\n}\n\n/**\n * If the current position in `str` starts with a parenthesized group, consume\n * it and advance `re.lastIndex` past the closing `)`. Returns the group\n * contents or null if no group is present.\n */\nfunction extractConstraint(str: string, re: RegExp): string | null {\n if (str[re.lastIndex] !== \"(\") return null;\n const start = re.lastIndex + 1;\n let depth = 1;\n let i = start;\n while (i < str.length && depth > 0) {\n if (str[i] === \"(\") depth++;\n else if (str[i] === \")\") depth--;\n i++;\n }\n if (depth !== 0) return null;\n re.lastIndex = i;\n return str.slice(start, i - 1);\n}\n\n/**\n * Match a Next.js route pattern (e.g. \"/blog/:slug\", \"/docs/:path*\") against a pathname.\n * Returns matched params or null.\n *\n * Supports:\n * :param — matches a single path segment\n * :param* — matches zero or more segments (catch-all)\n * :param+ — matches one or more segments\n * (regex) — inline regex patterns in the source\n */\nexport function matchConfigPattern(\n pathname: string,\n pattern: string,\n): Record<string, string> | null {\n // If the pattern contains regex groups like (\\\\d+) or (.*), use regex matching.\n // Also enter this branch when a catch-all parameter (:param* or :param+) is\n // followed by a literal suffix (e.g. \"/:path*.md\"). Without this, the suffix\n // pattern falls through to the simple segment matcher which incorrectly treats\n // the whole segment (\":path*.md\") as a named parameter and matches everything.\n if (\n pattern.includes(\"(\") ||\n pattern.includes(\"\\\\\") ||\n /:[\\w-]+[*+][^/]/.test(pattern) ||\n /:[\\w-]+\\./.test(pattern)\n ) {\n try {\n // Extract named params and their constraints from the pattern.\n // :param(constraint) -> use constraint as the regex group\n // :param -> ([^/]+)\n // :param* -> (.*)\n // :param+ -> (.+)\n // Param names may contain hyphens (e.g. :auth-method, :sign-in).\n const paramNames: string[] = [];\n // Single-pass conversion with procedural suffix handling. The tokenizer\n // matches only simple, non-overlapping tokens; quantifier/constraint\n // suffixes after :param are consumed procedurally to avoid polynomial\n // backtracking in the regex engine.\n let regexStr = \"\";\n const tokenRe = /:([\\w-]+)|[.]|[^:.]+/g; // lgtm[js/redos] — alternatives are non-overlapping (`:` and `.` excluded from `[^:.]+`)\n let tok: RegExpExecArray | null;\n while ((tok = tokenRe.exec(pattern)) !== null) {\n if (tok[1] !== undefined) {\n const name = tok[1];\n const rest = pattern.slice(tokenRe.lastIndex);\n // Check for quantifier (* or +) with optional constraint\n if (rest.startsWith(\"*\") || rest.startsWith(\"+\")) {\n const quantifier = rest[0];\n tokenRe.lastIndex += 1;\n const constraint = extractConstraint(pattern, tokenRe);\n paramNames.push(name);\n if (constraint !== null) {\n regexStr += `(${constraint})`;\n } else {\n regexStr += quantifier === \"*\" ? \"(.*)\" : \"(.+)\";\n }\n } else {\n // Check for inline constraint without quantifier\n const constraint = extractConstraint(pattern, tokenRe);\n paramNames.push(name);\n regexStr += constraint !== null ? `(${constraint})` : \"([^/]+)\";\n }\n } else if (tok[0] === \".\") {\n regexStr += \"\\\\.\";\n } else {\n regexStr += tok[0];\n }\n }\n const re = safeRegExp(\"^\" + regexStr + \"$\");\n if (!re) return null;\n const match = re.exec(pathname);\n if (!match) return null;\n const params: Record<string, string> = {};\n for (let i = 0; i < paramNames.length; i++) {\n params[paramNames[i]] = match[i + 1] ?? \"\";\n }\n return params;\n } catch {\n // Fall through to segment-based matching\n }\n }\n\n // Check for catch-all patterns (:param* or :param+) without regex groups\n // Param names may contain hyphens (e.g. :sign-in*, :sign-up+).\n const catchAllMatch = pattern.match(/:([\\w-]+)(\\*|\\+)$/);\n if (catchAllMatch) {\n const prefix = pattern.slice(0, pattern.lastIndexOf(\":\"));\n const paramName = catchAllMatch[1];\n const isPlus = catchAllMatch[2] === \"+\";\n\n if (!pathname.startsWith(prefix.replace(/\\/$/, \"\"))) return null;\n\n const rest = pathname.slice(prefix.replace(/\\/$/, \"\").length);\n // For :path+ we need at least one segment (non-empty after the prefix)\n if (isPlus && (!rest || rest === \"/\")) return null;\n // For :path* zero segments is fine\n let restValue = rest.startsWith(\"/\") ? rest.slice(1) : rest;\n // NOTE: Do NOT decodeURIComponent here. The pathname is already decoded at\n // the entry point. Decoding again would create a double-decode vector.\n return { [paramName]: restValue };\n }\n\n // Simple segment-based matching for exact patterns and :param\n const parts = pattern.split(\"/\");\n const pathParts = pathname.split(\"/\");\n\n if (parts.length !== pathParts.length) return null;\n\n const params: Record<string, string> = {};\n for (let i = 0; i < parts.length; i++) {\n if (parts[i].startsWith(\":\")) {\n params[parts[i].slice(1)] = pathParts[i];\n } else if (parts[i] !== pathParts[i]) {\n return null;\n }\n }\n return params;\n}\n\n/**\n * Sanitize a redirect/rewrite destination by collapsing leading slashes and\n * backslashes to a single \"/\" for non-external URLs. Browsers interpret \"\\\"\n * as \"/\" in URL contexts, so \"\\/evil.com\" becomes \"//evil.com\" (protocol-relative).\n */\nfunction sanitizeDestinationLocal(dest: string): string {\n if (dest.startsWith(\"http://\") || dest.startsWith(\"https://\")) return dest;\n dest = dest.replace(/^[\\\\/]+/, \"/\");\n return dest;\n}\n\n/**\n * Apply redirect rules from next.config.js.\n * Returns true if a redirect was applied.\n */\nfunction applyRedirects(\n pathname: string,\n res: any,\n redirects: NextRedirect[],\n ctx: RequestContext,\n): boolean {\n const result = matchRedirect(pathname, redirects, ctx);\n if (result) {\n // Sanitize to prevent open redirect via protocol-relative URLs\n const dest = sanitizeDestinationLocal(result.destination);\n res.writeHead(result.permanent ? 308 : 307, { Location: dest });\n res.end();\n return true;\n }\n return false;\n}\n\n/**\n * Proxy an external rewrite in the Node.js dev server context.\n *\n * Converts the Node.js IncomingMessage into a Web Request, calls\n * proxyExternalRequest(), and pipes the response back to the Node.js\n * ServerResponse.\n */\nasync function proxyExternalRewriteNode(\n req: import(\"node:http\").IncomingMessage,\n res: import(\"node:http\").ServerResponse,\n externalUrl: string,\n): Promise<void> {\n try {\n const proto = \"http\";\n const host = req.headers.host || \"localhost\";\n const origin = `${proto}://${host}`;\n const method = req.method ?? \"GET\";\n const hasBody = method !== \"GET\" && method !== \"HEAD\";\n const init: RequestInit & { duplex?: string } = {\n method,\n headers: Object.fromEntries(\n Object.entries(req.headers)\n .filter(([, v]) => v !== undefined)\n .map(([k, v]) => [k, Array.isArray(v) ? v.join(\", \") : String(v)]),\n ),\n };\n if (hasBody) {\n const { Readable } = await import(\"node:stream\");\n init.body = Readable.toWeb(req) as unknown as ReadableStream;\n init.duplex = \"half\";\n }\n const webRequest = new Request(new URL(req.url ?? \"/\", origin), init);\n const proxyResponse = await proxyExternalRequest(webRequest, externalUrl);\n\n // Preserve multi-value headers (e.g. Set-Cookie) — Object.fromEntries()\n // would collapse them into a single value.\n const nodeHeaders: Record<string, string | string[]> = {};\n proxyResponse.headers.forEach((value, key) => {\n const existing = nodeHeaders[key];\n if (existing !== undefined) {\n nodeHeaders[key] = Array.isArray(existing)\n ? [...existing, value]\n : [existing, value];\n } else {\n nodeHeaders[key] = value;\n }\n });\n res.writeHead(proxyResponse.status, nodeHeaders);\n\n if (proxyResponse.body) {\n const { Readable: ReadableImport } = await import(\"node:stream\");\n const nodeStream = ReadableImport.fromWeb(proxyResponse.body as unknown as import(\"stream/web\").ReadableStream);\n nodeStream.pipe(res);\n } else {\n res.end();\n }\n } catch (e) {\n console.error(\"[vinext] External rewrite proxy error:\", e);\n if (!res.headersSent) {\n res.writeHead(502);\n res.end(\"Bad Gateway\");\n }\n }\n}\n\n/**\n * Apply rewrite rules from next.config.js.\n * Returns the rewritten URL or null if no rewrite matched.\n */\nfunction applyRewrites(\n pathname: string,\n rewrites: NextRewrite[],\n ctx: RequestContext,\n): string | null {\n const dest = matchRewrite(pathname, rewrites, ctx);\n if (dest) {\n // Sanitize to prevent open redirect via protocol-relative URLs\n return sanitizeDestinationLocal(dest);\n }\n return null;\n}\n\n/**\n * Apply custom header rules from next.config.js.\n */\nfunction applyHeaders(\n pathname: string,\n res: any,\n headers: NextHeader[],\n ctx: RequestContext,\n): void {\n const matched = matchHeaders(pathname, headers, ctx);\n for (const header of matched) {\n res.setHeader(header.key, header.value);\n }\n}\n\n/**\n * Find a file by name (without extension) in a directory.\n * Checks .tsx, .ts, .jsx, .js extensions.\n */\nfunction findFileWithExts(dir: string, name: string): string | null {\n const extensions = [\".tsx\", \".ts\", \".jsx\", \".js\"];\n for (const ext of extensions) {\n const filePath = path.join(dir, name + ext);\n if (fs.existsSync(filePath)) return filePath;\n }\n return null;\n}\n\n/**\n * Check if the project has .mdx files in app/ or pages/ directories.\n */\nfunction hasMdxFiles(root: string, appDir: string | null, pagesDir: string | null): boolean {\n const dirs = [appDir, pagesDir].filter(Boolean) as string[];\n for (const dir of dirs) {\n if (fs.existsSync(dir) && scanDirForMdx(dir)) return true;\n }\n return false;\n}\n\nfunction scanDirForMdx(dir: string): boolean {\n try {\n const entries = fs.readdirSync(dir, { withFileTypes: true });\n for (const entry of entries) {\n if (entry.name.startsWith(\".\") || entry.name === \"node_modules\") continue;\n const full = path.join(dir, entry.name);\n if (entry.isDirectory()) {\n if (scanDirForMdx(full)) return true;\n } else if (entry.isFile() && entry.name.endsWith(\".mdx\")) {\n return true;\n }\n }\n } catch {\n // ignore unreadable dirs\n }\n return false;\n}\n\n// Public exports for static export\nexport { staticExportPages, staticExportApp } from \"./build/static-export.js\";\nexport type { StaticExportResult, StaticExportOptions, AppStaticExportOptions } from \"./build/static-export.js\";\n\n// Exported for CLI and testing\nexport { clientManualChunks, clientOutputConfig, clientTreeshakeConfig, computeLazyChunks };\nexport { resolvePostcssStringPlugins as _resolvePostcssStringPlugins };\nexport { parseStaticObjectLiteral as _parseStaticObjectLiteral };\n"]}