drizzle-orm 0.33.0-8db0aa4 → 0.33.0-b921e79

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.
@@ -1,7 +1,7 @@
1
1
  import type { Field } from '@aws-sdk/client-rds-data';
2
2
  import { TypeHint } from '@aws-sdk/client-rds-data';
3
3
  import type { QueryTypingsValue } from "../../sql/sql.cjs";
4
- export declare function getValueFromDataApi(field: Field): string | number | boolean | string[] | Uint8Array | number[] | boolean[] | import("@aws-sdk/client-rds-data").ArrayValue[] | null;
4
+ export declare function getValueFromDataApi(field: Field): string | number | boolean | string[] | number[] | Uint8Array | boolean[] | import("@aws-sdk/client-rds-data").ArrayValue[] | null;
5
5
  export declare function typingsToAwsTypeHint(typings?: QueryTypingsValue): TypeHint | undefined;
6
6
  export declare function toValueParam(value: any, typings?: QueryTypingsValue): {
7
7
  value: Field;
@@ -1,7 +1,7 @@
1
1
  import type { Field } from '@aws-sdk/client-rds-data';
2
2
  import { TypeHint } from '@aws-sdk/client-rds-data';
3
3
  import type { QueryTypingsValue } from "../../sql/sql.js";
4
- export declare function getValueFromDataApi(field: Field): string | number | boolean | string[] | Uint8Array | number[] | boolean[] | import("@aws-sdk/client-rds-data").ArrayValue[] | null;
4
+ export declare function getValueFromDataApi(field: Field): string | number | boolean | string[] | number[] | Uint8Array | boolean[] | import("@aws-sdk/client-rds-data").ArrayValue[] | null;
5
5
  export declare function typingsToAwsTypeHint(typings?: QueryTypingsValue): TypeHint | undefined;
6
6
  export declare function toValueParam(value: any, typings?: QueryTypingsValue): {
7
7
  value: Field;
@@ -26,9 +26,10 @@ var import_react = require("react");
26
26
  async function readMigrationFiles({ journal, migrations }) {
27
27
  const migrationQueries = [];
28
28
  for await (const journalEntry of journal.entries) {
29
- const query = migrations[`m${journalEntry.idx.toString().padStart(4, "0")}`];
29
+ const name = `m${journalEntry.idx.toString().padStart(4, "0")}`;
30
+ const query = migrations[name];
30
31
  if (!query) {
31
- throw new Error(`Missing migration: ${journalEntry.tag}`);
32
+ throw new Error(`Missing migration: ${name}`);
32
33
  }
33
34
  try {
34
35
  const result = query.split("--> statement-breakpoint").map((it) => {
@@ -36,12 +37,11 @@ async function readMigrationFiles({ journal, migrations }) {
36
37
  });
37
38
  migrationQueries.push({
38
39
  sql: result,
39
- bps: journalEntry.breakpoints,
40
40
  folderMillis: journalEntry.when,
41
41
  hash: ""
42
42
  });
43
43
  } catch {
44
- throw new Error(`Failed to parse migration: ${journalEntry.tag}`);
44
+ throw new Error(`Failed to parse migration: ${name}`);
45
45
  }
46
46
  }
47
47
  return migrationQueries;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/expo-sqlite/migrator.ts"],"sourcesContent":["import { useEffect, useReducer } from 'react';\nimport type { MigrationMeta } from '~/migrator.ts';\nimport type { ExpoSQLiteDatabase } from './driver.ts';\n\ninterface MigrationConfig {\n\tjournal: {\n\t\tentries: { idx: number; when: number; tag: string; breakpoints: boolean }[];\n\t};\n\tmigrations: Record<string, string>;\n}\n\nasync function readMigrationFiles({ journal, migrations }: MigrationConfig): Promise<MigrationMeta[]> {\n\tconst migrationQueries: MigrationMeta[] = [];\n\n\tfor await (const journalEntry of journal.entries) {\n\t\tconst query = migrations[`m${journalEntry.idx.toString().padStart(4, '0')}`];\n\n\t\tif (!query) {\n\t\t\tthrow new Error(`Missing migration: ${journalEntry.tag}`);\n\t\t}\n\n\t\ttry {\n\t\t\tconst result = query.split('--> statement-breakpoint').map((it) => {\n\t\t\t\treturn it;\n\t\t\t});\n\n\t\t\tmigrationQueries.push({\n\t\t\t\tsql: result,\n\t\t\t\tbps: journalEntry.breakpoints,\n\t\t\t\tfolderMillis: journalEntry.when,\n\t\t\t\thash: '',\n\t\t\t});\n\t\t} catch {\n\t\t\tthrow new Error(`Failed to parse migration: ${journalEntry.tag}`);\n\t\t}\n\t}\n\n\treturn migrationQueries;\n}\n\nexport async function migrate<TSchema extends Record<string, unknown>>(\n\tdb: ExpoSQLiteDatabase<TSchema>,\n\tconfig: MigrationConfig,\n) {\n\tconst migrations = await readMigrationFiles(config);\n\treturn db.dialect.migrate(migrations, db.session);\n}\n\ninterface State {\n\tsuccess: boolean;\n\terror?: Error;\n}\n\ntype Action =\n\t| { type: 'migrating' }\n\t| { type: 'migrated'; payload: true }\n\t| { type: 'error'; payload: Error };\n\nexport const useMigrations = (db: ExpoSQLiteDatabase<any>, migrations: {\n\tjournal: {\n\t\tentries: { idx: number; when: number; tag: string; breakpoints: boolean }[];\n\t};\n\tmigrations: Record<string, string>;\n}): State => {\n\tconst initialState: State = {\n\t\tsuccess: false,\n\t\terror: undefined,\n\t};\n\n\tconst fetchReducer = (state: State, action: Action): State => {\n\t\tswitch (action.type) {\n\t\t\tcase 'migrating': {\n\t\t\t\treturn { ...initialState };\n\t\t\t}\n\t\t\tcase 'migrated': {\n\t\t\t\treturn { ...initialState, success: action.payload };\n\t\t\t}\n\t\t\tcase 'error': {\n\t\t\t\treturn { ...initialState, error: action.payload };\n\t\t\t}\n\t\t\tdefault: {\n\t\t\t\treturn state;\n\t\t\t}\n\t\t}\n\t};\n\n\tconst [state, dispatch] = useReducer(fetchReducer, initialState);\n\n\tuseEffect(() => {\n\t\tdispatch({ type: 'migrating' });\n\t\tmigrate(db, migrations as any).then(() => {\n\t\t\tdispatch({ type: 'migrated', payload: true });\n\t\t}).catch((error) => {\n\t\t\tdispatch({ type: 'error', payload: error as Error });\n\t\t});\n\t}, []);\n\n\treturn state;\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAsC;AAWtC,eAAe,mBAAmB,EAAE,SAAS,WAAW,GAA8C;AACrG,QAAM,mBAAoC,CAAC;AAE3C,mBAAiB,gBAAgB,QAAQ,SAAS;AACjD,UAAM,QAAQ,WAAW,IAAI,aAAa,IAAI,SAAS,EAAE,SAAS,GAAG,GAAG,CAAC,EAAE;AAE3E,QAAI,CAAC,OAAO;AACX,YAAM,IAAI,MAAM,sBAAsB,aAAa,GAAG,EAAE;AAAA,IACzD;AAEA,QAAI;AACH,YAAM,SAAS,MAAM,MAAM,0BAA0B,EAAE,IAAI,CAAC,OAAO;AAClE,eAAO;AAAA,MACR,CAAC;AAED,uBAAiB,KAAK;AAAA,QACrB,KAAK;AAAA,QACL,KAAK,aAAa;AAAA,QAClB,cAAc,aAAa;AAAA,QAC3B,MAAM;AAAA,MACP,CAAC;AAAA,IACF,QAAQ;AACP,YAAM,IAAI,MAAM,8BAA8B,aAAa,GAAG,EAAE;AAAA,IACjE;AAAA,EACD;AAEA,SAAO;AACR;AAEA,eAAsB,QACrB,IACA,QACC;AACD,QAAM,aAAa,MAAM,mBAAmB,MAAM;AAClD,SAAO,GAAG,QAAQ,QAAQ,YAAY,GAAG,OAAO;AACjD;AAYO,MAAM,gBAAgB,CAAC,IAA6B,eAK9C;AACZ,QAAM,eAAsB;AAAA,IAC3B,SAAS;AAAA,IACT,OAAO;AAAA,EACR;AAEA,QAAM,eAAe,CAACA,QAAc,WAA0B;AAC7D,YAAQ,OAAO,MAAM;AAAA,MACpB,KAAK,aAAa;AACjB,eAAO,EAAE,GAAG,aAAa;AAAA,MAC1B;AAAA,MACA,KAAK,YAAY;AAChB,eAAO,EAAE,GAAG,cAAc,SAAS,OAAO,QAAQ;AAAA,MACnD;AAAA,MACA,KAAK,SAAS;AACb,eAAO,EAAE,GAAG,cAAc,OAAO,OAAO,QAAQ;AAAA,MACjD;AAAA,MACA,SAAS;AACR,eAAOA;AAAA,MACR;AAAA,IACD;AAAA,EACD;AAEA,QAAM,CAAC,OAAO,QAAQ,QAAI,yBAAW,cAAc,YAAY;AAE/D,8BAAU,MAAM;AACf,aAAS,EAAE,MAAM,YAAY,CAAC;AAC9B,YAAQ,IAAI,UAAiB,EAAE,KAAK,MAAM;AACzC,eAAS,EAAE,MAAM,YAAY,SAAS,KAAK,CAAC;AAAA,IAC7C,CAAC,EAAE,MAAM,CAAC,UAAU;AACnB,eAAS,EAAE,MAAM,SAAS,SAAS,MAAe,CAAC;AAAA,IACpD,CAAC;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,SAAO;AACR;","names":["state"]}
1
+ {"version":3,"sources":["../../src/expo-sqlite/migrator.ts"],"sourcesContent":["import { useEffect, useReducer } from 'react';\nimport type { MigrationMeta } from '~/migrator.ts';\nimport type { ExpoSQLiteDatabase } from './driver.ts';\n\ninterface MigrationConfig {\n\tjournal: {\n\t\tentries: { idx: number; when: number; tag: string; breakpoints: boolean }[];\n\t};\n\tmigrations: Record<string, string>;\n}\n\nasync function readMigrationFiles({ journal, migrations }: MigrationConfig): Promise<MigrationMeta[]> {\n\tconst migrationQueries: MigrationMeta[] = [];\n\n\tfor await (const journalEntry of journal.entries) {\n\t\tconst name = `m${journalEntry.idx.toString().padStart(4, '0')}`;\n\t\tconst query = migrations[name];\n\n\t\tif (!query) {\n\t\t\tthrow new Error(`Missing migration: ${name}`);\n\t\t}\n\n\t\ttry {\n\t\t\tconst result = query.split('--> statement-breakpoint').map((it) => {\n\t\t\t\treturn it;\n\t\t\t});\n\n\t\t\tmigrationQueries.push({\n\t\t\t\tsql: result,\n\t\t\t\tfolderMillis: journalEntry.when,\n\t\t\t\thash: '',\n\t\t\t});\n\t\t} catch {\n\t\t\tthrow new Error(`Failed to parse migration: ${name}`);\n\t\t}\n\t}\n\n\treturn migrationQueries;\n}\n\nexport async function migrate<TSchema extends Record<string, unknown>>(\n\tdb: ExpoSQLiteDatabase<TSchema>,\n\tconfig: MigrationConfig,\n) {\n\tconst migrations = await readMigrationFiles(config);\n\treturn db.dialect.migrate(migrations, db.session);\n}\n\ninterface State {\n\tsuccess: boolean;\n\terror?: Error;\n}\n\ntype Action =\n\t| { type: 'migrating' }\n\t| { type: 'migrated'; payload: true }\n\t| { type: 'error'; payload: Error };\n\nexport const useMigrations = (db: ExpoSQLiteDatabase<any>, migrations: {\n\tjournal: {\n\t\tentries: { idx: number; when: number; tag: string; breakpoints: boolean }[];\n\t};\n\tmigrations: Record<string, string>;\n}): State => {\n\tconst initialState: State = {\n\t\tsuccess: false,\n\t\terror: undefined,\n\t};\n\n\tconst fetchReducer = (state: State, action: Action): State => {\n\t\tswitch (action.type) {\n\t\t\tcase 'migrating': {\n\t\t\t\treturn { ...initialState };\n\t\t\t}\n\t\t\tcase 'migrated': {\n\t\t\t\treturn { ...initialState, success: action.payload };\n\t\t\t}\n\t\t\tcase 'error': {\n\t\t\t\treturn { ...initialState, error: action.payload };\n\t\t\t}\n\t\t\tdefault: {\n\t\t\t\treturn state;\n\t\t\t}\n\t\t}\n\t};\n\n\tconst [state, dispatch] = useReducer(fetchReducer, initialState);\n\n\tuseEffect(() => {\n\t\tdispatch({ type: 'migrating' });\n\t\tmigrate(db, migrations as any).then(() => {\n\t\t\tdispatch({ type: 'migrated', payload: true });\n\t\t}).catch((error) => {\n\t\t\tdispatch({ type: 'error', payload: error as Error });\n\t\t});\n\t}, []);\n\n\treturn state;\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAsC;AAWtC,eAAe,mBAAmB,EAAE,SAAS,WAAW,GAA8C;AACrG,QAAM,mBAAoC,CAAC;AAE3C,mBAAiB,gBAAgB,QAAQ,SAAS;AACjD,UAAM,OAAO,IAAI,aAAa,IAAI,SAAS,EAAE,SAAS,GAAG,GAAG,CAAC;AAC7D,UAAM,QAAQ,WAAW,IAAI;AAE7B,QAAI,CAAC,OAAO;AACX,YAAM,IAAI,MAAM,sBAAsB,IAAI,EAAE;AAAA,IAC7C;AAEA,QAAI;AACH,YAAM,SAAS,MAAM,MAAM,0BAA0B,EAAE,IAAI,CAAC,OAAO;AAClE,eAAO;AAAA,MACR,CAAC;AAED,uBAAiB,KAAK;AAAA,QACrB,KAAK;AAAA,QACL,cAAc,aAAa;AAAA,QAC3B,MAAM;AAAA,MACP,CAAC;AAAA,IACF,QAAQ;AACP,YAAM,IAAI,MAAM,8BAA8B,IAAI,EAAE;AAAA,IACrD;AAAA,EACD;AAEA,SAAO;AACR;AAEA,eAAsB,QACrB,IACA,QACC;AACD,QAAM,aAAa,MAAM,mBAAmB,MAAM;AAClD,SAAO,GAAG,QAAQ,QAAQ,YAAY,GAAG,OAAO;AACjD;AAYO,MAAM,gBAAgB,CAAC,IAA6B,eAK9C;AACZ,QAAM,eAAsB;AAAA,IAC3B,SAAS;AAAA,IACT,OAAO;AAAA,EACR;AAEA,QAAM,eAAe,CAACA,QAAc,WAA0B;AAC7D,YAAQ,OAAO,MAAM;AAAA,MACpB,KAAK,aAAa;AACjB,eAAO,EAAE,GAAG,aAAa;AAAA,MAC1B;AAAA,MACA,KAAK,YAAY;AAChB,eAAO,EAAE,GAAG,cAAc,SAAS,OAAO,QAAQ;AAAA,MACnD;AAAA,MACA,KAAK,SAAS;AACb,eAAO,EAAE,GAAG,cAAc,OAAO,OAAO,QAAQ;AAAA,MACjD;AAAA,MACA,SAAS;AACR,eAAOA;AAAA,MACR;AAAA,IACD;AAAA,EACD;AAEA,QAAM,CAAC,OAAO,QAAQ,QAAI,yBAAW,cAAc,YAAY;AAE/D,8BAAU,MAAM;AACf,aAAS,EAAE,MAAM,YAAY,CAAC;AAC9B,YAAQ,IAAI,UAAiB,EAAE,KAAK,MAAM;AACzC,eAAS,EAAE,MAAM,YAAY,SAAS,KAAK,CAAC;AAAA,IAC7C,CAAC,EAAE,MAAM,CAAC,UAAU;AACnB,eAAS,EAAE,MAAM,SAAS,SAAS,MAAe,CAAC;AAAA,IACpD,CAAC;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,SAAO;AACR;","names":["state"]}
@@ -2,9 +2,10 @@ import { useEffect, useReducer } from "react";
2
2
  async function readMigrationFiles({ journal, migrations }) {
3
3
  const migrationQueries = [];
4
4
  for await (const journalEntry of journal.entries) {
5
- const query = migrations[`m${journalEntry.idx.toString().padStart(4, "0")}`];
5
+ const name = `m${journalEntry.idx.toString().padStart(4, "0")}`;
6
+ const query = migrations[name];
6
7
  if (!query) {
7
- throw new Error(`Missing migration: ${journalEntry.tag}`);
8
+ throw new Error(`Missing migration: ${name}`);
8
9
  }
9
10
  try {
10
11
  const result = query.split("--> statement-breakpoint").map((it) => {
@@ -12,12 +13,11 @@ async function readMigrationFiles({ journal, migrations }) {
12
13
  });
13
14
  migrationQueries.push({
14
15
  sql: result,
15
- bps: journalEntry.breakpoints,
16
16
  folderMillis: journalEntry.when,
17
17
  hash: ""
18
18
  });
19
19
  } catch {
20
- throw new Error(`Failed to parse migration: ${journalEntry.tag}`);
20
+ throw new Error(`Failed to parse migration: ${name}`);
21
21
  }
22
22
  }
23
23
  return migrationQueries;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/expo-sqlite/migrator.ts"],"sourcesContent":["import { useEffect, useReducer } from 'react';\nimport type { MigrationMeta } from '~/migrator.ts';\nimport type { ExpoSQLiteDatabase } from './driver.ts';\n\ninterface MigrationConfig {\n\tjournal: {\n\t\tentries: { idx: number; when: number; tag: string; breakpoints: boolean }[];\n\t};\n\tmigrations: Record<string, string>;\n}\n\nasync function readMigrationFiles({ journal, migrations }: MigrationConfig): Promise<MigrationMeta[]> {\n\tconst migrationQueries: MigrationMeta[] = [];\n\n\tfor await (const journalEntry of journal.entries) {\n\t\tconst query = migrations[`m${journalEntry.idx.toString().padStart(4, '0')}`];\n\n\t\tif (!query) {\n\t\t\tthrow new Error(`Missing migration: ${journalEntry.tag}`);\n\t\t}\n\n\t\ttry {\n\t\t\tconst result = query.split('--> statement-breakpoint').map((it) => {\n\t\t\t\treturn it;\n\t\t\t});\n\n\t\t\tmigrationQueries.push({\n\t\t\t\tsql: result,\n\t\t\t\tbps: journalEntry.breakpoints,\n\t\t\t\tfolderMillis: journalEntry.when,\n\t\t\t\thash: '',\n\t\t\t});\n\t\t} catch {\n\t\t\tthrow new Error(`Failed to parse migration: ${journalEntry.tag}`);\n\t\t}\n\t}\n\n\treturn migrationQueries;\n}\n\nexport async function migrate<TSchema extends Record<string, unknown>>(\n\tdb: ExpoSQLiteDatabase<TSchema>,\n\tconfig: MigrationConfig,\n) {\n\tconst migrations = await readMigrationFiles(config);\n\treturn db.dialect.migrate(migrations, db.session);\n}\n\ninterface State {\n\tsuccess: boolean;\n\terror?: Error;\n}\n\ntype Action =\n\t| { type: 'migrating' }\n\t| { type: 'migrated'; payload: true }\n\t| { type: 'error'; payload: Error };\n\nexport const useMigrations = (db: ExpoSQLiteDatabase<any>, migrations: {\n\tjournal: {\n\t\tentries: { idx: number; when: number; tag: string; breakpoints: boolean }[];\n\t};\n\tmigrations: Record<string, string>;\n}): State => {\n\tconst initialState: State = {\n\t\tsuccess: false,\n\t\terror: undefined,\n\t};\n\n\tconst fetchReducer = (state: State, action: Action): State => {\n\t\tswitch (action.type) {\n\t\t\tcase 'migrating': {\n\t\t\t\treturn { ...initialState };\n\t\t\t}\n\t\t\tcase 'migrated': {\n\t\t\t\treturn { ...initialState, success: action.payload };\n\t\t\t}\n\t\t\tcase 'error': {\n\t\t\t\treturn { ...initialState, error: action.payload };\n\t\t\t}\n\t\t\tdefault: {\n\t\t\t\treturn state;\n\t\t\t}\n\t\t}\n\t};\n\n\tconst [state, dispatch] = useReducer(fetchReducer, initialState);\n\n\tuseEffect(() => {\n\t\tdispatch({ type: 'migrating' });\n\t\tmigrate(db, migrations as any).then(() => {\n\t\t\tdispatch({ type: 'migrated', payload: true });\n\t\t}).catch((error) => {\n\t\t\tdispatch({ type: 'error', payload: error as Error });\n\t\t});\n\t}, []);\n\n\treturn state;\n};\n"],"mappings":"AAAA,SAAS,WAAW,kBAAkB;AAWtC,eAAe,mBAAmB,EAAE,SAAS,WAAW,GAA8C;AACrG,QAAM,mBAAoC,CAAC;AAE3C,mBAAiB,gBAAgB,QAAQ,SAAS;AACjD,UAAM,QAAQ,WAAW,IAAI,aAAa,IAAI,SAAS,EAAE,SAAS,GAAG,GAAG,CAAC,EAAE;AAE3E,QAAI,CAAC,OAAO;AACX,YAAM,IAAI,MAAM,sBAAsB,aAAa,GAAG,EAAE;AAAA,IACzD;AAEA,QAAI;AACH,YAAM,SAAS,MAAM,MAAM,0BAA0B,EAAE,IAAI,CAAC,OAAO;AAClE,eAAO;AAAA,MACR,CAAC;AAED,uBAAiB,KAAK;AAAA,QACrB,KAAK;AAAA,QACL,KAAK,aAAa;AAAA,QAClB,cAAc,aAAa;AAAA,QAC3B,MAAM;AAAA,MACP,CAAC;AAAA,IACF,QAAQ;AACP,YAAM,IAAI,MAAM,8BAA8B,aAAa,GAAG,EAAE;AAAA,IACjE;AAAA,EACD;AAEA,SAAO;AACR;AAEA,eAAsB,QACrB,IACA,QACC;AACD,QAAM,aAAa,MAAM,mBAAmB,MAAM;AAClD,SAAO,GAAG,QAAQ,QAAQ,YAAY,GAAG,OAAO;AACjD;AAYO,MAAM,gBAAgB,CAAC,IAA6B,eAK9C;AACZ,QAAM,eAAsB;AAAA,IAC3B,SAAS;AAAA,IACT,OAAO;AAAA,EACR;AAEA,QAAM,eAAe,CAACA,QAAc,WAA0B;AAC7D,YAAQ,OAAO,MAAM;AAAA,MACpB,KAAK,aAAa;AACjB,eAAO,EAAE,GAAG,aAAa;AAAA,MAC1B;AAAA,MACA,KAAK,YAAY;AAChB,eAAO,EAAE,GAAG,cAAc,SAAS,OAAO,QAAQ;AAAA,MACnD;AAAA,MACA,KAAK,SAAS;AACb,eAAO,EAAE,GAAG,cAAc,OAAO,OAAO,QAAQ;AAAA,MACjD;AAAA,MACA,SAAS;AACR,eAAOA;AAAA,MACR;AAAA,IACD;AAAA,EACD;AAEA,QAAM,CAAC,OAAO,QAAQ,IAAI,WAAW,cAAc,YAAY;AAE/D,YAAU,MAAM;AACf,aAAS,EAAE,MAAM,YAAY,CAAC;AAC9B,YAAQ,IAAI,UAAiB,EAAE,KAAK,MAAM;AACzC,eAAS,EAAE,MAAM,YAAY,SAAS,KAAK,CAAC;AAAA,IAC7C,CAAC,EAAE,MAAM,CAAC,UAAU;AACnB,eAAS,EAAE,MAAM,SAAS,SAAS,MAAe,CAAC;AAAA,IACpD,CAAC;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,SAAO;AACR;","names":["state"]}
1
+ {"version":3,"sources":["../../src/expo-sqlite/migrator.ts"],"sourcesContent":["import { useEffect, useReducer } from 'react';\nimport type { MigrationMeta } from '~/migrator.ts';\nimport type { ExpoSQLiteDatabase } from './driver.ts';\n\ninterface MigrationConfig {\n\tjournal: {\n\t\tentries: { idx: number; when: number; tag: string; breakpoints: boolean }[];\n\t};\n\tmigrations: Record<string, string>;\n}\n\nasync function readMigrationFiles({ journal, migrations }: MigrationConfig): Promise<MigrationMeta[]> {\n\tconst migrationQueries: MigrationMeta[] = [];\n\n\tfor await (const journalEntry of journal.entries) {\n\t\tconst name = `m${journalEntry.idx.toString().padStart(4, '0')}`;\n\t\tconst query = migrations[name];\n\n\t\tif (!query) {\n\t\t\tthrow new Error(`Missing migration: ${name}`);\n\t\t}\n\n\t\ttry {\n\t\t\tconst result = query.split('--> statement-breakpoint').map((it) => {\n\t\t\t\treturn it;\n\t\t\t});\n\n\t\t\tmigrationQueries.push({\n\t\t\t\tsql: result,\n\t\t\t\tfolderMillis: journalEntry.when,\n\t\t\t\thash: '',\n\t\t\t});\n\t\t} catch {\n\t\t\tthrow new Error(`Failed to parse migration: ${name}`);\n\t\t}\n\t}\n\n\treturn migrationQueries;\n}\n\nexport async function migrate<TSchema extends Record<string, unknown>>(\n\tdb: ExpoSQLiteDatabase<TSchema>,\n\tconfig: MigrationConfig,\n) {\n\tconst migrations = await readMigrationFiles(config);\n\treturn db.dialect.migrate(migrations, db.session);\n}\n\ninterface State {\n\tsuccess: boolean;\n\terror?: Error;\n}\n\ntype Action =\n\t| { type: 'migrating' }\n\t| { type: 'migrated'; payload: true }\n\t| { type: 'error'; payload: Error };\n\nexport const useMigrations = (db: ExpoSQLiteDatabase<any>, migrations: {\n\tjournal: {\n\t\tentries: { idx: number; when: number; tag: string; breakpoints: boolean }[];\n\t};\n\tmigrations: Record<string, string>;\n}): State => {\n\tconst initialState: State = {\n\t\tsuccess: false,\n\t\terror: undefined,\n\t};\n\n\tconst fetchReducer = (state: State, action: Action): State => {\n\t\tswitch (action.type) {\n\t\t\tcase 'migrating': {\n\t\t\t\treturn { ...initialState };\n\t\t\t}\n\t\t\tcase 'migrated': {\n\t\t\t\treturn { ...initialState, success: action.payload };\n\t\t\t}\n\t\t\tcase 'error': {\n\t\t\t\treturn { ...initialState, error: action.payload };\n\t\t\t}\n\t\t\tdefault: {\n\t\t\t\treturn state;\n\t\t\t}\n\t\t}\n\t};\n\n\tconst [state, dispatch] = useReducer(fetchReducer, initialState);\n\n\tuseEffect(() => {\n\t\tdispatch({ type: 'migrating' });\n\t\tmigrate(db, migrations as any).then(() => {\n\t\t\tdispatch({ type: 'migrated', payload: true });\n\t\t}).catch((error) => {\n\t\t\tdispatch({ type: 'error', payload: error as Error });\n\t\t});\n\t}, []);\n\n\treturn state;\n};\n"],"mappings":"AAAA,SAAS,WAAW,kBAAkB;AAWtC,eAAe,mBAAmB,EAAE,SAAS,WAAW,GAA8C;AACrG,QAAM,mBAAoC,CAAC;AAE3C,mBAAiB,gBAAgB,QAAQ,SAAS;AACjD,UAAM,OAAO,IAAI,aAAa,IAAI,SAAS,EAAE,SAAS,GAAG,GAAG,CAAC;AAC7D,UAAM,QAAQ,WAAW,IAAI;AAE7B,QAAI,CAAC,OAAO;AACX,YAAM,IAAI,MAAM,sBAAsB,IAAI,EAAE;AAAA,IAC7C;AAEA,QAAI;AACH,YAAM,SAAS,MAAM,MAAM,0BAA0B,EAAE,IAAI,CAAC,OAAO;AAClE,eAAO;AAAA,MACR,CAAC;AAED,uBAAiB,KAAK;AAAA,QACrB,KAAK;AAAA,QACL,cAAc,aAAa;AAAA,QAC3B,MAAM;AAAA,MACP,CAAC;AAAA,IACF,QAAQ;AACP,YAAM,IAAI,MAAM,8BAA8B,IAAI,EAAE;AAAA,IACrD;AAAA,EACD;AAEA,SAAO;AACR;AAEA,eAAsB,QACrB,IACA,QACC;AACD,QAAM,aAAa,MAAM,mBAAmB,MAAM;AAClD,SAAO,GAAG,QAAQ,QAAQ,YAAY,GAAG,OAAO;AACjD;AAYO,MAAM,gBAAgB,CAAC,IAA6B,eAK9C;AACZ,QAAM,eAAsB;AAAA,IAC3B,SAAS;AAAA,IACT,OAAO;AAAA,EACR;AAEA,QAAM,eAAe,CAACA,QAAc,WAA0B;AAC7D,YAAQ,OAAO,MAAM;AAAA,MACpB,KAAK,aAAa;AACjB,eAAO,EAAE,GAAG,aAAa;AAAA,MAC1B;AAAA,MACA,KAAK,YAAY;AAChB,eAAO,EAAE,GAAG,cAAc,SAAS,OAAO,QAAQ;AAAA,MACnD;AAAA,MACA,KAAK,SAAS;AACb,eAAO,EAAE,GAAG,cAAc,OAAO,OAAO,QAAQ;AAAA,MACjD;AAAA,MACA,SAAS;AACR,eAAOA;AAAA,MACR;AAAA,IACD;AAAA,EACD;AAEA,QAAM,CAAC,OAAO,QAAQ,IAAI,WAAW,cAAc,YAAY;AAE/D,YAAU,MAAM;AACf,aAAS,EAAE,MAAM,YAAY,CAAC;AAC9B,YAAQ,IAAI,UAAiB,EAAE,KAAK,MAAM;AACzC,eAAS,EAAE,MAAM,YAAY,SAAS,KAAK,CAAC;AAAA,IAC7C,CAAC,EAAE,MAAM,CAAC,UAAU;AACnB,eAAS,EAAE,MAAM,SAAS,SAAS,MAAe,CAAC;AAAA,IACpD,CAAC;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,SAAO;AACR;","names":["state"]}
package/index.cjs CHANGED
@@ -22,7 +22,6 @@ __reExport(src_exports, require("./entity.cjs"), module.exports);
22
22
  __reExport(src_exports, require("./errors.cjs"), module.exports);
23
23
  __reExport(src_exports, require("./expressions.cjs"), module.exports);
24
24
  __reExport(src_exports, require("./logger.cjs"), module.exports);
25
- __reExport(src_exports, require("./monodriver.cjs"), module.exports);
26
25
  __reExport(src_exports, require("./operations.cjs"), module.exports);
27
26
  __reExport(src_exports, require("./query-promise.cjs"), module.exports);
28
27
  __reExport(src_exports, require("./relations.cjs"), module.exports);
@@ -40,7 +39,6 @@ __reExport(src_exports, require("./view-common.cjs"), module.exports);
40
39
  ...require("./errors.cjs"),
41
40
  ...require("./expressions.cjs"),
42
41
  ...require("./logger.cjs"),
43
- ...require("./monodriver.cjs"),
44
42
  ...require("./operations.cjs"),
45
43
  ...require("./query-promise.cjs"),
46
44
  ...require("./relations.cjs"),
package/index.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["export * from './alias.ts';\nexport * from './column-builder.ts';\nexport * from './column.ts';\nexport * from './entity.ts';\nexport * from './errors.ts';\nexport * from './expressions.ts';\nexport * from './logger.ts';\nexport * from './monodriver.ts';\nexport * from './operations.ts';\nexport * from './query-promise.ts';\nexport * from './relations.ts';\nexport * from './sql/index.ts';\nexport * from './subquery.ts';\nexport * from './table.ts';\nexport * from './utils.ts';\nexport * from './view-common.ts';\n"],"mappings":";;;;;;;;;;;;;;;AAAA;AAAA;AAAA,wBAAc,uBAAd;AACA,wBAAc,gCADd;AAEA,wBAAc,wBAFd;AAGA,wBAAc,wBAHd;AAIA,wBAAc,wBAJd;AAKA,wBAAc,6BALd;AAMA,wBAAc,wBANd;AAOA,wBAAc,4BAPd;AAQA,wBAAc,4BARd;AASA,wBAAc,+BATd;AAUA,wBAAc,2BAVd;AAWA,wBAAc,2BAXd;AAYA,wBAAc,0BAZd;AAaA,wBAAc,uBAbd;AAcA,wBAAc,uBAdd;AAeA,wBAAc,6BAfd;","names":[]}
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["export * from './alias.ts';\nexport * from './column-builder.ts';\nexport * from './column.ts';\nexport * from './entity.ts';\nexport * from './errors.ts';\nexport * from './expressions.ts';\nexport * from './logger.ts';\nexport * from './operations.ts';\nexport * from './query-promise.ts';\nexport * from './relations.ts';\nexport * from './sql/index.ts';\nexport * from './subquery.ts';\nexport * from './table.ts';\nexport * from './utils.ts';\nexport * from './view-common.ts';\n"],"mappings":";;;;;;;;;;;;;;;AAAA;AAAA;AAAA,wBAAc,uBAAd;AACA,wBAAc,gCADd;AAEA,wBAAc,wBAFd;AAGA,wBAAc,wBAHd;AAIA,wBAAc,wBAJd;AAKA,wBAAc,6BALd;AAMA,wBAAc,wBANd;AAOA,wBAAc,4BAPd;AAQA,wBAAc,+BARd;AASA,wBAAc,2BATd;AAUA,wBAAc,2BAVd;AAWA,wBAAc,0BAXd;AAYA,wBAAc,uBAZd;AAaA,wBAAc,uBAbd;AAcA,wBAAc,6BAdd;","names":[]}
package/index.d.cts CHANGED
@@ -5,7 +5,6 @@ export * from "./entity.cjs";
5
5
  export * from "./errors.cjs";
6
6
  export * from "./expressions.cjs";
7
7
  export * from "./logger.cjs";
8
- export * from "./monodriver.cjs";
9
8
  export * from "./operations.cjs";
10
9
  export * from "./query-promise.cjs";
11
10
  export * from "./relations.cjs";
package/index.d.ts CHANGED
@@ -5,7 +5,6 @@ export * from "./entity.js";
5
5
  export * from "./errors.js";
6
6
  export * from "./expressions.js";
7
7
  export * from "./logger.js";
8
- export * from "./monodriver.js";
9
8
  export * from "./operations.js";
10
9
  export * from "./query-promise.js";
11
10
  export * from "./relations.js";
package/index.js CHANGED
@@ -5,7 +5,6 @@ export * from "./entity.js";
5
5
  export * from "./errors.js";
6
6
  export * from "./expressions.js";
7
7
  export * from "./logger.js";
8
- export * from "./monodriver.js";
9
8
  export * from "./operations.js";
10
9
  export * from "./query-promise.js";
11
10
  export * from "./relations.js";
package/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["export * from './alias.ts';\nexport * from './column-builder.ts';\nexport * from './column.ts';\nexport * from './entity.ts';\nexport * from './errors.ts';\nexport * from './expressions.ts';\nexport * from './logger.ts';\nexport * from './monodriver.ts';\nexport * from './operations.ts';\nexport * from './query-promise.ts';\nexport * from './relations.ts';\nexport * from './sql/index.ts';\nexport * from './subquery.ts';\nexport * from './table.ts';\nexport * from './utils.ts';\nexport * from './view-common.ts';\n"],"mappings":"AAAA,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;","names":[]}
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["export * from './alias.ts';\nexport * from './column-builder.ts';\nexport * from './column.ts';\nexport * from './entity.ts';\nexport * from './errors.ts';\nexport * from './expressions.ts';\nexport * from './logger.ts';\nexport * from './operations.ts';\nexport * from './query-promise.ts';\nexport * from './relations.ts';\nexport * from './sql/index.ts';\nexport * from './subquery.ts';\nexport * from './table.ts';\nexport * from './utils.ts';\nexport * from './view-common.ts';\n"],"mappings":"AAAA,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;","names":[]}
package/migrator.cjs CHANGED
@@ -1,9 +1,7 @@
1
1
  "use strict";
2
- var __create = Object.create;
3
2
  var __defProp = Object.defineProperty;
4
3
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
4
  var __getOwnPropNames = Object.getOwnPropertyNames;
6
- var __getProtoOf = Object.getPrototypeOf;
7
5
  var __hasOwnProp = Object.prototype.hasOwnProperty;
8
6
  var __export = (target, all) => {
9
7
  for (var name in all)
@@ -17,58 +15,54 @@ var __copyProps = (to, from, except, desc) => {
17
15
  }
18
16
  return to;
19
17
  };
20
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
- // If the importer is in node compatibility mode or this is not an ESM
22
- // file that has been converted to a CommonJS file using a Babel-
23
- // compatible transform (i.e. "__esModule" has not been set), then set
24
- // "default" to the CommonJS "module.exports" for node compatibility.
25
- isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
- mod
27
- ));
28
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
19
  var migrator_exports = {};
30
20
  __export(migrator_exports, {
31
21
  readMigrationFiles: () => readMigrationFiles
32
22
  });
33
23
  module.exports = __toCommonJS(migrator_exports);
34
- var import_node_crypto = __toESM(require("node:crypto"), 1);
35
- var import_node_fs = __toESM(require("node:fs"), 1);
36
- var import_node_path = __toESM(require("node:path"), 1);
24
+ var import_node_crypto = require("node:crypto");
25
+ var import_node_fs = require("node:fs");
26
+ var import_node_path = require("node:path");
27
+ const timestampToMillis = (timestamp) => {
28
+ const year = timestamp.slice(0, 4);
29
+ const month = timestamp.slice(4, 6);
30
+ const day = timestamp.slice(6, 8);
31
+ const hr = timestamp.slice(8, 10);
32
+ const min = timestamp.slice(10, 12);
33
+ const sec = timestamp.slice(12, 14);
34
+ const isoString = `${year}-${month}-${day}T${hr}:${min}:${sec}.000Z`;
35
+ return +new Date(isoString);
36
+ };
37
37
  function readMigrationFiles(config) {
38
- let migrationFolderTo;
38
+ let outFolder;
39
39
  if (typeof config === "string") {
40
- const configAsString = import_node_fs.default.readFileSync(import_node_path.default.resolve(".", config), "utf8");
41
- const jsonConfig = JSON.parse(configAsString);
42
- migrationFolderTo = jsonConfig.out;
40
+ const kitConfig = JSON.parse(
41
+ (0, import_node_fs.readFileSync)((0, import_node_path.resolve)(".", config), "utf8")
42
+ );
43
+ outFolder = kitConfig.out;
43
44
  } else {
44
- migrationFolderTo = config.migrationsFolder;
45
+ outFolder = config.migrationsFolder;
45
46
  }
46
- if (!migrationFolderTo) {
47
+ if (!outFolder) {
47
48
  throw new Error("no migration folder defined");
48
49
  }
49
50
  const migrationQueries = [];
50
- const journalPath = `${migrationFolderTo}/meta/_journal.json`;
51
- if (!import_node_fs.default.existsSync(journalPath)) {
52
- throw new Error(`Can't find meta/_journal.json file`);
53
- }
54
- const journalAsString = import_node_fs.default.readFileSync(`${migrationFolderTo}/meta/_journal.json`).toString();
55
- const journal = JSON.parse(journalAsString);
56
- for (const journalEntry of journal.entries) {
57
- const migrationPath = `${migrationFolderTo}/${journalEntry.tag}.sql`;
58
- try {
59
- const query = import_node_fs.default.readFileSync(`${migrationFolderTo}/${journalEntry.tag}.sql`).toString();
60
- const result = query.split("--> statement-breakpoint").map((it) => {
61
- return it;
62
- });
63
- migrationQueries.push({
64
- sql: result,
65
- bps: journalEntry.breakpoints,
66
- folderMillis: journalEntry.when,
67
- hash: import_node_crypto.default.createHash("sha256").update(query).digest("hex")
68
- });
69
- } catch {
70
- throw new Error(`No file ${migrationPath} found in ${migrationFolderTo} folder`);
51
+ const migrationFolders = (0, import_node_fs.readdirSync)(outFolder).filter((it) => (0, import_node_fs.lstatSync)((0, import_node_path.join)(outFolder, it)).isDirectory());
52
+ for (const migrationFolder of migrationFolders) {
53
+ const sqlMigrationPath = (0, import_node_path.join)(outFolder, migrationFolder, "migration.sql");
54
+ if (!(0, import_node_fs.existsSync)(sqlMigrationPath)) {
55
+ console.error("SQL migration file does not exist:", sqlMigrationPath);
56
+ continue;
71
57
  }
58
+ const when = timestampToMillis(migrationFolder.slice(0, 14));
59
+ const query = (0, import_node_fs.readFileSync)(sqlMigrationPath, "utf8");
60
+ const result = query.split("--> statement-breakpoint");
61
+ migrationQueries.push({
62
+ sql: result,
63
+ folderMillis: when,
64
+ hash: (0, import_node_crypto.createHash)("sha256").update(query).digest("hex")
65
+ });
72
66
  }
73
67
  return migrationQueries;
74
68
  }
package/migrator.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/migrator.ts"],"sourcesContent":["import crypto from 'node:crypto';\nimport fs from 'node:fs';\nimport path from 'node:path';\n\nexport interface KitConfig {\n\tout: string;\n\tschema: string;\n}\n\nexport interface MigrationConfig {\n\tmigrationsFolder: string;\n\tmigrationsTable?: string;\n\tmigrationsSchema?: string;\n}\n\nexport interface MigrationMeta {\n\tsql: string[];\n\tfolderMillis: number;\n\thash: string;\n\tbps: boolean;\n}\n\nexport function readMigrationFiles(config: string | MigrationConfig): MigrationMeta[] {\n\tlet migrationFolderTo: string | undefined;\n\tif (typeof config === 'string') {\n\t\tconst configAsString = fs.readFileSync(path.resolve('.', config), 'utf8');\n\t\tconst jsonConfig = JSON.parse(configAsString) as KitConfig;\n\t\tmigrationFolderTo = jsonConfig.out;\n\t} else {\n\t\tmigrationFolderTo = config.migrationsFolder;\n\t}\n\n\tif (!migrationFolderTo) {\n\t\tthrow new Error('no migration folder defined');\n\t}\n\n\tconst migrationQueries: MigrationMeta[] = [];\n\n\tconst journalPath = `${migrationFolderTo}/meta/_journal.json`;\n\tif (!fs.existsSync(journalPath)) {\n\t\tthrow new Error(`Can't find meta/_journal.json file`);\n\t}\n\n\tconst journalAsString = fs.readFileSync(`${migrationFolderTo}/meta/_journal.json`).toString();\n\n\tconst journal = JSON.parse(journalAsString) as {\n\t\tentries: { idx: number; when: number; tag: string; breakpoints: boolean }[];\n\t};\n\n\tfor (const journalEntry of journal.entries) {\n\t\tconst migrationPath = `${migrationFolderTo}/${journalEntry.tag}.sql`;\n\n\t\ttry {\n\t\t\tconst query = fs.readFileSync(`${migrationFolderTo}/${journalEntry.tag}.sql`).toString();\n\n\t\t\tconst result = query.split('--> statement-breakpoint').map((it) => {\n\t\t\t\treturn it;\n\t\t\t});\n\n\t\t\tmigrationQueries.push({\n\t\t\t\tsql: result,\n\t\t\t\tbps: journalEntry.breakpoints,\n\t\t\t\tfolderMillis: journalEntry.when,\n\t\t\t\thash: crypto.createHash('sha256').update(query).digest('hex'),\n\t\t\t});\n\t\t} catch {\n\t\t\tthrow new Error(`No file ${migrationPath} found in ${migrationFolderTo} folder`);\n\t\t}\n\t}\n\n\treturn migrationQueries;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,yBAAmB;AACnB,qBAAe;AACf,uBAAiB;AAoBV,SAAS,mBAAmB,QAAmD;AACrF,MAAI;AACJ,MAAI,OAAO,WAAW,UAAU;AAC/B,UAAM,iBAAiB,eAAAA,QAAG,aAAa,iBAAAC,QAAK,QAAQ,KAAK,MAAM,GAAG,MAAM;AACxE,UAAM,aAAa,KAAK,MAAM,cAAc;AAC5C,wBAAoB,WAAW;AAAA,EAChC,OAAO;AACN,wBAAoB,OAAO;AAAA,EAC5B;AAEA,MAAI,CAAC,mBAAmB;AACvB,UAAM,IAAI,MAAM,6BAA6B;AAAA,EAC9C;AAEA,QAAM,mBAAoC,CAAC;AAE3C,QAAM,cAAc,GAAG,iBAAiB;AACxC,MAAI,CAAC,eAAAD,QAAG,WAAW,WAAW,GAAG;AAChC,UAAM,IAAI,MAAM,oCAAoC;AAAA,EACrD;AAEA,QAAM,kBAAkB,eAAAA,QAAG,aAAa,GAAG,iBAAiB,qBAAqB,EAAE,SAAS;AAE5F,QAAM,UAAU,KAAK,MAAM,eAAe;AAI1C,aAAW,gBAAgB,QAAQ,SAAS;AAC3C,UAAM,gBAAgB,GAAG,iBAAiB,IAAI,aAAa,GAAG;AAE9D,QAAI;AACH,YAAM,QAAQ,eAAAA,QAAG,aAAa,GAAG,iBAAiB,IAAI,aAAa,GAAG,MAAM,EAAE,SAAS;AAEvF,YAAM,SAAS,MAAM,MAAM,0BAA0B,EAAE,IAAI,CAAC,OAAO;AAClE,eAAO;AAAA,MACR,CAAC;AAED,uBAAiB,KAAK;AAAA,QACrB,KAAK;AAAA,QACL,KAAK,aAAa;AAAA,QAClB,cAAc,aAAa;AAAA,QAC3B,MAAM,mBAAAE,QAAO,WAAW,QAAQ,EAAE,OAAO,KAAK,EAAE,OAAO,KAAK;AAAA,MAC7D,CAAC;AAAA,IACF,QAAQ;AACP,YAAM,IAAI,MAAM,WAAW,aAAa,aAAa,iBAAiB,SAAS;AAAA,IAChF;AAAA,EACD;AAEA,SAAO;AACR;","names":["fs","path","crypto"]}
1
+ {"version":3,"sources":["../src/migrator.ts"],"sourcesContent":["import { createHash } from 'node:crypto';\nimport { existsSync, lstatSync, readdirSync, readFileSync } from 'node:fs';\nimport { join, resolve } from 'node:path';\n\nexport interface KitConfig {\n\tout: string;\n\tschema: string;\n}\n\nexport interface MigrationConfig {\n\tmigrationsFolder: string;\n\tmigrationsTable?: string;\n\tmigrationsSchema?: string;\n}\n\nexport interface MigrationMeta {\n\tsql: string[];\n\tfolderMillis: number;\n\thash: string;\n}\n\nconst timestampToMillis = (timestamp: string) => {\n\tconst year = timestamp.slice(0, 4);\n\tconst month = timestamp.slice(4, 6);\n\tconst day = timestamp.slice(6, 8);\n\tconst hr = timestamp.slice(8, 10);\n\tconst min = timestamp.slice(10, 12);\n\tconst sec = timestamp.slice(12, 14);\n\tconst isoString = `${year}-${month}-${day}T${hr}:${min}:${sec}.000Z`;\n\treturn +new Date(isoString);\n};\n\nexport function readMigrationFiles(\n\tconfig: string | MigrationConfig,\n): MigrationMeta[] {\n\tlet outFolder: string | undefined;\n\tif (typeof config === 'string') {\n\t\tconst kitConfig = JSON.parse(\n\t\t\treadFileSync(resolve('.', config), 'utf8'),\n\t\t) as KitConfig;\n\t\toutFolder = kitConfig.out;\n\t} else {\n\t\toutFolder = config.migrationsFolder;\n\t}\n\n\tif (!outFolder) {\n\t\tthrow new Error('no migration folder defined');\n\t}\n\n\tconst migrationQueries: MigrationMeta[] = [];\n\tconst migrationFolders = readdirSync(outFolder).filter((it) => lstatSync(join(outFolder, it)).isDirectory());\n\tfor (const migrationFolder of migrationFolders) {\n\t\tconst sqlMigrationPath = join(outFolder, migrationFolder, 'migration.sql');\n\t\tif (!existsSync(sqlMigrationPath)) {\n\t\t\tconsole.error('SQL migration file does not exist:', sqlMigrationPath);\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst when = timestampToMillis(migrationFolder.slice(0, 14));\n\n\t\tconst query = readFileSync(sqlMigrationPath, 'utf8');\n\t\tconst result = query.split('--> statement-breakpoint');\n\n\t\tmigrationQueries.push({\n\t\t\tsql: result,\n\t\t\tfolderMillis: when,\n\t\t\thash: createHash('sha256').update(query).digest('hex'),\n\t\t});\n\t}\n\n\treturn migrationQueries;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,yBAA2B;AAC3B,qBAAiE;AACjE,uBAA8B;AAmB9B,MAAM,oBAAoB,CAAC,cAAsB;AAChD,QAAM,OAAO,UAAU,MAAM,GAAG,CAAC;AACjC,QAAM,QAAQ,UAAU,MAAM,GAAG,CAAC;AAClC,QAAM,MAAM,UAAU,MAAM,GAAG,CAAC;AAChC,QAAM,KAAK,UAAU,MAAM,GAAG,EAAE;AAChC,QAAM,MAAM,UAAU,MAAM,IAAI,EAAE;AAClC,QAAM,MAAM,UAAU,MAAM,IAAI,EAAE;AAClC,QAAM,YAAY,GAAG,IAAI,IAAI,KAAK,IAAI,GAAG,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG;AAC7D,SAAO,CAAC,IAAI,KAAK,SAAS;AAC3B;AAEO,SAAS,mBACf,QACkB;AAClB,MAAI;AACJ,MAAI,OAAO,WAAW,UAAU;AAC/B,UAAM,YAAY,KAAK;AAAA,UACtB,iCAAa,0BAAQ,KAAK,MAAM,GAAG,MAAM;AAAA,IAC1C;AACA,gBAAY,UAAU;AAAA,EACvB,OAAO;AACN,gBAAY,OAAO;AAAA,EACpB;AAEA,MAAI,CAAC,WAAW;AACf,UAAM,IAAI,MAAM,6BAA6B;AAAA,EAC9C;AAEA,QAAM,mBAAoC,CAAC;AAC3C,QAAM,uBAAmB,4BAAY,SAAS,EAAE,OAAO,CAAC,WAAO,8BAAU,uBAAK,WAAW,EAAE,CAAC,EAAE,YAAY,CAAC;AAC3G,aAAW,mBAAmB,kBAAkB;AAC/C,UAAM,uBAAmB,uBAAK,WAAW,iBAAiB,eAAe;AACzE,QAAI,KAAC,2BAAW,gBAAgB,GAAG;AAClC,cAAQ,MAAM,sCAAsC,gBAAgB;AACpE;AAAA,IACD;AAEA,UAAM,OAAO,kBAAkB,gBAAgB,MAAM,GAAG,EAAE,CAAC;AAE3D,UAAM,YAAQ,6BAAa,kBAAkB,MAAM;AACnD,UAAM,SAAS,MAAM,MAAM,0BAA0B;AAErD,qBAAiB,KAAK;AAAA,MACrB,KAAK;AAAA,MACL,cAAc;AAAA,MACd,UAAM,+BAAW,QAAQ,EAAE,OAAO,KAAK,EAAE,OAAO,KAAK;AAAA,IACtD,CAAC;AAAA,EACF;AAEA,SAAO;AACR;","names":[]}
package/migrator.d.cts CHANGED
@@ -11,6 +11,5 @@ export interface MigrationMeta {
11
11
  sql: string[];
12
12
  folderMillis: number;
13
13
  hash: string;
14
- bps: boolean;
15
14
  }
16
15
  export declare function readMigrationFiles(config: string | MigrationConfig): MigrationMeta[];
package/migrator.d.ts CHANGED
@@ -11,6 +11,5 @@ export interface MigrationMeta {
11
11
  sql: string[];
12
12
  folderMillis: number;
13
13
  hash: string;
14
- bps: boolean;
15
14
  }
16
15
  export declare function readMigrationFiles(config: string | MigrationConfig): MigrationMeta[];
package/migrator.js CHANGED
@@ -1,41 +1,45 @@
1
- import crypto from "node:crypto";
2
- import fs from "node:fs";
3
- import path from "node:path";
1
+ import { createHash } from "node:crypto";
2
+ import { existsSync, lstatSync, readdirSync, readFileSync } from "node:fs";
3
+ import { join, resolve } from "node:path";
4
+ const timestampToMillis = (timestamp) => {
5
+ const year = timestamp.slice(0, 4);
6
+ const month = timestamp.slice(4, 6);
7
+ const day = timestamp.slice(6, 8);
8
+ const hr = timestamp.slice(8, 10);
9
+ const min = timestamp.slice(10, 12);
10
+ const sec = timestamp.slice(12, 14);
11
+ const isoString = `${year}-${month}-${day}T${hr}:${min}:${sec}.000Z`;
12
+ return +new Date(isoString);
13
+ };
4
14
  function readMigrationFiles(config) {
5
- let migrationFolderTo;
15
+ let outFolder;
6
16
  if (typeof config === "string") {
7
- const configAsString = fs.readFileSync(path.resolve(".", config), "utf8");
8
- const jsonConfig = JSON.parse(configAsString);
9
- migrationFolderTo = jsonConfig.out;
17
+ const kitConfig = JSON.parse(
18
+ readFileSync(resolve(".", config), "utf8")
19
+ );
20
+ outFolder = kitConfig.out;
10
21
  } else {
11
- migrationFolderTo = config.migrationsFolder;
22
+ outFolder = config.migrationsFolder;
12
23
  }
13
- if (!migrationFolderTo) {
24
+ if (!outFolder) {
14
25
  throw new Error("no migration folder defined");
15
26
  }
16
27
  const migrationQueries = [];
17
- const journalPath = `${migrationFolderTo}/meta/_journal.json`;
18
- if (!fs.existsSync(journalPath)) {
19
- throw new Error(`Can't find meta/_journal.json file`);
20
- }
21
- const journalAsString = fs.readFileSync(`${migrationFolderTo}/meta/_journal.json`).toString();
22
- const journal = JSON.parse(journalAsString);
23
- for (const journalEntry of journal.entries) {
24
- const migrationPath = `${migrationFolderTo}/${journalEntry.tag}.sql`;
25
- try {
26
- const query = fs.readFileSync(`${migrationFolderTo}/${journalEntry.tag}.sql`).toString();
27
- const result = query.split("--> statement-breakpoint").map((it) => {
28
- return it;
29
- });
30
- migrationQueries.push({
31
- sql: result,
32
- bps: journalEntry.breakpoints,
33
- folderMillis: journalEntry.when,
34
- hash: crypto.createHash("sha256").update(query).digest("hex")
35
- });
36
- } catch {
37
- throw new Error(`No file ${migrationPath} found in ${migrationFolderTo} folder`);
28
+ const migrationFolders = readdirSync(outFolder).filter((it) => lstatSync(join(outFolder, it)).isDirectory());
29
+ for (const migrationFolder of migrationFolders) {
30
+ const sqlMigrationPath = join(outFolder, migrationFolder, "migration.sql");
31
+ if (!existsSync(sqlMigrationPath)) {
32
+ console.error("SQL migration file does not exist:", sqlMigrationPath);
33
+ continue;
38
34
  }
35
+ const when = timestampToMillis(migrationFolder.slice(0, 14));
36
+ const query = readFileSync(sqlMigrationPath, "utf8");
37
+ const result = query.split("--> statement-breakpoint");
38
+ migrationQueries.push({
39
+ sql: result,
40
+ folderMillis: when,
41
+ hash: createHash("sha256").update(query).digest("hex")
42
+ });
39
43
  }
40
44
  return migrationQueries;
41
45
  }
package/migrator.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/migrator.ts"],"sourcesContent":["import crypto from 'node:crypto';\nimport fs from 'node:fs';\nimport path from 'node:path';\n\nexport interface KitConfig {\n\tout: string;\n\tschema: string;\n}\n\nexport interface MigrationConfig {\n\tmigrationsFolder: string;\n\tmigrationsTable?: string;\n\tmigrationsSchema?: string;\n}\n\nexport interface MigrationMeta {\n\tsql: string[];\n\tfolderMillis: number;\n\thash: string;\n\tbps: boolean;\n}\n\nexport function readMigrationFiles(config: string | MigrationConfig): MigrationMeta[] {\n\tlet migrationFolderTo: string | undefined;\n\tif (typeof config === 'string') {\n\t\tconst configAsString = fs.readFileSync(path.resolve('.', config), 'utf8');\n\t\tconst jsonConfig = JSON.parse(configAsString) as KitConfig;\n\t\tmigrationFolderTo = jsonConfig.out;\n\t} else {\n\t\tmigrationFolderTo = config.migrationsFolder;\n\t}\n\n\tif (!migrationFolderTo) {\n\t\tthrow new Error('no migration folder defined');\n\t}\n\n\tconst migrationQueries: MigrationMeta[] = [];\n\n\tconst journalPath = `${migrationFolderTo}/meta/_journal.json`;\n\tif (!fs.existsSync(journalPath)) {\n\t\tthrow new Error(`Can't find meta/_journal.json file`);\n\t}\n\n\tconst journalAsString = fs.readFileSync(`${migrationFolderTo}/meta/_journal.json`).toString();\n\n\tconst journal = JSON.parse(journalAsString) as {\n\t\tentries: { idx: number; when: number; tag: string; breakpoints: boolean }[];\n\t};\n\n\tfor (const journalEntry of journal.entries) {\n\t\tconst migrationPath = `${migrationFolderTo}/${journalEntry.tag}.sql`;\n\n\t\ttry {\n\t\t\tconst query = fs.readFileSync(`${migrationFolderTo}/${journalEntry.tag}.sql`).toString();\n\n\t\t\tconst result = query.split('--> statement-breakpoint').map((it) => {\n\t\t\t\treturn it;\n\t\t\t});\n\n\t\t\tmigrationQueries.push({\n\t\t\t\tsql: result,\n\t\t\t\tbps: journalEntry.breakpoints,\n\t\t\t\tfolderMillis: journalEntry.when,\n\t\t\t\thash: crypto.createHash('sha256').update(query).digest('hex'),\n\t\t\t});\n\t\t} catch {\n\t\t\tthrow new Error(`No file ${migrationPath} found in ${migrationFolderTo} folder`);\n\t\t}\n\t}\n\n\treturn migrationQueries;\n}\n"],"mappings":"AAAA,OAAO,YAAY;AACnB,OAAO,QAAQ;AACf,OAAO,UAAU;AAoBV,SAAS,mBAAmB,QAAmD;AACrF,MAAI;AACJ,MAAI,OAAO,WAAW,UAAU;AAC/B,UAAM,iBAAiB,GAAG,aAAa,KAAK,QAAQ,KAAK,MAAM,GAAG,MAAM;AACxE,UAAM,aAAa,KAAK,MAAM,cAAc;AAC5C,wBAAoB,WAAW;AAAA,EAChC,OAAO;AACN,wBAAoB,OAAO;AAAA,EAC5B;AAEA,MAAI,CAAC,mBAAmB;AACvB,UAAM,IAAI,MAAM,6BAA6B;AAAA,EAC9C;AAEA,QAAM,mBAAoC,CAAC;AAE3C,QAAM,cAAc,GAAG,iBAAiB;AACxC,MAAI,CAAC,GAAG,WAAW,WAAW,GAAG;AAChC,UAAM,IAAI,MAAM,oCAAoC;AAAA,EACrD;AAEA,QAAM,kBAAkB,GAAG,aAAa,GAAG,iBAAiB,qBAAqB,EAAE,SAAS;AAE5F,QAAM,UAAU,KAAK,MAAM,eAAe;AAI1C,aAAW,gBAAgB,QAAQ,SAAS;AAC3C,UAAM,gBAAgB,GAAG,iBAAiB,IAAI,aAAa,GAAG;AAE9D,QAAI;AACH,YAAM,QAAQ,GAAG,aAAa,GAAG,iBAAiB,IAAI,aAAa,GAAG,MAAM,EAAE,SAAS;AAEvF,YAAM,SAAS,MAAM,MAAM,0BAA0B,EAAE,IAAI,CAAC,OAAO;AAClE,eAAO;AAAA,MACR,CAAC;AAED,uBAAiB,KAAK;AAAA,QACrB,KAAK;AAAA,QACL,KAAK,aAAa;AAAA,QAClB,cAAc,aAAa;AAAA,QAC3B,MAAM,OAAO,WAAW,QAAQ,EAAE,OAAO,KAAK,EAAE,OAAO,KAAK;AAAA,MAC7D,CAAC;AAAA,IACF,QAAQ;AACP,YAAM,IAAI,MAAM,WAAW,aAAa,aAAa,iBAAiB,SAAS;AAAA,IAChF;AAAA,EACD;AAEA,SAAO;AACR;","names":[]}
1
+ {"version":3,"sources":["../src/migrator.ts"],"sourcesContent":["import { createHash } from 'node:crypto';\nimport { existsSync, lstatSync, readdirSync, readFileSync } from 'node:fs';\nimport { join, resolve } from 'node:path';\n\nexport interface KitConfig {\n\tout: string;\n\tschema: string;\n}\n\nexport interface MigrationConfig {\n\tmigrationsFolder: string;\n\tmigrationsTable?: string;\n\tmigrationsSchema?: string;\n}\n\nexport interface MigrationMeta {\n\tsql: string[];\n\tfolderMillis: number;\n\thash: string;\n}\n\nconst timestampToMillis = (timestamp: string) => {\n\tconst year = timestamp.slice(0, 4);\n\tconst month = timestamp.slice(4, 6);\n\tconst day = timestamp.slice(6, 8);\n\tconst hr = timestamp.slice(8, 10);\n\tconst min = timestamp.slice(10, 12);\n\tconst sec = timestamp.slice(12, 14);\n\tconst isoString = `${year}-${month}-${day}T${hr}:${min}:${sec}.000Z`;\n\treturn +new Date(isoString);\n};\n\nexport function readMigrationFiles(\n\tconfig: string | MigrationConfig,\n): MigrationMeta[] {\n\tlet outFolder: string | undefined;\n\tif (typeof config === 'string') {\n\t\tconst kitConfig = JSON.parse(\n\t\t\treadFileSync(resolve('.', config), 'utf8'),\n\t\t) as KitConfig;\n\t\toutFolder = kitConfig.out;\n\t} else {\n\t\toutFolder = config.migrationsFolder;\n\t}\n\n\tif (!outFolder) {\n\t\tthrow new Error('no migration folder defined');\n\t}\n\n\tconst migrationQueries: MigrationMeta[] = [];\n\tconst migrationFolders = readdirSync(outFolder).filter((it) => lstatSync(join(outFolder, it)).isDirectory());\n\tfor (const migrationFolder of migrationFolders) {\n\t\tconst sqlMigrationPath = join(outFolder, migrationFolder, 'migration.sql');\n\t\tif (!existsSync(sqlMigrationPath)) {\n\t\t\tconsole.error('SQL migration file does not exist:', sqlMigrationPath);\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst when = timestampToMillis(migrationFolder.slice(0, 14));\n\n\t\tconst query = readFileSync(sqlMigrationPath, 'utf8');\n\t\tconst result = query.split('--> statement-breakpoint');\n\n\t\tmigrationQueries.push({\n\t\t\tsql: result,\n\t\t\tfolderMillis: when,\n\t\t\thash: createHash('sha256').update(query).digest('hex'),\n\t\t});\n\t}\n\n\treturn migrationQueries;\n}\n"],"mappings":"AAAA,SAAS,kBAAkB;AAC3B,SAAS,YAAY,WAAW,aAAa,oBAAoB;AACjE,SAAS,MAAM,eAAe;AAmB9B,MAAM,oBAAoB,CAAC,cAAsB;AAChD,QAAM,OAAO,UAAU,MAAM,GAAG,CAAC;AACjC,QAAM,QAAQ,UAAU,MAAM,GAAG,CAAC;AAClC,QAAM,MAAM,UAAU,MAAM,GAAG,CAAC;AAChC,QAAM,KAAK,UAAU,MAAM,GAAG,EAAE;AAChC,QAAM,MAAM,UAAU,MAAM,IAAI,EAAE;AAClC,QAAM,MAAM,UAAU,MAAM,IAAI,EAAE;AAClC,QAAM,YAAY,GAAG,IAAI,IAAI,KAAK,IAAI,GAAG,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG;AAC7D,SAAO,CAAC,IAAI,KAAK,SAAS;AAC3B;AAEO,SAAS,mBACf,QACkB;AAClB,MAAI;AACJ,MAAI,OAAO,WAAW,UAAU;AAC/B,UAAM,YAAY,KAAK;AAAA,MACtB,aAAa,QAAQ,KAAK,MAAM,GAAG,MAAM;AAAA,IAC1C;AACA,gBAAY,UAAU;AAAA,EACvB,OAAO;AACN,gBAAY,OAAO;AAAA,EACpB;AAEA,MAAI,CAAC,WAAW;AACf,UAAM,IAAI,MAAM,6BAA6B;AAAA,EAC9C;AAEA,QAAM,mBAAoC,CAAC;AAC3C,QAAM,mBAAmB,YAAY,SAAS,EAAE,OAAO,CAAC,OAAO,UAAU,KAAK,WAAW,EAAE,CAAC,EAAE,YAAY,CAAC;AAC3G,aAAW,mBAAmB,kBAAkB;AAC/C,UAAM,mBAAmB,KAAK,WAAW,iBAAiB,eAAe;AACzE,QAAI,CAAC,WAAW,gBAAgB,GAAG;AAClC,cAAQ,MAAM,sCAAsC,gBAAgB;AACpE;AAAA,IACD;AAEA,UAAM,OAAO,kBAAkB,gBAAgB,MAAM,GAAG,EAAE,CAAC;AAE3D,UAAM,QAAQ,aAAa,kBAAkB,MAAM;AACnD,UAAM,SAAS,MAAM,MAAM,0BAA0B;AAErD,qBAAiB,KAAK;AAAA,MACrB,KAAK;AAAA,MACL,cAAc;AAAA,MACd,MAAM,WAAW,QAAQ,EAAE,OAAO,KAAK,EAAE,OAAO,KAAK;AAAA,IACtD,CAAC;AAAA,EACF;AAEA,SAAO;AACR;","names":[]}
@@ -26,9 +26,10 @@ var import_react = require("react");
26
26
  async function readMigrationFiles({ journal, migrations }) {
27
27
  const migrationQueries = [];
28
28
  for await (const journalEntry of journal.entries) {
29
- const query = migrations[`m${journalEntry.idx.toString().padStart(4, "0")}`];
29
+ const name = `m${journalEntry.idx.toString().padStart(4, "0")}`;
30
+ const query = migrations[name];
30
31
  if (!query) {
31
- throw new Error(`Missing migration: ${journalEntry.tag}`);
32
+ throw new Error(`Missing migration: ${name}`);
32
33
  }
33
34
  try {
34
35
  const result = query.split("--> statement-breakpoint").map((it) => {
@@ -36,12 +37,11 @@ async function readMigrationFiles({ journal, migrations }) {
36
37
  });
37
38
  migrationQueries.push({
38
39
  sql: result,
39
- bps: journalEntry.breakpoints,
40
40
  folderMillis: journalEntry.when,
41
41
  hash: ""
42
42
  });
43
43
  } catch {
44
- throw new Error(`Failed to parse migration: ${journalEntry.tag}`);
44
+ throw new Error(`Failed to parse migration: ${name}`);
45
45
  }
46
46
  }
47
47
  return migrationQueries;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/op-sqlite/migrator.ts"],"sourcesContent":["import { useEffect, useReducer } from 'react';\nimport type { MigrationMeta } from '~/migrator.ts';\nimport type { OPSQLiteDatabase } from './driver.ts';\n\ninterface MigrationConfig {\n\tjournal: {\n\t\tentries: { idx: number; when: number; tag: string; breakpoints: boolean }[];\n\t};\n\tmigrations: Record<string, string>;\n}\n\nasync function readMigrationFiles({ journal, migrations }: MigrationConfig): Promise<MigrationMeta[]> {\n\tconst migrationQueries: MigrationMeta[] = [];\n\n\tfor await (const journalEntry of journal.entries) {\n\t\tconst query = migrations[`m${journalEntry.idx.toString().padStart(4, '0')}`];\n\n\t\tif (!query) {\n\t\t\tthrow new Error(`Missing migration: ${journalEntry.tag}`);\n\t\t}\n\n\t\ttry {\n\t\t\tconst result = query.split('--> statement-breakpoint').map((it) => {\n\t\t\t\treturn it;\n\t\t\t});\n\n\t\t\tmigrationQueries.push({\n\t\t\t\tsql: result,\n\t\t\t\tbps: journalEntry.breakpoints,\n\t\t\t\tfolderMillis: journalEntry.when,\n\t\t\t\thash: '',\n\t\t\t});\n\t\t} catch {\n\t\t\tthrow new Error(`Failed to parse migration: ${journalEntry.tag}`);\n\t\t}\n\t}\n\n\treturn migrationQueries;\n}\n\nexport async function migrate<TSchema extends Record<string, unknown>>(\n\tdb: OPSQLiteDatabase<TSchema>,\n\tconfig: MigrationConfig,\n) {\n\tconst migrations = await readMigrationFiles(config);\n\treturn db.dialect.migrate(migrations, db.session);\n}\n\ninterface State {\n\tsuccess: boolean;\n\terror?: Error;\n}\n\ntype Action =\n\t| { type: 'migrating' }\n\t| { type: 'migrated'; payload: true }\n\t| { type: 'error'; payload: Error };\n\nexport const useMigrations = (db: OPSQLiteDatabase<any>, migrations: {\n\tjournal: {\n\t\tentries: { idx: number; when: number; tag: string; breakpoints: boolean }[];\n\t};\n\tmigrations: Record<string, string>;\n}): State => {\n\tconst initialState: State = {\n\t\tsuccess: false,\n\t\terror: undefined,\n\t};\n\n\tconst fetchReducer = (state: State, action: Action): State => {\n\t\tswitch (action.type) {\n\t\t\tcase 'migrating': {\n\t\t\t\treturn { ...initialState };\n\t\t\t}\n\t\t\tcase 'migrated': {\n\t\t\t\treturn { ...initialState, success: action.payload };\n\t\t\t}\n\t\t\tcase 'error': {\n\t\t\t\treturn { ...initialState, error: action.payload };\n\t\t\t}\n\t\t\tdefault: {\n\t\t\t\treturn state;\n\t\t\t}\n\t\t}\n\t};\n\n\tconst [state, dispatch] = useReducer(fetchReducer, initialState);\n\n\tuseEffect(() => {\n\t\tdispatch({ type: 'migrating' });\n\t\tmigrate(db, migrations).then(() => {\n\t\t\tdispatch({ type: 'migrated', payload: true });\n\t\t}).catch((error) => {\n\t\t\tdispatch({ type: 'error', payload: error as Error });\n\t\t});\n\t}, []);\n\n\treturn state;\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAsC;AAWtC,eAAe,mBAAmB,EAAE,SAAS,WAAW,GAA8C;AACrG,QAAM,mBAAoC,CAAC;AAE3C,mBAAiB,gBAAgB,QAAQ,SAAS;AACjD,UAAM,QAAQ,WAAW,IAAI,aAAa,IAAI,SAAS,EAAE,SAAS,GAAG,GAAG,CAAC,EAAE;AAE3E,QAAI,CAAC,OAAO;AACX,YAAM,IAAI,MAAM,sBAAsB,aAAa,GAAG,EAAE;AAAA,IACzD;AAEA,QAAI;AACH,YAAM,SAAS,MAAM,MAAM,0BAA0B,EAAE,IAAI,CAAC,OAAO;AAClE,eAAO;AAAA,MACR,CAAC;AAED,uBAAiB,KAAK;AAAA,QACrB,KAAK;AAAA,QACL,KAAK,aAAa;AAAA,QAClB,cAAc,aAAa;AAAA,QAC3B,MAAM;AAAA,MACP,CAAC;AAAA,IACF,QAAQ;AACP,YAAM,IAAI,MAAM,8BAA8B,aAAa,GAAG,EAAE;AAAA,IACjE;AAAA,EACD;AAEA,SAAO;AACR;AAEA,eAAsB,QACrB,IACA,QACC;AACD,QAAM,aAAa,MAAM,mBAAmB,MAAM;AAClD,SAAO,GAAG,QAAQ,QAAQ,YAAY,GAAG,OAAO;AACjD;AAYO,MAAM,gBAAgB,CAAC,IAA2B,eAK5C;AACZ,QAAM,eAAsB;AAAA,IAC3B,SAAS;AAAA,IACT,OAAO;AAAA,EACR;AAEA,QAAM,eAAe,CAACA,QAAc,WAA0B;AAC7D,YAAQ,OAAO,MAAM;AAAA,MACpB,KAAK,aAAa;AACjB,eAAO,EAAE,GAAG,aAAa;AAAA,MAC1B;AAAA,MACA,KAAK,YAAY;AAChB,eAAO,EAAE,GAAG,cAAc,SAAS,OAAO,QAAQ;AAAA,MACnD;AAAA,MACA,KAAK,SAAS;AACb,eAAO,EAAE,GAAG,cAAc,OAAO,OAAO,QAAQ;AAAA,MACjD;AAAA,MACA,SAAS;AACR,eAAOA;AAAA,MACR;AAAA,IACD;AAAA,EACD;AAEA,QAAM,CAAC,OAAO,QAAQ,QAAI,yBAAW,cAAc,YAAY;AAE/D,8BAAU,MAAM;AACf,aAAS,EAAE,MAAM,YAAY,CAAC;AAC9B,YAAQ,IAAI,UAAU,EAAE,KAAK,MAAM;AAClC,eAAS,EAAE,MAAM,YAAY,SAAS,KAAK,CAAC;AAAA,IAC7C,CAAC,EAAE,MAAM,CAAC,UAAU;AACnB,eAAS,EAAE,MAAM,SAAS,SAAS,MAAe,CAAC;AAAA,IACpD,CAAC;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,SAAO;AACR;","names":["state"]}
1
+ {"version":3,"sources":["../../src/op-sqlite/migrator.ts"],"sourcesContent":["import { useEffect, useReducer } from 'react';\nimport type { MigrationMeta } from '~/migrator.ts';\nimport type { OPSQLiteDatabase } from './driver.ts';\n\ninterface MigrationConfig {\n\tjournal: {\n\t\tentries: { idx: number; when: number; tag: string; breakpoints: boolean }[];\n\t};\n\tmigrations: Record<string, string>;\n}\n\nasync function readMigrationFiles({ journal, migrations }: MigrationConfig): Promise<MigrationMeta[]> {\n\tconst migrationQueries: MigrationMeta[] = [];\n\n\tfor await (const journalEntry of journal.entries) {\n\t\tconst name = `m${journalEntry.idx.toString().padStart(4, '0')}`;\n\t\tconst query = migrations[name];\n\n\t\tif (!query) {\n\t\t\tthrow new Error(`Missing migration: ${name}`);\n\t\t}\n\n\t\ttry {\n\t\t\tconst result = query.split('--> statement-breakpoint').map((it) => {\n\t\t\t\treturn it;\n\t\t\t});\n\n\t\t\tmigrationQueries.push({\n\t\t\t\tsql: result,\n\t\t\t\tfolderMillis: journalEntry.when,\n\t\t\t\thash: '',\n\t\t\t});\n\t\t} catch {\n\t\t\tthrow new Error(`Failed to parse migration: ${name}`);\n\t\t}\n\t}\n\n\treturn migrationQueries;\n}\n\nexport async function migrate<TSchema extends Record<string, unknown>>(\n\tdb: OPSQLiteDatabase<TSchema>,\n\tconfig: MigrationConfig,\n) {\n\tconst migrations = await readMigrationFiles(config);\n\treturn db.dialect.migrate(migrations, db.session);\n}\n\ninterface State {\n\tsuccess: boolean;\n\terror?: Error;\n}\n\ntype Action =\n\t| { type: 'migrating' }\n\t| { type: 'migrated'; payload: true }\n\t| { type: 'error'; payload: Error };\n\nexport const useMigrations = (db: OPSQLiteDatabase<any>, migrations: {\n\tjournal: {\n\t\tentries: { idx: number; when: number; tag: string; breakpoints: boolean }[];\n\t};\n\tmigrations: Record<string, string>;\n}): State => {\n\tconst initialState: State = {\n\t\tsuccess: false,\n\t\terror: undefined,\n\t};\n\n\tconst fetchReducer = (state: State, action: Action): State => {\n\t\tswitch (action.type) {\n\t\t\tcase 'migrating': {\n\t\t\t\treturn { ...initialState };\n\t\t\t}\n\t\t\tcase 'migrated': {\n\t\t\t\treturn { ...initialState, success: action.payload };\n\t\t\t}\n\t\t\tcase 'error': {\n\t\t\t\treturn { ...initialState, error: action.payload };\n\t\t\t}\n\t\t\tdefault: {\n\t\t\t\treturn state;\n\t\t\t}\n\t\t}\n\t};\n\n\tconst [state, dispatch] = useReducer(fetchReducer, initialState);\n\n\tuseEffect(() => {\n\t\tdispatch({ type: 'migrating' });\n\t\tmigrate(db, migrations).then(() => {\n\t\t\tdispatch({ type: 'migrated', payload: true });\n\t\t}).catch((error) => {\n\t\t\tdispatch({ type: 'error', payload: error as Error });\n\t\t});\n\t}, []);\n\n\treturn state;\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAsC;AAWtC,eAAe,mBAAmB,EAAE,SAAS,WAAW,GAA8C;AACrG,QAAM,mBAAoC,CAAC;AAE3C,mBAAiB,gBAAgB,QAAQ,SAAS;AACjD,UAAM,OAAO,IAAI,aAAa,IAAI,SAAS,EAAE,SAAS,GAAG,GAAG,CAAC;AAC7D,UAAM,QAAQ,WAAW,IAAI;AAE7B,QAAI,CAAC,OAAO;AACX,YAAM,IAAI,MAAM,sBAAsB,IAAI,EAAE;AAAA,IAC7C;AAEA,QAAI;AACH,YAAM,SAAS,MAAM,MAAM,0BAA0B,EAAE,IAAI,CAAC,OAAO;AAClE,eAAO;AAAA,MACR,CAAC;AAED,uBAAiB,KAAK;AAAA,QACrB,KAAK;AAAA,QACL,cAAc,aAAa;AAAA,QAC3B,MAAM;AAAA,MACP,CAAC;AAAA,IACF,QAAQ;AACP,YAAM,IAAI,MAAM,8BAA8B,IAAI,EAAE;AAAA,IACrD;AAAA,EACD;AAEA,SAAO;AACR;AAEA,eAAsB,QACrB,IACA,QACC;AACD,QAAM,aAAa,MAAM,mBAAmB,MAAM;AAClD,SAAO,GAAG,QAAQ,QAAQ,YAAY,GAAG,OAAO;AACjD;AAYO,MAAM,gBAAgB,CAAC,IAA2B,eAK5C;AACZ,QAAM,eAAsB;AAAA,IAC3B,SAAS;AAAA,IACT,OAAO;AAAA,EACR;AAEA,QAAM,eAAe,CAACA,QAAc,WAA0B;AAC7D,YAAQ,OAAO,MAAM;AAAA,MACpB,KAAK,aAAa;AACjB,eAAO,EAAE,GAAG,aAAa;AAAA,MAC1B;AAAA,MACA,KAAK,YAAY;AAChB,eAAO,EAAE,GAAG,cAAc,SAAS,OAAO,QAAQ;AAAA,MACnD;AAAA,MACA,KAAK,SAAS;AACb,eAAO,EAAE,GAAG,cAAc,OAAO,OAAO,QAAQ;AAAA,MACjD;AAAA,MACA,SAAS;AACR,eAAOA;AAAA,MACR;AAAA,IACD;AAAA,EACD;AAEA,QAAM,CAAC,OAAO,QAAQ,QAAI,yBAAW,cAAc,YAAY;AAE/D,8BAAU,MAAM;AACf,aAAS,EAAE,MAAM,YAAY,CAAC;AAC9B,YAAQ,IAAI,UAAU,EAAE,KAAK,MAAM;AAClC,eAAS,EAAE,MAAM,YAAY,SAAS,KAAK,CAAC;AAAA,IAC7C,CAAC,EAAE,MAAM,CAAC,UAAU;AACnB,eAAS,EAAE,MAAM,SAAS,SAAS,MAAe,CAAC;AAAA,IACpD,CAAC;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,SAAO;AACR;","names":["state"]}
@@ -2,9 +2,10 @@ import { useEffect, useReducer } from "react";
2
2
  async function readMigrationFiles({ journal, migrations }) {
3
3
  const migrationQueries = [];
4
4
  for await (const journalEntry of journal.entries) {
5
- const query = migrations[`m${journalEntry.idx.toString().padStart(4, "0")}`];
5
+ const name = `m${journalEntry.idx.toString().padStart(4, "0")}`;
6
+ const query = migrations[name];
6
7
  if (!query) {
7
- throw new Error(`Missing migration: ${journalEntry.tag}`);
8
+ throw new Error(`Missing migration: ${name}`);
8
9
  }
9
10
  try {
10
11
  const result = query.split("--> statement-breakpoint").map((it) => {
@@ -12,12 +13,11 @@ async function readMigrationFiles({ journal, migrations }) {
12
13
  });
13
14
  migrationQueries.push({
14
15
  sql: result,
15
- bps: journalEntry.breakpoints,
16
16
  folderMillis: journalEntry.when,
17
17
  hash: ""
18
18
  });
19
19
  } catch {
20
- throw new Error(`Failed to parse migration: ${journalEntry.tag}`);
20
+ throw new Error(`Failed to parse migration: ${name}`);
21
21
  }
22
22
  }
23
23
  return migrationQueries;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/op-sqlite/migrator.ts"],"sourcesContent":["import { useEffect, useReducer } from 'react';\nimport type { MigrationMeta } from '~/migrator.ts';\nimport type { OPSQLiteDatabase } from './driver.ts';\n\ninterface MigrationConfig {\n\tjournal: {\n\t\tentries: { idx: number; when: number; tag: string; breakpoints: boolean }[];\n\t};\n\tmigrations: Record<string, string>;\n}\n\nasync function readMigrationFiles({ journal, migrations }: MigrationConfig): Promise<MigrationMeta[]> {\n\tconst migrationQueries: MigrationMeta[] = [];\n\n\tfor await (const journalEntry of journal.entries) {\n\t\tconst query = migrations[`m${journalEntry.idx.toString().padStart(4, '0')}`];\n\n\t\tif (!query) {\n\t\t\tthrow new Error(`Missing migration: ${journalEntry.tag}`);\n\t\t}\n\n\t\ttry {\n\t\t\tconst result = query.split('--> statement-breakpoint').map((it) => {\n\t\t\t\treturn it;\n\t\t\t});\n\n\t\t\tmigrationQueries.push({\n\t\t\t\tsql: result,\n\t\t\t\tbps: journalEntry.breakpoints,\n\t\t\t\tfolderMillis: journalEntry.when,\n\t\t\t\thash: '',\n\t\t\t});\n\t\t} catch {\n\t\t\tthrow new Error(`Failed to parse migration: ${journalEntry.tag}`);\n\t\t}\n\t}\n\n\treturn migrationQueries;\n}\n\nexport async function migrate<TSchema extends Record<string, unknown>>(\n\tdb: OPSQLiteDatabase<TSchema>,\n\tconfig: MigrationConfig,\n) {\n\tconst migrations = await readMigrationFiles(config);\n\treturn db.dialect.migrate(migrations, db.session);\n}\n\ninterface State {\n\tsuccess: boolean;\n\terror?: Error;\n}\n\ntype Action =\n\t| { type: 'migrating' }\n\t| { type: 'migrated'; payload: true }\n\t| { type: 'error'; payload: Error };\n\nexport const useMigrations = (db: OPSQLiteDatabase<any>, migrations: {\n\tjournal: {\n\t\tentries: { idx: number; when: number; tag: string; breakpoints: boolean }[];\n\t};\n\tmigrations: Record<string, string>;\n}): State => {\n\tconst initialState: State = {\n\t\tsuccess: false,\n\t\terror: undefined,\n\t};\n\n\tconst fetchReducer = (state: State, action: Action): State => {\n\t\tswitch (action.type) {\n\t\t\tcase 'migrating': {\n\t\t\t\treturn { ...initialState };\n\t\t\t}\n\t\t\tcase 'migrated': {\n\t\t\t\treturn { ...initialState, success: action.payload };\n\t\t\t}\n\t\t\tcase 'error': {\n\t\t\t\treturn { ...initialState, error: action.payload };\n\t\t\t}\n\t\t\tdefault: {\n\t\t\t\treturn state;\n\t\t\t}\n\t\t}\n\t};\n\n\tconst [state, dispatch] = useReducer(fetchReducer, initialState);\n\n\tuseEffect(() => {\n\t\tdispatch({ type: 'migrating' });\n\t\tmigrate(db, migrations).then(() => {\n\t\t\tdispatch({ type: 'migrated', payload: true });\n\t\t}).catch((error) => {\n\t\t\tdispatch({ type: 'error', payload: error as Error });\n\t\t});\n\t}, []);\n\n\treturn state;\n};\n"],"mappings":"AAAA,SAAS,WAAW,kBAAkB;AAWtC,eAAe,mBAAmB,EAAE,SAAS,WAAW,GAA8C;AACrG,QAAM,mBAAoC,CAAC;AAE3C,mBAAiB,gBAAgB,QAAQ,SAAS;AACjD,UAAM,QAAQ,WAAW,IAAI,aAAa,IAAI,SAAS,EAAE,SAAS,GAAG,GAAG,CAAC,EAAE;AAE3E,QAAI,CAAC,OAAO;AACX,YAAM,IAAI,MAAM,sBAAsB,aAAa,GAAG,EAAE;AAAA,IACzD;AAEA,QAAI;AACH,YAAM,SAAS,MAAM,MAAM,0BAA0B,EAAE,IAAI,CAAC,OAAO;AAClE,eAAO;AAAA,MACR,CAAC;AAED,uBAAiB,KAAK;AAAA,QACrB,KAAK;AAAA,QACL,KAAK,aAAa;AAAA,QAClB,cAAc,aAAa;AAAA,QAC3B,MAAM;AAAA,MACP,CAAC;AAAA,IACF,QAAQ;AACP,YAAM,IAAI,MAAM,8BAA8B,aAAa,GAAG,EAAE;AAAA,IACjE;AAAA,EACD;AAEA,SAAO;AACR;AAEA,eAAsB,QACrB,IACA,QACC;AACD,QAAM,aAAa,MAAM,mBAAmB,MAAM;AAClD,SAAO,GAAG,QAAQ,QAAQ,YAAY,GAAG,OAAO;AACjD;AAYO,MAAM,gBAAgB,CAAC,IAA2B,eAK5C;AACZ,QAAM,eAAsB;AAAA,IAC3B,SAAS;AAAA,IACT,OAAO;AAAA,EACR;AAEA,QAAM,eAAe,CAACA,QAAc,WAA0B;AAC7D,YAAQ,OAAO,MAAM;AAAA,MACpB,KAAK,aAAa;AACjB,eAAO,EAAE,GAAG,aAAa;AAAA,MAC1B;AAAA,MACA,KAAK,YAAY;AAChB,eAAO,EAAE,GAAG,cAAc,SAAS,OAAO,QAAQ;AAAA,MACnD;AAAA,MACA,KAAK,SAAS;AACb,eAAO,EAAE,GAAG,cAAc,OAAO,OAAO,QAAQ;AAAA,MACjD;AAAA,MACA,SAAS;AACR,eAAOA;AAAA,MACR;AAAA,IACD;AAAA,EACD;AAEA,QAAM,CAAC,OAAO,QAAQ,IAAI,WAAW,cAAc,YAAY;AAE/D,YAAU,MAAM;AACf,aAAS,EAAE,MAAM,YAAY,CAAC;AAC9B,YAAQ,IAAI,UAAU,EAAE,KAAK,MAAM;AAClC,eAAS,EAAE,MAAM,YAAY,SAAS,KAAK,CAAC;AAAA,IAC7C,CAAC,EAAE,MAAM,CAAC,UAAU;AACnB,eAAS,EAAE,MAAM,SAAS,SAAS,MAAe,CAAC;AAAA,IACpD,CAAC;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,SAAO;AACR;","names":["state"]}
1
+ {"version":3,"sources":["../../src/op-sqlite/migrator.ts"],"sourcesContent":["import { useEffect, useReducer } from 'react';\nimport type { MigrationMeta } from '~/migrator.ts';\nimport type { OPSQLiteDatabase } from './driver.ts';\n\ninterface MigrationConfig {\n\tjournal: {\n\t\tentries: { idx: number; when: number; tag: string; breakpoints: boolean }[];\n\t};\n\tmigrations: Record<string, string>;\n}\n\nasync function readMigrationFiles({ journal, migrations }: MigrationConfig): Promise<MigrationMeta[]> {\n\tconst migrationQueries: MigrationMeta[] = [];\n\n\tfor await (const journalEntry of journal.entries) {\n\t\tconst name = `m${journalEntry.idx.toString().padStart(4, '0')}`;\n\t\tconst query = migrations[name];\n\n\t\tif (!query) {\n\t\t\tthrow new Error(`Missing migration: ${name}`);\n\t\t}\n\n\t\ttry {\n\t\t\tconst result = query.split('--> statement-breakpoint').map((it) => {\n\t\t\t\treturn it;\n\t\t\t});\n\n\t\t\tmigrationQueries.push({\n\t\t\t\tsql: result,\n\t\t\t\tfolderMillis: journalEntry.when,\n\t\t\t\thash: '',\n\t\t\t});\n\t\t} catch {\n\t\t\tthrow new Error(`Failed to parse migration: ${name}`);\n\t\t}\n\t}\n\n\treturn migrationQueries;\n}\n\nexport async function migrate<TSchema extends Record<string, unknown>>(\n\tdb: OPSQLiteDatabase<TSchema>,\n\tconfig: MigrationConfig,\n) {\n\tconst migrations = await readMigrationFiles(config);\n\treturn db.dialect.migrate(migrations, db.session);\n}\n\ninterface State {\n\tsuccess: boolean;\n\terror?: Error;\n}\n\ntype Action =\n\t| { type: 'migrating' }\n\t| { type: 'migrated'; payload: true }\n\t| { type: 'error'; payload: Error };\n\nexport const useMigrations = (db: OPSQLiteDatabase<any>, migrations: {\n\tjournal: {\n\t\tentries: { idx: number; when: number; tag: string; breakpoints: boolean }[];\n\t};\n\tmigrations: Record<string, string>;\n}): State => {\n\tconst initialState: State = {\n\t\tsuccess: false,\n\t\terror: undefined,\n\t};\n\n\tconst fetchReducer = (state: State, action: Action): State => {\n\t\tswitch (action.type) {\n\t\t\tcase 'migrating': {\n\t\t\t\treturn { ...initialState };\n\t\t\t}\n\t\t\tcase 'migrated': {\n\t\t\t\treturn { ...initialState, success: action.payload };\n\t\t\t}\n\t\t\tcase 'error': {\n\t\t\t\treturn { ...initialState, error: action.payload };\n\t\t\t}\n\t\t\tdefault: {\n\t\t\t\treturn state;\n\t\t\t}\n\t\t}\n\t};\n\n\tconst [state, dispatch] = useReducer(fetchReducer, initialState);\n\n\tuseEffect(() => {\n\t\tdispatch({ type: 'migrating' });\n\t\tmigrate(db, migrations).then(() => {\n\t\t\tdispatch({ type: 'migrated', payload: true });\n\t\t}).catch((error) => {\n\t\t\tdispatch({ type: 'error', payload: error as Error });\n\t\t});\n\t}, []);\n\n\treturn state;\n};\n"],"mappings":"AAAA,SAAS,WAAW,kBAAkB;AAWtC,eAAe,mBAAmB,EAAE,SAAS,WAAW,GAA8C;AACrG,QAAM,mBAAoC,CAAC;AAE3C,mBAAiB,gBAAgB,QAAQ,SAAS;AACjD,UAAM,OAAO,IAAI,aAAa,IAAI,SAAS,EAAE,SAAS,GAAG,GAAG,CAAC;AAC7D,UAAM,QAAQ,WAAW,IAAI;AAE7B,QAAI,CAAC,OAAO;AACX,YAAM,IAAI,MAAM,sBAAsB,IAAI,EAAE;AAAA,IAC7C;AAEA,QAAI;AACH,YAAM,SAAS,MAAM,MAAM,0BAA0B,EAAE,IAAI,CAAC,OAAO;AAClE,eAAO;AAAA,MACR,CAAC;AAED,uBAAiB,KAAK;AAAA,QACrB,KAAK;AAAA,QACL,cAAc,aAAa;AAAA,QAC3B,MAAM;AAAA,MACP,CAAC;AAAA,IACF,QAAQ;AACP,YAAM,IAAI,MAAM,8BAA8B,IAAI,EAAE;AAAA,IACrD;AAAA,EACD;AAEA,SAAO;AACR;AAEA,eAAsB,QACrB,IACA,QACC;AACD,QAAM,aAAa,MAAM,mBAAmB,MAAM;AAClD,SAAO,GAAG,QAAQ,QAAQ,YAAY,GAAG,OAAO;AACjD;AAYO,MAAM,gBAAgB,CAAC,IAA2B,eAK5C;AACZ,QAAM,eAAsB;AAAA,IAC3B,SAAS;AAAA,IACT,OAAO;AAAA,EACR;AAEA,QAAM,eAAe,CAACA,QAAc,WAA0B;AAC7D,YAAQ,OAAO,MAAM;AAAA,MACpB,KAAK,aAAa;AACjB,eAAO,EAAE,GAAG,aAAa;AAAA,MAC1B;AAAA,MACA,KAAK,YAAY;AAChB,eAAO,EAAE,GAAG,cAAc,SAAS,OAAO,QAAQ;AAAA,MACnD;AAAA,MACA,KAAK,SAAS;AACb,eAAO,EAAE,GAAG,cAAc,OAAO,OAAO,QAAQ;AAAA,MACjD;AAAA,MACA,SAAS;AACR,eAAOA;AAAA,MACR;AAAA,IACD;AAAA,EACD;AAEA,QAAM,CAAC,OAAO,QAAQ,IAAI,WAAW,cAAc,YAAY;AAE/D,YAAU,MAAM;AACf,aAAS,EAAE,MAAM,YAAY,CAAC;AAC9B,YAAQ,IAAI,UAAU,EAAE,KAAK,MAAM;AAClC,eAAS,EAAE,MAAM,YAAY,SAAS,KAAK,CAAC;AAAA,IAC7C,CAAC,EAAE,MAAM,CAAC,UAAU;AACnB,eAAS,EAAE,MAAM,SAAS,SAAS,MAAe,CAAC;AAAA,IACpD,CAAC;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,SAAO;AACR;","names":["state"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "drizzle-orm",
3
- "version": "0.33.0-8db0aa4",
3
+ "version": "0.33.0-b921e79",
4
4
  "description": "Drizzle ORM package for SQL databases",
5
5
  "type": "module",
6
6
  "scripts": {
@@ -317,18 +317,6 @@
317
317
  "types": "./migrator.d.ts",
318
318
  "default": "./migrator.js"
319
319
  },
320
- "./monodriver": {
321
- "import": {
322
- "types": "./monodriver.d.ts",
323
- "default": "./monodriver.js"
324
- },
325
- "require": {
326
- "types": "./monodriver.d.cts",
327
- "default": "./monodriver.cjs"
328
- },
329
- "types": "./monodriver.d.ts",
330
- "default": "./monodriver.js"
331
- },
332
320
  "./operations": {
333
321
  "import": {
334
322
  "types": "./operations.d.ts",
package/version.cjs CHANGED
@@ -26,10 +26,10 @@ __export(version_exports, {
26
26
  module.exports = __toCommonJS(version_exports);
27
27
 
28
28
  // package.json
29
- var version = "0.33.0-8db0aa4";
29
+ var version = "0.33.0-b921e79";
30
30
 
31
31
  // src/version.ts
32
- var compatibilityVersion = 7;
32
+ var compatibilityVersion = 8;
33
33
  // Annotate the CommonJS export names for ESM import in node:
34
34
  0 && (module.exports = {
35
35
  compatibilityVersion,
package/version.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/version.ts"],"sourcesContent":["// @ts-ignore - imported using Rollup json plugin\nexport { version as npmVersion } from '../package.json';\n// In version 7, we changed the PostgreSQL indexes API\nexport const compatibilityVersion = 7;\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,qBAAsC;AAE/B,MAAM,uBAAuB;","names":[]}
1
+ {"version":3,"sources":["../src/version.ts"],"sourcesContent":["// @ts-ignore - imported using Rollup json plugin\nexport { version as npmVersion } from '../package.json';\n\n// In version 7, we changed the PostgreSQL indexes API\n// v8 - new migrations folders structure\nexport const compatibilityVersion = 8;\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,qBAAsC;AAI/B,MAAM,uBAAuB;","names":[]}
package/version.d.cts CHANGED
@@ -1,5 +1,5 @@
1
- var version = "0.33.0-8db0aa4";
1
+ var version = "0.33.0-b921e79";
2
2
 
3
- declare const compatibilityVersion = 7;
3
+ declare const compatibilityVersion = 8;
4
4
 
5
5
  export { compatibilityVersion, version as npmVersion };
package/version.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- var version = "0.33.0-8db0aa4";
1
+ var version = "0.33.0-b921e79";
2
2
 
3
- declare const compatibilityVersion = 7;
3
+ declare const compatibilityVersion = 8;
4
4
 
5
5
  export { compatibilityVersion, version as npmVersion };
package/version.js CHANGED
@@ -1,8 +1,8 @@
1
1
  // package.json
2
- var version = "0.33.0-8db0aa4";
2
+ var version = "0.33.0-b921e79";
3
3
 
4
4
  // src/version.ts
5
- var compatibilityVersion = 7;
5
+ var compatibilityVersion = 8;
6
6
  export {
7
7
  compatibilityVersion,
8
8
  version as npmVersion
package/version.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/version.ts"],"sourcesContent":["// @ts-ignore - imported using Rollup json plugin\nexport { version as npmVersion } from '../package.json';\n// In version 7, we changed the PostgreSQL indexes API\nexport const compatibilityVersion = 7;\n"],"mappings":"AACA,SAAoB,eAAkB;AAE/B,MAAM,uBAAuB;","names":[]}
1
+ {"version":3,"sources":["../src/version.ts"],"sourcesContent":["// @ts-ignore - imported using Rollup json plugin\nexport { version as npmVersion } from '../package.json';\n\n// In version 7, we changed the PostgreSQL indexes API\n// v8 - new migrations folders structure\nexport const compatibilityVersion = 8;\n"],"mappings":"AACA,SAAoB,eAAkB;AAI/B,MAAM,uBAAuB;","names":[]}
package/monodriver.cjs DELETED
@@ -1,133 +0,0 @@
1
- "use strict";
2
- var __create = Object.create;
3
- var __defProp = Object.defineProperty;
4
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
- var __getOwnPropNames = Object.getOwnPropertyNames;
6
- var __getProtoOf = Object.getPrototypeOf;
7
- var __hasOwnProp = Object.prototype.hasOwnProperty;
8
- var __export = (target, all) => {
9
- for (var name in all)
10
- __defProp(target, name, { get: all[name], enumerable: true });
11
- };
12
- var __copyProps = (to, from, except, desc) => {
13
- if (from && typeof from === "object" || typeof from === "function") {
14
- for (let key of __getOwnPropNames(from))
15
- if (!__hasOwnProp.call(to, key) && key !== except)
16
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
- }
18
- return to;
19
- };
20
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
- // If the importer is in node compatibility mode or this is not an ESM
22
- // file that has been converted to a CommonJS file using a Babel-
23
- // compatible transform (i.e. "__esModule" has not been set), then set
24
- // "default" to the CommonJS "module.exports" for node compatibility.
25
- isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
- mod
27
- ));
28
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
- var monodriver_exports = {};
30
- __export(monodriver_exports, {
31
- drizzle: () => drizzle
32
- });
33
- module.exports = __toCommonJS(monodriver_exports);
34
- const importError = (libName) => {
35
- throw new Error(
36
- `Drizzle init error: unable to import selected database driver library '${libName}' - make sure it is installed.`
37
- );
38
- };
39
- const drizzle = async (params) => {
40
- const { client, connection } = params;
41
- const drizzleConfig = params;
42
- delete drizzleConfig.client;
43
- delete drizzleConfig.connection;
44
- switch (client) {
45
- case "node-postgres": {
46
- const { Pool } = await import("pg").catch(() => importError("pg"));
47
- const { drizzle: drizzle2 } = await import("./node-postgres");
48
- const instance = new Pool(connection);
49
- return drizzle2(instance, drizzleConfig);
50
- }
51
- case "aws-data-api-pg": {
52
- const { RDSDataClient } = await import("@aws-sdk/client-rds-data").catch(
53
- () => importError("@aws-sdk/client-rds-data")
54
- );
55
- const { drizzle: drizzle2 } = await import("./aws-data-api/pg");
56
- const instance = new RDSDataClient(connection);
57
- return drizzle2(instance, drizzleConfig);
58
- }
59
- case "better-sqlite3": {
60
- const { default: Client } = await import("better-sqlite3").catch(() => importError("better-sqlite3"));
61
- const { filename, options } = connection;
62
- const { drizzle: drizzle2 } = await import("./better-sqlite3");
63
- const instance = new Client(filename, options);
64
- return drizzle2(instance, drizzleConfig);
65
- }
66
- case "bun-sqlite": {
67
- const { Database: Client } = await import("bun:sqlite").catch(() => importError("bun:sqlite"));
68
- const { filename, options } = connection;
69
- const { drizzle: drizzle2 } = await import("./bun-sqlite");
70
- const instance = new Client(filename, options);
71
- return drizzle2(instance, drizzleConfig);
72
- }
73
- case "d1": {
74
- const { drizzle: drizzle2 } = await import("./d1");
75
- return drizzle2(connection, drizzleConfig);
76
- }
77
- case "libsql": {
78
- const { createClient } = await import("@libsql/client").catch(() => importError("@libsql/client"));
79
- const { drizzle: drizzle2 } = await import("./libsql");
80
- const instance = createClient(connection);
81
- return drizzle2(instance, drizzleConfig);
82
- }
83
- case "mysql2": {
84
- const { createConnection } = await import("mysql2/promise").catch(() => importError("mysql2/promise"));
85
- const instance = await createConnection(connection);
86
- const { drizzle: drizzle2 } = await import("./mysql2");
87
- return drizzle2(instance, drizzleConfig);
88
- }
89
- case "neon-http": {
90
- const { neon } = await import("@neondatabase/serverless").catch(() => importError("@neondatabase/serverless"));
91
- const { connectionString, options } = connection;
92
- const { drizzle: drizzle2 } = await import("./neon-http");
93
- const instance = neon(connectionString, options);
94
- return drizzle2(instance, drizzleConfig);
95
- }
96
- case "neon-serverless": {
97
- const { Pool } = await import("@neondatabase/serverless").catch(() => importError("@neondatabase/serverless"));
98
- const { drizzle: drizzle2 } = await import("./neon-serverless");
99
- const instance = new Pool(connection);
100
- return drizzle2(instance, drizzleConfig);
101
- }
102
- case "planetscale": {
103
- const { Client } = await import("@planetscale/database").catch(() => importError("@planetscale/database"));
104
- const { drizzle: drizzle2 } = await import("./planetscale-serverless");
105
- const instance = new Client(
106
- connection
107
- );
108
- return drizzle2(instance, drizzleConfig);
109
- }
110
- case "postgres-js": {
111
- const { default: client2 } = await import("postgres").catch(() => importError("postgres"));
112
- const { drizzle: drizzle2 } = await import("./postgres-js");
113
- const instance = client2(connection);
114
- return drizzle2(instance, drizzleConfig);
115
- }
116
- case "tidb-serverless": {
117
- const { connect } = await import("@tidbcloud/serverless").catch(() => importError("@tidbcloud/serverless"));
118
- const { drizzle: drizzle2 } = await import("./tidb-serverless");
119
- const instance = connect(connection);
120
- return drizzle2(instance, drizzleConfig);
121
- }
122
- case "vercel-postgres": {
123
- const { sql } = await import("@vercel/postgres").catch(() => importError("@vercel/postgres"));
124
- const { drizzle: drizzle2 } = await import("./vercel-postgres");
125
- return drizzle2(sql, drizzleConfig);
126
- }
127
- }
128
- };
129
- // Annotate the CommonJS export names for ESM import in node:
130
- 0 && (module.exports = {
131
- drizzle
132
- });
133
- //# sourceMappingURL=monodriver.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/monodriver.ts"],"sourcesContent":["/* eslint-disable import/extensions */\nimport type { RDSDataClientConfig as RDSConfig } from '@aws-sdk/client-rds-data';\nimport type { Config as LibsqlConfig } from '@libsql/client';\nimport type {\n\tHTTPTransactionOptions as NeonHttpConfig,\n\tPoolConfig as NeonServerlessConfig,\n} from '@neondatabase/serverless';\nimport type { Config as PlanetscaleConfig } from '@planetscale/database';\nimport type { Config as TiDBServerlessConfig } from '@tidbcloud/serverless';\nimport type { VercelPool } from '@vercel/postgres';\nimport type { Options as BetterSQLite3Options } from 'better-sqlite3';\nimport type { PoolOptions as Mysql2Config } from 'mysql2';\nimport type { PoolConfig as NodePGPoolConfig } from 'pg';\nimport type { Options as PostgresJSOptions, PostgresType as PostgresJSPostgresType } from 'postgres';\nimport type { AwsDataApiPgDatabase, DrizzleAwsDataApiPgConfig } from './aws-data-api/pg/index.ts';\nimport type { BetterSQLite3Database } from './better-sqlite3/index.ts';\nimport type { BunSQLiteDatabase } from './bun-sqlite/index.ts';\nimport type { DrizzleD1Database } from './d1/index.ts';\nimport type { LibSQLDatabase } from './libsql/index.ts';\nimport type { MySql2Database, MySql2DrizzleConfig } from './mysql2/index.ts';\nimport type { NeonHttpDatabase } from './neon-http/index.ts';\nimport type { NeonDatabase } from './neon-serverless/index.ts';\nimport type { NodePgDatabase } from './node-postgres/index.ts';\nimport type { PlanetScaleDatabase } from './planetscale-serverless/index.ts';\nimport type { PostgresJsDatabase } from './postgres-js/index.ts';\nimport type { TiDBServerlessDatabase } from './tidb-serverless/index.ts';\nimport type { DrizzleConfig } from './utils.ts';\nimport type { VercelPgDatabase } from './vercel-postgres/index.ts';\n\ntype BunSqliteDatabaseOptions =\n\t| number\n\t| {\n\t\t/**\n\t\t * Open the database as read-only (no write operations, no create).\n\t\t *\n\t\t * Equivalent to {@link constants.SQLITE_OPEN_READONLY}\n\t\t */\n\t\treadonly?: boolean;\n\t\t/**\n\t\t * Allow creating a new database\n\t\t *\n\t\t * Equivalent to {@link constants.SQLITE_OPEN_CREATE}\n\t\t */\n\t\tcreate?: boolean;\n\t\t/**\n\t\t * Open the database as read-write\n\t\t *\n\t\t * Equivalent to {@link constants.SQLITE_OPEN_READWRITE}\n\t\t */\n\t\treadwrite?: boolean;\n\t};\n\ntype BunSqliteDatabaseConfig = {\n\tfilename?: string;\n\toptions?: BunSqliteDatabaseOptions;\n};\n\ntype BetterSQLite3DatabaseConfig = {\n\tfilename?: string | Buffer;\n\toptions?: BetterSQLite3Options;\n};\n\ntype MonodriverNeonHttpConfig = {\n\tconnectionString: string;\n\toptions?: NeonHttpConfig<boolean, boolean>;\n};\n\ntype ClientDrizzleInstanceMap<TSchema extends Record<string, any>> = {\n\t'node-postgres': NodePgDatabase<TSchema>;\n\t'postgres-js': PostgresJsDatabase<TSchema>;\n\t'neon-serverless': NeonDatabase<TSchema>;\n\t'neon-http': NeonHttpDatabase<TSchema>;\n\t'vercel-postgres': VercelPgDatabase<TSchema>;\n\t'aws-data-api-pg': AwsDataApiPgDatabase<TSchema>;\n\tplanetscale: PlanetScaleDatabase<TSchema>;\n\tmysql2: MySql2Database<TSchema>;\n\t'tidb-serverless': TiDBServerlessDatabase<TSchema>;\n\tlibsql: LibSQLDatabase<TSchema>;\n\td1: DrizzleD1Database<TSchema>;\n\t'bun-sqlite': BunSQLiteDatabase<TSchema>;\n\t'better-sqlite3': BetterSQLite3Database<TSchema>;\n};\n\ntype InitializerParams<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n> =\n\t| ({\n\t\tclient: 'node-postgres';\n\t\tconnection: NodePGPoolConfig;\n\t} & DrizzleConfig<TSchema>)\n\t| ({\n\t\tclient: 'postgres-js';\n\t\tconnection: PostgresJSOptions<Record<string, PostgresJSPostgresType>>;\n\t} & DrizzleConfig<TSchema>)\n\t| ({\n\t\tclient: 'neon-serverless';\n\t\tconnection: NeonServerlessConfig;\n\t} & DrizzleConfig<TSchema>)\n\t| ({\n\t\tclient: 'neon-http';\n\t\tconnection: MonodriverNeonHttpConfig;\n\t} & DrizzleConfig<TSchema>)\n\t| ({\n\t\tclient: 'vercel-postgres';\n\t\tconnection: VercelPool;\n\t} & DrizzleConfig<TSchema>)\n\t| ({\n\t\tclient: 'aws-data-api-pg';\n\t\tconnection: RDSConfig;\n\t} & DrizzleAwsDataApiPgConfig<TSchema>)\n\t| ({\n\t\tclient: 'planetscale';\n\t\tconnection: PlanetscaleConfig;\n\t} & DrizzleConfig<TSchema>)\n\t| ({\n\t\tclient: 'mysql2';\n\t\tconnection: Mysql2Config;\n\t} & MySql2DrizzleConfig<TSchema>)\n\t| ({\n\t\tclient: 'tidb-serverless';\n\t\tconnection: TiDBServerlessConfig;\n\t} & DrizzleConfig<TSchema>)\n\t| ({\n\t\tclient: 'libsql';\n\t\tconnection: LibsqlConfig;\n\t} & DrizzleConfig<TSchema>)\n\t| ({\n\t\tclient: 'd1';\n\t\tconnection: D1Database;\n\t} & DrizzleConfig<TSchema>)\n\t| ({\n\t\tclient: 'bun-sqlite';\n\t\tconnection: BunSqliteDatabaseConfig;\n\t} & DrizzleConfig<TSchema>)\n\t| ({\n\t\tclient: 'better-sqlite3';\n\t\tconnection: BetterSQLite3DatabaseConfig;\n\t} & DrizzleConfig<TSchema>);\n\ntype DetermineClient<\n\tTParams extends InitializerParams<any>,\n> = ClientDrizzleInstanceMap<TParams['schema']>[TParams['client']];\n\nconst importError = (libName: string) => {\n\tthrow new Error(\n\t\t`Drizzle init error: unable to import selected database driver library '${libName}' - make sure it is installed.`,\n\t);\n};\n\nexport const drizzle = async <\n\tTSchema extends Record<string, any>,\n\tTParams extends InitializerParams<TSchema>,\n>(params: TParams): Promise<DetermineClient<TParams>> => {\n\tconst { client, connection } = params;\n\tconst drizzleConfig = params as DrizzleConfig;\n\tdelete (<any> drizzleConfig).client;\n\tdelete (<any> drizzleConfig).connection;\n\n\tswitch (client) {\n\t\tcase 'node-postgres': {\n\t\t\tconst { Pool } = await import('pg').catch(() => importError('pg'));\n\t\t\tconst { drizzle } = await import('./node-postgres');\n\t\t\tconst instance = new Pool(connection as NodePGPoolConfig);\n\n\t\t\treturn drizzle(instance, drizzleConfig) as any;\n\t\t}\n\t\tcase 'aws-data-api-pg': {\n\t\t\tconst { RDSDataClient } = await import('@aws-sdk/client-rds-data').catch(() =>\n\t\t\t\timportError('@aws-sdk/client-rds-data')\n\t\t\t);\n\t\t\tconst { drizzle } = await import('./aws-data-api/pg');\n\t\t\tconst instance = new RDSDataClient(connection);\n\n\t\t\treturn drizzle(instance, drizzleConfig as any as DrizzleAwsDataApiPgConfig) as any;\n\t\t}\n\t\tcase 'better-sqlite3': {\n\t\t\tconst { default: Client } = await import('better-sqlite3').catch(() => importError('better-sqlite3'));\n\t\t\tconst { filename, options } = connection as BetterSQLite3DatabaseConfig;\n\t\t\tconst { drizzle } = await import('./better-sqlite3');\n\t\t\tconst instance = new Client(filename, options);\n\n\t\t\treturn drizzle(instance, drizzleConfig) as any;\n\t\t}\n\t\tcase 'bun-sqlite': {\n\t\t\tconst { Database: Client } = await import('bun:sqlite').catch(() => importError('bun:sqlite'));\n\t\t\tconst { filename, options } = connection as BunSqliteDatabaseConfig;\n\t\t\tconst { drizzle } = await import('./bun-sqlite');\n\t\t\tconst instance = new Client(filename, options);\n\n\t\t\treturn drizzle(instance, drizzleConfig) as any;\n\t\t}\n\t\tcase 'd1': {\n\t\t\tconst { drizzle } = await import('./d1');\n\t\t\treturn drizzle(connection as D1Database, drizzleConfig) as any;\n\t\t}\n\t\tcase 'libsql': {\n\t\t\tconst { createClient } = await import('@libsql/client').catch(() => importError('@libsql/client'));\n\t\t\tconst { drizzle } = await import('./libsql');\n\t\t\tconst instance = createClient(connection as LibsqlConfig);\n\n\t\t\treturn drizzle(instance, drizzleConfig) as any;\n\t\t}\n\t\tcase 'mysql2': {\n\t\t\tconst { createConnection } = await import('mysql2/promise').catch(() => importError('mysql2/promise'));\n\t\t\tconst instance = await createConnection(connection as Mysql2Config);\n\t\t\tconst { drizzle } = await import('./mysql2');\n\n\t\t\treturn drizzle(instance, drizzleConfig as MySql2DrizzleConfig) as any;\n\t\t}\n\t\tcase 'neon-http': {\n\t\t\tconst { neon } = await import('@neondatabase/serverless').catch(() => importError('@neondatabase/serverless'));\n\t\t\tconst { connectionString, options } = connection as MonodriverNeonHttpConfig;\n\t\t\tconst { drizzle } = await import('./neon-http');\n\t\t\tconst instance = neon(connectionString, options);\n\n\t\t\treturn drizzle(instance, drizzleConfig) as any;\n\t\t}\n\t\tcase 'neon-serverless': {\n\t\t\tconst { Pool } = await import('@neondatabase/serverless').catch(() => importError('@neondatabase/serverless'));\n\t\t\tconst { drizzle } = await import('./neon-serverless');\n\t\t\tconst instance = new Pool(connection as NeonServerlessConfig);\n\n\t\t\treturn drizzle(instance, drizzleConfig) as any;\n\t\t}\n\t\tcase 'planetscale': {\n\t\t\tconst { Client } = await import('@planetscale/database').catch(() => importError('@planetscale/database'));\n\t\t\tconst { drizzle } = await import('./planetscale-serverless');\n\t\t\tconst instance = new Client(\n\t\t\t\tconnection as PlanetscaleConfig,\n\t\t\t);\n\n\t\t\treturn drizzle(instance, drizzleConfig) as any;\n\t\t}\n\t\tcase 'postgres-js': {\n\t\t\tconst { default: client } = await import('postgres').catch(() => importError('postgres'));\n\t\t\tconst { drizzle } = await import('./postgres-js');\n\t\t\tconst instance = client(connection as PostgresJSOptions<Record<string, PostgresJSPostgresType>>);\n\n\t\t\treturn drizzle(instance, drizzleConfig) as any;\n\t\t}\n\t\tcase 'tidb-serverless': {\n\t\t\tconst { connect } = await import('@tidbcloud/serverless').catch(() => importError('@tidbcloud/serverless'));\n\t\t\tconst { drizzle } = await import('./tidb-serverless');\n\t\t\tconst instance = connect(connection as TiDBServerlessConfig);\n\n\t\t\treturn drizzle(instance, drizzleConfig) as any;\n\t\t}\n\t\tcase 'vercel-postgres': {\n\t\t\tconst { sql } = await import('@vercel/postgres').catch(() => importError('@vercel/postgres'));\n\t\t\tconst { drizzle } = await import('./vercel-postgres');\n\n\t\t\treturn drizzle(sql, drizzleConfig) as any;\n\t\t}\n\t}\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AA+IA,MAAM,cAAc,CAAC,YAAoB;AACxC,QAAM,IAAI;AAAA,IACT,0EAA0E,OAAO;AAAA,EAClF;AACD;AAEO,MAAM,UAAU,OAGrB,WAAuD;AACxD,QAAM,EAAE,QAAQ,WAAW,IAAI;AAC/B,QAAM,gBAAgB;AACtB,SAAc,cAAe;AAC7B,SAAc,cAAe;AAE7B,UAAQ,QAAQ;AAAA,IACf,KAAK,iBAAiB;AACrB,YAAM,EAAE,KAAK,IAAI,MAAM,OAAO,IAAI,EAAE,MAAM,MAAM,YAAY,IAAI,CAAC;AACjE,YAAM,EAAE,SAAAA,SAAQ,IAAI,MAAM,OAAO,iBAAiB;AAClD,YAAM,WAAW,IAAI,KAAK,UAA8B;AAExD,aAAOA,SAAQ,UAAU,aAAa;AAAA,IACvC;AAAA,IACA,KAAK,mBAAmB;AACvB,YAAM,EAAE,cAAc,IAAI,MAAM,OAAO,0BAA0B,EAAE;AAAA,QAAM,MACxE,YAAY,0BAA0B;AAAA,MACvC;AACA,YAAM,EAAE,SAAAA,SAAQ,IAAI,MAAM,OAAO,mBAAmB;AACpD,YAAM,WAAW,IAAI,cAAc,UAAU;AAE7C,aAAOA,SAAQ,UAAU,aAAiD;AAAA,IAC3E;AAAA,IACA,KAAK,kBAAkB;AACtB,YAAM,EAAE,SAAS,OAAO,IAAI,MAAM,OAAO,gBAAgB,EAAE,MAAM,MAAM,YAAY,gBAAgB,CAAC;AACpG,YAAM,EAAE,UAAU,QAAQ,IAAI;AAC9B,YAAM,EAAE,SAAAA,SAAQ,IAAI,MAAM,OAAO,kBAAkB;AACnD,YAAM,WAAW,IAAI,OAAO,UAAU,OAAO;AAE7C,aAAOA,SAAQ,UAAU,aAAa;AAAA,IACvC;AAAA,IACA,KAAK,cAAc;AAClB,YAAM,EAAE,UAAU,OAAO,IAAI,MAAM,OAAO,YAAY,EAAE,MAAM,MAAM,YAAY,YAAY,CAAC;AAC7F,YAAM,EAAE,UAAU,QAAQ,IAAI;AAC9B,YAAM,EAAE,SAAAA,SAAQ,IAAI,MAAM,OAAO,cAAc;AAC/C,YAAM,WAAW,IAAI,OAAO,UAAU,OAAO;AAE7C,aAAOA,SAAQ,UAAU,aAAa;AAAA,IACvC;AAAA,IACA,KAAK,MAAM;AACV,YAAM,EAAE,SAAAA,SAAQ,IAAI,MAAM,OAAO,MAAM;AACvC,aAAOA,SAAQ,YAA0B,aAAa;AAAA,IACvD;AAAA,IACA,KAAK,UAAU;AACd,YAAM,EAAE,aAAa,IAAI,MAAM,OAAO,gBAAgB,EAAE,MAAM,MAAM,YAAY,gBAAgB,CAAC;AACjG,YAAM,EAAE,SAAAA,SAAQ,IAAI,MAAM,OAAO,UAAU;AAC3C,YAAM,WAAW,aAAa,UAA0B;AAExD,aAAOA,SAAQ,UAAU,aAAa;AAAA,IACvC;AAAA,IACA,KAAK,UAAU;AACd,YAAM,EAAE,iBAAiB,IAAI,MAAM,OAAO,gBAAgB,EAAE,MAAM,MAAM,YAAY,gBAAgB,CAAC;AACrG,YAAM,WAAW,MAAM,iBAAiB,UAA0B;AAClE,YAAM,EAAE,SAAAA,SAAQ,IAAI,MAAM,OAAO,UAAU;AAE3C,aAAOA,SAAQ,UAAU,aAAoC;AAAA,IAC9D;AAAA,IACA,KAAK,aAAa;AACjB,YAAM,EAAE,KAAK,IAAI,MAAM,OAAO,0BAA0B,EAAE,MAAM,MAAM,YAAY,0BAA0B,CAAC;AAC7G,YAAM,EAAE,kBAAkB,QAAQ,IAAI;AACtC,YAAM,EAAE,SAAAA,SAAQ,IAAI,MAAM,OAAO,aAAa;AAC9C,YAAM,WAAW,KAAK,kBAAkB,OAAO;AAE/C,aAAOA,SAAQ,UAAU,aAAa;AAAA,IACvC;AAAA,IACA,KAAK,mBAAmB;AACvB,YAAM,EAAE,KAAK,IAAI,MAAM,OAAO,0BAA0B,EAAE,MAAM,MAAM,YAAY,0BAA0B,CAAC;AAC7G,YAAM,EAAE,SAAAA,SAAQ,IAAI,MAAM,OAAO,mBAAmB;AACpD,YAAM,WAAW,IAAI,KAAK,UAAkC;AAE5D,aAAOA,SAAQ,UAAU,aAAa;AAAA,IACvC;AAAA,IACA,KAAK,eAAe;AACnB,YAAM,EAAE,OAAO,IAAI,MAAM,OAAO,uBAAuB,EAAE,MAAM,MAAM,YAAY,uBAAuB,CAAC;AACzG,YAAM,EAAE,SAAAA,SAAQ,IAAI,MAAM,OAAO,0BAA0B;AAC3D,YAAM,WAAW,IAAI;AAAA,QACpB;AAAA,MACD;AAEA,aAAOA,SAAQ,UAAU,aAAa;AAAA,IACvC;AAAA,IACA,KAAK,eAAe;AACnB,YAAM,EAAE,SAASC,QAAO,IAAI,MAAM,OAAO,UAAU,EAAE,MAAM,MAAM,YAAY,UAAU,CAAC;AACxF,YAAM,EAAE,SAAAD,SAAQ,IAAI,MAAM,OAAO,eAAe;AAChD,YAAM,WAAWC,QAAO,UAAuE;AAE/F,aAAOD,SAAQ,UAAU,aAAa;AAAA,IACvC;AAAA,IACA,KAAK,mBAAmB;AACvB,YAAM,EAAE,QAAQ,IAAI,MAAM,OAAO,uBAAuB,EAAE,MAAM,MAAM,YAAY,uBAAuB,CAAC;AAC1G,YAAM,EAAE,SAAAA,SAAQ,IAAI,MAAM,OAAO,mBAAmB;AACpD,YAAM,WAAW,QAAQ,UAAkC;AAE3D,aAAOA,SAAQ,UAAU,aAAa;AAAA,IACvC;AAAA,IACA,KAAK,mBAAmB;AACvB,YAAM,EAAE,IAAI,IAAI,MAAM,OAAO,kBAAkB,EAAE,MAAM,MAAM,YAAY,kBAAkB,CAAC;AAC5F,YAAM,EAAE,SAAAA,SAAQ,IAAI,MAAM,OAAO,mBAAmB;AAEpD,aAAOA,SAAQ,KAAK,aAAa;AAAA,IAClC;AAAA,EACD;AACD;","names":["drizzle","client"]}
package/monodriver.d.cts DELETED
@@ -1,117 +0,0 @@
1
- /// <reference types="@cloudflare/workers-types" />
2
- /// <reference types="node" />
3
- /// <reference types="bun-types" />
4
- import type { RDSDataClientConfig as RDSConfig } from '@aws-sdk/client-rds-data';
5
- import type { Config as LibsqlConfig } from '@libsql/client';
6
- import type { HTTPTransactionOptions as NeonHttpConfig, PoolConfig as NeonServerlessConfig } from '@neondatabase/serverless';
7
- import type { Config as PlanetscaleConfig } from '@planetscale/database';
8
- import type { Config as TiDBServerlessConfig } from '@tidbcloud/serverless';
9
- import type { VercelPool } from '@vercel/postgres';
10
- import type { Options as BetterSQLite3Options } from 'better-sqlite3';
11
- import type { PoolOptions as Mysql2Config } from 'mysql2';
12
- import type { PoolConfig as NodePGPoolConfig } from 'pg';
13
- import type { Options as PostgresJSOptions, PostgresType as PostgresJSPostgresType } from 'postgres';
14
- import type { AwsDataApiPgDatabase, DrizzleAwsDataApiPgConfig } from "./aws-data-api/pg/index.cjs";
15
- import type { BetterSQLite3Database } from "./better-sqlite3/index.cjs";
16
- import type { BunSQLiteDatabase } from "./bun-sqlite/index.cjs";
17
- import type { DrizzleD1Database } from "./d1/index.cjs";
18
- import type { LibSQLDatabase } from "./libsql/index.cjs";
19
- import type { MySql2Database, MySql2DrizzleConfig } from "./mysql2/index.cjs";
20
- import type { NeonHttpDatabase } from "./neon-http/index.cjs";
21
- import type { NeonDatabase } from "./neon-serverless/index.cjs";
22
- import type { NodePgDatabase } from "./node-postgres/index.cjs";
23
- import type { PlanetScaleDatabase } from "./planetscale-serverless/index.cjs";
24
- import type { PostgresJsDatabase } from "./postgres-js/index.cjs";
25
- import type { TiDBServerlessDatabase } from "./tidb-serverless/index.cjs";
26
- import type { DrizzleConfig } from "./utils.cjs";
27
- import type { VercelPgDatabase } from "./vercel-postgres/index.cjs";
28
- type BunSqliteDatabaseOptions = number | {
29
- /**
30
- * Open the database as read-only (no write operations, no create).
31
- *
32
- * Equivalent to {@link constants.SQLITE_OPEN_READONLY}
33
- */
34
- readonly?: boolean;
35
- /**
36
- * Allow creating a new database
37
- *
38
- * Equivalent to {@link constants.SQLITE_OPEN_CREATE}
39
- */
40
- create?: boolean;
41
- /**
42
- * Open the database as read-write
43
- *
44
- * Equivalent to {@link constants.SQLITE_OPEN_READWRITE}
45
- */
46
- readwrite?: boolean;
47
- };
48
- type BunSqliteDatabaseConfig = {
49
- filename?: string;
50
- options?: BunSqliteDatabaseOptions;
51
- };
52
- type BetterSQLite3DatabaseConfig = {
53
- filename?: string | Buffer;
54
- options?: BetterSQLite3Options;
55
- };
56
- type MonodriverNeonHttpConfig = {
57
- connectionString: string;
58
- options?: NeonHttpConfig<boolean, boolean>;
59
- };
60
- type ClientDrizzleInstanceMap<TSchema extends Record<string, any>> = {
61
- 'node-postgres': NodePgDatabase<TSchema>;
62
- 'postgres-js': PostgresJsDatabase<TSchema>;
63
- 'neon-serverless': NeonDatabase<TSchema>;
64
- 'neon-http': NeonHttpDatabase<TSchema>;
65
- 'vercel-postgres': VercelPgDatabase<TSchema>;
66
- 'aws-data-api-pg': AwsDataApiPgDatabase<TSchema>;
67
- planetscale: PlanetScaleDatabase<TSchema>;
68
- mysql2: MySql2Database<TSchema>;
69
- 'tidb-serverless': TiDBServerlessDatabase<TSchema>;
70
- libsql: LibSQLDatabase<TSchema>;
71
- d1: DrizzleD1Database<TSchema>;
72
- 'bun-sqlite': BunSQLiteDatabase<TSchema>;
73
- 'better-sqlite3': BetterSQLite3Database<TSchema>;
74
- };
75
- type InitializerParams<TSchema extends Record<string, unknown> = Record<string, never>> = ({
76
- client: 'node-postgres';
77
- connection: NodePGPoolConfig;
78
- } & DrizzleConfig<TSchema>) | ({
79
- client: 'postgres-js';
80
- connection: PostgresJSOptions<Record<string, PostgresJSPostgresType>>;
81
- } & DrizzleConfig<TSchema>) | ({
82
- client: 'neon-serverless';
83
- connection: NeonServerlessConfig;
84
- } & DrizzleConfig<TSchema>) | ({
85
- client: 'neon-http';
86
- connection: MonodriverNeonHttpConfig;
87
- } & DrizzleConfig<TSchema>) | ({
88
- client: 'vercel-postgres';
89
- connection: VercelPool;
90
- } & DrizzleConfig<TSchema>) | ({
91
- client: 'aws-data-api-pg';
92
- connection: RDSConfig;
93
- } & DrizzleAwsDataApiPgConfig<TSchema>) | ({
94
- client: 'planetscale';
95
- connection: PlanetscaleConfig;
96
- } & DrizzleConfig<TSchema>) | ({
97
- client: 'mysql2';
98
- connection: Mysql2Config;
99
- } & MySql2DrizzleConfig<TSchema>) | ({
100
- client: 'tidb-serverless';
101
- connection: TiDBServerlessConfig;
102
- } & DrizzleConfig<TSchema>) | ({
103
- client: 'libsql';
104
- connection: LibsqlConfig;
105
- } & DrizzleConfig<TSchema>) | ({
106
- client: 'd1';
107
- connection: D1Database;
108
- } & DrizzleConfig<TSchema>) | ({
109
- client: 'bun-sqlite';
110
- connection: BunSqliteDatabaseConfig;
111
- } & DrizzleConfig<TSchema>) | ({
112
- client: 'better-sqlite3';
113
- connection: BetterSQLite3DatabaseConfig;
114
- } & DrizzleConfig<TSchema>);
115
- type DetermineClient<TParams extends InitializerParams<any>> = ClientDrizzleInstanceMap<TParams['schema']>[TParams['client']];
116
- export declare const drizzle: <TSchema extends Record<string, any>, TParams extends InitializerParams<TSchema>>(params: TParams) => Promise<DetermineClient<TParams>>;
117
- export {};
package/monodriver.d.ts DELETED
@@ -1,117 +0,0 @@
1
- /// <reference types="@cloudflare/workers-types" />
2
- /// <reference types="node" />
3
- /// <reference types="bun-types" />
4
- import type { RDSDataClientConfig as RDSConfig } from '@aws-sdk/client-rds-data';
5
- import type { Config as LibsqlConfig } from '@libsql/client';
6
- import type { HTTPTransactionOptions as NeonHttpConfig, PoolConfig as NeonServerlessConfig } from '@neondatabase/serverless';
7
- import type { Config as PlanetscaleConfig } from '@planetscale/database';
8
- import type { Config as TiDBServerlessConfig } from '@tidbcloud/serverless';
9
- import type { VercelPool } from '@vercel/postgres';
10
- import type { Options as BetterSQLite3Options } from 'better-sqlite3';
11
- import type { PoolOptions as Mysql2Config } from 'mysql2';
12
- import type { PoolConfig as NodePGPoolConfig } from 'pg';
13
- import type { Options as PostgresJSOptions, PostgresType as PostgresJSPostgresType } from 'postgres';
14
- import type { AwsDataApiPgDatabase, DrizzleAwsDataApiPgConfig } from "./aws-data-api/pg/index.js";
15
- import type { BetterSQLite3Database } from "./better-sqlite3/index.js";
16
- import type { BunSQLiteDatabase } from "./bun-sqlite/index.js";
17
- import type { DrizzleD1Database } from "./d1/index.js";
18
- import type { LibSQLDatabase } from "./libsql/index.js";
19
- import type { MySql2Database, MySql2DrizzleConfig } from "./mysql2/index.js";
20
- import type { NeonHttpDatabase } from "./neon-http/index.js";
21
- import type { NeonDatabase } from "./neon-serverless/index.js";
22
- import type { NodePgDatabase } from "./node-postgres/index.js";
23
- import type { PlanetScaleDatabase } from "./planetscale-serverless/index.js";
24
- import type { PostgresJsDatabase } from "./postgres-js/index.js";
25
- import type { TiDBServerlessDatabase } from "./tidb-serverless/index.js";
26
- import type { DrizzleConfig } from "./utils.js";
27
- import type { VercelPgDatabase } from "./vercel-postgres/index.js";
28
- type BunSqliteDatabaseOptions = number | {
29
- /**
30
- * Open the database as read-only (no write operations, no create).
31
- *
32
- * Equivalent to {@link constants.SQLITE_OPEN_READONLY}
33
- */
34
- readonly?: boolean;
35
- /**
36
- * Allow creating a new database
37
- *
38
- * Equivalent to {@link constants.SQLITE_OPEN_CREATE}
39
- */
40
- create?: boolean;
41
- /**
42
- * Open the database as read-write
43
- *
44
- * Equivalent to {@link constants.SQLITE_OPEN_READWRITE}
45
- */
46
- readwrite?: boolean;
47
- };
48
- type BunSqliteDatabaseConfig = {
49
- filename?: string;
50
- options?: BunSqliteDatabaseOptions;
51
- };
52
- type BetterSQLite3DatabaseConfig = {
53
- filename?: string | Buffer;
54
- options?: BetterSQLite3Options;
55
- };
56
- type MonodriverNeonHttpConfig = {
57
- connectionString: string;
58
- options?: NeonHttpConfig<boolean, boolean>;
59
- };
60
- type ClientDrizzleInstanceMap<TSchema extends Record<string, any>> = {
61
- 'node-postgres': NodePgDatabase<TSchema>;
62
- 'postgres-js': PostgresJsDatabase<TSchema>;
63
- 'neon-serverless': NeonDatabase<TSchema>;
64
- 'neon-http': NeonHttpDatabase<TSchema>;
65
- 'vercel-postgres': VercelPgDatabase<TSchema>;
66
- 'aws-data-api-pg': AwsDataApiPgDatabase<TSchema>;
67
- planetscale: PlanetScaleDatabase<TSchema>;
68
- mysql2: MySql2Database<TSchema>;
69
- 'tidb-serverless': TiDBServerlessDatabase<TSchema>;
70
- libsql: LibSQLDatabase<TSchema>;
71
- d1: DrizzleD1Database<TSchema>;
72
- 'bun-sqlite': BunSQLiteDatabase<TSchema>;
73
- 'better-sqlite3': BetterSQLite3Database<TSchema>;
74
- };
75
- type InitializerParams<TSchema extends Record<string, unknown> = Record<string, never>> = ({
76
- client: 'node-postgres';
77
- connection: NodePGPoolConfig;
78
- } & DrizzleConfig<TSchema>) | ({
79
- client: 'postgres-js';
80
- connection: PostgresJSOptions<Record<string, PostgresJSPostgresType>>;
81
- } & DrizzleConfig<TSchema>) | ({
82
- client: 'neon-serverless';
83
- connection: NeonServerlessConfig;
84
- } & DrizzleConfig<TSchema>) | ({
85
- client: 'neon-http';
86
- connection: MonodriverNeonHttpConfig;
87
- } & DrizzleConfig<TSchema>) | ({
88
- client: 'vercel-postgres';
89
- connection: VercelPool;
90
- } & DrizzleConfig<TSchema>) | ({
91
- client: 'aws-data-api-pg';
92
- connection: RDSConfig;
93
- } & DrizzleAwsDataApiPgConfig<TSchema>) | ({
94
- client: 'planetscale';
95
- connection: PlanetscaleConfig;
96
- } & DrizzleConfig<TSchema>) | ({
97
- client: 'mysql2';
98
- connection: Mysql2Config;
99
- } & MySql2DrizzleConfig<TSchema>) | ({
100
- client: 'tidb-serverless';
101
- connection: TiDBServerlessConfig;
102
- } & DrizzleConfig<TSchema>) | ({
103
- client: 'libsql';
104
- connection: LibsqlConfig;
105
- } & DrizzleConfig<TSchema>) | ({
106
- client: 'd1';
107
- connection: D1Database;
108
- } & DrizzleConfig<TSchema>) | ({
109
- client: 'bun-sqlite';
110
- connection: BunSqliteDatabaseConfig;
111
- } & DrizzleConfig<TSchema>) | ({
112
- client: 'better-sqlite3';
113
- connection: BetterSQLite3DatabaseConfig;
114
- } & DrizzleConfig<TSchema>);
115
- type DetermineClient<TParams extends InitializerParams<any>> = ClientDrizzleInstanceMap<TParams['schema']>[TParams['client']];
116
- export declare const drizzle: <TSchema extends Record<string, any>, TParams extends InitializerParams<TSchema>>(params: TParams) => Promise<DetermineClient<TParams>>;
117
- export {};
package/monodriver.js DELETED
@@ -1,99 +0,0 @@
1
- const importError = (libName) => {
2
- throw new Error(
3
- `Drizzle init error: unable to import selected database driver library '${libName}' - make sure it is installed.`
4
- );
5
- };
6
- const drizzle = async (params) => {
7
- const { client, connection } = params;
8
- const drizzleConfig = params;
9
- delete drizzleConfig.client;
10
- delete drizzleConfig.connection;
11
- switch (client) {
12
- case "node-postgres": {
13
- const { Pool } = await import("pg").catch(() => importError("pg"));
14
- const { drizzle: drizzle2 } = await import("./node-postgres");
15
- const instance = new Pool(connection);
16
- return drizzle2(instance, drizzleConfig);
17
- }
18
- case "aws-data-api-pg": {
19
- const { RDSDataClient } = await import("@aws-sdk/client-rds-data").catch(
20
- () => importError("@aws-sdk/client-rds-data")
21
- );
22
- const { drizzle: drizzle2 } = await import("./aws-data-api/pg");
23
- const instance = new RDSDataClient(connection);
24
- return drizzle2(instance, drizzleConfig);
25
- }
26
- case "better-sqlite3": {
27
- const { default: Client } = await import("better-sqlite3").catch(() => importError("better-sqlite3"));
28
- const { filename, options } = connection;
29
- const { drizzle: drizzle2 } = await import("./better-sqlite3");
30
- const instance = new Client(filename, options);
31
- return drizzle2(instance, drizzleConfig);
32
- }
33
- case "bun-sqlite": {
34
- const { Database: Client } = await import("bun:sqlite").catch(() => importError("bun:sqlite"));
35
- const { filename, options } = connection;
36
- const { drizzle: drizzle2 } = await import("./bun-sqlite");
37
- const instance = new Client(filename, options);
38
- return drizzle2(instance, drizzleConfig);
39
- }
40
- case "d1": {
41
- const { drizzle: drizzle2 } = await import("./d1");
42
- return drizzle2(connection, drizzleConfig);
43
- }
44
- case "libsql": {
45
- const { createClient } = await import("@libsql/client").catch(() => importError("@libsql/client"));
46
- const { drizzle: drizzle2 } = await import("./libsql");
47
- const instance = createClient(connection);
48
- return drizzle2(instance, drizzleConfig);
49
- }
50
- case "mysql2": {
51
- const { createConnection } = await import("mysql2/promise").catch(() => importError("mysql2/promise"));
52
- const instance = await createConnection(connection);
53
- const { drizzle: drizzle2 } = await import("./mysql2");
54
- return drizzle2(instance, drizzleConfig);
55
- }
56
- case "neon-http": {
57
- const { neon } = await import("@neondatabase/serverless").catch(() => importError("@neondatabase/serverless"));
58
- const { connectionString, options } = connection;
59
- const { drizzle: drizzle2 } = await import("./neon-http");
60
- const instance = neon(connectionString, options);
61
- return drizzle2(instance, drizzleConfig);
62
- }
63
- case "neon-serverless": {
64
- const { Pool } = await import("@neondatabase/serverless").catch(() => importError("@neondatabase/serverless"));
65
- const { drizzle: drizzle2 } = await import("./neon-serverless");
66
- const instance = new Pool(connection);
67
- return drizzle2(instance, drizzleConfig);
68
- }
69
- case "planetscale": {
70
- const { Client } = await import("@planetscale/database").catch(() => importError("@planetscale/database"));
71
- const { drizzle: drizzle2 } = await import("./planetscale-serverless");
72
- const instance = new Client(
73
- connection
74
- );
75
- return drizzle2(instance, drizzleConfig);
76
- }
77
- case "postgres-js": {
78
- const { default: client2 } = await import("postgres").catch(() => importError("postgres"));
79
- const { drizzle: drizzle2 } = await import("./postgres-js");
80
- const instance = client2(connection);
81
- return drizzle2(instance, drizzleConfig);
82
- }
83
- case "tidb-serverless": {
84
- const { connect } = await import("@tidbcloud/serverless").catch(() => importError("@tidbcloud/serverless"));
85
- const { drizzle: drizzle2 } = await import("./tidb-serverless");
86
- const instance = connect(connection);
87
- return drizzle2(instance, drizzleConfig);
88
- }
89
- case "vercel-postgres": {
90
- const { sql } = await import("@vercel/postgres").catch(() => importError("@vercel/postgres"));
91
- const { drizzle: drizzle2 } = await import("./vercel-postgres");
92
- return drizzle2(sql, drizzleConfig);
93
- }
94
- }
95
- };
96
- export {
97
- drizzle
98
- };
99
- //# sourceMappingURL=monodriver.js.map
package/monodriver.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/monodriver.ts"],"sourcesContent":["/* eslint-disable import/extensions */\nimport type { RDSDataClientConfig as RDSConfig } from '@aws-sdk/client-rds-data';\nimport type { Config as LibsqlConfig } from '@libsql/client';\nimport type {\n\tHTTPTransactionOptions as NeonHttpConfig,\n\tPoolConfig as NeonServerlessConfig,\n} from '@neondatabase/serverless';\nimport type { Config as PlanetscaleConfig } from '@planetscale/database';\nimport type { Config as TiDBServerlessConfig } from '@tidbcloud/serverless';\nimport type { VercelPool } from '@vercel/postgres';\nimport type { Options as BetterSQLite3Options } from 'better-sqlite3';\nimport type { PoolOptions as Mysql2Config } from 'mysql2';\nimport type { PoolConfig as NodePGPoolConfig } from 'pg';\nimport type { Options as PostgresJSOptions, PostgresType as PostgresJSPostgresType } from 'postgres';\nimport type { AwsDataApiPgDatabase, DrizzleAwsDataApiPgConfig } from './aws-data-api/pg/index.ts';\nimport type { BetterSQLite3Database } from './better-sqlite3/index.ts';\nimport type { BunSQLiteDatabase } from './bun-sqlite/index.ts';\nimport type { DrizzleD1Database } from './d1/index.ts';\nimport type { LibSQLDatabase } from './libsql/index.ts';\nimport type { MySql2Database, MySql2DrizzleConfig } from './mysql2/index.ts';\nimport type { NeonHttpDatabase } from './neon-http/index.ts';\nimport type { NeonDatabase } from './neon-serverless/index.ts';\nimport type { NodePgDatabase } from './node-postgres/index.ts';\nimport type { PlanetScaleDatabase } from './planetscale-serverless/index.ts';\nimport type { PostgresJsDatabase } from './postgres-js/index.ts';\nimport type { TiDBServerlessDatabase } from './tidb-serverless/index.ts';\nimport type { DrizzleConfig } from './utils.ts';\nimport type { VercelPgDatabase } from './vercel-postgres/index.ts';\n\ntype BunSqliteDatabaseOptions =\n\t| number\n\t| {\n\t\t/**\n\t\t * Open the database as read-only (no write operations, no create).\n\t\t *\n\t\t * Equivalent to {@link constants.SQLITE_OPEN_READONLY}\n\t\t */\n\t\treadonly?: boolean;\n\t\t/**\n\t\t * Allow creating a new database\n\t\t *\n\t\t * Equivalent to {@link constants.SQLITE_OPEN_CREATE}\n\t\t */\n\t\tcreate?: boolean;\n\t\t/**\n\t\t * Open the database as read-write\n\t\t *\n\t\t * Equivalent to {@link constants.SQLITE_OPEN_READWRITE}\n\t\t */\n\t\treadwrite?: boolean;\n\t};\n\ntype BunSqliteDatabaseConfig = {\n\tfilename?: string;\n\toptions?: BunSqliteDatabaseOptions;\n};\n\ntype BetterSQLite3DatabaseConfig = {\n\tfilename?: string | Buffer;\n\toptions?: BetterSQLite3Options;\n};\n\ntype MonodriverNeonHttpConfig = {\n\tconnectionString: string;\n\toptions?: NeonHttpConfig<boolean, boolean>;\n};\n\ntype ClientDrizzleInstanceMap<TSchema extends Record<string, any>> = {\n\t'node-postgres': NodePgDatabase<TSchema>;\n\t'postgres-js': PostgresJsDatabase<TSchema>;\n\t'neon-serverless': NeonDatabase<TSchema>;\n\t'neon-http': NeonHttpDatabase<TSchema>;\n\t'vercel-postgres': VercelPgDatabase<TSchema>;\n\t'aws-data-api-pg': AwsDataApiPgDatabase<TSchema>;\n\tplanetscale: PlanetScaleDatabase<TSchema>;\n\tmysql2: MySql2Database<TSchema>;\n\t'tidb-serverless': TiDBServerlessDatabase<TSchema>;\n\tlibsql: LibSQLDatabase<TSchema>;\n\td1: DrizzleD1Database<TSchema>;\n\t'bun-sqlite': BunSQLiteDatabase<TSchema>;\n\t'better-sqlite3': BetterSQLite3Database<TSchema>;\n};\n\ntype InitializerParams<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n> =\n\t| ({\n\t\tclient: 'node-postgres';\n\t\tconnection: NodePGPoolConfig;\n\t} & DrizzleConfig<TSchema>)\n\t| ({\n\t\tclient: 'postgres-js';\n\t\tconnection: PostgresJSOptions<Record<string, PostgresJSPostgresType>>;\n\t} & DrizzleConfig<TSchema>)\n\t| ({\n\t\tclient: 'neon-serverless';\n\t\tconnection: NeonServerlessConfig;\n\t} & DrizzleConfig<TSchema>)\n\t| ({\n\t\tclient: 'neon-http';\n\t\tconnection: MonodriverNeonHttpConfig;\n\t} & DrizzleConfig<TSchema>)\n\t| ({\n\t\tclient: 'vercel-postgres';\n\t\tconnection: VercelPool;\n\t} & DrizzleConfig<TSchema>)\n\t| ({\n\t\tclient: 'aws-data-api-pg';\n\t\tconnection: RDSConfig;\n\t} & DrizzleAwsDataApiPgConfig<TSchema>)\n\t| ({\n\t\tclient: 'planetscale';\n\t\tconnection: PlanetscaleConfig;\n\t} & DrizzleConfig<TSchema>)\n\t| ({\n\t\tclient: 'mysql2';\n\t\tconnection: Mysql2Config;\n\t} & MySql2DrizzleConfig<TSchema>)\n\t| ({\n\t\tclient: 'tidb-serverless';\n\t\tconnection: TiDBServerlessConfig;\n\t} & DrizzleConfig<TSchema>)\n\t| ({\n\t\tclient: 'libsql';\n\t\tconnection: LibsqlConfig;\n\t} & DrizzleConfig<TSchema>)\n\t| ({\n\t\tclient: 'd1';\n\t\tconnection: D1Database;\n\t} & DrizzleConfig<TSchema>)\n\t| ({\n\t\tclient: 'bun-sqlite';\n\t\tconnection: BunSqliteDatabaseConfig;\n\t} & DrizzleConfig<TSchema>)\n\t| ({\n\t\tclient: 'better-sqlite3';\n\t\tconnection: BetterSQLite3DatabaseConfig;\n\t} & DrizzleConfig<TSchema>);\n\ntype DetermineClient<\n\tTParams extends InitializerParams<any>,\n> = ClientDrizzleInstanceMap<TParams['schema']>[TParams['client']];\n\nconst importError = (libName: string) => {\n\tthrow new Error(\n\t\t`Drizzle init error: unable to import selected database driver library '${libName}' - make sure it is installed.`,\n\t);\n};\n\nexport const drizzle = async <\n\tTSchema extends Record<string, any>,\n\tTParams extends InitializerParams<TSchema>,\n>(params: TParams): Promise<DetermineClient<TParams>> => {\n\tconst { client, connection } = params;\n\tconst drizzleConfig = params as DrizzleConfig;\n\tdelete (<any> drizzleConfig).client;\n\tdelete (<any> drizzleConfig).connection;\n\n\tswitch (client) {\n\t\tcase 'node-postgres': {\n\t\t\tconst { Pool } = await import('pg').catch(() => importError('pg'));\n\t\t\tconst { drizzle } = await import('./node-postgres');\n\t\t\tconst instance = new Pool(connection as NodePGPoolConfig);\n\n\t\t\treturn drizzle(instance, drizzleConfig) as any;\n\t\t}\n\t\tcase 'aws-data-api-pg': {\n\t\t\tconst { RDSDataClient } = await import('@aws-sdk/client-rds-data').catch(() =>\n\t\t\t\timportError('@aws-sdk/client-rds-data')\n\t\t\t);\n\t\t\tconst { drizzle } = await import('./aws-data-api/pg');\n\t\t\tconst instance = new RDSDataClient(connection);\n\n\t\t\treturn drizzle(instance, drizzleConfig as any as DrizzleAwsDataApiPgConfig) as any;\n\t\t}\n\t\tcase 'better-sqlite3': {\n\t\t\tconst { default: Client } = await import('better-sqlite3').catch(() => importError('better-sqlite3'));\n\t\t\tconst { filename, options } = connection as BetterSQLite3DatabaseConfig;\n\t\t\tconst { drizzle } = await import('./better-sqlite3');\n\t\t\tconst instance = new Client(filename, options);\n\n\t\t\treturn drizzle(instance, drizzleConfig) as any;\n\t\t}\n\t\tcase 'bun-sqlite': {\n\t\t\tconst { Database: Client } = await import('bun:sqlite').catch(() => importError('bun:sqlite'));\n\t\t\tconst { filename, options } = connection as BunSqliteDatabaseConfig;\n\t\t\tconst { drizzle } = await import('./bun-sqlite');\n\t\t\tconst instance = new Client(filename, options);\n\n\t\t\treturn drizzle(instance, drizzleConfig) as any;\n\t\t}\n\t\tcase 'd1': {\n\t\t\tconst { drizzle } = await import('./d1');\n\t\t\treturn drizzle(connection as D1Database, drizzleConfig) as any;\n\t\t}\n\t\tcase 'libsql': {\n\t\t\tconst { createClient } = await import('@libsql/client').catch(() => importError('@libsql/client'));\n\t\t\tconst { drizzle } = await import('./libsql');\n\t\t\tconst instance = createClient(connection as LibsqlConfig);\n\n\t\t\treturn drizzle(instance, drizzleConfig) as any;\n\t\t}\n\t\tcase 'mysql2': {\n\t\t\tconst { createConnection } = await import('mysql2/promise').catch(() => importError('mysql2/promise'));\n\t\t\tconst instance = await createConnection(connection as Mysql2Config);\n\t\t\tconst { drizzle } = await import('./mysql2');\n\n\t\t\treturn drizzle(instance, drizzleConfig as MySql2DrizzleConfig) as any;\n\t\t}\n\t\tcase 'neon-http': {\n\t\t\tconst { neon } = await import('@neondatabase/serverless').catch(() => importError('@neondatabase/serverless'));\n\t\t\tconst { connectionString, options } = connection as MonodriverNeonHttpConfig;\n\t\t\tconst { drizzle } = await import('./neon-http');\n\t\t\tconst instance = neon(connectionString, options);\n\n\t\t\treturn drizzle(instance, drizzleConfig) as any;\n\t\t}\n\t\tcase 'neon-serverless': {\n\t\t\tconst { Pool } = await import('@neondatabase/serverless').catch(() => importError('@neondatabase/serverless'));\n\t\t\tconst { drizzle } = await import('./neon-serverless');\n\t\t\tconst instance = new Pool(connection as NeonServerlessConfig);\n\n\t\t\treturn drizzle(instance, drizzleConfig) as any;\n\t\t}\n\t\tcase 'planetscale': {\n\t\t\tconst { Client } = await import('@planetscale/database').catch(() => importError('@planetscale/database'));\n\t\t\tconst { drizzle } = await import('./planetscale-serverless');\n\t\t\tconst instance = new Client(\n\t\t\t\tconnection as PlanetscaleConfig,\n\t\t\t);\n\n\t\t\treturn drizzle(instance, drizzleConfig) as any;\n\t\t}\n\t\tcase 'postgres-js': {\n\t\t\tconst { default: client } = await import('postgres').catch(() => importError('postgres'));\n\t\t\tconst { drizzle } = await import('./postgres-js');\n\t\t\tconst instance = client(connection as PostgresJSOptions<Record<string, PostgresJSPostgresType>>);\n\n\t\t\treturn drizzle(instance, drizzleConfig) as any;\n\t\t}\n\t\tcase 'tidb-serverless': {\n\t\t\tconst { connect } = await import('@tidbcloud/serverless').catch(() => importError('@tidbcloud/serverless'));\n\t\t\tconst { drizzle } = await import('./tidb-serverless');\n\t\t\tconst instance = connect(connection as TiDBServerlessConfig);\n\n\t\t\treturn drizzle(instance, drizzleConfig) as any;\n\t\t}\n\t\tcase 'vercel-postgres': {\n\t\t\tconst { sql } = await import('@vercel/postgres').catch(() => importError('@vercel/postgres'));\n\t\t\tconst { drizzle } = await import('./vercel-postgres');\n\n\t\t\treturn drizzle(sql, drizzleConfig) as any;\n\t\t}\n\t}\n};\n"],"mappings":"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","names":["drizzle","client"]}