From 3d2e8dc9861a30aef88c9c9d3ab5d3a6f5f7bfc4 Mon Sep 17 00:00:00 2001 From: techmannih Date: Mon, 13 Jan 2025 13:52:01 +0530 Subject: [PATCH 1/4] add generate-types --- package-lock.json | 4 ++-- package.json | 4 +++- src/generate-type.ts | 46 ++++++++++++++++++++++++++++++++++++++++++++ src/types.d.ts | 5 +++++ 4 files changed, 56 insertions(+), 3 deletions(-) create mode 100644 src/generate-type.ts create mode 100644 src/types.d.ts diff --git a/package-lock.json b/package-lock.json index 5576584..bb80d00 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "pgstrap", - "version": "1.0.3", + "version": "1.0.5", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "pgstrap", - "version": "1.0.3", + "version": "1.0.5", "license": "MIT", "dependencies": { "@electric-sql/pglite": "^0.2.10", diff --git a/package.json b/package.json index e41d51f..2dfb9dc 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,9 @@ "main": "dist/index.cjs", "scripts": { "test": "npm run build && ava", - "build": "tsup ./src/index.ts ./src/cli.ts --outDir ./dist --dts --sourcemap inline" + "build": "tsup ./src/index.ts ./src/cli.ts --outDir ./dist --dts --sourcemap inline", + "generate-types": "bun run ./src/generate-type.js", + "db:generate": "bun run generate-types" }, "bin": { "pgstrap": "./dist/cli.cjs" diff --git a/src/generate-type.ts b/src/generate-type.ts new file mode 100644 index 0000000..3eb22de --- /dev/null +++ b/src/generate-type.ts @@ -0,0 +1,46 @@ +const { PGlite } = require('@electric-sql/pglite'); +import { writeFile } from 'fs/promises'; // Use async version of fs + +async function generateTypes() { + // Initialize pg-lite with an in-memory SQLite database + const dbClient = new PGlite({ + database: ':memory:', // Using an in-memory database + }); + + // Create the table (replace with your actual table schema) + await dbClient.query(` + CREATE TABLE your_table_name ( + column1 TEXT, + column2 INTEGER + ); + `); + + // Insert some example data (optional) + await dbClient.query(` + INSERT INTO your_table_name (column1, column2) + VALUES ('Sample data', 42); + `); + + // Query schema (adjust according to your table structure) + const schema = await dbClient.query('SELECT * FROM your_table_name LIMIT 1'); + console.log('Fetched schema:', schema); + + // Generate TypeScript types based on the schema + const types = `// Generated Types +type YourTable = { + column1: string; + column2: number; +};`; + + try { + // Write the generated types to a file (types.d.ts) + await writeFile('./src/types.d.ts', types); + console.log('Types generated and saved to types.d.ts'); + } catch (err) { + console.error('Error writing to file:', err); + } +} + +generateTypes().catch(err => { + console.error('Error generating types:', err); +}); diff --git a/src/types.d.ts b/src/types.d.ts new file mode 100644 index 0000000..0c393dd --- /dev/null +++ b/src/types.d.ts @@ -0,0 +1,5 @@ +// Generated Types +type YourTable = { + column1: string; + column2: number; +}; \ No newline at end of file From 98fe6a9ee71d2385ac276e33de5a8c5983904b01 Mon Sep 17 00:00:00 2001 From: techmannih Date: Mon, 13 Jan 2025 13:58:59 +0530 Subject: [PATCH 2/4] add type --- src/generate-type.ts | 16 ++++++++-------- src/types.d.ts | 4 ++-- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/generate-type.ts b/src/generate-type.ts index 3eb22de..85a4a36 100644 --- a/src/generate-type.ts +++ b/src/generate-type.ts @@ -9,27 +9,27 @@ async function generateTypes() { // Create the table (replace with your actual table schema) await dbClient.query(` - CREATE TABLE your_table_name ( - column1 TEXT, - column2 INTEGER + CREATE TABLE student ( + name TEXT, + rollno INTEGER ); `); // Insert some example data (optional) await dbClient.query(` - INSERT INTO your_table_name (column1, column2) - VALUES ('Sample data', 42); + INSERT INTO student (name, rollno) + VALUES ('seve', 42); `); // Query schema (adjust according to your table structure) - const schema = await dbClient.query('SELECT * FROM your_table_name LIMIT 1'); + const schema = await dbClient.query('SELECT * FROM student LIMIT 1'); console.log('Fetched schema:', schema); // Generate TypeScript types based on the schema const types = `// Generated Types type YourTable = { - column1: string; - column2: number; + name: string; + rollno: number; };`; try { diff --git a/src/types.d.ts b/src/types.d.ts index 0c393dd..87da22c 100644 --- a/src/types.d.ts +++ b/src/types.d.ts @@ -1,5 +1,5 @@ // Generated Types type YourTable = { - column1: string; - column2: number; + name: string; + rollno: number; }; \ No newline at end of file From eb4f0d09e53c44873596a5571b99708030ef9b6c Mon Sep 17 00:00:00 2001 From: techmannih Date: Mon, 13 Jan 2025 14:01:16 +0530 Subject: [PATCH 3/4] Revert package-lock.json to the previous state --- package-lock.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index bb80d00..5576584 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "pgstrap", - "version": "1.0.5", + "version": "1.0.3", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "pgstrap", - "version": "1.0.5", + "version": "1.0.3", "license": "MIT", "dependencies": { "@electric-sql/pglite": "^0.2.10", From 371cfa7d67335fffdb2e508b015d2ce9d2b5aa91 Mon Sep 17 00:00:00 2001 From: techmannih Date: Sat, 8 Feb 2025 00:34:42 +0530 Subject: [PATCH 4/4] generate type --- package.json | 3 +-- src/generate-type.ts | 46 ------------------------------------------ src/generate.ts | 48 ++++++++++++++++++++++++++------------------ src/types.d.ts | 5 ----- 4 files changed, 30 insertions(+), 72 deletions(-) delete mode 100644 src/generate-type.ts delete mode 100644 src/types.d.ts diff --git a/package.json b/package.json index 2dfb9dc..45939e8 100644 --- a/package.json +++ b/package.json @@ -8,8 +8,7 @@ "scripts": { "test": "npm run build && ava", "build": "tsup ./src/index.ts ./src/cli.ts --outDir ./dist --dts --sourcemap inline", - "generate-types": "bun run ./src/generate-type.js", - "db:generate": "bun run generate-types" + "db:generate": "bun run ./src/generate.ts" }, "bin": { "pgstrap": "./dist/cli.cjs" diff --git a/src/generate-type.ts b/src/generate-type.ts deleted file mode 100644 index 85a4a36..0000000 --- a/src/generate-type.ts +++ /dev/null @@ -1,46 +0,0 @@ -const { PGlite } = require('@electric-sql/pglite'); -import { writeFile } from 'fs/promises'; // Use async version of fs - -async function generateTypes() { - // Initialize pg-lite with an in-memory SQLite database - const dbClient = new PGlite({ - database: ':memory:', // Using an in-memory database - }); - - // Create the table (replace with your actual table schema) - await dbClient.query(` - CREATE TABLE student ( - name TEXT, - rollno INTEGER - ); - `); - - // Insert some example data (optional) - await dbClient.query(` - INSERT INTO student (name, rollno) - VALUES ('seve', 42); - `); - - // Query schema (adjust according to your table structure) - const schema = await dbClient.query('SELECT * FROM student LIMIT 1'); - console.log('Fetched schema:', schema); - - // Generate TypeScript types based on the schema - const types = `// Generated Types -type YourTable = { - name: string; - rollno: number; -};`; - - try { - // Write the generated types to a file (types.d.ts) - await writeFile('./src/types.d.ts', types); - console.log('Types generated and saved to types.d.ts'); - } catch (err) { - console.error('Error writing to file:', err); - } -} - -generateTypes().catch(err => { - console.error('Error generating types:', err); -}); diff --git a/src/generate.ts b/src/generate.ts index 59fb29e..2f8491f 100644 --- a/src/generate.ts +++ b/src/generate.ts @@ -1,27 +1,35 @@ -import * as zg from "zapatos/generate" -import { - getConnectionStringFromEnv, - getPgConnectionFromEnv, -} from "pg-connection-from-env" -import { Context } from "./get-project-context" -import { dumpTree } from "pg-schema-dump" -import path from "path" +import * as zg from "zapatos/generate"; +import { Context } from "./get-project-context"; +import { dumpTree } from "pg-schema-dump"; +import path from "path"; +import { PGlite } from "@electric-sql/pglite"; + +class MockClient { + constructor(private pglite: PGlite) {} + + async query(sql: string, params?: any[]) { + return this.pglite.query(sql, params); + } + + async connect() {} + + async end() { + await this.pglite.close(); + } +} export const generate = async ({ schemas, defaultDatabase, dbDir, }: Pick) => { - dbDir = dbDir ?? "./src/db" + dbDir = dbDir ?? "./src/db"; + + const pglite = new PGlite({ database: ":memory:" }); + const client = new MockClient(pglite); await zg.generate({ - db: { - connectionString: getConnectionStringFromEnv({ - fallbackDefaults: { - database: defaultDatabase, - }, - }), - }, + db: client as any, schemas: Object.fromEntries( schemas.map((s) => [ s, @@ -32,11 +40,13 @@ export const generate = async ({ ]) ), outDir: dbDir, - }) + }); await dumpTree({ targetDir: path.join(dbDir, "structure"), defaultDatabase, schemas, - }) -} + }); + + await client.end(); +}; diff --git a/src/types.d.ts b/src/types.d.ts deleted file mode 100644 index 87da22c..0000000 --- a/src/types.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -// Generated Types -type YourTable = { - name: string; - rollno: number; -}; \ No newline at end of file