🚀 Socket Launch Week Day 5:Introducing Repository Access Permissions and Custom Roles.Learn more
Sign In

@effect/sql-pg

Package Overview
Dependencies
Maintainers
3
Versions
430
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@effect/sql-pg - npm Package Compare versions

Comparing version
0.50.3
to
4.0.0-beta.0
+12
dist/index.d.ts
/**
* @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":"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"}
/**
* @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"
}
}
/**
* @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"
/**
* @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 @@ ]

/**
* @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":"AAAA;;GAEG;AACH,OAAO,KAAK,UAAU,MAAM,iCAAiC,CAAA;AAC7D,OAAO,KAAK,MAAM,MAAM,uBAAuB,CAAA;AAE/C,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAA;AAC/C,OAAO,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAC7D,OAAO,KAAK,SAAS,MAAM,uBAAuB,CAAA;AAGlD,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,KAAK,WAAW,MAAM,oBAAoB,CAAA;AACtD,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAA;AACzC,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,MAAM,MAAM,eAAe,CAAA;AACvC,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,iCAA0D,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;AAiRD;;;GAGG;AACH,eAAO,MAAM,IAAI,GACf,SAAS,cAAc,KACtB,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAC,KAAK,GAAG,UAAU,CAAC,UAAU,CAoEpE,CAAA;AAEJ;;;GAGG;AACH,MAAM,WAAW,uBAAuB;IACtC,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;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,QAAQ,8GAkCnB,CAAA;AAwBF;;;GAGG;AACH,eAAO,MAAM,WAAW,GACtB,QAAQ,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,KACzC,KAAK,CAAC,KAAK,CAAC,QAAQ,GAAG,MAAM,CAAC,SAAS,EAAE,WAAW,CAAC,WAAW,GAAG,QAAQ,CAUrC,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,GACxB,SAAS,uBAAuB,KAC/B,KAAK,CAAC,KAAK,CAAC,QAAQ,GAAG,MAAM,CAAC,SAAS,EAAE,QAAQ,CAMX,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,+CAAqC,CAAA"}
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"
}