@effect/sql-pg
Advanced tools
| /** | ||
| * @since 1.0.0 | ||
| */ | ||
| /** | ||
| * @since 1.0.0 | ||
| */ | ||
| export * as PgClient from "./PgClient.ts"; | ||
| /** | ||
| * @since 1.0.0 | ||
| */ | ||
| export * as PgMigrator from "./PgMigrator.ts"; | ||
| //# sourceMappingURL=index.d.ts.map |
| {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH;;GAEG;AACH,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAA;AAEzC;;GAEG;AACH,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAA"} |
| /** | ||
| * @since 1.0.0 | ||
| */ | ||
| // @barrel: Auto-generated exports. Do not edit manually. | ||
| /** | ||
| * @since 1.0.0 | ||
| */ | ||
| export * as PgClient from "./PgClient.js"; | ||
| /** | ||
| * @since 1.0.0 | ||
| */ | ||
| export * as PgMigrator from "./PgMigrator.js"; | ||
| //# sourceMappingURL=index.js.map |
| {"version":3,"file":"index.js","names":["PgClient","PgMigrator"],"sources":["../src/index.ts"],"sourcesContent":[null],"mappings":"AAAA;;;AAIA;AAEA;;;AAGA,OAAO,KAAKA,QAAQ,MAAM,eAAe;AAEzC;;;AAGA,OAAO,KAAKC,UAAU,MAAM,iBAAiB","ignoreList":[]} |
| import * as Config from "effect/Config"; | ||
| import * as Duration from "effect/Duration"; | ||
| import * as Effect from "effect/Effect"; | ||
| import * as Layer from "effect/Layer"; | ||
| import * as Redacted from "effect/Redacted"; | ||
| import * as Scope from "effect/Scope"; | ||
| import * as ServiceMap from "effect/ServiceMap"; | ||
| import * as Stream from "effect/Stream"; | ||
| import * as Reactivity from "effect/unstable/reactivity/Reactivity"; | ||
| import * as Client from "effect/unstable/sql/SqlClient"; | ||
| import { SqlError } from "effect/unstable/sql/SqlError"; | ||
| import type { Custom, Fragment } from "effect/unstable/sql/Statement"; | ||
| import * as Statement from "effect/unstable/sql/Statement"; | ||
| import type { Duplex } from "node:stream"; | ||
| import type { ConnectionOptions } from "node:tls"; | ||
| import * as Pg from "pg"; | ||
| /** | ||
| * @category type ids | ||
| * @since 1.0.0 | ||
| */ | ||
| export declare const TypeId: TypeId; | ||
| /** | ||
| * @category type ids | ||
| * @since 1.0.0 | ||
| */ | ||
| export type TypeId = "~@effect/sql-pg/PgClient"; | ||
| /** | ||
| * @category models | ||
| * @since 1.0.0 | ||
| */ | ||
| export interface PgClient extends Client.SqlClient { | ||
| readonly [TypeId]: TypeId; | ||
| readonly config: PgClientConfig; | ||
| readonly json: (_: unknown) => Fragment; | ||
| readonly listen: (channel: string) => Stream.Stream<string, SqlError>; | ||
| readonly notify: (channel: string, payload: string) => Effect.Effect<void, SqlError>; | ||
| } | ||
| /** | ||
| * @category tags | ||
| * @since 1.0.0 | ||
| */ | ||
| export declare const PgClient: ServiceMap.Service<PgClient, PgClient>; | ||
| /** | ||
| * @category constructors | ||
| * @since 1.0.0 | ||
| */ | ||
| export interface PgClientConfig { | ||
| readonly url?: Redacted.Redacted | undefined; | ||
| readonly host?: string | undefined; | ||
| readonly port?: number | undefined; | ||
| readonly path?: string | undefined; | ||
| readonly ssl?: boolean | ConnectionOptions | undefined; | ||
| readonly database?: string | undefined; | ||
| readonly username?: string | undefined; | ||
| readonly password?: Redacted.Redacted | undefined; | ||
| readonly stream?: (() => Duplex) | undefined; | ||
| readonly idleTimeout?: Duration.DurationInput | undefined; | ||
| readonly connectTimeout?: Duration.DurationInput | undefined; | ||
| readonly maxConnections?: number | undefined; | ||
| readonly minConnections?: number | undefined; | ||
| readonly connectionTTL?: Duration.DurationInput | undefined; | ||
| readonly applicationName?: string | undefined; | ||
| readonly spanAttributes?: Record<string, unknown> | undefined; | ||
| readonly transformResultNames?: ((str: string) => string) | undefined; | ||
| readonly transformQueryNames?: ((str: string) => string) | undefined; | ||
| readonly transformJson?: boolean | undefined; | ||
| readonly types?: Pg.CustomTypesConfig | undefined; | ||
| } | ||
| /** | ||
| * @category constructors | ||
| * @since 1.0.0 | ||
| */ | ||
| export declare const make: (options: PgClientConfig) => Effect.Effect<PgClient, SqlError, Scope.Scope | Reactivity.Reactivity>; | ||
| /** | ||
| * @category constructors | ||
| * @since 1.0.0 | ||
| */ | ||
| export declare const fromPool: (options: { | ||
| readonly acquire: Effect.Effect<Pg.Pool, SqlError, Scope.Scope>; | ||
| readonly applicationName?: string | undefined; | ||
| readonly spanAttributes?: Record<string, unknown> | undefined; | ||
| readonly transformResultNames?: ((str: string) => string) | undefined; | ||
| readonly transformQueryNames?: ((str: string) => string) | undefined; | ||
| readonly transformJson?: boolean | undefined; | ||
| readonly types?: Pg.CustomTypesConfig | undefined; | ||
| }) => Effect.Effect<PgClient, SqlError, Scope.Scope | Reactivity.Reactivity>; | ||
| /** | ||
| * @category layers | ||
| * @since 1.0.0 | ||
| */ | ||
| export declare const layerConfig: (config: Config.Wrap<PgClientConfig>) => Layer.Layer<PgClient | Client.SqlClient, Config.ConfigError | SqlError>; | ||
| /** | ||
| * @category layers | ||
| * @since 1.0.0 | ||
| */ | ||
| export declare const layer: (config: PgClientConfig) => Layer.Layer<PgClient | Client.SqlClient, SqlError>; | ||
| /** | ||
| * @category layers | ||
| * @since 1.0.0 | ||
| */ | ||
| export declare const layerFromPool: (options: { | ||
| readonly acquire: Effect.Effect<Pg.Pool, SqlError, Scope.Scope>; | ||
| readonly applicationName?: string | undefined; | ||
| readonly spanAttributes?: Record<string, unknown> | undefined; | ||
| readonly transformResultNames?: ((str: string) => string) | undefined; | ||
| readonly transformQueryNames?: ((str: string) => string) | undefined; | ||
| readonly transformJson?: boolean | undefined; | ||
| readonly types?: Pg.CustomTypesConfig | undefined; | ||
| }) => Layer.Layer<PgClient | Client.SqlClient, SqlError>; | ||
| /** | ||
| * @category constructor | ||
| * @since 1.0.0 | ||
| */ | ||
| export declare const makeCompiler: (transform?: (_: string) => string, transformJson?: boolean) => Statement.Compiler; | ||
| /** | ||
| * @category custom types | ||
| * @since 1.0.0 | ||
| */ | ||
| export type PgCustom = PgJson; | ||
| /** | ||
| * @category custom types | ||
| * @since 1.0.0 | ||
| */ | ||
| interface PgJson extends Custom<"PgJson", unknown> { | ||
| } | ||
| /** | ||
| * @category custom types | ||
| * @since 1.0.0 | ||
| */ | ||
| declare const PgJson: (paramA: unknown, paramB: void, paramC: void) => PgJson; | ||
| export {}; | ||
| //# sourceMappingURL=PgClient.d.ts.map |
| {"version":3,"file":"PgClient.d.ts","sourceRoot":"","sources":["../src/PgClient.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,QAAQ,MAAM,iBAAiB,CAAA;AAC3C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAEvC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AAIrC,OAAO,KAAK,QAAQ,MAAM,iBAAiB,CAAA;AAC3C,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AACrC,OAAO,KAAK,UAAU,MAAM,mBAAmB,CAAA;AAC/C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,UAAU,MAAM,uCAAuC,CAAA;AACnE,OAAO,KAAK,MAAM,MAAM,+BAA+B,CAAA;AAEvD,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAA;AACvD,OAAO,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAA;AACrE,OAAO,KAAK,SAAS,MAAM,+BAA+B,CAAA;AAC1D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACzC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAA;AACjD,OAAO,KAAK,EAAE,MAAM,IAAI,CAAA;AASxB;;;GAGG;AACH,eAAO,MAAM,MAAM,EAAE,MAAmC,CAAA;AAExD;;;GAGG;AACH,MAAM,MAAM,MAAM,GAAG,0BAA0B,CAAA;AAE/C;;;GAGG;AACH,MAAM,WAAW,QAAS,SAAQ,MAAM,CAAC,SAAS;IAChD,QAAQ,CAAC,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAA;IAC/B,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,QAAQ,CAAA;IACvC,QAAQ,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;IACrE,QAAQ,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;CACrF;AAED;;;GAGG;AACH,eAAO,MAAM,QAAQ,wCAA0D,CAAA;AAE/E;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,QAAQ,GAAG,SAAS,CAAA;IAE5C,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAClC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAClC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAClC,QAAQ,CAAC,GAAG,CAAC,EAAE,OAAO,GAAG,iBAAiB,GAAG,SAAS,CAAA;IACtD,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACtC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACtC,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,QAAQ,GAAG,SAAS,CAAA;IAEjD,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,MAAM,CAAC,GAAG,SAAS,CAAA;IAE5C,QAAQ,CAAC,WAAW,CAAC,EAAE,QAAQ,CAAC,aAAa,GAAG,SAAS,CAAA;IACzD,QAAQ,CAAC,cAAc,CAAC,EAAE,QAAQ,CAAC,aAAa,GAAG,SAAS,CAAA;IAE5D,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC5C,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC5C,QAAQ,CAAC,aAAa,CAAC,EAAE,QAAQ,CAAC,aAAa,GAAG,SAAS,CAAA;IAE3D,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC7C,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAA;IAE7D,QAAQ,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC,GAAG,SAAS,CAAA;IACrE,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC,GAAG,SAAS,CAAA;IACpE,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;IAC5C,QAAQ,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,iBAAiB,GAAG,SAAS,CAAA;CAClD;AAED;;;GAGG;AACH,eAAO,MAAM,IAAI,GACf,SAAS,cAAc,KACtB,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAC,KAAK,GAAG,UAAU,CAAC,UAAU,CAsDpE,CAAA;AAEJ;;;GAGG;AACH,eAAO,MAAM,QAAQ;sBAEC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC;+BAEpC,MAAM,GAAG,SAAS;8BACnB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS;oCAE7B,CAAC,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC,GAAG,SAAS;mCACtC,CAAC,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC,GAAG,SAAS;6BAC3C,OAAO,GAAG,SAAS;qBAC3B,EAAE,CAAC,iBAAiB,GAAG,SAAS;4EAkRnD,CAAA;AAwBF;;;GAGG;AACH,eAAO,MAAM,WAAW,EAAE,CACxB,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,KAChC,KAAK,CAAC,KAAK,CAAC,QAAQ,GAAG,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,WAAW,GAAG,QAAQ,CAYlC,CAAA;AAEzC;;;GAGG;AACH,eAAO,MAAM,KAAK,GAChB,QAAQ,cAAc,KACrB,KAAK,CAAC,KAAK,CAAC,QAAQ,GAAG,MAAM,CAAC,SAAS,EAAE,QAAQ,CAMX,CAAA;AAEzC;;;GAGG;AACH,eAAO,MAAM,aAAa,GAAI,SAAS;IACrC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,CAAA;IAE/D,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC7C,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAA;IAE7D,QAAQ,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC,GAAG,SAAS,CAAA;IACrE,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC,GAAG,SAAS,CAAA;IACpE,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;IAC5C,QAAQ,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,iBAAiB,GAAG,SAAS,CAAA;CAClD,KAAG,KAAK,CAAC,KAAK,CAAC,QAAQ,GAAG,MAAM,CAAC,SAAS,EAAE,QAAQ,CAMZ,CAAA;AAEzC;;;GAGG;AACH,eAAO,MAAM,YAAY,GACvB,YAAY,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,EACjC,uBAAoB,KACnB,SAAS,CAAC,QAsCZ,CAAA;AAID;;;GAGG;AACH,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAA;AAE7B;;;GAGG;AACH,UAAU,MAAO,SAAQ,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC;CAAG;AACrD;;;GAGG;AACH,QAAA,MAAM,MAAM,yDAAqC,CAAA"} |
+394
| /** | ||
| * @since 1.0.0 | ||
| */ | ||
| import * as Arr from "effect/Array"; | ||
| import * as Cause from "effect/Cause"; | ||
| import * as Channel from "effect/Channel"; | ||
| import * as Config from "effect/Config"; | ||
| import * as Duration from "effect/Duration"; | ||
| import * as Effect from "effect/Effect"; | ||
| import * as Fiber from "effect/Fiber"; | ||
| import * as Layer from "effect/Layer"; | ||
| import * as Number from "effect/Number"; | ||
| import * as Queue from "effect/Queue"; | ||
| import * as RcRef from "effect/RcRef"; | ||
| import * as Redacted from "effect/Redacted"; | ||
| import * as Scope from "effect/Scope"; | ||
| import * as ServiceMap from "effect/ServiceMap"; | ||
| import * as Stream from "effect/Stream"; | ||
| import * as Reactivity from "effect/unstable/reactivity/Reactivity"; | ||
| import * as Client from "effect/unstable/sql/SqlClient"; | ||
| import { SqlError } from "effect/unstable/sql/SqlError"; | ||
| import * as Statement from "effect/unstable/sql/Statement"; | ||
| import * as Pg from "pg"; | ||
| import * as PgConnString from "pg-connection-string"; | ||
| import Cursor from "pg-cursor"; | ||
| const ATTR_DB_SYSTEM_NAME = "db.system.name"; | ||
| const ATTR_DB_NAMESPACE = "db.namespace"; | ||
| const ATTR_SERVER_ADDRESS = "server.address"; | ||
| const ATTR_SERVER_PORT = "server.port"; | ||
| /** | ||
| * @category type ids | ||
| * @since 1.0.0 | ||
| */ | ||
| export const TypeId = "~@effect/sql-pg/PgClient"; | ||
| /** | ||
| * @category tags | ||
| * @since 1.0.0 | ||
| */ | ||
| export const PgClient = /*#__PURE__*/ServiceMap.Service("@effect/sql-pg/PgClient"); | ||
| /** | ||
| * @category constructors | ||
| * @since 1.0.0 | ||
| */ | ||
| export const make = options => fromPool({ | ||
| ...options, | ||
| acquire: Effect.gen(function* () { | ||
| const pool = new Pg.Pool({ | ||
| connectionString: options.url ? Redacted.value(options.url) : undefined, | ||
| user: options.username, | ||
| host: options.host, | ||
| database: options.database, | ||
| password: options.password ? Redacted.value(options.password) : undefined, | ||
| ssl: options.ssl, | ||
| port: options.port, | ||
| ...(options.stream ? { | ||
| stream: options.stream | ||
| } : {}), | ||
| connectionTimeoutMillis: options.connectTimeout ? Duration.toMillis(Duration.fromDurationInputUnsafe(options.connectTimeout)) : undefined, | ||
| idleTimeoutMillis: options.idleTimeout ? Duration.toMillis(Duration.fromDurationInputUnsafe(options.idleTimeout)) : undefined, | ||
| max: options.maxConnections, | ||
| min: options.minConnections, | ||
| maxLifetimeSeconds: options.connectionTTL ? Duration.toSeconds(Duration.fromDurationInputUnsafe(options.connectionTTL)) : undefined, | ||
| application_name: options.applicationName ?? "@effect/sql-pg", | ||
| types: options.types | ||
| }); | ||
| pool.on("error", _err => {}); | ||
| yield* Effect.acquireRelease(Effect.tryPromise({ | ||
| try: () => pool.query("SELECT 1"), | ||
| catch: cause => new SqlError({ | ||
| cause, | ||
| message: "PgClient: Failed to connect" | ||
| }) | ||
| }), () => Effect.promise(() => pool.end()).pipe(Effect.timeoutOption(1000))).pipe(Effect.timeoutOrElse({ | ||
| duration: options.connectTimeout ?? Duration.seconds(5), | ||
| onTimeout: () => Effect.fail(new SqlError({ | ||
| cause: new Error("Connection timed out"), | ||
| message: "PgClient: Connection timed out" | ||
| })) | ||
| })); | ||
| return pool; | ||
| }) | ||
| }); | ||
| /** | ||
| * @category constructors | ||
| * @since 1.0.0 | ||
| */ | ||
| export const fromPool = /*#__PURE__*/Effect.fnUntraced(function* (options) { | ||
| const compiler = makeCompiler(options.transformQueryNames, options.transformJson); | ||
| const transformRows = options.transformResultNames ? Statement.defaultTransforms(options.transformResultNames, options.transformJson).array : undefined; | ||
| const pool = yield* options.acquire; | ||
| class ConnectionImpl { | ||
| pg; | ||
| constructor(pg) { | ||
| this.pg = pg; | ||
| } | ||
| runWithClient(f) { | ||
| if (this.pg !== undefined) { | ||
| return Effect.callback(resume => { | ||
| f(this.pg, resume); | ||
| return makeCancel(pool, this.pg); | ||
| }); | ||
| } | ||
| return Effect.callback(resume => { | ||
| let done = false; | ||
| let cancel = undefined; | ||
| let client = undefined; | ||
| function onError(cause) { | ||
| cleanup(cause); | ||
| resume(Effect.fail(new SqlError({ | ||
| cause, | ||
| message: "Connection error" | ||
| }))); | ||
| } | ||
| function cleanup(cause) { | ||
| if (!done) client?.release(cause); | ||
| done = true; | ||
| client?.off("error", onError); | ||
| } | ||
| pool.connect((cause, client_) => { | ||
| if (cause) { | ||
| return resume(Effect.fail(new SqlError({ | ||
| cause, | ||
| message: "Failed to acquire connection" | ||
| }))); | ||
| } else if (!client_) { | ||
| return resume(Effect.fail(new SqlError({ | ||
| message: "Failed to acquire connection", | ||
| cause: new Error("No client returned") | ||
| }))); | ||
| } else if (done) { | ||
| client_.release(); | ||
| return; | ||
| } | ||
| client = client_; | ||
| client.once("error", onError); | ||
| cancel = makeCancel(pool, client); | ||
| f(client, eff => { | ||
| cleanup(); | ||
| resume(eff); | ||
| }); | ||
| }); | ||
| return Effect.suspend(() => { | ||
| if (!cancel) { | ||
| cleanup(); | ||
| return Effect.void; | ||
| } | ||
| return Effect.ensuring(cancel, Effect.sync(cleanup)); | ||
| }); | ||
| }); | ||
| } | ||
| run(query, params) { | ||
| return this.runWithClient((client, resume) => { | ||
| client.query(query, params, (err, result) => { | ||
| if (err) { | ||
| resume(Effect.fail(new SqlError({ | ||
| cause: err, | ||
| message: "Failed to execute statement" | ||
| }))); | ||
| } else { | ||
| // Multi-statement queries return an array of results | ||
| resume(Effect.succeed(Array.isArray(result) ? result.map(r => r.rows ?? []) : result.rows ?? [])); | ||
| } | ||
| }); | ||
| }); | ||
| } | ||
| execute(sql, params, transformRows) { | ||
| return transformRows ? Effect.map(this.run(sql, params), transformRows) : this.run(sql, params); | ||
| } | ||
| executeRaw(sql, params) { | ||
| return this.runWithClient((client, resume) => { | ||
| client.query(sql, params, (err, result) => { | ||
| if (err) { | ||
| resume(Effect.fail(new SqlError({ | ||
| cause: err, | ||
| message: "Failed to execute statement" | ||
| }))); | ||
| } else { | ||
| resume(Effect.succeed(result)); | ||
| } | ||
| }); | ||
| }); | ||
| } | ||
| executeWithoutTransform(sql, params) { | ||
| return this.run(sql, params); | ||
| } | ||
| executeValues(sql, params) { | ||
| return this.runWithClient((client, resume) => { | ||
| client.query({ | ||
| text: sql, | ||
| rowMode: "array", | ||
| values: params | ||
| }, (err, result) => { | ||
| if (err) { | ||
| resume(Effect.fail(new SqlError({ | ||
| cause: err, | ||
| message: "Failed to execute statement" | ||
| }))); | ||
| } else { | ||
| resume(Effect.succeed(result.rows)); | ||
| } | ||
| }); | ||
| }); | ||
| } | ||
| executeUnprepared(sql, params, transformRows) { | ||
| return this.execute(sql, params, transformRows); | ||
| } | ||
| executeStream(sql, params, transformRows) { | ||
| // oxlint-disable-next-line @typescript-eslint/no-this-alias | ||
| const self = this; | ||
| return Stream.fromChannel(Channel.fromTransform(Effect.fnUntraced(function* (_, scope) { | ||
| const client = self.pg ?? (yield* Scope.provide(reserveRaw, scope)); | ||
| yield* Scope.addFinalizer(scope, Effect.promise(() => cursor.close())); | ||
| const cursor = client.query(new Cursor(sql, params)); | ||
| // @effect-diagnostics-next-line returnEffectInGen:off | ||
| return Effect.callback(resume => { | ||
| cursor.read(128, (err, rows) => { | ||
| if (err) { | ||
| resume(Effect.fail(new SqlError({ | ||
| cause: err, | ||
| message: "Failed to execute statement" | ||
| }))); | ||
| } else if (Arr.isArrayNonEmpty(rows)) { | ||
| resume(Effect.succeed(transformRows ? transformRows(rows) : rows)); | ||
| } else { | ||
| resume(Cause.done()); | ||
| } | ||
| }); | ||
| }); | ||
| }))); | ||
| } | ||
| } | ||
| const reserveRaw = Effect.callback(resume => { | ||
| const fiber = Fiber.getCurrent(); | ||
| const scope = ServiceMap.getUnsafe(fiber.services, Scope.Scope); | ||
| let cause = undefined; | ||
| pool.connect((err, client, release) => { | ||
| if (err) { | ||
| resume(Effect.fail(new SqlError({ | ||
| cause: err, | ||
| message: "Failed to acquire connection for transaction" | ||
| }))); | ||
| } else { | ||
| resume(Effect.as(Scope.addFinalizer(scope, Effect.sync(() => { | ||
| client.off("error", onError); | ||
| release(cause); | ||
| })), client)); | ||
| } | ||
| function onError(cause_) { | ||
| cause = cause_; | ||
| } | ||
| client.on("error", onError); | ||
| }); | ||
| }); | ||
| const reserve = Effect.map(reserveRaw, client => new ConnectionImpl(client)); | ||
| const listenClient = yield* RcRef.make({ | ||
| acquire: reserveRaw | ||
| }); | ||
| let config = { | ||
| url: pool.options.connectionString ? Redacted.make(pool.options.connectionString) : undefined, | ||
| host: pool.options.host, | ||
| port: pool.options.port, | ||
| database: pool.options.database, | ||
| username: pool.options.user, | ||
| password: typeof pool.options.password === "string" ? Redacted.make(pool.options.password) : undefined, | ||
| ssl: pool.options.ssl, | ||
| applicationName: pool.options.application_name, | ||
| types: pool.options.types | ||
| }; | ||
| if (pool.options.connectionString) { | ||
| // @effect-diagnostics-next-line tryCatchInEffectGen:off | ||
| try { | ||
| const parsed = PgConnString.parse(pool.options.connectionString); | ||
| config = { | ||
| ...config, | ||
| host: config.host ?? parsed.host ?? undefined, | ||
| port: config.port ?? (parsed.port ? Number.parse(parsed.port) : undefined), | ||
| username: config.username ?? parsed.user ?? undefined, | ||
| password: config.password ?? (parsed.password ? Redacted.make(parsed.password) : undefined), | ||
| database: config.database ?? parsed.database ?? undefined | ||
| }; | ||
| } catch { | ||
| // | ||
| } | ||
| } | ||
| return Object.assign(yield* Client.make({ | ||
| acquirer: Effect.succeed(new ConnectionImpl()), | ||
| transactionAcquirer: reserve, | ||
| compiler, | ||
| spanAttributes: [...(options.spanAttributes ? Object.entries(options.spanAttributes) : []), [ATTR_DB_SYSTEM_NAME, "postgresql"], [ATTR_DB_NAMESPACE, config.database ?? config.username ?? "postgres"], [ATTR_SERVER_ADDRESS, config.host ?? "localhost"], [ATTR_SERVER_PORT, config.port ?? 5432]], | ||
| transformRows | ||
| }), { | ||
| [TypeId]: TypeId, | ||
| config, | ||
| json: _ => Statement.fragment([PgJson(_)]), | ||
| listen: channel => Stream.callback(Effect.fnUntraced(function* (queue) { | ||
| const client = yield* RcRef.get(listenClient); | ||
| function onNotification(msg) { | ||
| if (msg.channel === channel && msg.payload) { | ||
| Queue.offerUnsafe(queue, msg.payload); | ||
| } | ||
| } | ||
| yield* Effect.addFinalizer(() => Effect.promise(() => { | ||
| client.off("notification", onNotification); | ||
| return client.query(`UNLISTEN ${Pg.escapeIdentifier(channel)}`); | ||
| })); | ||
| yield* Effect.tryPromise({ | ||
| try: () => client.query(`LISTEN ${Pg.escapeIdentifier(channel)}`), | ||
| catch: cause => new SqlError({ | ||
| cause, | ||
| message: "Failed to listen" | ||
| }) | ||
| }); | ||
| client.on("notification", onNotification); | ||
| })), | ||
| notify: (channel, payload) => Effect.callback(resume => { | ||
| pool.query(`NOTIFY ${Pg.escapeIdentifier(channel)}, $1`, [payload], err => { | ||
| if (err) { | ||
| resume(Effect.fail(new SqlError({ | ||
| cause: err, | ||
| message: "Failed to notify" | ||
| }))); | ||
| } else { | ||
| resume(Effect.void); | ||
| } | ||
| }); | ||
| }) | ||
| }); | ||
| }); | ||
| const cancelEffects = /*#__PURE__*/new WeakMap(); | ||
| const makeCancel = (pool, client) => { | ||
| if (cancelEffects.has(client)) { | ||
| return cancelEffects.get(client); | ||
| } | ||
| const processId = client.processID; | ||
| const eff = processId !== undefined | ||
| // query cancelation is best-effort, so we don't fail if it doesn't work | ||
| ? Effect.callback(resume => { | ||
| if (pool.ending) return resume(Effect.void); | ||
| pool.query(`SELECT pg_cancel_backend(${processId})`, () => { | ||
| resume(Effect.void); | ||
| }); | ||
| }).pipe(Effect.interruptible, Effect.timeoutOption(5000)) : undefined; | ||
| cancelEffects.set(client, eff); | ||
| return eff; | ||
| }; | ||
| /** | ||
| * @category layers | ||
| * @since 1.0.0 | ||
| */ | ||
| export const layerConfig = config => Layer.effectServices(Config.unwrap(config).asEffect().pipe(Effect.flatMap(make), Effect.map(client => ServiceMap.make(PgClient, client).pipe(ServiceMap.add(Client.SqlClient, client))))).pipe(Layer.provide(Reactivity.layer)); | ||
| /** | ||
| * @category layers | ||
| * @since 1.0.0 | ||
| */ | ||
| export const layer = config => Layer.effectServices(Effect.map(make(config), client => ServiceMap.make(PgClient, client).pipe(ServiceMap.add(Client.SqlClient, client)))).pipe(Layer.provide(Reactivity.layer)); | ||
| /** | ||
| * @category layers | ||
| * @since 1.0.0 | ||
| */ | ||
| export const layerFromPool = options => Layer.effectServices(Effect.map(fromPool(options), client => ServiceMap.make(PgClient, client).pipe(ServiceMap.add(Client.SqlClient, client)))).pipe(Layer.provide(Reactivity.layer)); | ||
| /** | ||
| * @category constructor | ||
| * @since 1.0.0 | ||
| */ | ||
| export const makeCompiler = (transform, transformJson = true) => { | ||
| const transformValue = transformJson && transform ? Statement.defaultTransforms(transform).value : undefined; | ||
| return Statement.makeCompiler({ | ||
| dialect: "pg", | ||
| placeholder(_) { | ||
| return `$${_}`; | ||
| }, | ||
| onIdentifier: transform ? function (value, withoutTransform) { | ||
| return withoutTransform ? escape(value) : escape(transform(value)); | ||
| } : escape, | ||
| onRecordUpdate(placeholders, valueAlias, valueColumns, values, returning) { | ||
| return [`(values ${placeholders}) AS ${valueAlias}${valueColumns}${returning ? ` RETURNING ${returning[0]}` : ""}`, returning ? values.flat().concat(returning[1]) : values.flat()]; | ||
| }, | ||
| onCustom(type, placeholder, withoutTransform) { | ||
| switch (type.kind) { | ||
| case "PgJson": | ||
| { | ||
| return [placeholder(undefined), [withoutTransform || transformValue === undefined ? type.paramA : transformValue(type.paramA)]]; | ||
| } | ||
| } | ||
| } | ||
| }); | ||
| }; | ||
| const escape = /*#__PURE__*/Statement.defaultEscape("\""); | ||
| /** | ||
| * @category custom types | ||
| * @since 1.0.0 | ||
| */ | ||
| const PgJson = /*#__PURE__*/Statement.custom("PgJson"); | ||
| //# sourceMappingURL=PgClient.js.map |
| {"version":3,"file":"PgClient.js","names":["Arr","Cause","Channel","Config","Duration","Effect","Fiber","Layer","Number","Queue","RcRef","Redacted","Scope","ServiceMap","Stream","Reactivity","Client","SqlError","Statement","Pg","PgConnString","Cursor","ATTR_DB_SYSTEM_NAME","ATTR_DB_NAMESPACE","ATTR_SERVER_ADDRESS","ATTR_SERVER_PORT","TypeId","PgClient","Service","make","options","fromPool","acquire","gen","pool","Pool","connectionString","url","value","undefined","user","username","host","database","password","ssl","port","stream","connectionTimeoutMillis","connectTimeout","toMillis","fromDurationInputUnsafe","idleTimeoutMillis","idleTimeout","max","maxConnections","min","minConnections","maxLifetimeSeconds","connectionTTL","toSeconds","application_name","applicationName","types","on","_err","acquireRelease","tryPromise","try","query","catch","cause","message","promise","end","pipe","timeoutOption","timeoutOrElse","duration","seconds","onTimeout","fail","Error","fnUntraced","compiler","makeCompiler","transformQueryNames","transformJson","transformRows","transformResultNames","defaultTransforms","array","ConnectionImpl","pg","constructor","runWithClient","f","callback","resume","makeCancel","done","cancel","client","onError","cleanup","release","off","connect","client_","once","eff","suspend","void","ensuring","sync","run","params","err","result","succeed","Array","isArray","map","r","rows","execute","sql","executeRaw","executeWithoutTransform","executeValues","text","rowMode","values","executeUnprepared","executeStream","self","fromChannel","fromTransform","_","scope","provide","reserveRaw","addFinalizer","cursor","close","read","isArrayNonEmpty","fiber","getCurrent","getUnsafe","services","as","cause_","reserve","listenClient","config","parsed","parse","Object","assign","acquirer","transactionAcquirer","spanAttributes","entries","json","fragment","PgJson","listen","channel","queue","get","onNotification","msg","payload","offerUnsafe","escapeIdentifier","notify","cancelEffects","WeakMap","has","processId","processID","ending","interruptible","set","layerConfig","effectServices","unwrap","asEffect","flatMap","add","SqlClient","layer","layerFromPool","transform","transformValue","dialect","placeholder","onIdentifier","withoutTransform","escape","onRecordUpdate","placeholders","valueAlias","valueColumns","returning","flat","concat","onCustom","type","kind","paramA","defaultEscape","custom"],"sources":["../src/PgClient.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]} |
| /** | ||
| * @since 1.0.0 | ||
| */ | ||
| import type * as Effect from "effect/Effect"; | ||
| import * as Layer from "effect/Layer"; | ||
| import * as Migrator from "effect/unstable/sql/Migrator"; | ||
| import type * as Client from "effect/unstable/sql/SqlClient"; | ||
| import type { SqlError } from "effect/unstable/sql/SqlError"; | ||
| /** | ||
| * @since 1.0.0 | ||
| */ | ||
| export * from "effect/unstable/sql/Migrator"; | ||
| /** | ||
| * @category constructor | ||
| * @since 1.0.0 | ||
| */ | ||
| export declare const run: <R2 = never>(options: Migrator.MigratorOptions<R2>) => Effect.Effect<ReadonlyArray<readonly [id: number, name: string]>, Migrator.MigrationError | SqlError, Client.SqlClient | R2>; | ||
| /** | ||
| * @category layers | ||
| * @since 1.0.0 | ||
| */ | ||
| export declare const layer: <R>(options: Migrator.MigratorOptions<R>) => Layer.Layer<never, Migrator.MigrationError | SqlError, Client.SqlClient | R>; | ||
| //# sourceMappingURL=PgMigrator.d.ts.map |
| {"version":3,"file":"PgMigrator.d.ts","sourceRoot":"","sources":["../src/PgMigrator.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,KAAK,MAAM,MAAM,eAAe,CAAA;AAC5C,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AACrC,OAAO,KAAK,QAAQ,MAAM,8BAA8B,CAAA;AACxD,OAAO,KAAK,KAAK,MAAM,MAAM,+BAA+B,CAAA;AAC5D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAA;AAE5D;;GAEG;AACH,cAAc,8BAA8B,CAAA;AAE5C;;;GAGG;AACH,eAAO,MAAM,GAAG,EAAE,CAAC,EAAE,GAAG,KAAK,EAC3B,OAAO,EAAE,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC,KAClC,MAAM,CAAC,MAAM,CAChB,aAAa,CAAC,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,EAClD,QAAQ,CAAC,cAAc,GAAG,QAAQ,EAClC,MAAM,CAAC,SAAS,GAAG,EAAE,CA0DrB,CAAA;AAEF;;;GAGG;AACH,eAAO,MAAM,KAAK,GAAI,CAAC,EACrB,SAAS,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC,KACnC,KAAK,CAAC,KAAK,CACZ,KAAK,EACL,QAAQ,CAAC,cAAc,GAAG,QAAQ,EAClC,MAAM,CAAC,SAAS,GAAG,CAAC,CACgB,CAAA"} |
| import * as Layer from "effect/Layer"; | ||
| import * as Migrator from "effect/unstable/sql/Migrator"; | ||
| /** | ||
| * @since 1.0.0 | ||
| */ | ||
| export * from "effect/unstable/sql/Migrator"; | ||
| /** | ||
| * @category constructor | ||
| * @since 1.0.0 | ||
| */ | ||
| export const run = /*#__PURE__*/Migrator.make({ | ||
| // TODO: Wait for Command module | ||
| // dumpSchema(path, table) { | ||
| // const pgDump = (args: Array<string>) => | ||
| // Effect.gen(function*() { | ||
| // const sql = yield* PgClient | ||
| // const dump = yield* pipe( | ||
| // Command.make("pg_dump", ...args, "--no-owner", "--no-privileges"), | ||
| // Command.env({ | ||
| // PATH: (globalThis as any).process?.env.PATH, | ||
| // PGHOST: sql.config.host, | ||
| // PGPORT: sql.config.port?.toString(), | ||
| // PGUSER: sql.config.username, | ||
| // PGPASSWORD: sql.config.password | ||
| // ? Redacted.value(sql.config.password) | ||
| // : undefined, | ||
| // PGDATABASE: sql.config.database, | ||
| // PGSSLMODE: sql.config.ssl ? "require" : "prefer" | ||
| // }), | ||
| // Command.string | ||
| // ) | ||
| // | ||
| // return dump.replace(/^--.*$/gm, "") | ||
| // .replace(/^SET .*$/gm, "") | ||
| // .replace(/^SELECT pg_catalog\..*$/gm, "") | ||
| // .replace(/\n{2,}/gm, "\n\n") | ||
| // .trim() | ||
| // }).pipe( | ||
| // Effect.mapError((error) => new Migrator.MigrationError({ kind: "Failed", message: error.message })) | ||
| // ) | ||
| // | ||
| // const pgDumpSchema = pgDump(["--schema-only"]) | ||
| // | ||
| // const pgDumpMigrations = pgDump([ | ||
| // "--column-inserts", | ||
| // "--data-only", | ||
| // `--table=${table}` | ||
| // ]) | ||
| // | ||
| // const pgDumpAll = Effect.map( | ||
| // Effect.all([pgDumpSchema, pgDumpMigrations], { concurrency: 2 }), | ||
| // ([schema, migrations]) => schema + "\n\n" + migrations | ||
| // ) | ||
| // | ||
| // const pgDumpFile = (path: string) => | ||
| // Effect.gen(function*() { | ||
| // const fs = yield* FileSystem | ||
| // const path_ = yield* Path | ||
| // const dump = yield* pgDumpAll | ||
| // yield* fs.makeDirectory(path_.dirname(path), { recursive: true }) | ||
| // yield* fs.writeFileString(path, dump) | ||
| // }).pipe( | ||
| // Effect.mapError((error) => new Migrator.MigrationError({ kind: "Failed", message: error.message })) | ||
| // ) | ||
| // | ||
| // return pgDumpFile(path) | ||
| // } | ||
| }); | ||
| /** | ||
| * @category layers | ||
| * @since 1.0.0 | ||
| */ | ||
| export const layer = options => Layer.effectDiscard(run(options)); | ||
| //# sourceMappingURL=PgMigrator.js.map |
| {"version":3,"file":"PgMigrator.js","names":["Layer","Migrator","run","make","layer","options","effectDiscard"],"sources":["../src/PgMigrator.ts"],"sourcesContent":[null],"mappings":"AAIA,OAAO,KAAKA,KAAK,MAAM,cAAc;AACrC,OAAO,KAAKC,QAAQ,MAAM,8BAA8B;AAIxD;;;AAGA,cAAc,8BAA8B;AAE5C;;;;AAIA,OAAO,MAAMC,GAAG,gBAMZD,QAAQ,CAACE,IAAI,CAAC;EAChB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAAA,CACD,CAAC;AAEF;;;;AAIA,OAAO,MAAMC,KAAK,GAChBC,OAAoC,IAKjCL,KAAK,CAACM,aAAa,CAACJ,GAAG,CAACG,OAAO,CAAC,CAAC","ignoreList":[]} |
+56
-54
| { | ||
| "name": "@effect/sql-pg", | ||
| "version": "0.50.3", | ||
| "version": "4.0.0-beta.0", | ||
| "type": "module", | ||
| "license": "MIT", | ||
| "description": "A PostgreSQL toolkit for Effect", | ||
| "license": "MIT", | ||
| "homepage": "https://effect.website", | ||
| "repository": { | ||
| "type": "git", | ||
| "url": "https://github.com/Effect-TS/effect.git", | ||
| "directory": "packages/sql-pg" | ||
| "url": "https://github.com/Effect-TS/effect-smol.git", | ||
| "directory": "packages/sql/pg" | ||
| }, | ||
| "bugs": { | ||
| "url": "https://github.com/Effect-TS/effect-smol/issues" | ||
| }, | ||
| "tags": [ | ||
| "typescript", | ||
| "sql", | ||
| "database" | ||
| ], | ||
| "keywords": [ | ||
| "typescript", | ||
| "sql", | ||
| "database" | ||
| ], | ||
| "sideEffects": [], | ||
| "homepage": "https://effect.website", | ||
| "dependencies": { | ||
| "pg": "^8.16.3", | ||
| "pg-connection-string": "2.9.1", | ||
| "pg-cursor": "^2.15.3", | ||
| "pg-pool": "^3.10.1", | ||
| "pg-types": "^4.1.0" | ||
| "exports": { | ||
| "./package.json": "./package.json", | ||
| ".": "./dist/index.js", | ||
| "./*": "./dist/*.js", | ||
| "./internal/*": null, | ||
| "./*/index": null | ||
| }, | ||
| "peerDependencies": { | ||
| "@effect/experimental": "^0.58.0", | ||
| "@effect/platform": "^0.94.4", | ||
| "@effect/sql": "^0.49.0", | ||
| "effect": "^3.19.16" | ||
| }, | ||
| "files": [ | ||
| "src/**/*.ts", | ||
| "dist/**/*.js", | ||
| "dist/**/*.js.map", | ||
| "dist/**/*.d.ts", | ||
| "dist/**/*.d.ts.map" | ||
| ], | ||
| "publishConfig": { | ||
| "access": "public", | ||
| "provenance": true | ||
| }, | ||
| "main": "./dist/cjs/index.js", | ||
| "module": "./dist/esm/index.js", | ||
| "types": "./dist/dts/index.d.ts", | ||
| "exports": { | ||
| "./package.json": "./package.json", | ||
| ".": { | ||
| "types": "./dist/dts/index.d.ts", | ||
| "import": "./dist/esm/index.js", | ||
| "default": "./dist/cjs/index.js" | ||
| }, | ||
| "./PgClient": { | ||
| "types": "./dist/dts/PgClient.d.ts", | ||
| "import": "./dist/esm/PgClient.js", | ||
| "default": "./dist/cjs/PgClient.js" | ||
| }, | ||
| "./PgMigrator": { | ||
| "types": "./dist/dts/PgMigrator.d.ts", | ||
| "import": "./dist/esm/PgMigrator.js", | ||
| "default": "./dist/cjs/PgMigrator.js" | ||
| }, | ||
| "./index": { | ||
| "types": "./dist/dts/index.d.ts", | ||
| "import": "./dist/esm/index.js", | ||
| "default": "./dist/cjs/index.js" | ||
| } | ||
| "devDependencies": { | ||
| "@testcontainers/postgresql": "^11.11.0", | ||
| "@types/pg": "^8.16.0", | ||
| "@types/pg-cursor": "^2.7.2", | ||
| "effect": "^4.0.0-beta.0" | ||
| }, | ||
| "typesVersions": { | ||
| "*": { | ||
| "PgClient": [ | ||
| "./dist/dts/PgClient.d.ts" | ||
| ], | ||
| "PgMigrator": [ | ||
| "./dist/dts/PgMigrator.d.ts" | ||
| ], | ||
| "index": [ | ||
| "./dist/dts/index.d.ts" | ||
| ] | ||
| } | ||
| "peerDependencies": { | ||
| "effect": "^4.0.0-beta.0" | ||
| }, | ||
| "dependencies": { | ||
| "pg": "^8.18.0", | ||
| "pg-connection-string": "2.11.0", | ||
| "pg-cursor": "^2.17.0", | ||
| "pg-pool": "^3.11.0", | ||
| "pg-types": "^4.1.0" | ||
| }, | ||
| "scripts": { | ||
| "codegen": "effect-utils codegen", | ||
| "build": "tsc -b tsconfig.json && pnpm babel", | ||
| "build:tsgo": "tsgo -b tsconfig.json && pnpm babel", | ||
| "babel": "babel dist --plugins annotate-pure-calls --out-dir dist --source-maps", | ||
| "check": "tsc -b tsconfig.json", | ||
| "test": "vitest", | ||
| "coverage": "vitest --coverage" | ||
| } | ||
| } |
+8
-2
| /** | ||
| * @since 1.0.0 | ||
| */ | ||
| export * as PgClient from "./PgClient.js" | ||
| // @barrel: Auto-generated exports. Do not edit manually. | ||
| /** | ||
| * @since 1.0.0 | ||
| */ | ||
| export * as PgMigrator from "./PgMigrator.js" | ||
| export * as PgClient from "./PgClient.ts" | ||
| /** | ||
| * @since 1.0.0 | ||
| */ | ||
| export * as PgMigrator from "./PgMigrator.ts" |
+331
-376
| /** | ||
| * @since 1.0.0 | ||
| */ | ||
| import * as Reactivity from "@effect/experimental/Reactivity" | ||
| import * as Client from "@effect/sql/SqlClient" | ||
| import type { Connection } from "@effect/sql/SqlConnection" | ||
| import { SqlError } from "@effect/sql/SqlError" | ||
| import type { Custom, Fragment } from "@effect/sql/Statement" | ||
| import * as Statement from "@effect/sql/Statement" | ||
| import * as Arr from "effect/Array" | ||
| import * as Chunk from "effect/Chunk" | ||
| import * as Cause from "effect/Cause" | ||
| import * as Channel from "effect/Channel" | ||
| import * as Config from "effect/Config" | ||
| import type * as ConfigError from "effect/ConfigError" | ||
| import * as Context from "effect/Context" | ||
| import * as Duration from "effect/Duration" | ||
@@ -20,7 +13,14 @@ import * as Effect from "effect/Effect" | ||
| import * as Number from "effect/Number" | ||
| import * as Option from "effect/Option" | ||
| import * as Queue from "effect/Queue" | ||
| import * as RcRef from "effect/RcRef" | ||
| import * as Redacted from "effect/Redacted" | ||
| import * as Scope from "effect/Scope" | ||
| import * as ServiceMap from "effect/ServiceMap" | ||
| import * as Stream from "effect/Stream" | ||
| import * as Reactivity from "effect/unstable/reactivity/Reactivity" | ||
| import * as Client from "effect/unstable/sql/SqlClient" | ||
| import type { Connection } from "effect/unstable/sql/SqlConnection" | ||
| import { SqlError } from "effect/unstable/sql/SqlError" | ||
| import type { Custom, Fragment } from "effect/unstable/sql/Statement" | ||
| import * as Statement from "effect/unstable/sql/Statement" | ||
| import type { Duplex } from "node:stream" | ||
@@ -65,3 +65,3 @@ import type { ConnectionOptions } from "node:tls" | ||
| */ | ||
| export const PgClient = Context.GenericTag<PgClient>("@effect/sql-pg/PgClient") | ||
| export const PgClient = ServiceMap.Service<PgClient>("@effect/sql-pg/PgClient") | ||
@@ -101,203 +101,251 @@ /** | ||
| type ClientOptions = { | ||
| readonly spanAttributes?: Record<string, unknown> | undefined | ||
| readonly transformResultNames?: ((str: string) => string) | undefined | ||
| readonly transformQueryNames?: ((str: string) => string) | undefined | ||
| readonly transformJson?: boolean | undefined | ||
| } | ||
| /** | ||
| * @category constructors | ||
| * @since 1.0.0 | ||
| */ | ||
| export const make = ( | ||
| options: PgClientConfig | ||
| ): Effect.Effect<PgClient, SqlError, Scope.Scope | Reactivity.Reactivity> => | ||
| fromPool({ | ||
| ...options, | ||
| acquire: Effect.gen(function*() { | ||
| const pool = new Pg.Pool({ | ||
| connectionString: options.url ? Redacted.value(options.url) : undefined, | ||
| user: options.username, | ||
| host: options.host, | ||
| database: options.database, | ||
| password: options.password ? Redacted.value(options.password) : undefined, | ||
| ssl: options.ssl, | ||
| port: options.port, | ||
| ...(options.stream ? { stream: options.stream } : {}), | ||
| connectionTimeoutMillis: options.connectTimeout | ||
| ? Duration.toMillis(Duration.fromDurationInputUnsafe(options.connectTimeout)) | ||
| : undefined, | ||
| idleTimeoutMillis: options.idleTimeout | ||
| ? Duration.toMillis(Duration.fromDurationInputUnsafe(options.idleTimeout)) | ||
| : undefined, | ||
| max: options.maxConnections, | ||
| min: options.minConnections, | ||
| maxLifetimeSeconds: options.connectionTTL | ||
| ? Duration.toSeconds(Duration.fromDurationInputUnsafe(options.connectionTTL)) | ||
| : undefined, | ||
| application_name: options.applicationName ?? "@effect/sql-pg", | ||
| types: options.types | ||
| }) | ||
| const makeClient = ( | ||
| pool: Pg.Pool, | ||
| config: PgClientConfig, | ||
| options: ClientOptions | ||
| ): Effect.Effect<PgClient, SqlError, Scope.Scope | Reactivity.Reactivity> => | ||
| Effect.gen(function*() { | ||
| const compiler = makeCompiler( | ||
| options.transformQueryNames, | ||
| pool.on("error", (_err) => {}) | ||
| yield* Effect.acquireRelease( | ||
| Effect.tryPromise({ | ||
| try: () => pool.query("SELECT 1"), | ||
| catch: (cause) => new SqlError({ cause, message: "PgClient: Failed to connect" }) | ||
| }), | ||
| () => | ||
| Effect.promise(() => pool.end()).pipe( | ||
| Effect.timeoutOption(1000) | ||
| ) | ||
| ).pipe( | ||
| Effect.timeoutOrElse({ | ||
| duration: options.connectTimeout ?? Duration.seconds(5), | ||
| onTimeout: () => | ||
| Effect.fail( | ||
| new SqlError({ | ||
| cause: new Error("Connection timed out"), | ||
| message: "PgClient: Connection timed out" | ||
| }) | ||
| ) | ||
| }) | ||
| ) | ||
| return pool | ||
| }) | ||
| }) | ||
| /** | ||
| * @category constructors | ||
| * @since 1.0.0 | ||
| */ | ||
| export const fromPool = Effect.fnUntraced(function*( | ||
| options: { | ||
| readonly acquire: Effect.Effect<Pg.Pool, SqlError, Scope.Scope> | ||
| readonly applicationName?: string | undefined | ||
| readonly spanAttributes?: Record<string, unknown> | undefined | ||
| readonly transformResultNames?: ((str: string) => string) | undefined | ||
| readonly transformQueryNames?: ((str: string) => string) | undefined | ||
| readonly transformJson?: boolean | undefined | ||
| readonly types?: Pg.CustomTypesConfig | undefined | ||
| } | ||
| ): Effect.fn.Return<PgClient, SqlError, Scope.Scope | Reactivity.Reactivity> { | ||
| const compiler = makeCompiler( | ||
| options.transformQueryNames, | ||
| options.transformJson | ||
| ) | ||
| const transformRows = options.transformResultNames ? | ||
| Statement.defaultTransforms( | ||
| options.transformResultNames, | ||
| options.transformJson | ||
| ) | ||
| const transformRows = options.transformResultNames ? | ||
| Statement.defaultTransforms( | ||
| options.transformResultNames, | ||
| options.transformJson | ||
| ).array : | ||
| undefined | ||
| ).array : | ||
| undefined | ||
| class ConnectionImpl implements Connection { | ||
| readonly pg: Pg.PoolClient | undefined | ||
| constructor(pg?: Pg.PoolClient) { | ||
| this.pg = pg | ||
| const pool = yield* options.acquire | ||
| class ConnectionImpl implements Connection { | ||
| readonly pg: Pg.PoolClient | undefined | ||
| constructor(pg?: Pg.PoolClient) { | ||
| this.pg = pg | ||
| } | ||
| private runWithClient<A>(f: (client: Pg.PoolClient, resume: (_: Effect.Effect<A, SqlError>) => void) => void) { | ||
| if (this.pg !== undefined) { | ||
| return Effect.callback<A, SqlError>((resume) => { | ||
| f(this.pg!, resume) | ||
| return makeCancel(pool, this.pg!) | ||
| }) | ||
| } | ||
| private runWithClient<A>(f: (client: Pg.PoolClient, resume: (_: Effect.Effect<A, SqlError>) => void) => void) { | ||
| if (this.pg !== undefined) { | ||
| return Effect.async<A, SqlError>((resume) => { | ||
| f(this.pg!, resume) | ||
| return makeCancel(pool, this.pg!) | ||
| }) | ||
| return Effect.callback<A, SqlError>((resume) => { | ||
| let done = false | ||
| let cancel: Effect.Effect<void> | undefined = undefined | ||
| let client: Pg.PoolClient | undefined = undefined | ||
| function onError(cause: Error) { | ||
| cleanup(cause) | ||
| resume(Effect.fail(new SqlError({ cause, message: "Connection error" }))) | ||
| } | ||
| return Effect.async<A, SqlError>((resume) => { | ||
| let done = false | ||
| let cancel: Effect.Effect<void> | undefined = undefined | ||
| let client: Pg.PoolClient | undefined = undefined | ||
| function onError(cause: Error) { | ||
| cleanup(cause) | ||
| resume(Effect.fail(new SqlError({ cause, message: "Connection error" }))) | ||
| function cleanup(cause?: Error) { | ||
| if (!done) client?.release(cause) | ||
| done = true | ||
| client?.off("error", onError) | ||
| } | ||
| pool.connect((cause, client_) => { | ||
| if (cause) { | ||
| return resume(Effect.fail(new SqlError({ cause, message: "Failed to acquire connection" }))) | ||
| } else if (!client_) { | ||
| return resume( | ||
| Effect.fail( | ||
| new SqlError({ message: "Failed to acquire connection", cause: new Error("No client returned") }) | ||
| ) | ||
| ) | ||
| } else if (done) { | ||
| client_.release() | ||
| return | ||
| } | ||
| function cleanup(cause?: Error) { | ||
| if (!done) client?.release(cause) | ||
| done = true | ||
| client?.off("error", onError) | ||
| } | ||
| pool.connect((cause, client_) => { | ||
| if (cause) { | ||
| return resume(Effect.fail(new SqlError({ cause, message: "Failed to acquire connection" }))) | ||
| } else if (!client_) { | ||
| return resume( | ||
| Effect.fail( | ||
| new SqlError({ message: "Failed to acquire connection", cause: new Error("No client returned") }) | ||
| ) | ||
| ) | ||
| } else if (done) { | ||
| client_.release() | ||
| return | ||
| } | ||
| client = client_ | ||
| client.once("error", onError) | ||
| cancel = makeCancel(pool, client) | ||
| f(client, (eff) => { | ||
| cleanup() | ||
| resume(eff) | ||
| }) | ||
| client = client_ | ||
| client.once("error", onError) | ||
| cancel = makeCancel(pool, client) | ||
| f(client, (eff) => { | ||
| cleanup() | ||
| resume(eff) | ||
| }) | ||
| return Effect.suspend(() => { | ||
| if (!cancel) { | ||
| cleanup() | ||
| return Effect.void | ||
| } | ||
| return Effect.ensuring(cancel, Effect.sync(cleanup)) | ||
| }) | ||
| }) | ||
| } | ||
| return Effect.suspend(() => { | ||
| if (!cancel) { | ||
| cleanup() | ||
| return Effect.void | ||
| } | ||
| return Effect.ensuring(cancel, Effect.sync(cleanup)) | ||
| }) | ||
| }) | ||
| } | ||
| private run(query: string, params: ReadonlyArray<unknown>) { | ||
| return this.runWithClient<ReadonlyArray<any>>((client, resume) => { | ||
| client.query(query, params as any, (err, result) => { | ||
| private run(query: string, params: ReadonlyArray<unknown>) { | ||
| return this.runWithClient<ReadonlyArray<any>>((client, resume) => { | ||
| client.query(query, params as any, (err, result) => { | ||
| if (err) { | ||
| resume(Effect.fail(new SqlError({ cause: err, message: "Failed to execute statement" }))) | ||
| } else { | ||
| // Multi-statement queries return an array of results | ||
| resume(Effect.succeed( | ||
| Array.isArray(result) | ||
| ? result.map((r) => r.rows ?? []) | ||
| : result.rows ?? [] | ||
| )) | ||
| } | ||
| }) | ||
| }) | ||
| } | ||
| execute( | ||
| sql: string, | ||
| params: ReadonlyArray<unknown>, | ||
| transformRows: (<A extends object>(row: ReadonlyArray<A>) => ReadonlyArray<A>) | undefined | ||
| ) { | ||
| return transformRows | ||
| ? Effect.map(this.run(sql, params), transformRows) | ||
| : this.run(sql, params) | ||
| } | ||
| executeRaw(sql: string, params: ReadonlyArray<unknown>) { | ||
| return this.runWithClient<Pg.Result>((client, resume) => { | ||
| client.query(sql, params as any, (err, result) => { | ||
| if (err) { | ||
| resume(Effect.fail(new SqlError({ cause: err, message: "Failed to execute statement" }))) | ||
| } else { | ||
| resume(Effect.succeed(result)) | ||
| } | ||
| }) | ||
| }) | ||
| } | ||
| executeWithoutTransform(sql: string, params: ReadonlyArray<unknown>) { | ||
| return this.run(sql, params) | ||
| } | ||
| executeValues(sql: string, params: ReadonlyArray<unknown>) { | ||
| return this.runWithClient<ReadonlyArray<any>>((client, resume) => { | ||
| client.query( | ||
| { | ||
| text: sql, | ||
| rowMode: "array", | ||
| values: params as Array<string> | ||
| }, | ||
| (err, result) => { | ||
| if (err) { | ||
| resume(Effect.fail(new SqlError({ cause: err, message: "Failed to execute statement" }))) | ||
| } else { | ||
| // Multi-statement queries return an array of results | ||
| resume(Effect.succeed( | ||
| Array.isArray(result) | ||
| ? result.map((r) => r.rows ?? []) | ||
| : result.rows ?? [] | ||
| )) | ||
| resume(Effect.succeed(result.rows)) | ||
| } | ||
| }) | ||
| }) | ||
| } | ||
| execute( | ||
| sql: string, | ||
| params: ReadonlyArray<unknown>, | ||
| transformRows: (<A extends object>(row: ReadonlyArray<A>) => ReadonlyArray<A>) | undefined | ||
| ) { | ||
| return transformRows | ||
| ? Effect.map(this.run(sql, params), transformRows) | ||
| : this.run(sql, params) | ||
| } | ||
| executeRaw(sql: string, params: ReadonlyArray<unknown>) { | ||
| return this.runWithClient<Pg.Result>((client, resume) => { | ||
| client.query(sql, params as any, (err, result) => { | ||
| } | ||
| ) | ||
| }) | ||
| } | ||
| executeUnprepared( | ||
| sql: string, | ||
| params: ReadonlyArray<unknown>, | ||
| transformRows: (<A extends object>(row: ReadonlyArray<A>) => ReadonlyArray<A>) | undefined | ||
| ) { | ||
| return this.execute(sql, params, transformRows) | ||
| } | ||
| executeStream( | ||
| sql: string, | ||
| params: ReadonlyArray<unknown>, | ||
| transformRows: (<A extends object>(row: ReadonlyArray<A>) => ReadonlyArray<A>) | undefined | ||
| ) { | ||
| // oxlint-disable-next-line @typescript-eslint/no-this-alias | ||
| const self = this | ||
| return Stream.fromChannel(Channel.fromTransform(Effect.fnUntraced(function*(_, scope) { | ||
| const client = self.pg ?? (yield* Scope.provide(reserveRaw, scope)) | ||
| yield* Scope.addFinalizer(scope, Effect.promise(() => cursor.close())) | ||
| const cursor = client.query(new Cursor(sql, params as any)) | ||
| // @effect-diagnostics-next-line returnEffectInGen:off | ||
| return Effect.callback<Arr.NonEmptyReadonlyArray<any>, SqlError | Cause.Done>((resume) => { | ||
| cursor.read(128, (err, rows) => { | ||
| if (err) { | ||
| resume(Effect.fail(new SqlError({ cause: err, message: "Failed to execute statement" }))) | ||
| } else if (Arr.isArrayNonEmpty(rows)) { | ||
| resume(Effect.succeed(transformRows ? transformRows(rows) as any : rows)) | ||
| } else { | ||
| resume(Effect.succeed(result)) | ||
| resume(Cause.done()) | ||
| } | ||
| }) | ||
| }) | ||
| } | ||
| executeWithoutTransform(sql: string, params: ReadonlyArray<unknown>) { | ||
| return this.run(sql, params) | ||
| } | ||
| executeValues(sql: string, params: ReadonlyArray<unknown>) { | ||
| return this.runWithClient<ReadonlyArray<any>>((client, resume) => { | ||
| client.query( | ||
| { | ||
| text: sql, | ||
| rowMode: "array", | ||
| values: params as Array<string> | ||
| }, | ||
| (err, result) => { | ||
| if (err) { | ||
| resume(Effect.fail(new SqlError({ cause: err, message: "Failed to execute statement" }))) | ||
| } else { | ||
| resume(Effect.succeed(result.rows)) | ||
| } | ||
| } | ||
| ) | ||
| }) | ||
| } | ||
| executeUnprepared( | ||
| sql: string, | ||
| params: ReadonlyArray<unknown>, | ||
| transformRows: (<A extends object>(row: ReadonlyArray<A>) => ReadonlyArray<A>) | undefined | ||
| ) { | ||
| return this.execute(sql, params, transformRows) | ||
| } | ||
| executeStream( | ||
| sql: string, | ||
| params: ReadonlyArray<unknown>, | ||
| transformRows: (<A extends object>(row: ReadonlyArray<A>) => ReadonlyArray<A>) | undefined | ||
| ) { | ||
| // eslint-disable-next-line @typescript-eslint/no-this-alias | ||
| const self = this | ||
| return Effect.gen(function*() { | ||
| const scope = yield* Effect.scope | ||
| const client = self.pg ?? (yield* reserveRaw) | ||
| yield* Scope.addFinalizer(scope, Effect.promise(() => cursor.close())) | ||
| const cursor = client.query(new Cursor(sql, params as any)) | ||
| const pull = Effect.async<Chunk.Chunk<any>, Option.Option<SqlError>>((resume) => { | ||
| cursor.read(128, (err, rows) => { | ||
| if (err) { | ||
| resume(Effect.fail(Option.some(new SqlError({ cause: err, message: "Failed to execute statement" })))) | ||
| } else if (Arr.isNonEmptyArray(rows)) { | ||
| resume(Effect.succeed(Chunk.unsafeFromArray(transformRows ? transformRows(rows) as any : rows))) | ||
| } else { | ||
| resume(Effect.fail(Option.none())) | ||
| } | ||
| }) | ||
| }) | ||
| return Stream.repeatEffectChunkOption(pull) | ||
| }).pipe( | ||
| Stream.unwrapScoped | ||
| ) | ||
| } | ||
| }))) | ||
| } | ||
| } | ||
| const reserveRaw = Effect.async<Pg.PoolClient, SqlError, Scope.Scope>((resume) => { | ||
| const fiber = Option.getOrThrow(Fiber.getCurrentFiber()) | ||
| const scope = Context.unsafeGet(fiber.currentContext, Scope.Scope) | ||
| let cause: Error | undefined = undefined | ||
| function onError(cause_: Error) { | ||
| cause = cause_ | ||
| } | ||
| pool.connect((err, client, release) => { | ||
| if (err) { | ||
| resume(Effect.fail(new SqlError({ cause: err, message: "Failed to acquire connection for transaction" }))) | ||
| return | ||
| } else if (!client) { | ||
| resume( | ||
| Effect.fail( | ||
| new SqlError({ | ||
| message: "Failed to acquire connection for transaction", | ||
| cause: new Error("No client returned") | ||
| }) | ||
| ) | ||
| ) | ||
| return | ||
| } | ||
| // Else we know we have client defined, so we can proceed with the connection | ||
| client.on("error", onError) | ||
| const reserveRaw = Effect.callback<Pg.PoolClient, SqlError, Scope.Scope>((resume) => { | ||
| const fiber = Fiber.getCurrent()! | ||
| const scope = ServiceMap.getUnsafe(fiber.services, Scope.Scope) | ||
| let cause: Error | undefined = undefined | ||
| pool.connect((err, client, release) => { | ||
| if (err) { | ||
| resume(Effect.fail(new SqlError({ cause: err, message: "Failed to acquire connection for transaction" }))) | ||
| } else { | ||
| resume(Effect.as( | ||
@@ -307,173 +355,21 @@ Scope.addFinalizer( | ||
| Effect.sync(() => { | ||
| client.off("error", onError) | ||
| client!.off("error", onError) | ||
| release(cause) | ||
| }) | ||
| ), | ||
| client | ||
| client! | ||
| )) | ||
| }) | ||
| } | ||
| function onError(cause_: Error) { | ||
| cause = cause_ | ||
| } | ||
| client!.on("error", onError) | ||
| }) | ||
| const reserve = Effect.map(reserveRaw, (client) => new ConnectionImpl(client)) | ||
| const listenClient = yield* RcRef.make({ | ||
| acquire: reserveRaw | ||
| }) | ||
| return Object.assign( | ||
| yield* Client.make({ | ||
| acquirer: Effect.succeed(new ConnectionImpl()), | ||
| transactionAcquirer: reserve, | ||
| compiler, | ||
| spanAttributes: [ | ||
| ...(options.spanAttributes ? Object.entries(options.spanAttributes) : []), | ||
| [ATTR_DB_SYSTEM_NAME, "postgresql"], | ||
| [ATTR_DB_NAMESPACE, config.database ?? config.username ?? "postgres"], | ||
| [ATTR_SERVER_ADDRESS, config.host ?? "localhost"], | ||
| [ATTR_SERVER_PORT, config.port ?? 5432] | ||
| ], | ||
| transformRows | ||
| }), | ||
| { | ||
| [TypeId]: TypeId as TypeId, | ||
| config, | ||
| json: (_: unknown) => PgJson(_), | ||
| listen: (channel: string) => | ||
| Stream.asyncPush<string, SqlError>(Effect.fnUntraced(function*(emit) { | ||
| const client = yield* RcRef.get(listenClient) | ||
| function onNotification(msg: Pg.Notification) { | ||
| if (msg.channel === channel && msg.payload) { | ||
| emit.single(msg.payload) | ||
| } | ||
| } | ||
| yield* Effect.addFinalizer(() => | ||
| Effect.promise(() => { | ||
| client.off("notification", onNotification) | ||
| return client.query(`UNLISTEN ${Pg.escapeIdentifier(channel)}`) | ||
| }) | ||
| ) | ||
| yield* Effect.tryPromise({ | ||
| try: () => client.query(`LISTEN ${Pg.escapeIdentifier(channel)}`), | ||
| catch: (cause) => new SqlError({ cause, message: "Failed to listen" }) | ||
| }) | ||
| client.on("notification", onNotification) | ||
| })), | ||
| notify: (channel: string, payload: string) => | ||
| Effect.async<void, SqlError>((resume) => { | ||
| pool.query(`NOTIFY ${Pg.escapeIdentifier(channel)}, $1`, [payload], (err) => { | ||
| if (err) { | ||
| resume(Effect.fail(new SqlError({ cause: err, message: "Failed to notify" }))) | ||
| } else { | ||
| resume(Effect.void) | ||
| } | ||
| }) | ||
| }) | ||
| } | ||
| ) | ||
| }) | ||
| const reserve = Effect.map(reserveRaw, (client) => new ConnectionImpl(client)) | ||
| /** | ||
| * @category constructors | ||
| * @since 1.0.0 | ||
| */ | ||
| export const make = ( | ||
| options: PgClientConfig | ||
| ): Effect.Effect<PgClient, SqlError, Scope.Scope | Reactivity.Reactivity> => | ||
| Effect.gen(function*() { | ||
| const pool = new Pg.Pool({ | ||
| connectionString: options.url ? Redacted.value(options.url) : undefined, | ||
| user: options.username, | ||
| host: options.host, | ||
| database: options.database, | ||
| password: options.password ? Redacted.value(options.password) : undefined, | ||
| ssl: options.ssl, | ||
| port: options.port, | ||
| ...(options.stream ? { stream: options.stream } : {}), | ||
| connectionTimeoutMillis: options.connectTimeout | ||
| ? Duration.toMillis(options.connectTimeout) | ||
| : undefined, | ||
| idleTimeoutMillis: options.idleTimeout | ||
| ? Duration.toMillis(options.idleTimeout) | ||
| : undefined, | ||
| max: options.maxConnections, | ||
| min: options.minConnections, | ||
| maxLifetimeSeconds: options.connectionTTL | ||
| ? Duration.toSeconds(options.connectionTTL) | ||
| : undefined, | ||
| application_name: options.applicationName ?? "@effect/sql-pg", | ||
| types: options.types | ||
| }) | ||
| pool.on("error", (_err) => { | ||
| }) | ||
| yield* Effect.acquireRelease( | ||
| Effect.tryPromise({ | ||
| try: () => pool.query("SELECT 1"), | ||
| catch: (cause) => new SqlError({ cause, message: "PgClient: Failed to connect" }) | ||
| }), | ||
| () => | ||
| Effect.promise(() => pool.end()).pipe( | ||
| Effect.interruptible, | ||
| Effect.timeoutOption(1000) | ||
| ) | ||
| ).pipe( | ||
| Effect.timeoutFail({ | ||
| duration: options.connectTimeout ?? Duration.seconds(5), | ||
| onTimeout: () => | ||
| new SqlError({ | ||
| cause: new Error("Connection timed out"), | ||
| message: "PgClient: Connection timed out" | ||
| }) | ||
| }) | ||
| ) | ||
| let config = options | ||
| if (pool.options.connectionString) { | ||
| try { | ||
| const parsed = PgConnString.parse(pool.options.connectionString) | ||
| config = { | ||
| ...config, | ||
| host: config.host ?? parsed.host ?? undefined, | ||
| port: config.port ?? (parsed.port ? Option.getOrUndefined(Number.parse(parsed.port)) : undefined), | ||
| username: config.username ?? parsed.user ?? undefined, | ||
| password: config.password ?? (parsed.password ? Redacted.make(parsed.password) : undefined), | ||
| database: config.database ?? parsed.database ?? undefined | ||
| } | ||
| } catch { | ||
| // | ||
| } | ||
| } | ||
| return yield* makeClient(pool, config, options) | ||
| const listenClient = yield* RcRef.make({ | ||
| acquire: reserveRaw | ||
| }) | ||
| /** | ||
| * @category constructors | ||
| * @since 1.0.0 | ||
| */ | ||
| export interface PgClientFromPoolOptions { | ||
| readonly acquire: Effect.Effect<Pg.Pool, SqlError, Scope.Scope> | ||
| readonly applicationName?: string | undefined | ||
| readonly spanAttributes?: Record<string, unknown> | undefined | ||
| readonly transformResultNames?: ((str: string) => string) | undefined | ||
| readonly transformQueryNames?: ((str: string) => string) | undefined | ||
| readonly transformJson?: boolean | undefined | ||
| readonly types?: Pg.CustomTypesConfig | undefined | ||
| } | ||
| /** | ||
| * Create a `PgClient` from an existing `pg` pool. | ||
| * | ||
| * You control the pool lifecycle via `acquire` (typically `Effect.acquireRelease`). | ||
| * | ||
| * @category constructors | ||
| * @since 1.0.0 | ||
| */ | ||
| export const fromPool = Effect.fnUntraced(function*( | ||
| options: PgClientFromPoolOptions | ||
| ): Effect.fn.Return<PgClient, SqlError, Scope.Scope | Reactivity.Reactivity> { | ||
| const pool = yield* options.acquire | ||
| let config: PgClientConfig = { | ||
@@ -487,7 +383,7 @@ url: pool.options.connectionString ? Redacted.make(pool.options.connectionString) : undefined, | ||
| ssl: pool.options.ssl, | ||
| applicationName: (pool.options as any).application_name, | ||
| applicationName: pool.options.application_name, | ||
| types: pool.options.types | ||
| } | ||
| if (pool.options.connectionString) { | ||
| // @effect-diagnostics-next-line tryCatchInEffectGen:off | ||
| try { | ||
@@ -498,3 +394,3 @@ const parsed = PgConnString.parse(pool.options.connectionString) | ||
| host: config.host ?? parsed.host ?? undefined, | ||
| port: config.port ?? (parsed.port ? Option.getOrUndefined(Number.parse(parsed.port)) : undefined), | ||
| port: config.port ?? (parsed.port ? Number.parse(parsed.port) : undefined), | ||
| username: config.username ?? parsed.user ?? undefined, | ||
@@ -509,3 +405,52 @@ password: config.password ?? (parsed.password ? Redacted.make(parsed.password) : undefined), | ||
| return yield* makeClient(pool, config, options) | ||
| return Object.assign( | ||
| yield* Client.make({ | ||
| acquirer: Effect.succeed(new ConnectionImpl()), | ||
| transactionAcquirer: reserve, | ||
| compiler, | ||
| spanAttributes: [ | ||
| ...(options.spanAttributes ? Object.entries(options.spanAttributes) : []), | ||
| [ATTR_DB_SYSTEM_NAME, "postgresql"], | ||
| [ATTR_DB_NAMESPACE, config.database ?? config.username ?? "postgres"], | ||
| [ATTR_SERVER_ADDRESS, config.host ?? "localhost"], | ||
| [ATTR_SERVER_PORT, config.port ?? 5432] | ||
| ], | ||
| transformRows | ||
| }), | ||
| { | ||
| [TypeId]: TypeId as TypeId, | ||
| config, | ||
| json: (_: unknown) => Statement.fragment([PgJson(_)]), | ||
| listen: (channel: string) => | ||
| Stream.callback<string, SqlError>(Effect.fnUntraced(function*(queue) { | ||
| const client = yield* RcRef.get(listenClient) | ||
| function onNotification(msg: Pg.Notification) { | ||
| if (msg.channel === channel && msg.payload) { | ||
| Queue.offerUnsafe(queue, msg.payload) | ||
| } | ||
| } | ||
| yield* Effect.addFinalizer(() => | ||
| Effect.promise(() => { | ||
| client.off("notification", onNotification) | ||
| return client.query(`UNLISTEN ${Pg.escapeIdentifier(channel)}`) | ||
| }) | ||
| ) | ||
| yield* Effect.tryPromise({ | ||
| try: () => client.query(`LISTEN ${Pg.escapeIdentifier(channel)}`), | ||
| catch: (cause) => new SqlError({ cause, message: "Failed to listen" }) | ||
| }) | ||
| client.on("notification", onNotification) | ||
| })), | ||
| notify: (channel: string, payload: string) => | ||
| Effect.callback<void, SqlError>((resume) => { | ||
| pool.query(`NOTIFY ${Pg.escapeIdentifier(channel)}, $1`, [payload], (err) => { | ||
| if (err) { | ||
| resume(Effect.fail(new SqlError({ cause: err, message: "Failed to notify" }))) | ||
| } else { | ||
| resume(Effect.void) | ||
| } | ||
| }) | ||
| }) | ||
| } | ||
| ) | ||
| }) | ||
@@ -521,3 +466,3 @@ | ||
| // query cancelation is best-effort, so we don't fail if it doesn't work | ||
| ? Effect.async<void>((resume) => { | ||
| ? Effect.callback<void>((resume) => { | ||
| if (pool.ending) return resume(Effect.void) | ||
@@ -540,11 +485,13 @@ pool.query(`SELECT pg_cancel_backend(${processId})`, () => { | ||
| */ | ||
| export const layerConfig = ( | ||
| config: Config.Config.Wrap<PgClientConfig> | ||
| ): Layer.Layer<PgClient | Client.SqlClient, ConfigError.ConfigError | SqlError> => | ||
| Layer.scopedContext( | ||
| Config.unwrap(config).pipe( | ||
| export const layerConfig: ( | ||
| config: Config.Wrap<PgClientConfig> | ||
| ) => Layer.Layer<PgClient | Client.SqlClient, Config.ConfigError | SqlError> = ( | ||
| config: Config.Wrap<PgClientConfig> | ||
| ): Layer.Layer<PgClient | Client.SqlClient, Config.ConfigError | SqlError> => | ||
| Layer.effectServices( | ||
| Config.unwrap(config).asEffect().pipe( | ||
| Effect.flatMap(make), | ||
| Effect.map((client) => | ||
| Context.make(PgClient, client).pipe( | ||
| Context.add(Client.SqlClient, client) | ||
| ServiceMap.make(PgClient, client).pipe( | ||
| ServiceMap.add(Client.SqlClient, client) | ||
| ) | ||
@@ -562,6 +509,6 @@ ) | ||
| ): Layer.Layer<PgClient | Client.SqlClient, SqlError> => | ||
| Layer.scopedContext( | ||
| Layer.effectServices( | ||
| Effect.map(make(config), (client) => | ||
| Context.make(PgClient, client).pipe( | ||
| Context.add(Client.SqlClient, client) | ||
| ServiceMap.make(PgClient, client).pipe( | ||
| ServiceMap.add(Client.SqlClient, client) | ||
| )) | ||
@@ -574,9 +521,17 @@ ).pipe(Layer.provide(Reactivity.layer)) | ||
| */ | ||
| export const layerFromPool = ( | ||
| options: PgClientFromPoolOptions | ||
| ): Layer.Layer<PgClient | Client.SqlClient, SqlError> => | ||
| Layer.scopedContext( | ||
| export const layerFromPool = (options: { | ||
| readonly acquire: Effect.Effect<Pg.Pool, SqlError, Scope.Scope> | ||
| readonly applicationName?: string | undefined | ||
| readonly spanAttributes?: Record<string, unknown> | undefined | ||
| readonly transformResultNames?: ((str: string) => string) | undefined | ||
| readonly transformQueryNames?: ((str: string) => string) | undefined | ||
| readonly transformJson?: boolean | undefined | ||
| readonly types?: Pg.CustomTypesConfig | undefined | ||
| }): Layer.Layer<PgClient | Client.SqlClient, SqlError> => | ||
| Layer.effectServices( | ||
| Effect.map(fromPool(options), (client) => | ||
| Context.make(PgClient, client).pipe( | ||
| Context.add(Client.SqlClient, client) | ||
| ServiceMap.make(PgClient, client).pipe( | ||
| ServiceMap.add(Client.SqlClient, client) | ||
| )) | ||
@@ -622,4 +577,4 @@ ).pipe(Layer.provide(Reactivity.layer)) | ||
| withoutTransform || transformValue === undefined | ||
| ? type.i0 | ||
| : transformValue(type.i0) | ||
| ? type.paramA | ||
| : transformValue(type.paramA) | ||
| ] | ||
@@ -626,0 +581,0 @@ ] |
+63
-74
| /** | ||
| * @since 1.0.0 | ||
| */ | ||
| import * as Command from "@effect/platform/Command" | ||
| import type { CommandExecutor } from "@effect/platform/CommandExecutor" | ||
| import { FileSystem } from "@effect/platform/FileSystem" | ||
| import { Path } from "@effect/platform/Path" | ||
| import * as Migrator from "@effect/sql/Migrator" | ||
| import type * as Client from "@effect/sql/SqlClient" | ||
| import type { SqlError } from "@effect/sql/SqlError" | ||
| import * as Effect from "effect/Effect" | ||
| import { pipe } from "effect/Function" | ||
| import type * as Effect from "effect/Effect" | ||
| import * as Layer from "effect/Layer" | ||
| import * as Redacted from "effect/Redacted" | ||
| import { PgClient } from "./PgClient.js" | ||
| import * as Migrator from "effect/unstable/sql/Migrator" | ||
| import type * as Client from "effect/unstable/sql/SqlClient" | ||
| import type { SqlError } from "effect/unstable/sql/SqlError" | ||
@@ -20,10 +13,5 @@ /** | ||
| */ | ||
| export * from "@effect/sql/Migrator" | ||
| export * from "effect/unstable/sql/Migrator" | ||
| /** | ||
| * @since 1.0.0 | ||
| */ | ||
| export * from "@effect/sql/Migrator/FileSystem" | ||
| /** | ||
| * @category constructor | ||
@@ -37,59 +25,60 @@ * @since 1.0.0 | ||
| Migrator.MigrationError | SqlError, | ||
| FileSystem | Path | PgClient | Client.SqlClient | CommandExecutor | R2 | ||
| Client.SqlClient | R2 | ||
| > = Migrator.make({ | ||
| dumpSchema(path, table) { | ||
| const pgDump = (args: Array<string>) => | ||
| Effect.gen(function*() { | ||
| const sql = yield* PgClient | ||
| const dump = yield* pipe( | ||
| Command.make("pg_dump", ...args, "--no-owner", "--no-privileges"), | ||
| Command.env({ | ||
| PATH: (globalThis as any).process?.env.PATH, | ||
| PGHOST: sql.config.host, | ||
| PGPORT: sql.config.port?.toString(), | ||
| PGUSER: sql.config.username, | ||
| PGPASSWORD: sql.config.password | ||
| ? Redacted.value(sql.config.password) | ||
| : undefined, | ||
| PGDATABASE: sql.config.database, | ||
| PGSSLMODE: sql.config.ssl ? "require" : "prefer" | ||
| }), | ||
| Command.string | ||
| ) | ||
| return dump.replace(/^--.*$/gm, "") | ||
| .replace(/^SET .*$/gm, "") | ||
| .replace(/^SELECT pg_catalog\..*$/gm, "") | ||
| .replace(/\n{2,}/gm, "\n\n") | ||
| .trim(); | ||
| }).pipe( | ||
| Effect.mapError((error) => new Migrator.MigrationError({ reason: "failed", message: error.message })) | ||
| ) | ||
| const pgDumpSchema = pgDump(["--schema-only"]) | ||
| const pgDumpMigrations = pgDump([ | ||
| "--column-inserts", | ||
| "--data-only", | ||
| `--table=${table}` | ||
| ]) | ||
| const pgDumpAll = Effect.map( | ||
| Effect.all([pgDumpSchema, pgDumpMigrations], { concurrency: 2 }), | ||
| ([schema, migrations]) => schema + "\n\n" + migrations | ||
| ) | ||
| const pgDumpFile = (path: string) => | ||
| Effect.gen(function*() { | ||
| const fs = yield* FileSystem | ||
| const path_ = yield* Path | ||
| const dump = yield* pgDumpAll | ||
| yield* fs.makeDirectory(path_.dirname(path), { recursive: true }) | ||
| yield* fs.writeFileString(path, dump) | ||
| }).pipe( | ||
| Effect.mapError((error) => new Migrator.MigrationError({ reason: "failed", message: error.message })) | ||
| ) | ||
| return pgDumpFile(path) | ||
| } | ||
| // TODO: Wait for Command module | ||
| // dumpSchema(path, table) { | ||
| // const pgDump = (args: Array<string>) => | ||
| // Effect.gen(function*() { | ||
| // const sql = yield* PgClient | ||
| // const dump = yield* pipe( | ||
| // Command.make("pg_dump", ...args, "--no-owner", "--no-privileges"), | ||
| // Command.env({ | ||
| // PATH: (globalThis as any).process?.env.PATH, | ||
| // PGHOST: sql.config.host, | ||
| // PGPORT: sql.config.port?.toString(), | ||
| // PGUSER: sql.config.username, | ||
| // PGPASSWORD: sql.config.password | ||
| // ? Redacted.value(sql.config.password) | ||
| // : undefined, | ||
| // PGDATABASE: sql.config.database, | ||
| // PGSSLMODE: sql.config.ssl ? "require" : "prefer" | ||
| // }), | ||
| // Command.string | ||
| // ) | ||
| // | ||
| // return dump.replace(/^--.*$/gm, "") | ||
| // .replace(/^SET .*$/gm, "") | ||
| // .replace(/^SELECT pg_catalog\..*$/gm, "") | ||
| // .replace(/\n{2,}/gm, "\n\n") | ||
| // .trim() | ||
| // }).pipe( | ||
| // Effect.mapError((error) => new Migrator.MigrationError({ kind: "Failed", message: error.message })) | ||
| // ) | ||
| // | ||
| // const pgDumpSchema = pgDump(["--schema-only"]) | ||
| // | ||
| // const pgDumpMigrations = pgDump([ | ||
| // "--column-inserts", | ||
| // "--data-only", | ||
| // `--table=${table}` | ||
| // ]) | ||
| // | ||
| // const pgDumpAll = Effect.map( | ||
| // Effect.all([pgDumpSchema, pgDumpMigrations], { concurrency: 2 }), | ||
| // ([schema, migrations]) => schema + "\n\n" + migrations | ||
| // ) | ||
| // | ||
| // const pgDumpFile = (path: string) => | ||
| // Effect.gen(function*() { | ||
| // const fs = yield* FileSystem | ||
| // const path_ = yield* Path | ||
| // const dump = yield* pgDumpAll | ||
| // yield* fs.makeDirectory(path_.dirname(path), { recursive: true }) | ||
| // yield* fs.writeFileString(path, dump) | ||
| // }).pipe( | ||
| // Effect.mapError((error) => new Migrator.MigrationError({ kind: "Failed", message: error.message })) | ||
| // ) | ||
| // | ||
| // return pgDumpFile(path) | ||
| // } | ||
| }) | ||
@@ -106,3 +95,3 @@ | ||
| Migrator.MigrationError | SqlError, | ||
| PgClient | Client.SqlClient | CommandExecutor | FileSystem | Path | R | ||
| Client.SqlClient | R | ||
| > => Layer.effectDiscard(run(options)) |
| "use strict"; | ||
| Object.defineProperty(exports, "__esModule", { | ||
| value: true | ||
| }); | ||
| exports.PgMigrator = exports.PgClient = void 0; | ||
| var _PgClient = _interopRequireWildcard(require("./PgClient.js")); | ||
| exports.PgClient = _PgClient; | ||
| var _PgMigrator = _interopRequireWildcard(require("./PgMigrator.js")); | ||
| exports.PgMigrator = _PgMigrator; | ||
| function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); } | ||
| //# sourceMappingURL=index.js.map |
| {"version":3,"file":"index.js","names":[],"sources":["../../src/index.ts"],"sourcesContent":[null],"mappings":"","ignoreList":[]} |
| "use strict"; | ||
| Object.defineProperty(exports, "__esModule", { | ||
| value: true | ||
| }); | ||
| exports.makeCompiler = exports.make = exports.layerFromPool = exports.layerConfig = exports.layer = exports.fromPool = exports.TypeId = exports.PgClient = void 0; | ||
| var Reactivity = _interopRequireWildcard(require("@effect/experimental/Reactivity")); | ||
| var Client = _interopRequireWildcard(require("@effect/sql/SqlClient")); | ||
| var _SqlError = require("@effect/sql/SqlError"); | ||
| var Statement = _interopRequireWildcard(require("@effect/sql/Statement")); | ||
| var Arr = _interopRequireWildcard(require("effect/Array")); | ||
| var Chunk = _interopRequireWildcard(require("effect/Chunk")); | ||
| var Config = _interopRequireWildcard(require("effect/Config")); | ||
| var Context = _interopRequireWildcard(require("effect/Context")); | ||
| var Duration = _interopRequireWildcard(require("effect/Duration")); | ||
| var Effect = _interopRequireWildcard(require("effect/Effect")); | ||
| var Fiber = _interopRequireWildcard(require("effect/Fiber")); | ||
| var Layer = _interopRequireWildcard(require("effect/Layer")); | ||
| var Number = _interopRequireWildcard(require("effect/Number")); | ||
| var Option = _interopRequireWildcard(require("effect/Option")); | ||
| var RcRef = _interopRequireWildcard(require("effect/RcRef")); | ||
| var Redacted = _interopRequireWildcard(require("effect/Redacted")); | ||
| var Scope = _interopRequireWildcard(require("effect/Scope")); | ||
| var Stream = _interopRequireWildcard(require("effect/Stream")); | ||
| var Pg = _interopRequireWildcard(require("pg")); | ||
| var PgConnString = _interopRequireWildcard(require("pg-connection-string")); | ||
| var _pgCursor = _interopRequireDefault(require("pg-cursor")); | ||
| function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } | ||
| function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); } | ||
| /** | ||
| * @since 1.0.0 | ||
| */ | ||
| const ATTR_DB_SYSTEM_NAME = "db.system.name"; | ||
| const ATTR_DB_NAMESPACE = "db.namespace"; | ||
| const ATTR_SERVER_ADDRESS = "server.address"; | ||
| const ATTR_SERVER_PORT = "server.port"; | ||
| /** | ||
| * @category type ids | ||
| * @since 1.0.0 | ||
| */ | ||
| const TypeId = exports.TypeId = "~@effect/sql-pg/PgClient"; | ||
| /** | ||
| * @category tags | ||
| * @since 1.0.0 | ||
| */ | ||
| const PgClient = exports.PgClient = /*#__PURE__*/Context.GenericTag("@effect/sql-pg/PgClient"); | ||
| const makeClient = (pool, config, options) => Effect.gen(function* () { | ||
| const compiler = makeCompiler(options.transformQueryNames, options.transformJson); | ||
| const transformRows = options.transformResultNames ? Statement.defaultTransforms(options.transformResultNames, options.transformJson).array : undefined; | ||
| class ConnectionImpl { | ||
| pg; | ||
| constructor(pg) { | ||
| this.pg = pg; | ||
| } | ||
| runWithClient(f) { | ||
| if (this.pg !== undefined) { | ||
| return Effect.async(resume => { | ||
| f(this.pg, resume); | ||
| return makeCancel(pool, this.pg); | ||
| }); | ||
| } | ||
| return Effect.async(resume => { | ||
| let done = false; | ||
| let cancel = undefined; | ||
| let client = undefined; | ||
| function onError(cause) { | ||
| cleanup(cause); | ||
| resume(Effect.fail(new _SqlError.SqlError({ | ||
| cause, | ||
| message: "Connection error" | ||
| }))); | ||
| } | ||
| function cleanup(cause) { | ||
| if (!done) client?.release(cause); | ||
| done = true; | ||
| client?.off("error", onError); | ||
| } | ||
| pool.connect((cause, client_) => { | ||
| if (cause) { | ||
| return resume(Effect.fail(new _SqlError.SqlError({ | ||
| cause, | ||
| message: "Failed to acquire connection" | ||
| }))); | ||
| } else if (!client_) { | ||
| return resume(Effect.fail(new _SqlError.SqlError({ | ||
| message: "Failed to acquire connection", | ||
| cause: new Error("No client returned") | ||
| }))); | ||
| } else if (done) { | ||
| client_.release(); | ||
| return; | ||
| } | ||
| client = client_; | ||
| client.once("error", onError); | ||
| cancel = makeCancel(pool, client); | ||
| f(client, eff => { | ||
| cleanup(); | ||
| resume(eff); | ||
| }); | ||
| }); | ||
| return Effect.suspend(() => { | ||
| if (!cancel) { | ||
| cleanup(); | ||
| return Effect.void; | ||
| } | ||
| return Effect.ensuring(cancel, Effect.sync(cleanup)); | ||
| }); | ||
| }); | ||
| } | ||
| run(query, params) { | ||
| return this.runWithClient((client, resume) => { | ||
| client.query(query, params, (err, result) => { | ||
| if (err) { | ||
| resume(Effect.fail(new _SqlError.SqlError({ | ||
| cause: err, | ||
| message: "Failed to execute statement" | ||
| }))); | ||
| } else { | ||
| // Multi-statement queries return an array of results | ||
| resume(Effect.succeed(Array.isArray(result) ? result.map(r => r.rows ?? []) : result.rows ?? [])); | ||
| } | ||
| }); | ||
| }); | ||
| } | ||
| execute(sql, params, transformRows) { | ||
| return transformRows ? Effect.map(this.run(sql, params), transformRows) : this.run(sql, params); | ||
| } | ||
| executeRaw(sql, params) { | ||
| return this.runWithClient((client, resume) => { | ||
| client.query(sql, params, (err, result) => { | ||
| if (err) { | ||
| resume(Effect.fail(new _SqlError.SqlError({ | ||
| cause: err, | ||
| message: "Failed to execute statement" | ||
| }))); | ||
| } else { | ||
| resume(Effect.succeed(result)); | ||
| } | ||
| }); | ||
| }); | ||
| } | ||
| executeWithoutTransform(sql, params) { | ||
| return this.run(sql, params); | ||
| } | ||
| executeValues(sql, params) { | ||
| return this.runWithClient((client, resume) => { | ||
| client.query({ | ||
| text: sql, | ||
| rowMode: "array", | ||
| values: params | ||
| }, (err, result) => { | ||
| if (err) { | ||
| resume(Effect.fail(new _SqlError.SqlError({ | ||
| cause: err, | ||
| message: "Failed to execute statement" | ||
| }))); | ||
| } else { | ||
| resume(Effect.succeed(result.rows)); | ||
| } | ||
| }); | ||
| }); | ||
| } | ||
| executeUnprepared(sql, params, transformRows) { | ||
| return this.execute(sql, params, transformRows); | ||
| } | ||
| executeStream(sql, params, transformRows) { | ||
| // eslint-disable-next-line @typescript-eslint/no-this-alias | ||
| const self = this; | ||
| return Effect.gen(function* () { | ||
| const scope = yield* Effect.scope; | ||
| const client = self.pg ?? (yield* reserveRaw); | ||
| yield* Scope.addFinalizer(scope, Effect.promise(() => cursor.close())); | ||
| const cursor = client.query(new _pgCursor.default(sql, params)); | ||
| const pull = Effect.async(resume => { | ||
| cursor.read(128, (err, rows) => { | ||
| if (err) { | ||
| resume(Effect.fail(Option.some(new _SqlError.SqlError({ | ||
| cause: err, | ||
| message: "Failed to execute statement" | ||
| })))); | ||
| } else if (Arr.isNonEmptyArray(rows)) { | ||
| resume(Effect.succeed(Chunk.unsafeFromArray(transformRows ? transformRows(rows) : rows))); | ||
| } else { | ||
| resume(Effect.fail(Option.none())); | ||
| } | ||
| }); | ||
| }); | ||
| return Stream.repeatEffectChunkOption(pull); | ||
| }).pipe(Stream.unwrapScoped); | ||
| } | ||
| } | ||
| const reserveRaw = Effect.async(resume => { | ||
| const fiber = Option.getOrThrow(Fiber.getCurrentFiber()); | ||
| const scope = Context.unsafeGet(fiber.currentContext, Scope.Scope); | ||
| let cause = undefined; | ||
| function onError(cause_) { | ||
| cause = cause_; | ||
| } | ||
| pool.connect((err, client, release) => { | ||
| if (err) { | ||
| resume(Effect.fail(new _SqlError.SqlError({ | ||
| cause: err, | ||
| message: "Failed to acquire connection for transaction" | ||
| }))); | ||
| return; | ||
| } else if (!client) { | ||
| resume(Effect.fail(new _SqlError.SqlError({ | ||
| message: "Failed to acquire connection for transaction", | ||
| cause: new Error("No client returned") | ||
| }))); | ||
| return; | ||
| } | ||
| // Else we know we have client defined, so we can proceed with the connection | ||
| client.on("error", onError); | ||
| resume(Effect.as(Scope.addFinalizer(scope, Effect.sync(() => { | ||
| client.off("error", onError); | ||
| release(cause); | ||
| })), client)); | ||
| }); | ||
| }); | ||
| const reserve = Effect.map(reserveRaw, client => new ConnectionImpl(client)); | ||
| const listenClient = yield* RcRef.make({ | ||
| acquire: reserveRaw | ||
| }); | ||
| return Object.assign(yield* Client.make({ | ||
| acquirer: Effect.succeed(new ConnectionImpl()), | ||
| transactionAcquirer: reserve, | ||
| compiler, | ||
| spanAttributes: [...(options.spanAttributes ? Object.entries(options.spanAttributes) : []), [ATTR_DB_SYSTEM_NAME, "postgresql"], [ATTR_DB_NAMESPACE, config.database ?? config.username ?? "postgres"], [ATTR_SERVER_ADDRESS, config.host ?? "localhost"], [ATTR_SERVER_PORT, config.port ?? 5432]], | ||
| transformRows | ||
| }), { | ||
| [TypeId]: TypeId, | ||
| config, | ||
| json: _ => PgJson(_), | ||
| listen: channel => Stream.asyncPush(Effect.fnUntraced(function* (emit) { | ||
| const client = yield* RcRef.get(listenClient); | ||
| function onNotification(msg) { | ||
| if (msg.channel === channel && msg.payload) { | ||
| emit.single(msg.payload); | ||
| } | ||
| } | ||
| yield* Effect.addFinalizer(() => Effect.promise(() => { | ||
| client.off("notification", onNotification); | ||
| return client.query(`UNLISTEN ${Pg.escapeIdentifier(channel)}`); | ||
| })); | ||
| yield* Effect.tryPromise({ | ||
| try: () => client.query(`LISTEN ${Pg.escapeIdentifier(channel)}`), | ||
| catch: cause => new _SqlError.SqlError({ | ||
| cause, | ||
| message: "Failed to listen" | ||
| }) | ||
| }); | ||
| client.on("notification", onNotification); | ||
| })), | ||
| notify: (channel, payload) => Effect.async(resume => { | ||
| pool.query(`NOTIFY ${Pg.escapeIdentifier(channel)}, $1`, [payload], err => { | ||
| if (err) { | ||
| resume(Effect.fail(new _SqlError.SqlError({ | ||
| cause: err, | ||
| message: "Failed to notify" | ||
| }))); | ||
| } else { | ||
| resume(Effect.void); | ||
| } | ||
| }); | ||
| }) | ||
| }); | ||
| }); | ||
| /** | ||
| * @category constructors | ||
| * @since 1.0.0 | ||
| */ | ||
| const make = options => Effect.gen(function* () { | ||
| const pool = new Pg.Pool({ | ||
| connectionString: options.url ? Redacted.value(options.url) : undefined, | ||
| user: options.username, | ||
| host: options.host, | ||
| database: options.database, | ||
| password: options.password ? Redacted.value(options.password) : undefined, | ||
| ssl: options.ssl, | ||
| port: options.port, | ||
| ...(options.stream ? { | ||
| stream: options.stream | ||
| } : {}), | ||
| connectionTimeoutMillis: options.connectTimeout ? Duration.toMillis(options.connectTimeout) : undefined, | ||
| idleTimeoutMillis: options.idleTimeout ? Duration.toMillis(options.idleTimeout) : undefined, | ||
| max: options.maxConnections, | ||
| min: options.minConnections, | ||
| maxLifetimeSeconds: options.connectionTTL ? Duration.toSeconds(options.connectionTTL) : undefined, | ||
| application_name: options.applicationName ?? "@effect/sql-pg", | ||
| types: options.types | ||
| }); | ||
| pool.on("error", _err => {}); | ||
| yield* Effect.acquireRelease(Effect.tryPromise({ | ||
| try: () => pool.query("SELECT 1"), | ||
| catch: cause => new _SqlError.SqlError({ | ||
| cause, | ||
| message: "PgClient: Failed to connect" | ||
| }) | ||
| }), () => Effect.promise(() => pool.end()).pipe(Effect.interruptible, Effect.timeoutOption(1000))).pipe(Effect.timeoutFail({ | ||
| duration: options.connectTimeout ?? Duration.seconds(5), | ||
| onTimeout: () => new _SqlError.SqlError({ | ||
| cause: new Error("Connection timed out"), | ||
| message: "PgClient: Connection timed out" | ||
| }) | ||
| })); | ||
| let config = options; | ||
| if (pool.options.connectionString) { | ||
| try { | ||
| const parsed = PgConnString.parse(pool.options.connectionString); | ||
| config = { | ||
| ...config, | ||
| host: config.host ?? parsed.host ?? undefined, | ||
| port: config.port ?? (parsed.port ? Option.getOrUndefined(Number.parse(parsed.port)) : undefined), | ||
| username: config.username ?? parsed.user ?? undefined, | ||
| password: config.password ?? (parsed.password ? Redacted.make(parsed.password) : undefined), | ||
| database: config.database ?? parsed.database ?? undefined | ||
| }; | ||
| } catch { | ||
| // | ||
| } | ||
| } | ||
| return yield* makeClient(pool, config, options); | ||
| }); | ||
| /** | ||
| * Create a `PgClient` from an existing `pg` pool. | ||
| * | ||
| * You control the pool lifecycle via `acquire` (typically `Effect.acquireRelease`). | ||
| * | ||
| * @category constructors | ||
| * @since 1.0.0 | ||
| */ | ||
| exports.make = make; | ||
| const fromPool = exports.fromPool = /*#__PURE__*/Effect.fnUntraced(function* (options) { | ||
| const pool = yield* options.acquire; | ||
| let config = { | ||
| url: pool.options.connectionString ? Redacted.make(pool.options.connectionString) : undefined, | ||
| host: pool.options.host, | ||
| port: pool.options.port, | ||
| database: pool.options.database, | ||
| username: pool.options.user, | ||
| password: typeof pool.options.password === "string" ? Redacted.make(pool.options.password) : undefined, | ||
| ssl: pool.options.ssl, | ||
| applicationName: pool.options.application_name, | ||
| types: pool.options.types | ||
| }; | ||
| if (pool.options.connectionString) { | ||
| try { | ||
| const parsed = PgConnString.parse(pool.options.connectionString); | ||
| config = { | ||
| ...config, | ||
| host: config.host ?? parsed.host ?? undefined, | ||
| port: config.port ?? (parsed.port ? Option.getOrUndefined(Number.parse(parsed.port)) : undefined), | ||
| username: config.username ?? parsed.user ?? undefined, | ||
| password: config.password ?? (parsed.password ? Redacted.make(parsed.password) : undefined), | ||
| database: config.database ?? parsed.database ?? undefined | ||
| }; | ||
| } catch { | ||
| // | ||
| } | ||
| } | ||
| return yield* makeClient(pool, config, options); | ||
| }); | ||
| const cancelEffects = /*#__PURE__*/new WeakMap(); | ||
| const makeCancel = (pool, client) => { | ||
| if (cancelEffects.has(client)) { | ||
| return cancelEffects.get(client); | ||
| } | ||
| const processId = client.processID; | ||
| const eff = processId !== undefined | ||
| // query cancelation is best-effort, so we don't fail if it doesn't work | ||
| ? Effect.async(resume => { | ||
| if (pool.ending) return resume(Effect.void); | ||
| pool.query(`SELECT pg_cancel_backend(${processId})`, () => { | ||
| resume(Effect.void); | ||
| }); | ||
| }).pipe(Effect.interruptible, Effect.timeoutOption(5000)) : undefined; | ||
| cancelEffects.set(client, eff); | ||
| return eff; | ||
| }; | ||
| /** | ||
| * @category layers | ||
| * @since 1.0.0 | ||
| */ | ||
| const layerConfig = config => Layer.scopedContext(Config.unwrap(config).pipe(Effect.flatMap(make), Effect.map(client => Context.make(PgClient, client).pipe(Context.add(Client.SqlClient, client))))).pipe(Layer.provide(Reactivity.layer)); | ||
| /** | ||
| * @category layers | ||
| * @since 1.0.0 | ||
| */ | ||
| exports.layerConfig = layerConfig; | ||
| const layer = config => Layer.scopedContext(Effect.map(make(config), client => Context.make(PgClient, client).pipe(Context.add(Client.SqlClient, client)))).pipe(Layer.provide(Reactivity.layer)); | ||
| /** | ||
| * @category layers | ||
| * @since 1.0.0 | ||
| */ | ||
| exports.layer = layer; | ||
| const layerFromPool = options => Layer.scopedContext(Effect.map(fromPool(options), client => Context.make(PgClient, client).pipe(Context.add(Client.SqlClient, client)))).pipe(Layer.provide(Reactivity.layer)); | ||
| /** | ||
| * @category constructor | ||
| * @since 1.0.0 | ||
| */ | ||
| exports.layerFromPool = layerFromPool; | ||
| const makeCompiler = (transform, transformJson = true) => { | ||
| const transformValue = transformJson && transform ? Statement.defaultTransforms(transform).value : undefined; | ||
| return Statement.makeCompiler({ | ||
| dialect: "pg", | ||
| placeholder(_) { | ||
| return `$${_}`; | ||
| }, | ||
| onIdentifier: transform ? function (value, withoutTransform) { | ||
| return withoutTransform ? escape(value) : escape(transform(value)); | ||
| } : escape, | ||
| onRecordUpdate(placeholders, valueAlias, valueColumns, values, returning) { | ||
| return [`(values ${placeholders}) AS ${valueAlias}${valueColumns}${returning ? ` RETURNING ${returning[0]}` : ""}`, returning ? values.flat().concat(returning[1]) : values.flat()]; | ||
| }, | ||
| onCustom(type, placeholder, withoutTransform) { | ||
| switch (type.kind) { | ||
| case "PgJson": | ||
| { | ||
| return [placeholder(undefined), [withoutTransform || transformValue === undefined ? type.i0 : transformValue(type.i0)]]; | ||
| } | ||
| } | ||
| } | ||
| }); | ||
| }; | ||
| exports.makeCompiler = makeCompiler; | ||
| const escape = /*#__PURE__*/Statement.defaultEscape("\""); | ||
| /** | ||
| * @category custom types | ||
| * @since 1.0.0 | ||
| */ | ||
| const PgJson = /*#__PURE__*/Statement.custom("PgJson"); | ||
| //# sourceMappingURL=PgClient.js.map |
| {"version":3,"file":"PgClient.js","names":["Reactivity","_interopRequireWildcard","require","Client","_SqlError","Statement","Arr","Chunk","Config","Context","Duration","Effect","Fiber","Layer","Number","Option","RcRef","Redacted","Scope","Stream","Pg","PgConnString","_pgCursor","_interopRequireDefault","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","ATTR_DB_SYSTEM_NAME","ATTR_DB_NAMESPACE","ATTR_SERVER_ADDRESS","ATTR_SERVER_PORT","TypeId","exports","PgClient","GenericTag","makeClient","pool","config","options","gen","compiler","makeCompiler","transformQueryNames","transformJson","transformRows","transformResultNames","defaultTransforms","array","undefined","ConnectionImpl","pg","constructor","runWithClient","async","resume","makeCancel","done","cancel","client","onError","cause","cleanup","fail","SqlError","message","release","off","connect","client_","Error","once","eff","suspend","void","ensuring","sync","run","query","params","err","result","succeed","Array","isArray","map","rows","execute","sql","executeRaw","executeWithoutTransform","executeValues","text","rowMode","values","executeUnprepared","executeStream","self","scope","reserveRaw","addFinalizer","promise","cursor","close","Cursor","pull","read","some","isNonEmptyArray","unsafeFromArray","none","repeatEffectChunkOption","pipe","unwrapScoped","fiber","getOrThrow","getCurrentFiber","unsafeGet","currentContext","cause_","on","as","reserve","listenClient","make","acquire","assign","acquirer","transactionAcquirer","spanAttributes","entries","database","username","host","port","json","_","PgJson","listen","channel","asyncPush","fnUntraced","emit","onNotification","msg","payload","single","escapeIdentifier","tryPromise","try","catch","notify","Pool","connectionString","url","value","user","password","ssl","stream","connectionTimeoutMillis","connectTimeout","toMillis","idleTimeoutMillis","idleTimeout","max","maxConnections","min","minConnections","maxLifetimeSeconds","connectionTTL","toSeconds","application_name","applicationName","types","_err","acquireRelease","end","interruptible","timeoutOption","timeoutFail","duration","seconds","onTimeout","parsed","parse","getOrUndefined","fromPool","cancelEffects","processId","processID","ending","layerConfig","scopedContext","unwrap","flatMap","add","SqlClient","provide","layer","layerFromPool","transform","transformValue","dialect","placeholder","onIdentifier","withoutTransform","escape","onRecordUpdate","placeholders","valueAlias","valueColumns","returning","flat","concat","onCustom","type","kind","i0","defaultEscape","custom"],"sources":["../../src/PgClient.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]} |
| "use strict"; | ||
| Object.defineProperty(exports, "__esModule", { | ||
| value: true | ||
| }); | ||
| var _exportNames = { | ||
| run: true, | ||
| layer: true | ||
| }; | ||
| exports.run = exports.layer = void 0; | ||
| var Command = _interopRequireWildcard(require("@effect/platform/Command")); | ||
| var _FileSystem = require("@effect/platform/FileSystem"); | ||
| var _Path = require("@effect/platform/Path"); | ||
| var Migrator = _interopRequireWildcard(require("@effect/sql/Migrator")); | ||
| Object.keys(Migrator).forEach(function (key) { | ||
| if (key === "default" || key === "__esModule") return; | ||
| if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return; | ||
| if (key in exports && exports[key] === Migrator[key]) return; | ||
| Object.defineProperty(exports, key, { | ||
| enumerable: true, | ||
| get: function () { | ||
| return Migrator[key]; | ||
| } | ||
| }); | ||
| }); | ||
| var Effect = _interopRequireWildcard(require("effect/Effect")); | ||
| var _Function = require("effect/Function"); | ||
| var Layer = _interopRequireWildcard(require("effect/Layer")); | ||
| var Redacted = _interopRequireWildcard(require("effect/Redacted")); | ||
| var _PgClient = require("./PgClient.js"); | ||
| var _FileSystem2 = require("@effect/sql/Migrator/FileSystem"); | ||
| Object.keys(_FileSystem2).forEach(function (key) { | ||
| if (key === "default" || key === "__esModule") return; | ||
| if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return; | ||
| if (key in exports && exports[key] === _FileSystem2[key]) return; | ||
| Object.defineProperty(exports, key, { | ||
| enumerable: true, | ||
| get: function () { | ||
| return _FileSystem2[key]; | ||
| } | ||
| }); | ||
| }); | ||
| function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); } | ||
| /** | ||
| * @since 1.0.0 | ||
| */ | ||
| /** | ||
| * @since 1.0.0 | ||
| */ | ||
| /** | ||
| * @since 1.0.0 | ||
| */ | ||
| /** | ||
| * @category constructor | ||
| * @since 1.0.0 | ||
| */ | ||
| const run = exports.run = /*#__PURE__*/Migrator.make({ | ||
| dumpSchema(path, table) { | ||
| const pgDump = args => Effect.gen(function* () { | ||
| const sql = yield* _PgClient.PgClient; | ||
| const dump = yield* (0, _Function.pipe)(Command.make("pg_dump", ...args, "--no-owner", "--no-privileges"), Command.env({ | ||
| PATH: globalThis.process?.env.PATH, | ||
| PGHOST: sql.config.host, | ||
| PGPORT: sql.config.port?.toString(), | ||
| PGUSER: sql.config.username, | ||
| PGPASSWORD: sql.config.password ? Redacted.value(sql.config.password) : undefined, | ||
| PGDATABASE: sql.config.database, | ||
| PGSSLMODE: sql.config.ssl ? "require" : "prefer" | ||
| }), Command.string); | ||
| return dump.replace(/^--.*$/gm, "").replace(/^SET .*$/gm, "").replace(/^SELECT pg_catalog\..*$/gm, "").replace(/\n{2,}/gm, "\n\n").trim(); | ||
| }).pipe(Effect.mapError(error => new Migrator.MigrationError({ | ||
| reason: "failed", | ||
| message: error.message | ||
| }))); | ||
| const pgDumpSchema = pgDump(["--schema-only"]); | ||
| const pgDumpMigrations = pgDump(["--column-inserts", "--data-only", `--table=${table}`]); | ||
| const pgDumpAll = Effect.map(Effect.all([pgDumpSchema, pgDumpMigrations], { | ||
| concurrency: 2 | ||
| }), ([schema, migrations]) => schema + "\n\n" + migrations); | ||
| const pgDumpFile = path => Effect.gen(function* () { | ||
| const fs = yield* _FileSystem.FileSystem; | ||
| const path_ = yield* _Path.Path; | ||
| const dump = yield* pgDumpAll; | ||
| yield* fs.makeDirectory(path_.dirname(path), { | ||
| recursive: true | ||
| }); | ||
| yield* fs.writeFileString(path, dump); | ||
| }).pipe(Effect.mapError(error => new Migrator.MigrationError({ | ||
| reason: "failed", | ||
| message: error.message | ||
| }))); | ||
| return pgDumpFile(path); | ||
| } | ||
| }); | ||
| /** | ||
| * @category layers | ||
| * @since 1.0.0 | ||
| */ | ||
| const layer = options => Layer.effectDiscard(run(options)); | ||
| exports.layer = layer; | ||
| //# sourceMappingURL=PgMigrator.js.map |
| {"version":3,"file":"PgMigrator.js","names":["Command","_interopRequireWildcard","require","_FileSystem","_Path","Migrator","Object","keys","forEach","key","prototype","hasOwnProperty","call","_exportNames","exports","defineProperty","enumerable","get","Effect","_Function","Layer","Redacted","_PgClient","_FileSystem2","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","set","getOwnPropertyDescriptor","run","make","dumpSchema","path","table","pgDump","args","gen","sql","PgClient","dump","pipe","env","PATH","globalThis","process","PGHOST","config","host","PGPORT","port","toString","PGUSER","username","PGPASSWORD","password","value","undefined","PGDATABASE","database","PGSSLMODE","ssl","string","replace","trim","mapError","error","MigrationError","reason","message","pgDumpSchema","pgDumpMigrations","pgDumpAll","map","all","concurrency","schema","migrations","pgDumpFile","fs","FileSystem","path_","Path","makeDirectory","dirname","recursive","writeFileString","layer","options","effectDiscard"],"sources":["../../src/PgMigrator.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]} |
| /** | ||
| * @since 1.0.0 | ||
| */ | ||
| export * as PgClient from "./PgClient.js"; | ||
| /** | ||
| * @since 1.0.0 | ||
| */ | ||
| export * as PgMigrator from "./PgMigrator.js"; | ||
| //# sourceMappingURL=index.d.ts.map |
| {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAA;AAEzC;;GAEG;AACH,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAA"} |
| /** | ||
| * @since 1.0.0 | ||
| */ | ||
| import * as Reactivity from "@effect/experimental/Reactivity"; | ||
| import * as Client from "@effect/sql/SqlClient"; | ||
| import { SqlError } from "@effect/sql/SqlError"; | ||
| import type { Custom, Fragment } from "@effect/sql/Statement"; | ||
| import * as Statement from "@effect/sql/Statement"; | ||
| import * as Config from "effect/Config"; | ||
| import type * as ConfigError from "effect/ConfigError"; | ||
| import * as Context from "effect/Context"; | ||
| import * as Duration from "effect/Duration"; | ||
| import * as Effect from "effect/Effect"; | ||
| import * as Layer from "effect/Layer"; | ||
| import * as Redacted from "effect/Redacted"; | ||
| import * as Scope from "effect/Scope"; | ||
| import * as Stream from "effect/Stream"; | ||
| import type { Duplex } from "node:stream"; | ||
| import type { ConnectionOptions } from "node:tls"; | ||
| import * as Pg from "pg"; | ||
| /** | ||
| * @category type ids | ||
| * @since 1.0.0 | ||
| */ | ||
| export declare const TypeId: TypeId; | ||
| /** | ||
| * @category type ids | ||
| * @since 1.0.0 | ||
| */ | ||
| export type TypeId = "~@effect/sql-pg/PgClient"; | ||
| /** | ||
| * @category models | ||
| * @since 1.0.0 | ||
| */ | ||
| export interface PgClient extends Client.SqlClient { | ||
| readonly [TypeId]: TypeId; | ||
| readonly config: PgClientConfig; | ||
| readonly json: (_: unknown) => Fragment; | ||
| readonly listen: (channel: string) => Stream.Stream<string, SqlError>; | ||
| readonly notify: (channel: string, payload: string) => Effect.Effect<void, SqlError>; | ||
| } | ||
| /** | ||
| * @category tags | ||
| * @since 1.0.0 | ||
| */ | ||
| export declare const PgClient: Context.Tag<PgClient, PgClient>; | ||
| /** | ||
| * @category constructors | ||
| * @since 1.0.0 | ||
| */ | ||
| export interface PgClientConfig { | ||
| readonly url?: Redacted.Redacted | undefined; | ||
| readonly host?: string | undefined; | ||
| readonly port?: number | undefined; | ||
| readonly path?: string | undefined; | ||
| readonly ssl?: boolean | ConnectionOptions | undefined; | ||
| readonly database?: string | undefined; | ||
| readonly username?: string | undefined; | ||
| readonly password?: Redacted.Redacted | undefined; | ||
| readonly stream?: (() => Duplex) | undefined; | ||
| readonly idleTimeout?: Duration.DurationInput | undefined; | ||
| readonly connectTimeout?: Duration.DurationInput | undefined; | ||
| readonly maxConnections?: number | undefined; | ||
| readonly minConnections?: number | undefined; | ||
| readonly connectionTTL?: Duration.DurationInput | undefined; | ||
| readonly applicationName?: string | undefined; | ||
| readonly spanAttributes?: Record<string, unknown> | undefined; | ||
| readonly transformResultNames?: ((str: string) => string) | undefined; | ||
| readonly transformQueryNames?: ((str: string) => string) | undefined; | ||
| readonly transformJson?: boolean | undefined; | ||
| readonly types?: Pg.CustomTypesConfig | undefined; | ||
| } | ||
| /** | ||
| * @category constructors | ||
| * @since 1.0.0 | ||
| */ | ||
| export declare const make: (options: PgClientConfig) => Effect.Effect<PgClient, SqlError, Scope.Scope | Reactivity.Reactivity>; | ||
| /** | ||
| * @category constructors | ||
| * @since 1.0.0 | ||
| */ | ||
| export interface PgClientFromPoolOptions { | ||
| readonly acquire: Effect.Effect<Pg.Pool, SqlError, Scope.Scope>; | ||
| readonly applicationName?: string | undefined; | ||
| readonly spanAttributes?: Record<string, unknown> | undefined; | ||
| readonly transformResultNames?: ((str: string) => string) | undefined; | ||
| readonly transformQueryNames?: ((str: string) => string) | undefined; | ||
| readonly transformJson?: boolean | undefined; | ||
| readonly types?: Pg.CustomTypesConfig | undefined; | ||
| } | ||
| /** | ||
| * Create a `PgClient` from an existing `pg` pool. | ||
| * | ||
| * You control the pool lifecycle via `acquire` (typically `Effect.acquireRelease`). | ||
| * | ||
| * @category constructors | ||
| * @since 1.0.0 | ||
| */ | ||
| export declare const fromPool: (options: PgClientFromPoolOptions) => Effect.Effect<PgClient, SqlError, Scope.Scope | Reactivity.Reactivity>; | ||
| /** | ||
| * @category layers | ||
| * @since 1.0.0 | ||
| */ | ||
| export declare const layerConfig: (config: Config.Config.Wrap<PgClientConfig>) => Layer.Layer<PgClient | Client.SqlClient, ConfigError.ConfigError | SqlError>; | ||
| /** | ||
| * @category layers | ||
| * @since 1.0.0 | ||
| */ | ||
| export declare const layer: (config: PgClientConfig) => Layer.Layer<PgClient | Client.SqlClient, SqlError>; | ||
| /** | ||
| * @category layers | ||
| * @since 1.0.0 | ||
| */ | ||
| export declare const layerFromPool: (options: PgClientFromPoolOptions) => Layer.Layer<PgClient | Client.SqlClient, SqlError>; | ||
| /** | ||
| * @category constructor | ||
| * @since 1.0.0 | ||
| */ | ||
| export declare const makeCompiler: (transform?: (_: string) => string, transformJson?: boolean) => Statement.Compiler; | ||
| /** | ||
| * @category custom types | ||
| * @since 1.0.0 | ||
| */ | ||
| export type PgCustom = PgJson; | ||
| /** | ||
| * @category custom types | ||
| * @since 1.0.0 | ||
| */ | ||
| interface PgJson extends Custom<"PgJson", unknown> { | ||
| } | ||
| /** | ||
| * @category custom types | ||
| * @since 1.0.0 | ||
| */ | ||
| declare const PgJson: (i0: unknown, i1: void, i2: void) => Fragment; | ||
| export {}; | ||
| //# sourceMappingURL=PgClient.d.ts.map |
| {"version":3,"file":"PgClient.d.ts","sourceRoot":"","sources":["../../src/PgClient.ts"],"names":[],"mappings":"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"} |
| import type { CommandExecutor } from "@effect/platform/CommandExecutor"; | ||
| import { FileSystem } from "@effect/platform/FileSystem"; | ||
| import { Path } from "@effect/platform/Path"; | ||
| import * as Migrator from "@effect/sql/Migrator"; | ||
| import type * as Client from "@effect/sql/SqlClient"; | ||
| import type { SqlError } from "@effect/sql/SqlError"; | ||
| import * as Effect from "effect/Effect"; | ||
| import * as Layer from "effect/Layer"; | ||
| import { PgClient } from "./PgClient.js"; | ||
| /** | ||
| * @since 1.0.0 | ||
| */ | ||
| export * from "@effect/sql/Migrator"; | ||
| /** | ||
| * @since 1.0.0 | ||
| */ | ||
| export * from "@effect/sql/Migrator/FileSystem"; | ||
| /** | ||
| * @category constructor | ||
| * @since 1.0.0 | ||
| */ | ||
| export declare const run: <R2 = never>(options: Migrator.MigratorOptions<R2>) => Effect.Effect<ReadonlyArray<readonly [id: number, name: string]>, Migrator.MigrationError | SqlError, FileSystem | Path | PgClient | Client.SqlClient | CommandExecutor | R2>; | ||
| /** | ||
| * @category layers | ||
| * @since 1.0.0 | ||
| */ | ||
| export declare const layer: <R>(options: Migrator.MigratorOptions<R>) => Layer.Layer<never, Migrator.MigrationError | SqlError, PgClient | Client.SqlClient | CommandExecutor | FileSystem | Path | R>; | ||
| //# sourceMappingURL=PgMigrator.d.ts.map |
| {"version":3,"file":"PgMigrator.d.ts","sourceRoot":"","sources":["../../src/PgMigrator.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAA;AACvE,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAA;AACxD,OAAO,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAA;AAC5C,OAAO,KAAK,QAAQ,MAAM,sBAAsB,CAAA;AAChD,OAAO,KAAK,KAAK,MAAM,MAAM,uBAAuB,CAAA;AACpD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAA;AACpD,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAEvC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AAErC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAExC;;GAEG;AACH,cAAc,sBAAsB,CAAA;AAEpC;;GAEG;AACH,cAAc,iCAAiC,CAAA;AAE/C;;;GAGG;AACH,eAAO,MAAM,GAAG,EAAE,CAAC,EAAE,GAAG,KAAK,EAC3B,OAAO,EAAE,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC,KAClC,MAAM,CAAC,MAAM,CAChB,aAAa,CAAC,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,EAClD,QAAQ,CAAC,cAAc,GAAG,QAAQ,EAClC,UAAU,GAAG,IAAI,GAAG,QAAQ,GAAG,MAAM,CAAC,SAAS,GAAG,eAAe,GAAG,EAAE,CAyDtE,CAAA;AAEF;;;GAGG;AACH,eAAO,MAAM,KAAK,GAAI,CAAC,EACrB,SAAS,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC,KACnC,KAAK,CAAC,KAAK,CACZ,KAAK,EACL,QAAQ,CAAC,cAAc,GAAG,QAAQ,EAClC,QAAQ,GAAG,MAAM,CAAC,SAAS,GAAG,eAAe,GAAG,UAAU,GAAG,IAAI,GAAG,CAAC,CACjC,CAAA"} |
| /** | ||
| * @since 1.0.0 | ||
| */ | ||
| export * as PgClient from "./PgClient.js"; | ||
| /** | ||
| * @since 1.0.0 | ||
| */ | ||
| export * as PgMigrator from "./PgMigrator.js"; | ||
| //# sourceMappingURL=index.js.map |
| {"version":3,"file":"index.js","names":["PgClient","PgMigrator"],"sources":["../../src/index.ts"],"sourcesContent":[null],"mappings":"AAAA;;;AAGA,OAAO,KAAKA,QAAQ,MAAM,eAAe;AAEzC;;;AAGA,OAAO,KAAKC,UAAU,MAAM,iBAAiB","ignoreList":[]} |
| { | ||
| "type": "module", | ||
| "sideEffects": [] | ||
| } |
| /** | ||
| * @since 1.0.0 | ||
| */ | ||
| import * as Reactivity from "@effect/experimental/Reactivity"; | ||
| import * as Client from "@effect/sql/SqlClient"; | ||
| import { SqlError } from "@effect/sql/SqlError"; | ||
| import * as Statement from "@effect/sql/Statement"; | ||
| import * as Arr from "effect/Array"; | ||
| import * as Chunk from "effect/Chunk"; | ||
| import * as Config from "effect/Config"; | ||
| import * as Context from "effect/Context"; | ||
| import * as Duration from "effect/Duration"; | ||
| import * as Effect from "effect/Effect"; | ||
| import * as Fiber from "effect/Fiber"; | ||
| import * as Layer from "effect/Layer"; | ||
| import * as Number from "effect/Number"; | ||
| import * as Option from "effect/Option"; | ||
| import * as RcRef from "effect/RcRef"; | ||
| import * as Redacted from "effect/Redacted"; | ||
| import * as Scope from "effect/Scope"; | ||
| import * as Stream from "effect/Stream"; | ||
| import * as Pg from "pg"; | ||
| import * as PgConnString from "pg-connection-string"; | ||
| import Cursor from "pg-cursor"; | ||
| const ATTR_DB_SYSTEM_NAME = "db.system.name"; | ||
| const ATTR_DB_NAMESPACE = "db.namespace"; | ||
| const ATTR_SERVER_ADDRESS = "server.address"; | ||
| const ATTR_SERVER_PORT = "server.port"; | ||
| /** | ||
| * @category type ids | ||
| * @since 1.0.0 | ||
| */ | ||
| export const TypeId = "~@effect/sql-pg/PgClient"; | ||
| /** | ||
| * @category tags | ||
| * @since 1.0.0 | ||
| */ | ||
| export const PgClient = /*#__PURE__*/Context.GenericTag("@effect/sql-pg/PgClient"); | ||
| const makeClient = (pool, config, options) => Effect.gen(function* () { | ||
| const compiler = makeCompiler(options.transformQueryNames, options.transformJson); | ||
| const transformRows = options.transformResultNames ? Statement.defaultTransforms(options.transformResultNames, options.transformJson).array : undefined; | ||
| class ConnectionImpl { | ||
| pg; | ||
| constructor(pg) { | ||
| this.pg = pg; | ||
| } | ||
| runWithClient(f) { | ||
| if (this.pg !== undefined) { | ||
| return Effect.async(resume => { | ||
| f(this.pg, resume); | ||
| return makeCancel(pool, this.pg); | ||
| }); | ||
| } | ||
| return Effect.async(resume => { | ||
| let done = false; | ||
| let cancel = undefined; | ||
| let client = undefined; | ||
| function onError(cause) { | ||
| cleanup(cause); | ||
| resume(Effect.fail(new SqlError({ | ||
| cause, | ||
| message: "Connection error" | ||
| }))); | ||
| } | ||
| function cleanup(cause) { | ||
| if (!done) client?.release(cause); | ||
| done = true; | ||
| client?.off("error", onError); | ||
| } | ||
| pool.connect((cause, client_) => { | ||
| if (cause) { | ||
| return resume(Effect.fail(new SqlError({ | ||
| cause, | ||
| message: "Failed to acquire connection" | ||
| }))); | ||
| } else if (!client_) { | ||
| return resume(Effect.fail(new SqlError({ | ||
| message: "Failed to acquire connection", | ||
| cause: new Error("No client returned") | ||
| }))); | ||
| } else if (done) { | ||
| client_.release(); | ||
| return; | ||
| } | ||
| client = client_; | ||
| client.once("error", onError); | ||
| cancel = makeCancel(pool, client); | ||
| f(client, eff => { | ||
| cleanup(); | ||
| resume(eff); | ||
| }); | ||
| }); | ||
| return Effect.suspend(() => { | ||
| if (!cancel) { | ||
| cleanup(); | ||
| return Effect.void; | ||
| } | ||
| return Effect.ensuring(cancel, Effect.sync(cleanup)); | ||
| }); | ||
| }); | ||
| } | ||
| run(query, params) { | ||
| return this.runWithClient((client, resume) => { | ||
| client.query(query, params, (err, result) => { | ||
| if (err) { | ||
| resume(Effect.fail(new SqlError({ | ||
| cause: err, | ||
| message: "Failed to execute statement" | ||
| }))); | ||
| } else { | ||
| // Multi-statement queries return an array of results | ||
| resume(Effect.succeed(Array.isArray(result) ? result.map(r => r.rows ?? []) : result.rows ?? [])); | ||
| } | ||
| }); | ||
| }); | ||
| } | ||
| execute(sql, params, transformRows) { | ||
| return transformRows ? Effect.map(this.run(sql, params), transformRows) : this.run(sql, params); | ||
| } | ||
| executeRaw(sql, params) { | ||
| return this.runWithClient((client, resume) => { | ||
| client.query(sql, params, (err, result) => { | ||
| if (err) { | ||
| resume(Effect.fail(new SqlError({ | ||
| cause: err, | ||
| message: "Failed to execute statement" | ||
| }))); | ||
| } else { | ||
| resume(Effect.succeed(result)); | ||
| } | ||
| }); | ||
| }); | ||
| } | ||
| executeWithoutTransform(sql, params) { | ||
| return this.run(sql, params); | ||
| } | ||
| executeValues(sql, params) { | ||
| return this.runWithClient((client, resume) => { | ||
| client.query({ | ||
| text: sql, | ||
| rowMode: "array", | ||
| values: params | ||
| }, (err, result) => { | ||
| if (err) { | ||
| resume(Effect.fail(new SqlError({ | ||
| cause: err, | ||
| message: "Failed to execute statement" | ||
| }))); | ||
| } else { | ||
| resume(Effect.succeed(result.rows)); | ||
| } | ||
| }); | ||
| }); | ||
| } | ||
| executeUnprepared(sql, params, transformRows) { | ||
| return this.execute(sql, params, transformRows); | ||
| } | ||
| executeStream(sql, params, transformRows) { | ||
| // eslint-disable-next-line @typescript-eslint/no-this-alias | ||
| const self = this; | ||
| return Effect.gen(function* () { | ||
| const scope = yield* Effect.scope; | ||
| const client = self.pg ?? (yield* reserveRaw); | ||
| yield* Scope.addFinalizer(scope, Effect.promise(() => cursor.close())); | ||
| const cursor = client.query(new Cursor(sql, params)); | ||
| const pull = Effect.async(resume => { | ||
| cursor.read(128, (err, rows) => { | ||
| if (err) { | ||
| resume(Effect.fail(Option.some(new SqlError({ | ||
| cause: err, | ||
| message: "Failed to execute statement" | ||
| })))); | ||
| } else if (Arr.isNonEmptyArray(rows)) { | ||
| resume(Effect.succeed(Chunk.unsafeFromArray(transformRows ? transformRows(rows) : rows))); | ||
| } else { | ||
| resume(Effect.fail(Option.none())); | ||
| } | ||
| }); | ||
| }); | ||
| return Stream.repeatEffectChunkOption(pull); | ||
| }).pipe(Stream.unwrapScoped); | ||
| } | ||
| } | ||
| const reserveRaw = Effect.async(resume => { | ||
| const fiber = Option.getOrThrow(Fiber.getCurrentFiber()); | ||
| const scope = Context.unsafeGet(fiber.currentContext, Scope.Scope); | ||
| let cause = undefined; | ||
| function onError(cause_) { | ||
| cause = cause_; | ||
| } | ||
| pool.connect((err, client, release) => { | ||
| if (err) { | ||
| resume(Effect.fail(new SqlError({ | ||
| cause: err, | ||
| message: "Failed to acquire connection for transaction" | ||
| }))); | ||
| return; | ||
| } else if (!client) { | ||
| resume(Effect.fail(new SqlError({ | ||
| message: "Failed to acquire connection for transaction", | ||
| cause: new Error("No client returned") | ||
| }))); | ||
| return; | ||
| } | ||
| // Else we know we have client defined, so we can proceed with the connection | ||
| client.on("error", onError); | ||
| resume(Effect.as(Scope.addFinalizer(scope, Effect.sync(() => { | ||
| client.off("error", onError); | ||
| release(cause); | ||
| })), client)); | ||
| }); | ||
| }); | ||
| const reserve = Effect.map(reserveRaw, client => new ConnectionImpl(client)); | ||
| const listenClient = yield* RcRef.make({ | ||
| acquire: reserveRaw | ||
| }); | ||
| return Object.assign(yield* Client.make({ | ||
| acquirer: Effect.succeed(new ConnectionImpl()), | ||
| transactionAcquirer: reserve, | ||
| compiler, | ||
| spanAttributes: [...(options.spanAttributes ? Object.entries(options.spanAttributes) : []), [ATTR_DB_SYSTEM_NAME, "postgresql"], [ATTR_DB_NAMESPACE, config.database ?? config.username ?? "postgres"], [ATTR_SERVER_ADDRESS, config.host ?? "localhost"], [ATTR_SERVER_PORT, config.port ?? 5432]], | ||
| transformRows | ||
| }), { | ||
| [TypeId]: TypeId, | ||
| config, | ||
| json: _ => PgJson(_), | ||
| listen: channel => Stream.asyncPush(Effect.fnUntraced(function* (emit) { | ||
| const client = yield* RcRef.get(listenClient); | ||
| function onNotification(msg) { | ||
| if (msg.channel === channel && msg.payload) { | ||
| emit.single(msg.payload); | ||
| } | ||
| } | ||
| yield* Effect.addFinalizer(() => Effect.promise(() => { | ||
| client.off("notification", onNotification); | ||
| return client.query(`UNLISTEN ${Pg.escapeIdentifier(channel)}`); | ||
| })); | ||
| yield* Effect.tryPromise({ | ||
| try: () => client.query(`LISTEN ${Pg.escapeIdentifier(channel)}`), | ||
| catch: cause => new SqlError({ | ||
| cause, | ||
| message: "Failed to listen" | ||
| }) | ||
| }); | ||
| client.on("notification", onNotification); | ||
| })), | ||
| notify: (channel, payload) => Effect.async(resume => { | ||
| pool.query(`NOTIFY ${Pg.escapeIdentifier(channel)}, $1`, [payload], err => { | ||
| if (err) { | ||
| resume(Effect.fail(new SqlError({ | ||
| cause: err, | ||
| message: "Failed to notify" | ||
| }))); | ||
| } else { | ||
| resume(Effect.void); | ||
| } | ||
| }); | ||
| }) | ||
| }); | ||
| }); | ||
| /** | ||
| * @category constructors | ||
| * @since 1.0.0 | ||
| */ | ||
| export const make = options => Effect.gen(function* () { | ||
| const pool = new Pg.Pool({ | ||
| connectionString: options.url ? Redacted.value(options.url) : undefined, | ||
| user: options.username, | ||
| host: options.host, | ||
| database: options.database, | ||
| password: options.password ? Redacted.value(options.password) : undefined, | ||
| ssl: options.ssl, | ||
| port: options.port, | ||
| ...(options.stream ? { | ||
| stream: options.stream | ||
| } : {}), | ||
| connectionTimeoutMillis: options.connectTimeout ? Duration.toMillis(options.connectTimeout) : undefined, | ||
| idleTimeoutMillis: options.idleTimeout ? Duration.toMillis(options.idleTimeout) : undefined, | ||
| max: options.maxConnections, | ||
| min: options.minConnections, | ||
| maxLifetimeSeconds: options.connectionTTL ? Duration.toSeconds(options.connectionTTL) : undefined, | ||
| application_name: options.applicationName ?? "@effect/sql-pg", | ||
| types: options.types | ||
| }); | ||
| pool.on("error", _err => {}); | ||
| yield* Effect.acquireRelease(Effect.tryPromise({ | ||
| try: () => pool.query("SELECT 1"), | ||
| catch: cause => new SqlError({ | ||
| cause, | ||
| message: "PgClient: Failed to connect" | ||
| }) | ||
| }), () => Effect.promise(() => pool.end()).pipe(Effect.interruptible, Effect.timeoutOption(1000))).pipe(Effect.timeoutFail({ | ||
| duration: options.connectTimeout ?? Duration.seconds(5), | ||
| onTimeout: () => new SqlError({ | ||
| cause: new Error("Connection timed out"), | ||
| message: "PgClient: Connection timed out" | ||
| }) | ||
| })); | ||
| let config = options; | ||
| if (pool.options.connectionString) { | ||
| try { | ||
| const parsed = PgConnString.parse(pool.options.connectionString); | ||
| config = { | ||
| ...config, | ||
| host: config.host ?? parsed.host ?? undefined, | ||
| port: config.port ?? (parsed.port ? Option.getOrUndefined(Number.parse(parsed.port)) : undefined), | ||
| username: config.username ?? parsed.user ?? undefined, | ||
| password: config.password ?? (parsed.password ? Redacted.make(parsed.password) : undefined), | ||
| database: config.database ?? parsed.database ?? undefined | ||
| }; | ||
| } catch { | ||
| // | ||
| } | ||
| } | ||
| return yield* makeClient(pool, config, options); | ||
| }); | ||
| /** | ||
| * Create a `PgClient` from an existing `pg` pool. | ||
| * | ||
| * You control the pool lifecycle via `acquire` (typically `Effect.acquireRelease`). | ||
| * | ||
| * @category constructors | ||
| * @since 1.0.0 | ||
| */ | ||
| export const fromPool = /*#__PURE__*/Effect.fnUntraced(function* (options) { | ||
| const pool = yield* options.acquire; | ||
| let config = { | ||
| url: pool.options.connectionString ? Redacted.make(pool.options.connectionString) : undefined, | ||
| host: pool.options.host, | ||
| port: pool.options.port, | ||
| database: pool.options.database, | ||
| username: pool.options.user, | ||
| password: typeof pool.options.password === "string" ? Redacted.make(pool.options.password) : undefined, | ||
| ssl: pool.options.ssl, | ||
| applicationName: pool.options.application_name, | ||
| types: pool.options.types | ||
| }; | ||
| if (pool.options.connectionString) { | ||
| try { | ||
| const parsed = PgConnString.parse(pool.options.connectionString); | ||
| config = { | ||
| ...config, | ||
| host: config.host ?? parsed.host ?? undefined, | ||
| port: config.port ?? (parsed.port ? Option.getOrUndefined(Number.parse(parsed.port)) : undefined), | ||
| username: config.username ?? parsed.user ?? undefined, | ||
| password: config.password ?? (parsed.password ? Redacted.make(parsed.password) : undefined), | ||
| database: config.database ?? parsed.database ?? undefined | ||
| }; | ||
| } catch { | ||
| // | ||
| } | ||
| } | ||
| return yield* makeClient(pool, config, options); | ||
| }); | ||
| const cancelEffects = /*#__PURE__*/new WeakMap(); | ||
| const makeCancel = (pool, client) => { | ||
| if (cancelEffects.has(client)) { | ||
| return cancelEffects.get(client); | ||
| } | ||
| const processId = client.processID; | ||
| const eff = processId !== undefined | ||
| // query cancelation is best-effort, so we don't fail if it doesn't work | ||
| ? Effect.async(resume => { | ||
| if (pool.ending) return resume(Effect.void); | ||
| pool.query(`SELECT pg_cancel_backend(${processId})`, () => { | ||
| resume(Effect.void); | ||
| }); | ||
| }).pipe(Effect.interruptible, Effect.timeoutOption(5000)) : undefined; | ||
| cancelEffects.set(client, eff); | ||
| return eff; | ||
| }; | ||
| /** | ||
| * @category layers | ||
| * @since 1.0.0 | ||
| */ | ||
| export const layerConfig = config => Layer.scopedContext(Config.unwrap(config).pipe(Effect.flatMap(make), Effect.map(client => Context.make(PgClient, client).pipe(Context.add(Client.SqlClient, client))))).pipe(Layer.provide(Reactivity.layer)); | ||
| /** | ||
| * @category layers | ||
| * @since 1.0.0 | ||
| */ | ||
| export const layer = config => Layer.scopedContext(Effect.map(make(config), client => Context.make(PgClient, client).pipe(Context.add(Client.SqlClient, client)))).pipe(Layer.provide(Reactivity.layer)); | ||
| /** | ||
| * @category layers | ||
| * @since 1.0.0 | ||
| */ | ||
| export const layerFromPool = options => Layer.scopedContext(Effect.map(fromPool(options), client => Context.make(PgClient, client).pipe(Context.add(Client.SqlClient, client)))).pipe(Layer.provide(Reactivity.layer)); | ||
| /** | ||
| * @category constructor | ||
| * @since 1.0.0 | ||
| */ | ||
| export const makeCompiler = (transform, transformJson = true) => { | ||
| const transformValue = transformJson && transform ? Statement.defaultTransforms(transform).value : undefined; | ||
| return Statement.makeCompiler({ | ||
| dialect: "pg", | ||
| placeholder(_) { | ||
| return `$${_}`; | ||
| }, | ||
| onIdentifier: transform ? function (value, withoutTransform) { | ||
| return withoutTransform ? escape(value) : escape(transform(value)); | ||
| } : escape, | ||
| onRecordUpdate(placeholders, valueAlias, valueColumns, values, returning) { | ||
| return [`(values ${placeholders}) AS ${valueAlias}${valueColumns}${returning ? ` RETURNING ${returning[0]}` : ""}`, returning ? values.flat().concat(returning[1]) : values.flat()]; | ||
| }, | ||
| onCustom(type, placeholder, withoutTransform) { | ||
| switch (type.kind) { | ||
| case "PgJson": | ||
| { | ||
| return [placeholder(undefined), [withoutTransform || transformValue === undefined ? type.i0 : transformValue(type.i0)]]; | ||
| } | ||
| } | ||
| } | ||
| }); | ||
| }; | ||
| const escape = /*#__PURE__*/Statement.defaultEscape("\""); | ||
| /** | ||
| * @category custom types | ||
| * @since 1.0.0 | ||
| */ | ||
| const PgJson = /*#__PURE__*/Statement.custom("PgJson"); | ||
| //# sourceMappingURL=PgClient.js.map |
| {"version":3,"file":"PgClient.js","names":["Reactivity","Client","SqlError","Statement","Arr","Chunk","Config","Context","Duration","Effect","Fiber","Layer","Number","Option","RcRef","Redacted","Scope","Stream","Pg","PgConnString","Cursor","ATTR_DB_SYSTEM_NAME","ATTR_DB_NAMESPACE","ATTR_SERVER_ADDRESS","ATTR_SERVER_PORT","TypeId","PgClient","GenericTag","makeClient","pool","config","options","gen","compiler","makeCompiler","transformQueryNames","transformJson","transformRows","transformResultNames","defaultTransforms","array","undefined","ConnectionImpl","pg","constructor","runWithClient","f","async","resume","makeCancel","done","cancel","client","onError","cause","cleanup","fail","message","release","off","connect","client_","Error","once","eff","suspend","void","ensuring","sync","run","query","params","err","result","succeed","Array","isArray","map","r","rows","execute","sql","executeRaw","executeWithoutTransform","executeValues","text","rowMode","values","executeUnprepared","executeStream","self","scope","reserveRaw","addFinalizer","promise","cursor","close","pull","read","some","isNonEmptyArray","unsafeFromArray","none","repeatEffectChunkOption","pipe","unwrapScoped","fiber","getOrThrow","getCurrentFiber","unsafeGet","currentContext","cause_","on","as","reserve","listenClient","make","acquire","Object","assign","acquirer","transactionAcquirer","spanAttributes","entries","database","username","host","port","json","_","PgJson","listen","channel","asyncPush","fnUntraced","emit","get","onNotification","msg","payload","single","escapeIdentifier","tryPromise","try","catch","notify","Pool","connectionString","url","value","user","password","ssl","stream","connectionTimeoutMillis","connectTimeout","toMillis","idleTimeoutMillis","idleTimeout","max","maxConnections","min","minConnections","maxLifetimeSeconds","connectionTTL","toSeconds","application_name","applicationName","types","_err","acquireRelease","end","interruptible","timeoutOption","timeoutFail","duration","seconds","onTimeout","parsed","parse","getOrUndefined","fromPool","cancelEffects","WeakMap","has","processId","processID","ending","set","layerConfig","scopedContext","unwrap","flatMap","add","SqlClient","provide","layer","layerFromPool","transform","transformValue","dialect","placeholder","onIdentifier","withoutTransform","escape","onRecordUpdate","placeholders","valueAlias","valueColumns","returning","flat","concat","onCustom","type","kind","i0","defaultEscape","custom"],"sources":["../../src/PgClient.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]} |
| /** | ||
| * @since 1.0.0 | ||
| */ | ||
| import * as Command from "@effect/platform/Command"; | ||
| import { FileSystem } from "@effect/platform/FileSystem"; | ||
| import { Path } from "@effect/platform/Path"; | ||
| import * as Migrator from "@effect/sql/Migrator"; | ||
| import * as Effect from "effect/Effect"; | ||
| import { pipe } from "effect/Function"; | ||
| import * as Layer from "effect/Layer"; | ||
| import * as Redacted from "effect/Redacted"; | ||
| import { PgClient } from "./PgClient.js"; | ||
| /** | ||
| * @since 1.0.0 | ||
| */ | ||
| export * from "@effect/sql/Migrator"; | ||
| /** | ||
| * @since 1.0.0 | ||
| */ | ||
| export * from "@effect/sql/Migrator/FileSystem"; | ||
| /** | ||
| * @category constructor | ||
| * @since 1.0.0 | ||
| */ | ||
| export const run = /*#__PURE__*/Migrator.make({ | ||
| dumpSchema(path, table) { | ||
| const pgDump = args => Effect.gen(function* () { | ||
| const sql = yield* PgClient; | ||
| const dump = yield* pipe(Command.make("pg_dump", ...args, "--no-owner", "--no-privileges"), Command.env({ | ||
| PATH: globalThis.process?.env.PATH, | ||
| PGHOST: sql.config.host, | ||
| PGPORT: sql.config.port?.toString(), | ||
| PGUSER: sql.config.username, | ||
| PGPASSWORD: sql.config.password ? Redacted.value(sql.config.password) : undefined, | ||
| PGDATABASE: sql.config.database, | ||
| PGSSLMODE: sql.config.ssl ? "require" : "prefer" | ||
| }), Command.string); | ||
| return dump.replace(/^--.*$/gm, "").replace(/^SET .*$/gm, "").replace(/^SELECT pg_catalog\..*$/gm, "").replace(/\n{2,}/gm, "\n\n").trim(); | ||
| }).pipe(Effect.mapError(error => new Migrator.MigrationError({ | ||
| reason: "failed", | ||
| message: error.message | ||
| }))); | ||
| const pgDumpSchema = pgDump(["--schema-only"]); | ||
| const pgDumpMigrations = pgDump(["--column-inserts", "--data-only", `--table=${table}`]); | ||
| const pgDumpAll = Effect.map(Effect.all([pgDumpSchema, pgDumpMigrations], { | ||
| concurrency: 2 | ||
| }), ([schema, migrations]) => schema + "\n\n" + migrations); | ||
| const pgDumpFile = path => Effect.gen(function* () { | ||
| const fs = yield* FileSystem; | ||
| const path_ = yield* Path; | ||
| const dump = yield* pgDumpAll; | ||
| yield* fs.makeDirectory(path_.dirname(path), { | ||
| recursive: true | ||
| }); | ||
| yield* fs.writeFileString(path, dump); | ||
| }).pipe(Effect.mapError(error => new Migrator.MigrationError({ | ||
| reason: "failed", | ||
| message: error.message | ||
| }))); | ||
| return pgDumpFile(path); | ||
| } | ||
| }); | ||
| /** | ||
| * @category layers | ||
| * @since 1.0.0 | ||
| */ | ||
| export const layer = options => Layer.effectDiscard(run(options)); | ||
| //# sourceMappingURL=PgMigrator.js.map |
| {"version":3,"file":"PgMigrator.js","names":["Command","FileSystem","Path","Migrator","Effect","pipe","Layer","Redacted","PgClient","run","make","dumpSchema","path","table","pgDump","args","gen","sql","dump","env","PATH","globalThis","process","PGHOST","config","host","PGPORT","port","toString","PGUSER","username","PGPASSWORD","password","value","undefined","PGDATABASE","database","PGSSLMODE","ssl","string","replace","trim","mapError","error","MigrationError","reason","message","pgDumpSchema","pgDumpMigrations","pgDumpAll","map","all","concurrency","schema","migrations","pgDumpFile","fs","path_","makeDirectory","dirname","recursive","writeFileString","layer","options","effectDiscard"],"sources":["../../src/PgMigrator.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]} |
| { | ||
| "sideEffects": [], | ||
| "main": "../dist/cjs/index.js", | ||
| "module": "../dist/esm/index.js", | ||
| "types": "../dist/dts/index.d.ts" | ||
| } |
| { | ||
| "sideEffects": [], | ||
| "main": "../dist/cjs/PgClient.js", | ||
| "module": "../dist/esm/PgClient.js", | ||
| "types": "../dist/dts/PgClient.d.ts" | ||
| } |
| { | ||
| "sideEffects": [], | ||
| "main": "../dist/cjs/PgMigrator.js", | ||
| "module": "../dist/esm/PgMigrator.js", | ||
| "types": "../dist/dts/PgMigrator.d.ts" | ||
| } |
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
New author
Supply chain riskA new npm collaborator published a version of the package for the first time. New collaborators are usually benign additions to a project, but do indicate a change to the security surface area of a package.
No bug tracker
MaintenancePackage does not have a linked bug tracker in package.json.
6
-33.33%1
-50%Yes
NaN72790
-42.83%4
Infinity%18
-35.71%1300
-31.87%2
Infinity%+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
Updated
Updated
Updated
Updated