@kavo/prisma 0.5.0 → 0.7.1

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/LICENSE ADDED
@@ -0,0 +1,201 @@
1
+ Apache License
2
+ Version 2.0, January 2004
3
+ http://www.apache.org/licenses/
4
+
5
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
6
+
7
+ 1. Definitions.
8
+
9
+ "License" shall mean the terms and conditions for use, reproduction,
10
+ and distribution as defined by Sections 1 through 9 of this document.
11
+
12
+ "Licensor" shall mean the copyright owner or entity authorized by
13
+ the copyright owner that is granting the License.
14
+
15
+ "Legal Entity" shall mean the union of the acting entity and all
16
+ other entities that control, are controlled by, or are under common
17
+ control with that entity. For the purposes of this definition,
18
+ "control" means (i) the power, direct or indirect, to cause the
19
+ direction or management of such entity, whether by contract or
20
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
21
+ outstanding shares, or (iii) beneficial ownership of such entity.
22
+
23
+ "You" (or "Your") shall mean an individual or Legal Entity
24
+ exercising permissions granted by this License.
25
+
26
+ "Source" form shall mean the preferred form for making modifications,
27
+ including but not limited to software source code, documentation
28
+ source, and configuration files.
29
+
30
+ "Object" form shall mean any form resulting from mechanical
31
+ transformation or translation of a Source form, including but
32
+ not limited to compiled object code, generated documentation,
33
+ and conversions to other media types.
34
+
35
+ "Work" shall mean the work of authorship, whether in Source or
36
+ Object form, made available under the License, as indicated by a
37
+ copyright notice that is included in or attached to the work
38
+ (an example is provided in the Appendix below).
39
+
40
+ "Derivative Works" shall mean any work, whether in Source or Object
41
+ form, that is based on (or derived from) the Work and for which the
42
+ editorial revisions, annotations, elaborations, or other modifications
43
+ represent, as a whole, an original work of authorship. For the purposes
44
+ of this License, Derivative Works shall not include works that remain
45
+ separable from, or merely link (or bind by name) to the interfaces of,
46
+ the Work and Derivative Works thereof.
47
+
48
+ "Contribution" shall mean any work of authorship, including
49
+ the original version of the Work and any modifications or additions
50
+ to that Work or Derivative Works thereof, that is intentionally
51
+ submitted to Licensor for inclusion in the Work by the copyright owner
52
+ or by an individual or Legal Entity authorized to submit on behalf of
53
+ the copyright owner. For the purposes of this definition, "submitted"
54
+ means any form of electronic, verbal, or written communication sent
55
+ to the Licensor or its representatives, including but not limited to
56
+ communication on electronic mailing lists, source code control systems,
57
+ and issue tracking systems that are managed by, or on behalf of, the
58
+ Licensor for the purpose of discussing and improving the Work, but
59
+ excluding communication that is conspicuously marked or otherwise
60
+ designated in writing by the copyright owner as "Not a Contribution."
61
+
62
+ "Contributor" shall mean Licensor and any individual or Legal Entity
63
+ on behalf of whom a Contribution has been received by Licensor and
64
+ subsequently incorporated within the Work.
65
+
66
+ 2. Grant of Copyright License. Subject to the terms and conditions of
67
+ this License, each Contributor hereby grants to You a perpetual,
68
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
69
+ copyright license to reproduce, prepare Derivative Works of,
70
+ publicly display, publicly perform, sublicense, and distribute the
71
+ Work and such Derivative Works in Source or Object form.
72
+
73
+ 3. Grant of Patent License. Subject to the terms and conditions of
74
+ this License, each Contributor hereby grants to You a perpetual,
75
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
76
+ (except as stated in this section) patent license to make, have made,
77
+ use, offer to sell, sell, import, and otherwise transfer the Work,
78
+ where such license applies only to those patent claims licensable
79
+ by such Contributor that are necessarily infringed by their
80
+ Contribution(s) alone or by combination of their Contribution(s)
81
+ with the Work to which such Contribution(s) was submitted. If You
82
+ institute patent litigation against any entity (including a
83
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
84
+ or a Contribution incorporated within the Work constitutes direct
85
+ or contributory patent infringement, then any patent licenses
86
+ granted to You under this License for that Work shall terminate
87
+ as of the date such litigation is filed.
88
+
89
+ 4. Redistribution. You may reproduce and distribute copies of the
90
+ Work or Derivative Works thereof in any medium, with or without
91
+ modifications, and in Source or Object form, provided that You
92
+ meet the following conditions:
93
+
94
+ (a) You must give any other recipients of the Work or
95
+ Derivative Works a copy of this License; and
96
+
97
+ (b) You must cause any modified files to carry prominent notices
98
+ stating that You changed the files; and
99
+
100
+ (c) You must retain, in the Source form of any Derivative Works
101
+ that You distribute, all copyright, patent, trademark, and
102
+ attribution notices from the Source form of the Work,
103
+ excluding those notices that do not pertain to any part of
104
+ the Derivative Works; and
105
+
106
+ (d) If the Work includes a "NOTICE" text file as part of its
107
+ distribution, then any Derivative Works that You distribute must
108
+ include a readable copy of the attribution notices contained
109
+ within such NOTICE file, excluding those notices that do not
110
+ pertain to any part of the Derivative Works, in at least one
111
+ of the following places: within a NOTICE text file distributed
112
+ as part of the Derivative Works; within the Source form or
113
+ documentation, if provided along with the Derivative Works; or,
114
+ within a display generated by the Derivative Works, if and
115
+ wherever such third-party notices normally appear. The contents
116
+ of the NOTICE file are for informational purposes only and
117
+ do not modify the License. You may add Your own attribution
118
+ notices within Derivative Works that You distribute, alongside
119
+ or as an addendum to the NOTICE text from the Work, provided
120
+ that such additional attribution notices cannot be construed
121
+ as modifying the License.
122
+
123
+ You may add Your own copyright statement to Your modifications and
124
+ may provide additional or different license terms and conditions
125
+ for use, reproduction, or distribution of Your modifications, or
126
+ for any such Derivative Works as a whole, provided Your use,
127
+ reproduction, and distribution of the Work otherwise complies with
128
+ the conditions stated in this License.
129
+
130
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
131
+ any Contribution intentionally submitted for inclusion in the Work
132
+ by You to the Licensor shall be under the terms and conditions of
133
+ this License, without any additional terms or conditions.
134
+ Notwithstanding the above, nothing herein shall supersede or modify
135
+ the terms of any separate license agreement you may have executed
136
+ with Licensor regarding such Contributions.
137
+
138
+ 6. Trademarks. This License does not grant permission to use the trade
139
+ names, trademarks, service marks, or product names of the Licensor,
140
+ except as required for reasonable and customary use in describing
141
+ the origin of the Work and reproducing the content of the NOTICE file.
142
+
143
+ 7. Disclaimer of Warranty. Unless required by applicable law or
144
+ agreed to in writing, Licensor provides the Work (and each
145
+ Contributor provides its Contributions) on an "AS IS" BASIS,
146
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
147
+ implied, including, without limitation, any warranties or conditions
148
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
149
+ PARTICULAR PURPOSE. You are solely responsible for determining the
150
+ appropriateness of using or redistributing the Work and assume any
151
+ risks associated with Your exercise of permissions under this License.
152
+
153
+ 8. Limitation of Liability. In no event and under no legal theory,
154
+ whether in tort (including negligence), contract, or otherwise,
155
+ unless required by applicable law (such as deliberate and grossly
156
+ negligent acts) or agreed to in writing, shall any Contributor be
157
+ liable to You for damages, including any direct, indirect, special,
158
+ incidental, or consequential damages of any character arising as a
159
+ result of this License or out of the use or inability to use the
160
+ Work (including but not limited to damages for loss of goodwill,
161
+ work stoppage, computer failure or malfunction, or any and all
162
+ other commercial damages or losses), even if such Contributor
163
+ has been advised of the possibility of such damages.
164
+
165
+ 9. Accepting Warranty or Additional Liability. While redistributing
166
+ the Work or Derivative Works thereof, You may choose to offer,
167
+ and charge a fee for, acceptance of support, warranty, indemnity,
168
+ or other liability obligations and/or rights consistent with this
169
+ License. However, in accepting such obligations, You may act only
170
+ on Your own behalf and on Your sole responsibility, not on behalf
171
+ of any other Contributor, and only if You agree to indemnify,
172
+ defend, and hold each Contributor harmless for any liability
173
+ incurred by, or claims asserted against, such Contributor by reason
174
+ of your accepting any such warranty or additional liability.
175
+
176
+ END OF TERMS AND CONDITIONS
177
+
178
+ APPENDIX: How to apply the Apache License to your work.
179
+
180
+ To apply the Apache License to your work, attach the following
181
+ boilerplate notice, with the fields enclosed by brackets "[]"
182
+ replaced with your own identifying information. (Don't include
183
+ the brackets!) The text should be enclosed in the appropriate
184
+ comment syntax for the file format. We also recommend that a
185
+ file name and description of purpose be included on the same
186
+ "printed page" as the copyright notice for easier identification
187
+ within third-party archives.
188
+
189
+ Copyright 2026 Hossein Saleminejad
190
+
191
+ Licensed under the Apache License, Version 2.0 (the "License");
192
+ you may not use this file except in compliance with the License.
193
+ You may obtain a copy of the License at
194
+
195
+ http://www.apache.org/licenses/LICENSE-2.0
196
+
197
+ Unless required by applicable law or agreed to in writing, software
198
+ distributed under the License is distributed on an "AS IS" BASIS,
199
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
200
+ See the License for the specific language governing permissions and
201
+ limitations under the License.
package/README.md CHANGED
@@ -18,7 +18,7 @@ includes all run through this adapter.
18
18
  Prisma generates no runtime class for a model, so each entity needs a
19
19
  caller-declared **marker class** as its `ClassRef` identity, matched by
20
20
  name to the schema (`class Author {}` ↔ `model Author { … }`). See
21
- `docs/adr/0017-prisma-marker-classes-and-entity-registry.md` for why.
21
+ `docs/internals/adr/0017-prisma-marker-classes-and-entity-registry.md` for why.
22
22
 
23
23
  ```ts
24
24
  import { PrismaClient, Prisma } from "@prisma/client";
@@ -1,18 +1,23 @@
1
1
  import type { Filter } from "@kavo/core";
2
+ import type { PrismaRelationGraph } from "./metadata.js";
2
3
  /** A Prisma `where` input, built structurally — no generated type is required to build one. */
3
4
  export type PrismaWhere = Record<string, unknown>;
4
- /**
5
- * Whether the target connector supports Prisma's `mode: "insensitive"`
6
- * string filter — Postgres and MongoDB do; MySQL, SQLite, and SQL Server
7
- * reject the argument outright. There is no reliable way to detect this
8
- * from the DMMF at runtime, so it is an explicit, caller-declared setting
9
- * (see `PrismaInfrastructureOptions.caseInsensitiveFilters`) rather than a
10
- * guess. On an unsupported connector, `ILIKE` degrades to the same
11
- * translation as `LIKE` — on SQLite in particular this is not a loss of
12
- * behavior, since SQLite's own `LIKE` is already ASCII case-insensitive.
13
- */
14
5
  export interface FilterTranslatorOptions {
6
+ /**
7
+ * Whether the target connector supports Prisma's `mode: "insensitive"`
8
+ * string filter — Postgres and MongoDB do; MySQL, SQLite, and SQL Server
9
+ * reject the argument outright. There is no reliable way to detect this
10
+ * from the DMMF at runtime, so it is an explicit, caller-declared setting
11
+ * (see `PrismaInfrastructureOptions.caseInsensitiveFilters`) rather than a
12
+ * guess. On an unsupported connector, `ILIKE` degrades to the same
13
+ * translation as `LIKE` — on SQLite in particular this is not a loss of
14
+ * behavior, since SQLite's own `LIKE` is already ASCII case-insensitive.
15
+ */
15
16
  readonly caseInsensitiveFilters: boolean;
17
+ /** The model a relation path starts walking from — the entity being queried. */
18
+ readonly model: string;
19
+ /** The whole datamodel's relation edges, so a path's cardinality is knowable. */
20
+ readonly relations: PrismaRelationGraph;
16
21
  }
17
22
  /**
18
23
  * Filter AST → Prisma `where` object.
@@ -20,8 +25,9 @@ export interface FilterTranslatorOptions {
20
25
  * Unlike `@kavo/typeorm`'s translator, this needs no query-builder state
21
26
  * (no join aliases, no parameter numbering): Prisma's `where` already
22
27
  * nests relation paths natively (`{ author: { name: { equals: "Ada" } } }`),
23
- * so a relation-path field (`author.name`) simply nests the same
24
- * translation one level deeper instead of adding a join.
28
+ * so a relation-path field (`author.name`) nests the same translation one
29
+ * level deeper instead of adding a join. A *to-many* segment takes a `some`
30
+ * wrapper on the way down — see {@link nest}.
25
31
  */
26
32
  export declare function translateFilter<Entity>(filter: Filter<Entity>, options: FilterTranslatorOptions): PrismaWhere | undefined;
27
33
  //# sourceMappingURL=filter-translator.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"filter-translator.d.ts","sourceRoot":"","sources":["../src/filter-translator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAmD,MAAM,YAAY,CAAC;AAG1F,+FAA+F;AAC/F,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAElD;;;;;;;;;GASG;AACH,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,sBAAsB,EAAE,OAAO,CAAC;CAC1C;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,MAAM,EACpC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,EACtB,OAAO,EAAE,uBAAuB,GAC/B,WAAW,GAAG,SAAS,CAIzB"}
1
+ {"version":3,"file":"filter-translator.d.ts","sourceRoot":"","sources":["../src/filter-translator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAmD,MAAM,YAAY,CAAC;AAE1F,OAAO,KAAK,EAAsB,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAE7E,+FAA+F;AAC/F,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAElD,MAAM,WAAW,uBAAuB;IACtC;;;;;;;;;OASG;IACH,QAAQ,CAAC,sBAAsB,EAAE,OAAO,CAAC;IACzC,gFAAgF;IAChF,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,iFAAiF;IACjF,QAAQ,CAAC,SAAS,EAAE,mBAAmB,CAAC;CACzC;AAUD;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAAC,MAAM,EACpC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,EACtB,OAAO,EAAE,uBAAuB,GAC/B,WAAW,GAAG,SAAS,CAIzB"}
@@ -1,12 +1,20 @@
1
- import { assertNever } from "@kavo/core";
1
+ import { assertNever, QueryValidationException } from "@kavo/core";
2
+ /**
3
+ * A predicate that matches no row: the empty disjunction, which is `false`
4
+ * by definition. Spelled this way rather than against the primary key
5
+ * (`@kavo/mikroorm`'s `{ id: { $in: [] } }`) because it needs no metadata,
6
+ * and unlike an empty `NOT` Prisma does honor it.
7
+ */
8
+ const MATCHES_NOTHING = { OR: [] };
2
9
  /**
3
10
  * Filter AST → Prisma `where` object.
4
11
  *
5
12
  * Unlike `@kavo/typeorm`'s translator, this needs no query-builder state
6
13
  * (no join aliases, no parameter numbering): Prisma's `where` already
7
14
  * nests relation paths natively (`{ author: { name: { equals: "Ada" } } }`),
8
- * so a relation-path field (`author.name`) simply nests the same
9
- * translation one level deeper instead of adding a join.
15
+ * so a relation-path field (`author.name`) nests the same translation one
16
+ * level deeper instead of adding a join. A *to-many* segment takes a `some`
17
+ * wrapper on the way down — see {@link nest}.
10
18
  */
11
19
  export function translateFilter(filter, options) {
12
20
  const root = filter.root;
@@ -19,52 +27,110 @@ function translateExpression(expression, options) {
19
27
  return translateCondition(expression, options);
20
28
  }
21
29
  if (expression.operator === "NOT") {
22
- const child = expression.children[0];
23
- return { NOT: child === undefined ? {} : translateExpression(child, options) };
30
+ // `NOT` is variadic and means `NOT(AND(children))` (doc 05 §1), so no
31
+ // child past the first is dropped (#115).
32
+ //
33
+ // The empty case cannot be spelled that way, though: Prisma drops a
34
+ // `NOT` whose operand carries no condition, so `{ NOT: { AND: [] } }`
35
+ // matches *every* row rather than none — the same silent widening #111
36
+ // fixed in `@kavo/typeorm`, verified against a real engine in
37
+ // `adapter.spec.ts`. `MATCHES_NOTHING` is the contradiction Prisma does
38
+ // honor.
39
+ if (expression.children.length === 0)
40
+ return MATCHES_NOTHING;
41
+ return { NOT: conjunction(expression.children, options) };
24
42
  }
25
43
  const key = expression.operator === "OR" ? "OR" : "AND";
26
44
  return { [key]: expression.children.map((child) => translateExpression(child, options)) };
27
45
  }
28
- /** Nest `condition.field` (`"author.name"`) into Prisma's native relation-path shape. */
29
- function nest(field, leaf) {
46
+ /**
47
+ * `AND` over `children`, as the thing `NOT` negates. A single child is
48
+ * returned unwrapped so the common unary `NOT` keeps its exact shape.
49
+ */
50
+ function conjunction(children, options) {
51
+ if (children.length === 1)
52
+ return translateExpression(children[0], options);
53
+ return { AND: children.map((child) => translateExpression(child, options)) };
54
+ }
55
+ /**
56
+ * Nest `condition.field` (`"author.name"`) into Prisma's native
57
+ * relation-path shape.
58
+ *
59
+ * Cardinality decides the shape, which is why the translator needs the
60
+ * relation graph at all. Prisma accepts a bare nested object only on a
61
+ * to-one relation; on a list it requires `some`/`every`/`none` and rejects
62
+ * the bare form with `Unknown argument`. `some` is the right one: doc 05 §3
63
+ * defines a relation-path filter as restricting *root* rows — "a user with
64
+ * at least one post titled x" — which is exactly what `@kavo/typeorm` gets
65
+ * from a `LEFT JOIN` plus a `WHERE` on the joined column.
66
+ */
67
+ function nest(field, leaf, options) {
30
68
  const segments = field.split(".");
31
- return segments.reduceRight((inner, segment) => ({ [segment]: inner }), leaf);
69
+ if (segments.length === 1)
70
+ return { [field]: leaf };
71
+ // Walk the path first, so an unresolvable segment raises a Kavo 400
72
+ // instead of building a `where` Prisma will reject at runtime.
73
+ const edges = [];
74
+ let model = options.model;
75
+ for (const segment of segments.slice(0, -1)) {
76
+ const edge = options.relations.get(model)?.get(segment);
77
+ if (edge === undefined)
78
+ throw unknownRelationSegment(field, segment, model);
79
+ edges.push(edge);
80
+ model = edge.target;
81
+ }
82
+ // Then build outwards from the leaf, wrapping each to-many hop in `some`.
83
+ let nested = { [segments[segments.length - 1]]: leaf };
84
+ for (let index = edges.length - 1; index >= 0; index -= 1) {
85
+ const inner = edges[index].cardinality === "many" ? { some: nested } : nested;
86
+ nested = { [segments[index]]: inner };
87
+ }
88
+ return nested;
89
+ }
90
+ function unknownRelationSegment(field, segment, model) {
91
+ return QueryValidationException.single({
92
+ field,
93
+ code: "KAVO_QUERY_UNSUPPORTED_PARAM",
94
+ detail: `Query parameter '${field}' is not supported: '${segment}' is not a relation on Prisma model ` +
95
+ `'${model}', so @kavo/prisma cannot tell whether to nest it as a to-one or a to-many filter. ` +
96
+ `Remove '${field}' from the allowlist, or correct the path.`,
97
+ });
32
98
  }
33
99
  function translateCondition(condition, options) {
34
100
  const field = condition.field;
35
101
  const value = condition.value;
36
102
  switch (condition.operator) {
37
103
  case "EQ":
38
- return nest(field, { equals: value });
104
+ return nest(field, { equals: value }, options);
39
105
  case "NE":
40
- return nest(field, { not: value });
106
+ return nest(field, { not: value }, options);
41
107
  case "GT":
42
- return nest(field, { gt: value });
108
+ return nest(field, { gt: value }, options);
43
109
  case "GTE":
44
- return nest(field, { gte: value });
110
+ return nest(field, { gte: value }, options);
45
111
  case "LT":
46
- return nest(field, { lt: value });
112
+ return nest(field, { lt: value }, options);
47
113
  case "LTE":
48
- return nest(field, { lte: value });
114
+ return nest(field, { lte: value }, options);
49
115
  case "IN":
50
- return nest(field, { in: value });
116
+ return nest(field, { in: value }, options);
51
117
  case "NOT_IN":
52
- return nest(field, { notIn: value });
118
+ return nest(field, { notIn: value }, options);
53
119
  case "LIKE":
54
- return nest(field, likeToPrismaStringFilter(value));
120
+ return nest(field, likeToPrismaStringFilter(value, field), options);
55
121
  case "ILIKE":
56
122
  return nest(field, {
57
- ...likeToPrismaStringFilter(value),
123
+ ...likeToPrismaStringFilter(value, field),
58
124
  ...(options.caseInsensitiveFilters && { mode: "insensitive" }),
59
- });
125
+ }, options);
60
126
  case "BETWEEN": {
61
127
  const [low, high] = value;
62
- return nest(field, { gte: low, lte: high });
128
+ return nest(field, { gte: low, lte: high }, options);
63
129
  }
64
130
  case "IS_NULL":
65
- return nest(field, { equals: null });
131
+ return nest(field, { equals: null }, options);
66
132
  case "IS_NOT_NULL":
67
- return nest(field, { not: null });
133
+ return nest(field, { not: null }, options);
68
134
  default:
69
135
  // Every AST operator must translate to a predicate — proven total
70
136
  // here at build time, same guarantee as `@kavo/typeorm`'s translator.
@@ -72,23 +138,105 @@ function translateCondition(condition, options) {
72
138
  }
73
139
  }
74
140
  /**
75
- * `LIKE`/`ILIKE` carry SQL wildcard syntax (`%prefix%`, `A%`, `%suffix`)
76
- * from the parser; Prisma has no raw pattern operator, only
77
- * `contains`/`startsWith`/`endsWith`/`equals`. The wildcard *position*
78
- * decides which one — `A%` is a prefix match (`startsWith`), not "contains
79
- * A somewhere", so the two ends are checked independently rather than
80
- * always falling back to `contains`.
141
+ * Split a `LIKE` pattern into tokens, honoring the grammar's backslash
142
+ * escape (doc 05 §3): `\%` and `\_` are literal text, not wildcards.
143
+ *
144
+ * Consecutive `%` collapse into one — `a%%` and `a%` mean the same thing
145
+ * so the shape check downstream is about structure rather than spelling.
146
+ * A trailing lone backslash escapes nothing and is treated as a literal,
147
+ * matching `@kavo/mongoose`'s `likeToRegExpSource`.
81
148
  */
82
- function likeToPrismaStringFilter(pattern) {
83
- const leading = pattern.startsWith("%");
84
- const trailing = pattern.endsWith("%") && pattern.length > 1;
85
- const stripped = pattern.slice(leading ? 1 : 0, trailing ? -1 : undefined);
86
- if (leading && trailing)
87
- return { contains: stripped };
88
- if (trailing)
89
- return { startsWith: stripped };
90
- if (leading)
91
- return { endsWith: stripped };
92
- return { equals: stripped };
149
+ function tokenizeLike(pattern) {
150
+ const tokens = [];
151
+ let literal = "";
152
+ const flush = () => {
153
+ if (literal !== "") {
154
+ tokens.push({ kind: "literal", text: literal });
155
+ literal = "";
156
+ }
157
+ };
158
+ for (let index = 0; index < pattern.length; index += 1) {
159
+ const character = pattern[index];
160
+ if (character === "\\") {
161
+ const escaped = pattern[index + 1];
162
+ if (escaped === undefined) {
163
+ literal += "\\";
164
+ break;
165
+ }
166
+ literal += escaped;
167
+ index += 1;
168
+ continue;
169
+ }
170
+ if (character === "%") {
171
+ flush();
172
+ if (tokens[tokens.length - 1]?.kind !== "any")
173
+ tokens.push({ kind: "any" });
174
+ continue;
175
+ }
176
+ if (character === "_") {
177
+ flush();
178
+ tokens.push({ kind: "one" });
179
+ continue;
180
+ }
181
+ literal += character;
182
+ }
183
+ flush();
184
+ return tokens;
185
+ }
186
+ /**
187
+ * `LIKE`/`ILIKE` → a Prisma string filter.
188
+ *
189
+ * Prisma's `where` has no raw pattern operator — only
190
+ * `equals`/`startsWith`/`endsWith`/`contains` — so exactly four pattern
191
+ * shapes are expressible, distinguished by where the wildcards sit:
192
+ *
193
+ * | pattern | filter |
194
+ * | ------- | ------------- |
195
+ * | `john` | `equals` |
196
+ * | `A%` | `startsWith` |
197
+ * | `%son` | `endsWith` |
198
+ * | `%j%` | `contains` |
199
+ *
200
+ * Everything else — an interior `%` (`a%b`), or any `_` at all, which
201
+ * Prisma has no single-character wildcard for — is **rejected with a 400**
202
+ * rather than silently downgraded. The rejected forms used to fall through
203
+ * to `equals` on the raw pattern (#114), so the same wire request returned
204
+ * one result set on TypeORM/Mongoose/MikroORM and a different one here,
205
+ * with no error on either side. A 400 makes the limitation visible; see
206
+ * `docs/internals/architecture/14-prisma-adapter.md`.
207
+ *
208
+ * The backslash escape is applied first, so `100\%` is the literal text
209
+ * `100%` (an `equals`), not a `startsWith` on `100\` — matching the
210
+ * `ESCAPE` clause `@kavo/typeorm` binds and the regex `@kavo/mongoose`
211
+ * builds.
212
+ */
213
+ function likeToPrismaStringFilter(pattern, field) {
214
+ const tokens = tokenizeLike(pattern);
215
+ const literals = tokens.filter((token) => token.kind === "literal");
216
+ const text = literals.length === 1 ? literals[0].text : "";
217
+ if (!tokens.some((token) => token.kind === "one") && literals.length <= 1) {
218
+ const leading = tokens[0]?.kind === "any";
219
+ const trailing = tokens.length > 1 && tokens[tokens.length - 1]?.kind === "any";
220
+ // `%` alone is one `any` token: leading with no literal, which reads as
221
+ // `contains: ""` — every non-null value, the same set SQL `LIKE '%'` has.
222
+ if (tokens.length === 1 && leading)
223
+ return { contains: "" };
224
+ if (leading && trailing)
225
+ return { contains: text };
226
+ if (trailing)
227
+ return { startsWith: text };
228
+ if (leading)
229
+ return { endsWith: text };
230
+ return { equals: text };
231
+ }
232
+ throw QueryValidationException.single({
233
+ field,
234
+ code: "KAVO_QUERY_UNSUPPORTED_PARAM",
235
+ detail: `Query parameter '${field}' is not supported: @kavo/prisma cannot express the pattern ` +
236
+ `'${pattern}'. Prisma's 'where' has no raw pattern operator, so only a leading and/or ` +
237
+ `trailing '%' is supported ('john', 'A%', '%son', '%j%'); an interior '%' and the ` +
238
+ `single-character wildcard '_' have no equivalent. Escape a literal '%' or '_' with a ` +
239
+ `backslash, or move the pattern to a raw query.`,
240
+ });
93
241
  }
94
242
  //# sourceMappingURL=filter-translator.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"filter-translator.js","sourceRoot":"","sources":["../src/filter-translator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"filter-translator.js","sourceRoot":"","sources":["../src/filter-translator.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,8 +1,8 @@
1
- export { buildEntityMetadata } from "./metadata.js";
1
+ export { buildEntityMetadata, buildRelationGraph, type PrismaRelationEdge, type PrismaRelationGraph, } from "./metadata.js";
2
2
  export { mapDriverError } from "./error-mapping.js";
3
- export { translateFilter, type PrismaWhere } from "./filter-translator.js";
3
+ export { translateFilter, type FilterTranslatorOptions, type PrismaWhere } from "./filter-translator.js";
4
4
  export { PrismaRepositoryAdapter } from "./prisma-repository-adapter.js";
5
- export { createPrismaInfrastructure, createPrismaKavo, type PrismaInfrastructureOptions } from "./infrastructure.js";
5
+ export { createInfrastructure, createPrismaKavo, type PrismaInfrastructureOptions } from "./infrastructure.js";
6
6
  export { delegateName, type PrismaClientLike, type PrismaModelDelegate } from "./prisma-client-like.js";
7
7
  export type { PrismaDatamodel, PrismaEnum, PrismaField, PrismaModel } from "./datamodel.js";
8
8
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,KAAK,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC3E,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,EAAE,0BAA0B,EAAE,gBAAgB,EAAE,KAAK,2BAA2B,EAAE,MAAM,qBAAqB,CAAC;AACrH,OAAO,EAAE,YAAY,EAAE,KAAK,gBAAgB,EAAE,KAAK,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AACxG,YAAY,EAAE,eAAe,EAAE,UAAU,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,GACzB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAIpD,OAAO,EAAE,eAAe,EAAE,KAAK,uBAAuB,EAAE,KAAK,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACzG,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,KAAK,2BAA2B,EAAE,MAAM,qBAAqB,CAAC;AAC/G,OAAO,EAAE,YAAY,EAAE,KAAK,gBAAgB,EAAE,KAAK,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AACxG,YAAY,EAAE,eAAe,EAAE,UAAU,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC"}
package/dist/index.js CHANGED
@@ -1,7 +1,10 @@
1
- export { buildEntityMetadata } from "./metadata.js";
1
+ export { buildEntityMetadata, buildRelationGraph, } from "./metadata.js";
2
2
  export { mapDriverError } from "./error-mapping.js";
3
+ // `FilterTranslatorOptions` is named here for the same reason `@kavo/mongoose`
4
+ // and `@kavo/mikroorm` name theirs: `PrismaRepositoryAdapter` is public, and
5
+ // constructing one means constructing its filter options.
3
6
  export { translateFilter } from "./filter-translator.js";
4
7
  export { PrismaRepositoryAdapter } from "./prisma-repository-adapter.js";
5
- export { createPrismaInfrastructure, createPrismaKavo } from "./infrastructure.js";
8
+ export { createInfrastructure, createPrismaKavo } from "./infrastructure.js";
6
9
  export { delegateName } from "./prisma-client-like.js";
7
10
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAoB,MAAM,wBAAwB,CAAC;AAC3E,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,EAAE,0BAA0B,EAAE,gBAAgB,EAAoC,MAAM,qBAAqB,CAAC;AACrH,OAAO,EAAE,YAAY,EAAmD,MAAM,yBAAyB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,kBAAkB,GAGnB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,+EAA+E;AAC/E,6EAA6E;AAC7E,0DAA0D;AAC1D,OAAO,EAAE,eAAe,EAAkD,MAAM,wBAAwB,CAAC;AACzG,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAoC,MAAM,qBAAqB,CAAC;AAC/G,OAAO,EAAE,YAAY,EAAmD,MAAM,yBAAyB,CAAC"}
@@ -1,4 +1,4 @@
1
- import type { ClassRef, CrudInfrastructure, KavoInstance, KavoOptions } from "@kavo/core";
1
+ import type { ClassRef, KavoInfrastructure, KavoInstance, KavoOptions } from "@kavo/core";
2
2
  import type { PrismaDatamodel } from "./datamodel.js";
3
3
  import type { PrismaClientLike } from "./prisma-client-like.js";
4
4
  /**
@@ -13,7 +13,7 @@ import type { PrismaClientLike } from "./prisma-client-like.js";
13
13
  * purely as `ClassRef` identity (`class Author {}` ↔ `model Author`,
14
14
  * matched by name) — and a relation's target model name can only resolve
15
15
  * back to *its* marker class if every marker class was registered up
16
- * front. See `docs/adr/0017-prisma-marker-classes-and-entity-registry.md`.
16
+ * front. See `docs/internals/adr/0017-prisma-marker-classes-and-entity-registry.md`.
17
17
  */
18
18
  export interface PrismaInfrastructureOptions {
19
19
  readonly datamodel: PrismaDatamodel;
@@ -31,9 +31,9 @@ export interface PrismaInfrastructureOptions {
31
31
  * The Prisma implementation of core's infrastructure seam: metadata and
32
32
  * adapters derived from one Prisma Client, cached per entity (metadata
33
33
  * derivation and adapter construction are bootstrap work, not per-request
34
- * work) — same shape as `@kavo/typeorm`'s `createTypeOrmInfrastructure`.
34
+ * work) — same shape as `@kavo/typeorm`'s `createInfrastructure`.
35
35
  */
36
- export declare function createPrismaInfrastructure(prismaClient: PrismaClientLike, options: PrismaInfrastructureOptions): CrudInfrastructure;
36
+ export declare function createInfrastructure(prismaClient: PrismaClientLike, options: PrismaInfrastructureOptions): KavoInfrastructure;
37
37
  /**
38
38
  * Sugar for the common case: a Kavo root instance wired to one Prisma
39
39
  * Client, so `kavo.createCrud(Author)` is genuinely zero-config beyond
@@ -1 +1 @@
1
- {"version":3,"file":"infrastructure.d.ts","sourceRoot":"","sources":["../src/infrastructure.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,QAAQ,EACR,kBAAkB,EAElB,YAAY,EACZ,WAAW,EAEZ,MAAM,YAAY,CAAC;AAEpB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEtD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAGhE;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,SAAS,EAAE,eAAe,CAAC;IACpC,QAAQ,CAAC,QAAQ,EAAE,SAAS,QAAQ,EAAE,CAAC;IACvC;;;;;;OAMG;IACH,QAAQ,CAAC,sBAAsB,CAAC,EAAE,OAAO,CAAC;CAC3C;AAED;;;;;GAKG;AACH,wBAAgB,0BAA0B,CACxC,YAAY,EAAE,gBAAgB,EAC9B,OAAO,EAAE,2BAA2B,GACnC,kBAAkB,CA2BpB;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,YAAY,EAAE,gBAAgB,EAC9B,OAAO,EAAE,2BAA2B,GAAG,IAAI,CAAC,WAAW,EAAE,gBAAgB,CAAC,GACzE,YAAY,CAMd"}
1
+ {"version":3,"file":"infrastructure.d.ts","sourceRoot":"","sources":["../src/infrastructure.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,QAAQ,EACR,kBAAkB,EAElB,YAAY,EACZ,WAAW,EAEZ,MAAM,YAAY,CAAC;AAEpB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEtD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAGhE;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,SAAS,EAAE,eAAe,CAAC;IACpC,QAAQ,CAAC,QAAQ,EAAE,SAAS,QAAQ,EAAE,CAAC;IACvC;;;;;;OAMG;IACH,QAAQ,CAAC,sBAAsB,CAAC,EAAE,OAAO,CAAC;CAC3C;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,YAAY,EAAE,gBAAgB,EAC9B,OAAO,EAAE,2BAA2B,GACnC,kBAAkB,CAiCpB;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,YAAY,EAAE,gBAAgB,EAC9B,OAAO,EAAE,2BAA2B,GAAG,IAAI,CAAC,WAAW,EAAE,gBAAgB,CAAC,GACzE,YAAY,CAMd"}
@@ -1,16 +1,21 @@
1
1
  import { createKavo } from "@kavo/core";
2
- import { buildEntityMetadata } from "./metadata.js";
2
+ import { buildEntityMetadata, buildRelationGraph } from "./metadata.js";
3
3
  import { PrismaRepositoryAdapter } from "./prisma-repository-adapter.js";
4
4
  /**
5
5
  * The Prisma implementation of core's infrastructure seam: metadata and
6
6
  * adapters derived from one Prisma Client, cached per entity (metadata
7
7
  * derivation and adapter construction are bootstrap work, not per-request
8
- * work) — same shape as `@kavo/typeorm`'s `createTypeOrmInfrastructure`.
8
+ * work) — same shape as `@kavo/typeorm`'s `createInfrastructure`.
9
9
  */
10
- export function createPrismaInfrastructure(prismaClient, options) {
10
+ export function createInfrastructure(prismaClient, options) {
11
11
  const byName = new Map(options.entities.map((entity) => [entity.name, entity]));
12
12
  const metadataCache = new Map();
13
13
  const adapterCache = new Map();
14
+ // Derived once for the whole datamodel, not per entity: a relation-path
15
+ // filter walks models the queried entity's own metadata cannot describe
16
+ // (`author.posts.title` needs Author's edges too). Bootstrap work, like
17
+ // metadata derivation and adapter construction.
18
+ const relations = buildRelationGraph(options.datamodel);
14
19
  function metadataFor(entity) {
15
20
  let metadata = metadataCache.get(entity);
16
21
  if (metadata === undefined) {
@@ -26,6 +31,7 @@ export function createPrismaInfrastructure(prismaClient, options) {
26
31
  if (adapter === undefined) {
27
32
  adapter = new PrismaRepositoryAdapter(prismaClient, metadataFor(entity), {
28
33
  caseInsensitiveFilters: options.caseInsensitiveFilters ?? true,
34
+ relations,
29
35
  });
30
36
  adapterCache.set(entity, adapter);
31
37
  }
@@ -42,7 +48,7 @@ export function createPrismaKavo(prismaClient, options) {
42
48
  const { datamodel, entities, caseInsensitiveFilters, ...kavoOptions } = options;
43
49
  return createKavo({
44
50
  ...kavoOptions,
45
- infrastructure: createPrismaInfrastructure(prismaClient, { datamodel, entities, caseInsensitiveFilters }),
51
+ infrastructure: createInfrastructure(prismaClient, { datamodel, entities, caseInsensitiveFilters }),
46
52
  });
47
53
  }
48
54
  //# sourceMappingURL=infrastructure.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"infrastructure.js","sourceRoot":"","sources":["../src/infrastructure.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExC,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAEpD,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AA6BzE;;;;;GAKG;AACH,MAAM,UAAU,0BAA0B,CACxC,YAA8B,EAC9B,OAAoC;IAEpC,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;IAChF,MAAM,aAAa,GAAG,IAAI,GAAG,EAA4B,CAAC;IAC1D,MAAM,YAAY,GAAG,IAAI,GAAG,EAA+B,CAAC;IAE5D,SAAS,WAAW,CAAwB,MAAwB;QAClE,IAAI,QAAQ,GAAG,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACzC,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3B,QAAQ,GAAG,mBAAmB,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;YAClE,aAAa,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QACtC,CAAC;QACD,OAAO,QAAkC,CAAC;IAC5C,CAAC;IAED,OAAO;QACL,WAAW;QACX,UAAU,CAAwB,MAAwB;YACxD,IAAI,OAAO,GAAG,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YACvC,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;gBAC1B,OAAO,GAAG,IAAI,uBAAuB,CAAC,YAAY,EAAE,WAAW,CAAC,MAAM,CAAC,EAAE;oBACvE,sBAAsB,EAAE,OAAO,CAAC,sBAAsB,IAAI,IAAI;iBAC/D,CAAsB,CAAC;gBACxB,YAAY,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YACpC,CAAC;YACD,OAAO,OAAoC,CAAC;QAC9C,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAC9B,YAA8B,EAC9B,OAA0E;IAE1E,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,sBAAsB,EAAE,GAAG,WAAW,EAAE,GAAG,OAAO,CAAC;IAChF,OAAO,UAAU,CAAC;QAChB,GAAG,WAAW;QACd,cAAc,EAAE,0BAA0B,CAAC,YAAY,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,sBAAsB,EAAE,CAAC;KAC1G,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"infrastructure.js","sourceRoot":"","sources":["../src/infrastructure.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExC,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAExE,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AA6BzE;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAClC,YAA8B,EAC9B,OAAoC;IAEpC,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;IAChF,MAAM,aAAa,GAAG,IAAI,GAAG,EAA4B,CAAC;IAC1D,MAAM,YAAY,GAAG,IAAI,GAAG,EAA+B,CAAC;IAC5D,wEAAwE;IACxE,wEAAwE;IACxE,wEAAwE;IACxE,gDAAgD;IAChD,MAAM,SAAS,GAAG,kBAAkB,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAExD,SAAS,WAAW,CAAwB,MAAwB;QAClE,IAAI,QAAQ,GAAG,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACzC,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3B,QAAQ,GAAG,mBAAmB,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;YAClE,aAAa,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QACtC,CAAC;QACD,OAAO,QAAkC,CAAC;IAC5C,CAAC;IAED,OAAO;QACL,WAAW;QACX,UAAU,CAAwB,MAAwB;YACxD,IAAI,OAAO,GAAG,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YACvC,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;gBAC1B,OAAO,GAAG,IAAI,uBAAuB,CAAC,YAAY,EAAE,WAAW,CAAC,MAAM,CAAC,EAAE;oBACvE,sBAAsB,EAAE,OAAO,CAAC,sBAAsB,IAAI,IAAI;oBAC9D,SAAS;iBACV,CAAsB,CAAC;gBACxB,YAAY,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YACpC,CAAC;YACD,OAAO,OAAoC,CAAC;QAC9C,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAC9B,YAA8B,EAC9B,OAA0E;IAE1E,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,sBAAsB,EAAE,GAAG,WAAW,EAAE,GAAG,OAAO,CAAC;IAChF,OAAO,UAAU,CAAC;QAChB,GAAG,WAAW;QACd,cAAc,EAAE,oBAAoB,CAAC,YAAY,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,sBAAsB,EAAE,CAAC;KACpG,CAAC,CAAC;AACL,CAAC"}
@@ -10,8 +10,30 @@ import type { PrismaDatamodel } from "./datamodel.js";
10
10
  * name→class registry that lets a relation's target model name resolve
11
11
  * back to *its* marker class; TypeORM gets this for free from
12
12
  * `DataSource#entities`, Prisma has no equivalent, so
13
- * `createPrismaInfrastructure` collects it explicitly (see
14
- * `docs/adr/0017-prisma-marker-classes-and-entity-registry.md`).
13
+ * `createInfrastructure` collects it explicitly (see
14
+ * `docs/internals/adr/0017-prisma-marker-classes-and-entity-registry.md`).
15
15
  */
16
16
  export declare function buildEntityMetadata<Entity extends object>(datamodel: PrismaDatamodel, entity: ClassRef<Entity>, entities: ReadonlyMap<string, ClassRef>): EntityMetadata<Entity>;
17
+ /**
18
+ * One relation edge, as the filter translator needs to see it: which
19
+ * Prisma model it lands on, and whether it is a list.
20
+ */
21
+ export interface PrismaRelationEdge {
22
+ readonly cardinality: "one" | "many";
23
+ /** Target model name — the key to look up for the next path segment. */
24
+ readonly target: string;
25
+ }
26
+ /**
27
+ * Model name → relation property name → edge, for the whole datamodel.
28
+ *
29
+ * `EntityMetadata.relations` describes one entity, which is enough for
30
+ * include resolution but not for a filter path: `author.posts.title` walks
31
+ * two models, and only the second hop knows whether `posts` is a list. The
32
+ * graph is derived once at bootstrap (`createInfrastructure`) and handed to
33
+ * the translator as plain data, which is what keeps `translateFilter` a
34
+ * pure function rather than something that reaches for a client.
35
+ */
36
+ export type PrismaRelationGraph = ReadonlyMap<string, ReadonlyMap<string, PrismaRelationEdge>>;
37
+ /** Derive {@link PrismaRelationGraph} from Prisma's DMMF. */
38
+ export declare function buildRelationGraph(datamodel: PrismaDatamodel): PrismaRelationGraph;
17
39
  //# sourceMappingURL=metadata.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"metadata.d.ts","sourceRoot":"","sources":["../src/metadata.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAgD,MAAM,YAAY,CAAC;AAEzG,OAAO,KAAK,EAAE,eAAe,EAAe,MAAM,gBAAgB,CAAC;AA4CnE;;;;;;;;;;;;GAYG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,SAAS,MAAM,EACvD,SAAS,EAAE,eAAe,EAC1B,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,EACxB,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,QAAQ,CAAC,GACtC,cAAc,CAAC,MAAM,CAAC,CAoDxB"}
1
+ {"version":3,"file":"metadata.d.ts","sourceRoot":"","sources":["../src/metadata.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAgD,MAAM,YAAY,CAAC;AAEzG,OAAO,KAAK,EAAE,eAAe,EAAe,MAAM,gBAAgB,CAAC;AA4CnE;;;;;;;;;;;;GAYG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,SAAS,MAAM,EACvD,SAAS,EAAE,eAAe,EAC1B,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,EACxB,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,QAAQ,CAAC,GACtC,cAAc,CAAC,MAAM,CAAC,CAoDxB;AAED;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,WAAW,EAAE,KAAK,GAAG,MAAM,CAAC;IACrC,wEAAwE;IACxE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED;;;;;;;;;GASG;AACH,MAAM,MAAM,mBAAmB,GAAG,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC,CAAC;AAE/F,6DAA6D;AAC7D,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,eAAe,GAAG,mBAAmB,CAclF"}
package/dist/metadata.js CHANGED
@@ -52,8 +52,8 @@ function isGeneratedField(field) {
52
52
  * name→class registry that lets a relation's target model name resolve
53
53
  * back to *its* marker class; TypeORM gets this for free from
54
54
  * `DataSource#entities`, Prisma has no equivalent, so
55
- * `createPrismaInfrastructure` collects it explicitly (see
56
- * `docs/adr/0017-prisma-marker-classes-and-entity-registry.md`).
55
+ * `createInfrastructure` collects it explicitly (see
56
+ * `docs/internals/adr/0017-prisma-marker-classes-and-entity-registry.md`).
57
57
  */
58
58
  export function buildEntityMetadata(datamodel, entity, entities) {
59
59
  const modelName = entity.name;
@@ -94,6 +94,18 @@ export function buildEntityMetadata(datamodel, entity, entities) {
94
94
  softDeleteField: null,
95
95
  };
96
96
  }
97
+ /** Derive {@link PrismaRelationGraph} from Prisma's DMMF. */
98
+ export function buildRelationGraph(datamodel) {
99
+ return new Map(datamodel.models.map((model) => [
100
+ model.name,
101
+ new Map(model.fields
102
+ .filter((field) => field.kind === "object")
103
+ .map((field) => [
104
+ field.name,
105
+ { cardinality: field.isList ? "many" : "one", target: field.type },
106
+ ])),
107
+ ]));
108
+ }
97
109
  function relationDescriptor(field, ownerModelName, entities) {
98
110
  return {
99
111
  name: field.name,
@@ -101,7 +113,7 @@ function relationDescriptor(field, ownerModelName, entities) {
101
113
  const target = entities.get(field.type);
102
114
  if (target === undefined) {
103
115
  throw new ConfigurationException(ownerModelName, field.name, `Relation '${field.name}' targets Prisma model '${field.type}', but no marker class for it was ` +
104
- `registered with createPrismaInfrastructure's 'entities' list`);
116
+ `registered with createInfrastructure's 'entities' list`);
105
117
  }
106
118
  return target;
107
119
  },
@@ -1 +1 @@
1
- {"version":3,"file":"metadata.js","sourceRoot":"","sources":["../src/metadata.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"metadata.js","sourceRoot":"","sources":["../src/metadata.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import type { CrudContext, EntityId, EntityMetadata, NormalizedQueryContext, RepositoryAdapter } from "@kavo/core";
1
+ import type { KavoContext, EntityId, EntityMetadata, NormalizedQueryContext, RepositoryAdapter } from "@kavo/core";
2
2
  import { type FilterTranslatorOptions } from "./filter-translator.js";
3
3
  import { type PrismaClientLike } from "./prisma-client-like.js";
4
4
  /**
@@ -19,14 +19,14 @@ import { type PrismaClientLike } from "./prisma-client-like.js";
19
19
  export declare class PrismaRepositoryAdapter<Entity extends object> implements RepositoryAdapter<Entity> {
20
20
  private readonly prismaClient;
21
21
  private readonly metadata;
22
- private readonly filterOptions;
23
22
  private readonly delegate;
24
23
  private readonly idField;
25
- constructor(prismaClient: PrismaClientLike, metadata: EntityMetadata<Entity>, filterOptions?: FilterTranslatorOptions);
26
- findOneById(id: EntityId, query: NormalizedQueryContext<Entity> | null, context: CrudContext<Entity>): Promise<Entity | null>;
27
- findOne(query: NormalizedQueryContext<Entity>, context: CrudContext<Entity>): Promise<Entity | null>;
28
- findMany(query: NormalizedQueryContext<Entity>, context: CrudContext<Entity>): Promise<readonly Entity[]>;
29
- count(query: NormalizedQueryContext<Entity>, context: CrudContext<Entity>): Promise<number>;
24
+ private readonly filterOptions;
25
+ constructor(prismaClient: PrismaClientLike, metadata: EntityMetadata<Entity>, filterOptions: Omit<FilterTranslatorOptions, "model">);
26
+ findOneById(id: EntityId, query: NormalizedQueryContext<Entity> | null, context: KavoContext<Entity>): Promise<Entity | null>;
27
+ findOne(query: NormalizedQueryContext<Entity>, context: KavoContext<Entity>): Promise<Entity | null>;
28
+ findMany(query: NormalizedQueryContext<Entity>, context: KavoContext<Entity>): Promise<readonly Entity[]>;
29
+ count(query: NormalizedQueryContext<Entity>, context: KavoContext<Entity>): Promise<number>;
30
30
  private buildFindArgs;
31
31
  /**
32
32
  * Translate a validated `IncludeTree` into Prisma's nested `include`
@@ -42,9 +42,9 @@ export declare class PrismaRepositoryAdapter<Entity extends object> implements R
42
42
  private requireSoftDelete;
43
43
  private isDeleted;
44
44
  private byId;
45
- create(data: Partial<Entity>, context: CrudContext<Entity>): Promise<Entity>;
46
- update(id: EntityId, data: Partial<Entity>, context: CrudContext<Entity>): Promise<Entity>;
47
- patch(id: EntityId, data: Partial<Entity>, context: CrudContext<Entity>): Promise<Entity>;
45
+ create(data: Partial<Entity>, context: KavoContext<Entity>): Promise<Entity>;
46
+ update(id: EntityId, data: Partial<Entity>, context: KavoContext<Entity>): Promise<Entity>;
47
+ patch(id: EntityId, data: Partial<Entity>, context: KavoContext<Entity>): Promise<Entity>;
48
48
  /**
49
49
  * update and patch share one primitive: the *shape* of `data` differs
50
50
  * (full body vs. sparse) because the DTO layer differs, not the
@@ -53,9 +53,9 @@ export declare class PrismaRepositoryAdapter<Entity extends object> implements R
53
53
  * existence is checked against the live scope before the write.
54
54
  */
55
55
  private writeExisting;
56
- delete(id: EntityId, context: CrudContext<Entity>): Promise<void>;
57
- restore(id: EntityId, context: CrudContext<Entity>): Promise<Entity>;
58
- purge(id: EntityId, context: CrudContext<Entity>): Promise<void>;
56
+ delete(id: EntityId, context: KavoContext<Entity>): Promise<void>;
57
+ restore(id: EntityId, context: KavoContext<Entity>): Promise<Entity>;
58
+ purge(id: EntityId, context: KavoContext<Entity>): Promise<void>;
59
59
  private notFound;
60
60
  }
61
61
  //# sourceMappingURL=prisma-repository-adapter.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"prisma-repository-adapter.d.ts","sourceRoot":"","sources":["../src/prisma-repository-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,QAAQ,EACR,cAAc,EAEd,sBAAsB,EACtB,iBAAiB,EAElB,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAmB,KAAK,uBAAuB,EAAoB,MAAM,wBAAwB,CAAC;AACzG,OAAO,EAAgB,KAAK,gBAAgB,EAA4B,MAAM,yBAAyB,CAAC;AAExG;;;;;;;;;;;;;;GAcG;AACH,qBAAa,uBAAuB,CAAC,MAAM,SAAS,MAAM,CAAE,YAAW,iBAAiB,CAAC,MAAM,CAAC;IAK5F,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,aAAa;IANhC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAsB;IAC/C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;gBAGd,YAAY,EAAE,gBAAgB,EAC9B,QAAQ,EAAE,cAAc,CAAC,MAAM,CAAC,EAChC,aAAa,GAAE,uBAA0D;IAiBtF,WAAW,CACf,EAAE,EAAE,QAAQ,EACZ,KAAK,EAAE,sBAAsB,CAAC,MAAM,CAAC,GAAG,IAAI,EAC5C,OAAO,EAAE,WAAW,CAAC,MAAM,CAAC,GAC3B,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAWnB,OAAO,CAAC,KAAK,EAAE,sBAAsB,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IASpG,QAAQ,CAAC,KAAK,EAAE,sBAAsB,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,SAAS,MAAM,EAAE,CAAC;IAazG,KAAK,CAAC,KAAK,EAAE,sBAAsB,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IAWjG,OAAO,CAAC,aAAa;IAarB;;;;;;;OAOG;IACH,OAAO,CAAC,YAAY;IAkBpB,OAAO,CAAC,WAAW;IAYnB,sEAAsE;IACtE,OAAO,CAAC,iBAAiB;IAazB,OAAO,CAAC,SAAS;YAIH,IAAI;IAWZ,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IAQ5E,MAAM,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IAI1F,KAAK,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IAI/F;;;;;;OAMG;YACW,aAAa;IAUrB,MAAM,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAwBjE,OAAO,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IAiBpE,KAAK,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAwBtE,OAAO,CAAC,QAAQ;CAMjB"}
1
+ {"version":3,"file":"prisma-repository-adapter.d.ts","sourceRoot":"","sources":["../src/prisma-repository-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,QAAQ,EACR,cAAc,EAEd,sBAAsB,EACtB,iBAAiB,EAGlB,MAAM,YAAY,CAAC;AAUpB,OAAO,EAAmB,KAAK,uBAAuB,EAAoB,MAAM,wBAAwB,CAAC;AACzG,OAAO,EAAgB,KAAK,gBAAgB,EAA4B,MAAM,yBAAyB,CAAC;AAExG;;;;;;;;;;;;;;GAcG;AACH,qBAAa,uBAAuB,CAAC,MAAM,SAAS,MAAM,CAAE,YAAW,iBAAiB,CAAC,MAAM,CAAC;IAM5F,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAN3B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAsB;IAC/C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA0B;gBAGrC,YAAY,EAAE,gBAAgB,EAC9B,QAAQ,EAAE,cAAc,CAAC,MAAM,CAAC,EAIjD,aAAa,EAAE,IAAI,CAAC,uBAAuB,EAAE,OAAO,CAAC;IAkBjD,WAAW,CACf,EAAE,EAAE,QAAQ,EACZ,KAAK,EAAE,sBAAsB,CAAC,MAAM,CAAC,GAAG,IAAI,EAC5C,OAAO,EAAE,WAAW,CAAC,MAAM,CAAC,GAC3B,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAgBnB,OAAO,CAAC,KAAK,EAAE,sBAAsB,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IASpG,QAAQ,CAAC,KAAK,EAAE,sBAAsB,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,SAAS,MAAM,EAAE,CAAC;IAmBzG,KAAK,CAAC,KAAK,EAAE,sBAAsB,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IAgBjG,OAAO,CAAC,aAAa;IAsBrB;;;;;;;OAOG;IACH,OAAO,CAAC,YAAY;IAkBpB,OAAO,CAAC,WAAW;IAkBnB,sEAAsE;IACtE,OAAO,CAAC,iBAAiB;IAazB,OAAO,CAAC,SAAS;YAIH,IAAI;IAWZ,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IAQ5E,MAAM,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IAI1F,KAAK,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IAI/F;;;;;;OAMG;YACW,aAAa;IAUrB,MAAM,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAwBjE,OAAO,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IAiBpE,KAAK,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAwBtE,OAAO,CAAC,QAAQ;CAMjB"}
@@ -1,4 +1,4 @@
1
- import { AlreadyDeletedException, ConfigurationException, NotDeletedException, NotFoundException } from "@kavo/core";
1
+ import { AlreadyDeletedException, ConfigurationException, NotDeletedException, NotFoundException, hasKeyset, readFilter, } from "@kavo/core";
2
2
  import { mapDriverError } from "./error-mapping.js";
3
3
  import { translateFilter } from "./filter-translator.js";
4
4
  import { delegateName } from "./prisma-client-like.js";
@@ -20,13 +20,17 @@ import { delegateName } from "./prisma-client-like.js";
20
20
  export class PrismaRepositoryAdapter {
21
21
  prismaClient;
22
22
  metadata;
23
- filterOptions;
24
23
  delegate;
25
24
  idField;
26
- constructor(prismaClient, metadata, filterOptions = { caseInsensitiveFilters: true }) {
25
+ filterOptions;
26
+ constructor(prismaClient, metadata,
27
+ // `model` is not the caller's to supply — it is the entity this adapter
28
+ // already describes, and a mismatched one would nest relation paths
29
+ // against the wrong model's edges.
30
+ filterOptions) {
27
31
  this.prismaClient = prismaClient;
28
32
  this.metadata = metadata;
29
- this.filterOptions = filterOptions;
33
+ this.filterOptions = { ...filterOptions, model: metadata.name };
30
34
  const name = delegateName(metadata.name);
31
35
  const delegate = prismaClient[name];
32
36
  if (delegate === undefined) {
@@ -38,7 +42,7 @@ export class PrismaRepositoryAdapter {
38
42
  // ── Reads ────────────────────────────────────────────────────────────
39
43
  async findOneById(id, query, context) {
40
44
  try {
41
- const where = this.scopeToLive({ [this.idField]: id }, context, query?.withDeleted ?? false);
45
+ const where = this.scopeToLive({ [this.idField]: id }, context, query?.withDeleted ?? false, query?.onlyDeleted ?? false);
42
46
  const include = this.buildInclude(query?.include ?? {});
43
47
  const row = await this.delegate.findFirst({ where, ...(include && { include }) });
44
48
  return row ?? null;
@@ -58,10 +62,16 @@ export class PrismaRepositoryAdapter {
58
62
  }
59
63
  async findMany(query, context) {
60
64
  try {
65
+ // `readFilter` folds in the keyset predicate under cursor pagination
66
+ // (a no-op otherwise), and a cursor page has no `offset` to skip by —
67
+ // the keyset predicate *is* the skip. Prisma's own `cursor`/`skip: 1`
68
+ // option is deliberately not used: it takes a unique *id* and cannot
69
+ // express a multi-column keyset with mixed directions.
70
+ const { pagination } = query;
61
71
  const rows = await this.delegate.findMany({
62
- ...this.buildFindArgs(query, context),
63
- skip: query.pagination.offset,
64
- take: query.pagination.limit,
72
+ ...this.buildFindArgs(query, context, readFilter(query)),
73
+ skip: hasKeyset(pagination) ? 0 : pagination.offset,
74
+ take: pagination.limit,
65
75
  });
66
76
  return rows;
67
77
  }
@@ -73,15 +83,15 @@ export class PrismaRepositoryAdapter {
73
83
  try {
74
84
  // A dedicated count — never fetch-then-length: the engine only calls
75
85
  // this when `query.count` is true, so `total: null` costs zero queries.
76
- const where = this.scopeToLive(translateFilter(query.filter, this.filterOptions), context, query.withDeleted);
86
+ const where = this.scopeToLive(translateFilter(query.filter, this.filterOptions), context, query.withDeleted, query.onlyDeleted);
77
87
  return await this.delegate.count({ ...(where && { where }) });
78
88
  }
79
89
  catch (error) {
80
90
  throw mapDriverError(error, errorContext(context));
81
91
  }
82
92
  }
83
- buildFindArgs(query, context) {
84
- const where = this.scopeToLive(translateFilter(query.filter, this.filterOptions), context, query.withDeleted);
93
+ buildFindArgs(query, context, filter = query.filter) {
94
+ const where = this.scopeToLive(translateFilter(filter, this.filterOptions), context, query.withDeleted, query.onlyDeleted);
85
95
  const orderBy = query.sort.map((sort) => nestOrderBy(sort.field, sort.direction));
86
96
  const include = this.buildInclude(query.include);
87
97
  return {
@@ -117,9 +127,15 @@ export class PrismaRepositoryAdapter {
117
127
  return include;
118
128
  }
119
129
  // ── Soft delete ──────────────────────────────────────────────────────
120
- scopeToLive(where, context, withDeleted) {
130
+ scopeToLive(where, context, withDeleted, onlyDeleted = false) {
121
131
  const softDelete = context.config.softDelete;
122
- if (softDelete.strategy !== "soft" || withDeleted)
132
+ if (softDelete.strategy !== "soft")
133
+ return where;
134
+ if (onlyDeleted) {
135
+ const deleted = { [softDelete.field]: { not: null } };
136
+ return where === undefined ? deleted : { AND: [where, deleted] };
137
+ }
138
+ if (withDeleted)
123
139
  return where;
124
140
  const live = { [softDelete.field]: null };
125
141
  if (where === undefined)
@@ -1 +1 @@
1
- {"version":3,"file":"prisma-repository-adapter.js","sourceRoot":"","sources":["../src/prisma-repository-adapter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"prisma-repository-adapter.js","sourceRoot":"","sources":["../src/prisma-repository-adapter.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "@kavo/prisma",
3
- "version": "0.5.0",
3
+ "version": "0.7.1",
4
4
  "description": "Kavo Prisma adapter — implements @kavo/core's RepositoryAdapter over Prisma Client.",
5
- "license": "MIT",
5
+ "license": "Apache-2.0",
6
6
  "repository": {
7
7
  "type": "git",
8
8
  "url": "git+https://github.com/kavo-labs/kavo.git",
@@ -23,12 +23,8 @@
23
23
  "files": [
24
24
  "dist"
25
25
  ],
26
- "scripts": {
27
- "build": "tsc -b",
28
- "generate": "prisma generate --schema prisma/schema.prisma && prisma db push --schema prisma/schema.prisma --skip-generate --accept-data-loss"
29
- },
30
26
  "dependencies": {
31
- "@kavo/core": "workspace:^"
27
+ "@kavo/core": "^0.7.1"
32
28
  },
33
29
  "peerDependencies": {
34
30
  "@prisma/client": "^5.0.0 || ^6.0.0"
@@ -36,5 +32,9 @@
36
32
  "devDependencies": {
37
33
  "@prisma/client": "^6.19.3",
38
34
  "prisma": "^6.19.3"
35
+ },
36
+ "scripts": {
37
+ "build": "tsc -b",
38
+ "generate": "prisma generate --schema prisma/schema.prisma && prisma db push --schema prisma/schema.prisma --skip-generate --accept-data-loss"
39
39
  }
40
- }
40
+ }