@kozou/ui-core 1.7.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.
Files changed (59) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +40 -0
  3. package/dist/adapter/errors.d.ts +16 -0
  4. package/dist/adapter/errors.d.ts.map +1 -0
  5. package/dist/adapter/errors.js +19 -0
  6. package/dist/adapter/errors.js.map +1 -0
  7. package/dist/adapter/index.d.ts +8 -0
  8. package/dist/adapter/index.d.ts.map +1 -0
  9. package/dist/adapter/index.js +15 -0
  10. package/dist/adapter/index.js.map +1 -0
  11. package/dist/adapter/kozou-api.d.ts +35 -0
  12. package/dist/adapter/kozou-api.d.ts.map +1 -0
  13. package/dist/adapter/kozou-api.js +215 -0
  14. package/dist/adapter/kozou-api.js.map +1 -0
  15. package/dist/adapter/postgrest.d.ts +51 -0
  16. package/dist/adapter/postgrest.d.ts.map +1 -0
  17. package/dist/adapter/postgrest.js +343 -0
  18. package/dist/adapter/postgrest.js.map +1 -0
  19. package/dist/adapter/types.d.ts +6 -0
  20. package/dist/adapter/types.d.ts.map +1 -0
  21. package/dist/adapter/types.js +3 -0
  22. package/dist/adapter/types.js.map +1 -0
  23. package/dist/detail/format-cell.d.ts +7 -0
  24. package/dist/detail/format-cell.d.ts.map +1 -0
  25. package/dist/detail/format-cell.js +50 -0
  26. package/dist/detail/format-cell.js.map +1 -0
  27. package/dist/detail/resolve-fk-labels.d.ts +23 -0
  28. package/dist/detail/resolve-fk-labels.d.ts.map +1 -0
  29. package/dist/detail/resolve-fk-labels.js +118 -0
  30. package/dist/detail/resolve-fk-labels.js.map +1 -0
  31. package/dist/index.d.ts +17 -0
  32. package/dist/index.d.ts.map +1 -0
  33. package/dist/index.js +28 -0
  34. package/dist/index.js.map +1 -0
  35. package/dist/list/list-href.d.ts +21 -0
  36. package/dist/list/list-href.d.ts.map +1 -0
  37. package/dist/list/list-href.js +50 -0
  38. package/dist/list/list-href.js.map +1 -0
  39. package/dist/query/list-params.d.ts +18 -0
  40. package/dist/query/list-params.d.ts.map +1 -0
  41. package/dist/query/list-params.js +55 -0
  42. package/dist/query/list-params.js.map +1 -0
  43. package/dist/resource-id.d.ts +24 -0
  44. package/dist/resource-id.d.ts.map +1 -0
  45. package/dist/resource-id.js +58 -0
  46. package/dist/resource-id.js.map +1 -0
  47. package/dist/server/fk-row-cache.d.ts +27 -0
  48. package/dist/server/fk-row-cache.d.ts.map +1 -0
  49. package/dist/server/fk-row-cache.js +54 -0
  50. package/dist/server/fk-row-cache.js.map +1 -0
  51. package/dist/server/schema-cache.d.ts +22 -0
  52. package/dist/server/schema-cache.d.ts.map +1 -0
  53. package/dist/server/schema-cache.js +46 -0
  54. package/dist/server/schema-cache.js.map +1 -0
  55. package/dist/view/columns.d.ts +4 -0
  56. package/dist/view/columns.d.ts.map +1 -0
  57. package/dist/view/columns.js +22 -0
  58. package/dist/view/columns.js.map +1 -0
  59. package/package.json +41 -0
@@ -0,0 +1,343 @@
1
+ // PostgrestDataAdapter — DataAdapter implementation that speaks PostgREST 12+.
2
+ //
3
+ // Sub-step 6-D ships list() + get() + the shared request plumbing.
4
+ // Sub-step 6-E ships create() / update() / delete() / searchRelation().
5
+ //
6
+ // License-check note: this file is whitelisted in
7
+ // .github/workflows/license-check.yml so the class names below
8
+ // (PostgrestDataAdapter, PostgrestAdapterError, PostgrestAdapterOptions)
9
+ // do not trip the metadata-integrity grep. The file mentions PostgREST
10
+ // by name *only* to interoperate with the PostgREST HTTP surface; no
11
+ // PostgREST source code is bundled here.
12
+ import { AdapterError } from './errors.js';
13
+ const DEFAULT_PAGE_SIZE = 50;
14
+ const DEFAULT_SCHEMA = 'public';
15
+ const DEFAULT_PRIMARY_KEY = 'id';
16
+ const DEFAULT_RELATION_LIMIT = 20;
17
+ const OR_FILTER_KEY = '__or';
18
+ // The horizontal filter operators the in-house API list endpoint accepts.
19
+ // The REST surface this adapter targets shares the
20
+ // same `col=op.value` grammar natively, so an already-prefixed filter value
21
+ // is forwarded verbatim; a bare value defaults to equality for backward
22
+ // compatibility. Detection uses indexOf, not a regex (ReDoS-safe).
23
+ const FILTER_OPERATORS = new Set([
24
+ 'eq',
25
+ 'neq',
26
+ 'gt',
27
+ 'gte',
28
+ 'lt',
29
+ 'lte',
30
+ 'like',
31
+ 'ilike',
32
+ 'in',
33
+ 'is',
34
+ ]);
35
+ export class PostgrestAdapterError extends AdapterError {
36
+ constructor(init) {
37
+ super(init);
38
+ this.name = 'PostgrestAdapterError';
39
+ }
40
+ }
41
+ export class PostgrestDataAdapter {
42
+ baseUrl;
43
+ defaultSchema;
44
+ resolvePrimaryKey;
45
+ staticHeaders;
46
+ fetchImpl;
47
+ defaultPageSize;
48
+ constructor(opts) {
49
+ if (typeof opts.baseUrl !== 'string' || opts.baseUrl.length === 0) {
50
+ throw adapterConfigError('PostgrestDataAdapter: `baseUrl` is required.');
51
+ }
52
+ this.baseUrl = stripTrailingSlash(opts.baseUrl);
53
+ this.defaultSchema = opts.defaultSchema ?? DEFAULT_SCHEMA;
54
+ this.resolvePrimaryKey = makePrimaryKeyResolver(opts.primaryKey);
55
+ this.staticHeaders = { ...(opts.headers ?? {}) };
56
+ this.defaultPageSize = opts.defaultPageSize ?? DEFAULT_PAGE_SIZE;
57
+ const resolvedFetch = opts.fetch ?? globalThis.fetch;
58
+ if (typeof resolvedFetch !== 'function') {
59
+ throw adapterConfigError('PostgrestDataAdapter: a `fetch` implementation is required (none injected, none on globalThis).');
60
+ }
61
+ this.fetchImpl = resolvedFetch;
62
+ }
63
+ async list(resource, params) {
64
+ const { schema, table } = splitResource(resource, this.defaultSchema);
65
+ const pageSize = params.pageSize ?? this.defaultPageSize;
66
+ const page = params.page ?? 1;
67
+ const offset = (page - 1) * pageSize;
68
+ const query = new URLSearchParams();
69
+ appendFilters(query, params.filters);
70
+ appendOrder(query, params.sort);
71
+ query.set('limit', String(pageSize));
72
+ query.set('offset', String(offset));
73
+ const url = `${this.baseUrl}/${encodeURIComponent(table)}?${query.toString()}`;
74
+ const headers = {
75
+ ...this.staticHeaders,
76
+ Accept: 'application/json',
77
+ Prefer: 'count=exact',
78
+ };
79
+ addProfileHeader(headers, schema, this.defaultSchema, 'read');
80
+ const response = await this.send('GET', url, headers, undefined);
81
+ await assertOk(response, url);
82
+ const rows = (await readJson(response, url));
83
+ const total = parseContentRangeTotal(response.headers.get('content-range'), rows.length);
84
+ return { rows, total, page, pageSize };
85
+ }
86
+ async get(resource, id) {
87
+ const { schema, table } = splitResource(resource, this.defaultSchema);
88
+ const query = new URLSearchParams();
89
+ this.appendKeyEquals(query, resource, id);
90
+ query.set('limit', '1');
91
+ const url = `${this.baseUrl}/${encodeURIComponent(table)}?${query.toString()}`;
92
+ const headers = {
93
+ ...this.staticHeaders,
94
+ Accept: 'application/vnd.pgrst.object+json',
95
+ };
96
+ addProfileHeader(headers, schema, this.defaultSchema, 'read');
97
+ const response = await this.send('GET', url, headers, undefined);
98
+ await assertOk(response, url);
99
+ return (await readJson(response, url));
100
+ }
101
+ async create(resource, data) {
102
+ const { schema, table } = splitResource(resource, this.defaultSchema);
103
+ const url = `${this.baseUrl}/${encodeURIComponent(table)}`;
104
+ const headers = this.mutationHeaders(schema);
105
+ const response = await this.send('POST', url, headers, JSON.stringify(data));
106
+ await assertOk(response, url);
107
+ return (await readJson(response, url));
108
+ }
109
+ async update(resource, id, data) {
110
+ const { schema, table } = splitResource(resource, this.defaultSchema);
111
+ const query = new URLSearchParams();
112
+ this.appendKeyEquals(query, resource, id);
113
+ const url = `${this.baseUrl}/${encodeURIComponent(table)}?${query.toString()}`;
114
+ const headers = this.mutationHeaders(schema);
115
+ const response = await this.send('PATCH', url, headers, JSON.stringify(data));
116
+ await assertOk(response, url);
117
+ return (await readJson(response, url));
118
+ }
119
+ async delete(resource, id) {
120
+ const { schema, table } = splitResource(resource, this.defaultSchema);
121
+ const query = new URLSearchParams();
122
+ this.appendKeyEquals(query, resource, id);
123
+ const url = `${this.baseUrl}/${encodeURIComponent(table)}?${query.toString()}`;
124
+ const headers = { ...this.staticHeaders };
125
+ addProfileHeader(headers, schema, this.defaultSchema, 'write');
126
+ const response = await this.send('DELETE', url, headers, undefined);
127
+ await assertOk(response, url);
128
+ }
129
+ async searchRelation(resource, params) {
130
+ const { schema, table } = splitResource(resource, this.defaultSchema);
131
+ // The option id is the target's key: a scalar for a single-column key, an
132
+ // array of components — in key declaration order — for a composite key,
133
+ // so an option id is always a valid item id for the target.
134
+ const primaryKey = keyColumns(this.resolvePrimaryKey(resource));
135
+ const limit = params.limit ?? DEFAULT_RELATION_LIMIT;
136
+ const query = new URLSearchParams();
137
+ const selectFields = primaryKey.includes(params.labelField)
138
+ ? primaryKey
139
+ : [...primaryKey, params.labelField];
140
+ query.set('select', selectFields.join(','));
141
+ if (params.query.length > 0 && params.searchFields.length > 0) {
142
+ const orExpr = params.searchFields
143
+ .map((field) => `${field}.ilike.*${params.query}*`)
144
+ .join(',');
145
+ query.set('or', `(${orExpr})`);
146
+ }
147
+ query.set('limit', String(limit));
148
+ const url = `${this.baseUrl}/${encodeURIComponent(table)}?${query.toString()}`;
149
+ const headers = {
150
+ ...this.staticHeaders,
151
+ Accept: 'application/json',
152
+ };
153
+ addProfileHeader(headers, schema, this.defaultSchema, 'read');
154
+ const response = await this.send('GET', url, headers, undefined);
155
+ await assertOk(response, url);
156
+ const rows = (await readJson(response, url));
157
+ return rows.map((row) => ({
158
+ id: primaryKey.length === 1
159
+ ? row[primaryKey[0]]
160
+ : primaryKey.map((column) => row[column]),
161
+ label: String(row[params.labelField] ?? ''),
162
+ }));
163
+ }
164
+ /**
165
+ * Append the per-column equality filters that address a row by id. A
166
+ * composite key expands to `?col0=eq.v0&col1=eq.v1` in `primaryKey`
167
+ * declaration order; a single-column key keeps
168
+ * the `?col=eq.value` form. The id component count must match the key
169
+ * arity (else a config error, surfacing a wiring mismatch).
170
+ */
171
+ appendKeyEquals(query, resource, id) {
172
+ const columns = keyColumns(this.resolvePrimaryKey(resource));
173
+ const values = asResourceIdArray(id);
174
+ if (columns.length !== values.length) {
175
+ throw adapterConfigError(`PostgrestDataAdapter: resource "${resource}" has a ${columns.length}-column ` +
176
+ `primary key (${columns.join(', ')}) but ${values.length} id ` +
177
+ `component(s) were supplied.`);
178
+ }
179
+ columns.forEach((column, i) => {
180
+ query.set(column, `eq.${serializeFilterValue(values[i])}`);
181
+ });
182
+ }
183
+ mutationHeaders(schema) {
184
+ const headers = {
185
+ ...this.staticHeaders,
186
+ Accept: 'application/vnd.pgrst.object+json',
187
+ 'Content-Type': 'application/json',
188
+ Prefer: 'return=representation',
189
+ };
190
+ addProfileHeader(headers, schema, this.defaultSchema, 'write');
191
+ return headers;
192
+ }
193
+ async send(method, url, headers, body) {
194
+ try {
195
+ return await this.fetchImpl(url, { method, headers, body });
196
+ }
197
+ catch (cause) {
198
+ throw new PostgrestAdapterError({
199
+ message: `PostgrestDataAdapter: ${method} ${url} failed before reaching the server: ${cause.message}`,
200
+ status: 0,
201
+ url,
202
+ responseBody: null,
203
+ code: 'network',
204
+ });
205
+ }
206
+ }
207
+ }
208
+ function stripTrailingSlash(url) {
209
+ return url.endsWith('/') ? url.slice(0, -1) : url;
210
+ }
211
+ function makePrimaryKeyResolver(pk) {
212
+ if (pk === undefined)
213
+ return () => DEFAULT_PRIMARY_KEY;
214
+ if (typeof pk === 'function')
215
+ return pk;
216
+ return () => pk;
217
+ }
218
+ /** Normalize a resolver result to the ordered list of key columns. An empty
219
+ * list is rejected loudly: a key-less resource cannot be addressed by id —
220
+ * silently accepting it would, e.g., let a zero-column key match a
221
+ * zero-component id and emit an unfiltered (table-wide) mutation. */
222
+ function keyColumns(pk) {
223
+ const columns = Array.isArray(pk) ? pk : [pk];
224
+ if (columns.length === 0) {
225
+ throw adapterConfigError('PostgrestDataAdapter: the primaryKey resolver returned no key columns.');
226
+ }
227
+ return columns;
228
+ }
229
+ /** Normalize a ResourceId to the ordered list of key values. */
230
+ function asResourceIdArray(id) {
231
+ return Array.isArray(id) ? id : [id];
232
+ }
233
+ function splitResource(resource, defaultSchema) {
234
+ const idx = resource.indexOf('.');
235
+ if (idx === -1) {
236
+ return { schema: defaultSchema, table: resource };
237
+ }
238
+ return {
239
+ schema: resource.slice(0, idx),
240
+ table: resource.slice(idx + 1),
241
+ };
242
+ }
243
+ function appendFilters(query, filters) {
244
+ if (!filters)
245
+ return;
246
+ for (const [key, value] of Object.entries(filters)) {
247
+ if (value === undefined)
248
+ continue;
249
+ if (key === OR_FILTER_KEY) {
250
+ query.set('or', `(${serializeOrExpression(value)})`);
251
+ continue;
252
+ }
253
+ // A value already carrying a known operator prefix (`gt.5`, `in.(a,b)`,
254
+ // `is.null`, ...) is the REST surface's native grammar, so it is
255
+ // forwarded verbatim; a bare value defaults to equality (kept consistent
256
+ // with the in-house API adapter).
257
+ if (typeof value === 'string' && hasOperatorPrefix(value)) {
258
+ query.set(key, value);
259
+ continue;
260
+ }
261
+ query.set(key, `eq.${serializeFilterValue(value)}`);
262
+ }
263
+ }
264
+ /** Whether a filter value begins with a `<op>.` prefix from the known
265
+ * operator set. Split on the first `.` via indexOf (no regex, ReDoS-safe). */
266
+ function hasOperatorPrefix(value) {
267
+ const dot = value.indexOf('.');
268
+ return dot > 0 && FILTER_OPERATORS.has(value.slice(0, dot));
269
+ }
270
+ function serializeOrExpression(value) {
271
+ if (typeof value === 'string')
272
+ return value;
273
+ if (Array.isArray(value))
274
+ return value.map(String).join(',');
275
+ return String(value);
276
+ }
277
+ function serializeFilterValue(value) {
278
+ if (value === null)
279
+ return 'null';
280
+ if (typeof value === 'string')
281
+ return value;
282
+ return String(value);
283
+ }
284
+ function appendOrder(query, sort) {
285
+ if (!sort || sort.length === 0)
286
+ return;
287
+ query.set('order', sort.map((s) => `${s.field}.${s.order}`).join(','));
288
+ }
289
+ function addProfileHeader(headers, schema, defaultSchema, direction) {
290
+ if (schema === defaultSchema)
291
+ return;
292
+ headers[direction === 'read' ? 'Accept-Profile' : 'Content-Profile'] = schema;
293
+ }
294
+ function parseContentRangeTotal(header, fallback) {
295
+ if (!header)
296
+ return fallback;
297
+ const match = header.match(/\/(\d+)$/);
298
+ if (!match)
299
+ return fallback;
300
+ return Number(match[1]);
301
+ }
302
+ async function readJson(response, url) {
303
+ try {
304
+ return await response.json();
305
+ }
306
+ catch (cause) {
307
+ throw new PostgrestAdapterError({
308
+ message: `PostgrestDataAdapter: failed to parse JSON response from ${url}: ${cause.message}`,
309
+ status: response.status,
310
+ url,
311
+ responseBody: null,
312
+ code: 'parse',
313
+ });
314
+ }
315
+ }
316
+ async function assertOk(response, url) {
317
+ if (response.ok)
318
+ return;
319
+ let body = null;
320
+ try {
321
+ body = await response.text();
322
+ }
323
+ catch {
324
+ body = null;
325
+ }
326
+ throw new PostgrestAdapterError({
327
+ message: `PostgrestDataAdapter: request to ${url} failed with status ${response.status}`,
328
+ status: response.status,
329
+ url,
330
+ responseBody: body,
331
+ code: 'http',
332
+ });
333
+ }
334
+ function adapterConfigError(message) {
335
+ return new PostgrestAdapterError({
336
+ message,
337
+ status: 0,
338
+ url: '',
339
+ responseBody: null,
340
+ code: 'config',
341
+ });
342
+ }
343
+ //# sourceMappingURL=postgrest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"postgrest.js","sourceRoot":"","sources":["../../src/adapter/postgrest.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export type FetchLike = (input: string, init?: {
2
+ method?: string;
3
+ headers?: Record<string, string>;
4
+ body?: string;
5
+ }) => Promise<Response>;
6
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/adapter/types.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,SAAS,GAAG,CACtB,KAAK,EAAE,MAAM,EACb,IAAI,CAAC,EAAE;IACL,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,KACE,OAAO,CAAC,QAAQ,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ // Common types shared across all DataAdapter implementations.
2
+ export {};
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/adapter/types.ts"],"names":[],"mappings":"AAAA,8DAA8D"}
@@ -0,0 +1,7 @@
1
+ import type { WidgetType } from '@kozou/core';
2
+ export interface FormatCellInput {
3
+ value: unknown;
4
+ widget: WidgetType;
5
+ }
6
+ export declare function formatCellValue(input: FormatCellInput): string;
7
+ //# sourceMappingURL=format-cell.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format-cell.d.ts","sourceRoot":"","sources":["../../src/detail/format-cell.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,UAAU,CAAC;CACpB;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,CA8B9D"}
@@ -0,0 +1,50 @@
1
+ // Format a single cell value for the detail / list views.
2
+ // Picks the formatter from the column's WidgetType so booleans
3
+ // render as Yes/No, dates as YYYY-MM-DD, JSON as pretty-printed
4
+ // text, and unknown widgets fall back to String(value).
5
+ export function formatCellValue(input) {
6
+ const { value, widget } = input;
7
+ if (value === null || value === undefined)
8
+ return '';
9
+ switch (widget) {
10
+ case 'boolean':
11
+ return value ? 'Yes' : 'No';
12
+ case 'date':
13
+ return formatDate(value);
14
+ case 'datetime':
15
+ return formatDateTime(value);
16
+ case 'json':
17
+ if (typeof value === 'object') {
18
+ try {
19
+ return JSON.stringify(value, null, 2);
20
+ }
21
+ catch {
22
+ return String(value);
23
+ }
24
+ }
25
+ return String(value);
26
+ default:
27
+ if (typeof value === 'object') {
28
+ try {
29
+ return JSON.stringify(value);
30
+ }
31
+ catch {
32
+ return String(value);
33
+ }
34
+ }
35
+ return String(value);
36
+ }
37
+ }
38
+ function formatDate(value) {
39
+ const d = new Date(value);
40
+ if (Number.isNaN(d.getTime()))
41
+ return String(value);
42
+ return d.toISOString().slice(0, 10);
43
+ }
44
+ function formatDateTime(value) {
45
+ const d = new Date(value);
46
+ if (Number.isNaN(d.getTime()))
47
+ return String(value);
48
+ return d.toISOString().replace('T', ' ').slice(0, 19);
49
+ }
50
+ //# sourceMappingURL=format-cell.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format-cell.js","sourceRoot":"","sources":["../../src/detail/format-cell.ts"],"names":[],"mappings":"AAAA,0DAA0D;AAC1D,+DAA+D;AAC/D,gEAAgE;AAChE,wDAAwD;AASxD,MAAM,UAAU,eAAe,CAAC,KAAsB;IACpD,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;IAChC,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,EAAE,CAAC;IAErD,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,SAAS;YACZ,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;QAC9B,KAAK,MAAM;YACT,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC;QAC3B,KAAK,UAAU;YACb,OAAO,cAAc,CAAC,KAAK,CAAC,CAAC;QAC/B,KAAK,MAAM;YACT,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBAC9B,IAAI,CAAC;oBACH,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;gBACxC,CAAC;gBAAC,MAAM,CAAC;oBACP,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;gBACvB,CAAC;YACH,CAAC;YACD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;QACvB;YACE,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBAC9B,IAAI,CAAC;oBACH,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;gBAC/B,CAAC;gBAAC,MAAM,CAAC;oBACP,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;gBACvB,CAAC;YACH,CAAC;YACD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC;AACH,CAAC;AAED,SAAS,UAAU,CAAC,KAAc;IAChC,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,KAA+B,CAAC,CAAC;IACpD,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;QAAE,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACpD,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACtC,CAAC;AAED,SAAS,cAAc,CAAC,KAAc;IACpC,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,KAA+B,CAAC,CAAC;IACpD,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;QAAE,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACpD,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACxD,CAAC"}
@@ -0,0 +1,23 @@
1
+ import type { SchemaContext, TableContext } from '@kozou/core';
2
+ import type { FkRowLoader } from '../server/fk-row-cache.js';
3
+ export interface ResolvedFkLabel {
4
+ /** Raw FK value as stored on the source row (typically a UUID
5
+ * string but can be a numeric surrogate key). For a composite
6
+ * relation, the encoded id segment (each component
7
+ * percent-encoded, comma-joined) — ready for the detail link. */
8
+ value: string | number;
9
+ /** Label projected from `referencedTable.displayField`, or `null`
10
+ * when the target row / displayField is missing. */
11
+ label: string | null;
12
+ /** `schema.table` of the referenced row, kept on the result so the
13
+ * template can build a future link without re-deriving it. */
14
+ referencedQualifiedName: string;
15
+ }
16
+ export interface ResolveFkLabelsArgs {
17
+ table: TableContext;
18
+ row: Record<string, unknown>;
19
+ schema: SchemaContext;
20
+ loadRow: FkRowLoader;
21
+ }
22
+ export declare function resolveFkLabels(args: ResolveFkLabelsArgs): Promise<Record<string, ResolvedFkLabel>>;
23
+ //# sourceMappingURL=resolve-fk-labels.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve-fk-labels.d.ts","sourceRoot":"","sources":["../../src/detail/resolve-fk-labels.ts"],"names":[],"mappings":"AA0BA,OAAO,KAAK,EAAmB,aAAa,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAGhF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAE7D,MAAM,WAAW,eAAe;IAC9B;;;sEAGkE;IAClE,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB;yDACqD;IACrD,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB;mEAC+D;IAC/D,uBAAuB,EAAE,MAAM,CAAC;CACjC;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,YAAY,CAAC;IACpB,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC7B,MAAM,EAAE,aAAa,CAAC;IACtB,OAAO,EAAE,WAAW,CAAC;CACtB;AAED,wBAAsB,eAAe,CACnC,IAAI,EAAE,mBAAmB,GACxB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC,CAiD1C"}
@@ -0,0 +1,118 @@
1
+ // Resolve foreign-key columns on a detail row to the referenced
2
+ // row's displayField label.
3
+ //
4
+ // Pure function (modulo the injected `loadRow`) so the unit test can
5
+ // drive every branch without spinning up a DataAdapter. The detail
6
+ // route loader wires `loadRow` to a FkRowCache-backed call into the
7
+ // real DataAdapter. Tracks FK label resolution.
8
+ //
9
+ // Behaviour:
10
+ // - Skip FK columns whose row value is `null` / `undefined`.
11
+ // - Look up the referenced table inside the SchemaContext. If it is
12
+ // absent (orphaned FK, schema drift) emit an entry with `label: null`
13
+ // so the template can fall back to the raw value.
14
+ // - If the referenced table has no `displayField` heuristic, or the
15
+ // loaded row does not carry that field, emit `label: null` similarly.
16
+ // - A composite (multi-column) relation resolves through the target's
17
+ // primary key: its entry is keyed by the relation's first column and
18
+ // carries the encoded composite id as `value` (the detail-link
19
+ // segment). It is skipped — raw values render as-is — when the
20
+ // relation does not cover the target's full primary key (the row
21
+ // cannot be addressed by id then), when any component is missing,
22
+ // or when another relation claims the same first column (resolving
23
+ // both would race on the shared key).
24
+ // - Issue every lookup in parallel via `Promise.all`. The cache layer
25
+ // is responsible for dedupe of repeat keys within a render.
26
+ import { encodeResourceId } from '../resource-id.js';
27
+ export async function resolveFkLabels(args) {
28
+ const { table, row, schema, loadRow } = args;
29
+ const out = {};
30
+ const lookups = [];
31
+ // Resolved labels are keyed by column name. Two relations can claim the
32
+ // same column — e.g. composite keys sharing a leading tenant_id, or a
33
+ // column that is both a single FK and a composite component — and the
34
+ // parallel lookups would then overwrite each other nondeterministically.
35
+ // A composite relation therefore only resolves when its first column is
36
+ // claimed by no other relation; the single-column behaviour is unchanged.
37
+ const claims = new Map();
38
+ for (const relation of table.relations) {
39
+ const first = (relation.fields ?? [relation.field])[0];
40
+ claims.set(first, (claims.get(first) ?? 0) + 1);
41
+ }
42
+ for (const relation of table.relations) {
43
+ const fields = relation.fields ?? [relation.field];
44
+ if (fields.length > 1) {
45
+ if ((claims.get(fields[0]) ?? 0) > 1)
46
+ continue;
47
+ const lookup = compositeLookup(fields, relation, row, schema, loadRow, out);
48
+ if (lookup !== null)
49
+ lookups.push(lookup);
50
+ continue;
51
+ }
52
+ const rawValue = row[relation.field];
53
+ if (rawValue === null || rawValue === undefined)
54
+ continue;
55
+ if (typeof rawValue !== 'string' && typeof rawValue !== 'number')
56
+ continue;
57
+ const value = rawValue;
58
+ const referencedQualifiedName = `${relation.references.schema}.${relation.references.table}`;
59
+ const referencedTable = schema.tables.find((t) => t.qualifiedName === referencedQualifiedName);
60
+ if (referencedTable === undefined) {
61
+ out[relation.field] = { value, label: null, referencedQualifiedName };
62
+ continue;
63
+ }
64
+ lookups.push(loadRow(referencedQualifiedName, value).then((targetRow) => {
65
+ const label = projectLabel(referencedTable, targetRow);
66
+ out[relation.field] = { value, label, referencedQualifiedName };
67
+ }));
68
+ }
69
+ await Promise.all(lookups);
70
+ return out;
71
+ }
72
+ /** Build the lookup for a composite relation, or return `null` when it
73
+ * cannot be resolved (the raw values then render as-is). The target row is
74
+ * fetched by primary key, so the relation must reference the target's full
75
+ * primary key (in any column order) and every component must be present.
76
+ * The resolved entry is keyed by the relation's first column. */
77
+ function compositeLookup(fields, relation, row, schema, loadRow, out) {
78
+ const referencedQualifiedName = `${relation.references.schema}.${relation.references.table}`;
79
+ const referencedTable = schema.tables.find((t) => t.qualifiedName === referencedQualifiedName);
80
+ if (referencedTable === undefined)
81
+ return null;
82
+ const refColumns = relation.references.columns ?? [relation.references.column];
83
+ if (refColumns.length !== fields.length)
84
+ return null;
85
+ const primaryKey = referencedTable.primaryKey;
86
+ if (primaryKey.length !== refColumns.length ||
87
+ !primaryKey.every((column) => refColumns.includes(column))) {
88
+ return null;
89
+ }
90
+ // Assemble the item id in the target's primary-key declaration order; the
91
+ // referencing columns may list the key in a different order.
92
+ const components = [];
93
+ for (const keyColumn of primaryKey) {
94
+ const raw = row[fields[refColumns.indexOf(keyColumn)]];
95
+ if (raw === null || raw === undefined)
96
+ return null;
97
+ if (typeof raw !== 'string' && typeof raw !== 'number')
98
+ return null;
99
+ components.push(raw);
100
+ }
101
+ const value = encodeResourceId(components);
102
+ return loadRow(referencedQualifiedName, components).then((targetRow) => {
103
+ const label = projectLabel(referencedTable, targetRow);
104
+ out[fields[0]] = { value, label, referencedQualifiedName };
105
+ });
106
+ }
107
+ function projectLabel(referencedTable, targetRow) {
108
+ if (targetRow === null)
109
+ return null;
110
+ const display = referencedTable.displayField;
111
+ if (display === null)
112
+ return null;
113
+ const value = targetRow[display];
114
+ if (value === null || value === undefined)
115
+ return null;
116
+ return String(value);
117
+ }
118
+ //# sourceMappingURL=resolve-fk-labels.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve-fk-labels.js","sourceRoot":"","sources":["../../src/detail/resolve-fk-labels.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ export type { FetchLike, AdapterErrorCode, AdapterErrorInit, PostgrestAdapterOptions, PostgrestPrimaryKeyResolver, KozouApiAdapterOptions, } from './adapter/index.js';
2
+ export { AdapterError, PostgrestAdapterError, PostgrestDataAdapter, KozouApiAdapterError, KozouApiDataAdapter, } from './adapter/index.js';
3
+ export { rowIdSegment, encodeResourceId, parseResourceId, } from './resource-id.js';
4
+ export { DEFAULT_PAGE_SIZE, parseListParamsFromUrl, } from './query/list-params.js';
5
+ export type { ParseListParamsInput, ParsedListParams, } from './query/list-params.js';
6
+ export { buildHref, buildSortHref, formatCell } from './list/list-href.js';
7
+ export type { ListViewParams } from './list/list-href.js';
8
+ export { pickViewDisplayColumns, pickViewSearchFields, } from './view/columns.js';
9
+ export { formatCellValue } from './detail/format-cell.js';
10
+ export type { FormatCellInput } from './detail/format-cell.js';
11
+ export { resolveFkLabels } from './detail/resolve-fk-labels.js';
12
+ export type { ResolvedFkLabel, ResolveFkLabelsArgs, } from './detail/resolve-fk-labels.js';
13
+ export { SchemaCache } from './server/schema-cache.js';
14
+ export type { SchemaLoader, Clock, SchemaCacheOptions, } from './server/schema-cache.js';
15
+ export { FkRowCache } from './server/fk-row-cache.js';
16
+ export type { FkRowCacheOptions, FkRowLoader, } from './server/fk-row-cache.js';
17
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAcA,YAAY,EACV,SAAS,EACT,gBAAgB,EAChB,gBAAgB,EAChB,uBAAuB,EACvB,2BAA2B,EAC3B,sBAAsB,GACvB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,YAAY,EACZ,qBAAqB,EACrB,oBAAoB,EACpB,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,eAAe,GAChB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EACL,iBAAiB,EACjB,sBAAsB,GACvB,MAAM,wBAAwB,CAAC;AAChC,YAAY,EACV,oBAAoB,EACpB,gBAAgB,GACjB,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC3E,YAAY,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAG1D,OAAO,EACL,sBAAsB,EACtB,oBAAoB,GACrB,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,YAAY,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,YAAY,EACV,eAAe,EACf,mBAAmB,GACpB,MAAM,+BAA+B,CAAC;AAGvC,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,YAAY,EACV,YAAY,EACZ,KAAK,EACL,kBAAkB,GACnB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,YAAY,EACV,iBAAiB,EACjB,WAAW,GACZ,MAAM,0BAA0B,CAAC"}