@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/README.md +158 -28
- package/dist/embed.d.ts.map +1 -1
- package/dist/embed.js +22 -8
- package/dist/embed.js.map +1 -1
- package/dist/handler.d.ts +4 -0
- package/dist/handler.d.ts.map +1 -1
- package/dist/handler.js +69 -5
- package/dist/handler.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -3
- package/dist/index.js.map +1 -1
- package/dist/openapi.d.ts.map +1 -1
- package/dist/openapi.js +317 -62
- package/dist/openapi.js.map +1 -1
- package/dist/query-builder.d.ts +31 -2
- package/dist/query-builder.d.ts.map +1 -1
- package/dist/query-builder.js +443 -34
- package/dist/query-builder.js.map +1 -1
- package/package.json +5 -5
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 = {
|
|
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
|
|
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(
|
|
46
|
-
|
|
47
|
-
|
|
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,
|
|
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
|
|
78
|
-
//
|
|
79
|
-
//
|
|
80
|
-
|
|
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
|
-
|
|
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
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
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
|
-
|
|
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
|
|
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:
|
|
327
|
+
parameters: collectionParams,
|
|
161
328
|
responses: {
|
|
162
|
-
'200':
|
|
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
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
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
|
-
|
|
214
|
-
|
|
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
|
|
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
|
}
|
package/dist/openapi.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openapi.js","sourceRoot":"","sources":["../src/openapi.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"openapi.js","sourceRoot":"","sources":["../src/openapi.ts"],"names":[],"mappings":"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"}
|
package/dist/query-builder.d.ts
CHANGED
|
@@ -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
|
-
/**
|
|
17
|
-
|
|
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":"
|
|
1
|
+
{"version":3,"file":"query-builder.d.ts","sourceRoot":"","sources":["../src/query-builder.ts"],"names":[],"mappings":"AAcA,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,+EAA+E;AAC/E,MAAM,MAAM,cAAc,GACtB,IAAI,GACJ,KAAK,GACL,IAAI,GACJ,KAAK,GACL,IAAI,GACJ,KAAK,GACL,MAAM,GACN,OAAO,GACP,IAAI,GACJ,IAAI,CAAC;AAET,qDAAqD;AACrD,MAAM,MAAM,oBAAoB,GAAG,OAAO,CAAC,cAAc,EAAE,IAAI,GAAG,IAAI,CAAC,CAAC;AAExE;8CAC8C;AAC9C,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,OAAO,CAAC;AAE9D;;0EAE0E;AAC1E,MAAM,MAAM,MAAM,GACd;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,oBAAoB,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAC3D;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,GAC9C;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,SAAS,CAAA;CAAE,CAAC;AAErD,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;mEAC+D;IAC/D,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,0EAA0E;IAC1E,KAAK,CAAC,EAAE,SAAS,EAAE,CAAC;CACrB,CAAC;AAgVF,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;AAiCF,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,eAAe,GACtB,cAAc,CAmGhB;AAyCD,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,QAAQ,EAClB,EAAE,EAAE,MAAM,EACV,KAAK,CAAC,EAAE,SAAS,EAAE,GAClB,aAAa,CASf;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;8DAC0D;IAC1D,UAAU,EAAE,MAAM,CAAC;IACnB;8EAC0E;IAC1E,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAuBF,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,CAcf;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,GAAG,aAAa,CAM9E;AAOD,0EAA0E;AAC1E,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,qBAAqB,GAC5B,oBAAoB,CA2CtB"}
|