@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.
- package/README.md +41 -48
- package/dist/adapters/base.d.ts +9 -10
- package/dist/adapters/base.d.ts.map +1 -1
- package/dist/adapters/prisma/create.d.ts +2 -2
- package/dist/adapters/prisma/create.js +2 -2
- package/dist/engine.d.ts +9 -11
- package/dist/engine.d.ts.map +1 -1
- package/dist/engine.js +1 -1
- package/dist/engine.js.map +1 -1
- package/dist/parsed.d.ts +1 -1
- package/dist/schema.d.ts +2 -3
- package/dist/schema.d.ts.map +1 -1
- package/dist/schema.js.map +1 -1
- package/package.json +5 -25
- package/spec.md +2 -2
- package/dist/adapters/typeorm/adapter.d.ts +0 -42
- package/dist/adapters/typeorm/adapter.d.ts.map +0 -1
- package/dist/adapters/typeorm/adapter.js +0 -135
- package/dist/adapters/typeorm/adapter.js.map +0 -1
- package/dist/adapters/typeorm/aliases.d.ts +0 -25
- package/dist/adapters/typeorm/aliases.d.ts.map +0 -1
- package/dist/adapters/typeorm/aliases.js +0 -47
- package/dist/adapters/typeorm/aliases.js.map +0 -1
- package/dist/adapters/typeorm/create.d.ts +0 -29
- package/dist/adapters/typeorm/create.d.ts.map +0 -1
- package/dist/adapters/typeorm/create.js +0 -29
- package/dist/adapters/typeorm/create.js.map +0 -1
- package/dist/adapters/typeorm/escape.d.ts +0 -5
- package/dist/adapters/typeorm/escape.d.ts.map +0 -1
- package/dist/adapters/typeorm/escape.js +0 -13
- package/dist/adapters/typeorm/escape.js.map +0 -1
- package/dist/adapters/typeorm/index.d.ts +0 -4
- package/dist/adapters/typeorm/index.d.ts.map +0 -1
- package/dist/adapters/typeorm/index.js +0 -10
- package/dist/adapters/typeorm/index.js.map +0 -1
- package/dist/adapters/typeorm/joins.d.ts +0 -29
- package/dist/adapters/typeorm/joins.d.ts.map +0 -1
- package/dist/adapters/typeorm/joins.js +0 -91
- package/dist/adapters/typeorm/joins.js.map +0 -1
- package/dist/adapters/typeorm/params.d.ts +0 -8
- package/dist/adapters/typeorm/params.d.ts.map +0 -1
- package/dist/adapters/typeorm/params.js +0 -15
- package/dist/adapters/typeorm/params.js.map +0 -1
- package/dist/adapters/typeorm/schema-from-typeorm.d.ts +0 -50
- package/dist/adapters/typeorm/schema-from-typeorm.d.ts.map +0 -1
- package/dist/adapters/typeorm/schema-from-typeorm.js +0 -197
- package/dist/adapters/typeorm/schema-from-typeorm.js.map +0 -1
- package/dist/adapters/typeorm/where.d.ts +0 -26
- package/dist/adapters/typeorm/where.d.ts.map +0 -1
- package/dist/adapters/typeorm/where.js +0 -315
- package/dist/adapters/typeorm/where.js.map +0 -1
- package/dist/paginate/cursor.d.ts +0 -18
- package/dist/paginate/cursor.d.ts.map +0 -1
- package/dist/paginate/cursor.js +0 -53
- package/dist/paginate/cursor.js.map +0 -1
- package/dist/paginate/in-memory.d.ts +0 -13
- package/dist/paginate/in-memory.d.ts.map +0 -1
- package/dist/paginate/in-memory.js +0 -21
- package/dist/paginate/in-memory.js.map +0 -1
- package/dist/paginate/index.d.ts +0 -27
- package/dist/paginate/index.d.ts.map +0 -1
- package/dist/paginate/index.js +0 -33
- package/dist/paginate/index.js.map +0 -1
- package/dist/paginate/model.d.ts +0 -16
- package/dist/paginate/model.d.ts.map +0 -1
- package/dist/paginate/model.js +0 -3
- package/dist/paginate/model.js.map +0 -1
- package/dist/paginate/offset.d.ts +0 -25
- package/dist/paginate/offset.d.ts.map +0 -1
- package/dist/paginate/offset.js +0 -74
- package/dist/paginate/offset.js.map +0 -1
- package/dist/paginate/pagination.d.ts +0 -18
- package/dist/paginate/pagination.d.ts.map +0 -1
- package/dist/paginate/pagination.js +0 -47
- package/dist/paginate/pagination.js.map +0 -1
- package/dist/paginate/transform.d.ts +0 -15
- package/dist/paginate/transform.d.ts.map +0 -1
- package/dist/paginate/transform.js +0 -43
- package/dist/paginate/transform.js.map +0 -1
- package/dist/paginate/types.d.ts +0 -93
- package/dist/paginate/types.d.ts.map +0 -1
- package/dist/paginate/types.js +0 -10
- 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
|
|
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
|
|
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
|
-
#
|
|
12
|
-
npm install
|
|
11
|
+
# Prisma client (peer; you almost certainly already have it)
|
|
12
|
+
npm install @prisma/client
|
|
13
13
|
```
|
|
14
14
|
|
|
15
|
-
## Quick start (
|
|
15
|
+
## Quick start (Prisma)
|
|
16
16
|
|
|
17
17
|
```typescript
|
|
18
|
-
import "
|
|
19
|
-
import {
|
|
20
|
-
import { createTypeORMEngine } from "@generazioneai/genquery/typeorm";
|
|
18
|
+
import { Prisma, PrismaClient } from "@prisma/client";
|
|
19
|
+
import { createPrismaEngine } from "@generazioneai/genquery/prisma";
|
|
21
20
|
|
|
22
|
-
|
|
23
|
-
const dataSource = new DataSource({ /* ... */ entities: [User, Post] });
|
|
24
|
-
await dataSource.initialize();
|
|
21
|
+
const prisma = new PrismaClient();
|
|
25
22
|
|
|
26
|
-
//
|
|
27
|
-
const engine =
|
|
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
|
-
|
|
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
|
|
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 `
|
|
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
|
-
`
|
|
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
|
|
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
|
|
54
|
-
const rows = await
|
|
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 =
|
|
61
|
-
const adapter = new
|
|
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 `
|
|
61
|
+
Or pass the same options to `createPrismaEngine`:
|
|
66
62
|
|
|
67
63
|
```typescript
|
|
68
|
-
const engine =
|
|
64
|
+
const engine = createPrismaEngine(Prisma.dmmf.datamodel, {
|
|
69
65
|
schema: { overrides: { User: { meta: "string" } } },
|
|
70
|
-
adapter: {
|
|
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
|
|
76
|
+
With Prisma, derive it from the generated DMMF — no duplication:
|
|
81
77
|
|
|
82
78
|
```typescript
|
|
83
|
-
import {
|
|
79
|
+
import { schemaFromPrisma } from "@generazioneai/genquery/prisma";
|
|
84
80
|
|
|
85
|
-
const schema =
|
|
86
|
-
// optional: restrict to specific
|
|
87
|
-
const schema =
|
|
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 =
|
|
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 (
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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",
|
|
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
|
|
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/
|
|
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 |
|
package/dist/adapters/base.d.ts
CHANGED
|
@@ -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
|
|
8
|
-
*
|
|
9
|
-
*
|
|
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. "
|
|
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
|
|
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.
|
|
35
|
-
*
|
|
36
|
-
*
|
|
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
|
|
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
|
|
13
|
-
*
|
|
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
|
|
9
|
-
*
|
|
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
|
|
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
|
-
* -
|
|
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. `
|
|
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
|
|
46
|
-
*
|
|
47
|
-
*
|
|
48
|
-
* `
|
|
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
|
|
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).
|
package/dist/engine.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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
|
|
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. `
|
|
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
|
*/
|
package/dist/engine.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engine.js","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":";;;AACA,qCAAsC;
|
|
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.
|
|
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
|
|
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
|
-
* `
|
|
16
|
+
* `schemaFromPrisma`, this is auto-populated from the DMMF field metadata.
|
|
18
17
|
*/
|
|
19
18
|
nullable?: boolean;
|
|
20
19
|
/**
|
package/dist/schema.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,MAAM,SAAS,GACjB,QAAQ,GACR,QAAQ,GACR,SAAS,GACT,MAAM,GACN,MAAM,GACN,IAAI,CAAC;AAET,UAAU,mBAAmB;IAC3B
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"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"}
|
package/dist/schema.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;
|
|
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.
|
|
7
|
-
"description": "ORM-agnostic JSON query language with pluggable
|
|
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
|
-
"
|
|
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
|
-
"
|
|
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 —
|
|
235
|
-
// //
|
|
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"}
|