// Bündelt den Katalog-Seed (src/db/seed/index.ts inkl. Seed-Daten + Drizzle- // Schema) zu einer einzigen, selbstständigen ESM-Datei docker/seed.mjs für das // Laufzeit-Image — analog zu docker/migrate.mjs, aber generiert statt handgepflegt. // // Hintergrund: Der Standalone-Runner enthält weder `tsx` noch `src/`. Damit // RUN_SEED=true im Entrypoint tatsächlich funktioniert (statt still no-op zu // werden), bündeln wir die Seed-Logik beim Build zu Plain-ESM. `pg` und // `drizzle-orm` bleiben extern (sind im Runner als node_modules vorhanden); // alles andere (Schema, Seed-Daten, Upserts) wird inline gebündelt, sodass // keine `src/`-Dateien ins Runner-Image müssen. // // Aufruf: node scripts/build-seed-bundle.mjs (läuft im builder-Stage). import { build } from "esbuild"; import { fileURLToPath } from "node:url"; import { dirname, resolve } from "node:path"; const here = dirname(fileURLToPath(import.meta.url)); const root = resolve(here, ".."); await build({ entryPoints: [resolve(root, "src/db/seed/index.ts")], outfile: resolve(root, "docker/seed.mjs"), bundle: true, platform: "node", format: "esm", target: "node22", // Im Runner vorhandene (und im Dockerfile kopierte) Laufzeit-Pakete bleiben // extern, damit wir keine zwei Kopien bündeln und die native pg-Kette nutzen. external: ["pg", "drizzle-orm", "drizzle-orm/*"], // src/db/seed/index.ts importiert ../../lib/audit.js NUR als `import type` // (Tx); damit zieht esbuild die @/db-Kette (next-auth etc.) nicht in den // Bundle. Die folgende alias-freie Auflösung reicht deshalb aus. logLevel: "info", }); console.log("docker/seed.mjs gebündelt.");