@generazioneai/genquery 0.12.1 → 0.13.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.
Files changed (83) hide show
  1. package/README.md +41 -48
  2. package/dist/adapters/base.d.ts +9 -10
  3. package/dist/adapters/base.d.ts.map +1 -1
  4. package/dist/adapters/prisma/create.d.ts +2 -2
  5. package/dist/adapters/prisma/create.js +2 -2
  6. package/dist/engine.d.ts +9 -11
  7. package/dist/engine.d.ts.map +1 -1
  8. package/dist/engine.js +1 -1
  9. package/dist/engine.js.map +1 -1
  10. package/dist/parsed.d.ts +1 -1
  11. package/dist/schema.d.ts +2 -3
  12. package/dist/schema.d.ts.map +1 -1
  13. package/dist/schema.js.map +1 -1
  14. package/package.json +5 -25
  15. package/spec.md +2 -2
  16. package/dist/adapters/typeorm/adapter.d.ts +0 -42
  17. package/dist/adapters/typeorm/adapter.d.ts.map +0 -1
  18. package/dist/adapters/typeorm/adapter.js +0 -135
  19. package/dist/adapters/typeorm/adapter.js.map +0 -1
  20. package/dist/adapters/typeorm/aliases.d.ts +0 -25
  21. package/dist/adapters/typeorm/aliases.d.ts.map +0 -1
  22. package/dist/adapters/typeorm/aliases.js +0 -47
  23. package/dist/adapters/typeorm/aliases.js.map +0 -1
  24. package/dist/adapters/typeorm/create.d.ts +0 -29
  25. package/dist/adapters/typeorm/create.d.ts.map +0 -1
  26. package/dist/adapters/typeorm/create.js +0 -29
  27. package/dist/adapters/typeorm/create.js.map +0 -1
  28. package/dist/adapters/typeorm/escape.d.ts +0 -5
  29. package/dist/adapters/typeorm/escape.d.ts.map +0 -1
  30. package/dist/adapters/typeorm/escape.js +0 -13
  31. package/dist/adapters/typeorm/escape.js.map +0 -1
  32. package/dist/adapters/typeorm/index.d.ts +0 -4
  33. package/dist/adapters/typeorm/index.d.ts.map +0 -1
  34. package/dist/adapters/typeorm/index.js +0 -10
  35. package/dist/adapters/typeorm/index.js.map +0 -1
  36. package/dist/adapters/typeorm/joins.d.ts +0 -29
  37. package/dist/adapters/typeorm/joins.d.ts.map +0 -1
  38. package/dist/adapters/typeorm/joins.js +0 -91
  39. package/dist/adapters/typeorm/joins.js.map +0 -1
  40. package/dist/adapters/typeorm/params.d.ts +0 -8
  41. package/dist/adapters/typeorm/params.d.ts.map +0 -1
  42. package/dist/adapters/typeorm/params.js +0 -15
  43. package/dist/adapters/typeorm/params.js.map +0 -1
  44. package/dist/adapters/typeorm/schema-from-typeorm.d.ts +0 -50
  45. package/dist/adapters/typeorm/schema-from-typeorm.d.ts.map +0 -1
  46. package/dist/adapters/typeorm/schema-from-typeorm.js +0 -197
  47. package/dist/adapters/typeorm/schema-from-typeorm.js.map +0 -1
  48. package/dist/adapters/typeorm/where.d.ts +0 -26
  49. package/dist/adapters/typeorm/where.d.ts.map +0 -1
  50. package/dist/adapters/typeorm/where.js +0 -315
  51. package/dist/adapters/typeorm/where.js.map +0 -1
  52. package/dist/paginate/cursor.d.ts +0 -18
  53. package/dist/paginate/cursor.d.ts.map +0 -1
  54. package/dist/paginate/cursor.js +0 -53
  55. package/dist/paginate/cursor.js.map +0 -1
  56. package/dist/paginate/in-memory.d.ts +0 -13
  57. package/dist/paginate/in-memory.d.ts.map +0 -1
  58. package/dist/paginate/in-memory.js +0 -21
  59. package/dist/paginate/in-memory.js.map +0 -1
  60. package/dist/paginate/index.d.ts +0 -27
  61. package/dist/paginate/index.d.ts.map +0 -1
  62. package/dist/paginate/index.js +0 -33
  63. package/dist/paginate/index.js.map +0 -1
  64. package/dist/paginate/model.d.ts +0 -16
  65. package/dist/paginate/model.d.ts.map +0 -1
  66. package/dist/paginate/model.js +0 -3
  67. package/dist/paginate/model.js.map +0 -1
  68. package/dist/paginate/offset.d.ts +0 -25
  69. package/dist/paginate/offset.d.ts.map +0 -1
  70. package/dist/paginate/offset.js +0 -74
  71. package/dist/paginate/offset.js.map +0 -1
  72. package/dist/paginate/pagination.d.ts +0 -18
  73. package/dist/paginate/pagination.d.ts.map +0 -1
  74. package/dist/paginate/pagination.js +0 -47
  75. package/dist/paginate/pagination.js.map +0 -1
  76. package/dist/paginate/transform.d.ts +0 -15
  77. package/dist/paginate/transform.d.ts.map +0 -1
  78. package/dist/paginate/transform.js +0 -43
  79. package/dist/paginate/transform.js.map +0 -1
  80. package/dist/paginate/types.d.ts +0 -93
  81. package/dist/paginate/types.d.ts.map +0 -1
  82. package/dist/paginate/types.js +0 -10
  83. package/dist/paginate/types.js.map +0 -1
package/README.md CHANGED
@@ -1,73 +1,69 @@
1
1
  # genquery
2
2
 
3
- ORM-agnostic JSON query language with pluggable adapters.
3
+ ORM-agnostic JSON query language with a pluggable Prisma adapter.
4
4
 
5
- Frontends send a `GenQueryInput` object. The backend validates it against a `Schema` and an adapter translates the result into ORM operations. The first adapter targets TypeORM (PostgreSQL-flavored SQL).
5
+ Frontends send a `GenQueryInput` object. The backend validates it against a `Schema` and an adapter translates the result into ORM operations. The shipped adapter targets Prisma.
6
6
 
7
7
  ## Install
8
8
 
9
9
  ```bash
10
10
  npm install @generazioneai/genquery
11
- # TypeORM adapter (optional)
12
- npm install typeorm
11
+ # Prisma client (peer; you almost certainly already have it)
12
+ npm install @prisma/client
13
13
  ```
14
14
 
15
- ## Quick start (TypeORM)
15
+ ## Quick start (Prisma)
16
16
 
17
17
  ```typescript
18
- import "reflect-metadata";
19
- import { DataSource } from "typeorm";
20
- import { createTypeORMEngine } from "@generazioneai/genquery/typeorm";
18
+ import { Prisma, PrismaClient } from "@prisma/client";
19
+ import { createPrismaEngine } from "@generazioneai/genquery/prisma";
21
20
 
22
- // 1. Initialize TypeORM with your entity classes
23
- const dataSource = new DataSource({ /* ... */ entities: [User, Post] });
24
- await dataSource.initialize();
21
+ const prisma = new PrismaClient();
25
22
 
26
- // 2. One line to set up the schema, adapter, and engine
27
- const engine = createTypeORMEngine(dataSource);
28
-
29
- // 3. Run a query from a request body
30
- const qb = dataSource.getRepository(User).createQueryBuilder("User");
23
+ // 1. One line to set up the schema (from the DMMF), adapter, and engine
24
+ const engine = createPrismaEngine(Prisma.dmmf.datamodel);
31
25
 
26
+ // 2. Run a query from a request body against a model delegate
32
27
  const { data, current, total } = await engine.run(
33
28
  {
34
29
  searchBy: { firstName: "mario" },
35
30
  orderBy: "createdAt",
36
31
  pagination: { page: 0, perPage: 20 },
37
32
  },
38
- qb, // target QueryBuilder — entity name + entity type both read from this
33
+ "User", // root entity name Prisma delegates don't expose it
34
+ prisma.user, // target model delegate; entity type flows from this
39
35
  );
40
36
  // data: User[]
41
37
  // current: data.length (omitted if pagination.showNumber === false)
42
- // total: match count (via getManyAndCount; omitted if pagination.showTotal === false)
38
+ // total: match count (via a parallel count; omitted if pagination.showTotal === false)
43
39
  ```
44
40
 
45
- `engine.run` is async and returns `{ data, current?, total? }`. `current` and `total` are populated according to `pagination.showNumber` / `pagination.showTotal` (both default to `true`); setting `showTotal: false` skips the extra `SELECT COUNT(*)`.
41
+ `engine.run` is async and returns `{ data, current?, total? }`. `current` and `total` are populated according to `pagination.showNumber` / `pagination.showTotal` (both default to `true`); setting `showTotal: false` skips the extra `count`.
46
42
 
47
- `createTypeORMEngine` is a thin wrapper around `schemaFromTypeORM` → `new TypeORMAdapter` → `new GenQueryEngine`. The root entity (`"User"` in this case) is derived from `qb.expressionMap.mainAlias.metadata.name` at runtime, and the TS entity type is read from `SelectQueryBuilder<User>`. If you need to override or your adapter can't introspect, the 3-arg form still works: `await engine.run(input, "User", qb)`.
43
+ `createPrismaEngine` is a thin wrapper around `schemaFromPrisma` → `new PrismaAdapter` → `new GenQueryEngine`. The root entity (`"User"`) must be passed explicitly Prisma delegates don't expose their model name on a stable public API. The TS entity type is read from the delegate's `findMany` return.
48
44
 
49
- If you need raw `SelectQueryBuilder` access (custom chaining, `.getRawMany()`, transactions), parse separately and call `runParsed`, which returns the mutated builder without executing:
45
+ If you only want the Prisma args object (custom chaining, transactions, your own `findMany` call), parse separately and call `runParsed`, which returns the args without executing:
50
46
 
51
47
  ```typescript
52
48
  const parsed = engine.parse(input, "User");
53
- const built = engine.runParsed(parsed, qb);
54
- const rows = await built.getRawMany();
49
+ const args = engine.runParsed(parsed, prisma.user); // { where, orderBy, skip, take, include, ... }
50
+ const rows = await prisma.user.findMany(args);
55
51
  ```
56
52
 
57
53
  Need fine-grained control? You can still build it manually:
58
54
 
59
55
  ```typescript
60
- const schema = schemaFromTypeORM(dataSource, { overrides: { User: { meta: "string" } } });
61
- const adapter = new TypeORMAdapter(schema, { paramPrefix: "q" });
56
+ const schema = schemaFromPrisma(Prisma.dmmf.datamodel, { overrides: { User: { meta: "string" } } });
57
+ const adapter = new PrismaAdapter(schema, { parallelCount: false });
62
58
  const engine = new GenQueryEngine({ adapter }); // schema is read from the adapter
63
59
  ```
64
60
 
65
- Or pass the same options to `createTypeORMEngine`:
61
+ Or pass the same options to `createPrismaEngine`:
66
62
 
67
63
  ```typescript
68
- const engine = createTypeORMEngine(dataSource, {
64
+ const engine = createPrismaEngine(Prisma.dmmf.datamodel, {
69
65
  schema: { overrides: { User: { meta: "string" } } },
70
- adapter: { paramPrefix: "q" },
66
+ adapter: { parallelCount: false },
71
67
  });
72
68
  ```
73
69
 
@@ -77,16 +73,16 @@ const engine = createTypeORMEngine(dataSource, {
77
73
 
78
74
  The `Schema` describes your data model independently of any ORM. The parser uses it to reject unknown fields; the adapter uses it to know which fields are dates vs strings vs relations.
79
75
 
80
- With TypeORM, derive it from the DataSource — no duplication:
76
+ With Prisma, derive it from the generated DMMF — no duplication:
81
77
 
82
78
  ```typescript
83
- import { schemaFromTypeORM } from "@generazioneai/genquery/typeorm";
79
+ import { schemaFromPrisma } from "@generazioneai/genquery/prisma";
84
80
 
85
- const schema = schemaFromTypeORM(dataSource);
86
- // optional: restrict to specific entities
87
- const schema = schemaFromTypeORM(dataSource, { entities: [User, Post] });
81
+ const schema = schemaFromPrisma(Prisma.dmmf.datamodel);
82
+ // optional: restrict to specific models
83
+ const schema = schemaFromPrisma(Prisma.dmmf.datamodel, { models: ["User", "Post"] });
88
84
  // optional: override fields with non-standard column types
89
- const schema = schemaFromTypeORM(dataSource, {
85
+ const schema = schemaFromPrisma(Prisma.dmmf.datamodel, {
90
86
  overrides: { User: { preferences: "string" } },
91
87
  });
92
88
  ```
@@ -114,12 +110,10 @@ const schema: Schema = {
114
110
 
115
111
  A `GenQueryInput` is a plain JSON object with five optional top-level keys.
116
112
 
117
- The entity type is inferred automatically from the `target` argument when it has a recognizable shape (e.g. a TypeORM `SelectQueryBuilder<User>`). No explicit generic is required — autocomplete and value-shape checking flow from the QueryBuilder's entity type:
113
+ The entity type is inferred automatically from the `target` argument when it has a recognizable shape (a Prisma model delegate exposes `findMany(args?): Promise<T[]>`). No explicit generic is required — autocomplete and value-shape checking flow from the delegate's entity type:
118
114
 
119
115
  ```typescript
120
- const qb = dataSource.getRepository(User).createQueryBuilder("User");
121
- // qb is SelectQueryBuilder<User> — entity type flows into the call below
122
-
116
+ // prisma.user is Prisma.UserDelegate — entity type flows into the call below
123
117
  await engine.run(
124
118
  {
125
119
  searchBy: {
@@ -134,13 +128,14 @@ await engine.run(
134
128
  select: { firstName: true }, // ✓ only primitive fields
135
129
  include: { posts: "all" }, // ✓ only relations
136
130
  },
137
- qb,
131
+ "User",
132
+ prisma.user,
138
133
  );
139
134
  ```
140
135
 
141
136
  The inference distinguishes fields (primitives → searchable / selectable) from relations (objects/arrays → includable / recursive search), and picks the right value shape per field type (string/number/boolean/Date/enum).
142
137
 
143
- If your target type doesn't expose the entity (e.g. an adapter whose target is `undefined`), the input falls back to a loose form where any key/value is accepted — the runtime parser still validates everything against the schema.
138
+ If your target type doesn't expose the entity, the input falls back to a loose form where any key/value is accepted — the runtime parser still validates everything against the schema.
144
139
 
145
140
  Top-level keys:
146
141
 
@@ -156,20 +151,18 @@ Full query language reference: [docs/query-reference.md](docs/query-reference.md
156
151
 
157
152
  ### Engine
158
153
 
159
- `GenQueryEngine` is the public entry point. It asserts that the schema passed to it and the schema held by the adapter are the same instance.
154
+ `GenQueryEngine` is the public entry point. It reads the schema from the adapter there is one source of truth.
160
155
 
161
156
  ```typescript
162
157
  const engine = new GenQueryEngine({ adapter }); // schema comes from the adapter
163
158
 
164
159
  // parse + apply + execute → Promise<{ data, current?, total? }>
165
- await engine.run(input, target);
166
- // or explicit rootEntity:
167
160
  await engine.run(input, rootEntity, target);
168
161
 
169
- // parse only (requires explicit rootEntity — no target to infer from)
162
+ // parse only (requires explicit rootEntity)
170
163
  const parsed = engine.parse(input, rootEntity);
171
164
 
172
- // apply a previously parsed query without executing (returns the raw target)
165
+ // apply a previously parsed query without executing (returns the raw args object)
173
166
  engine.runParsed(parsed, target);
174
167
  ```
175
168
 
@@ -215,7 +208,7 @@ Parse failures throw `QueryValidationError` with a `path` field pointing to the
215
208
  import { QueryValidationError } from "@generazioneai/genquery";
216
209
 
217
210
  try {
218
- await engine.run(input, "User", qb);
211
+ await engine.run(input, "User", prisma.user);
219
212
  } catch (e) {
220
213
  if (e instanceof QueryValidationError) {
221
214
  console.error(e.path, e.message);
@@ -226,7 +219,7 @@ try {
226
219
  ## Examples
227
220
 
228
221
  See [docs/examples.md](docs/examples.md) for full worked examples covering:
229
- - String search modes (splitword, exact, nativeregex)
222
+ - String search modes (splitword, exact — `nativeregex` is rejected by the Prisma adapter)
230
223
  - Date ranges
231
224
  - Numeric comparisons
232
225
  - OR conditions
@@ -253,7 +246,7 @@ See [docs/custom-adapter.md](docs/custom-adapter.md) for instructions.
253
246
  |------|----------|
254
247
  | [docs/getting-started.md](docs/getting-started.md) | Installation, setup, first query |
255
248
  | [docs/query-reference.md](docs/query-reference.md) | Full query language reference |
256
- | [docs/typeorm-adapter.md](docs/typeorm-adapter.md) | TypeORM adapter options and internals |
249
+ | [docs/prisma-adapter.md](docs/prisma-adapter.md) | Prisma adapter options and internals |
257
250
  | [docs/custom-adapter.md](docs/custom-adapter.md) | Building a custom adapter |
258
251
  | [docs/examples.md](docs/examples.md) | End-to-end examples |
259
252
  | [spec.md](spec.md) | Source-of-truth wire format spec |
@@ -4,13 +4,12 @@ import type { Schema } from "../schema";
4
4
  * Adapters translate a `ParsedQuery` into ORM-specific operations.
5
5
  *
6
6
  * The interface is intentionally generic in both the host-provided target
7
- * (e.g. a TypeORM `SelectQueryBuilder`, a Prisma client, ...) and the produced
8
- * result (e.g. the same query builder mutated in place, a Prisma `findMany`
9
- * argument object, ...). Each adapter declares the concrete shapes through
10
- * its own module.
7
+ * (e.g. a Prisma model delegate) and the produced result (e.g. a Prisma
8
+ * `findMany` argument object). Each adapter declares the concrete shapes
9
+ * through its own module.
11
10
  */
12
11
  export interface Adapter<TTarget, TResult> {
13
- /** Stable adapter identifier (e.g. "typeorm", "prisma"). Useful for logging. */
12
+ /** Stable adapter identifier (e.g. "prisma"). Useful for logging. */
14
13
  readonly name: string;
15
14
  /** Returns the schema the adapter was built against. */
16
15
  readonly schema: Schema;
@@ -23,7 +22,7 @@ export interface Adapter<TTarget, TResult> {
23
22
  * Optionally derive the root entity name from a target. When implemented,
24
23
  * `engine.run(input, target)` can be called without an explicit
25
24
  * `rootEntity` string — the engine asks the adapter to extract it from the
26
- * target (e.g. TypeORM exposes it via `qb.expressionMap.mainAlias.metadata`).
25
+ * target, when the target carries that metadata.
27
26
  * Return `undefined` if the target lacks the metadata; the engine will
28
27
  * throw a helpful error.
29
28
  */
@@ -31,10 +30,10 @@ export interface Adapter<TTarget, TResult> {
31
30
  /**
32
31
  * Run the query end-to-end and return `{ data, current?, total? }` shaped
33
32
  * by `pagination.showNumber` / `pagination.showTotal`. Implemented by
34
- * adapters whose target can be executed directly (e.g. a TypeORM query
35
- * builder). `engine.run` delegates to this when present; pure args-builder
36
- * adapters (Prisma, args-only Mongo) leave it unset and callers consume
37
- * the apply result themselves.
33
+ * adapters whose target can be executed directly (e.g. the Prisma adapter,
34
+ * which issues `findMany` plus an optional `count`). `engine.run` delegates
35
+ * to this when present; args-only adapters leave it unset and callers
36
+ * consume the `apply` result themselves.
38
37
  */
39
38
  execute?(target: TTarget, query: ParsedQuery): Promise<PaginatedResult<unknown>>;
40
39
  }
@@ -1 +1 @@
1
- {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/adapters/base.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAC9D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAExC;;;;;;;;GAQG;AACH,MAAM,WAAW,OAAO,CAAC,OAAO,EAAE,OAAO;IACvC,gFAAgF;IAChF,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,wDAAwD;IACxD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAExB;;;OAGG;IACH,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC;IAEpD;;;;;;;OAOG;IACH,aAAa,CAAC,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAAC;IAEpD;;;;;;;OAOG;IACH,OAAO,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC;CAClF"}
1
+ {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/adapters/base.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAC9D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAExC;;;;;;;GAOG;AACH,MAAM,WAAW,OAAO,CAAC,OAAO,EAAE,OAAO;IACvC,qEAAqE;IACrE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,wDAAwD;IACxD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAExB;;;OAGG;IACH,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC;IAEpD;;;;;;;OAOG;IACH,aAAa,CAAC,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAAC;IAEpD;;;;;;;OAOG;IACH,OAAO,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC;CAClF"}
@@ -9,8 +9,8 @@ export interface CreatePrismaEngineOptions {
9
9
  adapter?: PrismaAdapterOptions;
10
10
  }
11
11
  /**
12
- * One-line setup mirroring `createTypeORMEngine`: read the schema from a
13
- * Prisma DMMF datamodel, build the adapter and the engine.
12
+ * One-line setup: read the schema from a Prisma DMMF datamodel, build the
13
+ * adapter and the engine.
14
14
  *
15
15
  * import { Prisma, PrismaClient } from "@prisma/client";
16
16
  * const prisma = new PrismaClient();
@@ -5,8 +5,8 @@ const engine_1 = require("../../engine");
5
5
  const adapter_1 = require("./adapter");
6
6
  const schema_from_prisma_1 = require("./schema-from-prisma");
7
7
  /**
8
- * One-line setup mirroring `createTypeORMEngine`: read the schema from a
9
- * Prisma DMMF datamodel, build the adapter and the engine.
8
+ * One-line setup: read the schema from a Prisma DMMF datamodel, build the
9
+ * adapter and the engine.
10
10
  *
11
11
  * import { Prisma, PrismaClient } from "@prisma/client";
12
12
  * const prisma = new PrismaClient();
package/dist/engine.d.ts CHANGED
@@ -6,23 +6,20 @@ export interface GenQueryEngineOptions<TTarget, TResult> {
6
6
  adapter: Adapter<TTarget, TResult>;
7
7
  }
8
8
  type IsAny<T> = 0 extends 1 & T ? true : false;
9
- /** True for TypeORM's wide ObjectLiteral default — treat as "unspecified". */
9
+ /** True for a wide `Record<string, any>` default — treat as "unspecified". */
10
10
  type IsLooseRecord<T> = IsAny<T> extends true ? true : [T] extends [Record<string, any>] ? [Record<string, any>] extends [T] ? true : false : false;
11
11
  /**
12
12
  * Inspect the target's structural shape and pull out the entity type:
13
- * - TypeORM `SelectQueryBuilder<T>` exposes `getMany(): Promise<T[]>`.
14
- * - Prisma model delegate exposes `findMany(args?): Promise<T[]>`.
13
+ * - A Prisma model delegate exposes `findMany(args?): Promise<T[]>`.
15
14
  * Falls back to `unknown` (loose mode) for any other adapter target.
16
15
  */
17
16
  type InferEntityFromTarget<X> = X extends {
18
- getMany(): Promise<infer A>;
19
- } ? A extends (infer T)[] ? IsLooseRecord<T> extends true ? unknown : T : unknown : X extends {
20
17
  findMany(args?: any): Promise<infer A>;
21
18
  } ? A extends (infer T)[] ? IsLooseRecord<T> extends true ? unknown : T : unknown : unknown;
22
19
  /**
23
20
  * Combines parsing + an adapter into a single entry point. The engine is
24
21
  * generic over the adapter so the signature of `run` matches the chosen
25
- * backend (e.g. `SelectQueryBuilder<T>` in/out for TypeORM).
22
+ * backend (e.g. a Prisma model delegate in, `PaginatedResult<T>` out).
26
23
  *
27
24
  * The schema is read from the adapter — there is one source of truth.
28
25
  */
@@ -42,13 +39,14 @@ export declare class GenQueryEngine<TTarget, TResult> {
42
39
  * `{ data, current?, total? }` shaped by `pagination.showNumber` /
43
40
  * `pagination.showTotal` (both default to `true`).
44
41
  *
45
- * Requires the adapter to implement `execute` (the TypeORM adapter does).
46
- * Pure args-builder adapters (Prisma, etc.) should use `parse` +
47
- * `runParsed` instead `runParsed` is sync and returns the adapter's raw
48
- * `TResult` (the args object or query builder) without executing.
42
+ * Requires the adapter to implement `execute` (the Prisma adapter does
43
+ * it issues `findMany` plus an optional parallel `count`). Args-only
44
+ * adapters that leave `execute` unset should use `parse` + `runParsed`
45
+ * instead — `runParsed` is sync and returns the adapter's raw `TResult`
46
+ * (the args object) without executing.
49
47
  *
50
48
  * The entity type is inferred from the `target` argument when it has a
51
- * recognizable shape (e.g. a TypeORM `SelectQueryBuilder<User>`). When the
49
+ * recognizable shape (e.g. a Prisma `User` model delegate). When the
52
50
  * adapter implements `getRootEntity`, the `rootEntity` string is optional —
53
51
  * the engine asks the adapter to derive it from the target. Pass an explicit
54
52
  * `rootEntity` to override (or when the adapter can't introspect).
@@ -1 +1 @@
1
- {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAE/C,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC7D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAE7C,MAAM,WAAW,qBAAqB,CAAC,OAAO,EAAE,OAAO;IACrD,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;CACpC;AAID,KAAK,KAAK,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,KAAK,CAAC;AAE/C,8EAA8E;AAC9E,KAAK,aAAa,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,SAAS,IAAI,GACzC,IAAI,GACJ,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,GAC/B,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAC/B,IAAI,GACJ,KAAK,GACP,KAAK,CAAC;AAEZ;;;;GAIG;AACH,KAAK,qBAAqB,CAAC,CAAC,IAAI,CAAC,SAAS;IACxC,QAAQ,CAAC,IAAI,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;CACxC,GACG,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,GACnB,aAAa,CAAC,CAAC,CAAC,SAAS,IAAI,GAC3B,OAAO,GACP,CAAC,GACH,OAAO,GACT,OAAO,CAAC;AAEZ;;;;;;GAMG;AACH,qBAAa,cAAc,CAAC,OAAO,EAAE,OAAO;IAC1C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;gBAEhC,OAAO,EAAE,qBAAqB,CAAC,OAAO,EAAE,OAAO,CAAC;IAK5D;;;;;OAKG;IACH,KAAK,CAAC,CAAC,GAAG,OAAO,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,GAAG,WAAW;IAI5E;;;;;;;;;;;;;;;;OAgBG;IACH,GAAG,CAAC,CAAC,SAAS,OAAO,EACnB,KAAK,EAAE,aAAa,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,EAC9C,MAAM,EAAE,CAAC,GACR,OAAO,CAAC,eAAe,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC;IACrD,GAAG,CAAC,CAAC,SAAS,OAAO,EACnB,KAAK,EAAE,aAAa,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,EAC9C,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,CAAC,GACR,OAAO,CAAC,eAAe,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC;IACrD,GAAG,CAAC,CAAC,SAAS,OAAO,EACnB,KAAK,EAAE,aAAa,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,EAC9C,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,CAAC,EACT,IAAI,EAAE,WAAW,CAAC,UAAU,CAAC,GAC5B,OAAO,CAAC,eAAe,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC;IAmCrD;;;;OAIG;IACH,SAAS,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,GAAG,OAAO;CAGzD"}
package/dist/engine.js CHANGED
@@ -5,7 +5,7 @@ const parser_1 = require("./parser");
5
5
  /**
6
6
  * Combines parsing + an adapter into a single entry point. The engine is
7
7
  * generic over the adapter so the signature of `run` matches the chosen
8
- * backend (e.g. `SelectQueryBuilder<T>` in/out for TypeORM).
8
+ * backend (e.g. a Prisma model delegate in, `PaginatedResult<T>` out).
9
9
  *
10
10
  * The schema is read from the adapter — there is one source of truth.
11
11
  */
@@ -1 +1 @@
1
- {"version":3,"file":"engine.js","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":";;;AACA,qCAAsC;AA8CtC;;;;;;GAMG;AACH,MAAa,cAAc;IAIzB,YAAY,OAAgD;QAC1D,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;QAC/B,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC;IACvC,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAc,KAAuB,EAAE,UAAkB;QAC5D,OAAO,IAAA,mBAAU,EAAC,KAAsB,EAAE,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACrE,CAAC;IAiCD,KAAK,CAAC,GAAG,CACP,KAAoB,EACpB,IAAsB,EACtB,IAAc,EACd,IAA8B;QAE9B,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CACb,gCAAgC,IAAI,CAAC,OAAO,CAAC,IAAI,kCAAkC;gBACjF,8CAA8C,CACjD,CAAC;QACJ,CAAC;QACD,IAAI,UAAkB,CAAC;QACvB,IAAI,MAAe,CAAC;QACpB,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC7B,UAAU,GAAG,IAAI,CAAC;YAClB,MAAM,GAAG,IAAe,CAAC;QAC3B,CAAC;aAAM,CAAC;YACN,MAAM,GAAG,IAAI,CAAC;YACd,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC,MAAM,CAAC,CAAC;YACrD,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,MAAM,IAAI,KAAK,CACb,8DAA8D;oBAC5D,KAAK,IAAI,CAAC,OAAO,CAAC,IAAI,0CAA0C;oBAChE,oEAAoE,CACvE,CAAC;YACJ,CAAC;YACD,UAAU,GAAG,OAAO,CAAC;QACvB,CAAC;QACD,MAAM,MAAM,GAAG,IAAA,mBAAU,EAAC,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QAC1D,IAAI,IAAI;YAAE,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC;QACjC,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9C,CAAC;IAED;;;;OAIG;IACH,SAAS,CAAC,MAAmB,EAAE,MAAe;QAC5C,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5C,CAAC;CACF;AA5FD,wCA4FC"}
1
+ {"version":3,"file":"engine.js","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":";;;AACA,qCAAsC;AAqCtC;;;;;;GAMG;AACH,MAAa,cAAc;IAIzB,YAAY,OAAgD;QAC1D,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;QAC/B,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC;IACvC,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAc,KAAuB,EAAE,UAAkB;QAC5D,OAAO,IAAA,mBAAU,EAAC,KAAsB,EAAE,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACrE,CAAC;IAkCD,KAAK,CAAC,GAAG,CACP,KAAoB,EACpB,IAAsB,EACtB,IAAc,EACd,IAA8B;QAE9B,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CACb,gCAAgC,IAAI,CAAC,OAAO,CAAC,IAAI,kCAAkC;gBACjF,8CAA8C,CACjD,CAAC;QACJ,CAAC;QACD,IAAI,UAAkB,CAAC;QACvB,IAAI,MAAe,CAAC;QACpB,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC7B,UAAU,GAAG,IAAI,CAAC;YAClB,MAAM,GAAG,IAAe,CAAC;QAC3B,CAAC;aAAM,CAAC;YACN,MAAM,GAAG,IAAI,CAAC;YACd,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC,MAAM,CAAC,CAAC;YACrD,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,MAAM,IAAI,KAAK,CACb,8DAA8D;oBAC5D,KAAK,IAAI,CAAC,OAAO,CAAC,IAAI,0CAA0C;oBAChE,oEAAoE,CACvE,CAAC;YACJ,CAAC;YACD,UAAU,GAAG,OAAO,CAAC;QACvB,CAAC;QACD,MAAM,MAAM,GAAG,IAAA,mBAAU,EAAC,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QAC1D,IAAI,IAAI;YAAE,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC;QACjC,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9C,CAAC;IAED;;;;OAIG;IACH,SAAS,CAAC,MAAmB,EAAE,MAAe;QAC5C,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5C,CAAC;CACF;AA7FD,wCA6FC"}
package/dist/parsed.d.ts CHANGED
@@ -138,7 +138,7 @@ export type ParsedPagination = {
138
138
  showTotal: boolean;
139
139
  };
140
140
  /**
141
- * Shape returned by `engine.run` on executable adapters (e.g. TypeORM).
141
+ * Shape returned by `engine.run` on executable adapters (e.g. the Prisma adapter).
142
142
  * `current` / `total` are populated according to `pagination.showNumber` /
143
143
  * `pagination.showTotal` on the parsed query (both default to `true`).
144
144
  */
package/dist/schema.d.ts CHANGED
@@ -7,14 +7,13 @@ export type FieldType = "string" | "number" | "boolean" | "date" | "enum" | "id"
7
7
  interface BaseFieldDefinition {
8
8
  /**
9
9
  * Override the database column name. Defaults to the field key.
10
- * Adapters may ignore this if they rely on ORM metadata (TypeORM uses the
11
- * entity's own column mapping).
10
+ * Adapters may ignore this if they derive column names from ORM metadata.
12
11
  */
13
12
  column?: string;
14
13
  /**
15
14
  * Whether the column accepts NULL. Defaults to `false`. The parser uses this
16
15
  * to reject `{ isNull }` presence checks on non-nullable fields. With
17
- * `schemaFromTypeORM`, this is auto-populated from `ColumnMetadata.isNullable`.
16
+ * `schemaFromPrisma`, this is auto-populated from the DMMF field metadata.
18
17
  */
19
18
  nullable?: boolean;
20
19
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -3,8 +3,8 @@
3
3
  "publishConfig": {
4
4
  "access": "public"
5
5
  },
6
- "version": "0.12.1",
7
- "description": "ORM-agnostic JSON query language with pluggable adapters (TypeORM, Prisma)",
6
+ "version": "0.13.1",
7
+ "description": "ORM-agnostic JSON query language with a pluggable Prisma adapter",
8
8
  "license": "BSD-3-Clause",
9
9
  "repository": {
10
10
  "type": "git",
@@ -18,7 +18,7 @@
18
18
  "query",
19
19
  "query-builder",
20
20
  "orm",
21
- "typeorm",
21
+ "prisma",
22
22
  "json-query",
23
23
  "dsl",
24
24
  "search",
@@ -33,11 +33,6 @@
33
33
  "import": "./dist/index.js",
34
34
  "require": "./dist/index.js"
35
35
  },
36
- "./typeorm": {
37
- "types": "./dist/adapters/typeorm/index.d.ts",
38
- "import": "./dist/adapters/typeorm/index.js",
39
- "require": "./dist/adapters/typeorm/index.js"
40
- },
41
36
  "./prisma": {
42
37
  "types": "./dist/adapters/prisma/index.d.ts",
43
38
  "import": "./dist/adapters/prisma/index.js",
@@ -51,42 +46,27 @@
51
46
  "spec.md"
52
47
  ],
53
48
  "scripts": {
54
- "build": "tsc",
55
- "build:dev": "tsc && rm -rf node_modules/typeorm",
49
+ "build": "rm -rf dist && tsc",
56
50
  "typecheck": "tsc --noEmit",
57
51
  "test": "npm run build && node --test 'dist/tests/*.test.js'",
58
52
  "prepublishOnly": "npm run build"
59
53
  },
60
54
  "peerDependencies": {
61
- "typeorm": ">=0.3.0",
62
- "@prisma/client": ">=5.0.0",
63
- "class-transformer": ">=0.5.0"
55
+ "@prisma/client": ">=5.0.0"
64
56
  },
65
57
  "peerDependenciesMeta": {
66
- "typeorm": {
67
- "optional": true
68
- },
69
58
  "@prisma/client": {
70
59
  "optional": true
71
- },
72
- "class-transformer": {
73
- "optional": true
74
60
  }
75
61
  },
76
62
  "devDependencies": {
77
63
  "@types/node": "^20.0.0",
78
- "reflect-metadata": "^0.2.2",
79
- "sqlite3": "^5.1.7",
80
- "typeorm": "^0.3.20",
81
64
  "typescript": "^5.4.0"
82
65
  },
83
66
  "typesVersions": {
84
67
  "*": {
85
68
  "prisma": [
86
69
  "dist/adapters/prisma/index.d.ts"
87
- ],
88
- "typeorm": [
89
- "dist/adapters/typeorm/index.d.ts"
90
70
  ]
91
71
  }
92
72
  }
package/spec.md CHANGED
@@ -231,8 +231,8 @@ A string is searched against a specified regex. The regex is in the language nat
231
231
  //
232
232
  // showNumber: bool | @true, // include `current` (rows in this page)
233
233
  // showTotal: bool | @true, // include `total` (rows matching the
234
- // // query without pagination — uses
235
- // // getManyAndCount on TypeORM)
234
+ // // query without pagination — the Prisma
235
+ // // adapter runs a parallel `count`)
236
236
  showNumber: false | @true,
237
237
  showTotal: false | @true,
238
238
  }
@@ -1,42 +0,0 @@
1
- import { type ObjectLiteral, type SelectQueryBuilder } from "typeorm";
2
- import type { PaginatedResult, ParsedQuery } from "../../parsed";
3
- import { type Schema } from "../../schema";
4
- import type { Adapter } from "../base";
5
- export interface TypeORMAdapterOptions {
6
- /** Override the parameter name prefix used in generated SQL. */
7
- paramPrefix?: string;
8
- }
9
- /**
10
- * Applies a parsed GenQuery to a TypeORM `SelectQueryBuilder`. The builder is
11
- * mutated in place and returned for convenience.
12
- *
13
- * Typical use:
14
- *
15
- * const qb = userRepo.createQueryBuilder("user");
16
- * adapter.apply(qb, parsed);
17
- * const rows = await qb.getMany();
18
- */
19
- export declare class TypeORMAdapter implements Adapter<SelectQueryBuilder<ObjectLiteral>, SelectQueryBuilder<ObjectLiteral>> {
20
- readonly schema: Schema;
21
- private readonly options;
22
- readonly name = "typeorm";
23
- constructor(schema: Schema, options?: TypeORMAdapterOptions);
24
- /**
25
- * Derive the root entity name from a TypeORM `SelectQueryBuilder`. Returns
26
- * the entity class name as TypeORM knows it (e.g. `"User"`), so the engine
27
- * can look it up in the schema without the caller having to repeat it.
28
- */
29
- getRootEntity(qb: SelectQueryBuilder<ObjectLiteral>): string | undefined;
30
- apply<T extends ObjectLiteral>(qb: SelectQueryBuilder<T>, query: ParsedQuery): SelectQueryBuilder<T>;
31
- /**
32
- * Apply the parsed query to `qb`, run it, and return `{ data, current?,
33
- * total? }` shaped by `pagination.showNumber` / `pagination.showTotal`
34
- * (both default to true). Uses `getManyAndCount` when a total is needed,
35
- * `getMany` otherwise. This is what `engine.run` invokes for TypeORM.
36
- */
37
- execute<T extends ObjectLiteral>(qb: SelectQueryBuilder<T>, query: ParsedQuery): Promise<PaginatedResult<T>>;
38
- private applyRootSelect;
39
- private applyJoin;
40
- private applyPagination;
41
- }
42
- //# sourceMappingURL=adapter.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../../src/adapters/typeorm/adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,aAAa,EAAE,KAAK,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAChF,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAgB,MAAM,cAAc,CAAC;AAC/E,OAAO,EAEL,KAAK,MAAM,EAGZ,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAMvC,MAAM,WAAW,qBAAqB;IACpC,gEAAgE;IAChE,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;;;;GASG;AACH,qBAAa,cACX,YACE,OAAO,CAAC,kBAAkB,CAAC,aAAa,CAAC,EAAE,kBAAkB,CAAC,aAAa,CAAC,CAAC;aAK7D,MAAM,EAAE,MAAM;IAC9B,OAAO,CAAC,QAAQ,CAAC,OAAO;IAJ1B,QAAQ,CAAC,IAAI,aAAa;gBAGR,MAAM,EAAE,MAAM,EACb,OAAO,GAAE,qBAA0B;IAGtD;;;;OAIG;IACH,aAAa,CAAC,EAAE,EAAE,kBAAkB,CAAC,aAAa,CAAC,GAAG,MAAM,GAAG,SAAS;IAIxE,KAAK,CAAC,CAAC,SAAS,aAAa,EAC3B,EAAE,EAAE,kBAAkB,CAAC,CAAC,CAAC,EACzB,KAAK,EAAE,WAAW,GACjB,kBAAkB,CAAC,CAAC,CAAC;IA8CxB;;;;;OAKG;IACG,OAAO,CAAC,CAAC,SAAS,aAAa,EACnC,EAAE,EAAE,kBAAkB,CAAC,CAAC,CAAC,EACzB,KAAK,EAAE,WAAW,GACjB,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;IAkB9B,OAAO,CAAC,eAAe;IAkBvB,OAAO,CAAC,SAAS;IAuBjB,OAAO,CAAC,eAAe;CAWxB"}