@uns-kit/database 3.0.15 → 3.0.17

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,4 @@
1
+ import { type OracleDatabaseConfig } from "../schema.js";
1
2
  import type { DatabaseAdapter } from "../types.js";
2
- import type { OracleDatabaseConfig } from "../schema.js";
3
3
  export declare function createOracleAdapter(config: OracleDatabaseConfig): Promise<DatabaseAdapter>;
4
4
  //# sourceMappingURL=oracle.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"oracle.d.ts","sourceRoot":"","sources":["../../src/drivers/oracle.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAuB,MAAM,aAAa,CAAC;AAExE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAmCzD,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,eAAe,CAAC,CAyGhG"}
1
+ {"version":3,"file":"oracle.d.ts","sourceRoot":"","sources":["../../src/drivers/oracle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,oBAAoB,EAAiC,MAAM,cAAc,CAAC;AACxF,OAAO,KAAK,EAAE,eAAe,EAAuB,MAAM,aAAa,CAAC;AAqCxE,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,eAAe,CAAC,CAyFhG"}
@@ -1,24 +1,25 @@
1
+ import { requireResolvedDatabaseString } from "../schema.js";
1
2
  function buildOracleConnectString(config) {
2
3
  if (config.connectString) {
3
- return config.connectString;
4
+ return requireResolvedDatabaseString(config.connectString, "connectString");
4
5
  }
6
+ const host = requireResolvedDatabaseString(config.host, "host");
5
7
  return config.serviceName
6
- ? `${config.host}:${config.port}/${config.serviceName}`
7
- : `${config.host}:${config.port}/${config.sid}`;
8
+ ? `${host}:${config.port}/${requireResolvedDatabaseString(config.serviceName, "serviceName")}`
9
+ : `${host}:${config.port}/${requireResolvedDatabaseString(config.sid, "sid")}`;
8
10
  }
9
11
  export async function createOracleAdapter(config) {
10
12
  let oracleModule;
11
13
  try {
12
14
  const importedModule = await import("oracledb");
13
- oracleModule = (importedModule.default ??
14
- importedModule);
15
+ oracleModule = (importedModule.default ?? importedModule);
15
16
  }
16
17
  catch (error) {
17
18
  throw new Error("The 'oracledb' package is required for dialect 'oracle'. Install it with `pnpm add oracledb`.", { cause: error });
18
19
  }
19
20
  const connectionOptions = {
20
- user: config.user,
21
- password: config.password,
21
+ user: requireResolvedDatabaseString(config.user, "user"),
22
+ password: config.password === undefined ? undefined : requireResolvedDatabaseString(config.password, "password"),
22
23
  connectString: buildOracleConnectString(config),
23
24
  poolMin: config.poolMin,
24
25
  poolMax: config.poolMax,
@@ -32,7 +33,9 @@ export async function createOracleAdapter(config) {
32
33
  async query(statement) {
33
34
  const connection = await pool.getConnection();
34
35
  try {
35
- const result = await connection.execute(statement.text, statement.values, { outFormat: oracleModule.OUT_FORMAT_OBJECT });
36
+ const result = await connection.execute(statement.text, statement.values, {
37
+ outFormat: oracleModule.OUT_FORMAT_OBJECT,
38
+ });
36
39
  const rows = result.rows ?? [];
37
40
  return {
38
41
  rows,
@@ -65,7 +68,9 @@ export async function createOracleAdapter(config) {
65
68
  async query(statement) {
66
69
  const connection = await oracleModule.getConnection(connectionOptions);
67
70
  try {
68
- const result = await connection.execute(statement.text, statement.values, { outFormat: oracleModule.OUT_FORMAT_OBJECT });
71
+ const result = await connection.execute(statement.text, statement.values, {
72
+ outFormat: oracleModule.OUT_FORMAT_OBJECT,
73
+ });
69
74
  const rows = result.rows ?? [];
70
75
  return {
71
76
  rows,
@@ -1 +1 @@
1
- {"version":3,"file":"oracle.js","sourceRoot":"","sources":["../../src/drivers/oracle.ts"],"names":[],"mappings":"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","sourcesContent":["import type { DatabaseAdapter, DatabaseQueryResult } from \"../types.js\";\nimport type { CompiledSqlStatement } from \"../types.js\";\nimport type { OracleDatabaseConfig } from \"../schema.js\";\n\ntype OraclePool = {\n getConnection(): Promise<OracleConnection>;\n close(closeMode?: number): Promise<void>;\n};\n\ntype OracleConnection = {\n execute<T = Record<string, unknown>>(\n sqlText: string,\n bindParams?: Record<string, unknown>,\n options?: Record<string, unknown>\n ): Promise<{\n rows?: T[];\n rowsAffected?: number;\n }>;\n close(): Promise<void>;\n};\n\ntype OracleModule = {\n OUT_FORMAT_OBJECT: number;\n createPool(options: Record<string, unknown>): Promise<OraclePool>;\n getConnection(options: Record<string, unknown>): Promise<OracleConnection>;\n};\n\nfunction buildOracleConnectString(config: OracleDatabaseConfig): string {\n if (config.connectString) {\n return config.connectString;\n }\n\n return config.serviceName\n ? `${config.host}:${config.port}/${config.serviceName}`\n : `${config.host}:${config.port}/${config.sid}`;\n}\n\nexport async function createOracleAdapter(config: OracleDatabaseConfig): Promise<DatabaseAdapter> {\n let oracleModule: OracleModule;\n\n try {\n const importedModule = await import(\"oracledb\");\n oracleModule = ((importedModule as { default?: OracleModule }).default ??\n importedModule) as OracleModule;\n } catch (error) {\n throw new Error(\n \"The 'oracledb' package is required for dialect 'oracle'. Install it with `pnpm add oracledb`.\",\n { cause: error as Error }\n );\n }\n\n const connectionOptions = {\n user: config.user,\n password: config.password,\n connectString: buildOracleConnectString(config),\n poolMin: config.poolMin,\n poolMax: config.poolMax,\n poolIncrement: config.poolIncrement,\n stmtCacheSize: config.stmtCacheSize,\n };\n\n if (config.usePool !== false) {\n const pool = await oracleModule.createPool(connectionOptions);\n\n return {\n dialect: \"oracle\",\n async query<T = Record<string, unknown>>(statement: CompiledSqlStatement): Promise<DatabaseQueryResult<T>> {\n const connection = await pool.getConnection();\n try {\n const result = await connection.execute<T>(\n statement.text,\n statement.values as Record<string, unknown>,\n { outFormat: oracleModule.OUT_FORMAT_OBJECT }\n );\n const rows = result.rows ?? [];\n return {\n rows,\n rowCount: rows.length,\n };\n } finally {\n await connection.close();\n }\n },\n async execute(statement: CompiledSqlStatement) {\n const connection = await pool.getConnection();\n try {\n const result = await connection.execute(\n statement.text,\n statement.values as Record<string, unknown>,\n { autoCommit: true }\n );\n return {\n rowCount: result.rowsAffected ?? 0,\n };\n } finally {\n await connection.close();\n }\n },\n close() {\n return pool.close(0);\n },\n };\n }\n\n return {\n dialect: \"oracle\",\n async query<T = Record<string, unknown>>(statement: CompiledSqlStatement): Promise<DatabaseQueryResult<T>> {\n const connection = await oracleModule.getConnection(connectionOptions);\n try {\n const result = await connection.execute<T>(\n statement.text,\n statement.values as Record<string, unknown>,\n { outFormat: oracleModule.OUT_FORMAT_OBJECT }\n );\n const rows = result.rows ?? [];\n return {\n rows,\n rowCount: rows.length,\n };\n } finally {\n await connection.close();\n }\n },\n async execute(statement: CompiledSqlStatement) {\n const connection = await oracleModule.getConnection(connectionOptions);\n try {\n const result = await connection.execute(\n statement.text,\n statement.values as Record<string, unknown>,\n { autoCommit: true }\n );\n return {\n rowCount: result.rowsAffected ?? 0,\n };\n } finally {\n await connection.close();\n }\n },\n async close() {\n // Non-pooled Oracle mode opens/closes per operation, so there is nothing to tear down.\n },\n };\n}\n"]}
1
+ {"version":3,"file":"oracle.js","sourceRoot":"","sources":["../../src/drivers/oracle.ts"],"names":[],"mappings":"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","sourcesContent":["import { type OracleDatabaseConfig, requireResolvedDatabaseString } from \"../schema.js\";\nimport type { DatabaseAdapter, DatabaseQueryResult } from \"../types.js\";\nimport type { CompiledSqlStatement } from \"../types.js\";\n\ntype OraclePool = {\n getConnection(): Promise<OracleConnection>;\n close(closeMode?: number): Promise<void>;\n};\n\ntype OracleConnection = {\n execute<T = Record<string, unknown>>(\n sqlText: string,\n bindParams?: Record<string, unknown>,\n options?: Record<string, unknown>,\n ): Promise<{\n rows?: T[];\n rowsAffected?: number;\n }>;\n close(): Promise<void>;\n};\n\ntype OracleModule = {\n OUT_FORMAT_OBJECT: number;\n createPool(options: Record<string, unknown>): Promise<OraclePool>;\n getConnection(options: Record<string, unknown>): Promise<OracleConnection>;\n};\n\nfunction buildOracleConnectString(config: OracleDatabaseConfig): string {\n if (config.connectString) {\n return requireResolvedDatabaseString(config.connectString, \"connectString\");\n }\n\n const host = requireResolvedDatabaseString(config.host, \"host\");\n return config.serviceName\n ? `${host}:${config.port}/${requireResolvedDatabaseString(config.serviceName, \"serviceName\")}`\n : `${host}:${config.port}/${requireResolvedDatabaseString(config.sid, \"sid\")}`;\n}\n\nexport async function createOracleAdapter(config: OracleDatabaseConfig): Promise<DatabaseAdapter> {\n let oracleModule: OracleModule;\n\n try {\n const importedModule = await import(\"oracledb\");\n oracleModule = ((importedModule as { default?: OracleModule }).default ?? importedModule) as OracleModule;\n } catch (error) {\n throw new Error(\"The 'oracledb' package is required for dialect 'oracle'. Install it with `pnpm add oracledb`.\", { cause: error as Error });\n }\n\n const connectionOptions = {\n user: requireResolvedDatabaseString(config.user, \"user\"),\n password: config.password === undefined ? undefined : requireResolvedDatabaseString(config.password, \"password\"),\n connectString: buildOracleConnectString(config),\n poolMin: config.poolMin,\n poolMax: config.poolMax,\n poolIncrement: config.poolIncrement,\n stmtCacheSize: config.stmtCacheSize,\n };\n\n if (config.usePool !== false) {\n const pool = await oracleModule.createPool(connectionOptions);\n\n return {\n dialect: \"oracle\",\n async query<T = Record<string, unknown>>(statement: CompiledSqlStatement): Promise<DatabaseQueryResult<T>> {\n const connection = await pool.getConnection();\n try {\n const result = await connection.execute<T>(statement.text, statement.values as Record<string, unknown>, {\n outFormat: oracleModule.OUT_FORMAT_OBJECT,\n });\n const rows = result.rows ?? [];\n return {\n rows,\n rowCount: rows.length,\n };\n } finally {\n await connection.close();\n }\n },\n async execute(statement: CompiledSqlStatement) {\n const connection = await pool.getConnection();\n try {\n const result = await connection.execute(statement.text, statement.values as Record<string, unknown>, { autoCommit: true });\n return {\n rowCount: result.rowsAffected ?? 0,\n };\n } finally {\n await connection.close();\n }\n },\n close() {\n return pool.close(0);\n },\n };\n }\n\n return {\n dialect: \"oracle\",\n async query<T = Record<string, unknown>>(statement: CompiledSqlStatement): Promise<DatabaseQueryResult<T>> {\n const connection = await oracleModule.getConnection(connectionOptions);\n try {\n const result = await connection.execute<T>(statement.text, statement.values as Record<string, unknown>, {\n outFormat: oracleModule.OUT_FORMAT_OBJECT,\n });\n const rows = result.rows ?? [];\n return {\n rows,\n rowCount: rows.length,\n };\n } finally {\n await connection.close();\n }\n },\n async execute(statement: CompiledSqlStatement) {\n const connection = await oracleModule.getConnection(connectionOptions);\n try {\n const result = await connection.execute(statement.text, statement.values as Record<string, unknown>, { autoCommit: true });\n return {\n rowCount: result.rowsAffected ?? 0,\n };\n } finally {\n await connection.close();\n }\n },\n async close() {\n // Non-pooled Oracle mode opens/closes per operation, so there is nothing to tear down.\n },\n };\n}\n"]}
@@ -1,4 +1,4 @@
1
+ import { type PostgresDatabaseConfig } from "../schema.js";
1
2
  import type { DatabaseAdapter } from "../types.js";
2
- import type { PostgresDatabaseConfig } from "../schema.js";
3
3
  export declare function createPgAdapter(config: PostgresDatabaseConfig): Promise<DatabaseAdapter>;
4
4
  //# sourceMappingURL=pg.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"pg.d.ts","sourceRoot":"","sources":["../../src/drivers/pg.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAuB,MAAM,aAAa,CAAC;AAExE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AAuC3D,wBAAsB,eAAe,CAAC,MAAM,EAAE,sBAAsB,GAAG,OAAO,CAAC,eAAe,CAAC,CA2J9F"}
1
+ {"version":3,"file":"pg.d.ts","sourceRoot":"","sources":["../../src/drivers/pg.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,sBAAsB,EAAiC,MAAM,cAAc,CAAC;AAC1F,OAAO,KAAK,EAAE,eAAe,EAAuB,MAAM,aAAa,CAAC;AA8CxE,wBAAsB,eAAe,CAAC,MAAM,EAAE,sBAAsB,GAAG,OAAO,CAAC,eAAe,CAAC,CAuJ9F"}
@@ -1,4 +1,5 @@
1
1
  import logger from "@uns-kit/core/logger.js";
2
+ import { requireResolvedDatabaseString } from "../schema.js";
2
3
  function buildPgSsl(config) {
3
4
  if (config.ssl === undefined) {
4
5
  return undefined;
@@ -8,28 +9,27 @@ function buildPgSsl(config) {
8
9
  }
9
10
  return {
10
11
  rejectUnauthorized: config.ssl.rejectUnauthorized,
11
- ca: config.ssl.ca,
12
- cert: config.ssl.cert,
13
- key: config.ssl.key,
14
- servername: config.ssl.servername,
12
+ ca: config.ssl.ca === undefined ? undefined : requireResolvedDatabaseString(config.ssl.ca, "ssl.ca"),
13
+ cert: config.ssl.cert === undefined ? undefined : requireResolvedDatabaseString(config.ssl.cert, "ssl.cert"),
14
+ key: config.ssl.key === undefined ? undefined : requireResolvedDatabaseString(config.ssl.key, "ssl.key"),
15
+ servername: config.ssl.servername === undefined ? undefined : requireResolvedDatabaseString(config.ssl.servername, "ssl.servername"),
15
16
  };
16
17
  }
17
18
  export async function createPgAdapter(config) {
18
19
  let pgModule;
19
20
  try {
20
21
  const importedModule = await import("pg");
21
- pgModule = (importedModule.default ??
22
- importedModule);
22
+ pgModule = (importedModule.default ?? importedModule);
23
23
  }
24
24
  catch (error) {
25
25
  throw new Error("The 'pg' package is required for dialect 'pg'. Install it with `pnpm add pg`.", { cause: error });
26
26
  }
27
27
  const connectionOptions = {
28
- host: config.host,
28
+ host: requireResolvedDatabaseString(config.host, "host"),
29
29
  port: config.port,
30
- database: config.database,
31
- user: config.user,
32
- password: config.password,
30
+ database: requireResolvedDatabaseString(config.database, "database"),
31
+ user: requireResolvedDatabaseString(config.user, "user"),
32
+ password: config.password === undefined ? undefined : requireResolvedDatabaseString(config.password, "password"),
33
33
  ssl: buildPgSsl(config),
34
34
  application_name: config.applicationName,
35
35
  statement_timeout: config.statementTimeoutMs,
@@ -1 +1 @@
1
- {"version":3,"file":"pg.js","sourceRoot":"","sources":["../../src/drivers/pg.ts"],"names":[],"mappings":"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","sourcesContent":["import logger from \"@uns-kit/core/logger.js\";\nimport type { DatabaseAdapter, DatabaseQueryResult } from \"../types.js\";\nimport type { CompiledSqlStatement } from \"../types.js\";\nimport type { PostgresDatabaseConfig } from \"../schema.js\";\n\ntype PgPool = {\n query<T = Record<string, unknown>>(text: string, values?: unknown[]): Promise<{\n rows: T[];\n rowCount?: number | null;\n }>;\n end(): Promise<void>;\n on(event: \"error\", listener: (error: Error) => void): void;\n};\n\ntype PgClient = {\n connect(): Promise<void>;\n query<T = Record<string, unknown>>(text: string, values?: unknown[]): Promise<{\n rows: T[];\n rowCount?: number | null;\n }>;\n end(): Promise<void>;\n on(event: \"error\" | \"end\", listener: (error?: Error) => void): void;\n};\n\nfunction buildPgSsl(config: PostgresDatabaseConfig): unknown {\n if (config.ssl === undefined) {\n return undefined;\n }\n\n if (typeof config.ssl === \"boolean\") {\n return config.ssl;\n }\n\n return {\n rejectUnauthorized: config.ssl.rejectUnauthorized,\n ca: config.ssl.ca,\n cert: config.ssl.cert,\n key: config.ssl.key,\n servername: config.ssl.servername,\n };\n}\n\nexport async function createPgAdapter(config: PostgresDatabaseConfig): Promise<DatabaseAdapter> {\n let pgModule: {\n Pool: new (options: Record<string, unknown>) => PgPool;\n Client: new (options: Record<string, unknown>) => PgClient;\n };\n\n try {\n const importedModule = await import(\"pg\");\n pgModule = ((importedModule as { default?: typeof importedModule }).default ??\n importedModule) as typeof pgModule;\n } catch (error) {\n throw new Error(\n \"The 'pg' package is required for dialect 'pg'. Install it with `pnpm add pg`.\",\n { cause: error as Error }\n );\n }\n\n const connectionOptions = {\n host: config.host,\n port: config.port,\n database: config.database,\n user: config.user,\n password: config.password,\n ssl: buildPgSsl(config),\n application_name: config.applicationName,\n statement_timeout: config.statementTimeoutMs,\n connectionTimeoutMillis: config.connectionTimeoutMs,\n idleTimeoutMillis: config.idleTimeoutMs,\n max: config.maxPoolSize,\n min: config.minPoolSize,\n };\n\n if (config.usePool !== false) {\n const pool = new pgModule.Pool(connectionOptions);\n pool.on(\"error\", (error) => {\n logger.error(\"uns-database - PostgreSQL pool idle client error\", error);\n });\n\n return {\n dialect: \"pg\",\n async query<T = Record<string, unknown>>(statement: CompiledSqlStatement): Promise<DatabaseQueryResult<T>> {\n const result = await pool.query<T>(statement.text, statement.values as unknown[]);\n return {\n rows: result.rows,\n rowCount: result.rowCount ?? result.rows.length,\n };\n },\n async execute(statement: CompiledSqlStatement) {\n const result = await pool.query(statement.text, statement.values as unknown[]);\n return {\n rowCount: result.rowCount ?? 0,\n };\n },\n close() {\n return pool.end();\n },\n };\n }\n\n let client: PgClient | null = null;\n let clientPromise: Promise<PgClient> | null = null;\n\n const detachCachedClient = (activeClient: PgClient) => {\n if (client !== activeClient) {\n return false;\n }\n\n client = null;\n return true;\n };\n\n const handleClientConnectionError = (activeClient: PgClient, error: unknown) => {\n if (!detachCachedClient(activeClient)) {\n return;\n }\n\n logger.error(\"uns-database - PostgreSQL client connection error\", error);\n void activeClient.end().catch((): undefined => undefined);\n };\n\n const handleClientConnectionEnd = (activeClient: PgClient) => {\n if (!detachCachedClient(activeClient)) {\n return;\n }\n\n logger.warn(\"uns-database - PostgreSQL client connection ended\");\n };\n\n const attachClientListeners = (activeClient: PgClient) => {\n activeClient.on(\"error\", (error) => {\n handleClientConnectionError(activeClient, error);\n });\n activeClient.on(\"end\", () => {\n handleClientConnectionEnd(activeClient);\n });\n };\n\n const getClient = async () => {\n if (client) {\n return client;\n }\n\n if (!clientPromise) {\n clientPromise = (async () => {\n const nextClient = new pgModule.Client(connectionOptions);\n attachClientListeners(nextClient);\n await nextClient.connect();\n client = nextClient;\n return nextClient;\n })().finally(() => {\n clientPromise = null;\n });\n }\n\n return clientPromise;\n };\n\n return {\n dialect: \"pg\",\n async query<T = Record<string, unknown>>(statement: CompiledSqlStatement): Promise<DatabaseQueryResult<T>> {\n const activeClient = await getClient();\n const result = await activeClient.query<T>(statement.text, statement.values as unknown[]);\n return {\n rows: result.rows,\n rowCount: result.rowCount ?? result.rows.length,\n };\n },\n async execute(statement: CompiledSqlStatement) {\n const activeClient = await getClient();\n const result = await activeClient.query(statement.text, statement.values as unknown[]);\n return {\n rowCount: result.rowCount ?? 0,\n };\n },\n async close() {\n const activeClient = client;\n const pendingClientPromise = clientPromise;\n client = null;\n clientPromise = null;\n\n if (activeClient) {\n await activeClient.end();\n return;\n }\n\n if (!pendingClientPromise) {\n return;\n }\n\n const pendingClient = await pendingClientPromise.catch((): null => null);\n if (pendingClient) {\n await pendingClient.end();\n }\n },\n };\n}\n"]}
1
+ {"version":3,"file":"pg.js","sourceRoot":"","sources":["../../src/drivers/pg.ts"],"names":[],"mappings":"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","sourcesContent":["import logger from \"@uns-kit/core/logger.js\";\n\nimport { type PostgresDatabaseConfig, requireResolvedDatabaseString } from \"../schema.js\";\nimport type { DatabaseAdapter, DatabaseQueryResult } from \"../types.js\";\nimport type { CompiledSqlStatement } from \"../types.js\";\n\ntype PgPool = {\n query<T = Record<string, unknown>>(\n text: string,\n values?: unknown[],\n ): Promise<{\n rows: T[];\n rowCount?: number | null;\n }>;\n end(): Promise<void>;\n on(event: \"error\", listener: (error: Error) => void): void;\n};\n\ntype PgClient = {\n connect(): Promise<void>;\n query<T = Record<string, unknown>>(\n text: string,\n values?: unknown[],\n ): Promise<{\n rows: T[];\n rowCount?: number | null;\n }>;\n end(): Promise<void>;\n on(event: \"error\" | \"end\", listener: (error?: Error) => void): void;\n};\n\nfunction buildPgSsl(config: PostgresDatabaseConfig): unknown {\n if (config.ssl === undefined) {\n return undefined;\n }\n\n if (typeof config.ssl === \"boolean\") {\n return config.ssl;\n }\n\n return {\n rejectUnauthorized: config.ssl.rejectUnauthorized,\n ca: config.ssl.ca === undefined ? undefined : requireResolvedDatabaseString(config.ssl.ca, \"ssl.ca\"),\n cert: config.ssl.cert === undefined ? undefined : requireResolvedDatabaseString(config.ssl.cert, \"ssl.cert\"),\n key: config.ssl.key === undefined ? undefined : requireResolvedDatabaseString(config.ssl.key, \"ssl.key\"),\n servername: config.ssl.servername === undefined ? undefined : requireResolvedDatabaseString(config.ssl.servername, \"ssl.servername\"),\n };\n}\n\nexport async function createPgAdapter(config: PostgresDatabaseConfig): Promise<DatabaseAdapter> {\n let pgModule: {\n Pool: new (options: Record<string, unknown>) => PgPool;\n Client: new (options: Record<string, unknown>) => PgClient;\n };\n\n try {\n const importedModule = await import(\"pg\");\n pgModule = ((importedModule as { default?: typeof importedModule }).default ?? importedModule) as typeof pgModule;\n } catch (error) {\n throw new Error(\"The 'pg' package is required for dialect 'pg'. Install it with `pnpm add pg`.\", { cause: error as Error });\n }\n\n const connectionOptions = {\n host: requireResolvedDatabaseString(config.host, \"host\"),\n port: config.port,\n database: requireResolvedDatabaseString(config.database, \"database\"),\n user: requireResolvedDatabaseString(config.user, \"user\"),\n password: config.password === undefined ? undefined : requireResolvedDatabaseString(config.password, \"password\"),\n ssl: buildPgSsl(config),\n application_name: config.applicationName,\n statement_timeout: config.statementTimeoutMs,\n connectionTimeoutMillis: config.connectionTimeoutMs,\n idleTimeoutMillis: config.idleTimeoutMs,\n max: config.maxPoolSize,\n min: config.minPoolSize,\n };\n\n if (config.usePool !== false) {\n const pool = new pgModule.Pool(connectionOptions);\n pool.on(\"error\", (error) => {\n logger.error(\"uns-database - PostgreSQL pool idle client error\", error);\n });\n\n return {\n dialect: \"pg\",\n async query<T = Record<string, unknown>>(statement: CompiledSqlStatement): Promise<DatabaseQueryResult<T>> {\n const result = await pool.query<T>(statement.text, statement.values as unknown[]);\n return {\n rows: result.rows,\n rowCount: result.rowCount ?? result.rows.length,\n };\n },\n async execute(statement: CompiledSqlStatement) {\n const result = await pool.query(statement.text, statement.values as unknown[]);\n return {\n rowCount: result.rowCount ?? 0,\n };\n },\n close() {\n return pool.end();\n },\n };\n }\n\n let client: PgClient | null = null;\n let clientPromise: Promise<PgClient> | null = null;\n\n const detachCachedClient = (activeClient: PgClient) => {\n if (client !== activeClient) {\n return false;\n }\n\n client = null;\n return true;\n };\n\n const handleClientConnectionError = (activeClient: PgClient, error: unknown) => {\n if (!detachCachedClient(activeClient)) {\n return;\n }\n\n logger.error(\"uns-database - PostgreSQL client connection error\", error);\n void activeClient.end().catch((): undefined => undefined);\n };\n\n const handleClientConnectionEnd = (activeClient: PgClient) => {\n if (!detachCachedClient(activeClient)) {\n return;\n }\n\n logger.warn(\"uns-database - PostgreSQL client connection ended\");\n };\n\n const attachClientListeners = (activeClient: PgClient) => {\n activeClient.on(\"error\", (error) => {\n handleClientConnectionError(activeClient, error);\n });\n activeClient.on(\"end\", () => {\n handleClientConnectionEnd(activeClient);\n });\n };\n\n const getClient = async () => {\n if (client) {\n return client;\n }\n\n if (!clientPromise) {\n clientPromise = (async () => {\n const nextClient = new pgModule.Client(connectionOptions);\n attachClientListeners(nextClient);\n await nextClient.connect();\n client = nextClient;\n return nextClient;\n })().finally(() => {\n clientPromise = null;\n });\n }\n\n return clientPromise;\n };\n\n return {\n dialect: \"pg\",\n async query<T = Record<string, unknown>>(statement: CompiledSqlStatement): Promise<DatabaseQueryResult<T>> {\n const activeClient = await getClient();\n const result = await activeClient.query<T>(statement.text, statement.values as unknown[]);\n return {\n rows: result.rows,\n rowCount: result.rowCount ?? result.rows.length,\n };\n },\n async execute(statement: CompiledSqlStatement) {\n const activeClient = await getClient();\n const result = await activeClient.query(statement.text, statement.values as unknown[]);\n return {\n rowCount: result.rowCount ?? 0,\n };\n },\n async close() {\n const activeClient = client;\n const pendingClientPromise = clientPromise;\n client = null;\n clientPromise = null;\n\n if (activeClient) {\n await activeClient.end();\n return;\n }\n\n if (!pendingClientPromise) {\n return;\n }\n\n const pendingClient = await pendingClientPromise.catch((): null => null);\n if (pendingClient) {\n await pendingClient.end();\n }\n },\n };\n}\n"]}