@event-driven-io/dumbo 0.13.0-beta.10 → 0.13.0-beta.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/pg.cjs CHANGED
@@ -20,9 +20,6 @@
20
20
 
21
21
  var _chunk7I7IBVWLcjs = require('./chunk-7I7IBVWL.cjs');
22
22
 
23
- // src/storage/postgresql/core/connections/connectionString.ts
24
- var _pgconnectionstring = require('pg-connection-string'); var _pgconnectionstring2 = _interopRequireDefault(_pgconnectionstring);
25
-
26
23
  // src/storage/postgresql/core/locks/advisoryLocks.ts
27
24
  var tryAcquireAdvisoryLock = async (execute, options) => {
28
25
  const timeoutMs = _nullishCoalesce(options.timeoutMs, () => ( _chunk7I7IBVWLcjs.defaultDatabaseLockOptions.timeoutMs));
@@ -128,7 +125,7 @@ var functionExists = async (pool, tableName) => _chunk7I7IBVWLcjs.exists.call(vo
128
125
 
129
126
  // src/storage/postgresql/core/connections/connectionString.ts
130
127
  var defaultPostgreSQLConnectionString = "postgresql://postgres@localhost:5432/postgres";
131
- var getDatabaseNameOrDefault = (connectionString) => _nullishCoalesce(_pgconnectionstring2.default.parse(connectionString).database, () => ( defaultPostgreSqlDatabase));
128
+ var getDatabaseNameOrDefault = (connectionString) => _nullishCoalesce(parseDatabaseName(connectionString), () => ( defaultPostgreSqlDatabase));
132
129
  var PostgreSQLConnectionString = (connectionString) => {
133
130
  if (!connectionString.startsWith("postgresql://") && !connectionString.startsWith("postgres://")) {
134
131
  throw new Error(
@@ -137,6 +134,30 @@ var PostgreSQLConnectionString = (connectionString) => {
137
134
  }
138
135
  return connectionString;
139
136
  };
137
+ function parseDatabaseName(str) {
138
+ if (str.charAt(0) === "/") {
139
+ const parts = str.split(" ");
140
+ return parts[1] || null;
141
+ }
142
+ if (/ |%[^a-f0-9]|%[a-f0-9][^a-f0-9]/i.test(str)) {
143
+ str = encodeURI(str).replace(/%25(\d\d)/g, "%$1");
144
+ }
145
+ let result;
146
+ try {
147
+ result = new URL(str, "postgres://base");
148
+ } catch (e) {
149
+ try {
150
+ result = new URL(str.replace("@/", "@___DUMMY___/"), "postgres://base");
151
+ } catch (e2) {
152
+ return null;
153
+ }
154
+ }
155
+ if (result.protocol === "socket:") {
156
+ return result.searchParams.get("db");
157
+ }
158
+ const pathname = result.pathname.slice(1) || null;
159
+ return pathname ? decodeURI(pathname) : null;
160
+ }
140
161
 
141
162
  // src/storage/postgresql/core/sql/processors/columProcessors.ts
142
163
  var mapColumnType = (token, { builder }) => {
@@ -615,7 +636,7 @@ var updatePoolUsageCounter = (lookupKey, by) => {
615
636
  var tryParseConnectionString = (connectionString) => {
616
637
  try {
617
638
  return PostgreSQLConnectionString(connectionString);
618
- } catch (e) {
639
+ } catch (e3) {
619
640
  return null;
620
641
  }
621
642
  };
@@ -681,5 +702,6 @@ var connectionPool = postgresPool;
681
702
 
682
703
 
683
704
 
684
- exports.AdvisoryLock = AdvisoryLock; exports.DefaultPostgreSQLMigratorOptions = DefaultPostgreSQLMigratorOptions; exports.PgDriverType = PgDriverType; exports.PostgreSQLConnectionString = PostgreSQLConnectionString; exports.PostgreSQLDatabaseName = PostgreSQLDatabaseName; exports.acquireAdvisoryLock = acquireAdvisoryLock; exports.advisoryLock = advisoryLock; exports.checkConnection = checkConnection; exports.connectionPool = connectionPool; exports.databaseDriver = pgDatabaseDriver; exports.defaultPostgreSQLConnectionString = defaultPostgreSQLConnectionString; exports.defaultPostgreSqlDatabase = defaultPostgreSqlDatabase; exports.endAllPools = endAllPools; exports.endPool = endPool; exports.functionExists = functionExists; exports.functionExistsSQL = functionExistsSQL; exports.getDatabaseNameOrDefault = getDatabaseNameOrDefault; exports.getPool = getPool; exports.isPgClient = isPgClient; exports.isPgNativePool = isPgNativePool; exports.isPgPoolClient = isPgPoolClient; exports.onEndPool = onEndPool; exports.pgAmbientClientPool = pgAmbientClientPool; exports.pgAmbientConnectionPool = pgAmbientConnectionPool; exports.pgAmbientNativePool = pgAmbientNativePool; exports.pgClientConnection = pgClientConnection; exports.pgClientPool = pgClientPool; exports.pgConnection = pgConnection; exports.pgDatabaseDriver = pgDatabaseDriver; exports.pgExecute = pgExecute; exports.pgFormatter = pgFormatter; exports.pgNativePool = pgNativePool; exports.pgPool = pgPool; exports.pgPoolClientConnection = pgPoolClientConnection; exports.pgSQLExecutor = pgSQLExecutor; exports.pgTransaction = pgTransaction; exports.postgreSQLColumnProcessors = postgreSQLColumnProcessors; exports.postgresPool = postgresPool; exports.releaseAdvisoryLock = releaseAdvisoryLock; exports.setPgTypeParser = setPgTypeParser; exports.tableExists = tableExists; exports.tableExistsSQL = tableExistsSQL; exports.tryAcquireAdvisoryLock = tryAcquireAdvisoryLock; exports.usePgDatabaseDriver = usePgDatabaseDriver;
705
+
706
+ exports.AdvisoryLock = AdvisoryLock; exports.DefaultPostgreSQLMigratorOptions = DefaultPostgreSQLMigratorOptions; exports.PgDriverType = PgDriverType; exports.PostgreSQLConnectionString = PostgreSQLConnectionString; exports.PostgreSQLDatabaseName = PostgreSQLDatabaseName; exports.acquireAdvisoryLock = acquireAdvisoryLock; exports.advisoryLock = advisoryLock; exports.checkConnection = checkConnection; exports.connectionPool = connectionPool; exports.databaseDriver = pgDatabaseDriver; exports.defaultPostgreSQLConnectionString = defaultPostgreSQLConnectionString; exports.defaultPostgreSqlDatabase = defaultPostgreSqlDatabase; exports.endAllPools = endAllPools; exports.endPool = endPool; exports.functionExists = functionExists; exports.functionExistsSQL = functionExistsSQL; exports.getDatabaseNameOrDefault = getDatabaseNameOrDefault; exports.getPool = getPool; exports.isPgClient = isPgClient; exports.isPgNativePool = isPgNativePool; exports.isPgPoolClient = isPgPoolClient; exports.onEndPool = onEndPool; exports.parseDatabaseName = parseDatabaseName; exports.pgAmbientClientPool = pgAmbientClientPool; exports.pgAmbientConnectionPool = pgAmbientConnectionPool; exports.pgAmbientNativePool = pgAmbientNativePool; exports.pgClientConnection = pgClientConnection; exports.pgClientPool = pgClientPool; exports.pgConnection = pgConnection; exports.pgDatabaseDriver = pgDatabaseDriver; exports.pgExecute = pgExecute; exports.pgFormatter = pgFormatter; exports.pgNativePool = pgNativePool; exports.pgPool = pgPool; exports.pgPoolClientConnection = pgPoolClientConnection; exports.pgSQLExecutor = pgSQLExecutor; exports.pgTransaction = pgTransaction; exports.postgreSQLColumnProcessors = postgreSQLColumnProcessors; exports.postgresPool = postgresPool; exports.releaseAdvisoryLock = releaseAdvisoryLock; exports.setPgTypeParser = setPgTypeParser; exports.tableExists = tableExists; exports.tableExistsSQL = tableExistsSQL; exports.tryAcquireAdvisoryLock = tryAcquireAdvisoryLock; exports.usePgDatabaseDriver = usePgDatabaseDriver;
685
707
  //# sourceMappingURL=pg.cjs.map
package/dist/pg.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["/home/runner/work/Pongo/Pongo/src/packages/dumbo/dist/pg.cjs","../src/storage/postgresql/core/connections/connectionString.ts","../src/storage/postgresql/core/locks/advisoryLocks.ts","../src/storage/postgresql/core/schema/migrations.ts","../src/storage/postgresql/core/schema/schema.ts","../src/storage/postgresql/core/sql/processors/columProcessors.ts","../src/storage/postgresql/core/sql/formatter/reserved.ts","../src/storage/postgresql/core/sql/formatter/index.ts","../src/storage/postgresql/core/index.ts","../src/storage/postgresql/pg/connections/connection.ts","../src/storage/postgresql/pg/execute/execute.ts","../src/storage/postgresql/pg/connections/transaction.ts","../src/storage/postgresql/pg/connections/pool.ts","../src/storage/postgresql/pg/serialization/index.ts","../src/storage/postgresql/pg/index.ts"],"names":["advisoryLock"],"mappings":"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","file":"/home/runner/work/Pongo/Pongo/src/packages/dumbo/dist/pg.cjs","sourcesContent":[null,"import pgcs from 'pg-connection-string';\nimport type { DatabaseConnectionString } from '../../../all';\nimport { defaultPostgreSqlDatabase } from '../schema';\n\nexport const defaultPostgreSQLConnectionString: PostgreSQLConnectionString =\n 'postgresql://postgres@localhost:5432/postgres' as PostgreSQLConnectionString;\n\nexport const getDatabaseNameOrDefault = (connectionString: string) =>\n pgcs.parse(connectionString).database ?? defaultPostgreSqlDatabase;\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","import {\n defaultDatabaseLockOptions,\n single,\n SQL,\n type AcquireDatabaseLockMode,\n type AcquireDatabaseLockOptions,\n type DatabaseLock,\n type DatabaseLockOptions,\n type ReleaseDatabaseLockOptions,\n type SQLExecutor,\n} from '../../../../core';\n\nexport const tryAcquireAdvisoryLock = async (\n execute: SQLExecutor,\n options: AcquireDatabaseLockOptions,\n): Promise<boolean> => {\n const timeoutMs = options.timeoutMs ?? defaultDatabaseLockOptions.timeoutMs;\n\n const advisoryLock =\n options.mode === 'Permanent' ? 'pg_advisory_lock' : 'pg_advisory_xact_lock';\n\n try {\n await single(\n execute.query<{ locked: boolean }>(\n SQL`SELECT ${SQL.plain(advisoryLock)}(${options.lockId}) AS locked`,\n { timeoutMs },\n ),\n );\n return true;\n } catch (error) {\n if (error instanceof Error && 'code' in error && error.code === '57014')\n return false;\n\n throw error;\n }\n};\n\nexport const releaseAdvisoryLock = async (\n execute: SQLExecutor,\n options: ReleaseDatabaseLockOptions,\n): Promise<boolean> => {\n const timeoutMs = options.timeoutMs ?? defaultDatabaseLockOptions.timeoutMs;\n\n try {\n await single(\n execute.query<{ locked: boolean }>(\n SQL`SELECT pg_advisory_unlock(${options.lockId}) AS locked`,\n { timeoutMs },\n ),\n );\n return true;\n } catch (error) {\n if (error instanceof Error && 'code' in error && error.code === '57014')\n return false;\n\n throw error;\n }\n};\n\nexport const acquireAdvisoryLock = async (\n execute: SQLExecutor,\n options: AcquireDatabaseLockOptions,\n) => {\n const lockAcquired = await tryAcquireAdvisoryLock(execute, options);\n if (!lockAcquired) {\n throw new Error(\n 'Failed to acquire advisory lock within the specified timeout. Migration aborted.',\n );\n }\n};\n\nexport const AdvisoryLock: DatabaseLock = {\n acquire: acquireAdvisoryLock,\n tryAcquire: tryAcquireAdvisoryLock,\n release: releaseAdvisoryLock,\n withAcquire: async <Result>(\n execute: SQLExecutor,\n handle: () => Promise<Result>,\n options: AcquireDatabaseLockOptions,\n ) => {\n await acquireAdvisoryLock(execute, options);\n try {\n return await handle();\n } finally {\n if (options.mode === 'Permanent')\n await releaseAdvisoryLock(execute, options);\n }\n },\n};\n\nexport const advisoryLock = (\n execute: SQLExecutor,\n options: DatabaseLockOptions,\n) => ({\n acquire: (acquireOptions?: { mode: AcquireDatabaseLockMode }) =>\n acquireAdvisoryLock(execute, {\n ...options,\n ...(acquireOptions ?? {}),\n }),\n tryAcquire: (acquireOptions?: { mode: AcquireDatabaseLockMode }) =>\n tryAcquireAdvisoryLock(execute, {\n ...options,\n ...(acquireOptions ?? {}),\n }),\n release: () => releaseAdvisoryLock(execute, options),\n withAcquire: async <Result>(\n handle: () => Promise<Result>,\n acquireOptions?: { mode: AcquireDatabaseLockMode },\n ) => {\n await acquireAdvisoryLock(execute, {\n ...options,\n ...(acquireOptions ?? {}),\n });\n try {\n return await handle();\n } finally {\n await releaseAdvisoryLock(execute, options);\n }\n },\n});\n","import {\n type MigratorOptions,\n registerDefaultMigratorOptions,\n} from '../../../../core';\nimport { AdvisoryLock } from '../locks';\n\nexport const DefaultPostgreSQLMigratorOptions: MigratorOptions = {\n lock: {\n databaseLock: AdvisoryLock,\n },\n};\n\nregisterDefaultMigratorOptions('PostgreSQL', DefaultPostgreSQLMigratorOptions);\n","import { exists, SQL, type ConnectionPool } 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 pool: ConnectionPool,\n tableName: string,\n): Promise<boolean> => exists(pool.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 pool: ConnectionPool,\n tableName: string,\n): Promise<boolean> => exists(pool.execute.query(functionExistsSQL(tableName)));\n","import {\n mapDefaultSQLColumnProcessors,\n type DefaultSQLColumnProcessors,\n type DefaultSQLColumnToken,\n type SQLProcessorContext,\n} from '../../../../../core';\n\nconst mapColumnType = (\n token: DefaultSQLColumnToken,\n { builder }: SQLProcessorContext,\n): void => {\n let columnSQL: string;\n const { sqlTokenType } = token;\n switch (sqlTokenType) {\n case 'SQL_COLUMN_AUTO_INCREMENT':\n columnSQL = `${token.bigint ? 'BIGSERIAL' : 'SERIAL'} ${token.primaryKey ? 'PRIMARY KEY' : ''}`;\n break;\n case 'SQL_COLUMN_BIGINT':\n columnSQL = 'BIGINT';\n break;\n case 'SQL_COLUMN_SERIAL':\n columnSQL = 'SERIAL';\n break;\n case 'SQL_COLUMN_INTEGER':\n columnSQL = 'INTEGER';\n break;\n case 'SQL_COLUMN_JSONB':\n columnSQL = 'JSONB';\n break;\n case 'SQL_COLUMN_BIGSERIAL':\n columnSQL = 'BIGSERIAL';\n break;\n case 'SQL_COLUMN_TIMESTAMP':\n columnSQL = 'TIMESTAMP';\n break;\n case 'SQL_COLUMN_TIMESTAMPTZ':\n columnSQL = 'TIMESTAMPTZ';\n break;\n case 'SQL_COLUMN_VARCHAR':\n columnSQL = `VARCHAR ${Number.isNaN(token.length) ? '' : `(${token.length})`}`;\n break;\n default: {\n const exhaustiveCheck: never = sqlTokenType;\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n throw new Error(`Unknown column type: ${exhaustiveCheck}`);\n }\n }\n builder.addSQL(columnSQL);\n};\n\nexport const postgreSQLColumnProcessors: DefaultSQLColumnProcessors =\n mapDefaultSQLColumnProcessors(mapColumnType);\n","// Ported from: https://github.com/datalanche/node-pg-format/blob/master/lib/reserved.js\n//\n// PostgreSQL reserved words\n//\nconst reservedMap: { [key: string]: boolean } = {\n AES128: true,\n AES256: true,\n ALL: true,\n ALLOWOVERWRITE: true,\n ANALYSE: true,\n ANALYZE: true,\n AND: true,\n ANY: true,\n ARRAY: true,\n AS: true,\n ASC: true,\n AUTHORIZATION: true,\n BACKUP: true,\n BETWEEN: true,\n BINARY: true,\n BLANKSASNULL: true,\n BOTH: true,\n BYTEDICT: true,\n CASE: true,\n CAST: true,\n CHECK: true,\n COLLATE: true,\n COLUMN: true,\n CONSTRAINT: true,\n CREATE: true,\n CREDENTIALS: true,\n CROSS: true,\n CURRENT_DATE: true,\n CURRENT_TIME: true,\n CURRENT_TIMESTAMP: true,\n CURRENT_USER: true,\n CURRENT_USER_ID: true,\n DEFAULT: true,\n DEFERRABLE: true,\n DEFLATE: true,\n DEFRAG: true,\n DELTA: true,\n DELTA32K: true,\n DESC: true,\n DISABLE: true,\n DISTINCT: true,\n DO: true,\n ELSE: true,\n EMPTYASNULL: true,\n ENABLE: true,\n ENCODE: true,\n ENCRYPT: true,\n ENCRYPTION: true,\n END: true,\n EXCEPT: true,\n EXPLICIT: true,\n FALSE: true,\n FOR: true,\n FOREIGN: true,\n FREEZE: true,\n FROM: true,\n FULL: true,\n GLOBALDICT256: true,\n GLOBALDICT64K: true,\n GRANT: true,\n GROUP: true,\n GZIP: true,\n HAVING: true,\n IDENTITY: true,\n IGNORE: true,\n ILIKE: true,\n IN: true,\n INITIALLY: true,\n INNER: true,\n INTERSECT: true,\n INTO: true,\n IS: true,\n ISNULL: true,\n JOIN: true,\n LEADING: true,\n LEFT: true,\n LIKE: true,\n LIMIT: true,\n LOCALTIME: true,\n LOCALTIMESTAMP: true,\n LUN: true,\n LUNS: true,\n LZO: true,\n LZOP: true,\n MINUS: true,\n MOSTLY13: true,\n MOSTLY32: true,\n MOSTLY8: true,\n NATURAL: true,\n NEW: true,\n NOT: true,\n NOTNULL: true,\n NULL: true,\n NULLS: true,\n OFF: true,\n OFFLINE: true,\n OFFSET: true,\n OLD: true,\n ON: true,\n ONLY: true,\n OPEN: true,\n OR: true,\n ORDER: true,\n OUTER: true,\n OVERLAPS: true,\n PARALLEL: true,\n PARTITION: true,\n PERCENT: true,\n PLACING: true,\n PRIMARY: true,\n RAW: true,\n READRATIO: true,\n RECOVER: true,\n REFERENCES: true,\n REJECTLOG: true,\n RESORT: true,\n RESTORE: true,\n RIGHT: true,\n SELECT: true,\n SESSION_USER: true,\n SIMILAR: true,\n SOME: true,\n SYSDATE: true,\n SYSTEM: true,\n TABLE: true,\n TAG: true,\n TDES: true,\n TEXT255: true,\n TEXT32K: true,\n THEN: true,\n TO: true,\n TOP: true,\n TRAILING: true,\n TRUE: true,\n TRUNCATECOLUMNS: true,\n UNION: true,\n UNIQUE: true,\n USER: true,\n USING: true,\n VERBOSE: true,\n WALLET: true,\n WHEN: true,\n WHERE: true,\n WITH: true,\n WITHOUT: true,\n};\n\nexport default reservedMap;\n","import {\n SQLFormatter,\n SQLProcessorsRegistry,\n defaultProcessorsRegistry,\n mapSQLIdentifier,\n registerFormatter,\n} from '../../../../../core';\nimport { postgreSQLColumnProcessors } from '../processors';\nimport reservedMap from './reserved';\n\nconst postgreSQLProcessorsRegistry = SQLProcessorsRegistry({\n from: defaultProcessorsRegistry,\n}).register(postgreSQLColumnProcessors);\n\nconst pgFormatter: SQLFormatter = SQLFormatter({\n processorsRegistry: postgreSQLProcessorsRegistry,\n valueMapper: {\n mapDate: (value: Date): unknown =>\n value.toISOString().replace('T', ' ').replace('Z', '+00'),\n mapPlaceholder: (index: number): string => `$${index + 1}`,\n mapIdentifier: (value: string): string =>\n mapSQLIdentifier(value, { reservedWords: reservedMap }),\n },\n});\n\nregisterFormatter('PostgreSQL', pgFormatter);\n\n// Export the original functions if needed\nexport { pgFormatter };\n","import type { DatabaseDriverType } from '../../../core';\n\nexport * from './connections';\nexport * from './locks';\nexport * from './schema';\nexport * from './sql';\n\nexport type PostgreSQLDatabaseName = 'PostgreSQL';\nexport const PostgreSQLDatabaseName = 'PostgreSQL';\n\nexport type PostgreSQLDriverType<DriverName extends string = string> =\n DatabaseDriverType<PostgreSQLDatabaseName, DriverName>;\n","import pg from 'pg';\nimport { createConnection, type Connection } from '../../../../core';\nimport type { PostgreSQLDriverType } from '../../core';\nimport { pgSQLExecutor } from '../execute';\nimport { pgTransaction } from './transaction';\n\nexport type PgDriverType = PostgreSQLDriverType<'pg'>;\nexport const PgDriverType: PgDriverType = 'PostgreSQL:pg';\n\nexport type PgPoolClient = pg.PoolClient;\nexport type PgClient = pg.Client;\n\nexport type PgClientOrPoolClient = PgPoolClient | PgClient;\n\nexport type PgPoolOrClient = pg.Pool | PgPoolClient | PgClient;\n\nexport type PgClientConnection = Connection<\n PgClientConnection,\n PgDriverType,\n PgClient\n>;\n\nexport type PgPoolClientConnection = Connection<\n PgPoolClientConnection,\n PgDriverType,\n PgPoolClient\n>;\n\nexport type PgConnection = PgPoolClientConnection | PgClientConnection;\n\nexport type PgPoolClientOptions = {\n type: 'PoolClient';\n connect: () => Promise<PgPoolClient>;\n close: (client: PgPoolClient) => Promise<void>;\n};\n\nexport type PgClientOptions = {\n type: 'Client';\n connect: () => Promise<PgClient>;\n close: (client: PgClient) => Promise<void>;\n};\n\nexport const pgClientConnection = (\n options: PgClientOptions,\n): PgClientConnection => {\n const { connect, close } = options;\n\n return createConnection({\n driverType: PgDriverType,\n connect,\n close,\n initTransaction: (connection) => pgTransaction(connection),\n executor: pgSQLExecutor,\n });\n};\n\nexport const pgPoolClientConnection = (\n options: PgPoolClientOptions,\n): PgPoolClientConnection => {\n const { connect, close } = options;\n\n return createConnection({\n driverType: PgDriverType,\n connect,\n close,\n initTransaction: (connection) => pgTransaction(connection),\n executor: pgSQLExecutor,\n });\n};\n\nexport function pgConnection(\n options: PgPoolClientOptions,\n): PgPoolClientConnection;\nexport function pgConnection(options: PgClientOptions): PgClientConnection;\nexport function pgConnection(\n options: PgPoolClientOptions | PgClientOptions,\n): PgPoolClientConnection | PgClientConnection {\n return options.type === 'Client'\n ? pgClientConnection(options)\n : pgPoolClientConnection(options);\n}\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\nexport const checkConnection = async (\n connectionString: string,\n): Promise<ConnectionCheckResult> => {\n const client = new pg.Client({\n connectionString,\n });\n\n try {\n await client.connect();\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 === 'ECONNREFUSED'\n ? 'ConnectionRefused'\n : code === '28P01'\n ? 'Authentication'\n : 'Unknown',\n code,\n error,\n };\n } finally {\n // Ensure the client is closed properly if connected\n await client.end();\n }\n};\n","import pg from 'pg';\nimport {\n tracer,\n type DbSQLExecutor,\n type QueryResult,\n type QueryResultRow,\n type SQL,\n type SQLCommandOptions,\n type SQLQueryOptions,\n} from '../../../../core';\nimport { pgFormatter } from '../../core';\nimport { PgDriverType, type PgClientOrPoolClient } from '../connections';\n\nexport const isPgNativePool = (\n poolOrClient: pg.Pool | pg.PoolClient | pg.Client,\n): poolOrClient is pg.Pool => {\n return poolOrClient instanceof pg.Pool;\n};\n\nexport const isPgClient = (\n poolOrClient: pg.Pool | pg.PoolClient | pg.Client,\n): poolOrClient is pg.Client => poolOrClient instanceof pg.Client;\n\nexport const isPgPoolClient = (\n poolOrClient: pg.Pool | pg.PoolClient | pg.Client,\n): poolOrClient is pg.PoolClient =>\n 'release' in poolOrClient && typeof poolOrClient.release === 'function';\n\nexport const pgExecute = async <Result = void>(\n poolOrClient: pg.Pool | pg.PoolClient | pg.Client,\n handle: (client: pg.PoolClient | pg.Client) => Promise<Result>,\n) => {\n const client = isPgNativePool(poolOrClient)\n ? await poolOrClient.connect()\n : poolOrClient;\n\n try {\n return await handle(client);\n } finally {\n // release only if client wasn't injected externally\n if (isPgNativePool(poolOrClient) && isPgPoolClient(client))\n client.release();\n }\n};\n\nexport type PgSQLExecutor = DbSQLExecutor<PgDriverType, PgClientOrPoolClient>;\n\nexport const pgSQLExecutor = (): PgSQLExecutor => ({\n driverType: PgDriverType,\n query: batch,\n batchQuery: batch,\n command: batch,\n batchCommand: batch,\n formatter: pgFormatter,\n});\n\nfunction batch<Result extends QueryResultRow = QueryResultRow>(\n client: PgClientOrPoolClient,\n sqlOrSqls: SQL,\n options?: SQLQueryOptions | SQLCommandOptions,\n): Promise<QueryResult<Result>>;\nfunction batch<Result extends QueryResultRow = QueryResultRow>(\n client: PgClientOrPoolClient,\n sqlOrSqls: SQL[],\n options?: SQLQueryOptions | SQLCommandOptions,\n): Promise<QueryResult<Result>[]>;\nasync function batch<Result extends QueryResultRow = QueryResultRow>(\n client: PgClientOrPoolClient,\n sqlOrSqls: SQL | SQL[],\n options?: SQLQueryOptions | SQLCommandOptions,\n): Promise<QueryResult<Result> | QueryResult<Result>[]> {\n const sqls = Array.isArray(sqlOrSqls) ? sqlOrSqls : [sqlOrSqls];\n const results: QueryResult<Result>[] = Array<QueryResult<Result>>(\n sqls.length,\n );\n\n if (options?.timeoutMs) {\n await client.query(`SET statement_timeout = ${options?.timeoutMs}`);\n }\n\n //TODO: make it smarter at some point\n for (let i = 0; i < sqls.length; i++) {\n const { query, params } = pgFormatter.format(sqls[i]!);\n tracer.info('db:sql:query', {\n query,\n params,\n debugSQL: pgFormatter.describe(sqls[i]!),\n });\n const result = await client.query<Result>(query, params);\n results[i] = { rowCount: result.rowCount, rows: result.rows };\n }\n return Array.isArray(sqlOrSqls) ? results : results[0]!;\n}\n","import {\n sqlExecutor,\n type AnyConnection,\n type DatabaseTransaction,\n type DatabaseTransactionOptions,\n} from '../../../../core';\nimport { pgSQLExecutor } from '../execute';\nimport {\n PgDriverType,\n type PgConnection,\n type PgPoolOrClient,\n} from './connection';\n\nexport type PgTransaction = DatabaseTransaction<PgConnection>;\n\nexport const pgTransaction =\n <ConnectionType extends AnyConnection = AnyConnection>(\n connection: () => ConnectionType,\n ) =>\n <DbClient extends PgPoolOrClient = PgPoolOrClient>(\n getClient: Promise<DbClient>,\n options?: {\n close: (client: DbClient, error?: unknown) => Promise<void>;\n } & DatabaseTransactionOptions,\n ): DatabaseTransaction<ConnectionType> => ({\n connection: connection(),\n driverType: PgDriverType,\n begin: async () => {\n const client = await getClient;\n await client.query('BEGIN');\n },\n commit: async () => {\n const client = await getClient;\n\n try {\n await client.query('COMMIT');\n } finally {\n if (options?.close) await options?.close(client);\n }\n },\n rollback: async (error?: unknown) => {\n const client = await getClient;\n try {\n await client.query('ROLLBACK');\n } finally {\n if (options?.close) await options?.close(client, error);\n }\n },\n execute: sqlExecutor(pgSQLExecutor(), {\n connect: () => getClient,\n }),\n });\n","import pg from 'pg';\nimport {\n createAmbientConnectionPool,\n createConnectionPool,\n JSONSerializer,\n tracer,\n type ConnectionPool,\n} from '../../../../core';\nimport {\n defaultPostgreSqlDatabase,\n getDatabaseNameOrDefault,\n} from '../../core';\nimport { setPgTypeParser } from '../serialization';\nimport {\n pgConnection,\n PgDriverType,\n type PgClientConnection,\n type PgPoolClientConnection,\n} from './connection';\n\nexport type PgNativePool = ConnectionPool<PgPoolClientConnection>;\n\nexport type PgAmbientClientPool = ConnectionPool<PgClientConnection>;\n\nexport type PgAmbientConnectionPool = ConnectionPool<\n PgPoolClientConnection | PgClientConnection\n>;\n\nexport type PgPool =\n | PgNativePool\n | PgAmbientClientPool\n | PgAmbientConnectionPool;\n\nexport const pgNativePool = (options: {\n connectionString: string;\n database?: string | undefined;\n}): PgNativePool => {\n const { connectionString, database } = options;\n const pool = getPool({ connectionString, database });\n\n const getConnection = () =>\n pgConnection({\n type: 'PoolClient',\n connect: () => pool.connect(),\n close: (client) => Promise.resolve(client.release()),\n });\n\n const open = () => Promise.resolve(getConnection());\n const close = () => endPool({ connectionString, database });\n\n return createConnectionPool({\n driverType: PgDriverType,\n connection: open,\n close,\n getConnection,\n });\n};\n\nexport const pgAmbientNativePool = (options: {\n pool: pg.Pool;\n}): PgNativePool => {\n const { pool } = options;\n\n return createConnectionPool({\n driverType: PgDriverType,\n getConnection: () =>\n pgConnection({\n type: 'PoolClient',\n connect: () => pool.connect(),\n close: (client) => Promise.resolve(client.release()),\n }),\n });\n};\n\nexport const pgAmbientConnectionPool = (options: {\n connection: PgPoolClientConnection | PgClientConnection;\n}): PgAmbientConnectionPool => {\n const { connection } = options;\n\n return createAmbientConnectionPool({\n driverType: PgDriverType,\n connection,\n });\n};\n\nexport const pgClientPool = (options: {\n connectionString: string;\n database?: string | undefined;\n}): PgAmbientClientPool => {\n const { connectionString, database } = options;\n\n return createConnectionPool({\n driverType: PgDriverType,\n getConnection: () => {\n const connect = async () => {\n const client = new pg.Client({ connectionString, database });\n await client.connect();\n return client;\n };\n\n return pgConnection({\n type: 'Client',\n connect,\n close: (client) => client.end(),\n });\n },\n });\n};\n\nexport const pgAmbientClientPool = (options: {\n client: pg.Client;\n}): PgAmbientClientPool => {\n const { client } = options;\n\n const getConnection = () => {\n const connect = () => Promise.resolve(client);\n\n return pgConnection({\n type: 'Client',\n connect,\n close: () => Promise.resolve(),\n });\n };\n\n const open = () => Promise.resolve(getConnection());\n const close = () => Promise.resolve();\n\n return createConnectionPool({\n driverType: PgDriverType,\n connection: open,\n close,\n getConnection,\n });\n};\n\nexport type PgPoolPooledOptions =\n | {\n connectionString: string;\n database?: string;\n pooled: true;\n pool: pg.Pool;\n }\n | {\n connectionString: string;\n database?: string;\n pool: pg.Pool;\n }\n | {\n connectionString: string;\n database?: string;\n pooled: true;\n }\n | {\n connectionString: string;\n database?: string;\n };\n\nexport type PgPoolNotPooledOptions =\n | {\n connectionString: string;\n database?: string;\n pooled: false;\n client: pg.Client;\n }\n | {\n connectionString: string;\n database?: string;\n client: pg.Client;\n }\n | {\n connectionString: string;\n database?: string;\n pooled: false;\n }\n | {\n connectionString: string;\n database?: string;\n connection: PgPoolClientConnection | PgClientConnection;\n pooled?: false;\n };\n\nexport type PgPoolOptions = (PgPoolPooledOptions | PgPoolNotPooledOptions) & {\n serializer?: JSONSerializer;\n};\n\nexport function pgPool(options: PgPoolPooledOptions): PgNativePool;\nexport function pgPool(options: PgPoolNotPooledOptions): PgAmbientClientPool;\nexport function pgPool(\n options: PgPoolOptions,\n): PgNativePool | PgAmbientClientPool | PgAmbientConnectionPool {\n const { connectionString, database, serializer } = options;\n\n setPgTypeParser(serializer ?? JSONSerializer);\n\n if ('client' in options && options.client)\n return pgAmbientClientPool({ client: options.client });\n\n if ('connection' in options && options.connection)\n return pgAmbientConnectionPool({\n connection: options.connection,\n });\n\n if ('pooled' in options && options.pooled === false)\n return pgClientPool({ connectionString, database });\n\n if ('pool' in options && options.pool)\n return pgAmbientNativePool({ pool: options.pool });\n\n return pgNativePool({\n connectionString,\n database,\n });\n}\n\nconst pools: Map<string, pg.Pool> = new Map();\nconst usageCounter: Map<string, number> = new Map();\n\nexport const getPool = (\n connectionStringOrOptions: string | pg.PoolConfig,\n): pg.Pool => {\n const connectionString =\n typeof connectionStringOrOptions === 'string'\n ? connectionStringOrOptions\n : connectionStringOrOptions.connectionString!;\n\n const poolOptions =\n typeof connectionStringOrOptions === 'string'\n ? { connectionString }\n : connectionStringOrOptions;\n\n const database =\n poolOptions.database ??\n (poolOptions.connectionString\n ? getDatabaseNameOrDefault(poolOptions.connectionString)\n : undefined);\n\n const lookupKey = key(connectionString, database);\n\n updatePoolUsageCounter(lookupKey, 1);\n\n return (\n pools.get(lookupKey) ??\n pools.set(lookupKey, new pg.Pool(poolOptions)).get(lookupKey)!\n );\n};\n\nexport const endPool = async ({\n connectionString,\n database,\n force,\n}: {\n connectionString: string;\n database?: string | undefined;\n force?: boolean;\n}): Promise<void> => {\n database = database ?? getDatabaseNameOrDefault(connectionString);\n const lookupKey = key(connectionString, database);\n\n const pool = pools.get(lookupKey);\n if (pool && (updatePoolUsageCounter(lookupKey, -1) <= 0 || force === true)) {\n await onEndPool(lookupKey, pool);\n }\n};\n\nexport const onEndPool = async (lookupKey: string, pool: pg.Pool) => {\n try {\n await pool.end();\n } catch (error) {\n tracer.error('connection-closing-error', { lookupKey, error });\n }\n pools.delete(lookupKey);\n};\n\nexport const endAllPools = () =>\n Promise.all(\n [...pools.entries()].map(([lookupKey, pool]) => onEndPool(lookupKey, pool)),\n );\n\nconst key = (connectionString: string, database: string | undefined) =>\n `${connectionString}|${database ?? defaultPostgreSqlDatabase}`;\n\nconst updatePoolUsageCounter = (lookupKey: string, by: 1 | -1): number => {\n const currentCounter = usageCounter.get(lookupKey) ?? 0;\n const newCounter = currentCounter + by;\n\n usageCounter.set(lookupKey, currentCounter + by);\n\n return newCounter;\n};\n","import pg from 'pg';\nimport { JSONSerializer } from '../../../../core/serializer';\n\nexport const setPgTypeParser = (jsonSerializer: JSONSerializer) => {\n // BigInt\n pg.types.setTypeParser(20, (val) => BigInt(val));\n\n // JSONB\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n pg.types.setTypeParser(3802, (val) => jsonSerializer.deserialize(val));\n\n // JSON\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n pg.types.setTypeParser(114, (val) => jsonSerializer.deserialize(val));\n};\n","import {\n canHandleDriverWithConnectionString,\n type DumboDatabaseDriver,\n dumboDatabaseDriverRegistry,\n} from '../../../core';\nimport {\n DefaultPostgreSQLMigratorOptions,\n getDatabaseNameOrDefault,\n pgFormatter,\n PostgreSQLConnectionString,\n} from '../core';\nimport {\n type PgConnection,\n PgDriverType,\n pgPool,\n type PgPool,\n type PgPoolOptions,\n} from './connections';\n\nconst tryParseConnectionString = (connectionString: string) => {\n try {\n return PostgreSQLConnectionString(connectionString);\n } catch {\n return null;\n }\n};\n\nexport const pgDatabaseDriver: DumboDatabaseDriver<\n PgConnection,\n PgPoolOptions,\n PgPool\n> = {\n driverType: PgDriverType,\n createPool: (options) => pgPool(options as PgPoolOptions),\n sqlFormatter: pgFormatter,\n defaultMigratorOptions: DefaultPostgreSQLMigratorOptions,\n getDatabaseNameOrDefault,\n canHandle: canHandleDriverWithConnectionString(\n PgDriverType,\n tryParseConnectionString,\n ),\n};\n\nexport const usePgDatabaseDriver = () => {\n dumboDatabaseDriverRegistry.register(PgDriverType, pgDatabaseDriver);\n};\n\nusePgDatabaseDriver();\n\nexport * from './connections';\nexport * from './execute';\nexport * from './serialization';\n\nexport { pgDatabaseDriver as databaseDriver };\n\nexport type PostgreSQLPool = PgPool;\nexport type PostgreSQLConnection = PgConnection;\n\nexport type PostgreSQLPoolOptions = PgPoolOptions;\nexport const postgresPool = pgPool;\n\nexport const connectionPool = postgresPool;\n"]}
1
+ {"version":3,"sources":["/home/runner/work/Pongo/Pongo/src/packages/dumbo/dist/pg.cjs","../src/storage/postgresql/core/locks/advisoryLocks.ts","../src/storage/postgresql/core/schema/migrations.ts","../src/storage/postgresql/core/schema/schema.ts","../src/storage/postgresql/core/connections/connectionString.ts","../src/storage/postgresql/core/sql/processors/columProcessors.ts","../src/storage/postgresql/core/sql/formatter/reserved.ts","../src/storage/postgresql/core/sql/formatter/index.ts","../src/storage/postgresql/core/index.ts","../src/storage/postgresql/pg/connections/connection.ts","../src/storage/postgresql/pg/execute/execute.ts","../src/storage/postgresql/pg/connections/transaction.ts","../src/storage/postgresql/pg/connections/pool.ts","../src/storage/postgresql/pg/serialization/index.ts","../src/storage/postgresql/pg/index.ts"],"names":["advisoryLock"],"mappings":"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MAAA;AACd,IAAA;AACH,EAAA;AAEa,EAAA;AACC,EAAA;AAEP,EAAA;AACO,IAAA;AACA,IAAA;AACZ,IAAA;AACA,IAAA;AACD,EAAA;AACH;AAuDE;AAEQ,EAAA;AAEQ,EAAA;AAEA,EAAA;AACP,IAAA;AAEL,EAAA;AACK,IAAA;AACO,MAAA;AACb,IAAA;AAEa,EAAA;AACP,IAAA;AAEK,EAAA;AACL,IAAA;AAEF,EAAA;AACL,IAAA;AACA,IAAA;AACD,EAAA;AACH;AAEoC;AACM;AAGxC;AAEM,EAAA;AAKA,EAAA;AAMJ,EAAA;AAKI,EAAA;AAEN,EAAA;AAGY,EAAA;AAGd;AAEuB;AACrB,EAAA;AACA,EAAA;AACA,EAAA;AAKmB;AACR,EAAA;AACL,EAAA;AAEO,EAAA;AACA,EAAA;AACL,IAAA;AACR,EAAA;AACF;AAEyB;AACnB,EAAA;AACa,IAAA;AACD,EAAA;AACD,IAAA;AACf,EAAA;AACa,EAAA;AACf;AAE2B;AAEb,EAAA;AACZ;AAEW;AAGP;AACE,EAAA;AACA,EAAA;AAEW,EAAA;AAEV,EAAA;AACT;AZyVmB;AACA;AcvmBb;AACA,EAAA;AACK,IAAA;AACD,EAAA;AACC,IAAA;AACT,EAAA;AACF;AAEa;AAKC,EAAA;AACC,EAAA;AACC,EAAA;AACd,EAAA;AACA,EAAA;AACW,EAAA;AACT,IAAA;AACA,IAAA;AACF,EAAA;AACF;AAEa;AACX,EAAA;AACF;AAEA;AAY4B;AAEf;AdslBM;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"/home/runner/work/Pongo/Pongo/src/packages/dumbo/dist/pg.cjs","sourcesContent":[null,"import {\n defaultDatabaseLockOptions,\n single,\n SQL,\n type AcquireDatabaseLockMode,\n type AcquireDatabaseLockOptions,\n type DatabaseLock,\n type DatabaseLockOptions,\n type ReleaseDatabaseLockOptions,\n type SQLExecutor,\n} from '../../../../core';\n\nexport const tryAcquireAdvisoryLock = async (\n execute: SQLExecutor,\n options: AcquireDatabaseLockOptions,\n): Promise<boolean> => {\n const timeoutMs = options.timeoutMs ?? defaultDatabaseLockOptions.timeoutMs;\n\n const advisoryLock =\n options.mode === 'Permanent' ? 'pg_advisory_lock' : 'pg_advisory_xact_lock';\n\n try {\n await single(\n execute.query<{ locked: boolean }>(\n SQL`SELECT ${SQL.plain(advisoryLock)}(${options.lockId}) AS locked`,\n { timeoutMs },\n ),\n );\n return true;\n } catch (error) {\n if (error instanceof Error && 'code' in error && error.code === '57014')\n return false;\n\n throw error;\n }\n};\n\nexport const releaseAdvisoryLock = async (\n execute: SQLExecutor,\n options: ReleaseDatabaseLockOptions,\n): Promise<boolean> => {\n const timeoutMs = options.timeoutMs ?? defaultDatabaseLockOptions.timeoutMs;\n\n try {\n await single(\n execute.query<{ locked: boolean }>(\n SQL`SELECT pg_advisory_unlock(${options.lockId}) AS locked`,\n { timeoutMs },\n ),\n );\n return true;\n } catch (error) {\n if (error instanceof Error && 'code' in error && error.code === '57014')\n return false;\n\n throw error;\n }\n};\n\nexport const acquireAdvisoryLock = async (\n execute: SQLExecutor,\n options: AcquireDatabaseLockOptions,\n) => {\n const lockAcquired = await tryAcquireAdvisoryLock(execute, options);\n if (!lockAcquired) {\n throw new Error(\n 'Failed to acquire advisory lock within the specified timeout. Migration aborted.',\n );\n }\n};\n\nexport const AdvisoryLock: DatabaseLock = {\n acquire: acquireAdvisoryLock,\n tryAcquire: tryAcquireAdvisoryLock,\n release: releaseAdvisoryLock,\n withAcquire: async <Result>(\n execute: SQLExecutor,\n handle: () => Promise<Result>,\n options: AcquireDatabaseLockOptions,\n ) => {\n await acquireAdvisoryLock(execute, options);\n try {\n return await handle();\n } finally {\n if (options.mode === 'Permanent')\n await releaseAdvisoryLock(execute, options);\n }\n },\n};\n\nexport const advisoryLock = (\n execute: SQLExecutor,\n options: DatabaseLockOptions,\n) => ({\n acquire: (acquireOptions?: { mode: AcquireDatabaseLockMode }) =>\n acquireAdvisoryLock(execute, {\n ...options,\n ...(acquireOptions ?? {}),\n }),\n tryAcquire: (acquireOptions?: { mode: AcquireDatabaseLockMode }) =>\n tryAcquireAdvisoryLock(execute, {\n ...options,\n ...(acquireOptions ?? {}),\n }),\n release: () => releaseAdvisoryLock(execute, options),\n withAcquire: async <Result>(\n handle: () => Promise<Result>,\n acquireOptions?: { mode: AcquireDatabaseLockMode },\n ) => {\n await acquireAdvisoryLock(execute, {\n ...options,\n ...(acquireOptions ?? {}),\n });\n try {\n return await handle();\n } finally {\n await releaseAdvisoryLock(execute, options);\n }\n },\n});\n","import {\n type MigratorOptions,\n registerDefaultMigratorOptions,\n} from '../../../../core';\nimport { AdvisoryLock } from '../locks';\n\nexport const DefaultPostgreSQLMigratorOptions: MigratorOptions = {\n lock: {\n databaseLock: AdvisoryLock,\n },\n};\n\nregisterDefaultMigratorOptions('PostgreSQL', DefaultPostgreSQLMigratorOptions);\n","import { exists, SQL, type ConnectionPool } 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 pool: ConnectionPool,\n tableName: string,\n): Promise<boolean> => exists(pool.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 pool: ConnectionPool,\n tableName: string,\n): Promise<boolean> => exists(pool.execute.query(functionExistsSQL(tableName)));\n","import type { DatabaseConnectionString } from '../../../all';\nimport { defaultPostgreSqlDatabase } from '../schema';\n\nexport const defaultPostgreSQLConnectionString: PostgreSQLConnectionString =\n 'postgresql://postgres@localhost:5432/postgres' as PostgreSQLConnectionString;\n\nexport const getDatabaseNameOrDefault = (connectionString: string) =>\n parseDatabaseName(connectionString) ?? defaultPostgreSqlDatabase;\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 {\n mapDefaultSQLColumnProcessors,\n type DefaultSQLColumnProcessors,\n type DefaultSQLColumnToken,\n type SQLProcessorContext,\n} from '../../../../../core';\n\nconst mapColumnType = (\n token: DefaultSQLColumnToken,\n { builder }: SQLProcessorContext,\n): void => {\n let columnSQL: string;\n const { sqlTokenType } = token;\n switch (sqlTokenType) {\n case 'SQL_COLUMN_AUTO_INCREMENT':\n columnSQL = `${token.bigint ? 'BIGSERIAL' : 'SERIAL'} ${token.primaryKey ? 'PRIMARY KEY' : ''}`;\n break;\n case 'SQL_COLUMN_BIGINT':\n columnSQL = 'BIGINT';\n break;\n case 'SQL_COLUMN_SERIAL':\n columnSQL = 'SERIAL';\n break;\n case 'SQL_COLUMN_INTEGER':\n columnSQL = 'INTEGER';\n break;\n case 'SQL_COLUMN_JSONB':\n columnSQL = 'JSONB';\n break;\n case 'SQL_COLUMN_BIGSERIAL':\n columnSQL = 'BIGSERIAL';\n break;\n case 'SQL_COLUMN_TIMESTAMP':\n columnSQL = 'TIMESTAMP';\n break;\n case 'SQL_COLUMN_TIMESTAMPTZ':\n columnSQL = 'TIMESTAMPTZ';\n break;\n case 'SQL_COLUMN_VARCHAR':\n columnSQL = `VARCHAR ${Number.isNaN(token.length) ? '' : `(${token.length})`}`;\n break;\n default: {\n const exhaustiveCheck: never = sqlTokenType;\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n throw new Error(`Unknown column type: ${exhaustiveCheck}`);\n }\n }\n builder.addSQL(columnSQL);\n};\n\nexport const postgreSQLColumnProcessors: DefaultSQLColumnProcessors =\n mapDefaultSQLColumnProcessors(mapColumnType);\n","// Ported from: https://github.com/datalanche/node-pg-format/blob/master/lib/reserved.js\n//\n// PostgreSQL reserved words\n//\nconst reservedMap: { [key: string]: boolean } = {\n AES128: true,\n AES256: true,\n ALL: true,\n ALLOWOVERWRITE: true,\n ANALYSE: true,\n ANALYZE: true,\n AND: true,\n ANY: true,\n ARRAY: true,\n AS: true,\n ASC: true,\n AUTHORIZATION: true,\n BACKUP: true,\n BETWEEN: true,\n BINARY: true,\n BLANKSASNULL: true,\n BOTH: true,\n BYTEDICT: true,\n CASE: true,\n CAST: true,\n CHECK: true,\n COLLATE: true,\n COLUMN: true,\n CONSTRAINT: true,\n CREATE: true,\n CREDENTIALS: true,\n CROSS: true,\n CURRENT_DATE: true,\n CURRENT_TIME: true,\n CURRENT_TIMESTAMP: true,\n CURRENT_USER: true,\n CURRENT_USER_ID: true,\n DEFAULT: true,\n DEFERRABLE: true,\n DEFLATE: true,\n DEFRAG: true,\n DELTA: true,\n DELTA32K: true,\n DESC: true,\n DISABLE: true,\n DISTINCT: true,\n DO: true,\n ELSE: true,\n EMPTYASNULL: true,\n ENABLE: true,\n ENCODE: true,\n ENCRYPT: true,\n ENCRYPTION: true,\n END: true,\n EXCEPT: true,\n EXPLICIT: true,\n FALSE: true,\n FOR: true,\n FOREIGN: true,\n FREEZE: true,\n FROM: true,\n FULL: true,\n GLOBALDICT256: true,\n GLOBALDICT64K: true,\n GRANT: true,\n GROUP: true,\n GZIP: true,\n HAVING: true,\n IDENTITY: true,\n IGNORE: true,\n ILIKE: true,\n IN: true,\n INITIALLY: true,\n INNER: true,\n INTERSECT: true,\n INTO: true,\n IS: true,\n ISNULL: true,\n JOIN: true,\n LEADING: true,\n LEFT: true,\n LIKE: true,\n LIMIT: true,\n LOCALTIME: true,\n LOCALTIMESTAMP: true,\n LUN: true,\n LUNS: true,\n LZO: true,\n LZOP: true,\n MINUS: true,\n MOSTLY13: true,\n MOSTLY32: true,\n MOSTLY8: true,\n NATURAL: true,\n NEW: true,\n NOT: true,\n NOTNULL: true,\n NULL: true,\n NULLS: true,\n OFF: true,\n OFFLINE: true,\n OFFSET: true,\n OLD: true,\n ON: true,\n ONLY: true,\n OPEN: true,\n OR: true,\n ORDER: true,\n OUTER: true,\n OVERLAPS: true,\n PARALLEL: true,\n PARTITION: true,\n PERCENT: true,\n PLACING: true,\n PRIMARY: true,\n RAW: true,\n READRATIO: true,\n RECOVER: true,\n REFERENCES: true,\n REJECTLOG: true,\n RESORT: true,\n RESTORE: true,\n RIGHT: true,\n SELECT: true,\n SESSION_USER: true,\n SIMILAR: true,\n SOME: true,\n SYSDATE: true,\n SYSTEM: true,\n TABLE: true,\n TAG: true,\n TDES: true,\n TEXT255: true,\n TEXT32K: true,\n THEN: true,\n TO: true,\n TOP: true,\n TRAILING: true,\n TRUE: true,\n TRUNCATECOLUMNS: true,\n UNION: true,\n UNIQUE: true,\n USER: true,\n USING: true,\n VERBOSE: true,\n WALLET: true,\n WHEN: true,\n WHERE: true,\n WITH: true,\n WITHOUT: true,\n};\n\nexport default reservedMap;\n","import {\n SQLFormatter,\n SQLProcessorsRegistry,\n defaultProcessorsRegistry,\n mapSQLIdentifier,\n registerFormatter,\n} from '../../../../../core';\nimport { postgreSQLColumnProcessors } from '../processors';\nimport reservedMap from './reserved';\n\nconst postgreSQLProcessorsRegistry = SQLProcessorsRegistry({\n from: defaultProcessorsRegistry,\n}).register(postgreSQLColumnProcessors);\n\nconst pgFormatter: SQLFormatter = SQLFormatter({\n processorsRegistry: postgreSQLProcessorsRegistry,\n valueMapper: {\n mapDate: (value: Date): unknown =>\n value.toISOString().replace('T', ' ').replace('Z', '+00'),\n mapPlaceholder: (index: number): string => `$${index + 1}`,\n mapIdentifier: (value: string): string =>\n mapSQLIdentifier(value, { reservedWords: reservedMap }),\n },\n});\n\nregisterFormatter('PostgreSQL', pgFormatter);\n\n// Export the original functions if needed\nexport { pgFormatter };\n","import type { DatabaseDriverType } from '../../../core';\n\nexport * from './connections';\nexport * from './locks';\nexport * from './schema';\nexport * from './sql';\n\nexport type PostgreSQLDatabaseName = 'PostgreSQL';\nexport const PostgreSQLDatabaseName = 'PostgreSQL';\n\nexport type PostgreSQLDriverType<DriverName extends string = string> =\n DatabaseDriverType<PostgreSQLDatabaseName, DriverName>;\n","import pg from 'pg';\nimport { createConnection, type Connection } from '../../../../core';\nimport type { PostgreSQLDriverType } from '../../core';\nimport { pgSQLExecutor } from '../execute';\nimport { pgTransaction } from './transaction';\n\nexport type PgDriverType = PostgreSQLDriverType<'pg'>;\nexport const PgDriverType: PgDriverType = 'PostgreSQL:pg';\n\nexport type PgPoolClient = pg.PoolClient;\nexport type PgClient = pg.Client;\n\nexport type PgClientOrPoolClient = PgPoolClient | PgClient;\n\nexport type PgPoolOrClient = pg.Pool | PgPoolClient | PgClient;\n\nexport type PgClientConnection = Connection<\n PgClientConnection,\n PgDriverType,\n PgClient\n>;\n\nexport type PgPoolClientConnection = Connection<\n PgPoolClientConnection,\n PgDriverType,\n PgPoolClient\n>;\n\nexport type PgConnection = PgPoolClientConnection | PgClientConnection;\n\nexport type PgPoolClientOptions = {\n type: 'PoolClient';\n connect: () => Promise<PgPoolClient>;\n close: (client: PgPoolClient) => Promise<void>;\n};\n\nexport type PgClientOptions = {\n type: 'Client';\n connect: () => Promise<PgClient>;\n close: (client: PgClient) => Promise<void>;\n};\n\nexport const pgClientConnection = (\n options: PgClientOptions,\n): PgClientConnection => {\n const { connect, close } = options;\n\n return createConnection({\n driverType: PgDriverType,\n connect,\n close,\n initTransaction: (connection) => pgTransaction(connection),\n executor: pgSQLExecutor,\n });\n};\n\nexport const pgPoolClientConnection = (\n options: PgPoolClientOptions,\n): PgPoolClientConnection => {\n const { connect, close } = options;\n\n return createConnection({\n driverType: PgDriverType,\n connect,\n close,\n initTransaction: (connection) => pgTransaction(connection),\n executor: pgSQLExecutor,\n });\n};\n\nexport function pgConnection(\n options: PgPoolClientOptions,\n): PgPoolClientConnection;\nexport function pgConnection(options: PgClientOptions): PgClientConnection;\nexport function pgConnection(\n options: PgPoolClientOptions | PgClientOptions,\n): PgPoolClientConnection | PgClientConnection {\n return options.type === 'Client'\n ? pgClientConnection(options)\n : pgPoolClientConnection(options);\n}\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\nexport const checkConnection = async (\n connectionString: string,\n): Promise<ConnectionCheckResult> => {\n const client = new pg.Client({\n connectionString,\n });\n\n try {\n await client.connect();\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 === 'ECONNREFUSED'\n ? 'ConnectionRefused'\n : code === '28P01'\n ? 'Authentication'\n : 'Unknown',\n code,\n error,\n };\n } finally {\n // Ensure the client is closed properly if connected\n await client.end();\n }\n};\n","import pg from 'pg';\nimport {\n tracer,\n type DbSQLExecutor,\n type QueryResult,\n type QueryResultRow,\n type SQL,\n type SQLCommandOptions,\n type SQLQueryOptions,\n} from '../../../../core';\nimport { pgFormatter } from '../../core';\nimport { PgDriverType, type PgClientOrPoolClient } from '../connections';\n\nexport const isPgNativePool = (\n poolOrClient: pg.Pool | pg.PoolClient | pg.Client,\n): poolOrClient is pg.Pool => {\n return poolOrClient instanceof pg.Pool;\n};\n\nexport const isPgClient = (\n poolOrClient: pg.Pool | pg.PoolClient | pg.Client,\n): poolOrClient is pg.Client => poolOrClient instanceof pg.Client;\n\nexport const isPgPoolClient = (\n poolOrClient: pg.Pool | pg.PoolClient | pg.Client,\n): poolOrClient is pg.PoolClient =>\n 'release' in poolOrClient && typeof poolOrClient.release === 'function';\n\nexport const pgExecute = async <Result = void>(\n poolOrClient: pg.Pool | pg.PoolClient | pg.Client,\n handle: (client: pg.PoolClient | pg.Client) => Promise<Result>,\n) => {\n const client = isPgNativePool(poolOrClient)\n ? await poolOrClient.connect()\n : poolOrClient;\n\n try {\n return await handle(client);\n } finally {\n // release only if client wasn't injected externally\n if (isPgNativePool(poolOrClient) && isPgPoolClient(client))\n client.release();\n }\n};\n\nexport type PgSQLExecutor = DbSQLExecutor<PgDriverType, PgClientOrPoolClient>;\n\nexport const pgSQLExecutor = (): PgSQLExecutor => ({\n driverType: PgDriverType,\n query: batch,\n batchQuery: batch,\n command: batch,\n batchCommand: batch,\n formatter: pgFormatter,\n});\n\nfunction batch<Result extends QueryResultRow = QueryResultRow>(\n client: PgClientOrPoolClient,\n sqlOrSqls: SQL,\n options?: SQLQueryOptions | SQLCommandOptions,\n): Promise<QueryResult<Result>>;\nfunction batch<Result extends QueryResultRow = QueryResultRow>(\n client: PgClientOrPoolClient,\n sqlOrSqls: SQL[],\n options?: SQLQueryOptions | SQLCommandOptions,\n): Promise<QueryResult<Result>[]>;\nasync function batch<Result extends QueryResultRow = QueryResultRow>(\n client: PgClientOrPoolClient,\n sqlOrSqls: SQL | SQL[],\n options?: SQLQueryOptions | SQLCommandOptions,\n): Promise<QueryResult<Result> | QueryResult<Result>[]> {\n const sqls = Array.isArray(sqlOrSqls) ? sqlOrSqls : [sqlOrSqls];\n const results: QueryResult<Result>[] = Array<QueryResult<Result>>(\n sqls.length,\n );\n\n if (options?.timeoutMs) {\n await client.query(`SET statement_timeout = ${options?.timeoutMs}`);\n }\n\n //TODO: make it smarter at some point\n for (let i = 0; i < sqls.length; i++) {\n const { query, params } = pgFormatter.format(sqls[i]!);\n tracer.info('db:sql:query', {\n query,\n params,\n debugSQL: pgFormatter.describe(sqls[i]!),\n });\n const result = await client.query<Result>(query, params);\n results[i] = { rowCount: result.rowCount, rows: result.rows };\n }\n return Array.isArray(sqlOrSqls) ? results : results[0]!;\n}\n","import {\n sqlExecutor,\n type AnyConnection,\n type DatabaseTransaction,\n type DatabaseTransactionOptions,\n} from '../../../../core';\nimport { pgSQLExecutor } from '../execute';\nimport {\n PgDriverType,\n type PgConnection,\n type PgPoolOrClient,\n} from './connection';\n\nexport type PgTransaction = DatabaseTransaction<PgConnection>;\n\nexport const pgTransaction =\n <ConnectionType extends AnyConnection = AnyConnection>(\n connection: () => ConnectionType,\n ) =>\n <DbClient extends PgPoolOrClient = PgPoolOrClient>(\n getClient: Promise<DbClient>,\n options?: {\n close: (client: DbClient, error?: unknown) => Promise<void>;\n } & DatabaseTransactionOptions,\n ): DatabaseTransaction<ConnectionType> => ({\n connection: connection(),\n driverType: PgDriverType,\n begin: async () => {\n const client = await getClient;\n await client.query('BEGIN');\n },\n commit: async () => {\n const client = await getClient;\n\n try {\n await client.query('COMMIT');\n } finally {\n if (options?.close) await options?.close(client);\n }\n },\n rollback: async (error?: unknown) => {\n const client = await getClient;\n try {\n await client.query('ROLLBACK');\n } finally {\n if (options?.close) await options?.close(client, error);\n }\n },\n execute: sqlExecutor(pgSQLExecutor(), {\n connect: () => getClient,\n }),\n });\n","import pg from 'pg';\nimport {\n createAmbientConnectionPool,\n createConnectionPool,\n JSONSerializer,\n tracer,\n type ConnectionPool,\n} from '../../../../core';\nimport {\n defaultPostgreSqlDatabase,\n getDatabaseNameOrDefault,\n} from '../../core';\nimport { setPgTypeParser } from '../serialization';\nimport {\n pgConnection,\n PgDriverType,\n type PgClientConnection,\n type PgPoolClientConnection,\n} from './connection';\n\nexport type PgNativePool = ConnectionPool<PgPoolClientConnection>;\n\nexport type PgAmbientClientPool = ConnectionPool<PgClientConnection>;\n\nexport type PgAmbientConnectionPool = ConnectionPool<\n PgPoolClientConnection | PgClientConnection\n>;\n\nexport type PgPool =\n | PgNativePool\n | PgAmbientClientPool\n | PgAmbientConnectionPool;\n\nexport const pgNativePool = (options: {\n connectionString: string;\n database?: string | undefined;\n}): PgNativePool => {\n const { connectionString, database } = options;\n const pool = getPool({ connectionString, database });\n\n const getConnection = () =>\n pgConnection({\n type: 'PoolClient',\n connect: () => pool.connect(),\n close: (client) => Promise.resolve(client.release()),\n });\n\n const open = () => Promise.resolve(getConnection());\n const close = () => endPool({ connectionString, database });\n\n return createConnectionPool({\n driverType: PgDriverType,\n connection: open,\n close,\n getConnection,\n });\n};\n\nexport const pgAmbientNativePool = (options: {\n pool: pg.Pool;\n}): PgNativePool => {\n const { pool } = options;\n\n return createConnectionPool({\n driverType: PgDriverType,\n getConnection: () =>\n pgConnection({\n type: 'PoolClient',\n connect: () => pool.connect(),\n close: (client) => Promise.resolve(client.release()),\n }),\n });\n};\n\nexport const pgAmbientConnectionPool = (options: {\n connection: PgPoolClientConnection | PgClientConnection;\n}): PgAmbientConnectionPool => {\n const { connection } = options;\n\n return createAmbientConnectionPool({\n driverType: PgDriverType,\n connection,\n });\n};\n\nexport const pgClientPool = (options: {\n connectionString: string;\n database?: string | undefined;\n}): PgAmbientClientPool => {\n const { connectionString, database } = options;\n\n return createConnectionPool({\n driverType: PgDriverType,\n getConnection: () => {\n const connect = async () => {\n const client = new pg.Client({ connectionString, database });\n await client.connect();\n return client;\n };\n\n return pgConnection({\n type: 'Client',\n connect,\n close: (client) => client.end(),\n });\n },\n });\n};\n\nexport const pgAmbientClientPool = (options: {\n client: pg.Client;\n}): PgAmbientClientPool => {\n const { client } = options;\n\n const getConnection = () => {\n const connect = () => Promise.resolve(client);\n\n return pgConnection({\n type: 'Client',\n connect,\n close: () => Promise.resolve(),\n });\n };\n\n const open = () => Promise.resolve(getConnection());\n const close = () => Promise.resolve();\n\n return createConnectionPool({\n driverType: PgDriverType,\n connection: open,\n close,\n getConnection,\n });\n};\n\nexport type PgPoolPooledOptions =\n | {\n connectionString: string;\n database?: string;\n pooled: true;\n pool: pg.Pool;\n }\n | {\n connectionString: string;\n database?: string;\n pool: pg.Pool;\n }\n | {\n connectionString: string;\n database?: string;\n pooled: true;\n }\n | {\n connectionString: string;\n database?: string;\n };\n\nexport type PgPoolNotPooledOptions =\n | {\n connectionString: string;\n database?: string;\n pooled: false;\n client: pg.Client;\n }\n | {\n connectionString: string;\n database?: string;\n client: pg.Client;\n }\n | {\n connectionString: string;\n database?: string;\n pooled: false;\n }\n | {\n connectionString: string;\n database?: string;\n connection: PgPoolClientConnection | PgClientConnection;\n pooled?: false;\n };\n\nexport type PgPoolOptions = (PgPoolPooledOptions | PgPoolNotPooledOptions) & {\n serializer?: JSONSerializer;\n};\n\nexport function pgPool(options: PgPoolPooledOptions): PgNativePool;\nexport function pgPool(options: PgPoolNotPooledOptions): PgAmbientClientPool;\nexport function pgPool(\n options: PgPoolOptions,\n): PgNativePool | PgAmbientClientPool | PgAmbientConnectionPool {\n const { connectionString, database, serializer } = options;\n\n setPgTypeParser(serializer ?? JSONSerializer);\n\n if ('client' in options && options.client)\n return pgAmbientClientPool({ client: options.client });\n\n if ('connection' in options && options.connection)\n return pgAmbientConnectionPool({\n connection: options.connection,\n });\n\n if ('pooled' in options && options.pooled === false)\n return pgClientPool({ connectionString, database });\n\n if ('pool' in options && options.pool)\n return pgAmbientNativePool({ pool: options.pool });\n\n return pgNativePool({\n connectionString,\n database,\n });\n}\n\nconst pools: Map<string, pg.Pool> = new Map();\nconst usageCounter: Map<string, number> = new Map();\n\nexport const getPool = (\n connectionStringOrOptions: string | pg.PoolConfig,\n): pg.Pool => {\n const connectionString =\n typeof connectionStringOrOptions === 'string'\n ? connectionStringOrOptions\n : connectionStringOrOptions.connectionString!;\n\n const poolOptions =\n typeof connectionStringOrOptions === 'string'\n ? { connectionString }\n : connectionStringOrOptions;\n\n const database =\n poolOptions.database ??\n (poolOptions.connectionString\n ? getDatabaseNameOrDefault(poolOptions.connectionString)\n : undefined);\n\n const lookupKey = key(connectionString, database);\n\n updatePoolUsageCounter(lookupKey, 1);\n\n return (\n pools.get(lookupKey) ??\n pools.set(lookupKey, new pg.Pool(poolOptions)).get(lookupKey)!\n );\n};\n\nexport const endPool = async ({\n connectionString,\n database,\n force,\n}: {\n connectionString: string;\n database?: string | undefined;\n force?: boolean;\n}): Promise<void> => {\n database = database ?? getDatabaseNameOrDefault(connectionString);\n const lookupKey = key(connectionString, database);\n\n const pool = pools.get(lookupKey);\n if (pool && (updatePoolUsageCounter(lookupKey, -1) <= 0 || force === true)) {\n await onEndPool(lookupKey, pool);\n }\n};\n\nexport const onEndPool = async (lookupKey: string, pool: pg.Pool) => {\n try {\n await pool.end();\n } catch (error) {\n tracer.error('connection-closing-error', { lookupKey, error });\n }\n pools.delete(lookupKey);\n};\n\nexport const endAllPools = () =>\n Promise.all(\n [...pools.entries()].map(([lookupKey, pool]) => onEndPool(lookupKey, pool)),\n );\n\nconst key = (connectionString: string, database: string | undefined) =>\n `${connectionString}|${database ?? defaultPostgreSqlDatabase}`;\n\nconst updatePoolUsageCounter = (lookupKey: string, by: 1 | -1): number => {\n const currentCounter = usageCounter.get(lookupKey) ?? 0;\n const newCounter = currentCounter + by;\n\n usageCounter.set(lookupKey, currentCounter + by);\n\n return newCounter;\n};\n","import pg from 'pg';\nimport { JSONSerializer } from '../../../../core/serializer';\n\nexport const setPgTypeParser = (jsonSerializer: JSONSerializer) => {\n // BigInt\n pg.types.setTypeParser(20, (val) => BigInt(val));\n\n // JSONB\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n pg.types.setTypeParser(3802, (val) => jsonSerializer.deserialize(val));\n\n // JSON\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n pg.types.setTypeParser(114, (val) => jsonSerializer.deserialize(val));\n};\n","import {\n canHandleDriverWithConnectionString,\n type DumboDatabaseDriver,\n dumboDatabaseDriverRegistry,\n} from '../../../core';\nimport {\n DefaultPostgreSQLMigratorOptions,\n getDatabaseNameOrDefault,\n pgFormatter,\n PostgreSQLConnectionString,\n} from '../core';\nimport {\n type PgConnection,\n PgDriverType,\n pgPool,\n type PgPool,\n type PgPoolOptions,\n} from './connections';\n\nconst tryParseConnectionString = (connectionString: string) => {\n try {\n return PostgreSQLConnectionString(connectionString);\n } catch {\n return null;\n }\n};\n\nexport const pgDatabaseDriver: DumboDatabaseDriver<\n PgConnection,\n PgPoolOptions,\n PgPool\n> = {\n driverType: PgDriverType,\n createPool: (options) => pgPool(options as PgPoolOptions),\n sqlFormatter: pgFormatter,\n defaultMigratorOptions: DefaultPostgreSQLMigratorOptions,\n getDatabaseNameOrDefault,\n canHandle: canHandleDriverWithConnectionString(\n PgDriverType,\n tryParseConnectionString,\n ),\n};\n\nexport const usePgDatabaseDriver = () => {\n dumboDatabaseDriverRegistry.register(PgDriverType, pgDatabaseDriver);\n};\n\nusePgDatabaseDriver();\n\nexport * from './connections';\nexport * from './execute';\nexport * from './serialization';\n\nexport { pgDatabaseDriver as databaseDriver };\n\nexport type PostgreSQLPool = PgPool;\nexport type PostgreSQLConnection = PgConnection;\n\nexport type PostgreSQLPoolOptions = PgPoolOptions;\nexport const postgresPool = pgPool;\n\nexport const connectionPool = postgresPool;\n"]}
package/dist/pg.d.cts CHANGED
@@ -6,6 +6,10 @@ declare const defaultPostgreSQLConnectionString: PostgreSQLConnectionString;
6
6
  declare const getDatabaseNameOrDefault: (connectionString: string) => string;
7
7
  type PostgreSQLConnectionString = DatabaseConnectionString<'PostgreSQL', `postgresql://${string}` | `postgres://${string}`>;
8
8
  declare const PostgreSQLConnectionString: (connectionString: string) => PostgreSQLConnectionString;
9
+ /**
10
+ * Parse database name from a PostgreSQL connection string
11
+ */
12
+ declare function parseDatabaseName(str: string): string | null;
9
13
 
10
14
  declare const tryAcquireAdvisoryLock: (execute: SQLExecutor, options: AcquireDatabaseLockOptions) => Promise<boolean>;
11
15
  declare const releaseAdvisoryLock: (execute: SQLExecutor, options: ReleaseDatabaseLockOptions) => Promise<boolean>;
@@ -167,4 +171,4 @@ type PostgreSQLPoolOptions = PgPoolOptions;
167
171
  declare const postgresPool: typeof pgPool;
168
172
  declare const connectionPool: typeof pgPool;
169
173
 
170
- export { AdvisoryLock, type ConnectionCheckResult, DefaultPostgreSQLMigratorOptions, type PgAmbientClientPool, type PgAmbientConnectionPool, type PgClient, type PgClientConnection, type PgClientOptions, type PgClientOrPoolClient, type PgConnection, PgDriverType, type PgNativePool, type PgPool, type PgPoolClient, type PgPoolClientConnection, type PgPoolClientOptions, type PgPoolNotPooledOptions, type PgPoolOptions, type PgPoolOrClient, type PgPoolPooledOptions, type PgSQLExecutor, type PgTransaction, type PostgreSQLConnection, PostgreSQLConnectionString, PostgreSQLDatabaseName, type PostgreSQLDriverType, type PostgreSQLPool, type PostgreSQLPoolOptions, acquireAdvisoryLock, advisoryLock, checkConnection, connectionPool, pgDatabaseDriver as databaseDriver, defaultPostgreSQLConnectionString, defaultPostgreSqlDatabase, endAllPools, endPool, functionExists, functionExistsSQL, getDatabaseNameOrDefault, getPool, isPgClient, isPgNativePool, isPgPoolClient, onEndPool, pgAmbientClientPool, pgAmbientConnectionPool, pgAmbientNativePool, pgClientConnection, pgClientPool, pgConnection, pgDatabaseDriver, pgExecute, pgFormatter, pgNativePool, pgPool, pgPoolClientConnection, pgSQLExecutor, pgTransaction, postgreSQLColumnProcessors, postgresPool, releaseAdvisoryLock, setPgTypeParser, tableExists, tableExistsSQL, tryAcquireAdvisoryLock, usePgDatabaseDriver };
174
+ export { AdvisoryLock, type ConnectionCheckResult, DefaultPostgreSQLMigratorOptions, type PgAmbientClientPool, type PgAmbientConnectionPool, type PgClient, type PgClientConnection, type PgClientOptions, type PgClientOrPoolClient, type PgConnection, PgDriverType, type PgNativePool, type PgPool, type PgPoolClient, type PgPoolClientConnection, type PgPoolClientOptions, type PgPoolNotPooledOptions, type PgPoolOptions, type PgPoolOrClient, type PgPoolPooledOptions, type PgSQLExecutor, type PgTransaction, type PostgreSQLConnection, PostgreSQLConnectionString, PostgreSQLDatabaseName, type PostgreSQLDriverType, type PostgreSQLPool, type PostgreSQLPoolOptions, acquireAdvisoryLock, advisoryLock, checkConnection, connectionPool, pgDatabaseDriver as databaseDriver, defaultPostgreSQLConnectionString, defaultPostgreSqlDatabase, endAllPools, endPool, functionExists, functionExistsSQL, getDatabaseNameOrDefault, getPool, isPgClient, isPgNativePool, isPgPoolClient, onEndPool, parseDatabaseName, pgAmbientClientPool, pgAmbientConnectionPool, pgAmbientNativePool, pgClientConnection, pgClientPool, pgConnection, pgDatabaseDriver, pgExecute, pgFormatter, pgNativePool, pgPool, pgPoolClientConnection, pgSQLExecutor, pgTransaction, postgreSQLColumnProcessors, postgresPool, releaseAdvisoryLock, setPgTypeParser, tableExists, tableExistsSQL, tryAcquireAdvisoryLock, usePgDatabaseDriver };
package/dist/pg.d.ts CHANGED
@@ -6,6 +6,10 @@ declare const defaultPostgreSQLConnectionString: PostgreSQLConnectionString;
6
6
  declare const getDatabaseNameOrDefault: (connectionString: string) => string;
7
7
  type PostgreSQLConnectionString = DatabaseConnectionString<'PostgreSQL', `postgresql://${string}` | `postgres://${string}`>;
8
8
  declare const PostgreSQLConnectionString: (connectionString: string) => PostgreSQLConnectionString;
9
+ /**
10
+ * Parse database name from a PostgreSQL connection string
11
+ */
12
+ declare function parseDatabaseName(str: string): string | null;
9
13
 
10
14
  declare const tryAcquireAdvisoryLock: (execute: SQLExecutor, options: AcquireDatabaseLockOptions) => Promise<boolean>;
11
15
  declare const releaseAdvisoryLock: (execute: SQLExecutor, options: ReleaseDatabaseLockOptions) => Promise<boolean>;
@@ -167,4 +171,4 @@ type PostgreSQLPoolOptions = PgPoolOptions;
167
171
  declare const postgresPool: typeof pgPool;
168
172
  declare const connectionPool: typeof pgPool;
169
173
 
170
- export { AdvisoryLock, type ConnectionCheckResult, DefaultPostgreSQLMigratorOptions, type PgAmbientClientPool, type PgAmbientConnectionPool, type PgClient, type PgClientConnection, type PgClientOptions, type PgClientOrPoolClient, type PgConnection, PgDriverType, type PgNativePool, type PgPool, type PgPoolClient, type PgPoolClientConnection, type PgPoolClientOptions, type PgPoolNotPooledOptions, type PgPoolOptions, type PgPoolOrClient, type PgPoolPooledOptions, type PgSQLExecutor, type PgTransaction, type PostgreSQLConnection, PostgreSQLConnectionString, PostgreSQLDatabaseName, type PostgreSQLDriverType, type PostgreSQLPool, type PostgreSQLPoolOptions, acquireAdvisoryLock, advisoryLock, checkConnection, connectionPool, pgDatabaseDriver as databaseDriver, defaultPostgreSQLConnectionString, defaultPostgreSqlDatabase, endAllPools, endPool, functionExists, functionExistsSQL, getDatabaseNameOrDefault, getPool, isPgClient, isPgNativePool, isPgPoolClient, onEndPool, pgAmbientClientPool, pgAmbientConnectionPool, pgAmbientNativePool, pgClientConnection, pgClientPool, pgConnection, pgDatabaseDriver, pgExecute, pgFormatter, pgNativePool, pgPool, pgPoolClientConnection, pgSQLExecutor, pgTransaction, postgreSQLColumnProcessors, postgresPool, releaseAdvisoryLock, setPgTypeParser, tableExists, tableExistsSQL, tryAcquireAdvisoryLock, usePgDatabaseDriver };
174
+ export { AdvisoryLock, type ConnectionCheckResult, DefaultPostgreSQLMigratorOptions, type PgAmbientClientPool, type PgAmbientConnectionPool, type PgClient, type PgClientConnection, type PgClientOptions, type PgClientOrPoolClient, type PgConnection, PgDriverType, type PgNativePool, type PgPool, type PgPoolClient, type PgPoolClientConnection, type PgPoolClientOptions, type PgPoolNotPooledOptions, type PgPoolOptions, type PgPoolOrClient, type PgPoolPooledOptions, type PgSQLExecutor, type PgTransaction, type PostgreSQLConnection, PostgreSQLConnectionString, PostgreSQLDatabaseName, type PostgreSQLDriverType, type PostgreSQLPool, type PostgreSQLPoolOptions, acquireAdvisoryLock, advisoryLock, checkConnection, connectionPool, pgDatabaseDriver as databaseDriver, defaultPostgreSQLConnectionString, defaultPostgreSqlDatabase, endAllPools, endPool, functionExists, functionExistsSQL, getDatabaseNameOrDefault, getPool, isPgClient, isPgNativePool, isPgPoolClient, onEndPool, parseDatabaseName, pgAmbientClientPool, pgAmbientConnectionPool, pgAmbientNativePool, pgClientConnection, pgClientPool, pgConnection, pgDatabaseDriver, pgExecute, pgFormatter, pgNativePool, pgPool, pgPoolClientConnection, pgSQLExecutor, pgTransaction, postgreSQLColumnProcessors, postgresPool, releaseAdvisoryLock, setPgTypeParser, tableExists, tableExistsSQL, tryAcquireAdvisoryLock, usePgDatabaseDriver };
package/dist/pg.js CHANGED
@@ -20,9 +20,6 @@ import {
20
20
  tracer
21
21
  } from "./chunk-FRYUNQP7.js";
22
22
 
23
- // src/storage/postgresql/core/connections/connectionString.ts
24
- import pgcs from "pg-connection-string";
25
-
26
23
  // src/storage/postgresql/core/locks/advisoryLocks.ts
27
24
  var tryAcquireAdvisoryLock = async (execute, options) => {
28
25
  const timeoutMs = options.timeoutMs ?? defaultDatabaseLockOptions.timeoutMs;
@@ -128,7 +125,7 @@ var functionExists = async (pool, tableName) => exists(pool.execute.query(functi
128
125
 
129
126
  // src/storage/postgresql/core/connections/connectionString.ts
130
127
  var defaultPostgreSQLConnectionString = "postgresql://postgres@localhost:5432/postgres";
131
- var getDatabaseNameOrDefault = (connectionString) => pgcs.parse(connectionString).database ?? defaultPostgreSqlDatabase;
128
+ var getDatabaseNameOrDefault = (connectionString) => parseDatabaseName(connectionString) ?? defaultPostgreSqlDatabase;
132
129
  var PostgreSQLConnectionString = (connectionString) => {
133
130
  if (!connectionString.startsWith("postgresql://") && !connectionString.startsWith("postgres://")) {
134
131
  throw new Error(
@@ -137,6 +134,30 @@ var PostgreSQLConnectionString = (connectionString) => {
137
134
  }
138
135
  return connectionString;
139
136
  };
137
+ function parseDatabaseName(str) {
138
+ if (str.charAt(0) === "/") {
139
+ const parts = str.split(" ");
140
+ return parts[1] || null;
141
+ }
142
+ if (/ |%[^a-f0-9]|%[a-f0-9][^a-f0-9]/i.test(str)) {
143
+ str = encodeURI(str).replace(/%25(\d\d)/g, "%$1");
144
+ }
145
+ let result;
146
+ try {
147
+ result = new URL(str, "postgres://base");
148
+ } catch {
149
+ try {
150
+ result = new URL(str.replace("@/", "@___DUMMY___/"), "postgres://base");
151
+ } catch {
152
+ return null;
153
+ }
154
+ }
155
+ if (result.protocol === "socket:") {
156
+ return result.searchParams.get("db");
157
+ }
158
+ const pathname = result.pathname.slice(1) || null;
159
+ return pathname ? decodeURI(pathname) : null;
160
+ }
140
161
 
141
162
  // src/storage/postgresql/core/sql/processors/columProcessors.ts
142
163
  var mapColumnType = (token, { builder }) => {
@@ -659,6 +680,7 @@ export {
659
680
  isPgNativePool,
660
681
  isPgPoolClient,
661
682
  onEndPool,
683
+ parseDatabaseName,
662
684
  pgAmbientClientPool,
663
685
  pgAmbientConnectionPool,
664
686
  pgAmbientNativePool,
package/dist/pg.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/storage/postgresql/core/connections/connectionString.ts","../src/storage/postgresql/core/locks/advisoryLocks.ts","../src/storage/postgresql/core/schema/migrations.ts","../src/storage/postgresql/core/schema/schema.ts","../src/storage/postgresql/core/sql/processors/columProcessors.ts","../src/storage/postgresql/core/sql/formatter/reserved.ts","../src/storage/postgresql/core/sql/formatter/index.ts","../src/storage/postgresql/core/index.ts","../src/storage/postgresql/pg/connections/connection.ts","../src/storage/postgresql/pg/execute/execute.ts","../src/storage/postgresql/pg/connections/transaction.ts","../src/storage/postgresql/pg/connections/pool.ts","../src/storage/postgresql/pg/serialization/index.ts","../src/storage/postgresql/pg/index.ts"],"sourcesContent":["import pgcs from 'pg-connection-string';\nimport type { DatabaseConnectionString } from '../../../all';\nimport { defaultPostgreSqlDatabase } from '../schema';\n\nexport const defaultPostgreSQLConnectionString: PostgreSQLConnectionString =\n 'postgresql://postgres@localhost:5432/postgres' as PostgreSQLConnectionString;\n\nexport const getDatabaseNameOrDefault = (connectionString: string) =>\n pgcs.parse(connectionString).database ?? defaultPostgreSqlDatabase;\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","import {\n defaultDatabaseLockOptions,\n single,\n SQL,\n type AcquireDatabaseLockMode,\n type AcquireDatabaseLockOptions,\n type DatabaseLock,\n type DatabaseLockOptions,\n type ReleaseDatabaseLockOptions,\n type SQLExecutor,\n} from '../../../../core';\n\nexport const tryAcquireAdvisoryLock = async (\n execute: SQLExecutor,\n options: AcquireDatabaseLockOptions,\n): Promise<boolean> => {\n const timeoutMs = options.timeoutMs ?? defaultDatabaseLockOptions.timeoutMs;\n\n const advisoryLock =\n options.mode === 'Permanent' ? 'pg_advisory_lock' : 'pg_advisory_xact_lock';\n\n try {\n await single(\n execute.query<{ locked: boolean }>(\n SQL`SELECT ${SQL.plain(advisoryLock)}(${options.lockId}) AS locked`,\n { timeoutMs },\n ),\n );\n return true;\n } catch (error) {\n if (error instanceof Error && 'code' in error && error.code === '57014')\n return false;\n\n throw error;\n }\n};\n\nexport const releaseAdvisoryLock = async (\n execute: SQLExecutor,\n options: ReleaseDatabaseLockOptions,\n): Promise<boolean> => {\n const timeoutMs = options.timeoutMs ?? defaultDatabaseLockOptions.timeoutMs;\n\n try {\n await single(\n execute.query<{ locked: boolean }>(\n SQL`SELECT pg_advisory_unlock(${options.lockId}) AS locked`,\n { timeoutMs },\n ),\n );\n return true;\n } catch (error) {\n if (error instanceof Error && 'code' in error && error.code === '57014')\n return false;\n\n throw error;\n }\n};\n\nexport const acquireAdvisoryLock = async (\n execute: SQLExecutor,\n options: AcquireDatabaseLockOptions,\n) => {\n const lockAcquired = await tryAcquireAdvisoryLock(execute, options);\n if (!lockAcquired) {\n throw new Error(\n 'Failed to acquire advisory lock within the specified timeout. Migration aborted.',\n );\n }\n};\n\nexport const AdvisoryLock: DatabaseLock = {\n acquire: acquireAdvisoryLock,\n tryAcquire: tryAcquireAdvisoryLock,\n release: releaseAdvisoryLock,\n withAcquire: async <Result>(\n execute: SQLExecutor,\n handle: () => Promise<Result>,\n options: AcquireDatabaseLockOptions,\n ) => {\n await acquireAdvisoryLock(execute, options);\n try {\n return await handle();\n } finally {\n if (options.mode === 'Permanent')\n await releaseAdvisoryLock(execute, options);\n }\n },\n};\n\nexport const advisoryLock = (\n execute: SQLExecutor,\n options: DatabaseLockOptions,\n) => ({\n acquire: (acquireOptions?: { mode: AcquireDatabaseLockMode }) =>\n acquireAdvisoryLock(execute, {\n ...options,\n ...(acquireOptions ?? {}),\n }),\n tryAcquire: (acquireOptions?: { mode: AcquireDatabaseLockMode }) =>\n tryAcquireAdvisoryLock(execute, {\n ...options,\n ...(acquireOptions ?? {}),\n }),\n release: () => releaseAdvisoryLock(execute, options),\n withAcquire: async <Result>(\n handle: () => Promise<Result>,\n acquireOptions?: { mode: AcquireDatabaseLockMode },\n ) => {\n await acquireAdvisoryLock(execute, {\n ...options,\n ...(acquireOptions ?? {}),\n });\n try {\n return await handle();\n } finally {\n await releaseAdvisoryLock(execute, options);\n }\n },\n});\n","import {\n type MigratorOptions,\n registerDefaultMigratorOptions,\n} from '../../../../core';\nimport { AdvisoryLock } from '../locks';\n\nexport const DefaultPostgreSQLMigratorOptions: MigratorOptions = {\n lock: {\n databaseLock: AdvisoryLock,\n },\n};\n\nregisterDefaultMigratorOptions('PostgreSQL', DefaultPostgreSQLMigratorOptions);\n","import { exists, SQL, type ConnectionPool } 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 pool: ConnectionPool,\n tableName: string,\n): Promise<boolean> => exists(pool.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 pool: ConnectionPool,\n tableName: string,\n): Promise<boolean> => exists(pool.execute.query(functionExistsSQL(tableName)));\n","import {\n mapDefaultSQLColumnProcessors,\n type DefaultSQLColumnProcessors,\n type DefaultSQLColumnToken,\n type SQLProcessorContext,\n} from '../../../../../core';\n\nconst mapColumnType = (\n token: DefaultSQLColumnToken,\n { builder }: SQLProcessorContext,\n): void => {\n let columnSQL: string;\n const { sqlTokenType } = token;\n switch (sqlTokenType) {\n case 'SQL_COLUMN_AUTO_INCREMENT':\n columnSQL = `${token.bigint ? 'BIGSERIAL' : 'SERIAL'} ${token.primaryKey ? 'PRIMARY KEY' : ''}`;\n break;\n case 'SQL_COLUMN_BIGINT':\n columnSQL = 'BIGINT';\n break;\n case 'SQL_COLUMN_SERIAL':\n columnSQL = 'SERIAL';\n break;\n case 'SQL_COLUMN_INTEGER':\n columnSQL = 'INTEGER';\n break;\n case 'SQL_COLUMN_JSONB':\n columnSQL = 'JSONB';\n break;\n case 'SQL_COLUMN_BIGSERIAL':\n columnSQL = 'BIGSERIAL';\n break;\n case 'SQL_COLUMN_TIMESTAMP':\n columnSQL = 'TIMESTAMP';\n break;\n case 'SQL_COLUMN_TIMESTAMPTZ':\n columnSQL = 'TIMESTAMPTZ';\n break;\n case 'SQL_COLUMN_VARCHAR':\n columnSQL = `VARCHAR ${Number.isNaN(token.length) ? '' : `(${token.length})`}`;\n break;\n default: {\n const exhaustiveCheck: never = sqlTokenType;\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n throw new Error(`Unknown column type: ${exhaustiveCheck}`);\n }\n }\n builder.addSQL(columnSQL);\n};\n\nexport const postgreSQLColumnProcessors: DefaultSQLColumnProcessors =\n mapDefaultSQLColumnProcessors(mapColumnType);\n","// Ported from: https://github.com/datalanche/node-pg-format/blob/master/lib/reserved.js\n//\n// PostgreSQL reserved words\n//\nconst reservedMap: { [key: string]: boolean } = {\n AES128: true,\n AES256: true,\n ALL: true,\n ALLOWOVERWRITE: true,\n ANALYSE: true,\n ANALYZE: true,\n AND: true,\n ANY: true,\n ARRAY: true,\n AS: true,\n ASC: true,\n AUTHORIZATION: true,\n BACKUP: true,\n BETWEEN: true,\n BINARY: true,\n BLANKSASNULL: true,\n BOTH: true,\n BYTEDICT: true,\n CASE: true,\n CAST: true,\n CHECK: true,\n COLLATE: true,\n COLUMN: true,\n CONSTRAINT: true,\n CREATE: true,\n CREDENTIALS: true,\n CROSS: true,\n CURRENT_DATE: true,\n CURRENT_TIME: true,\n CURRENT_TIMESTAMP: true,\n CURRENT_USER: true,\n CURRENT_USER_ID: true,\n DEFAULT: true,\n DEFERRABLE: true,\n DEFLATE: true,\n DEFRAG: true,\n DELTA: true,\n DELTA32K: true,\n DESC: true,\n DISABLE: true,\n DISTINCT: true,\n DO: true,\n ELSE: true,\n EMPTYASNULL: true,\n ENABLE: true,\n ENCODE: true,\n ENCRYPT: true,\n ENCRYPTION: true,\n END: true,\n EXCEPT: true,\n EXPLICIT: true,\n FALSE: true,\n FOR: true,\n FOREIGN: true,\n FREEZE: true,\n FROM: true,\n FULL: true,\n GLOBALDICT256: true,\n GLOBALDICT64K: true,\n GRANT: true,\n GROUP: true,\n GZIP: true,\n HAVING: true,\n IDENTITY: true,\n IGNORE: true,\n ILIKE: true,\n IN: true,\n INITIALLY: true,\n INNER: true,\n INTERSECT: true,\n INTO: true,\n IS: true,\n ISNULL: true,\n JOIN: true,\n LEADING: true,\n LEFT: true,\n LIKE: true,\n LIMIT: true,\n LOCALTIME: true,\n LOCALTIMESTAMP: true,\n LUN: true,\n LUNS: true,\n LZO: true,\n LZOP: true,\n MINUS: true,\n MOSTLY13: true,\n MOSTLY32: true,\n MOSTLY8: true,\n NATURAL: true,\n NEW: true,\n NOT: true,\n NOTNULL: true,\n NULL: true,\n NULLS: true,\n OFF: true,\n OFFLINE: true,\n OFFSET: true,\n OLD: true,\n ON: true,\n ONLY: true,\n OPEN: true,\n OR: true,\n ORDER: true,\n OUTER: true,\n OVERLAPS: true,\n PARALLEL: true,\n PARTITION: true,\n PERCENT: true,\n PLACING: true,\n PRIMARY: true,\n RAW: true,\n READRATIO: true,\n RECOVER: true,\n REFERENCES: true,\n REJECTLOG: true,\n RESORT: true,\n RESTORE: true,\n RIGHT: true,\n SELECT: true,\n SESSION_USER: true,\n SIMILAR: true,\n SOME: true,\n SYSDATE: true,\n SYSTEM: true,\n TABLE: true,\n TAG: true,\n TDES: true,\n TEXT255: true,\n TEXT32K: true,\n THEN: true,\n TO: true,\n TOP: true,\n TRAILING: true,\n TRUE: true,\n TRUNCATECOLUMNS: true,\n UNION: true,\n UNIQUE: true,\n USER: true,\n USING: true,\n VERBOSE: true,\n WALLET: true,\n WHEN: true,\n WHERE: true,\n WITH: true,\n WITHOUT: true,\n};\n\nexport default reservedMap;\n","import {\n SQLFormatter,\n SQLProcessorsRegistry,\n defaultProcessorsRegistry,\n mapSQLIdentifier,\n registerFormatter,\n} from '../../../../../core';\nimport { postgreSQLColumnProcessors } from '../processors';\nimport reservedMap from './reserved';\n\nconst postgreSQLProcessorsRegistry = SQLProcessorsRegistry({\n from: defaultProcessorsRegistry,\n}).register(postgreSQLColumnProcessors);\n\nconst pgFormatter: SQLFormatter = SQLFormatter({\n processorsRegistry: postgreSQLProcessorsRegistry,\n valueMapper: {\n mapDate: (value: Date): unknown =>\n value.toISOString().replace('T', ' ').replace('Z', '+00'),\n mapPlaceholder: (index: number): string => `$${index + 1}`,\n mapIdentifier: (value: string): string =>\n mapSQLIdentifier(value, { reservedWords: reservedMap }),\n },\n});\n\nregisterFormatter('PostgreSQL', pgFormatter);\n\n// Export the original functions if needed\nexport { pgFormatter };\n","import type { DatabaseDriverType } from '../../../core';\n\nexport * from './connections';\nexport * from './locks';\nexport * from './schema';\nexport * from './sql';\n\nexport type PostgreSQLDatabaseName = 'PostgreSQL';\nexport const PostgreSQLDatabaseName = 'PostgreSQL';\n\nexport type PostgreSQLDriverType<DriverName extends string = string> =\n DatabaseDriverType<PostgreSQLDatabaseName, DriverName>;\n","import pg from 'pg';\nimport { createConnection, type Connection } from '../../../../core';\nimport type { PostgreSQLDriverType } from '../../core';\nimport { pgSQLExecutor } from '../execute';\nimport { pgTransaction } from './transaction';\n\nexport type PgDriverType = PostgreSQLDriverType<'pg'>;\nexport const PgDriverType: PgDriverType = 'PostgreSQL:pg';\n\nexport type PgPoolClient = pg.PoolClient;\nexport type PgClient = pg.Client;\n\nexport type PgClientOrPoolClient = PgPoolClient | PgClient;\n\nexport type PgPoolOrClient = pg.Pool | PgPoolClient | PgClient;\n\nexport type PgClientConnection = Connection<\n PgClientConnection,\n PgDriverType,\n PgClient\n>;\n\nexport type PgPoolClientConnection = Connection<\n PgPoolClientConnection,\n PgDriverType,\n PgPoolClient\n>;\n\nexport type PgConnection = PgPoolClientConnection | PgClientConnection;\n\nexport type PgPoolClientOptions = {\n type: 'PoolClient';\n connect: () => Promise<PgPoolClient>;\n close: (client: PgPoolClient) => Promise<void>;\n};\n\nexport type PgClientOptions = {\n type: 'Client';\n connect: () => Promise<PgClient>;\n close: (client: PgClient) => Promise<void>;\n};\n\nexport const pgClientConnection = (\n options: PgClientOptions,\n): PgClientConnection => {\n const { connect, close } = options;\n\n return createConnection({\n driverType: PgDriverType,\n connect,\n close,\n initTransaction: (connection) => pgTransaction(connection),\n executor: pgSQLExecutor,\n });\n};\n\nexport const pgPoolClientConnection = (\n options: PgPoolClientOptions,\n): PgPoolClientConnection => {\n const { connect, close } = options;\n\n return createConnection({\n driverType: PgDriverType,\n connect,\n close,\n initTransaction: (connection) => pgTransaction(connection),\n executor: pgSQLExecutor,\n });\n};\n\nexport function pgConnection(\n options: PgPoolClientOptions,\n): PgPoolClientConnection;\nexport function pgConnection(options: PgClientOptions): PgClientConnection;\nexport function pgConnection(\n options: PgPoolClientOptions | PgClientOptions,\n): PgPoolClientConnection | PgClientConnection {\n return options.type === 'Client'\n ? pgClientConnection(options)\n : pgPoolClientConnection(options);\n}\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\nexport const checkConnection = async (\n connectionString: string,\n): Promise<ConnectionCheckResult> => {\n const client = new pg.Client({\n connectionString,\n });\n\n try {\n await client.connect();\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 === 'ECONNREFUSED'\n ? 'ConnectionRefused'\n : code === '28P01'\n ? 'Authentication'\n : 'Unknown',\n code,\n error,\n };\n } finally {\n // Ensure the client is closed properly if connected\n await client.end();\n }\n};\n","import pg from 'pg';\nimport {\n tracer,\n type DbSQLExecutor,\n type QueryResult,\n type QueryResultRow,\n type SQL,\n type SQLCommandOptions,\n type SQLQueryOptions,\n} from '../../../../core';\nimport { pgFormatter } from '../../core';\nimport { PgDriverType, type PgClientOrPoolClient } from '../connections';\n\nexport const isPgNativePool = (\n poolOrClient: pg.Pool | pg.PoolClient | pg.Client,\n): poolOrClient is pg.Pool => {\n return poolOrClient instanceof pg.Pool;\n};\n\nexport const isPgClient = (\n poolOrClient: pg.Pool | pg.PoolClient | pg.Client,\n): poolOrClient is pg.Client => poolOrClient instanceof pg.Client;\n\nexport const isPgPoolClient = (\n poolOrClient: pg.Pool | pg.PoolClient | pg.Client,\n): poolOrClient is pg.PoolClient =>\n 'release' in poolOrClient && typeof poolOrClient.release === 'function';\n\nexport const pgExecute = async <Result = void>(\n poolOrClient: pg.Pool | pg.PoolClient | pg.Client,\n handle: (client: pg.PoolClient | pg.Client) => Promise<Result>,\n) => {\n const client = isPgNativePool(poolOrClient)\n ? await poolOrClient.connect()\n : poolOrClient;\n\n try {\n return await handle(client);\n } finally {\n // release only if client wasn't injected externally\n if (isPgNativePool(poolOrClient) && isPgPoolClient(client))\n client.release();\n }\n};\n\nexport type PgSQLExecutor = DbSQLExecutor<PgDriverType, PgClientOrPoolClient>;\n\nexport const pgSQLExecutor = (): PgSQLExecutor => ({\n driverType: PgDriverType,\n query: batch,\n batchQuery: batch,\n command: batch,\n batchCommand: batch,\n formatter: pgFormatter,\n});\n\nfunction batch<Result extends QueryResultRow = QueryResultRow>(\n client: PgClientOrPoolClient,\n sqlOrSqls: SQL,\n options?: SQLQueryOptions | SQLCommandOptions,\n): Promise<QueryResult<Result>>;\nfunction batch<Result extends QueryResultRow = QueryResultRow>(\n client: PgClientOrPoolClient,\n sqlOrSqls: SQL[],\n options?: SQLQueryOptions | SQLCommandOptions,\n): Promise<QueryResult<Result>[]>;\nasync function batch<Result extends QueryResultRow = QueryResultRow>(\n client: PgClientOrPoolClient,\n sqlOrSqls: SQL | SQL[],\n options?: SQLQueryOptions | SQLCommandOptions,\n): Promise<QueryResult<Result> | QueryResult<Result>[]> {\n const sqls = Array.isArray(sqlOrSqls) ? sqlOrSqls : [sqlOrSqls];\n const results: QueryResult<Result>[] = Array<QueryResult<Result>>(\n sqls.length,\n );\n\n if (options?.timeoutMs) {\n await client.query(`SET statement_timeout = ${options?.timeoutMs}`);\n }\n\n //TODO: make it smarter at some point\n for (let i = 0; i < sqls.length; i++) {\n const { query, params } = pgFormatter.format(sqls[i]!);\n tracer.info('db:sql:query', {\n query,\n params,\n debugSQL: pgFormatter.describe(sqls[i]!),\n });\n const result = await client.query<Result>(query, params);\n results[i] = { rowCount: result.rowCount, rows: result.rows };\n }\n return Array.isArray(sqlOrSqls) ? results : results[0]!;\n}\n","import {\n sqlExecutor,\n type AnyConnection,\n type DatabaseTransaction,\n type DatabaseTransactionOptions,\n} from '../../../../core';\nimport { pgSQLExecutor } from '../execute';\nimport {\n PgDriverType,\n type PgConnection,\n type PgPoolOrClient,\n} from './connection';\n\nexport type PgTransaction = DatabaseTransaction<PgConnection>;\n\nexport const pgTransaction =\n <ConnectionType extends AnyConnection = AnyConnection>(\n connection: () => ConnectionType,\n ) =>\n <DbClient extends PgPoolOrClient = PgPoolOrClient>(\n getClient: Promise<DbClient>,\n options?: {\n close: (client: DbClient, error?: unknown) => Promise<void>;\n } & DatabaseTransactionOptions,\n ): DatabaseTransaction<ConnectionType> => ({\n connection: connection(),\n driverType: PgDriverType,\n begin: async () => {\n const client = await getClient;\n await client.query('BEGIN');\n },\n commit: async () => {\n const client = await getClient;\n\n try {\n await client.query('COMMIT');\n } finally {\n if (options?.close) await options?.close(client);\n }\n },\n rollback: async (error?: unknown) => {\n const client = await getClient;\n try {\n await client.query('ROLLBACK');\n } finally {\n if (options?.close) await options?.close(client, error);\n }\n },\n execute: sqlExecutor(pgSQLExecutor(), {\n connect: () => getClient,\n }),\n });\n","import pg from 'pg';\nimport {\n createAmbientConnectionPool,\n createConnectionPool,\n JSONSerializer,\n tracer,\n type ConnectionPool,\n} from '../../../../core';\nimport {\n defaultPostgreSqlDatabase,\n getDatabaseNameOrDefault,\n} from '../../core';\nimport { setPgTypeParser } from '../serialization';\nimport {\n pgConnection,\n PgDriverType,\n type PgClientConnection,\n type PgPoolClientConnection,\n} from './connection';\n\nexport type PgNativePool = ConnectionPool<PgPoolClientConnection>;\n\nexport type PgAmbientClientPool = ConnectionPool<PgClientConnection>;\n\nexport type PgAmbientConnectionPool = ConnectionPool<\n PgPoolClientConnection | PgClientConnection\n>;\n\nexport type PgPool =\n | PgNativePool\n | PgAmbientClientPool\n | PgAmbientConnectionPool;\n\nexport const pgNativePool = (options: {\n connectionString: string;\n database?: string | undefined;\n}): PgNativePool => {\n const { connectionString, database } = options;\n const pool = getPool({ connectionString, database });\n\n const getConnection = () =>\n pgConnection({\n type: 'PoolClient',\n connect: () => pool.connect(),\n close: (client) => Promise.resolve(client.release()),\n });\n\n const open = () => Promise.resolve(getConnection());\n const close = () => endPool({ connectionString, database });\n\n return createConnectionPool({\n driverType: PgDriverType,\n connection: open,\n close,\n getConnection,\n });\n};\n\nexport const pgAmbientNativePool = (options: {\n pool: pg.Pool;\n}): PgNativePool => {\n const { pool } = options;\n\n return createConnectionPool({\n driverType: PgDriverType,\n getConnection: () =>\n pgConnection({\n type: 'PoolClient',\n connect: () => pool.connect(),\n close: (client) => Promise.resolve(client.release()),\n }),\n });\n};\n\nexport const pgAmbientConnectionPool = (options: {\n connection: PgPoolClientConnection | PgClientConnection;\n}): PgAmbientConnectionPool => {\n const { connection } = options;\n\n return createAmbientConnectionPool({\n driverType: PgDriverType,\n connection,\n });\n};\n\nexport const pgClientPool = (options: {\n connectionString: string;\n database?: string | undefined;\n}): PgAmbientClientPool => {\n const { connectionString, database } = options;\n\n return createConnectionPool({\n driverType: PgDriverType,\n getConnection: () => {\n const connect = async () => {\n const client = new pg.Client({ connectionString, database });\n await client.connect();\n return client;\n };\n\n return pgConnection({\n type: 'Client',\n connect,\n close: (client) => client.end(),\n });\n },\n });\n};\n\nexport const pgAmbientClientPool = (options: {\n client: pg.Client;\n}): PgAmbientClientPool => {\n const { client } = options;\n\n const getConnection = () => {\n const connect = () => Promise.resolve(client);\n\n return pgConnection({\n type: 'Client',\n connect,\n close: () => Promise.resolve(),\n });\n };\n\n const open = () => Promise.resolve(getConnection());\n const close = () => Promise.resolve();\n\n return createConnectionPool({\n driverType: PgDriverType,\n connection: open,\n close,\n getConnection,\n });\n};\n\nexport type PgPoolPooledOptions =\n | {\n connectionString: string;\n database?: string;\n pooled: true;\n pool: pg.Pool;\n }\n | {\n connectionString: string;\n database?: string;\n pool: pg.Pool;\n }\n | {\n connectionString: string;\n database?: string;\n pooled: true;\n }\n | {\n connectionString: string;\n database?: string;\n };\n\nexport type PgPoolNotPooledOptions =\n | {\n connectionString: string;\n database?: string;\n pooled: false;\n client: pg.Client;\n }\n | {\n connectionString: string;\n database?: string;\n client: pg.Client;\n }\n | {\n connectionString: string;\n database?: string;\n pooled: false;\n }\n | {\n connectionString: string;\n database?: string;\n connection: PgPoolClientConnection | PgClientConnection;\n pooled?: false;\n };\n\nexport type PgPoolOptions = (PgPoolPooledOptions | PgPoolNotPooledOptions) & {\n serializer?: JSONSerializer;\n};\n\nexport function pgPool(options: PgPoolPooledOptions): PgNativePool;\nexport function pgPool(options: PgPoolNotPooledOptions): PgAmbientClientPool;\nexport function pgPool(\n options: PgPoolOptions,\n): PgNativePool | PgAmbientClientPool | PgAmbientConnectionPool {\n const { connectionString, database, serializer } = options;\n\n setPgTypeParser(serializer ?? JSONSerializer);\n\n if ('client' in options && options.client)\n return pgAmbientClientPool({ client: options.client });\n\n if ('connection' in options && options.connection)\n return pgAmbientConnectionPool({\n connection: options.connection,\n });\n\n if ('pooled' in options && options.pooled === false)\n return pgClientPool({ connectionString, database });\n\n if ('pool' in options && options.pool)\n return pgAmbientNativePool({ pool: options.pool });\n\n return pgNativePool({\n connectionString,\n database,\n });\n}\n\nconst pools: Map<string, pg.Pool> = new Map();\nconst usageCounter: Map<string, number> = new Map();\n\nexport const getPool = (\n connectionStringOrOptions: string | pg.PoolConfig,\n): pg.Pool => {\n const connectionString =\n typeof connectionStringOrOptions === 'string'\n ? connectionStringOrOptions\n : connectionStringOrOptions.connectionString!;\n\n const poolOptions =\n typeof connectionStringOrOptions === 'string'\n ? { connectionString }\n : connectionStringOrOptions;\n\n const database =\n poolOptions.database ??\n (poolOptions.connectionString\n ? getDatabaseNameOrDefault(poolOptions.connectionString)\n : undefined);\n\n const lookupKey = key(connectionString, database);\n\n updatePoolUsageCounter(lookupKey, 1);\n\n return (\n pools.get(lookupKey) ??\n pools.set(lookupKey, new pg.Pool(poolOptions)).get(lookupKey)!\n );\n};\n\nexport const endPool = async ({\n connectionString,\n database,\n force,\n}: {\n connectionString: string;\n database?: string | undefined;\n force?: boolean;\n}): Promise<void> => {\n database = database ?? getDatabaseNameOrDefault(connectionString);\n const lookupKey = key(connectionString, database);\n\n const pool = pools.get(lookupKey);\n if (pool && (updatePoolUsageCounter(lookupKey, -1) <= 0 || force === true)) {\n await onEndPool(lookupKey, pool);\n }\n};\n\nexport const onEndPool = async (lookupKey: string, pool: pg.Pool) => {\n try {\n await pool.end();\n } catch (error) {\n tracer.error('connection-closing-error', { lookupKey, error });\n }\n pools.delete(lookupKey);\n};\n\nexport const endAllPools = () =>\n Promise.all(\n [...pools.entries()].map(([lookupKey, pool]) => onEndPool(lookupKey, pool)),\n );\n\nconst key = (connectionString: string, database: string | undefined) =>\n `${connectionString}|${database ?? defaultPostgreSqlDatabase}`;\n\nconst updatePoolUsageCounter = (lookupKey: string, by: 1 | -1): number => {\n const currentCounter = usageCounter.get(lookupKey) ?? 0;\n const newCounter = currentCounter + by;\n\n usageCounter.set(lookupKey, currentCounter + by);\n\n return newCounter;\n};\n","import pg from 'pg';\nimport { JSONSerializer } from '../../../../core/serializer';\n\nexport const setPgTypeParser = (jsonSerializer: JSONSerializer) => {\n // BigInt\n pg.types.setTypeParser(20, (val) => BigInt(val));\n\n // JSONB\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n pg.types.setTypeParser(3802, (val) => jsonSerializer.deserialize(val));\n\n // JSON\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n pg.types.setTypeParser(114, (val) => jsonSerializer.deserialize(val));\n};\n","import {\n canHandleDriverWithConnectionString,\n type DumboDatabaseDriver,\n dumboDatabaseDriverRegistry,\n} from '../../../core';\nimport {\n DefaultPostgreSQLMigratorOptions,\n getDatabaseNameOrDefault,\n pgFormatter,\n PostgreSQLConnectionString,\n} from '../core';\nimport {\n type PgConnection,\n PgDriverType,\n pgPool,\n type PgPool,\n type PgPoolOptions,\n} from './connections';\n\nconst tryParseConnectionString = (connectionString: string) => {\n try {\n return PostgreSQLConnectionString(connectionString);\n } catch {\n return null;\n }\n};\n\nexport const pgDatabaseDriver: DumboDatabaseDriver<\n PgConnection,\n PgPoolOptions,\n PgPool\n> = {\n driverType: PgDriverType,\n createPool: (options) => pgPool(options as PgPoolOptions),\n sqlFormatter: pgFormatter,\n defaultMigratorOptions: DefaultPostgreSQLMigratorOptions,\n getDatabaseNameOrDefault,\n canHandle: canHandleDriverWithConnectionString(\n PgDriverType,\n tryParseConnectionString,\n ),\n};\n\nexport const usePgDatabaseDriver = () => {\n dumboDatabaseDriverRegistry.register(PgDriverType, pgDatabaseDriver);\n};\n\nusePgDatabaseDriver();\n\nexport * from './connections';\nexport * from './execute';\nexport * from './serialization';\n\nexport { pgDatabaseDriver as databaseDriver };\n\nexport type PostgreSQLPool = PgPool;\nexport type PostgreSQLConnection = PgConnection;\n\nexport type PostgreSQLPoolOptions = PgPoolOptions;\nexport const postgresPool = pgPool;\n\nexport const connectionPool = postgresPool;\n"],"mappings":"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","names":["advisoryLock","pg","pg","pg","pg","pg","pg"]}
1
+ {"version":3,"sources":["../src/storage/postgresql/core/locks/advisoryLocks.ts","../src/storage/postgresql/core/schema/migrations.ts","../src/storage/postgresql/core/schema/schema.ts","../src/storage/postgresql/core/connections/connectionString.ts","../src/storage/postgresql/core/sql/processors/columProcessors.ts","../src/storage/postgresql/core/sql/formatter/reserved.ts","../src/storage/postgresql/core/sql/formatter/index.ts","../src/storage/postgresql/core/index.ts","../src/storage/postgresql/pg/connections/connection.ts","../src/storage/postgresql/pg/execute/execute.ts","../src/storage/postgresql/pg/connections/transaction.ts","../src/storage/postgresql/pg/connections/pool.ts","../src/storage/postgresql/pg/serialization/index.ts","../src/storage/postgresql/pg/index.ts"],"sourcesContent":["import {\n defaultDatabaseLockOptions,\n single,\n SQL,\n type AcquireDatabaseLockMode,\n type AcquireDatabaseLockOptions,\n type DatabaseLock,\n type DatabaseLockOptions,\n type ReleaseDatabaseLockOptions,\n type SQLExecutor,\n} from '../../../../core';\n\nexport const tryAcquireAdvisoryLock = async (\n execute: SQLExecutor,\n options: AcquireDatabaseLockOptions,\n): Promise<boolean> => {\n const timeoutMs = options.timeoutMs ?? defaultDatabaseLockOptions.timeoutMs;\n\n const advisoryLock =\n options.mode === 'Permanent' ? 'pg_advisory_lock' : 'pg_advisory_xact_lock';\n\n try {\n await single(\n execute.query<{ locked: boolean }>(\n SQL`SELECT ${SQL.plain(advisoryLock)}(${options.lockId}) AS locked`,\n { timeoutMs },\n ),\n );\n return true;\n } catch (error) {\n if (error instanceof Error && 'code' in error && error.code === '57014')\n return false;\n\n throw error;\n }\n};\n\nexport const releaseAdvisoryLock = async (\n execute: SQLExecutor,\n options: ReleaseDatabaseLockOptions,\n): Promise<boolean> => {\n const timeoutMs = options.timeoutMs ?? defaultDatabaseLockOptions.timeoutMs;\n\n try {\n await single(\n execute.query<{ locked: boolean }>(\n SQL`SELECT pg_advisory_unlock(${options.lockId}) AS locked`,\n { timeoutMs },\n ),\n );\n return true;\n } catch (error) {\n if (error instanceof Error && 'code' in error && error.code === '57014')\n return false;\n\n throw error;\n }\n};\n\nexport const acquireAdvisoryLock = async (\n execute: SQLExecutor,\n options: AcquireDatabaseLockOptions,\n) => {\n const lockAcquired = await tryAcquireAdvisoryLock(execute, options);\n if (!lockAcquired) {\n throw new Error(\n 'Failed to acquire advisory lock within the specified timeout. Migration aborted.',\n );\n }\n};\n\nexport const AdvisoryLock: DatabaseLock = {\n acquire: acquireAdvisoryLock,\n tryAcquire: tryAcquireAdvisoryLock,\n release: releaseAdvisoryLock,\n withAcquire: async <Result>(\n execute: SQLExecutor,\n handle: () => Promise<Result>,\n options: AcquireDatabaseLockOptions,\n ) => {\n await acquireAdvisoryLock(execute, options);\n try {\n return await handle();\n } finally {\n if (options.mode === 'Permanent')\n await releaseAdvisoryLock(execute, options);\n }\n },\n};\n\nexport const advisoryLock = (\n execute: SQLExecutor,\n options: DatabaseLockOptions,\n) => ({\n acquire: (acquireOptions?: { mode: AcquireDatabaseLockMode }) =>\n acquireAdvisoryLock(execute, {\n ...options,\n ...(acquireOptions ?? {}),\n }),\n tryAcquire: (acquireOptions?: { mode: AcquireDatabaseLockMode }) =>\n tryAcquireAdvisoryLock(execute, {\n ...options,\n ...(acquireOptions ?? {}),\n }),\n release: () => releaseAdvisoryLock(execute, options),\n withAcquire: async <Result>(\n handle: () => Promise<Result>,\n acquireOptions?: { mode: AcquireDatabaseLockMode },\n ) => {\n await acquireAdvisoryLock(execute, {\n ...options,\n ...(acquireOptions ?? {}),\n });\n try {\n return await handle();\n } finally {\n await releaseAdvisoryLock(execute, options);\n }\n },\n});\n","import {\n type MigratorOptions,\n registerDefaultMigratorOptions,\n} from '../../../../core';\nimport { AdvisoryLock } from '../locks';\n\nexport const DefaultPostgreSQLMigratorOptions: MigratorOptions = {\n lock: {\n databaseLock: AdvisoryLock,\n },\n};\n\nregisterDefaultMigratorOptions('PostgreSQL', DefaultPostgreSQLMigratorOptions);\n","import { exists, SQL, type ConnectionPool } 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 pool: ConnectionPool,\n tableName: string,\n): Promise<boolean> => exists(pool.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 pool: ConnectionPool,\n tableName: string,\n): Promise<boolean> => exists(pool.execute.query(functionExistsSQL(tableName)));\n","import type { DatabaseConnectionString } from '../../../all';\nimport { defaultPostgreSqlDatabase } from '../schema';\n\nexport const defaultPostgreSQLConnectionString: PostgreSQLConnectionString =\n 'postgresql://postgres@localhost:5432/postgres' as PostgreSQLConnectionString;\n\nexport const getDatabaseNameOrDefault = (connectionString: string) =>\n parseDatabaseName(connectionString) ?? defaultPostgreSqlDatabase;\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 {\n mapDefaultSQLColumnProcessors,\n type DefaultSQLColumnProcessors,\n type DefaultSQLColumnToken,\n type SQLProcessorContext,\n} from '../../../../../core';\n\nconst mapColumnType = (\n token: DefaultSQLColumnToken,\n { builder }: SQLProcessorContext,\n): void => {\n let columnSQL: string;\n const { sqlTokenType } = token;\n switch (sqlTokenType) {\n case 'SQL_COLUMN_AUTO_INCREMENT':\n columnSQL = `${token.bigint ? 'BIGSERIAL' : 'SERIAL'} ${token.primaryKey ? 'PRIMARY KEY' : ''}`;\n break;\n case 'SQL_COLUMN_BIGINT':\n columnSQL = 'BIGINT';\n break;\n case 'SQL_COLUMN_SERIAL':\n columnSQL = 'SERIAL';\n break;\n case 'SQL_COLUMN_INTEGER':\n columnSQL = 'INTEGER';\n break;\n case 'SQL_COLUMN_JSONB':\n columnSQL = 'JSONB';\n break;\n case 'SQL_COLUMN_BIGSERIAL':\n columnSQL = 'BIGSERIAL';\n break;\n case 'SQL_COLUMN_TIMESTAMP':\n columnSQL = 'TIMESTAMP';\n break;\n case 'SQL_COLUMN_TIMESTAMPTZ':\n columnSQL = 'TIMESTAMPTZ';\n break;\n case 'SQL_COLUMN_VARCHAR':\n columnSQL = `VARCHAR ${Number.isNaN(token.length) ? '' : `(${token.length})`}`;\n break;\n default: {\n const exhaustiveCheck: never = sqlTokenType;\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n throw new Error(`Unknown column type: ${exhaustiveCheck}`);\n }\n }\n builder.addSQL(columnSQL);\n};\n\nexport const postgreSQLColumnProcessors: DefaultSQLColumnProcessors =\n mapDefaultSQLColumnProcessors(mapColumnType);\n","// Ported from: https://github.com/datalanche/node-pg-format/blob/master/lib/reserved.js\n//\n// PostgreSQL reserved words\n//\nconst reservedMap: { [key: string]: boolean } = {\n AES128: true,\n AES256: true,\n ALL: true,\n ALLOWOVERWRITE: true,\n ANALYSE: true,\n ANALYZE: true,\n AND: true,\n ANY: true,\n ARRAY: true,\n AS: true,\n ASC: true,\n AUTHORIZATION: true,\n BACKUP: true,\n BETWEEN: true,\n BINARY: true,\n BLANKSASNULL: true,\n BOTH: true,\n BYTEDICT: true,\n CASE: true,\n CAST: true,\n CHECK: true,\n COLLATE: true,\n COLUMN: true,\n CONSTRAINT: true,\n CREATE: true,\n CREDENTIALS: true,\n CROSS: true,\n CURRENT_DATE: true,\n CURRENT_TIME: true,\n CURRENT_TIMESTAMP: true,\n CURRENT_USER: true,\n CURRENT_USER_ID: true,\n DEFAULT: true,\n DEFERRABLE: true,\n DEFLATE: true,\n DEFRAG: true,\n DELTA: true,\n DELTA32K: true,\n DESC: true,\n DISABLE: true,\n DISTINCT: true,\n DO: true,\n ELSE: true,\n EMPTYASNULL: true,\n ENABLE: true,\n ENCODE: true,\n ENCRYPT: true,\n ENCRYPTION: true,\n END: true,\n EXCEPT: true,\n EXPLICIT: true,\n FALSE: true,\n FOR: true,\n FOREIGN: true,\n FREEZE: true,\n FROM: true,\n FULL: true,\n GLOBALDICT256: true,\n GLOBALDICT64K: true,\n GRANT: true,\n GROUP: true,\n GZIP: true,\n HAVING: true,\n IDENTITY: true,\n IGNORE: true,\n ILIKE: true,\n IN: true,\n INITIALLY: true,\n INNER: true,\n INTERSECT: true,\n INTO: true,\n IS: true,\n ISNULL: true,\n JOIN: true,\n LEADING: true,\n LEFT: true,\n LIKE: true,\n LIMIT: true,\n LOCALTIME: true,\n LOCALTIMESTAMP: true,\n LUN: true,\n LUNS: true,\n LZO: true,\n LZOP: true,\n MINUS: true,\n MOSTLY13: true,\n MOSTLY32: true,\n MOSTLY8: true,\n NATURAL: true,\n NEW: true,\n NOT: true,\n NOTNULL: true,\n NULL: true,\n NULLS: true,\n OFF: true,\n OFFLINE: true,\n OFFSET: true,\n OLD: true,\n ON: true,\n ONLY: true,\n OPEN: true,\n OR: true,\n ORDER: true,\n OUTER: true,\n OVERLAPS: true,\n PARALLEL: true,\n PARTITION: true,\n PERCENT: true,\n PLACING: true,\n PRIMARY: true,\n RAW: true,\n READRATIO: true,\n RECOVER: true,\n REFERENCES: true,\n REJECTLOG: true,\n RESORT: true,\n RESTORE: true,\n RIGHT: true,\n SELECT: true,\n SESSION_USER: true,\n SIMILAR: true,\n SOME: true,\n SYSDATE: true,\n SYSTEM: true,\n TABLE: true,\n TAG: true,\n TDES: true,\n TEXT255: true,\n TEXT32K: true,\n THEN: true,\n TO: true,\n TOP: true,\n TRAILING: true,\n TRUE: true,\n TRUNCATECOLUMNS: true,\n UNION: true,\n UNIQUE: true,\n USER: true,\n USING: true,\n VERBOSE: true,\n WALLET: true,\n WHEN: true,\n WHERE: true,\n WITH: true,\n WITHOUT: true,\n};\n\nexport default reservedMap;\n","import {\n SQLFormatter,\n SQLProcessorsRegistry,\n defaultProcessorsRegistry,\n mapSQLIdentifier,\n registerFormatter,\n} from '../../../../../core';\nimport { postgreSQLColumnProcessors } from '../processors';\nimport reservedMap from './reserved';\n\nconst postgreSQLProcessorsRegistry = SQLProcessorsRegistry({\n from: defaultProcessorsRegistry,\n}).register(postgreSQLColumnProcessors);\n\nconst pgFormatter: SQLFormatter = SQLFormatter({\n processorsRegistry: postgreSQLProcessorsRegistry,\n valueMapper: {\n mapDate: (value: Date): unknown =>\n value.toISOString().replace('T', ' ').replace('Z', '+00'),\n mapPlaceholder: (index: number): string => `$${index + 1}`,\n mapIdentifier: (value: string): string =>\n mapSQLIdentifier(value, { reservedWords: reservedMap }),\n },\n});\n\nregisterFormatter('PostgreSQL', pgFormatter);\n\n// Export the original functions if needed\nexport { pgFormatter };\n","import type { DatabaseDriverType } from '../../../core';\n\nexport * from './connections';\nexport * from './locks';\nexport * from './schema';\nexport * from './sql';\n\nexport type PostgreSQLDatabaseName = 'PostgreSQL';\nexport const PostgreSQLDatabaseName = 'PostgreSQL';\n\nexport type PostgreSQLDriverType<DriverName extends string = string> =\n DatabaseDriverType<PostgreSQLDatabaseName, DriverName>;\n","import pg from 'pg';\nimport { createConnection, type Connection } from '../../../../core';\nimport type { PostgreSQLDriverType } from '../../core';\nimport { pgSQLExecutor } from '../execute';\nimport { pgTransaction } from './transaction';\n\nexport type PgDriverType = PostgreSQLDriverType<'pg'>;\nexport const PgDriverType: PgDriverType = 'PostgreSQL:pg';\n\nexport type PgPoolClient = pg.PoolClient;\nexport type PgClient = pg.Client;\n\nexport type PgClientOrPoolClient = PgPoolClient | PgClient;\n\nexport type PgPoolOrClient = pg.Pool | PgPoolClient | PgClient;\n\nexport type PgClientConnection = Connection<\n PgClientConnection,\n PgDriverType,\n PgClient\n>;\n\nexport type PgPoolClientConnection = Connection<\n PgPoolClientConnection,\n PgDriverType,\n PgPoolClient\n>;\n\nexport type PgConnection = PgPoolClientConnection | PgClientConnection;\n\nexport type PgPoolClientOptions = {\n type: 'PoolClient';\n connect: () => Promise<PgPoolClient>;\n close: (client: PgPoolClient) => Promise<void>;\n};\n\nexport type PgClientOptions = {\n type: 'Client';\n connect: () => Promise<PgClient>;\n close: (client: PgClient) => Promise<void>;\n};\n\nexport const pgClientConnection = (\n options: PgClientOptions,\n): PgClientConnection => {\n const { connect, close } = options;\n\n return createConnection({\n driverType: PgDriverType,\n connect,\n close,\n initTransaction: (connection) => pgTransaction(connection),\n executor: pgSQLExecutor,\n });\n};\n\nexport const pgPoolClientConnection = (\n options: PgPoolClientOptions,\n): PgPoolClientConnection => {\n const { connect, close } = options;\n\n return createConnection({\n driverType: PgDriverType,\n connect,\n close,\n initTransaction: (connection) => pgTransaction(connection),\n executor: pgSQLExecutor,\n });\n};\n\nexport function pgConnection(\n options: PgPoolClientOptions,\n): PgPoolClientConnection;\nexport function pgConnection(options: PgClientOptions): PgClientConnection;\nexport function pgConnection(\n options: PgPoolClientOptions | PgClientOptions,\n): PgPoolClientConnection | PgClientConnection {\n return options.type === 'Client'\n ? pgClientConnection(options)\n : pgPoolClientConnection(options);\n}\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\nexport const checkConnection = async (\n connectionString: string,\n): Promise<ConnectionCheckResult> => {\n const client = new pg.Client({\n connectionString,\n });\n\n try {\n await client.connect();\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 === 'ECONNREFUSED'\n ? 'ConnectionRefused'\n : code === '28P01'\n ? 'Authentication'\n : 'Unknown',\n code,\n error,\n };\n } finally {\n // Ensure the client is closed properly if connected\n await client.end();\n }\n};\n","import pg from 'pg';\nimport {\n tracer,\n type DbSQLExecutor,\n type QueryResult,\n type QueryResultRow,\n type SQL,\n type SQLCommandOptions,\n type SQLQueryOptions,\n} from '../../../../core';\nimport { pgFormatter } from '../../core';\nimport { PgDriverType, type PgClientOrPoolClient } from '../connections';\n\nexport const isPgNativePool = (\n poolOrClient: pg.Pool | pg.PoolClient | pg.Client,\n): poolOrClient is pg.Pool => {\n return poolOrClient instanceof pg.Pool;\n};\n\nexport const isPgClient = (\n poolOrClient: pg.Pool | pg.PoolClient | pg.Client,\n): poolOrClient is pg.Client => poolOrClient instanceof pg.Client;\n\nexport const isPgPoolClient = (\n poolOrClient: pg.Pool | pg.PoolClient | pg.Client,\n): poolOrClient is pg.PoolClient =>\n 'release' in poolOrClient && typeof poolOrClient.release === 'function';\n\nexport const pgExecute = async <Result = void>(\n poolOrClient: pg.Pool | pg.PoolClient | pg.Client,\n handle: (client: pg.PoolClient | pg.Client) => Promise<Result>,\n) => {\n const client = isPgNativePool(poolOrClient)\n ? await poolOrClient.connect()\n : poolOrClient;\n\n try {\n return await handle(client);\n } finally {\n // release only if client wasn't injected externally\n if (isPgNativePool(poolOrClient) && isPgPoolClient(client))\n client.release();\n }\n};\n\nexport type PgSQLExecutor = DbSQLExecutor<PgDriverType, PgClientOrPoolClient>;\n\nexport const pgSQLExecutor = (): PgSQLExecutor => ({\n driverType: PgDriverType,\n query: batch,\n batchQuery: batch,\n command: batch,\n batchCommand: batch,\n formatter: pgFormatter,\n});\n\nfunction batch<Result extends QueryResultRow = QueryResultRow>(\n client: PgClientOrPoolClient,\n sqlOrSqls: SQL,\n options?: SQLQueryOptions | SQLCommandOptions,\n): Promise<QueryResult<Result>>;\nfunction batch<Result extends QueryResultRow = QueryResultRow>(\n client: PgClientOrPoolClient,\n sqlOrSqls: SQL[],\n options?: SQLQueryOptions | SQLCommandOptions,\n): Promise<QueryResult<Result>[]>;\nasync function batch<Result extends QueryResultRow = QueryResultRow>(\n client: PgClientOrPoolClient,\n sqlOrSqls: SQL | SQL[],\n options?: SQLQueryOptions | SQLCommandOptions,\n): Promise<QueryResult<Result> | QueryResult<Result>[]> {\n const sqls = Array.isArray(sqlOrSqls) ? sqlOrSqls : [sqlOrSqls];\n const results: QueryResult<Result>[] = Array<QueryResult<Result>>(\n sqls.length,\n );\n\n if (options?.timeoutMs) {\n await client.query(`SET statement_timeout = ${options?.timeoutMs}`);\n }\n\n //TODO: make it smarter at some point\n for (let i = 0; i < sqls.length; i++) {\n const { query, params } = pgFormatter.format(sqls[i]!);\n tracer.info('db:sql:query', {\n query,\n params,\n debugSQL: pgFormatter.describe(sqls[i]!),\n });\n const result = await client.query<Result>(query, params);\n results[i] = { rowCount: result.rowCount, rows: result.rows };\n }\n return Array.isArray(sqlOrSqls) ? results : results[0]!;\n}\n","import {\n sqlExecutor,\n type AnyConnection,\n type DatabaseTransaction,\n type DatabaseTransactionOptions,\n} from '../../../../core';\nimport { pgSQLExecutor } from '../execute';\nimport {\n PgDriverType,\n type PgConnection,\n type PgPoolOrClient,\n} from './connection';\n\nexport type PgTransaction = DatabaseTransaction<PgConnection>;\n\nexport const pgTransaction =\n <ConnectionType extends AnyConnection = AnyConnection>(\n connection: () => ConnectionType,\n ) =>\n <DbClient extends PgPoolOrClient = PgPoolOrClient>(\n getClient: Promise<DbClient>,\n options?: {\n close: (client: DbClient, error?: unknown) => Promise<void>;\n } & DatabaseTransactionOptions,\n ): DatabaseTransaction<ConnectionType> => ({\n connection: connection(),\n driverType: PgDriverType,\n begin: async () => {\n const client = await getClient;\n await client.query('BEGIN');\n },\n commit: async () => {\n const client = await getClient;\n\n try {\n await client.query('COMMIT');\n } finally {\n if (options?.close) await options?.close(client);\n }\n },\n rollback: async (error?: unknown) => {\n const client = await getClient;\n try {\n await client.query('ROLLBACK');\n } finally {\n if (options?.close) await options?.close(client, error);\n }\n },\n execute: sqlExecutor(pgSQLExecutor(), {\n connect: () => getClient,\n }),\n });\n","import pg from 'pg';\nimport {\n createAmbientConnectionPool,\n createConnectionPool,\n JSONSerializer,\n tracer,\n type ConnectionPool,\n} from '../../../../core';\nimport {\n defaultPostgreSqlDatabase,\n getDatabaseNameOrDefault,\n} from '../../core';\nimport { setPgTypeParser } from '../serialization';\nimport {\n pgConnection,\n PgDriverType,\n type PgClientConnection,\n type PgPoolClientConnection,\n} from './connection';\n\nexport type PgNativePool = ConnectionPool<PgPoolClientConnection>;\n\nexport type PgAmbientClientPool = ConnectionPool<PgClientConnection>;\n\nexport type PgAmbientConnectionPool = ConnectionPool<\n PgPoolClientConnection | PgClientConnection\n>;\n\nexport type PgPool =\n | PgNativePool\n | PgAmbientClientPool\n | PgAmbientConnectionPool;\n\nexport const pgNativePool = (options: {\n connectionString: string;\n database?: string | undefined;\n}): PgNativePool => {\n const { connectionString, database } = options;\n const pool = getPool({ connectionString, database });\n\n const getConnection = () =>\n pgConnection({\n type: 'PoolClient',\n connect: () => pool.connect(),\n close: (client) => Promise.resolve(client.release()),\n });\n\n const open = () => Promise.resolve(getConnection());\n const close = () => endPool({ connectionString, database });\n\n return createConnectionPool({\n driverType: PgDriverType,\n connection: open,\n close,\n getConnection,\n });\n};\n\nexport const pgAmbientNativePool = (options: {\n pool: pg.Pool;\n}): PgNativePool => {\n const { pool } = options;\n\n return createConnectionPool({\n driverType: PgDriverType,\n getConnection: () =>\n pgConnection({\n type: 'PoolClient',\n connect: () => pool.connect(),\n close: (client) => Promise.resolve(client.release()),\n }),\n });\n};\n\nexport const pgAmbientConnectionPool = (options: {\n connection: PgPoolClientConnection | PgClientConnection;\n}): PgAmbientConnectionPool => {\n const { connection } = options;\n\n return createAmbientConnectionPool({\n driverType: PgDriverType,\n connection,\n });\n};\n\nexport const pgClientPool = (options: {\n connectionString: string;\n database?: string | undefined;\n}): PgAmbientClientPool => {\n const { connectionString, database } = options;\n\n return createConnectionPool({\n driverType: PgDriverType,\n getConnection: () => {\n const connect = async () => {\n const client = new pg.Client({ connectionString, database });\n await client.connect();\n return client;\n };\n\n return pgConnection({\n type: 'Client',\n connect,\n close: (client) => client.end(),\n });\n },\n });\n};\n\nexport const pgAmbientClientPool = (options: {\n client: pg.Client;\n}): PgAmbientClientPool => {\n const { client } = options;\n\n const getConnection = () => {\n const connect = () => Promise.resolve(client);\n\n return pgConnection({\n type: 'Client',\n connect,\n close: () => Promise.resolve(),\n });\n };\n\n const open = () => Promise.resolve(getConnection());\n const close = () => Promise.resolve();\n\n return createConnectionPool({\n driverType: PgDriverType,\n connection: open,\n close,\n getConnection,\n });\n};\n\nexport type PgPoolPooledOptions =\n | {\n connectionString: string;\n database?: string;\n pooled: true;\n pool: pg.Pool;\n }\n | {\n connectionString: string;\n database?: string;\n pool: pg.Pool;\n }\n | {\n connectionString: string;\n database?: string;\n pooled: true;\n }\n | {\n connectionString: string;\n database?: string;\n };\n\nexport type PgPoolNotPooledOptions =\n | {\n connectionString: string;\n database?: string;\n pooled: false;\n client: pg.Client;\n }\n | {\n connectionString: string;\n database?: string;\n client: pg.Client;\n }\n | {\n connectionString: string;\n database?: string;\n pooled: false;\n }\n | {\n connectionString: string;\n database?: string;\n connection: PgPoolClientConnection | PgClientConnection;\n pooled?: false;\n };\n\nexport type PgPoolOptions = (PgPoolPooledOptions | PgPoolNotPooledOptions) & {\n serializer?: JSONSerializer;\n};\n\nexport function pgPool(options: PgPoolPooledOptions): PgNativePool;\nexport function pgPool(options: PgPoolNotPooledOptions): PgAmbientClientPool;\nexport function pgPool(\n options: PgPoolOptions,\n): PgNativePool | PgAmbientClientPool | PgAmbientConnectionPool {\n const { connectionString, database, serializer } = options;\n\n setPgTypeParser(serializer ?? JSONSerializer);\n\n if ('client' in options && options.client)\n return pgAmbientClientPool({ client: options.client });\n\n if ('connection' in options && options.connection)\n return pgAmbientConnectionPool({\n connection: options.connection,\n });\n\n if ('pooled' in options && options.pooled === false)\n return pgClientPool({ connectionString, database });\n\n if ('pool' in options && options.pool)\n return pgAmbientNativePool({ pool: options.pool });\n\n return pgNativePool({\n connectionString,\n database,\n });\n}\n\nconst pools: Map<string, pg.Pool> = new Map();\nconst usageCounter: Map<string, number> = new Map();\n\nexport const getPool = (\n connectionStringOrOptions: string | pg.PoolConfig,\n): pg.Pool => {\n const connectionString =\n typeof connectionStringOrOptions === 'string'\n ? connectionStringOrOptions\n : connectionStringOrOptions.connectionString!;\n\n const poolOptions =\n typeof connectionStringOrOptions === 'string'\n ? { connectionString }\n : connectionStringOrOptions;\n\n const database =\n poolOptions.database ??\n (poolOptions.connectionString\n ? getDatabaseNameOrDefault(poolOptions.connectionString)\n : undefined);\n\n const lookupKey = key(connectionString, database);\n\n updatePoolUsageCounter(lookupKey, 1);\n\n return (\n pools.get(lookupKey) ??\n pools.set(lookupKey, new pg.Pool(poolOptions)).get(lookupKey)!\n );\n};\n\nexport const endPool = async ({\n connectionString,\n database,\n force,\n}: {\n connectionString: string;\n database?: string | undefined;\n force?: boolean;\n}): Promise<void> => {\n database = database ?? getDatabaseNameOrDefault(connectionString);\n const lookupKey = key(connectionString, database);\n\n const pool = pools.get(lookupKey);\n if (pool && (updatePoolUsageCounter(lookupKey, -1) <= 0 || force === true)) {\n await onEndPool(lookupKey, pool);\n }\n};\n\nexport const onEndPool = async (lookupKey: string, pool: pg.Pool) => {\n try {\n await pool.end();\n } catch (error) {\n tracer.error('connection-closing-error', { lookupKey, error });\n }\n pools.delete(lookupKey);\n};\n\nexport const endAllPools = () =>\n Promise.all(\n [...pools.entries()].map(([lookupKey, pool]) => onEndPool(lookupKey, pool)),\n );\n\nconst key = (connectionString: string, database: string | undefined) =>\n `${connectionString}|${database ?? defaultPostgreSqlDatabase}`;\n\nconst updatePoolUsageCounter = (lookupKey: string, by: 1 | -1): number => {\n const currentCounter = usageCounter.get(lookupKey) ?? 0;\n const newCounter = currentCounter + by;\n\n usageCounter.set(lookupKey, currentCounter + by);\n\n return newCounter;\n};\n","import pg from 'pg';\nimport { JSONSerializer } from '../../../../core/serializer';\n\nexport const setPgTypeParser = (jsonSerializer: JSONSerializer) => {\n // BigInt\n pg.types.setTypeParser(20, (val) => BigInt(val));\n\n // JSONB\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n pg.types.setTypeParser(3802, (val) => jsonSerializer.deserialize(val));\n\n // JSON\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n pg.types.setTypeParser(114, (val) => jsonSerializer.deserialize(val));\n};\n","import {\n canHandleDriverWithConnectionString,\n type DumboDatabaseDriver,\n dumboDatabaseDriverRegistry,\n} from '../../../core';\nimport {\n DefaultPostgreSQLMigratorOptions,\n getDatabaseNameOrDefault,\n pgFormatter,\n PostgreSQLConnectionString,\n} from '../core';\nimport {\n type PgConnection,\n PgDriverType,\n pgPool,\n type PgPool,\n type PgPoolOptions,\n} from './connections';\n\nconst tryParseConnectionString = (connectionString: string) => {\n try {\n return PostgreSQLConnectionString(connectionString);\n } catch {\n return null;\n }\n};\n\nexport const pgDatabaseDriver: DumboDatabaseDriver<\n PgConnection,\n PgPoolOptions,\n PgPool\n> = {\n driverType: PgDriverType,\n createPool: (options) => pgPool(options as PgPoolOptions),\n sqlFormatter: pgFormatter,\n defaultMigratorOptions: DefaultPostgreSQLMigratorOptions,\n getDatabaseNameOrDefault,\n canHandle: canHandleDriverWithConnectionString(\n PgDriverType,\n tryParseConnectionString,\n ),\n};\n\nexport const usePgDatabaseDriver = () => {\n dumboDatabaseDriverRegistry.register(PgDriverType, pgDatabaseDriver);\n};\n\nusePgDatabaseDriver();\n\nexport * from './connections';\nexport * from './execute';\nexport * from './serialization';\n\nexport { pgDatabaseDriver as databaseDriver };\n\nexport type PostgreSQLPool = PgPool;\nexport type PostgreSQLConnection = PgConnection;\n\nexport type PostgreSQLPoolOptions = PgPoolOptions;\nexport const postgresPool = pgPool;\n\nexport const connectionPool = postgresPool;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAYO,IAAM,yBAAyB,OACpC,SACA,YACqB;AACrB,QAAM,YAAY,QAAQ,aAAa,2BAA2B;AAElE,QAAMA,gBACJ,QAAQ,SAAS,cAAc,qBAAqB;AAEtD,MAAI;AACF,UAAM;AAAA,MACJ,QAAQ;AAAA,QACN,aAAa,IAAI,MAAMA,aAAY,CAAC,IAAI,QAAQ,MAAM;AAAA,QACtD,EAAE,UAAU;AAAA,MACd;AAAA,IACF;AACA,WAAO;AAAA,EACT,SAAS,OAAO;AACd,QAAI,iBAAiB,SAAS,UAAU,SAAS,MAAM,SAAS;AAC9D,aAAO;AAET,UAAM;AAAA,EACR;AACF;AAEO,IAAM,sBAAsB,OACjC,SACA,YACqB;AACrB,QAAM,YAAY,QAAQ,aAAa,2BAA2B;AAElE,MAAI;AACF,UAAM;AAAA,MACJ,QAAQ;AAAA,QACN,gCAAgC,QAAQ,MAAM;AAAA,QAC9C,EAAE,UAAU;AAAA,MACd;AAAA,IACF;AACA,WAAO;AAAA,EACT,SAAS,OAAO;AACd,QAAI,iBAAiB,SAAS,UAAU,SAAS,MAAM,SAAS;AAC9D,aAAO;AAET,UAAM;AAAA,EACR;AACF;AAEO,IAAM,sBAAsB,OACjC,SACA,YACG;AACH,QAAM,eAAe,MAAM,uBAAuB,SAAS,OAAO;AAClE,MAAI,CAAC,cAAc;AACjB,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EACF;AACF;AAEO,IAAM,eAA6B;AAAA,EACxC,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,SAAS;AAAA,EACT,aAAa,OACX,SACA,QACA,YACG;AACH,UAAM,oBAAoB,SAAS,OAAO;AAC1C,QAAI;AACF,aAAO,MAAM,OAAO;AAAA,IACtB,UAAE;AACA,UAAI,QAAQ,SAAS;AACnB,cAAM,oBAAoB,SAAS,OAAO;AAAA,IAC9C;AAAA,EACF;AACF;AAEO,IAAM,eAAe,CAC1B,SACA,aACI;AAAA,EACJ,SAAS,CAAC,mBACR,oBAAoB,SAAS;AAAA,IAC3B,GAAG;AAAA,IACH,GAAI,kBAAkB,CAAC;AAAA,EACzB,CAAC;AAAA,EACH,YAAY,CAAC,mBACX,uBAAuB,SAAS;AAAA,IAC9B,GAAG;AAAA,IACH,GAAI,kBAAkB,CAAC;AAAA,EACzB,CAAC;AAAA,EACH,SAAS,MAAM,oBAAoB,SAAS,OAAO;AAAA,EACnD,aAAa,OACX,QACA,mBACG;AACH,UAAM,oBAAoB,SAAS;AAAA,MACjC,GAAG;AAAA,MACH,GAAI,kBAAkB,CAAC;AAAA,IACzB,CAAC;AACD,QAAI;AACF,aAAO,MAAM,OAAO;AAAA,IACtB,UAAE;AACA,YAAM,oBAAoB,SAAS,OAAO;AAAA,IAC5C;AAAA,EACF;AACF;;;ACjHO,IAAM,mCAAoD;AAAA,EAC/D,MAAM;AAAA,IACJ,cAAc;AAAA,EAChB;AACF;AAEA,+BAA+B,cAAc,gCAAgC;;;ACTtE,IAAM,4BAA4B;AAElC,IAAM,iBAAiB,CAAC,cAC7B;AAAA;AAAA;AAAA,wBAGsB,SAAS;AAAA;AAG1B,IAAM,cAAc,OACzB,MACA,cACqB,OAAO,KAAK,QAAQ,MAAM,eAAe,SAAS,CAAC,CAAC;AAEpE,IAAM,oBAAoB,CAAC,iBAChC;AAAA;AAAA;AAAA;AAAA,oBAIkB,YAAY;AAAA;AAGzB,IAAM,iBAAiB,OAC5B,MACA,cACqB,OAAO,KAAK,QAAQ,MAAM,kBAAkB,SAAS,CAAC,CAAC;;;ACzBvE,IAAM,oCACX;AAEK,IAAM,2BAA2B,CAAC,qBACvC,kBAAkB,gBAAgB,KAAK;AAOlC,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;;;AC3DA,IAAM,gBAAgB,CACpB,OACA,EAAE,QAAQ,MACD;AACT,MAAI;AACJ,QAAM,EAAE,aAAa,IAAI;AACzB,UAAQ,cAAc;AAAA,IACpB,KAAK;AACH,kBAAY,GAAG,MAAM,SAAS,cAAc,QAAQ,IAAI,MAAM,aAAa,gBAAgB,EAAE;AAC7F;AAAA,IACF,KAAK;AACH,kBAAY;AACZ;AAAA,IACF,KAAK;AACH,kBAAY;AACZ;AAAA,IACF,KAAK;AACH,kBAAY;AACZ;AAAA,IACF,KAAK;AACH,kBAAY;AACZ;AAAA,IACF,KAAK;AACH,kBAAY;AACZ;AAAA,IACF,KAAK;AACH,kBAAY;AACZ;AAAA,IACF,KAAK;AACH,kBAAY;AACZ;AAAA,IACF,KAAK;AACH,kBAAY,WAAW,OAAO,MAAM,MAAM,MAAM,IAAI,KAAK,IAAI,MAAM,MAAM,GAAG;AAC5E;AAAA,IACF,SAAS;AACP,YAAM,kBAAyB;AAE/B,YAAM,IAAI,MAAM,wBAAwB,eAAe,EAAE;AAAA,IAC3D;AAAA,EACF;AACA,UAAQ,OAAO,SAAS;AAC1B;AAEO,IAAM,6BACX,8BAA8B,aAAa;;;AC/C7C,IAAM,cAA0C;AAAA,EAC9C,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,KAAK;AAAA,EACL,gBAAgB;AAAA,EAChB,SAAS;AAAA,EACT,SAAS;AAAA,EACT,KAAK;AAAA,EACL,KAAK;AAAA,EACL,OAAO;AAAA,EACP,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,eAAe;AAAA,EACf,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,cAAc;AAAA,EACd,MAAM;AAAA,EACN,UAAU;AAAA,EACV,MAAM;AAAA,EACN,MAAM;AAAA,EACN,OAAO;AAAA,EACP,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,YAAY;AAAA,EACZ,QAAQ;AAAA,EACR,aAAa;AAAA,EACb,OAAO;AAAA,EACP,cAAc;AAAA,EACd,cAAc;AAAA,EACd,mBAAmB;AAAA,EACnB,cAAc;AAAA,EACd,iBAAiB;AAAA,EACjB,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,UAAU;AAAA,EACV,MAAM;AAAA,EACN,SAAS;AAAA,EACT,UAAU;AAAA,EACV,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,aAAa;AAAA,EACb,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,KAAK;AAAA,EACL,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,OAAO;AAAA,EACP,KAAK;AAAA,EACL,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,MAAM;AAAA,EACN,eAAe;AAAA,EACf,eAAe;AAAA,EACf,OAAO;AAAA,EACP,OAAO;AAAA,EACP,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,IAAI;AAAA,EACJ,WAAW;AAAA,EACX,OAAO;AAAA,EACP,WAAW;AAAA,EACX,MAAM;AAAA,EACN,IAAI;AAAA,EACJ,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,SAAS;AAAA,EACT,MAAM;AAAA,EACN,MAAM;AAAA,EACN,OAAO;AAAA,EACP,WAAW;AAAA,EACX,gBAAgB;AAAA,EAChB,KAAK;AAAA,EACL,MAAM;AAAA,EACN,KAAK;AAAA,EACL,MAAM;AAAA,EACN,OAAO;AAAA,EACP,UAAU;AAAA,EACV,UAAU;AAAA,EACV,SAAS;AAAA,EACT,SAAS;AAAA,EACT,KAAK;AAAA,EACL,KAAK;AAAA,EACL,SAAS;AAAA,EACT,MAAM;AAAA,EACN,OAAO;AAAA,EACP,KAAK;AAAA,EACL,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,MAAM;AAAA,EACN,IAAI;AAAA,EACJ,OAAO;AAAA,EACP,OAAO;AAAA,EACP,UAAU;AAAA,EACV,UAAU;AAAA,EACV,WAAW;AAAA,EACX,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,KAAK;AAAA,EACL,WAAW;AAAA,EACX,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,WAAW;AAAA,EACX,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,cAAc;AAAA,EACd,SAAS;AAAA,EACT,MAAM;AAAA,EACN,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,KAAK;AAAA,EACL,MAAM;AAAA,EACN,SAAS;AAAA,EACT,SAAS;AAAA,EACT,MAAM;AAAA,EACN,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,UAAU;AAAA,EACV,MAAM;AAAA,EACN,iBAAiB;AAAA,EACjB,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,OAAO;AAAA,EACP,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,OAAO;AAAA,EACP,MAAM;AAAA,EACN,SAAS;AACX;AAEA,IAAO,mBAAQ;;;AC9If,IAAM,+BAA+B,sBAAsB;AAAA,EACzD,MAAM;AACR,CAAC,EAAE,SAAS,0BAA0B;AAEtC,IAAM,cAA4B,aAAa;AAAA,EAC7C,oBAAoB;AAAA,EACpB,aAAa;AAAA,IACX,SAAS,CAAC,UACR,MAAM,YAAY,EAAE,QAAQ,KAAK,GAAG,EAAE,QAAQ,KAAK,KAAK;AAAA,IAC1D,gBAAgB,CAAC,UAA0B,IAAI,QAAQ,CAAC;AAAA,IACxD,eAAe,CAAC,UACd,iBAAiB,OAAO,EAAE,eAAe,iBAAY,CAAC;AAAA,EAC1D;AACF,CAAC;AAED,kBAAkB,cAAc,WAAW;;;ACjBpC,IAAM,yBAAyB;;;ACRtC,OAAOC,SAAQ;;;ACAf,OAAO,QAAQ;AAaR,IAAM,iBAAiB,CAC5B,iBAC4B;AAC5B,SAAO,wBAAwB,GAAG;AACpC;AAEO,IAAM,aAAa,CACxB,iBAC8B,wBAAwB,GAAG;AAEpD,IAAM,iBAAiB,CAC5B,iBAEA,aAAa,gBAAgB,OAAO,aAAa,YAAY;AAExD,IAAM,YAAY,OACvB,cACA,WACG;AACH,QAAM,SAAS,eAAe,YAAY,IACtC,MAAM,aAAa,QAAQ,IAC3B;AAEJ,MAAI;AACF,WAAO,MAAM,OAAO,MAAM;AAAA,EAC5B,UAAE;AAEA,QAAI,eAAe,YAAY,KAAK,eAAe,MAAM;AACvD,aAAO,QAAQ;AAAA,EACnB;AACF;AAIO,IAAM,gBAAgB,OAAsB;AAAA,EACjD,YAAY;AAAA,EACZ,OAAO;AAAA,EACP,YAAY;AAAA,EACZ,SAAS;AAAA,EACT,cAAc;AAAA,EACd,WAAW;AACb;AAYA,eAAe,MACb,QACA,WACA,SACsD;AACtD,QAAM,OAAO,MAAM,QAAQ,SAAS,IAAI,YAAY,CAAC,SAAS;AAC9D,QAAM,UAAiC;AAAA,IACrC,KAAK;AAAA,EACP;AAEA,MAAI,SAAS,WAAW;AACtB,UAAM,OAAO,MAAM,2BAA2B,SAAS,SAAS,EAAE;AAAA,EACpE;AAGA,WAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AACpC,UAAM,EAAE,OAAO,OAAO,IAAI,YAAY,OAAO,KAAK,CAAC,CAAE;AACrD,WAAO,KAAK,gBAAgB;AAAA,MAC1B;AAAA,MACA;AAAA,MACA,UAAU,YAAY,SAAS,KAAK,CAAC,CAAE;AAAA,IACzC,CAAC;AACD,UAAM,SAAS,MAAM,OAAO,MAAc,OAAO,MAAM;AACvD,YAAQ,CAAC,IAAI,EAAE,UAAU,OAAO,UAAU,MAAM,OAAO,KAAK;AAAA,EAC9D;AACA,SAAO,MAAM,QAAQ,SAAS,IAAI,UAAU,QAAQ,CAAC;AACvD;;;AC7EO,IAAM,gBACX,CACE,eAEF,CACE,WACA,aAGyC;AAAA,EACzC,YAAY,WAAW;AAAA,EACvB,YAAY;AAAA,EACZ,OAAO,YAAY;AACjB,UAAM,SAAS,MAAM;AACrB,UAAM,OAAO,MAAM,OAAO;AAAA,EAC5B;AAAA,EACA,QAAQ,YAAY;AAClB,UAAM,SAAS,MAAM;AAErB,QAAI;AACF,YAAM,OAAO,MAAM,QAAQ;AAAA,IAC7B,UAAE;AACA,UAAI,SAAS,MAAO,OAAM,SAAS,MAAM,MAAM;AAAA,IACjD;AAAA,EACF;AAAA,EACA,UAAU,OAAO,UAAoB;AACnC,UAAM,SAAS,MAAM;AACrB,QAAI;AACF,YAAM,OAAO,MAAM,UAAU;AAAA,IAC/B,UAAE;AACA,UAAI,SAAS,MAAO,OAAM,SAAS,MAAM,QAAQ,KAAK;AAAA,IACxD;AAAA,EACF;AAAA,EACA,SAAS,YAAY,cAAc,GAAG;AAAA,IACpC,SAAS,MAAM;AAAA,EACjB,CAAC;AACH;;;AF5CK,IAAM,eAA6B;AAmCnC,IAAM,qBAAqB,CAChC,YACuB;AACvB,QAAM,EAAE,SAAS,MAAM,IAAI;AAE3B,SAAO,iBAAiB;AAAA,IACtB,YAAY;AAAA,IACZ;AAAA,IACA;AAAA,IACA,iBAAiB,CAAC,eAAe,cAAc,UAAU;AAAA,IACzD,UAAU;AAAA,EACZ,CAAC;AACH;AAEO,IAAM,yBAAyB,CACpC,YAC2B;AAC3B,QAAM,EAAE,SAAS,MAAM,IAAI;AAE3B,SAAO,iBAAiB;AAAA,IACtB,YAAY;AAAA,IACZ;AAAA,IACA;AAAA,IACA,iBAAiB,CAAC,eAAe,cAAc,UAAU;AAAA,IACzD,UAAU;AAAA,EACZ,CAAC;AACH;AAMO,SAAS,aACd,SAC6C;AAC7C,SAAO,QAAQ,SAAS,WACpB,mBAAmB,OAAO,IAC1B,uBAAuB,OAAO;AACpC;AAWO,IAAM,kBAAkB,OAC7B,qBACmC;AACnC,QAAM,SAAS,IAAIC,IAAG,OAAO;AAAA,IAC3B;AAAA,EACF,CAAC;AAED,MAAI;AACF,UAAM,OAAO,QAAQ;AACrB,WAAO,EAAE,YAAY,KAAK;AAAA,EAC5B,SAAS,OAAO;AACd,UAAM,OACJ,iBAAiB,SACjB,UAAU,SACV,OAAO,MAAM,SAAS,WAClB,MAAM,OACN;AAEN,WAAO;AAAA,MACL,YAAY;AAAA,MACZ,WACE,SAAS,iBACL,sBACA,SAAS,UACP,mBACA;AAAA,MACR;AAAA,MACA;AAAA,IACF;AAAA,EACF,UAAE;AAEA,UAAM,OAAO,IAAI;AAAA,EACnB;AACF;;;AG5HA,OAAOC,SAAQ;;;ACAf,OAAOC,SAAQ;AAGR,IAAM,kBAAkB,CAAC,mBAAmC;AAEjE,EAAAC,IAAG,MAAM,cAAc,IAAI,CAAC,QAAQ,OAAO,GAAG,CAAC;AAI/C,EAAAA,IAAG,MAAM,cAAc,MAAM,CAAC,QAAQ,eAAe,YAAY,GAAG,CAAC;AAIrE,EAAAA,IAAG,MAAM,cAAc,KAAK,CAAC,QAAQ,eAAe,YAAY,GAAG,CAAC;AACtE;;;ADmBO,IAAM,eAAe,CAAC,YAGT;AAClB,QAAM,EAAE,kBAAkB,SAAS,IAAI;AACvC,QAAM,OAAO,QAAQ,EAAE,kBAAkB,SAAS,CAAC;AAEnD,QAAM,gBAAgB,MACpB,aAAa;AAAA,IACX,MAAM;AAAA,IACN,SAAS,MAAM,KAAK,QAAQ;AAAA,IAC5B,OAAO,CAAC,WAAW,QAAQ,QAAQ,OAAO,QAAQ,CAAC;AAAA,EACrD,CAAC;AAEH,QAAM,OAAO,MAAM,QAAQ,QAAQ,cAAc,CAAC;AAClD,QAAM,QAAQ,MAAM,QAAQ,EAAE,kBAAkB,SAAS,CAAC;AAE1D,SAAO,qBAAqB;AAAA,IAC1B,YAAY;AAAA,IACZ,YAAY;AAAA,IACZ;AAAA,IACA;AAAA,EACF,CAAC;AACH;AAEO,IAAM,sBAAsB,CAAC,YAEhB;AAClB,QAAM,EAAE,KAAK,IAAI;AAEjB,SAAO,qBAAqB;AAAA,IAC1B,YAAY;AAAA,IACZ,eAAe,MACb,aAAa;AAAA,MACX,MAAM;AAAA,MACN,SAAS,MAAM,KAAK,QAAQ;AAAA,MAC5B,OAAO,CAAC,WAAW,QAAQ,QAAQ,OAAO,QAAQ,CAAC;AAAA,IACrD,CAAC;AAAA,EACL,CAAC;AACH;AAEO,IAAM,0BAA0B,CAAC,YAET;AAC7B,QAAM,EAAE,WAAW,IAAI;AAEvB,SAAO,4BAA4B;AAAA,IACjC,YAAY;AAAA,IACZ;AAAA,EACF,CAAC;AACH;AAEO,IAAM,eAAe,CAAC,YAGF;AACzB,QAAM,EAAE,kBAAkB,SAAS,IAAI;AAEvC,SAAO,qBAAqB;AAAA,IAC1B,YAAY;AAAA,IACZ,eAAe,MAAM;AACnB,YAAM,UAAU,YAAY;AAC1B,cAAM,SAAS,IAAIC,IAAG,OAAO,EAAE,kBAAkB,SAAS,CAAC;AAC3D,cAAM,OAAO,QAAQ;AACrB,eAAO;AAAA,MACT;AAEA,aAAO,aAAa;AAAA,QAClB,MAAM;AAAA,QACN;AAAA,QACA,OAAO,CAAC,WAAW,OAAO,IAAI;AAAA,MAChC,CAAC;AAAA,IACH;AAAA,EACF,CAAC;AACH;AAEO,IAAM,sBAAsB,CAAC,YAET;AACzB,QAAM,EAAE,OAAO,IAAI;AAEnB,QAAM,gBAAgB,MAAM;AAC1B,UAAM,UAAU,MAAM,QAAQ,QAAQ,MAAM;AAE5C,WAAO,aAAa;AAAA,MAClB,MAAM;AAAA,MACN;AAAA,MACA,OAAO,MAAM,QAAQ,QAAQ;AAAA,IAC/B,CAAC;AAAA,EACH;AAEA,QAAM,OAAO,MAAM,QAAQ,QAAQ,cAAc,CAAC;AAClD,QAAM,QAAQ,MAAM,QAAQ,QAAQ;AAEpC,SAAO,qBAAqB;AAAA,IAC1B,YAAY;AAAA,IACZ,YAAY;AAAA,IACZ;AAAA,IACA;AAAA,EACF,CAAC;AACH;AAsDO,SAAS,OACd,SAC8D;AAC9D,QAAM,EAAE,kBAAkB,UAAU,WAAW,IAAI;AAEnD,kBAAgB,cAAc,cAAc;AAE5C,MAAI,YAAY,WAAW,QAAQ;AACjC,WAAO,oBAAoB,EAAE,QAAQ,QAAQ,OAAO,CAAC;AAEvD,MAAI,gBAAgB,WAAW,QAAQ;AACrC,WAAO,wBAAwB;AAAA,MAC7B,YAAY,QAAQ;AAAA,IACtB,CAAC;AAEH,MAAI,YAAY,WAAW,QAAQ,WAAW;AAC5C,WAAO,aAAa,EAAE,kBAAkB,SAAS,CAAC;AAEpD,MAAI,UAAU,WAAW,QAAQ;AAC/B,WAAO,oBAAoB,EAAE,MAAM,QAAQ,KAAK,CAAC;AAEnD,SAAO,aAAa;AAAA,IAClB;AAAA,IACA;AAAA,EACF,CAAC;AACH;AAEA,IAAM,QAA8B,oBAAI,IAAI;AAC5C,IAAM,eAAoC,oBAAI,IAAI;AAE3C,IAAM,UAAU,CACrB,8BACY;AACZ,QAAM,mBACJ,OAAO,8BAA8B,WACjC,4BACA,0BAA0B;AAEhC,QAAM,cACJ,OAAO,8BAA8B,WACjC,EAAE,iBAAiB,IACnB;AAEN,QAAM,WACJ,YAAY,aACX,YAAY,mBACT,yBAAyB,YAAY,gBAAgB,IACrD;AAEN,QAAM,YAAY,IAAI,kBAAkB,QAAQ;AAEhD,yBAAuB,WAAW,CAAC;AAEnC,SACE,MAAM,IAAI,SAAS,KACnB,MAAM,IAAI,WAAW,IAAIA,IAAG,KAAK,WAAW,CAAC,EAAE,IAAI,SAAS;AAEhE;AAEO,IAAM,UAAU,OAAO;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AACF,MAIqB;AACnB,aAAW,YAAY,yBAAyB,gBAAgB;AAChE,QAAM,YAAY,IAAI,kBAAkB,QAAQ;AAEhD,QAAM,OAAO,MAAM,IAAI,SAAS;AAChC,MAAI,SAAS,uBAAuB,WAAW,EAAE,KAAK,KAAK,UAAU,OAAO;AAC1E,UAAM,UAAU,WAAW,IAAI;AAAA,EACjC;AACF;AAEO,IAAM,YAAY,OAAO,WAAmB,SAAkB;AACnE,MAAI;AACF,UAAM,KAAK,IAAI;AAAA,EACjB,SAAS,OAAO;AACd,WAAO,MAAM,4BAA4B,EAAE,WAAW,MAAM,CAAC;AAAA,EAC/D;AACA,QAAM,OAAO,SAAS;AACxB;AAEO,IAAM,cAAc,MACzB,QAAQ;AAAA,EACN,CAAC,GAAG,MAAM,QAAQ,CAAC,EAAE,IAAI,CAAC,CAAC,WAAW,IAAI,MAAM,UAAU,WAAW,IAAI,CAAC;AAC5E;AAEF,IAAM,MAAM,CAAC,kBAA0B,aACrC,GAAG,gBAAgB,IAAI,YAAY,yBAAyB;AAE9D,IAAM,yBAAyB,CAAC,WAAmB,OAAuB;AACxE,QAAM,iBAAiB,aAAa,IAAI,SAAS,KAAK;AACtD,QAAM,aAAa,iBAAiB;AAEpC,eAAa,IAAI,WAAW,iBAAiB,EAAE;AAE/C,SAAO;AACT;;;AE7QA,IAAM,2BAA2B,CAAC,qBAA6B;AAC7D,MAAI;AACF,WAAO,2BAA2B,gBAAgB;AAAA,EACpD,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEO,IAAM,mBAIT;AAAA,EACF,YAAY;AAAA,EACZ,YAAY,CAAC,YAAY,OAAO,OAAwB;AAAA,EACxD,cAAc;AAAA,EACd,wBAAwB;AAAA,EACxB;AAAA,EACA,WAAW;AAAA,IACT;AAAA,IACA;AAAA,EACF;AACF;AAEO,IAAM,sBAAsB,MAAM;AACvC,8BAA4B,SAAS,cAAc,gBAAgB;AACrE;AAEA,oBAAoB;AAYb,IAAM,eAAe;AAErB,IAAM,iBAAiB;","names":["advisoryLock","pg","pg","pg","pg","pg","pg"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@event-driven-io/dumbo",
3
- "version": "0.13.0-beta.10",
3
+ "version": "0.13.0-beta.12",
4
4
  "description": "Dumbo - tools for dealing with Relational Databases",
5
5
  "type": "module",
6
6
  "scripts": {
@@ -10,19 +10,19 @@
10
10
  "test": "run-s test:unit test:int test:e2e",
11
11
  "test:postgresql": "run-s test:unit:postgresql test:int:postgresql test:e2e:postgresql",
12
12
  "test:sqlite": "run-s test:unit:sqlite test:int:sqlite test:e2e:sqlite",
13
- "test:unit": "glob -c \"node --import tsx --test\" **/*.unit.spec.ts",
14
- "test:unit:postgresql": "glob -c \"node --import tsx --test\" **/postgresql/**/*unit.spec.ts",
15
- "test:unit:sqlite": "glob -c \"node --import tsx --test\" **/sqlite/**/*unit.spec.ts",
16
- "test:int": "glob -c \"node --import tsx --test\" **/*.int.spec.ts",
17
- "test:int:postgresql": "glob -c \"node --import tsx --test\" **/postgresql/**/*int.spec.ts",
18
- "test:int:sqlite": "glob -c \"node --import tsx --test\" **/sqlite/**/*int.spec.ts",
19
- "test:e2e": "glob -c \"node --import tsx --test\" **/*.e2e.spec.ts",
20
- "test:e2e:postgresql": "glob -c \"node --import tsx --test\" **/postgresql/**/*e2e.spec.ts",
21
- "test:e2e:sqlite": "glob -c \"node --import tsx --test\" **/sqlite/**/*e2e.spec.ts",
13
+ "test:unit": "glob-bin -d -c \"node --import tsx --test\" **/*.unit.spec.ts",
14
+ "test:unit:postgresql": "glob-bin -d -c \"node --import tsx --test\" **/postgresql/**/*unit.spec.ts",
15
+ "test:unit:sqlite": "glob-bin -d -c \"node --import tsx --test\" **/sqlite/**/*unit.spec.ts",
16
+ "test:int": "glob-bin -d -c \"node --import tsx --test\" **/*.int.spec.ts",
17
+ "test:int:postgresql": "glob-bin -d -c \"node --import tsx --test\" **/postgresql/**/*int.spec.ts",
18
+ "test:int:sqlite": "glob-bin -d -c \"node --import tsx --test\" **/sqlite/**/*int.spec.ts",
19
+ "test:e2e": "glob-bin -d -c \"node --import tsx --test\" **/*.e2e.spec.ts",
20
+ "test:e2e:postgresql": "glob-bin -d -c \"node --import tsx --test\" **/postgresql/**/*e2e.spec.ts",
21
+ "test:e2e:sqlite": "glob-bin -d -c \"node --import tsx --test\" **/sqlite/**/*e2e.spec.ts",
22
22
  "test:watch": "node --import tsx --test --watch",
23
- "test:unit:watch": "glob -c \"node --import tsx --test --watch\" **/*.unit.spec.ts",
24
- "test:int:watch": "glob -c \"node --import tsx --test --watch\" **/*.int.spec.ts",
25
- "test:e2e:watch": "glob -c \"node --import tsx --test --watch\" **/*.e2e.spec.ts",
23
+ "test:unit:watch": "glob-bin -d -c \"node --import tsx --test --watch\" **/*.unit.spec.ts",
24
+ "test:int:watch": "glob-bin -d -c \"node --import tsx --test --watch\" **/*.int.spec.ts",
25
+ "test:e2e:watch": "glob-bin -d -c \"node --import tsx --test --watch\" **/*.e2e.spec.ts",
26
26
  "benchmark": "node --import tsx src/benchmarks/index.ts"
27
27
  },
28
28
  "repository": {
@@ -101,12 +101,13 @@
101
101
  "files": [
102
102
  "dist"
103
103
  ],
104
+ "dependencies": {
105
+ "uuid": "^13.0.0"
106
+ },
104
107
  "peerDependencies": {
108
+ "@cloudflare/workers-types": "^4.20260127.0",
105
109
  "@types/pg": "^8.16.0",
106
110
  "pg": "^8.17.2",
107
- "pg-connection-string": "^2.10.1",
108
- "uuid": "^13.0.0",
109
- "@cloudflare/workers-types": "^4.20260127.0",
110
111
  "sqlite3": "^5.1.7"
111
112
  },
112
113
  "peerDependenciesMeta": {
@@ -116,9 +117,6 @@
116
117
  "pg": {
117
118
  "optional": true
118
119
  },
119
- "pg-connection-string": {
120
- "optional": true
121
- },
122
120
  "sqlite3": {
123
121
  "optional": true
124
122
  },
@@ -127,9 +125,10 @@
127
125
  }
128
126
  },
129
127
  "devDependencies": {
128
+ "@cloudflare/workers-types": "^4.20260127.0",
130
129
  "@types/node": "^25.0.10",
130
+ "@types/pg": "^8.16.0",
131
131
  "pg": "^8.17.2",
132
- "pg-connection-string": "^2.10.1",
133
132
  "sqlite3": "^5.1.7"
134
133
  }
135
134
  }