@webda/ql 4.0.0-beta.5 → 4.0.0-beta.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +72 -31
- package/lib/WebdaQLLexer.d.ts +44 -30
- package/lib/WebdaQLLexer.d.ts.map +1 -1
- package/lib/WebdaQLLexer.js +257 -152
- package/lib/WebdaQLLexer.js.map +1 -1
- package/lib/WebdaQLParserLexer.d.ts +44 -30
- package/lib/WebdaQLParserLexer.d.ts.map +1 -1
- package/lib/WebdaQLParserLexer.js +257 -152
- package/lib/WebdaQLParserLexer.js.map +1 -1
- package/lib/WebdaQLParserListener.d.ts +203 -30
- package/lib/WebdaQLParserListener.d.ts.map +1 -1
- package/lib/WebdaQLParserParser.d.ts +242 -44
- package/lib/WebdaQLParserParser.d.ts.map +1 -1
- package/lib/WebdaQLParserParser.js +2054 -715
- package/lib/WebdaQLParserParser.js.map +1 -1
- package/lib/WebdaQLParserVisitor.d.ts +126 -17
- package/lib/WebdaQLParserVisitor.d.ts.map +1 -1
- package/lib/aggregation-query.d.ts +95 -0
- package/lib/aggregation-query.d.ts.map +1 -0
- package/lib/aggregation-query.js +104 -0
- package/lib/aggregation-query.js.map +1 -0
- package/lib/aggregation-select.spec.d.ts +2 -0
- package/lib/aggregation-select.spec.d.ts.map +1 -0
- package/lib/aggregation-select.spec.js +165 -0
- package/lib/aggregation-select.spec.js.map +1 -0
- package/lib/aggregation.d.ts +97 -0
- package/lib/aggregation.d.ts.map +1 -0
- package/lib/aggregation.js +241 -0
- package/lib/aggregation.js.map +1 -0
- package/lib/aggregation.spec.d.ts +2 -0
- package/lib/aggregation.spec.d.ts.map +1 -0
- package/lib/aggregation.spec.js +360 -0
- package/lib/aggregation.spec.js.map +1 -0
- package/lib/bind.d.ts.map +1 -1
- package/lib/bind.js +29 -0
- package/lib/bind.js.map +1 -1
- package/lib/filter.d.ts +54 -0
- package/lib/filter.d.ts.map +1 -0
- package/lib/filter.js +135 -0
- package/lib/filter.js.map +1 -0
- package/lib/filter.spec.d.ts +2 -0
- package/lib/filter.spec.d.ts.map +1 -0
- package/lib/filter.spec.js +124 -0
- package/lib/filter.spec.js.map +1 -0
- package/lib/index.d.ts +2 -0
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +2 -0
- package/lib/index.js.map +1 -1
- package/lib/query.d.ts +173 -12
- package/lib/query.d.ts.map +1 -1
- package/lib/query.js +529 -64
- package/lib/query.js.map +1 -1
- package/lib/query.spec.js +7 -4
- package/lib/query.spec.js.map +1 -1
- package/lib/statements.spec.d.ts +2 -0
- package/lib/statements.spec.d.ts.map +1 -0
- package/lib/statements.spec.js +423 -0
- package/lib/statements.spec.js.map +1 -0
- package/lib/webdaql-string.d.ts +9 -0
- package/lib/webdaql-string.d.ts.map +1 -1
- package/lib/webdaql-string.js +9 -8
- package/lib/webdaql-string.js.map +1 -1
- package/package.json +2 -2
package/lib/bind.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bind.d.ts","sourceRoot":"","sources":["../src/bind.ts"],"names":[],"mappings":"AAGA,OAAO,EAAwB,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAE/E;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG,SAAS,OAAO,EAAE,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AAsCrF;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,IAAI,CAAC,CAAC,GAAG,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,eAAe,GAAG,aAAa,CAAC,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"bind.d.ts","sourceRoot":"","sources":["../src/bind.ts"],"names":[],"mappings":"AAGA,OAAO,EAAwB,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAE/E;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG,SAAS,OAAO,EAAE,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AAsCrF;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,IAAI,CAAC,CAAC,GAAG,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,eAAe,GAAG,aAAa,CAAC,CAAC,CAAC,CA4C3F"}
|
package/lib/bind.js
CHANGED
|
@@ -77,6 +77,12 @@ export function bind(query, params) {
|
|
|
77
77
|
// Placeholders are only allowed where a value is expected
|
|
78
78
|
validateSyntax(query);
|
|
79
79
|
const values = named ? namedValues(placeholders, params) : positionalValues(placeholders, params);
|
|
80
|
+
const assigned = assignedPlaceholders(query);
|
|
81
|
+
placeholders.forEach((token, i) => {
|
|
82
|
+
if ((values[i] === null || values[i] === undefined) && assigned.has(token.startIndex)) {
|
|
83
|
+
throw new WebdaQLError(`A null value cannot be assigned in UPDATE SET ('${token.text}')`);
|
|
84
|
+
}
|
|
85
|
+
});
|
|
80
86
|
const parts = [];
|
|
81
87
|
let position = 0;
|
|
82
88
|
for (const token of placeholders) {
|
|
@@ -94,6 +100,29 @@ export function bind(query, params) {
|
|
|
94
100
|
}
|
|
95
101
|
return bound;
|
|
96
102
|
}
|
|
103
|
+
/**
|
|
104
|
+
* Placeholders standing for the value of an `UPDATE SET` assignment, by start index: from `SET` to the
|
|
105
|
+
* `WHERE` or `LIMIT` closing the assignment list
|
|
106
|
+
* @param query - the query string
|
|
107
|
+
* @returns the start indexes of those placeholders
|
|
108
|
+
*/
|
|
109
|
+
function assignedPlaceholders(query) {
|
|
110
|
+
const res = new Set();
|
|
111
|
+
let inSet = false;
|
|
112
|
+
for (const token of tokenize(query)) {
|
|
113
|
+
if (token.type === WebdaQLLexer.SET) {
|
|
114
|
+
inSet = true;
|
|
115
|
+
}
|
|
116
|
+
else if (token.type === WebdaQLLexer.WHERE || token.type === WebdaQLLexer.LIMIT) {
|
|
117
|
+
inSet = false;
|
|
118
|
+
}
|
|
119
|
+
else if (inSet &&
|
|
120
|
+
(token.type === WebdaQLLexer.POSITIONAL_PARAMETER || token.type === WebdaQLLexer.NAMED_PARAMETER)) {
|
|
121
|
+
res.add(token.startIndex);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
return res;
|
|
125
|
+
}
|
|
97
126
|
/**
|
|
98
127
|
* Values of the `?` placeholders, in order
|
|
99
128
|
* @param placeholders - the placeholder tokens
|
package/lib/bind.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bind.js","sourceRoot":"","sources":["../src/bind.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"bind.js","sourceRoot":"","sources":["../src/bind.ts"],"names":[],"mappings":"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"}
|
package/lib/filter.d.ts
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { type Expression } from "./query.js";
|
|
2
|
+
import type { WebdaQLString } from "./webdaql-string.js";
|
|
3
|
+
type Primitive = string | number | boolean | bigint | symbol | null | undefined;
|
|
4
|
+
type PropertyPaths<T extends object> = {
|
|
5
|
+
[K in Extract<keyof T, string>]: T[K] extends Function ? never : NonNullable<T[K]> extends Primitive | Date | RegExp | Array<any> | Map<any, any> | Set<any> ? K : NonNullable<T[K]> extends object ? K | `${K}.${PropertyPaths<NonNullable<T[K]>>}` : K;
|
|
6
|
+
}[Extract<keyof T, string>];
|
|
7
|
+
type PathValue<T, K extends string> = K extends `${infer H}.${infer R}` ? H extends keyof T ? PathValue<NonNullable<T[H]>, R> : never : K extends keyof T ? T[K] : never;
|
|
8
|
+
type PropertyPathType<T extends object, K extends PropertyPaths<T>> = PathValue<T, K>;
|
|
9
|
+
export type FilterOperators<V> = {
|
|
10
|
+
$eq?: V | null;
|
|
11
|
+
$ne?: V | null;
|
|
12
|
+
$gt?: V;
|
|
13
|
+
$gte?: V;
|
|
14
|
+
$lt?: V;
|
|
15
|
+
$lte?: V;
|
|
16
|
+
$in?: V[];
|
|
17
|
+
$like?: string;
|
|
18
|
+
$contains?: V extends readonly (infer E)[] ? Extract<E, string> : never;
|
|
19
|
+
$exists?: boolean;
|
|
20
|
+
};
|
|
21
|
+
export type ModelFilter<T extends object = any> = {
|
|
22
|
+
[K in PropertyPaths<T>]?: PropertyPathType<T, K> | null | FilterOperators<PropertyPathType<T, K>>;
|
|
23
|
+
} & {
|
|
24
|
+
$or?: ModelFilter<T>[];
|
|
25
|
+
$and?: ModelFilter<T>[];
|
|
26
|
+
};
|
|
27
|
+
export interface FindOptions<T extends object> {
|
|
28
|
+
orderBy?: {
|
|
29
|
+
field: PropertyPaths<T>;
|
|
30
|
+
direction: "ASC" | "DESC";
|
|
31
|
+
}[];
|
|
32
|
+
limit?: number;
|
|
33
|
+
continuationToken?: string;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Convert a JSON filter to a WebdaQL expression
|
|
37
|
+
*
|
|
38
|
+
* Keys set to `undefined` are ignored, so optional criteria can be spread in. A plain object without
|
|
39
|
+
* operators matches its nested fields: `{ address: { city: "Paris" } }` is `address.city = "Paris"`.
|
|
40
|
+
* @param filter - the JSON filter
|
|
41
|
+
* @returns the expression
|
|
42
|
+
* @throws {WebdaQLError} for an invalid filter
|
|
43
|
+
*/
|
|
44
|
+
export declare function filterToExpression(filter: ModelFilter): Expression;
|
|
45
|
+
/**
|
|
46
|
+
* Convert a JSON filter and its find options to a WebdaQL query string
|
|
47
|
+
* @param filter - the JSON filter
|
|
48
|
+
* @param options - ordering, limit and continuation token
|
|
49
|
+
* @returns the WebdaQL query
|
|
50
|
+
* @throws {WebdaQLError} for an invalid filter
|
|
51
|
+
*/
|
|
52
|
+
export declare function toWebdaQL<T extends object = any>(filter: ModelFilter<T>, options?: FindOptions<T>): WebdaQLString<T>;
|
|
53
|
+
export {};
|
|
54
|
+
//# sourceMappingURL=filter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filter.d.ts","sourceRoot":"","sources":["../src/filter.ts"],"names":[],"mappings":"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"}
|
package/lib/filter.js
ADDED
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
import { AndExpression, ComparisonExpression, OrExpression, checkFieldPath, normalizeQuery } from "./query.js";
|
|
2
|
+
import { WebdaQLError } from "./webdaql-string.js";
|
|
3
|
+
const operators = {
|
|
4
|
+
$eq: "=",
|
|
5
|
+
$ne: "!=",
|
|
6
|
+
$gt: ">",
|
|
7
|
+
$gte: ">=",
|
|
8
|
+
$lt: "<",
|
|
9
|
+
$lte: "<=",
|
|
10
|
+
$in: "IN",
|
|
11
|
+
$like: "LIKE",
|
|
12
|
+
$contains: "CONTAINS"
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* WebdaQL has no date literal: dates are compared as ISO 8601 strings, the way they are serialized
|
|
16
|
+
* @param value - the filter value
|
|
17
|
+
* @returns the value, with dates as ISO strings
|
|
18
|
+
*/
|
|
19
|
+
function toFilterValue(value) {
|
|
20
|
+
if (Array.isArray(value))
|
|
21
|
+
return value.map(toFilterValue);
|
|
22
|
+
if (!(value instanceof Date))
|
|
23
|
+
return value;
|
|
24
|
+
if (isNaN(value.getTime()))
|
|
25
|
+
throw new WebdaQLError("Invalid date in filter");
|
|
26
|
+
return value.toISOString();
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Convert a JSON filter to a WebdaQL expression
|
|
30
|
+
*
|
|
31
|
+
* Keys set to `undefined` are ignored, so optional criteria can be spread in. A plain object without
|
|
32
|
+
* operators matches its nested fields: `{ address: { city: "Paris" } }` is `address.city = "Paris"`.
|
|
33
|
+
* @param filter - the JSON filter
|
|
34
|
+
* @returns the expression
|
|
35
|
+
* @throws {WebdaQLError} for an invalid filter
|
|
36
|
+
*/
|
|
37
|
+
export function filterToExpression(filter) {
|
|
38
|
+
if (!filter || typeof filter !== "object" || Array.isArray(filter))
|
|
39
|
+
throw new WebdaQLError("Filter must be an object");
|
|
40
|
+
const parts = [];
|
|
41
|
+
for (const key of Object.keys(filter)) {
|
|
42
|
+
const value = filter[key];
|
|
43
|
+
if (value === undefined)
|
|
44
|
+
continue;
|
|
45
|
+
if (key === "$or" || key === "$and") {
|
|
46
|
+
if (!Array.isArray(value) || !value.length)
|
|
47
|
+
throw new WebdaQLError(`${key} requires a non-empty array`);
|
|
48
|
+
parts.push(key === "$or"
|
|
49
|
+
? new OrExpression(value.map(filterToExpression))
|
|
50
|
+
: new AndExpression(value.map(filterToExpression)));
|
|
51
|
+
continue;
|
|
52
|
+
}
|
|
53
|
+
if (key.startsWith("$"))
|
|
54
|
+
throw new WebdaQLError(`Unknown filter operator '${key}'`);
|
|
55
|
+
fieldToExpressions(key, value, parts);
|
|
56
|
+
}
|
|
57
|
+
return new AndExpression(parts);
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Add the conditions on one field
|
|
61
|
+
* @param key - the field path
|
|
62
|
+
* @param value - a plain value, an operator object or a nested object
|
|
63
|
+
* @param parts - the conditions to add to
|
|
64
|
+
*/
|
|
65
|
+
function fieldToExpressions(key, value, parts) {
|
|
66
|
+
checkFieldPath(key);
|
|
67
|
+
if (value === null) {
|
|
68
|
+
parts.push(new ComparisonExpression("IS NULL", key, true));
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
if (typeof value !== "object" || Array.isArray(value) || value instanceof Date) {
|
|
72
|
+
parts.push(new ComparisonExpression("=", key, toFilterValue(value)));
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
const keys = Object.keys(value);
|
|
76
|
+
if (!keys.length)
|
|
77
|
+
throw new WebdaQLError(`Empty filter object for '${key}'`);
|
|
78
|
+
const operatorKeys = keys.filter(k => k.startsWith("$"));
|
|
79
|
+
if (!operatorKeys.length) {
|
|
80
|
+
// Nested object: match each of its fields
|
|
81
|
+
const before = parts.length;
|
|
82
|
+
for (const sub of keys) {
|
|
83
|
+
if (value[sub] !== undefined)
|
|
84
|
+
fieldToExpressions(`${key}.${sub}`, value[sub], parts);
|
|
85
|
+
}
|
|
86
|
+
if (parts.length === before)
|
|
87
|
+
throw new WebdaQLError(`Empty filter object for '${key}'`);
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
if (operatorKeys.length !== keys.length)
|
|
91
|
+
throw new WebdaQLError(`Cannot mix operators and fields in '${key}'`);
|
|
92
|
+
for (const op of keys) {
|
|
93
|
+
const operand = value[op];
|
|
94
|
+
if (operand === undefined)
|
|
95
|
+
continue;
|
|
96
|
+
if (op === "$exists") {
|
|
97
|
+
if (typeof operand !== "boolean")
|
|
98
|
+
throw new WebdaQLError("$exists must be a boolean");
|
|
99
|
+
parts.push(new ComparisonExpression(operand ? "IS NOT NULL" : "IS NULL", key, true));
|
|
100
|
+
}
|
|
101
|
+
else if ((op === "$eq" || op === "$ne") && operand === null) {
|
|
102
|
+
parts.push(new ComparisonExpression(op === "$eq" ? "IS NULL" : "IS NOT NULL", key, true));
|
|
103
|
+
}
|
|
104
|
+
else {
|
|
105
|
+
const mapped = operators[op];
|
|
106
|
+
if (!mapped)
|
|
107
|
+
throw new WebdaQLError(`Unknown filter operator '${op}'`);
|
|
108
|
+
if (operand === null)
|
|
109
|
+
throw new WebdaQLError("null is only supported with $eq, $ne, or $exists");
|
|
110
|
+
if (op === "$in" && (!Array.isArray(operand) || !operand.length))
|
|
111
|
+
throw new WebdaQLError("$in requires a non-empty array");
|
|
112
|
+
if (op === "$contains" && typeof operand !== "string")
|
|
113
|
+
throw new WebdaQLError("$contains takes a string");
|
|
114
|
+
parts.push(new ComparisonExpression(mapped, key, toFilterValue(operand)));
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Convert a JSON filter and its find options to a WebdaQL query string
|
|
120
|
+
* @param filter - the JSON filter
|
|
121
|
+
* @param options - ordering, limit and continuation token
|
|
122
|
+
* @returns the WebdaQL query
|
|
123
|
+
* @throws {WebdaQLError} for an invalid filter
|
|
124
|
+
*/
|
|
125
|
+
export function toWebdaQL(filter, options) {
|
|
126
|
+
const q = normalizeQuery({
|
|
127
|
+
type: "SELECT",
|
|
128
|
+
filter: filterToExpression(filter),
|
|
129
|
+
orderBy: options?.orderBy,
|
|
130
|
+
limit: options?.limit,
|
|
131
|
+
continuationToken: options?.continuationToken
|
|
132
|
+
});
|
|
133
|
+
return q.toString();
|
|
134
|
+
}
|
|
135
|
+
//# sourceMappingURL=filter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filter.js","sourceRoot":"","sources":["../src/filter.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,oBAAoB,EACpB,YAAY,EACZ,cAAc,EACd,cAAc,EAGf,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AA2CnD,MAAM,SAAS,GAA2B;IACxC,GAAG,EAAE,GAAG;IACR,GAAG,EAAE,IAAI;IACT,GAAG,EAAE,GAAG;IACR,IAAI,EAAE,IAAI;IACV,GAAG,EAAE,GAAG;IACR,IAAI,EAAE,IAAI;IACV,GAAG,EAAE,IAAI;IACT,KAAK,EAAE,MAAM;IACb,SAAS,EAAE,UAAU;CACtB,CAAC;AACF;;;;GAIG;AACH,SAAS,aAAa,CAAC,KAAU;IAC/B,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IAC1D,IAAI,CAAC,CAAC,KAAK,YAAY,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IAC3C,IAAI,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;QAAE,MAAM,IAAI,YAAY,CAAC,wBAAwB,CAAC,CAAC;IAC7E,OAAO,KAAK,CAAC,WAAW,EAAE,CAAC;AAC7B,CAAC;AACD;;;;;;;;GAQG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAAmB;IACpD,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;QAChE,MAAM,IAAI,YAAY,CAAC,0BAA0B,CAAC,CAAC;IACrD,MAAM,KAAK,GAAiB,EAAE,CAAC;IAC/B,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QACtC,MAAM,KAAK,GAAS,MAAc,CAAC,GAAG,CAAC,CAAC;QACxC,IAAI,KAAK,KAAK,SAAS;YAAE,SAAS;QAClC,IAAI,GAAG,KAAK,KAAK,IAAI,GAAG,KAAK,MAAM,EAAE,CAAC;YACpC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM;gBAAE,MAAM,IAAI,YAAY,CAAC,GAAG,GAAG,6BAA6B,CAAC,CAAC;YACxG,KAAK,CAAC,IAAI,CACR,GAAG,KAAK,KAAK;gBACX,CAAC,CAAC,IAAI,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;gBACjD,CAAC,CAAC,IAAI,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,CACrD,CAAC;YACF,SAAS;QACX,CAAC;QACD,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,MAAM,IAAI,YAAY,CAAC,4BAA4B,GAAG,GAAG,CAAC,CAAC;QACpF,kBAAkB,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;IACxC,CAAC;IACD,OAAO,IAAI,aAAa,CAAC,KAAK,CAAC,CAAC;AAClC,CAAC;AACD;;;;;GAKG;AACH,SAAS,kBAAkB,CAAC,GAAW,EAAE,KAAU,EAAE,KAAmB;IACtE,cAAc,CAAC,GAAG,CAAC,CAAC;IACpB,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACnB,KAAK,CAAC,IAAI,CAAC,IAAI,oBAAoB,CAAC,SAAS,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;QAC3D,OAAO;IACT,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,YAAY,IAAI,EAAE,CAAC;QAC/E,KAAK,CAAC,IAAI,CAAC,IAAI,oBAAoB,CAAC,GAAG,EAAE,GAAG,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACrE,OAAO;IACT,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAChC,IAAI,CAAC,IAAI,CAAC,MAAM;QAAE,MAAM,IAAI,YAAY,CAAC,4BAA4B,GAAG,GAAG,CAAC,CAAC;IAC7E,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;IACzD,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC;QACzB,0CAA0C;QAC1C,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;QAC5B,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,IAAI,KAAK,CAAC,GAAG,CAAC,KAAK,SAAS;gBAAE,kBAAkB,CAAC,GAAG,GAAG,IAAI,GAAG,EAAE,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC;QACvF,CAAC;QACD,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM;YAAE,MAAM,IAAI,YAAY,CAAC,4BAA4B,GAAG,GAAG,CAAC,CAAC;QACxF,OAAO;IACT,CAAC;IACD,IAAI,YAAY,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM;QAAE,MAAM,IAAI,YAAY,CAAC,uCAAuC,GAAG,GAAG,CAAC,CAAC;IAC/G,KAAK,MAAM,EAAE,IAAI,IAAI,EAAE,CAAC;QACtB,MAAM,OAAO,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;QAC1B,IAAI,OAAO,KAAK,SAAS;YAAE,SAAS;QACpC,IAAI,EAAE,KAAK,SAAS,EAAE,CAAC;YACrB,IAAI,OAAO,OAAO,KAAK,SAAS;gBAAE,MAAM,IAAI,YAAY,CAAC,2BAA2B,CAAC,CAAC;YACtF,KAAK,CAAC,IAAI,CAAC,IAAI,oBAAoB,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;QACvF,CAAC;aAAM,IAAI,CAAC,EAAE,KAAK,KAAK,IAAI,EAAE,KAAK,KAAK,CAAC,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;YAC9D,KAAK,CAAC,IAAI,CAAC,IAAI,oBAAoB,CAAC,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,aAAa,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;QAC5F,CAAC;aAAM,CAAC;YACN,MAAM,MAAM,GAAG,SAAS,CAAC,EAAE,CAAC,CAAC;YAC7B,IAAI,CAAC,MAAM;gBAAE,MAAM,IAAI,YAAY,CAAC,4BAA4B,EAAE,GAAG,CAAC,CAAC;YACvE,IAAI,OAAO,KAAK,IAAI;gBAAE,MAAM,IAAI,YAAY,CAAC,kDAAkD,CAAC,CAAC;YACjG,IAAI,EAAE,KAAK,KAAK,IAAI,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;gBAC9D,MAAM,IAAI,YAAY,CAAC,gCAAgC,CAAC,CAAC;YAC3D,IAAI,EAAE,KAAK,WAAW,IAAI,OAAO,OAAO,KAAK,QAAQ;gBAAE,MAAM,IAAI,YAAY,CAAC,0BAA0B,CAAC,CAAC;YAC1G,KAAK,CAAC,IAAI,CAAC,IAAI,oBAAoB,CAAC,MAAa,EAAE,GAAG,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACnF,CAAC;IACH,CAAC;AACH,CAAC;AACD;;;;;;GAMG;AACH,MAAM,UAAU,SAAS,CAAyB,MAAsB,EAAE,OAAwB;IAChG,MAAM,CAAC,GAAG,cAAc,CAAC;QACvB,IAAI,EAAE,QAAQ;QACd,MAAM,EAAE,kBAAkB,CAAC,MAAM,CAAC;QAClC,OAAO,EAAE,OAAO,EAAE,OAAoB;QACtC,KAAK,EAAE,OAAO,EAAE,KAAK;QACrB,iBAAiB,EAAE,OAAO,EAAE,iBAAiB;KACvC,CAAC,CAAC;IACV,OAAO,CAAC,CAAC,QAAQ,EAAsB,CAAC;AAC1C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filter.spec.d.ts","sourceRoot":"","sources":["../src/filter.spec.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
var __runInitializers = (this && this.__runInitializers) || function (thisArg, initializers, value) {
|
|
2
|
+
var useValue = arguments.length > 2;
|
|
3
|
+
for (var i = 0; i < initializers.length; i++) {
|
|
4
|
+
value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);
|
|
5
|
+
}
|
|
6
|
+
return useValue ? value : void 0;
|
|
7
|
+
};
|
|
8
|
+
var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {
|
|
9
|
+
function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; }
|
|
10
|
+
var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value";
|
|
11
|
+
var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null;
|
|
12
|
+
var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});
|
|
13
|
+
var _, done = false;
|
|
14
|
+
for (var i = decorators.length - 1; i >= 0; i--) {
|
|
15
|
+
var context = {};
|
|
16
|
+
for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p];
|
|
17
|
+
for (var p in contextIn.access) context.access[p] = contextIn.access[p];
|
|
18
|
+
context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); };
|
|
19
|
+
var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);
|
|
20
|
+
if (kind === "accessor") {
|
|
21
|
+
if (result === void 0) continue;
|
|
22
|
+
if (result === null || typeof result !== "object") throw new TypeError("Object expected");
|
|
23
|
+
if (_ = accept(result.get)) descriptor.get = _;
|
|
24
|
+
if (_ = accept(result.set)) descriptor.set = _;
|
|
25
|
+
if (_ = accept(result.init)) initializers.unshift(_);
|
|
26
|
+
}
|
|
27
|
+
else if (_ = accept(result)) {
|
|
28
|
+
if (kind === "field") initializers.unshift(_);
|
|
29
|
+
else descriptor[key] = _;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
if (target) Object.defineProperty(target, contextIn.name, descriptor);
|
|
33
|
+
done = true;
|
|
34
|
+
};
|
|
35
|
+
import { suite, test } from "@webda/test";
|
|
36
|
+
import * as assert from "assert";
|
|
37
|
+
import { filterToExpression, toWebdaQL } from "./filter.js";
|
|
38
|
+
import { QueryValidator } from "./query.js";
|
|
39
|
+
import { WebdaQLError } from "./webdaql-string.js";
|
|
40
|
+
let FilterTest = (() => {
|
|
41
|
+
let _classDecorators = [suite];
|
|
42
|
+
let _classDescriptor;
|
|
43
|
+
let _classExtraInitializers = [];
|
|
44
|
+
let _classThis;
|
|
45
|
+
let _instanceExtraInitializers = [];
|
|
46
|
+
let _convertsFilters_decorators;
|
|
47
|
+
let _handlesUndefinedNestedAndEmpty_decorators;
|
|
48
|
+
let _dateEvalKeepsNumericComparison_decorators;
|
|
49
|
+
let _refusesInjectionAndInvalidValues_decorators;
|
|
50
|
+
var FilterTest = class {
|
|
51
|
+
static { _classThis = this; }
|
|
52
|
+
static {
|
|
53
|
+
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(null) : void 0;
|
|
54
|
+
_convertsFilters_decorators = [test];
|
|
55
|
+
_handlesUndefinedNestedAndEmpty_decorators = [test];
|
|
56
|
+
_dateEvalKeepsNumericComparison_decorators = [test];
|
|
57
|
+
_refusesInjectionAndInvalidValues_decorators = [test];
|
|
58
|
+
__esDecorate(this, null, _convertsFilters_decorators, { kind: "method", name: "convertsFilters", static: false, private: false, access: { has: obj => "convertsFilters" in obj, get: obj => obj.convertsFilters }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
59
|
+
__esDecorate(this, null, _handlesUndefinedNestedAndEmpty_decorators, { kind: "method", name: "handlesUndefinedNestedAndEmpty", static: false, private: false, access: { has: obj => "handlesUndefinedNestedAndEmpty" in obj, get: obj => obj.handlesUndefinedNestedAndEmpty }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
60
|
+
__esDecorate(this, null, _dateEvalKeepsNumericComparison_decorators, { kind: "method", name: "dateEvalKeepsNumericComparison", static: false, private: false, access: { has: obj => "dateEvalKeepsNumericComparison" in obj, get: obj => obj.dateEvalKeepsNumericComparison }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
61
|
+
__esDecorate(this, null, _refusesInjectionAndInvalidValues_decorators, { kind: "method", name: "refusesInjectionAndInvalidValues", static: false, private: false, access: { has: obj => "refusesInjectionAndInvalidValues" in obj, get: obj => obj.refusesInjectionAndInvalidValues }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
62
|
+
__esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
|
|
63
|
+
FilterTest = _classThis = _classDescriptor.value;
|
|
64
|
+
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
65
|
+
__runInitializers(_classThis, _classExtraInitializers);
|
|
66
|
+
}
|
|
67
|
+
convertsFilters() {
|
|
68
|
+
assert.strictEqual(toWebdaQL({ a: 1, b: 2 }), "a = 1 AND b = 2");
|
|
69
|
+
assert.strictEqual(toWebdaQL({ a: null }), "a IS NULL");
|
|
70
|
+
assert.strictEqual(toWebdaQL({ a: { $ne: null } }), "a IS NOT NULL");
|
|
71
|
+
assert.strictEqual(toWebdaQL({ a: { $gte: 2, $lt: 10 } }), "a >= 2 AND a < 10");
|
|
72
|
+
assert.strictEqual(toWebdaQL({ a: { $in: ["x", "y"] } }), 'a IN ["x", "y"]');
|
|
73
|
+
assert.strictEqual(toWebdaQL({ a: { $like: "Do%" } }), 'a LIKE "Do%"');
|
|
74
|
+
assert.strictEqual(toWebdaQL({ tags: { $contains: "urgent" } }), 'tags CONTAINS "urgent"');
|
|
75
|
+
assert.strictEqual(toWebdaQL({ a: { $exists: false } }), "a IS NULL");
|
|
76
|
+
assert.strictEqual(toWebdaQL({ $or: [{ a: 1 }, { b: 2 }] }), "a = 1 OR b = 2");
|
|
77
|
+
assert.strictEqual(toWebdaQL({ $or: [{ a: 1 }, { b: 2 }], c: 3 }), "( a = 1 OR b = 2 ) AND c = 3");
|
|
78
|
+
assert.strictEqual(toWebdaQL({ "profile.verified": true }), "profile.verified = TRUE");
|
|
79
|
+
assert.strictEqual(toWebdaQL({}), "");
|
|
80
|
+
const date = new Date("2026-01-02T03:04:05.000Z");
|
|
81
|
+
assert.strictEqual(toWebdaQL({ due: date }), 'due = "2026-01-02T03:04:05.000Z"');
|
|
82
|
+
assert.strictEqual(toWebdaQL({ due: { $gte: date } }), 'due >= "2026-01-02T03:04:05.000Z"');
|
|
83
|
+
assert.strictEqual(toWebdaQL({ due: { $in: [date] } }), 'due IN ["2026-01-02T03:04:05.000Z"]');
|
|
84
|
+
assert.throws(() => toWebdaQL({ due: new Date("nope") }), WebdaQLError);
|
|
85
|
+
// Evaluation compares stored dates as ISO strings
|
|
86
|
+
const target = { due: new Date("2026-01-02T03:04:05.000Z") };
|
|
87
|
+
assert.ok(new QueryValidator(toWebdaQL({ due: date })).eval(target));
|
|
88
|
+
assert.ok(new QueryValidator(toWebdaQL({ due: { $lt: new Date("2026-02-01T00:00:00.000Z") } })).eval(target));
|
|
89
|
+
assert.ok(!new QueryValidator(toWebdaQL({ due: { $gt: date } })).eval(target));
|
|
90
|
+
}
|
|
91
|
+
handlesUndefinedNestedAndEmpty() {
|
|
92
|
+
assert.strictEqual(toWebdaQL({ a: undefined, b: 2 }), "b = 2");
|
|
93
|
+
assert.strictEqual(toWebdaQL({ $or: undefined, b: 2 }), "b = 2");
|
|
94
|
+
assert.strictEqual(toWebdaQL({ a: { $gte: undefined, $lt: 10 } }), "a < 10");
|
|
95
|
+
assert.strictEqual(toWebdaQL({ address: { city: "Paris", zip: undefined } }), 'address.city = "Paris"');
|
|
96
|
+
assert.strictEqual(toWebdaQL({ a: { b: { c: 1 } } }), "a.b.c = 1");
|
|
97
|
+
assert.throws(() => toWebdaQL({ a: {} }), /Empty filter object/);
|
|
98
|
+
assert.throws(() => toWebdaQL({ a: { b: {} } }), /Empty filter object/);
|
|
99
|
+
assert.throws(() => toWebdaQL({ a: { $gt: 1, b: 2 } }), /Cannot mix/);
|
|
100
|
+
assert.throws(() => toWebdaQL({ a: { $contains: 5 } }), /\$contains takes a string/);
|
|
101
|
+
}
|
|
102
|
+
dateEvalKeepsNumericComparison() {
|
|
103
|
+
const target = { due: new Date(1800000000000) };
|
|
104
|
+
assert.ok(new QueryValidator("due > 1700000000000").eval(target));
|
|
105
|
+
assert.ok(!new QueryValidator("due < 1700000000000").eval(target));
|
|
106
|
+
assert.ok(new QueryValidator(`due > "2020-01-01T00:00:00.000Z"`).eval(target));
|
|
107
|
+
assert.ok(new QueryValidator(`due IN ["${target.due.toISOString()}"]`).eval(target));
|
|
108
|
+
}
|
|
109
|
+
refusesInjectionAndInvalidValues() {
|
|
110
|
+
assert.throws(() => filterToExpression({ "a' OR 1=1 --": 1 }), WebdaQLError);
|
|
111
|
+
assert.throws(() => filterToExpression({ $or: [{ "a = 1 OR b": 1 }] }), WebdaQLError);
|
|
112
|
+
assert.throws(() => toWebdaQL({ a: { $nor: [] } }), WebdaQLError);
|
|
113
|
+
assert.throws(() => toWebdaQL({ a: { $in: [] } }), WebdaQLError);
|
|
114
|
+
assert.throws(() => toWebdaQL({ $or: [] }), WebdaQLError);
|
|
115
|
+
assert.throws(() => toWebdaQL({ $and: [] }), WebdaQLError);
|
|
116
|
+
assert.strictEqual(toWebdaQL({ a: 'it\'s "safe"' }), 'a = "it\'s ""safe"""');
|
|
117
|
+
}
|
|
118
|
+
constructor() {
|
|
119
|
+
__runInitializers(this, _instanceExtraInitializers);
|
|
120
|
+
}
|
|
121
|
+
};
|
|
122
|
+
return FilterTest = _classThis;
|
|
123
|
+
})();
|
|
124
|
+
//# sourceMappingURL=filter.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filter.spec.js","sourceRoot":"","sources":["../src/filter.spec.ts"],"names":[],"mappings":"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"}
|
package/lib/index.d.ts
CHANGED
package/lib/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,qBAAqB,CAAC;AACpC,cAAc,WAAW,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,qBAAqB,CAAC;AACpC,cAAc,WAAW,CAAC;AAC1B,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC"}
|
package/lib/index.js
CHANGED
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,qBAAqB,CAAC;AACpC,cAAc,WAAW,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,qBAAqB,CAAC;AACpC,cAAc,WAAW,CAAC;AAC1B,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC"}
|