@pothos/plugin-drizzle 0.17.6 → 0.18.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 (41) hide show
  1. package/CHANGELOG.md +33 -0
  2. package/dts/connection-helpers.d.ts.map +1 -1
  3. package/dts/drizzle-field-builder.d.ts.map +1 -1
  4. package/dts/types.d.ts +5 -2
  5. package/dts/types.d.ts.map +1 -1
  6. package/dts/utils/config.d.ts +3 -0
  7. package/dts/utils/config.d.ts.map +1 -1
  8. package/dts/utils/cursors.d.ts +11 -7
  9. package/dts/utils/cursors.d.ts.map +1 -1
  10. package/esm/connection-helpers.d.ts.map +1 -1
  11. package/esm/connection-helpers.js +5 -4
  12. package/esm/connection-helpers.js.map +1 -1
  13. package/esm/drizzle-field-builder.d.ts.map +1 -1
  14. package/esm/drizzle-field-builder.js +5 -4
  15. package/esm/drizzle-field-builder.js.map +1 -1
  16. package/esm/types.d.ts +5 -2
  17. package/esm/types.d.ts.map +1 -1
  18. package/esm/types.js.map +1 -1
  19. package/esm/utils/config.d.ts +3 -0
  20. package/esm/utils/config.d.ts.map +1 -1
  21. package/esm/utils/config.js +95 -17
  22. package/esm/utils/config.js.map +1 -1
  23. package/esm/utils/cursors.d.ts +11 -7
  24. package/esm/utils/cursors.d.ts.map +1 -1
  25. package/esm/utils/cursors.js +194 -113
  26. package/esm/utils/cursors.js.map +1 -1
  27. package/lib/connection-helpers.js +5 -4
  28. package/lib/connection-helpers.js.map +1 -1
  29. package/lib/drizzle-field-builder.js +5 -4
  30. package/lib/drizzle-field-builder.js.map +1 -1
  31. package/lib/types.js.map +1 -1
  32. package/lib/utils/config.js +95 -17
  33. package/lib/utils/config.js.map +1 -1
  34. package/lib/utils/cursors.js +196 -112
  35. package/lib/utils/cursors.js.map +1 -1
  36. package/package.json +5 -5
  37. package/src/connection-helpers.ts +6 -4
  38. package/src/drizzle-field-builder.ts +7 -4
  39. package/src/types.ts +8 -4
  40. package/src/utils/config.ts +117 -20
  41. package/src/utils/cursors.ts +248 -87
@@ -37,6 +37,94 @@ const configCache = (0, _core.createContextCache)((builder)=>{
37
37
  });
38
38
  }
39
39
  });
40
+ const buildTableConfig = (tableName)=>{
41
+ var _tableConfig_uniqueConstraints;
42
+ const table = relations[tableName].table;
43
+ const tableConfig = builder.options.drizzle.getTableConfig(table);
44
+ const tableColumns = Object.values((0, _drizzleorm.getColumns)(table));
45
+ // The pg dialect builds primaryKeys and uniqueConstraints from
46
+ // ExtraConfigColumns rather than the table's own columns, so the objects
47
+ // it hands back are not the ones columnNameMappings knows about, and do
48
+ // not carry notNull. Look each one back up by name.
49
+ const toTableColumn = (column)=>{
50
+ var _tableColumns_find;
51
+ return (_tableColumns_find = tableColumns.find((candidate)=>candidate.name === column.name)) !== null && _tableColumns_find !== void 0 ? _tableColumns_find : column;
52
+ };
53
+ return {
54
+ columns: tableConfig.columns.map(toTableColumn),
55
+ primaryKeys: tableConfig.primaryKeys.map((key)=>key.columns.map(toTableColumn)),
56
+ uniqueConstraints: ((_tableConfig_uniqueConstraints = tableConfig.uniqueConstraints) !== null && _tableConfig_uniqueConstraints !== void 0 ? _tableConfig_uniqueConstraints : []).map((constraint)=>constraint.columns.map(toTableColumn))
57
+ };
58
+ };
59
+ const tableConfigs = new Map();
60
+ // drizzle rebuilds this from the table's config callback on every call
61
+ const getTableConfig = (tableName)=>{
62
+ let tableConfig = tableConfigs.get(tableName);
63
+ if (!tableConfig) {
64
+ tableConfig = buildTableConfig(tableName);
65
+ tableConfigs.set(tableName, tableConfig);
66
+ }
67
+ return tableConfig;
68
+ };
69
+ // Every set of columns the database guarantees is unique. Unique indexes
70
+ // are not included: missing one only costs a redundant order column, while
71
+ // wrongly reporting a set as unique would break pagination.
72
+ const getUniqueConstraints = (tableName)=>{
73
+ const tableConfig = getTableConfig(tableName);
74
+ return [
75
+ ...tableConfig.columns.filter((column)=>column.primary || column.isUnique).map((column)=>[
76
+ column
77
+ ]),
78
+ ...tableConfig.primaryKeys,
79
+ ...tableConfig.uniqueConstraints
80
+ ].filter((columns)=>columns.length > 0);
81
+ };
82
+ // What a cursor can rely on to break ties. Primary key columns are
83
+ // non-nullable whatever the drizzle schema says, because SQL requires it,
84
+ // so a composite key declared without notNull() on each column still
85
+ // counts. A column that is only unique has to say so itself: comparing a
86
+ // cursor against null matches nothing, and rows sharing a null tie anyway.
87
+ const findTieBreaker = (tableName)=>{
88
+ const tableConfig = getTableConfig(tableName);
89
+ const primaryKey = tableConfig.columns.find((column)=>column.primary);
90
+ if (primaryKey) {
91
+ return [
92
+ primaryKey
93
+ ];
94
+ }
95
+ const compositeKey = tableConfig.primaryKeys.find((columns)=>columns.length > 0);
96
+ if (compositeKey) {
97
+ return compositeKey;
98
+ }
99
+ const uniqueColumn = tableConfig.columns.find((column)=>column.isUnique && column.notNull);
100
+ if (uniqueColumn) {
101
+ return [
102
+ uniqueColumn
103
+ ];
104
+ }
105
+ const uniqueConstraint = tableConfig.uniqueConstraints.find((columns)=>columns.length > 0 && columns.every((column)=>column.notNull));
106
+ return uniqueConstraint !== null && uniqueConstraint !== void 0 ? uniqueConstraint : null;
107
+ };
108
+ const findPrimaryKey = (tableName)=>{
109
+ const tableConfig = getTableConfig(tableName);
110
+ const primaryKey = tableConfig.columns.find((column)=>column.primary);
111
+ if (primaryKey) {
112
+ return [
113
+ primaryKey
114
+ ];
115
+ }
116
+ const primaryKeys = tableConfig.primaryKeys.find((columns)=>columns.length > 0);
117
+ if (primaryKeys) {
118
+ return primaryKeys;
119
+ }
120
+ const uniqueColumn = tableConfig.columns.find((column)=>column.isUnique);
121
+ if (uniqueColumn) {
122
+ return [
123
+ uniqueColumn
124
+ ];
125
+ }
126
+ return null;
127
+ };
40
128
  return {
41
129
  skipDeferredFragments: (_builder_options_drizzle_skipDeferredFragments = builder.options.drizzle.skipDeferredFragments) !== null && _builder_options_drizzle_skipDeferredFragments !== void 0 ? _builder_options_drizzle_skipDeferredFragments : true,
42
130
  columnToTsName: (column)=>{
@@ -46,25 +134,15 @@ const configCache = (0, _core.createContextCache)((builder)=>{
46
134
  }
47
135
  return tsName;
48
136
  },
137
+ findPrimaryKey,
138
+ findTieBreaker,
139
+ getUniqueConstraints,
49
140
  getPrimaryKey: (tableName)=>{
50
- const tableConfig = builder.options.drizzle.getTableConfig(relations[tableName].table);
51
- const primaryKey = tableConfig.columns.find((column)=>column.primary);
52
- if (primaryKey) {
53
- return [
54
- primaryKey
55
- ];
56
- }
57
- const primaryKeys = tableConfig.primaryKeys.find((key)=>key.columns.length > 0);
58
- if (primaryKeys) {
59
- return primaryKeys.columns;
60
- }
61
- const uniqueColumn = tableConfig.columns.find((column)=>column.isUnique);
62
- if (uniqueColumn) {
63
- return [
64
- uniqueColumn
65
- ];
141
+ const primaryKey = findPrimaryKey(tableName);
142
+ if (!primaryKey) {
143
+ throw new Error(`Could not find primary key for table ${tableName}`);
66
144
  }
67
- throw new Error(`Could not find primary key for table ${tableName}`);
145
+ return primaryKey;
68
146
  },
69
147
  relations
70
148
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utils/config.ts"],"names":["drizzleClientCache","getClient","getSchemaConfig","configCache","createContextCache","builder","relations","options","drizzle","client","_","columnNameMappings","Map","Object","values","forEach","table","isTable","entries","getColumns","tsName","col","set","skipDeferredFragments","columnToTsName","column","get","Error","String","name","getPrimaryKey","tableName","tableConfig","getTableConfig","primaryKey","columns","find","primary","primaryKeys","key","length","uniqueColumn","isUnique","clientConfig","ctx","_ctx","context"],"mappings":";;;;;;;;;;;QAsEaA;eAAAA;;QAsBGC;eAAAA;;QANAC;eAAAA;;;sBAtFqC;4BAC2B;AAShF,MAAMC,cAAcC,IAAAA,wBAAkB,EACpC,CAACC;QAmB0BA;IAlBzB,IAAIC;IACJ,IAAID,QAAQE,OAAO,CAACC,OAAO,CAACF,SAAS,EAAE;QACrCA,YAAYD,QAAQE,OAAO,CAACC,OAAO,CAACF,SAAS;IAC/C,OAAO;QACLA,YAAY,AAACD,QAAQE,OAAO,CAACC,OAAO,CAACC,MAAM,CAAmBC,CAAC,CAACJ,SAAS;IAC3E;IAEA,MAAMK,qBAAqB,IAAIC;IAE/BC,OAAOC,MAAM,CAACR,WAAWS,OAAO,CAAC,CAAC,EAAEC,KAAK,EAAE;QACzC,IAAIC,IAAAA,mBAAO,EAACD,QAAQ;YAClBH,OAAOK,OAAO,CAACC,IAAAA,sBAAU,EAACH,QAAQD,OAAO,CAAC,CAAC,CAACK,QAAQC,IAAI;gBACtDV,mBAAmBW,GAAG,CAACD,KAAKD;YAC9B;QACF;IACF;IAEA,OAAO;QACLG,qBAAqB,GAAElB,iDAAAA,QAAQE,OAAO,CAACC,OAAO,CAACe,qBAAqB,cAA7ClB,4DAAAA,iDAAiD;QACxEmB,gBAAgB,CAACC;YACf,MAAML,SAAST,mBAAmBe,GAAG,CAACD;YAEtC,IAAI,CAACL,QAAQ;gBACX,MAAM,IAAIO,MAAM,CAAC,qCAAqC,EAAEC,OAAOH,OAAOI,IAAI,GAAG;YAC/E;YAEA,OAAOT;QACT;QACAU,eAAe,CAACC;YACd,MAAMC,cAAc3B,QAAQE,OAAO,CAACC,OAAO,CAACyB,cAAc,CACxD3B,SAAS,CAACyB,UAAU,CAACf,KAAK;YAG5B,MAAMkB,aAAaF,YAAYG,OAAO,CAACC,IAAI,CAAC,CAACX,SAAWA,OAAOY,OAAO;YAEtE,IAAIH,YAAY;gBACd,OAAO;oBAACA;iBAAW;YACrB;YAEA,MAAMI,cAAcN,YAAYM,WAAW,CAACF,IAAI,CAAC,CAACG,MAAQA,IAAIJ,OAAO,CAACK,MAAM,GAAG;YAE/E,IAAIF,aAAa;gBACf,OAAOA,YAAYH,OAAO;YAC5B;YAEA,MAAMM,eAAeT,YAAYG,OAAO,CAACC,IAAI,CAAC,CAACX,SAAWA,OAAOiB,QAAQ;YAEzE,IAAID,cAAc;gBAChB,OAAO;oBAACA;iBAAa;YACvB;YAEA,MAAM,IAAId,MAAM,CAAC,qCAAqC,EAAEI,WAAW;QACrE;QACAzB;IACF;AACF;AAGK,MAAMN,qBAAqBI,IAAAA,wBAAkB,EAClD,CAACC;IACC,MAAMsC,eAAetC,QAAQE,OAAO,CAACC,OAAO,CAACC,MAAM;IACnD,MAAMR,YACJ,OAAO0C,iBAAiB,aACpBvC,IAAAA,wBAAkB,EAAC,CAACwC,MAAQD,aAAaC,QACzC,CAACC,OAAiBF;IAExB,OAAOvC,IAAAA,wBAAkB,EAAC,CAAC0C;QACzB,MAAMrC,SAASR,UAAU6C;QAEzB,OAAOrC;IACT;AACF;AAGK,SAASP,gBACdG,OAA+C;IAE/C,OAAOF,YAAYE;AACrB;AAEO,SAASJ,UACdI,OAA+C,EAC/CyC,OAAe;IAEf,OAAO9C,mBAAmBK,SAAkByC;AAC9C"}
1
+ {"version":3,"sources":["../../src/utils/config.ts"],"names":["drizzleClientCache","getClient","getSchemaConfig","configCache","createContextCache","builder","relations","options","drizzle","client","_","columnNameMappings","Map","Object","values","forEach","table","isTable","entries","getColumns","tsName","col","set","buildTableConfig","tableName","tableConfig","getTableConfig","tableColumns","toTableColumn","column","find","candidate","name","columns","map","primaryKeys","key","uniqueConstraints","constraint","tableConfigs","get","getUniqueConstraints","filter","primary","isUnique","length","findTieBreaker","primaryKey","compositeKey","uniqueColumn","notNull","uniqueConstraint","every","findPrimaryKey","skipDeferredFragments","columnToTsName","Error","String","getPrimaryKey","clientConfig","ctx","_ctx","context"],"mappings":"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"}
@@ -9,6 +9,9 @@ function _export(target, all) {
9
9
  });
10
10
  }
11
11
  _export(exports, {
12
+ get cursorFieldKey () {
13
+ return cursorFieldKey;
14
+ },
12
15
  get drizzleCursorConnectionQuery () {
13
16
  return drizzleCursorConnectionQuery;
14
17
  },
@@ -107,15 +110,20 @@ function getIDSerializer(fields, config) {
107
110
  return `${formatIDChunk(value[config.columnToTsName(fields[0])])}`;
108
111
  };
109
112
  }
113
+ function cursorFieldKey(field, config) {
114
+ return typeof field === 'string' ? field : config.columnToTsName(field);
115
+ }
110
116
  function getColumnSerializer(fields, config) {
111
117
  if (fields.length === 0) {
112
118
  throw new _core.PothosValidationError('Column serializer must have at least one field');
113
119
  }
114
120
  return (value)=>{
115
121
  if (fields.length > 1) {
116
- return `J:${JSON.stringify(fields.map((col)=>value[config.columnToTsName(col)]))}`;
122
+ // each value carries its own type tag, the same ones a single value gets.
123
+ // Plain JSON would turn a Date into a string and refuse a bigint outright.
124
+ return `T:${JSON.stringify(fields.map((field)=>formatCursorChunk(value[cursorFieldKey(field, config)])))}`;
117
125
  }
118
- return formatCursorChunk(value[config.columnToTsName(fields[0])]);
126
+ return formatCursorChunk(value[cursorFieldKey(fields[0], config)]);
119
127
  };
120
128
  }
121
129
  function getCursorFormatter(fields, config) {
@@ -146,7 +154,7 @@ function parseSerializedDrizzleColumn(value) {
146
154
  throw new _core.PothosValidationError('value must be a string');
147
155
  }
148
156
  try {
149
- const [, type, rawValue] = value.match(/^(S|N|D|J|I):(.*)/);
157
+ const [, type, rawValue] = value.match(/^(S|N|D|J|I|T):(.*)/);
150
158
  switch(type){
151
159
  case 'S':
152
160
  return rawValue;
@@ -155,7 +163,11 @@ function parseSerializedDrizzleColumn(value) {
155
163
  case 'D':
156
164
  return new Date(Number.parseInt(rawValue, 10));
157
165
  case 'J':
166
+ // compound values from before each one carried a tag: whatever JSON
167
+ // preserved is the best that can be recovered
158
168
  return JSON.parse(rawValue);
169
+ case 'T':
170
+ return JSON.parse(rawValue).map((chunk)=>chunk === null ? null : parseSerializedDrizzleColumn(chunk));
159
171
  case 'I':
160
172
  return BigInt(rawValue);
161
173
  default:
@@ -245,79 +257,207 @@ function getColumnParser(fields) {
245
257
  return record;
246
258
  };
247
259
  }
248
- function getCursorParser(fields) {
249
- if (fields.length === 0) {
260
+ function getCursorParser(keys) {
261
+ if (keys.length === 0) {
250
262
  throw new _core.PothosValidationError('Cursor must have at least one field');
251
263
  }
252
264
  return (cursor)=>{
253
265
  const parsed = parseDrizzleCursor(cursor);
254
- if (fields.length === 1) {
266
+ if (keys.length === 1) {
255
267
  return {
256
- [fields[0].name]: parsed
268
+ [keys[0]]: parsed
257
269
  };
258
270
  }
259
- if (!Array.isArray(parsed)) {
260
- throw new _core.PothosValidationError(`Expected compound cursor to contain an array, but got ${parsed}`);
271
+ // A cursor issued before a column joined the ordering only holds values for
272
+ // the columns that came before it. Those still describe a position, just a
273
+ // less precise one, so the page is keyed off the prefix the cursor covers
274
+ // rather than rejected. Cursors returned by that page carry every column.
275
+ const values = Array.isArray(parsed) ? parsed : [
276
+ parsed
277
+ ];
278
+ if (values.length === 0) {
279
+ throw new _core.PothosValidationError('Cursor contains no values');
280
+ }
281
+ if (values.length > keys.length) {
282
+ throw new _core.PothosValidationError(`Expected cursor to contain at most ${keys.length} values, but got ${values.length}`);
261
283
  }
262
284
  const record = {};
263
- fields.forEach((field, i)=>{
264
- record[field.name] = parsed[i];
285
+ values.forEach((value, i)=>{
286
+ record[keys[i]] = value;
265
287
  });
266
288
  return record;
267
289
  };
268
290
  }
269
- function parseOrderBy(config, table, orderBy, invert) {
270
- const entries = [];
271
- const columns = [];
291
+ function resolveExpression(expression, table) {
292
+ return typeof expression === 'function' ? expression(table, {
293
+ sql: _drizzleorm.sql
294
+ }) : expression;
295
+ }
296
+ // Drizzle aliases the table it is querying (`d0`), so ordering and comparing
297
+ // have to reach for the column on that alias rather than the original table.
298
+ // Expressions get the alias handed to them and resolve themselves.
299
+ function orderTarget(entry, table) {
300
+ if (entry.column) {
301
+ var _table_entry_key;
302
+ return (_table_entry_key = table[entry.key]) !== null && _table_entry_key !== void 0 ? _table_entry_key : entry.column;
303
+ }
304
+ return resolveExpression(entry.expression, table);
305
+ }
306
+ function flipDirection(direction) {
307
+ return direction === 'asc' ? 'desc' : 'asc';
308
+ }
309
+ function ordersBy(entries, column) {
310
+ return entries.some((entry)=>{
311
+ var _entry_column;
312
+ return ((_entry_column = entry.column) === null || _entry_column === void 0 ? void 0 : _entry_column.name) === column.name;
313
+ });
314
+ }
315
+ // The ordering fixes a row's position only if some set of columns the database
316
+ // keeps unique is fully covered by it. A nullable column can't contribute:
317
+ // rows sharing a null tie with each other, and a cursor compared against null
318
+ // matches nothing.
319
+ function orderIsUnique(entries, config, table) {
320
+ return config.getUniqueConstraints(table.name).some((columns)=>columns.every((column)=>column.notNull && ordersBy(entries, column)));
321
+ }
322
+ // A cursor names a row's position in the ordering, which only works if no two
323
+ // rows can share a position. Ordering by a column with duplicate values (a
324
+ // timestamp, a status) leaves ties to be broken arbitrarily, so a row can move
325
+ // between pages and end up returned twice or skipped entirely. Appending a key
326
+ // the database keeps unique fixes that. Key columns already in the ordering are
327
+ // left where the user put them.
328
+ function appendTieBreaker(entries, config, table) {
329
+ var _ref;
330
+ var _entries_;
331
+ if (orderIsUnique(entries, config, table)) {
332
+ return;
333
+ }
334
+ const tieBreaker = config.findTieBreaker(table.name);
335
+ if (!tieBreaker) {
336
+ return;
337
+ }
338
+ const direction = (_ref = (_entries_ = entries[entries.length - 1]) === null || _entries_ === void 0 ? void 0 : _entries_.direction) !== null && _ref !== void 0 ? _ref : 'asc';
339
+ for (const column of tieBreaker){
340
+ if (!ordersBy(entries, column)) {
341
+ entries.push({
342
+ direction,
343
+ key: config.columnToTsName(column),
344
+ column
345
+ });
346
+ }
347
+ }
348
+ }
349
+ function parseOrderBy(config, table, orderBy, invert, extras) {
272
350
  const normalized = [];
273
- const asc = invert ? 'desc' : 'asc';
274
- const desc = invert ? 'asc' : 'desc';
275
- if ('table' in orderBy && orderBy.table && typeof orderBy.table === 'object') {
276
- entries.push([
277
- config.columnToTsName(orderBy),
278
- asc
279
- ]);
280
- columns.push(orderBy);
281
- normalized.push({
282
- direction: 'asc',
283
- column: orderBy
351
+ const columnEntry = (column, direction)=>({
352
+ direction,
353
+ key: config.columnToTsName(column),
354
+ column
284
355
  });
356
+ if ('table' in orderBy && orderBy.table && typeof orderBy.table === 'object') {
357
+ normalized.push(columnEntry(orderBy, 'asc'));
285
358
  } else if (Array.isArray(orderBy)) {
286
359
  for (const field of orderBy){
287
- entries.push([
288
- config.columnToTsName(field),
289
- asc
290
- ]);
291
- columns.push(field);
292
- normalized.push({
293
- direction: 'asc',
294
- column: field
295
- });
360
+ normalized.push(columnEntry(field, 'asc'));
296
361
  }
297
362
  } else {
298
363
  const tableColumns = (0, _drizzleorm.getColumns)(table.table);
299
364
  Object.entries(orderBy).forEach(([name, direction])=>{
300
- if (direction) {
301
- const column = tableColumns[name];
302
- columns.push(column);
303
- entries.push([
304
- name,
305
- direction === 'asc' ? asc : desc
306
- ]);
307
- normalized.push({
308
- direction: direction,
309
- column
310
- });
365
+ if (!direction) {
366
+ return;
367
+ }
368
+ const column = tableColumns[name];
369
+ if (column) {
370
+ normalized.push(columnEntry(column, direction));
371
+ return;
311
372
  }
373
+ const expression = extras === null || extras === void 0 ? void 0 : extras[name];
374
+ if (!expression) {
375
+ throw new _core.PothosValidationError(`Can't order by "${name}": ${table.name} has no such column, and the query passed to the connection declares no extra with that name`);
376
+ }
377
+ normalized.push({
378
+ direction,
379
+ key: name,
380
+ expression
381
+ });
312
382
  });
313
383
  }
384
+ appendTieBreaker(normalized, config, table);
385
+ const directionFor = ({ direction })=>invert ? flipDirection(direction) : direction;
314
386
  return {
315
387
  normalized,
316
- columns,
317
- orderBy: Object.fromEntries(entries)
388
+ // only real columns need adding to the selection; extras are already selected
389
+ columns: normalized.flatMap(({ column })=>column ? [
390
+ column
391
+ ] : []),
392
+ cursorFields: normalized.map(({ column, key })=>column !== null && column !== void 0 ? column : key),
393
+ // the object form can only name columns, so an expression forces the
394
+ // callback form -- which renders identically for the columns beside it
395
+ orderBy: normalized.some(({ expression })=>expression) ? (t)=>normalized.map((entry)=>(directionFor(entry) === 'asc' ? _drizzleorm.asc : _drizzleorm.desc)(orderTarget(entry, t))) : Object.fromEntries(normalized.map((entry)=>[
396
+ entry.key,
397
+ directionFor(entry)
398
+ ]))
318
399
  };
319
400
  }
320
- function drizzleCursorConnectionQuery({ args, ctx, maxSize = DEFAULT_MAX_SIZE, defaultSize = DEFAULT_SIZE, orderBy, where, config, table }) {
401
+ // Rows past the cursor are those where the first ordering column that differs
402
+ // from the cursor differs in the direction being paged. Columns the cursor
403
+ // doesn't cover are left out: it was issued for a shorter ordering, and its
404
+ // prefix still describes a position.
405
+ function compareTo(entry, operator, value) {
406
+ const isNullish = value === null || value === undefined;
407
+ if (entry.column) {
408
+ if (operator === 'eq' && isNullish) {
409
+ return {
410
+ [entry.key]: {
411
+ isNull: true
412
+ }
413
+ };
414
+ }
415
+ // never the `{ column: value }` shorthand: drizzle reads any object value
416
+ // as a nested filter, so a null throws and a Date silently drops the
417
+ // comparison. Naming the operator works for every value a cursor can hold
418
+ return {
419
+ [entry.key]: {
420
+ [operator]: value
421
+ }
422
+ };
423
+ }
424
+ if (operator === 'eq' && isNullish) {
425
+ return {
426
+ RAW: (table)=>(0, _drizzleorm.isNull)(orderTarget(entry, table))
427
+ };
428
+ }
429
+ const operators = {
430
+ gt: _drizzleorm.gt,
431
+ lt: _drizzleorm.lt,
432
+ eq: _drizzleorm.eq
433
+ };
434
+ // RAW hands the filter the table it is being built against, which is what an
435
+ // expression needs to resolve
436
+ return {
437
+ RAW: (table)=>operators[operator](orderTarget(entry, table), value)
438
+ };
439
+ }
440
+ function keysetFilter(entries, cursor, paging) {
441
+ const parsedCursor = getCursorParser(entries.map(({ key })=>key))(cursor);
442
+ const covered = entries.filter(({ key })=>key in parsedCursor);
443
+ const parts = covered.map((entry, index)=>{
444
+ const ascending = paging === 'after' ? entry.direction === 'asc' : entry.direction === 'desc';
445
+ const compare = compareTo(entry, ascending ? 'gt' : 'lt', parsedCursor[entry.key]);
446
+ if (index === 0) {
447
+ return compare;
448
+ }
449
+ return {
450
+ AND: [
451
+ ...covered.slice(0, index).map((previous)=>compareTo(previous, 'eq', parsedCursor[previous.key])),
452
+ compare
453
+ ]
454
+ };
455
+ });
456
+ return parts.length > 1 ? {
457
+ OR: parts
458
+ } : parts[0];
459
+ }
460
+ function drizzleCursorConnectionQuery({ args, ctx, maxSize = DEFAULT_MAX_SIZE, defaultSize = DEFAULT_SIZE, orderBy, extras, where, config, table }) {
321
461
  var _ref;
322
462
  const { before, after, first, last } = args;
323
463
  if (first != null && first < 0) {
@@ -333,7 +473,7 @@ function drizzleCursorConnectionQuery({ args, ctx, maxSize = DEFAULT_MAX_SIZE, d
333
473
  const defaultSizeForConnection = typeof defaultSize === 'function' ? defaultSize(args, ctx) : defaultSize;
334
474
  const limit = Math.min((_ref = first !== null && first !== void 0 ? first : last) !== null && _ref !== void 0 ? _ref : defaultSizeForConnection, maxSizeForConnection) + 1;
335
475
  const inverted = !first && !!last;
336
- const parsedOrderBy = parseOrderBy(config, table, orderBy, inverted);
476
+ const parsedOrderBy = parseOrderBy(config, table, orderBy, inverted, extras);
337
477
  const columns = {};
338
478
  for (const column of parsedOrderBy.columns){
339
479
  columns[config.columnToTsName(column)] = true;
@@ -343,71 +483,13 @@ function drizzleCursorConnectionQuery({ args, ctx, maxSize = DEFAULT_MAX_SIZE, d
343
483
  whereClauses.push(where);
344
484
  }
345
485
  if (after) {
346
- const cursorParser = getCursorParser(parsedOrderBy.columns);
347
- const parsedCursor = cursorParser(after);
348
- const parts = parsedOrderBy.normalized.map(({ direction, column }, index)=>{
349
- const columnName = config.columnToTsName(column);
350
- const compare = direction === 'asc' ? {
351
- [columnName]: {
352
- gt: parsedCursor[column.name]
353
- }
354
- } : {
355
- [columnName]: {
356
- lt: parsedCursor[column.name]
357
- }
358
- };
359
- if (index === 0) {
360
- return compare;
361
- }
362
- return {
363
- AND: [
364
- ...parsedOrderBy.normalized.slice(0, index).map(({ column: c })=>{
365
- return {
366
- [config.columnToTsName(c)]: parsedCursor[c.name]
367
- };
368
- }),
369
- compare
370
- ]
371
- };
372
- });
373
- whereClauses.push(parts.length > 1 ? {
374
- OR: parts
375
- } : parts[0]);
486
+ whereClauses.push(keysetFilter(parsedOrderBy.normalized, after, 'after'));
376
487
  }
377
488
  if (before) {
378
- const cursorParser = getCursorParser(parsedOrderBy.columns);
379
- const parsedCursor = cursorParser(before);
380
- const parts = parsedOrderBy.normalized.map(({ direction, column }, index)=>{
381
- const columnName = config.columnToTsName(column);
382
- const compare = direction === 'desc' ? {
383
- [columnName]: {
384
- gt: parsedCursor[column.name]
385
- }
386
- } : {
387
- [columnName]: {
388
- lt: parsedCursor[column.name]
389
- }
390
- };
391
- if (index === 0) {
392
- return compare;
393
- }
394
- return {
395
- AND: [
396
- ...parsedOrderBy.normalized.slice(0, index).map(({ column: c })=>{
397
- return {
398
- [config.columnToTsName(c)]: parsedCursor[c.name]
399
- };
400
- }),
401
- compare
402
- ]
403
- };
404
- });
405
- whereClauses.push(parts.length > 1 ? {
406
- OR: parts
407
- } : parts[0]);
489
+ whereClauses.push(keysetFilter(parsedOrderBy.normalized, before, 'before'));
408
490
  }
409
491
  return (0, _selections.omitUndefinedKeys)({
410
- cursorColumns: parsedOrderBy.columns,
492
+ cursorFields: parsedOrderBy.cursorFields,
411
493
  columns,
412
494
  orderBy: parsedOrderBy.orderBy,
413
495
  limit,
@@ -459,18 +541,20 @@ async function resolveDrizzleCursorConnection(tableName, info, typeName, config,
459
541
  let formatter;
460
542
  const results = await resolve((q = {})=>{
461
543
  var _ref;
462
- const { cursorColumns, ...connectionQuery } = drizzleCursorConnectionQuery({
544
+ const { cursorFields, ...connectionQuery } = drizzleCursorConnectionQuery({
463
545
  ...options,
464
546
  config,
465
547
  orderBy: (_ref = typeof q.orderBy === 'function' ? q.orderBy(table.table) : q.orderBy) !== null && _ref !== void 0 ? _ref : config.getPrimaryKey(table.name),
548
+ extras: q.extras,
466
549
  table
467
550
  });
468
- formatter = getCursorFormatter(cursorColumns, config);
551
+ formatter = getCursorFormatter(cursorFields, config);
469
552
  query = (0, _mapquery.queryFromInfo)({
470
553
  context: options.ctx,
471
554
  info,
472
555
  select: (0, _selections.omitUndefinedKeys)({
473
556
  ...connectionQuery,
557
+ extras: q.extras,
474
558
  columns: {
475
559
  ...q.columns,
476
560
  ...connectionQuery.columns
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utils/cursors.ts"],"names":["drizzleCursorConnectionQuery","formatCursorChunk","formatDrizzleCursor","formatIDChunk","getColumnParser","getColumnSerializer","getCursorFormatter","getCursorParser","getIDParser","getIDSerializer","parseDrizzleCursor","parseSerializedDrizzleColumn","parseSerializedIDColumn","resolveDrizzleCursorConnection","wrapConnectionResult","DEFAULT_MAX_SIZE","DEFAULT_SIZE","value","Date","String","Number","PothosValidationError","record","fields","config","length","map","field","keyAsName","JSON","stringify","col","columnToTsName","serializer","encodeBase64","cursor","decoded","decodeBase64","startsWith","slice","type","rawValue","match","parseInt","parse","BigInt","id","dataType","error","name","parsed","Array","isArray","forEach","i","parseOrderBy","table","orderBy","invert","entries","columns","normalized","asc","desc","push","direction","column","tableColumns","getColumns","Object","fromEntries","args","ctx","maxSize","defaultSize","where","first","before","after","last","maxSizeForConnection","defaultSizeForConnection","limit","Math","min","inverted","parsedOrderBy","whereClauses","cursorParser","parsedCursor","parts","index","columnName","compare","gt","lt","AND","c","OR","omitUndefinedKeys","cursorColumns","results","resolveNode","parent","totalCount","edges","gotFullResults","abs","hasNextPage","hasPreviousPage","nodes","connection","pageInfo","startCursor","endCursor","node","reverse","tableName","info","typeName","options","resolve","relations","query","formatter","q","connectionQuery","getPrimaryKey","queryFromInfo","context","select","paths","undefined"],"mappings":";;;;;;;;;;;QA0VgBA;eAAAA;;QAlUAC;eAAAA;;QAqBAC;eAAAA;;QAQAC;eAAAA;;QA8KAC;eAAAA;;QAhJAC;eAAAA;;QAcAC;eAAAA;;QAoKAC;eAAAA;;QA5EAC;eAAAA;;QArHAC;eAAAA;;QAyCAC;eAAAA;;QAiBAC;eAAAA;;QA2BAC;eAAAA;;QAuWMC;eAAAA;;QAvDNC;eAAAA;;;sBAncT;4BAQA;0BAIuB;4BACuB;AAErD,MAAMC,mBAAmB;AACzB,MAAMC,eAAe;AAEd,SAASf,kBAAkBgB,KAAc;IAC9C,IAAIA,SAAS,MAAM;QACjB,OAAO;IACT;IAEA,IAAIA,iBAAiBC,MAAM;QACzB,OAAO,CAAC,EAAE,EAAEC,OAAOC,OAAOH,SAAS;IACrC;IAEA,OAAQ,OAAOA;QACb,KAAK;YACH,OAAO,CAAC,EAAE,EAAEA,OAAO;QACrB,KAAK;YACH,OAAO,CAAC,EAAE,EAAEA,OAAO;QACrB,KAAK;YACH,OAAO,CAAC,EAAE,EAAEA,OAAO;QACrB;YACE,MAAM,IAAII,2BAAqB,CAAC,CAAC,wBAAwB,EAAE,OAAOJ,OAAO;IAC7E;AACF;AAEO,SAASf,oBACdoB,MAA+B,EAC/BC,MAAgB,EAChBC,MAAiC;IAEjC,OAAOlB,mBAAmBiB,QAAQC,QAAQF;AAC5C;AAEO,SAASnB,cAAcc,KAAc;IAC1C,IAAIA,iBAAiBC,MAAM;QACzB,OAAO,GAAGC,OAAOC,OAAOH,SAAS;IACnC;IAEA,OAAQ,OAAOA;QACb,KAAK;QACL,KAAK;QACL,KAAK;YACH,OAAO,GAAGA,OAAO;QACnB;YACE,MAAM,IAAII,2BAAqB,CAAC,CAAC,oBAAoB,EAAE,OAAOJ,OAAO;IACzE;AACF;AAEO,SAASR,gBAAgBc,MAAgB,EAAEC,MAAiC;IACjF,IAAID,OAAOE,MAAM,KAAK,GAAG;QACvB,MAAM,IAAIJ,2BAAqB,CAAC;IAClC;IAEA,OAAO,CAACJ;QACN,IAAIM,OAAOE,MAAM,GAAG,GAAG;YACrBF,OAAOG,GAAG,CAAC,CAACC,QAAUA,MAAMC,SAAS;YACrC,OAAO,GAAGC,KAAKC,SAAS,CAACP,OAAOG,GAAG,CAAC,CAACK,MAAQd,KAAK,CAACO,OAAOQ,cAAc,CAACD,KAAK,IAAI;QACpF;QAEA,OAAO,GAAG5B,cAAcc,KAAK,CAACO,OAAOQ,cAAc,CAACT,MAAM,CAAC,EAAE,EAAE,GAAG;IACpE;AACF;AAEO,SAASlB,oBAAoBkB,MAAgB,EAAEC,MAAiC;IACrF,IAAID,OAAOE,MAAM,KAAK,GAAG;QACvB,MAAM,IAAIJ,2BAAqB,CAAC;IAClC;IAEA,OAAO,CAACJ;QACN,IAAIM,OAAOE,MAAM,GAAG,GAAG;YACrB,OAAO,CAAC,EAAE,EAAEI,KAAKC,SAAS,CAACP,OAAOG,GAAG,CAAC,CAACK,MAAQd,KAAK,CAACO,OAAOQ,cAAc,CAACD,KAAK,IAAI;QACtF;QAEA,OAAO9B,kBAAkBgB,KAAK,CAACO,OAAOQ,cAAc,CAACT,MAAM,CAAC,EAAE,EAAE;IAClE;AACF;AAEO,SAASjB,mBAAmBiB,MAAgB,EAAEC,MAAiC;IACpF,IAAID,OAAOE,MAAM,KAAK,GAAG;QACvB,MAAM,IAAIJ,2BAAqB,CAAC;IAClC;IAEA,MAAMY,aAAa5B,oBAAoBkB,QAAQC;IAE/C,OAAO,CAACP;QACN,OAAOiB,IAAAA,kBAAY,EAAC,CAAC,GAAG,EAAED,WAAWhB,QAAQ;IAC/C;AACF;AAEO,SAASP,mBAAmByB,MAAe;IAChD,IAAI,OAAOA,WAAW,UAAU;QAC9B,MAAM,IAAId,2BAAqB,CAAC;IAClC;IAEA,IAAI;QACF,MAAMe,UAAUC,IAAAA,kBAAY,EAACF;QAC7B,IAAI,CAACC,QAAQE,UAAU,CAAC,QAAQ;YAC9B,MAAM,IAAIjB,2BAAqB,CAAC;QAClC;QAEA,OAAOV,6BAA6ByB,QAAQG,KAAK,CAAC;IACpD,EAAE,OAAM;QACN,MAAM,IAAIlB,2BAAqB,CAAC,CAAC,gBAAgB,EAAEc,QAAQ;IAC7D;AACF;AAEO,SAASxB,6BAA6BM,KAAc;IACzD,IAAI,OAAOA,UAAU,UAAU;QAC7B,MAAM,IAAII,2BAAqB,CAAC;IAClC;IAEA,IAAI;QACF,MAAM,GAAGmB,MAAMC,SAAS,GAAGxB,MAAMyB,KAAK,CAAC;QAEvC,OAAQF;YACN,KAAK;gBACH,OAAOC;YACT,KAAK;gBACH,OAAOrB,OAAOuB,QAAQ,CAACF,UAAU;YACnC,KAAK;gBACH,OAAO,IAAIvB,KAAKE,OAAOuB,QAAQ,CAACF,UAAU;YAC5C,KAAK;gBACH,OAAOZ,KAAKe,KAAK,CAACH;YACpB,KAAK;gBACH,OAAOI,OAAOJ;YAChB;gBACE,MAAM,IAAIpB,2BAAqB,CAAC,CAAC,oBAAoB,EAAEmB,MAAM;QACjE;IACF,EAAE,OAAM;QACN,MAAM,IAAInB,2BAAqB,CAAC,CAAC,yBAAyB,EAAEJ,OAAO;IACrE;AACF;AAEO,SAASL,wBAAwBkC,EAAU,EAAEnB,KAAa;IAC/D,IAAI,CAACmB,IAAI;QACP,OAAOA;IACT;IAEA,IAAI;QACF,IAAInB,MAAMoB,QAAQ,CAACT,UAAU,CAAC,WAAW;YACvC,OAAOlB,OAAOuB,QAAQ,CAACG,IAAI;QAC7B;QAEA,IAAInB,MAAMoB,QAAQ,CAACT,UAAU,CAAC,WAAW;YACvC,OAAOO,OAAOC;QAChB;QAEA,IAAInB,MAAMoB,QAAQ,CAACT,UAAU,CAAC,WAAW;YACvC,OAAOQ;QACT;QAEA,IAAInB,MAAMoB,QAAQ,KAAK,eAAe;YACpC,OAAO,IAAI7B,KAAK4B;QAClB;QAEA,MAAM,IAAIzB,2BAAqB,CAAC,CAAC,oBAAoB,EAAEM,MAAMoB,QAAQ,EAAE;IACzE,EAAE,OAAOC,OAAgB;QACvB,IAAIA,iBAAiB3B,2BAAqB,EAAE;YAC1C,MAAM2B;QACR;QAEA,MAAM,IAAI3B,2BAAqB,CAAC,CAAC,uBAAuB,EAAEyB,IAAI;IAChE;AACF;AAEO,SAAStC,YAAYe,MAAyB;IACnD,IAAIA,OAAOE,MAAM,KAAK,GAAG;QACvB,MAAM,IAAIJ,2BAAqB,CAAC;IAClC;IAEA,OAAO,CAACJ;QACN,IAAIM,OAAOE,MAAM,KAAK,GAAG;YACvB,OAAO;gBAAE,CAACF,MAAM,CAAC,EAAE,CAAC0B,IAAI,CAAC,EAAErC,wBAAwBK,OAAOM,MAAM,CAAC,EAAE;YAAE;QACvE;QAEA,IAAI;YACF,MAAM2B,SAASrB,KAAKe,KAAK,CAAC3B;YAE1B,IAAI,CAACkC,MAAMC,OAAO,CAACF,SAAS;gBAC1B,MAAM,IAAI7B,2BAAqB,CAC7B,CAAC,kDAAkD,EAAEJ,OAAO;YAEhE;YAEA,IAAIiC,OAAOzB,MAAM,KAAKF,OAAOE,MAAM,EAAE;gBACnC,MAAM,IAAIJ,2BAAqB,CAC7B,CAAC,gCAAgC,EAAEE,OAAOE,MAAM,CAAC,mBAAmB,EAAEyB,OAAOzB,MAAM,EAAE;YAEzF;YAEA,MAAMH,SAAkC,CAAC;YAEzCC,OAAO8B,OAAO,CAAC,CAAC1B,OAAO2B;gBACrBhC,MAAM,CAACK,MAAMsB,IAAI,CAAC,GAAGC,MAAM,CAACI,EAAE;YAChC;YAEA,OAAOhC;QACT,EAAE,OAAO0B,OAAgB;YACvB,IAAIA,iBAAiB3B,2BAAqB,EAAE;gBAC1C,MAAM2B;YACR;YAEA,MAAM,IAAI3B,2BAAqB,CAAC,CAAC,uBAAuB,EAAEJ,OAAO;QACnE;IACF;AACF;AAEO,SAASb,gBAAgBmB,MAAyB;IACvD,IAAIA,OAAOE,MAAM,KAAK,GAAG;QACvB,MAAM,IAAIJ,2BAAqB,CAAC;IAClC;IAEA,OAAO,CAACJ;QACN,MAAMiC,SAASvC,6BAA6BM;QAE5C,IAAIM,OAAOE,MAAM,KAAK,GAAG;YACvB,OAAO;gBAAE,CAACF,MAAM,CAAC,EAAE,CAAC0B,IAAI,CAAC,EAAEC;YAAO;QACpC;QAEA,IAAI,CAACC,MAAMC,OAAO,CAACF,SAAS;YAC1B,MAAM,IAAI7B,2BAAqB,CAC7B,CAAC,sDAAsD,EAAE6B,QAAQ;QAErE;QAEA,IAAIA,OAAOzB,MAAM,KAAKF,OAAOE,MAAM,EAAE;YACnC,MAAM,IAAIJ,2BAAqB,CAC7B,CAAC,oCAAoC,EAAEE,OAAOE,MAAM,CAAC,mBAAmB,EAAEyB,OAAOzB,MAAM,EAAE;QAE7F;QAEA,MAAMH,SAAkC,CAAC;QAEzCC,OAAO8B,OAAO,CAAC,CAAC1B,OAAO2B;YACrBhC,MAAM,CAACK,MAAMsB,IAAI,CAAC,GAAGC,MAAM,CAACI,EAAE;QAChC;QAEA,OAAOhC;IACT;AACF;AAEO,SAASf,gBAAgBgB,MAAyB;IACvD,IAAIA,OAAOE,MAAM,KAAK,GAAG;QACvB,MAAM,IAAIJ,2BAAqB,CAAC;IAClC;IAEA,OAAO,CAACc;QACN,MAAMe,SAASxC,mBAAmByB;QAElC,IAAIZ,OAAOE,MAAM,KAAK,GAAG;YACvB,OAAO;gBAAE,CAACF,MAAM,CAAC,EAAE,CAAC0B,IAAI,CAAC,EAAEC;YAAO;QACpC;QAEA,IAAI,CAACC,MAAMC,OAAO,CAACF,SAAS;YAC1B,MAAM,IAAI7B,2BAAqB,CAC7B,CAAC,sDAAsD,EAAE6B,QAAQ;QAErE;QAEA,MAAM5B,SAAkC,CAAC;QAEzCC,OAAO8B,OAAO,CAAC,CAAC1B,OAAO2B;YACrBhC,MAAM,CAACK,MAAMsB,IAAI,CAAC,GAAGC,MAAM,CAACI,EAAE;QAChC;QAEA,OAAOhC;IACT;AACF;AAaA,SAASiC,aACP/B,MAAiC,EACjCgC,KAA4B,EAC5BC,OAAiD,EACjDC,MAAe;IAEf,MAAMC,UAAuD,EAAE;IAC/D,MAAMC,UAAoB,EAAE;IAC5B,MAAMC,aAA8D,EAAE;IAEtE,MAAMC,MAAMJ,SAAS,SAAS;IAC9B,MAAMK,OAAOL,SAAS,QAAQ;IAE9B,IAAI,WAAWD,WAAWA,QAAQD,KAAK,IAAI,OAAOC,QAAQD,KAAK,KAAK,UAAU;QAC5EG,QAAQK,IAAI,CAAC;YAACxC,OAAOQ,cAAc,CAACyB;YAAoBK;SAAI;QAC5DF,QAAQI,IAAI,CAACP;QACbI,WAAWG,IAAI,CAAC;YAAEC,WAAW;YAAOC,QAAQT;QAAkB;IAChE,OAAO,IAAIN,MAAMC,OAAO,CAACK,UAAU;QACjC,KAAK,MAAM9B,SAAS8B,QAAS;YAC3BE,QAAQK,IAAI,CAAC;gBAACxC,OAAOQ,cAAc,CAACL;gBAAQmC;aAAI;YAChDF,QAAQI,IAAI,CAACrC;YACbkC,WAAWG,IAAI,CAAC;gBAAEC,WAAW;gBAAOC,QAAQvC;YAAM;QACpD;IACF,OAAO;QACL,MAAMwC,eAAeC,IAAAA,sBAAU,EAACZ,MAAMA,KAAK;QAC3Ca,OAAOV,OAAO,CACZF,SAGAJ,OAAO,CAAC,CAAC,CAACJ,MAAMgB,UAAU;YAC1B,IAAIA,WAAW;gBACb,MAAMC,SAASC,YAAY,CAAClB,KAAK;gBACjCW,QAAQI,IAAI,CAACE;gBACbP,QAAQK,IAAI,CAAC;oBAACf;oBAAMgB,cAAc,QAAQH,MAAMC;iBAAK;gBACrDF,WAAWG,IAAI,CAAC;oBAAEC,WAAWA;oBAAWC;gBAAO;YACjD;QACF;IACF;IAEA,OAAO;QACLL;QACAD;QACAH,SAASY,OAAOC,WAAW,CAACX;IAC9B;AACF;AAEO,SAAS3D,6BAA6B,EAC3CuE,IAAI,EACJC,GAAG,EACHC,UAAU1D,gBAAgB,EAC1B2D,cAAc1D,YAAY,EAC1ByC,OAAO,EACPkB,KAAK,EACLnD,MAAM,EACNgC,KAAK,EAC+B;QAoBboB;IAnBvB,MAAM,EAAEC,MAAM,EAAEC,KAAK,EAAEF,KAAK,EAAEG,IAAI,EAAE,GAAGR;IACvC,IAAIK,SAAS,QAAQA,QAAQ,GAAG;QAC9B,MAAM,IAAIvD,2BAAqB,CAAC;IAClC;IAEA,IAAI0D,QAAQ,QAAQA,OAAO,GAAG;QAC5B,MAAM,IAAI1D,2BAAqB,CAAC;IAClC;IAEA,IAAIuD,SAAS,QAAQG,QAAQ,MAAM;QACjC,MAAM,IAAI1D,2BAAqB,CAC7B;IAEJ;IAEA,MAAM2D,uBAAuB,OAAOP,YAAY,aAAaA,QAAQF,MAAMC,OAAOC;IAClF,MAAMQ,2BACJ,OAAOP,gBAAgB,aAAaA,YAAYH,MAAMC,OAAOE;IAE/D,MAAMQ,QAAQC,KAAKC,GAAG,EAACR,OAAAA,kBAAAA,mBAAAA,QAASG,kBAATH,kBAAAA,OAAiBK,0BAA0BD,wBAAwB;IAC1F,MAAMK,WAAW,CAACT,SAAS,CAAC,CAACG;IAE7B,MAAMO,gBAAgB/B,aAAa/B,QAAQgC,OAAOC,SAAS4B;IAE3D,MAAMzB,UAAmC,CAAC;IAE1C,KAAK,MAAMM,UAAUoB,cAAc1B,OAAO,CAAE;QAC1CA,OAAO,CAACpC,OAAOQ,cAAc,CAACkC,QAAQ,GAAG;IAC3C;IAEA,MAAMqB,eAAqB,EAAE;IAE7B,IAAIZ,OAAO;QACTY,aAAavB,IAAI,CAACW;IACpB;IAEA,IAAIG,OAAO;QACT,MAAMU,eAAejF,gBAAgB+E,cAAc1B,OAAO;QAC1D,MAAM6B,eAAeD,aAAaV;QAElC,MAAMY,QAAQJ,cAAczB,UAAU,CAACnC,GAAG,CAAC,CAAC,EAAEuC,SAAS,EAAEC,MAAM,EAAE,EAAEyB;YACjE,MAAMC,aAAapE,OAAOQ,cAAc,CAACkC;YACzC,MAAM2B,UACJ5B,cAAc,QACV;gBAAE,CAAC2B,WAAW,EAAE;oBAAEE,IAAIL,YAAY,CAACvB,OAAOjB,IAAI,CAAC;gBAAC;YAAE,IAClD;gBAAE,CAAC2C,WAAW,EAAE;oBAAEG,IAAIN,YAAY,CAACvB,OAAOjB,IAAI,CAAC;gBAAC;YAAE;YAExD,IAAI0C,UAAU,GAAG;gBACf,OAAOE;YACT;YAEA,OAAO;gBACLG,KAAK;uBACAV,cAAczB,UAAU,CAACtB,KAAK,CAAC,GAAGoD,OAAOjE,GAAG,CAAC,CAAC,EAAEwC,QAAQ+B,CAAC,EAAE;wBAC5D,OAAO;4BAAE,CAACzE,OAAOQ,cAAc,CAACiE,GAAG,EAAER,YAAY,CAACQ,EAAEhD,IAAI,CAAC;wBAAC;oBAC5D;oBACA4C;iBACD;YACH;QACF;QAEAN,aAAavB,IAAI,CAAC0B,MAAMjE,MAAM,GAAG,IAAI;YAAEyE,IAAIR;QAAM,IAAIA,KAAK,CAAC,EAAE;IAC/D;IAEA,IAAIb,QAAQ;QACV,MAAMW,eAAejF,gBAAgB+E,cAAc1B,OAAO;QAC1D,MAAM6B,eAAeD,aAAaX;QAElC,MAAMa,QAAQJ,cAAczB,UAAU,CAACnC,GAAG,CAAC,CAAC,EAAEuC,SAAS,EAAEC,MAAM,EAAE,EAAEyB;YACjE,MAAMC,aAAapE,OAAOQ,cAAc,CAACkC;YACzC,MAAM2B,UACJ5B,cAAc,SACV;gBAAE,CAAC2B,WAAW,EAAE;oBAAEE,IAAIL,YAAY,CAACvB,OAAOjB,IAAI,CAAC;gBAAC;YAAE,IAClD;gBAAE,CAAC2C,WAAW,EAAE;oBAAEG,IAAIN,YAAY,CAACvB,OAAOjB,IAAI,CAAC;gBAAC;YAAE;YAExD,IAAI0C,UAAU,GAAG;gBACf,OAAOE;YACT;YAEA,OAAO;gBACLG,KAAK;uBACAV,cAAczB,UAAU,CAACtB,KAAK,CAAC,GAAGoD,OAAOjE,GAAG,CAAC,CAAC,EAAEwC,QAAQ+B,CAAC,EAAE;wBAC5D,OAAO;4BAAE,CAACzE,OAAOQ,cAAc,CAACiE,GAAG,EAAER,YAAY,CAACQ,EAAEhD,IAAI,CAAC;wBAAC;oBAC5D;oBACA4C;iBACD;YACH;QACF;QAEAN,aAAavB,IAAI,CAAC0B,MAAMjE,MAAM,GAAG,IAAI;YAAEyE,IAAIR;QAAM,IAAIA,KAAK,CAAC,EAAE;IAC/D;IAEA,OAAOS,IAAAA,6BAAiB,EAAC;QACvBC,eAAed,cAAc1B,OAAO;QACpCA;QACAH,SAAS6B,cAAc7B,OAAO;QAC9ByB;QACAP,OAAOY,aAAa9D,MAAM,GAAG,IAAI;YAAEuE,KAAKT;QAAa,IAAIA,YAAY,CAAC,EAAE;IAC1E;AACF;AAEO,SAASzE,qBACduF,OAAqB,EACrB9B,IAAkD,EAClDW,KAAa,EACb/C,MAA2B,EAC3BmE,WAAwD,EACxDC,MAAgB,EAChBC,UAAyD;;QA0CvBC,SACFA;IAzChC,MAAMC,iBAAiBL,QAAQ5E,MAAM,KAAK0D,KAAKwB,GAAG,CAACzB;IACnD,MAAM0B,cAAcrC,KAAKM,MAAM,GAAG,OAAON,KAAKQ,IAAI,GAAG,QAAQ2B;IAC7D,MAAMG,kBAAkBtC,KAAKO,KAAK,GAAG,OAAO,CAACP,KAAKK,KAAK,IAAI,CAAC,CAACL,KAAKQ,IAAI,GAAG2B,iBAAiB;IAC1F,MAAMI,QAAQJ,iBAAiBL,QAAQ9D,KAAK,CAAC,GAAG,CAAC,KAAK8D;IAEtD,MAAMU,aAAa;QACjBR;QACAhC;QACAiC;QACAC,OAAO,EAAE;QACTO,UAAU;YACRC,aAAa;YACbC,WAAW;YACXL;YACAD;QACF;IACF;IAEA,MAAMH,QAAQK,MAAMpF,GAAG,CAAC,CAACT,QACvBA,SAAS,OACL,OACAqF,cACE;YACES;YACA,GAAG9F,KAAK;YACRkB,QAAQA,OAAOlB;YACfkG,MAAMb,YAAYrF;QACpB,IACA;YACE8F;YACA5E,QAAQA,OAAOlB;YACfkG,MAAMlG;QACR;IAGR,IAAIsD,KAAKQ,IAAI,IAAI,CAACR,KAAKK,KAAK,EAAE;QAC5B6B,MAAMW,OAAO;IACf;IAEAL,WAAWN,KAAK,GAAGA;IACnBM,WAAWC,QAAQ,CAACC,WAAW,YAAGR,UAAAA,KAAK,CAAC,EAAE,cAARA,8BAAAA,QAAUtE,MAAM,uCAAI;IACtD4E,WAAWC,QAAQ,CAACE,SAAS,aAAGT,WAAAA,KAAK,CAACA,MAAMhF,MAAM,GAAG,EAAE,cAAvBgF,+BAAAA,SAAyBtE,MAAM,yCAAI;IAEnE,OAAO4E;AACT;AAEO,eAAelG,+BACpBwG,SAAiB,EACjBC,IAAwB,EACxBC,QAAgB,EAChB/F,MAAiC,EACjCgG,OAEC,EACDC,OAE+B,EAC/BlB,MAAe;IAEf,MAAM/C,QAAQhC,OAAOkG,SAAS,CAACL,UAAU;IACzC,IAAIM;IACJ,IAAIC;IACJ,MAAMvB,UAAU,MAAMoB,QAAQ,CAACI,IAAI,CAAC,CAAC;YAK9B;QAJL,MAAM,EAAEzB,aAAa,EAAE,GAAG0B,iBAAiB,GAAG9H,6BAA6B;YACzE,GAAGwH,OAAO;YACVhG;YACAiC,OAAO,GACJ,OAAA,OAAOoE,EAAEpE,OAAO,KAAK,aAAaoE,EAAEpE,OAAO,CAACD,MAAMA,KAAK,IAAaqE,EAAEpE,OAAO,cAA7E,kBAAA,OACDjC,OAAOuG,aAAa,CAACvE,MAAMP,IAAI;YACjCO;QACF;QACAoE,YAAYtH,mBAAmB8F,eAAe5E;QAE9CmG,QAAQK,IAAAA,uBAAa,EAAC;YACpBC,SAAST,QAAQhD,GAAG;YACpB8C;YACAY,QAAQ/B,IAAAA,6BAAiB,EAAC;gBACxB,GAAG2B,eAAe;gBAClBlE,SAAS;oBACP,GAAGiE,EAAEjE,OAAO;oBACZ,GAAGkE,gBAAgBlE,OAAO;gBAC5B;gBACAe,OACEmD,gBAAgBnD,KAAK,IAAIkD,EAAElD,KAAK,GAC5B;oBACEqB,KAAK;wBAAC6B,EAAElD,KAAK;wBAAEmD,gBAAgBnD,KAAK;qBAAC;gBACvC,IACAkD,EAAElD,KAAK,IAAImD,gBAAgBnD,KAAK;YACxC;YACAwD,OAAO;gBAAC;oBAAC;iBAAQ;gBAAE;oBAAC;oBAAS;iBAAO;aAAC;YACrCZ;YACA/F;QAEF;QAEA,OAAOmG;IACT;IAEA,IAAI,CAACtB,SAAS;QACZ,OAAOA;IACT;IAEA,qFAAqF;IACrF,IAAI,CAACsB,OAAO;QACV,OAAO;YACLpB;YACAhC,MAAMiD,QAAQjD,IAAI;YAClBiC,YAAYgB,QAAQhB,UAAU;YAC9BC,OAAO,EAAE;YACTO,UAAU;gBACRC,aAAa;gBACbC,WAAW;gBACXL,iBAAiB;gBACjBD,aAAa;YACf;QACF;IACF;IAEA,OAAO9F,qBACLuF,SACAmB,QAAQjD,IAAI,EACZoD,MAAMzC,KAAK,EACX0C,WACAQ,WACA7B,QACAiB,QAAQhB,UAAU;AAEtB"}
1
+ {"version":3,"sources":["../../src/utils/cursors.ts"],"names":["cursorFieldKey","drizzleCursorConnectionQuery","formatCursorChunk","formatDrizzleCursor","formatIDChunk","getColumnParser","getColumnSerializer","getCursorFormatter","getCursorParser","getIDParser","getIDSerializer","parseDrizzleCursor","parseSerializedDrizzleColumn","parseSerializedIDColumn","resolveDrizzleCursorConnection","wrapConnectionResult","DEFAULT_MAX_SIZE","DEFAULT_SIZE","value","Date","String","Number","PothosValidationError","record","fields","config","length","map","field","keyAsName","JSON","stringify","col","columnToTsName","serializer","encodeBase64","cursor","decoded","decodeBase64","startsWith","slice","type","rawValue","match","parseInt","parse","chunk","BigInt","id","dataType","error","name","parsed","Array","isArray","forEach","i","keys","values","resolveExpression","expression","table","sql","orderTarget","entry","column","key","flipDirection","direction","ordersBy","entries","some","orderIsUnique","getUniqueConstraints","columns","every","notNull","appendTieBreaker","tieBreaker","findTieBreaker","push","parseOrderBy","orderBy","invert","extras","normalized","columnEntry","tableColumns","getColumns","Object","directionFor","flatMap","cursorFields","t","asc","desc","fromEntries","compareTo","operator","isNullish","undefined","isNull","RAW","operators","gt","lt","eq","keysetFilter","paging","parsedCursor","covered","filter","parts","index","ascending","compare","AND","previous","OR","args","ctx","maxSize","defaultSize","where","first","before","after","last","maxSizeForConnection","defaultSizeForConnection","limit","Math","min","inverted","parsedOrderBy","whereClauses","omitUndefinedKeys","results","resolveNode","parent","totalCount","edges","gotFullResults","abs","hasNextPage","hasPreviousPage","nodes","connection","pageInfo","startCursor","endCursor","node","reverse","tableName","info","typeName","options","resolve","relations","query","formatter","q","connectionQuery","getPrimaryKey","queryFromInfo","context","select","paths"],"mappings":"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"}