driftsql 2.0.1-beta → 2.0.5-beta
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli/index.js +1 -1
- package/dist/index.d.ts +22 -14
- package/dist/index.js +6 -50
- package/package.json +2 -1
package/dist/cli/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import{a as e,i as t,n,o as r,r as i,t as a}from"./postgres-9C7eE0wB.js";import"./type-generator-Ba8bgnMm.js";import{Command as o}from"commander";import s from"consola";import c from"node:fs/promises";import l from"node:path";import"chalk";import"postgres";import"@neondatabase/serverless";import"
|
|
2
|
+
import{a as e,i as t,n,o as r,r as i,t as a}from"./postgres-9C7eE0wB.js";import"./type-generator-Ba8bgnMm.js";import{Command as o}from"commander";import s from"consola";import c from"node:fs/promises";import l from"node:path";import"chalk";import"postgres";import"@neondatabase/serverless";import"@libsql/client";var u=e({MySQLGenerator:()=>d}),d,f=t((()=>{d=class{generateCreateTable(e){let t=[];t.push(`CREATE TABLE \`${e.name}\` (`);let n=[];for(let t of e.columns)n.push(` `+this.generateColumnDefinition(t));if(e.primaryKey&&e.primaryKey.length>0){let t=e.primaryKey.map(e=>`\`${e}\``).join(`, `);n.push(` PRIMARY KEY (${t})`)}if(e.checks&&e.checks.length>0)for(let t of e.checks)n.push(` CONSTRAINT \`${t.name}\` CHECK (${t.expression})`);t.push(n.join(`,
|
|
3
3
|
`)),t.push(`) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;`);let r=[t.join(`
|
|
4
4
|
`)];if(e.indexes&&e.indexes.length>0)for(let t of e.indexes)r.push(this.generateIndex(e.name,t));return r.join(`
|
|
5
5
|
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { PoolConfig } from "@neondatabase/serverless";
|
|
2
|
+
import { Config } from "@libsql/client";
|
|
2
3
|
|
|
3
4
|
//#region src/types.d.ts
|
|
4
5
|
interface QueryResult<T = any> {
|
|
@@ -89,14 +90,9 @@ declare class NeonDriver implements DatabaseDriver {
|
|
|
89
90
|
close(): Promise<void>;
|
|
90
91
|
}
|
|
91
92
|
//#endregion
|
|
92
|
-
//#region src/drivers/
|
|
93
|
-
interface
|
|
94
|
-
|
|
95
|
-
url?: string;
|
|
96
|
-
adapter?: 'postgres' | 'mysql' | 'sqlite';
|
|
97
|
-
[key: string]: any;
|
|
98
|
-
}
|
|
99
|
-
declare class BunSQLDriver implements DatabaseDriver {
|
|
93
|
+
//#region src/drivers/sqlite.d.ts
|
|
94
|
+
interface SqliteDriverConfig extends Config {}
|
|
95
|
+
declare class SqliteDriver implements DatabaseDriver {
|
|
100
96
|
private client;
|
|
101
97
|
findFirst?: (table: string, where?: Record<string, any>) => Promise<QueryResult<any> | null>;
|
|
102
98
|
findMany?: (table: string, options?: {
|
|
@@ -107,7 +103,7 @@ declare class BunSQLDriver implements DatabaseDriver {
|
|
|
107
103
|
insert?: (table: string, data: Record<string, any>) => Promise<QueryResult<any>>;
|
|
108
104
|
update?: (table: string, data: Record<string, any>, where: Record<string, any>) => Promise<QueryResult<any>>;
|
|
109
105
|
delete?: (table: string, where: Record<string, any>) => Promise<number>;
|
|
110
|
-
constructor(config:
|
|
106
|
+
constructor(config: SqliteDriverConfig);
|
|
111
107
|
query<T = any>(sql: string, params?: any[]): Promise<QueryResult<T>>;
|
|
112
108
|
close(): Promise<void>;
|
|
113
109
|
}
|
|
@@ -380,16 +376,28 @@ declare class SQLClient<DT = any> {
|
|
|
380
376
|
query<T = any>(sql: string, params?: any[]): Promise<QueryResult<T>>;
|
|
381
377
|
transaction<T>(callback: (client: SQLClient<DT>) => Promise<T>): Promise<T>;
|
|
382
378
|
prepare(sql: string): Promise<PreparedStatement>;
|
|
383
|
-
findFirst<K extends keyof DT>(table: K,
|
|
379
|
+
findFirst<K extends keyof DT>(table: K, options?: {
|
|
380
|
+
where?: Partial<DT[K]>;
|
|
381
|
+
}): Promise<DT[K] | null>;
|
|
384
382
|
findMany<K extends keyof DT>(table: K, options?: {
|
|
385
383
|
where?: Partial<DT[K]>;
|
|
386
384
|
limit?: number;
|
|
387
385
|
offset?: number;
|
|
388
386
|
}): Promise<DT[K][]>;
|
|
389
|
-
insert<K extends keyof DT>(table: K,
|
|
390
|
-
|
|
391
|
-
|
|
387
|
+
insert<K extends keyof DT>(table: K, options: {
|
|
388
|
+
data: Partial<DT[K]>;
|
|
389
|
+
}): Promise<DT[K]>;
|
|
390
|
+
update<K extends keyof DT>(table: K, options: {
|
|
391
|
+
data: Partial<DT[K]>;
|
|
392
|
+
where: Partial<DT[K]>;
|
|
393
|
+
}): Promise<DT[K] | null>;
|
|
394
|
+
delete<K extends keyof DT>(table: K, options: {
|
|
395
|
+
where: Partial<DT[K]>;
|
|
396
|
+
}): Promise<number>;
|
|
392
397
|
getDriver(): DatabaseDriver;
|
|
398
|
+
/**
|
|
399
|
+
* @deprecated This method is deprecated since v2, use the cli command instead 'driftsql inspect'
|
|
400
|
+
*/
|
|
393
401
|
inspectDB(options?: InspectOptions): Promise<void>;
|
|
394
402
|
supportsTransactions(): boolean;
|
|
395
403
|
supportsPreparedStatements(): boolean;
|
|
@@ -402,4 +410,4 @@ declare class SQLClient<DT = any> {
|
|
|
402
410
|
}
|
|
403
411
|
declare const DriftSQLClient: typeof SQLClient;
|
|
404
412
|
//#endregion
|
|
405
|
-
export {
|
|
413
|
+
export { ClientOptions, Column, ColumnDefinition, ColumnType, type ConnectionError, type DatabaseDriver, DriftSQLClient, IndexDefinition, Migration, MigrationBuilder, MigrationRunner, MySQLGenerator, MySQLHelpers, NeonDriver, PostgresDriver, PostgresGenerator, PostgresHelpers, type QueryError, type QueryField, type QueryResult, SQLClient, SQLDialect, SQLiteGenerator, SQLiteHelpers, SchemaChange, SchemaDiffer, SchemaSnapshot, SnapshotManager, SqliteDriver, Table, TableDefinition, TypeGenerator, bigint, bigserial, boolean, bytea, char, createMigration, createMySQLHelpers, createPostgresHelpers, createSQLiteHelpers, createTable, date, decimal, detectChanges, doublePrecision, generateMigrationFromChanges, generateTypesFromSchema, integer, json, jsonb, numeric, real, serial, smallint, text, time, timestamp, timestamptz, uuid, varchar };
|
package/dist/index.js
CHANGED
|
@@ -1,69 +1,25 @@
|
|
|
1
|
-
import e from"consola";import
|
|
2
|
-
FROM information_schema.tables
|
|
3
|
-
WHERE TABLE_SCHEMA = ?
|
|
4
|
-
AND TABLE_TYPE = 'BASE TABLE'
|
|
5
|
-
ORDER BY TABLE_NAME`,i=t}else if(o===`postgres`||o===`neon`)r=`SELECT table_name
|
|
6
|
-
FROM information_schema.tables
|
|
7
|
-
WHERE table_schema = $1
|
|
8
|
-
AND table_type = 'BASE TABLE'
|
|
9
|
-
ORDER BY table_name`,i=`public`;else if(o===`libsql`||o===`sqlite`||o===`sqlitecloud`)r=`SELECT name as table_name
|
|
10
|
-
FROM sqlite_master
|
|
11
|
-
WHERE type = 'table'
|
|
12
|
-
ORDER BY name`,i=void 0;else throw Error(`Unsupported driver type: ${o}`);let l=await v(y(()=>s.query(r,i?[i]:[])),3e4);e.info(`Tables in the database:`,l.rows.map(e=>e.table_name).join(`, `));let u=0,d=l.rows.length;for(let n of l.rows){let r=n.table_name;if(!(r.startsWith(`sqlite_sequence`)||r.startsWith(`_prisma_migrations`))){u++,e.info(`[${u}/${d}] Inspecting table: ${r}`);try{let n,a;o===`mysql`?(n=`
|
|
13
|
-
SELECT
|
|
14
|
-
COLUMN_NAME as column_name,
|
|
15
|
-
DATA_TYPE as data_type,
|
|
16
|
-
IS_NULLABLE as is_nullable,
|
|
17
|
-
COLUMN_DEFAULT as column_default
|
|
18
|
-
FROM information_schema.columns
|
|
19
|
-
WHERE TABLE_NAME = ?
|
|
20
|
-
AND TABLE_SCHEMA = ?
|
|
21
|
-
ORDER BY ORDINAL_POSITION
|
|
22
|
-
`,a=[r,i]):o===`postgres`||o===`neon`?(n=`
|
|
23
|
-
SELECT
|
|
24
|
-
column_name,
|
|
25
|
-
data_type,
|
|
26
|
-
is_nullable,
|
|
27
|
-
column_default
|
|
28
|
-
FROM information_schema.columns
|
|
29
|
-
WHERE table_name = $1
|
|
30
|
-
AND table_schema = $2
|
|
31
|
-
ORDER BY ordinal_position
|
|
32
|
-
`,a=[r,i]):(n=`
|
|
33
|
-
SELECT
|
|
34
|
-
name as column_name,
|
|
35
|
-
type as data_type,
|
|
36
|
-
CASE WHEN "notnull" = 0 THEN 'YES' ELSE 'NO' END as is_nullable,
|
|
37
|
-
dflt_value as column_default
|
|
38
|
-
FROM pragma_table_info(?)
|
|
39
|
-
ORDER BY cid
|
|
40
|
-
`,a=[r]);let l=await v(y(()=>s.query(n,a)),15e3);if(l.rows.length===0){e.info(`No columns found for table: ${r}`);continue}e.info(`Columns in '${r}'`),l.rows.forEach(n=>{let r=n.data_type+(n.is_nullable===`YES`?` (nullable)`:``);e.info(` > ${t.bold.yellow(r)} > ${n.column_name}`)});let u=new Map;l.rows.forEach(e=>{u.has(e.column_name)||u.set(e.column_name,e)}),c+=`export interface ${r.charAt(0).toUpperCase()+r.slice(1)} {\n`;for(let e of u.values()){let t=te(e.data_type,e.is_nullable===`YES`,o);c+=` ${e.column_name}: ${t};\n`}c+=`}
|
|
41
|
-
|
|
42
|
-
`}catch(t){e.error(`Failed to process table ${r}:`,t),e.info(`Skipping table ${r} and continuing...`);continue}}}c+=`export interface Database {
|
|
43
|
-
`;for(let e of l.rows){if(e.table_name.startsWith(`sqlite_sequence`)||e.table_name.startsWith(`_prisma_migrations`))continue;let t=e.table_name.charAt(0).toUpperCase()+e.table_name.slice(1);c+=` ${e.table_name}: ${t};\n`}c+=`}
|
|
44
|
-
|
|
45
|
-
`,await n.writeFile(a,c,`utf8`),e.success(`TypeScript types written to ${a}`),e.success(`Successfully processed ${u} tables`)}catch(t){throw e.error(`Fatal error during database inspection:`,t),t}finally{await s.close().catch(t=>e.error(`Error closing client:`,t))}};function b(e){return{async findFirst(t,n){let r=[],i=[],a=1;if(n)for(let[e,t]of Object.entries(n))r.push(`"${e}" = $${a}`),i.push(t),a++;let o=`SELECT * FROM "${t}" ${r.length>0?`WHERE ${r.join(` AND `)}`:``} LIMIT 1`;return await e.query(o,i)},async findMany(t,n){let r=[],i=[],a=1;if(n?.where)for(let[e,t]of Object.entries(n.where))r.push(`"${e}" = $${a}`),i.push(t),a++;let o=r.length>0?`WHERE ${r.join(` AND `)}`:``,s=n?.limit?`LIMIT $${a++}`:``,c=n?.offset?`OFFSET $${a++}`:``;n?.limit&&i.push(n.limit),n?.offset&&i.push(n.offset);let l=`SELECT * FROM "${t}" ${o} ${s} ${c}`.trim();return await e.query(l,i)},async insert(t,n){let r=Object.keys(n),i=Object.values(n),a=`INSERT INTO "${t}" (${r.map(e=>`"${e}"`).join(`, `)}) VALUES (${r.map((e,t)=>`$${t+1}`).join(`, `)}) RETURNING *`;return await e.query(a,i)},async update(t,n,r){let i=Object.entries(n),a=Object.entries(r),o=[],s=1,c=i.map(([e,t])=>(o.push(t),`"${e}" = $${s++}`)),l=a.map(([e,t])=>(o.push(t),`"${e}" = $${s++}`)),u=`UPDATE "${t}" SET ${c.join(`, `)} WHERE ${l.join(` AND `)} RETURNING *`;return await e.query(u,o)},async delete(t,n){let r=[],i=[],a=1;for(let[e,t]of Object.entries(n))r.push(`"${e}" = $${a}`),i.push(t),a++;let o=`DELETE FROM "${t}" WHERE ${r.join(` AND `)}`;return(await e.query(o,i)).rowCount}}}var ie=class{client;findFirst;findMany;insert;update;delete;constructor(e){this.client=r(e.connectionString,{max:e.max??10,idle_timeout:e.idle_timeout??30,connect_timeout:e.connect_timeout??10,prepare:!1,transform:{undefined:null}});let t=b(this);this.findFirst=t.findFirst,this.findMany=t.findMany,this.insert=t.insert,this.update=t.update,this.delete=t.delete}async query(e,t){try{let n=await this.client.unsafe(e,t||[]),r=Array.isArray(n)?[...n]:[];return{rows:r,rowCount:r.length,command:n.command}}catch(t){throw new _(`postgres`,e,t)}}async close(){await this.client.end()}},ae=class{pool;findFirst;findMany;insert;update;delete;constructor(e){this.pool=new i(e);let t=b(this);this.findFirst=t.findFirst,this.findMany=t.findMany,this.insert=t.insert,this.update=t.update,this.delete=t.delete}async query(e,t){try{let n=await this.pool.query(e,t);return{rows:n.rows,rowCount:n.rowCount||0,command:n.command,fields:n.fields?.map(e=>({name:e.name,dataTypeID:e.dataTypeID}))}}catch(t){throw new _(`neon`,e,t)}}async close(){await this.pool.end()}};function x(e){return{async findFirst(t,n){let r=[],i=[];if(n)for(let[e,t]of Object.entries(n))r.push(`\`${e}\` = ?`),i.push(t);let a=`SELECT * FROM \`${t}\` ${r.length>0?`WHERE ${r.join(` AND `)}`:``} LIMIT 1`;return await e.query(a,i)},async findMany(t,n){let r=[],i=[];if(n?.where)for(let[e,t]of Object.entries(n.where))r.push(`\`${e}\` = ?`),i.push(t);let a=r.length>0?`WHERE ${r.join(` AND `)}`:``,o=n?.limit?`LIMIT ?`:``,s=n?.offset?`OFFSET ?`:``;n?.limit&&i.push(n.limit),n?.offset&&i.push(n.offset);let c=`SELECT * FROM \`${t}\` ${a} ${o} ${s}`.trim();return await e.query(c,i)},async insert(t,n){let r=Object.keys(n),i=Object.values(n),a=`INSERT INTO \`${t}\` (${r.map(e=>`\`${e}\``).join(`, `)}) VALUES (${r.map(()=>`?`).join(`, `)})`;await e.query(a,i);let o=`SELECT * FROM \`${t}\` WHERE id = LAST_INSERT_ID()`;return await e.query(o)},async update(t,n,r){let i=Object.entries(n),a=Object.entries(r),o=[],s=i.map(([e,t])=>(o.push(t),`\`${e}\` = ?`)),c=a.map(([e,t])=>(o.push(t),`\`${e}\` = ?`)),l=`UPDATE \`${t}\` SET ${s.join(`, `)} WHERE ${c.join(` AND `)}`;await e.query(l,o);let u=Object.values(r),d=`SELECT * FROM \`${t}\` WHERE ${Object.keys(r).map(e=>`\`${e}\` = ?`).join(` AND `)}`;return await e.query(d,u)},async delete(t,n){let r=[],i=[];for(let[e,t]of Object.entries(n))r.push(`\`${e}\` = ?`),i.push(t);let a=`DELETE FROM \`${t}\` WHERE ${r.join(` AND `)}`;return(await e.query(a,i)).rowCount}}}function S(e){return{async findFirst(t,n){let r=[],i=[];if(n)for(let[e,t]of Object.entries(n))r.push(`"${e}" = ?`),i.push(t);let a=`SELECT * FROM "${t}" ${r.length>0?`WHERE ${r.join(` AND `)}`:``} LIMIT 1`;return await e.query(a,i)},async findMany(t,n){let r=[],i=[];if(n?.where)for(let[e,t]of Object.entries(n.where))r.push(`"${e}" = ?`),i.push(t);let a=r.length>0?`WHERE ${r.join(` AND `)}`:``,o=n?.limit?`LIMIT ?`:``,s=n?.offset?`OFFSET ?`:``;n?.limit&&i.push(n.limit),n?.offset&&i.push(n.offset);let c=`SELECT * FROM "${t}" ${a} ${o} ${s}`.trim();return await e.query(c,i)},async insert(t,n){let r=Object.keys(n),i=Object.values(n),a=`INSERT INTO "${t}" (${r.map(e=>`"${e}"`).join(`, `)}) VALUES (${r.map(()=>`?`).join(`, `)}) RETURNING *`;return await e.query(a,i)},async update(t,n,r){let i=Object.entries(n),a=Object.entries(r),o=[],s=i.map(([e,t])=>(o.push(t),`"${e}" = ?`)),c=a.map(([e,t])=>(o.push(t),`"${e}" = ?`)),l=`UPDATE "${t}" SET ${s.join(`, `)} WHERE ${c.join(` AND `)} RETURNING *`;return await e.query(l,o)},async delete(t,n){let r=[],i=[];for(let[e,t]of Object.entries(n))r.push(`"${e}" = ?`),i.push(t);let a=`DELETE FROM "${t}" WHERE ${r.join(` AND `)}`;return(await e.query(a,i)).rowCount}}}var oe=class{client;findFirst;findMany;insert;update;delete;constructor(e){let t=e.connectionString||e.url;t?this.client=new a(t):this.client=new a(e);let n,r=(t||``).toLowerCase();if(e.adapter)switch(e.adapter){case`mysql`:n=x(this);break;case`sqlite`:n=S(this);break;default:n=b(this);break}else n=r.startsWith(`mysql`)?x(this):r.startsWith(`sqlite`)||r.startsWith(`file:`)||r.endsWith(`.db`)||r===`:memory:`?S(this):b(this);this.findFirst=n.findFirst,this.findMany=n.findMany,this.insert=n.insert,this.update=n.update,this.delete=n.delete}async query(e,t){try{let n=await this.client.unsafe(e,t||[]),r=Array.isArray(n)?[...n]:[];return{rows:r,rowCount:n.affectedRows??r.length,command:n.command}}catch(t){throw new _(`bun`,e,t)}}async close(){this.client.end?await this.client.end():this.client.close&&await this.client.close()}},C=class{definition;constructor(e,t){this.definition={name:e,type:t}}length(e){return this.definition.length=e,this}precision(e,t){return this.definition.precision=e,t!==void 0&&(this.definition.scale=t),this}primaryKey(){return this.definition.primaryKey=!0,this.definition.notNull=!0,this}notNull(){return this.definition.notNull=!0,this}unique(){return this.definition.unique=!0,this}default(e){return this.definition.default=e,this}references(e,t=`id`){return this.definition.references={table:e,column:t},this}onDelete(e){return this.definition.references&&(this.definition.references.onDelete=e),this}onUpdate(e){return this.definition.references&&(this.definition.references.onUpdate=e),this}check(e){return this.definition.check=e,this}getDefinition(){return this.definition}};function se(e){return new C(e,`serial`)}function ce(e){return new C(e,`bigserial`)}function w(e){return new C(e,`integer`)}function le(e){return new C(e,`bigint`)}function ue(e){return new C(e,`smallint`)}function de(e){return new C(e,`text`)}function T(e,t){let n=new C(e,`varchar`);return t&&n.length(t),n}function E(e,t){let n=new C(e,`char`);return t&&n.length(t),n}function D(e){return new C(e,`boolean`)}function O(e){return new C(e,`timestamp`)}function k(e){return new C(e,`timestamptz`)}function A(e){return new C(e,`date`)}function j(e){return new C(e,`time`)}function M(e){return new C(e,`json`)}function N(e){return new C(e,`jsonb`)}function P(e){return new C(e,`uuid`)}function F(e,t,n){let r=new C(e,`decimal`);return t&&r.precision(t,n),r}function I(e,t,n){let r=new C(e,`numeric`);return t&&r.precision(t,n),r}function L(e){return new C(e,`real`)}function R(e){return new C(e,`double precision`)}function z(e){return new C(e,`bytea`)}var B=class{definition;constructor(e){this.definition={name:e,columns:[],indexes:[],checks:[]}}column(e){return this.definition.columns.push(e.getDefinition()),this}primaryKey(...e){return this.definition.primaryKey=e,this}index(e,t,n){let r={name:e,columns:t,unique:n?.unique,type:n?.type};return this.definition.indexes?.push(r),this}unique(e,...t){return this.index(e,t,{unique:!0})}check(e,t){return this.definition.checks?.push({name:e,expression:t}),this}getDefinition(){return this.definition}};function V(e,t){let n=new B(e);return t(n),n}var H=f({PostgresGenerator:()=>U}),U,W=d((()=>{U=class{generateCreateTable(e){let t=[];t.push(`CREATE TABLE "${e.name}" (`);let n=[];for(let t of e.columns)n.push(` `+this.generateColumnDefinition(t));if(e.primaryKey&&e.primaryKey.length>0){let t=e.primaryKey.map(e=>`"${e}"`).join(`, `);n.push(` PRIMARY KEY (${t})`)}if(e.checks&&e.checks.length>0)for(let t of e.checks)n.push(` CONSTRAINT "${t.name}" CHECK (${t.expression})`);t.push(n.join(`,
|
|
1
|
+
import e from"consola";import"chalk";import t from"node:fs/promises";import n from"postgres";import{Pool as r}from"@neondatabase/serverless";import{createClient as i}from"@libsql/client";import a from"node:path";var o=Object.defineProperty,s=Object.getOwnPropertyDescriptor,c=Object.getOwnPropertyNames,l=Object.prototype.hasOwnProperty,u=(e,t)=>()=>(e&&(t=e(e=0)),t),d=e=>{let t={};for(var n in e)o(t,n,{get:e[n],enumerable:!0});return t},ee=(e,t,n,r)=>{if(t&&typeof t==`object`||typeof t==`function`)for(var i=c(t),a=0,u=i.length,d;a<u;a++)d=i[a],!l.call(e,d)&&d!==n&&o(e,d,{get:(e=>t[e]).bind(null,d),enumerable:!(r=s(t,d))||r.enumerable});return e},f=e=>ee(o({},`__esModule`,{value:!0}),e);function p(e){return`transaction`in e&&typeof e.transaction==`function`}function m(e){return`prepare`in e&&typeof e.prepare==`function`}var h=class extends Error{constructor(e,t,n){super(e),this.driverType=t,this.originalError=n,this.name=`DatabaseError`}},g=class extends h{constructor(e,t,n){super(`Query failed: ${t}`,e,n),this.name=`QueryError`}};function _(e){return{async findFirst(t,n){let r=[],i=[],a=1;if(n)for(let[e,t]of Object.entries(n))r.push(`"${e}" = $${a}`),i.push(t),a++;let o=`SELECT * FROM "${t}" ${r.length>0?`WHERE ${r.join(` AND `)}`:``} LIMIT 1`;return await e.query(o,i)},async findMany(t,n){let r=[],i=[],a=1;if(n?.where)for(let[e,t]of Object.entries(n.where))r.push(`"${e}" = $${a}`),i.push(t),a++;let o=r.length>0?`WHERE ${r.join(` AND `)}`:``,s=n?.limit?`LIMIT $${a++}`:``,c=n?.offset?`OFFSET $${a++}`:``;n?.limit&&i.push(n.limit),n?.offset&&i.push(n.offset);let l=`SELECT * FROM "${t}" ${o} ${s} ${c}`.trim();return await e.query(l,i)},async insert(t,n){let r=Object.keys(n),i=Object.values(n),a=`INSERT INTO "${t}" (${r.map(e=>`"${e}"`).join(`, `)}) VALUES (${r.map((e,t)=>`$${t+1}`).join(`, `)}) RETURNING *`;return await e.query(a,i)},async update(t,n,r){let i=Object.entries(n),a=Object.entries(r),o=[],s=1,c=i.map(([e,t])=>(o.push(t),`"${e}" = $${s++}`)),l=a.map(([e,t])=>(o.push(t),`"${e}" = $${s++}`)),u=`UPDATE "${t}" SET ${c.join(`, `)} WHERE ${l.join(` AND `)} RETURNING *`;return await e.query(u,o)},async delete(t,n){let r=[],i=[],a=1;for(let[e,t]of Object.entries(n))r.push(`"${e}" = $${a}`),i.push(t),a++;let o=`DELETE FROM "${t}" WHERE ${r.join(` AND `)}`;return(await e.query(o,i)).rowCount}}}var v=class{client;findFirst;findMany;insert;update;delete;constructor(e){this.client=n(e.connectionString,{max:e.max??10,idle_timeout:e.idle_timeout??30,connect_timeout:e.connect_timeout??10,prepare:!1,transform:{undefined:null}});let t=_(this);this.findFirst=t.findFirst,this.findMany=t.findMany,this.insert=t.insert,this.update=t.update,this.delete=t.delete}async query(e,t){try{let n=await this.client.unsafe(e,t||[]),r=Array.isArray(n)?[...n]:[];return{rows:r,rowCount:r.length,command:n.command}}catch(t){throw new g(`postgres`,e,t)}}async close(){await this.client.end()}},te=class{pool;findFirst;findMany;insert;update;delete;constructor(e){this.pool=new r(e);let t=_(this);this.findFirst=t.findFirst,this.findMany=t.findMany,this.insert=t.insert,this.update=t.update,this.delete=t.delete}async query(e,t){try{let n=await this.pool.query(e,t);return{rows:n.rows,rowCount:n.rowCount||0,command:n.command,fields:n.fields?.map(e=>({name:e.name,dataTypeID:e.dataTypeID}))}}catch(t){throw new g(`neon`,e,t)}}async close(){await this.pool.end()}};function y(e){return{async findFirst(t,n){let r=[],i=[];if(n)for(let[e,t]of Object.entries(n))r.push(`"${e}" = ?`),i.push(t);let a=`SELECT * FROM "${t}" ${r.length>0?`WHERE ${r.join(` AND `)}`:``} LIMIT 1`;return await e.query(a,i)},async findMany(t,n){let r=[],i=[];if(n?.where)for(let[e,t]of Object.entries(n.where))r.push(`"${e}" = ?`),i.push(t);let a=r.length>0?`WHERE ${r.join(` AND `)}`:``,o=n?.limit?`LIMIT ?`:``,s=n?.offset?`OFFSET ?`:``;n?.limit&&i.push(n.limit),n?.offset&&i.push(n.offset);let c=`SELECT * FROM "${t}" ${a} ${o} ${s}`.trim();return await e.query(c,i)},async insert(t,n){let r=Object.keys(n),i=Object.values(n),a=`INSERT INTO "${t}" (${r.map(e=>`"${e}"`).join(`, `)}) VALUES (${r.map(()=>`?`).join(`, `)}) RETURNING *`;return await e.query(a,i)},async update(t,n,r){let i=Object.entries(n),a=Object.entries(r),o=[],s=i.map(([e,t])=>(o.push(t),`"${e}" = ?`)),c=a.map(([e,t])=>(o.push(t),`"${e}" = ?`)),l=`UPDATE "${t}" SET ${s.join(`, `)} WHERE ${c.join(` AND `)} RETURNING *`;return await e.query(l,o)},async delete(t,n){let r=[],i=[];for(let[e,t]of Object.entries(n))r.push(`"${e}" = ?`),i.push(t);let a=`DELETE FROM "${t}" WHERE ${r.join(` AND `)}`;return(await e.query(a,i)).rowCount}}}var b=class{client;findFirst;findMany;insert;update;delete;constructor(e){this.client=i(e);let t=y(this);this.findFirst=t.findFirst,this.findMany=t.findMany,this.insert=t.insert,this.update=t.update,this.delete=t.delete}async query(e,t){try{let n=await this.client.execute({sql:e,args:t||[]});return{rows:n.rows,rowCount:n.rows.length>0?n.rows.length:n.rowsAffected}}catch(t){throw new g(`sqlite`,e,t)}}async close(){this.client.close()}};function ne(e){return{async findFirst(t,n){let r=[],i=[];if(n)for(let[e,t]of Object.entries(n))r.push(`\`${e}\` = ?`),i.push(t);let a=`SELECT * FROM \`${t}\` ${r.length>0?`WHERE ${r.join(` AND `)}`:``} LIMIT 1`;return await e.query(a,i)},async findMany(t,n){let r=[],i=[];if(n?.where)for(let[e,t]of Object.entries(n.where))r.push(`\`${e}\` = ?`),i.push(t);let a=r.length>0?`WHERE ${r.join(` AND `)}`:``,o=n?.limit?`LIMIT ?`:``,s=n?.offset?`OFFSET ?`:``;n?.limit&&i.push(n.limit),n?.offset&&i.push(n.offset);let c=`SELECT * FROM \`${t}\` ${a} ${o} ${s}`.trim();return await e.query(c,i)},async insert(t,n){let r=Object.keys(n),i=Object.values(n),a=`INSERT INTO \`${t}\` (${r.map(e=>`\`${e}\``).join(`, `)}) VALUES (${r.map(()=>`?`).join(`, `)})`;await e.query(a,i);let o=`SELECT * FROM \`${t}\` WHERE id = LAST_INSERT_ID()`;return await e.query(o)},async update(t,n,r){let i=Object.entries(n),a=Object.entries(r),o=[],s=i.map(([e,t])=>(o.push(t),`\`${e}\` = ?`)),c=a.map(([e,t])=>(o.push(t),`\`${e}\` = ?`)),l=`UPDATE \`${t}\` SET ${s.join(`, `)} WHERE ${c.join(` AND `)}`;await e.query(l,o);let u=Object.values(r),d=`SELECT * FROM \`${t}\` WHERE ${Object.keys(r).map(e=>`\`${e}\` = ?`).join(` AND `)}`;return await e.query(d,u)},async delete(t,n){let r=[],i=[];for(let[e,t]of Object.entries(n))r.push(`\`${e}\` = ?`),i.push(t);let a=`DELETE FROM \`${t}\` WHERE ${r.join(` AND `)}`;return(await e.query(a,i)).rowCount}}}var x=class{definition;constructor(e,t){this.definition={name:e,type:t}}length(e){return this.definition.length=e,this}precision(e,t){return this.definition.precision=e,t!==void 0&&(this.definition.scale=t),this}primaryKey(){return this.definition.primaryKey=!0,this.definition.notNull=!0,this}notNull(){return this.definition.notNull=!0,this}unique(){return this.definition.unique=!0,this}default(e){return this.definition.default=e,this}references(e,t=`id`){return this.definition.references={table:e,column:t},this}onDelete(e){return this.definition.references&&(this.definition.references.onDelete=e),this}onUpdate(e){return this.definition.references&&(this.definition.references.onUpdate=e),this}check(e){return this.definition.check=e,this}getDefinition(){return this.definition}};function re(e){return new x(e,`serial`)}function S(e){return new x(e,`bigserial`)}function C(e){return new x(e,`integer`)}function w(e){return new x(e,`bigint`)}function T(e){return new x(e,`smallint`)}function E(e){return new x(e,`text`)}function ie(e,t){let n=new x(e,`varchar`);return t&&n.length(t),n}function ae(e,t){let n=new x(e,`char`);return t&&n.length(t),n}function D(e){return new x(e,`boolean`)}function O(e){return new x(e,`timestamp`)}function k(e){return new x(e,`timestamptz`)}function A(e){return new x(e,`date`)}function j(e){return new x(e,`time`)}function M(e){return new x(e,`json`)}function N(e){return new x(e,`jsonb`)}function P(e){return new x(e,`uuid`)}function F(e,t,n){let r=new x(e,`decimal`);return t&&r.precision(t,n),r}function I(e,t,n){let r=new x(e,`numeric`);return t&&r.precision(t,n),r}function L(e){return new x(e,`real`)}function R(e){return new x(e,`double precision`)}function z(e){return new x(e,`bytea`)}var B=class{definition;constructor(e){this.definition={name:e,columns:[],indexes:[],checks:[]}}column(e){return this.definition.columns.push(e.getDefinition()),this}primaryKey(...e){return this.definition.primaryKey=e,this}index(e,t,n){let r={name:e,columns:t,unique:n?.unique,type:n?.type};return this.definition.indexes?.push(r),this}unique(e,...t){return this.index(e,t,{unique:!0})}check(e,t){return this.definition.checks?.push({name:e,expression:t}),this}getDefinition(){return this.definition}};function V(e,t){let n=new B(e);return t(n),n}var oe=d({PostgresGenerator:()=>H}),H,U=u((()=>{H=class{generateCreateTable(e){let t=[];t.push(`CREATE TABLE "${e.name}" (`);let n=[];for(let t of e.columns)n.push(` `+this.generateColumnDefinition(t));if(e.primaryKey&&e.primaryKey.length>0){let t=e.primaryKey.map(e=>`"${e}"`).join(`, `);n.push(` PRIMARY KEY (${t})`)}if(e.checks&&e.checks.length>0)for(let t of e.checks)n.push(` CONSTRAINT "${t.name}" CHECK (${t.expression})`);t.push(n.join(`,
|
|
46
2
|
`)),t.push(`);`);let r=[t.join(`
|
|
47
3
|
`)];if(e.indexes&&e.indexes.length>0)for(let t of e.indexes)r.push(this.generateIndex(e.name,t));return r.join(`
|
|
48
4
|
|
|
49
|
-
`)}generateDropTable(e){return`DROP TABLE IF EXISTS "${e}" CASCADE;`}generateColumnDefinition(e){let t=[`"${e.name}"`];if(t.push(this.getColumnType(e)),e.primaryKey&&!e.type.includes(`serial`)&&t.push(`PRIMARY KEY`),e.notNull&&!e.primaryKey&&!e.type.includes(`serial`)&&t.push(`NOT NULL`),e.unique&&t.push(`UNIQUE`),e.default!==void 0&&t.push(`DEFAULT ${this.formatDefault(e.default)}`),e.references){let n=e.references;t.push(`REFERENCES "${n.table}"("${n.column}")`),n.onDelete&&t.push(`ON DELETE ${n.onDelete}`),n.onUpdate&&t.push(`ON UPDATE ${n.onUpdate}`)}return e.check&&t.push(`CHECK (${e.check})`),t.join(` `)}getColumnType(e){let t=e.type.toUpperCase();return e.length?t+=`(${e.length})`:e.precision&&(e.scale===void 0?t+=`(${e.precision})`:t+=`(${e.precision}, ${e.scale})`),t}formatDefault(e){return typeof e==`string`?e.toUpperCase()===`NOW()`||e.toUpperCase()===`CURRENT_TIMESTAMP`?e.toUpperCase():`'${e}'`:typeof e==`boolean`?e?`TRUE`:`FALSE`:String(e)}generateIndex(e,t){let n=t.unique?`UNIQUE `:``,r=t.type?` USING ${t.type.toUpperCase()}`:``,i=t.columns.map(e=>`"${e}"`).join(`, `);return`CREATE ${n}INDEX "${t.name}" ON "${e}"${r} (${i});`}}})),
|
|
5
|
+
`)}generateDropTable(e){return`DROP TABLE IF EXISTS "${e}" CASCADE;`}generateColumnDefinition(e){let t=[`"${e.name}"`];if(t.push(this.getColumnType(e)),e.primaryKey&&!e.type.includes(`serial`)&&t.push(`PRIMARY KEY`),e.notNull&&!e.primaryKey&&!e.type.includes(`serial`)&&t.push(`NOT NULL`),e.unique&&t.push(`UNIQUE`),e.default!==void 0&&t.push(`DEFAULT ${this.formatDefault(e.default)}`),e.references){let n=e.references;t.push(`REFERENCES "${n.table}"("${n.column}")`),n.onDelete&&t.push(`ON DELETE ${n.onDelete}`),n.onUpdate&&t.push(`ON UPDATE ${n.onUpdate}`)}return e.check&&t.push(`CHECK (${e.check})`),t.join(` `)}getColumnType(e){let t=e.type.toUpperCase();return e.length?t+=`(${e.length})`:e.precision&&(e.scale===void 0?t+=`(${e.precision})`:t+=`(${e.precision}, ${e.scale})`),t}formatDefault(e){return typeof e==`string`?e.toUpperCase()===`NOW()`||e.toUpperCase()===`CURRENT_TIMESTAMP`?e.toUpperCase():`'${e}'`:typeof e==`boolean`?e?`TRUE`:`FALSE`:String(e)}generateIndex(e,t){let n=t.unique?`UNIQUE `:``,r=t.type?` USING ${t.type.toUpperCase()}`:``,i=t.columns.map(e=>`"${e}"`).join(`, `);return`CREATE ${n}INDEX "${t.name}" ON "${e}"${r} (${i});`}}})),W=d({MySQLGenerator:()=>G}),G,K=u((()=>{G=class{generateCreateTable(e){let t=[];t.push(`CREATE TABLE \`${e.name}\` (`);let n=[];for(let t of e.columns)n.push(` `+this.generateColumnDefinition(t));if(e.primaryKey&&e.primaryKey.length>0){let t=e.primaryKey.map(e=>`\`${e}\``).join(`, `);n.push(` PRIMARY KEY (${t})`)}if(e.checks&&e.checks.length>0)for(let t of e.checks)n.push(` CONSTRAINT \`${t.name}\` CHECK (${t.expression})`);t.push(n.join(`,
|
|
50
6
|
`)),t.push(`) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;`);let r=[t.join(`
|
|
51
7
|
`)];if(e.indexes&&e.indexes.length>0)for(let t of e.indexes)r.push(this.generateIndex(e.name,t));return r.join(`
|
|
52
8
|
|
|
53
|
-
`)}generateDropTable(e){return`DROP TABLE IF EXISTS \`${e}\`;`}generateColumnDefinition(e){let t=[`\`${e.name}\``];if(t.push(this.getColumnType(e)),e.notNull&&!e.primaryKey&&e.type!==`serial`&&e.type!==`bigserial`&&t.push(`NOT NULL`),e.unique&&t.push(`UNIQUE`),(e.type===`serial`||e.type===`bigserial`)&&t.push(`AUTO_INCREMENT`),e.default!==void 0&&t.push(`DEFAULT ${this.formatDefault(e.default)}`),e.references){let n=e.references;t.push(`REFERENCES \`${n.table}\`(\`${n.column}\`)`),n.onDelete&&t.push(`ON DELETE ${n.onDelete}`),n.onUpdate&&t.push(`ON UPDATE ${n.onUpdate}`)}return e.check&&t.push(`CHECK (${e.check})`),t.join(` `)}getColumnType(e){let t=e.type;if(t===`serial`)return`INT`;if(t===`bigserial`)return`BIGINT`;if(t===`timestamptz`)return`TIMESTAMP`;if(t===`jsonb`)return`JSON`;if(t===`bytea`)return`BLOB`;if(t===`double precision`)return`DOUBLE`;let n=t.toUpperCase();return e.length?n+=`(${e.length})`:e.precision&&(e.scale===void 0?n+=`(${e.precision})`:n+=`(${e.precision}, ${e.scale})`),n}formatDefault(e){return typeof e==`string`?e.toUpperCase()===`NOW()`||e.toUpperCase()===`CURRENT_TIMESTAMP`?`CURRENT_TIMESTAMP`:`'${e}'`:typeof e==`boolean`?e?`1`:`0`:String(e)}generateIndex(e,t){let n=t.unique?`UNIQUE `:``,r=t.type&&t.type!==`btree`?` USING ${t.type.toUpperCase()}`:``,i=t.columns.map(e=>`\`${e}\``).join(`, `);return`CREATE ${n}INDEX \`${t.name}\` ON \`${e}\`${r} (${i});`}}})),
|
|
9
|
+
`)}generateDropTable(e){return`DROP TABLE IF EXISTS \`${e}\`;`}generateColumnDefinition(e){let t=[`\`${e.name}\``];if(t.push(this.getColumnType(e)),e.notNull&&!e.primaryKey&&e.type!==`serial`&&e.type!==`bigserial`&&t.push(`NOT NULL`),e.unique&&t.push(`UNIQUE`),(e.type===`serial`||e.type===`bigserial`)&&t.push(`AUTO_INCREMENT`),e.default!==void 0&&t.push(`DEFAULT ${this.formatDefault(e.default)}`),e.references){let n=e.references;t.push(`REFERENCES \`${n.table}\`(\`${n.column}\`)`),n.onDelete&&t.push(`ON DELETE ${n.onDelete}`),n.onUpdate&&t.push(`ON UPDATE ${n.onUpdate}`)}return e.check&&t.push(`CHECK (${e.check})`),t.join(` `)}getColumnType(e){let t=e.type;if(t===`serial`)return`INT`;if(t===`bigserial`)return`BIGINT`;if(t===`timestamptz`)return`TIMESTAMP`;if(t===`jsonb`)return`JSON`;if(t===`bytea`)return`BLOB`;if(t===`double precision`)return`DOUBLE`;let n=t.toUpperCase();return e.length?n+=`(${e.length})`:e.precision&&(e.scale===void 0?n+=`(${e.precision})`:n+=`(${e.precision}, ${e.scale})`),n}formatDefault(e){return typeof e==`string`?e.toUpperCase()===`NOW()`||e.toUpperCase()===`CURRENT_TIMESTAMP`?`CURRENT_TIMESTAMP`:`'${e}'`:typeof e==`boolean`?e?`1`:`0`:String(e)}generateIndex(e,t){let n=t.unique?`UNIQUE `:``,r=t.type&&t.type!==`btree`?` USING ${t.type.toUpperCase()}`:``,i=t.columns.map(e=>`\`${e}\``).join(`, `);return`CREATE ${n}INDEX \`${t.name}\` ON \`${e}\`${r} (${i});`}}})),q=d({SQLiteGenerator:()=>J}),J,Y=u((()=>{J=class{generateCreateTable(e){let t=[];t.push(`CREATE TABLE "${e.name}" (`);let n=[];for(let t of e.columns)n.push(` `+this.generateColumnDefinition(t));if(e.primaryKey&&e.primaryKey.length>0){let t=e.primaryKey.map(e=>`"${e}"`).join(`, `);n.push(` PRIMARY KEY (${t})`)}if(e.checks&&e.checks.length>0)for(let t of e.checks)n.push(` CONSTRAINT "${t.name}" CHECK (${t.expression})`);t.push(n.join(`,
|
|
54
10
|
`)),t.push(`);`);let r=[t.join(`
|
|
55
11
|
`)];if(e.indexes&&e.indexes.length>0)for(let t of e.indexes)r.push(this.generateIndex(e.name,t));return r.join(`
|
|
56
12
|
|
|
57
|
-
`)}generateDropTable(e){return`DROP TABLE IF EXISTS "${e}";`}generateColumnDefinition(e){let t=[`"${e.name}"`];if(t.push(this.getColumnType(e)),e.primaryKey&&(t.push(`PRIMARY KEY`),(e.type===`serial`||e.type===`bigserial`)&&t.push(`AUTOINCREMENT`)),e.notNull&&!e.primaryKey&&t.push(`NOT NULL`),e.unique&&t.push(`UNIQUE`),e.default!==void 0&&t.push(`DEFAULT ${this.formatDefault(e.default)}`),e.references){let n=e.references;t.push(`REFERENCES "${n.table}"("${n.column}")`),n.onDelete&&t.push(`ON DELETE ${n.onDelete}`),n.onUpdate&&t.push(`ON UPDATE ${n.onUpdate}`)}return e.check&&t.push(`CHECK (${e.check})`),t.join(` `)}getColumnType(e){let t=e.type;return t===`serial`||t===`bigserial`||t===`bigint`||t===`smallint`?`INTEGER`:t===`varchar`||t===`char`||t===`timestamptz`||t===`timestamp`||t===`date`||t===`time`||t===`uuid`||t===`json`||t===`jsonb`?`TEXT`:t===`bytea`?`BLOB`:t===`decimal`||t===`numeric`||t===`real`||t===`double precision`?`REAL`:t===`boolean`?`INTEGER`:t.toUpperCase()}formatDefault(e){return typeof e==`string`?e.toUpperCase()===`NOW()`||e.toUpperCase()===`CURRENT_TIMESTAMP`?`CURRENT_TIMESTAMP`:`'${e}'`:typeof e==`boolean`?e?`1`:`0`:String(e)}generateIndex(e,t){let n=t.unique?`UNIQUE `:``,r=t.columns.map(e=>`"${e}"`).join(`, `);return`CREATE ${n}INDEX "${t.name}" ON "${e}" (${r});`}}}));
|
|
13
|
+
`)}generateDropTable(e){return`DROP TABLE IF EXISTS "${e}";`}generateColumnDefinition(e){let t=[`"${e.name}"`];if(t.push(this.getColumnType(e)),e.primaryKey&&(t.push(`PRIMARY KEY`),(e.type===`serial`||e.type===`bigserial`)&&t.push(`AUTOINCREMENT`)),e.notNull&&!e.primaryKey&&t.push(`NOT NULL`),e.unique&&t.push(`UNIQUE`),e.default!==void 0&&t.push(`DEFAULT ${this.formatDefault(e.default)}`),e.references){let n=e.references;t.push(`REFERENCES "${n.table}"("${n.column}")`),n.onDelete&&t.push(`ON DELETE ${n.onDelete}`),n.onUpdate&&t.push(`ON UPDATE ${n.onUpdate}`)}return e.check&&t.push(`CHECK (${e.check})`),t.join(` `)}getColumnType(e){let t=e.type;return t===`serial`||t===`bigserial`||t===`bigint`||t===`smallint`?`INTEGER`:t===`varchar`||t===`char`||t===`timestamptz`||t===`timestamp`||t===`date`||t===`time`||t===`uuid`||t===`json`||t===`jsonb`?`TEXT`:t===`bytea`?`BLOB`:t===`decimal`||t===`numeric`||t===`real`||t===`double precision`?`REAL`:t===`boolean`?`INTEGER`:t.toUpperCase()}formatDefault(e){return typeof e==`string`?e.toUpperCase()===`NOW()`||e.toUpperCase()===`CURRENT_TIMESTAMP`?`CURRENT_TIMESTAMP`:`'${e}'`:typeof e==`boolean`?e?`1`:`0`:String(e)}generateIndex(e,t){let n=t.unique?`UNIQUE `:``,r=t.columns.map(e=>`"${e}"`).join(`, `);return`CREATE ${n}INDEX "${t.name}" ON "${e}" (${r});`}}}));U(),K(),Y();var X=class{upStatements=[];downStatements=[];dialect;constructor(e=`postgres`){this.dialect=e}createTable(e){let t=e.getDefinition(),n=this.getGenerator();return this.upStatements.push(n.generateCreateTable(t)),this.downStatements.unshift(n.generateDropTable(t.name)),this}dropTable(e){let t=this.getGenerator();return this.upStatements.push(t.generateDropTable(e)),this}addColumn(e,t){return this.upStatements.push(`ALTER TABLE "${e}" ADD COLUMN ${t};`),this}dropColumn(e,t){return this.upStatements.push(`ALTER TABLE "${e}" DROP COLUMN "${t}";`),this}renameTable(e,t){return this.dialect===`postgres`?this.upStatements.push(`ALTER TABLE "${e}" RENAME TO "${t}";`):this.dialect===`mysql`?this.upStatements.push(`RENAME TABLE \`${e}\` TO \`${t}\`;`):this.upStatements.push(`ALTER TABLE "${e}" RENAME TO "${t}";`),this}raw(e,t){return this.upStatements.push(e),t&&this.downStatements.unshift(t),this}build(e,t){return{version:e,name:t,up:this.upStatements,down:this.downStatements}}getGenerator(){switch(this.dialect){case`postgres`:return new H;case`mysql`:return new G;case`sqlite`:return new J;default:return new H}}};function se(e=`postgres`){return new X(e)}var ce=class{client;constructor(e){this.client=e}async ensureMigrationsTable(){await this.client.query(`
|
|
58
14
|
CREATE TABLE IF NOT EXISTS _migrations (
|
|
59
15
|
version VARCHAR(255) PRIMARY KEY,
|
|
60
16
|
name VARCHAR(255) NOT NULL,
|
|
61
17
|
applied_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
62
18
|
);
|
|
63
|
-
`)}async getAppliedMigrations(){return await this.ensureMigrationsTable(),(await this.client.query(`SELECT version FROM _migrations ORDER BY version`)).rows.map(e=>e.version)}async up(t){if((await this.getAppliedMigrations()).includes(t.version)){e.info(`Migration ${t.version} (${t.name}) already applied`);return}e.start(`Running migration ${t.version} (${t.name})`);for(let e of t.up)await this.client.query(e);await this.client.query(`INSERT INTO _migrations (version, name) VALUES ($1, $2)`,[t.version,t.name]),e.success(`Migration ${t.version} (${t.name}) applied successfully`)}async down(t){if(!(await this.getAppliedMigrations()).includes(t.version)){e.info(`Migration ${t.version} (${t.name}) not applied`);return}e.start(`Rolling back migration ${t.version} (${t.name})`);for(let e of t.down)await this.client.query(e);await this.client.query(`DELETE FROM _migrations WHERE version = $1`,[t.version]),e.success(`Migration ${t.version} (${t.name}) rolled back successfully`)}async upAll(t){let n=await this.getAppliedMigrations(),r=t.filter(e=>!n.includes(e.version));if(r.length===0){e.info(`No pending migrations`);return}e.info(`Found ${r.length} pending migrations`);for(let e of r)await this.up(e)}async downAll(t){let n=await this.getAppliedMigrations(),r=t.filter(e=>n.includes(e.version)).reverse();if(r.length===0){e.info(`No migrations to rollback`);return}e.info(`Rolling back ${r.length} migrations`);for(let e of r)await this.down(e)}async reset(e){await this.downAll(e),await this.upAll(e)}},
|
|
19
|
+
`)}async getAppliedMigrations(){return await this.ensureMigrationsTable(),(await this.client.query(`SELECT version FROM _migrations ORDER BY version`)).rows.map(e=>e.version)}async up(t){if((await this.getAppliedMigrations()).includes(t.version)){e.info(`Migration ${t.version} (${t.name}) already applied`);return}e.start(`Running migration ${t.version} (${t.name})`);for(let e of t.up)await this.client.query(e);await this.client.query(`INSERT INTO _migrations (version, name) VALUES ($1, $2)`,[t.version,t.name]),e.success(`Migration ${t.version} (${t.name}) applied successfully`)}async down(t){if(!(await this.getAppliedMigrations()).includes(t.version)){e.info(`Migration ${t.version} (${t.name}) not applied`);return}e.start(`Rolling back migration ${t.version} (${t.name})`);for(let e of t.down)await this.client.query(e);await this.client.query(`DELETE FROM _migrations WHERE version = $1`,[t.version]),e.success(`Migration ${t.version} (${t.name}) rolled back successfully`)}async upAll(t){let n=await this.getAppliedMigrations(),r=t.filter(e=>!n.includes(e.version));if(r.length===0){e.info(`No pending migrations`);return}e.info(`Found ${r.length} pending migrations`);for(let e of r)await this.up(e)}async downAll(t){let n=await this.getAppliedMigrations(),r=t.filter(e=>n.includes(e.version)).reverse();if(r.length===0){e.info(`No migrations to rollback`);return}e.info(`Rolling back ${r.length} migrations`);for(let e of r)await this.down(e)}async reset(e){await this.downAll(e),await this.upAll(e)}},Z=class{dialect;constructor(e=`postgres`){this.dialect=e}detectChanges(e,t){let n=[],r=new Map(e.map(e=>[e.name,e])),i=new Map(t.map(e=>[e.name,e]));for(let[e,t]of i){let i=r.get(e);i?(n.push(...this.detectColumnChanges(i,t)),n.push(...this.detectIndexChanges(i,t))):n.push({type:`create_table`,table:e,details:t})}for(let[e]of r)i.has(e)||n.push({type:`drop_table`,table:e});return n}detectColumnChanges(e,t){let n=[],r=new Map(e.columns.map(e=>[e.name,e])),i=new Map(t.columns.map(e=>[e.name,e]));for(let[e,a]of i){let i=r.get(e);i?this.hasColumnChanged(i,a)&&n.push({type:`modify_column`,table:t.name,details:{old:i,new:a}}):n.push({type:`add_column`,table:t.name,details:a})}for(let[e]of r)i.has(e)||n.push({type:`drop_column`,table:t.name,details:{name:e}});return n}detectIndexChanges(e,t){let n=[],r=new Map((e.indexes||[]).map(e=>[e.name,e])),i=new Map((t.indexes||[]).map(e=>[e.name,e]));for(let[e,a]of i)r.has(e)||n.push({type:`create_index`,table:t.name,details:a});for(let[e]of r)i.has(e)||n.push({type:`drop_index`,table:t.name,details:{name:e}});return n}hasColumnChanged(e,t){return e.type!==t.type||e.length!==t.length||e.precision!==t.precision||e.scale!==t.scale||e.notNull!==t.notNull||e.unique!==t.unique||e.default!==t.default||JSON.stringify(e.references)!==JSON.stringify(t.references)}generateMigration(e,t,n){let r=new X(this.dialect);for(let t of e)switch(t.type){case`create_table`:{let e=t.details,n=this.getGenerator(),i=n.generateCreateTable(e);r.raw(i,n.generateDropTable(e.name));break}case`drop_table`:{let e=this.getGenerator();r.raw(e.generateDropTable(t.table));break}case`add_column`:{let e=t.details,n=this.generateColumnSQL(e);r.raw(`ALTER TABLE "${t.table}" ADD COLUMN ${n};`,`ALTER TABLE "${t.table}" DROP COLUMN "${e.name}";`);break}case`drop_column`:{let e=t.details.name;r.raw(`ALTER TABLE "${t.table}" DROP COLUMN "${e}";`);break}case`create_index`:{let e=t.details,n=this.generateIndexSQL(t.table,e);r.raw(n,`DROP INDEX "${e.name}";`);break}case`drop_index`:{let e=t.details.name;r.raw(`DROP INDEX "${e}";`);break}}return r}generateColumnSQL(e){let t=[`"${e.name}"`];return t.push(e.type.toUpperCase()),e.length&&(t[1]+=`(${e.length})`),e.notNull&&t.push(`NOT NULL`),e.unique&&t.push(`UNIQUE`),e.default!==void 0&&t.push(`DEFAULT ${this.formatDefault(e.default)}`),t.join(` `)}generateIndexSQL(e,t){let n=t.unique?`UNIQUE `:``,r=t.columns.map(e=>`"${e}"`).join(`, `);return`CREATE ${n}INDEX "${t.name}" ON "${e}" (${r});`}formatDefault(e){return typeof e==`string`?e.toUpperCase()===`NOW()`||e.toUpperCase()===`CURRENT_TIMESTAMP`?e.toUpperCase():`'${e}'`:typeof e==`boolean`?e?`TRUE`:`FALSE`:String(e)}getGenerator(){let{PostgresGenerator:e}=(U(),f(oe)),{MySQLGenerator:t}=(K(),f(W)),{SQLiteGenerator:n}=(Y(),f(q));switch(this.dialect){case`postgres`:return new e;case`mysql`:return new t;case`sqlite`:return new n;default:return new e}}};function le(e,t,n=`postgres`){return new Z(n).detectChanges(e,t)}function ue(e,t,n,r=`postgres`){return new Z(r).generateMigration(e,t,n)}var de=class{snapshotPath;constructor(e=`./.driftsql/snapshot.json`){this.snapshotPath=e}async save(e){let n={version:`1`,timestamp:Date.now(),tables:e},r=a.dirname(this.snapshotPath);await t.mkdir(r,{recursive:!0}),await t.writeFile(this.snapshotPath,JSON.stringify(n,null,2),`utf8`)}async load(){try{let e=await t.readFile(this.snapshotPath,`utf8`);return JSON.parse(e)}catch{return null}}async exists(){try{return await t.access(this.snapshotPath),!0}catch{return!1}}},Q=class{generateTypes(e){let t=`// This file was automatically generated - DO NOT EDIT
|
|
64
20
|
|
|
65
21
|
`;for(let n of e)t+=this.generateTableInterface(n),t+=`
|
|
66
22
|
|
|
67
23
|
`;return t+=this.generateDatabaseInterface(e),t}generateTableInterface(e){let t=[`export interface ${this.pascalCase(e.name)} {`];for(let n of e.columns){let e=this.columnToTypeScript(n),r=!n.notNull&&!n.primaryKey?`?`:``;t.push(` ${n.name}${r}: ${e}`)}return t.push(`}`),t.join(`
|
|
68
24
|
`)}generateDatabaseInterface(e){let t=[`export interface Database {`];for(let n of e){let e=this.pascalCase(n.name);t.push(` ${n.name}: ${e}`)}return t.push(`}`),t.join(`
|
|
69
|
-
`)}columnToTypeScript(e){let t=!e.notNull&&!e.primaryKey,n;switch(e.type.toLowerCase()){case`serial`:case`bigserial`:case`integer`:case`int`:case`bigint`:case`smallint`:case`numeric`:case`decimal`:case`real`:case`double precision`:n=`number`;break;case`text`:case`varchar`:case`char`:case`uuid`:n=`string`;break;case`boolean`:n=`boolean`;break;case`timestamp`:case`timestamptz`:case`date`:case`time`:n=`Date | string`;break;case`json`:case`jsonb`:n=`any`;break;case`bytea`:n=`Buffer`;break;default:n=`any`}return t?`${n} | null`:n}pascalCase(e){return e.split(`_`).map(e=>e.charAt(0).toUpperCase()+e.slice(1).toLowerCase()).join(``)}async writeToFile(e,
|
|
25
|
+
`)}columnToTypeScript(e){let t=!e.notNull&&!e.primaryKey,n;switch(e.type.toLowerCase()){case`serial`:case`bigserial`:case`integer`:case`int`:case`bigint`:case`smallint`:case`numeric`:case`decimal`:case`real`:case`double precision`:n=`number`;break;case`text`:case`varchar`:case`char`:case`uuid`:n=`string`;break;case`boolean`:n=`boolean`;break;case`timestamp`:case`timestamptz`:case`date`:case`time`:n=`Date | string`;break;case`json`:case`jsonb`:n=`any`;break;case`bytea`:n=`Buffer`;break;default:n=`any`}return t?`${n} | null`:n}pascalCase(e){return e.split(`_`).map(e=>e.charAt(0).toUpperCase()+e.slice(1).toLowerCase()).join(``)}async writeToFile(e,n){let r=this.generateTypes(e);await t.writeFile(n,r,`utf8`)}};async function fe(e,t){await new Q().writeToFile(e,t)}U(),K(),Y();var $=class t{primaryDriver;fallbackDrivers;queryCache;cacheTTL;maxCacheSize=100;constructor(e){this.primaryDriver=e.driver,this.fallbackDrivers=e.fallbackDrivers||[],this.queryCache=new Map,this.cacheTTL=e.cacheTTL??5e3}isCacheValid(e){return Date.now()-e.timestamp<this.cacheTTL}getCacheKey(e,t){return JSON.stringify({sql:e,params:t})}maintainCacheSize(){if(this.queryCache.size>this.maxCacheSize){let e=this.queryCache.keys().next().value;e!==void 0&&this.queryCache.delete(e)}}cacheResult(e,t){this.queryCache.set(e,{result:t,timestamp:Date.now()}),this.maintainCacheSize()}async tryFallbackDrivers(t,n){e.warn(`Query failed with ${this.primaryDriver.constructor.name}, trying fallbacks`);let r;for(let e of this.fallbackDrivers)try{return await e.query(t,n)}catch(e){r=e}throw r||new h(`All drivers failed to execute query`,`unknown`)}async query(e,t){let n=this.getCacheKey(e,t),r=this.queryCache.get(n);if(r&&this.isCacheValid(r))return r.result;try{let r=await this.primaryDriver.query(e,t);return this.cacheResult(n,r),r}catch(n){if(this.fallbackDrivers.length===0)throw n;return await this.tryFallbackDrivers(e,t)}}async transaction(e){if(!p(this.primaryDriver))throw new h(`Primary driver does not support transactions`,this.primaryDriver.constructor.name);return await this.primaryDriver.transaction(async n=>await e(new t({driver:n,fallbackDrivers:[]})))}async prepare(e){if(!m(this.primaryDriver))throw new h(`Primary driver does not support prepared statements`,this.primaryDriver.constructor.name);return await this.primaryDriver.prepare(e)}async findFirst(e,t){if(!this.primaryDriver.findFirst)throw new h(`Primary driver does not support findFirst`,this.primaryDriver.constructor.name);return(await this.primaryDriver.findFirst(e,t?.where))?.rows[0]||null}async findMany(e,t){if(!this.primaryDriver.findMany)throw new h(`Primary driver does not support findMany`,this.primaryDriver.constructor.name);return(await this.primaryDriver.findMany(e,t)).rows}async insert(e,t){if(!this.primaryDriver.insert)throw new h(`Primary driver does not support insert`,this.primaryDriver.constructor.name);return(await this.primaryDriver.insert(e,t.data)).rows[0]}async update(e,t){if(!this.primaryDriver.update)throw new h(`Primary driver does not support update`,this.primaryDriver.constructor.name);return(await this.primaryDriver.update(e,t.data,t.where)).rows[0]||null}async delete(e,t){if(!this.primaryDriver.delete)throw new h(`Primary driver does not support delete`,this.primaryDriver.constructor.name);return await this.primaryDriver.delete(e,t.where)}getDriver(){return this.primaryDriver}async inspectDB(e){throw Error(`This method is deprecated since v2, use the cli command instead 'driftsql inspect'`)}supportsTransactions(){return p(this.primaryDriver)}supportsPreparedStatements(){return m(this.primaryDriver)}clearCache(){this.queryCache.clear()}getCacheStats(){return{size:this.queryCache.size,ttl:this.cacheTTL}}async close(){this.queryCache.clear();let t=[this.primaryDriver,...this.fallbackDrivers].map(t=>t.close().catch(n=>e.warn(`Error closing ${t.constructor.name}:`,n)));await Promise.all(t)}};const pe=$;export{x as Column,pe as DriftSQLClient,X as MigrationBuilder,ce as MigrationRunner,G as MySQLGenerator,te as NeonDriver,v as PostgresDriver,H as PostgresGenerator,$ as SQLClient,J as SQLiteGenerator,Z as SchemaDiffer,de as SnapshotManager,b as SqliteDriver,B as Table,Q as TypeGenerator,w as bigint,S as bigserial,D as boolean,z as bytea,ae as char,se as createMigration,ne as createMySQLHelpers,_ as createPostgresHelpers,y as createSQLiteHelpers,V as createTable,A as date,F as decimal,le as detectChanges,R as doublePrecision,ue as generateMigrationFromChanges,fe as generateTypesFromSchema,C as integer,M as json,N as jsonb,I as numeric,L as real,re as serial,T as smallint,E as text,j as time,O as timestamp,k as timestamptz,P as uuid,ie as varchar};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "driftsql",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.5-beta",
|
|
4
4
|
"description": "A modern, type-safe SQL client with built-in schema builder and migration system for TypeScript.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -41,6 +41,7 @@
|
|
|
41
41
|
"vitest": "^4.0.1"
|
|
42
42
|
},
|
|
43
43
|
"dependencies": {
|
|
44
|
+
"@libsql/client": "^0.15.15",
|
|
44
45
|
"@neondatabase/serverless": "^1.0.2",
|
|
45
46
|
"chalk": "^5.6.2",
|
|
46
47
|
"commander": "^14.0.2",
|