driftsql 1.0.32 → 2.0.0-beta.2

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/index.d.ts CHANGED
@@ -1,37 +1,360 @@
1
- import type { DatabaseDriver, QueryResult } from './types';
2
- export type { DatabaseDriver, QueryResult, QueryError, QueryField, ConnectionError } from './types';
3
- export { PostgresDriver } from './drivers/postgres';
4
- export { LibSQLDriver } from './drivers/libsql';
5
- export { MySQLDriver } from './drivers/mysql';
6
- export { NeonDriver } from './drivers/neon';
7
- export { SqliteCloudDriver } from './drivers/sqlitecloud';
8
- export { inspectDB } from './inspect';
9
- export { SurrealDriver } from './drivers/surreal';
10
- export { BunDriver } from './drivers/bun';
11
- export { PoubelleDriver } from './drivers/poubelle/poubelle';
12
- export interface ClientOptions<T extends DatabaseDriver = DatabaseDriver> {
13
- driver: T;
14
- fallbackDrivers?: DatabaseDriver[];
15
- }
16
- export declare class SQLClient<DT = any> {
17
- private primaryDriver;
18
- private fallbackDrivers;
19
- constructor(options: ClientOptions);
20
- query<T = any>(sql: string, params?: any[]): Promise<QueryResult<T>>;
21
- transaction<T>(callback: (client: SQLClient<DT>) => Promise<T>): Promise<T>;
22
- prepare(sql: string): Promise<import("./types").PreparedStatement>;
23
- findFirst<K extends keyof DT>(table: K, where?: Partial<DT[K]>): Promise<DT[K] | null>;
24
- findMany<K extends keyof DT>(table: K, options?: {
25
- where?: Partial<DT[K]>;
26
- limit?: number;
27
- offset?: number;
28
- }): Promise<DT[K][]>;
29
- insert<K extends keyof DT>(table: K, data: Partial<DT[K]>): Promise<DT[K]>;
30
- update<K extends keyof DT>(table: K, data: Partial<DT[K]>, where: Partial<DT[K]>): Promise<DT[K] | null>;
31
- delete<K extends keyof DT>(table: K, where: Partial<DT[K]>): Promise<number>;
32
- getDriver(): DatabaseDriver;
33
- supportsTransactions(): boolean;
34
- supportsPreparedStatements(): boolean;
35
- close(): Promise<void>;
36
- }
37
- export declare const DriftSQLClient: typeof SQLClient;
1
+ //#region src/types.d.ts
2
+ interface QueryResult<T = any> {
3
+ rows: T[];
4
+ rowCount: number;
5
+ command?: string;
6
+ fields?: QueryField[];
7
+ }
8
+ interface QueryField {
9
+ name: string;
10
+ dataTypeID: number;
11
+ }
12
+ interface DatabaseDriver {
13
+ query<T = any>(sql: string, params?: any[]): Promise<QueryResult<T>>;
14
+ findFirst?(table: string, where?: Record<string, any>): Promise<QueryResult<any> | null>;
15
+ findMany?(table: string, options?: {
16
+ where?: Record<string, any>;
17
+ limit?: number;
18
+ offset?: number;
19
+ }): Promise<QueryResult<any>>;
20
+ insert?(table: string, data: Record<string, any>): Promise<QueryResult<any>>;
21
+ update?(table: string, data: Record<string, any>, where: Record<string, any>): Promise<QueryResult<any>>;
22
+ delete?(table: string, where: Record<string, any>): Promise<number>;
23
+ close(): Promise<void>;
24
+ }
25
+ interface PreparedStatement {
26
+ execute<T = any>(params?: any[]): Promise<QueryResult<T>>;
27
+ finalize(): Promise<void>;
28
+ }
29
+ declare class DatabaseError extends Error {
30
+ readonly driverType: string;
31
+ readonly originalError?: Error | undefined;
32
+ constructor(message: string, driverType: string, originalError?: Error | undefined);
33
+ }
34
+ declare class QueryError extends DatabaseError {
35
+ constructor(driverType: string, sql: string, originalError?: Error);
36
+ }
37
+ declare class ConnectionError extends DatabaseError {
38
+ constructor(driverType: string, originalError?: Error);
39
+ }
40
+ //#endregion
41
+ //#region src/utils/inspect.d.ts
42
+ interface InspectOptions {
43
+ driver: DatabaseDriver;
44
+ outputFile?: string;
45
+ }
46
+ //#endregion
47
+ //#region src/drivers/postgres.d.ts
48
+ interface PostgresDriverConfig {
49
+ connectionString: string;
50
+ max?: number;
51
+ idle_timeout?: number;
52
+ connect_timeout?: number;
53
+ }
54
+ declare class PostgresDriver implements DatabaseDriver {
55
+ private client;
56
+ findFirst?: (table: string, where?: Record<string, any>) => Promise<QueryResult<any> | null>;
57
+ findMany?: (table: string, options?: {
58
+ where?: Record<string, any>;
59
+ limit?: number;
60
+ offset?: number;
61
+ }) => Promise<QueryResult<any>>;
62
+ insert?: (table: string, data: Record<string, any>) => Promise<QueryResult<any>>;
63
+ update?: (table: string, data: Record<string, any>, where: Record<string, any>) => Promise<QueryResult<any>>;
64
+ delete?: (table: string, where: Record<string, any>) => Promise<number>;
65
+ constructor(config: PostgresDriverConfig);
66
+ query<T = any>(sql: string, params?: any[]): Promise<QueryResult<T>>;
67
+ close(): Promise<void>;
68
+ }
69
+ //#endregion
70
+ //#region src/drivers/helpers/postgres.d.ts
71
+ interface PostgresHelpers {
72
+ findFirst?(table: string, where?: Record<string, any>): Promise<QueryResult<any> | null>;
73
+ findMany?(table: string, options?: {
74
+ where?: Record<string, any>;
75
+ limit?: number;
76
+ offset?: number;
77
+ }): Promise<QueryResult<any>>;
78
+ insert?(table: string, data: Record<string, any>): Promise<QueryResult<any>>;
79
+ update?(table: string, data: Record<string, any>, where: Record<string, any>): Promise<QueryResult<any>>;
80
+ delete?(table: string, where: Record<string, any>): Promise<number>;
81
+ }
82
+ declare function createPostgresHelpers(driver: DatabaseDriver): PostgresHelpers;
83
+ //#endregion
84
+ //#region src/drivers/helpers/mysql.d.ts
85
+ interface MySQLHelpers {
86
+ findFirst?(table: string, where?: Record<string, any>): Promise<QueryResult<any> | null>;
87
+ findMany?(table: string, options?: {
88
+ where?: Record<string, any>;
89
+ limit?: number;
90
+ offset?: number;
91
+ }): Promise<QueryResult<any>>;
92
+ insert?(table: string, data: Record<string, any>): Promise<QueryResult<any>>;
93
+ update?(table: string, data: Record<string, any>, where: Record<string, any>): Promise<QueryResult<any>>;
94
+ delete?(table: string, where: Record<string, any>): Promise<number>;
95
+ }
96
+ declare function createMySQLHelpers(driver: DatabaseDriver): MySQLHelpers;
97
+ //#endregion
98
+ //#region src/drivers/helpers/sqlite.d.ts
99
+ interface SQLiteHelpers {
100
+ findFirst?(table: string, where?: Record<string, any>): Promise<QueryResult<any> | null>;
101
+ findMany?(table: string, options?: {
102
+ where?: Record<string, any>;
103
+ limit?: number;
104
+ offset?: number;
105
+ }): Promise<QueryResult<any>>;
106
+ insert?(table: string, data: Record<string, any>): Promise<QueryResult<any>>;
107
+ update?(table: string, data: Record<string, any>, where: Record<string, any>): Promise<QueryResult<any>>;
108
+ delete?(table: string, where: Record<string, any>): Promise<number>;
109
+ }
110
+ declare function createSQLiteHelpers(driver: DatabaseDriver): SQLiteHelpers;
111
+ //#endregion
112
+ //#region src/schema/types.d.ts
113
+ type ColumnType = 'serial' | 'bigserial' | 'integer' | 'bigint' | 'smallint' | 'text' | 'varchar' | 'char' | 'boolean' | 'timestamp' | 'timestamptz' | 'date' | 'time' | 'json' | 'jsonb' | 'uuid' | 'decimal' | 'numeric' | 'real' | 'double precision' | 'bytea';
114
+ interface ColumnDefinition {
115
+ name: string;
116
+ type: ColumnType;
117
+ length?: number;
118
+ precision?: number;
119
+ scale?: number;
120
+ primaryKey?: boolean;
121
+ notNull?: boolean;
122
+ unique?: boolean;
123
+ default?: string | number | boolean;
124
+ references?: {
125
+ table: string;
126
+ column: string;
127
+ onDelete?: 'CASCADE' | 'SET NULL' | 'RESTRICT' | 'NO ACTION';
128
+ onUpdate?: 'CASCADE' | 'SET NULL' | 'RESTRICT' | 'NO ACTION';
129
+ };
130
+ check?: string;
131
+ }
132
+ interface IndexDefinition {
133
+ name: string;
134
+ columns: string[];
135
+ unique?: boolean;
136
+ type?: 'btree' | 'hash' | 'gist' | 'gin';
137
+ }
138
+ interface TableDefinition {
139
+ name: string;
140
+ columns: ColumnDefinition[];
141
+ indexes?: IndexDefinition[];
142
+ primaryKey?: string[];
143
+ checks?: Array<{
144
+ name: string;
145
+ expression: string;
146
+ }>;
147
+ }
148
+ interface Migration {
149
+ version: string;
150
+ name: string;
151
+ up: string[];
152
+ down: string[];
153
+ }
154
+ type SQLDialect = 'postgres' | 'mysql' | 'sqlite';
155
+ //#endregion
156
+ //#region src/schema/column.d.ts
157
+ declare class Column {
158
+ private definition;
159
+ constructor(name: string, type: ColumnType);
160
+ length(len: number): this;
161
+ precision(p: number, s?: number): this;
162
+ primaryKey(): this;
163
+ notNull(): this;
164
+ unique(): this;
165
+ default(value: string | number | boolean): this;
166
+ references(table: string, column?: string): this;
167
+ onDelete(action: 'CASCADE' | 'SET NULL' | 'RESTRICT' | 'NO ACTION'): this;
168
+ onUpdate(action: 'CASCADE' | 'SET NULL' | 'RESTRICT' | 'NO ACTION'): this;
169
+ check(expression: string): this;
170
+ getDefinition(): ColumnDefinition;
171
+ }
172
+ declare function serial(name: string): Column;
173
+ declare function bigserial(name: string): Column;
174
+ declare function integer(name: string): Column;
175
+ declare function bigint(name: string): Column;
176
+ declare function smallint(name: string): Column;
177
+ declare function text(name: string): Column;
178
+ declare function varchar(name: string, length?: number): Column;
179
+ declare function char(name: string, length?: number): Column;
180
+ declare function boolean(name: string): Column;
181
+ declare function timestamp(name: string): Column;
182
+ declare function timestamptz(name: string): Column;
183
+ declare function date(name: string): Column;
184
+ declare function time(name: string): Column;
185
+ declare function json(name: string): Column;
186
+ declare function jsonb(name: string): Column;
187
+ declare function uuid(name: string): Column;
188
+ declare function decimal(name: string, precision?: number, scale?: number): Column;
189
+ declare function numeric(name: string, precision?: number, scale?: number): Column;
190
+ declare function real(name: string): Column;
191
+ declare function doublePrecision(name: string): Column;
192
+ declare function bytea(name: string): Column;
193
+ //#endregion
194
+ //#region src/schema/table.d.ts
195
+ declare class Table {
196
+ private definition;
197
+ constructor(name: string);
198
+ column(column: Column): this;
199
+ primaryKey(...columns: string[]): this;
200
+ index(name: string, columns: string[], options?: {
201
+ unique?: boolean;
202
+ type?: 'btree' | 'hash' | 'gist' | 'gin';
203
+ }): this;
204
+ unique(name: string, ...columns: string[]): this;
205
+ check(name: string, expression: string): this;
206
+ getDefinition(): TableDefinition;
207
+ }
208
+ declare function createTable(name: string, callback: (table: Table) => void): Table;
209
+ //#endregion
210
+ //#region src/schema/migration.d.ts
211
+ declare class MigrationBuilder {
212
+ private upStatements;
213
+ private downStatements;
214
+ private dialect;
215
+ constructor(dialect?: SQLDialect);
216
+ createTable(table: Table): this;
217
+ dropTable(tableName: string): this;
218
+ addColumn(tableName: string, columnSql: string): this;
219
+ dropColumn(tableName: string, columnName: string): this;
220
+ renameTable(oldName: string, newName: string): this;
221
+ raw(sql: string, downSql?: string): this;
222
+ build(version: string, name: string): Migration;
223
+ private getGenerator;
224
+ }
225
+ declare function createMigration(dialect?: SQLDialect): MigrationBuilder;
226
+ //#endregion
227
+ //#region src/schema/runner.d.ts
228
+ declare class MigrationRunner {
229
+ private client;
230
+ constructor(client: SQLClient);
231
+ ensureMigrationsTable(): Promise<void>;
232
+ getAppliedMigrations(): Promise<string[]>;
233
+ up(migration: Migration): Promise<void>;
234
+ down(migration: Migration): Promise<void>;
235
+ upAll(migrations: Migration[]): Promise<void>;
236
+ downAll(migrations: Migration[]): Promise<void>;
237
+ reset(migrations: Migration[]): Promise<void>;
238
+ }
239
+ //#endregion
240
+ //#region src/schema/differ.d.ts
241
+ interface SchemaChange {
242
+ type: 'create_table' | 'drop_table' | 'add_column' | 'drop_column' | 'modify_column' | 'create_index' | 'drop_index';
243
+ table: string;
244
+ details?: any;
245
+ }
246
+ declare class SchemaDiffer {
247
+ private dialect;
248
+ constructor(dialect?: SQLDialect);
249
+ detectChanges(oldSchema: TableDefinition[], newSchema: TableDefinition[]): SchemaChange[];
250
+ private detectColumnChanges;
251
+ private detectIndexChanges;
252
+ private hasColumnChanged;
253
+ generateMigration(changes: SchemaChange[], version: string, name: string): MigrationBuilder;
254
+ private generateColumnSQL;
255
+ private generateIndexSQL;
256
+ private formatDefault;
257
+ private getGenerator;
258
+ }
259
+ declare function detectChanges(oldSchema: TableDefinition[], newSchema: TableDefinition[], dialect?: SQLDialect): SchemaChange[];
260
+ declare function generateMigrationFromChanges(changes: SchemaChange[], version: string, name: string, dialect?: SQLDialect): MigrationBuilder;
261
+ //#endregion
262
+ //#region src/schema/snapshot.d.ts
263
+ interface SchemaSnapshot {
264
+ version: string;
265
+ timestamp: number;
266
+ tables: TableDefinition[];
267
+ }
268
+ declare class SnapshotManager {
269
+ private snapshotPath;
270
+ constructor(snapshotPath?: string);
271
+ save(tables: TableDefinition[]): Promise<void>;
272
+ load(): Promise<SchemaSnapshot | null>;
273
+ exists(): Promise<boolean>;
274
+ }
275
+ //#endregion
276
+ //#region src/schema/type-generator.d.ts
277
+ declare class TypeGenerator {
278
+ generateTypes(tables: TableDefinition[]): string;
279
+ private generateTableInterface;
280
+ private generateDatabaseInterface;
281
+ private columnToTypeScript;
282
+ private pascalCase;
283
+ writeToFile(tables: TableDefinition[], filePath: string): Promise<void>;
284
+ }
285
+ declare function generateTypesFromSchema(tables: TableDefinition[], outputPath: string): Promise<void>;
286
+ //#endregion
287
+ //#region src/schema/generators/postgres.d.ts
288
+ declare class PostgresGenerator {
289
+ generateCreateTable(table: TableDefinition): string;
290
+ generateDropTable(tableName: string): string;
291
+ private generateColumnDefinition;
292
+ private getColumnType;
293
+ private formatDefault;
294
+ private generateIndex;
295
+ }
296
+ //#endregion
297
+ //#region src/schema/generators/mysql.d.ts
298
+ declare class MySQLGenerator {
299
+ generateCreateTable(table: TableDefinition): string;
300
+ generateDropTable(tableName: string): string;
301
+ private generateColumnDefinition;
302
+ private getColumnType;
303
+ private formatDefault;
304
+ private generateIndex;
305
+ }
306
+ //#endregion
307
+ //#region src/schema/generators/sqlite.d.ts
308
+ declare class SQLiteGenerator {
309
+ generateCreateTable(table: TableDefinition): string;
310
+ generateDropTable(tableName: string): string;
311
+ private generateColumnDefinition;
312
+ private getColumnType;
313
+ private formatDefault;
314
+ private generateIndex;
315
+ }
316
+ //#endregion
317
+ //#region src/index.d.ts
318
+ interface ClientOptions<T extends DatabaseDriver = DatabaseDriver> {
319
+ driver: T;
320
+ fallbackDrivers?: DatabaseDriver[];
321
+ cacheTTL?: number;
322
+ }
323
+ declare class SQLClient<DT = any> {
324
+ private readonly primaryDriver;
325
+ private readonly fallbackDrivers;
326
+ private readonly queryCache;
327
+ private readonly cacheTTL;
328
+ private readonly maxCacheSize;
329
+ constructor(options: ClientOptions);
330
+ private isCacheValid;
331
+ private getCacheKey;
332
+ private maintainCacheSize;
333
+ private cacheResult;
334
+ private tryFallbackDrivers;
335
+ query<T = any>(sql: string, params?: any[]): Promise<QueryResult<T>>;
336
+ transaction<T>(callback: (client: SQLClient<DT>) => Promise<T>): Promise<T>;
337
+ prepare(sql: string): Promise<PreparedStatement>;
338
+ findFirst<K extends keyof DT>(table: K, where?: Partial<DT[K]>): Promise<DT[K] | null>;
339
+ findMany<K extends keyof DT>(table: K, options?: {
340
+ where?: Partial<DT[K]>;
341
+ limit?: number;
342
+ offset?: number;
343
+ }): Promise<DT[K][]>;
344
+ insert<K extends keyof DT>(table: K, data: Partial<DT[K]>): Promise<DT[K]>;
345
+ update<K extends keyof DT>(table: K, data: Partial<DT[K]>, where: Partial<DT[K]>): Promise<DT[K] | null>;
346
+ delete<K extends keyof DT>(table: K, where: Partial<DT[K]>): Promise<number>;
347
+ getDriver(): DatabaseDriver;
348
+ inspectDB(options?: InspectOptions): Promise<void>;
349
+ supportsTransactions(): boolean;
350
+ supportsPreparedStatements(): boolean;
351
+ clearCache(): void;
352
+ getCacheStats(): {
353
+ size: number;
354
+ ttl: number;
355
+ };
356
+ close(): Promise<void>;
357
+ }
358
+ declare const DriftSQLClient: typeof SQLClient;
359
+ //#endregion
360
+ export { ClientOptions, Column, ColumnDefinition, ColumnType, type ConnectionError, type DatabaseDriver, DriftSQLClient, IndexDefinition, Migration, MigrationBuilder, MigrationRunner, MySQLGenerator, MySQLHelpers, PostgresDriver, PostgresGenerator, PostgresHelpers, type QueryError, type QueryField, type QueryResult, SQLClient, SQLDialect, SQLiteGenerator, SQLiteHelpers, SchemaChange, SchemaDiffer, SchemaSnapshot, SnapshotManager, 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 };