@pol-studios/db 1.0.8 → 1.0.10

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 (80) hide show
  1. package/dist/auth/context.js +21 -12786
  2. package/dist/auth/context.js.map +1 -1
  3. package/dist/auth/guards.js +12 -7640
  4. package/dist/auth/guards.js.map +1 -1
  5. package/dist/auth/hooks.js +25 -10591
  6. package/dist/auth/hooks.js.map +1 -1
  7. package/dist/auth/index.js +43 -13008
  8. package/dist/auth/index.js.map +1 -1
  9. package/dist/canvas-75Y7XMF3.js +1541 -0
  10. package/dist/canvas-75Y7XMF3.js.map +1 -0
  11. package/dist/chunk-2IFGILT3.js +532 -0
  12. package/dist/chunk-2IFGILT3.js.map +1 -0
  13. package/dist/chunk-3M2U6TXH.js +928 -0
  14. package/dist/chunk-3M2U6TXH.js.map +1 -0
  15. package/dist/chunk-3PJTNH2L.js +2778 -0
  16. package/dist/chunk-3PJTNH2L.js.map +1 -0
  17. package/dist/chunk-5ZYAEGCJ.js +416 -0
  18. package/dist/chunk-5ZYAEGCJ.js.map +1 -0
  19. package/dist/chunk-7HG6G25H.js +710 -0
  20. package/dist/chunk-7HG6G25H.js.map +1 -0
  21. package/dist/chunk-7XT7K4QT.js +2687 -0
  22. package/dist/chunk-7XT7K4QT.js.map +1 -0
  23. package/dist/chunk-AWFMICFV.js +158 -0
  24. package/dist/chunk-AWFMICFV.js.map +1 -0
  25. package/dist/chunk-BRTW7CO5.js +1467 -0
  26. package/dist/chunk-BRTW7CO5.js.map +1 -0
  27. package/dist/chunk-EL45Z26M.js +4194 -0
  28. package/dist/chunk-EL45Z26M.js.map +1 -0
  29. package/dist/chunk-ERGF2FCE.js +903 -0
  30. package/dist/chunk-ERGF2FCE.js.map +1 -0
  31. package/dist/chunk-GK7B66LY.js +135 -0
  32. package/dist/chunk-GK7B66LY.js.map +1 -0
  33. package/dist/chunk-GQI6WJGI.js +172 -0
  34. package/dist/chunk-GQI6WJGI.js.map +1 -0
  35. package/dist/chunk-H6365JPC.js +1858 -0
  36. package/dist/chunk-H6365JPC.js.map +1 -0
  37. package/dist/chunk-J4ZVCXZ4.js +1 -0
  38. package/dist/chunk-J4ZVCXZ4.js.map +1 -0
  39. package/dist/chunk-JUVE3DWY.js +433 -0
  40. package/dist/chunk-JUVE3DWY.js.map +1 -0
  41. package/dist/chunk-O3K7R32P.js +7555 -0
  42. package/dist/chunk-O3K7R32P.js.map +1 -0
  43. package/dist/chunk-P4UZ7IXC.js +42 -0
  44. package/dist/chunk-P4UZ7IXC.js.map +1 -0
  45. package/dist/chunk-SEY5UO2T.js +89 -0
  46. package/dist/chunk-SEY5UO2T.js.map +1 -0
  47. package/dist/chunk-USJYMRUO.js +86 -0
  48. package/dist/chunk-USJYMRUO.js.map +1 -0
  49. package/dist/chunk-XX3IWSPM.js +189 -0
  50. package/dist/chunk-XX3IWSPM.js.map +1 -0
  51. package/dist/chunk-Y3INY2CS.js +14 -0
  52. package/dist/chunk-Y3INY2CS.js.map +1 -0
  53. package/dist/chunk-ZTSBF536.js +1927 -0
  54. package/dist/chunk-ZTSBF536.js.map +1 -0
  55. package/dist/client/index.js +13 -141
  56. package/dist/client/index.js.map +1 -1
  57. package/dist/dist-NDNRSNOG.js +521 -0
  58. package/dist/dist-NDNRSNOG.js.map +1 -0
  59. package/dist/gen/index.js +186 -1280
  60. package/dist/gen/index.js.map +1 -1
  61. package/dist/hooks/index.js +21 -8694
  62. package/dist/hooks/index.js.map +1 -1
  63. package/dist/index.js +403 -47848
  64. package/dist/index.js.map +1 -1
  65. package/dist/index.native.js +400 -25048
  66. package/dist/index.native.js.map +1 -1
  67. package/dist/index.web.js +576 -43769
  68. package/dist/index.web.js.map +1 -1
  69. package/dist/mutation/index.js +44 -4675
  70. package/dist/mutation/index.js.map +1 -1
  71. package/dist/parser/index.js +45 -3697
  72. package/dist/parser/index.js.map +1 -1
  73. package/dist/pdf-3TIGQRLA.js +20336 -0
  74. package/dist/pdf-3TIGQRLA.js.map +1 -0
  75. package/dist/query/index.js +31 -13175
  76. package/dist/query/index.js.map +1 -1
  77. package/dist/realtime/index.js +45 -12431
  78. package/dist/realtime/index.js.map +1 -1
  79. package/dist/types/index.js +9 -0
  80. package/package.json +3 -3
@@ -0,0 +1,532 @@
1
+ import {
2
+ OPERATOR_MAP,
3
+ PostgrestQueryParser,
4
+ isObject,
5
+ parseValue
6
+ } from "./chunk-JUVE3DWY.js";
7
+ import {
8
+ unflatten
9
+ } from "./chunk-3PJTNH2L.js";
10
+
11
+ // src/parser/lib/remove-first-path-element.ts
12
+ var removeFirstPathElement = (p) => {
13
+ const aliasWithoutFirstElement = p.alias ? p.alias.split(".").slice(1).join(".") : void 0;
14
+ const pathWithoutFirstEelment = p.path.split(".").slice(1).join(".");
15
+ return {
16
+ declaration: p.declaration.split(".").slice(1).join("."),
17
+ path: pathWithoutFirstEelment,
18
+ alias: aliasWithoutFirstElement && (aliasWithoutFirstElement.split(".").length > 1 || aliasWithoutFirstElement !== pathWithoutFirstEelment) ? aliasWithoutFirstElement : void 0
19
+ };
20
+ };
21
+
22
+ // src/parser/lib/group-paths-recursive.ts
23
+ var isNestedPath = (p) => Array.isArray(p.paths);
24
+ var groupPathsRecursive = (paths) => {
25
+ const grouped = paths.reduce((prev, curr) => {
26
+ const levels = curr.path.split(".").length;
27
+ if (levels === 1) {
28
+ prev.push(curr);
29
+ return prev;
30
+ }
31
+ const firstLevelDeclaration = curr.declaration.split(".")[0];
32
+ const indexOfNested = prev.findIndex(
33
+ (p) => isNestedPath(p) && p.declaration === firstLevelDeclaration
34
+ );
35
+ const pathWithoutCurrentLevel = removeFirstPathElement(curr);
36
+ if (indexOfNested !== -1) {
37
+ prev[indexOfNested].paths.push(pathWithoutCurrentLevel);
38
+ return prev;
39
+ }
40
+ prev.push({
41
+ declaration: firstLevelDeclaration,
42
+ path: curr.path.split(".")[0],
43
+ paths: [pathWithoutCurrentLevel],
44
+ ...curr.alias ? { alias: curr.alias.split(".")[0] } : {}
45
+ });
46
+ return prev;
47
+ }, []);
48
+ return grouped.map(
49
+ (p) => isNestedPath(p) ? { ...p, paths: groupPathsRecursive(p.paths) } : p
50
+ );
51
+ };
52
+
53
+ // src/parser/filter/denormalize.ts
54
+ var denormalize = (paths, obj) => {
55
+ const groups = groupPathsRecursive(paths);
56
+ return groups.reduce((prev, curr) => {
57
+ let value = obj[curr.path];
58
+ if (!isNestedPath(curr)) {
59
+ if (typeof value === "undefined") {
60
+ const array = Object.entries(obj).reduce((prev2, [k, v]) => {
61
+ if (new RegExp(`^${curr.path}.\\d+$`).test(k)) {
62
+ prev2.push(v);
63
+ }
64
+ return prev2;
65
+ }, []);
66
+ if (array.length > 0) {
67
+ value = array;
68
+ }
69
+ }
70
+ if (typeof value === "undefined") {
71
+ let isArray2 = false;
72
+ const jsonValue = Object.entries(obj).reduce(
73
+ (prev2, [k, v]) => {
74
+ if (k.startsWith(`${curr.path}.`)) {
75
+ const key = k.slice(curr.path.length + 1);
76
+ const maybeIdx = key.match(/^\b\d+\b/);
77
+ if (maybeIdx && isFlatNestedArray(prev2)) {
78
+ isArray2 = true;
79
+ prev2 = {
80
+ ...prev2,
81
+ [maybeIdx[0]]: {
82
+ ...prev2[maybeIdx[0]] ? prev2[maybeIdx[0]] : {},
83
+ [key.slice(maybeIdx[0].length + 1)]: v
84
+ }
85
+ };
86
+ } else {
87
+ prev2[maybeIdx ? maybeIdx[0] : key] = v;
88
+ }
89
+ }
90
+ return prev2;
91
+ },
92
+ {}
93
+ );
94
+ if (Object.keys(jsonValue).length > 0) {
95
+ if (isArray2) {
96
+ value = Object.values(jsonValue).map((v) => unflatten(v));
97
+ } else {
98
+ value = unflatten(jsonValue);
99
+ }
100
+ }
101
+ }
102
+ if (typeof value === "undefined") {
103
+ return prev;
104
+ }
105
+ return {
106
+ ...prev,
107
+ [curr.alias || curr.path]: value
108
+ };
109
+ }
110
+ if (value === null || Array.isArray(value) && value.length === 0) {
111
+ return {
112
+ ...prev,
113
+ [curr.alias || curr.path]: value
114
+ };
115
+ }
116
+ let isArray = false;
117
+ const flatNestedObjectOrArray = Object.entries(obj).reduce((prev2, [k, v]) => {
118
+ const isNested = k.startsWith(`${curr.path}.`) || k.includes("!") && k.startsWith(`${removeFirstAlias(curr.declaration)}.`);
119
+ if (!isNested) return prev2;
120
+ const flatKey = k.slice(
121
+ (k.includes("!") ? removeFirstAlias(curr.declaration) : curr.path).length + 1
122
+ );
123
+ const maybeIdx = flatKey.match(/^\b\d+\b/);
124
+ if (maybeIdx && isFlatNestedArray(prev2)) {
125
+ isArray = true;
126
+ const key = flatKey.slice(maybeIdx[0].length + 1);
127
+ return {
128
+ ...prev2,
129
+ [maybeIdx[0]]: {
130
+ ...prev2[maybeIdx[0]] ? prev2[maybeIdx[0]] : {},
131
+ [key]: v
132
+ }
133
+ };
134
+ }
135
+ return {
136
+ ...prev2,
137
+ [flatKey]: v
138
+ };
139
+ }, {});
140
+ if (Object.keys(flatNestedObjectOrArray).length === 0) return prev;
141
+ if (isArray && isFlatNestedArray(flatNestedObjectOrArray)) {
142
+ return {
143
+ ...prev,
144
+ [curr.alias || curr.path]: Object.values(flatNestedObjectOrArray).map(
145
+ (v) => denormalize(curr.paths, v)
146
+ )
147
+ };
148
+ }
149
+ return {
150
+ ...prev,
151
+ [curr.alias || curr.path]: denormalize(
152
+ curr.paths,
153
+ flatNestedObjectOrArray
154
+ )
155
+ };
156
+ }, {});
157
+ };
158
+ var isFlatNestedArray = (obj) => true;
159
+ var removeFirstAlias = (key) => {
160
+ const split = key.split(":");
161
+ if (split.length === 1) return key;
162
+ split.shift();
163
+ return split.join(":");
164
+ };
165
+
166
+ // src/parser/lib/query-types.ts
167
+ var isAndFilter = (f) => Array.isArray(f.and);
168
+ var isOrFilter = (f) => Array.isArray(f.or);
169
+ var isFilterDefinition = (f) => !isAndFilter(f) && !isOrFilter(f);
170
+
171
+ // src/parser/lib/extract-paths-from-filter.ts
172
+ var extractPathsFromFilters = (f, p) => {
173
+ return f.reduce((prev, filter) => {
174
+ if (isAndFilter(filter)) {
175
+ prev.push(...extractPathsFromFilters(filter.and, p));
176
+ } else if (isOrFilter(filter)) {
177
+ prev.push(...extractPathsFromFilters(filter.or, p));
178
+ } else if (isFilterDefinition(filter)) {
179
+ const relatedPath = p.find((p2) => p2.path === filter.path);
180
+ const pathElements = filter.path.split(".");
181
+ const aliasElements = filter.alias?.split(".");
182
+ const declaration = pathElements.map(
183
+ (el, idx) => `${aliasElements && aliasElements[idx] !== el ? `${aliasElements[idx]}:` : ""}${el}`
184
+ ).join(".");
185
+ prev.push({
186
+ path: filter.path,
187
+ alias: filter.alias,
188
+ declaration: relatedPath ? relatedPath.declaration : declaration
189
+ });
190
+ }
191
+ return prev;
192
+ }, []);
193
+ };
194
+
195
+ // src/parser/lib/filter-filter-definitions-by-paths.ts
196
+ var filterFilterDefinitionsByPaths = (f, paths) => {
197
+ return f.reduce((prev, filter) => {
198
+ if (isAndFilter(filter)) {
199
+ const filters = filterFilterDefinitionsByPaths(filter.and, paths);
200
+ if (filters.length > 0) {
201
+ prev.push({ and: filters });
202
+ }
203
+ } else if (isOrFilter(filter)) {
204
+ const filters = filterFilterDefinitionsByPaths(filter.or, paths);
205
+ if (filters.length > 0) {
206
+ prev.push({ or: filters });
207
+ }
208
+ } else if (isFilterDefinition(filter) && paths.includes(filter.path)) {
209
+ prev.push(filter);
210
+ }
211
+ return prev;
212
+ }, []);
213
+ };
214
+
215
+ // src/parser/lib/get.ts
216
+ var get = (obj, path, defaultValue = void 0) => {
217
+ const travel = (regexp) => String.prototype.split.call(path, regexp).filter(Boolean).reduce(
218
+ (res, key) => res !== null && res !== void 0 ? res[key] : res,
219
+ obj
220
+ );
221
+ const result = travel(/[,[\]]+?/) || travel(/[,[\].]+?/);
222
+ return result === void 0 || result === obj ? defaultValue : result;
223
+ };
224
+
225
+ // src/parser/postgrest-filter.ts
226
+ var PostgrestFilter = class _PostgrestFilter {
227
+ constructor(params) {
228
+ this.params = params;
229
+ this._filterPaths = extractPathsFromFilters(
230
+ this.params.filters,
231
+ this.params.paths
232
+ );
233
+ }
234
+ _fn;
235
+ _selectFn;
236
+ _filtersFn;
237
+ _filterPaths;
238
+ static fromQuery(query, opts) {
239
+ const parser = new PostgrestQueryParser(query, opts);
240
+ return new _PostgrestFilter({
241
+ filters: parser.filters,
242
+ paths: parser.paths
243
+ });
244
+ }
245
+ static fromBuilder(fb, opts) {
246
+ const parser = new PostgrestQueryParser(
247
+ fb["url"].searchParams.toString(),
248
+ opts
249
+ );
250
+ return new _PostgrestFilter({
251
+ filters: parser.filters,
252
+ paths: parser.paths
253
+ });
254
+ }
255
+ denormalize(obj) {
256
+ return denormalize([...this.params.paths, ...this._filterPaths], obj);
257
+ }
258
+ apply(obj) {
259
+ if (!this._fn) {
260
+ this._fn = (obj2) => this.applyFilters(obj2) && this.hasPaths(obj2);
261
+ }
262
+ return this._fn(obj);
263
+ }
264
+ applyFilters(obj) {
265
+ if (!this._filtersFn) {
266
+ const filterFns = this.params.filters.map((d) => this.buildFilterFn(d));
267
+ this._filtersFn = (obj2) => filterFns.every((fn) => isObject(obj2) && fn(obj2));
268
+ }
269
+ return this._filtersFn(obj);
270
+ }
271
+ hasFiltersOnPaths(paths) {
272
+ return filterFilterDefinitionsByPaths(this.params.filters, paths).length > 0;
273
+ }
274
+ applyFiltersOnPaths(obj, paths) {
275
+ const filterFns = filterFilterDefinitionsByPaths(
276
+ this.params.filters,
277
+ paths
278
+ ).map((d) => this.buildFilterFn(d));
279
+ const filtersFn = (obj2) => filterFns.every((fn) => isObject(obj2) && fn(obj2));
280
+ return filtersFn(obj);
281
+ }
282
+ hasPaths(obj) {
283
+ if (!this._selectFn) {
284
+ this._selectFn = (obj2) => this.params.paths.every(
285
+ (p) => this.hasPathRecursive(obj2, p.alias ?? p.path)
286
+ );
287
+ }
288
+ return this._selectFn(obj);
289
+ }
290
+ hasPathRecursive(obj, basePath, objectPath) {
291
+ const v = get(obj, basePath);
292
+ if (!objectPath && typeof v !== "undefined") return true;
293
+ if (objectPath && Array.isArray(v)) {
294
+ return v.every((i) => typeof get(i, objectPath) !== "undefined");
295
+ }
296
+ const pathElements = basePath.replace(/->>|->/g, ".").split(".");
297
+ const currentPathElement = pathElements.pop();
298
+ if (pathElements.length === 0) return v === null;
299
+ return this.hasPathRecursive(
300
+ obj,
301
+ pathElements.join("."),
302
+ [currentPathElement, objectPath].filter(Boolean).join(".")
303
+ );
304
+ }
305
+ applyFilterFn(obj, path, {
306
+ filterFn,
307
+ value,
308
+ negate
309
+ }) {
310
+ const pathElements = path.replace(/->>|->/g, ".").split(".");
311
+ const v = get(obj, pathElements[0]);
312
+ if (typeof v === "undefined") {
313
+ if (Array.isArray(obj)) {
314
+ return obj.every(
315
+ (o) => this.applyFilterFn(o, path, { filterFn, value, negate })
316
+ );
317
+ }
318
+ return false;
319
+ }
320
+ if (pathElements.length > 1) {
321
+ return this.applyFilterFn(
322
+ v,
323
+ pathElements.slice(1).join("."),
324
+ {
325
+ filterFn,
326
+ value,
327
+ negate
328
+ }
329
+ );
330
+ }
331
+ const res = filterFn(parseValue(v), value);
332
+ if (negate) return !res;
333
+ return res;
334
+ }
335
+ buildFilterFn(def) {
336
+ if ("or" in def) {
337
+ return (obj) => def.or.some((d) => this.buildFilterFn(d)(obj));
338
+ }
339
+ if ("and" in def) {
340
+ return (obj) => def.and.every((d) => this.buildFilterFn(d)(obj));
341
+ }
342
+ const { operator, path, value, negate, alias } = def;
343
+ const filterFn = OPERATOR_MAP[operator];
344
+ if (!filterFn)
345
+ throw new Error(
346
+ `Unable to build filter function for ${JSON.stringify(
347
+ def
348
+ )}. Operator ${operator} is not supported.`
349
+ );
350
+ return (obj) => this.applyFilterFn(obj, alias ?? path, { filterFn, value, negate });
351
+ }
352
+ };
353
+
354
+ // src/parser/lib/binary-search.ts
355
+ function binarySearch(arr, el, compare) {
356
+ let m = 0;
357
+ let n = arr.length - 1;
358
+ while (m <= n) {
359
+ const k = n + m >> 1;
360
+ const cmp = compare(el, arr[k]);
361
+ if (cmp > 0) {
362
+ m = k + 1;
363
+ } else if (cmp < 0) {
364
+ n = k - 1;
365
+ } else {
366
+ return k;
367
+ }
368
+ }
369
+ return m;
370
+ }
371
+
372
+ // src/parser/lib/cache-data-types.ts
373
+ var isPostgrestPaginationCacheData = (q) => {
374
+ if (!Array.isArray(q)) return false;
375
+ return q.length === 0 || Array.isArray(q[0]);
376
+ };
377
+ var isPostgrestHasMorePaginationCacheData = (q) => {
378
+ if (!Array.isArray(q)) return false;
379
+ if (q.length === 0) return true;
380
+ const firstPage = q[0];
381
+ return Array.isArray(
382
+ firstPage.data
383
+ ) && typeof firstPage.hasMore === "boolean";
384
+ };
385
+
386
+ // src/parser/lib/find-filters.ts
387
+ var findFilters = (f, by) => {
388
+ const filters = [];
389
+ f.forEach((filter) => {
390
+ if (isAndFilter(filter)) {
391
+ filters.push(...findFilters(filter.and, by));
392
+ }
393
+ if (isOrFilter(filter)) {
394
+ filters.push(...findFilters(filter.or, by));
395
+ }
396
+ if (isFilterDefinition(filter)) {
397
+ if ((typeof by.path === "undefined" || filter.path === by.path) && (typeof by.alias === "undefined" || filter.alias === by.alias) && (typeof by.value === "undefined" || filter.value === by.value) && (typeof by.negate === "undefined" || filter.negate === by.negate) && (typeof by.operator === "undefined" || filter.operator === by.operator)) {
398
+ filters.push(filter);
399
+ }
400
+ }
401
+ });
402
+ return filters;
403
+ };
404
+
405
+ // src/parser/lib/if-date-get-time.ts
406
+ var ifDateGetTime = (v) => {
407
+ if (v instanceof Date) return v.getTime();
408
+ if (typeof v === "string") {
409
+ const t = new Date(v).getTime();
410
+ if (!isNaN(t)) return t;
411
+ }
412
+ return v;
413
+ };
414
+
415
+ // src/parser/lib/sorted-comparator.ts
416
+ var buildSortedComparator = (orderBy) => {
417
+ return (a, b) => {
418
+ for (const { column, ascending, nullsFirst, foreignTable } of orderBy) {
419
+ const aValue = ifDateGetTime(
420
+ get(
421
+ a,
422
+ `${foreignTable ? `${foreignTable}.` : ""}${column}`,
423
+ null
424
+ )
425
+ );
426
+ const bValue = ifDateGetTime(
427
+ get(
428
+ b,
429
+ `${foreignTable ? `${foreignTable}.` : ""}${column}`,
430
+ null
431
+ )
432
+ );
433
+ if (aValue === bValue) continue;
434
+ if (aValue === null || aValue === void 0) {
435
+ return nullsFirst ? -1 : 1;
436
+ }
437
+ if (bValue === null || bValue === void 0) {
438
+ return nullsFirst ? 1 : -1;
439
+ }
440
+ if (ascending) {
441
+ return aValue < bValue ? -1 : 1;
442
+ }
443
+ return aValue < bValue ? 1 : -1;
444
+ }
445
+ return 0;
446
+ };
447
+ };
448
+
449
+ // src/parser/lib/find-index-ordered.ts
450
+ var findIndexOrdered = (input, currentData, orderBy) => binarySearch(currentData, input, buildSortedComparator(orderBy));
451
+
452
+ // src/parser/lib/get-table.ts
453
+ var getTable = (query) => query["url"].pathname.split("/").pop();
454
+
455
+ // src/parser/lib/is-postgrest-builder.ts
456
+ var isPostgrestBuilder = (q) => {
457
+ return typeof q.throwOnError === "function";
458
+ };
459
+
460
+ // src/parser/lib/parse-order-by-key.ts
461
+ var parseOrderByKey = (v) => {
462
+ return v.split("|").map((orderBy) => {
463
+ const [tableDef, orderDef] = orderBy.split(":");
464
+ const [foreignTableOrCol, maybeCol] = tableDef.split(".");
465
+ const [dir, nulls] = orderDef.split(".");
466
+ return {
467
+ ascending: dir === "asc",
468
+ nullsFirst: nulls === "nullsFirst",
469
+ foreignTable: maybeCol ? foreignTableOrCol : void 0,
470
+ column: maybeCol ? maybeCol : foreignTableOrCol
471
+ };
472
+ });
473
+ };
474
+
475
+ // src/parser/lib/remove-alias-from-declaration.ts
476
+ var removeAliasFromDeclaration = (d) => d.split(".").map((el) => el.split(":").pop()).join(".");
477
+
478
+ // src/parser/lib/response-types.ts
479
+ var isAnyPostgrestResponse = (q) => {
480
+ if (!q) return false;
481
+ return typeof q.data === "object" || Array.isArray(q.data);
482
+ };
483
+ var isPostgrestPaginationResponse = (q) => {
484
+ return Array.isArray(q);
485
+ };
486
+ var isPostgrestHasMorePaginationResponse = (q) => {
487
+ if (!q) return false;
488
+ return Array.isArray(q.data) && typeof q.hasMore === "boolean";
489
+ };
490
+
491
+ // src/parser/lib/set-filter-value.ts
492
+ var setFilterValue = (searchParams, path, op, value) => {
493
+ const filters = searchParams.getAll(path);
494
+ searchParams.delete(path);
495
+ for (const f of filters) {
496
+ if (f.startsWith(`${op}.`)) {
497
+ continue;
498
+ }
499
+ searchParams.append(path, f);
500
+ }
501
+ searchParams.append(path, `${op}.${value}`);
502
+ };
503
+
504
+ export {
505
+ removeFirstPathElement,
506
+ isNestedPath,
507
+ groupPathsRecursive,
508
+ denormalize,
509
+ isAndFilter,
510
+ isOrFilter,
511
+ isFilterDefinition,
512
+ extractPathsFromFilters,
513
+ filterFilterDefinitionsByPaths,
514
+ get,
515
+ PostgrestFilter,
516
+ binarySearch,
517
+ isPostgrestPaginationCacheData,
518
+ isPostgrestHasMorePaginationCacheData,
519
+ findFilters,
520
+ ifDateGetTime,
521
+ buildSortedComparator,
522
+ findIndexOrdered,
523
+ getTable,
524
+ isPostgrestBuilder,
525
+ parseOrderByKey,
526
+ removeAliasFromDeclaration,
527
+ isAnyPostgrestResponse,
528
+ isPostgrestPaginationResponse,
529
+ isPostgrestHasMorePaginationResponse,
530
+ setFilterValue
531
+ };
532
+ //# sourceMappingURL=chunk-2IFGILT3.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/parser/lib/remove-first-path-element.ts","../src/parser/lib/group-paths-recursive.ts","../src/parser/filter/denormalize.ts","../src/parser/lib/query-types.ts","../src/parser/lib/extract-paths-from-filter.ts","../src/parser/lib/filter-filter-definitions-by-paths.ts","../src/parser/lib/get.ts","../src/parser/postgrest-filter.ts","../src/parser/lib/binary-search.ts","../src/parser/lib/cache-data-types.ts","../src/parser/lib/find-filters.ts","../src/parser/lib/if-date-get-time.ts","../src/parser/lib/sorted-comparator.ts","../src/parser/lib/find-index-ordered.ts","../src/parser/lib/get-table.ts","../src/parser/lib/is-postgrest-builder.ts","../src/parser/lib/parse-order-by-key.ts","../src/parser/lib/remove-alias-from-declaration.ts","../src/parser/lib/response-types.ts","../src/parser/lib/set-filter-value.ts"],"sourcesContent":["import { Path } from './query-types';\n\nexport const removeFirstPathElement = (p: Path): Path => {\n const aliasWithoutFirstElement = p.alias\n ? p.alias.split('.').slice(1).join('.')\n : undefined;\n const pathWithoutFirstEelment = p.path.split('.').slice(1).join('.');\n\n return {\n declaration: p.declaration.split('.').slice(1).join('.'),\n path: pathWithoutFirstEelment,\n alias:\n aliasWithoutFirstElement &&\n (aliasWithoutFirstElement.split('.').length > 1 ||\n aliasWithoutFirstElement !== pathWithoutFirstEelment)\n ? aliasWithoutFirstElement\n : undefined,\n };\n};\n","import { Path } from './query-types';\nimport { removeFirstPathElement } from './remove-first-path-element';\n\nexport type NestedPath = {\n alias?: string;\n path: string;\n declaration: string;\n paths: (Path | NestedPath)[];\n};\n\nexport const isNestedPath = (p: Path | NestedPath): p is NestedPath =>\n Array.isArray((p as NestedPath).paths);\n\n// group paths by first path elements declaration\n// returns [Path, Path, NestedPath, NestedPath, Path]\nexport const groupPathsRecursive = (paths: Path[]): (Path | NestedPath)[] => {\n const grouped = paths.reduce<(Path | NestedPath)[]>((prev, curr) => {\n const levels = curr.path.split('.').length;\n if (levels === 1) {\n prev.push(curr);\n return prev;\n }\n\n // if has more than one level left,\n const firstLevelDeclaration = curr.declaration.split('.')[0];\n const indexOfNested = prev.findIndex(\n (p) => isNestedPath(p) && p.declaration === firstLevelDeclaration,\n );\n const pathWithoutCurrentLevel = removeFirstPathElement(curr);\n if (indexOfNested !== -1) {\n // add to nested\n (prev[indexOfNested] as NestedPath).paths.push(pathWithoutCurrentLevel);\n return prev;\n }\n // create nested\n prev.push({\n declaration: firstLevelDeclaration,\n path: curr.path.split('.')[0],\n paths: [pathWithoutCurrentLevel],\n ...(curr.alias ? { alias: curr.alias.split('.')[0] } : {}),\n });\n return prev;\n }, []);\n\n return grouped.map((p) =>\n isNestedPath(p) ? { ...p, paths: groupPathsRecursive(p.paths) } : p,\n );\n};\n","import * as flat from \"flat\";\n\nimport {\n groupPathsRecursive,\n isNestedPath,\n} from \"../lib/group-paths-recursive\";\nimport { Path } from \"../lib/query-types\";\n\n/**\n * Denormalize a normalized response object using the paths of the target query\n * **/\nexport const denormalize = <R extends Record<string, unknown>>(\n // the paths into which we need to transform\n paths: Path[],\n // the normalized response data\n obj: R,\n): R => {\n const groups = groupPathsRecursive(paths);\n\n return groups.reduce<R>((prev, curr) => {\n let value = obj[curr.path];\n\n if (!isNestedPath(curr)) {\n if (typeof value === \"undefined\") {\n // if simple array, e.g. ['a', 'b', 'c'], unflatten\n const array = Object.entries(obj).reduce<any[]>((prev, [k, v]) => {\n // test if key is curr_path.0, curr_path.1 etc.\n if (new RegExp(`^${curr.path}.\\\\d+$`).test(k)) {\n prev.push(v);\n }\n return prev;\n }, []);\n if (array.length > 0) {\n value = array;\n }\n }\n if (typeof value === \"undefined\") {\n // if json(b) column, unflatten\n let isArray = false;\n const jsonValue = Object.entries(obj).reduce<Record<string, unknown>>(\n (prev, [k, v]) => {\n if (k.startsWith(`${curr.path}.`)) {\n const key = k.slice(curr.path.length + 1);\n const maybeIdx = key.match(/^\\b\\d+\\b/);\n if (maybeIdx && isFlatNestedArray(prev)) {\n isArray = true;\n prev = {\n ...prev,\n [maybeIdx[0]]: {\n ...(prev[maybeIdx[0]] ? prev[maybeIdx[0]] : {}),\n [key.slice(maybeIdx[0].length + 1)]: v,\n },\n };\n } else {\n prev[maybeIdx ? maybeIdx[0] : key] = v;\n }\n }\n return prev;\n },\n {},\n );\n if (Object.keys(jsonValue).length > 0) {\n if (isArray) {\n value = Object.values(jsonValue).map((v) => flat.unflatten(v));\n } else {\n value = flat.unflatten(jsonValue);\n }\n }\n }\n if (typeof value === \"undefined\") {\n return prev;\n }\n return {\n ...prev,\n [curr.alias || curr.path]: value,\n };\n }\n\n // if value is null or an empty array, the relation is not set and we can return the \"empty\" value\n if (value === null || (Array.isArray(value) && value.length === 0)) {\n return {\n ...prev,\n [curr.alias || curr.path]: value,\n };\n }\n\n let isArray = false;\n const flatNestedObjectOrArray = Object.entries(obj).reduce<\n Record<string, Record<string, unknown>> | Record<string, unknown>\n >((prev, [k, v]) => {\n const isNested = k.startsWith(`${curr.path}.`) ||\n (k.includes(\"!\") &&\n k.startsWith(`${removeFirstAlias(curr.declaration)}.`));\n\n if (!isNested) return prev;\n // either set to key, or to idx.key\n // is either path.key or path!hint.key\n const flatKey = k.slice(\n (k.includes(\"!\") ? removeFirstAlias(curr.declaration) : curr.path)\n .length + 1,\n );\n const maybeIdx = flatKey.match(/^\\b\\d+\\b/);\n if (maybeIdx && isFlatNestedArray(prev)) {\n isArray = true;\n const key = flatKey.slice(maybeIdx[0].length + 1);\n return {\n ...prev,\n [maybeIdx[0]]: {\n ...(prev[maybeIdx[0]] ? prev[maybeIdx[0]] : {}),\n [key]: v,\n },\n };\n }\n return {\n ...prev,\n [flatKey]: v,\n };\n }, {});\n\n if (Object.keys(flatNestedObjectOrArray).length === 0) return prev;\n if (isArray && isFlatNestedArray(flatNestedObjectOrArray)) {\n return {\n ...prev,\n [curr.alias || curr.path]: Object.values(flatNestedObjectOrArray).map(\n (v) => denormalize(curr.paths, v),\n ),\n };\n }\n return {\n ...prev,\n [curr.alias || curr.path]: denormalize(\n curr.paths,\n flatNestedObjectOrArray,\n ),\n };\n }, {} as R);\n};\n\n// just to make ts happy\nconst isFlatNestedArray = (\n obj: Record<string, Record<string, unknown>> | Record<string, unknown>,\n): obj is Record<string, Record<string, unknown>> => true;\n\nconst removeFirstAlias = (key: string): string => {\n const split = key.split(\":\");\n if (split.length === 1) return key;\n split.shift();\n return split.join(\":\");\n};\n","/**\n * A function that validates whether the given input is an object of type Type\n * @returns true if obj is of type Type, false if not\n */\nexport type FilterFn<Type extends Record<string, unknown>> = (\n obj: unknown,\n) => obj is Type;\n\n/**\n * The supported value types\n */\nexport type ValueType = number | string | boolean | null | Date | object;\n\n/**\n * A function implementing a FilterOperators\n * @param columnValue the value of the input object to test the filter against\n * @param filterValue the value of the filter, e.g. in .eq('colname', 'filterValue'), 'filterValue' would be the filterValue\n * @returns true if the filter applies, false if not\n */\nexport type OperatorFn = (columnValue: any, filterValue: any) => boolean;\n\n/**\n * All supported operators of PostgREST\n */\nexport type PostgrestFilterOperator =\n | 'or'\n | 'eq'\n | 'neq'\n | 'gt'\n | 'gte'\n | 'lt'\n | 'lte'\n | 'like'\n | 'ilike'\n | 'is'\n | 'in'\n | 'cs'\n | 'cd'\n | 'fts'\n | 'plfts';\n\n\n/**\n * An object describing a selected path of a query\n *\n */\nexport type Path = {\n /**\n * The aliased path if a column or relation name mapping is used within the path\n */\n alias?: string;\n /**\n * The \"real\" path of a column\n */\n path: string;\n /**\n * The full declaration of a column that includes alias, hints and inner joins\n */\n declaration: string;\n};\n\n/**\n * A decomposed filter applied to a query\n */\nexport type FilterDefinition = {\n /**\n * The path to which the filter is applied\n */\n path: string;\n /**\n * The aliased path if a column or relation name mapping is used\n */\n alias?: string;\n /**\n * The operator that is applied\n */\n operator: PostgrestFilterOperator;\n /**\n * Whether or not to negate the results of the filter, e.g. when .not('name', 'eq', 'Paris') is applied\n */\n negate: boolean;\n /**\n * The value of the filter\n */\n value: ValueType;\n};\n\n/**\n * A json representation of PostgREST filters that are applied to a query\n */\nexport type FilterDefinitions = (\n | { or: FilterDefinitions }\n | { and: FilterDefinitions }\n | FilterDefinition\n)[];\n\ntype ArrayElement<ArrayType extends readonly unknown[]> =\n ArrayType extends readonly (infer ElementType)[] ? ElementType : never;\n\nexport const isAndFilter = (\n f: ArrayElement<FilterDefinitions>,\n): f is { and: FilterDefinitions } =>\n Array.isArray((f as { and: FilterDefinitions }).and);\n\nexport const isOrFilter = (\n f: ArrayElement<FilterDefinitions>,\n): f is { or: FilterDefinitions } =>\n Array.isArray((f as { or: FilterDefinitions }).or);\n\nexport const isFilterDefinition = (\n f: ArrayElement<FilterDefinitions>,\n): f is FilterDefinition => !isAndFilter(f) && !isOrFilter(f);\n\nexport type OrderDefinition = {\n column: string;\n ascending: boolean;\n nullsFirst: boolean;\n foreignTable?: string;\n};\n","import {\n isAndFilter,\n isOrFilter,\n isFilterDefinition,\n Path,\n FilterDefinitions,\n} from './query-types';\n\nexport const extractPathsFromFilters = (f: FilterDefinitions, p: Path[]) => {\n return f.reduce<Path[]>((prev, filter) => {\n if (isAndFilter(filter)) {\n prev.push(...extractPathsFromFilters(filter.and, p));\n } else if (isOrFilter(filter)) {\n prev.push(...extractPathsFromFilters(filter.or, p));\n } else if (isFilterDefinition(filter)) {\n const relatedPath = p.find((p) => p.path === filter.path);\n const pathElements = filter.path.split('.');\n const aliasElements = filter.alias?.split('.');\n const declaration = pathElements\n .map(\n (el, idx) =>\n `${\n aliasElements && aliasElements[idx] !== el\n ? `${aliasElements[idx]}:`\n : ''\n }${el}`,\n )\n .join('.');\n prev.push({\n path: filter.path,\n alias: filter.alias,\n declaration: relatedPath ? relatedPath.declaration : declaration,\n });\n }\n return prev;\n }, []);\n};\n","import {\n FilterDefinitions,\n isAndFilter,\n isFilterDefinition,\n isOrFilter,\n} from './query-types';\n\nexport const filterFilterDefinitionsByPaths = (\n f: FilterDefinitions,\n paths: string[],\n) => {\n return f.reduce<FilterDefinitions>((prev, filter) => {\n if (isAndFilter(filter)) {\n const filters = filterFilterDefinitionsByPaths(filter.and, paths);\n if (filters.length > 0) {\n prev.push({ and: filters });\n }\n } else if (isOrFilter(filter)) {\n const filters = filterFilterDefinitionsByPaths(filter.or, paths);\n if (filters.length > 0) {\n prev.push({ or: filters });\n }\n } else if (isFilterDefinition(filter) && paths.includes(filter.path)) {\n prev.push(filter);\n }\n return prev;\n }, []);\n};\n","export const get = (obj: any, path: string, defaultValue: any = undefined) => {\n const travel = (regexp: RegExp) =>\n String.prototype.split\n .call(path, regexp)\n .filter(Boolean)\n .reduce(\n (res, key) => (res !== null && res !== undefined ? res[key] : res),\n obj,\n );\n const result = travel(/[,[\\]]+?/) || travel(/[,[\\].]+?/);\n return result === undefined || result === obj ? defaultValue : result;\n};\n","import { PostgrestBuilder } from '@supabase/postgrest-js';\n\nimport { denormalize } from './filter/denormalize';\nimport { extractPathsFromFilters } from './lib/extract-paths-from-filter';\nimport { filterFilterDefinitionsByPaths } from './lib/filter-filter-definitions-by-paths';\nimport { get } from './lib/get';\nimport { isObject } from './lib/is-object';\nimport { OPERATOR_MAP } from './lib/operators';\nimport { parseValue } from './lib/parse-value';\nimport {\n FilterDefinition,\n FilterDefinitions,\n FilterFn,\n OperatorFn,\n Path,\n ValueType,\n} from './lib/query-types';\nimport {\n PostgrestQueryParser,\n PostgrestQueryParserOptions,\n} from './postgrest-query-parser';\n\nexport class PostgrestFilter<Result extends Record<string, unknown>> {\n private _fn: FilterFn<Result> | undefined;\n private _selectFn: FilterFn<Result> | undefined;\n private _filtersFn: FilterFn<Result> | undefined;\n private _filterPaths: Path[];\n\n constructor(\n public readonly params: { filters: FilterDefinitions; paths: Path[] },\n ) {\n this._filterPaths = extractPathsFromFilters(\n this.params.filters,\n this.params.paths,\n );\n }\n\n public static fromQuery(query: string, opts?: PostgrestQueryParserOptions) {\n const parser = new PostgrestQueryParser(query, opts);\n return new PostgrestFilter({\n filters: parser.filters,\n paths: parser.paths,\n });\n }\n\n public static fromBuilder<\n Result extends Record<string, unknown> = Record<string, unknown>,\n >(\n fb: PostgrestBuilder<any, Result>,\n opts?: PostgrestQueryParserOptions,\n ): PostgrestFilter<Result> {\n const parser = new PostgrestQueryParser(\n fb['url'].searchParams.toString(),\n opts,\n );\n return new PostgrestFilter<Result>({\n filters: parser.filters,\n paths: parser.paths,\n });\n }\n\n denormalize<Type extends Record<string, unknown>>(obj: Type): Type {\n return denormalize([...this.params.paths, ...this._filterPaths], obj);\n }\n\n apply(obj: unknown): obj is Result {\n if (!this._fn) {\n this._fn = (obj): obj is Result =>\n this.applyFilters(obj) && this.hasPaths(obj);\n }\n return this._fn(obj);\n }\n\n applyFilters(obj: unknown): obj is Result {\n if (!this._filtersFn) {\n const filterFns = this.params.filters.map((d) => this.buildFilterFn(d));\n this._filtersFn = (obj): obj is Result =>\n filterFns.every((fn) => isObject(obj) && fn(obj));\n }\n return this._filtersFn(obj);\n }\n\n hasFiltersOnPaths(paths: string[]): boolean {\n return (\n filterFilterDefinitionsByPaths(this.params.filters, paths).length > 0\n );\n }\n\n applyFiltersOnPaths(obj: unknown, paths: string[]): obj is Result {\n const filterFns = filterFilterDefinitionsByPaths(\n this.params.filters,\n paths,\n ).map((d) => this.buildFilterFn(d));\n const filtersFn = (obj: unknown): obj is Result =>\n filterFns.every((fn) => isObject(obj) && fn(obj));\n return filtersFn(obj);\n }\n\n hasPaths(obj: unknown): obj is Result {\n if (!this._selectFn) {\n this._selectFn = (obj): obj is Result =>\n this.params.paths.every((p) =>\n this.hasPathRecursive(obj, p.alias ?? p.path),\n );\n }\n return this._selectFn(obj);\n }\n\n private hasPathRecursive(\n obj: unknown,\n basePath: string,\n objectPath?: string,\n ): boolean {\n const v = get(obj, basePath);\n\n // Return early if we are not searching for a nested value and the path is valid\n if (!objectPath && typeof v !== 'undefined') return true;\n\n // If we are looking for a nested value and we found an array, validate that all array elements have a value for the required path\n if (objectPath && Array.isArray(v)) {\n return v.every((i) => typeof get(i, objectPath) !== 'undefined');\n }\n\n const pathElements = basePath.replace(/->>|->/g, '.').split('.');\n const currentPathElement = pathElements.pop();\n\n // Return if arrived at root level\n // obj is valid if v is null, because the foreign key relation can be null\n if (pathElements.length === 0) return v === null;\n // If there are levels to go up to, add current path element to object path and go up\n return this.hasPathRecursive(\n obj,\n pathElements.join('.'),\n [currentPathElement, objectPath].filter(Boolean).join('.'),\n );\n }\n\n private applyFilterFn(\n obj: object | any[],\n path: string,\n {\n filterFn,\n value,\n negate,\n }: { filterFn: OperatorFn; value: ValueType; negate: boolean },\n ): boolean {\n // parse json operators \"->\" and \"->>\" to \".\"\n const pathElements = path.replace(/->>|->/g, '.').split('.');\n\n const v = get(obj, pathElements[0]);\n\n if (typeof v === 'undefined') {\n // if obj is an array, we should apply the filter to all elements of the array\n if (Array.isArray(obj)) {\n return obj.every((o) =>\n this.applyFilterFn(o, path, { filterFn, value, negate }),\n );\n }\n return false;\n }\n\n if (pathElements.length > 1) {\n // recursively resolve json path\n return this.applyFilterFn(\n v as Record<string, unknown>,\n pathElements.slice(1).join('.'),\n {\n filterFn,\n value,\n negate,\n },\n );\n }\n\n const res = filterFn(parseValue(v), value);\n if (negate) return !res;\n return res;\n }\n\n private buildFilterFn(\n def:\n | FilterDefinition\n | { or: FilterDefinitions }\n | { and: FilterDefinitions },\n ): (obj: object) => boolean {\n if ('or' in def) {\n return (obj: object) => def.or.some((d) => this.buildFilterFn(d)(obj));\n }\n if ('and' in def) {\n return (obj: object) => def.and.every((d) => this.buildFilterFn(d)(obj));\n }\n const { operator, path, value, negate, alias } = def;\n const filterFn = OPERATOR_MAP[operator];\n if (!filterFn)\n throw new Error(\n `Unable to build filter function for ${JSON.stringify(\n def,\n )}. Operator ${operator} is not supported.`,\n );\n\n return (obj: object) =>\n this.applyFilterFn(obj, alias ?? path, { filterFn, value, negate });\n }\n}\n","/*\n * Binary search in JavaScript.\n * Returns the index of of the element in a sorted array or (-n-1) where n is the insertion point for the new element.\n * Parameters:\n * ar - A sorted array\n * el - An element to search for\n * compare - A comparator function. The function takes two arguments: (a, b) and returns:\n * a negative number if a is less than b;\n * 0 if a is equal to b;\n * a positive number of a is greater than b.\n * The array may contain duplicate elements. If there are more than one equal elements in the array,\n * the returned value can be the index of any one of the equal elements.\n */\nexport function binarySearch<Type>(\n arr: Type[],\n el: Type,\n compare: (a: Type, b: Type) => number,\n) {\n let m = 0;\n let n = arr.length - 1;\n while (m <= n) {\n const k = (n + m) >> 1;\n const cmp = compare(el, arr[k]);\n if (cmp > 0) {\n m = k + 1;\n } else if (cmp < 0) {\n n = k - 1;\n } else {\n return k;\n }\n }\n return m;\n}\n","import { PostgrestHasMorePaginationResponse } from './response-types';\n\nexport type PostgrestPaginationCacheData<Result> = Result[][];\n\nexport const isPostgrestPaginationCacheData = <Result>(\n q: unknown,\n): q is PostgrestPaginationCacheData<Result> => {\n if (!Array.isArray(q)) return false;\n return q.length === 0 || Array.isArray(q[0]);\n};\n\nexport type PostgrestHasMorePaginationCacheData<Result> =\n PostgrestHasMorePaginationResponse<Result>[];\n\nexport const isPostgrestHasMorePaginationCacheData = <Result>(\n q: unknown,\n): q is PostgrestHasMorePaginationCacheData<Result> => {\n if (!Array.isArray(q)) return false;\n if (q.length === 0) return true;\n const firstPage = q[0];\n return (\n Array.isArray(\n (firstPage as PostgrestHasMorePaginationResponse<Result>).data,\n ) &&\n typeof (firstPage as PostgrestHasMorePaginationResponse<Result>).hasMore ===\n 'boolean'\n );\n};\n","import {\n isAndFilter,\n isOrFilter,\n isFilterDefinition,\n FilterDefinitions,\n FilterDefinition,\n} from './query-types';\n\n// Helper to search for filters in a filter definition\nexport const findFilters = (\n f: FilterDefinitions,\n by: Partial<FilterDefinition>,\n) => {\n const filters: FilterDefinition[] = [];\n f.forEach((filter) => {\n if (isAndFilter(filter)) {\n filters.push(...findFilters(filter.and, by));\n }\n if (isOrFilter(filter)) {\n filters.push(...findFilters(filter.or, by));\n }\n if (isFilterDefinition(filter)) {\n if (\n (typeof by.path === 'undefined' || filter.path === by.path) &&\n (typeof by.alias === 'undefined' || filter.alias === by.alias) &&\n (typeof by.value === 'undefined' || filter.value === by.value) &&\n (typeof by.negate === 'undefined' || filter.negate === by.negate) &&\n (typeof by.operator === 'undefined' || filter.operator === by.operator)\n ) {\n filters.push(filter);\n }\n }\n });\n return filters;\n};\n","export const ifDateGetTime = (v: unknown) => {\n if (v instanceof Date) return v.getTime();\n if (typeof v === 'string') {\n const t = new Date(v).getTime();\n if (!isNaN(t)) return t;\n }\n return v;\n};\n","import { get as defaultGet } from './get';\nimport { ifDateGetTime } from './if-date-get-time';\nimport { OrderDefinition } from './query-types';\n\nexport const buildSortedComparator = <Type extends Record<string, unknown>>(\n orderBy: OrderDefinition[],\n) => {\n return (a: Type, b: Type) => {\n for (const { column, ascending, nullsFirst, foreignTable } of orderBy) {\n const aValue = ifDateGetTime(\n defaultGet(\n a,\n `${foreignTable ? `${foreignTable}.` : ''}${column}`,\n null,\n ),\n );\n\n const bValue = ifDateGetTime(\n defaultGet(\n b,\n `${foreignTable ? `${foreignTable}.` : ''}${column}`,\n null,\n ),\n );\n\n // go to next if value is equals\n if (aValue === bValue) continue;\n\n // nullsFirst / nullsLast\n if (aValue === null || aValue === undefined) {\n return nullsFirst ? -1 : 1;\n }\n\n if (bValue === null || bValue === undefined) {\n return nullsFirst ? 1 : -1;\n }\n\n // otherwise, if we're ascending, lowest sorts first\n if (ascending) {\n return aValue < bValue ? -1 : 1;\n }\n\n // if descending, highest sorts first\n return aValue < bValue ? 1 : -1;\n }\n\n return 0;\n };\n};\n","import { binarySearch } from './binary-search';\nimport { OrderDefinition } from './query-types';\nimport { buildSortedComparator } from './sorted-comparator';\n\nexport const findIndexOrdered = <Type extends Record<string, unknown>>(\n input: Type,\n currentData: Type[],\n orderBy: OrderDefinition[],\n): number => binarySearch(currentData, input, buildSortedComparator(orderBy));\n","import {\n PostgrestBuilder,\n PostgrestQueryBuilder,\n} from \"@supabase/postgrest-js\";\n\nexport const getTable = (\n query:\n | PostgrestBuilder<any, any>\n | PostgrestQueryBuilder<any, any, any>,\n): string => (query as { url: URL })[\"url\"].pathname.split(\"/\").pop() as string;\n","import { PostgrestBuilder } from '@supabase/postgrest-js';\n\nexport const isPostgrestBuilder = <Result>(\n q: unknown,\n): q is PostgrestBuilder<any, Result> => {\n return typeof (q as PostgrestBuilder<any, Result>).throwOnError === 'function';\n};\n","import { OrderDefinition } from './query-types';\n\n/**\n * Parses orderByKey back to OrderDefinition\n * @param key generated by PostgrestParser\n * @returns The parsed OrderDefinition\n */\nexport const parseOrderByKey = (v: string): OrderDefinition[] => {\n return v.split('|').map((orderBy) => {\n const [tableDef, orderDef] = orderBy.split(':');\n const [foreignTableOrCol, maybeCol] = tableDef.split('.');\n const [dir, nulls] = orderDef.split('.');\n return {\n ascending: dir === 'asc',\n nullsFirst: nulls === 'nullsFirst',\n foreignTable: maybeCol ? foreignTableOrCol : undefined,\n column: maybeCol ? maybeCol : foreignTableOrCol,\n };\n });\n};\n","// removes alias from every level of declaration\nexport const removeAliasFromDeclaration = (d: string) =>\n d\n .split('.')\n .map((el) => el.split(':').pop() as string)\n .join('.');\n","import {\n PostgrestMaybeSingleResponse,\n PostgrestResponse,\n PostgrestSingleResponse,\n} from '@supabase/postgrest-js';\n\n// Convencience type to not bloat up implementation\nexport type AnyPostgrestResponse<Result> =\n | PostgrestSingleResponse<Result>\n | PostgrestMaybeSingleResponse<Result>\n | PostgrestResponse<Result>;\n\nexport const isAnyPostgrestResponse = <Result>(\n q: unknown,\n): q is AnyPostgrestResponse<Result> => {\n if (!q) return false;\n return (\n typeof (q as AnyPostgrestResponse<Result>).data === 'object' ||\n Array.isArray((q as AnyPostgrestResponse<Result>).data)\n );\n};\n\nexport type PostgrestPaginationResponse<Result> = Result[];\n\nexport const isPostgrestPaginationResponse = <Result>(\n q: unknown,\n): q is PostgrestPaginationResponse<Result> => {\n return Array.isArray(q);\n};\n\nexport type PostgrestHasMorePaginationResponse<Result> = {\n data: Result[];\n hasMore: boolean;\n};\n\nexport const isPostgrestHasMorePaginationResponse = <Result>(\n q: unknown,\n): q is PostgrestHasMorePaginationResponse<Result> => {\n if (!q) return false;\n return (\n Array.isArray((q as PostgrestHasMorePaginationResponse<Result>).data) &&\n typeof (q as PostgrestHasMorePaginationResponse<Result>).hasMore ===\n 'boolean'\n );\n};\n","export const setFilterValue = (\n searchParams: URLSearchParams,\n path: string,\n op: string,\n value: string,\n) => {\n const filters = searchParams.getAll(path);\n // delete all\n searchParams.delete(path);\n\n // re-create\n for (const f of filters) {\n if (f.startsWith(`${op}.`)) {\n continue;\n }\n searchParams.append(path, f);\n }\n\n searchParams.append(path, `${op}.${value}`);\n};\n"],"mappings":"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","names":["prev","isArray","p","obj"]}