@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/query-builder.js
CHANGED
|
@@ -14,17 +14,346 @@ import { buildEmbedSelectFragment } from './embed.js';
|
|
|
14
14
|
export { quoteIdent };
|
|
15
15
|
export const DEFAULT_PAGE_SIZE = 50;
|
|
16
16
|
export const MAX_PAGE_SIZE = 200;
|
|
17
|
+
const SCALAR_OP_SQL = {
|
|
18
|
+
eq: '=',
|
|
19
|
+
neq: '<>',
|
|
20
|
+
gt: '>',
|
|
21
|
+
gte: '>=',
|
|
22
|
+
lt: '<',
|
|
23
|
+
lte: '<=',
|
|
24
|
+
like: 'LIKE',
|
|
25
|
+
ilike: 'ILIKE',
|
|
26
|
+
};
|
|
27
|
+
const IS_KEYWORD_SQL = {
|
|
28
|
+
null: 'NULL',
|
|
29
|
+
notnull: 'NOT NULL',
|
|
30
|
+
true: 'TRUE',
|
|
31
|
+
false: 'FALSE',
|
|
32
|
+
};
|
|
33
|
+
/** Wildcard mapping for LIKE/ILIKE: a literal `*` in the pattern maps to SQL
|
|
34
|
+
* `%`. Plain linear string replacement — no regular expression (avoids ReDoS,
|
|
35
|
+
* per the CodeQL `js/polynomial-redos` precedent). */
|
|
36
|
+
function toLikePattern(value) {
|
|
37
|
+
return value.split('*').join('%');
|
|
38
|
+
}
|
|
39
|
+
/** Reduce a `format_type`-style `dataType` to its base scalar type name, or
|
|
40
|
+
* `null` when it is an array (`text[]`) — arrays are not scalar `LIKE` /
|
|
41
|
+
* boolean targets. Lower-cases, drops a trailing length/precision modifier
|
|
42
|
+
* (`character varying(255)` -> `character varying`), and trims. No regex
|
|
43
|
+
* (linear scan), per the CodeQL `js/polynomial-redos` precedent. */
|
|
44
|
+
function baseScalarType(dataType) {
|
|
45
|
+
const lower = dataType.trim().toLowerCase();
|
|
46
|
+
if (lower.includes('['))
|
|
47
|
+
return null; // any array spelling, e.g. text[]
|
|
48
|
+
const paren = lower.indexOf('(');
|
|
49
|
+
return (paren === -1 ? lower : lower.slice(0, paren)).trim();
|
|
50
|
+
}
|
|
51
|
+
/** Base scalar types that accept `LIKE` / `ILIKE`. Judged by the underlying
|
|
52
|
+
* PostgreSQL type, not the widget — a `varchar` surfaced as an `enum-select`
|
|
53
|
+
* still accepts `ilike` (Kozou v1.0 issue #76). Exact-match on the normalized
|
|
54
|
+
* base type so array spellings (`text[]`) are excluded. */
|
|
55
|
+
const TEXT_LIKE_BASE_TYPES = new Set([
|
|
56
|
+
'text',
|
|
57
|
+
'character varying',
|
|
58
|
+
'varchar',
|
|
59
|
+
'character',
|
|
60
|
+
'char',
|
|
61
|
+
'bpchar',
|
|
62
|
+
'citext',
|
|
63
|
+
'name',
|
|
64
|
+
]);
|
|
65
|
+
function isTextLikeType(dataType) {
|
|
66
|
+
const base = baseScalarType(dataType);
|
|
67
|
+
return base !== null && TEXT_LIKE_BASE_TYPES.has(base);
|
|
68
|
+
}
|
|
69
|
+
/** A boolean column — the only type for which `is.true` / `is.false` is valid
|
|
70
|
+
* (a `boolean[]` array is excluded). */
|
|
71
|
+
function isBooleanType(dataType) {
|
|
72
|
+
const base = baseScalarType(dataType);
|
|
73
|
+
return base === 'boolean' || base === 'bool';
|
|
74
|
+
}
|
|
75
|
+
/** Inclusive [min, max] range for each integer width, used to reject values
|
|
76
|
+
* that parse as integers but overflow the column type at execution. */
|
|
77
|
+
const INTEGER_BOUNDS = {
|
|
78
|
+
smallint: [-32768n, 32767n],
|
|
79
|
+
int2: [-32768n, 32767n],
|
|
80
|
+
integer: [-2147483648n, 2147483647n],
|
|
81
|
+
int: [-2147483648n, 2147483647n],
|
|
82
|
+
int4: [-2147483648n, 2147483647n],
|
|
83
|
+
bigint: [-9223372036854775808n, 9223372036854775807n],
|
|
84
|
+
int8: [-9223372036854775808n, 9223372036854775807n],
|
|
85
|
+
};
|
|
86
|
+
const DECIMAL_BASE_TYPES = new Set([
|
|
87
|
+
'numeric',
|
|
88
|
+
'decimal',
|
|
89
|
+
'real',
|
|
90
|
+
'double precision',
|
|
91
|
+
'float',
|
|
92
|
+
'float4',
|
|
93
|
+
'float8',
|
|
94
|
+
]);
|
|
95
|
+
const BOOLEAN_LITERALS = new Set([
|
|
96
|
+
'true',
|
|
97
|
+
'false',
|
|
98
|
+
't',
|
|
99
|
+
'f',
|
|
100
|
+
'yes',
|
|
101
|
+
'no',
|
|
102
|
+
'y',
|
|
103
|
+
'n',
|
|
104
|
+
'on',
|
|
105
|
+
'off',
|
|
106
|
+
'1',
|
|
107
|
+
'0',
|
|
108
|
+
]);
|
|
109
|
+
/** A plain base-10 integer literal (optional sign, then digits). A manual
|
|
110
|
+
* scan — no regex — so it rejects the `0x`/`0b`/`0o` and exponent forms that
|
|
111
|
+
* JavaScript's `Number` tolerates but a PostgreSQL integer column does not. */
|
|
112
|
+
function isPlainInteger(s) {
|
|
113
|
+
let i = 0;
|
|
114
|
+
if (s[0] === '+' || s[0] === '-')
|
|
115
|
+
i = 1;
|
|
116
|
+
if (i === s.length)
|
|
117
|
+
return false; // sign only / empty
|
|
118
|
+
for (; i < s.length; i++) {
|
|
119
|
+
if (s[i] < '0' || s[i] > '9')
|
|
120
|
+
return false;
|
|
121
|
+
}
|
|
122
|
+
return true;
|
|
123
|
+
}
|
|
124
|
+
/** A lexical decimal literal: optional sign, an integer and/or fractional
|
|
125
|
+
* part (at least one digit overall), and an optional exponent. A manual scan
|
|
126
|
+
* (no regex) that validates *syntax only* — it does not coerce through JS
|
|
127
|
+
* `Number`, so arbitrary-precision PostgreSQL `numeric` values (hundreds of
|
|
128
|
+
* digits, magnitudes beyond JS range) are accepted, while `abc`, `0x10`, and
|
|
129
|
+
* `NaN`/`Infinity` are rejected. Range / precision are checked separately
|
|
130
|
+
* (see `decimalFitsRange`). */
|
|
131
|
+
function isLexicalDecimal(s) {
|
|
132
|
+
let i = 0;
|
|
133
|
+
const n = s.length;
|
|
134
|
+
if (i < n && (s[i] === '+' || s[i] === '-'))
|
|
135
|
+
i++;
|
|
136
|
+
let digits = 0;
|
|
137
|
+
while (i < n && s[i] >= '0' && s[i] <= '9') {
|
|
138
|
+
i++;
|
|
139
|
+
digits++;
|
|
140
|
+
}
|
|
141
|
+
if (i < n && s[i] === '.') {
|
|
142
|
+
i++;
|
|
143
|
+
while (i < n && s[i] >= '0' && s[i] <= '9') {
|
|
144
|
+
i++;
|
|
145
|
+
digits++;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
if (digits === 0)
|
|
149
|
+
return false; // need at least one digit somewhere
|
|
150
|
+
if (i < n && (s[i] === 'e' || s[i] === 'E')) {
|
|
151
|
+
i++;
|
|
152
|
+
if (i < n && (s[i] === '+' || s[i] === '-'))
|
|
153
|
+
i++;
|
|
154
|
+
let expDigits = 0;
|
|
155
|
+
while (i < n && s[i] >= '0' && s[i] <= '9') {
|
|
156
|
+
i++;
|
|
157
|
+
expDigits++;
|
|
158
|
+
}
|
|
159
|
+
if (expDigits === 0)
|
|
160
|
+
return false;
|
|
161
|
+
}
|
|
162
|
+
return i === n; // the whole string was consumed
|
|
163
|
+
}
|
|
164
|
+
/** Parse a `numeric(p,s)` / `numeric(p)` type modifier out of a `format_type`
|
|
165
|
+
* string, or `null` when the type carries none (arbitrary-precision numeric).
|
|
166
|
+
* Linear scan / split — no regex (CodeQL `js/polynomial-redos` precedent). */
|
|
167
|
+
function numericTypmod(dataType) {
|
|
168
|
+
const open = dataType.indexOf('(');
|
|
169
|
+
if (open === -1)
|
|
170
|
+
return null;
|
|
171
|
+
const close = dataType.indexOf(')', open + 1);
|
|
172
|
+
if (close === -1)
|
|
173
|
+
return null;
|
|
174
|
+
const parts = dataType.slice(open + 1, close).split(',');
|
|
175
|
+
const precision = Number.parseInt(parts[0].trim(), 10);
|
|
176
|
+
if (!Number.isInteger(precision))
|
|
177
|
+
return null;
|
|
178
|
+
const scale = parts.length > 1 ? Number.parseInt(parts[1].trim(), 10) : 0;
|
|
179
|
+
if (!Number.isInteger(scale))
|
|
180
|
+
return null;
|
|
181
|
+
return { precision, scale };
|
|
182
|
+
}
|
|
183
|
+
/** Number of decimal digits of a non-negative BigInt (`0n` -> 1). */
|
|
184
|
+
function bigIntDigits(n) {
|
|
185
|
+
return n === 0n ? 1 : n.toString().length;
|
|
186
|
+
}
|
|
187
|
+
/** Whether a lexically-valid decimal fits `numeric(precision, scale)`.
|
|
188
|
+
* PostgreSQL rounds the value to `scale` fractional digits, then requires the
|
|
189
|
+
* result to fit in `precision` total significant digits — i.e. the value
|
|
190
|
+
* scaled to an integer in units of `10^-scale` must have at most `precision`
|
|
191
|
+
* digits. Done with BigInt so rounding carry (`9999999999.995` ->
|
|
192
|
+
* `10000000000.00` on `numeric(12,2)`) is exact and arbitrary-precision values
|
|
193
|
+
* are never lost. A huge exponent is handled without materialising `10^exp`. */
|
|
194
|
+
function numericFitsTypmod(value, precision, scale) {
|
|
195
|
+
let s = value.trim();
|
|
196
|
+
if (s[0] === '+' || s[0] === '-')
|
|
197
|
+
s = s.slice(1);
|
|
198
|
+
let eIdx = s.indexOf('e');
|
|
199
|
+
if (eIdx === -1)
|
|
200
|
+
eIdx = s.indexOf('E');
|
|
201
|
+
let exp = 0;
|
|
202
|
+
if (eIdx !== -1) {
|
|
203
|
+
exp = Number.parseInt(s.slice(eIdx + 1), 10);
|
|
204
|
+
s = s.slice(0, eIdx);
|
|
205
|
+
}
|
|
206
|
+
const dot = s.indexOf('.');
|
|
207
|
+
const intPart = dot === -1 ? s : s.slice(0, dot);
|
|
208
|
+
const fracPart = dot === -1 ? '' : s.slice(dot + 1);
|
|
209
|
+
const d = intPart + fracPart === '' ? 0n : BigInt(intPart + fracPart);
|
|
210
|
+
if (d === 0n)
|
|
211
|
+
return true; // zero fits any numeric(p, s)
|
|
212
|
+
// value = d * 10^(exp - fracPart.length); the rounded scaled integer is
|
|
213
|
+
// R = round(value * 10^scale) = round(d * 10^j), and we need it to have at
|
|
214
|
+
// most `precision` digits.
|
|
215
|
+
const j = exp - fracPart.length + scale;
|
|
216
|
+
if (j >= 0) {
|
|
217
|
+
// d * 10^j has exactly bigIntDigits(d) + j digits — no exponentiation.
|
|
218
|
+
return bigIntDigits(d) + j <= precision;
|
|
219
|
+
}
|
|
220
|
+
const drop = -j;
|
|
221
|
+
// Dropping more digits than d has rounds the magnitude to 0 or 1 — always fits.
|
|
222
|
+
if (drop > bigIntDigits(d))
|
|
223
|
+
return true;
|
|
224
|
+
const pow = 10n ** BigInt(drop); // drop <= digit count, so this is bounded
|
|
225
|
+
const q = d / pow;
|
|
226
|
+
const rem = d % pow;
|
|
227
|
+
const r = rem * 2n >= pow ? q + 1n : q; // round half away from zero (PostgreSQL)
|
|
228
|
+
return bigIntDigits(r) <= precision;
|
|
229
|
+
}
|
|
230
|
+
/** Whether a lexically-valid decimal is genuinely zero — all mantissa digits
|
|
231
|
+
* are zero (`0`, `0.0`, `0e5`) — rather than a nonzero value that merely
|
|
232
|
+
* rounds to zero. Scans the mantissa only, not the exponent. */
|
|
233
|
+
function isLexicalZero(value) {
|
|
234
|
+
let end = value.indexOf('e');
|
|
235
|
+
if (end === -1)
|
|
236
|
+
end = value.indexOf('E');
|
|
237
|
+
if (end === -1)
|
|
238
|
+
end = value.length;
|
|
239
|
+
for (let i = 0; i < end; i++) {
|
|
240
|
+
if (value[i] >= '1' && value[i] <= '9')
|
|
241
|
+
return false;
|
|
242
|
+
}
|
|
243
|
+
return true;
|
|
244
|
+
}
|
|
245
|
+
/** Whether a lexically-valid decimal is representable by a PostgreSQL float
|
|
246
|
+
* type. PostgreSQL rejects both overflow (magnitude above the type maximum)
|
|
247
|
+
* and underflow (a nonzero magnitude that rounds to zero in the type). `real`
|
|
248
|
+
* is IEEE single precision, so round through `Math.fround` — it maps an
|
|
249
|
+
* overflow to `Infinity` and an underflow to `0`; `double precision` is IEEE
|
|
250
|
+
* double, which JS `Number` models exactly. */
|
|
251
|
+
function floatFits(value, single) {
|
|
252
|
+
const n = single ? Math.fround(Number(value)) : Number(value);
|
|
253
|
+
if (!Number.isFinite(n))
|
|
254
|
+
return false; // overflow -> Infinity
|
|
255
|
+
return n !== 0 || isLexicalZero(value); // nonzero input rounding to 0 = underflow
|
|
256
|
+
}
|
|
257
|
+
/** Whether a lexically-valid decimal fits the decimal/float column's range.
|
|
258
|
+
* `numeric(p,s)`: see `numericFitsTypmod` (rounded to `scale`, must fit in `p`
|
|
259
|
+
* total digits); without a typmod, precision is unlimited. `real` /
|
|
260
|
+
* `double precision`: must be within the type's representable range. */
|
|
261
|
+
function decimalFitsRange(base, dataType, value) {
|
|
262
|
+
if (base === 'real' || base === 'float4')
|
|
263
|
+
return floatFits(value, true);
|
|
264
|
+
if (base === 'double precision' || base === 'float8' || base === 'float') {
|
|
265
|
+
return floatFits(value, false);
|
|
266
|
+
}
|
|
267
|
+
const typmod = numericTypmod(dataType);
|
|
268
|
+
if (typmod === null)
|
|
269
|
+
return true; // arbitrary precision — no precision bound
|
|
270
|
+
return numericFitsTypmod(value, typmod.precision, typmod.scale);
|
|
271
|
+
}
|
|
272
|
+
/** Whether a string filter value parses as the column's type, for the types
|
|
273
|
+
* where a bad value would otherwise surface only at execution as a 500:
|
|
274
|
+
* integer family (exact, with width range), decimal/float family (lexical
|
|
275
|
+
* syntax plus range/precision, Kozou v1.0 issue #81), and boolean. Other
|
|
276
|
+
* types (uuid / date / json / ...) are not pre-checked and fall through to
|
|
277
|
+
* PostgreSQL.
|
|
278
|
+
*
|
|
279
|
+
* Decimal syntax is validated without coercing through JS `Number` (so an
|
|
280
|
+
* arbitrary-precision `numeric` is not false-rejected); range / precision is
|
|
281
|
+
* then checked from the type modifier (`numeric(p,s)`) or the float range. */
|
|
282
|
+
function valueFitsType(base, dataType, value) {
|
|
283
|
+
const trimmed = value.trim();
|
|
284
|
+
if (trimmed === '')
|
|
285
|
+
return false;
|
|
286
|
+
const bounds = INTEGER_BOUNDS[base];
|
|
287
|
+
if (bounds !== undefined) {
|
|
288
|
+
if (!isPlainInteger(trimmed))
|
|
289
|
+
return false;
|
|
290
|
+
const n = BigInt(trimmed);
|
|
291
|
+
return n >= bounds[0] && n <= bounds[1];
|
|
292
|
+
}
|
|
293
|
+
if (DECIMAL_BASE_TYPES.has(base)) {
|
|
294
|
+
if (!isLexicalDecimal(trimmed))
|
|
295
|
+
return false;
|
|
296
|
+
return decimalFitsRange(base, dataType, trimmed);
|
|
297
|
+
}
|
|
298
|
+
if (base === 'boolean' || base === 'bool') {
|
|
299
|
+
return BOOLEAN_LITERALS.has(trimmed.toLowerCase());
|
|
300
|
+
}
|
|
301
|
+
return true;
|
|
302
|
+
}
|
|
303
|
+
/**
|
|
304
|
+
* Reject a filter value that cannot parse as the column's type *before* the
|
|
305
|
+
* query runs (Kozou v1.0 issue #76). Limited to numeric-family and boolean
|
|
306
|
+
* columns — the common cases that otherwise raise a PostgreSQL data error
|
|
307
|
+
* (a 500) at execution. The check is tied to the bound filter value, so a
|
|
308
|
+
* 400 here is unambiguously client-caused (no server/view error is masked).
|
|
309
|
+
*/
|
|
310
|
+
function assertFilterValueParsable(filter, column, resource) {
|
|
311
|
+
if (filter.op === 'is')
|
|
312
|
+
return; // fixed keyword clause, no bound value
|
|
313
|
+
const base = baseScalarType(column.dataType);
|
|
314
|
+
if (base === null)
|
|
315
|
+
return; // array etc. — not value-checked here
|
|
316
|
+
const values = filter.op === 'in' ? filter.values : [filter.value];
|
|
317
|
+
for (const value of values) {
|
|
318
|
+
if (!valueFitsType(base, column.dataType, value)) {
|
|
319
|
+
throw badRequest(`Filter value "${value}" is not valid for column "${filter.column}" (${column.dataType}) ` +
|
|
320
|
+
`on resource "${resource.name}".`);
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
/**
|
|
325
|
+
* Reject statically-knowable operator/column-type mismatches with a 400 before
|
|
326
|
+
* the query runs (Kozou v1.0 issue #76): `like`/`ilike` need a text-like
|
|
327
|
+
* column, and `is.true`/`is.false` need a boolean column. Value-format
|
|
328
|
+
* mismatches that only surface at execution (e.g. `eq.abc` on a numeric
|
|
329
|
+
* column) are mapped to 400 by the handler's error classifier instead.
|
|
330
|
+
*/
|
|
331
|
+
function assertFilterTypeCompatible(filter, column, resource) {
|
|
332
|
+
if ((filter.op === 'like' || filter.op === 'ilike') && !isTextLikeType(column.dataType)) {
|
|
333
|
+
throw badRequest(`Operator "${filter.op}" requires a text-like column; "${filter.column}" on resource ` +
|
|
334
|
+
`"${resource.name}" is ${column.dataType}.`);
|
|
335
|
+
}
|
|
336
|
+
if (filter.op === 'is' &&
|
|
337
|
+
(filter.keyword === 'true' || filter.keyword === 'false') &&
|
|
338
|
+
!isBooleanType(column.dataType)) {
|
|
339
|
+
throw badRequest(`Filter "is.${filter.keyword}" requires a boolean column; "${filter.column}" on resource ` +
|
|
340
|
+
`"${resource.name}" is ${column.dataType}.`);
|
|
341
|
+
}
|
|
342
|
+
}
|
|
17
343
|
function selectColumns(resource) {
|
|
18
344
|
if (resource.columns.length === 0)
|
|
19
345
|
return '*';
|
|
20
346
|
return resource.columns.map((c) => quoteIdent(c.name)).join(', ');
|
|
21
347
|
}
|
|
22
|
-
/** Columns that free-text search targets: text-like widgets
|
|
23
|
-
* enum / numeric columns are excluded (an
|
|
24
|
-
* errors or is meaningless)
|
|
348
|
+
/** Columns that free-text search targets: text-like widgets whose underlying
|
|
349
|
+
* type is also text-like. uuid / enum / numeric columns are excluded (an
|
|
350
|
+
* `ILIKE` against them either errors or is meaningless), as are text-widget
|
|
351
|
+
* columns whose real type is an array / domain / other non-text scalar — the
|
|
352
|
+
* base-type guard keeps `?search=` from emitting an ILIKE that PostgreSQL
|
|
353
|
+
* rejects (Kozou v1.0 issue #76). */
|
|
25
354
|
function searchableColumns(resource) {
|
|
26
355
|
return resource.columns
|
|
27
|
-
.filter((c) => c.widget === 'text' || c.widget === 'textarea')
|
|
356
|
+
.filter((c) => (c.widget === 'text' || c.widget === 'textarea') && isTextLikeType(c.dataType))
|
|
28
357
|
.map((c) => c.name);
|
|
29
358
|
}
|
|
30
359
|
function clampPageSize(pageSize) {
|
|
@@ -39,17 +368,41 @@ function clampPage(page) {
|
|
|
39
368
|
return Math.floor(page);
|
|
40
369
|
}
|
|
41
370
|
export function buildListQuery(resource, params) {
|
|
42
|
-
const
|
|
371
|
+
const columnsByName = new Map(resource.columns.map((c) => [c.name, c]));
|
|
43
372
|
const whereParts = [];
|
|
44
373
|
const whereValues = [];
|
|
45
374
|
const nextParam = () => `$${whereValues.length + 1}`;
|
|
46
|
-
//
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
375
|
+
// Horizontal filters. The column allowlist is the resource's own columns;
|
|
376
|
+
// every supplied value is a bound parameter ($n). `is` emits a fixed
|
|
377
|
+
// keyword clause (no value bound).
|
|
378
|
+
for (const filter of params.filters ?? []) {
|
|
379
|
+
const columnDef = columnsByName.get(filter.column);
|
|
380
|
+
if (columnDef === undefined) {
|
|
381
|
+
throw badRequest(`Unknown filter column "${filter.column}" on resource "${resource.name}".`);
|
|
382
|
+
}
|
|
383
|
+
assertFilterTypeCompatible(filter, columnDef, resource);
|
|
384
|
+
assertFilterValueParsable(filter, columnDef, resource);
|
|
385
|
+
const column = quoteIdent(filter.column);
|
|
386
|
+
if (filter.op === 'in') {
|
|
387
|
+
if (filter.values.length === 0) {
|
|
388
|
+
throw badRequest(`Filter "${filter.column}=in.()" needs at least one value.`);
|
|
389
|
+
}
|
|
390
|
+
const placeholders = [];
|
|
391
|
+
for (const value of filter.values) {
|
|
392
|
+
placeholders.push(nextParam());
|
|
393
|
+
whereValues.push(value);
|
|
394
|
+
}
|
|
395
|
+
whereParts.push(`${column} IN (${placeholders.join(', ')})`);
|
|
396
|
+
}
|
|
397
|
+
else if (filter.op === 'is') {
|
|
398
|
+
whereParts.push(`${column} IS ${IS_KEYWORD_SQL[filter.keyword]}`);
|
|
399
|
+
}
|
|
400
|
+
else {
|
|
401
|
+
whereParts.push(`${column} ${SCALAR_OP_SQL[filter.op]} ${nextParam()}`);
|
|
402
|
+
whereValues.push(filter.op === 'like' || filter.op === 'ilike'
|
|
403
|
+
? toLikePattern(filter.value)
|
|
404
|
+
: filter.value);
|
|
50
405
|
}
|
|
51
|
-
whereParts.push(`${quoteIdent(key)} = ${nextParam()}`);
|
|
52
|
-
whereValues.push(value);
|
|
53
406
|
}
|
|
54
407
|
// Free-text search across text-like columns.
|
|
55
408
|
const search = params.search?.trim();
|
|
@@ -68,7 +421,7 @@ export function buildListQuery(resource, params) {
|
|
|
68
421
|
const orderParts = [];
|
|
69
422
|
if (params.sort && params.sort.length > 0) {
|
|
70
423
|
for (const s of params.sort) {
|
|
71
|
-
if (!
|
|
424
|
+
if (!columnsByName.has(s.field)) {
|
|
72
425
|
throw badRequest(`Unknown sort column "${s.field}" on resource "${resource.name}".`);
|
|
73
426
|
}
|
|
74
427
|
orderParts.push(`${quoteIdent(s.field)} ${s.order === 'desc' ? 'DESC' : 'ASC'}`);
|
|
@@ -104,23 +457,58 @@ export function buildListQuery(resource, params) {
|
|
|
104
457
|
pageSize,
|
|
105
458
|
};
|
|
106
459
|
}
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
460
|
+
/** Primary key columns for an item-by-id operation. A PK-less resource (a
|
|
461
|
+
* view, or a table without a primary key) cannot be addressed by id. */
|
|
462
|
+
function primaryKey(resource) {
|
|
463
|
+
if (resource.primaryKey.length === 0) {
|
|
464
|
+
throw badRequest(`Resource "${resource.name}" has no primary key; fetch/update/delete by id is unavailable.`);
|
|
465
|
+
}
|
|
466
|
+
return resource.primaryKey;
|
|
467
|
+
}
|
|
468
|
+
/**
|
|
469
|
+
* Resolve the bound key values from an item id segment.
|
|
470
|
+
*
|
|
471
|
+
* A single-column PK takes the id verbatim, so the value may itself contain a
|
|
472
|
+
* comma. A composite PK splits the segment on commas into one component per
|
|
473
|
+
* key column, in `primaryKey` declaration order; the component count must
|
|
474
|
+
* match the key arity (else 400).
|
|
475
|
+
*
|
|
476
|
+
* Limitation: with a composite key, a key *value* cannot contain a comma (the
|
|
477
|
+
* segment is split after URL-decoding). Single-column keys are unaffected.
|
|
478
|
+
*/
|
|
479
|
+
function resolveKeyValues(resource, id, keyColumns) {
|
|
480
|
+
if (keyColumns.length === 1)
|
|
481
|
+
return [id];
|
|
482
|
+
const parts = id.split(',');
|
|
483
|
+
if (parts.length !== keyColumns.length) {
|
|
484
|
+
throw badRequest(`Resource "${resource.name}" has a composite primary key (${keyColumns.join(', ')}); ` +
|
|
485
|
+
`expected ${keyColumns.length} comma-separated key components, got ${parts.length}.`);
|
|
110
486
|
}
|
|
111
|
-
|
|
487
|
+
return parts;
|
|
488
|
+
}
|
|
489
|
+
/** `pk0 = $start AND pk1 = $start+1 AND ...` for the given key columns. */
|
|
490
|
+
function keyWhereClause(keyColumns, startParam) {
|
|
491
|
+
return keyColumns.map((c, i) => `${quoteIdent(c)} = $${startParam + i}`).join(' AND ');
|
|
492
|
+
}
|
|
493
|
+
export function buildGetQuery(resource, id, embed) {
|
|
494
|
+
const keyColumns = primaryKey(resource);
|
|
495
|
+
const keyValues = resolveKeyValues(resource, id, keyColumns);
|
|
112
496
|
const table = qualified(resource);
|
|
113
497
|
const embedSql = embed && embed.length > 0 ? buildEmbedSelectFragment(embed, table, { n: 0 }) : '';
|
|
114
|
-
const
|
|
115
|
-
|
|
498
|
+
const where = keyWhereClause(keyColumns, 1);
|
|
499
|
+
const text = `SELECT ${selectColumns(resource)}${embedSql} FROM ${table} WHERE ${where} LIMIT 1`;
|
|
500
|
+
return { text, values: keyValues };
|
|
116
501
|
}
|
|
117
502
|
export const DEFAULT_RELATION_LIMIT = 20;
|
|
118
503
|
export const MAX_RELATION_LIMIT = 100;
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
504
|
+
/** Primary-key columns for the relation-options (`as=options`) mode. The
|
|
505
|
+
* option `id` is built from the key, so a key-less resource (a view, or a
|
|
506
|
+
* table without a primary key) has no options to offer. */
|
|
507
|
+
function relationKeyColumns(resource) {
|
|
508
|
+
if (resource.primaryKey.length === 0) {
|
|
509
|
+
throw badRequest(`Resource "${resource.name}" has no primary key; relation options are unavailable.`);
|
|
122
510
|
}
|
|
123
|
-
return resource.primaryKey
|
|
511
|
+
return resource.primaryKey;
|
|
124
512
|
}
|
|
125
513
|
function assertKnownColumns(resource, keys) {
|
|
126
514
|
const columnNames = new Set(resource.columns.map((c) => c.name));
|
|
@@ -148,22 +536,25 @@ export function buildInsertQuery(resource, data) {
|
|
|
148
536
|
};
|
|
149
537
|
}
|
|
150
538
|
export function buildUpdateQuery(resource, id, data) {
|
|
151
|
-
const
|
|
539
|
+
const keyColumns = primaryKey(resource);
|
|
152
540
|
const keys = Object.keys(data);
|
|
153
541
|
if (keys.length === 0) {
|
|
154
542
|
throw badRequest(`No fields to update on resource "${resource.name}".`);
|
|
155
543
|
}
|
|
156
544
|
assertKnownColumns(resource, keys);
|
|
545
|
+
const keyValues = resolveKeyValues(resource, id, keyColumns);
|
|
157
546
|
const sets = keys.map((k, i) => `${quoteIdent(k)} = $${i + 1}`).join(', ');
|
|
158
|
-
const values = keys.map((k) => data[k]);
|
|
159
|
-
|
|
160
|
-
const text = `UPDATE ${qualified(resource)} SET ${sets} WHERE ${
|
|
547
|
+
const values = [...keys.map((k) => data[k]), ...keyValues];
|
|
548
|
+
const where = keyWhereClause(keyColumns, keys.length + 1);
|
|
549
|
+
const text = `UPDATE ${qualified(resource)} SET ${sets} WHERE ${where} RETURNING ${selectColumns(resource)}`;
|
|
161
550
|
return { text, values };
|
|
162
551
|
}
|
|
163
552
|
export function buildDeleteQuery(resource, id) {
|
|
164
|
-
const
|
|
165
|
-
const
|
|
166
|
-
|
|
553
|
+
const keyColumns = primaryKey(resource);
|
|
554
|
+
const keyValues = resolveKeyValues(resource, id, keyColumns);
|
|
555
|
+
const where = keyWhereClause(keyColumns, 1);
|
|
556
|
+
const text = `DELETE FROM ${qualified(resource)} WHERE ${where} RETURNING ${selectColumns(resource)}`;
|
|
557
|
+
return { text, values: keyValues };
|
|
167
558
|
}
|
|
168
559
|
function clampRelationLimit(limit) {
|
|
169
560
|
if (limit === undefined || !Number.isFinite(limit) || limit < 1)
|
|
@@ -172,8 +563,19 @@ function clampRelationLimit(limit) {
|
|
|
172
563
|
}
|
|
173
564
|
/** Lightweight `{ id, label }` lookup used by relation-select widgets. */
|
|
174
565
|
export function buildRelationOptionsQuery(resource, params) {
|
|
175
|
-
const
|
|
566
|
+
const keyColumns = relationKeyColumns(resource);
|
|
176
567
|
assertKnownColumns(resource, [params.labelField, ...params.searchFields]);
|
|
568
|
+
// `searchFields` is request-controlled (`?as=options&fields=`); each is
|
|
569
|
+
// ILIKE'd below, so reject a non-text-like field with a 400 rather than
|
|
570
|
+
// letting PostgreSQL raise an operator error (a 500) at execution
|
|
571
|
+
// (Kozou v1.0 issue #76).
|
|
572
|
+
const columnsByName = new Map(resource.columns.map((c) => [c.name, c]));
|
|
573
|
+
for (const field of params.searchFields) {
|
|
574
|
+
const column = columnsByName.get(field);
|
|
575
|
+
if (column !== undefined && !isTextLikeType(column.dataType)) {
|
|
576
|
+
throw badRequest(`Relation search field "${field}" must be a text-like column; it is ${column.dataType}.`);
|
|
577
|
+
}
|
|
578
|
+
}
|
|
177
579
|
const values = [];
|
|
178
580
|
let where = '';
|
|
179
581
|
const q = params.query?.trim();
|
|
@@ -184,10 +586,17 @@ export function buildRelationOptionsQuery(resource, params) {
|
|
|
184
586
|
}
|
|
185
587
|
values.push(clampRelationLimit(params.limit));
|
|
186
588
|
const limitParam = `$${values.length}`;
|
|
187
|
-
const
|
|
188
|
-
?
|
|
189
|
-
:
|
|
589
|
+
const selectFields = keyColumns.includes(params.labelField)
|
|
590
|
+
? keyColumns
|
|
591
|
+
: [...keyColumns, params.labelField];
|
|
592
|
+
const cols = selectFields.map(quoteIdent).join(', ');
|
|
190
593
|
const text = `SELECT ${cols} FROM ${qualified(resource)}${where} LIMIT ${limitParam}`;
|
|
191
|
-
return {
|
|
594
|
+
return {
|
|
595
|
+
text,
|
|
596
|
+
values,
|
|
597
|
+
primaryKey: keyColumns[0],
|
|
598
|
+
primaryKeys: keyColumns,
|
|
599
|
+
labelField: params.labelField,
|
|
600
|
+
};
|
|
192
601
|
}
|
|
193
602
|
//# sourceMappingURL=query-builder.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query-builder.js","sourceRoot":"","sources":["../src/query-builder.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"query-builder.js","sourceRoot":"","sources":["../src/query-builder.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kozou/api",
|
|
3
|
-
"version": "
|
|
4
|
-
"description": "Kozou's own REST layer: serves table CRUD / VIEW reads / OpenAPI from a SchemaContext
|
|
3
|
+
"version": "1.1.0",
|
|
4
|
+
"description": "Kozou's own REST layer: serves table CRUD / VIEW reads / OpenAPI from a SchemaContext.",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"repository": {
|
|
7
7
|
"type": "git",
|
|
@@ -32,12 +32,12 @@
|
|
|
32
32
|
"dependencies": {
|
|
33
33
|
"jose": "^6.2.3",
|
|
34
34
|
"pg": "^8.13.0",
|
|
35
|
-
"@kozou/core": "
|
|
35
|
+
"@kozou/core": "1.1.0"
|
|
36
36
|
},
|
|
37
37
|
"devDependencies": {
|
|
38
38
|
"@types/pg": "^8.11.0",
|
|
39
|
-
"@kozou/
|
|
40
|
-
"@kozou/
|
|
39
|
+
"@kozou/test-utils": "0.0.0",
|
|
40
|
+
"@kozou/introspect": "1.1.0"
|
|
41
41
|
},
|
|
42
42
|
"scripts": {
|
|
43
43
|
"typecheck": "tsc -p tsconfig.test.json",
|