@event-driven-io/dumbo 0.13.0-beta.35 → 0.13.0-beta.36

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.
Files changed (87) hide show
  1. package/dist/cloudflare.cjs +379 -434
  2. package/dist/cloudflare.cjs.map +1 -1
  3. package/dist/cloudflare.d.cts +36 -29
  4. package/dist/cloudflare.d.ts +36 -29
  5. package/dist/cloudflare.js +343 -434
  6. package/dist/cloudflare.js.map +1 -1
  7. package/dist/core-BeyC5tHn.js +519 -0
  8. package/dist/core-BeyC5tHn.js.map +1 -0
  9. package/dist/core-Bf2ujUFy.js +379 -0
  10. package/dist/core-Bf2ujUFy.js.map +1 -0
  11. package/dist/core-BgYtAxCm.cjs +3237 -0
  12. package/dist/core-BgYtAxCm.cjs.map +1 -0
  13. package/dist/core-DDo4m0Z_.js +2262 -0
  14. package/dist/core-DDo4m0Z_.js.map +1 -0
  15. package/dist/core-DmbB4qMn.cjs +656 -0
  16. package/dist/core-DmbB4qMn.cjs.map +1 -0
  17. package/dist/core-Go_IA78L.cjs +450 -0
  18. package/dist/core-Go_IA78L.cjs.map +1 -0
  19. package/dist/{connectionString-Dch_MIRU.d.cts → index-BDSQvDH2.d.cts} +1010 -922
  20. package/dist/index-BdWFmDhJ.d.cts +68 -0
  21. package/dist/index-D1jryNqo.d.ts +198 -0
  22. package/dist/index-DaP2fTEX.d.ts +67 -0
  23. package/dist/index-DqVvUav9.d.cts +198 -0
  24. package/dist/index-S_wp0Eaf.d.cts +67 -0
  25. package/dist/index-cxtbLiju.d.ts +68 -0
  26. package/dist/{connectionString-Dch_MIRU.d.ts → index-zkszkJqP.d.ts} +1010 -922
  27. package/dist/index.cjs +212 -359
  28. package/dist/index.cjs.map +1 -1
  29. package/dist/index.d.cts +3 -132
  30. package/dist/index.d.ts +3 -132
  31. package/dist/index.js +52 -361
  32. package/dist/index.js.map +1 -1
  33. package/dist/pg.cjs +366 -431
  34. package/dist/pg.cjs.map +1 -1
  35. package/dist/pg.d.cts +83 -72
  36. package/dist/pg.d.ts +83 -72
  37. package/dist/pg.js +320 -431
  38. package/dist/pg.js.map +1 -1
  39. package/dist/postgreSQLMetadata-LqX-Z_wo.cjs +118 -0
  40. package/dist/postgreSQLMetadata-LqX-Z_wo.cjs.map +1 -0
  41. package/dist/postgreSQLMetadata-zMq8yJo_.js +65 -0
  42. package/dist/postgreSQLMetadata-zMq8yJo_.js.map +1 -0
  43. package/dist/postgresql.cjs +25 -50
  44. package/dist/postgresql.d.cts +3 -61
  45. package/dist/postgresql.d.ts +3 -61
  46. package/dist/postgresql.js +4 -50
  47. package/dist/sqlite.cjs +30 -60
  48. package/dist/sqlite.d.cts +3 -190
  49. package/dist/sqlite.d.ts +3 -190
  50. package/dist/sqlite.js +4 -60
  51. package/dist/sqlite3.cjs +312 -380
  52. package/dist/sqlite3.cjs.map +1 -1
  53. package/dist/sqlite3.d.cts +79 -77
  54. package/dist/sqlite3.d.ts +79 -77
  55. package/dist/sqlite3.js +276 -378
  56. package/dist/sqlite3.js.map +1 -1
  57. package/dist/sqliteMetadata-BoQ7Sc9I.js +29 -0
  58. package/dist/sqliteMetadata-BoQ7Sc9I.js.map +1 -0
  59. package/dist/sqliteMetadata-D_2pKeCC.cjs +46 -0
  60. package/dist/sqliteMetadata-D_2pKeCC.cjs.map +1 -0
  61. package/package.json +12 -12
  62. package/dist/chunk-33P5766L.js +0 -83
  63. package/dist/chunk-33P5766L.js.map +0 -1
  64. package/dist/chunk-4MMMEDQ7.cjs +0 -2944
  65. package/dist/chunk-4MMMEDQ7.cjs.map +0 -1
  66. package/dist/chunk-6HAHSSPW.js +0 -701
  67. package/dist/chunk-6HAHSSPW.js.map +0 -1
  68. package/dist/chunk-GNH5XC6D.cjs +0 -481
  69. package/dist/chunk-GNH5XC6D.cjs.map +0 -1
  70. package/dist/chunk-H2JBS7HM.js +0 -2944
  71. package/dist/chunk-H2JBS7HM.js.map +0 -1
  72. package/dist/chunk-JIZGCEPE.cjs +0 -701
  73. package/dist/chunk-JIZGCEPE.cjs.map +0 -1
  74. package/dist/chunk-NJI6PJFZ.cjs +0 -83
  75. package/dist/chunk-NJI6PJFZ.cjs.map +0 -1
  76. package/dist/chunk-RQ3KKMTP.cjs +0 -34
  77. package/dist/chunk-RQ3KKMTP.cjs.map +0 -1
  78. package/dist/chunk-UK7MXVS2.js +0 -34
  79. package/dist/chunk-UK7MXVS2.js.map +0 -1
  80. package/dist/chunk-Y5TD53QE.js +0 -481
  81. package/dist/chunk-Y5TD53QE.js.map +0 -1
  82. package/dist/columnProcessors-Be2uMYjS.d.cts +0 -8
  83. package/dist/columnProcessors-D0ivj_SU.d.ts +0 -8
  84. package/dist/postgresql.cjs.map +0 -1
  85. package/dist/postgresql.js.map +0 -1
  86. package/dist/sqlite.cjs.map +0 -1
  87. package/dist/sqlite.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/storage/sqlite/sqlite3/connections/connection.ts","../src/storage/sqlite/core/connections/pragmas.ts","../src/storage/sqlite/sqlite3/index.ts"],"sourcesContent":["import sqlite3 from 'sqlite3';\nimport type { JSONSerializer } from '../../../../core';\nimport {\n BatchCommandNoChangesError,\n SQL,\n type Connection,\n type QueryResult,\n type QueryResultRow,\n type SQLQueryOptions,\n} from '../../../../core';\nimport { mapSqliteError } from '../../core/errors/errorMapper';\nimport type {\n SQLiteClient,\n SQLiteClientOrPoolClient,\n SQLiteConnectionOptions,\n SQLiteDriverType,\n SQLiteFileNameOrConnectionString,\n SQLiteTransaction,\n SQLiteTransactionOptions,\n} from '../../core';\nimport {\n DEFAULT_SQLITE_PRAGMA_OPTIONS,\n InMemorySQLiteDatabase,\n sqliteConnection,\n type BatchSQLiteCommandOptions,\n type SQLiteClientOptions,\n type SQLiteCommandOptions,\n type SQLiteParameters,\n} from '../../core/connections';\nimport {\n buildConnectionPragmaStatements,\n buildDatabasePragmaStatements,\n mergePragmaOptions,\n} from '../../core/connections/pragmas';\nimport { sqliteFormatter } from '../../core/sql/formatter';\n\nexport type SQLite3DriverType = SQLiteDriverType<'sqlite3'>;\nexport const SQLite3DriverType: SQLite3DriverType = 'SQLite:sqlite3';\n\nexport type ConnectionCheckResult =\n | { successful: true }\n | {\n successful: false;\n code: string | undefined;\n errorType: 'ConnectionRefused' | 'Authentication' | 'Unknown';\n error: unknown;\n };\n\nconst hasReturningClause = (sql: string): boolean => /\\bRETURNING\\b/i.test(sql);\n\nexport type SQLite3ClientOptions = SQLiteClientOptions &\n SQLiteFileNameOrConnectionString;\n\nexport type SQLite3Client = SQLiteClientOrPoolClient;\n\nexport type SQLite3ConnectionOptions = SQLiteConnectionOptions &\n ((SQLite3ClientOptions & { client?: never }) | { client: SQLite3Client });\n\nexport type SQLite3Connection<\n ClientType extends SQLiteClientOrPoolClient = SQLiteClientOrPoolClient,\n> = Connection<\n SQLite3Connection,\n SQLite3DriverType,\n ClientType,\n SQLiteTransaction<SQLite3Connection, SQLiteTransactionOptions>\n>;\n\nconst applyPragma = (\n database: sqlite3.Database,\n pragma: string,\n value: string | number,\n) => {\n return new Promise<void>((resolve, reject) => {\n database.run(`PRAGMA ${pragma} = ${value};`, (err) => {\n if (err) reject(err);\n else resolve();\n });\n });\n};\n\nconst queryPragma = (\n database: sqlite3.Database,\n pragma: string,\n): Promise<string> =>\n new Promise((resolve, reject) => {\n database.get(\n `PRAGMA ${pragma};`,\n (err: Error | null, row: { [key: string]: string } | null) => {\n if (err) reject(err);\n else resolve(row?.[pragma] ?? '');\n },\n );\n });\n\nconst applyPragmas = (\n database: sqlite3.Database,\n pragmas: Array<{ pragma: string; value: string | number }>,\n) =>\n pragmas.reduce(\n (promise, { pragma, value }) =>\n promise.then(() => applyPragma(database, pragma, value)),\n Promise.resolve(),\n );\n\nexport const sqlite3Client = (\n options: SQLite3ClientOptions & {\n serializer: JSONSerializer;\n },\n): SQLiteClient => {\n let db: sqlite3.Database;\n\n let isClosed = false;\n\n const { serializer } = options;\n\n const connectionString =\n options.fileName ?? options.connectionString ?? InMemorySQLiteDatabase;\n\n const finalPragmas = mergePragmaOptions(\n String(connectionString),\n options.pragmaOptions,\n );\n\n const connectionPragmas = buildConnectionPragmaStatements(finalPragmas);\n\n const connect: () => Promise<void> = () =>\n db\n ? Promise.resolve()\n : new Promise((resolve, reject) => {\n try {\n db = new sqlite3.Database(\n connectionString,\n sqlite3.OPEN_URI | sqlite3.OPEN_READWRITE | sqlite3.OPEN_CREATE,\n (err) => {\n if (err) {\n reject(err);\n return;\n }\n\n const busyTimeout =\n finalPragmas.busy_timeout ??\n DEFAULT_SQLITE_PRAGMA_OPTIONS.busy_timeout!;\n\n db.configure('busyTimeout', busyTimeout);\n\n applyPragmas(\n db,\n connectionPragmas.filter((p) => p.pragma !== 'busy_timeout'),\n )\n .then(async () => {\n if (options.skipDatabasePragmas) return;\n\n const databasePragmas =\n buildDatabasePragmaStatements(finalPragmas);\n for (const { pragma, value } of databasePragmas) {\n const current = await queryPragma(db, pragma);\n if (\n current.toUpperCase() !== String(value).toUpperCase()\n ) {\n await applyPragma(db, pragma, value);\n }\n }\n })\n .then(() => resolve())\n .catch(reject);\n },\n );\n\n // Apply connection-level pragmas first (busy_timeout is first)\n } catch (error) {\n reject(error as Error);\n }\n });\n\n const executeQuery = <T>(\n sql: string,\n params?: SQLiteParameters[],\n ): Promise<T[]> =>\n new Promise((resolve, reject) => {\n try {\n db.all(sql, params ?? [], (err: Error | null, result: T[]) => {\n if (err) {\n reject(err);\n return;\n }\n\n resolve(result);\n });\n } catch (error) {\n reject(error as Error);\n }\n });\n\n const executeCommand = <Result extends QueryResultRow = QueryResultRow>(\n sql: string,\n params?: SQLiteParameters[],\n options?: SQLiteCommandOptions,\n ): Promise<QueryResult<Result>> =>\n new Promise((resolve, reject) => {\n try {\n if (options?.ignoreChangesCount === true) {\n db.run(\n sql,\n params ?? [],\n function (err: Error | null, rows: Result[]) {\n if (err) {\n reject(err);\n return;\n }\n resolve({\n rowCount: 0,\n rows: rows ?? [],\n });\n },\n );\n return;\n }\n\n if (hasReturningClause(sql)) {\n db.all(sql, params ?? [], (err, rows: Result[]) => {\n if (err) return reject(err);\n resolve({ rowCount: rows.length, rows });\n });\n return;\n }\n\n // OD: 2026-01-21\n // This is needed as SQLite does not return changes count properly\n // We need to query it separately with SELECT changes()\n // This may be fixed eventually in sqlite3 library as Node.js team did here:\n // https://github.com/nodejs/node/issues/57344\n // But for now, we do it manually, as a workaround\n // We also serialize it to avoid race conditions\n db.serialize(() => {\n let hasFailed = false;\n let resultRows: Result[] = [];\n\n db.all(sql, params ?? [], (err, rows: Result[]) => {\n if (err) {\n hasFailed = true;\n return reject(err);\n }\n resultRows = rows;\n });\n\n db.get(\n 'SELECT changes() as changes',\n (err, row: { changes: number } | null) => {\n // If the first query failed, we exit immediately.\n // The promise is already rejected; we don't want to touch it.\n if (hasFailed) return;\n\n if (err) return reject(err);\n\n resolve({\n rowCount: row?.changes ?? 0,\n rows: resultRows,\n });\n },\n );\n });\n } catch (error) {\n reject(error as Error);\n }\n });\n\n return {\n connect,\n close: async (): Promise<void> => {\n if (isClosed) {\n return;\n }\n isClosed = true;\n if (db) {\n try {\n await new Promise<void>((resolve, reject) => {\n db.close((err: Error | null) => {\n if (err) {\n reject(err);\n return;\n }\n resolve();\n });\n });\n } catch (error) {\n throw mapSqliteError(error);\n }\n }\n },\n query: async <Result extends QueryResultRow = QueryResultRow>(\n sql: SQL,\n _options?: SQLQueryOptions,\n ): Promise<QueryResult<Result>> => {\n try {\n const { query, params } = sqliteFormatter.format(sql, {\n serializer,\n });\n const result = await executeQuery<Result>(\n query,\n params as SQLiteParameters[],\n );\n return { rowCount: result.length, rows: result };\n } catch (error) {\n throw mapSqliteError(error);\n }\n },\n batchQuery: async <Result extends QueryResultRow = QueryResultRow>(\n sqls: SQL[],\n _options?: SQLQueryOptions,\n ): Promise<QueryResult<Result>[]> => {\n try {\n const results: QueryResult<Result>[] = [];\n for (const sql of sqls) {\n const { query, params } = sqliteFormatter.format(sql, {\n serializer,\n });\n const result = await executeQuery<Result>(\n query,\n params as SQLiteParameters[],\n );\n results.push({ rowCount: result.length, rows: result });\n }\n return results;\n } catch (error) {\n throw mapSqliteError(error);\n }\n },\n command: async <Result extends QueryResultRow = QueryResultRow>(\n sql: SQL,\n options?: SQLiteCommandOptions,\n ): Promise<QueryResult<Result>> => {\n try {\n const { query, params } = sqliteFormatter.format(sql, {\n serializer,\n });\n\n return await executeCommand<Result>(\n query,\n params as SQLiteParameters[],\n options,\n );\n } catch (error) {\n throw mapSqliteError(error);\n }\n },\n batchCommand: async <Result extends QueryResultRow = QueryResultRow>(\n sqls: SQL[],\n options?: BatchSQLiteCommandOptions,\n ): Promise<QueryResult<Result>[]> => {\n try {\n const results: QueryResult<Result>[] = [];\n\n for (let i = 0; i < sqls.length; i++) {\n const { query, params } = sqliteFormatter.format(sqls[i]!, {\n serializer,\n });\n const result = await executeCommand<Result>(\n query,\n params as SQLiteParameters[],\n options,\n );\n results.push(result);\n\n if (options?.assertChanges && (result.rowCount ?? 0) === 0) {\n throw new BatchCommandNoChangesError(i);\n }\n }\n return results;\n } catch (error) {\n throw mapSqliteError(error);\n }\n },\n };\n};\n\nexport const checkConnection = async (\n fileName: string,\n serializer: JSONSerializer,\n): Promise<ConnectionCheckResult> => {\n const client = sqlite3Client({\n fileName,\n serializer,\n });\n\n try {\n await client.query(SQL`SELECT 1`);\n return { successful: true };\n } catch (error) {\n const code =\n error instanceof Error &&\n 'code' in error &&\n typeof error.code === 'string'\n ? error.code\n : undefined;\n\n return {\n successful: false,\n errorType:\n code === 'SQLITE_CANTOPEN'\n ? 'ConnectionRefused'\n : code === 'SQLITE_AUTH'\n ? 'Authentication'\n : 'Unknown',\n code,\n error,\n };\n } finally {\n await client.close();\n }\n};\n\nexport const sqlite3Connection = (\n options: SQLite3ConnectionOptions & { serializer: JSONSerializer },\n) =>\n sqliteConnection<SQLite3Connection, SQLite3ConnectionOptions>({\n type: 'Client',\n driverType: SQLite3DriverType,\n sqliteClientFactory: (connectionOptions) => {\n if ('client' in connectionOptions && connectionOptions.client) {\n return connectionOptions.client;\n }\n return sqlite3Client({\n ...connectionOptions,\n serializer: options.serializer,\n });\n },\n connectionOptions: options,\n serializer: options.serializer,\n });\n","import { parsePragmasFromConnectionString } from './connectionString';\nimport {\n DEFAULT_SQLITE_PRAGMA_OPTIONS,\n type SQLitePragmaOptions,\n} from './index';\n\nexport const mergePragmaOptions = (\n connectionString: string,\n userOptions?: Partial<SQLitePragmaOptions>,\n): SQLitePragmaOptions => {\n const connectionStringPragmas =\n parsePragmasFromConnectionString(connectionString);\n\n return {\n ...DEFAULT_SQLITE_PRAGMA_OPTIONS,\n ...connectionStringPragmas,\n ...userOptions,\n };\n};\n\nexport const buildConnectionPragmaStatements = (\n pragmas: SQLitePragmaOptions,\n): Array<{ pragma: string; value: string | number }> => [\n // busy_timeout FIRST - enables waiting on locks for subsequent operations\n { pragma: 'busy_timeout', value: pragmas.busy_timeout! },\n { pragma: 'synchronous', value: pragmas.synchronous! },\n { pragma: 'cache_size', value: pragmas.cache_size! },\n { pragma: 'foreign_keys', value: pragmas.foreign_keys ? 'ON' : 'OFF' },\n { pragma: 'temp_store', value: pragmas.temp_store! },\n ...(pragmas.mmap_size !== undefined\n ? [{ pragma: 'mmap_size', value: pragmas.mmap_size }]\n : []),\n];\n\nexport const buildDatabasePragmaStatements = (\n pragmas: SQLitePragmaOptions,\n): Array<{ pragma: string; value: string | number }> => [\n { pragma: 'journal_mode', value: pragmas.journal_mode! },\n];\n","export * from './connections';\nimport {\n canHandleDriverWithConnectionString,\n dumboDatabaseDriverRegistry,\n JSONSerializer,\n type DumboConnectionOptions,\n type DumboDatabaseDriver,\n} from '../../../core';\nimport {\n DefaultSQLiteMigratorOptions,\n SQLiteConnectionString,\n sqliteFormatter,\n sqliteMetadata,\n sqlitePool,\n toSqlitePoolOptions,\n type SQLitePool,\n type SQLitePoolOptions,\n} from '../core';\nimport {\n sqlite3Connection,\n SQLite3DriverType,\n type SQLite3Connection,\n type SQLite3ConnectionOptions,\n} from './connections';\n\nexport type SQLite3DumboOptions = Omit<\n SQLitePoolOptions<SQLite3Connection, SQLite3ConnectionOptions>,\n 'driverType'\n> &\n SQLite3ConnectionOptions & { serializer?: JSONSerializer };\n\nexport type SQLite3PoolOptions = SQLite3DumboOptions;\n\nexport type Sqlite3Pool = SQLitePool<SQLite3Connection>;\n\nexport const sqlite3Pool = (options: SQLite3DumboOptions) =>\n sqlitePool(\n toSqlitePoolOptions({\n ...options,\n driverType: SQLite3DriverType,\n ...('connection' in options\n ? {}\n : {\n connectionOptions: options as SQLite3ConnectionOptions,\n sqliteConnectionFactory: (opts: SQLite3ConnectionOptions) =>\n sqlite3Connection({\n ...opts,\n serializer: options.serializer ?? JSONSerializer,\n }),\n }),\n }),\n );\n\nconst tryParseConnectionString = (connectionString: string) => {\n try {\n return SQLiteConnectionString(connectionString);\n } catch {\n return null;\n }\n};\n\nexport const sqlite3DumboDriver = {\n driverType: SQLite3DriverType,\n createPool: (options) => sqlite3Pool(options as SQLite3DumboOptions),\n sqlFormatter: sqliteFormatter,\n defaultMigratorOptions: DefaultSQLiteMigratorOptions,\n canHandle: canHandleDriverWithConnectionString(\n SQLite3DriverType,\n tryParseConnectionString,\n ),\n databaseMetadata: sqliteMetadata,\n} satisfies DumboDatabaseDriver<\n SQLite3Connection,\n SQLite3DumboOptions,\n Sqlite3Pool\n>;\n\nexport const useSqlite3DumboDriver = () => {\n dumboDatabaseDriverRegistry.register(SQLite3DriverType, sqlite3DumboDriver);\n};\n\nexport type SQLite3DumboConnectionOptions = DumboConnectionOptions<\n typeof sqlite3DumboDriver\n> & { connectionString: string | SQLiteConnectionString };\n\nuseSqlite3DumboDriver();\n\nexport * from './connections';\nexport * from './formatter';\nexport * from './transactions';\n"],"mappings":"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","names":["options"]}
1
+ {"version":3,"file":"sqlite3.js","names":[],"sources":["../src/storage/sqlite/core/connections/pragmas.ts","../src/storage/sqlite/sqlite3/connections/connection.ts","../src/storage/sqlite/sqlite3/index.ts"],"sourcesContent":["import { parsePragmasFromConnectionString } from './connectionString';\nimport {\n DEFAULT_SQLITE_PRAGMA_OPTIONS,\n type SQLitePragmaOptions,\n} from './index';\n\nexport const mergePragmaOptions = (\n connectionString: string,\n userOptions?: Partial<SQLitePragmaOptions>,\n): SQLitePragmaOptions => {\n const connectionStringPragmas =\n parsePragmasFromConnectionString(connectionString);\n\n return {\n ...DEFAULT_SQLITE_PRAGMA_OPTIONS,\n ...connectionStringPragmas,\n ...userOptions,\n };\n};\n\nexport const buildConnectionPragmaStatements = (\n pragmas: SQLitePragmaOptions,\n): Array<{ pragma: string; value: string | number }> => [\n // busy_timeout FIRST - enables waiting on locks for subsequent operations\n { pragma: 'busy_timeout', value: pragmas.busy_timeout! },\n { pragma: 'synchronous', value: pragmas.synchronous! },\n { pragma: 'cache_size', value: pragmas.cache_size! },\n { pragma: 'foreign_keys', value: pragmas.foreign_keys ? 'ON' : 'OFF' },\n { pragma: 'temp_store', value: pragmas.temp_store! },\n ...(pragmas.mmap_size !== undefined\n ? [{ pragma: 'mmap_size', value: pragmas.mmap_size }]\n : []),\n];\n\nexport const buildDatabasePragmaStatements = (\n pragmas: SQLitePragmaOptions,\n): Array<{ pragma: string; value: string | number }> => [\n { pragma: 'journal_mode', value: pragmas.journal_mode! },\n];\n","import sqlite3 from 'sqlite3';\nimport type { JSONSerializer } from '../../../../core';\nimport {\n BatchCommandNoChangesError,\n SQL,\n type Connection,\n type QueryResult,\n type QueryResultRow,\n type SQLQueryOptions,\n} from '../../../../core';\nimport type {\n SQLiteClient,\n SQLiteClientOrPoolClient,\n SQLiteConnectionOptions,\n SQLiteDriverType,\n SQLiteFileNameOrConnectionString,\n SQLiteTransaction,\n SQLiteTransactionOptions,\n} from '../../core';\nimport {\n DEFAULT_SQLITE_PRAGMA_OPTIONS,\n InMemorySQLiteDatabase,\n sqliteConnection,\n type BatchSQLiteCommandOptions,\n type SQLiteClientOptions,\n type SQLiteCommandOptions,\n type SQLiteParameters,\n} from '../../core/connections';\nimport {\n buildConnectionPragmaStatements,\n buildDatabasePragmaStatements,\n mergePragmaOptions,\n} from '../../core/connections/pragmas';\nimport { mapSqliteError } from '../../core/errors/errorMapper';\nimport { sqliteFormatter } from '../../core/sql/formatter';\n\nexport type SQLite3DriverType = SQLiteDriverType<'sqlite3'>;\nexport const SQLite3DriverType: SQLite3DriverType = 'SQLite:sqlite3';\n\nexport type ConnectionCheckResult =\n | { successful: true }\n | {\n successful: false;\n code: string | undefined;\n errorType: 'ConnectionRefused' | 'Authentication' | 'Unknown';\n error: unknown;\n };\n\nconst hasReturningClause = (sql: string): boolean => /\\bRETURNING\\b/i.test(sql);\n\nexport type SQLite3ClientOptions = SQLiteClientOptions &\n SQLiteFileNameOrConnectionString;\n\nexport type SQLite3Client = SQLiteClientOrPoolClient;\n\nexport type SQLite3ConnectionOptions = SQLiteConnectionOptions &\n ((SQLite3ClientOptions & { client?: never }) | { client: SQLite3Client });\n\nexport type SQLite3Connection<\n ClientType extends SQLiteClientOrPoolClient = SQLiteClientOrPoolClient,\n> = Connection<\n SQLite3Connection,\n SQLite3DriverType,\n ClientType,\n SQLiteTransaction<SQLite3Connection, SQLiteTransactionOptions>\n>;\n\nconst applyPragma = (\n database: sqlite3.Database,\n pragma: string,\n value: string | number,\n) => {\n return new Promise<void>((resolve, reject) => {\n database.run(`PRAGMA ${pragma} = ${value};`, (err) => {\n if (err) reject(err);\n else resolve();\n });\n });\n};\n\nconst queryPragma = (\n database: sqlite3.Database,\n pragma: string,\n): Promise<string> =>\n new Promise((resolve, reject) => {\n database.get(\n `PRAGMA ${pragma};`,\n (err: Error | null, row: { [key: string]: string } | null) => {\n if (err) reject(err);\n else resolve(row?.[pragma] ?? '');\n },\n );\n });\n\nconst applyPragmas = (\n database: sqlite3.Database,\n pragmas: Array<{ pragma: string; value: string | number }>,\n) =>\n pragmas.reduce(\n (promise, { pragma, value }) =>\n promise.then(() => applyPragma(database, pragma, value)),\n Promise.resolve(),\n );\n\nexport const sqlite3Client = (\n options: SQLite3ClientOptions & {\n serializer: JSONSerializer;\n },\n): SQLiteClient => {\n let db: sqlite3.Database;\n\n let isClosed = false;\n\n const { serializer } = options;\n\n const connectionString =\n options.fileName ?? options.connectionString ?? InMemorySQLiteDatabase;\n\n const finalPragmas = mergePragmaOptions(\n String(connectionString),\n options.pragmaOptions,\n );\n\n const connectionPragmas = buildConnectionPragmaStatements(finalPragmas);\n\n const connect: () => Promise<void> = () =>\n db\n ? Promise.resolve()\n : new Promise((resolve, reject) => {\n try {\n db = new sqlite3.Database(\n connectionString,\n sqlite3.OPEN_URI | sqlite3.OPEN_READWRITE | sqlite3.OPEN_CREATE,\n (err) => {\n if (err) {\n reject(err);\n return;\n }\n\n const busyTimeout =\n finalPragmas.busy_timeout ??\n DEFAULT_SQLITE_PRAGMA_OPTIONS.busy_timeout!;\n\n db.configure('busyTimeout', busyTimeout);\n\n applyPragmas(\n db,\n connectionPragmas.filter((p) => p.pragma !== 'busy_timeout'),\n )\n .then(async () => {\n if (options.skipDatabasePragmas) return;\n\n const databasePragmas =\n buildDatabasePragmaStatements(finalPragmas);\n for (const { pragma, value } of databasePragmas) {\n const current = await queryPragma(db, pragma);\n if (\n current.toUpperCase() !== String(value).toUpperCase()\n ) {\n await applyPragma(db, pragma, value);\n }\n }\n })\n .then(() => resolve())\n .catch(reject);\n },\n );\n\n // Apply connection-level pragmas first (busy_timeout is first)\n } catch (error) {\n reject(error instanceof Error ? error : new Error(String(error)));\n }\n });\n\n const executeQuery = <T>(\n sql: string,\n params?: SQLiteParameters[],\n ): Promise<T[]> =>\n new Promise((resolve, reject) => {\n try {\n db.all(sql, params ?? [], (err: Error | null, result: T[]) => {\n if (err) {\n reject(err);\n return;\n }\n\n resolve(result);\n });\n } catch (error) {\n reject(error instanceof Error ? error : new Error(String(error)));\n }\n });\n\n const executeCommand = <Result extends QueryResultRow = QueryResultRow>(\n sql: string,\n params?: SQLiteParameters[],\n options?: SQLiteCommandOptions,\n ): Promise<QueryResult<Result>> =>\n new Promise((resolve, reject) => {\n try {\n if (options?.ignoreChangesCount === true) {\n db.run(\n sql,\n params ?? [],\n function (err: Error | null, rows: Result[]) {\n if (err) {\n reject(err);\n return;\n }\n resolve({\n rowCount: 0,\n rows: rows ?? [],\n });\n },\n );\n return;\n }\n\n if (hasReturningClause(sql)) {\n db.all(sql, params ?? [], (err, rows: Result[]) => {\n if (err) return reject(err);\n resolve({ rowCount: rows.length, rows });\n });\n return;\n }\n\n // OD: 2026-01-21\n // This is needed as SQLite does not return changes count properly\n // We need to query it separately with SELECT changes()\n // This may be fixed eventually in sqlite3 library as Node.js team did here:\n // https://github.com/nodejs/node/issues/57344\n // But for now, we do it manually, as a workaround\n // We also serialize it to avoid race conditions\n db.serialize(() => {\n let hasFailed = false;\n let resultRows: Result[] = [];\n\n db.all(sql, params ?? [], (err, rows: Result[]) => {\n if (err) {\n hasFailed = true;\n return reject(err);\n }\n resultRows = rows;\n });\n\n db.get(\n 'SELECT changes() as changes',\n (err, row: { changes: number } | null) => {\n // If the first query failed, we exit immediately.\n // The promise is already rejected; we don't want to touch it.\n if (hasFailed) return;\n\n if (err) return reject(err);\n\n resolve({\n rowCount: row?.changes ?? 0,\n rows: resultRows,\n });\n },\n );\n });\n } catch (error) {\n reject(error instanceof Error ? error : new Error(String(error)));\n }\n });\n\n return {\n connect,\n close: async (): Promise<void> => {\n if (isClosed) {\n return;\n }\n isClosed = true;\n if (db) {\n try {\n await new Promise<void>((resolve, reject) => {\n db.close((err: Error | null) => {\n if (err) {\n reject(err);\n return;\n }\n resolve();\n });\n });\n } catch (error) {\n throw mapSqliteError(error);\n }\n }\n },\n query: async <Result extends QueryResultRow = QueryResultRow>(\n sql: SQL,\n _options?: SQLQueryOptions,\n ): Promise<QueryResult<Result>> => {\n try {\n const { query, params } = sqliteFormatter.format(sql, {\n serializer,\n });\n const result = await executeQuery<Result>(\n query,\n params as SQLiteParameters[],\n );\n return { rowCount: result.length, rows: result };\n } catch (error) {\n throw mapSqliteError(error);\n }\n },\n batchQuery: async <Result extends QueryResultRow = QueryResultRow>(\n sqls: SQL[],\n _options?: SQLQueryOptions,\n ): Promise<QueryResult<Result>[]> => {\n try {\n const results: QueryResult<Result>[] = [];\n for (const sql of sqls) {\n const { query, params } = sqliteFormatter.format(sql, {\n serializer,\n });\n const result = await executeQuery<Result>(\n query,\n params as SQLiteParameters[],\n );\n results.push({ rowCount: result.length, rows: result });\n }\n return results;\n } catch (error) {\n throw mapSqliteError(error);\n }\n },\n command: async <Result extends QueryResultRow = QueryResultRow>(\n sql: SQL,\n options?: SQLiteCommandOptions,\n ): Promise<QueryResult<Result>> => {\n try {\n const { query, params } = sqliteFormatter.format(sql, {\n serializer,\n });\n\n return await executeCommand<Result>(\n query,\n params as SQLiteParameters[],\n options,\n );\n } catch (error) {\n throw mapSqliteError(error);\n }\n },\n batchCommand: async <Result extends QueryResultRow = QueryResultRow>(\n sqls: SQL[],\n options?: BatchSQLiteCommandOptions,\n ): Promise<QueryResult<Result>[]> => {\n try {\n const results: QueryResult<Result>[] = [];\n\n for (let i = 0; i < sqls.length; i++) {\n const { query, params } = sqliteFormatter.format(sqls[i]!, {\n serializer,\n });\n const result = await executeCommand<Result>(\n query,\n params as SQLiteParameters[],\n options,\n );\n results.push(result);\n\n if (options?.assertChanges && (result.rowCount ?? 0) === 0) {\n throw new BatchCommandNoChangesError(i);\n }\n }\n return results;\n } catch (error) {\n throw mapSqliteError(error);\n }\n },\n };\n};\n\nexport const checkConnection = async (\n fileName: string,\n serializer: JSONSerializer,\n): Promise<ConnectionCheckResult> => {\n const client = sqlite3Client({\n fileName,\n serializer,\n });\n\n try {\n await client.query(SQL`SELECT 1`);\n return { successful: true };\n } catch (error) {\n const code =\n error instanceof Error &&\n 'code' in error &&\n typeof error.code === 'string'\n ? error.code\n : undefined;\n\n return {\n successful: false,\n errorType:\n code === 'SQLITE_CANTOPEN'\n ? 'ConnectionRefused'\n : code === 'SQLITE_AUTH'\n ? 'Authentication'\n : 'Unknown',\n code,\n error,\n };\n } finally {\n await client.close();\n }\n};\n\nexport const sqlite3Connection = (\n options: SQLite3ConnectionOptions & { serializer: JSONSerializer },\n) =>\n sqliteConnection<SQLite3Connection, SQLite3ConnectionOptions>({\n type: 'Client',\n driverType: SQLite3DriverType,\n sqliteClientFactory: (connectionOptions) => {\n if ('client' in connectionOptions && connectionOptions.client) {\n return connectionOptions.client;\n }\n return sqlite3Client({\n ...connectionOptions,\n serializer: options.serializer,\n });\n },\n connectionOptions: options,\n serializer: options.serializer,\n });\n","export * from './connections';\nimport {\n canHandleDriverWithConnectionString,\n dumboDatabaseDriverRegistry,\n JSONSerializer,\n type DumboConnectionOptions,\n type DumboDatabaseDriver,\n} from '../../../core';\nimport {\n DefaultSQLiteMigratorOptions,\n SQLiteConnectionString,\n sqliteFormatter,\n sqliteMetadata,\n sqlitePool,\n toSqlitePoolOptions,\n type SQLitePool,\n type SQLitePoolOptions,\n} from '../core';\nimport {\n sqlite3Connection,\n SQLite3DriverType,\n type SQLite3Connection,\n type SQLite3ConnectionOptions,\n} from './connections';\n\nexport type SQLite3DumboOptions = Omit<\n SQLitePoolOptions<SQLite3Connection, SQLite3ConnectionOptions>,\n 'driverType'\n> &\n SQLite3ConnectionOptions & { serializer?: JSONSerializer };\n\nexport type SQLite3PoolOptions = SQLite3DumboOptions;\n\nexport type Sqlite3Pool = SQLitePool<SQLite3Connection>;\n\nexport const sqlite3Pool = (options: SQLite3DumboOptions) =>\n sqlitePool(\n toSqlitePoolOptions({\n ...options,\n driverType: SQLite3DriverType,\n ...('connection' in options\n ? {}\n : {\n connectionOptions: options,\n sqliteConnectionFactory: (opts: SQLite3ConnectionOptions) =>\n sqlite3Connection({\n ...opts,\n serializer: options.serializer ?? JSONSerializer,\n }),\n }),\n }),\n );\n\nconst tryParseConnectionString = (connectionString: string) => {\n try {\n return SQLiteConnectionString(connectionString);\n } catch {\n return null;\n }\n};\n\nexport const sqlite3DumboDriver = {\n driverType: SQLite3DriverType,\n createPool: (options) => sqlite3Pool(options as SQLite3DumboOptions),\n sqlFormatter: sqliteFormatter,\n defaultMigratorOptions: DefaultSQLiteMigratorOptions,\n canHandle: canHandleDriverWithConnectionString(\n SQLite3DriverType,\n tryParseConnectionString,\n ),\n databaseMetadata: sqliteMetadata,\n} satisfies DumboDatabaseDriver<\n SQLite3Connection,\n SQLite3DumboOptions,\n Sqlite3Pool\n>;\n\nexport const useSqlite3DumboDriver = () => {\n dumboDatabaseDriverRegistry.register(SQLite3DriverType, sqlite3DumboDriver);\n};\n\nexport type SQLite3DumboConnectionOptions = DumboConnectionOptions<\n typeof sqlite3DumboDriver\n> & { connectionString: string | SQLiteConnectionString };\n\nuseSqlite3DumboDriver();\n\nexport * from './connections';\nexport * from './formatter';\nexport * from './transactions';\n"],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import { bt as SQL, cn as exists } from "./core-DDo4m0Z_.js";
2
+
3
+ //#region src/storage/sqlite/core/schema/schema.ts
4
+ const defaultSQLiteDatabase = ":memory:";
5
+ const tableExistsSQL = (tableName) => SQL`
6
+ SELECT EXISTS (
7
+ SELECT 1
8
+ FROM sqlite_master
9
+ WHERE type = 'table' AND name = ${tableName}
10
+ ) AS "exists"
11
+ `;
12
+ const tableExists = async (execute, tableName) => exists(execute.query(tableExistsSQL(tableName)));
13
+
14
+ //#endregion
15
+ //#region src/storage/sqlite/core/schema/sqliteMetadata.ts
16
+ const sqliteMetadata = {
17
+ databaseType: "SQLite",
18
+ capabilities: {
19
+ supportsSchemas: false,
20
+ supportsFunctions: false,
21
+ supportsMultipleDatabases: false
22
+ },
23
+ tableExists
24
+ };
25
+ dumboDatabaseMetadataRegistry.register("SQLite", sqliteMetadata);
26
+
27
+ //#endregion
28
+ export { defaultSQLiteDatabase as n, tableExists as r, sqliteMetadata as t };
29
+ //# sourceMappingURL=sqliteMetadata-BoQ7Sc9I.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqliteMetadata-BoQ7Sc9I.js","names":[],"sources":["../src/storage/sqlite/core/schema/schema.ts","../src/storage/sqlite/core/schema/sqliteMetadata.ts"],"sourcesContent":["import { exists, SQL, type SQLExecutor } from '../../../../core';\nexport * from './schema';\n\nexport const defaultSQLiteDatabase = ':memory:';\n\nconst tableExistsSQL = (tableName: string): SQL =>\n SQL`\n SELECT EXISTS (\n SELECT 1\n FROM sqlite_master\n WHERE type = 'table' AND name = ${tableName}\n ) AS \"exists\"\n `;\n\nexport const tableExists = async (\n execute: SQLExecutor,\n tableName: string,\n): Promise<boolean> => exists(execute.query(tableExistsSQL(tableName)));\n","import type { DatabaseMetadata } from '../../../../core';\nimport { tableExists } from './schema';\n\nexport const sqliteMetadata: DatabaseMetadata<false, false, false> = {\n databaseType: 'SQLite',\n capabilities: {\n supportsSchemas: false,\n supportsFunctions: false,\n supportsMultipleDatabases: false,\n },\n tableExists,\n};\n\ndumboDatabaseMetadataRegistry.register('SQLite', sqliteMetadata);\n"],"mappings":";;;AAGA,MAAa,wBAAwB;AAErC,MAAM,kBAAkB,cACtB,GAAG;;;;sCAIiC,UAAU;;;AAIhD,MAAa,cAAc,OACzB,SACA,cACqB,OAAO,QAAQ,MAAM,eAAe,UAAU,CAAC,CAAC;;;;ACdvE,MAAa,iBAAwD;CACnE,cAAc;CACd,cAAc;EACZ,iBAAiB;EACjB,mBAAmB;EACnB,2BAA2B;EAC5B;CACD;CACD;AAED,8BAA8B,SAAS,UAAU,eAAe"}
@@ -0,0 +1,46 @@
1
+ const require_core = require('./core-BgYtAxCm.cjs');
2
+
3
+ //#region src/storage/sqlite/core/schema/schema.ts
4
+ const defaultSQLiteDatabase = ":memory:";
5
+ const tableExistsSQL = (tableName) => require_core.SQL`
6
+ SELECT EXISTS (
7
+ SELECT 1
8
+ FROM sqlite_master
9
+ WHERE type = 'table' AND name = ${tableName}
10
+ ) AS "exists"
11
+ `;
12
+ const tableExists = async (execute, tableName) => require_core.exists(execute.query(tableExistsSQL(tableName)));
13
+
14
+ //#endregion
15
+ //#region src/storage/sqlite/core/schema/sqliteMetadata.ts
16
+ const sqliteMetadata = {
17
+ databaseType: "SQLite",
18
+ capabilities: {
19
+ supportsSchemas: false,
20
+ supportsFunctions: false,
21
+ supportsMultipleDatabases: false
22
+ },
23
+ tableExists
24
+ };
25
+ dumboDatabaseMetadataRegistry.register("SQLite", sqliteMetadata);
26
+
27
+ //#endregion
28
+ Object.defineProperty(exports, 'defaultSQLiteDatabase', {
29
+ enumerable: true,
30
+ get: function () {
31
+ return defaultSQLiteDatabase;
32
+ }
33
+ });
34
+ Object.defineProperty(exports, 'sqliteMetadata', {
35
+ enumerable: true,
36
+ get: function () {
37
+ return sqliteMetadata;
38
+ }
39
+ });
40
+ Object.defineProperty(exports, 'tableExists', {
41
+ enumerable: true,
42
+ get: function () {
43
+ return tableExists;
44
+ }
45
+ });
46
+ //# sourceMappingURL=sqliteMetadata-D_2pKeCC.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqliteMetadata-D_2pKeCC.cjs","names":["exists"],"sources":["../src/storage/sqlite/core/schema/schema.ts","../src/storage/sqlite/core/schema/sqliteMetadata.ts"],"sourcesContent":["import { exists, SQL, type SQLExecutor } from '../../../../core';\nexport * from './schema';\n\nexport const defaultSQLiteDatabase = ':memory:';\n\nconst tableExistsSQL = (tableName: string): SQL =>\n SQL`\n SELECT EXISTS (\n SELECT 1\n FROM sqlite_master\n WHERE type = 'table' AND name = ${tableName}\n ) AS \"exists\"\n `;\n\nexport const tableExists = async (\n execute: SQLExecutor,\n tableName: string,\n): Promise<boolean> => exists(execute.query(tableExistsSQL(tableName)));\n","import type { DatabaseMetadata } from '../../../../core';\nimport { tableExists } from './schema';\n\nexport const sqliteMetadata: DatabaseMetadata<false, false, false> = {\n databaseType: 'SQLite',\n capabilities: {\n supportsSchemas: false,\n supportsFunctions: false,\n supportsMultipleDatabases: false,\n },\n tableExists,\n};\n\ndumboDatabaseMetadataRegistry.register('SQLite', sqliteMetadata);\n"],"mappings":";;;AAGA,MAAa,wBAAwB;AAErC,MAAM,kBAAkB,cACtB,gBAAG;;;;sCAIiC,UAAU;;;AAIhD,MAAa,cAAc,OACzB,SACA,cACqBA,oBAAO,QAAQ,MAAM,eAAe,UAAU,CAAC,CAAC;;;;ACdvE,MAAa,iBAAwD;CACnE,cAAc;CACd,cAAc;EACZ,iBAAiB;EACjB,mBAAmB;EACnB,2BAA2B;EAC5B;CACD;CACD;AAED,8BAA8B,SAAS,UAAU,eAAe"}
package/package.json CHANGED
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "name": "@event-driven-io/dumbo",
3
- "version": "0.13.0-beta.35",
3
+ "version": "0.13.0-beta.36",
4
4
  "description": "Dumbo - tools for dealing with Relational Databases",
5
5
  "type": "module",
6
6
  "scripts": {
7
- "build": "tsup",
7
+ "build": "tsdown",
8
8
  "build:ts": "tsc -b",
9
9
  "build:ts:watch": "tsc -b --watch",
10
10
  "test": "run-s test:unit test:int test:e2e",
@@ -126,13 +126,13 @@
126
126
  "dist"
127
127
  ],
128
128
  "dependencies": {
129
- "uuid": "^13.0.0"
129
+ "uuid": "^14.0.0"
130
130
  },
131
131
  "peerDependencies": {
132
- "@cloudflare/workers-types": "^4.20260127.0",
133
- "@types/pg": "^8.16.0",
134
- "pg": "^8.17.2",
135
- "sqlite3": "^5.1.7"
132
+ "@cloudflare/workers-types": "^4.20260421.1",
133
+ "@types/pg": "^8.20.0",
134
+ "pg": "^8.20.0",
135
+ "sqlite3": "^6.0.1"
136
136
  },
137
137
  "peerDependenciesMeta": {
138
138
  "@types/pg": {
@@ -149,10 +149,10 @@
149
149
  }
150
150
  },
151
151
  "devDependencies": {
152
- "@cloudflare/workers-types": "^4.20260127.0",
153
- "@types/node": "^25.0.10",
154
- "@types/pg": "^8.16.0",
155
- "pg": "^8.17.2",
156
- "sqlite3": "^5.1.7"
152
+ "@cloudflare/workers-types": "^4.20260421.1",
153
+ "@types/node": "^25.6.0",
154
+ "@types/pg": "^8.20.0",
155
+ "pg": "^8.20.0",
156
+ "sqlite3": "^6.0.1"
157
157
  }
158
158
  }
@@ -1,83 +0,0 @@
1
- import {
2
- SQL,
3
- exists
4
- } from "./chunk-H2JBS7HM.js";
5
-
6
- // src/storage/postgresql/core/connections/connectionString.ts
7
- var defaultPostgreSQLConnectionString = "postgresql://postgres@localhost:5432/postgres";
8
- var PostgreSQLConnectionString = (connectionString) => {
9
- if (!connectionString.startsWith("postgresql://") && !connectionString.startsWith("postgres://")) {
10
- throw new Error(
11
- `Invalid PostgreSQL connection string: ${connectionString}. It should start with "postgresql://".`
12
- );
13
- }
14
- return connectionString;
15
- };
16
- function parseDatabaseName(str) {
17
- if (str.charAt(0) === "/") {
18
- const parts = str.split(" ");
19
- return parts[1] || null;
20
- }
21
- if (/ |%[^a-f0-9]|%[a-f0-9][^a-f0-9]/i.test(str)) {
22
- str = encodeURI(str).replace(/%25(\d\d)/g, "%$1");
23
- }
24
- let result;
25
- try {
26
- result = new URL(str, "postgres://base");
27
- } catch {
28
- try {
29
- result = new URL(str.replace("@/", "@___DUMMY___/"), "postgres://base");
30
- } catch {
31
- return null;
32
- }
33
- }
34
- if (result.protocol === "socket:") {
35
- return result.searchParams.get("db");
36
- }
37
- const pathname = result.pathname.slice(1) || null;
38
- return pathname ? decodeURI(pathname) : null;
39
- }
40
-
41
- // src/storage/postgresql/core/schema/schema.ts
42
- var defaultPostgreSqlDatabase = "postgres";
43
- var tableExistsSQL = (tableName) => SQL`
44
- SELECT EXISTS (
45
- SELECT FROM pg_tables
46
- WHERE tablename = ${tableName}
47
- ) AS exists;`;
48
- var tableExists = async (execute, tableName) => exists(execute.query(tableExistsSQL(tableName)));
49
- var functionExistsSQL = (functionName) => SQL`
50
- SELECT EXISTS (
51
- SELECT FROM pg_proc
52
- WHERE
53
- proname = ${functionName}
54
- ) AS exists;`;
55
- var functionExists = async (execute, functionName) => exists(execute.query(functionExistsSQL(functionName)));
56
-
57
- // src/storage/postgresql/core/schema/postgreSQLMetadata.ts
58
- var postgreSQLMetadata = {
59
- databaseType: "PostgreSQL",
60
- defaultDatabaseName: defaultPostgreSqlDatabase,
61
- capabilities: {
62
- supportsSchemas: true,
63
- supportsFunctions: true,
64
- supportsMultipleDatabases: true
65
- },
66
- tableExists,
67
- functionExists,
68
- parseDatabaseName: (connectionString) => (connectionString ? parseDatabaseName(connectionString) : null) ?? defaultPostgreSqlDatabase
69
- };
70
- dumboDatabaseMetadataRegistry.register("PostgreSQL", postgreSQLMetadata);
71
-
72
- export {
73
- defaultPostgreSQLConnectionString,
74
- PostgreSQLConnectionString,
75
- parseDatabaseName,
76
- defaultPostgreSqlDatabase,
77
- tableExistsSQL,
78
- tableExists,
79
- functionExistsSQL,
80
- functionExists,
81
- postgreSQLMetadata
82
- };
83
- //# sourceMappingURL=chunk-33P5766L.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/storage/postgresql/core/connections/connectionString.ts","../src/storage/postgresql/core/schema/schema.ts","../src/storage/postgresql/core/schema/postgreSQLMetadata.ts"],"sourcesContent":["import type { DatabaseConnectionString } from '../../../all';\n\nexport const defaultPostgreSQLConnectionString: PostgreSQLConnectionString =\n 'postgresql://postgres@localhost:5432/postgres' as PostgreSQLConnectionString;\n\nexport type PostgreSQLConnectionString = DatabaseConnectionString<\n 'PostgreSQL',\n `postgresql://${string}` | `postgres://${string}`\n>;\n\nexport const PostgreSQLConnectionString = (\n connectionString: string,\n): PostgreSQLConnectionString => {\n if (\n !connectionString.startsWith('postgresql://') &&\n !connectionString.startsWith('postgres://')\n ) {\n throw new Error(\n `Invalid PostgreSQL connection string: ${connectionString}. It should start with \"postgresql://\".`,\n );\n }\n return connectionString as PostgreSQLConnectionString;\n};\n\n// Stripped from https://github.com/brianc/node-postgres\n// Copyright (c) 2010-2014 Brian Carlson (brian.m.carlson@gmail.com)\n// MIT License\n/**\n * Parse database name from a PostgreSQL connection string\n */\nexport function parseDatabaseName(str: string): string | null {\n // Unix socket format: /path/to/socket database_name\n if (str.charAt(0) === '/') {\n const parts = str.split(' ');\n return parts[1] || null;\n }\n\n // Encode spaces if present\n if (/ |%[^a-f0-9]|%[a-f0-9][^a-f0-9]/i.test(str)) {\n str = encodeURI(str).replace(/%25(\\d\\d)/g, '%$1');\n }\n\n let result: URL;\n try {\n result = new URL(str, 'postgres://base');\n } catch {\n // Try with dummy host for malformed URLs\n try {\n result = new URL(str.replace('@/', '@___DUMMY___/'), 'postgres://base');\n } catch {\n return null;\n }\n }\n\n // Socket protocol: socket://path?db=dbname\n if (result.protocol === 'socket:') {\n return result.searchParams.get('db');\n }\n\n // Standard URL: postgres://user:pass@host:port/database\n const pathname = result.pathname.slice(1) || null;\n return pathname ? decodeURI(pathname) : null;\n}\n","import { exists, SQL, type SQLExecutor } from '../../../../core';\nexport * from './schema';\n\nexport const defaultPostgreSqlDatabase = 'postgres';\n\nexport const tableExistsSQL = (tableName: string): SQL =>\n SQL`\n SELECT EXISTS (\n SELECT FROM pg_tables\n WHERE tablename = ${tableName}\n ) AS exists;`;\n\nexport const tableExists = async (\n execute: SQLExecutor,\n tableName: string,\n): Promise<boolean> => exists(execute.query(tableExistsSQL(tableName)));\n\nexport const functionExistsSQL = (functionName: string): SQL =>\n SQL`\n SELECT EXISTS (\n SELECT FROM pg_proc\n WHERE\n proname = ${functionName}\n ) AS exists;`;\n\nexport const functionExists = async (\n execute: SQLExecutor,\n functionName: string,\n): Promise<boolean> => exists(execute.query(functionExistsSQL(functionName)));\n","import type { DatabaseMetadata } from '../../../../core';\nimport { parseDatabaseName } from '../connections';\nimport {\n defaultPostgreSqlDatabase,\n functionExists,\n tableExists,\n} from './schema';\n\nexport const postgreSQLMetadata: DatabaseMetadata<true, true, true> = {\n databaseType: 'PostgreSQL',\n defaultDatabaseName: defaultPostgreSqlDatabase,\n capabilities: {\n supportsSchemas: true,\n supportsFunctions: true,\n supportsMultipleDatabases: true,\n },\n tableExists,\n functionExists,\n parseDatabaseName: (connectionString?: string) =>\n (connectionString ? parseDatabaseName(connectionString) : null) ??\n defaultPostgreSqlDatabase,\n};\n\ndumboDatabaseMetadataRegistry.register('PostgreSQL', postgreSQLMetadata);\n"],"mappings":";;;;;;AAEO,IAAM,oCACX;AAOK,IAAM,6BAA6B,CACxC,qBAC+B;AAC/B,MACE,CAAC,iBAAiB,WAAW,eAAe,KAC5C,CAAC,iBAAiB,WAAW,aAAa,GAC1C;AACA,UAAM,IAAI;AAAA,MACR,yCAAyC,gBAAgB;AAAA,IAC3D;AAAA,EACF;AACA,SAAO;AACT;AAQO,SAAS,kBAAkB,KAA4B;AAE5D,MAAI,IAAI,OAAO,CAAC,MAAM,KAAK;AACzB,UAAM,QAAQ,IAAI,MAAM,GAAG;AAC3B,WAAO,MAAM,CAAC,KAAK;AAAA,EACrB;AAGA,MAAI,mCAAmC,KAAK,GAAG,GAAG;AAChD,UAAM,UAAU,GAAG,EAAE,QAAQ,cAAc,KAAK;AAAA,EAClD;AAEA,MAAI;AACJ,MAAI;AACF,aAAS,IAAI,IAAI,KAAK,iBAAiB;AAAA,EACzC,QAAQ;AAEN,QAAI;AACF,eAAS,IAAI,IAAI,IAAI,QAAQ,MAAM,eAAe,GAAG,iBAAiB;AAAA,IACxE,QAAQ;AACN,aAAO;AAAA,IACT;AAAA,EACF;AAGA,MAAI,OAAO,aAAa,WAAW;AACjC,WAAO,OAAO,aAAa,IAAI,IAAI;AAAA,EACrC;AAGA,QAAM,WAAW,OAAO,SAAS,MAAM,CAAC,KAAK;AAC7C,SAAO,WAAW,UAAU,QAAQ,IAAI;AAC1C;;;AC3DO,IAAM,4BAA4B;AAElC,IAAM,iBAAiB,CAAC,cAC7B;AAAA;AAAA;AAAA,wBAGsB,SAAS;AAAA;AAG1B,IAAM,cAAc,OACzB,SACA,cACqB,OAAO,QAAQ,MAAM,eAAe,SAAS,CAAC,CAAC;AAE/D,IAAM,oBAAoB,CAAC,iBAChC;AAAA;AAAA;AAAA;AAAA,oBAIkB,YAAY;AAAA;AAGzB,IAAM,iBAAiB,OAC5B,SACA,iBACqB,OAAO,QAAQ,MAAM,kBAAkB,YAAY,CAAC,CAAC;;;ACpBrE,IAAM,qBAAyD;AAAA,EACpE,cAAc;AAAA,EACd,qBAAqB;AAAA,EACrB,cAAc;AAAA,IACZ,iBAAiB;AAAA,IACjB,mBAAmB;AAAA,IACnB,2BAA2B;AAAA,EAC7B;AAAA,EACA;AAAA,EACA;AAAA,EACA,mBAAmB,CAAC,sBACjB,mBAAmB,kBAAkB,gBAAgB,IAAI,SAC1D;AACJ;AAEA,8BAA8B,SAAS,cAAc,kBAAkB;","names":[]}