@pol-studios/db 1.0.10 → 1.0.12
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/DataLayerContext-CL6alnkb.d.ts +755 -0
- package/dist/UserMetadataContext-B8gVWGMl.d.ts +35 -0
- package/dist/UserMetadataContext-DntmpK41.d.ts +33 -0
- package/dist/auth/context.d.ts +3 -2
- package/dist/auth/context.js +5 -4
- package/dist/auth/guards.js +2 -2
- package/dist/auth/hooks.d.ts +3 -3
- package/dist/auth/hooks.js +6 -5
- package/dist/auth/index.d.ts +3 -2
- package/dist/auth/index.js +8 -6
- package/dist/{canvas-UVNDA54X.node → canvas-C4TBBDUL.node} +0 -0
- package/dist/{canvas-75Y7XMF3.js → canvas-ZQNCL7JL.js} +2 -2
- package/dist/chunk-5EFDS7SR.js +205 -0
- package/dist/chunk-5EFDS7SR.js.map +1 -0
- package/dist/{chunk-BRTW7CO5.js → chunk-7SCJNYTE.js} +1 -9
- package/dist/chunk-7SCJNYTE.js.map +1 -0
- package/dist/chunk-DJ6VLEAL.js +247 -0
- package/dist/chunk-DJ6VLEAL.js.map +1 -0
- package/dist/{chunk-Y3INY2CS.js → chunk-GC3TBUWE.js} +1 -1
- package/dist/chunk-GC3TBUWE.js.map +1 -0
- package/dist/{chunk-7HG6G25H.js → chunk-H3LNH2NT.js} +169 -268
- package/dist/chunk-H3LNH2NT.js.map +1 -0
- package/dist/{chunk-USJYMRUO.js → chunk-HAWJTZCK.js} +2 -2
- package/dist/chunk-HAWJTZCK.js.map +1 -0
- package/dist/chunk-JAATANS3.js +429 -0
- package/dist/chunk-JAATANS3.js.map +1 -0
- package/dist/chunk-LNJ3WF7V.js +470 -0
- package/dist/chunk-LNJ3WF7V.js.map +1 -0
- package/dist/chunk-N26IEHZT.js +79 -0
- package/dist/chunk-N26IEHZT.js.map +1 -0
- package/dist/chunk-NSIAAYW3.js +1 -0
- package/dist/chunk-NSIAAYW3.js.map +1 -0
- package/dist/chunk-NZON56CB.js +3864 -0
- package/dist/chunk-NZON56CB.js.map +1 -0
- package/dist/{chunk-O3K7R32P.js → chunk-OQ7U6EQ3.js} +118 -123
- package/dist/chunk-OQ7U6EQ3.js.map +1 -0
- package/dist/chunk-SM73S2DY.js +11 -0
- package/dist/chunk-SM73S2DY.js.map +1 -0
- package/dist/{chunk-JUVE3DWY.js → chunk-TKWR5AAY.js} +47 -65
- package/dist/chunk-TKWR5AAY.js.map +1 -0
- package/dist/{chunk-2IFGILT3.js → chunk-U5UNPBKB.js} +76 -107
- package/dist/chunk-U5UNPBKB.js.map +1 -0
- package/dist/chunk-WGDJ4IXR.js +921 -0
- package/dist/chunk-WGDJ4IXR.js.map +1 -0
- package/dist/chunk-WVF7RUW5.js +186 -0
- package/dist/chunk-WVF7RUW5.js.map +1 -0
- package/dist/{chunk-ZTSBF536.js → chunk-X3HZLNBV.js} +637 -435
- package/dist/chunk-X3HZLNBV.js.map +1 -0
- package/dist/{chunk-EL45Z26M.js → chunk-XU3SBFAG.js} +1219 -208
- package/dist/chunk-XU3SBFAG.js.map +1 -0
- package/dist/chunk-ZVBHWU7O.js +1412 -0
- package/dist/chunk-ZVBHWU7O.js.map +1 -0
- package/dist/client/index.d.ts +1 -1
- package/dist/client/index.js +42 -23
- package/dist/client/index.js.map +1 -1
- package/dist/core/index.d.ts +19 -0
- package/dist/{index-BFu5_dS8.d.ts → database.types-ChFCG-4M.d.ts} +1 -177
- package/dist/gen/index.js +4 -2
- package/dist/hooks/index.d.ts +10 -3
- package/dist/hooks/index.js +8 -10
- package/dist/index-CQLyNG6A.d.ts +433 -0
- package/dist/index.d.ts +12 -8
- package/dist/index.js +92 -48
- package/dist/index.native.d.ts +373 -33
- package/dist/index.native.js +79 -47
- package/dist/index.web.d.ts +10 -7
- package/dist/index.web.js +83 -78
- package/dist/index.web.js.map +1 -1
- package/dist/mutation/index.d.ts +2 -2
- package/dist/mutation/index.js +307 -122
- package/dist/mutation/index.js.map +1 -1
- package/dist/parser/index.js +2 -2
- package/dist/{pdf-3TIGQRLA.js → pdf-PHXP7RHD.js} +2 -2
- package/dist/powersync-bridge/index.d.ts +284 -0
- package/dist/powersync-bridge/index.js +22 -0
- package/dist/powersync-bridge/index.js.map +1 -0
- package/dist/query/index.js +5 -5
- package/dist/realtime/index.js +252 -128
- package/dist/realtime/index.js.map +1 -1
- package/dist/{UserMetadataContext-BYYqA6LI.d.ts → setupAuthContext-Kv-THH-h.d.ts} +1 -29
- package/dist/types/index.d.ts +5 -1
- package/dist/types/index.js +10 -5
- package/dist/{useBatchUpsert-CSQVX7w8.d.ts → useBatchUpsert-9OYjibLh.d.ts} +1 -1
- package/dist/{useDbCount-RGCuHmHp.d.ts → useDbCount-BG356T9i.d.ts} +3 -719
- package/dist/{useReceiptAI-Bn0czE7C.d.ts → useReceiptAI-6HkRpRml.d.ts} +1 -1
- package/dist/{useResolveFeedback-CpZPP8Pw.d.ts → useResolveFeedback-BWmatBlE.d.ts} +26 -45
- package/dist/{useSupabase-pPhUZHcl.d.ts → useSupabase-DvWVuHHE.d.ts} +2 -1
- package/dist/with-auth/index.d.ts +704 -0
- package/dist/with-auth/index.js +1221 -0
- package/dist/with-auth/index.js.map +1 -0
- package/package.json +25 -10
- package/dist/chunk-2IFGILT3.js.map +0 -1
- package/dist/chunk-3M2U6TXH.js +0 -928
- package/dist/chunk-3M2U6TXH.js.map +0 -1
- package/dist/chunk-5ZYAEGCJ.js +0 -416
- package/dist/chunk-5ZYAEGCJ.js.map +0 -1
- package/dist/chunk-7HG6G25H.js.map +0 -1
- package/dist/chunk-7XT7K4QT.js +0 -2687
- package/dist/chunk-7XT7K4QT.js.map +0 -1
- package/dist/chunk-AWFMICFV.js +0 -158
- package/dist/chunk-AWFMICFV.js.map +0 -1
- package/dist/chunk-BRTW7CO5.js.map +0 -1
- package/dist/chunk-EL45Z26M.js.map +0 -1
- package/dist/chunk-ERGF2FCE.js +0 -903
- package/dist/chunk-ERGF2FCE.js.map +0 -1
- package/dist/chunk-GK7B66LY.js +0 -135
- package/dist/chunk-GK7B66LY.js.map +0 -1
- package/dist/chunk-GQI6WJGI.js +0 -172
- package/dist/chunk-GQI6WJGI.js.map +0 -1
- package/dist/chunk-JUVE3DWY.js.map +0 -1
- package/dist/chunk-O3K7R32P.js.map +0 -1
- package/dist/chunk-SEY5UO2T.js +0 -89
- package/dist/chunk-SEY5UO2T.js.map +0 -1
- package/dist/chunk-USJYMRUO.js.map +0 -1
- package/dist/chunk-XX3IWSPM.js +0 -189
- package/dist/chunk-XX3IWSPM.js.map +0 -1
- package/dist/chunk-Y3INY2CS.js.map +0 -1
- package/dist/chunk-ZTSBF536.js.map +0 -1
- /package/dist/{canvas-75Y7XMF3.js.map → canvas-ZQNCL7JL.js.map} +0 -0
- /package/dist/{pdf-3TIGQRLA.js.map → pdf-PHXP7RHD.js.map} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/gen/public/UserMetadata/query.ts"],"sourcesContent":["export const UserMetadata = {\n schema: \"public\",\n table: \"UserMetadata\",\n defaultQuery: \"key, userId, value\"\n} as const;"],"mappings":";AAAO,IAAM,eAAe;AAAA,EAC1B,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,cAAc;AAChB;","names":[]}
|
|
@@ -5,13 +5,11 @@ import {
|
|
|
5
5
|
} from "./chunk-3PJTNH2L.js";
|
|
6
6
|
|
|
7
7
|
// src/parser/lib/sort-search-param.ts
|
|
8
|
-
var sortSearchParams = (params) => new URLSearchParams(
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
})
|
|
14
|
-
);
|
|
8
|
+
var sortSearchParams = (params) => new URLSearchParams(Array.from(params.entries()).sort((a, b) => {
|
|
9
|
+
const x = `${a[0]}${a[1]}`;
|
|
10
|
+
const y = `${b[0]}${b[1]}`;
|
|
11
|
+
return x > y ? 1 : -1;
|
|
12
|
+
}));
|
|
15
13
|
|
|
16
14
|
// src/parser/lib/encode-object.ts
|
|
17
15
|
var encodeObject = (obj) => {
|
|
@@ -75,14 +73,10 @@ var OPERATOR_MAP = {
|
|
|
75
73
|
cd: (c, v) => {
|
|
76
74
|
if (!Array.isArray(c)) return false;
|
|
77
75
|
if (!Array.isArray(v)) v = v.slice(1, -1).split(",");
|
|
78
|
-
return c.every(
|
|
79
|
-
(i) => v.some((cmpVal) => deepEqual(cmpVal, i))
|
|
80
|
-
);
|
|
76
|
+
return c.every((i) => v.some((cmpVal) => deepEqual(cmpVal, i)));
|
|
81
77
|
},
|
|
82
78
|
fts: textSearch,
|
|
83
|
-
plfts: (c, v) => buildLikeRegex(enclose(v.toLowerCase(), "%")).test(
|
|
84
|
-
c.toString().toLowerCase()
|
|
85
|
-
)
|
|
79
|
+
plfts: (c, v) => buildLikeRegex(enclose(v.toLowerCase(), "%")).test(c.toString().toLowerCase())
|
|
86
80
|
};
|
|
87
81
|
|
|
88
82
|
// src/parser/lib/parse-select-param.ts
|
|
@@ -98,17 +92,14 @@ var parseSelectParam = (s, currentPath) => {
|
|
|
98
92
|
}).reduce((prev, curr, idx, matches) => {
|
|
99
93
|
if (curr.name === "selectedColumns") {
|
|
100
94
|
const name = matches[idx - 1].value.slice(1, -1);
|
|
101
|
-
prev = {
|
|
95
|
+
prev = {
|
|
96
|
+
...prev,
|
|
97
|
+
[name]: curr.value
|
|
98
|
+
};
|
|
102
99
|
}
|
|
103
100
|
return prev;
|
|
104
101
|
}, {});
|
|
105
|
-
const columns = s.replace(
|
|
106
|
-
new RegExp(
|
|
107
|
-
`${Object.entries(foreignTables).map(([table, selectedColumns]) => `${table}(${selectedColumns})`.replace(/\(/g, "\\(").replace(/\)/g, "\\)")).join("|")}`,
|
|
108
|
-
"g"
|
|
109
|
-
),
|
|
110
|
-
""
|
|
111
|
-
).replace(/(,)\1+/g, ",").split(",").filter((c) => c.length > 0).map((c) => {
|
|
102
|
+
const columns = s.replace(new RegExp(`${Object.entries(foreignTables).map(([table, selectedColumns]) => `${table}(${selectedColumns})`.replace(/\(/g, "\\(").replace(/\)/g, "\\)")).join("|")}`, "g"), "").replace(/(,)\1+/g, ",").split(",").filter((c) => c.length > 0).map((c) => {
|
|
112
103
|
const split = c.split(":");
|
|
113
104
|
const hasAlias = split.length > 1;
|
|
114
105
|
return {
|
|
@@ -117,29 +108,24 @@ var parseSelectParam = (s, currentPath) => {
|
|
|
117
108
|
path: [currentPath?.path, split[hasAlias ? 1 : 0]].filter(Boolean).join(".")
|
|
118
109
|
};
|
|
119
110
|
});
|
|
120
|
-
return [
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
});
|
|
135
|
-
})
|
|
136
|
-
];
|
|
111
|
+
return [...columns, ...Object.entries(foreignTables).flatMap(([currentDeclaration, selectedColumns]) => {
|
|
112
|
+
const aliasSplit = currentDeclaration.split(":");
|
|
113
|
+
const currentAliasElem = aliasSplit.length > 1 ? aliasSplit[0] : void 0;
|
|
114
|
+
const currentPathDeclaration = aliasSplit[aliasSplit.length - 1];
|
|
115
|
+
const currentPathElem = currentPathDeclaration.split("!")[0];
|
|
116
|
+
const path = [currentPath?.path, currentPathElem].filter(Boolean).join(".");
|
|
117
|
+
const alias = [currentPath?.alias ?? currentPath?.path, currentAliasElem ?? currentPathElem].filter(Boolean).join(".");
|
|
118
|
+
const declaration = [currentPath?.declaration, currentDeclaration].filter(Boolean).join(".");
|
|
119
|
+
return parseSelectParam(`${selectedColumns}`, {
|
|
120
|
+
path,
|
|
121
|
+
alias: currentPath?.alias || currentAliasElem ? alias : void 0,
|
|
122
|
+
declaration
|
|
123
|
+
});
|
|
124
|
+
})];
|
|
137
125
|
};
|
|
138
126
|
|
|
139
127
|
// src/parser/lib/is-iso-date-string.ts
|
|
140
|
-
var isISODateString = (v) => typeof v === "string" && /(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z))/.test(
|
|
141
|
-
v
|
|
142
|
-
);
|
|
128
|
+
var isISODateString = (v) => typeof v === "string" && /(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z))/.test(v);
|
|
143
129
|
|
|
144
130
|
// src/parser/lib/parse-value.ts
|
|
145
131
|
var parseValue = (v) => {
|
|
@@ -271,9 +257,7 @@ var PostgrestQueryParser = class {
|
|
|
271
257
|
if (!this._filters) {
|
|
272
258
|
const filters = [];
|
|
273
259
|
this._params.forEach((value, key) => {
|
|
274
|
-
if (SUPPORTED_OPERATORS.some(
|
|
275
|
-
(f) => key === f || value.split(".").includes(f)
|
|
276
|
-
)) {
|
|
260
|
+
if (SUPPORTED_OPERATORS.some((f) => key === f || value.split(".").includes(f))) {
|
|
277
261
|
const filter = this.parseFilterString(`${key}.${value}`, void 0);
|
|
278
262
|
if (filter !== null) filters.push(filter);
|
|
279
263
|
}
|
|
@@ -286,7 +270,9 @@ var PostgrestQueryParser = class {
|
|
|
286
270
|
if (filter.startsWith("and(") && filter.endsWith(")")) {
|
|
287
271
|
const andFilters = filter.slice(4, -1).split(",").map((s) => this.parseFilterString(s, prefix)).filter(isNotNull);
|
|
288
272
|
if (andFilters.length === 0) return null;
|
|
289
|
-
else return {
|
|
273
|
+
else return {
|
|
274
|
+
and: andFilters
|
|
275
|
+
};
|
|
290
276
|
}
|
|
291
277
|
const split = filter.split(".");
|
|
292
278
|
if ([split[0], split[1]].includes("or")) {
|
|
@@ -303,23 +289,14 @@ var PostgrestQueryParser = class {
|
|
|
303
289
|
return prev;
|
|
304
290
|
}, []).map((s) => this.parseFilterString(s, foreignTable)).filter(isNotNull);
|
|
305
291
|
if (orFilters.length === 0) return null;
|
|
306
|
-
else return {
|
|
292
|
+
else return {
|
|
293
|
+
or: orFilters
|
|
294
|
+
};
|
|
307
295
|
}
|
|
308
|
-
const operatorIdx = findLastIndex(
|
|
309
|
-
|
|
310
|
-
(s) => SUPPORTED_OPERATORS.includes(s)
|
|
311
|
-
);
|
|
312
|
-
if (operatorIdx === -1)
|
|
313
|
-
throw new Error(
|
|
314
|
-
`Could not find a valid operator in ${split.join(
|
|
315
|
-
"."
|
|
316
|
-
)}. Supported are ${SUPPORTED_OPERATORS.join(",")}.`
|
|
317
|
-
);
|
|
296
|
+
const operatorIdx = findLastIndex(split, (s) => SUPPORTED_OPERATORS.includes(s));
|
|
297
|
+
if (operatorIdx === -1) throw new Error(`Could not find a valid operator in ${split.join(".")}. Supported are ${SUPPORTED_OPERATORS.join(",")}.`);
|
|
318
298
|
const negate = split[operatorIdx - 1] === "not";
|
|
319
|
-
const pathOrAlias = [
|
|
320
|
-
prefix,
|
|
321
|
-
...split.slice(0, negate ? operatorIdx - 1 : operatorIdx)
|
|
322
|
-
].filter(Boolean).join(".").replace(/\s/g, "");
|
|
299
|
+
const pathOrAlias = [prefix, ...split.slice(0, negate ? operatorIdx - 1 : operatorIdx)].filter(Boolean).join(".").replace(/\s/g, "");
|
|
323
300
|
let path = pathOrAlias;
|
|
324
301
|
let alias;
|
|
325
302
|
for (const p of this.paths) {
|
|
@@ -356,7 +333,9 @@ var PostgrestParser = class extends PostgrestQueryParser {
|
|
|
356
333
|
this._url = new URL(fb["url"]);
|
|
357
334
|
const headers = fb["headers"];
|
|
358
335
|
this._headers = Object.fromEntries(headers.entries());
|
|
359
|
-
this._body = isObject(fb["body"]) ? {
|
|
336
|
+
this._body = isObject(fb["body"]) ? {
|
|
337
|
+
...fb["body"]
|
|
338
|
+
} : void 0;
|
|
360
339
|
this.method = fb["method"];
|
|
361
340
|
this.searchParams = this._url.searchParams;
|
|
362
341
|
this.queryKey = sortSearchParams(this._url.searchParams).toString();
|
|
@@ -394,9 +373,12 @@ var PostgrestParser = class extends PostgrestQueryParser {
|
|
|
394
373
|
});
|
|
395
374
|
}
|
|
396
375
|
});
|
|
397
|
-
this.orderByKey = this.orderBy.map(
|
|
398
|
-
|
|
399
|
-
|
|
376
|
+
this.orderByKey = this.orderBy.map(({
|
|
377
|
+
column,
|
|
378
|
+
ascending,
|
|
379
|
+
nullsFirst,
|
|
380
|
+
foreignTable
|
|
381
|
+
}) => `${foreignTable ? `${foreignTable}.` : ""}${column}:${ascending ? "asc" : "desc"}.${nullsFirst ? "nullsFirst" : "nullsLast"}`).join("|");
|
|
400
382
|
}
|
|
401
383
|
_url;
|
|
402
384
|
_headers;
|
|
@@ -430,4 +412,4 @@ export {
|
|
|
430
412
|
PostgrestQueryParser,
|
|
431
413
|
PostgrestParser
|
|
432
414
|
};
|
|
433
|
-
//# sourceMappingURL=chunk-
|
|
415
|
+
//# sourceMappingURL=chunk-TKWR5AAY.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/parser/lib/sort-search-param.ts","../src/parser/lib/encode-object.ts","../src/parser/lib/is-object.ts","../src/parser/lib/find-last-index.ts","../src/parser/lib/is-not-null.ts","../src/parser/lib/operators.ts","../src/parser/lib/parse-select-param.ts","../src/parser/lib/is-iso-date-string.ts","../src/parser/lib/parse-value.ts","../src/parser/postgrest-query-parser.ts","../src/parser/PostgrestParser.ts"],"sourcesContent":["export const sortSearchParams = (params: URLSearchParams) => new URLSearchParams(Array.from(params.entries()).sort((a, b) => {\n const x = `${a[0]}${a[1]}`;\n const y = `${b[0]}${b[1]}`;\n return x > y ? 1 : -1;\n}));","import { flatten } from \"flat\";\nimport { sortSearchParams } from \"./sort-search-param\";\n\n/**\n * Encodes an object by url-encoding an ordered lists of all paths and their values.\n */\nexport const encodeObject = (obj: Record<string, unknown>): string => {\n const sortedEntries = Object.entries(flatten(obj) as Record<string, unknown>).sort(([a], [b]) => a.length - b.length);\n const bodyParams = new URLSearchParams();\n sortedEntries.forEach(([key, value]) => {\n bodyParams.append(key, String(value));\n });\n return sortSearchParams(bodyParams).toString();\n};","export const isObject = (v: unknown): v is Record<string, unknown> => typeof v === 'object' && !Array.isArray(v) && v !== null;","/**\n * Returns the index of the last element in the array where predicate is true, and -1\n * otherwise.\n * @param array The source array to search in\n * @param predicate find calls predicate once for each element of the array, in descending\n * order, until it finds one where predicate returns true. If such an element is found,\n * findLastIndex immediately returns that element index. Otherwise, findLastIndex returns -1.\n */\nexport function findLastIndex<T>(array: T[], predicate: (value: T, index: number, obj: T[]) => boolean): number {\n let l = array.length;\n while (l--) {\n if (predicate(array[l], l, array)) return l;\n }\n return -1;\n}","/**\n *\n * @param i Ahhh gotta love typescript\n * @returns\n */\nexport const isNotNull = <I,>(i: I | null): i is I => i !== null;","import { deepEqual } from 'fast-equals';\nimport { PostgrestFilterOperator, OperatorFn } from './query-types';\n\n/**\n * Builds a regex for a (i)like postgres operator by replacing the \"%\" with a regex wildcard \".*\"\n * @param search The search value\n * @returns A RegExp representing the (i)like operation\n */\nconst buildLikeRegex = (search: string) => new RegExp(`^${search.replace(/%/g, '.*')}$`);\n\n/**\n * A poor humans attempt to implement postgres text search in javascript.\n * Converts the search string into a regex before testing it against all tokens.\n */\nconst textSearch: OperatorFn = (c, v) => {\n const regExp = `^${v.split('&').map((v: string) => v.trim().toLowerCase()).join('|').replace(/:\\*/g, '.*')}$`;\n const tokens = c.match(/'(.*?)'/g).map((t: string) => t.replace(/'/g, '').toLowerCase());\n return tokens.some((t: string) => new RegExp(regExp).test(t));\n};\n\n/**\n * Date instances do not work with equality operators, which is why their times are compared instead.\n *\n * ref: https://stackoverflow.com/questions/492994/compare-two-dates-with-javascript\n * @param v The input value\n * @returns If the input value is an instanceof Date, return v.getTime(), else the input value\n */\nconst ifDateGetTime = (v: any) => v instanceof Date ? v.getTime() : v;\nconst enclose = (v: string, char: string) => {\n if (!v.startsWith(char)) v = `${char}${v}`;\n if (!v.endsWith(char)) v = `${v}${char}`;\n return v;\n};\n\n/**\n * An object containing all PostgrestFilterOperator implementations\n */\nexport const OPERATOR_MAP: { [Key in PostgrestFilterOperator]?: OperatorFn } = {\n eq: (c, v) => ifDateGetTime(c) === ifDateGetTime(v),\n neq: (c, v) => ifDateGetTime(c) !== ifDateGetTime(v),\n gt: (c, v) => c > v,\n gte: (c, v) => c >= v,\n lt: (c, v) => c < v,\n lte: (c, v) => c <= v,\n like: (c, v) => buildLikeRegex(v).test(c.toString()),\n ilike: (c, v) => buildLikeRegex(v.toLowerCase()).test(c.toString().toLowerCase()),\n is: (c, v) => c === v,\n in: (c, v) => {\n const parsedValue = v.slice(1, -1).split(',');\n return parsedValue.some((i: string) => i === c);\n },\n // contains\n cs: (c, v) => {\n if (!Array.isArray(c)) return false;\n if (!Array.isArray(v)) v = v.slice(1, -1).split(',');\n return v.every((i: string) => c.some(colVal => deepEqual(colVal, i)));\n },\n // containedBy\n cd: (c, v) => {\n if (!Array.isArray(c)) return false;\n if (!Array.isArray(v)) v = v.slice(1, -1).split(',');\n return c.every((i: string) => v.some((cmpVal: any) => deepEqual(cmpVal, i)));\n },\n fts: textSearch,\n plfts: (c, v) => buildLikeRegex(enclose(v.toLowerCase(), '%')).test(c.toString().toLowerCase())\n};","import XRegExp from \"xregexp\";\nimport { Path } from \"./query-types\";\nexport const parseSelectParam = (s: string, currentPath?: Path): Path[] => {\n s = s.replace(/\\s/g, \"\");\n const foreignTables = XRegExp.matchRecursive(`,${s}`, \",[^,]*\\\\(\", \"\\\\)\", \"g\", {\n valueNames: {\n \"0\": null,\n \"1\": \"tableName\",\n \"2\": \"selectedColumns\",\n \"3\": null\n }\n }).reduce((prev, curr, idx, matches) => {\n if (curr.name === \"selectedColumns\") {\n const name = matches[idx - 1].value.slice(1, -1);\n prev = {\n ...prev,\n [name]: curr.value\n };\n }\n return prev;\n }, {});\n const columns = s.replace(new RegExp(`${Object.entries(foreignTables).map(([table, selectedColumns]) => `${table}(${selectedColumns})`.replace(/\\(/g, \"\\\\(\").replace(/\\)/g, \"\\\\)\")).join(\"|\")}`, \"g\"), \"\").replace(/(,)\\1+/g, \",\").split(\",\").filter(c => c.length > 0).map(c => {\n const split = c.split(\":\");\n const hasAlias = split.length > 1;\n return {\n declaration: [currentPath?.declaration, c].filter(Boolean).join(\".\"),\n alias: hasAlias || currentPath?.alias ? [currentPath?.alias ?? currentPath?.path, split[0]].filter(Boolean).join(\".\") : undefined,\n path: [currentPath?.path, split[hasAlias ? 1 : 0]].filter(Boolean).join(\".\")\n };\n });\n\n // if (columns.find((c) => c.path.includes('*')))\n // throw new Error('Wildcard selector is not supported');\n\n return [...columns, ...Object.entries(foreignTables).flatMap(([currentDeclaration, selectedColumns]) => {\n // example for declaration\n // alias:organisation!contact_organisation_id_fkey!inner\n const aliasSplit = currentDeclaration.split(\":\");\n const currentAliasElem = aliasSplit.length > 1 ? aliasSplit[0] : undefined;\n const currentPathDeclaration = aliasSplit[aliasSplit.length - 1];\n const currentPathElem = currentPathDeclaration.split(\"!\")[0];\n const path = [currentPath?.path, currentPathElem].filter(Boolean).join(\".\");\n const alias = [currentPath?.alias ?? currentPath?.path, currentAliasElem ?? currentPathElem].filter(Boolean).join(\".\");\n const declaration = [currentPath?.declaration, currentDeclaration].filter(Boolean).join(\".\");\n return parseSelectParam(`${selectedColumns}`, {\n path,\n alias: currentPath?.alias || currentAliasElem ? alias : undefined,\n declaration\n });\n })];\n};","/**\n * Check if a value is a valid ISO DateTime string\n * @param v\n * @returns\n */\nexport const isISODateString = (v: unknown): boolean => typeof v === 'string' && /(\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d\\.\\d+([+-][0-2]\\d:[0-5]\\d|Z))|(\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d([+-][0-2]\\d:[0-5]\\d|Z))|(\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d([+-][0-2]\\d:[0-5]\\d|Z))/.test(v);","import { isISODateString } from './is-iso-date-string';\nimport { ValueType } from './query-types';\n\n/**\n * Safely parse any value to a ValueType\n * @param v Any value\n * @returns a ValueType\n */\nexport const parseValue = (v: any): ValueType => {\n if (isISODateString(v)) return new Date(v);\n try {\n return JSON.parse(v);\n } catch {\n return v;\n }\n};","import { findLastIndex } from './lib/find-last-index';\nimport { isNotNull } from './lib/is-not-null';\nimport { OPERATOR_MAP } from './lib/operators';\nimport { parseSelectParam } from './lib/parse-select-param';\nimport { parseValue } from './lib/parse-value';\nimport { FilterDefinition, FilterDefinitions, PostgrestFilterOperator, Path } from './lib/query-types';\nexport const SUPPORTED_OPERATORS = ['or', ...Object.keys(OPERATOR_MAP)];\nexport type PostgrestQueryParserOptions = {\n /**\n * If defined, will use only filters that apply to the given paths\n */\n exclusivePaths?: string[];\n};\nexport class PostgrestQueryParser {\n private readonly _params: URLSearchParams;\n private _filters: FilterDefinitions | undefined;\n private _paths: Path[] | undefined;\n constructor(query: string, public readonly opts?: PostgrestQueryParserOptions) {\n this._params = new URLSearchParams(query);\n }\n\n /**\n * Getter that returns the paths and their aliases that the query selects. Will do the computation only once.\n *\n * ```js\n * const p = new PostgrestParser(\n * supabaseClient.from(\"test\")\n * .select(\n * `name,\n * city:cities (\n * test:name\n * ),\n * countries (\n * capital,\n * population,\n * some_ref (\n * test:first,\n * second\n * )\n * )`\n * );\n * console.log(p.paths);\n * // [\n * // { alias: undefined, path: \"name\" },\n * // { alias: \"city.test\", path: \"cities.name\" },\n * // { alias: undefined, path: \"countries.capital\" },\n * // { alias: undefined, path: \"countries.population\" },\n * // {\n * // alias: \"countries.some_ref.test\",\n * // path: \"countries.some_ref.first\",\n * // },\n * // { alias: undefined, path: \"countries.some_ref.second\" },\n * // ];\n * ```\n *\n * @returns an array of paths that the query selects, containing the columns and aliases\n */\n get paths(): Path[] {\n if (!this._paths) {\n const select = this._params.get('select');\n this._paths = select ? parseSelectParam(select) : [];\n }\n return this._paths;\n }\n\n /**\n * Getter that returns the filters that this query applies in a json object.\n *\n * ```js\n * const p = new PostgrestParser(\n * supabaseClient.from(\"test\").select('*')\n * .or(\"full_name.eq.20,test.neq.true,and(full_name.eq.Test Name,email.eq.test@mail.com)\")\n * .eq(\"id\", \"123\")\n * .contains(\"id\", \"456\")\n * );\n *\n * console.log(p.filters);\n *\n * // [\n * // {\n * // or: [\n * // {\n * // path: \"full_name\",\n * // negate: false,\n * // operator: \"eq\",\n * // value: 20,\n * // },\n * // {\n * // path: \"test\",\n * // negate: false,\n * // operator: \"neq\",\n * // value: true,\n * // },\n * // {\n * // and: [\n * // {\n * // path: \"full_name\",\n * // negate: false,\n * // operator: \"eq\",\n * // value: \"Test Name\",\n * // },\n * // {\n * // path: \"email\",\n * // negate: false,\n * // operator: \"eq\",\n * // value: \"test@mail.com\",\n * // },\n * // ],\n * // },\n * // ],\n * // },\n * // {\n * // path: \"id\",\n * // negate: false,\n * // operator: \"eq\",\n * // value: 123,\n * // },\n * // {\n * // path: \"id\",\n * // negate: false,\n * // operator: \"cs\",\n * // value: 456,\n * // },\n * // ];\n * ```\n *\n * @returns a FilterDefinitions object\n */\n get filters(): FilterDefinitions {\n if (!this._filters) {\n const filters: FilterDefinitions = [];\n this._params.forEach((value, key) => {\n if (SUPPORTED_OPERATORS.some(f => key === f || value.split('.').includes(f))) {\n const filter = this.parseFilterString(`${key}.${value}`, undefined);\n if (filter !== null) filters.push(filter);\n }\n });\n this._filters = filters;\n }\n return this._filters;\n }\n private parseFilterString(filter: string, prefix?: string): FilterDefinition | {\n or: FilterDefinitions;\n } | {\n and: FilterDefinitions;\n } | null {\n if (filter.startsWith('and(') && filter.endsWith(')')) {\n // nested and\n const andFilters = filter.slice(4, -1).split(',').map(s => this.parseFilterString(s, prefix)).filter(isNotNull);\n if (andFilters.length === 0) return null;else return {\n and: andFilters\n };\n }\n const split = filter.split('.');\n\n // or\n if ([split[0], split[1]].includes('or')) {\n let foreignTable: string | undefined;\n if (split[1] === 'or') {\n // with foreign table\n foreignTable = split[0];\n }\n const orFilters = filter.slice(4 + (foreignTable ? foreignTable.length + 1 : 0), -1).split(',').reduce<string[]>((prev, curr, idx, filters) => {\n if (curr.startsWith('and(')) {\n // nested and\n prev = [...prev, [curr, filters[idx + 1]].join()];\n } else if (!curr.endsWith(')')) {\n prev = [...prev, curr];\n }\n return prev;\n }, []).map(s => this.parseFilterString(s, foreignTable)).filter(isNotNull);\n if (orFilters.length === 0) return null;else return {\n or: orFilters\n };\n }\n const operatorIdx = findLastIndex(split, s => SUPPORTED_OPERATORS.includes(s));\n if (operatorIdx === -1) throw new Error(`Could not find a valid operator in ${split.join('.')}. Supported are ${SUPPORTED_OPERATORS.join(',')}.`);\n const negate = split[operatorIdx - 1] === 'not';\n const pathOrAlias = [prefix, ...split.slice(0, negate ? operatorIdx - 1 : operatorIdx)].filter(Boolean).join('.').replace(/\\s/g, '');\n let path = pathOrAlias;\n let alias;\n // filter paths can use either the real path or the alias\n // search for alias and path in paths of query\n // if none is found, its a path because the alias would need to be defined\n // in the query\n for (const p of this.paths) {\n if (p.path === pathOrAlias) {\n alias = p.alias;\n break;\n }\n if (p.alias === pathOrAlias) {\n path = p.path;\n alias = p.alias;\n break;\n }\n }\n if (this.opts && Array.isArray(this.opts.exclusivePaths) && !this.opts.exclusivePaths.includes(path)) {\n return null;\n }\n const operator = split[operatorIdx] as PostgrestFilterOperator;\n const value = split.slice(operatorIdx + 1).join('.');\n return {\n path,\n alias,\n negate,\n operator,\n value: parseValue(value)\n };\n }\n}","import { PostgrestBuilder } from \"@supabase/postgrest-js\";\nimport { encodeObject } from \"./lib/encode-object\";\nimport { isObject } from \"./lib/is-object\";\nimport { OrderDefinition } from \"./lib/query-types\";\nimport { sortSearchParams } from \"./lib/sort-search-param\";\nimport { PostgrestQueryParser, PostgrestQueryParserOptions } from \"./postgrest-query-parser\";\nexport class PostgrestParser<Result> extends PostgrestQueryParser {\n private readonly _url: URL;\n private readonly _headers: {\n [key: string]: string;\n };\n private readonly _body: object | undefined;\n public readonly method: \"GET\" | \"HEAD\" | \"POST\" | \"PATCH\" | \"DELETE\";\n public readonly select: string;\n public readonly queryKey: string;\n public readonly bodyKey: string | undefined;\n public readonly count: string | null;\n public readonly schema: string;\n public readonly table: string;\n public readonly isHead: boolean | undefined;\n public readonly limit: number | undefined;\n public readonly offset: number | undefined;\n public readonly orderBy: OrderDefinition[] = [];\n public readonly orderByKey: string;\n public readonly searchParams: URLSearchParams;\n constructor(fb: PostgrestBuilder<any, Result>, public readonly opts?: PostgrestQueryParserOptions) {\n super(new URL(fb[\"url\"]).searchParams.toString(), opts);\n this._url = new URL(fb[\"url\"]);\n // Convert Headers object to plain object\n const headers = fb[\"headers\"] as Headers;\n this._headers = Object.fromEntries(headers.entries());\n this._body = isObject(fb[\"body\"]) ? {\n ...fb[\"body\"]\n } : undefined;\n this.method = fb[\"method\"];\n this.searchParams = this._url.searchParams;\n this.queryKey = sortSearchParams(this._url.searchParams).toString();\n this.select = this._url.searchParams.get(\"select\")?.toString() ?? \"*\";\n this.table = (this._url.toString().split(\"/rest/v1/\").pop() as string).split(\"?\").shift() as string;\n if (this._body) {\n this.bodyKey = encodeObject(this._body as Record<string, unknown>);\n }\n\n // 'Prefer': return=minimal|representation,count=exact|planned|estimated\n const preferHeaders: Record<string, string> = (this._headers[\"Prefer\"] ?? \"\").split(\",\").reduce<Record<string, string>>((prev, curr) => {\n const s = curr.split(\"=\");\n return {\n ...prev,\n [s[0]]: s[1]\n };\n }, {});\n this.count = preferHeaders[\"count\"] ?? null;\n this.schema = fb[\"schema\"] as string;\n this.isHead = this.method === \"HEAD\";\n const limit = this._url.searchParams.get(\"limit\");\n this.limit = limit ? Number(limit) : undefined;\n const offset = this._url.searchParams.get(\"offset\");\n this.offset = offset ? Number(offset) : undefined;\n this._url.searchParams.forEach((value, key) => {\n const split = key.split(\".\");\n if (split[split.length === 2 ? 1 : 0] === \"order\") {\n // separated by ,\n const orderByDefs = value.split(\",\");\n orderByDefs.forEach(def => {\n const [column, ascending, nullsFirst] = def.split(\".\");\n this.orderBy.push({\n ascending: ascending === \"asc\",\n column,\n nullsFirst: nullsFirst === \"nullsfirst\",\n foreignTable: split.length === 2 ? split[0] : undefined\n });\n });\n }\n });\n this.orderByKey = this.orderBy.map(({\n column,\n ascending,\n nullsFirst,\n foreignTable\n }) => `${foreignTable ? `${foreignTable}.` : \"\"}${column}:${ascending ? \"asc\" : \"desc\"}.${nullsFirst ? \"nullsFirst\" : \"nullsLast\"}`).join(\"|\");\n }\n}"],"mappings":"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","names":["v"]}
|
|
@@ -3,7 +3,7 @@ import {
|
|
|
3
3
|
PostgrestQueryParser,
|
|
4
4
|
isObject,
|
|
5
5
|
parseValue
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-TKWR5AAY.js";
|
|
7
7
|
import {
|
|
8
8
|
unflatten
|
|
9
9
|
} from "./chunk-3PJTNH2L.js";
|
|
@@ -29,9 +29,7 @@ var groupPathsRecursive = (paths) => {
|
|
|
29
29
|
return prev;
|
|
30
30
|
}
|
|
31
31
|
const firstLevelDeclaration = curr.declaration.split(".")[0];
|
|
32
|
-
const indexOfNested = prev.findIndex(
|
|
33
|
-
(p) => isNestedPath(p) && p.declaration === firstLevelDeclaration
|
|
34
|
-
);
|
|
32
|
+
const indexOfNested = prev.findIndex((p) => isNestedPath(p) && p.declaration === firstLevelDeclaration);
|
|
35
33
|
const pathWithoutCurrentLevel = removeFirstPathElement(curr);
|
|
36
34
|
if (indexOfNested !== -1) {
|
|
37
35
|
prev[indexOfNested].paths.push(pathWithoutCurrentLevel);
|
|
@@ -41,13 +39,16 @@ var groupPathsRecursive = (paths) => {
|
|
|
41
39
|
declaration: firstLevelDeclaration,
|
|
42
40
|
path: curr.path.split(".")[0],
|
|
43
41
|
paths: [pathWithoutCurrentLevel],
|
|
44
|
-
...curr.alias ? {
|
|
42
|
+
...curr.alias ? {
|
|
43
|
+
alias: curr.alias.split(".")[0]
|
|
44
|
+
} : {}
|
|
45
45
|
});
|
|
46
46
|
return prev;
|
|
47
47
|
}, []);
|
|
48
|
-
return grouped.map(
|
|
49
|
-
|
|
50
|
-
|
|
48
|
+
return grouped.map((p) => isNestedPath(p) ? {
|
|
49
|
+
...p,
|
|
50
|
+
paths: groupPathsRecursive(p.paths)
|
|
51
|
+
} : p);
|
|
51
52
|
};
|
|
52
53
|
|
|
53
54
|
// src/parser/filter/denormalize.ts
|
|
@@ -69,28 +70,25 @@ var denormalize = (paths, obj) => {
|
|
|
69
70
|
}
|
|
70
71
|
if (typeof value === "undefined") {
|
|
71
72
|
let isArray2 = false;
|
|
72
|
-
const jsonValue = Object.entries(obj).reduce(
|
|
73
|
-
(
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
prev2
|
|
80
|
-
|
|
81
|
-
[maybeIdx[0]]: {
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
prev2[maybeIdx ? maybeIdx[0] : key] = v;
|
|
88
|
-
}
|
|
73
|
+
const jsonValue = Object.entries(obj).reduce((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;
|
|
89
88
|
}
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
);
|
|
89
|
+
}
|
|
90
|
+
return prev2;
|
|
91
|
+
}, {});
|
|
94
92
|
if (Object.keys(jsonValue).length > 0) {
|
|
95
93
|
if (isArray2) {
|
|
96
94
|
value = Object.values(jsonValue).map((v) => unflatten(v));
|
|
@@ -117,9 +115,7 @@ var denormalize = (paths, obj) => {
|
|
|
117
115
|
const flatNestedObjectOrArray = Object.entries(obj).reduce((prev2, [k, v]) => {
|
|
118
116
|
const isNested = k.startsWith(`${curr.path}.`) || k.includes("!") && k.startsWith(`${removeFirstAlias(curr.declaration)}.`);
|
|
119
117
|
if (!isNested) return prev2;
|
|
120
|
-
const flatKey = k.slice(
|
|
121
|
-
(k.includes("!") ? removeFirstAlias(curr.declaration) : curr.path).length + 1
|
|
122
|
-
);
|
|
118
|
+
const flatKey = k.slice((k.includes("!") ? removeFirstAlias(curr.declaration) : curr.path).length + 1);
|
|
123
119
|
const maybeIdx = flatKey.match(/^\b\d+\b/);
|
|
124
120
|
if (maybeIdx && isFlatNestedArray(prev2)) {
|
|
125
121
|
isArray = true;
|
|
@@ -141,17 +137,12 @@ var denormalize = (paths, obj) => {
|
|
|
141
137
|
if (isArray && isFlatNestedArray(flatNestedObjectOrArray)) {
|
|
142
138
|
return {
|
|
143
139
|
...prev,
|
|
144
|
-
[curr.alias || curr.path]: Object.values(flatNestedObjectOrArray).map(
|
|
145
|
-
(v) => denormalize(curr.paths, v)
|
|
146
|
-
)
|
|
140
|
+
[curr.alias || curr.path]: Object.values(flatNestedObjectOrArray).map((v) => denormalize(curr.paths, v))
|
|
147
141
|
};
|
|
148
142
|
}
|
|
149
143
|
return {
|
|
150
144
|
...prev,
|
|
151
|
-
[curr.alias || curr.path]: denormalize(
|
|
152
|
-
curr.paths,
|
|
153
|
-
flatNestedObjectOrArray
|
|
154
|
-
)
|
|
145
|
+
[curr.alias || curr.path]: denormalize(curr.paths, flatNestedObjectOrArray)
|
|
155
146
|
};
|
|
156
147
|
}, {});
|
|
157
148
|
};
|
|
@@ -179,9 +170,7 @@ var extractPathsFromFilters = (f, p) => {
|
|
|
179
170
|
const relatedPath = p.find((p2) => p2.path === filter.path);
|
|
180
171
|
const pathElements = filter.path.split(".");
|
|
181
172
|
const aliasElements = filter.alias?.split(".");
|
|
182
|
-
const declaration = pathElements.map(
|
|
183
|
-
(el, idx) => `${aliasElements && aliasElements[idx] !== el ? `${aliasElements[idx]}:` : ""}${el}`
|
|
184
|
-
).join(".");
|
|
173
|
+
const declaration = pathElements.map((el, idx) => `${aliasElements && aliasElements[idx] !== el ? `${aliasElements[idx]}:` : ""}${el}`).join(".");
|
|
185
174
|
prev.push({
|
|
186
175
|
path: filter.path,
|
|
187
176
|
alias: filter.alias,
|
|
@@ -198,12 +187,16 @@ var filterFilterDefinitionsByPaths = (f, paths) => {
|
|
|
198
187
|
if (isAndFilter(filter)) {
|
|
199
188
|
const filters = filterFilterDefinitionsByPaths(filter.and, paths);
|
|
200
189
|
if (filters.length > 0) {
|
|
201
|
-
prev.push({
|
|
190
|
+
prev.push({
|
|
191
|
+
and: filters
|
|
192
|
+
});
|
|
202
193
|
}
|
|
203
194
|
} else if (isOrFilter(filter)) {
|
|
204
195
|
const filters = filterFilterDefinitionsByPaths(filter.or, paths);
|
|
205
196
|
if (filters.length > 0) {
|
|
206
|
-
prev.push({
|
|
197
|
+
prev.push({
|
|
198
|
+
or: filters
|
|
199
|
+
});
|
|
207
200
|
}
|
|
208
201
|
} else if (isFilterDefinition(filter) && paths.includes(filter.path)) {
|
|
209
202
|
prev.push(filter);
|
|
@@ -214,10 +207,7 @@ var filterFilterDefinitionsByPaths = (f, paths) => {
|
|
|
214
207
|
|
|
215
208
|
// src/parser/lib/get.ts
|
|
216
209
|
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
|
-
);
|
|
210
|
+
const travel = (regexp) => String.prototype.split.call(path, regexp).filter(Boolean).reduce((res, key) => res !== null && res !== void 0 ? res[key] : res, obj);
|
|
221
211
|
const result = travel(/[,[\]]+?/) || travel(/[,[\].]+?/);
|
|
222
212
|
return result === void 0 || result === obj ? defaultValue : result;
|
|
223
213
|
};
|
|
@@ -226,10 +216,7 @@ var get = (obj, path, defaultValue = void 0) => {
|
|
|
226
216
|
var PostgrestFilter = class _PostgrestFilter {
|
|
227
217
|
constructor(params) {
|
|
228
218
|
this.params = params;
|
|
229
|
-
this._filterPaths = extractPathsFromFilters(
|
|
230
|
-
this.params.filters,
|
|
231
|
-
this.params.paths
|
|
232
|
-
);
|
|
219
|
+
this._filterPaths = extractPathsFromFilters(this.params.filters, this.params.paths);
|
|
233
220
|
}
|
|
234
221
|
_fn;
|
|
235
222
|
_selectFn;
|
|
@@ -243,10 +230,7 @@ var PostgrestFilter = class _PostgrestFilter {
|
|
|
243
230
|
});
|
|
244
231
|
}
|
|
245
232
|
static fromBuilder(fb, opts) {
|
|
246
|
-
const parser = new PostgrestQueryParser(
|
|
247
|
-
fb["url"].searchParams.toString(),
|
|
248
|
-
opts
|
|
249
|
-
);
|
|
233
|
+
const parser = new PostgrestQueryParser(fb["url"].searchParams.toString(), opts);
|
|
250
234
|
return new _PostgrestFilter({
|
|
251
235
|
filters: parser.filters,
|
|
252
236
|
paths: parser.paths
|
|
@@ -272,18 +256,13 @@ var PostgrestFilter = class _PostgrestFilter {
|
|
|
272
256
|
return filterFilterDefinitionsByPaths(this.params.filters, paths).length > 0;
|
|
273
257
|
}
|
|
274
258
|
applyFiltersOnPaths(obj, paths) {
|
|
275
|
-
const filterFns = filterFilterDefinitionsByPaths(
|
|
276
|
-
this.params.filters,
|
|
277
|
-
paths
|
|
278
|
-
).map((d) => this.buildFilterFn(d));
|
|
259
|
+
const filterFns = filterFilterDefinitionsByPaths(this.params.filters, paths).map((d) => this.buildFilterFn(d));
|
|
279
260
|
const filtersFn = (obj2) => filterFns.every((fn) => isObject(obj2) && fn(obj2));
|
|
280
261
|
return filtersFn(obj);
|
|
281
262
|
}
|
|
282
263
|
hasPaths(obj) {
|
|
283
264
|
if (!this._selectFn) {
|
|
284
|
-
this._selectFn = (obj2) => this.params.paths.every(
|
|
285
|
-
(p) => this.hasPathRecursive(obj2, p.alias ?? p.path)
|
|
286
|
-
);
|
|
265
|
+
this._selectFn = (obj2) => this.params.paths.every((p) => this.hasPathRecursive(obj2, p.alias ?? p.path));
|
|
287
266
|
}
|
|
288
267
|
return this._selectFn(obj);
|
|
289
268
|
}
|
|
@@ -296,11 +275,7 @@ var PostgrestFilter = class _PostgrestFilter {
|
|
|
296
275
|
const pathElements = basePath.replace(/->>|->/g, ".").split(".");
|
|
297
276
|
const currentPathElement = pathElements.pop();
|
|
298
277
|
if (pathElements.length === 0) return v === null;
|
|
299
|
-
return this.hasPathRecursive(
|
|
300
|
-
obj,
|
|
301
|
-
pathElements.join("."),
|
|
302
|
-
[currentPathElement, objectPath].filter(Boolean).join(".")
|
|
303
|
-
);
|
|
278
|
+
return this.hasPathRecursive(obj, pathElements.join("."), [currentPathElement, objectPath].filter(Boolean).join("."));
|
|
304
279
|
}
|
|
305
280
|
applyFilterFn(obj, path, {
|
|
306
281
|
filterFn,
|
|
@@ -311,22 +286,20 @@ var PostgrestFilter = class _PostgrestFilter {
|
|
|
311
286
|
const v = get(obj, pathElements[0]);
|
|
312
287
|
if (typeof v === "undefined") {
|
|
313
288
|
if (Array.isArray(obj)) {
|
|
314
|
-
return obj.every(
|
|
315
|
-
|
|
316
|
-
|
|
289
|
+
return obj.every((o) => this.applyFilterFn(o, path, {
|
|
290
|
+
filterFn,
|
|
291
|
+
value,
|
|
292
|
+
negate
|
|
293
|
+
}));
|
|
317
294
|
}
|
|
318
295
|
return false;
|
|
319
296
|
}
|
|
320
297
|
if (pathElements.length > 1) {
|
|
321
|
-
return this.applyFilterFn(
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
value,
|
|
327
|
-
negate
|
|
328
|
-
}
|
|
329
|
-
);
|
|
298
|
+
return this.applyFilterFn(v, pathElements.slice(1).join("."), {
|
|
299
|
+
filterFn,
|
|
300
|
+
value,
|
|
301
|
+
negate
|
|
302
|
+
});
|
|
330
303
|
}
|
|
331
304
|
const res = filterFn(parseValue(v), value);
|
|
332
305
|
if (negate) return !res;
|
|
@@ -339,15 +312,20 @@ var PostgrestFilter = class _PostgrestFilter {
|
|
|
339
312
|
if ("and" in def) {
|
|
340
313
|
return (obj) => def.and.every((d) => this.buildFilterFn(d)(obj));
|
|
341
314
|
}
|
|
342
|
-
const {
|
|
315
|
+
const {
|
|
316
|
+
operator,
|
|
317
|
+
path,
|
|
318
|
+
value,
|
|
319
|
+
negate,
|
|
320
|
+
alias
|
|
321
|
+
} = def;
|
|
343
322
|
const filterFn = OPERATOR_MAP[operator];
|
|
344
|
-
if (!filterFn)
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
return (obj) => this.applyFilterFn(obj, alias ?? path, { filterFn, value, negate });
|
|
323
|
+
if (!filterFn) throw new Error(`Unable to build filter function for ${JSON.stringify(def)}. Operator ${operator} is not supported.`);
|
|
324
|
+
return (obj) => this.applyFilterFn(obj, alias ?? path, {
|
|
325
|
+
filterFn,
|
|
326
|
+
value,
|
|
327
|
+
negate
|
|
328
|
+
});
|
|
351
329
|
}
|
|
352
330
|
};
|
|
353
331
|
|
|
@@ -378,9 +356,7 @@ var isPostgrestHasMorePaginationCacheData = (q) => {
|
|
|
378
356
|
if (!Array.isArray(q)) return false;
|
|
379
357
|
if (q.length === 0) return true;
|
|
380
358
|
const firstPage = q[0];
|
|
381
|
-
return Array.isArray(
|
|
382
|
-
firstPage.data
|
|
383
|
-
) && typeof firstPage.hasMore === "boolean";
|
|
359
|
+
return Array.isArray(firstPage.data) && typeof firstPage.hasMore === "boolean";
|
|
384
360
|
};
|
|
385
361
|
|
|
386
362
|
// src/parser/lib/find-filters.ts
|
|
@@ -415,21 +391,14 @@ var ifDateGetTime = (v) => {
|
|
|
415
391
|
// src/parser/lib/sorted-comparator.ts
|
|
416
392
|
var buildSortedComparator = (orderBy) => {
|
|
417
393
|
return (a, b) => {
|
|
418
|
-
for (const {
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
);
|
|
426
|
-
const bValue = ifDateGetTime(
|
|
427
|
-
get(
|
|
428
|
-
b,
|
|
429
|
-
`${foreignTable ? `${foreignTable}.` : ""}${column}`,
|
|
430
|
-
null
|
|
431
|
-
)
|
|
432
|
-
);
|
|
394
|
+
for (const {
|
|
395
|
+
column,
|
|
396
|
+
ascending,
|
|
397
|
+
nullsFirst,
|
|
398
|
+
foreignTable
|
|
399
|
+
} of orderBy) {
|
|
400
|
+
const aValue = ifDateGetTime(get(a, `${foreignTable ? `${foreignTable}.` : ""}${column}`, null));
|
|
401
|
+
const bValue = ifDateGetTime(get(b, `${foreignTable ? `${foreignTable}.` : ""}${column}`, null));
|
|
433
402
|
if (aValue === bValue) continue;
|
|
434
403
|
if (aValue === null || aValue === void 0) {
|
|
435
404
|
return nullsFirst ? -1 : 1;
|
|
@@ -529,4 +498,4 @@ export {
|
|
|
529
498
|
isPostgrestHasMorePaginationResponse,
|
|
530
499
|
setFilterValue
|
|
531
500
|
};
|
|
532
|
-
//# sourceMappingURL=chunk-
|
|
501
|
+
//# sourceMappingURL=chunk-U5UNPBKB.js.map
|