diff --git a/README.md b/README.md index 20e3127..1cdd990 100644 --- a/README.md +++ b/README.md @@ -55,7 +55,7 @@ npm install pgstrap --save-dev - `npm run db:migrate` - Run pending migrations - `npm run db:reset` - Drop and recreate the database, then run all migrations -- `npm run db:generate` - Generate types and structure dumps. Use `pgstrap generate --pglite` to run migrations against an in-memory PGlite instance. +- `npm run db:generate` - Generate types and structure dumps. By default this runs migrations against an in-memory PGlite instance, so no running postgres is required. Use `pgstrap generate --no-pglite` to generate against a real postgres database from your environment instead. - `npm run db:create-migration` - Create a new migration file ### Configuration diff --git a/src/cli.ts b/src/cli.ts index 9a9bdec..68f5baf 100644 --- a/src/cli.ts +++ b/src/cli.ts @@ -35,7 +35,7 @@ import { getProjectContext } from "./get-project-context" "generate", "generate types and sql documentation from database", (yargs) => { - yargs.option("pglite", { type: "boolean", default: false }) + yargs.option("pglite", { type: "boolean", default: true }) }, async (argv) => { generate({ ...(await getProjectContext()), pglite: !!argv.pglite }) diff --git a/src/generate.ts b/src/generate.ts index f337094..09294e8 100644 --- a/src/generate.ts +++ b/src/generate.ts @@ -12,7 +12,7 @@ export const generate = async ({ schemas, defaultDatabase, dbDir, - pglite = false, + pglite = true, migrationsDir, }: Pick & { pglite?: boolean diff --git a/tests/generate.default.test.ts b/tests/generate.default.test.ts new file mode 100644 index 0000000..66e7c6c --- /dev/null +++ b/tests/generate.default.test.ts @@ -0,0 +1,48 @@ +import { test, expect } from "bun:test" +import fs from "fs" +import os from "os" +import path from "path" +import { generate } from "../src/generate" + +const migrationFile = ` +exports.up = async (pgm) => { + pgm.createTable('foo', { id: 'id' }) +} +exports.down = async (pgm) => { + pgm.dropTable('foo') +} +` + +test("generate defaults to pglite so no running postgres is required", async () => { + const tmp = fs.mkdtempSync( + path.join(os.tmpdir(), "pgstrap-generate-default-"), + ) + const migrationsDir = path.join(tmp, "migrations") + fs.mkdirSync(migrationsDir, { recursive: true }) + fs.writeFileSync( + path.join(migrationsDir, "001_create_table.js"), + migrationFile, + ) + + await generate({ + schemas: ["public"], + defaultDatabase: "postgres", + dbDir: path.join(tmp, "db"), + migrationsDir, + }) + + const zapatosFile = path.join(tmp, "db", "zapatos", "schema.d.ts") + const structureDir = path.join( + tmp, + "db", + "structure", + "public", + "tables", + "foo", + ) + + expect(fs.existsSync(zapatosFile)).toBe(true) + expect(fs.existsSync(path.join(structureDir, "table.sql"))).toBe(true) + + fs.rmSync(tmp, { recursive: true, force: true }) +})