@shivaedev/effect-prisma 0.9.0 → 0.9.2
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/CHANGELOG.md +12 -0
- package/README.md +1 -3
- package/dist/database.d.ts.map +1 -1
- package/dist/database.js +13 -2
- package/dist/database.js.map +1 -1
- package/dist/internal/makePostgresPool.d.ts +4 -0
- package/dist/internal/makePostgresPool.d.ts.map +1 -0
- package/dist/internal/makePostgresPool.js +25 -0
- package/dist/internal/makePostgresPool.js.map +1 -0
- package/package.json +5 -4
- package/src/database.ts +13 -2
- package/src/internal/makePostgresPool.ts +27 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.9.2 - 2026-10-17
|
|
4
|
+
|
|
5
|
+
### Fixed
|
|
6
|
+
|
|
7
|
+
- A PostgreSQL connection lost while sending `BEGIN` fails the transaction with its original typed connection failure without crashing the process.
|
|
8
|
+
|
|
9
|
+
## 0.9.1 - 2026-10-17
|
|
10
|
+
|
|
11
|
+
### Fixed
|
|
12
|
+
|
|
13
|
+
- Publish against `@shivaedev/effect-test` 0.5.0 so framework consumers share the current test runner.
|
|
14
|
+
|
|
3
15
|
## 0.9.0 - 2026-10-13
|
|
4
16
|
|
|
5
17
|
### Changed
|
package/README.md
CHANGED
|
@@ -251,9 +251,7 @@ pnpm add --save-dev @effect/vitest@4.0.4 vitest@5.0.3
|
|
|
251
251
|
|
|
252
252
|
The Vitest dependencies are needed only for `testing/vitest.ts`. Use Node.js 24 or newer and compatible versions of the package's Effect and Prisma Next dependencies.
|
|
253
253
|
|
|
254
|
-
The application owns its Prisma Next CLI/configuration, initialized schema and
|
|
255
|
-
migration workflow. This package does not apply schema changes. Emit that
|
|
256
|
-
application's contract, then normalize its PostgreSQL declaration:
|
|
254
|
+
The application owns its Prisma Next CLI/configuration, initialized schema and migration workflow. This package does not apply schema changes. Emit that application's contract, then normalize its PostgreSQL declaration:
|
|
257
255
|
|
|
258
256
|
```sh
|
|
259
257
|
prisma-next contract emit
|
package/dist/database.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../src/database.ts"],"names":[],"mappings":"AAAA,OAAiB,EAAuB,KAAK,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACxG,OAAO,EAAE,KAAK,KAAK,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,KAAK,EAAE,kBAAkB,EAAE,yBAAyB,EAAE,qBAAqB,EAAiB,MAAM,mBAAmB,CAAC;AAI7H,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../src/database.ts"],"names":[],"mappings":"AAAA,OAAiB,EAAuB,KAAK,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACxG,OAAO,EAAE,KAAK,KAAK,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,KAAK,EAAE,kBAAkB,EAAE,yBAAyB,EAAE,qBAAqB,EAAiB,MAAM,mBAAmB,CAAC;AAI7H,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAG5D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,MAAM,WAAW,oBAAqB,SAAQ,mBAAmB;IAChE,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;CACjD;AAED,KAAK,sBAAsB,CAAC,SAAS,SAAS,cAAc,IACzD;IACA,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC;IAC7B,QAAQ,CAAC,YAAY,CAAC,EAAE,KAAK,CAAC;CAC7B,GACD;IACA,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC;CACzB,CAAC;AAEL,MAAM,WAAW,kBAAkB,CAAC,SAAS,SAAS,cAAc,EAAE,WAAW,SAAS,MAAM,CAC/F,SAAQ,qBAAqB,CAAC,SAAS,EAAE,WAAW,CAAC;IACrD,QAAQ,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE,oBAAoB,KAAK,KAAK,CAAC,KAAK,CAAC,kBAAkB,CAAC,SAAS,EAAE,WAAW,CAAC,EAAE,WAAW,CAAC,CAAC;CACxH;AAkBD,eAAO,MAAM,YAAY,GACvB,KAAK,CAAC,SAAS,SAAS,cAAc,QACtC,KAAK,CAAC,WAAW,SAAS,MAAM,cACpB,yBAAyB,CAAC,WAAW,CAAC,WACzC,sBAAsB,CAAC,SAAS,CAAC,KACxC,kBAAkB,CAAC,SAAS,EAAE,WAAW,CA0C3C,CAAC"}
|
package/dist/database.js
CHANGED
|
@@ -3,6 +3,7 @@ import { Redacted } from "effect";
|
|
|
3
3
|
import { acquireConnectedClient } from "#internal/client-lifecycle.ts";
|
|
4
4
|
import { namespaceModels } from "#internal/database-facade.ts";
|
|
5
5
|
import { makeSqlDatabase } from "#internal/database-factory.ts";
|
|
6
|
+
import { makePostgresPool } from "#internal/makePostgresPool.ts";
|
|
6
7
|
import { fromPrismaPromise } from "#internal/promise.ts";
|
|
7
8
|
function clientOptions({ url, extensions, middleware, poolOptions, verifyMarker }) {
|
|
8
9
|
return {
|
|
@@ -28,8 +29,18 @@ export const makeDatabase = () => (identifier, options) => {
|
|
|
28
29
|
...forwarded,
|
|
29
30
|
contract: options.contract,
|
|
30
31
|
});
|
|
31
|
-
|
|
32
|
-
|
|
32
|
+
const pool = makePostgresPool(forwarded.url, layerOptions.poolOptions);
|
|
33
|
+
let closing;
|
|
34
|
+
const ownedClient = {
|
|
35
|
+
...client,
|
|
36
|
+
close: () => {
|
|
37
|
+
closing ??= client.close().finally(() => pool.end());
|
|
38
|
+
return closing;
|
|
39
|
+
},
|
|
40
|
+
connect: () => client.connect({ pg: pool }),
|
|
41
|
+
};
|
|
42
|
+
return fromPrismaPromise(() => acquireConnectedClient(ownedClient, () => ({
|
|
43
|
+
client: ownedClient,
|
|
33
44
|
identity: {},
|
|
34
45
|
liveness: {
|
|
35
46
|
closedCode: "RUNTIME.DATABASE_CLOSED",
|
package/dist/database.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"database.js","sourceRoot":"","sources":["../src/database.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,EAAE,EAAiD,MAAM,+BAA+B,CAAC;AACxG,OAAO,EAAc,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAE9C,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAEhE,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAsBzD,SAAS,aAAa,CAAC,EAAE,GAAG,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAwB;IACtG,OAAO;QACN,GAAG,EAAE,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC;QACxD,GAAG,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC;QACnD,GAAG,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC;QACnD,GAAG,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC;QACrD,GAAG,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC;KACvD,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CACrB,MAA2D;IAE3D,OAAO,eAAe,CAAqB,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;AACzE,CAAC;AAED,MAAM,CAAC,MAAM,YAAY,GACxB,GAA2C,EAAE,CAC7C,CACC,UAAkD,EAClD,OAA0C,EACG,EAAE;IAG/C,OAAO,eAAe,CAA+C,UAAU,EAAE,CAAC,YAAY,EAAE,EAAE;QACjG,MAAM,SAAS,GAAG,aAAa,CAAC,YAAY,CAAC,CAAC;QAC9C,MAAM,MAAM,GACX,OAAO,CAAC,QAAQ,KAAK,SAAS;YAC7B,CAAC,CAAC,QAAQ,CAAY;gBACpB,GAAG,SAAS;gBACZ,YAAY,EAAE,OAAO,CAAC,YAAY;aAClC,CAAC;YACH,CAAC,CAAC,QAAQ,CAAY;gBACpB,GAAG,SAAS;gBACZ,QAAQ,EAAE,OAAO,CAAC,QAAQ;aAC1B,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"database.js","sourceRoot":"","sources":["../src/database.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"makePostgresPool.d.ts","sourceRoot":"","sources":["../../src/internal/makePostgresPool.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,EAAU,IAAI,EAAmB,MAAM,IAAI,CAAC;AAQnD,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,mBAAmB,CAAC,aAAa,CAAC,GAAG,IAAI,CAiB/F"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { Client, Pool } from "pg";
|
|
2
|
+
function closeFailedClient(client) {
|
|
3
|
+
if (client instanceof Client) {
|
|
4
|
+
void client.end();
|
|
5
|
+
}
|
|
6
|
+
}
|
|
7
|
+
export function makePostgresPool(url, options) {
|
|
8
|
+
const pool = new Pool({
|
|
9
|
+
connectionString: url.trim(),
|
|
10
|
+
connectionTimeoutMillis: options?.connectionTimeoutMillis ?? 20_000,
|
|
11
|
+
idleTimeoutMillis: options?.idleTimeoutMillis ?? 30_000,
|
|
12
|
+
});
|
|
13
|
+
pool.on("connect", (client) => {
|
|
14
|
+
client.on("error", () => {
|
|
15
|
+
// pg rejects pending queries with the original error before emitting it.
|
|
16
|
+
// Close the failed socket; Prisma Next still owns rejection and release.
|
|
17
|
+
closeFailedClient(client);
|
|
18
|
+
});
|
|
19
|
+
});
|
|
20
|
+
pool.on("error", (_error, client) => {
|
|
21
|
+
closeFailedClient(client);
|
|
22
|
+
});
|
|
23
|
+
return pool;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=makePostgresPool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"makePostgresPool.js","sourceRoot":"","sources":["../../src/internal/makePostgresPool.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,IAAI,EAAmB,MAAM,IAAI,CAAC;AAEnD,SAAS,iBAAiB,CAAC,MAAkB;IAC5C,IAAI,MAAM,YAAY,MAAM,EAAE,CAAC;QAC9B,KAAK,MAAM,CAAC,GAAG,EAAE,CAAC;IACnB,CAAC;AACF,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,GAAW,EAAE,OAA2C;IACxF,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC;QACrB,gBAAgB,EAAE,GAAG,CAAC,IAAI,EAAE;QAC5B,uBAAuB,EAAE,OAAO,EAAE,uBAAuB,IAAI,MAAM;QACnE,iBAAiB,EAAE,OAAO,EAAE,iBAAiB,IAAI,MAAM;KACvD,CAAC,CAAC;IACH,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,MAAM,EAAE,EAAE;QAC7B,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YACvB,yEAAyE;YACzE,yEAAyE;YACzE,iBAAiB,CAAC,MAAM,CAAC,CAAC;QAC3B,CAAC,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;IACH,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE;QACnC,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAC3B,CAAC,CAAC,CAAC;IACH,OAAO,IAAI,CAAC;AACb,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@shivaedev/effect-prisma",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.2",
|
|
4
4
|
"description": "Effect-native PostgreSQL queries and transactions for Prisma Next",
|
|
5
5
|
"homepage": "https://github.com/ShivaeDev/platform/tree/main/packages/effect-prisma#readme",
|
|
6
6
|
"bugs": {
|
|
@@ -53,7 +53,8 @@
|
|
|
53
53
|
"@prisma-next/sql-relational-core": "0.16.0",
|
|
54
54
|
"@prisma-next/sql-runtime": "0.16.0",
|
|
55
55
|
"@prisma-next/sqlite": "0.16.0",
|
|
56
|
-
"@shivaedev/effect-test": "0.
|
|
56
|
+
"@shivaedev/effect-test": "0.5.0",
|
|
57
|
+
"pg": "8.23.0"
|
|
57
58
|
},
|
|
58
59
|
"devDependencies": {
|
|
59
60
|
"@effect/vitest": "4.0.4",
|
|
@@ -62,8 +63,8 @@
|
|
|
62
63
|
"@prisma-next/cli": "0.16.0",
|
|
63
64
|
"@prisma-next/target-postgres": "0.16.0",
|
|
64
65
|
"@prisma-next/target-sqlite": "0.16.0",
|
|
65
|
-
"@shivaedev/quality": "0.
|
|
66
|
-
"@types/node": "24.19.
|
|
66
|
+
"@shivaedev/quality": "0.23.0",
|
|
67
|
+
"@types/node": "24.19.2",
|
|
67
68
|
"@types/pg": "8.20.0",
|
|
68
69
|
"@typescript/native": "npm:typescript@7.0.2",
|
|
69
70
|
"effect": "4.0.4",
|
package/src/database.ts
CHANGED
|
@@ -5,6 +5,7 @@ import { acquireConnectedClient } from "#internal/client-lifecycle.ts";
|
|
|
5
5
|
import { namespaceModels } from "#internal/database-facade.ts";
|
|
6
6
|
import { makeSqlDatabase } from "#internal/database-factory.ts";
|
|
7
7
|
import type { AnySqlContract } from "#internal/executor.ts";
|
|
8
|
+
import { makePostgresPool } from "#internal/makePostgresPool.ts";
|
|
8
9
|
import { fromPrismaPromise } from "#internal/promise.ts";
|
|
9
10
|
import type { PrismaError } from "./error.ts";
|
|
10
11
|
|
|
@@ -63,10 +64,20 @@ export const makeDatabase =
|
|
|
63
64
|
...forwarded,
|
|
64
65
|
contract: options.contract,
|
|
65
66
|
});
|
|
67
|
+
const pool = makePostgresPool(forwarded.url, layerOptions.poolOptions);
|
|
68
|
+
let closing: Promise<void> | undefined;
|
|
69
|
+
const ownedClient = {
|
|
70
|
+
...client,
|
|
71
|
+
close: () => {
|
|
72
|
+
closing ??= client.close().finally(() => pool.end());
|
|
73
|
+
return closing;
|
|
74
|
+
},
|
|
75
|
+
connect: () => client.connect({ pg: pool }),
|
|
76
|
+
};
|
|
66
77
|
|
|
67
78
|
return fromPrismaPromise(() =>
|
|
68
|
-
acquireConnectedClient(
|
|
69
|
-
client,
|
|
79
|
+
acquireConnectedClient(ownedClient, () => ({
|
|
80
|
+
client: ownedClient,
|
|
70
81
|
identity: {},
|
|
71
82
|
liveness: {
|
|
72
83
|
closedCode: "RUNTIME.DATABASE_CLOSED",
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { PostgresOptionsBase } from "@prisma-next/postgres/runtime";
|
|
2
|
+
import { Client, Pool, type PoolClient } from "pg";
|
|
3
|
+
|
|
4
|
+
function closeFailedClient(client: PoolClient): void {
|
|
5
|
+
if (client instanceof Client) {
|
|
6
|
+
void client.end();
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export function makePostgresPool(url: string, options: PostgresOptionsBase["poolOptions"]): Pool {
|
|
11
|
+
const pool = new Pool({
|
|
12
|
+
connectionString: url.trim(),
|
|
13
|
+
connectionTimeoutMillis: options?.connectionTimeoutMillis ?? 20_000,
|
|
14
|
+
idleTimeoutMillis: options?.idleTimeoutMillis ?? 30_000,
|
|
15
|
+
});
|
|
16
|
+
pool.on("connect", (client) => {
|
|
17
|
+
client.on("error", () => {
|
|
18
|
+
// pg rejects pending queries with the original error before emitting it.
|
|
19
|
+
// Close the failed socket; Prisma Next still owns rejection and release.
|
|
20
|
+
closeFailedClient(client);
|
|
21
|
+
});
|
|
22
|
+
});
|
|
23
|
+
pool.on("error", (_error, client) => {
|
|
24
|
+
closeFailedClient(client);
|
|
25
|
+
});
|
|
26
|
+
return pool;
|
|
27
|
+
}
|