@shivaedev/effect-prisma 0.1.0 → 0.3.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.
Files changed (57) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/README.md +44 -5
  3. package/dist/database.d.ts.map +1 -1
  4. package/dist/database.js +1 -0
  5. package/dist/database.js.map +1 -1
  6. package/dist/internal/executor.d.ts +2 -1
  7. package/dist/internal/executor.d.ts.map +1 -1
  8. package/dist/internal/query-execution.d.ts +6 -0
  9. package/dist/internal/query-execution.d.ts.map +1 -0
  10. package/dist/internal/query-execution.js +5 -0
  11. package/dist/internal/query-execution.js.map +1 -0
  12. package/dist/internal/recipe.d.ts.map +1 -1
  13. package/dist/internal/recipe.js +66 -11
  14. package/dist/internal/recipe.js.map +1 -1
  15. package/dist/internal/relation-plan.d.ts +8 -0
  16. package/dist/internal/relation-plan.d.ts.map +1 -0
  17. package/dist/internal/relation-plan.js +10 -0
  18. package/dist/internal/relation-plan.js.map +1 -0
  19. package/dist/internal/relation-runtime.d.ts.map +1 -1
  20. package/dist/internal/relation-runtime.js +24 -18
  21. package/dist/internal/relation-runtime.js.map +1 -1
  22. package/dist/internal/relation-stream.d.ts +7 -0
  23. package/dist/internal/relation-stream.d.ts.map +1 -0
  24. package/dist/internal/relation-stream.js +28 -0
  25. package/dist/internal/relation-stream.js.map +1 -0
  26. package/dist/internal/transaction.d.ts.map +1 -1
  27. package/dist/internal/transaction.js +2 -1
  28. package/dist/internal/transaction.js.map +1 -1
  29. package/dist/relation/include-metadata.d.ts +34 -0
  30. package/dist/relation/include-metadata.d.ts.map +1 -0
  31. package/dist/relation/include-metadata.js +2 -0
  32. package/dist/relation/include-metadata.js.map +1 -0
  33. package/dist/relation/include.d.ts +25 -0
  34. package/dist/relation/include.d.ts.map +1 -0
  35. package/dist/relation/include.js +2 -0
  36. package/dist/relation/include.js.map +1 -0
  37. package/dist/relation/prisma-methods.d.ts +5 -2
  38. package/dist/relation/prisma-methods.d.ts.map +1 -1
  39. package/dist/relation.d.ts +8 -1
  40. package/dist/relation.d.ts.map +1 -1
  41. package/dist/testing.d.ts +1 -1
  42. package/dist/testing.d.ts.map +1 -1
  43. package/dist/testing.js.map +1 -1
  44. package/package.json +5 -5
  45. package/src/database.ts +1 -0
  46. package/src/internal/executor.ts +2 -1
  47. package/src/internal/query-execution.ts +10 -0
  48. package/src/internal/recipe.ts +96 -19
  49. package/src/internal/relation-plan.ts +22 -0
  50. package/src/internal/relation-runtime.ts +50 -43
  51. package/src/internal/relation-stream.ts +66 -0
  52. package/src/internal/transaction.ts +2 -1
  53. package/src/relation/include-metadata.ts +102 -0
  54. package/src/relation/include.ts +169 -0
  55. package/src/relation/prisma-methods.ts +5 -1
  56. package/src/relation.ts +15 -1
  57. package/src/testing.ts +3 -0
package/CHANGELOG.md CHANGED
@@ -2,6 +2,28 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
+ ## 0.3.0 - 2026-08-03
6
+
7
+ ### Added
8
+
9
+ - Export database service and requirement types from the testing entrypoint for
10
+ higher-level test harnesses.
11
+
12
+ ### Changed
13
+
14
+ - Serialize queries sharing a transaction connection, and buffer
15
+ transaction-scoped Streams before downstream processing. Queries and Streams
16
+ outside transactions remain parallel and incremental.
17
+ - Target Effect 4.0.0-beta.102 across the runtime and optional Vitest helpers.
18
+
19
+ ## 0.2.0 - 2026-07-26
20
+
21
+ ### Added
22
+
23
+ - Load typed to-one and to-many relations, including nested and refined
24
+ relations and relation counts.
25
+ - Count any filtered relation directly without building an aggregate result.
26
+
5
27
  ## 0.1.0 - 2026-07-26
6
28
 
7
29
  ### Added
package/README.md CHANGED
@@ -46,24 +46,54 @@ const program = Effect.gen(function* () {
46
46
  const users = yield* newest.take(20)
47
47
  const first = yield* active.first()
48
48
  const exists = yield* active.exists()
49
+ const count = yield* active.count()
49
50
 
50
- return { users, first, exists }
51
+ return { users, first, exists, count }
51
52
  })
52
53
  ```
53
54
 
54
55
  Relations are lazy and immutable. Reusing or branching a Relation never changes
55
56
  the original, and each execution resolves the active database context again.
56
57
 
58
+ Relations can be loaded directly or refined with another immutable Relation:
59
+
60
+ ```ts
61
+ const recentPosts = db.Post
62
+ .orderBy((post) => post.createdAt.desc())
63
+ .take(5)
64
+
65
+ const usersWithPosts = yield* db.User.include("posts", recentPosts)
66
+
67
+ const usersWithPostCounts = yield* db.User.include("posts", db.Post.count())
68
+ ```
69
+
70
+ Includes can be chained and nested. Loaded to-many relations are arrays, and
71
+ nullable to-one relations remain nullable in the result type.
72
+
73
+ Named query records return several projections of the same relation:
74
+
75
+ ```ts
76
+ const publishedPosts = db.Post.where({ published: true })
77
+ const recentPublishedPosts = publishedPosts
78
+ .orderBy((post) => post.createdAt.desc())
79
+ .take(5)
80
+
81
+ const usersWithPostOverview = yield* db.User.include("posts", {
82
+ items: recentPublishedPosts,
83
+ fullCount: publishedPosts.count(),
84
+ })
85
+ ```
86
+
57
87
  Collections are also cold Effect Streams:
58
88
 
59
89
  ```ts
60
90
  const stream = db.User.where({ active: true }).stream
61
91
  ```
62
92
 
63
- The initial package covers scalar models, filtering, selection, ordering,
64
- pagination, distinct queries, aggregates, grouping, and create/update/delete
65
- terminals. Relation includes and model variants are deliberately deferred
66
- rather than exposed with weakened types.
93
+ The package covers scalar models, filtering, selection, relation loading,
94
+ ordering, pagination, distinct queries, aggregates, grouping, and
95
+ create/update/delete terminals. Model variants are deliberately deferred rather
96
+ than exposed with weakened types.
67
97
 
68
98
  ## Transactions
69
99
 
@@ -85,6 +115,15 @@ yield* db.transaction(
85
115
  Nested package transactions reuse the active transaction. Successful programs
86
116
  commit; failure, defect, and interruption roll back.
87
117
 
118
+ Queries composed concurrently inside a transaction are executed one at a time
119
+ on its single connection. Once a transaction query starts, interruption waits
120
+ for it to settle before releasing that connection. Query effects outside
121
+ transactions remain parallel.
122
+
123
+ Transaction-scoped Streams are read into memory before emitting rows. This
124
+ releases the connection before downstream Stream effects run database queries.
125
+ Streams outside transactions retain incremental fetching.
126
+
88
127
  ## Vitest
89
128
 
90
129
  Install `@effect/vitest` to use the optional testing entrypoint:
@@ -1 +1 @@
1
- {"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../src/database.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../src/database.ts"],"names":[],"mappings":"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"}
package/dist/database.js CHANGED
@@ -70,6 +70,7 @@ export const makeDatabase = (identifier, options) => {
70
70
  return fromPrismaPromise(() => acquireConnectedClient(client, () => ({
71
71
  client,
72
72
  models: defaultModels(client),
73
+ querySemaphore: undefined,
73
74
  transactional: false,
74
75
  })));
75
76
  }), (executor) => Effect.promise(() => executor.client.close()).pipe(Effect.orDie));
@@ -1 +1 @@
1
- {"version":3,"file":"database.js","sourceRoot":"","sources":["../src/database.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"database.js","sourceRoot":"","sources":["../src/database.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,12 @@
1
1
  import type { Contract as PrismaContract } from "@prisma-next/contract/types";
2
2
  import type { PostgresClient } from "@prisma-next/postgres/runtime";
3
3
  import type { SqlStorage } from "@prisma-next/sql-contract/types";
4
- import type { Context } from "effect";
4
+ import type { Context, Semaphore } from "effect";
5
5
  export type AnyPostgresContract = PrismaContract<SqlStorage>;
6
6
  export interface DatabaseExecutor<Models extends object, Contract extends AnyPostgresContract = AnyPostgresContract> {
7
7
  readonly client: PostgresClient<Contract>;
8
8
  readonly models: Models;
9
+ readonly querySemaphore: Semaphore.Semaphore | undefined;
9
10
  readonly transactional: boolean;
10
11
  }
11
12
  export type ExecutorService<Models extends object, Contract extends AnyPostgresContract = AnyPostgresContract> = Context.Service<ExecutorIdentifier<Models>, DatabaseExecutor<Models, Contract>>;
@@ -1 +1 @@
1
- {"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../../src/internal/executor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,IAAI,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC9E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAEtC,MAAM,MAAM,mBAAmB,GAAG,cAAc,CAAC,UAAU,CAAC,CAAC;AAE7D,MAAM,WAAW,gBAAgB,CAChC,MAAM,SAAS,MAAM,EACrB,QAAQ,SAAS,mBAAmB,GAAG,mBAAmB;IAE1D,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAC;IAC1C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;CAChC;AAED,MAAM,MAAM,eAAe,CAC1B,MAAM,SAAS,MAAM,EACrB,QAAQ,SAAS,mBAAmB,GAAG,mBAAmB,IACvD,OAAO,CAAC,OAAO,CAClB,kBAAkB,CAAC,MAAM,CAAC,EAC1B,gBAAgB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAClC,CAAC;AAEF,MAAM,WAAW,kBAAkB,CAAC,MAAM,SAAS,MAAM;IACxD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,mBAAmB,EAAE,OAAO,MAAM,CAAC;CAC5C"}
1
+ {"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../../src/internal/executor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,IAAI,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC9E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAEjD,MAAM,MAAM,mBAAmB,GAAG,cAAc,CAAC,UAAU,CAAC,CAAC;AAE7D,MAAM,WAAW,gBAAgB,CAChC,MAAM,SAAS,MAAM,EACrB,QAAQ,SAAS,mBAAmB,GAAG,mBAAmB;IAE1D,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAC;IAC1C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,cAAc,EAAE,SAAS,CAAC,SAAS,GAAG,SAAS,CAAC;IACzD,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;CAChC;AAED,MAAM,MAAM,eAAe,CAC1B,MAAM,SAAS,MAAM,EACrB,QAAQ,SAAS,mBAAmB,GAAG,mBAAmB,IACvD,OAAO,CAAC,OAAO,CAClB,kBAAkB,CAAC,MAAM,CAAC,EAC1B,gBAAgB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAClC,CAAC;AAEF,MAAM,WAAW,kBAAkB,CAAC,MAAM,SAAS,MAAM;IACxD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,mBAAmB,EAAE,OAAO,MAAM,CAAC;CAC5C"}
@@ -0,0 +1,6 @@
1
+ import type { Semaphore } from "effect";
2
+ import { Effect } from "effect";
3
+ export declare const executeQuery: <A, E, R>(executor: {
4
+ readonly querySemaphore: Semaphore.Semaphore | undefined;
5
+ }, effect: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>;
6
+ //# sourceMappingURL=query-execution.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-execution.d.ts","sourceRoot":"","sources":["../../src/internal/query-execution.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,eAAO,MAAM,YAAY,GAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EACnC,UAAU;IAAE,QAAQ,CAAC,cAAc,EAAE,SAAS,CAAC,SAAS,GAAG,SAAS,CAAA;CAAE,EACtE,QAAQ,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAC5B,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAG8C,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { Effect } from "effect";
2
+ export const executeQuery = (executor, effect) => executor.querySemaphore === undefined
3
+ ? effect
4
+ : executor.querySemaphore.withPermit(Effect.uninterruptible(effect));
5
+ //# sourceMappingURL=query-execution.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-execution.js","sourceRoot":"","sources":["../../src/internal/query-execution.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,MAAM,CAAC,MAAM,YAAY,GAAG,CAC3B,QAAsE,EACtE,MAA8B,EACL,EAAE,CAC3B,QAAQ,CAAC,cAAc,KAAK,SAAS;IACpC,CAAC,CAAC,MAAM;IACR,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC,UAAU,CAAC,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"recipe.d.ts","sourceRoot":"","sources":["../../src/internal/recipe.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,iBAAiB;IACjC,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;CAC3C;AAED,MAAM,WAAW,cAAc;IAC9B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,CAAC,EAAE,cAAc,CAAC;IACjC,QAAQ,CAAC,SAAS,CAAC,EAAE,iBAAiB,CAAC;CACvC;AAED,eAAO,MAAM,UAAU,GAAI,OAAO,MAAM,KAAG,cAA6B,CAAC;AAEzE,eAAO,MAAM,eAAe,GAC3B,QAAQ,cAAc,EACtB,MAAM,WAAW,EACjB,YAAY,aAAa,CAAC,OAAO,CAAC,KAChC,cAOD,CAAC;AAkBH,eAAO,MAAM,YAAY,GACxB,QAAQ,MAAM,EACd,QAAQ,cAAc,KACpB,OAyBF,CAAC"}
1
+ {"version":3,"file":"recipe.d.ts","sourceRoot":"","sources":["../../src/internal/recipe.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,iBAAiB;IACjC,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;CAC3C;AAED,MAAM,WAAW,cAAc;IAC9B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,CAAC,EAAE,cAAc,CAAC;IACjC,QAAQ,CAAC,SAAS,CAAC,EAAE,iBAAiB,CAAC;CACvC;AAED,eAAO,MAAM,UAAU,GAAI,OAAO,MAAM,KAAG,cAA6B,CAAC;AAEzE,eAAO,MAAM,eAAe,GAC3B,QAAQ,cAAc,EACtB,MAAM,WAAW,EACjB,YAAY,aAAa,CAAC,OAAO,CAAC,KAChC,cAOD,CAAC;AA8GH,eAAO,MAAM,YAAY,GACxB,QAAQ,MAAM,EACd,QAAQ,cAAc,KACpB,OAQF,CAAC"}
@@ -1,3 +1,4 @@
1
+ import { getRelationPlan } from "./relation-plan.js";
1
2
  export const rootRecipe = (model) => ({ model });
2
3
  export const appendOperation = (parent, name, arguments_) => ({
3
4
  model: parent.model,
@@ -18,20 +19,74 @@ const operations = (recipe) => {
18
19
  }
19
20
  return reversed.reverse();
20
21
  };
21
- export const replayRecipe = (models, recipe) => {
22
- let current = Reflect.get(models, recipe.model);
23
- if (current === undefined) {
24
- throw new TypeError(`Unknown Prisma model: ${recipe.model}`);
22
+ const applyMethod = (current, name, arguments_, model) => {
23
+ if (typeof current !== "object" ||
24
+ current === null ||
25
+ typeof Reflect.get(current, name) !== "function") {
26
+ throw new TypeError(`Cannot call ${String(name)} while replaying ${model}`);
25
27
  }
26
- for (const operation of operations(recipe)) {
27
- if (typeof current !== "object" ||
28
- current === null ||
29
- typeof Reflect.get(current, operation.name) !== "function") {
30
- throw new TypeError(`Cannot call ${String(operation.name)} while replaying ${recipe.model}`);
28
+ const method = Reflect.get(current, name);
29
+ return Reflect.apply(method, current, arguments_);
30
+ };
31
+ const replayPlan = (collection, plan) => {
32
+ const relatedModel = typeof collection === "object" && collection !== null
33
+ ? Reflect.get(collection, "modelName")
34
+ : undefined;
35
+ if (typeof relatedModel === "string" && relatedModel !== plan.recipe.model) {
36
+ throw new TypeError(`Included relation expects ${relatedModel}, received ${plan.recipe.model}`);
37
+ }
38
+ const refined = replayRecipeFrom(collection, plan.recipe);
39
+ if (plan.terminal !== "count") {
40
+ return refined;
41
+ }
42
+ return applyMethod(refined, "count", [], plan.recipe.model);
43
+ };
44
+ const includeRefinement = (value) => {
45
+ const plan = getRelationPlan(value);
46
+ if (plan !== undefined) {
47
+ return (collection) => replayPlan(collection, plan);
48
+ }
49
+ if (typeof value !== "object" || value === null || Array.isArray(value)) {
50
+ throw new TypeError("An included relation must be a Relation or query record");
51
+ }
52
+ const entries = Object.entries(value);
53
+ if (entries.length === 0) {
54
+ throw new TypeError("An included query record cannot be empty");
55
+ }
56
+ const plans = entries.map(([name, query]) => {
57
+ const queryPlan = getRelationPlan(query);
58
+ if (queryPlan === undefined) {
59
+ throw new TypeError(`Included query "${name}" is not a Relation`);
31
60
  }
32
- const method = Reflect.get(current, operation.name);
33
- current = Reflect.apply(method, current, operation.arguments);
61
+ return [name, queryPlan];
62
+ });
63
+ const model = plans[0]?.[1].recipe.model;
64
+ if (plans.some(([, queryPlan]) => queryPlan.recipe.model !== model)) {
65
+ throw new TypeError("Included queries must use the same related model");
66
+ }
67
+ return (collection) => {
68
+ const branches = Object.fromEntries(plans.map(([name, queryPlan]) => [
69
+ name,
70
+ replayPlan(collection, queryPlan),
71
+ ]));
72
+ return applyMethod(collection, "combine", [branches], model ?? "relation");
73
+ };
74
+ };
75
+ const replayRecipeFrom = (root, recipe) => {
76
+ let current = root;
77
+ for (const operation of operations(recipe)) {
78
+ const arguments_ = operation.name === "include" && operation.arguments.length === 2
79
+ ? [operation.arguments[0], includeRefinement(operation.arguments[1])]
80
+ : operation.arguments;
81
+ current = applyMethod(current, operation.name, arguments_, recipe.model);
34
82
  }
35
83
  return current;
36
84
  };
85
+ export const replayRecipe = (models, recipe) => {
86
+ const current = Reflect.get(models, recipe.model);
87
+ if (current === undefined) {
88
+ throw new TypeError(`Unknown Prisma model: ${recipe.model}`);
89
+ }
90
+ return replayRecipeFrom(current, recipe);
91
+ };
37
92
  //# sourceMappingURL=recipe.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"recipe.js","sourceRoot":"","sources":["../../src/internal/recipe.ts"],"names":[],"mappings":"AAWA,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,KAAa,EAAkB,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;AAEzE,MAAM,CAAC,MAAM,eAAe,GAAG,CAC9B,MAAsB,EACtB,IAAiB,EACjB,UAAkC,EACjB,EAAE,CAAC,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC,KAAK;IACnB,MAAM;IACN,SAAS,EAAE;QACV,IAAI;QACJ,SAAS,EAAE,UAAU;KACrB;CACD,CAAC,CAAC;AAEH,MAAM,UAAU,GAAG,CAClB,MAAsB,EACa,EAAE;IACrC,MAAM,QAAQ,GAA6B,EAAE,CAAC;IAC9C,IAAI,OAAO,GAA+B,MAAM,CAAC;IAEjD,OAAO,OAAO,KAAK,SAAS,EAAE,CAAC;QAC9B,IAAI,OAAO,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YACrC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAClC,CAAC;QACD,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC;IAC1B,CAAC;IAED,OAAO,QAAQ,CAAC,OAAO,EAAE,CAAC;AAC3B,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG,CAC3B,MAAc,EACd,MAAsB,EACZ,EAAE;IACZ,IAAI,OAAO,GAAY,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;IAEzD,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC3B,MAAM,IAAI,SAAS,CAAC,yBAAyB,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;IAC9D,CAAC;IAED,KAAK,MAAM,SAAS,IAAI,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QAC5C,IACC,OAAO,OAAO,KAAK,QAAQ;YAC3B,OAAO,KAAK,IAAI;YAChB,OAAO,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,SAAS,CAAC,IAAI,CAAC,KAAK,UAAU,EACzD,CAAC;YACF,MAAM,IAAI,SAAS,CAClB,eAAe,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,oBAAoB,MAAM,CAAC,KAAK,EAAE,CACvE,CAAC;QACH,CAAC;QAED,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,SAAS,CAAC,IAAI,CAEtC,CAAC;QACb,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC/D,CAAC;IAED,OAAO,OAAO,CAAC;AAChB,CAAC,CAAC"}
1
+ {"version":3,"file":"recipe.js","sourceRoot":"","sources":["../../src/internal/recipe.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { RelationRecipe } from "./recipe.js";
2
+ export declare const RelationPlanTypeId: unique symbol;
3
+ export interface RelationPlan {
4
+ readonly recipe: RelationRecipe;
5
+ readonly terminal?: PropertyKey;
6
+ }
7
+ export declare const getRelationPlan: (value: unknown) => RelationPlan | undefined;
8
+ //# sourceMappingURL=relation-plan.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relation-plan.d.ts","sourceRoot":"","sources":["../../src/internal/relation-plan.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD,eAAO,MAAM,kBAAkB,eAE9B,CAAC;AAEF,MAAM,WAAW,YAAY;IAC5B,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAChC,QAAQ,CAAC,QAAQ,CAAC,EAAE,WAAW,CAAC;CAChC;AAED,eAAO,MAAM,eAAe,GAAI,OAAO,OAAO,KAAG,YAAY,GAAG,SAU/D,CAAC"}
@@ -0,0 +1,10 @@
1
+ export const RelationPlanTypeId = Symbol.for("@shivaedev/effect-prisma/RelationPlan");
2
+ export const getRelationPlan = (value) => {
3
+ if (typeof value !== "object" ||
4
+ value === null ||
5
+ !Reflect.has(value, RelationPlanTypeId)) {
6
+ return undefined;
7
+ }
8
+ return Reflect.get(value, RelationPlanTypeId);
9
+ };
10
+ //# sourceMappingURL=relation-plan.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relation-plan.js","sourceRoot":"","sources":["../../src/internal/relation-plan.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,kBAAkB,GAAG,MAAM,CAAC,GAAG,CAC3C,uCAAuC,CACvC,CAAC;AAOF,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,KAAc,EAA4B,EAAE;IAC3E,IACC,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACd,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,kBAAkB,CAAC,EACtC,CAAC;QACF,OAAO,SAAS,CAAC;IAClB,CAAC;IAED,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,kBAAkB,CAAiB,CAAC;AAC/D,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"relation-runtime.d.ts","sourceRoot":"","sources":["../../src/internal/relation-runtime.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAGtC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,KAAK,EACX,mBAAmB,EACnB,gBAAgB,EAChB,kBAAkB,EAClB,MAAM,eAAe,CAAC;AAkMvB,eAAO,MAAM,iBAAiB,GAC7B,UAAU,EACV,MAAM,SAAS,MAAM,EACrB,QAAQ,SAAS,mBAAmB,GAAG,mBAAmB,EAE1D,UAAU,OAAO,CAAC,OAAO,CACxB,kBAAkB,CAAC,MAAM,CAAC,EAC1B,gBAAgB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAClC,EACD,OAAO,MAAM,KACX,QAAQ,CAAC,UAAU,EAAE,kBAAkB,CAAC,MAAM,CAAC,CAIK,CAAC"}
1
+ {"version":3,"file":"relation-runtime.d.ts","sourceRoot":"","sources":["../../src/internal/relation-runtime.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAGtC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,KAAK,EACX,mBAAmB,EACnB,gBAAgB,EAChB,kBAAkB,EAClB,MAAM,eAAe,CAAC;AAyMvB,eAAO,MAAM,iBAAiB,GAC7B,UAAU,EACV,MAAM,SAAS,MAAM,EACrB,QAAQ,SAAS,mBAAmB,GAAG,mBAAmB,EAE1D,UAAU,OAAO,CAAC,OAAO,CACxB,kBAAkB,CAAC,MAAM,CAAC,EAC1B,gBAAgB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAClC,EACD,OAAO,MAAM,KACX,QAAQ,CAAC,UAAU,EAAE,kBAAkB,CAAC,MAAM,CAAC,CAIK,CAAC"}
@@ -1,8 +1,17 @@
1
- import { Effect, Effectable, Option, Stream } from "effect";
2
- import { isPrismaFailure, toPrismaError } from "../error.js";
1
+ import { Effect, Effectable, Option } from "effect";
3
2
  import { fromPrismaPromise } from "./promise.js";
3
+ import { executeQuery } from "./query-execution.js";
4
4
  import { appendOperation, replayRecipe, rootRecipe, } from "./recipe.js";
5
+ import { RelationPlanTypeId } from "./relation-plan.js";
6
+ import { makeRelationStream } from "./relation-stream.js";
5
7
  const evaluateResult = (value, terminal) => {
8
+ if (terminal === "count" &&
9
+ typeof value === "object" &&
10
+ value !== null &&
11
+ typeof Reflect.get(value, "aggregate") === "function") {
12
+ const aggregate = Reflect.apply(Reflect.get(value, "aggregate"), value, [(summary) => ({ count: summary.count() })]);
13
+ return fromPrismaPromise(() => aggregate).pipe(Effect.map((result) => result.count));
14
+ }
6
15
  if (terminal === "exists" &&
7
16
  typeof value === "object" &&
8
17
  value !== null &&
@@ -22,7 +31,7 @@ const evaluateResult = (value, terminal) => {
22
31
  }
23
32
  return Effect.succeed(executable);
24
33
  };
25
- const relationEffect = (self) => Effect.flatMap(self.runtime.executor, (executor) => Effect.suspend(() => evaluateResult(replayRecipe(executor.models, self.runtime.recipe), self.runtime.terminal))).pipe(Effect.withSpan(`prisma.${self.runtime.recipe.model}.${String(self.runtime.terminal ?? "all")}`, {
34
+ const relationEffect = (self) => Effect.flatMap(self.runtime.executor, (executor) => executeQuery(executor, Effect.suspend(() => evaluateResult(replayRecipe(executor.models, self.runtime.recipe), self.runtime.terminal)))).pipe(Effect.withSpan(`prisma.${self.runtime.recipe.model}.${String(self.runtime.terminal ?? "all")}`, {
26
35
  kind: "client",
27
36
  attributes: {
28
37
  "db.system": "postgresql",
@@ -30,20 +39,6 @@ const relationEffect = (self) => Effect.flatMap(self.runtime.executor, (executor
30
39
  "db.operation": String(self.runtime.terminal ?? "all"),
31
40
  },
32
41
  }));
33
- const relationStream = (self) => {
34
- const result = Effect.map(self.runtime.executor, (executor) => {
35
- const collection = replayRecipe(executor.models, self.runtime.recipe);
36
- if (typeof collection !== "object" ||
37
- collection === null ||
38
- typeof Reflect.get(collection, "all") !== "function") {
39
- throw new TypeError("Only collection Relations can be streamed");
40
- }
41
- return Reflect.apply(Reflect.get(collection, "all"), collection, []);
42
- });
43
- return Stream.unwrap(Effect.map(result, (iterable) => Stream.fromAsyncIterable(iterable, (error) => error).pipe(Stream.catch((error) => isPrismaFailure(error)
44
- ? Stream.fail(toPrismaError(error))
45
- : Stream.die(error)))));
46
- };
47
42
  const RelationPrototype = {
48
43
  ...Effectable.Prototype({
49
44
  label: "EffectPrismaRelation",
@@ -52,11 +47,16 @@ const RelationPrototype = {
52
47
  },
53
48
  }),
54
49
  get stream() {
55
- return relationStream(this);
50
+ const relation = this;
51
+ return makeRelationStream(relation.runtime.executor, relation.runtime.recipe);
56
52
  },
57
53
  };
58
54
  const makeRelationProxy = (runtime) => {
59
55
  const target = Object.assign(Object.create(RelationPrototype), {
56
+ [RelationPlanTypeId]: {
57
+ recipe: runtime.recipe,
58
+ ...(runtime.terminal === undefined ? {} : { terminal: runtime.terminal }),
59
+ },
60
60
  runtime,
61
61
  });
62
62
  return new Proxy(target, {
@@ -73,6 +73,12 @@ const makeRelationProxy = (runtime) => {
73
73
  terminal: "exists",
74
74
  });
75
75
  }
76
+ if (property === "count") {
77
+ return () => makeRelationProxy({
78
+ ...runtime,
79
+ terminal: "count",
80
+ });
81
+ }
76
82
  return (...arguments_) => makeRelationProxy({
77
83
  ...runtime,
78
84
  recipe: appendOperation(runtime.recipe, property, arguments_),
@@ -1 +1 @@
1
- {"version":3,"file":"relation-runtime.js","sourceRoot":"","sources":["../../src/internal/relation-runtime.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"relation-runtime.js","sourceRoot":"","sources":["../../src/internal/relation-runtime.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { Context } from "effect";
2
+ import { Stream } from "effect";
3
+ import { type PrismaError } from "../error.js";
4
+ import type { AnyPostgresContract, DatabaseExecutor, ExecutorIdentifier } from "./executor.js";
5
+ import { type RelationRecipe } from "./recipe.js";
6
+ export declare const makeRelationStream: <Models extends object, Contract extends AnyPostgresContract>(executorService: Context.Service<ExecutorIdentifier<Models>, DatabaseExecutor<Models, Contract>>, recipe: RelationRecipe) => Stream.Stream<unknown, PrismaError, ExecutorIdentifier<Models>>;
7
+ //# sourceMappingURL=relation-stream.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relation-stream.d.ts","sourceRoot":"","sources":["../../src/internal/relation-stream.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAU,MAAM,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAO,EAAmB,KAAK,WAAW,EAAiB,MAAM,aAAa,CAAC;AAC/E,OAAO,KAAK,EACX,mBAAmB,EACnB,gBAAgB,EAChB,kBAAkB,EAClB,MAAM,eAAe,CAAC;AAGvB,OAAO,EAAE,KAAK,cAAc,EAAgB,MAAM,aAAa,CAAC;AAIhE,eAAO,MAAM,kBAAkB,GAC9B,MAAM,SAAS,MAAM,EACrB,QAAQ,SAAS,mBAAmB,EAEpC,iBAAiB,OAAO,CAAC,OAAO,CAC/B,kBAAkB,CAAC,MAAM,CAAC,EAC1B,gBAAgB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAClC,EACD,QAAQ,cAAc,KACpB,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,WAAW,EAAE,kBAAkB,CAAC,MAAM,CAAC,CA0C/D,CAAC"}
@@ -0,0 +1,28 @@
1
+ import { Effect, Stream } from "effect";
2
+ import { isPrismaFailure, toPrismaError } from "../error.js";
3
+ import { fromPrismaPromise } from "./promise.js";
4
+ import { executeQuery } from "./query-execution.js";
5
+ import { replayRecipe } from "./recipe.js";
6
+ export const makeRelationStream = (executorService, recipe) => Stream.unwrap(Effect.map(executorService, (executor) => {
7
+ const collection = replayRecipe(executor.models, recipe);
8
+ if (typeof collection !== "object" ||
9
+ collection === null ||
10
+ typeof Reflect.get(collection, "all") !== "function") {
11
+ throw new TypeError("Only collection Relations can be streamed");
12
+ }
13
+ const iterable = Reflect.apply(Reflect.get(collection, "all"), collection, []);
14
+ if (executor.querySemaphore === undefined) {
15
+ return Stream.fromAsyncIterable(iterable, (error) => error).pipe(Stream.catch((error) => isPrismaFailure(error)
16
+ ? Stream.fail(toPrismaError(error))
17
+ : Stream.die(error)));
18
+ }
19
+ const buffered = executeQuery(executor, fromPrismaPromise(async () => {
20
+ const rows = [];
21
+ for await (const row of iterable) {
22
+ rows.push(row);
23
+ }
24
+ return rows;
25
+ }));
26
+ return Stream.unwrap(Effect.map(buffered, (rows) => Stream.fromIterable(rows)));
27
+ }));
28
+ //# sourceMappingURL=relation-stream.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relation-stream.js","sourceRoot":"","sources":["../../src/internal/relation-stream.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAO,EAAE,eAAe,EAAoB,aAAa,EAAE,MAAM,aAAa,CAAC;AAM/E,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAuB,YAAY,EAAE,MAAM,aAAa,CAAC;AAIhE,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAIjC,eAGC,EACD,MAAsB,EAC4C,EAAE,CACpE,MAAM,CAAC,MAAM,CACZ,MAAM,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC,QAAQ,EAAE,EAAE;IACxC,MAAM,UAAU,GAAG,YAAY,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzD,IACC,OAAO,UAAU,KAAK,QAAQ;QAC9B,UAAU,KAAK,IAAI;QACnB,OAAO,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,KAAK,CAAC,KAAK,UAAU,EACnD,CAAC;QACF,MAAM,IAAI,SAAS,CAAC,2CAA2C,CAAC,CAAC;IAClE,CAAC;IACD,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAC7B,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,KAAK,CAAgB,EAC7C,UAAU,EACV,EAAE,CACwB,CAAC;IAE5B,IAAI,QAAQ,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;QAC3C,OAAO,MAAM,CAAC,iBAAiB,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,CAC/D,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CACtB,eAAe,CAAC,KAAK,CAAC;YACrB,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YACnC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CACpB,CACD,CAAC;IACH,CAAC;IAED,MAAM,QAAQ,GAAG,YAAY,CAC5B,QAAQ,EACR,iBAAiB,CAAC,KAAK,IAAI,EAAE;QAC5B,MAAM,IAAI,GAAmB,EAAE,CAAC;QAChC,IAAI,KAAK,EAAE,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;YAClC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAChB,CAAC;QACD,OAAO,IAAI,CAAC;IACb,CAAC,CAAC,CACF,CAAC;IAEF,OAAO,MAAM,CAAC,MAAM,CACnB,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CACzD,CAAC;AACH,CAAC,CAAC,CACF,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["../../src/internal/transaction.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAEpE,OAAO,KAAK,EACX,iBAAiB,EACjB,kBAAkB,EAClB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,KAAK,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAG3E,MAAM,WAAW,mBAAmB,CACnC,MAAM,SAAS,MAAM,EACrB,QAAQ,SAAS,mBAAmB;IAEpC,QAAQ,CAAC,UAAU,EAAE,iBAAiB,CAAC;IACvC,QAAQ,CAAC,WAAW,EAAE,kBAAkB,CAAC;IACzC,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;CACtD;AASD,eAAO,MAAM,kBAAkB,GAC9B,MAAM,SAAS,MAAM,EACrB,QAAQ,SAAS,mBAAmB,EAEpC,SAAS,gBAAgB,CAAC,MAAM,EAAE,QAAQ,CAAC,EAC3C,QAAQ,CAAC,GAAG,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,KAAK,MAAM,KACtD,MAAM,CAAC,MAAM,CAAC,mBAAmB,CAAC,MAAM,EAAE,QAAQ,CAAC,EAAE,WAAW,CAwBhE,CAAC;AAEJ,eAAO,MAAM,kBAAkB,GAC9B,MAAM,SAAS,MAAM,EACrB,QAAQ,SAAS,mBAAmB,EACpC,CAAC,EACD,CAAC,EAED,UAAU,mBAAmB,CAAC,MAAM,EAAE,QAAQ,CAAC,EAC/C,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,KACnB,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,WAAW,CAA4C,CAAC;AAE/E,eAAO,MAAM,sBAAsB,GAClC,MAAM,SAAS,MAAM,EACrB,QAAQ,SAAS,mBAAmB,EACpC,CAAC,EACD,CAAC,EAED,UAAU,mBAAmB,CAAC,MAAM,EAAE,QAAQ,CAAC,EAC/C,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,KACnB,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,WAAW,CAA6C,CAAC"}
1
+ {"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["../../src/internal/transaction.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAEpE,OAAO,KAAK,EACX,iBAAiB,EACjB,kBAAkB,EAClB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAa,MAAM,QAAQ,CAAC;AACjD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,KAAK,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAG3E,MAAM,WAAW,mBAAmB,CACnC,MAAM,SAAS,MAAM,EACrB,QAAQ,SAAS,mBAAmB;IAEpC,QAAQ,CAAC,UAAU,EAAE,iBAAiB,CAAC;IACvC,QAAQ,CAAC,WAAW,EAAE,kBAAkB,CAAC;IACzC,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;CACtD;AASD,eAAO,MAAM,kBAAkB,GAC9B,MAAM,SAAS,MAAM,EACrB,QAAQ,SAAS,mBAAmB,EAEpC,SAAS,gBAAgB,CAAC,MAAM,EAAE,QAAQ,CAAC,EAC3C,QAAQ,CAAC,GAAG,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,KAAK,MAAM,KACtD,MAAM,CAAC,MAAM,CAAC,mBAAmB,CAAC,MAAM,EAAE,QAAQ,CAAC,EAAE,WAAW,CAyBhE,CAAC;AAEJ,eAAO,MAAM,kBAAkB,GAC9B,MAAM,SAAS,MAAM,EACrB,QAAQ,SAAS,mBAAmB,EACpC,CAAC,EACD,CAAC,EAED,UAAU,mBAAmB,CAAC,MAAM,EAAE,QAAQ,CAAC,EAC/C,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,KACnB,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,WAAW,CAA4C,CAAC;AAE/E,eAAO,MAAM,sBAAsB,GAClC,MAAM,SAAS,MAAM,EACrB,QAAQ,SAAS,mBAAmB,EACpC,CAAC,EACD,CAAC,EAED,UAAU,mBAAmB,CAAC,MAAM,EAAE,QAAQ,CAAC,EAC/C,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,KACnB,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,WAAW,CAA6C,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import { orm } from "@prisma-next/sql-orm-client";
2
- import { Effect, Exit } from "effect";
2
+ import { Effect, Exit, Semaphore } from "effect";
3
3
  import { fromPrismaPromise } from "./promise.js";
4
4
  const runtimeFailure = (code, cause, details) => Object.assign(new Error(code, { cause }), { code, ...details });
5
5
  export const acquireTransaction = (current, models) => fromPrismaPromise(async () => {
@@ -16,6 +16,7 @@ export const acquireTransaction = (current, models) => fromPrismaPromise(async (
16
16
  executor: {
17
17
  client: current.client,
18
18
  models: models(transactionOrm),
19
+ querySemaphore: Semaphore.makeUnsafe(1),
19
20
  transactional: true,
20
21
  },
21
22
  };
@@ -1 +1 @@
1
- {"version":3,"file":"transaction.js","sourceRoot":"","sources":["../../src/internal/transaction.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"transaction.js","sourceRoot":"","sources":["../../src/internal/transaction.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ import type { Contract as PrismaContract } from "@prisma-next/contract/types";
2
+ import type { SqlStorage } from "@prisma-next/sql-contract/types";
3
+ import type { RelationsOf } from "@prisma-next/sql-orm-client";
4
+ export type AnyPostgresContract = PrismaContract<SqlStorage>;
5
+ type RelationDefinition<Contract extends AnyPostgresContract, Model extends string, RelationName extends string> = RelationName extends keyof RelationsOf<Contract, Model> ? RelationsOf<Contract, Model>[RelationName] : never;
6
+ type RelationCardinalityOf<Contract extends AnyPostgresContract, Model extends string, RelationName extends string> = RelationDefinition<Contract, Model, RelationName> extends {
7
+ readonly cardinality: infer Cardinality extends string;
8
+ } ? Cardinality : never;
9
+ export type IsToManyRelation<Contract extends AnyPostgresContract, Model extends string, RelationName extends string> = RelationCardinalityOf<Contract, Model, RelationName> extends "1:N" | "N:M" ? true : false;
10
+ export type RelatedModelNameOf<Contract extends AnyPostgresContract, Model extends string, RelationName extends string> = RelationDefinition<Contract, Model, RelationName> extends {
11
+ readonly to: {
12
+ readonly model: infer Related extends string;
13
+ };
14
+ } ? Related : never;
15
+ type RelationLocalFields<Contract extends AnyPostgresContract, Model extends string, RelationName extends string> = RelationDefinition<Contract, Model, RelationName> extends {
16
+ readonly on: {
17
+ readonly localFields: infer Fields extends readonly string[];
18
+ };
19
+ } ? Fields : readonly [];
20
+ type DefaultNamespace<Contract extends AnyPostgresContract> = Contract["domain"]["namespaces"][keyof Contract["domain"]["namespaces"]];
21
+ type ModelFields<Contract extends AnyPostgresContract, Model extends string> = DefaultNamespace<Contract> extends {
22
+ readonly models: infer Models;
23
+ } ? Model extends keyof Models ? Models[Model] extends {
24
+ readonly fields: infer Fields;
25
+ } ? Fields : never : never : never;
26
+ type AnyNullableField<Fields, Names extends readonly string[]> = Names extends readonly [
27
+ infer Head extends string,
28
+ ...infer Tail extends readonly string[]
29
+ ] ? Head extends keyof Fields ? Fields[Head] extends {
30
+ readonly nullable: true;
31
+ } ? true : AnyNullableField<Fields, Tail> : true : false;
32
+ export type IncludedRelationValue<Contract extends AnyPostgresContract, Model extends string, RelationName extends string, Value> = RelationCardinalityOf<Contract, Model, RelationName> extends "1:N" | "N:M" ? Array<Value> : RelationCardinalityOf<Contract, Model, RelationName> extends "N:1" ? AnyNullableField<ModelFields<Contract, Model>, RelationLocalFields<Contract, Model, RelationName>> extends true ? Value | null : Value : Value | null;
33
+ export {};
34
+ //# sourceMappingURL=include-metadata.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"include-metadata.d.ts","sourceRoot":"","sources":["../../src/relation/include-metadata.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=include-metadata.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"include-metadata.js","sourceRoot":"","sources":["../../src/relation/include-metadata.ts"],"names":[],"mappings":""}