diff --git a/README.md b/README.md index 20e3127..dddb1f3 100644 --- a/README.md +++ b/README.md @@ -44,7 +44,7 @@ npm install pgstrap --save-dev npm run db:migrate ``` -6. Generate types and structure: +6. Generate types and structure without starting a separate PostgreSQL server: ```bash npm run db:generate ``` @@ -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` - Run migrations against in-memory PGlite and generate types and structure dumps. Use `pgstrap generate --no-pglite` to use an externally running PostgreSQL database instead. - `npm run db:create-migration` - Create a new migration file ### Configuration @@ -96,7 +96,7 @@ export async function up(pgm: MigrationBuilder): Promise { } export async function down(pgm: MigrationBuilder): Promise { - // Code to revert your migration (optional) + // Code to revert the migration (optional) } ``` @@ -116,7 +116,6 @@ export async function up(pgm: MigrationBuilder): Promise { default: pgm.func("current_timestamp"), }, }) - pgm.createIndex("users", "username") } @@ -142,4 +141,4 @@ This project is licensed under the MIT License - see the [LICENSE](LICENSE) file If you encounter any issues or have questions, please file an issue on the [GitHub repository](https://github.com/seveibar/pgstrap/issues). -Happy coding with pgstrap! 🚀 +Happy coding with pgstrap! diff --git a/src/cli.ts b/src/cli.ts index 9a9bdec..ea47171 100644 --- a/src/cli.ts +++ b/src/cli.ts @@ -35,10 +35,17 @@ 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", + describe: + "run migrations in an in-memory PGlite database (enabled by default; use --no-pglite for an external Postgres database)", + }) }, async (argv) => { - generate({ ...(await getProjectContext()), pglite: !!argv.pglite }) + generate({ + ...(await getProjectContext()), + pglite: argv.pglite as boolean | undefined, + }) }, ) .parse() diff --git a/src/generate.ts b/src/generate.ts index f337094..be9bfd1 100644 --- a/src/generate.ts +++ b/src/generate.ts @@ -8,11 +8,13 @@ import { dumpTree } from "pg-schema-dump" import path from "path" import { migrate } from "./migrate" +export const shouldUsePglite = (pglite?: boolean) => pglite !== false + export const generate = async ({ schemas, defaultDatabase, dbDir, - pglite = false, + pglite, migrationsDir, }: Pick & { pglite?: boolean @@ -21,7 +23,7 @@ export const generate = async ({ dbDir = dbDir ?? "./src/db" migrationsDir = migrationsDir ?? path.join(dbDir, "migrations") - if (pglite) { + if (shouldUsePglite(pglite)) { const { PGlite } = await import("@electric-sql/pglite") const { fromNodeSocket } = await import("pg-gateway/node") const net = await import("node:net") diff --git a/tests/generate-mode.test.ts b/tests/generate-mode.test.ts new file mode 100644 index 0000000..5dd0073 --- /dev/null +++ b/tests/generate-mode.test.ts @@ -0,0 +1,8 @@ +import { expect, test } from "bun:test" +import { shouldUsePglite } from "../src/generate" + +test("type generation uses PGlite unless external Postgres is explicitly requested", () => { + expect(shouldUsePglite()).toBe(true) + expect(shouldUsePglite(true)).toBe(true) + expect(shouldUsePglite(false)).toBe(false) +})