@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/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":"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"}
@@ -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
  */
@@ -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,GACjB,UAAU,CAAC,OAAO,GAAG,CAAC,CAiFxB;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"}
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"}
@@ -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
- // Build column identifier safely
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
- // Build current column identifier safely
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');
@@ -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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"}