{"version":3,"file":"netlify.cjs","names":[],"sources":["../../../src/adapters/netlify.ts"],"sourcesContent":["import { mkdir, rename, rm, stat, writeFile } from \"node:fs/promises\";\nimport { join, resolve } from \"node:path\";\nimport { build } from \"vite\";\nimport { scanRoutes } from \"../router/route-scanner.js\";\nimport type { Adapter } from \"./index.js\";\nimport { writeSsrEntry } from \"./shared.js\";\nimport { SERVERLESS_CAPABILITIES } from \"../runtime/capabilities.js\";\n\n/**\n * Netlify adapter for nix-js-kit.\n *\n * Produces the files expected by Netlify Functions v2:\n *   - `netlify/functions/__nix-js-kit.mjs` — bundled SSR function.\n *   - `netlify.toml` — redirects unmatched routes to the function.\n *\n * Run this after `nix-js-kit build`. The static files are left in `dist/` and\n * served directly by Netlify; the function only handles routes that have no\n * matching static file.\n */\nexport const netlifyAdapter: Adapter = {\n  name: \"netlify\",\n  capabilities: SERVERLESS_CAPABILITIES,\n\n  async build(options) {\n    const root = resolve(options.root);\n    const outDir = resolve(root, options.outDir);\n    const netlifyDir = resolve(root, \"netlify\");\n    const functionsDir = join(netlifyDir, \"functions\");\n    const generatedDir = resolve(root, \".nix-js\");\n\n    // Verify the production build exists.\n    try {\n      await stat(outDir);\n    } catch {\n      throw new Error(\n        `Output directory not found: ${outDir}. Run \"nix-js-kit build\" first.`,\n      );\n    }\n\n    // Clean previous adapter output.\n    await rm(functionsDir, { recursive: true, force: true });\n    await mkdir(functionsDir, { recursive: true });\n    await mkdir(generatedDir, { recursive: true });\n\n    // Scan routes and generate a self-contained function entry.\n    const appDir = resolve(root, options.appDir);\n    const routes = await scanRoutes(appDir);\n\n    const entryPath = resolve(generatedDir, \"netlify-index.ts\");\n    await writeSsrEntry(entryPath, routes, options);\n\n    // Bundle the function entry.\n    await build({\n      configFile: false,\n      root,\n      build: {\n        outDir: functionsDir,\n        emptyOutDir: true,\n        ssr: true,\n        lib: {\n          entry: entryPath,\n          formats: [\"es\"],\n          fileName: () => \"__nix-js-kit.mjs\",\n        },\n        rollupOptions: {\n          external: [],\n          output: {\n            inlineDynamicImports: true,\n          },\n        },\n      },\n    });\n\n    // Vite SSR lib builds may use the entry file name, so force the expected handler name.\n    const generatedHandler = join(functionsDir, \"netlify-index.js\");\n    const targetHandler = join(functionsDir, \"__nix-js-kit.mjs\");\n    try {\n      await stat(generatedHandler);\n      await rename(generatedHandler, targetHandler);\n    } catch {\n      // If the file is already named __nix-js-kit.mjs, nothing to do.\n    }\n\n    // Write Netlify redirects config.\n    await writeFile(\n      join(root, \"netlify.toml\"),\n      `[build]\n  command = \"nix-js-kit build\"\n  publish = \"dist\"\n\n[[redirects]]\n  from = \"/*\"\n  to = \"/.netlify/functions/__nix-js-kit\"\n  status = 200\n`,\n      \"utf8\",\n    );\n  },\n};\n"],"mappings":"6QAmBA,IAAa,EAA0B,CACrC,KAAM,UACN,aAAc,EAAA,EAEd,MAAM,MAAM,EAAS,CACnB,IAAM,GAAA,EAAO,EAAA,QAAA,CAAQ,EAAQ,IAAI,EAC3B,GAAA,EAAS,EAAA,QAAA,CAAQ,EAAM,EAAQ,MAAM,EACrC,GAAA,EAAa,EAAA,QAAA,CAAQ,EAAM,SAAS,EACpC,GAAA,EAAe,EAAA,KAAA,CAAK,EAAY,WAAW,EAC3C,GAAA,EAAe,EAAA,QAAA,CAAQ,EAAM,SAAS,EAG5C,GAAI,CACF,MAAA,EAAM,EAAA,KAAA,CAAK,CAAM,CACnB,MAAQ,CACN,MAAU,MACR,+BAA+B,EAAO,gCACxC,CACF,CAGA,MAAA,EAAM,EAAA,GAAA,CAAG,EAAc,CAAE,UAAW,GAAM,MAAO,EAAK,CAAC,EACvD,MAAA,EAAM,EAAA,MAAA,CAAM,EAAc,CAAE,UAAW,EAAK,CAAC,EAC7C,MAAA,EAAM,EAAA,MAAA,CAAM,EAAc,CAAE,UAAW,EAAK,CAAC,EAG7C,IAAM,GAAA,EAAS,EAAA,QAAA,CAAQ,EAAM,EAAQ,MAAM,EACrC,EAAS,MAAM,EAAA,EAAW,CAAM,EAEhC,GAAA,EAAY,EAAA,QAAA,CAAQ,EAAc,kBAAkB,EAC1D,MAAM,EAAA,EAAc,EAAW,EAAQ,CAAO,EAG9C,MAAA,EAAM,EAAA,MAAA,CAAM,CACV,WAAY,GACZ,OACA,MAAO,CACL,OAAQ,EACR,YAAa,GACb,IAAK,GACL,IAAK,CACH,MAAO,EACP,QAAS,CAAC,IAAI,EACd,aAAgB,kBAClB,EACA,cAAe,CACb,SAAU,CAAC,EACX,OAAQ,CACN,qBAAsB,EACxB,CACF,CACF,CACF,CAAC,EAGD,IAAM,GAAA,EAAmB,EAAA,KAAA,CAAK,EAAc,kBAAkB,EACxD,GAAA,EAAgB,EAAA,KAAA,CAAK,EAAc,kBAAkB,EAC3D,GAAI,CACF,MAAA,EAAM,EAAA,KAAA,CAAK,CAAgB,EAC3B,MAAA,EAAM,EAAA,OAAA,CAAO,EAAkB,CAAa,CAC9C,MAAQ,CAER,CAGA,MAAA,EAAM,EAAA,UAAA,EAAA,EACJ,EAAA,KAAA,CAAK,EAAM,cAAc,EACzB;;;;;;;;EASA,MACF,CACF,CACF"}