{"version":3,"sources":["../../src/vercel-builder/index.ts"],"sourcesContent":["/**\n * Wexts Vercel Build Output API builder.\n *\n * Produces the `.vercel/output` tree (Build Output API v3) that Vercel\n * uses for deployment. This module is invoked by `wexts vercel-build`.\n *\n * Layout produced:\n *   .vercel/output/\n *     config.json           – { version: 3 }\n *     static/               – public / static assets copied here\n *     functions/\n *       index.func/\n *         index.js           – serverless entry point\n *         package.json       – { type: \"module\" } or cjs\n *         .vc-config.json    – Vercel function config\n *         ...copied runtime files\n */\n\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport { spawnSync } from 'child_process';\n\nexport interface VercelBuildOptions {\n    /** Project root (cwd). Defaults to process.cwd(). */\n    rootDir?: string;\n    /** Path to NestJS/API project for codegen. */\n    apiProjectPath?: string;\n    /** Output directory for generated RPC client. */\n    rpcOutputPath?: string;\n    /** Path to wexts.runtime.js config. */\n    runtimeConfigPath?: string;\n    /** Node.js runtime version for the Vercel function. */\n    nodeVersion?: string;\n    /** Max duration in seconds for the serverless function. */\n    maxDuration?: number;\n    /** Memory size in MB for the serverless function. */\n    memory?: number;\n    /** Regions to deploy to. */\n    regions?: string[];\n    /** Skip the RPC codegen step. */\n    skipCodegen?: boolean;\n    /** Skip the Next.js / project build step. */\n    skipBuild?: boolean;\n}\n\nexport interface VercelBuildResult {\n    outputDir: string;\n    configPath: string;\n    functionDir: string;\n    staticDir: string;\n    errors: string[];\n    warnings: string[];\n}\n\n/**\n * Build the `.vercel/output` directory from a Wexts project.\n */\nexport async function buildVercelOutput(\n    options: VercelBuildOptions = {},\n): Promise<VercelBuildResult> {\n    const rootDir = path.resolve(options.rootDir ?? process.cwd());\n    const outputDir = path.join(rootDir, '.vercel', 'output');\n    const staticDir = path.join(outputDir, 'static');\n    const functionDir = path.join(outputDir, 'functions', 'index.func');\n    const configPath = path.join(outputDir, 'config.json');\n    const errors: string[] = [];\n    const warnings: string[] = [];\n\n    // ── 0. Clean previous output ────────────────────────────────────────\n    if (fs.existsSync(outputDir)) {\n        fs.rmSync(outputDir, { recursive: true, force: true });\n    }\n\n    // ── 1. Run RPC codegen ──────────────────────────────────────────────\n    if (!options.skipCodegen) {\n        const apiDir = path.resolve(rootDir, options.apiProjectPath ?? 'apps/api');\n        const rpcOut = path.resolve(rootDir, options.rpcOutputPath ?? 'apps/web/lib/wexts');\n\n        if (fs.existsSync(apiDir)) {\n            console.log('🔧 Running RPC codegen...');\n            const result = spawnSync(\n                'npx',\n                ['wexts', 'generate', '-p', apiDir, '-o', rpcOut],\n                { cwd: rootDir, stdio: 'inherit', shell: process.platform === 'win32' },\n            );\n            if (result.status !== 0) {\n                errors.push('RPC codegen failed.');\n                return { outputDir, configPath, functionDir, staticDir, errors, warnings };\n            }\n        } else {\n            warnings.push(`API directory not found at ${apiDir}; skipping codegen.`);\n        }\n    }\n\n    // ── 2. Build the project ────────────────────────────────────────────\n    if (!options.skipBuild) {\n        console.log('🏗️  Building project...');\n        // Build API (TypeScript)\n        const apiDir = path.resolve(rootDir, options.apiProjectPath ?? 'apps/api');\n        if (fs.existsSync(path.join(apiDir, 'tsconfig.json'))) {\n            const tscResult = spawnSync('npx', ['tsc', '-p', path.join(apiDir, 'tsconfig.json')], {\n                cwd: rootDir,\n                stdio: 'inherit',\n                shell: process.platform === 'win32',\n            });\n            if (tscResult.status !== 0) {\n                errors.push('API TypeScript compilation failed.');\n                return { outputDir, configPath, functionDir, staticDir, errors, warnings };\n            }\n        }\n\n        // Build Next.js\n        const webDir = path.resolve(rootDir, 'apps/web');\n        if (fs.existsSync(webDir)) {\n            const nextResult = spawnSync('npx', ['next', 'build', webDir], {\n                cwd: rootDir,\n                stdio: 'inherit',\n                shell: process.platform === 'win32',\n                env: { ...process.env, NODE_ENV: 'production' },\n            });\n            if (nextResult.status !== 0) {\n                errors.push('Next.js build failed.');\n                return { outputDir, configPath, functionDir, staticDir, errors, warnings };\n            }\n        }\n    }\n\n    // ── 3. Create output structure ──────────────────────────────────────\n    console.log('📦 Creating .vercel/output...');\n    fs.mkdirSync(functionDir, { recursive: true });\n    fs.mkdirSync(staticDir, { recursive: true });\n\n    // ── 4. Write config.json ────────────────────────────────────────────\n    const config = { version: 3 as const };\n    fs.writeFileSync(configPath, JSON.stringify(config, null, 2));\n\n    // ── 5. Write .vc-config.json for the function ───────────────────────\n    const vcConfig = {\n        runtime: `nodejs${options.nodeVersion ?? '20'}.x`,\n        handler: 'index.js',\n        launcherType: 'Nodejs',\n        maxDuration: options.maxDuration ?? 30,\n        ...(options.memory ? { memory: options.memory } : {}),\n        ...(options.regions?.length ? { regions: options.regions } : {}),\n    };\n    fs.writeFileSync(\n        path.join(functionDir, '.vc-config.json'),\n        JSON.stringify(vcConfig, null, 2),\n    );\n\n    // ── 6. Copy runtime files into the function ─────────────────────────\n    const runtimeConfigSrc = path.resolve(\n        rootDir,\n        options.runtimeConfigPath ?? 'wexts.runtime.js',\n    );\n\n    // Copy API dist\n    const apiDistDir = path.resolve(rootDir, options.apiProjectPath ?? 'apps/api', 'dist');\n    if (fs.existsSync(apiDistDir)) {\n        const targetApiDist = path.join(functionDir, 'apps', 'api', 'dist');\n        fs.mkdirSync(path.dirname(targetApiDist), { recursive: true });\n        fs.cpSync(apiDistDir, targetApiDist, { recursive: true });\n    } else {\n        warnings.push('API dist not found; function may not have service implementations.');\n    }\n\n    // Copy RPC manifest\n    const manifestCandidates = [\n        path.resolve(rootDir, options.rpcOutputPath ?? 'apps/web/lib/wexts', 'wexts.rpc.manifest.json'),\n    ];\n    for (const manifestPath of manifestCandidates) {\n        if (fs.existsSync(manifestPath)) {\n            const relPath = path.relative(rootDir, manifestPath);\n            const dest = path.join(functionDir, relPath);\n            fs.mkdirSync(path.dirname(dest), { recursive: true });\n            fs.copyFileSync(manifestPath, dest);\n            break;\n        }\n    }\n\n    // Copy wexts.runtime.js (adjusted for Vercel paths)\n    if (fs.existsSync(runtimeConfigSrc)) {\n        fs.copyFileSync(runtimeConfigSrc, path.join(functionDir, 'wexts.runtime.js'));\n    } else {\n        warnings.push(`Runtime config not found at ${runtimeConfigSrc}.`);\n    }\n\n    // ── 7. Write serverless entry point ─────────────────────────────────\n    const entryJs = generateServerlessEntry();\n    fs.writeFileSync(path.join(functionDir, 'index.js'), entryJs);\n\n    // ── 8. Write package.json for the function (no workspace:* deps) ───\n    const funcPkg = generateFunctionPackageJson(rootDir);\n    fs.writeFileSync(\n        path.join(functionDir, 'package.json'),\n        JSON.stringify(funcPkg, null, 2),\n    );\n\n    // ── 9. Copy static assets ───────────────────────────────────────────\n    const publicDir = path.join(rootDir, 'apps/web/public');\n    if (fs.existsSync(publicDir)) {\n        fs.cpSync(publicDir, staticDir, { recursive: true });\n    }\n\n    // ── 10. Copy Next.js static output if standalone/export exists ──────\n    const nextStaticDir = path.join(rootDir, 'apps/web/.next/static');\n    if (fs.existsSync(nextStaticDir)) {\n        const dest = path.join(staticDir, '_next', 'static');\n        fs.mkdirSync(path.dirname(dest), { recursive: true });\n        fs.cpSync(nextStaticDir, dest, { recursive: true });\n    }\n\n    // ── 11. Validate the output ─────────────────────────────────────────\n    const validation = validateOutput(outputDir);\n    errors.push(...validation.errors);\n    warnings.push(...validation.warnings);\n\n    if (errors.length === 0) {\n        console.log('✅ Vercel Build Output created successfully.');\n        console.log(`   Output: ${outputDir}`);\n    } else {\n        console.error('❌ Vercel build completed with errors:');\n        for (const err of errors) {\n            console.error(`   • ${err}`);\n        }\n    }\n\n    return { outputDir, configPath, functionDir, staticDir, errors, warnings };\n}\n\n// ─── Helpers ──────────────────────────────────────────────────────────────\n\nfunction generateServerlessEntry(): string {\n    return `// Wexts serverless entry for Vercel\n// Auto-generated by wexts vercel-build — do not edit.\nconst path = require('path');\n\nlet handlerPromise;\n\nfunction getHandler() {\n    if (!handlerPromise) {\n        handlerPromise = (async () => {\n            const { createWextsHandler } = require('wexts/runtime');\n            const runtimeConfigPath = path.join(__dirname, 'wexts.runtime.js');\n            let runtimeConfig = {};\n            try {\n                runtimeConfig = require(runtimeConfigPath);\n                runtimeConfig = runtimeConfig.default || runtimeConfig;\n            } catch (_e) {\n                // No runtime config — use defaults\n            }\n            return createWextsHandler({\n                ...runtimeConfig,\n                dev: false,\n            });\n        })();\n    }\n    return handlerPromise;\n}\n\nmodule.exports = async (req, res) => {\n    const handler = await getHandler();\n    return handler(req, res);\n};\n`;\n}\n\nfunction generateFunctionPackageJson(rootDir: string): Record<string, unknown> {\n    const projectPkgPath = path.join(rootDir, 'package.json');\n    let projectPkg: Record<string, unknown> = {};\n    if (fs.existsSync(projectPkgPath)) {\n        projectPkg = JSON.parse(fs.readFileSync(projectPkgPath, 'utf8'));\n    }\n\n    // Collect dependencies but resolve workspace:* to real versions\n    const deps: Record<string, string> = {};\n    const rawDeps = (projectPkg.dependencies ?? {}) as Record<string, string>;\n    for (const [name, version] of Object.entries(rawDeps)) {\n        if (version.startsWith('workspace:')) {\n            // Resolve from the monorepo\n            const resolved = resolveWorkspaceDependencyVersion(rootDir, name);\n            if (resolved) {\n                deps[name] = resolved;\n            }\n            // Skip if not resolvable — it'll be caught by validation\n        } else {\n            deps[name] = version;\n        }\n    }\n\n    return {\n        name: 'wexts-vercel-function',\n        version: '0.0.0',\n        private: true,\n        main: 'index.js',\n        dependencies: deps,\n    };\n}\n\nfunction resolveWorkspaceDependencyVersion(rootDir: string, name: string): string | undefined {\n    // Walk common monorepo locations\n    const candidates = [\n        path.join(rootDir, 'packages', 'package.json'),                    // packages/ (the main wexts package)\n        path.join(rootDir, 'packages', name, 'package.json'),              // packages/<name>\n        path.join(rootDir, 'node_modules', name, 'package.json'),          // fallback\n    ];\n\n    for (const candidate of candidates) {\n        if (fs.existsSync(candidate)) {\n            try {\n                const pkg = JSON.parse(fs.readFileSync(candidate, 'utf8'));\n                if (pkg.name === name && pkg.version) {\n                    return `^${pkg.version}`;\n                }\n            } catch {\n                // ignore\n            }\n        }\n    }\n\n    return undefined;\n}\n\nexport interface ValidationResult {\n    errors: string[];\n    warnings: string[];\n}\n\nexport function validateOutput(outputDir: string): ValidationResult {\n    const errors: string[] = [];\n    const warnings: string[] = [];\n\n    const configPath = path.join(outputDir, 'config.json');\n    if (!fs.existsSync(configPath)) {\n        errors.push('Missing .vercel/output/config.json');\n    } else {\n        const config = JSON.parse(fs.readFileSync(configPath, 'utf8'));\n        if (config.version !== 3) {\n            errors.push(`config.json version must be 3, got ${config.version}`);\n        }\n    }\n\n    const funcDir = path.join(outputDir, 'functions', 'index.func');\n    if (!fs.existsSync(funcDir)) {\n        errors.push('Missing .vercel/output/functions/index.func');\n    } else {\n        if (!fs.existsSync(path.join(funcDir, 'index.js'))) {\n            errors.push('Missing index.js in function directory');\n        }\n        if (!fs.existsSync(path.join(funcDir, '.vc-config.json'))) {\n            errors.push('Missing .vc-config.json in function directory');\n        }\n        const funcPkgPath = path.join(funcDir, 'package.json');\n        if (!fs.existsSync(funcPkgPath)) {\n            errors.push('Missing package.json in function directory');\n        } else {\n            const funcPkgContent = fs.readFileSync(funcPkgPath, 'utf8');\n            if (funcPkgContent.includes('workspace:')) {\n                errors.push('Function package.json contains workspace:* protocol — not deployable.');\n            }\n        }\n    }\n\n    return { errors, warnings };\n}\n"],"mappings":"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","names":["fs","path","spawnSync","buildVercelOutput","options","rootDir","resolve","process","cwd","outputDir","join","staticDir","functionDir","configPath","errors","warnings","existsSync","fs","rmSync","recursive","force","skipCodegen","apiDir","apiProjectPath","rpcOut","rpcOutputPath","console","log","result","spawnSync","stdio","shell","platform","status","push","skipBuild","tscResult","webDir","nextResult","env","NODE_ENV","mkdirSync","config","version","writeFileSync","JSON","stringify","vcConfig","runtime","nodeVersion","handler","launcherType","maxDuration","memory","regions","length","runtimeConfigSrc","runtimeConfigPath","apiDistDir","targetApiDist","dirname","cpSync","manifestCandidates","manifestPath","relPath","relative","dest","copyFileSync","entryJs","generateServerlessEntry","funcPkg","generateFunctionPackageJson","publicDir","nextStaticDir","validation","validateOutput","error","err","projectPkgPath","projectPkg","parse","readFileSync","deps","rawDeps","dependencies","name","Object","entries","startsWith","resolved","resolveWorkspaceDependencyVersion","private","main","candidates","candidate","pkg","undefined","funcDir","funcPkgPath","funcPkgContent","includes"]}