@truto/ginger 2.0.1 → 2.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 +90 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/joins.d.ts +93 -0
- package/dist/joins.d.ts.map +1 -0
- package/dist/joins.js +507 -0
- package/dist/joins.js.map +1 -0
- package/dist/pagination.d.ts +1 -1
- package/dist/pagination.d.ts.map +1 -1
- package/dist/pagination.js +10 -12
- package/dist/pagination.js.map +1 -1
- package/dist/service.d.ts +8 -1
- package/dist/service.d.ts.map +1 -1
- package/dist/service.js +125 -37
- package/dist/service.js.map +1 -1
- package/dist/sql-builder.d.ts +33 -22
- package/dist/sql-builder.d.ts.map +1 -1
- package/dist/sql-builder.js +103 -67
- package/dist/sql-builder.js.map +1 -1
- package/dist/types.d.ts +58 -8
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/joins.js
ADDED
|
@@ -0,0 +1,507 @@
|
|
|
1
|
+
import { compileFilter, sql } from '@truto/sqlite-builder';
|
|
2
|
+
import { CursorError, SqlBuilderError } from './errors.js';
|
|
3
|
+
/** Keys that must never be used as dynamic object property names. */
|
|
4
|
+
const UNSAFE_OBJECT_KEYS = new Set(['__proto__', 'constructor', 'prototype']);
|
|
5
|
+
/** True when `key` must not be used for dynamic assignment on a plain object. */
|
|
6
|
+
export function isUnsafeObjectKey(key) {
|
|
7
|
+
return UNSAFE_OBJECT_KEYS.has(key);
|
|
8
|
+
}
|
|
9
|
+
function safeSet(target, key, value) {
|
|
10
|
+
if (isUnsafeObjectKey(key))
|
|
11
|
+
return false;
|
|
12
|
+
target[key] = value;
|
|
13
|
+
return true;
|
|
14
|
+
}
|
|
15
|
+
export function getLocalJoinColumn(joinDef) {
|
|
16
|
+
const col = joinDef.localColumn ?? joinDef.localPk;
|
|
17
|
+
if (!col) {
|
|
18
|
+
throw new SqlBuilderError('JoinDef requires localColumn or localPk for the parent-table FK column');
|
|
19
|
+
}
|
|
20
|
+
return col;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Parse an include map into a normalized tree. `true` enables a join with
|
|
24
|
+
* default columns; an object enables the join when it has `select` and/or
|
|
25
|
+
* nested children.
|
|
26
|
+
*/
|
|
27
|
+
export function normalizeInclude(include) {
|
|
28
|
+
if (!include)
|
|
29
|
+
return {};
|
|
30
|
+
const out = {};
|
|
31
|
+
for (const [key, value] of Object.entries(include)) {
|
|
32
|
+
if (isUnsafeObjectKey(key))
|
|
33
|
+
continue;
|
|
34
|
+
const node = normalizeIncludeValue(value);
|
|
35
|
+
if (node?.enabled)
|
|
36
|
+
out[key] = node;
|
|
37
|
+
}
|
|
38
|
+
return out;
|
|
39
|
+
}
|
|
40
|
+
function normalizeIncludeValue(value) {
|
|
41
|
+
if (value === undefined || value === false)
|
|
42
|
+
return null;
|
|
43
|
+
if (value === true) {
|
|
44
|
+
return { enabled: true, select: undefined, children: {} };
|
|
45
|
+
}
|
|
46
|
+
const obj = value;
|
|
47
|
+
const select = Array.isArray(obj.select)
|
|
48
|
+
? obj.select
|
|
49
|
+
: undefined;
|
|
50
|
+
const children = {};
|
|
51
|
+
for (const [key, childVal] of Object.entries(obj)) {
|
|
52
|
+
if (key === 'select' || isUnsafeObjectKey(key))
|
|
53
|
+
continue;
|
|
54
|
+
const child = normalizeIncludeValue(childVal);
|
|
55
|
+
if (child?.enabled)
|
|
56
|
+
children[key] = child;
|
|
57
|
+
}
|
|
58
|
+
const enabled = select !== undefined || Object.keys(children).length > 0;
|
|
59
|
+
if (!enabled)
|
|
60
|
+
return null;
|
|
61
|
+
return { enabled: true, select, children };
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Flatten the include tree into an ordered list of joins (parents before
|
|
65
|
+
* children). Also auto-includes joins required by `expose` paths.
|
|
66
|
+
*/
|
|
67
|
+
export function resolveActiveJoins(rootJoins, include, expose, baseTable, joinColumnOverrides, reservedColumnNames) {
|
|
68
|
+
if (!rootJoins)
|
|
69
|
+
return [];
|
|
70
|
+
const resolved = [];
|
|
71
|
+
const neededPaths = new Set();
|
|
72
|
+
for (const exp of expose ?? []) {
|
|
73
|
+
const { joinPath } = parseQualifiedPath(exp.from);
|
|
74
|
+
if (joinPath)
|
|
75
|
+
neededPaths.add(joinPath);
|
|
76
|
+
}
|
|
77
|
+
function walk(joins, nodes, parentTable, parentPath) {
|
|
78
|
+
for (const [name, node] of Object.entries(nodes)) {
|
|
79
|
+
if (!node.enabled)
|
|
80
|
+
continue;
|
|
81
|
+
const joinDef = joins[name];
|
|
82
|
+
if (!joinDef)
|
|
83
|
+
continue;
|
|
84
|
+
const path = parentPath ? `${parentPath}.${name}` : name;
|
|
85
|
+
neededPaths.add(path);
|
|
86
|
+
const columnPrefix = joinDef.remote.alias || name;
|
|
87
|
+
const override = joinColumnOverrides?.[path] ?? joinColumnOverrides?.[name];
|
|
88
|
+
const select = override ?? node.select ?? joinDef.remote.select;
|
|
89
|
+
resolved.push({
|
|
90
|
+
path,
|
|
91
|
+
name,
|
|
92
|
+
joinDef,
|
|
93
|
+
parentTable,
|
|
94
|
+
localColumn: getLocalJoinColumn(joinDef),
|
|
95
|
+
sqlTable: joinDef.remote.table,
|
|
96
|
+
columnPrefix,
|
|
97
|
+
select,
|
|
98
|
+
columnAliases: {},
|
|
99
|
+
});
|
|
100
|
+
if (joinDef.joins && Object.keys(node.children).length > 0) {
|
|
101
|
+
walk(joinDef.joins, node.children, joinDef.remote.table, path);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
walk(rootJoins, include, baseTable, '');
|
|
106
|
+
// Auto-include ancestor joins for expose-only paths
|
|
107
|
+
for (const path of neededPaths) {
|
|
108
|
+
ensurePathIncluded(path, rootJoins, include, resolved, baseTable, joinColumnOverrides);
|
|
109
|
+
}
|
|
110
|
+
const deduped = dedupeResolvedJoins(resolved);
|
|
111
|
+
const reserved = new Set(reservedColumnNames ?? []);
|
|
112
|
+
for (const exp of expose ?? []) {
|
|
113
|
+
reserved.add(exp.as);
|
|
114
|
+
}
|
|
115
|
+
assignJoinColumnAliases(deduped, reserved);
|
|
116
|
+
return deduped;
|
|
117
|
+
}
|
|
118
|
+
function ensurePathIncluded(path, rootJoins, include, resolved, baseTable, joinColumnOverrides) {
|
|
119
|
+
const segments = path.split('.');
|
|
120
|
+
let joins = rootJoins;
|
|
121
|
+
let parentTable = baseTable;
|
|
122
|
+
let parentPath = '';
|
|
123
|
+
for (let i = 0; i < segments.length; i++) {
|
|
124
|
+
const name = segments[i];
|
|
125
|
+
const subPath = parentPath ? `${parentPath}.${name}` : name;
|
|
126
|
+
if (!resolved.some((r) => r.path === subPath)) {
|
|
127
|
+
const joinDef = joins[name];
|
|
128
|
+
if (!joinDef)
|
|
129
|
+
break;
|
|
130
|
+
const node = getIncludeNode(include, subPath);
|
|
131
|
+
const columnPrefix = joinDef.remote.alias || name;
|
|
132
|
+
const override = joinColumnOverrides?.[subPath] ?? joinColumnOverrides?.[name];
|
|
133
|
+
const select = override ?? node?.select ?? joinDef.remote.select;
|
|
134
|
+
resolved.push({
|
|
135
|
+
path: subPath,
|
|
136
|
+
name,
|
|
137
|
+
joinDef,
|
|
138
|
+
parentTable,
|
|
139
|
+
localColumn: getLocalJoinColumn(joinDef),
|
|
140
|
+
sqlTable: joinDef.remote.table,
|
|
141
|
+
columnPrefix,
|
|
142
|
+
select,
|
|
143
|
+
columnAliases: {},
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
const joinDef = joins[name];
|
|
147
|
+
if (!joinDef)
|
|
148
|
+
break;
|
|
149
|
+
parentTable = joinDef.remote.table;
|
|
150
|
+
parentPath = subPath;
|
|
151
|
+
joins = joinDef.joins ?? {};
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
function getIncludeNode(include, path) {
|
|
155
|
+
const segments = path.split('.');
|
|
156
|
+
let nodes = include;
|
|
157
|
+
let current;
|
|
158
|
+
for (const seg of segments) {
|
|
159
|
+
current = nodes[seg];
|
|
160
|
+
if (!current)
|
|
161
|
+
return undefined;
|
|
162
|
+
nodes = current.children;
|
|
163
|
+
}
|
|
164
|
+
return current;
|
|
165
|
+
}
|
|
166
|
+
function dedupeResolvedJoins(joins) {
|
|
167
|
+
const seen = new Set();
|
|
168
|
+
const out = [];
|
|
169
|
+
for (const j of joins) {
|
|
170
|
+
if (seen.has(j.path))
|
|
171
|
+
continue;
|
|
172
|
+
seen.add(j.path);
|
|
173
|
+
out.push(j);
|
|
174
|
+
}
|
|
175
|
+
// Parents must appear before children; preserve first-seen order within a depth.
|
|
176
|
+
return out.sort((a, b) => {
|
|
177
|
+
const depthA = a.path.split('.').length;
|
|
178
|
+
const depthB = b.path.split('.').length;
|
|
179
|
+
if (depthA !== depthB)
|
|
180
|
+
return depthA - depthB;
|
|
181
|
+
return joins.indexOf(a) - joins.indexOf(b);
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
/** Parse `$join.path.column` or `$table.column` qualified paths. */
|
|
185
|
+
export function parseQualifiedPath(qualified) {
|
|
186
|
+
if (!qualified.startsWith('$')) {
|
|
187
|
+
throw new SqlBuilderError(`Qualified path must start with '$': ${qualified}`);
|
|
188
|
+
}
|
|
189
|
+
const body = qualified.slice(1);
|
|
190
|
+
const lastDot = body.lastIndexOf('.');
|
|
191
|
+
if (lastDot === -1) {
|
|
192
|
+
return { joinPath: '', column: body, isTableQualified: true };
|
|
193
|
+
}
|
|
194
|
+
return {
|
|
195
|
+
joinPath: body.slice(0, lastDot),
|
|
196
|
+
column: body.slice(lastDot + 1),
|
|
197
|
+
isTableQualified: false,
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
/** Build LEFT JOIN fragments for all resolved joins in order. */
|
|
201
|
+
export function buildJoinFragments(resolved) {
|
|
202
|
+
const fragments = [];
|
|
203
|
+
for (const j of resolved) {
|
|
204
|
+
if (j.joinDef.through) {
|
|
205
|
+
const { through, remote } = j.joinDef;
|
|
206
|
+
const localCol = j.localColumn;
|
|
207
|
+
const throughJoin = sql `LEFT JOIN ${sql.ident(through.table)} ON ${sql.ident(`${j.parentTable}.${localCol}`)} = ${sql.ident(`${through.table}.${through.from}`)}`;
|
|
208
|
+
const remoteJoin = sql `LEFT JOIN ${sql.ident(remote.table)} ON ${sql.ident(`${through.table}.${through.to}`)} = ${sql.ident(`${remote.table}.${remote.pk}`)}`;
|
|
209
|
+
const parts = [throughJoin, remoteJoin];
|
|
210
|
+
if (j.joinDef.where && Object.keys(j.joinDef.where).length > 0) {
|
|
211
|
+
parts.push(sql `AND ${compileFilter(j.joinDef.where)}`);
|
|
212
|
+
}
|
|
213
|
+
fragments.push(sql.join(parts, ' '));
|
|
214
|
+
}
|
|
215
|
+
else {
|
|
216
|
+
const parts = [
|
|
217
|
+
sql `LEFT JOIN ${sql.ident(j.sqlTable)} ON ${sql.ident(`${j.parentTable}.${j.localColumn}`)} = ${sql.ident(`${j.sqlTable}.${j.joinDef.remote.pk}`)}`,
|
|
218
|
+
];
|
|
219
|
+
if (j.joinDef.where && Object.keys(j.joinDef.where).length > 0) {
|
|
220
|
+
parts.push(sql `AND ${compileFilter(j.joinDef.where)}`);
|
|
221
|
+
}
|
|
222
|
+
fragments.push(sql.join(parts, ' '));
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
return fragments;
|
|
226
|
+
}
|
|
227
|
+
/** Legacy flat SQL alias (`prefix_col`) — default for join columns. */
|
|
228
|
+
export function legacyJoinColumnAlias(columnPrefix, column) {
|
|
229
|
+
return `${columnPrefix}_${column}`;
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* Assign collision-safe flat SQL aliases on each resolved join.
|
|
233
|
+
*
|
|
234
|
+
* Uses the legacy `prefix_col` form unless that name is already taken by a
|
|
235
|
+
* base-table column, an expose alias, or another join column — then falls
|
|
236
|
+
* back to `prefix__col`.
|
|
237
|
+
*/
|
|
238
|
+
export function assignJoinColumnAliases(resolved, reserved) {
|
|
239
|
+
const taken = new Set(reserved);
|
|
240
|
+
for (const j of resolved) {
|
|
241
|
+
const columnAliases = {};
|
|
242
|
+
for (const col of j.select) {
|
|
243
|
+
const legacy = legacyJoinColumnAlias(j.columnPrefix, col);
|
|
244
|
+
const alias = taken.has(legacy) ? `${j.columnPrefix}__${col}` : legacy;
|
|
245
|
+
columnAliases[col] = alias;
|
|
246
|
+
taken.add(alias);
|
|
247
|
+
}
|
|
248
|
+
j.columnAliases = columnAliases;
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
/** Flat SQL alias for a column on a resolved join. */
|
|
252
|
+
export function flatAliasForJoinColumn(join, column) {
|
|
253
|
+
return (join.columnAliases[column] ??
|
|
254
|
+
legacyJoinColumnAlias(join.columnPrefix, column));
|
|
255
|
+
}
|
|
256
|
+
/** SELECT column fragments for resolved joins. */
|
|
257
|
+
export function buildJoinSelectColumns(resolved) {
|
|
258
|
+
const columns = [];
|
|
259
|
+
for (const j of resolved) {
|
|
260
|
+
for (const col of j.select) {
|
|
261
|
+
columns.push(sql `${sql.ident(`${j.sqlTable}.${col}`)} as ${sql.ident(flatAliasForJoinColumn(j, col))}`);
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
return columns;
|
|
265
|
+
}
|
|
266
|
+
/** SELECT fragments for exposed top-level columns. */
|
|
267
|
+
export function buildExposeSelectColumns(expose, resolved, _baseTable) {
|
|
268
|
+
const columns = [];
|
|
269
|
+
for (const exp of expose) {
|
|
270
|
+
const { joinPath, column, isTableQualified } = parseQualifiedPath(exp.from);
|
|
271
|
+
if (isTableQualified && !joinPath) {
|
|
272
|
+
const parts = exp.from.slice(1).split('.');
|
|
273
|
+
const table = parts[0];
|
|
274
|
+
const col = parts[1] ?? column;
|
|
275
|
+
columns.push(sql `${sql.ident(`${table}.${col}`)} as ${sql.ident(exp.as)}`);
|
|
276
|
+
continue;
|
|
277
|
+
}
|
|
278
|
+
const match = resolved.find((r) => r.path === joinPath);
|
|
279
|
+
const table = match?.sqlTable ?? joinPath.split('.').pop() ?? joinPath;
|
|
280
|
+
columns.push(sql `${sql.ident(`${table}.${column}`)} as ${sql.ident(exp.as)}`);
|
|
281
|
+
}
|
|
282
|
+
return columns;
|
|
283
|
+
}
|
|
284
|
+
/**
|
|
285
|
+
* Map of SQL table name → join path for compileFilter `$alias` blocks.
|
|
286
|
+
* Also maps expose aliases to their source table.
|
|
287
|
+
*/
|
|
288
|
+
export function buildJoinFilterContext(resolved, expose, baseTable) {
|
|
289
|
+
const tableToPath = new Map();
|
|
290
|
+
for (const j of resolved) {
|
|
291
|
+
tableToPath.set(j.sqlTable, j.path);
|
|
292
|
+
}
|
|
293
|
+
const exposeColumns = new Map();
|
|
294
|
+
for (const exp of expose ?? []) {
|
|
295
|
+
const { joinPath, column, isTableQualified } = parseQualifiedPath(exp.from);
|
|
296
|
+
if (isTableQualified && !joinPath) {
|
|
297
|
+
const parts = exp.from.slice(1).split('.');
|
|
298
|
+
exposeColumns.set(exp.as, {
|
|
299
|
+
table: parts[0] ?? baseTable,
|
|
300
|
+
column: parts[1] ?? column,
|
|
301
|
+
});
|
|
302
|
+
}
|
|
303
|
+
else {
|
|
304
|
+
const match = resolved.find((r) => r.path === joinPath);
|
|
305
|
+
exposeColumns.set(exp.as, {
|
|
306
|
+
table: match?.sqlTable ?? joinPath,
|
|
307
|
+
column,
|
|
308
|
+
});
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
return { tableToPath, exposeColumns };
|
|
312
|
+
}
|
|
313
|
+
/**
|
|
314
|
+
* Rewrite a where filter so expose aliases and join-table columns compile
|
|
315
|
+
* correctly when joins are active.
|
|
316
|
+
*/
|
|
317
|
+
export function translateWhereForJoins(where, baseTable, resolved, expose) {
|
|
318
|
+
if (Object.keys(where).length === 0)
|
|
319
|
+
return where;
|
|
320
|
+
const { exposeColumns } = buildJoinFilterContext(resolved, expose, baseTable);
|
|
321
|
+
const joinedTables = new Set(resolved.map((r) => r.sqlTable));
|
|
322
|
+
const out = Object.create(null);
|
|
323
|
+
const aliasBlocks = new Map();
|
|
324
|
+
function mergeBlock(table, filter) {
|
|
325
|
+
if (isUnsafeObjectKey(table))
|
|
326
|
+
return;
|
|
327
|
+
let block = aliasBlocks.get(table);
|
|
328
|
+
if (!block) {
|
|
329
|
+
block = Object.create(null);
|
|
330
|
+
aliasBlocks.set(table, block);
|
|
331
|
+
}
|
|
332
|
+
for (const [filterKey, filterValue] of Object.entries(filter)) {
|
|
333
|
+
safeSet(block, filterKey, filterValue);
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
for (const [key, value] of Object.entries(where)) {
|
|
337
|
+
if (isUnsafeObjectKey(key))
|
|
338
|
+
continue;
|
|
339
|
+
if (key === 'and' || key === 'or') {
|
|
340
|
+
safeSet(out, key, value.map((sub) => typeof sub === 'object' && sub !== null
|
|
341
|
+
? translateWhereForJoins(sub, baseTable, resolved, expose)
|
|
342
|
+
: sub));
|
|
343
|
+
continue;
|
|
344
|
+
}
|
|
345
|
+
if (key.startsWith('$')) {
|
|
346
|
+
safeSet(out, key, value);
|
|
347
|
+
continue;
|
|
348
|
+
}
|
|
349
|
+
const exposeSource = exposeColumns.get(key);
|
|
350
|
+
if (exposeSource) {
|
|
351
|
+
if (!isUnsafeObjectKey(exposeSource.column)) {
|
|
352
|
+
mergeBlock(exposeSource.table, { [exposeSource.column]: value });
|
|
353
|
+
}
|
|
354
|
+
continue;
|
|
355
|
+
}
|
|
356
|
+
// Dot-path legacy: environment_integration.environment_id
|
|
357
|
+
if (key.includes('.')) {
|
|
358
|
+
const [tableOrJoin, ...rest] = key.split('.');
|
|
359
|
+
const col = rest.join('.');
|
|
360
|
+
if (!isUnsafeObjectKey(col)) {
|
|
361
|
+
const byPath = resolved.find((r) => r.path === tableOrJoin || r.name === tableOrJoin);
|
|
362
|
+
if (byPath) {
|
|
363
|
+
mergeBlock(byPath.sqlTable, { [col]: value });
|
|
364
|
+
continue;
|
|
365
|
+
}
|
|
366
|
+
if (tableOrJoin && joinedTables.has(tableOrJoin)) {
|
|
367
|
+
mergeBlock(tableOrJoin, { [col]: value });
|
|
368
|
+
continue;
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
safeSet(out, key, value);
|
|
373
|
+
}
|
|
374
|
+
for (const [table, filter] of aliasBlocks) {
|
|
375
|
+
const blockKey = `$${table}`;
|
|
376
|
+
const existing = out[blockKey];
|
|
377
|
+
const merged = Object.create(null);
|
|
378
|
+
if (typeof existing === 'object' && existing !== null) {
|
|
379
|
+
for (const [k, v] of Object.entries(existing)) {
|
|
380
|
+
safeSet(merged, k, v);
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
for (const [k, v] of Object.entries(filter)) {
|
|
384
|
+
safeSet(merged, k, v);
|
|
385
|
+
}
|
|
386
|
+
safeSet(out, blockKey, merged);
|
|
387
|
+
}
|
|
388
|
+
return out;
|
|
389
|
+
}
|
|
390
|
+
/** Resolve an orderBy column to a SQL identifier string (`table.col`). */
|
|
391
|
+
export function resolveOrderByColumn(column, baseTable, resolved, expose) {
|
|
392
|
+
const exposeMatch = (expose ?? []).find((e) => e.as === column);
|
|
393
|
+
if (exposeMatch) {
|
|
394
|
+
const { joinPath, column: col, isTableQualified, } = parseQualifiedPath(exposeMatch.from);
|
|
395
|
+
if (isTableQualified && !joinPath) {
|
|
396
|
+
const parts = exposeMatch.from.slice(1).split('.');
|
|
397
|
+
return `${parts[0]}.${parts[1] ?? col}`;
|
|
398
|
+
}
|
|
399
|
+
const match = resolved.find((r) => r.path === joinPath);
|
|
400
|
+
const table = match?.sqlTable ?? joinPath.split('.').pop() ?? joinPath;
|
|
401
|
+
return `${table}.${col}`;
|
|
402
|
+
}
|
|
403
|
+
if (column.startsWith('$')) {
|
|
404
|
+
const { joinPath, column: col, isTableQualified, } = parseQualifiedPath(column);
|
|
405
|
+
if (isTableQualified && !joinPath) {
|
|
406
|
+
const parts = column.slice(1).split('.');
|
|
407
|
+
return `${parts[0]}.${parts[1]}`;
|
|
408
|
+
}
|
|
409
|
+
const match = resolved.find((r) => r.path === joinPath) ??
|
|
410
|
+
resolved.find((r) => r.name === joinPath || r.sqlTable === joinPath);
|
|
411
|
+
if (match)
|
|
412
|
+
return `${match.sqlTable}.${col}`;
|
|
413
|
+
return `${joinPath}.${col}`;
|
|
414
|
+
}
|
|
415
|
+
return `${baseTable}.${column}`;
|
|
416
|
+
}
|
|
417
|
+
/** Flat row key used for cursor pagination values. */
|
|
418
|
+
export function flatColumnKeyForOrderBy(column, _baseTable, resolved, expose) {
|
|
419
|
+
if (column.startsWith('$')) {
|
|
420
|
+
const { joinPath, column: col } = parseQualifiedPath(column);
|
|
421
|
+
const match = resolved.find((r) => r.path === joinPath) ??
|
|
422
|
+
resolved.find((r) => r.name === joinPath || r.sqlTable === joinPath);
|
|
423
|
+
if (match)
|
|
424
|
+
return flatAliasForJoinColumn(match, col);
|
|
425
|
+
return legacyJoinColumnAlias(joinPath, col);
|
|
426
|
+
}
|
|
427
|
+
const exposeMatch = (expose ?? []).find((e) => e.as === column);
|
|
428
|
+
if (exposeMatch)
|
|
429
|
+
return column;
|
|
430
|
+
return column;
|
|
431
|
+
}
|
|
432
|
+
/**
|
|
433
|
+
* Nest flat join columns into the include tree shape. Only nests joins present
|
|
434
|
+
* in `include`; expose columns remain at the top level.
|
|
435
|
+
*/
|
|
436
|
+
export function nestJoinedData(row, rootJoins, include, resolved) {
|
|
437
|
+
const out = { ...row };
|
|
438
|
+
for (const j of resolved) {
|
|
439
|
+
for (const col of j.select) {
|
|
440
|
+
const flatKey = flatAliasForJoinColumn(j, col);
|
|
441
|
+
delete out[flatKey];
|
|
442
|
+
}
|
|
443
|
+
}
|
|
444
|
+
function nestLevel(joins, nodes, parentPath) {
|
|
445
|
+
const result = {};
|
|
446
|
+
for (const [name, node] of Object.entries(nodes)) {
|
|
447
|
+
if (!node.enabled)
|
|
448
|
+
continue;
|
|
449
|
+
const joinDef = joins[name];
|
|
450
|
+
if (!joinDef)
|
|
451
|
+
continue;
|
|
452
|
+
const path = parentPath ? `${parentPath}.${name}` : name;
|
|
453
|
+
const resolvedJoin = resolved.find((r) => r.path === path);
|
|
454
|
+
if (!resolvedJoin)
|
|
455
|
+
continue;
|
|
456
|
+
const data = {};
|
|
457
|
+
for (const col of resolvedJoin.select) {
|
|
458
|
+
const flatKey = flatAliasForJoinColumn(resolvedJoin, col);
|
|
459
|
+
if (flatKey in row)
|
|
460
|
+
data[col] = row[flatKey];
|
|
461
|
+
}
|
|
462
|
+
const childKeys = Object.keys(node.children);
|
|
463
|
+
if (childKeys.length > 0 && joinDef.joins) {
|
|
464
|
+
const nested = nestLevel(joinDef.joins, node.children, path);
|
|
465
|
+
for (const [childName, childVal] of Object.entries(nested)) {
|
|
466
|
+
data[childName] = childVal;
|
|
467
|
+
}
|
|
468
|
+
}
|
|
469
|
+
if (joinDef.kind === 'one') {
|
|
470
|
+
const hasData = Object.values(data).some((v) => v !== null && v !== undefined);
|
|
471
|
+
result[name] = hasData ? data : null;
|
|
472
|
+
}
|
|
473
|
+
else {
|
|
474
|
+
result[name] = [];
|
|
475
|
+
}
|
|
476
|
+
}
|
|
477
|
+
return result;
|
|
478
|
+
}
|
|
479
|
+
const nested = nestLevel(rootJoins, include, '');
|
|
480
|
+
return { ...out, ...nested };
|
|
481
|
+
}
|
|
482
|
+
/** Whether include tree has any enabled joins. */
|
|
483
|
+
export function hasActiveIncludes(include) {
|
|
484
|
+
return Object.keys(include).length > 0;
|
|
485
|
+
}
|
|
486
|
+
/** Expand include for API compat: boolean map for top-level only. */
|
|
487
|
+
export function topLevelIncludeFlags(include) {
|
|
488
|
+
const flags = {};
|
|
489
|
+
for (const [k, v] of Object.entries(include)) {
|
|
490
|
+
if (v.enabled)
|
|
491
|
+
flags[k] = true;
|
|
492
|
+
}
|
|
493
|
+
return flags;
|
|
494
|
+
}
|
|
495
|
+
export function validateOrderByWithJoins(orderBy, baseColumns, _resolved, expose, _baseTable) {
|
|
496
|
+
const exposeNames = new Set((expose ?? []).map((e) => e.as));
|
|
497
|
+
for (const order of orderBy) {
|
|
498
|
+
if (order.column.startsWith('$'))
|
|
499
|
+
continue;
|
|
500
|
+
if (exposeNames.has(order.column))
|
|
501
|
+
continue;
|
|
502
|
+
if (!baseColumns.includes('*') && !baseColumns.includes(order.column)) {
|
|
503
|
+
throw new CursorError(`Invalid order column "${order.column}". Allowed base columns: ${baseColumns.join(', ')}`, { column: order.column, allowedColumns: baseColumns });
|
|
504
|
+
}
|
|
505
|
+
}
|
|
506
|
+
}
|
|
507
|
+
//# sourceMappingURL=joins.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"joins.js","sourceRoot":"","sources":["../src/joins.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM,uBAAuB,CAAA;AAC1D,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAG1D,qEAAqE;AACrE,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,aAAa,EAAE,WAAW,CAAC,CAAC,CAAA;AAE7E,iFAAiF;AACjF,MAAM,UAAU,iBAAiB,CAAC,GAAW;IAC3C,OAAO,kBAAkB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;AACpC,CAAC;AAED,SAAS,OAAO,CACd,MAA+B,EAC/B,GAAW,EACX,KAAc;IAEd,IAAI,iBAAiB,CAAC,GAAG,CAAC;QAAE,OAAO,KAAK,CAAA;IACxC,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;IACnB,OAAO,IAAI,CAAA;AACb,CAAC;AA0BD,MAAM,UAAU,kBAAkB,CAAC,OAAgB;IACjD,MAAM,GAAG,GAAG,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,OAAO,CAAA;IAClD,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,MAAM,IAAI,eAAe,CACvB,wEAAwE,CACzE,CAAA;IACH,CAAC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAC9B,OAA+B;IAE/B,IAAI,CAAC,OAAO;QAAE,OAAO,EAAE,CAAA;IAEvB,MAAM,GAAG,GAA0C,EAAE,CAAA;IACrD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACnD,IAAI,iBAAiB,CAAC,GAAG,CAAC;YAAE,SAAQ;QACpC,MAAM,IAAI,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAA;QACzC,IAAI,IAAI,EAAE,OAAO;YAAE,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAA;IACpC,CAAC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC;AAED,SAAS,qBAAqB,CAC5B,KAAqC;IAErC,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,KAAK;QAAE,OAAO,IAAI,CAAA;IACvD,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACnB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAA;IAC3D,CAAC;IAED,MAAM,GAAG,GAAG,KAAgC,CAAA;IAC5C,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC;QACtC,CAAC,CAAE,GAAG,CAAC,MAAmB;QAC1B,CAAC,CAAC,SAAS,CAAA;IACb,MAAM,QAAQ,GAA0C,EAAE,CAAA;IAE1D,KAAK,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QAClD,IAAI,GAAG,KAAK,QAAQ,IAAI,iBAAiB,CAAC,GAAG,CAAC;YAAE,SAAQ;QACxD,MAAM,KAAK,GAAG,qBAAqB,CAAC,QAA8B,CAAC,CAAA;QACnE,IAAI,KAAK,EAAE,OAAO;YAAE,QAAQ,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;IAC3C,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,GAAG,CAAC,CAAA;IAExE,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAA;IAEzB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAA;AAC5C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAChC,SAA8C,EAC9C,OAA8C,EAC9C,MAAwC,EACxC,SAAiB,EACjB,mBAA8C,EAC9C,mBAAuC;IAEvC,IAAI,CAAC,SAAS;QAAE,OAAO,EAAE,CAAA;IAEzB,MAAM,QAAQ,GAAmB,EAAE,CAAA;IACnC,MAAM,WAAW,GAAG,IAAI,GAAG,EAAU,CAAA;IAErC,KAAK,MAAM,GAAG,IAAI,MAAM,IAAI,EAAE,EAAE,CAAC;QAC/B,MAAM,EAAE,QAAQ,EAAE,GAAG,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QACjD,IAAI,QAAQ;YAAE,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;IACzC,CAAC;IAED,SAAS,IAAI,CACX,KAA8B,EAC9B,KAA4C,EAC5C,WAAmB,EACnB,UAAkB;QAElB,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACjD,IAAI,CAAC,IAAI,CAAC,OAAO;gBAAE,SAAQ;YAC3B,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,CAAA;YAC3B,IAAI,CAAC,OAAO;gBAAE,SAAQ;YAEtB,MAAM,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,UAAU,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAA;YACxD,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;YAErB,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,IAAI,IAAI,CAAA;YACjD,MAAM,QAAQ,GACZ,mBAAmB,EAAE,CAAC,IAAI,CAAC,IAAI,mBAAmB,EAAE,CAAC,IAAI,CAAC,CAAA;YAC5D,MAAM,MAAM,GAAG,QAAQ,IAAI,IAAI,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,CAAA;YAE/D,QAAQ,CAAC,IAAI,CAAC;gBACZ,IAAI;gBACJ,IAAI;gBACJ,OAAO;gBACP,WAAW;gBACX,WAAW,EAAE,kBAAkB,CAAC,OAAO,CAAC;gBACxC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK;gBAC9B,YAAY;gBACZ,MAAM;gBACN,aAAa,EAAE,EAAE;aAClB,CAAC,CAAA;YAEF,IAAI,OAAO,CAAC,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC3D,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;YAChE,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,CAAC,CAAA;IAEvC,oDAAoD;IACpD,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;QAC/B,kBAAkB,CAChB,IAAI,EACJ,SAAS,EACT,OAAO,EACP,QAAQ,EACR,SAAS,EACT,mBAAmB,CACpB,CAAA;IACH,CAAC;IAED,MAAM,OAAO,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAA;IAC7C,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,mBAAmB,IAAI,EAAE,CAAC,CAAA;IACnD,KAAK,MAAM,GAAG,IAAI,MAAM,IAAI,EAAE,EAAE,CAAC;QAC/B,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;IACtB,CAAC;IACD,uBAAuB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;IAC1C,OAAO,OAAO,CAAA;AAChB,CAAC;AAED,SAAS,kBAAkB,CACzB,IAAY,EACZ,SAAkC,EAClC,OAA8C,EAC9C,QAAwB,EACxB,SAAiB,EACjB,mBAA8C;IAE9C,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IAChC,IAAI,KAAK,GAAG,SAAS,CAAA;IACrB,IAAI,WAAW,GAAG,SAAS,CAAA;IAC3B,IAAI,UAAU,GAAG,EAAE,CAAA;IAEnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACzC,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAE,CAAA;QACzB,MAAM,OAAO,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,UAAU,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAA;QAE3D,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,EAAE,CAAC;YAC9C,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,CAAA;YAC3B,IAAI,CAAC,OAAO;gBAAE,MAAK;YAEnB,MAAM,IAAI,GAAG,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;YAC7C,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,IAAI,IAAI,CAAA;YACjD,MAAM,QAAQ,GACZ,mBAAmB,EAAE,CAAC,OAAO,CAAC,IAAI,mBAAmB,EAAE,CAAC,IAAI,CAAC,CAAA;YAC/D,MAAM,MAAM,GAAG,QAAQ,IAAI,IAAI,EAAE,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,CAAA;YAEhE,QAAQ,CAAC,IAAI,CAAC;gBACZ,IAAI,EAAE,OAAO;gBACb,IAAI;gBACJ,OAAO;gBACP,WAAW;gBACX,WAAW,EAAE,kBAAkB,CAAC,OAAO,CAAC;gBACxC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK;gBAC9B,YAAY;gBACZ,MAAM;gBACN,aAAa,EAAE,EAAE;aAClB,CAAC,CAAA;QACJ,CAAC;QAED,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,CAAA;QAC3B,IAAI,CAAC,OAAO;YAAE,MAAK;QACnB,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAA;QAClC,UAAU,GAAG,OAAO,CAAA;QACpB,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,EAAE,CAAA;IAC7B,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CACrB,OAA8C,EAC9C,IAAY;IAEZ,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IAChC,IAAI,KAAK,GAAG,OAAO,CAAA;IACnB,IAAI,OAA0C,CAAA;IAE9C,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC3B,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,CAAA;QACpB,IAAI,CAAC,OAAO;YAAE,OAAO,SAAS,CAAA;QAC9B,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAA;IAC1B,CAAC;IACD,OAAO,OAAO,CAAA;AAChB,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAqB;IAChD,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAA;IAC9B,MAAM,GAAG,GAAmB,EAAE,CAAA;IAC9B,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;YAAE,SAAQ;QAC9B,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;QAChB,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACb,CAAC;IACD,iFAAiF;IACjF,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACvB,MAAM,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAA;QACvC,MAAM,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAA;QACvC,IAAI,MAAM,KAAK,MAAM;YAAE,OAAO,MAAM,GAAG,MAAM,CAAA;QAC7C,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;IAC5C,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,oEAAoE;AACpE,MAAM,UAAU,kBAAkB,CAAC,SAAiB;IAKlD,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/B,MAAM,IAAI,eAAe,CACvB,uCAAuC,SAAS,EAAE,CACnD,CAAA;IACH,CAAC;IACD,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;IAC/B,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA;IACrC,IAAI,OAAO,KAAK,CAAC,CAAC,EAAE,CAAC;QACnB,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAA;IAC/D,CAAC;IACD,OAAO;QACL,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC;QAChC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC;QAC/B,gBAAgB,EAAE,KAAK;KACxB,CAAA;AACH,CAAC;AAED,iEAAiE;AACjE,MAAM,UAAU,kBAAkB,CAChC,QAAwB;IAExB,MAAM,SAAS,GAA6B,EAAE,CAAA;IAE9C,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,IAAI,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YACtB,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC,OAAO,CAAA;YACrC,MAAM,QAAQ,GAAG,CAAC,CAAC,WAAW,CAAA;YAC9B,MAAM,WAAW,GAAG,GAAG,CAAA,aAAa,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,WAAW,IAAI,QAAQ,EAAE,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,EAAE,CAAA;YACjK,MAAM,UAAU,GAAG,GAAG,CAAA,aAAa,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,EAAE,EAAE,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,EAAE,EAAE,CAAC,EAAE,CAAA;YAC7J,MAAM,KAAK,GAAG,CAAC,WAAW,EAAE,UAAU,CAAC,CAAA;YACvC,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC/D,KAAK,CAAC,IAAI,CAAC,GAAG,CAAA,OAAO,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,KAAY,CAAC,EAAE,CAAC,CAAA;YAC/D,CAAC;YACD,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAA;QACtC,CAAC;aAAM,CAAC;YACN,MAAM,KAAK,GAAG;gBACZ,GAAG,CAAA,aAAa,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,EAAE;aACpJ,CAAA;YACD,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC/D,KAAK,CAAC,IAAI,CAAC,GAAG,CAAA,OAAO,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,KAAY,CAAC,EAAE,CAAC,CAAA;YAC/D,CAAC;YACD,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAA;QACtC,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAA;AAClB,CAAC;AAED,uEAAuE;AACvE,MAAM,UAAU,qBAAqB,CACnC,YAAoB,EACpB,MAAc;IAEd,OAAO,GAAG,YAAY,IAAI,MAAM,EAAE,CAAA;AACpC,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,uBAAuB,CACrC,QAAwB,EACxB,QAA6B;IAE7B,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAA;IAC/B,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,MAAM,aAAa,GAA2B,EAAE,CAAA;QAChD,KAAK,MAAM,GAAG,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;YAC3B,MAAM,MAAM,GAAG,qBAAqB,CAAC,CAAC,CAAC,YAAY,EAAE,GAAG,CAAC,CAAA;YACzD,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,YAAY,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC,MAAM,CAAA;YACtE,aAAa,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;YAC1B,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;QAClB,CAAC;QACD,CAAC,CAAC,aAAa,GAAG,aAAa,CAAA;IACjC,CAAC;AACH,CAAC;AAED,sDAAsD;AACtD,MAAM,UAAU,sBAAsB,CACpC,IAAkB,EAClB,MAAc;IAEd,OAAO,CACL,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;QAC1B,qBAAqB,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC,CACjD,CAAA;AACH,CAAC;AAED,kDAAkD;AAClD,MAAM,UAAU,sBAAsB,CACpC,QAAwB;IAExB,MAAM,OAAO,GAA6B,EAAE,CAAA;IAC5C,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,KAAK,MAAM,GAAG,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;YAC3B,OAAO,CAAC,IAAI,CACV,GAAG,CAAA,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,QAAQ,IAAI,GAAG,EAAE,CAAC,OAAO,GAAG,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAC1F,CAAA;QACH,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAA;AAChB,CAAC;AAED,sDAAsD;AACtD,MAAM,UAAU,wBAAwB,CACtC,MAA4B,EAC5B,QAAwB,EACxB,UAAkB;IAElB,MAAM,OAAO,GAA6B,EAAE,CAAA;IAE5C,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;QACzB,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,gBAAgB,EAAE,GAAG,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QAE3E,IAAI,gBAAgB,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClC,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;YAC1C,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAE,CAAA;YACvB,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,MAAM,CAAA;YAC9B,OAAO,CAAC,IAAI,CAAC,GAAG,CAAA,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,KAAK,IAAI,GAAG,EAAE,CAAC,OAAO,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAA;YAC1E,SAAQ;QACV,CAAC;QAED,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAA;QACvD,MAAM,KAAK,GAAG,KAAK,EAAE,QAAQ,IAAI,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,QAAQ,CAAA;QACtE,OAAO,CAAC,IAAI,CACV,GAAG,CAAA,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,KAAK,IAAI,MAAM,EAAE,CAAC,OAAO,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAChE,CAAA;IACH,CAAC;IAED,OAAO,OAAO,CAAA;AAChB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,sBAAsB,CACpC,QAAwB,EACxB,MAAwC,EACxC,SAAiB;IAKjB,MAAM,WAAW,GAAG,IAAI,GAAG,EAAkB,CAAA;IAC7C,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAA;IACrC,CAAC;IAED,MAAM,aAAa,GAAG,IAAI,GAAG,EAA6C,CAAA;IAC1E,KAAK,MAAM,GAAG,IAAI,MAAM,IAAI,EAAE,EAAE,CAAC;QAC/B,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,gBAAgB,EAAE,GAAG,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QAC3E,IAAI,gBAAgB,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClC,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;YAC1C,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE;gBACxB,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,SAAS;gBAC5B,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,MAAM;aAC3B,CAAC,CAAA;QACJ,CAAC;aAAM,CAAC;YACN,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAA;YACvD,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE;gBACxB,KAAK,EAAE,KAAK,EAAE,QAAQ,IAAI,QAAQ;gBAClC,MAAM;aACP,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;IAED,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,CAAA;AACvC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,sBAAsB,CACpC,KAA8B,EAC9B,SAAiB,EACjB,QAAwB,EACxB,MAAwC;IAExC,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAA;IAEjD,MAAM,EAAE,aAAa,EAAE,GAAG,sBAAsB,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,CAAC,CAAA;IAC7E,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAA;IAE7D,MAAM,GAAG,GAA4B,MAAM,CAAC,MAAM,CAAC,IAAI,CAGtD,CAAA;IACD,MAAM,WAAW,GAAG,IAAI,GAAG,EAAmC,CAAA;IAE9D,SAAS,UAAU,CAAC,KAAa,EAAE,MAA+B;QAChE,IAAI,iBAAiB,CAAC,KAAK,CAAC;YAAE,OAAM;QACpC,IAAI,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;QAClC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAA4B,CAAA;YACtD,WAAW,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;QAC/B,CAAC;QACD,KAAK,MAAM,CAAC,SAAS,EAAE,WAAW,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YAC9D,OAAO,CAAC,KAAK,EAAE,SAAS,EAAE,WAAW,CAAC,CAAA;QACxC,CAAC;IACH,CAAC;IAED,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACjD,IAAI,iBAAiB,CAAC,GAAG,CAAC;YAAE,SAAQ;QAEpC,IAAI,GAAG,KAAK,KAAK,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YAClC,OAAO,CACL,GAAG,EACH,GAAG,EACF,KAAmB,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAC/B,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI;gBACrC,CAAC,CAAC,sBAAsB,CACpB,GAA8B,EAC9B,SAAS,EACT,QAAQ,EACR,MAAM,CACP;gBACH,CAAC,CAAC,GAAG,CACR,CACF,CAAA;YACD,SAAQ;QACV,CAAC;QAED,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACxB,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,CAAA;YACxB,SAAQ;QACV,CAAC;QAED,MAAM,YAAY,GAAG,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QAC3C,IAAI,YAAY,EAAE,CAAC;YACjB,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC5C,UAAU,CAAC,YAAY,CAAC,KAAK,EAAE,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,CAAA;YAClE,CAAC;YACD,SAAQ;QACV,CAAC;QAED,0DAA0D;QAC1D,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACtB,MAAM,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;YAC7C,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;YAC1B,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC5B,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAC1B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,IAAI,CAAC,CAAC,IAAI,KAAK,WAAW,CACxD,CAAA;gBACD,IAAI,MAAM,EAAE,CAAC;oBACX,UAAU,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,CAAA;oBAC7C,SAAQ;gBACV,CAAC;gBACD,IAAI,WAAW,IAAI,YAAY,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;oBACjD,UAAU,CAAC,WAAW,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,CAAA;oBACzC,SAAQ;gBACV,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,CAAA;IAC1B,CAAC;IAED,KAAK,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,WAAW,EAAE,CAAC;QAC1C,MAAM,QAAQ,GAAG,IAAI,KAAK,EAAE,CAAA;QAC5B,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAA;QAC9B,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAA4B,CAAA;QAC7D,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;YACtD,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CACjC,QAAmC,CACpC,EAAE,CAAC;gBACF,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;YACvB,CAAC;QACH,CAAC;QACD,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YAC5C,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;QACvB,CAAC;QACD,OAAO,CAAC,GAAG,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAA;IAChC,CAAC;IAED,OAAO,GAAG,CAAA;AACZ,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,oBAAoB,CAClC,MAAc,EACd,SAAiB,EACjB,QAAwB,EACxB,MAA6B;IAE7B,MAAM,WAAW,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,CAAA;IAC/D,IAAI,WAAW,EAAE,CAAC;QAChB,MAAM,EACJ,QAAQ,EACR,MAAM,EAAE,GAAG,EACX,gBAAgB,GACjB,GAAG,kBAAkB,CAAC,WAAW,CAAC,IAAI,CAAC,CAAA;QACxC,IAAI,gBAAgB,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClC,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;YAClD,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,CAAA;QACzC,CAAC;QACD,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAA;QACvD,MAAM,KAAK,GAAG,KAAK,EAAE,QAAQ,IAAI,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,QAAQ,CAAA;QACtE,OAAO,GAAG,KAAK,IAAI,GAAG,EAAE,CAAA;IAC1B,CAAC;IAED,IAAI,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC3B,MAAM,EACJ,QAAQ,EACR,MAAM,EAAE,GAAG,EACX,gBAAgB,GACjB,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAA;QAC9B,IAAI,gBAAgB,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;YACxC,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,CAAA;QAClC,CAAC;QACD,MAAM,KAAK,GACT,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC;YACzC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAA;QACtE,IAAI,KAAK;YAAE,OAAO,GAAG,KAAK,CAAC,QAAQ,IAAI,GAAG,EAAE,CAAA;QAC5C,OAAO,GAAG,QAAQ,IAAI,GAAG,EAAE,CAAA;IAC7B,CAAC;IACD,OAAO,GAAG,SAAS,IAAI,MAAM,EAAE,CAAA;AACjC,CAAC;AAED,sDAAsD;AACtD,MAAM,UAAU,uBAAuB,CACrC,MAAc,EACd,UAAkB,EAClB,QAAwB,EACxB,MAAwC;IAExC,IAAI,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC3B,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAA;QAC5D,MAAM,KAAK,GACT,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC;YACzC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAA;QACtE,IAAI,KAAK;YAAE,OAAO,sBAAsB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;QACpD,OAAO,qBAAqB,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAA;IAC7C,CAAC;IAED,MAAM,WAAW,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,CAAA;IAC/D,IAAI,WAAW;QAAE,OAAO,MAAM,CAAA;IAE9B,OAAO,MAAM,CAAA;AACf,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAC5B,GAA4B,EAC5B,SAAkC,EAClC,OAA8C,EAC9C,QAAwB;IAExB,MAAM,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,CAAA;IAEtB,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,KAAK,MAAM,GAAG,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;YAC3B,MAAM,OAAO,GAAG,sBAAsB,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;YAC9C,OAAO,GAAG,CAAC,OAAO,CAAC,CAAA;QACrB,CAAC;IACH,CAAC;IAED,SAAS,SAAS,CAChB,KAA8B,EAC9B,KAA4C,EAC5C,UAAkB;QAElB,MAAM,MAAM,GAA4B,EAAE,CAAA;QAE1C,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACjD,IAAI,CAAC,IAAI,CAAC,OAAO;gBAAE,SAAQ;YAC3B,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,CAAA;YAC3B,IAAI,CAAC,OAAO;gBAAE,SAAQ;YAEtB,MAAM,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,UAAU,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAA;YACxD,MAAM,YAAY,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAA;YAC1D,IAAI,CAAC,YAAY;gBAAE,SAAQ;YAE3B,MAAM,IAAI,GAA4B,EAAE,CAAA;YACxC,KAAK,MAAM,GAAG,IAAI,YAAY,CAAC,MAAM,EAAE,CAAC;gBACtC,MAAM,OAAO,GAAG,sBAAsB,CAAC,YAAY,EAAE,GAAG,CAAC,CAAA;gBACzD,IAAI,OAAO,IAAI,GAAG;oBAAE,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,CAAA;YAC9C,CAAC;YAED,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;YAC5C,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;gBAC1C,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAA;gBAC5D,KAAK,MAAM,CAAC,SAAS,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;oBAC3D,IAAI,CAAC,SAAS,CAAC,GAAG,QAAQ,CAAA;gBAC5B,CAAC;YACH,CAAC;YAED,IAAI,OAAO,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;gBAC3B,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CACtC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,SAAS,CACrC,CAAA;gBACD,MAAM,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAA;YACtC,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAA;YACnB,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAA;IACf,CAAC;IAED,MAAM,MAAM,GAAG,SAAS,CAAC,SAAS,EAAE,OAAO,EAAE,EAAE,CAAC,CAAA;IAChD,OAAO,EAAE,GAAG,GAAG,EAAE,GAAG,MAAM,EAAE,CAAA;AAC9B,CAAC;AAED,kDAAkD;AAClD,MAAM,UAAU,iBAAiB,CAC/B,OAA8C;IAE9C,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,CAAA;AACxC,CAAC;AAED,qEAAqE;AACrE,MAAM,UAAU,oBAAoB,CAClC,OAA8C;IAE9C,MAAM,KAAK,GAA4B,EAAE,CAAA;IACzC,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAC7C,IAAI,CAAC,CAAC,OAAO;YAAE,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAA;IAChC,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAED,MAAM,UAAU,wBAAwB,CACtC,OAAkB,EAClB,WAAqB,EACrB,SAAyB,EACzB,MAAwC,EACxC,UAAkB;IAElB,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IAE5D,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,SAAQ;QAC1C,IAAI,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC;YAAE,SAAQ;QAC3C,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;YACtE,MAAM,IAAI,WAAW,CACnB,yBAAyB,KAAK,CAAC,MAAM,4BAA4B,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EACzF,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,cAAc,EAAE,WAAW,EAAE,CACtD,CAAA;QACH,CAAC;IACH,CAAC;AACH,CAAC"}
|
package/dist/pagination.d.ts
CHANGED
|
@@ -15,7 +15,7 @@ export declare function createCursor(row: Record<string, unknown>, orderBy: Orde
|
|
|
15
15
|
/**
|
|
16
16
|
* Generate WHERE conditions for cursor-based pagination
|
|
17
17
|
*/
|
|
18
|
-
export declare function buildCursorConditions(cursor: CursorToken, tableName?: string): ReturnType<typeof sql>;
|
|
18
|
+
export declare function buildCursorConditions(cursor: CursorToken, tableName?: string, resolveColumn?: (column: string) => string): ReturnType<typeof sql>;
|
|
19
19
|
/**
|
|
20
20
|
* Get default ordering for a table
|
|
21
21
|
*/
|
package/dist/pagination.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pagination.d.ts","sourceRoot":"","sources":["../src/pagination.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,uBAAuB,CAAA;AAG3C,OAAO,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AAEtD;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CAUvD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW,CA4DxD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC1B,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5B,OAAO,EAAE,OAAO,EAAE,EAClB,SAAS,EAAE,MAAM,GAAG,MAAM,GACzB,WAAW,CAiBb;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,WAAW,EACnB,SAAS,CAAC,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"pagination.d.ts","sourceRoot":"","sources":["../src/pagination.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,uBAAuB,CAAA;AAG3C,OAAO,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AAEtD;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CAUvD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW,CA4DxD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC1B,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5B,OAAO,EAAE,OAAO,EAAE,EAClB,SAAS,EAAE,MAAM,GAAG,MAAM,GACzB,WAAW,CAiBb;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,WAAW,EACnB,SAAS,CAAC,EAAE,MAAM,EAClB,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,GACzC,UAAU,CAAC,OAAO,GAAG,CAAC,CA8ExB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,EAC7B,cAAc,CAAC,EAAE,OAAO,GACvB,OAAO,EAAE,CAUX;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,OAAO,EAAE,EAClB,cAAc,EAAE,MAAM,EAAE,GACvB,IAAI,CASN;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,OAAO,EAAE,CAK5D"}
|
package/dist/pagination.js
CHANGED
|
@@ -84,7 +84,7 @@ export function createCursor(row, orderBy, direction) {
|
|
|
84
84
|
/**
|
|
85
85
|
* Generate WHERE conditions for cursor-based pagination
|
|
86
86
|
*/
|
|
87
|
-
export function buildCursorConditions(cursor, tableName) {
|
|
87
|
+
export function buildCursorConditions(cursor, tableName, resolveColumn) {
|
|
88
88
|
const { orderBy, values, direction } = cursor;
|
|
89
89
|
if (orderBy.length !== values.length) {
|
|
90
90
|
throw new CursorError('Cursor orderBy and values arrays must have the same length', { orderBy, values });
|
|
@@ -92,17 +92,18 @@ export function buildCursorConditions(cursor, tableName) {
|
|
|
92
92
|
if (orderBy.length === 0) {
|
|
93
93
|
return sql ``;
|
|
94
94
|
}
|
|
95
|
-
// Build comparison conditions for cursor pagination
|
|
96
|
-
// For next: use > or < based on sort direction
|
|
97
|
-
// For prev: use < or > based on sort direction (opposite)
|
|
98
95
|
const conditions = [];
|
|
96
|
+
const columnRef = (order) => {
|
|
97
|
+
if (resolveColumn)
|
|
98
|
+
return resolveColumn(order.column);
|
|
99
|
+
if (tableName)
|
|
100
|
+
return `${tableName}.${order.column}`;
|
|
101
|
+
return order.column;
|
|
102
|
+
};
|
|
99
103
|
for (let i = 0; i < orderBy.length; i++) {
|
|
100
104
|
const order = orderBy[i];
|
|
101
105
|
const value = values[i];
|
|
102
|
-
|
|
103
|
-
const columnIdent = tableName
|
|
104
|
-
? sql.ident(`${tableName}.${order.column}`)
|
|
105
|
-
: sql.ident(order.column);
|
|
106
|
+
const columnIdent = sql.ident(columnRef(order));
|
|
106
107
|
// Determine if we need > or < based on cursor direction and sort direction
|
|
107
108
|
const useGreaterThan = (direction === 'next') === (order.direction === 'asc');
|
|
108
109
|
if (i === orderBy.length - 1) {
|
|
@@ -123,10 +124,7 @@ export function buildCursorConditions(cursor, tableName) {
|
|
|
123
124
|
for (let j = 0; j <= i; j++) {
|
|
124
125
|
const currentOrder = orderBy[j];
|
|
125
126
|
const currentValue = values[j];
|
|
126
|
-
|
|
127
|
-
const currentColumnIdent = tableName
|
|
128
|
-
? sql.ident(`${tableName}.${currentOrder.column}`)
|
|
129
|
-
: sql.ident(currentOrder.column);
|
|
127
|
+
const currentColumnIdent = sql.ident(columnRef(currentOrder));
|
|
130
128
|
if (j === i) {
|
|
131
129
|
// Last condition in this group: use comparison
|
|
132
130
|
const currentUseGt = (direction === 'next') === (currentOrder.direction === 'asc');
|
package/dist/pagination.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pagination.js","sourceRoot":"","sources":["../src/pagination.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"pagination.js","sourceRoot":"","sources":["../src/pagination.ts"],"names":[],"mappings":"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"}
|