@kozou/api 0.2.1 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/openapi.js CHANGED
@@ -11,6 +11,7 @@
11
11
  //
12
12
  // Pure function — no I/O. The server builds the document once at start and
13
13
  // serves it at `GET /openapi.json`.
14
+ import { RESERVED_PARAMS } from './handler.js';
14
15
  export function buildOpenApiDocument(schema, opts = {}) {
15
16
  const resources = [
16
17
  ...schema.tables.map((t) => ({ resource: t, writable: true })),
@@ -29,7 +30,12 @@ export function buildOpenApiDocument(schema, opts = {}) {
29
30
  for (const t of schema.tables) {
30
31
  for (const rel of t.relations ?? []) {
31
32
  const parentQN = `${rel.references.schema}.${rel.references.table}`;
32
- const entry = { childName: t.name, childQN: t.qualifiedName, field: rel.field };
33
+ const entry = {
34
+ childName: t.name,
35
+ childQN: t.qualifiedName,
36
+ field: rel.field,
37
+ fields: rel.fields ?? [rel.field],
38
+ };
33
39
  const list = reverseByParent.get(parentQN);
34
40
  if (list)
35
41
  list.push(entry);
@@ -40,11 +46,33 @@ export function buildOpenApiDocument(schema, opts = {}) {
40
46
  const paths = {};
41
47
  const schemas = {};
42
48
  for (const { resource, writable } of resources) {
43
- const ref = `#/components/schemas/${resource.qualifiedName}`;
49
+ const qn = resource.qualifiedName;
50
+ const ref = `#/components/schemas/${qn}`;
44
51
  const relations = 'relations' in resource ? resource.relations : [];
45
- const reverse = reverseByParent.get(resource.qualifiedName) ?? [];
46
- schemas[resource.qualifiedName] = resourceSchema(resource, relations, reverse, knownQNames);
47
- Object.assign(paths, resourcePaths(resource, segmentFor(resource), ref, writable));
52
+ const reverse = reverseByParent.get(qn) ?? [];
53
+ const parentColumns = new Set(resource.columns.map((c) => c.name));
54
+ const embeds = embedHints(relations, reverse, knownQNames, parentColumns);
55
+ schemas[qn] = resourceSchema(resource, embeds);
56
+ // Request-body schemas are distinct from the response row schema: a create
57
+ // input does not require columns the database can supply, and a partial
58
+ // update requires nothing (see requestInputSchema).
59
+ let createRef;
60
+ let updateRef;
61
+ if (writable) {
62
+ const createName = `${qn}.CreateInput`;
63
+ schemas[createName] = requestInputSchema(resource, 'create');
64
+ createRef = `#/components/schemas/${createName}`;
65
+ const pk = 'primaryKey' in resource ? resource.primaryKey : [];
66
+ if (pk.length >= 1) {
67
+ const updateName = `${qn}.UpdateInput`;
68
+ schemas[updateName] = requestInputSchema(resource, 'update');
69
+ updateRef = `#/components/schemas/${updateName}`;
70
+ }
71
+ }
72
+ Object.assign(paths, resourcePaths(resource, segmentFor(resource), ref, writable, embeds.length > 0, {
73
+ create: createRef,
74
+ update: updateRef,
75
+ }));
48
76
  }
49
77
  return {
50
78
  openapi: '3.1.0',
@@ -57,7 +85,7 @@ export function buildOpenApiDocument(schema, opts = {}) {
57
85
  components: { schemas },
58
86
  };
59
87
  }
60
- function resourceSchema(resource, relations, reverse, knownQNames) {
88
+ function resourceSchema(resource, embeds) {
61
89
  const properties = {};
62
90
  const required = [];
63
91
  for (const column of resource.columns) {
@@ -74,39 +102,147 @@ function resourceSchema(resource, relations, reverse, knownQNames) {
74
102
  schema['x-kozou-policy'] = resource.policy;
75
103
  if (required.length > 0)
76
104
  schema.required = required;
77
- // Embeddable relations, as a hint for clients building `?embed=`: forward
78
- // (to-one) plus reverse (to-many). Only targets that are themselves exposed
79
- // resources are listed.
80
- const embeds = embedHints(relations, reverse, knownQNames);
105
+ // Embeddable relations (forward to-one + reverse to-many, only targets that
106
+ // are themselves exposed resources), as a hint for clients building
107
+ // `?embed=`. Computed once by the caller and shared with the path builder so
108
+ // the `embed` query parameter is only advertised where it is usable.
81
109
  if (embeds.length > 0)
82
110
  schema['x-kozou-embeds'] = embeds;
83
111
  return schema;
84
112
  }
85
- function embedHints(forward, reverse, knownQNames) {
113
+ /** The request-body schema for `POST` (`create`) or `PATCH` (`update`).
114
+ * Distinct from the response row schema because the contract differs:
115
+ * - `create`: only columns that are NOT NULL *and* have no database default
116
+ * are required (the rest the server / PostgreSQL can supply); an empty body
117
+ * is valid when nothing is required.
118
+ * - `update`: a partial — any subset of columns, so no row-level `required`,
119
+ * but at least one column (the runtime rejects an empty update with 400),
120
+ * modelled as `minProperties: 1`.
121
+ * Both reject unknown columns at runtime (400), modelled as
122
+ * `additionalProperties: false`. */
123
+ function requestInputSchema(resource, kind) {
124
+ const label = resource.label || resource.name;
125
+ const properties = {};
126
+ const required = [];
127
+ for (const column of resource.columns) {
128
+ properties[column.name] = columnSchema(column);
129
+ if (kind === 'create' && !column.nullable && column.defaultExpr === null) {
130
+ required.push(column.name);
131
+ }
132
+ }
133
+ const schema = { type: 'object', properties, additionalProperties: false };
134
+ if (kind === 'create') {
135
+ schema.description = `Create input for ${label}. Columns with a database default or a server-generated value may be omitted.`;
136
+ if (required.length > 0)
137
+ schema.required = required;
138
+ }
139
+ else {
140
+ schema.description = `Partial update for ${label}. Supply at least one of the columns to change.`;
141
+ schema.minProperties = 1;
142
+ }
143
+ return schema;
144
+ }
145
+ /** Embeddable-relation hints, derived with the same semantics as the runtime
146
+ * embed resolver (embed.ts) so the document never advertises a relation the
147
+ * request handler would reject:
148
+ *
149
+ * - A forward (to-one) relation is selectable by its FK column name, so it is
150
+ * always embeddable (even when several FKs point at the same table).
151
+ * - A reverse (to-many) relation is selectable only by the child table name,
152
+ * and only when that child has exactly one FK back to this parent; multiple
153
+ * reverse FKs from one child are not yet resolvable (a 400 at runtime), so
154
+ * they are dropped here.
155
+ * - The result `key` is chosen the way embed.ts's `chooseKey` does — the
156
+ * target table name, then the FK field with a trailing id-suffix stripped,
157
+ * then the raw FK field — skipping any candidate that collides with a parent
158
+ * column or a key already assigned to an earlier hint. (The raw field is a
159
+ * parent column for a forward relation, so it only ever helps a reverse one,
160
+ * whose FK lives on the child.) A relation with no usable key (every
161
+ * candidate collides) would 400 at runtime, so it is dropped too.
162
+ *
163
+ * `key` reflects the assignment when the whole advertised set is embedded
164
+ * together; embedding a subset may yield a simpler key, but `field` (forward)
165
+ * / the target table name (reverse) is always a valid `?embed=` selector. */
166
+ function embedHints(forward, reverse, knownQNames, parentColumns) {
86
167
  const hints = [];
168
+ const taken = new Set();
169
+ // Table names reachable as a forward selector — a reverse embed by child
170
+ // table name is shadowed by (and so unreachable behind) a forward to the same
171
+ // table, since matchForward is tried first (embed.ts). Used to avoid
172
+ // advertising an unreachable reverse below.
173
+ const forwardTables = new Set(forward.map((r) => r.references.table));
87
174
  for (const r of forward) {
88
175
  const qn = `${r.references.schema}.${r.references.table}`;
89
176
  if (!knownQNames.has(qn))
90
177
  continue;
91
- hints.push({
92
- field: r.field,
93
- key: r.references.table,
94
- target: `#/components/schemas/${qn}`,
95
- cardinality: 'to-one',
96
- });
178
+ const fields = r.fields ?? [r.field];
179
+ // A composite FK has no single-column selector, so it is reachable only by
180
+ // its (unique) referenced table name; if another FK also targets that table
181
+ // the table-name selector is ambiguous and the composite relation is
182
+ // unreachable at runtime, so it is dropped here (matchForward in embed.ts).
183
+ if (fields.length > 1 && forward.filter((x) => x.references.table === r.references.table).length > 1) {
184
+ continue;
185
+ }
186
+ const key = pickEmbedKey([r.references.table, stripIdSuffix(r.field), r.field], taken, parentColumns);
187
+ if (key === undefined)
188
+ continue;
189
+ taken.add(key);
190
+ const hint = { field: r.field, key, target: `#/components/schemas/${qn}`, cardinality: 'to-one' };
191
+ // Composite FKs carry the full column set (the scalar `field` stays `[0]`).
192
+ if (fields.length > 1)
193
+ hint.fields = [...fields];
194
+ hints.push(hint);
97
195
  }
196
+ // Group reverse entries by child table name; a child with more than one FK
197
+ // back to this parent is ambiguous (unreachable) and dropped.
198
+ const byChild = new Map();
98
199
  for (const e of reverse) {
200
+ const list = byChild.get(e.childName);
201
+ if (list)
202
+ list.push(e);
203
+ else
204
+ byChild.set(e.childName, [e]);
205
+ }
206
+ for (const entries of byChild.values()) {
207
+ if (entries.length !== 1)
208
+ continue;
209
+ const e = entries[0];
99
210
  if (!knownQNames.has(e.childQN))
100
211
  continue;
101
- hints.push({
212
+ // A reverse embed is selected by the child table name. If a forward
213
+ // relation targets a table of that same name, matchForward (tried first)
214
+ // shadows the reverse, so it is unreachable — do not advertise it.
215
+ if (forwardTables.has(e.childName))
216
+ continue;
217
+ const key = pickEmbedKey([e.childName, stripIdSuffix(e.field), e.field], taken, parentColumns);
218
+ if (key === undefined)
219
+ continue;
220
+ taken.add(key);
221
+ const hint = {
102
222
  field: e.field,
103
- key: e.childName,
223
+ key,
104
224
  target: `#/components/schemas/${e.childQN}`,
105
225
  cardinality: 'to-many',
106
- });
226
+ };
227
+ if (e.fields.length > 1)
228
+ hint.fields = [...e.fields];
229
+ hints.push(hint);
107
230
  }
108
231
  return hints;
109
232
  }
233
+ /** First candidate key that is non-empty and collides with neither a parent
234
+ * column nor an already-assigned key. Mirrors embed.ts `chooseKey`. */
235
+ function pickEmbedKey(candidates, taken, parentColumns) {
236
+ for (const key of candidates) {
237
+ if (key.length > 0 && !taken.has(key) && !parentColumns.has(key))
238
+ return key;
239
+ }
240
+ return undefined;
241
+ }
242
+ function stripIdSuffix(field) {
243
+ const stripped = field.replace(/_(id|uuid|fk|key)$/i, '');
244
+ return stripped.length > 0 ? stripped : field;
245
+ }
110
246
  function columnSchema(column) {
111
247
  const base = widgetType(column.widget);
112
248
  const schema = { ...base };
@@ -150,69 +286,122 @@ function widgetType(widget) {
150
286
  return { type: 'string' };
151
287
  }
152
288
  }
153
- function resourcePaths(resource, segment, ref, writable) {
289
+ function resourcePaths(resource, segment, ref, writable, hasEmbeds, requestRefs) {
154
290
  const rowRef = { $ref: ref };
155
291
  const label = resource.label || resource.name;
292
+ const primaryKey = 'primaryKey' in resource ? resource.primaryKey : [];
293
+ // The relation-select (`as=options`) mode builds its option `id` from the
294
+ // primary key (a scalar for a single-column key, an array of components for
295
+ // a composite key); the handler rejects a key-less resource (a view, or a
296
+ // table without a primary key) with 400. Only advertise the mode where it
297
+ // actually works.
298
+ const hasOptions = primaryKey.length >= 1;
299
+ // The `embed` parameter is only advertised where the resource has at least
300
+ // one embeddable relation; a non-empty `embed` on a relation-less resource
301
+ // (e.g. a view) is rejected with 400, so listing it would be misleading.
302
+ const embedParams = hasEmbeds ? [embedParam()] : [];
303
+ // List/filter/embed parameters first; relation-select controls are folded in
304
+ // afterwards. A column named like an options control (`as`, `label`, ...)
305
+ // would collide, so rather than emit a duplicate (invalid) or silently drop
306
+ // the control, merge its meaning into the colliding filter's description.
307
+ const collectionParams = [
308
+ ...listParameters(),
309
+ ...filterParameters(resource),
310
+ ...embedParams,
311
+ ];
312
+ if (hasOptions) {
313
+ for (const control of optionsParameters()) {
314
+ const clash = collectionParams.find((p) => p.name === control.name);
315
+ if (clash) {
316
+ clash.description = `${clash.description ?? ''} In \`as=options\` mode this parameter is the relation-select control instead — ${control.description}`;
317
+ }
318
+ else {
319
+ collectionParams.push(control);
320
+ }
321
+ }
322
+ }
156
323
  const collection = {
157
324
  get: {
158
325
  summary: `List ${label}`,
159
326
  description: resource.description ?? undefined,
160
- parameters: [...listParameters(), embedParam()],
327
+ parameters: collectionParams,
161
328
  responses: {
162
- '200': jsonResponse(`A page of ${label}.`, listResultSchema(rowRef)),
329
+ '200': hasOptions
330
+ ? jsonResponse(`A page of ${label}; or relation-select options when \`as=options\`.`, { oneOf: [listResultSchema(rowRef), optionsResultSchema(primaryKey)] })
331
+ : jsonResponse(`A page of ${label}.`, listResultSchema(rowRef)),
163
332
  },
164
333
  },
165
334
  };
166
335
  if (writable) {
167
336
  collection.post = {
168
337
  summary: `Create a ${label} row`,
169
- requestBody: jsonBody(rowRef),
338
+ requestBody: jsonBody(requestRefs.create ? { $ref: requestRefs.create } : rowRef),
170
339
  responses: {
171
340
  '201': jsonResponse('The created row.', rowRef),
172
341
  '400': errorResponse('Validation error.'),
173
342
  },
174
343
  };
175
344
  }
176
- const idParam = {
177
- name: 'id',
178
- in: 'path',
179
- required: true,
180
- schema: { type: 'string' },
181
- description: 'Primary key of the row.',
182
- };
183
- const item = {
184
- get: {
185
- summary: `Fetch a ${label} row by id`,
186
- parameters: [idParam, embedParam()],
187
- responses: {
188
- '200': jsonResponse('The row.', rowRef),
189
- '404': errorResponse('No such row.'),
190
- },
191
- },
192
- };
193
- if (writable) {
194
- item.patch = {
195
- summary: `Update a ${label} row`,
196
- parameters: [idParam],
197
- requestBody: jsonBody(rowRef),
198
- responses: {
199
- '200': jsonResponse('The updated row.', rowRef),
200
- '404': errorResponse('No such row.'),
201
- },
202
- };
203
- item.delete = {
204
- summary: `Delete a ${label} row`,
205
- parameters: [idParam],
206
- responses: {
207
- '200': jsonResponse('The deleted row.', rowRef),
208
- '404': errorResponse('No such row.'),
345
+ const paths = { [`/${segment}`]: collection };
346
+ // Item-by-id routes only exist for resources addressable by a primary key.
347
+ // Views and primary-key-less tables cannot be fetched/updated/deleted by id
348
+ // (the request handler rejects such reads with 400), so the document must
349
+ // not advertise an item path for them.
350
+ if (primaryKey.length >= 1) {
351
+ const idParam = itemIdParam(resource);
352
+ const item = {
353
+ get: {
354
+ summary: `Fetch a ${label} row by id`,
355
+ parameters: [idParam, ...embedParams],
356
+ responses: {
357
+ '200': jsonResponse('The row.', rowRef),
358
+ '404': errorResponse('No such row.'),
359
+ },
209
360
  },
210
361
  };
362
+ if (writable) {
363
+ item.patch = {
364
+ summary: `Update a ${label} row`,
365
+ parameters: [idParam],
366
+ requestBody: jsonBody(requestRefs.update ? { $ref: requestRefs.update } : rowRef),
367
+ responses: {
368
+ '200': jsonResponse('The updated row.', rowRef),
369
+ '404': errorResponse('No such row.'),
370
+ },
371
+ };
372
+ item.delete = {
373
+ summary: `Delete a ${label} row`,
374
+ parameters: [idParam],
375
+ responses: {
376
+ '200': jsonResponse('The deleted row.', rowRef),
377
+ '404': errorResponse('No such row.'),
378
+ },
379
+ };
380
+ }
381
+ paths[`/${segment}/{id}`] = item;
211
382
  }
212
- return {
213
- [`/${segment}`]: collection,
214
- [`/${segment}/{id}`]: item,
215
- };
383
+ return paths;
384
+ }
385
+ /** The `{id}` path parameter. Only called for a resource with a non-empty
386
+ * primary key (the caller in `resourcePaths` guards on it). A composite
387
+ * primary key is addressed by comma-joining its components — in `primaryKey`
388
+ * declaration order — into the single `{id}` segment, each component
389
+ * percent-encoded. */
390
+ function itemIdParam(resource) {
391
+ const pk = 'primaryKey' in resource ? resource.primaryKey : [];
392
+ let description;
393
+ if (pk.length > 1) {
394
+ const cols = pk.map((c) => `\`${c}\``).join(', ');
395
+ description =
396
+ `Composite primary key: the components (${cols}) in this order, joined by an ` +
397
+ `unescaped comma in the single path segment. Percent-encode reserved characters ` +
398
+ `within a component; a component value cannot itself contain a comma (the segment ` +
399
+ `is split on commas after URL-decoding).`;
400
+ }
401
+ else {
402
+ description = `Primary key of the row (\`${pk[0]}\`).`;
403
+ }
404
+ return { name: 'id', in: 'path', required: true, schema: { type: 'string' }, description };
216
405
  }
217
406
  function listParameters() {
218
407
  return [
@@ -222,11 +411,45 @@ function listParameters() {
222
411
  queryParam('search', { type: 'string' }, 'Free-text ILIKE across text columns.'),
223
412
  ];
224
413
  }
414
+ /** Query parameters for the relation-select (`as=options`) mode of the
415
+ * collection `GET`. OpenAPI cannot express a response that depends on a query
416
+ * parameter value, so the alternate `{ options }` shape is offered as a
417
+ * `oneOf` on the same 200 and these controls are documented as optional. */
418
+ function optionsParameters() {
419
+ return [
420
+ queryParam('as', { type: 'string', enum: ['options'] }, 'Set to `options` to switch this endpoint to relation-select mode: it returns `{ id, label }` pairs (see the alternate 200 schema) instead of full rows.'),
421
+ queryParam('label', { type: 'string' }, 'Relation-select (`as=options`) only — required in that mode: the column whose value is each option\'s display `label`. It is not searched by `q` unless you also list it in `fields`.'),
422
+ queryParam('fields', { type: 'string' }, 'Relation-select only: comma-separated columns that `q` is matched against. To search the label column, include it here.'),
423
+ queryParam('q', { type: 'string' }, 'Relation-select only: free-text query, matched with ILIKE against the columns listed in `fields`. It has no effect when `fields` is empty.'),
424
+ queryParam('limit', { type: 'integer', minimum: 1 }, 'Relation-select only: maximum number of options to return.'),
425
+ ];
426
+ }
427
+ /** Operators accepted by the `<column>=<op>.<value>` filter grammar. */
428
+ const FILTER_OPERATORS_DOC = 'eq, neq, gt, gte, lt, lte, like, ilike, in, is';
429
+ /** One query parameter per filterable column documenting the
430
+ * `<column>=<op>.<value>` grammar. Control keys (page/sort/…) are skipped so
431
+ * the doc never advertises them as filters. Multiple filters on one column
432
+ * combine with AND (e.g. a `gte`/`lte` range). */
433
+ function filterParameters(resource) {
434
+ return resource.columns
435
+ .filter((c) => !RESERVED_PARAMS.has(c.name))
436
+ .map((c) => queryParam(c.name, { type: 'string' }, `Filter on \`${c.name}\`: \`<op>.<value>\` where op is one of ${FILTER_OPERATORS_DOC} ` +
437
+ `(e.g. \`${c.name}=gte.10\`, \`${c.name}=in.(a,b)\`, \`${c.name}=is.null\`). ` +
438
+ `A bare value means \`eq\`. Repeat the key to AND several conditions.`));
439
+ }
225
440
  function queryParam(name, schema, description) {
226
441
  return { name, in: 'query', required: false, schema, description };
227
442
  }
228
443
  function embedParam() {
229
- return queryParam('embed', { type: 'string' }, 'Comma-separated forward to-one relations to inline as nested objects; dot for depth (e.g. "author,editions.books.authors"). Each segment is a foreign-key column name or its referenced table name.');
444
+ return queryParam('embed', { type: 'string' }, 'Comma-separated relations to inline in each row; use a dot for depth ' +
445
+ '(e.g. "author,reviews.user"). A forward (to-one) relation — selected by ' +
446
+ 'its foreign-key column name or the referenced table name — is inlined as a ' +
447
+ 'nested object (or null). A reverse (to-many) relation — selected by the ' +
448
+ 'child table name, when that child has exactly one foreign key back — is ' +
449
+ 'inlined as an array. Each relation appears under the `key` shown in ' +
450
+ '`x-kozou-embeds`; when several relations compete for a key (e.g. multiple ' +
451
+ 'foreign keys to one table), embedding only a subset may place one under a ' +
452
+ 'simpler key, so treat the selector — not the key — as the stable identifier.');
230
453
  }
231
454
  function listResultSchema(rowRef) {
232
455
  return {
@@ -240,6 +463,38 @@ function listResultSchema(rowRef) {
240
463
  required: ['rows', 'total', 'page', 'pageSize'],
241
464
  };
242
465
  }
466
+ /** The `as=options` response: `{ options: [{ id, label }] }`. A
467
+ * single-column key yields a scalar `id`; a composite key yields an array of
468
+ * key components in primary-key declaration order (a valid item id for the
469
+ * resource). */
470
+ function optionsResultSchema(primaryKey) {
471
+ const id = primaryKey.length > 1
472
+ ? {
473
+ type: 'array',
474
+ items: { type: ['string', 'number'] },
475
+ minItems: primaryKey.length,
476
+ maxItems: primaryKey.length,
477
+ description: `Composite key components, in declaration order: ${primaryKey.join(', ')}.`,
478
+ }
479
+ : { type: ['string', 'number'] };
480
+ return {
481
+ type: 'object',
482
+ properties: {
483
+ options: {
484
+ type: 'array',
485
+ items: {
486
+ type: 'object',
487
+ properties: {
488
+ id,
489
+ label: { type: 'string' },
490
+ },
491
+ required: ['id', 'label'],
492
+ },
493
+ },
494
+ },
495
+ required: ['options'],
496
+ };
497
+ }
243
498
  function jsonResponse(description, schema) {
244
499
  return { description, content: { 'application/json': { schema } } };
245
500
  }
@@ -1 +1 @@
1
- {"version":3,"file":"openapi.js","sourceRoot":"","sources":["../src/openapi.ts"],"names":[],"mappings":"AAAA,wEAAwE;AACxE,4EAA4E;AAC5E,2EAA2E;AAC3E,0EAA0E;AAC1E,gEAAgE;AAChE,qBAAqB;AACrB,EAAE;AACF,6EAA6E;AAC7E,yEAAyE;AACzE,oCAAoC;AACpC,EAAE;AACF,2EAA2E;AAC3E,oCAAoC;AAqBpC,MAAM,UAAU,oBAAoB,CAClC,MAAqB,EACrB,OAAuB,EAAE;IAEzB,MAAM,SAAS,GAAoD;QACjE,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QAC9D,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;KAC/D,CAAC;IAEF,yEAAyE;IACzE,iEAAiE;IACjE,MAAM,UAAU,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC7C,KAAK,MAAM,EAAE,QAAQ,EAAE,IAAI,SAAS,EAAE,CAAC;QACrC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1E,CAAC;IACD,MAAM,UAAU,GAAG,CAAC,CAAe,EAAU,EAAE,CAC7C,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC;IAE1D,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC;IAErF,+EAA+E;IAC/E,MAAM,eAAe,GAAG,IAAI,GAAG,EAA0B,CAAC;IAC1D,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAC9B,KAAK,MAAM,GAAG,IAAI,CAAC,CAAC,SAAS,IAAI,EAAE,EAAE,CAAC;YACpC,MAAM,QAAQ,GAAG,GAAG,GAAG,CAAC,UAAU,CAAC,MAAM,IAAI,GAAG,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;YACpE,MAAM,KAAK,GAAiB,EAAE,SAAS,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,aAAa,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC;YAC9F,MAAM,IAAI,GAAG,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAC3C,IAAI,IAAI;gBAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;;gBACtB,eAAe,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;IAED,MAAM,KAAK,GAAe,EAAE,CAAC;IAC7B,MAAM,OAAO,GAAe,EAAE,CAAC;IAE/B,KAAK,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,SAAS,EAAE,CAAC;QAC/C,MAAM,GAAG,GAAG,wBAAwB,QAAQ,CAAC,aAAa,EAAE,CAAC;QAC7D,MAAM,SAAS,GAAsB,WAAW,IAAI,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;QACvF,MAAM,OAAO,GAAG,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;QAClE,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,GAAG,cAAc,CAAC,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;QAC5F,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,aAAa,CAAC,QAAQ,EAAE,UAAU,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC;IACrF,CAAC;IAED,OAAO;QACL,OAAO,EAAE,OAAO;QAChB,IAAI,EAAE;YACJ,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,WAAW;YAChC,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,OAAO;YAChC,WAAW,EACT,4IAA4I;SAC/I;QACD,KAAK;QACL,UAAU,EAAE,EAAE,OAAO,EAAE;KACxB,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CACrB,QAAsB,EACtB,SAA4B,EAC5B,OAAuB,EACvB,WAAwB;IAExB,MAAM,UAAU,GAAe,EAAE,CAAC;IAClC,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,KAAK,MAAM,MAAM,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;QACtC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;QAC/C,IAAI,CAAC,MAAM,CAAC,QAAQ;YAAE,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACnD,CAAC;IAED,MAAM,MAAM,GAAe,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC;IAC1D,IAAI,QAAQ,CAAC,WAAW;QAAE,MAAM,CAAC,WAAW,GAAG,QAAQ,CAAC,WAAW,CAAC;IACpE,IAAI,QAAQ,CAAC,aAAa;QAAE,MAAM,CAAC,YAAY,CAAC,GAAG,QAAQ,CAAC,aAAa,CAAC;IAC1E,IAAI,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;QAAE,MAAM,CAAC,gBAAgB,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC;IAC9F,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;QAAE,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAEpD,0EAA0E;IAC1E,4EAA4E;IAC5E,wBAAwB;IACxB,MAAM,MAAM,GAAG,UAAU,CAAC,SAAS,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;IAC3D,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;QAAE,MAAM,CAAC,gBAAgB,CAAC,GAAG,MAAM,CAAC;IACzD,OAAO,MAAM,CAAC;AAChB,CAAC;AAID,SAAS,UAAU,CACjB,OAA0B,EAC1B,OAAuB,EACvB,WAAwB;IAExB,MAAM,KAAK,GAAiB,EAAE,CAAC;IAC/B,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC,UAAU,CAAC,MAAM,IAAI,CAAC,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;QAC1D,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;YAAE,SAAS;QACnC,KAAK,CAAC,IAAI,CAAC;YACT,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,GAAG,EAAE,CAAC,CAAC,UAAU,CAAC,KAAK;YACvB,MAAM,EAAE,wBAAwB,EAAE,EAAE;YACpC,WAAW,EAAE,QAAQ;SACtB,CAAC,CAAC;IACL,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC;YAAE,SAAS;QAC1C,KAAK,CAAC,IAAI,CAAC;YACT,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,GAAG,EAAE,CAAC,CAAC,SAAS;YAChB,MAAM,EAAE,wBAAwB,CAAC,CAAC,OAAO,EAAE;YAC3C,WAAW,EAAE,SAAS;SACvB,CAAC,CAAC;IACL,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,YAAY,CAAC,MAAqB;IACzC,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACvC,MAAM,MAAM,GAAe,EAAE,GAAG,IAAI,EAAE,CAAC;IAEvC,IAAI,MAAM,CAAC,QAAQ,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QACvD,MAAM,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACtC,CAAC;IACD,IAAI,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtD,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;IACxF,CAAC;IACD,IAAI,MAAM,CAAC,WAAW;QAAE,MAAM,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;IAChE,IAAI,MAAM,CAAC,aAAa;QAAE,MAAM,CAAC,YAAY,CAAC,GAAG,MAAM,CAAC,aAAa,CAAC;IACtE,IAAI,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;QAAE,MAAM,CAAC,gBAAgB,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;IACxF,MAAM,CAAC,gBAAgB,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;IACzC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,UAAU,CAAC,MAAkB;IACpC,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,QAAQ,CAAC;QACd,KAAK,UAAU;YACb,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;QAC5B,KAAK,SAAS;YACZ,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;QAC7B,KAAK,MAAM;YACT,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;QAC5C,KAAK,UAAU;YACb,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;QACjD,KAAK,MAAM;YACT,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;QAC5C,KAAK,WAAW;YACd,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;QAC3C,KAAK,MAAM;YACT,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;QAC5B,KAAK,MAAM,CAAC;QACZ,KAAK,UAAU,CAAC;QAChB,KAAK,aAAa,CAAC;QACnB,KAAK,iBAAiB,CAAC;QACvB;YACE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IAC9B,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CACpB,QAAsB,EACtB,OAAe,EACf,GAAW,EACX,QAAiB;IAEjB,MAAM,MAAM,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;IAC7B,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,IAAI,QAAQ,CAAC,IAAI,CAAC;IAE9C,MAAM,UAAU,GAAe;QAC7B,GAAG,EAAE;YACH,OAAO,EAAE,QAAQ,KAAK,EAAE;YACxB,WAAW,EAAE,QAAQ,CAAC,WAAW,IAAI,SAAS;YAC9C,UAAU,EAAE,CAAC,GAAG,cAAc,EAAE,EAAE,UAAU,EAAE,CAAC;YAC/C,SAAS,EAAE;gBACT,KAAK,EAAE,YAAY,CAAC,aAAa,KAAK,GAAG,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC;aACrE;SACF;KACF,CAAC;IACF,IAAI,QAAQ,EAAE,CAAC;QACb,UAAU,CAAC,IAAI,GAAG;YAChB,OAAO,EAAE,YAAY,KAAK,MAAM;YAChC,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC;YAC7B,SAAS,EAAE;gBACT,KAAK,EAAE,YAAY,CAAC,kBAAkB,EAAE,MAAM,CAAC;gBAC/C,KAAK,EAAE,aAAa,CAAC,mBAAmB,CAAC;aAC1C;SACF,CAAC;IACJ,CAAC;IAED,MAAM,OAAO,GAAG;QACd,IAAI,EAAE,IAAI;QACV,EAAE,EAAE,MAAM;QACV,QAAQ,EAAE,IAAI;QACd,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;QAC1B,WAAW,EAAE,yBAAyB;KACvC,CAAC;IACF,MAAM,IAAI,GAAe;QACvB,GAAG,EAAE;YACH,OAAO,EAAE,WAAW,KAAK,YAAY;YACrC,UAAU,EAAE,CAAC,OAAO,EAAE,UAAU,EAAE,CAAC;YACnC,SAAS,EAAE;gBACT,KAAK,EAAE,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC;gBACvC,KAAK,EAAE,aAAa,CAAC,cAAc,CAAC;aACrC;SACF;KACF,CAAC;IACF,IAAI,QAAQ,EAAE,CAAC;QACb,IAAI,CAAC,KAAK,GAAG;YACX,OAAO,EAAE,YAAY,KAAK,MAAM;YAChC,UAAU,EAAE,CAAC,OAAO,CAAC;YACrB,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC;YAC7B,SAAS,EAAE;gBACT,KAAK,EAAE,YAAY,CAAC,kBAAkB,EAAE,MAAM,CAAC;gBAC/C,KAAK,EAAE,aAAa,CAAC,cAAc,CAAC;aACrC;SACF,CAAC;QACF,IAAI,CAAC,MAAM,GAAG;YACZ,OAAO,EAAE,YAAY,KAAK,MAAM;YAChC,UAAU,EAAE,CAAC,OAAO,CAAC;YACrB,SAAS,EAAE;gBACT,KAAK,EAAE,YAAY,CAAC,kBAAkB,EAAE,MAAM,CAAC;gBAC/C,KAAK,EAAE,aAAa,CAAC,cAAc,CAAC;aACrC;SACF,CAAC;IACJ,CAAC;IAED,OAAO;QACL,CAAC,IAAI,OAAO,EAAE,CAAC,EAAE,UAAU;QAC3B,CAAC,IAAI,OAAO,OAAO,CAAC,EAAE,IAAI;KAC3B,CAAC;AACJ,CAAC;AAED,SAAS,cAAc;IACrB,OAAO;QACL,UAAU,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,qBAAqB,CAAC;QAC1E,UAAU,CAAC,UAAU,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,gBAAgB,CAAC;QACzE,UAAU,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,6CAA6C,CAAC;QACrF,UAAU,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,sCAAsC,CAAC;KACjF,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CAAC,IAAY,EAAE,MAAkB,EAAE,WAAmB;IACvE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;AACrE,CAAC;AAED,SAAS,UAAU;IACjB,OAAO,UAAU,CACf,OAAO,EACP,EAAE,IAAI,EAAE,QAAQ,EAAE,EAClB,qMAAqM,CACtM,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,MAAkB;IAC1C,OAAO;QACL,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,IAAI,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE;YACtC,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;YAC1B,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;YACzB,QAAQ,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;SAC9B;QACD,QAAQ,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC;KAChD,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CAAC,WAAmB,EAAE,MAAkB;IAC3D,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,EAAE,kBAAkB,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;AACtE,CAAC;AAED,SAAS,QAAQ,CAAC,MAAkB;IAClC,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,kBAAkB,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;AACzE,CAAC;AAED,SAAS,aAAa,CAAC,WAAmB;IACxC,OAAO,YAAY,CAAC,WAAW,EAAE;QAC/B,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,KAAK,EAAE;gBACL,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;aACtE;SACF;KACF,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"openapi.js","sourceRoot":"","sources":["../src/openapi.ts"],"names":[],"mappings":"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"}
@@ -5,6 +5,29 @@ export { quoteIdent };
5
5
  export declare const DEFAULT_PAGE_SIZE = 50;
6
6
  export declare const MAX_PAGE_SIZE = 200;
7
7
  export type SortDirection = 'asc' | 'desc';
8
+ /** Horizontal filter operators for the `?<col>=<op>.<value>` query grammar. */
9
+ export type FilterOperator = 'eq' | 'neq' | 'gt' | 'gte' | 'lt' | 'lte' | 'like' | 'ilike' | 'in' | 'is';
10
+ /** Comparison operators that bind a single value. */
11
+ export type ScalarFilterOperator = Exclude<FilterOperator, 'in' | 'is'>;
12
+ /** Allowed right-hand keywords for the `is` operator (never bound — a fixed
13
+ * SQL `IS [NOT] NULL/TRUE/FALSE` clause). */
14
+ export type IsKeyword = 'null' | 'notnull' | 'true' | 'false';
15
+ /** A single horizontal filter. `column` must be a declared column of the
16
+ * resource (enforced in {@link buildListQuery}). Multiple filters on the same
17
+ * column are allowed and combine with AND (e.g. a `gte`/`lte` range). */
18
+ export type Filter = {
19
+ column: string;
20
+ op: ScalarFilterOperator;
21
+ value: string;
22
+ } | {
23
+ column: string;
24
+ op: 'in';
25
+ values: string[];
26
+ } | {
27
+ column: string;
28
+ op: 'is';
29
+ keyword: IsKeyword;
30
+ };
8
31
  export type ListQueryParams = {
9
32
  page?: number;
10
33
  pageSize?: number;
@@ -13,8 +36,9 @@ export type ListQueryParams = {
13
36
  order: SortDirection;
14
37
  }[];
15
38
  search?: string;
16
- /** Column-equality filters. Keys must be declared columns of the resource. */
17
- filters?: Record<string, string>;
39
+ /** Horizontal filters. Each filter's column must be a declared column of
40
+ * the resource; every supplied value is a bound parameter. */
41
+ filters?: Filter[];
18
42
  /** Resolved forward to-one relations to inline as nested JSON objects. */
19
43
  embed?: EmbedNode[];
20
44
  };
@@ -48,7 +72,12 @@ export type RelationOptionsParams = {
48
72
  export type BuiltRelationOptions = {
49
73
  text: string;
50
74
  values: unknown[];
75
+ /** First primary-key column. For a composite-key resource this is only the
76
+ * first component — read {@link primaryKeys} instead. */
51
77
  primaryKey: string;
78
+ /** All primary-key columns, in declaration order. Optional so pre-composite
79
+ * object shapes stay valid; readers normalize with `?? [primaryKey]`. */
80
+ primaryKeys?: string[];
52
81
  labelField: string;
53
82
  };
54
83
  export declare function buildInsertQuery(resource: Resource, data: Record<string, unknown>): BuiltMutation;
@@ -1 +1 @@
1
- {"version":3,"file":"query-builder.d.ts","sourceRoot":"","sources":["../src/query-builder.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,UAAU,EAAa,MAAM,YAAY,CAAC;AACnD,OAAO,EAA4B,KAAK,SAAS,EAAE,MAAM,YAAY,CAAC;AACtE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAEnD,OAAO,EAAE,UAAU,EAAE,CAAC;AAEtB,eAAO,MAAM,iBAAiB,KAAK,CAAC;AACpC,eAAO,MAAM,aAAa,MAAM,CAAC;AAEjC,MAAM,MAAM,aAAa,GAAG,KAAK,GAAG,MAAM,CAAC;AAE3C,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,aAAa,CAAA;KAAE,EAAE,CAAC;IACjD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,8EAA8E;IAC9E,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,0EAA0E;IAC1E,KAAK,CAAC,EAAE,SAAS,EAAE,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,OAAO,EAAE,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,OAAO,EAAE,CAAC;IACvB,kEAAkE;IAClE,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,EAAE,CAAC;CACnB,CAAC;AA4BF,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,eAAe,GACtB,cAAc,CA2EhB;AAED,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,QAAQ,EAClB,EAAE,EAAE,MAAM,EACV,KAAK,CAAC,EAAE,SAAS,EAAE,GAClB,aAAa,CAYf;AAID,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,EAAE,CAAC;CACnB,CAAC;AAEF,eAAO,MAAM,sBAAsB,KAAK,CAAC;AACzC,eAAO,MAAM,kBAAkB,MAAM,CAAC;AAEtC,MAAM,MAAM,qBAAqB,GAAG;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,EAAE,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAoBF,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,QAAQ,EAClB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,aAAa,CAmBf;AAED,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,QAAQ,EAClB,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,aAAa,CAaf;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,GAAG,aAAa,CAI9E;AAOD,0EAA0E;AAC1E,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,qBAAqB,GAC5B,oBAAoB,CAuBtB"}
1
+ {"version":3,"file":"query-builder.d.ts","sourceRoot":"","sources":["../src/query-builder.ts"],"names":[],"mappings":"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"}