vinext 0.0.27 → 0.0.29
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/build/report.d.ts +117 -0
- package/dist/build/report.d.ts.map +1 -0
- package/dist/build/report.js +303 -0
- package/dist/build/report.js.map +1 -0
- package/dist/build/static-export.d.ts +1 -1
- package/dist/build/static-export.d.ts.map +1 -1
- package/dist/build/static-export.js +2 -1
- package/dist/build/static-export.js.map +1 -1
- package/dist/cli.js +106 -9
- package/dist/cli.js.map +1 -1
- package/dist/cloudflare/kv-cache-handler.d.ts +28 -17
- package/dist/cloudflare/kv-cache-handler.d.ts.map +1 -1
- package/dist/cloudflare/kv-cache-handler.js +109 -42
- package/dist/cloudflare/kv-cache-handler.js.map +1 -1
- package/dist/cloudflare/tpr.d.ts +10 -0
- package/dist/cloudflare/tpr.d.ts.map +1 -1
- package/dist/cloudflare/tpr.js +36 -41
- package/dist/cloudflare/tpr.js.map +1 -1
- package/dist/config/config-matchers.d.ts +1 -0
- package/dist/config/config-matchers.d.ts.map +1 -1
- package/dist/config/config-matchers.js +51 -23
- package/dist/config/config-matchers.js.map +1 -1
- package/dist/config/next-config.d.ts.map +1 -1
- package/dist/config/next-config.js +16 -0
- package/dist/config/next-config.js.map +1 -1
- package/dist/deploy.d.ts +1 -1
- package/dist/deploy.d.ts.map +1 -1
- package/dist/deploy.js +48 -32
- package/dist/deploy.js.map +1 -1
- package/dist/entries/app-rsc-entry.d.ts +3 -1
- package/dist/entries/app-rsc-entry.d.ts.map +1 -1
- package/dist/entries/app-rsc-entry.js +514 -99
- package/dist/entries/app-rsc-entry.js.map +1 -1
- package/dist/entries/pages-server-entry.d.ts.map +1 -1
- package/dist/entries/pages-server-entry.js +154 -58
- package/dist/entries/pages-server-entry.js.map +1 -1
- package/dist/index.d.ts +40 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +239 -79
- package/dist/index.js.map +1 -1
- package/dist/plugins/client-reference-dedup.d.ts +19 -0
- package/dist/plugins/client-reference-dedup.d.ts.map +1 -0
- package/dist/plugins/client-reference-dedup.js +96 -0
- package/dist/plugins/client-reference-dedup.js.map +1 -0
- package/dist/routing/app-router.d.ts +2 -0
- package/dist/routing/app-router.d.ts.map +1 -1
- package/dist/routing/app-router.js +145 -161
- package/dist/routing/app-router.js.map +1 -1
- package/dist/routing/pages-router.d.ts +1 -1
- package/dist/routing/pages-router.d.ts.map +1 -1
- package/dist/routing/pages-router.js +37 -65
- package/dist/routing/pages-router.js.map +1 -1
- package/dist/routing/route-trie.d.ts +57 -0
- package/dist/routing/route-trie.d.ts.map +1 -0
- package/dist/routing/route-trie.js +160 -0
- package/dist/routing/route-trie.js.map +1 -0
- package/dist/routing/route-validation.d.ts +8 -0
- package/dist/routing/route-validation.d.ts.map +1 -0
- package/dist/routing/route-validation.js +136 -0
- package/dist/routing/route-validation.js.map +1 -0
- package/dist/routing/utils.d.ts +19 -0
- package/dist/routing/utils.d.ts.map +1 -1
- package/dist/routing/utils.js +47 -0
- package/dist/routing/utils.js.map +1 -1
- package/dist/server/api-handler.d.ts.map +1 -1
- package/dist/server/api-handler.js +52 -20
- package/dist/server/api-handler.js.map +1 -1
- package/dist/server/dev-server.d.ts.map +1 -1
- package/dist/server/dev-server.js +67 -9
- package/dist/server/dev-server.js.map +1 -1
- package/dist/server/image-optimization.d.ts.map +1 -1
- package/dist/server/image-optimization.js +1 -1
- package/dist/server/image-optimization.js.map +1 -1
- package/dist/server/instrumentation.d.ts.map +1 -1
- package/dist/server/instrumentation.js +17 -8
- package/dist/server/instrumentation.js.map +1 -1
- package/dist/server/isr-cache.d.ts +5 -13
- package/dist/server/isr-cache.d.ts.map +1 -1
- package/dist/server/isr-cache.js +13 -12
- package/dist/server/isr-cache.js.map +1 -1
- package/dist/server/metadata-routes.d.ts +8 -2
- package/dist/server/metadata-routes.d.ts.map +1 -1
- package/dist/server/metadata-routes.js +73 -28
- package/dist/server/metadata-routes.js.map +1 -1
- package/dist/server/middleware-codegen.d.ts +11 -1
- package/dist/server/middleware-codegen.d.ts.map +1 -1
- package/dist/server/middleware-codegen.js +204 -12
- package/dist/server/middleware-codegen.js.map +1 -1
- package/dist/server/middleware.d.ts +9 -8
- package/dist/server/middleware.d.ts.map +1 -1
- package/dist/server/middleware.js +76 -14
- package/dist/server/middleware.js.map +1 -1
- package/dist/server/prod-server.d.ts +8 -2
- package/dist/server/prod-server.d.ts.map +1 -1
- package/dist/server/prod-server.js +144 -74
- package/dist/server/prod-server.js.map +1 -1
- package/dist/shims/cache.d.ts +2 -0
- package/dist/shims/cache.d.ts.map +1 -1
- package/dist/shims/cache.js +20 -8
- package/dist/shims/cache.js.map +1 -1
- package/dist/shims/fetch-cache.d.ts.map +1 -1
- package/dist/shims/fetch-cache.js +5 -2
- package/dist/shims/fetch-cache.js.map +1 -1
- package/dist/shims/form.d.ts.map +1 -1
- package/dist/shims/form.js +103 -8
- package/dist/shims/form.js.map +1 -1
- package/dist/shims/headers.d.ts +11 -3
- package/dist/shims/headers.d.ts.map +1 -1
- package/dist/shims/headers.js +182 -30
- package/dist/shims/headers.js.map +1 -1
- package/dist/shims/internal/parse-cookie-header.d.ts +12 -0
- package/dist/shims/internal/parse-cookie-header.d.ts.map +1 -0
- package/dist/shims/internal/parse-cookie-header.js +32 -0
- package/dist/shims/internal/parse-cookie-header.js.map +1 -0
- package/dist/shims/link.d.ts +2 -1
- package/dist/shims/link.d.ts.map +1 -1
- package/dist/shims/link.js +19 -45
- package/dist/shims/link.js.map +1 -1
- package/dist/shims/metadata.d.ts +56 -0
- package/dist/shims/metadata.d.ts.map +1 -1
- package/dist/shims/metadata.js +66 -0
- package/dist/shims/metadata.js.map +1 -1
- package/dist/shims/navigation.d.ts +5 -7
- package/dist/shims/navigation.d.ts.map +1 -1
- package/dist/shims/navigation.js +61 -39
- package/dist/shims/navigation.js.map +1 -1
- package/dist/shims/readonly-url-search-params.d.ts +11 -0
- package/dist/shims/readonly-url-search-params.d.ts.map +1 -0
- package/dist/shims/readonly-url-search-params.js +24 -0
- package/dist/shims/readonly-url-search-params.js.map +1 -0
- package/dist/shims/router.d.ts +4 -3
- package/dist/shims/router.d.ts.map +1 -1
- package/dist/shims/router.js +55 -48
- package/dist/shims/router.js.map +1 -1
- package/dist/shims/server.d.ts +1 -1
- package/dist/shims/server.d.ts.map +1 -1
- package/dist/shims/server.js +7 -13
- package/dist/shims/server.js.map +1 -1
- package/dist/shims/url-utils.d.ts +20 -6
- package/dist/shims/url-utils.d.ts.map +1 -1
- package/dist/shims/url-utils.js +79 -0
- package/dist/shims/url-utils.js.map +1 -1
- package/dist/utils/manifest-paths.d.ts +4 -0
- package/dist/utils/manifest-paths.d.ts.map +1 -0
- package/dist/utils/manifest-paths.js +20 -0
- package/dist/utils/manifest-paths.js.map +1 -0
- package/dist/utils/query.d.ts +9 -0
- package/dist/utils/query.d.ts.map +1 -1
- package/dist/utils/query.js +59 -9
- package/dist/utils/query.js.map +1 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"static-export.js","sourceRoot":"","sources":["../../src/build/static-export.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Static export for `output: 'export'`.\n *\n * Renders all pages to static HTML files at build time. Produces a directory\n * of HTML + client JS/CSS that can be deployed to any static file host\n * (S3, Cloudflare Pages, GitHub Pages, Nginx, etc.) with no server required.\n *\n * Pages Router:\n * - Static pages → render to HTML\n * - getStaticProps pages → call at build time, render with props\n * - Dynamic routes → call getStaticPaths (must be fallback: false), render each\n * - getServerSideProps → build error\n * - API routes → skipped with warning\n *\n * App Router:\n * - Static pages → run Server Components at build time, render to HTML\n * - Dynamic routes → call generateStaticParams(), render each\n * - Dynamic routes without generateStaticParams → build error\n */\nimport type { ViteDevServer } from \"vite\";\nimport type { Route } from \"../routing/pages-router.js\";\nimport type { AppRoute } from \"../routing/app-router.js\";\nimport type { ResolvedNextConfig } from \"../config/next-config.js\";\nimport { safeJsonStringify } from \"../server/html.js\";\nimport { escapeAttr } from \"../shims/head.js\";\nimport path from \"node:path\";\nimport fs from \"node:fs\";\nimport React from \"react\";\nimport { renderToReadableStream } from \"react-dom/server.edge\";\nimport { createValidFileMatcher, type ValidFileMatcher } from \"../routing/file-matcher.js\";\n\nfunction findFileWithExtensions(basePath: string, matcher: ValidFileMatcher): boolean {\n return matcher.dottedExtensions.some((ext) => fs.existsSync(basePath + ext));\n}\n\n/**\n * Render a React element to string using renderToReadableStream (Suspense support).\n * Uses Web Streams API — works in Node.js 18+ and Cloudflare Workers.\n */\nasync function renderToStringAsync(element: React.ReactElement): Promise<string> {\n const stream = await renderToReadableStream(element);\n await stream.allReady;\n return new Response(stream).text();\n}\n\nexport interface StaticExportOptions {\n /** Vite dev server (for SSR module loading) */\n server: ViteDevServer;\n /** Discovered page routes (excludes API routes) */\n routes: Route[];\n /** Discovered API routes */\n apiRoutes: Route[];\n /** Pages directory path */\n pagesDir: string;\n /** Output directory for static files */\n outDir: string;\n /** Resolved next.config.js */\n config: ResolvedNextConfig;\n}\n\nexport interface StaticExportResult {\n /** Number of HTML files generated */\n pageCount: number;\n /** Generated file paths (relative to outDir) */\n files: string[];\n /** Warnings encountered */\n warnings: string[];\n /** Errors encountered (non-fatal, specific pages) */\n errors: Array<{ route: string; error: string }>;\n}\n\n/**\n * Run static export for Pages Router.\n *\n * Creates a directory of static HTML files by rendering each route at build time.\n */\nexport async function staticExportPages(options: StaticExportOptions): Promise<StaticExportResult> {\n const { server, routes, apiRoutes, pagesDir, outDir, config } = options;\n const fileMatcher = createValidFileMatcher(config.pageExtensions);\n const result: StaticExportResult = {\n pageCount: 0,\n files: [],\n warnings: [],\n errors: [],\n };\n\n // Ensure output directory exists\n fs.mkdirSync(outDir, { recursive: true });\n\n // Warn about API routes\n if (apiRoutes.length > 0) {\n result.warnings.push(\n `${apiRoutes.length} API route(s) skipped — API routes are not supported with output: 'export'`,\n );\n }\n\n // Gather all pages to render (expand dynamic routes via getStaticPaths)\n const pagesToRender: Array<{\n route: Route;\n urlPath: string;\n params: Record<string, string | string[]>;\n }> = [];\n\n for (const route of routes) {\n // Skip internal pages\n const routeName = path.basename(route.filePath, path.extname(route.filePath));\n if (routeName.startsWith(\"_\")) continue;\n\n const pageModule = await server.ssrLoadModule(route.filePath);\n\n // Validate: getServerSideProps is not allowed with static export\n if (typeof pageModule.getServerSideProps === \"function\") {\n result.errors.push({\n route: route.pattern,\n error: `Page uses getServerSideProps which is not supported with output: 'export'. Use getStaticProps instead.`,\n });\n continue;\n }\n\n if (route.isDynamic) {\n // Dynamic route — must have getStaticPaths\n if (typeof pageModule.getStaticPaths !== \"function\") {\n result.errors.push({\n route: route.pattern,\n error: `Dynamic route requires getStaticPaths with output: 'export'`,\n });\n continue;\n }\n\n const pathsResult = await pageModule.getStaticPaths({\n locales: [],\n defaultLocale: \"\",\n });\n const fallback = pathsResult?.fallback ?? false;\n\n if (fallback !== false) {\n result.errors.push({\n route: route.pattern,\n error: `getStaticPaths must return fallback: false with output: 'export' (got: ${JSON.stringify(fallback)})`,\n });\n continue;\n }\n\n const paths: Array<{ params: Record<string, string | string[]> }> = pathsResult?.paths ?? [];\n\n for (const { params } of paths) {\n // Build the URL path from the route pattern and params\n const urlPath = buildUrlFromParams(route.pattern, params);\n pagesToRender.push({ route, urlPath, params });\n }\n } else {\n // Static route — render directly\n pagesToRender.push({ route, urlPath: route.pattern, params: {} });\n }\n }\n\n // Load shared components (_app, _document, head shim, dynamic shim)\n let AppComponent: React.ComponentType<{\n Component: React.ComponentType;\n pageProps: Record<string, unknown>;\n }> | null = null;\n const appPath = path.join(pagesDir, \"_app\");\n if (findFileWithExtensions(appPath, fileMatcher)) {\n try {\n const appModule = await server.ssrLoadModule(appPath);\n AppComponent = appModule.default ?? null;\n } catch {\n // _app exists but failed to load\n }\n }\n\n let DocumentComponent: React.ComponentType | null = null;\n const docPath = path.join(pagesDir, \"_document\");\n if (findFileWithExtensions(docPath, fileMatcher)) {\n try {\n const docModule = await server.ssrLoadModule(docPath);\n DocumentComponent = docModule.default ?? null;\n } catch {\n // _document exists but failed to load\n }\n }\n\n const headShim = await server.ssrLoadModule(\"next/head\");\n const dynamicShim = await server.ssrLoadModule(\"next/dynamic\");\n const routerShim = await server.ssrLoadModule(\"next/router\");\n\n // Render each page\n for (const { route, urlPath, params } of pagesToRender) {\n try {\n const html = await renderStaticPage({\n server,\n route,\n urlPath,\n params,\n pagesDir,\n config,\n AppComponent,\n DocumentComponent,\n headShim,\n dynamicShim,\n routerShim,\n });\n\n const outputPath = getOutputPath(urlPath, config.trailingSlash);\n const fullPath = path.join(outDir, outputPath);\n fs.mkdirSync(path.dirname(fullPath), { recursive: true });\n fs.writeFileSync(fullPath, html, \"utf-8\");\n\n result.files.push(outputPath);\n result.pageCount++;\n } catch (e) {\n result.errors.push({\n route: urlPath,\n error: (e as Error).message,\n });\n }\n }\n\n // Render 404 page\n try {\n const html404 = await renderErrorPage({\n server,\n pagesDir,\n statusCode: 404,\n AppComponent,\n DocumentComponent,\n headShim,\n fileMatcher,\n });\n if (html404) {\n const fullPath = path.join(outDir, \"404.html\");\n fs.writeFileSync(fullPath, html404, \"utf-8\");\n result.files.push(\"404.html\");\n result.pageCount++;\n }\n } catch {\n // No custom 404, skip\n }\n\n return result;\n}\n\ninterface RenderStaticPageOptions {\n server: ViteDevServer;\n route: Route;\n urlPath: string;\n params: Record<string, string | string[]>;\n pagesDir: string;\n config: ResolvedNextConfig;\n AppComponent: React.ComponentType<{\n Component: React.ComponentType;\n pageProps: Record<string, unknown>;\n }> | null;\n DocumentComponent: React.ComponentType | null;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n headShim: any;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n dynamicShim: any;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n routerShim: any;\n}\n\nasync function renderStaticPage(options: RenderStaticPageOptions): Promise<string> {\n const {\n server,\n route,\n urlPath,\n params,\n config: _config,\n AppComponent,\n DocumentComponent,\n headShim,\n dynamicShim,\n routerShim,\n } = options;\n\n // Set SSR context for router shim\n if (typeof routerShim.setSSRContext === \"function\") {\n routerShim.setSSRContext({\n pathname: urlPath,\n query: params,\n asPath: urlPath,\n });\n }\n\n const pageModule = await server.ssrLoadModule(route.filePath);\n const PageComponent = pageModule.default;\n if (!PageComponent) {\n throw new Error(`Page ${route.filePath} has no default export`);\n }\n\n // Collect page props\n let pageProps: Record<string, unknown> = {};\n\n if (typeof pageModule.getStaticProps === \"function\") {\n const result = await pageModule.getStaticProps({ params });\n if (result && \"props\" in result) {\n pageProps = result.props as Record<string, unknown>;\n }\n if (result && \"redirect\" in result) {\n // Static export can't handle redirects — write a meta redirect\n const redirect = result.redirect as { destination: string };\n return `<!DOCTYPE html><html><head><meta http-equiv=\"refresh\" content=\"0;url=${escapeAttr(redirect.destination)}\" /></head><body></body></html>`;\n }\n if (result && \"notFound\" in result && result.notFound) {\n throw new Error(`Page ${urlPath} returned notFound: true`);\n }\n }\n\n // Build element\n const createElement = React.createElement;\n let element: React.ReactElement;\n\n if (AppComponent) {\n element = createElement(AppComponent, {\n Component: PageComponent,\n pageProps,\n });\n } else {\n element = createElement(PageComponent, pageProps);\n }\n\n // Reset head collector and flush dynamic preloads\n if (typeof headShim.resetSSRHead === \"function\") {\n headShim.resetSSRHead();\n }\n if (typeof dynamicShim.flushPreloads === \"function\") {\n await dynamicShim.flushPreloads();\n }\n\n // Render page body\n const bodyHtml = await renderToStringAsync(element);\n\n // Collect head tags\n const ssrHeadHTML =\n typeof headShim.getSSRHeadHTML === \"function\" ? headShim.getSSRHeadHTML() : \"\";\n\n // __NEXT_DATA__ for client hydration\n const nextDataScript = `<script>window.__NEXT_DATA__ = ${safeJsonStringify({\n props: { pageProps },\n page: route.pattern,\n query: params,\n buildId: _config.buildId,\n })}</script>`;\n\n // Build HTML shell\n let html: string;\n\n if (DocumentComponent) {\n const docElement = createElement(DocumentComponent);\n // renderToReadableStream auto-prepends <!DOCTYPE html> when root is <html>\n let docHtml = await renderToStringAsync(docElement);\n docHtml = docHtml.replace(\"__NEXT_MAIN__\", bodyHtml);\n if (ssrHeadHTML) {\n docHtml = docHtml.replace(\"</head>\", ` ${ssrHeadHTML}\\n</head>`);\n }\n docHtml = docHtml.replace(\"<!-- __NEXT_SCRIPTS__ -->\", nextDataScript);\n if (!docHtml.includes(\"__NEXT_DATA__\")) {\n docHtml = docHtml.replace(\"</body>\", ` ${nextDataScript}\\n</body>`);\n }\n html = docHtml;\n } else {\n html = `<!DOCTYPE html>\n<html>\n<head>\n <meta charset=\"utf-8\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n ${ssrHeadHTML}\n</head>\n<body>\n <div id=\"__next\">${bodyHtml}</div>\n ${nextDataScript}\n</body>\n</html>`;\n }\n\n // Clear SSR context\n if (typeof routerShim.setSSRContext === \"function\") {\n routerShim.setSSRContext(null);\n }\n\n return html;\n}\n\ninterface RenderErrorPageOptions {\n server: ViteDevServer;\n pagesDir: string;\n statusCode: number;\n AppComponent: React.ComponentType<{\n Component: React.ComponentType;\n pageProps: Record<string, unknown>;\n }> | null;\n DocumentComponent: React.ComponentType | null;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n headShim: any;\n fileMatcher: ValidFileMatcher;\n}\n\nasync function renderErrorPage(options: RenderErrorPageOptions): Promise<string | null> {\n const { server, pagesDir, statusCode, AppComponent, DocumentComponent, headShim, fileMatcher } =\n options;\n\n const candidates =\n statusCode === 404 ? [\"404\", \"_error\"] : statusCode === 500 ? [\"500\", \"_error\"] : [\"_error\"];\n\n for (const candidate of candidates) {\n const candidatePath = path.join(pagesDir, candidate);\n if (!findFileWithExtensions(candidatePath, fileMatcher)) continue;\n\n const errorModule = await server.ssrLoadModule(candidatePath);\n const ErrorComponent = errorModule.default;\n if (!ErrorComponent) continue;\n\n const createElement = React.createElement;\n const errorProps = { statusCode };\n\n let element: React.ReactElement;\n if (AppComponent) {\n element = createElement(AppComponent, {\n Component: ErrorComponent,\n pageProps: errorProps,\n });\n } else {\n element = createElement(ErrorComponent, errorProps);\n }\n\n if (typeof headShim.resetSSRHead === \"function\") {\n headShim.resetSSRHead();\n }\n\n const bodyHtml = await renderToStringAsync(element);\n\n let html: string;\n if (DocumentComponent) {\n const docElement = createElement(DocumentComponent);\n let docHtml = await renderToStringAsync(docElement);\n docHtml = docHtml.replace(\"__NEXT_MAIN__\", bodyHtml);\n docHtml = docHtml.replace(\"<!-- __NEXT_SCRIPTS__ -->\", \"\");\n html = docHtml;\n } else {\n html = `<!DOCTYPE html>\n<html>\n<head>\n <meta charset=\"utf-8\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n</head>\n<body>\n <div id=\"__next\">${bodyHtml}</div>\n</body>\n</html>`;\n }\n\n return html;\n }\n\n return null;\n}\n\n/**\n * Build a URL path from a route pattern and params.\n * E.g., \"/posts/:id\" + { id: \"42\" } → \"/posts/42\"\n * E.g., \"/docs/:slug+\" + { slug: [\"a\", \"b\"] } → \"/docs/a/b\"\n */\nfunction buildUrlFromParams(pattern: string, params: Record<string, string | string[]>): string {\n const parts = pattern.split(\"/\").filter(Boolean);\n const result: string[] = [];\n\n for (const part of parts) {\n if (part.endsWith(\"+\") || part.endsWith(\"*\")) {\n // Catch-all: :slug+ or :slug*\n const paramName = part.slice(1, -1);\n const value = params[paramName];\n if (Array.isArray(value)) {\n result.push(...value);\n } else if (value) {\n result.push(String(value));\n }\n } else if (part.startsWith(\":\")) {\n // Dynamic segment: :id\n const paramName = part.slice(1);\n const value = params[paramName];\n result.push(String(value));\n } else {\n result.push(part);\n }\n }\n\n return \"/\" + result.join(\"/\");\n}\n\n/**\n * Determine the output file path for a given URL.\n * Respects trailingSlash config.\n */\nfunction getOutputPath(urlPath: string, trailingSlash: boolean): string {\n if (urlPath === \"/\") {\n return \"index.html\";\n }\n\n // Remove leading slash\n const clean = urlPath.replace(/^\\//, \"\");\n\n if (trailingSlash) {\n return `${clean}/index.html`;\n }\n return `${clean}.html`;\n}\n\n/**\n * Resolve parent dynamic segment params for a route.\n *\n * Implements Next.js's top-down params passing for generateStaticParams().\n * Walks up the route hierarchy to find parent dynamic segments that have their\n * own generateStaticParams. Collects parent params by calling each parent's\n * generateStaticParams in order, merging results top-down.\n *\n * Returns an array of parent param combinations. If empty, the child should\n * be called with `{ params: {} }` (bottom-up approach).\n */\nasync function resolveParentParams(\n childRoute: AppRoute,\n allRoutes: AppRoute[],\n server: ViteDevServer,\n): Promise<Record<string, string | string[]>[]> {\n // Extract the dynamic segment names from the pattern\n const patternParts = childRoute.pattern.split(\"/\").filter(Boolean);\n\n // Identify parent dynamic segments: each :param in the pattern except the last one(s)\n // that belong to the leaf page's directory.\n // Strategy: find ancestor routes (layout-level) that export generateStaticParams.\n // An ancestor route's pattern is a prefix of the child's pattern.\n\n // Collect parent segments with generateStaticParams by looking at page modules\n // along the ancestor path. We look for pages/layouts that define generateStaticParams\n // at each level of the path hierarchy.\n type ParentSegment = {\n params: string[];\n generateStaticParams: (opts: {\n params: Record<string, string | string[]>;\n }) => Promise<Record<string, string | string[]>[]>;\n };\n\n const parentSegments: ParentSegment[] = [];\n\n // Walk pattern parts to find intermediate dynamic segments\n // For /products/:category/:id, we look for a route or layout at /products/:category\n // that has generateStaticParams\n for (let i = 0; i < patternParts.length; i++) {\n const part = patternParts[i];\n if (!part.startsWith(\":\")) continue;\n\n // Check if this is not the last dynamic param (i.e., it's a parent segment)\n const isLastDynamicPart = !patternParts.slice(i + 1).some((p) => p.startsWith(\":\"));\n if (isLastDynamicPart) break; // This is the child's own segment\n\n // Build the prefix pattern up to this segment\n const prefixPattern = \"/\" + patternParts.slice(0, i + 1).join(\"/\");\n\n // Find a route at this prefix that has generateStaticParams\n const parentRoute = allRoutes.find((r) => r.pattern === prefixPattern);\n if (parentRoute?.pagePath) {\n try {\n const parentModule = await server.ssrLoadModule(parentRoute.pagePath);\n if (typeof parentModule.generateStaticParams === \"function\") {\n const paramName = part.replace(/^:/, \"\").replace(/[+*]$/, \"\");\n parentSegments.push({\n params: [paramName],\n generateStaticParams: parentModule.generateStaticParams,\n });\n }\n } catch {\n // Skip — parent module couldn't be loaded\n }\n }\n }\n\n if (parentSegments.length === 0) return [];\n\n // Top-down resolution: call each parent's generateStaticParams in order,\n // accumulating params\n let currentParams: Record<string, string | string[]>[] = [{}];\n\n for (const segment of parentSegments) {\n const nextParams: Record<string, string | string[]>[] = [];\n for (const parentParams of currentParams) {\n const results = await segment.generateStaticParams({ params: parentParams });\n if (Array.isArray(results)) {\n for (const result of results) {\n nextParams.push({ ...parentParams, ...result });\n }\n }\n }\n currentParams = nextParams;\n }\n\n return currentParams;\n}\n\n// -------------------------------------------------------------------\n// App Router static export\n// -------------------------------------------------------------------\n\nexport interface AppStaticExportOptions {\n /** Base URL of a running dev server (e.g. \"http://localhost:5173\") */\n baseUrl: string;\n /** Discovered app routes */\n routes: AppRoute[];\n /** App directory path (for loading modules to call generateStaticParams) */\n appDir: string;\n /** Vite dev server (for loading page modules) */\n server: ViteDevServer;\n /** Output directory */\n outDir: string;\n /** Resolved next.config.js */\n config: ResolvedNextConfig;\n}\n\n/**\n * Run static export for App Router.\n *\n * Fetches each route from a running dev server and writes the HTML to disk.\n * For dynamic routes, calls generateStaticParams() to expand all paths.\n */\nexport async function staticExportApp(\n options: AppStaticExportOptions,\n): Promise<StaticExportResult> {\n const { baseUrl, routes, server, outDir, config } = options;\n const result: StaticExportResult = {\n pageCount: 0,\n files: [],\n warnings: [],\n errors: [],\n };\n\n fs.mkdirSync(outDir, { recursive: true });\n\n // Collect all URLs to render\n const urlsToRender: string[] = [];\n\n for (const route of routes) {\n // Skip API route handlers — not supported in static export\n if (route.routePath && !route.pagePath) {\n result.warnings.push(\n `Route handler ${route.pattern} skipped — API routes are not supported with output: 'export'`,\n );\n continue;\n }\n\n if (!route.pagePath) continue;\n\n if (route.isDynamic) {\n // Dynamic route — must have generateStaticParams\n try {\n const pageModule = await server.ssrLoadModule(route.pagePath);\n\n if (typeof pageModule.generateStaticParams !== \"function\") {\n result.errors.push({\n route: route.pattern,\n error: `Dynamic route requires generateStaticParams() with output: 'export'`,\n });\n continue;\n }\n\n // Resolve parent dynamic segments for top-down params passing.\n // Find all other routes whose patterns are prefixes of this route's pattern\n // and that have dynamic params, then collect their generateStaticParams.\n const parentParamSets = await resolveParentParams(route, routes, server);\n\n let paramSets: Record<string, string | string[]>[];\n if (parentParamSets.length > 0) {\n // Top-down: call child's generateStaticParams for each parent param set\n paramSets = [];\n for (const parentParams of parentParamSets) {\n const childResults = await pageModule.generateStaticParams({ params: parentParams });\n if (Array.isArray(childResults)) {\n for (const childParams of childResults) {\n paramSets.push({ ...parentParams, ...childParams });\n }\n }\n }\n } else {\n // Bottom-up: no parent params, call with empty params\n paramSets = await pageModule.generateStaticParams({ params: {} });\n }\n\n if (!Array.isArray(paramSets) || paramSets.length === 0) {\n result.warnings.push(\n `generateStaticParams() for ${route.pattern} returned empty array — no pages generated`,\n );\n continue;\n }\n\n for (const params of paramSets) {\n const urlPath = buildUrlFromParams(route.pattern, params);\n urlsToRender.push(urlPath);\n }\n } catch (e) {\n result.errors.push({\n route: route.pattern,\n error: `Failed to call generateStaticParams(): ${(e as Error).message}`,\n });\n }\n } else {\n // Static route\n urlsToRender.push(route.pattern);\n }\n }\n\n // Fetch each URL from the dev server and write HTML\n for (const urlPath of urlsToRender) {\n try {\n const res = await fetch(`${baseUrl}${urlPath}`);\n if (!res.ok) {\n result.errors.push({\n route: urlPath,\n error: `Server returned ${res.status}`,\n });\n continue;\n }\n\n const html = await res.text();\n const outputPath = getOutputPath(urlPath, config.trailingSlash);\n const fullPath = path.join(outDir, outputPath);\n fs.mkdirSync(path.dirname(fullPath), { recursive: true });\n fs.writeFileSync(fullPath, html, \"utf-8\");\n\n result.files.push(outputPath);\n result.pageCount++;\n } catch (e) {\n result.errors.push({\n route: urlPath,\n error: (e as Error).message,\n });\n }\n }\n\n // Render 404 page\n try {\n const res = await fetch(`${baseUrl}/__nonexistent_page_for_404__`);\n if (res.status === 404) {\n const html = await res.text();\n if (html.length > 0) {\n const fullPath = path.join(outDir, \"404.html\");\n fs.writeFileSync(fullPath, html, \"utf-8\");\n result.files.push(\"404.html\");\n result.pageCount++;\n }\n }\n } catch {\n // No custom 404, skip\n }\n\n return result;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"static-export.js","sourceRoot":"","sources":["../../src/build/static-export.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Static export for `output: 'export'`.\n *\n * Renders all pages to static HTML files at build time. Produces a directory\n * of HTML + client JS/CSS that can be deployed to any static file host\n * (S3, Cloudflare Pages, GitHub Pages, Nginx, etc.) with no server required.\n *\n * Pages Router:\n * - Static pages → render to HTML\n * - getStaticProps pages → call at build time, render with props\n * - Dynamic routes → call getStaticPaths (must be fallback: false), render each\n * - getServerSideProps → build error\n * - API routes → skipped with warning\n *\n * App Router:\n * - Static pages → run Server Components at build time, render to HTML\n * - Dynamic routes → call generateStaticParams(), render each\n * - Dynamic routes without generateStaticParams → build error\n */\nimport type { ViteDevServer } from \"vite\";\nimport { patternToNextFormat, type Route } from \"../routing/pages-router.js\";\nimport type { AppRoute } from \"../routing/app-router.js\";\nimport type { ResolvedNextConfig } from \"../config/next-config.js\";\nimport { safeJsonStringify } from \"../server/html.js\";\nimport { escapeAttr } from \"../shims/head.js\";\nimport path from \"node:path\";\nimport fs from \"node:fs\";\nimport React from \"react\";\nimport { renderToReadableStream } from \"react-dom/server.edge\";\nimport { createValidFileMatcher, type ValidFileMatcher } from \"../routing/file-matcher.js\";\n\nfunction findFileWithExtensions(basePath: string, matcher: ValidFileMatcher): boolean {\n return matcher.dottedExtensions.some((ext) => fs.existsSync(basePath + ext));\n}\n\n/**\n * Render a React element to string using renderToReadableStream (Suspense support).\n * Uses Web Streams API — works in Node.js 18+ and Cloudflare Workers.\n */\nasync function renderToStringAsync(element: React.ReactElement): Promise<string> {\n const stream = await renderToReadableStream(element);\n await stream.allReady;\n return new Response(stream).text();\n}\n\nexport interface StaticExportOptions {\n /** Vite dev server (for SSR module loading) */\n server: ViteDevServer;\n /** Discovered page routes (excludes API routes) */\n routes: Route[];\n /** Discovered API routes */\n apiRoutes: Route[];\n /** Pages directory path */\n pagesDir: string;\n /** Output directory for static files */\n outDir: string;\n /** Resolved next.config.js */\n config: ResolvedNextConfig;\n}\n\nexport interface StaticExportResult {\n /** Number of HTML files generated */\n pageCount: number;\n /** Generated file paths (relative to outDir) */\n files: string[];\n /** Warnings encountered */\n warnings: string[];\n /** Errors encountered (non-fatal, specific pages) */\n errors: Array<{ route: string; error: string }>;\n}\n\n/**\n * Run static export for Pages Router.\n *\n * Creates a directory of static HTML files by rendering each route at build time.\n */\nexport async function staticExportPages(options: StaticExportOptions): Promise<StaticExportResult> {\n const { server, routes, apiRoutes, pagesDir, outDir, config } = options;\n const fileMatcher = createValidFileMatcher(config.pageExtensions);\n const result: StaticExportResult = {\n pageCount: 0,\n files: [],\n warnings: [],\n errors: [],\n };\n\n // Ensure output directory exists\n fs.mkdirSync(outDir, { recursive: true });\n\n // Warn about API routes\n if (apiRoutes.length > 0) {\n result.warnings.push(\n `${apiRoutes.length} API route(s) skipped — API routes are not supported with output: 'export'`,\n );\n }\n\n // Gather all pages to render (expand dynamic routes via getStaticPaths)\n const pagesToRender: Array<{\n route: Route;\n urlPath: string;\n params: Record<string, string | string[]>;\n }> = [];\n\n for (const route of routes) {\n // Skip internal pages\n const routeName = path.basename(route.filePath, path.extname(route.filePath));\n if (routeName.startsWith(\"_\")) continue;\n\n const pageModule = await server.ssrLoadModule(route.filePath);\n\n // Validate: getServerSideProps is not allowed with static export\n if (typeof pageModule.getServerSideProps === \"function\") {\n result.errors.push({\n route: route.pattern,\n error: `Page uses getServerSideProps which is not supported with output: 'export'. Use getStaticProps instead.`,\n });\n continue;\n }\n\n if (route.isDynamic) {\n // Dynamic route — must have getStaticPaths\n if (typeof pageModule.getStaticPaths !== \"function\") {\n result.errors.push({\n route: route.pattern,\n error: `Dynamic route requires getStaticPaths with output: 'export'`,\n });\n continue;\n }\n\n const pathsResult = await pageModule.getStaticPaths({\n locales: [],\n defaultLocale: \"\",\n });\n const fallback = pathsResult?.fallback ?? false;\n\n if (fallback !== false) {\n result.errors.push({\n route: route.pattern,\n error: `getStaticPaths must return fallback: false with output: 'export' (got: ${JSON.stringify(fallback)})`,\n });\n continue;\n }\n\n const paths: Array<{ params: Record<string, string | string[]> }> = pathsResult?.paths ?? [];\n\n for (const { params } of paths) {\n // Build the URL path from the route pattern and params\n const urlPath = buildUrlFromParams(route.pattern, params);\n pagesToRender.push({ route, urlPath, params });\n }\n } else {\n // Static route — render directly\n pagesToRender.push({ route, urlPath: route.pattern, params: {} });\n }\n }\n\n // Load shared components (_app, _document, head shim, dynamic shim)\n let AppComponent: React.ComponentType<{\n Component: React.ComponentType;\n pageProps: Record<string, unknown>;\n }> | null = null;\n const appPath = path.join(pagesDir, \"_app\");\n if (findFileWithExtensions(appPath, fileMatcher)) {\n try {\n const appModule = await server.ssrLoadModule(appPath);\n AppComponent = appModule.default ?? null;\n } catch {\n // _app exists but failed to load\n }\n }\n\n let DocumentComponent: React.ComponentType | null = null;\n const docPath = path.join(pagesDir, \"_document\");\n if (findFileWithExtensions(docPath, fileMatcher)) {\n try {\n const docModule = await server.ssrLoadModule(docPath);\n DocumentComponent = docModule.default ?? null;\n } catch {\n // _document exists but failed to load\n }\n }\n\n const headShim = await server.ssrLoadModule(\"next/head\");\n const dynamicShim = await server.ssrLoadModule(\"next/dynamic\");\n const routerShim = await server.ssrLoadModule(\"next/router\");\n\n // Render each page\n for (const { route, urlPath, params } of pagesToRender) {\n try {\n const html = await renderStaticPage({\n server,\n route,\n urlPath,\n params,\n pagesDir,\n config,\n AppComponent,\n DocumentComponent,\n headShim,\n dynamicShim,\n routerShim,\n });\n\n const outputPath = getOutputPath(urlPath, config.trailingSlash);\n const fullPath = path.join(outDir, outputPath);\n fs.mkdirSync(path.dirname(fullPath), { recursive: true });\n fs.writeFileSync(fullPath, html, \"utf-8\");\n\n result.files.push(outputPath);\n result.pageCount++;\n } catch (e) {\n result.errors.push({\n route: urlPath,\n error: (e as Error).message,\n });\n }\n }\n\n // Render 404 page\n try {\n const html404 = await renderErrorPage({\n server,\n pagesDir,\n statusCode: 404,\n AppComponent,\n DocumentComponent,\n headShim,\n fileMatcher,\n });\n if (html404) {\n const fullPath = path.join(outDir, \"404.html\");\n fs.writeFileSync(fullPath, html404, \"utf-8\");\n result.files.push(\"404.html\");\n result.pageCount++;\n }\n } catch {\n // No custom 404, skip\n }\n\n return result;\n}\n\ninterface RenderStaticPageOptions {\n server: ViteDevServer;\n route: Route;\n urlPath: string;\n params: Record<string, string | string[]>;\n pagesDir: string;\n config: ResolvedNextConfig;\n AppComponent: React.ComponentType<{\n Component: React.ComponentType;\n pageProps: Record<string, unknown>;\n }> | null;\n DocumentComponent: React.ComponentType | null;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n headShim: any;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n dynamicShim: any;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n routerShim: any;\n}\n\nasync function renderStaticPage(options: RenderStaticPageOptions): Promise<string> {\n const {\n server,\n route,\n urlPath,\n params,\n config: _config,\n AppComponent,\n DocumentComponent,\n headShim,\n dynamicShim,\n routerShim,\n } = options;\n\n // Set SSR context for router shim\n if (typeof routerShim.setSSRContext === \"function\") {\n routerShim.setSSRContext({\n pathname: patternToNextFormat(route.pattern),\n query: params,\n asPath: urlPath,\n });\n }\n\n const pageModule = await server.ssrLoadModule(route.filePath);\n const PageComponent = pageModule.default;\n if (!PageComponent) {\n throw new Error(`Page ${route.filePath} has no default export`);\n }\n\n // Collect page props\n let pageProps: Record<string, unknown> = {};\n\n if (typeof pageModule.getStaticProps === \"function\") {\n const result = await pageModule.getStaticProps({ params });\n if (result && \"props\" in result) {\n pageProps = result.props as Record<string, unknown>;\n }\n if (result && \"redirect\" in result) {\n // Static export can't handle redirects — write a meta redirect\n const redirect = result.redirect as { destination: string };\n return `<!DOCTYPE html><html><head><meta http-equiv=\"refresh\" content=\"0;url=${escapeAttr(redirect.destination)}\" /></head><body></body></html>`;\n }\n if (result && \"notFound\" in result && result.notFound) {\n throw new Error(`Page ${urlPath} returned notFound: true`);\n }\n }\n\n // Build element\n const createElement = React.createElement;\n let element: React.ReactElement;\n\n if (AppComponent) {\n element = createElement(AppComponent, {\n Component: PageComponent,\n pageProps,\n });\n } else {\n element = createElement(PageComponent, pageProps);\n }\n\n // Reset head collector and flush dynamic preloads\n if (typeof headShim.resetSSRHead === \"function\") {\n headShim.resetSSRHead();\n }\n if (typeof dynamicShim.flushPreloads === \"function\") {\n await dynamicShim.flushPreloads();\n }\n\n // Render page body\n const bodyHtml = await renderToStringAsync(element);\n\n // Collect head tags\n const ssrHeadHTML =\n typeof headShim.getSSRHeadHTML === \"function\" ? headShim.getSSRHeadHTML() : \"\";\n\n // __NEXT_DATA__ for client hydration\n const nextDataScript = `<script>window.__NEXT_DATA__ = ${safeJsonStringify({\n props: { pageProps },\n page: route.pattern,\n query: params,\n buildId: _config.buildId,\n })}</script>`;\n\n // Build HTML shell\n let html: string;\n\n if (DocumentComponent) {\n const docElement = createElement(DocumentComponent);\n // renderToReadableStream auto-prepends <!DOCTYPE html> when root is <html>\n let docHtml = await renderToStringAsync(docElement);\n docHtml = docHtml.replace(\"__NEXT_MAIN__\", bodyHtml);\n if (ssrHeadHTML) {\n docHtml = docHtml.replace(\"</head>\", ` ${ssrHeadHTML}\\n</head>`);\n }\n docHtml = docHtml.replace(\"<!-- __NEXT_SCRIPTS__ -->\", nextDataScript);\n if (!docHtml.includes(\"__NEXT_DATA__\")) {\n docHtml = docHtml.replace(\"</body>\", ` ${nextDataScript}\\n</body>`);\n }\n html = docHtml;\n } else {\n html = `<!DOCTYPE html>\n<html>\n<head>\n <meta charset=\"utf-8\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n ${ssrHeadHTML}\n</head>\n<body>\n <div id=\"__next\">${bodyHtml}</div>\n ${nextDataScript}\n</body>\n</html>`;\n }\n\n // Clear SSR context\n if (typeof routerShim.setSSRContext === \"function\") {\n routerShim.setSSRContext(null);\n }\n\n return html;\n}\n\ninterface RenderErrorPageOptions {\n server: ViteDevServer;\n pagesDir: string;\n statusCode: number;\n AppComponent: React.ComponentType<{\n Component: React.ComponentType;\n pageProps: Record<string, unknown>;\n }> | null;\n DocumentComponent: React.ComponentType | null;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n headShim: any;\n fileMatcher: ValidFileMatcher;\n}\n\nasync function renderErrorPage(options: RenderErrorPageOptions): Promise<string | null> {\n const { server, pagesDir, statusCode, AppComponent, DocumentComponent, headShim, fileMatcher } =\n options;\n\n const candidates =\n statusCode === 404 ? [\"404\", \"_error\"] : statusCode === 500 ? [\"500\", \"_error\"] : [\"_error\"];\n\n for (const candidate of candidates) {\n const candidatePath = path.join(pagesDir, candidate);\n if (!findFileWithExtensions(candidatePath, fileMatcher)) continue;\n\n const errorModule = await server.ssrLoadModule(candidatePath);\n const ErrorComponent = errorModule.default;\n if (!ErrorComponent) continue;\n\n const createElement = React.createElement;\n const errorProps = { statusCode };\n\n let element: React.ReactElement;\n if (AppComponent) {\n element = createElement(AppComponent, {\n Component: ErrorComponent,\n pageProps: errorProps,\n });\n } else {\n element = createElement(ErrorComponent, errorProps);\n }\n\n if (typeof headShim.resetSSRHead === \"function\") {\n headShim.resetSSRHead();\n }\n\n const bodyHtml = await renderToStringAsync(element);\n\n let html: string;\n if (DocumentComponent) {\n const docElement = createElement(DocumentComponent);\n let docHtml = await renderToStringAsync(docElement);\n docHtml = docHtml.replace(\"__NEXT_MAIN__\", bodyHtml);\n docHtml = docHtml.replace(\"<!-- __NEXT_SCRIPTS__ -->\", \"\");\n html = docHtml;\n } else {\n html = `<!DOCTYPE html>\n<html>\n<head>\n <meta charset=\"utf-8\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n</head>\n<body>\n <div id=\"__next\">${bodyHtml}</div>\n</body>\n</html>`;\n }\n\n return html;\n }\n\n return null;\n}\n\n/**\n * Build a URL path from a route pattern and params.\n * E.g., \"/posts/:id\" + { id: \"42\" } → \"/posts/42\"\n * E.g., \"/docs/:slug+\" + { slug: [\"a\", \"b\"] } → \"/docs/a/b\"\n */\nfunction buildUrlFromParams(pattern: string, params: Record<string, string | string[]>): string {\n const parts = pattern.split(\"/\").filter(Boolean);\n const result: string[] = [];\n\n for (const part of parts) {\n if (part.endsWith(\"+\") || part.endsWith(\"*\")) {\n // Catch-all: :slug+ or :slug*\n const paramName = part.slice(1, -1);\n const value = params[paramName];\n if (Array.isArray(value)) {\n result.push(...value);\n } else if (value) {\n result.push(String(value));\n }\n } else if (part.startsWith(\":\")) {\n // Dynamic segment: :id\n const paramName = part.slice(1);\n const value = params[paramName];\n result.push(String(value));\n } else {\n result.push(part);\n }\n }\n\n return \"/\" + result.join(\"/\");\n}\n\n/**\n * Determine the output file path for a given URL.\n * Respects trailingSlash config.\n */\nfunction getOutputPath(urlPath: string, trailingSlash: boolean): string {\n if (urlPath === \"/\") {\n return \"index.html\";\n }\n\n // Remove leading slash\n const clean = urlPath.replace(/^\\//, \"\");\n\n if (trailingSlash) {\n return `${clean}/index.html`;\n }\n return `${clean}.html`;\n}\n\n/**\n * Resolve parent dynamic segment params for a route.\n *\n * Implements Next.js's top-down params passing for generateStaticParams().\n * Walks up the route hierarchy to find parent dynamic segments that have their\n * own generateStaticParams. Collects parent params by calling each parent's\n * generateStaticParams in order, merging results top-down.\n *\n * Returns an array of parent param combinations. If empty, the child should\n * be called with `{ params: {} }` (bottom-up approach).\n */\nasync function resolveParentParams(\n childRoute: AppRoute,\n allRoutes: AppRoute[],\n server: ViteDevServer,\n): Promise<Record<string, string | string[]>[]> {\n // Extract the dynamic segment names from the pattern\n const patternParts = childRoute.pattern.split(\"/\").filter(Boolean);\n\n // Identify parent dynamic segments: each :param in the pattern except the last one(s)\n // that belong to the leaf page's directory.\n // Strategy: find ancestor routes (layout-level) that export generateStaticParams.\n // An ancestor route's pattern is a prefix of the child's pattern.\n\n // Collect parent segments with generateStaticParams by looking at page modules\n // along the ancestor path. We look for pages/layouts that define generateStaticParams\n // at each level of the path hierarchy.\n type ParentSegment = {\n params: string[];\n generateStaticParams: (opts: {\n params: Record<string, string | string[]>;\n }) => Promise<Record<string, string | string[]>[]>;\n };\n\n const parentSegments: ParentSegment[] = [];\n\n // Walk pattern parts to find intermediate dynamic segments\n // For /products/:category/:id, we look for a route or layout at /products/:category\n // that has generateStaticParams\n for (let i = 0; i < patternParts.length; i++) {\n const part = patternParts[i];\n if (!part.startsWith(\":\")) continue;\n\n // Check if this is not the last dynamic param (i.e., it's a parent segment)\n const isLastDynamicPart = !patternParts.slice(i + 1).some((p) => p.startsWith(\":\"));\n if (isLastDynamicPart) break; // This is the child's own segment\n\n // Build the prefix pattern up to this segment\n const prefixPattern = \"/\" + patternParts.slice(0, i + 1).join(\"/\");\n\n // Find a route at this prefix that has generateStaticParams\n const parentRoute = allRoutes.find((r) => r.pattern === prefixPattern);\n if (parentRoute?.pagePath) {\n try {\n const parentModule = await server.ssrLoadModule(parentRoute.pagePath);\n if (typeof parentModule.generateStaticParams === \"function\") {\n const paramName = part.replace(/^:/, \"\").replace(/[+*]$/, \"\");\n parentSegments.push({\n params: [paramName],\n generateStaticParams: parentModule.generateStaticParams,\n });\n }\n } catch {\n // Skip — parent module couldn't be loaded\n }\n }\n }\n\n if (parentSegments.length === 0) return [];\n\n // Top-down resolution: call each parent's generateStaticParams in order,\n // accumulating params\n let currentParams: Record<string, string | string[]>[] = [{}];\n\n for (const segment of parentSegments) {\n const nextParams: Record<string, string | string[]>[] = [];\n for (const parentParams of currentParams) {\n const results = await segment.generateStaticParams({ params: parentParams });\n if (Array.isArray(results)) {\n for (const result of results) {\n nextParams.push({ ...parentParams, ...result });\n }\n }\n }\n currentParams = nextParams;\n }\n\n return currentParams;\n}\n\n// -------------------------------------------------------------------\n// App Router static export\n// -------------------------------------------------------------------\n\nexport interface AppStaticExportOptions {\n /** Base URL of a running dev server (e.g. \"http://localhost:5173\") */\n baseUrl: string;\n /** Discovered app routes */\n routes: AppRoute[];\n /** App directory path (for loading modules to call generateStaticParams) */\n appDir: string;\n /** Vite dev server (for loading page modules) */\n server: ViteDevServer;\n /** Output directory */\n outDir: string;\n /** Resolved next.config.js */\n config: ResolvedNextConfig;\n}\n\n/**\n * Run static export for App Router.\n *\n * Fetches each route from a running dev server and writes the HTML to disk.\n * For dynamic routes, calls generateStaticParams() to expand all paths.\n */\nexport async function staticExportApp(\n options: AppStaticExportOptions,\n): Promise<StaticExportResult> {\n const { baseUrl, routes, server, outDir, config } = options;\n const result: StaticExportResult = {\n pageCount: 0,\n files: [],\n warnings: [],\n errors: [],\n };\n\n fs.mkdirSync(outDir, { recursive: true });\n\n // Collect all URLs to render\n const urlsToRender: string[] = [];\n\n for (const route of routes) {\n // Skip API route handlers — not supported in static export\n if (route.routePath && !route.pagePath) {\n result.warnings.push(\n `Route handler ${route.pattern} skipped — API routes are not supported with output: 'export'`,\n );\n continue;\n }\n\n if (!route.pagePath) continue;\n\n if (route.isDynamic) {\n // Dynamic route — must have generateStaticParams\n try {\n const pageModule = await server.ssrLoadModule(route.pagePath);\n\n if (typeof pageModule.generateStaticParams !== \"function\") {\n result.errors.push({\n route: route.pattern,\n error: `Dynamic route requires generateStaticParams() with output: 'export'`,\n });\n continue;\n }\n\n // Resolve parent dynamic segments for top-down params passing.\n // Find all other routes whose patterns are prefixes of this route's pattern\n // and that have dynamic params, then collect their generateStaticParams.\n const parentParamSets = await resolveParentParams(route, routes, server);\n\n let paramSets: Record<string, string | string[]>[];\n if (parentParamSets.length > 0) {\n // Top-down: call child's generateStaticParams for each parent param set\n paramSets = [];\n for (const parentParams of parentParamSets) {\n const childResults = await pageModule.generateStaticParams({ params: parentParams });\n if (Array.isArray(childResults)) {\n for (const childParams of childResults) {\n paramSets.push({ ...parentParams, ...childParams });\n }\n }\n }\n } else {\n // Bottom-up: no parent params, call with empty params\n paramSets = await pageModule.generateStaticParams({ params: {} });\n }\n\n if (!Array.isArray(paramSets) || paramSets.length === 0) {\n result.warnings.push(\n `generateStaticParams() for ${route.pattern} returned empty array — no pages generated`,\n );\n continue;\n }\n\n for (const params of paramSets) {\n const urlPath = buildUrlFromParams(route.pattern, params);\n urlsToRender.push(urlPath);\n }\n } catch (e) {\n result.errors.push({\n route: route.pattern,\n error: `Failed to call generateStaticParams(): ${(e as Error).message}`,\n });\n }\n } else {\n // Static route\n urlsToRender.push(route.pattern);\n }\n }\n\n // Fetch each URL from the dev server and write HTML\n for (const urlPath of urlsToRender) {\n try {\n const res = await fetch(`${baseUrl}${urlPath}`);\n if (!res.ok) {\n result.errors.push({\n route: urlPath,\n error: `Server returned ${res.status}`,\n });\n continue;\n }\n\n const html = await res.text();\n const outputPath = getOutputPath(urlPath, config.trailingSlash);\n const fullPath = path.join(outDir, outputPath);\n fs.mkdirSync(path.dirname(fullPath), { recursive: true });\n fs.writeFileSync(fullPath, html, \"utf-8\");\n\n result.files.push(outputPath);\n result.pageCount++;\n } catch (e) {\n result.errors.push({\n route: urlPath,\n error: (e as Error).message,\n });\n }\n }\n\n // Render 404 page\n try {\n const res = await fetch(`${baseUrl}/__nonexistent_page_for_404__`);\n if (res.status === 404) {\n const html = await res.text();\n if (html.length > 0) {\n const fullPath = path.join(outDir, \"404.html\");\n fs.writeFileSync(fullPath, html, \"utf-8\");\n result.files.push(\"404.html\");\n result.pageCount++;\n }\n }\n } catch {\n // No custom 404, skip\n }\n\n return result;\n}\n"]}
|
package/dist/cli.js
CHANGED
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
* needed for most Next.js apps.
|
|
13
13
|
*/
|
|
14
14
|
import vinext, { clientOutputConfig, clientTreeshakeConfig } from "./index.js";
|
|
15
|
+
import { printBuildReport } from "./build/report.js";
|
|
15
16
|
import path from "node:path";
|
|
16
17
|
import fs from "node:fs";
|
|
17
18
|
import { pathToFileURL } from "node:url";
|
|
@@ -66,6 +67,9 @@ function parseArgs(args) {
|
|
|
66
67
|
if (arg === "--help" || arg === "-h") {
|
|
67
68
|
result.help = true;
|
|
68
69
|
}
|
|
70
|
+
else if (arg === "--verbose") {
|
|
71
|
+
result.verbose = true;
|
|
72
|
+
}
|
|
69
73
|
else if (arg === "--turbopack") {
|
|
70
74
|
result.turbopack = true; // no-op, accepted for script compat
|
|
71
75
|
}
|
|
@@ -87,12 +91,92 @@ function parseArgs(args) {
|
|
|
87
91
|
}
|
|
88
92
|
return result;
|
|
89
93
|
}
|
|
90
|
-
// ───
|
|
94
|
+
// ─── Build logger ─────────────────────────────────────────────────────────────
|
|
91
95
|
/**
|
|
92
|
-
*
|
|
93
|
-
*
|
|
94
|
-
*
|
|
96
|
+
* Create a custom Vite logger for build output.
|
|
97
|
+
*
|
|
98
|
+
* By default Vite/Rollup emit a lot of build noise: version banners, progress
|
|
99
|
+
* lines, chunk size tables, minChunkSize diagnostics, and various internal
|
|
100
|
+
* warnings that are either not actionable or already handled by vinext at
|
|
101
|
+
* runtime. This logger suppresses all of that while keeping the things that
|
|
102
|
+
* actually matter:
|
|
103
|
+
*
|
|
104
|
+
* KEPT
|
|
105
|
+
* ✓ N modules transformed. — confirms the transform phase completed
|
|
106
|
+
* ✓ built in Xs — build timing (useful perf signal)
|
|
107
|
+
* Genuine warnings/errors — anything the user may need to act on
|
|
108
|
+
*
|
|
109
|
+
* SUPPRESSED (info)
|
|
110
|
+
* vite vX.Y.Z building... — Vite version banner
|
|
111
|
+
* transforming... / rendering chunks... / computing gzip size...
|
|
112
|
+
* Initially, there are N chunks... — Rollup minChunkSize diagnostics
|
|
113
|
+
* After merging chunks, there are...
|
|
114
|
+
* X are below minChunkSize.
|
|
115
|
+
* Blank lines
|
|
116
|
+
* Chunk/asset size table rows — e.g. " dist/client/assets/foo.js 42 kB"
|
|
117
|
+
* [rsc] / [ssr] / [client] / [worker] — RSC plugin env section headers
|
|
118
|
+
*
|
|
119
|
+
* SUPPRESSED (warn)
|
|
120
|
+
* "dynamic import will not move module into another chunk" — internal chunking note
|
|
121
|
+
* "X is not exported by virtual:vinext-*" — handled gracefully at runtime
|
|
95
122
|
*/
|
|
123
|
+
function createBuildLogger(vite) {
|
|
124
|
+
const logger = vite.createLogger("info", { allowClearScreen: false });
|
|
125
|
+
const originalInfo = logger.info.bind(logger);
|
|
126
|
+
const originalWarn = logger.warn.bind(logger);
|
|
127
|
+
// Strip ANSI escape codes for pattern matching (keep originals for output).
|
|
128
|
+
const strip = (s) => s.replace(/\x1b\[[0-9;]*m/g, ""); // eslint-disable-line no-control-regex
|
|
129
|
+
logger.info = (msg, options) => {
|
|
130
|
+
const plain = strip(msg);
|
|
131
|
+
// Always keep timing lines ("✓ built in 1.23s", "✓ 75 modules transformed.").
|
|
132
|
+
if (plain.trimStart().startsWith("✓")) {
|
|
133
|
+
originalInfo(msg, options);
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
// Vite version banner: "vite v6.x.x building for production..."
|
|
137
|
+
if (/^vite v\d/.test(plain.trim()))
|
|
138
|
+
return;
|
|
139
|
+
// Rollup progress noise: "transforming...", "rendering chunks...", "computing gzip size..."
|
|
140
|
+
if (/^(transforming|rendering chunks|computing gzip size)/.test(plain.trim()))
|
|
141
|
+
return;
|
|
142
|
+
// Rollup minChunkSize diagnostics:
|
|
143
|
+
// "Initially, there are\n36 chunks, of which\n..."
|
|
144
|
+
// "After merging chunks, there are\n..."
|
|
145
|
+
// "X are below minChunkSize."
|
|
146
|
+
if (/^(Initially,|After merging|are below minChunkSize)/.test(plain.trim()))
|
|
147
|
+
return;
|
|
148
|
+
// Blank / whitespace-only separator lines.
|
|
149
|
+
if (/^\s*$/.test(plain))
|
|
150
|
+
return;
|
|
151
|
+
// Chunk/asset size table rows — e.g.:
|
|
152
|
+
// " dist/client/assets/foo.js 42.10 kB │ gzip: 6.74 kB" (TTY: indented)
|
|
153
|
+
// "dist/client/assets/foo.js 42.10 kB │ gzip: 6.74 kB" (non-TTY: at column 0)
|
|
154
|
+
// Both start with "dist/" (possibly preceded by whitespace).
|
|
155
|
+
if (/^\s*(dist\/|\.\/)/.test(plain))
|
|
156
|
+
return;
|
|
157
|
+
// @vitejs/plugin-rsc environment section headers ("[rsc]", "[ssr]", "[client]", "[worker]").
|
|
158
|
+
if (/^\s*\[(rsc|ssr|client|worker)\]/.test(plain))
|
|
159
|
+
return;
|
|
160
|
+
originalInfo(msg, options);
|
|
161
|
+
};
|
|
162
|
+
logger.warn = (msg, options) => {
|
|
163
|
+
const plain = strip(msg);
|
|
164
|
+
// Rollup: "dynamic import will not move module into another chunk" — this is
|
|
165
|
+
// emitted as a [plugin vite:reporter] warning with long absolute file paths.
|
|
166
|
+
// It's an internal chunking note, not actionable.
|
|
167
|
+
if (plain.includes("dynamic import will not move module into another chunk"))
|
|
168
|
+
return;
|
|
169
|
+
// Rollup: "X is not exported by Y" from virtual entry modules — these come from
|
|
170
|
+
// Rollup's static analysis of the generated virtual:vinext-server-entry when the
|
|
171
|
+
// user's middleware doesn't export the expected names. The vinext runtime handles
|
|
172
|
+
// missing exports gracefully, so this is noise.
|
|
173
|
+
if (plain.includes("is not exported by") && plain.includes("virtual:vinext"))
|
|
174
|
+
return;
|
|
175
|
+
originalWarn(msg, options);
|
|
176
|
+
};
|
|
177
|
+
return logger;
|
|
178
|
+
}
|
|
179
|
+
// ─── Auto-configuration ───────────────────────────────────────────────────────
|
|
96
180
|
function hasAppDir() {
|
|
97
181
|
return (fs.existsSync(path.join(process.cwd(), "app")) ||
|
|
98
182
|
fs.existsSync(path.join(process.cwd(), "src", "app")));
|
|
@@ -102,7 +186,12 @@ function hasViteConfig() {
|
|
|
102
186
|
fs.existsSync(path.join(process.cwd(), "vite.config.js")) ||
|
|
103
187
|
fs.existsSync(path.join(process.cwd(), "vite.config.mjs")));
|
|
104
188
|
}
|
|
105
|
-
|
|
189
|
+
/**
|
|
190
|
+
* Build the Vite config automatically. If a vite.config.ts exists in the
|
|
191
|
+
* project, Vite will merge our config with it (theirs takes precedence).
|
|
192
|
+
* If there's no vite.config, this provides everything needed.
|
|
193
|
+
*/
|
|
194
|
+
function buildViteConfig(overrides = {}, logger) {
|
|
106
195
|
const hasConfig = hasViteConfig();
|
|
107
196
|
// If a vite.config exists, let Vite load it — only set root and overrides.
|
|
108
197
|
// The user's config already has vinext() + rsc() plugins configured.
|
|
@@ -111,6 +200,7 @@ function buildViteConfig(overrides = {}) {
|
|
|
111
200
|
if (hasConfig) {
|
|
112
201
|
return {
|
|
113
202
|
root: process.cwd(),
|
|
203
|
+
...(logger ? { customLogger: logger } : {}),
|
|
114
204
|
...overrides,
|
|
115
205
|
};
|
|
116
206
|
}
|
|
@@ -127,6 +217,7 @@ function buildViteConfig(overrides = {}) {
|
|
|
127
217
|
resolve: {
|
|
128
218
|
dedupe: ["react", "react-dom", "react/jsx-runtime", "react/jsx-dev-runtime"],
|
|
129
219
|
},
|
|
220
|
+
...(logger ? { customLogger: logger } : {}),
|
|
130
221
|
...overrides,
|
|
131
222
|
};
|
|
132
223
|
return config;
|
|
@@ -193,6 +284,10 @@ async function buildApp() {
|
|
|
193
284
|
const vite = await loadVite();
|
|
194
285
|
console.log(`\n vinext build (Vite ${getViteVersion()})\n`);
|
|
195
286
|
const isApp = hasAppDir();
|
|
287
|
+
// In verbose mode, skip the custom logger so raw Vite/Rollup output is shown.
|
|
288
|
+
const logger = parsed.verbose
|
|
289
|
+
? vite.createLogger("info", { allowClearScreen: false })
|
|
290
|
+
: createBuildLogger(vite);
|
|
196
291
|
// For App Router: upgrade React if needed for react-server-dom-webpack compatibility.
|
|
197
292
|
// Without this, builds with react<19.2.4 produce a Worker that crashes at
|
|
198
293
|
// runtime with "Cannot read properties of undefined (reading 'moduleMap')".
|
|
@@ -207,7 +302,7 @@ async function buildApp() {
|
|
|
207
302
|
}
|
|
208
303
|
if (isApp) {
|
|
209
304
|
// App Router: use createBuilder for multi-environment RSC builds
|
|
210
|
-
const config = buildViteConfig();
|
|
305
|
+
const config = buildViteConfig({}, logger);
|
|
211
306
|
const builder = await vite.createBuilder(config);
|
|
212
307
|
await builder.buildApp();
|
|
213
308
|
}
|
|
@@ -227,7 +322,7 @@ async function buildApp() {
|
|
|
227
322
|
treeshake: clientTreeshakeConfig,
|
|
228
323
|
},
|
|
229
324
|
},
|
|
230
|
-
}));
|
|
325
|
+
}, logger));
|
|
231
326
|
console.log(" Building server...");
|
|
232
327
|
await vite.build(buildViteConfig({
|
|
233
328
|
build: {
|
|
@@ -239,8 +334,9 @@ async function buildApp() {
|
|
|
239
334
|
},
|
|
240
335
|
},
|
|
241
336
|
},
|
|
242
|
-
}));
|
|
337
|
+
}, logger));
|
|
243
338
|
}
|
|
339
|
+
await printBuildReport({ root: process.cwd() });
|
|
244
340
|
console.log("\n Build complete. Run `vinext start` to start the production server.\n");
|
|
245
341
|
}
|
|
246
342
|
async function start() {
|
|
@@ -377,7 +473,8 @@ function printHelp(cmd) {
|
|
|
377
473
|
runs the appropriate multi-environment build via Vite.
|
|
378
474
|
|
|
379
475
|
Options:
|
|
380
|
-
|
|
476
|
+
--verbose Show full Vite/Rollup build output (suppressed by default)
|
|
477
|
+
-h, --help Show this help
|
|
381
478
|
`);
|
|
382
479
|
return;
|
|
383
480
|
}
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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","sourcesContent":["#!/usr/bin/env node\n\n/**\n * vinext CLI — drop-in replacement for the `next` command\n *\n * vinext dev Start development server (Vite)\n * vinext build Build for production\n * vinext start Start production server\n * vinext deploy Deploy to Cloudflare Workers\n * vinext lint Run linter (delegates to eslint/oxlint)\n *\n * Automatically configures Vite with the vinext plugin — no vite.config.ts\n * needed for most Next.js apps.\n */\n\nimport vinext, { clientOutputConfig, clientTreeshakeConfig } from \"./index.js\";\nimport path from \"node:path\";\nimport fs from \"node:fs\";\nimport { pathToFileURL } from \"node:url\";\nimport { createRequire } from \"node:module\";\nimport { execFileSync } from \"node:child_process\";\nimport { detectPackageManager, ensureViteConfigCompatibility } from \"./utils/project.js\";\nimport { deploy as runDeploy, parseDeployArgs } from \"./deploy.js\";\nimport { runCheck, formatReport } from \"./check.js\";\nimport { init as runInit, getReactUpgradeDeps } from \"./init.js\";\nimport { loadDotenv } from \"./config/dotenv.js\";\n\n// ─── Resolve Vite from the project root ────────────────────────────────────────\n//\n// When vinext is installed via `bun link` or `npm link`, Node follows the\n// symlink back to the monorepo and resolves `vite` from the monorepo's\n// node_modules — not the project's. This causes dual Vite instances, dual\n// React copies, and plugin resolution failures.\n//\n// To fix this, we resolve Vite dynamically from `process.cwd()` at runtime\n// using `createRequire`. This ensures we always use the project's Vite.\n\ninterface ViteModule {\n createServer: typeof import(\"vite\").createServer;\n build: typeof import(\"vite\").build;\n createBuilder: typeof import(\"vite\").createBuilder;\n version: string;\n}\n\nlet _viteModule: ViteModule | null = null;\n\n/**\n * Dynamically load Vite from the project root. Falls back to the bundled\n * copy if the project doesn't have its own Vite installation.\n */\nasync function loadVite(): Promise<ViteModule> {\n if (_viteModule) return _viteModule;\n\n const projectRoot = process.cwd();\n let vitePath: string;\n\n try {\n // Resolve \"vite\" from the project root, not from vinext's location\n const require = createRequire(path.join(projectRoot, \"package.json\"));\n vitePath = require.resolve(\"vite\");\n } catch {\n // Fallback: use the Vite that ships with vinext (works for non-linked installs)\n vitePath = \"vite\";\n }\n\n // On Windows, absolute paths must be file:// URLs for ESM import().\n // The fallback (\"vite\") is a bare specifier and works as-is.\n const viteUrl = vitePath === \"vite\" ? vitePath : pathToFileURL(vitePath).href;\n const vite = (await import(/* @vite-ignore */ viteUrl)) as ViteModule;\n _viteModule = vite;\n return vite;\n}\n\n/**\n * Get the Vite version string. Returns \"unknown\" before loadVite() is called.\n */\nfunction getViteVersion(): string {\n return _viteModule?.version ?? \"unknown\";\n}\n\nconst VERSION = JSON.parse(fs.readFileSync(new URL(\"../package.json\", import.meta.url), \"utf-8\"))\n .version as string;\n\n// ─── CLI Argument Parsing ──────────────────────────────────────────────────────\n\nconst command = process.argv[2];\nconst rawArgs = process.argv.slice(3);\n\ninterface ParsedArgs {\n port?: number;\n hostname?: string;\n help?: boolean;\n turbopack?: boolean; // accepted for compat, always ignored\n experimental?: boolean; // accepted for compat, always ignored\n}\n\nfunction parseArgs(args: string[]): ParsedArgs {\n const result: ParsedArgs = {};\n for (let i = 0; i < args.length; i++) {\n const arg = args[i];\n if (arg === \"--help\" || arg === \"-h\") {\n result.help = true;\n } else if (arg === \"--turbopack\") {\n result.turbopack = true; // no-op, accepted for script compat\n } else if (arg === \"--experimental-https\") {\n result.experimental = true; // no-op\n } else if (arg === \"--port\" || arg === \"-p\") {\n result.port = parseInt(args[++i], 10);\n } else if (arg.startsWith(\"--port=\")) {\n result.port = parseInt(arg.split(\"=\")[1], 10);\n } else if (arg === \"--hostname\" || arg === \"-H\") {\n result.hostname = args[++i];\n } else if (arg.startsWith(\"--hostname=\")) {\n result.hostname = arg.split(\"=\")[1];\n }\n }\n return result;\n}\n\n// ─── Auto-configuration ───────────────────────────────────────────────────────\n\n/**\n * Build the Vite config automatically. If a vite.config.ts exists in the\n * project, Vite will merge our config with it (theirs takes precedence).\n * If there's no vite.config, this provides everything needed.\n */\nfunction hasAppDir(): boolean {\n return (\n fs.existsSync(path.join(process.cwd(), \"app\")) ||\n fs.existsSync(path.join(process.cwd(), \"src\", \"app\"))\n );\n}\n\nfunction hasViteConfig(): boolean {\n return (\n fs.existsSync(path.join(process.cwd(), \"vite.config.ts\")) ||\n fs.existsSync(path.join(process.cwd(), \"vite.config.js\")) ||\n fs.existsSync(path.join(process.cwd(), \"vite.config.mjs\"))\n );\n}\n\nfunction buildViteConfig(overrides: Record<string, unknown> = {}) {\n const hasConfig = hasViteConfig();\n\n // If a vite.config exists, let Vite load it — only set root and overrides.\n // The user's config already has vinext() + rsc() plugins configured.\n // Adding them here too would duplicate the RSC transform (causes\n // \"Identifier has already been declared\" errors in production builds).\n if (hasConfig) {\n return {\n root: process.cwd(),\n ...overrides,\n };\n }\n\n // No vite.config — auto-configure everything.\n // vinext() auto-registers @vitejs/plugin-rsc when app/ is detected,\n // so we only need vinext() in the plugins array.\n const config: Record<string, unknown> = {\n root: process.cwd(),\n configFile: false,\n plugins: [vinext()],\n // Deduplicate React packages to prevent \"Invalid hook call\" errors\n // when vinext is symlinked (bun link / npm link) and both vinext's\n // and the project's node_modules contain React.\n resolve: {\n dedupe: [\"react\", \"react-dom\", \"react/jsx-runtime\", \"react/jsx-dev-runtime\"],\n },\n ...overrides,\n };\n\n return config;\n}\n\n/**\n * Ensure the project's package.json has `\"type\": \"module\"` before Vite loads\n * the vite.config.ts. This prevents the esbuild CJS-bundling path that Vite\n * takes for projects without `\"type\": \"module\"`, which produces a `.mjs` temp\n * file containing `require()` calls — calls that fail on Node 22 when\n * targeting pure-ESM packages like `@cloudflare/vite-plugin`.\n *\n * This mirrors what `vinext init` does, but is applied lazily at dev/build\n * time for projects that were set up before `vinext init` added the step, or\n * that were migrated manually.\n */\nfunction applyViteConfigCompatibility(root: string): void {\n const result = ensureViteConfigCompatibility(root);\n if (!result) return;\n\n for (const [oldName, newName] of result.renamed) {\n console.warn(` [vinext] Renamed ${oldName} → ${newName} (required for \"type\": \"module\")`);\n }\n if (result.addedTypeModule) {\n console.warn(\n ` [vinext] Added \"type\": \"module\" to package.json (required for Vite ESM config loading).\\n` +\n ` Run \\`vinext init\\` to review all project configuration.`,\n );\n }\n}\n\n// ─── Commands ─────────────────────────────────────────────────────────────────\n\nasync function dev() {\n const parsed = parseArgs(rawArgs);\n if (parsed.help) return printHelp(\"dev\");\n\n loadDotenv({\n root: process.cwd(),\n mode: \"development\",\n });\n\n // Ensure \"type\": \"module\" in package.json before Vite loads vite.config.ts.\n // Without this, Vite bundles the config as CJS and tries require() on pure-ESM\n // packages like @cloudflare/vite-plugin, which fails on Node 22.\n applyViteConfigCompatibility(process.cwd());\n\n const vite = await loadVite();\n\n const port = parsed.port ?? 3000;\n const host = parsed.hostname ?? \"localhost\";\n\n console.log(`\\n vinext dev (Vite ${getViteVersion()})\\n`);\n\n const config = buildViteConfig({\n server: { port, host },\n });\n\n const server = await vite.createServer(config);\n await server.listen();\n server.printUrls();\n}\n\nasync function buildApp() {\n const parsed = parseArgs(rawArgs);\n if (parsed.help) return printHelp(\"build\");\n\n loadDotenv({\n root: process.cwd(),\n mode: \"production\",\n });\n\n // Ensure \"type\": \"module\" in package.json before Vite loads vite.config.ts.\n // Without this, Vite bundles the config as CJS and tries require() on pure-ESM\n // packages like @cloudflare/vite-plugin, which fails on Node 22.\n applyViteConfigCompatibility(process.cwd());\n\n const vite = await loadVite();\n\n console.log(`\\n vinext build (Vite ${getViteVersion()})\\n`);\n\n const isApp = hasAppDir();\n\n // For App Router: upgrade React if needed for react-server-dom-webpack compatibility.\n // Without this, builds with react<19.2.4 produce a Worker that crashes at\n // runtime with \"Cannot read properties of undefined (reading 'moduleMap')\".\n if (isApp) {\n const reactUpgrade = getReactUpgradeDeps(process.cwd());\n if (reactUpgrade.length > 0) {\n const installCmd = detectPackageManager(process.cwd()).replace(/ -D$/, \"\");\n const [pm, ...pmArgs] = installCmd.split(\" \");\n console.log(\" Upgrading React for RSC compatibility...\");\n execFileSync(pm, [...pmArgs, ...reactUpgrade], { cwd: process.cwd(), stdio: \"inherit\" });\n }\n }\n\n if (isApp) {\n // App Router: use createBuilder for multi-environment RSC builds\n const config = buildViteConfig();\n const builder = await vite.createBuilder(config);\n await builder.buildApp();\n } else {\n // Pages Router: client + SSR builds.\n // Use buildViteConfig() so that when a vite.config exists we don't\n // duplicate the vinext() plugin.\n console.log(\" Building client...\");\n await vite.build(\n buildViteConfig({\n build: {\n outDir: \"dist/client\",\n manifest: true,\n ssrManifest: true,\n rollupOptions: {\n input: \"virtual:vinext-client-entry\",\n output: clientOutputConfig,\n treeshake: clientTreeshakeConfig,\n },\n },\n }),\n );\n\n console.log(\" Building server...\");\n await vite.build(\n buildViteConfig({\n build: {\n outDir: \"dist/server\",\n ssr: \"virtual:vinext-server-entry\",\n rollupOptions: {\n output: {\n entryFileNames: \"entry.js\",\n },\n },\n },\n }),\n );\n }\n\n console.log(\"\\n Build complete. Run `vinext start` to start the production server.\\n\");\n}\n\nasync function start() {\n const parsed = parseArgs(rawArgs);\n if (parsed.help) return printHelp(\"start\");\n\n loadDotenv({\n root: process.cwd(),\n mode: \"production\",\n });\n\n const port = parsed.port ?? parseInt(process.env.PORT ?? \"3000\", 10);\n const host = parsed.hostname ?? \"0.0.0.0\";\n\n console.log(`\\n vinext start (port ${port})\\n`);\n\n const { startProdServer } = (await import(/* @vite-ignore */ \"./server/prod-server.js\")) as {\n startProdServer: (opts: { port: number; host: string; outDir: string }) => Promise<unknown>;\n };\n\n await startProdServer({\n port,\n host,\n outDir: path.resolve(process.cwd(), \"dist\"),\n });\n}\n\nasync function lint() {\n const parsed = parseArgs(rawArgs);\n if (parsed.help) return printHelp(\"lint\");\n\n console.log(`\\n vinext lint\\n`);\n\n // Try oxlint first (fast), fall back to eslint\n const cwd = process.cwd();\n const hasOxlint = fs.existsSync(path.join(cwd, \"node_modules\", \".bin\", \"oxlint\"));\n const hasEslint = fs.existsSync(path.join(cwd, \"node_modules\", \".bin\", \"eslint\"));\n\n // Check for next lint config (eslint-config-next)\n const hasNextLintConfig =\n fs.existsSync(path.join(cwd, \".eslintrc.json\")) ||\n fs.existsSync(path.join(cwd, \".eslintrc.js\")) ||\n fs.existsSync(path.join(cwd, \".eslintrc.cjs\")) ||\n fs.existsSync(path.join(cwd, \"eslint.config.js\")) ||\n fs.existsSync(path.join(cwd, \"eslint.config.mjs\"));\n\n try {\n if (hasEslint && hasNextLintConfig) {\n console.log(\" Using eslint (with existing config)\\n\");\n execFileSync(\"npx\", [\"eslint\", \".\"], { cwd, stdio: \"inherit\" });\n } else if (hasOxlint) {\n console.log(\" Using oxlint\\n\");\n execFileSync(\"npx\", [\"oxlint\", \".\"], { cwd, stdio: \"inherit\" });\n } else if (hasEslint) {\n console.log(\" Using eslint\\n\");\n execFileSync(\"npx\", [\"eslint\", \".\"], { cwd, stdio: \"inherit\" });\n } else {\n console.log(\n \" No linter found. Install eslint or oxlint:\\n\\n\" +\n \" \" +\n detectPackageManager(process.cwd()) +\n \" eslint eslint-config-next\\n\" +\n \" # or\\n\" +\n \" \" +\n detectPackageManager(process.cwd()) +\n \" oxlint\\n\",\n );\n process.exit(1);\n }\n console.log(\"\\n Lint passed.\\n\");\n } catch {\n process.exit(1);\n }\n}\n\nasync function deployCommand() {\n const parsed = parseDeployArgs(rawArgs);\n if (parsed.help) return printHelp(\"deploy\");\n\n await loadVite();\n console.log(`\\n vinext deploy (Vite ${getViteVersion()})\\n`);\n\n await runDeploy({\n root: process.cwd(),\n preview: parsed.preview,\n env: parsed.env,\n skipBuild: parsed.skipBuild,\n dryRun: parsed.dryRun,\n name: parsed.name,\n experimentalTPR: parsed.experimentalTPR,\n tprCoverage: parsed.tprCoverage,\n tprLimit: parsed.tprLimit,\n tprWindow: parsed.tprWindow,\n });\n}\n\nasync function check() {\n const parsed = parseArgs(rawArgs);\n if (parsed.help) return printHelp(\"check\");\n\n const root = process.cwd();\n console.log(`\\n vinext check\\n`);\n console.log(\" Scanning project...\\n\");\n\n const result = runCheck(root);\n console.log(formatReport(result));\n}\n\nasync function initCommand() {\n const parsed = parseArgs(rawArgs);\n if (parsed.help) return printHelp(\"init\");\n\n console.log(`\\n vinext init\\n`);\n\n // Parse init-specific flags\n const port = parsed.port ?? 3001;\n const skipCheck = rawArgs.includes(\"--skip-check\");\n const force = rawArgs.includes(\"--force\");\n\n await runInit({\n root: process.cwd(),\n port,\n skipCheck,\n force,\n });\n}\n\n// ─── Help ─────────────────────────────────────────────────────────────────────\n\nfunction printHelp(cmd?: string) {\n if (cmd === \"dev\") {\n console.log(`\n vinext dev - Start development server\n\n Usage: vinext dev [options]\n\n Options:\n -p, --port <port> Port to listen on (default: 3000)\n -H, --hostname <host> Hostname to bind to (default: localhost)\n --turbopack Accepted for compatibility (no-op, Vite is always used)\n -h, --help Show this help\n`);\n return;\n }\n\n if (cmd === \"build\") {\n console.log(`\n vinext build - Build for production\n\n Usage: vinext build [options]\n\n Automatically detects App Router (app/) or Pages Router (pages/) and\n runs the appropriate multi-environment build via Vite.\n\n Options:\n -h, --help Show this help\n`);\n return;\n }\n\n if (cmd === \"start\") {\n console.log(`\n vinext start - Start production server\n\n Usage: vinext start [options]\n\n Serves the output from \\`vinext build\\`. Supports SSR, static files,\n compression, and all middleware.\n\n Options:\n -p, --port <port> Port to listen on (default: 3000, or PORT env)\n -H, --hostname <host> Hostname to bind to (default: 0.0.0.0)\n -h, --help Show this help\n`);\n return;\n }\n\n if (cmd === \"deploy\") {\n console.log(`\n vinext deploy - Deploy to Cloudflare Workers\n\n Usage: vinext deploy [options]\n\n One-command deployment to Cloudflare Workers. Automatically:\n - Detects App Router or Pages Router\n - Generates wrangler.jsonc, worker/index.ts, vite.config.ts if missing\n - Installs @cloudflare/vite-plugin and wrangler if needed\n - Builds the project with Vite\n - Deploys via wrangler\n\n Options:\n --preview Deploy to preview environment (same as --env preview)\n --env <name> Deploy using wrangler env.<name>\n --name <name> Custom Worker name (default: from package.json)\n --skip-build Skip the build step (use existing dist/)\n --dry-run Generate config files without building or deploying\n -h, --help Show this help\n\n Experimental:\n --experimental-tpr Enable Traffic-aware Pre-Rendering\n --tpr-coverage <pct> Traffic coverage target, 0–100 (default: 90)\n --tpr-limit <count> Hard cap on pages to pre-render (default: 1000)\n --tpr-window <hours> Analytics lookback window in hours (default: 24)\n\n TPR (Traffic-aware Pre-Rendering) uses Cloudflare zone analytics to determine\n which pages get the most traffic and pre-renders them into KV cache during\n deploy. This feature is experimental and must be explicitly enabled. Requires\n a custom domain (zone analytics are unavailable on *.workers.dev) and the\n CLOUDFLARE_API_TOKEN environment variable with Zone.Analytics read permission.\n\n Examples:\n vinext deploy Build and deploy to production\n vinext deploy --preview Deploy to a preview URL\n vinext deploy --env staging Deploy using wrangler env.staging\n vinext deploy --dry-run See what files would be generated\n vinext deploy --name my-app Deploy with a custom Worker name\n vinext deploy --experimental-tpr Enable TPR during deploy\n vinext deploy --experimental-tpr --tpr-coverage 95 Cover 95% of traffic\n vinext deploy --experimental-tpr --tpr-limit 500 Cap at 500 pages\n`);\n return;\n }\n\n if (cmd === \"check\") {\n console.log(`\n vinext check - Scan Next.js app for compatibility\n\n Usage: vinext check [options]\n\n Scans your Next.js project and produces a compatibility report showing\n which imports, config options, libraries, and conventions are supported,\n partially supported, or unsupported by vinext.\n\n Options:\n -h, --help Show this help\n`);\n return;\n }\n\n if (cmd === \"init\") {\n console.log(`\n vinext init - Migrate a Next.js project to run under vinext\n\n Usage: vinext init [options]\n\n One-command migration: installs dependencies, configures ESM,\n generates vite.config.ts, and adds npm scripts. Your Next.js\n setup continues to work alongside vinext.\n\n Options:\n -p, --port <port> Dev server port for the vinext script (default: 3001)\n --skip-check Skip the compatibility check step\n --force Overwrite existing vite.config.ts\n -h, --help Show this help\n\n Examples:\n vinext init Migrate with defaults\n vinext init -p 4000 Use port 4000 for dev:vinext\n vinext init --force Overwrite existing vite.config.ts\n vinext init --skip-check Skip the compatibility report\n`);\n return;\n }\n\n if (cmd === \"lint\") {\n console.log(`\n vinext lint - Run linter\n\n Usage: vinext lint [options]\n\n Delegates to your project's eslint (with eslint-config-next) or oxlint.\n If neither is installed, suggests how to add one.\n\n Options:\n -h, --help Show this help\n`);\n return;\n }\n\n console.log(`\n vinext v${VERSION} - Run Next.js apps on Vite\n\n Usage: vinext <command> [options]\n\n Commands:\n dev Start development server\n build Build for production\n start Start production server\n deploy Deploy to Cloudflare Workers\n init Migrate a Next.js project to vinext\n check Scan Next.js app for compatibility\n lint Run linter\n\n Options:\n -h, --help Show this help\n --version Show version\n\n Examples:\n vinext dev Start dev server on port 3000\n vinext dev -p 4000 Start dev server on port 4000\n vinext build Build for production\n vinext start Start production server\n vinext deploy Deploy to Cloudflare Workers\n vinext init Migrate a Next.js project\n vinext check Check compatibility\n vinext lint Run linter\n\n vinext is a drop-in replacement for the \\`next\\` CLI.\n No vite.config.ts needed — just run \\`vinext dev\\` in your Next.js project.\n`);\n}\n\n// ─── Entry ────────────────────────────────────────────────────────────────────\n\nif (command === \"--version\" || command === \"-v\") {\n console.log(`vinext v${VERSION}`);\n process.exit(0);\n}\n\nif (command === \"--help\" || command === \"-h\" || !command) {\n printHelp();\n if (!command) process.exit(0);\n process.exit(0);\n}\n\nswitch (command) {\n case \"dev\":\n dev().catch((e) => {\n console.error(e);\n process.exit(1);\n });\n break;\n\n case \"build\":\n buildApp().catch((e) => {\n console.error(e);\n process.exit(1);\n });\n break;\n\n case \"start\":\n start().catch((e) => {\n console.error(e);\n process.exit(1);\n });\n break;\n\n case \"deploy\":\n deployCommand().catch((e) => {\n console.error(e);\n process.exit(1);\n });\n break;\n\n case \"init\":\n initCommand().catch((e) => {\n console.error(e);\n process.exit(1);\n });\n break;\n\n case \"check\":\n check().catch((e) => {\n console.error(e);\n process.exit(1);\n });\n break;\n\n case \"lint\":\n lint().catch((e) => {\n console.error(e);\n process.exit(1);\n });\n break;\n\n default:\n console.error(`\\n Unknown command: ${command}\\n`);\n printHelp();\n process.exit(1);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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","sourcesContent":["#!/usr/bin/env node\n\n/**\n * vinext CLI — drop-in replacement for the `next` command\n *\n * vinext dev Start development server (Vite)\n * vinext build Build for production\n * vinext start Start production server\n * vinext deploy Deploy to Cloudflare Workers\n * vinext lint Run linter (delegates to eslint/oxlint)\n *\n * Automatically configures Vite with the vinext plugin — no vite.config.ts\n * needed for most Next.js apps.\n */\n\nimport vinext, { clientOutputConfig, clientTreeshakeConfig } from \"./index.js\";\nimport { printBuildReport } from \"./build/report.js\";\nimport path from \"node:path\";\nimport fs from \"node:fs\";\nimport { pathToFileURL } from \"node:url\";\nimport { createRequire } from \"node:module\";\nimport { execFileSync } from \"node:child_process\";\nimport { detectPackageManager, ensureViteConfigCompatibility } from \"./utils/project.js\";\nimport { deploy as runDeploy, parseDeployArgs } from \"./deploy.js\";\nimport { runCheck, formatReport } from \"./check.js\";\nimport { init as runInit, getReactUpgradeDeps } from \"./init.js\";\nimport { loadDotenv } from \"./config/dotenv.js\";\n\n// ─── Resolve Vite from the project root ────────────────────────────────────────\n//\n// When vinext is installed via `bun link` or `npm link`, Node follows the\n// symlink back to the monorepo and resolves `vite` from the monorepo's\n// node_modules — not the project's. This causes dual Vite instances, dual\n// React copies, and plugin resolution failures.\n//\n// To fix this, we resolve Vite dynamically from `process.cwd()` at runtime\n// using `createRequire`. This ensures we always use the project's Vite.\n\ninterface ViteModule {\n createServer: typeof import(\"vite\").createServer;\n build: typeof import(\"vite\").build;\n createBuilder: typeof import(\"vite\").createBuilder;\n createLogger: typeof import(\"vite\").createLogger;\n version: string;\n}\n\nlet _viteModule: ViteModule | null = null;\n\n/**\n * Dynamically load Vite from the project root. Falls back to the bundled\n * copy if the project doesn't have its own Vite installation.\n */\nasync function loadVite(): Promise<ViteModule> {\n if (_viteModule) return _viteModule;\n\n const projectRoot = process.cwd();\n let vitePath: string;\n\n try {\n // Resolve \"vite\" from the project root, not from vinext's location\n const require = createRequire(path.join(projectRoot, \"package.json\"));\n vitePath = require.resolve(\"vite\");\n } catch {\n // Fallback: use the Vite that ships with vinext (works for non-linked installs)\n vitePath = \"vite\";\n }\n\n // On Windows, absolute paths must be file:// URLs for ESM import().\n // The fallback (\"vite\") is a bare specifier and works as-is.\n const viteUrl = vitePath === \"vite\" ? vitePath : pathToFileURL(vitePath).href;\n const vite = (await import(/* @vite-ignore */ viteUrl)) as ViteModule;\n _viteModule = vite;\n return vite;\n}\n\n/**\n * Get the Vite version string. Returns \"unknown\" before loadVite() is called.\n */\nfunction getViteVersion(): string {\n return _viteModule?.version ?? \"unknown\";\n}\n\nconst VERSION = JSON.parse(fs.readFileSync(new URL(\"../package.json\", import.meta.url), \"utf-8\"))\n .version as string;\n\n// ─── CLI Argument Parsing ──────────────────────────────────────────────────────\n\nconst command = process.argv[2];\nconst rawArgs = process.argv.slice(3);\n\ninterface ParsedArgs {\n port?: number;\n hostname?: string;\n help?: boolean;\n verbose?: boolean;\n turbopack?: boolean; // accepted for compat, always ignored\n experimental?: boolean; // accepted for compat, always ignored\n}\n\nfunction parseArgs(args: string[]): ParsedArgs {\n const result: ParsedArgs = {};\n for (let i = 0; i < args.length; i++) {\n const arg = args[i];\n if (arg === \"--help\" || arg === \"-h\") {\n result.help = true;\n } else if (arg === \"--verbose\") {\n result.verbose = true;\n } else if (arg === \"--turbopack\") {\n result.turbopack = true; // no-op, accepted for script compat\n } else if (arg === \"--experimental-https\") {\n result.experimental = true; // no-op\n } else if (arg === \"--port\" || arg === \"-p\") {\n result.port = parseInt(args[++i], 10);\n } else if (arg.startsWith(\"--port=\")) {\n result.port = parseInt(arg.split(\"=\")[1], 10);\n } else if (arg === \"--hostname\" || arg === \"-H\") {\n result.hostname = args[++i];\n } else if (arg.startsWith(\"--hostname=\")) {\n result.hostname = arg.split(\"=\")[1];\n }\n }\n return result;\n}\n\n// ─── Build logger ─────────────────────────────────────────────────────────────\n\n/**\n * Create a custom Vite logger for build output.\n *\n * By default Vite/Rollup emit a lot of build noise: version banners, progress\n * lines, chunk size tables, minChunkSize diagnostics, and various internal\n * warnings that are either not actionable or already handled by vinext at\n * runtime. This logger suppresses all of that while keeping the things that\n * actually matter:\n *\n * KEPT\n * ✓ N modules transformed. — confirms the transform phase completed\n * ✓ built in Xs — build timing (useful perf signal)\n * Genuine warnings/errors — anything the user may need to act on\n *\n * SUPPRESSED (info)\n * vite vX.Y.Z building... — Vite version banner\n * transforming... / rendering chunks... / computing gzip size...\n * Initially, there are N chunks... — Rollup minChunkSize diagnostics\n * After merging chunks, there are...\n * X are below minChunkSize.\n * Blank lines\n * Chunk/asset size table rows — e.g. \" dist/client/assets/foo.js 42 kB\"\n * [rsc] / [ssr] / [client] / [worker] — RSC plugin env section headers\n *\n * SUPPRESSED (warn)\n * \"dynamic import will not move module into another chunk\" — internal chunking note\n * \"X is not exported by virtual:vinext-*\" — handled gracefully at runtime\n */\nfunction createBuildLogger(vite: ViteModule): import(\"vite\").Logger {\n const logger = vite.createLogger(\"info\", { allowClearScreen: false });\n const originalInfo = logger.info.bind(logger);\n const originalWarn = logger.warn.bind(logger);\n\n // Strip ANSI escape codes for pattern matching (keep originals for output).\n const strip = (s: string) => s.replace(/\\x1b\\[[0-9;]*m/g, \"\"); // eslint-disable-line no-control-regex\n\n logger.info = (msg: string, options?: import(\"vite\").LogOptions) => {\n const plain = strip(msg);\n\n // Always keep timing lines (\"✓ built in 1.23s\", \"✓ 75 modules transformed.\").\n if (plain.trimStart().startsWith(\"✓\")) {\n originalInfo(msg, options);\n return;\n }\n\n // Vite version banner: \"vite v6.x.x building for production...\"\n if (/^vite v\\d/.test(plain.trim())) return;\n\n // Rollup progress noise: \"transforming...\", \"rendering chunks...\", \"computing gzip size...\"\n if (/^(transforming|rendering chunks|computing gzip size)/.test(plain.trim())) return;\n\n // Rollup minChunkSize diagnostics:\n // \"Initially, there are\\n36 chunks, of which\\n...\"\n // \"After merging chunks, there are\\n...\"\n // \"X are below minChunkSize.\"\n if (/^(Initially,|After merging|are below minChunkSize)/.test(plain.trim())) return;\n\n // Blank / whitespace-only separator lines.\n if (/^\\s*$/.test(plain)) return;\n\n // Chunk/asset size table rows — e.g.:\n // \" dist/client/assets/foo.js 42.10 kB │ gzip: 6.74 kB\" (TTY: indented)\n // \"dist/client/assets/foo.js 42.10 kB │ gzip: 6.74 kB\" (non-TTY: at column 0)\n // Both start with \"dist/\" (possibly preceded by whitespace).\n if (/^\\s*(dist\\/|\\.\\/)/.test(plain)) return;\n\n // @vitejs/plugin-rsc environment section headers (\"[rsc]\", \"[ssr]\", \"[client]\", \"[worker]\").\n if (/^\\s*\\[(rsc|ssr|client|worker)\\]/.test(plain)) return;\n\n originalInfo(msg, options);\n };\n\n logger.warn = (msg: string, options?: import(\"vite\").LogOptions) => {\n const plain = strip(msg);\n\n // Rollup: \"dynamic import will not move module into another chunk\" — this is\n // emitted as a [plugin vite:reporter] warning with long absolute file paths.\n // It's an internal chunking note, not actionable.\n if (plain.includes(\"dynamic import will not move module into another chunk\")) return;\n\n // Rollup: \"X is not exported by Y\" from virtual entry modules — these come from\n // Rollup's static analysis of the generated virtual:vinext-server-entry when the\n // user's middleware doesn't export the expected names. The vinext runtime handles\n // missing exports gracefully, so this is noise.\n if (plain.includes(\"is not exported by\") && plain.includes(\"virtual:vinext\")) return;\n\n originalWarn(msg, options);\n };\n\n return logger;\n}\n\n// ─── Auto-configuration ───────────────────────────────────────────────────────\n\nfunction hasAppDir(): boolean {\n return (\n fs.existsSync(path.join(process.cwd(), \"app\")) ||\n fs.existsSync(path.join(process.cwd(), \"src\", \"app\"))\n );\n}\n\nfunction hasViteConfig(): boolean {\n return (\n fs.existsSync(path.join(process.cwd(), \"vite.config.ts\")) ||\n fs.existsSync(path.join(process.cwd(), \"vite.config.js\")) ||\n fs.existsSync(path.join(process.cwd(), \"vite.config.mjs\"))\n );\n}\n\n/**\n * Build the Vite config automatically. If a vite.config.ts exists in the\n * project, Vite will merge our config with it (theirs takes precedence).\n * If there's no vite.config, this provides everything needed.\n */\nfunction buildViteConfig(overrides: Record<string, unknown> = {}, logger?: import(\"vite\").Logger) {\n const hasConfig = hasViteConfig();\n\n // If a vite.config exists, let Vite load it — only set root and overrides.\n // The user's config already has vinext() + rsc() plugins configured.\n // Adding them here too would duplicate the RSC transform (causes\n // \"Identifier has already been declared\" errors in production builds).\n if (hasConfig) {\n return {\n root: process.cwd(),\n ...(logger ? { customLogger: logger } : {}),\n ...overrides,\n };\n }\n\n // No vite.config — auto-configure everything.\n // vinext() auto-registers @vitejs/plugin-rsc when app/ is detected,\n // so we only need vinext() in the plugins array.\n const config: Record<string, unknown> = {\n root: process.cwd(),\n configFile: false,\n plugins: [vinext()],\n // Deduplicate React packages to prevent \"Invalid hook call\" errors\n // when vinext is symlinked (bun link / npm link) and both vinext's\n // and the project's node_modules contain React.\n resolve: {\n dedupe: [\"react\", \"react-dom\", \"react/jsx-runtime\", \"react/jsx-dev-runtime\"],\n },\n ...(logger ? { customLogger: logger } : {}),\n ...overrides,\n };\n\n return config;\n}\n\n/**\n * Ensure the project's package.json has `\"type\": \"module\"` before Vite loads\n * the vite.config.ts. This prevents the esbuild CJS-bundling path that Vite\n * takes for projects without `\"type\": \"module\"`, which produces a `.mjs` temp\n * file containing `require()` calls — calls that fail on Node 22 when\n * targeting pure-ESM packages like `@cloudflare/vite-plugin`.\n *\n * This mirrors what `vinext init` does, but is applied lazily at dev/build\n * time for projects that were set up before `vinext init` added the step, or\n * that were migrated manually.\n */\nfunction applyViteConfigCompatibility(root: string): void {\n const result = ensureViteConfigCompatibility(root);\n if (!result) return;\n\n for (const [oldName, newName] of result.renamed) {\n console.warn(` [vinext] Renamed ${oldName} → ${newName} (required for \"type\": \"module\")`);\n }\n if (result.addedTypeModule) {\n console.warn(\n ` [vinext] Added \"type\": \"module\" to package.json (required for Vite ESM config loading).\\n` +\n ` Run \\`vinext init\\` to review all project configuration.`,\n );\n }\n}\n\n// ─── Commands ─────────────────────────────────────────────────────────────────\n\nasync function dev() {\n const parsed = parseArgs(rawArgs);\n if (parsed.help) return printHelp(\"dev\");\n\n loadDotenv({\n root: process.cwd(),\n mode: \"development\",\n });\n\n // Ensure \"type\": \"module\" in package.json before Vite loads vite.config.ts.\n // Without this, Vite bundles the config as CJS and tries require() on pure-ESM\n // packages like @cloudflare/vite-plugin, which fails on Node 22.\n applyViteConfigCompatibility(process.cwd());\n\n const vite = await loadVite();\n\n const port = parsed.port ?? 3000;\n const host = parsed.hostname ?? \"localhost\";\n\n console.log(`\\n vinext dev (Vite ${getViteVersion()})\\n`);\n\n const config = buildViteConfig({\n server: { port, host },\n });\n\n const server = await vite.createServer(config);\n await server.listen();\n server.printUrls();\n}\n\nasync function buildApp() {\n const parsed = parseArgs(rawArgs);\n if (parsed.help) return printHelp(\"build\");\n\n loadDotenv({\n root: process.cwd(),\n mode: \"production\",\n });\n\n // Ensure \"type\": \"module\" in package.json before Vite loads vite.config.ts.\n // Without this, Vite bundles the config as CJS and tries require() on pure-ESM\n // packages like @cloudflare/vite-plugin, which fails on Node 22.\n applyViteConfigCompatibility(process.cwd());\n\n const vite = await loadVite();\n\n console.log(`\\n vinext build (Vite ${getViteVersion()})\\n`);\n\n const isApp = hasAppDir();\n // In verbose mode, skip the custom logger so raw Vite/Rollup output is shown.\n const logger = parsed.verbose\n ? vite.createLogger(\"info\", { allowClearScreen: false })\n : createBuildLogger(vite);\n\n // For App Router: upgrade React if needed for react-server-dom-webpack compatibility.\n // Without this, builds with react<19.2.4 produce a Worker that crashes at\n // runtime with \"Cannot read properties of undefined (reading 'moduleMap')\".\n if (isApp) {\n const reactUpgrade = getReactUpgradeDeps(process.cwd());\n if (reactUpgrade.length > 0) {\n const installCmd = detectPackageManager(process.cwd()).replace(/ -D$/, \"\");\n const [pm, ...pmArgs] = installCmd.split(\" \");\n console.log(\" Upgrading React for RSC compatibility...\");\n execFileSync(pm, [...pmArgs, ...reactUpgrade], { cwd: process.cwd(), stdio: \"inherit\" });\n }\n }\n\n if (isApp) {\n // App Router: use createBuilder for multi-environment RSC builds\n const config = buildViteConfig({}, logger);\n const builder = await vite.createBuilder(config);\n await builder.buildApp();\n } else {\n // Pages Router: client + SSR builds.\n // Use buildViteConfig() so that when a vite.config exists we don't\n // duplicate the vinext() plugin.\n console.log(\" Building client...\");\n await vite.build(\n buildViteConfig(\n {\n build: {\n outDir: \"dist/client\",\n manifest: true,\n ssrManifest: true,\n rollupOptions: {\n input: \"virtual:vinext-client-entry\",\n output: clientOutputConfig,\n treeshake: clientTreeshakeConfig,\n },\n },\n },\n logger,\n ),\n );\n\n console.log(\" Building server...\");\n await vite.build(\n buildViteConfig(\n {\n build: {\n outDir: \"dist/server\",\n ssr: \"virtual:vinext-server-entry\",\n rollupOptions: {\n output: {\n entryFileNames: \"entry.js\",\n },\n },\n },\n },\n logger,\n ),\n );\n }\n\n await printBuildReport({ root: process.cwd() });\n console.log(\"\\n Build complete. Run `vinext start` to start the production server.\\n\");\n}\n\nasync function start() {\n const parsed = parseArgs(rawArgs);\n if (parsed.help) return printHelp(\"start\");\n\n loadDotenv({\n root: process.cwd(),\n mode: \"production\",\n });\n\n const port = parsed.port ?? parseInt(process.env.PORT ?? \"3000\", 10);\n const host = parsed.hostname ?? \"0.0.0.0\";\n\n console.log(`\\n vinext start (port ${port})\\n`);\n\n const { startProdServer } = (await import(/* @vite-ignore */ \"./server/prod-server.js\")) as {\n startProdServer: (opts: { port: number; host: string; outDir: string }) => Promise<unknown>;\n };\n\n await startProdServer({\n port,\n host,\n outDir: path.resolve(process.cwd(), \"dist\"),\n });\n}\n\nasync function lint() {\n const parsed = parseArgs(rawArgs);\n if (parsed.help) return printHelp(\"lint\");\n\n console.log(`\\n vinext lint\\n`);\n\n // Try oxlint first (fast), fall back to eslint\n const cwd = process.cwd();\n const hasOxlint = fs.existsSync(path.join(cwd, \"node_modules\", \".bin\", \"oxlint\"));\n const hasEslint = fs.existsSync(path.join(cwd, \"node_modules\", \".bin\", \"eslint\"));\n\n // Check for next lint config (eslint-config-next)\n const hasNextLintConfig =\n fs.existsSync(path.join(cwd, \".eslintrc.json\")) ||\n fs.existsSync(path.join(cwd, \".eslintrc.js\")) ||\n fs.existsSync(path.join(cwd, \".eslintrc.cjs\")) ||\n fs.existsSync(path.join(cwd, \"eslint.config.js\")) ||\n fs.existsSync(path.join(cwd, \"eslint.config.mjs\"));\n\n try {\n if (hasEslint && hasNextLintConfig) {\n console.log(\" Using eslint (with existing config)\\n\");\n execFileSync(\"npx\", [\"eslint\", \".\"], { cwd, stdio: \"inherit\" });\n } else if (hasOxlint) {\n console.log(\" Using oxlint\\n\");\n execFileSync(\"npx\", [\"oxlint\", \".\"], { cwd, stdio: \"inherit\" });\n } else if (hasEslint) {\n console.log(\" Using eslint\\n\");\n execFileSync(\"npx\", [\"eslint\", \".\"], { cwd, stdio: \"inherit\" });\n } else {\n console.log(\n \" No linter found. Install eslint or oxlint:\\n\\n\" +\n \" \" +\n detectPackageManager(process.cwd()) +\n \" eslint eslint-config-next\\n\" +\n \" # or\\n\" +\n \" \" +\n detectPackageManager(process.cwd()) +\n \" oxlint\\n\",\n );\n process.exit(1);\n }\n console.log(\"\\n Lint passed.\\n\");\n } catch {\n process.exit(1);\n }\n}\n\nasync function deployCommand() {\n const parsed = parseDeployArgs(rawArgs);\n if (parsed.help) return printHelp(\"deploy\");\n\n await loadVite();\n console.log(`\\n vinext deploy (Vite ${getViteVersion()})\\n`);\n\n await runDeploy({\n root: process.cwd(),\n preview: parsed.preview,\n env: parsed.env,\n skipBuild: parsed.skipBuild,\n dryRun: parsed.dryRun,\n name: parsed.name,\n experimentalTPR: parsed.experimentalTPR,\n tprCoverage: parsed.tprCoverage,\n tprLimit: parsed.tprLimit,\n tprWindow: parsed.tprWindow,\n });\n}\n\nasync function check() {\n const parsed = parseArgs(rawArgs);\n if (parsed.help) return printHelp(\"check\");\n\n const root = process.cwd();\n console.log(`\\n vinext check\\n`);\n console.log(\" Scanning project...\\n\");\n\n const result = runCheck(root);\n console.log(formatReport(result));\n}\n\nasync function initCommand() {\n const parsed = parseArgs(rawArgs);\n if (parsed.help) return printHelp(\"init\");\n\n console.log(`\\n vinext init\\n`);\n\n // Parse init-specific flags\n const port = parsed.port ?? 3001;\n const skipCheck = rawArgs.includes(\"--skip-check\");\n const force = rawArgs.includes(\"--force\");\n\n await runInit({\n root: process.cwd(),\n port,\n skipCheck,\n force,\n });\n}\n\n// ─── Help ─────────────────────────────────────────────────────────────────────\n\nfunction printHelp(cmd?: string) {\n if (cmd === \"dev\") {\n console.log(`\n vinext dev - Start development server\n\n Usage: vinext dev [options]\n\n Options:\n -p, --port <port> Port to listen on (default: 3000)\n -H, --hostname <host> Hostname to bind to (default: localhost)\n --turbopack Accepted for compatibility (no-op, Vite is always used)\n -h, --help Show this help\n`);\n return;\n }\n\n if (cmd === \"build\") {\n console.log(`\n vinext build - Build for production\n\n Usage: vinext build [options]\n\n Automatically detects App Router (app/) or Pages Router (pages/) and\n runs the appropriate multi-environment build via Vite.\n\n Options:\n --verbose Show full Vite/Rollup build output (suppressed by default)\n -h, --help Show this help\n`);\n return;\n }\n\n if (cmd === \"start\") {\n console.log(`\n vinext start - Start production server\n\n Usage: vinext start [options]\n\n Serves the output from \\`vinext build\\`. Supports SSR, static files,\n compression, and all middleware.\n\n Options:\n -p, --port <port> Port to listen on (default: 3000, or PORT env)\n -H, --hostname <host> Hostname to bind to (default: 0.0.0.0)\n -h, --help Show this help\n`);\n return;\n }\n\n if (cmd === \"deploy\") {\n console.log(`\n vinext deploy - Deploy to Cloudflare Workers\n\n Usage: vinext deploy [options]\n\n One-command deployment to Cloudflare Workers. Automatically:\n - Detects App Router or Pages Router\n - Generates wrangler.jsonc, worker/index.ts, vite.config.ts if missing\n - Installs @cloudflare/vite-plugin and wrangler if needed\n - Builds the project with Vite\n - Deploys via wrangler\n\n Options:\n --preview Deploy to preview environment (same as --env preview)\n --env <name> Deploy using wrangler env.<name>\n --name <name> Custom Worker name (default: from package.json)\n --skip-build Skip the build step (use existing dist/)\n --dry-run Generate config files without building or deploying\n -h, --help Show this help\n\n Experimental:\n --experimental-tpr Enable Traffic-aware Pre-Rendering\n --tpr-coverage <pct> Traffic coverage target, 0–100 (default: 90)\n --tpr-limit <count> Hard cap on pages to pre-render (default: 1000)\n --tpr-window <hours> Analytics lookback window in hours (default: 24)\n\n TPR (Traffic-aware Pre-Rendering) uses Cloudflare zone analytics to determine\n which pages get the most traffic and pre-renders them into KV cache during\n deploy. This feature is experimental and must be explicitly enabled. Requires\n a custom domain (zone analytics are unavailable on *.workers.dev) and the\n CLOUDFLARE_API_TOKEN environment variable with Zone.Analytics read permission.\n\n Examples:\n vinext deploy Build and deploy to production\n vinext deploy --preview Deploy to a preview URL\n vinext deploy --env staging Deploy using wrangler env.staging\n vinext deploy --dry-run See what files would be generated\n vinext deploy --name my-app Deploy with a custom Worker name\n vinext deploy --experimental-tpr Enable TPR during deploy\n vinext deploy --experimental-tpr --tpr-coverage 95 Cover 95% of traffic\n vinext deploy --experimental-tpr --tpr-limit 500 Cap at 500 pages\n`);\n return;\n }\n\n if (cmd === \"check\") {\n console.log(`\n vinext check - Scan Next.js app for compatibility\n\n Usage: vinext check [options]\n\n Scans your Next.js project and produces a compatibility report showing\n which imports, config options, libraries, and conventions are supported,\n partially supported, or unsupported by vinext.\n\n Options:\n -h, --help Show this help\n`);\n return;\n }\n\n if (cmd === \"init\") {\n console.log(`\n vinext init - Migrate a Next.js project to run under vinext\n\n Usage: vinext init [options]\n\n One-command migration: installs dependencies, configures ESM,\n generates vite.config.ts, and adds npm scripts. Your Next.js\n setup continues to work alongside vinext.\n\n Options:\n -p, --port <port> Dev server port for the vinext script (default: 3001)\n --skip-check Skip the compatibility check step\n --force Overwrite existing vite.config.ts\n -h, --help Show this help\n\n Examples:\n vinext init Migrate with defaults\n vinext init -p 4000 Use port 4000 for dev:vinext\n vinext init --force Overwrite existing vite.config.ts\n vinext init --skip-check Skip the compatibility report\n`);\n return;\n }\n\n if (cmd === \"lint\") {\n console.log(`\n vinext lint - Run linter\n\n Usage: vinext lint [options]\n\n Delegates to your project's eslint (with eslint-config-next) or oxlint.\n If neither is installed, suggests how to add one.\n\n Options:\n -h, --help Show this help\n`);\n return;\n }\n\n console.log(`\n vinext v${VERSION} - Run Next.js apps on Vite\n\n Usage: vinext <command> [options]\n\n Commands:\n dev Start development server\n build Build for production\n start Start production server\n deploy Deploy to Cloudflare Workers\n init Migrate a Next.js project to vinext\n check Scan Next.js app for compatibility\n lint Run linter\n\n Options:\n -h, --help Show this help\n --version Show version\n\n Examples:\n vinext dev Start dev server on port 3000\n vinext dev -p 4000 Start dev server on port 4000\n vinext build Build for production\n vinext start Start production server\n vinext deploy Deploy to Cloudflare Workers\n vinext init Migrate a Next.js project\n vinext check Check compatibility\n vinext lint Run linter\n\n vinext is a drop-in replacement for the \\`next\\` CLI.\n No vite.config.ts needed — just run \\`vinext dev\\` in your Next.js project.\n`);\n}\n\n// ─── Entry ────────────────────────────────────────────────────────────────────\n\nif (command === \"--version\" || command === \"-v\") {\n console.log(`vinext v${VERSION}`);\n process.exit(0);\n}\n\nif (command === \"--help\" || command === \"-h\" || !command) {\n printHelp();\n if (!command) process.exit(0);\n process.exit(0);\n}\n\nswitch (command) {\n case \"dev\":\n dev().catch((e) => {\n console.error(e);\n process.exit(1);\n });\n break;\n\n case \"build\":\n buildApp().catch((e) => {\n console.error(e);\n process.exit(1);\n });\n break;\n\n case \"start\":\n start().catch((e) => {\n console.error(e);\n process.exit(1);\n });\n break;\n\n case \"deploy\":\n deployCommand().catch((e) => {\n console.error(e);\n process.exit(1);\n });\n break;\n\n case \"init\":\n initCommand().catch((e) => {\n console.error(e);\n process.exit(1);\n });\n break;\n\n case \"check\":\n check().catch((e) => {\n console.error(e);\n process.exit(1);\n });\n break;\n\n case \"lint\":\n lint().catch((e) => {\n console.error(e);\n process.exit(1);\n });\n break;\n\n default:\n console.error(`\\n Unknown command: ${command}\\n`);\n printHelp();\n process.exit(1);\n}\n"]}
|