@shivaedev/effect-changes-prisma 0.5.0 → 0.5.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 CHANGED
@@ -1,5 +1,17 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.5.2 - 2026-10-18
4
+
5
+ ### Fixed
6
+
7
+ - `beforeCommit` now runs for Prisma transactions with the transaction's scoped client. Hook reads see uncommitted body rows, and a hook failure rolls back body and hook writes and publishes nothing.
8
+
9
+ ## 0.5.1 - 2026-10-17
10
+
11
+ ### Fixed
12
+
13
+ - Publish against `@shivaedev/types` 0.2.1 so framework consumers share the current version.
14
+
3
15
  ## 0.5.0 - 2026-10-13
4
16
 
5
17
  ### Changed
package/README.md CHANGED
@@ -271,7 +271,7 @@ Import the module that defines the name. There is no root entry point.
271
271
  | `tables.ts` | `RawQueryClient`, `TableWrites`, `tablesOf`, `tableWrites`, `writtenTables` |
272
272
  | `error.ts` | `PrismaError`, `TransactionExpired` |
273
273
 
274
- `PrismaChangesOptions` takes `client`, `models` and the effect-changes channel options other than `owner` and `unowned`: `name`, `key`, `publish` and `onPublishFailure`. The binding returns `Client`, `channel`, `use`, `transaction`, `recordWrite` and `Unnamed`.
274
+ `PrismaChangesOptions` takes `client`, `models` and the effect-changes channel options other than `owner` and `unowned`: `name`, `key`, `publish`, `onPublishFailure` and `beforeCommit`. The `beforeCommit` hook runs inside the Prisma transaction after the body succeeds, with its recorded changes, before commit. Calls to `use` in the hook use the transaction's scoped `Client`, so they see uncommitted body rows. A hook failure rolls back both body and hook writes and publishes nothing. The binding returns `Client`, `channel`, `use`, `transaction`, `recordWrite` and `Unnamed`.
275
275
 
276
276
  ```ts
277
277
  interface Write {
package/dist/changes.d.ts CHANGED
@@ -16,5 +16,5 @@ export interface PrismaChanges<TTx, A, R> {
16
16
  readonly Unnamed: Context.Reference<UnnamedObserver>;
17
17
  readonly use: <TX>(query: (client: TTx) => PromiseLike<TX>) => Effect.Effect<TX, PrismaError, R>;
18
18
  }
19
- export declare const makePrismaChanges: <TTx extends Transactional<TTx>, A, R = never>(options: PrismaChangesOptions<TTx, A, R>) => PrismaChanges<TTx, A, R>;
19
+ export declare function makePrismaChanges<TTx extends Transactional<TTx>, A, R = never>(options: PrismaChangesOptions<TTx, A, R>): PrismaChanges<TTx, A, R>;
20
20
  //# sourceMappingURL=changes.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"changes.d.ts","sourceRoot":"","sources":["../src/changes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,OAAO,EAAE,MAAM,EAAgB,MAAM,QAAQ,CAAC;AAC9D,OAAO,EAAE,KAAK,OAAO,EAAE,KAAK,cAAc,EAAe,MAAM,sCAAsC,CAAC;AACtG,OAAO,EAAE,WAAW,EAAE,KAAK,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAElE,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAG/E,OAAO,EAA4B,KAAK,YAAY,EAAE,KAAK,KAAK,EAAE,MAAM,YAAY,CAAC;AAErF,MAAM,MAAM,eAAe,GAAG,CAAC,KAAK,EAAE,YAAY,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAE3E,MAAM,WAAW,oBAAoB,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAE,SAAQ,IAAI,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACvG,QAAQ,CAAC,MAAM,EAAE,GAAG,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;IAC1C,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;CAC5C;AAED,MAAM,WAAW,aAAa,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC;IACvC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IACxC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAChC,QAAQ,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;IACtE,QAAQ,CAAC,WAAW,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,EAChC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,EAC/B,OAAO,CAAC,EAAE,kBAAkB,KACxB,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,GAAG,kBAAkB,GAAG,WAAW,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC;IACtE,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;IACrD,QAAQ,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK,WAAW,CAAC,EAAE,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC;CACjG;AAWD,eAAO,MAAM,iBAAiB,GAAI,GAAG,SAAS,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,KAAK,WACpE,oBAAoB,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,KACtC,aAAa,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CA8CzB,CAAC"}
1
+ {"version":3,"file":"changes.d.ts","sourceRoot":"","sources":["../src/changes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,OAAO,EAAE,MAAM,EAAgB,MAAM,QAAQ,CAAC;AAC9D,OAAO,EAAE,KAAK,OAAO,EAAE,KAAK,cAAc,EAAe,MAAM,sCAAsC,CAAC;AACtG,OAAO,EAAE,WAAW,EAAE,KAAK,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAElE,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAG/E,OAAO,EAA4B,KAAK,YAAY,EAAE,KAAK,KAAK,EAAE,MAAM,YAAY,CAAC;AAErF,MAAM,MAAM,eAAe,GAAG,CAAC,KAAK,EAAE,YAAY,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAE3E,MAAM,WAAW,oBAAoB,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAE,SAAQ,IAAI,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACvG,QAAQ,CAAC,MAAM,EAAE,GAAG,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;IAC1C,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;CAC5C;AAED,MAAM,WAAW,aAAa,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC;IACvC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IACxC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAChC,QAAQ,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;IACtE,QAAQ,CAAC,WAAW,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,EAChC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,EAC/B,OAAO,CAAC,EAAE,kBAAkB,KACxB,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,GAAG,kBAAkB,GAAG,WAAW,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC;IACtE,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;IACrD,QAAQ,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK,WAAW,CAAC,EAAE,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC;CACjG;AAWD,wBAAgB,iBAAiB,CAAC,GAAG,SAAS,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,OAAO,EAAE,oBAAoB,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,aAAa,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAgDlJ"}
package/dist/changes.js CHANGED
@@ -12,7 +12,7 @@ function expireOnClosed(Expiry, exit) {
12
12
  onSome: ({ cause }) => (isTransactionClosed(cause) ? Effect.flatMap(Effect.service(Expiry), (expire) => expire(cause)) : Effect.void),
13
13
  });
14
14
  }
15
- export const makePrismaChanges = (options) => {
15
+ export function makePrismaChanges(options) {
16
16
  const { client, models: typed, ...channelOptions } = options;
17
17
  const models = typed;
18
18
  const prefix = `@shivaedev/effect-changes-prisma/${options.name}/${crypto.randomUUID()}`;
@@ -39,19 +39,22 @@ export const makePrismaChanges = (options) => {
39
39
  yield* expireOnClosed(Expiry, exit);
40
40
  return yield* exit;
41
41
  }, Effect.uninterruptible);
42
- const transaction = (body, transactionOptions) => Effect.flatMap(Effect.service(Client), (current) => {
43
- const savepoint = isTransactionClient(current);
44
- const run = runTransaction({
45
- body: (tx) => Effect.provideService(body, Client, tx),
46
- client: current,
47
- deadline: savepoint ? undefined : (transactionOptions?.timeout ?? configuredTimeout(current)),
48
- Expiry,
49
- open: channel.open,
50
- savepoint,
51
- transaction: transactionOptions,
52
- });
53
- return savepoint ? run : Effect.provideService(run, Expiry, unlinked);
54
- }).pipe(Effect.withSpan("PrismaChanges.transaction"));
42
+ function transaction(body, transactionOptions) {
43
+ return Effect.flatMap(Effect.service(Client), (current) => {
44
+ const savepoint = isTransactionClient(current);
45
+ const run = runTransaction({
46
+ body: () => body,
47
+ Client,
48
+ client: current,
49
+ deadline: savepoint ? undefined : (transactionOptions?.timeout ?? configuredTimeout(current)),
50
+ Expiry,
51
+ open: channel.open,
52
+ savepoint,
53
+ transaction: transactionOptions,
54
+ });
55
+ return savepoint ? run : Effect.provideService(run, Expiry, unlinked);
56
+ }).pipe(Effect.withSpan("PrismaChanges.transaction"));
57
+ }
55
58
  return { Client, channel, recordWrite, transaction, Unnamed, use };
56
- };
59
+ }
57
60
  //# sourceMappingURL=changes.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"changes.js","sourceRoot":"","sources":["../src/changes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"changes.js","sourceRoot":"","sources":["../src/changes.ts"],"names":[],"mappings":"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"}
@@ -16,5 +16,5 @@ export interface Coverage<A> {
16
16
  readonly unnamed: Iterable<UnnamedWrite>;
17
17
  readonly written: Iterable<string>;
18
18
  }
19
- export declare const checkCoverage: <A>(coverage: Coverage<A>) => readonly CoverageViolation[];
19
+ export declare function checkCoverage<A>(coverage: Coverage<A>): readonly CoverageViolation[];
20
20
  //# sourceMappingURL=coverage.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"coverage.d.ts","sourceRoot":"","sources":["../src/coverage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAC;AACxE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,MAAM,MAAM,iBAAiB,GAC1B;IAAE,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,GAC3F;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAA;CAAE,CAAC;AAE9D,MAAM,WAAW,QAAQ,CAAC,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,KAAK,OAAO,CAAC;IACvD,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACnD,QAAQ,CAAC,YAAY,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IAChD,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7C,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC;IACzC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;CACnC;AAUD,eAAO,MAAM,aAAa,GAAI,CAAC,YAAY,QAAQ,CAAC,CAAC,CAAC,KAAG,SAAS,iBAAiB,EAclF,CAAC"}
1
+ {"version":3,"file":"coverage.d.ts","sourceRoot":"","sources":["../src/coverage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAC;AACxE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,MAAM,MAAM,iBAAiB,GAC1B;IAAE,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,GAC3F;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAA;CAAE,CAAC;AAE9D,MAAM,WAAW,QAAQ,CAAC,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,KAAK,OAAO,CAAC;IACvD,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACnD,QAAQ,CAAC,YAAY,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IAChD,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7C,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC;IACzC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;CACnC;AAUD,wBAAgB,aAAa,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,SAAS,iBAAiB,EAAE,CAcpF"}
package/dist/coverage.js CHANGED
@@ -4,7 +4,7 @@ function recordedIn(observations) {
4
4
  function identify(write) {
5
5
  return write.reason === "narrowed" ? `${write.model}.${write.operation}.${write.field}` : `${write.model}.${write.operation}`;
6
6
  }
7
- export const checkCoverage = (coverage) => {
7
+ export function checkCoverage(coverage) {
8
8
  const recorded = recordedIn(coverage.observations);
9
9
  const unrecorded = [...new Set(coverage.written)].flatMap((table) => {
10
10
  const model = coverage.tables.get(table);
@@ -18,5 +18,5 @@ export const checkCoverage = (coverage) => {
18
18
  });
19
19
  const unnamed = new Map([...coverage.unnamed].map((write) => [identify(write), write]));
20
20
  return [...unrecorded, ...[...unnamed.values()].map((write) => ({ _tag: "Unnamed", write }))];
21
- };
21
+ }
22
22
  //# sourceMappingURL=coverage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"coverage.js","sourceRoot":"","sources":["../src/coverage.ts"],"names":[],"mappings":"AAgBA,SAAS,UAAU,CAAI,YAAsC;IAC5D,OAAO,CAAC,GAAG,YAAY,CAAC,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACjH,CAAC;AAED,SAAS,QAAQ,CAAC,KAAmB;IACpC,OAAO,KAAK,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;AAC/H,CAAC;AAED,MAAM,CAAC,MAAM,aAAa,GAAG,CAAI,QAAqB,EAAgC,EAAE;IACvF,MAAM,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;IACnD,MAAM,UAAU,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAgC,EAAE;QACjG,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACzC,IAAI,KAAK,KAAK,SAAS,IAAI,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC;YAC5D,OAAO,EAAE,CAAC;QACX,CAAC;QACD,IAAI,KAAK,KAAK,SAAS,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC;YACtF,OAAO,EAAE,CAAC;QACX,CAAC;QACD,OAAO,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IACH,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,CAAU,CAAC,CAAC,CAAC;IACjG,OAAO,CAAC,GAAG,UAAU,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAqB,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;AAClH,CAAC,CAAC"}
1
+ {"version":3,"file":"coverage.js","sourceRoot":"","sources":["../src/coverage.ts"],"names":[],"mappings":"AAgBA,SAAS,UAAU,CAAI,YAAsC;IAC5D,OAAO,CAAC,GAAG,YAAY,CAAC,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACjH,CAAC;AAED,SAAS,QAAQ,CAAC,KAAmB;IACpC,OAAO,KAAK,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;AAC/H,CAAC;AAED,MAAM,UAAU,aAAa,CAAI,QAAqB;IACrD,MAAM,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;IACnD,MAAM,UAAU,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAgC,EAAE;QACjG,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACzC,IAAI,KAAK,KAAK,SAAS,IAAI,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC;YAC5D,OAAO,EAAE,CAAC;QACX,CAAC;QACD,IAAI,KAAK,KAAK,SAAS,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC;YACtF,OAAO,EAAE,CAAC;QACX,CAAC;QACD,OAAO,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IACH,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,CAAU,CAAC,CAAC,CAAC;IACjG,OAAO,CAAC,GAAG,UAAU,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAqB,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;AAClH,CAAC"}
package/dist/expiry.d.ts CHANGED
@@ -2,9 +2,9 @@ import { Context, Effect } from "effect";
2
2
  import { TransactionExpired } from "./error.ts";
3
3
  export type Expire = (cause: unknown) => Effect.Effect<void>;
4
4
  export declare const unlinked: Expire;
5
- export declare const makeExpiry: (key: string) => Context.Reference<Expire>;
6
- export declare const isTransactionClient: (client: object) => boolean;
7
- export declare const isTransactionClosed: (cause: unknown) => boolean;
8
- export declare const configuredTimeout: (client: object) => number | undefined;
5
+ export declare function makeExpiry(key: string): Context.Reference<Expire>;
6
+ export declare function isTransactionClient(client: object): boolean;
7
+ export declare function isTransactionClosed(cause: unknown): boolean;
8
+ export declare function configuredTimeout(client: object): number | undefined;
9
9
  export declare const expiring: <TX, E, R>(body: Effect.Effect<TX, E, R>, timeout: number | undefined, Expiry: Context.Reference<Expire>) => Effect.Effect<TX, E | TransactionExpired, R>;
10
10
  //# sourceMappingURL=expiry.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"expiry.d.ts","sourceRoot":"","sources":["../src/expiry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,OAAO,EAAY,MAAM,EAA6B,MAAM,QAAQ,CAAC;AACrF,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAEhD,MAAM,MAAM,MAAM,GAAG,CAAC,KAAK,EAAE,OAAO,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAE7D,eAAO,MAAM,QAAQ,EAAE,MAA0B,CAAC;AAElD,eAAO,MAAM,UAAU,QAAS,MAAM,8BAAqE,CAAC;AAE5G,eAAO,MAAM,mBAAmB,WAAY,MAAM,KAAG,OAAqD,CAAC;AAE3G,eAAO,MAAM,mBAAmB,UAAW,OAAO,KAAG,OAAyE,CAAC;AAM/H,eAAO,MAAM,iBAAiB,WAAY,MAAM,KAAG,MAAM,GAAG,SAG/C,CAAC;AAId,eAAO,MAAM,QAAQ,GAAI,EAAE,EAAE,CAAC,EAAE,CAAC,QAC1B,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,WACpB,MAAM,GAAG,SAAS,UACnB,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,KAC/B,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,GAAG,kBAAkB,EAAE,CAAC,CAoB3C,CAAC"}
1
+ {"version":3,"file":"expiry.d.ts","sourceRoot":"","sources":["../src/expiry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,OAAO,EAAY,MAAM,EAA6B,MAAM,QAAQ,CAAC;AACrF,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAEhD,MAAM,MAAM,MAAM,GAAG,CAAC,KAAK,EAAE,OAAO,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAE7D,eAAO,MAAM,QAAQ,EAAE,MAA0B,CAAC;AAElD,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,6BAErC;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAE3D;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAE3D;AAMD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAIpE;AAID,eAAO,MAAM,QAAQ,GAAgC,EAAE,EAAE,CAAC,EAAE,CAAC,gJAuB3D,CAAC"}
package/dist/expiry.js CHANGED
@@ -1,16 +1,24 @@
1
1
  import { Clock, Context, Deferred, Effect, Option, Predicate, Schema } from "effect";
2
2
  import { TransactionExpired } from "./error.js";
3
3
  export const unlinked = () => Effect.void;
4
- export const makeExpiry = (key) => Context.Reference(key, { defaultValue: () => unlinked });
5
- export const isTransactionClient = (client) => !Predicate.hasProperty(client, "$connect");
6
- export const isTransactionClosed = (cause) => Predicate.hasProperty(cause, "code") && cause.code === "P2028";
4
+ export function makeExpiry(key) {
5
+ return Context.Reference(key, { defaultValue: () => unlinked });
6
+ }
7
+ export function isTransactionClient(client) {
8
+ return !Predicate.hasProperty(client, "$connect");
9
+ }
10
+ export function isTransactionClosed(cause) {
11
+ return Predicate.hasProperty(cause, "code") && cause.code === "P2028";
12
+ }
7
13
  const EngineConfig = Schema.Struct({ transactionOptions: Schema.Struct({ timeout: Schema.Number }) });
8
14
  const decodeEngineConfig = Schema.decodeUnknownOption(EngineConfig);
9
- export const configuredTimeout = (client) => Predicate.hasProperty(client, "_engineConfig")
10
- ? Option.getOrUndefined(Option.map(decodeEngineConfig(client._engineConfig), (config) => config.transactionOptions.timeout))
11
- : undefined;
15
+ export function configuredTimeout(client) {
16
+ return Predicate.hasProperty(client, "_engineConfig")
17
+ ? Option.getOrUndefined(Option.map(decodeEngineConfig(client._engineConfig), (config) => config.transactionOptions.timeout))
18
+ : undefined;
19
+ }
12
20
  const wallClock = Clock.Clock.defaultValue();
13
- export const expiring = (body, timeout, Expiry) => Effect.gen(function* () {
21
+ export const expiring = Effect.fnUntraced(function* (body, timeout, Expiry) {
14
22
  const outer = yield* Expiry;
15
23
  const expired = yield* Deferred.make();
16
24
  const closed = (cause) => Effect.andThen(Deferred.fail(expired, new TransactionExpired({ cause, message: "The transaction was closed before its body finished" })), outer(cause));
@@ -1 +1 @@
1
- {"version":3,"file":"expiry.js","sourceRoot":"","sources":["../src/expiry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"expiry.js","sourceRoot":"","sources":["../src/expiry.ts"],"names":[],"mappings":"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"}
package/dist/model.d.ts CHANGED
@@ -33,6 +33,6 @@ export type ChangeMap<TClient, A> = {
33
33
  };
34
34
  export declare const rowOperations: ReadonlySet<string>;
35
35
  export declare const countOperations: ReadonlySet<string>;
36
- export declare const delegateOf: (model: string) => string;
36
+ export declare function delegateOf(model: string): string;
37
37
  export {};
38
38
  //# sourceMappingURL=model.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../src/model.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,kBAAkB;IAClC,QAAQ,CAAC,cAAc,CAAC,EAAE,iBAAiB,GAAG,eAAe,GAAG,gBAAgB,GAAG,cAAc,CAAC;IAClG,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,aAAa,CAAC,GAAG;IACjC,YAAY,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,GAAG,KAAK,OAAO,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,EAAE,kBAAkB,KAAK,WAAW,CAAC,EAAE,CAAC,CAAC;CACnG;AAED,KAAK,SAAS,CAAC,SAAS,IAAI,SAAS,SAAS;IAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG;QAAE,QAAQ,CAAC,KAAK,EAAE;YAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,QAAQ,CAAA;SAAE,CAAA;KAAE,CAAA;CAAE,GAAG,QAAQ,GAAG,KAAK,CAAC;AAEtJ,KAAK,SAAS,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,OAAO,GAAG,MAAM,EAAE,IAAI,MAAM,EAAE,CAAC,CAAC;AAExE,MAAM,MAAM,SAAS,CAAC,OAAO,IAAI;KAC/B,IAAI,IAAI,SAAS,CAAC,OAAO,CAAC,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,SAAS;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,KAAK,SAAS,MAAM,CAAA;KAAE,GAAG,KAAK,GAAG,KAAK;CAC5H,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;AAEtB,MAAM,MAAM,QAAQ,CAAC,OAAO,EAAE,MAAM,SAAS,MAAM,IAAI,OAAO,CAC7D;KACE,IAAI,IAAI,SAAS,CAAC,OAAO,CAAC,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,SAAS;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,IAAI,CAAA;KAAE,GAAG,IAAI,GAAG,KAAK;CACrI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,EACrB,MAAM,CACN,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,qBAAqB,GAAG,qBAAqB,CAAC;AAErH,MAAM,MAAM,cAAc,GAAG,YAAY,GAAG,YAAY,GAAG,YAAY,CAAC;AAExE,MAAM,MAAM,YAAY,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,YAAY,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC;AAExF,MAAM,MAAM,SAAS,CAAC,OAAO,EAAE,CAAC,IAAI;IACnC,QAAQ,EAAE,MAAM,IAAI,SAAS,CAAC,OAAO,CAAC,GAAG,YAAY,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI;CAC1F,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,WAAW,CAAC,MAAM,CAO5C,CAAC;AAEH,eAAO,MAAM,eAAe,EAAE,WAAW,CAAC,MAAM,CAAuE,CAAC;AAExH,eAAO,MAAM,UAAU,UAAW,MAAM,KAAG,MAA6D,CAAC"}
1
+ {"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../src/model.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,kBAAkB;IAClC,QAAQ,CAAC,cAAc,CAAC,EAAE,iBAAiB,GAAG,eAAe,GAAG,gBAAgB,GAAG,cAAc,CAAC;IAClG,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,aAAa,CAAC,GAAG;IACjC,YAAY,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,GAAG,KAAK,OAAO,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,EAAE,kBAAkB,KAAK,WAAW,CAAC,EAAE,CAAC,CAAC;CACnG;AAED,KAAK,SAAS,CAAC,SAAS,IAAI,SAAS,SAAS;IAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG;QAAE,QAAQ,CAAC,KAAK,EAAE;YAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,QAAQ,CAAA;SAAE,CAAA;KAAE,CAAA;CAAE,GAAG,QAAQ,GAAG,KAAK,CAAC;AAEtJ,KAAK,SAAS,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,OAAO,GAAG,MAAM,EAAE,IAAI,MAAM,EAAE,CAAC,CAAC;AAExE,MAAM,MAAM,SAAS,CAAC,OAAO,IAAI;KAC/B,IAAI,IAAI,SAAS,CAAC,OAAO,CAAC,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,SAAS;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,KAAK,SAAS,MAAM,CAAA;KAAE,GAAG,KAAK,GAAG,KAAK;CAC5H,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;AAEtB,MAAM,MAAM,QAAQ,CAAC,OAAO,EAAE,MAAM,SAAS,MAAM,IAAI,OAAO,CAC7D;KACE,IAAI,IAAI,SAAS,CAAC,OAAO,CAAC,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,SAAS;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,IAAI,CAAA;KAAE,GAAG,IAAI,GAAG,KAAK;CACrI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,EACrB,MAAM,CACN,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,qBAAqB,GAAG,qBAAqB,CAAC;AAErH,MAAM,MAAM,cAAc,GAAG,YAAY,GAAG,YAAY,GAAG,YAAY,CAAC;AAExE,MAAM,MAAM,YAAY,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,YAAY,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC;AAExF,MAAM,MAAM,SAAS,CAAC,OAAO,EAAE,CAAC,IAAI;IACnC,QAAQ,EAAE,MAAM,IAAI,SAAS,CAAC,OAAO,CAAC,GAAG,YAAY,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI;CAC1F,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,WAAW,CAAC,MAAM,CAO5C,CAAC;AAEH,eAAO,MAAM,eAAe,EAAE,WAAW,CAAC,MAAM,CAAuE,CAAC;AAExH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEhD"}
package/dist/model.js CHANGED
@@ -7,5 +7,7 @@ export const rowOperations = new Set([
7
7
  "updateManyAndReturn",
8
8
  ]);
9
9
  export const countOperations = new Set(["createMany", "updateMany", "deleteMany"]);
10
- export const delegateOf = (model) => `${model.charAt(0).toLowerCase()}${model.slice(1)}`;
10
+ export function delegateOf(model) {
11
+ return `${model.charAt(0).toLowerCase()}${model.slice(1)}`;
12
+ }
11
13
  //# sourceMappingURL=model.js.map
package/dist/model.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"model.js","sourceRoot":"","sources":["../src/model.ts"],"names":[],"mappings":"AAmCA,MAAM,CAAC,MAAM,aAAa,GAAwB,IAAI,GAAG,CAAe;IACvE,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,qBAAqB;IACrB,qBAAqB;CACrB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,eAAe,GAAwB,IAAI,GAAG,CAAiB,CAAC,YAAY,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC,CAAC;AAExH,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,KAAa,EAAU,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC"}
1
+ {"version":3,"file":"model.js","sourceRoot":"","sources":["../src/model.ts"],"names":[],"mappings":"AAmCA,MAAM,CAAC,MAAM,aAAa,GAAwB,IAAI,GAAG,CAAe;IACvE,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,qBAAqB;IACrB,qBAAqB;CACrB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,eAAe,GAAwB,IAAI,GAAG,CAAiB,CAAC,YAAY,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC,CAAC;AAExH,MAAM,UAAU,UAAU,CAAC,KAAa;IACvC,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;AAC5D,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import type { LooseMap, Write } from "./write.ts";
2
- export declare const isWriteOperation: (operation: string) => boolean;
3
- export declare const delegatesOf: <A>(models: LooseMap<A>) => ReadonlyMap<string, string>;
4
- export declare const recordingClient: <TClient extends object>(client: TClient, delegates: ReadonlyMap<string, string>, collect: (write: Write) => void) => TClient;
2
+ export declare function isWriteOperation(operation: string): boolean;
3
+ export declare function delegatesOf<A>(models: LooseMap<A>): ReadonlyMap<string, string>;
4
+ export declare function recordingClient<TClient extends object>(client: TClient, delegates: ReadonlyMap<string, string>, collect: (write: Write) => void): TClient;
5
5
  //# sourceMappingURL=recording.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"recording.d.ts","sourceRoot":"","sources":["../src/recording.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAElD,eAAO,MAAM,gBAAgB,cAAe,MAAM,KAAG,OAAyE,CAAC;AAE/H,eAAO,MAAM,WAAW,GAAI,CAAC,UAAU,QAAQ,CAAC,CAAC,CAAC,KAAG,WAAW,CAAC,MAAM,EAAE,MAAM,CAK7E,CAAC;AAsBH,eAAO,MAAM,eAAe,GAAI,OAAO,SAAS,MAAM,UAC7C,OAAO,aACJ,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,WAC7B,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,KAC7B,OAUA,CAAC"}
1
+ {"version":3,"file":"recording.d.ts","sourceRoot":"","sources":["../src/recording.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAElD,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAE3D;AAED,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAM/E;AAsBD,wBAAgB,eAAe,CAAC,OAAO,SAAS,MAAM,EACrD,MAAM,EAAE,OAAO,EACf,SAAS,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,EACtC,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,GAC7B,OAAO,CAWT"}
package/dist/recording.js CHANGED
@@ -1,6 +1,10 @@
1
1
  import { countOperations, delegateOf, rowOperations } from "./model.js";
2
- export const isWriteOperation = (operation) => rowOperations.has(operation) || countOperations.has(operation);
3
- export const delegatesOf = (models) => new Map(Object.entries(models).flatMap(([model, changesOf]) => changesOf === undefined || changesOf === null ? [] : [[delegateOf(model), model]]));
2
+ export function isWriteOperation(operation) {
3
+ return rowOperations.has(operation) || countOperations.has(operation);
4
+ }
5
+ export function delegatesOf(models) {
6
+ return new Map(Object.entries(models).flatMap(([model, changesOf]) => changesOf === undefined || changesOf === null ? [] : [[delegateOf(model), model]]));
7
+ }
4
8
  function bound(value, target) {
5
9
  return typeof value === "function" ? value.bind(target) : value;
6
10
  }
@@ -18,14 +22,16 @@ function recordingDelegate(delegate, model, collect) {
18
22
  },
19
23
  });
20
24
  }
21
- export const recordingClient = (client, delegates, collect) => new Proxy(client, {
22
- get: (target, key) => {
23
- const value = Reflect.get(target, key);
24
- const model = typeof key === "string" ? delegates.get(key) : undefined;
25
- if (model !== undefined && typeof value === "object" && value !== null) {
26
- return recordingDelegate(value, model, collect);
27
- }
28
- return bound(value, target);
29
- },
30
- });
25
+ export function recordingClient(client, delegates, collect) {
26
+ return new Proxy(client, {
27
+ get: (target, key) => {
28
+ const value = Reflect.get(target, key);
29
+ const model = typeof key === "string" ? delegates.get(key) : undefined;
30
+ if (model !== undefined && typeof value === "object" && value !== null) {
31
+ return recordingDelegate(value, model, collect);
32
+ }
33
+ return bound(value, target);
34
+ },
35
+ });
36
+ }
31
37
  //# sourceMappingURL=recording.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"recording.js","sourceRoot":"","sources":["../src/recording.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAGxE,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,SAAiB,EAAW,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AAE/H,MAAM,CAAC,MAAM,WAAW,GAAG,CAAI,MAAmB,EAA+B,EAAE,CAClF,IAAI,GAAG,CACN,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,SAAS,CAAC,EAAE,EAAE,CACrD,SAAS,KAAK,SAAS,IAAI,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,KAAK,CAAU,CAAC,CAC1F,CACD,CAAC;AAEH,SAAS,KAAK,CAAC,KAAc,EAAE,MAAc;IAC5C,OAAO,OAAO,KAAK,KAAK,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;AACjE,CAAC;AAED,SAAS,iBAAiB,CAAC,QAAgB,EAAE,KAAa,EAAE,OAA+B;IAC1F,OAAO,IAAI,KAAK,CAAC,QAAQ,EAAE;QAC1B,GAAG,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE;YACpB,MAAM,KAAK,GAAY,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;YAChD,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,UAAU,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC;gBACtF,OAAO,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;YAC7B,CAAC;YACD,OAAO,CAAC,GAAG,IAAwB,EAAE,EAAE,CACtC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAe,EAAE,EAAE;gBAC5E,OAAO,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC;gBAC3C,OAAO,MAAM,CAAC;YACf,CAAC,CAAC,CAAC;QACL,CAAC;KACD,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,eAAe,GAAG,CAC9B,MAAe,EACf,SAAsC,EACtC,OAA+B,EACrB,EAAE,CACZ,IAAI,KAAK,CAAC,MAAM,EAAE;IACjB,GAAG,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE;QACpB,MAAM,KAAK,GAAY,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAChD,MAAM,KAAK,GAAG,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACvE,IAAI,KAAK,KAAK,SAAS,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACxE,OAAO,iBAAiB,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;QACjD,CAAC;QACD,OAAO,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAC7B,CAAC;CACD,CAAC,CAAC"}
1
+ {"version":3,"file":"recording.js","sourceRoot":"","sources":["../src/recording.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAGxE,MAAM,UAAU,gBAAgB,CAAC,SAAiB;IACjD,OAAO,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AACvE,CAAC;AAED,MAAM,UAAU,WAAW,CAAI,MAAmB;IACjD,OAAO,IAAI,GAAG,CACb,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,SAAS,CAAC,EAAE,EAAE,CACrD,SAAS,KAAK,SAAS,IAAI,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,KAAK,CAAU,CAAC,CAC1F,CACD,CAAC;AACH,CAAC;AAED,SAAS,KAAK,CAAC,KAAc,EAAE,MAAc;IAC5C,OAAO,OAAO,KAAK,KAAK,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;AACjE,CAAC;AAED,SAAS,iBAAiB,CAAC,QAAgB,EAAE,KAAa,EAAE,OAA+B;IAC1F,OAAO,IAAI,KAAK,CAAC,QAAQ,EAAE;QAC1B,GAAG,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE;YACpB,MAAM,KAAK,GAAY,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;YAChD,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,UAAU,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC;gBACtF,OAAO,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;YAC7B,CAAC;YACD,OAAO,CAAC,GAAG,IAAwB,EAAE,EAAE,CACtC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAe,EAAE,EAAE;gBAC5E,OAAO,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC;gBAC3C,OAAO,MAAM,CAAC;YACf,CAAC,CAAC,CAAC;QACL,CAAC;KACD,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,eAAe,CAC9B,MAAe,EACf,SAAsC,EACtC,OAA+B;IAE/B,OAAO,IAAI,KAAK,CAAC,MAAM,EAAE;QACxB,GAAG,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE;YACpB,MAAM,KAAK,GAAY,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;YAChD,MAAM,KAAK,GAAG,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YACvE,IAAI,KAAK,KAAK,SAAS,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;gBACxE,OAAO,iBAAiB,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;YACjD,CAAC;YACD,OAAO,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAC7B,CAAC;KACD,CAAC,CAAC;AACJ,CAAC"}
package/dist/tables.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { Effect } from "effect";
2
2
  import { PrismaError } from "./error.ts";
3
- export declare const tablesOf: (schema: string) => ReadonlyMap<string, string>;
3
+ export declare function tablesOf(schema: string): ReadonlyMap<string, string>;
4
4
  export interface RawQueryClient {
5
5
  $queryRawUnsafe: (query: string) => PromiseLike<unknown>;
6
6
  }
@@ -1 +1 @@
1
- {"version":3,"file":"tables.d.ts","sourceRoot":"","sources":["../src/tables.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAU,MAAM,QAAQ,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAMzC,eAAO,MAAM,QAAQ,WAAY,MAAM,KAAG,WAAW,CAAC,MAAM,EAAE,MAAM,CAC4E,CAAC;AAEjJ,MAAM,WAAW,cAAc;IAC9B,eAAe,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,WAAW,CAAC,OAAO,CAAC,CAAC;CACzD;AAED,MAAM,MAAM,WAAW,GAAG,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAStD,eAAO,MAAM,WAAW,oFAQtB,CAAC;AAEH,eAAO,MAAM,aAAa,0GAGxB,CAAC"}
1
+ {"version":3,"file":"tables.d.ts","sourceRoot":"","sources":["../src/tables.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAU,MAAM,QAAQ,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAMzC,wBAAgB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAQpE;AAED,MAAM,WAAW,cAAc;IAC9B,eAAe,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,WAAW,CAAC,OAAO,CAAC,CAAC;CACzD;AAED,MAAM,MAAM,WAAW,GAAG,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAStD,eAAO,MAAM,WAAW,oFAQtB,CAAC;AAEH,eAAO,MAAM,aAAa,0GAGxB,CAAC"}
package/dist/tables.js CHANGED
@@ -1,9 +1,15 @@
1
1
  import { Effect, Schema } from "effect";
2
2
  import { PrismaError } from "./error.js";
3
- const MODEL = /^[ \t]*model[ \t]+(\w+)[ \t]*\{([\s\S]*?)^[ \t]*\}/gmu;
4
- const MAPPED = /@@map\(\s*(?:name\s*:\s*)?"([^"]+)"/u;
3
+ const MODEL = /^[ \t]*model[ \t]+(?<model>\w+)[ \t]*\{(?<body>[\s\S]*?)^[ \t]*\}/gmu;
4
+ const MAPPED = /@@map\(\s*(?:name\s*:\s*)?"(?<table>[^"]+)"/u;
5
5
  const COMMENT = /\/\/.*$/gmu;
6
- export const tablesOf = (schema) => new Map([...schema.replace(COMMENT, "").matchAll(MODEL)].map(([, model = "", body = ""]) => [MAPPED.exec(body)?.[1] ?? model, model]));
6
+ export function tablesOf(schema) {
7
+ return new Map([...schema.replace(COMMENT, "").matchAll(MODEL)].map(({ groups }) => {
8
+ const model = groups?.model ?? "";
9
+ const body = groups?.body ?? "";
10
+ return [MAPPED.exec(body)?.groups?.table ?? model, model];
11
+ }));
12
+ }
7
13
  const Counted = Schema.Array(Schema.Struct({ relname: Schema.String, writes: Schema.BigInt }));
8
14
  const COUNTED = "select relname, n_tup_ins + n_tup_upd + n_tup_del as writes from pg_stat_xact_user_tables where n_tup_ins + n_tup_upd + n_tup_del > 0 order by relname";
9
15
  const none = new Map();
@@ -1 +1 @@
1
- {"version":3,"file":"tables.js","sourceRoot":"","sources":["../src/tables.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC,MAAM,KAAK,GAAG,uDAAuD,CAAC;AACtE,MAAM,MAAM,GAAG,sCAAsC,CAAC;AACtD,MAAM,OAAO,GAAG,YAAY,CAAC;AAE7B,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,MAAc,EAA+B,EAAE,CACvE,IAAI,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,GAAG,EAAE,EAAE,IAAI,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,EAAE,KAAK,CAAU,CAAC,CAAC,CAAC;AAQjJ,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;AAE/F,MAAM,OAAO,GACZ,wJAAwJ,CAAC;AAE1J,MAAM,IAAI,GAAgB,IAAI,GAAG,EAAE,CAAC;AAEpC,MAAM,CAAC,MAAM,WAAW,GAAG,MAAM,CAAC,EAAE,CAAC,2BAA2B,CAAC,CAAC,QAAQ,CAAC,EAAE,MAAsB;IAClG,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,WAAW,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACpI,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,WAAW,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;IACzH,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;IACzC,KAAK,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,OAAO,EAAE,CAAC;QAC3C,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC;IAC3D,CAAC;IACD,OAAO,MAA4B,CAAC;AACrC,CAAC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,aAAa,GAAG,MAAM,CAAC,EAAE,CAAC,6BAA6B,CAAC,CAAC,QAAQ,CAAC,EAAE,MAAsB,EAAE,KAAK,GAAgB,IAAI;IACjI,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IAC1C,OAAO,CAAC,GAAG,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACrG,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"tables.js","sourceRoot":"","sources":["../src/tables.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC,MAAM,KAAK,GAAG,sEAAsE,CAAC;AACrF,MAAM,MAAM,GAAG,8CAA8C,CAAC;AAC9D,MAAM,OAAO,GAAG,YAAY,CAAC;AAE7B,MAAM,UAAU,QAAQ,CAAC,MAAc;IACtC,OAAO,IAAI,GAAG,CACb,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE;QACnE,MAAM,KAAK,GAAG,MAAM,EAAE,KAAK,IAAI,EAAE,CAAC;QAClC,MAAM,IAAI,GAAG,MAAM,EAAE,IAAI,IAAI,EAAE,CAAC;QAChC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,IAAI,KAAK,EAAE,KAAK,CAAU,CAAC;IACpE,CAAC,CAAC,CACF,CAAC;AACH,CAAC;AAQD,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;AAE/F,MAAM,OAAO,GACZ,wJAAwJ,CAAC;AAE1J,MAAM,IAAI,GAAgB,IAAI,GAAG,EAAE,CAAC;AAEpC,MAAM,CAAC,MAAM,WAAW,GAAG,MAAM,CAAC,EAAE,CAAC,2BAA2B,CAAC,CAAC,QAAQ,CAAC,EAAE,MAAsB;IAClG,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,WAAW,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACpI,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,WAAW,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;IACzH,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;IACzC,KAAK,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,OAAO,EAAE,CAAC;QAC3C,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC;IAC3D,CAAC;IACD,OAAO,MAA4B,CAAC;AACrC,CAAC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,aAAa,GAAG,MAAM,CAAC,EAAE,CAAC,6BAA6B,CAAC,CAAC,QAAQ,CAAC,EAAE,MAAsB,EAAE,KAAK,GAAgB,IAAI;IACjI,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IAC1C,OAAO,CAAC,GAAG,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACrG,CAAC,CAAC,CAAC"}
@@ -1,15 +1,16 @@
1
1
  import { type Context, Effect } from "effect";
2
- import type { Frame } from "@shivaedev/effect-changes/frame.ts";
2
+ import type { CommitFrame, Frame } from "@shivaedev/effect-changes/frame.ts";
3
3
  import { PrismaError, TransactionExpired } from "./error.ts";
4
4
  import { type Expire } from "./expiry.ts";
5
5
  import type { Transactional, TransactionOptions } from "./model.ts";
6
- export declare const runTransaction: <TTx extends Transactional<TTx>, TX, E, R, TOpenRequirements>(options: {
6
+ export declare function runTransaction<TTx extends Transactional<TTx>, TX, E, R, TOpenRequirements>(options: {
7
7
  readonly client: TTx;
8
- readonly open: Effect.Effect<Frame, never, TOpenRequirements>;
8
+ readonly Client?: Context.Reference<TTx>;
9
+ readonly open: Effect.Effect<Frame & Partial<CommitFrame>, never, TOpenRequirements>;
9
10
  readonly body: (tx: TTx) => Effect.Effect<TX, E, R>;
10
11
  readonly transaction: TransactionOptions | undefined;
11
12
  readonly savepoint: boolean;
12
13
  readonly deadline: number | undefined;
13
14
  readonly Expiry: Context.Reference<Expire>;
14
- }) => Effect.Effect<TX, E | TransactionExpired | PrismaError, R | TOpenRequirements>;
15
+ }): Effect.Effect<TX, E | TransactionExpired | PrismaError, R | TOpenRequirements>;
15
16
  //# sourceMappingURL=transaction.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["../src/transaction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,EAAQ,MAAM,QAAQ,CAAC;AACpD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oCAAoC,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAC7D,OAAO,EAAE,KAAK,MAAM,EAAiC,MAAM,aAAa,CAAC;AACzE,OAAO,KAAK,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AA6CpE,eAAO,MAAM,cAAc,GAAI,GAAG,SAAS,aAAa,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,iBAAiB,WAAW;IACpG,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,iBAAiB,CAAC,CAAC;IAC9D,QAAQ,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,GAAG,KAAK,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACpD,QAAQ,CAAC,WAAW,EAAE,kBAAkB,GAAG,SAAS,CAAC;IACrD,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IACtC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;CAC3C,KAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,GAAG,kBAAkB,GAAG,WAAW,EAAE,CAAC,GAAG,iBAAiB,CA+B/E,CAAC"}
1
+ {"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["../src/transaction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,EAAQ,MAAM,QAAQ,CAAC;AACpD,OAAO,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,oCAAoC,CAAC;AAC7E,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAC7D,OAAO,EAAE,KAAK,MAAM,EAAiC,MAAM,aAAa,CAAC;AACzE,OAAO,KAAK,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AA6CpE,wBAAgB,cAAc,CAAC,GAAG,SAAS,aAAa,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,iBAAiB,EAAE,OAAO,EAAE;IACpG,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC;IACrB,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IACzC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,GAAG,OAAO,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,iBAAiB,CAAC,CAAC;IACrF,QAAQ,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,GAAG,KAAK,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACpD,QAAQ,CAAC,WAAW,EAAE,kBAAkB,GAAG,SAAS,CAAC;IACrD,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IACtC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;CAC3C,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,GAAG,kBAAkB,GAAG,WAAW,EAAE,CAAC,GAAG,iBAAiB,CAAC,CAiCjF"}
@@ -27,20 +27,23 @@ function commit(client, options, savepoint, body, context, signal) {
27
27
  }
28
28
  return Promise.resolve(client.$transaction(run, options)).then((value) => ({ committed: true, exit: Exit.succeed(value) }), rejected);
29
29
  }
30
- export const runTransaction = (options) => Effect.uninterruptibleMask((restore) => Effect.gen(function* () {
31
- const { client, savepoint, body, deadline, Expiry } = options;
32
- const frame = yield* options.open;
33
- const context = yield* Effect.context();
34
- const abort = new AbortController();
35
- function guarded(tx) {
36
- return expiring(frame.provide(body(tx)), deadline, Expiry);
37
- }
38
- const outcome = commit(client, options.transaction, savepoint, guarded, context, abort.signal);
39
- const expire = yield* Expiry;
40
- function settle(settled) {
41
- return Effect.andThen(settled.closed === undefined ? Effect.void : expire(settled.closed.cause), Effect.as(frame.settle(settled.committed ? "committed" : "rolledBack"), settled.exit));
42
- }
43
- const settled = yield* restore(Effect.promise(() => outcome)).pipe(Effect.onInterrupt(() => Effect.andThen(Effect.sync(() => abort.abort()), Effect.flatMap(Effect.promise(() => outcome), settle))));
44
- return yield* Effect.flatten(settle(settled));
45
- }));
30
+ export function runTransaction(options) {
31
+ return Effect.uninterruptibleMask((restore) => Effect.gen(function* () {
32
+ const { client, savepoint, body, deadline, Expiry } = options;
33
+ const frame = yield* options.open;
34
+ const context = yield* Effect.context();
35
+ const abort = new AbortController();
36
+ function guarded(tx) {
37
+ const work = frame.provide(Effect.tap(body(tx), () => frame.beforeCommit ?? Effect.void));
38
+ return expiring(options.Client === undefined ? work : Effect.provideService(work, options.Client, tx), deadline, Expiry);
39
+ }
40
+ const outcome = commit(client, options.transaction, savepoint, guarded, context, abort.signal);
41
+ const expire = yield* Expiry;
42
+ function settle(settled) {
43
+ return Effect.andThen(settled.closed === undefined ? Effect.void : expire(settled.closed.cause), Effect.as(frame.settle(settled.committed ? "committed" : "rolledBack"), settled.exit));
44
+ }
45
+ const result = yield* restore(Effect.promise(() => outcome)).pipe(Effect.onInterrupt(() => Effect.andThen(Effect.sync(() => abort.abort()), Effect.flatMap(Effect.promise(() => outcome), settle))));
46
+ return yield* Effect.flatten(settle(result));
47
+ }));
48
+ }
46
49
  //# sourceMappingURL=transaction.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"transaction.js","sourceRoot":"","sources":["../src/transaction.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"transaction.js","sourceRoot":"","sources":["../src/transaction.ts"],"names":[],"mappings":"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"}
package/dist/write.d.ts CHANGED
@@ -21,5 +21,5 @@ export interface Interpreted<A> {
21
21
  readonly changes: readonly A[];
22
22
  readonly unnamed: UnnamedWrite | undefined;
23
23
  }
24
- export declare const interpret: <A>(models: LooseMap<A>, write: Write) => Interpreted<A>;
24
+ export declare function interpret<A>(models: LooseMap<A>, write: Write): Interpreted<A>;
25
25
  //# sourceMappingURL=write.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"write.d.ts","sourceRoot":"","sources":["../src/write.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAmB,KAAK,YAAY,EAAiB,MAAM,YAAY,CAAC;AAE/E,MAAM,WAAW,KAAK;IACrB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,MAAM,YAAY,GACrB;IAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAA;CAAE,GACpF;IAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAE/G,MAAM,MAAM,YAAY,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;AAE/F,MAAM,MAAM,QAAQ,CAAC,CAAC,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC;AAEvF,MAAM,WAAW,WAAW,CAAC,CAAC;IAC7B,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAC,EAAE,CAAC;IAC/B,QAAQ,CAAC,OAAO,EAAE,YAAY,GAAG,SAAS,CAAC;CAC3C;AA+BD,eAAO,MAAM,SAAS,GAAI,CAAC,UAAU,QAAQ,CAAC,CAAC,CAAC,SAAS,KAAK,KAAG,WAAW,CAAC,CAAC,CAwB7E,CAAC"}
1
+ {"version":3,"file":"write.d.ts","sourceRoot":"","sources":["../src/write.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAmB,KAAK,YAAY,EAAiB,MAAM,YAAY,CAAC;AAE/E,MAAM,WAAW,KAAK;IACrB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,MAAM,YAAY,GACrB;IAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAA;CAAE,GACpF;IAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAE/G,MAAM,MAAM,YAAY,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;AAE/F,MAAM,MAAM,QAAQ,CAAC,CAAC,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC;AAEvF,MAAM,WAAW,WAAW,CAAC,CAAC;IAC7B,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAC,EAAE,CAAC;IAC/B,QAAQ,CAAC,OAAO,EAAE,YAAY,GAAG,SAAS,CAAC;CAC3C;AA+BD,wBAAgB,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,GAAG,WAAW,CAAC,CAAC,CAAC,CAwB9E"}
package/dist/write.js CHANGED
@@ -22,7 +22,7 @@ function rowsOf(result) {
22
22
  return (Array.isArray(result) ? result : [result]).filter((row) => typeof row === "object" && row !== null);
23
23
  }
24
24
  const nothing = { changes: [], unnamed: undefined };
25
- export const interpret = (models, write) => {
25
+ export function interpret(models, write) {
26
26
  const { model, operation } = write;
27
27
  const changesOf = models[model];
28
28
  if (changesOf === undefined || changesOf === null) {
@@ -47,5 +47,5 @@ export const interpret = (models, write) => {
47
47
  throw error;
48
48
  }
49
49
  return { changes, unnamed: undefined };
50
- };
50
+ }
51
51
  //# sourceMappingURL=write.js.map
package/dist/write.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"write.js","sourceRoot":"","sources":["../src/write.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAqB,aAAa,EAAE,MAAM,YAAY,CAAC;AAqB/E,MAAM,YAAY;IACR,KAAK,CAAS;IAEvB,YAAY,KAAa;QACxB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACpB,CAAC;CACD;AAED,SAAS,OAAO,CAAC,GAAW;IAC3B,OAAO,IAAI,KAAK,CAAC,GAAG,EAAE;QACrB,GAAG,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE;YAC9B,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,CAAC,CAAC,GAAG,IAAI,MAAM,CAAC,EAAE,CAAC;gBACjD,MAAM,IAAI,YAAY,CAAC,GAAG,CAAC,CAAC;YAC7B,CAAC;YACD,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;QAC3C,CAAC;KACD,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,SAAiB;IACxC,OAAO,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AACrC,CAAC;AAED,SAAS,MAAM,CAAC,MAAe;IAC9B,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAiB,EAAE,CAAC,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,CAAC,CAAC;AAC5H,CAAC;AAED,MAAM,OAAO,GAAuB,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;AAExE,MAAM,CAAC,MAAM,SAAS,GAAG,CAAI,MAAmB,EAAE,KAAY,EAAkB,EAAE;IACjF,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC;IACnC,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAChC,IAAI,SAAS,KAAK,SAAS,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;QACnD,OAAO,OAAO,CAAC;IAChB,CAAC;IACD,IAAI,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;QACpC,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,CAAC;IAC5E,CAAC;IACD,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,EAAE,CAAC;QAChC,OAAO,OAAO,CAAC;IAChB,CAAC;IACD,MAAM,OAAO,GAAQ,EAAE,CAAC;IACxB,IAAI,CAAC;QACJ,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;YACxC,OAAO,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC;QACrD,CAAC;IACF,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,IAAI,KAAK,YAAY,YAAY,EAAE,CAAC;YACnC,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,CAAC;QAC/F,CAAC;QACD,MAAM,KAAK,CAAC;IACb,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;AACxC,CAAC,CAAC"}
1
+ {"version":3,"file":"write.js","sourceRoot":"","sources":["../src/write.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAqB,aAAa,EAAE,MAAM,YAAY,CAAC;AAqB/E,MAAM,YAAY;IACR,KAAK,CAAS;IAEvB,YAAY,KAAa;QACxB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACpB,CAAC;CACD;AAED,SAAS,OAAO,CAAC,GAAW;IAC3B,OAAO,IAAI,KAAK,CAAC,GAAG,EAAE;QACrB,GAAG,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE;YAC9B,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,CAAC,CAAC,GAAG,IAAI,MAAM,CAAC,EAAE,CAAC;gBACjD,MAAM,IAAI,YAAY,CAAC,GAAG,CAAC,CAAC;YAC7B,CAAC;YACD,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;QAC3C,CAAC;KACD,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,SAAiB;IACxC,OAAO,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AACrC,CAAC;AAED,SAAS,MAAM,CAAC,MAAe;IAC9B,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAiB,EAAE,CAAC,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,CAAC,CAAC;AAC5H,CAAC;AAED,MAAM,OAAO,GAAuB,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;AAExE,MAAM,UAAU,SAAS,CAAI,MAAmB,EAAE,KAAY;IAC7D,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC;IACnC,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAChC,IAAI,SAAS,KAAK,SAAS,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;QACnD,OAAO,OAAO,CAAC;IAChB,CAAC;IACD,IAAI,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;QACpC,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,CAAC;IAC5E,CAAC;IACD,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,EAAE,CAAC;QAChC,OAAO,OAAO,CAAC;IAChB,CAAC;IACD,MAAM,OAAO,GAAQ,EAAE,CAAC;IACxB,IAAI,CAAC;QACJ,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;YACxC,OAAO,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC;QACrD,CAAC;IACF,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,IAAI,KAAK,YAAY,YAAY,EAAE,CAAC;YACnC,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,CAAC;QAC/F,CAAC;QACD,MAAM,KAAK,CAAC;IACb,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;AACxC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@shivaedev/effect-changes-prisma",
3
- "version": "0.5.0",
3
+ "version": "0.5.2",
4
4
  "description": "Commit-bound change channels for Prisma Classic on PostgreSQL only: automatic change recording, publish after $transaction commits, and a test-time coverage check",
5
5
  "homepage": "https://github.com/ShivaeDev/platform/tree/main/packages/effect-changes-prisma#readme",
6
6
  "bugs": {
@@ -42,14 +42,15 @@
42
42
  "README.md"
43
43
  ],
44
44
  "dependencies": {
45
- "@shivaedev/effect-changes": "0.3.0",
46
- "@shivaedev/types": "0.2.0"
45
+ "@shivaedev/effect-changes": "0.3.1",
46
+ "@shivaedev/types": "0.2.1"
47
47
  },
48
48
  "devDependencies": {
49
49
  "@prisma/adapter-pg": "7.10.0",
50
50
  "@prisma/client": "7.10.0",
51
- "@shivaedev/quality": "0.20.0",
52
- "@types/node": "24.19.1",
51
+ "@shivaedev/quality": "0.23.0",
52
+ "@shivaedev/test-story": "0.6.0",
53
+ "@types/node": "24.19.2",
53
54
  "@typescript/native": "npm:typescript@7.0.2",
54
55
  "effect": "4.0.4",
55
56
  "prisma": "7.10.0",
package/src/changes.ts CHANGED
@@ -35,9 +35,7 @@ function expireOnClosed(Expiry: Context.Reference<Expire>, exit: Exit.Exit<unkno
35
35
  });
36
36
  }
37
37
 
38
- export const makePrismaChanges = <TTx extends Transactional<TTx>, A, R = never>(
39
- options: PrismaChangesOptions<TTx, A, R>,
40
- ): PrismaChanges<TTx, A, R> => {
38
+ export function makePrismaChanges<TTx extends Transactional<TTx>, A, R = never>(options: PrismaChangesOptions<TTx, A, R>): PrismaChanges<TTx, A, R> {
41
39
  const { client, models: typed, ...channelOptions } = options;
42
40
  const models: LooseMap<A> = typed;
43
41
  const prefix = `@shivaedev/effect-changes-prisma/${options.name}/${crypto.randomUUID()}`;
@@ -67,11 +65,12 @@ export const makePrismaChanges = <TTx extends Transactional<TTx>, A, R = never>(
67
65
  return yield* exit;
68
66
  }, Effect.uninterruptible);
69
67
 
70
- const transaction = <TX, E, TR2>(body: Effect.Effect<TX, E, TR2>, transactionOptions?: TransactionOptions) =>
71
- Effect.flatMap(Effect.service(Client), (current) => {
68
+ function transaction<TX, E, TR2>(body: Effect.Effect<TX, E, TR2>, transactionOptions?: TransactionOptions) {
69
+ return Effect.flatMap(Effect.service(Client), (current) => {
72
70
  const savepoint = isTransactionClient(current);
73
71
  const run = runTransaction({
74
- body: (tx: TTx) => Effect.provideService(body, Client, tx),
72
+ body: () => body,
73
+ Client,
75
74
  client: current,
76
75
  deadline: savepoint ? undefined : (transactionOptions?.timeout ?? configuredTimeout(current)),
77
76
  Expiry,
@@ -81,6 +80,7 @@ export const makePrismaChanges = <TTx extends Transactional<TTx>, A, R = never>(
81
80
  });
82
81
  return savepoint ? run : Effect.provideService(run, Expiry, unlinked);
83
82
  }).pipe(Effect.withSpan("PrismaChanges.transaction"));
83
+ }
84
84
 
85
85
  return { Client, channel, recordWrite, transaction, Unnamed, use };
86
- };
86
+ }
package/src/coverage.ts CHANGED
@@ -22,7 +22,7 @@ function identify(write: UnnamedWrite): string {
22
22
  return write.reason === "narrowed" ? `${write.model}.${write.operation}.${write.field}` : `${write.model}.${write.operation}`;
23
23
  }
24
24
 
25
- export const checkCoverage = <A>(coverage: Coverage<A>): readonly CoverageViolation[] => {
25
+ export function checkCoverage<A>(coverage: Coverage<A>): readonly CoverageViolation[] {
26
26
  const recorded = recordedIn(coverage.observations);
27
27
  const unrecorded = [...new Set(coverage.written)].flatMap((table): readonly CoverageViolation[] => {
28
28
  const model = coverage.tables.get(table);
@@ -36,4 +36,4 @@ export const checkCoverage = <A>(coverage: Coverage<A>): readonly CoverageViolat
36
36
  });
37
37
  const unnamed = new Map([...coverage.unnamed].map((write) => [identify(write), write] as const));
38
38
  return [...unrecorded, ...[...unnamed.values()].map((write): CoverageViolation => ({ _tag: "Unnamed", write }))];
39
- };
39
+ }
package/src/expiry.ts CHANGED
@@ -5,45 +5,51 @@ export type Expire = (cause: unknown) => Effect.Effect<void>;
5
5
 
6
6
  export const unlinked: Expire = () => Effect.void;
7
7
 
8
- export const makeExpiry = (key: string) => Context.Reference<Expire>(key, { defaultValue: () => unlinked });
8
+ export function makeExpiry(key: string) {
9
+ return Context.Reference<Expire>(key, { defaultValue: () => unlinked });
10
+ }
9
11
 
10
- export const isTransactionClient = (client: object): boolean => !Predicate.hasProperty(client, "$connect");
12
+ export function isTransactionClient(client: object): boolean {
13
+ return !Predicate.hasProperty(client, "$connect");
14
+ }
11
15
 
12
- export const isTransactionClosed = (cause: unknown): boolean => Predicate.hasProperty(cause, "code") && cause.code === "P2028";
16
+ export function isTransactionClosed(cause: unknown): boolean {
17
+ return Predicate.hasProperty(cause, "code") && cause.code === "P2028";
18
+ }
13
19
 
14
20
  const EngineConfig = Schema.Struct({ transactionOptions: Schema.Struct({ timeout: Schema.Number }) });
15
21
 
16
22
  const decodeEngineConfig = Schema.decodeUnknownOption(EngineConfig);
17
23
 
18
- export const configuredTimeout = (client: object): number | undefined =>
19
- Predicate.hasProperty(client, "_engineConfig")
24
+ export function configuredTimeout(client: object): number | undefined {
25
+ return Predicate.hasProperty(client, "_engineConfig")
20
26
  ? Option.getOrUndefined(Option.map(decodeEngineConfig(client._engineConfig), (config) => config.transactionOptions.timeout))
21
27
  : undefined;
28
+ }
22
29
 
23
30
  const wallClock = Clock.Clock.defaultValue();
24
31
 
25
- export const expiring = <TX, E, R>(
32
+ export const expiring = Effect.fnUntraced(function* <TX, E, R>(
26
33
  body: Effect.Effect<TX, E, R>,
27
34
  timeout: number | undefined,
28
35
  Expiry: Context.Reference<Expire>,
29
- ): Effect.Effect<TX, E | TransactionExpired, R> =>
30
- Effect.gen(function* () {
31
- const outer = yield* Expiry;
32
- const expired = yield* Deferred.make<never, TransactionExpired>();
33
- const closed: Expire = (cause) =>
34
- Effect.andThen(
35
- Deferred.fail(expired, new TransactionExpired({ cause, message: "The transaction was closed before its body finished" })),
36
- outer(cause),
37
- );
38
- const deadline =
39
- timeout === undefined
40
- ? Effect.never
41
- : Effect.andThen(
42
- Effect.provideService(Effect.sleep(timeout), Clock.Clock, wallClock),
43
- Deferred.fail(expired, new TransactionExpired({ message: `The transaction expired after its ${timeout} ms timeout` })),
44
- );
45
- const guard = Effect.andThen(Effect.raceFirst(deadline, Deferred.await(expired)), Deferred.await(expired));
46
- return yield* Effect.raceFirst(Effect.provideService(body, Expiry, closed), guard).pipe(
47
- Effect.catchCause((cause) => Effect.flatMap(Deferred.isDone(expired), (done) => (done ? Deferred.await(expired) : Effect.failCause(cause)))),
36
+ ): Effect.fn.Return<TX, E | TransactionExpired, R> {
37
+ const outer = yield* Expiry;
38
+ const expired = yield* Deferred.make<never, TransactionExpired>();
39
+ const closed: Expire = (cause) =>
40
+ Effect.andThen(
41
+ Deferred.fail(expired, new TransactionExpired({ cause, message: "The transaction was closed before its body finished" })),
42
+ outer(cause),
48
43
  );
49
- });
44
+ const deadline =
45
+ timeout === undefined
46
+ ? Effect.never
47
+ : Effect.andThen(
48
+ Effect.provideService(Effect.sleep(timeout), Clock.Clock, wallClock),
49
+ Deferred.fail(expired, new TransactionExpired({ message: `The transaction expired after its ${timeout} ms timeout` })),
50
+ );
51
+ const guard = Effect.andThen(Effect.raceFirst(deadline, Deferred.await(expired)), Deferred.await(expired));
52
+ return yield* Effect.raceFirst(Effect.provideService(body, Expiry, closed), guard).pipe(
53
+ Effect.catchCause((cause) => Effect.flatMap(Deferred.isDone(expired), (done) => (done ? Deferred.await(expired) : Effect.failCause(cause)))),
54
+ );
55
+ });
package/src/model.ts CHANGED
@@ -44,4 +44,6 @@ export const rowOperations: ReadonlySet<string> = new Set<RowOperation>([
44
44
 
45
45
  export const countOperations: ReadonlySet<string> = new Set<CountOperation>(["createMany", "updateMany", "deleteMany"]);
46
46
 
47
- export const delegateOf = (model: string): string => `${model.charAt(0).toLowerCase()}${model.slice(1)}`;
47
+ export function delegateOf(model: string): string {
48
+ return `${model.charAt(0).toLowerCase()}${model.slice(1)}`;
49
+ }
package/src/recording.ts CHANGED
@@ -1,14 +1,17 @@
1
1
  import { countOperations, delegateOf, rowOperations } from "./model.ts";
2
2
  import type { LooseMap, Write } from "./write.ts";
3
3
 
4
- export const isWriteOperation = (operation: string): boolean => rowOperations.has(operation) || countOperations.has(operation);
4
+ export function isWriteOperation(operation: string): boolean {
5
+ return rowOperations.has(operation) || countOperations.has(operation);
6
+ }
5
7
 
6
- export const delegatesOf = <A>(models: LooseMap<A>): ReadonlyMap<string, string> =>
7
- new Map(
8
+ export function delegatesOf<A>(models: LooseMap<A>): ReadonlyMap<string, string> {
9
+ return new Map(
8
10
  Object.entries(models).flatMap(([model, changesOf]) =>
9
11
  changesOf === undefined || changesOf === null ? [] : [[delegateOf(model), model] as const],
10
12
  ),
11
13
  );
14
+ }
12
15
 
13
16
  function bound(value: unknown, target: object): unknown {
14
17
  return typeof value === "function" ? value.bind(target) : value;
@@ -30,12 +33,12 @@ function recordingDelegate(delegate: object, model: string, collect: (write: Wri
30
33
  });
31
34
  }
32
35
 
33
- export const recordingClient = <TClient extends object>(
36
+ export function recordingClient<TClient extends object>(
34
37
  client: TClient,
35
38
  delegates: ReadonlyMap<string, string>,
36
39
  collect: (write: Write) => void,
37
- ): TClient =>
38
- new Proxy(client, {
40
+ ): TClient {
41
+ return new Proxy(client, {
39
42
  get: (target, key) => {
40
43
  const value: unknown = Reflect.get(target, key);
41
44
  const model = typeof key === "string" ? delegates.get(key) : undefined;
@@ -45,3 +48,4 @@ export const recordingClient = <TClient extends object>(
45
48
  return bound(value, target);
46
49
  },
47
50
  });
51
+ }
package/src/tables.ts CHANGED
@@ -1,12 +1,19 @@
1
1
  import { Effect, Schema } from "effect";
2
2
  import { PrismaError } from "./error.ts";
3
3
 
4
- const MODEL = /^[ \t]*model[ \t]+(\w+)[ \t]*\{([\s\S]*?)^[ \t]*\}/gmu;
5
- const MAPPED = /@@map\(\s*(?:name\s*:\s*)?"([^"]+)"/u;
4
+ const MODEL = /^[ \t]*model[ \t]+(?<model>\w+)[ \t]*\{(?<body>[\s\S]*?)^[ \t]*\}/gmu;
5
+ const MAPPED = /@@map\(\s*(?:name\s*:\s*)?"(?<table>[^"]+)"/u;
6
6
  const COMMENT = /\/\/.*$/gmu;
7
7
 
8
- export const tablesOf = (schema: string): ReadonlyMap<string, string> =>
9
- new Map([...schema.replace(COMMENT, "").matchAll(MODEL)].map(([, model = "", body = ""]) => [MAPPED.exec(body)?.[1] ?? model, model] as const));
8
+ export function tablesOf(schema: string): ReadonlyMap<string, string> {
9
+ return new Map(
10
+ [...schema.replace(COMMENT, "").matchAll(MODEL)].map(({ groups }) => {
11
+ const model = groups?.model ?? "";
12
+ const body = groups?.body ?? "";
13
+ return [MAPPED.exec(body)?.groups?.table ?? model, model] as const;
14
+ }),
15
+ );
16
+ }
10
17
 
11
18
  export interface RawQueryClient {
12
19
  $queryRawUnsafe: (query: string) => PromiseLike<unknown>;
@@ -1,5 +1,5 @@
1
1
  import { type Context, Effect, Exit } from "effect";
2
- import type { Frame } from "@shivaedev/effect-changes/frame.ts";
2
+ import type { CommitFrame, Frame } from "@shivaedev/effect-changes/frame.ts";
3
3
  import { PrismaError, TransactionExpired } from "./error.ts";
4
4
  import { type Expire, expiring, isTransactionClosed } from "./expiry.ts";
5
5
  import type { Transactional, TransactionOptions } from "./model.ts";
@@ -47,23 +47,25 @@ function commit<TTx extends Transactional<TTx>, TX, E, R>(
47
47
  );
48
48
  }
49
49
 
50
- export const runTransaction = <TTx extends Transactional<TTx>, TX, E, R, TOpenRequirements>(options: {
50
+ export function runTransaction<TTx extends Transactional<TTx>, TX, E, R, TOpenRequirements>(options: {
51
51
  readonly client: TTx;
52
- readonly open: Effect.Effect<Frame, never, TOpenRequirements>;
52
+ readonly Client?: Context.Reference<TTx>;
53
+ readonly open: Effect.Effect<Frame & Partial<CommitFrame>, never, TOpenRequirements>;
53
54
  readonly body: (tx: TTx) => Effect.Effect<TX, E, R>;
54
55
  readonly transaction: TransactionOptions | undefined;
55
56
  readonly savepoint: boolean;
56
57
  readonly deadline: number | undefined;
57
58
  readonly Expiry: Context.Reference<Expire>;
58
- }): Effect.Effect<TX, E | TransactionExpired | PrismaError, R | TOpenRequirements> =>
59
- Effect.uninterruptibleMask((restore) =>
59
+ }): Effect.Effect<TX, E | TransactionExpired | PrismaError, R | TOpenRequirements> {
60
+ return Effect.uninterruptibleMask((restore) =>
60
61
  Effect.gen(function* () {
61
62
  const { client, savepoint, body, deadline, Expiry } = options;
62
63
  const frame = yield* options.open;
63
64
  const context = yield* Effect.context<R>();
64
65
  const abort = new AbortController();
65
66
  function guarded(tx: TTx) {
66
- return expiring(frame.provide(body(tx)), deadline, Expiry);
67
+ const work = frame.provide(Effect.tap(body(tx), () => frame.beforeCommit ?? Effect.void));
68
+ return expiring(options.Client === undefined ? work : Effect.provideService(work, options.Client, tx), deadline, Expiry);
67
69
  }
68
70
  const outcome = commit(client, options.transaction, savepoint, guarded, context, abort.signal);
69
71
  const expire = yield* Expiry;
@@ -73,7 +75,7 @@ export const runTransaction = <TTx extends Transactional<TTx>, TX, E, R, TOpenRe
73
75
  Effect.as(frame.settle(settled.committed ? "committed" : "rolledBack"), settled.exit),
74
76
  );
75
77
  }
76
- const settled = yield* restore(Effect.promise(() => outcome)).pipe(
78
+ const result = yield* restore(Effect.promise(() => outcome)).pipe(
77
79
  Effect.onInterrupt(() =>
78
80
  Effect.andThen(
79
81
  Effect.sync(() => abort.abort()),
@@ -84,6 +86,7 @@ export const runTransaction = <TTx extends Transactional<TTx>, TX, E, R, TOpenRe
84
86
  ),
85
87
  ),
86
88
  );
87
- return yield* Effect.flatten(settle(settled));
89
+ return yield* Effect.flatten(settle(result));
88
90
  }),
89
91
  );
92
+ }
package/src/write.ts CHANGED
@@ -49,7 +49,7 @@ function rowsOf(result: unknown): readonly object[] {
49
49
 
50
50
  const nothing: Interpreted<never> = { changes: [], unnamed: undefined };
51
51
 
52
- export const interpret = <A>(models: LooseMap<A>, write: Write): Interpreted<A> => {
52
+ export function interpret<A>(models: LooseMap<A>, write: Write): Interpreted<A> {
53
53
  const { model, operation } = write;
54
54
  const changesOf = models[model];
55
55
  if (changesOf === undefined || changesOf === null) {
@@ -73,4 +73,4 @@ export const interpret = <A>(models: LooseMap<A>, write: Write): Interpreted<A>
73
73
  throw error;
74
74
  }
75
75
  return { changes, unnamed: undefined };
76
- };
76
+ }