@effect/sql-pg 0.50.2 → 4.0.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{dts/PgClient.d.ts → PgClient.d.ts} +35 -13
- package/dist/PgClient.d.ts.map +1 -0
- package/dist/{esm/PgClient.js → PgClient.js} +105 -83
- package/dist/PgClient.js.map +1 -0
- package/dist/PgMigrator.d.ts +23 -0
- package/dist/PgMigrator.d.ts.map +1 -0
- package/dist/PgMigrator.js +74 -0
- package/dist/PgMigrator.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/{esm/index.js → index.js} +4 -0
- package/dist/index.js.map +1 -0
- package/package.json +56 -54
- package/src/PgClient.ts +353 -308
- package/src/PgMigrator.ts +63 -74
- package/src/index.ts +8 -2
- package/PgClient/package.json +0 -6
- package/PgMigrator/package.json +0 -6
- package/dist/cjs/PgClient.js +0 -385
- package/dist/cjs/PgClient.js.map +0 -1
- package/dist/cjs/PgMigrator.js +0 -104
- package/dist/cjs/PgMigrator.js.map +0 -1
- package/dist/cjs/index.js +0 -12
- package/dist/cjs/index.js.map +0 -1
- package/dist/dts/PgClient.d.ts.map +0 -1
- package/dist/dts/PgMigrator.d.ts +0 -28
- package/dist/dts/PgMigrator.d.ts.map +0 -1
- package/dist/dts/index.d.ts +0 -9
- package/dist/dts/index.d.ts.map +0 -1
- package/dist/esm/PgClient.js.map +0 -1
- package/dist/esm/PgMigrator.js +0 -68
- package/dist/esm/PgMigrator.js.map +0 -1
- package/dist/esm/index.js.map +0 -1
- package/dist/esm/package.json +0 -4
- package/index/package.json +0 -6
|
@@ -1,20 +1,16 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @since 1.0.0
|
|
3
|
-
*/
|
|
4
|
-
import * as Reactivity from "@effect/experimental/Reactivity";
|
|
5
|
-
import * as Client from "@effect/sql/SqlClient";
|
|
6
|
-
import { SqlError } from "@effect/sql/SqlError";
|
|
7
|
-
import type { Custom, Fragment } from "@effect/sql/Statement";
|
|
8
|
-
import * as Statement from "@effect/sql/Statement";
|
|
9
1
|
import * as Config from "effect/Config";
|
|
10
|
-
import type * as ConfigError from "effect/ConfigError";
|
|
11
|
-
import * as Context from "effect/Context";
|
|
12
2
|
import * as Duration from "effect/Duration";
|
|
13
3
|
import * as Effect from "effect/Effect";
|
|
14
4
|
import * as Layer from "effect/Layer";
|
|
15
5
|
import * as Redacted from "effect/Redacted";
|
|
16
6
|
import * as Scope from "effect/Scope";
|
|
7
|
+
import * as ServiceMap from "effect/ServiceMap";
|
|
17
8
|
import * as Stream from "effect/Stream";
|
|
9
|
+
import * as Reactivity from "effect/unstable/reactivity/Reactivity";
|
|
10
|
+
import * as Client from "effect/unstable/sql/SqlClient";
|
|
11
|
+
import { SqlError } from "effect/unstable/sql/SqlError";
|
|
12
|
+
import type { Custom, Fragment } from "effect/unstable/sql/Statement";
|
|
13
|
+
import * as Statement from "effect/unstable/sql/Statement";
|
|
18
14
|
import type { Duplex } from "node:stream";
|
|
19
15
|
import type { ConnectionOptions } from "node:tls";
|
|
20
16
|
import * as Pg from "pg";
|
|
@@ -43,7 +39,7 @@ export interface PgClient extends Client.SqlClient {
|
|
|
43
39
|
* @category tags
|
|
44
40
|
* @since 1.0.0
|
|
45
41
|
*/
|
|
46
|
-
export declare const PgClient:
|
|
42
|
+
export declare const PgClient: ServiceMap.Service<PgClient, PgClient>;
|
|
47
43
|
/**
|
|
48
44
|
* @category constructors
|
|
49
45
|
* @since 1.0.0
|
|
@@ -75,16 +71,42 @@ export interface PgClientConfig {
|
|
|
75
71
|
* @since 1.0.0
|
|
76
72
|
*/
|
|
77
73
|
export declare const make: (options: PgClientConfig) => Effect.Effect<PgClient, SqlError, Scope.Scope | Reactivity.Reactivity>;
|
|
74
|
+
/**
|
|
75
|
+
* @category constructors
|
|
76
|
+
* @since 1.0.0
|
|
77
|
+
*/
|
|
78
|
+
export declare const fromPool: (options: {
|
|
79
|
+
readonly acquire: Effect.Effect<Pg.Pool, SqlError, Scope.Scope>;
|
|
80
|
+
readonly applicationName?: string | undefined;
|
|
81
|
+
readonly spanAttributes?: Record<string, unknown> | undefined;
|
|
82
|
+
readonly transformResultNames?: ((str: string) => string) | undefined;
|
|
83
|
+
readonly transformQueryNames?: ((str: string) => string) | undefined;
|
|
84
|
+
readonly transformJson?: boolean | undefined;
|
|
85
|
+
readonly types?: Pg.CustomTypesConfig | undefined;
|
|
86
|
+
}) => Effect.Effect<PgClient, SqlError, Scope.Scope | Reactivity.Reactivity>;
|
|
78
87
|
/**
|
|
79
88
|
* @category layers
|
|
80
89
|
* @since 1.0.0
|
|
81
90
|
*/
|
|
82
|
-
export declare const layerConfig: (config: Config.
|
|
91
|
+
export declare const layerConfig: (config: Config.Wrap<PgClientConfig>) => Layer.Layer<PgClient | Client.SqlClient, Config.ConfigError | SqlError>;
|
|
83
92
|
/**
|
|
84
93
|
* @category layers
|
|
85
94
|
* @since 1.0.0
|
|
86
95
|
*/
|
|
87
96
|
export declare const layer: (config: PgClientConfig) => Layer.Layer<PgClient | Client.SqlClient, SqlError>;
|
|
97
|
+
/**
|
|
98
|
+
* @category layers
|
|
99
|
+
* @since 1.0.0
|
|
100
|
+
*/
|
|
101
|
+
export declare const layerFromPool: (options: {
|
|
102
|
+
readonly acquire: Effect.Effect<Pg.Pool, SqlError, Scope.Scope>;
|
|
103
|
+
readonly applicationName?: string | undefined;
|
|
104
|
+
readonly spanAttributes?: Record<string, unknown> | undefined;
|
|
105
|
+
readonly transformResultNames?: ((str: string) => string) | undefined;
|
|
106
|
+
readonly transformQueryNames?: ((str: string) => string) | undefined;
|
|
107
|
+
readonly transformJson?: boolean | undefined;
|
|
108
|
+
readonly types?: Pg.CustomTypesConfig | undefined;
|
|
109
|
+
}) => Layer.Layer<PgClient | Client.SqlClient, SqlError>;
|
|
88
110
|
/**
|
|
89
111
|
* @category constructor
|
|
90
112
|
* @since 1.0.0
|
|
@@ -105,6 +127,6 @@ interface PgJson extends Custom<"PgJson", unknown> {
|
|
|
105
127
|
* @category custom types
|
|
106
128
|
* @since 1.0.0
|
|
107
129
|
*/
|
|
108
|
-
declare const PgJson: (
|
|
130
|
+
declare const PgJson: (paramA: unknown, paramB: void, paramC: void) => PgJson;
|
|
109
131
|
export {};
|
|
110
132
|
//# sourceMappingURL=PgClient.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PgClient.d.ts","sourceRoot":"","sources":["../src/PgClient.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,24 +1,25 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @since 1.0.0
|
|
3
3
|
*/
|
|
4
|
-
import * as Reactivity from "@effect/experimental/Reactivity";
|
|
5
|
-
import * as Client from "@effect/sql/SqlClient";
|
|
6
|
-
import { SqlError } from "@effect/sql/SqlError";
|
|
7
|
-
import * as Statement from "@effect/sql/Statement";
|
|
8
4
|
import * as Arr from "effect/Array";
|
|
9
|
-
import * as
|
|
5
|
+
import * as Cause from "effect/Cause";
|
|
6
|
+
import * as Channel from "effect/Channel";
|
|
10
7
|
import * as Config from "effect/Config";
|
|
11
|
-
import * as Context from "effect/Context";
|
|
12
8
|
import * as Duration from "effect/Duration";
|
|
13
9
|
import * as Effect from "effect/Effect";
|
|
14
10
|
import * as Fiber from "effect/Fiber";
|
|
15
11
|
import * as Layer from "effect/Layer";
|
|
16
12
|
import * as Number from "effect/Number";
|
|
17
|
-
import * as
|
|
13
|
+
import * as Queue from "effect/Queue";
|
|
18
14
|
import * as RcRef from "effect/RcRef";
|
|
19
15
|
import * as Redacted from "effect/Redacted";
|
|
20
16
|
import * as Scope from "effect/Scope";
|
|
17
|
+
import * as ServiceMap from "effect/ServiceMap";
|
|
21
18
|
import * as Stream from "effect/Stream";
|
|
19
|
+
import * as Reactivity from "effect/unstable/reactivity/Reactivity";
|
|
20
|
+
import * as Client from "effect/unstable/sql/SqlClient";
|
|
21
|
+
import { SqlError } from "effect/unstable/sql/SqlError";
|
|
22
|
+
import * as Statement from "effect/unstable/sql/Statement";
|
|
22
23
|
import * as Pg from "pg";
|
|
23
24
|
import * as PgConnString from "pg-connection-string";
|
|
24
25
|
import Cursor from "pg-cursor";
|
|
@@ -35,45 +36,58 @@ export const TypeId = "~@effect/sql-pg/PgClient";
|
|
|
35
36
|
* @category tags
|
|
36
37
|
* @since 1.0.0
|
|
37
38
|
*/
|
|
38
|
-
export const PgClient = /*#__PURE__*/
|
|
39
|
+
export const PgClient = /*#__PURE__*/ServiceMap.Service("@effect/sql-pg/PgClient");
|
|
39
40
|
/**
|
|
40
41
|
* @category constructors
|
|
41
42
|
* @since 1.0.0
|
|
42
43
|
*/
|
|
43
|
-
export const make = options =>
|
|
44
|
+
export const make = options => fromPool({
|
|
45
|
+
...options,
|
|
46
|
+
acquire: Effect.gen(function* () {
|
|
47
|
+
const pool = new Pg.Pool({
|
|
48
|
+
connectionString: options.url ? Redacted.value(options.url) : undefined,
|
|
49
|
+
user: options.username,
|
|
50
|
+
host: options.host,
|
|
51
|
+
database: options.database,
|
|
52
|
+
password: options.password ? Redacted.value(options.password) : undefined,
|
|
53
|
+
ssl: options.ssl,
|
|
54
|
+
port: options.port,
|
|
55
|
+
...(options.stream ? {
|
|
56
|
+
stream: options.stream
|
|
57
|
+
} : {}),
|
|
58
|
+
connectionTimeoutMillis: options.connectTimeout ? Duration.toMillis(Duration.fromDurationInputUnsafe(options.connectTimeout)) : undefined,
|
|
59
|
+
idleTimeoutMillis: options.idleTimeout ? Duration.toMillis(Duration.fromDurationInputUnsafe(options.idleTimeout)) : undefined,
|
|
60
|
+
max: options.maxConnections,
|
|
61
|
+
min: options.minConnections,
|
|
62
|
+
maxLifetimeSeconds: options.connectionTTL ? Duration.toSeconds(Duration.fromDurationInputUnsafe(options.connectionTTL)) : undefined,
|
|
63
|
+
application_name: options.applicationName ?? "@effect/sql-pg",
|
|
64
|
+
types: options.types
|
|
65
|
+
});
|
|
66
|
+
pool.on("error", _err => {});
|
|
67
|
+
yield* Effect.acquireRelease(Effect.tryPromise({
|
|
68
|
+
try: () => pool.query("SELECT 1"),
|
|
69
|
+
catch: cause => new SqlError({
|
|
70
|
+
cause,
|
|
71
|
+
message: "PgClient: Failed to connect"
|
|
72
|
+
})
|
|
73
|
+
}), () => Effect.promise(() => pool.end()).pipe(Effect.timeoutOption(1000))).pipe(Effect.timeoutOrElse({
|
|
74
|
+
duration: options.connectTimeout ?? Duration.seconds(5),
|
|
75
|
+
onTimeout: () => Effect.fail(new SqlError({
|
|
76
|
+
cause: new Error("Connection timed out"),
|
|
77
|
+
message: "PgClient: Connection timed out"
|
|
78
|
+
}))
|
|
79
|
+
}));
|
|
80
|
+
return pool;
|
|
81
|
+
})
|
|
82
|
+
});
|
|
83
|
+
/**
|
|
84
|
+
* @category constructors
|
|
85
|
+
* @since 1.0.0
|
|
86
|
+
*/
|
|
87
|
+
export const fromPool = /*#__PURE__*/Effect.fnUntraced(function* (options) {
|
|
44
88
|
const compiler = makeCompiler(options.transformQueryNames, options.transformJson);
|
|
45
89
|
const transformRows = options.transformResultNames ? Statement.defaultTransforms(options.transformResultNames, options.transformJson).array : undefined;
|
|
46
|
-
const pool =
|
|
47
|
-
connectionString: options.url ? Redacted.value(options.url) : undefined,
|
|
48
|
-
user: options.username,
|
|
49
|
-
host: options.host,
|
|
50
|
-
database: options.database,
|
|
51
|
-
password: options.password ? Redacted.value(options.password) : undefined,
|
|
52
|
-
ssl: options.ssl,
|
|
53
|
-
port: options.port,
|
|
54
|
-
stream: options.stream,
|
|
55
|
-
connectionTimeoutMillis: options.connectTimeout ? Duration.toMillis(options.connectTimeout) : undefined,
|
|
56
|
-
idleTimeoutMillis: options.idleTimeout ? Duration.toMillis(options.idleTimeout) : undefined,
|
|
57
|
-
max: options.maxConnections,
|
|
58
|
-
min: options.minConnections,
|
|
59
|
-
maxLifetimeSeconds: options.connectionTTL ? Duration.toSeconds(options.connectionTTL) : undefined,
|
|
60
|
-
application_name: options.applicationName ?? "@effect/sql-pg",
|
|
61
|
-
types: options.types
|
|
62
|
-
});
|
|
63
|
-
pool.on("error", _err => {});
|
|
64
|
-
yield* Effect.acquireRelease(Effect.tryPromise({
|
|
65
|
-
try: () => pool.query("SELECT 1"),
|
|
66
|
-
catch: cause => new SqlError({
|
|
67
|
-
cause,
|
|
68
|
-
message: "PgClient: Failed to connect"
|
|
69
|
-
})
|
|
70
|
-
}), () => Effect.promise(() => pool.end()).pipe(Effect.interruptible, Effect.timeoutOption(1000))).pipe(Effect.timeoutFail({
|
|
71
|
-
duration: options.connectTimeout ?? Duration.seconds(5),
|
|
72
|
-
onTimeout: () => new SqlError({
|
|
73
|
-
cause: new Error("Connection timed out"),
|
|
74
|
-
message: "PgClient: Connection timed out"
|
|
75
|
-
})
|
|
76
|
-
}));
|
|
90
|
+
const pool = yield* options.acquire;
|
|
77
91
|
class ConnectionImpl {
|
|
78
92
|
pg;
|
|
79
93
|
constructor(pg) {
|
|
@@ -81,12 +95,12 @@ export const make = options => Effect.gen(function* () {
|
|
|
81
95
|
}
|
|
82
96
|
runWithClient(f) {
|
|
83
97
|
if (this.pg !== undefined) {
|
|
84
|
-
return Effect.
|
|
98
|
+
return Effect.callback(resume => {
|
|
85
99
|
f(this.pg, resume);
|
|
86
100
|
return makeCancel(pool, this.pg);
|
|
87
101
|
});
|
|
88
102
|
}
|
|
89
|
-
return Effect.
|
|
103
|
+
return Effect.callback(resume => {
|
|
90
104
|
let done = false;
|
|
91
105
|
let cancel = undefined;
|
|
92
106
|
let client = undefined;
|
|
@@ -191,72 +205,75 @@ export const make = options => Effect.gen(function* () {
|
|
|
191
205
|
return this.execute(sql, params, transformRows);
|
|
192
206
|
}
|
|
193
207
|
executeStream(sql, params, transformRows) {
|
|
194
|
-
//
|
|
208
|
+
// oxlint-disable-next-line @typescript-eslint/no-this-alias
|
|
195
209
|
const self = this;
|
|
196
|
-
return Effect.
|
|
197
|
-
const
|
|
198
|
-
const client = self.pg ?? (yield* reserveRaw);
|
|
210
|
+
return Stream.fromChannel(Channel.fromTransform(Effect.fnUntraced(function* (_, scope) {
|
|
211
|
+
const client = self.pg ?? (yield* Scope.provide(reserveRaw, scope));
|
|
199
212
|
yield* Scope.addFinalizer(scope, Effect.promise(() => cursor.close()));
|
|
200
213
|
const cursor = client.query(new Cursor(sql, params));
|
|
201
|
-
|
|
214
|
+
// @effect-diagnostics-next-line returnEffectInGen:off
|
|
215
|
+
return Effect.callback(resume => {
|
|
202
216
|
cursor.read(128, (err, rows) => {
|
|
203
217
|
if (err) {
|
|
204
|
-
resume(Effect.fail(
|
|
218
|
+
resume(Effect.fail(new SqlError({
|
|
205
219
|
cause: err,
|
|
206
220
|
message: "Failed to execute statement"
|
|
207
|
-
})))
|
|
208
|
-
} else if (Arr.
|
|
209
|
-
resume(Effect.succeed(
|
|
221
|
+
})));
|
|
222
|
+
} else if (Arr.isArrayNonEmpty(rows)) {
|
|
223
|
+
resume(Effect.succeed(transformRows ? transformRows(rows) : rows));
|
|
210
224
|
} else {
|
|
211
|
-
resume(
|
|
225
|
+
resume(Cause.done());
|
|
212
226
|
}
|
|
213
227
|
});
|
|
214
228
|
});
|
|
215
|
-
|
|
216
|
-
}).pipe(Stream.unwrapScoped);
|
|
229
|
+
})));
|
|
217
230
|
}
|
|
218
231
|
}
|
|
219
|
-
const reserveRaw = Effect.
|
|
220
|
-
const fiber =
|
|
221
|
-
const scope =
|
|
232
|
+
const reserveRaw = Effect.callback(resume => {
|
|
233
|
+
const fiber = Fiber.getCurrent();
|
|
234
|
+
const scope = ServiceMap.getUnsafe(fiber.services, Scope.Scope);
|
|
222
235
|
let cause = undefined;
|
|
223
|
-
function onError(cause_) {
|
|
224
|
-
cause = cause_;
|
|
225
|
-
}
|
|
226
236
|
pool.connect((err, client, release) => {
|
|
227
237
|
if (err) {
|
|
228
238
|
resume(Effect.fail(new SqlError({
|
|
229
239
|
cause: err,
|
|
230
240
|
message: "Failed to acquire connection for transaction"
|
|
231
241
|
})));
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
242
|
+
} else {
|
|
243
|
+
resume(Effect.as(Scope.addFinalizer(scope, Effect.sync(() => {
|
|
244
|
+
client.off("error", onError);
|
|
245
|
+
release(cause);
|
|
246
|
+
})), client));
|
|
247
|
+
}
|
|
248
|
+
function onError(cause_) {
|
|
249
|
+
cause = cause_;
|
|
239
250
|
}
|
|
240
|
-
// Else we know we have client defined, so we can proceed with the connection
|
|
241
251
|
client.on("error", onError);
|
|
242
|
-
resume(Effect.as(Scope.addFinalizer(scope, Effect.sync(() => {
|
|
243
|
-
client.off("error", onError);
|
|
244
|
-
release(cause);
|
|
245
|
-
})), client));
|
|
246
252
|
});
|
|
247
253
|
});
|
|
248
254
|
const reserve = Effect.map(reserveRaw, client => new ConnectionImpl(client));
|
|
249
255
|
const listenClient = yield* RcRef.make({
|
|
250
256
|
acquire: reserveRaw
|
|
251
257
|
});
|
|
252
|
-
let config =
|
|
258
|
+
let config = {
|
|
259
|
+
url: pool.options.connectionString ? Redacted.make(pool.options.connectionString) : undefined,
|
|
260
|
+
host: pool.options.host,
|
|
261
|
+
port: pool.options.port,
|
|
262
|
+
database: pool.options.database,
|
|
263
|
+
username: pool.options.user,
|
|
264
|
+
password: typeof pool.options.password === "string" ? Redacted.make(pool.options.password) : undefined,
|
|
265
|
+
ssl: pool.options.ssl,
|
|
266
|
+
applicationName: pool.options.application_name,
|
|
267
|
+
types: pool.options.types
|
|
268
|
+
};
|
|
253
269
|
if (pool.options.connectionString) {
|
|
270
|
+
// @effect-diagnostics-next-line tryCatchInEffectGen:off
|
|
254
271
|
try {
|
|
255
272
|
const parsed = PgConnString.parse(pool.options.connectionString);
|
|
256
273
|
config = {
|
|
257
274
|
...config,
|
|
258
275
|
host: config.host ?? parsed.host ?? undefined,
|
|
259
|
-
port: config.port ?? (parsed.port ?
|
|
276
|
+
port: config.port ?? (parsed.port ? Number.parse(parsed.port) : undefined),
|
|
260
277
|
username: config.username ?? parsed.user ?? undefined,
|
|
261
278
|
password: config.password ?? (parsed.password ? Redacted.make(parsed.password) : undefined),
|
|
262
279
|
database: config.database ?? parsed.database ?? undefined
|
|
@@ -269,17 +286,17 @@ export const make = options => Effect.gen(function* () {
|
|
|
269
286
|
acquirer: Effect.succeed(new ConnectionImpl()),
|
|
270
287
|
transactionAcquirer: reserve,
|
|
271
288
|
compiler,
|
|
272
|
-
spanAttributes: [...(options.spanAttributes ? Object.entries(options.spanAttributes) : []), [ATTR_DB_SYSTEM_NAME, "postgresql"], [ATTR_DB_NAMESPACE,
|
|
289
|
+
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]],
|
|
273
290
|
transformRows
|
|
274
291
|
}), {
|
|
275
292
|
[TypeId]: TypeId,
|
|
276
293
|
config,
|
|
277
|
-
json: _ => PgJson(_),
|
|
278
|
-
listen: channel => Stream.
|
|
294
|
+
json: _ => Statement.fragment([PgJson(_)]),
|
|
295
|
+
listen: channel => Stream.callback(Effect.fnUntraced(function* (queue) {
|
|
279
296
|
const client = yield* RcRef.get(listenClient);
|
|
280
297
|
function onNotification(msg) {
|
|
281
298
|
if (msg.channel === channel && msg.payload) {
|
|
282
|
-
|
|
299
|
+
Queue.offerUnsafe(queue, msg.payload);
|
|
283
300
|
}
|
|
284
301
|
}
|
|
285
302
|
yield* Effect.addFinalizer(() => Effect.promise(() => {
|
|
@@ -295,7 +312,7 @@ export const make = options => Effect.gen(function* () {
|
|
|
295
312
|
});
|
|
296
313
|
client.on("notification", onNotification);
|
|
297
314
|
})),
|
|
298
|
-
notify: (channel, payload) => Effect.
|
|
315
|
+
notify: (channel, payload) => Effect.callback(resume => {
|
|
299
316
|
pool.query(`NOTIFY ${Pg.escapeIdentifier(channel)}, $1`, [payload], err => {
|
|
300
317
|
if (err) {
|
|
301
318
|
resume(Effect.fail(new SqlError({
|
|
@@ -317,7 +334,7 @@ const makeCancel = (pool, client) => {
|
|
|
317
334
|
const processId = client.processID;
|
|
318
335
|
const eff = processId !== undefined
|
|
319
336
|
// query cancelation is best-effort, so we don't fail if it doesn't work
|
|
320
|
-
? Effect.
|
|
337
|
+
? Effect.callback(resume => {
|
|
321
338
|
if (pool.ending) return resume(Effect.void);
|
|
322
339
|
pool.query(`SELECT pg_cancel_backend(${processId})`, () => {
|
|
323
340
|
resume(Effect.void);
|
|
@@ -330,12 +347,17 @@ const makeCancel = (pool, client) => {
|
|
|
330
347
|
* @category layers
|
|
331
348
|
* @since 1.0.0
|
|
332
349
|
*/
|
|
333
|
-
export const layerConfig = config => Layer.
|
|
350
|
+
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));
|
|
351
|
+
/**
|
|
352
|
+
* @category layers
|
|
353
|
+
* @since 1.0.0
|
|
354
|
+
*/
|
|
355
|
+
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));
|
|
334
356
|
/**
|
|
335
357
|
* @category layers
|
|
336
358
|
* @since 1.0.0
|
|
337
359
|
*/
|
|
338
|
-
export const
|
|
360
|
+
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));
|
|
339
361
|
/**
|
|
340
362
|
* @category constructor
|
|
341
363
|
* @since 1.0.0
|
|
@@ -357,7 +379,7 @@ export const makeCompiler = (transform, transformJson = true) => {
|
|
|
357
379
|
switch (type.kind) {
|
|
358
380
|
case "PgJson":
|
|
359
381
|
{
|
|
360
|
-
return [placeholder(undefined), [withoutTransform || transformValue === undefined ? type.
|
|
382
|
+
return [placeholder(undefined), [withoutTransform || transformValue === undefined ? type.paramA : transformValue(type.paramA)]];
|
|
361
383
|
}
|
|
362
384
|
}
|
|
363
385
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"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":[]}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @since 1.0.0
|
|
3
|
+
*/
|
|
4
|
+
import type * as Effect from "effect/Effect";
|
|
5
|
+
import * as Layer from "effect/Layer";
|
|
6
|
+
import * as Migrator from "effect/unstable/sql/Migrator";
|
|
7
|
+
import type * as Client from "effect/unstable/sql/SqlClient";
|
|
8
|
+
import type { SqlError } from "effect/unstable/sql/SqlError";
|
|
9
|
+
/**
|
|
10
|
+
* @since 1.0.0
|
|
11
|
+
*/
|
|
12
|
+
export * from "effect/unstable/sql/Migrator";
|
|
13
|
+
/**
|
|
14
|
+
* @category constructor
|
|
15
|
+
* @since 1.0.0
|
|
16
|
+
*/
|
|
17
|
+
export declare const run: <R2 = never>(options: Migrator.MigratorOptions<R2>) => Effect.Effect<ReadonlyArray<readonly [id: number, name: string]>, Migrator.MigrationError | SqlError, Client.SqlClient | R2>;
|
|
18
|
+
/**
|
|
19
|
+
* @category layers
|
|
20
|
+
* @since 1.0.0
|
|
21
|
+
*/
|
|
22
|
+
export declare const layer: <R>(options: Migrator.MigratorOptions<R>) => Layer.Layer<never, Migrator.MigrationError | SqlError, Client.SqlClient | R>;
|
|
23
|
+
//# sourceMappingURL=PgMigrator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"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"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import * as Layer from "effect/Layer";
|
|
2
|
+
import * as Migrator from "effect/unstable/sql/Migrator";
|
|
3
|
+
/**
|
|
4
|
+
* @since 1.0.0
|
|
5
|
+
*/
|
|
6
|
+
export * from "effect/unstable/sql/Migrator";
|
|
7
|
+
/**
|
|
8
|
+
* @category constructor
|
|
9
|
+
* @since 1.0.0
|
|
10
|
+
*/
|
|
11
|
+
export const run = /*#__PURE__*/Migrator.make({
|
|
12
|
+
// TODO: Wait for Command module
|
|
13
|
+
// dumpSchema(path, table) {
|
|
14
|
+
// const pgDump = (args: Array<string>) =>
|
|
15
|
+
// Effect.gen(function*() {
|
|
16
|
+
// const sql = yield* PgClient
|
|
17
|
+
// const dump = yield* pipe(
|
|
18
|
+
// Command.make("pg_dump", ...args, "--no-owner", "--no-privileges"),
|
|
19
|
+
// Command.env({
|
|
20
|
+
// PATH: (globalThis as any).process?.env.PATH,
|
|
21
|
+
// PGHOST: sql.config.host,
|
|
22
|
+
// PGPORT: sql.config.port?.toString(),
|
|
23
|
+
// PGUSER: sql.config.username,
|
|
24
|
+
// PGPASSWORD: sql.config.password
|
|
25
|
+
// ? Redacted.value(sql.config.password)
|
|
26
|
+
// : undefined,
|
|
27
|
+
// PGDATABASE: sql.config.database,
|
|
28
|
+
// PGSSLMODE: sql.config.ssl ? "require" : "prefer"
|
|
29
|
+
// }),
|
|
30
|
+
// Command.string
|
|
31
|
+
// )
|
|
32
|
+
//
|
|
33
|
+
// return dump.replace(/^--.*$/gm, "")
|
|
34
|
+
// .replace(/^SET .*$/gm, "")
|
|
35
|
+
// .replace(/^SELECT pg_catalog\..*$/gm, "")
|
|
36
|
+
// .replace(/\n{2,}/gm, "\n\n")
|
|
37
|
+
// .trim()
|
|
38
|
+
// }).pipe(
|
|
39
|
+
// Effect.mapError((error) => new Migrator.MigrationError({ kind: "Failed", message: error.message }))
|
|
40
|
+
// )
|
|
41
|
+
//
|
|
42
|
+
// const pgDumpSchema = pgDump(["--schema-only"])
|
|
43
|
+
//
|
|
44
|
+
// const pgDumpMigrations = pgDump([
|
|
45
|
+
// "--column-inserts",
|
|
46
|
+
// "--data-only",
|
|
47
|
+
// `--table=${table}`
|
|
48
|
+
// ])
|
|
49
|
+
//
|
|
50
|
+
// const pgDumpAll = Effect.map(
|
|
51
|
+
// Effect.all([pgDumpSchema, pgDumpMigrations], { concurrency: 2 }),
|
|
52
|
+
// ([schema, migrations]) => schema + "\n\n" + migrations
|
|
53
|
+
// )
|
|
54
|
+
//
|
|
55
|
+
// const pgDumpFile = (path: string) =>
|
|
56
|
+
// Effect.gen(function*() {
|
|
57
|
+
// const fs = yield* FileSystem
|
|
58
|
+
// const path_ = yield* Path
|
|
59
|
+
// const dump = yield* pgDumpAll
|
|
60
|
+
// yield* fs.makeDirectory(path_.dirname(path), { recursive: true })
|
|
61
|
+
// yield* fs.writeFileString(path, dump)
|
|
62
|
+
// }).pipe(
|
|
63
|
+
// Effect.mapError((error) => new Migrator.MigrationError({ kind: "Failed", message: error.message }))
|
|
64
|
+
// )
|
|
65
|
+
//
|
|
66
|
+
// return pgDumpFile(path)
|
|
67
|
+
// }
|
|
68
|
+
});
|
|
69
|
+
/**
|
|
70
|
+
* @category layers
|
|
71
|
+
* @since 1.0.0
|
|
72
|
+
*/
|
|
73
|
+
export const layer = options => Layer.effectDiscard(run(options));
|
|
74
|
+
//# sourceMappingURL=PgMigrator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"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":[]}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"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":[]}
|