@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.
Files changed (63) hide show
  1. package/README.md +72 -31
  2. package/lib/WebdaQLLexer.d.ts +44 -30
  3. package/lib/WebdaQLLexer.d.ts.map +1 -1
  4. package/lib/WebdaQLLexer.js +257 -152
  5. package/lib/WebdaQLLexer.js.map +1 -1
  6. package/lib/WebdaQLParserLexer.d.ts +44 -30
  7. package/lib/WebdaQLParserLexer.d.ts.map +1 -1
  8. package/lib/WebdaQLParserLexer.js +257 -152
  9. package/lib/WebdaQLParserLexer.js.map +1 -1
  10. package/lib/WebdaQLParserListener.d.ts +203 -30
  11. package/lib/WebdaQLParserListener.d.ts.map +1 -1
  12. package/lib/WebdaQLParserParser.d.ts +242 -44
  13. package/lib/WebdaQLParserParser.d.ts.map +1 -1
  14. package/lib/WebdaQLParserParser.js +2054 -715
  15. package/lib/WebdaQLParserParser.js.map +1 -1
  16. package/lib/WebdaQLParserVisitor.d.ts +126 -17
  17. package/lib/WebdaQLParserVisitor.d.ts.map +1 -1
  18. package/lib/aggregation-query.d.ts +95 -0
  19. package/lib/aggregation-query.d.ts.map +1 -0
  20. package/lib/aggregation-query.js +104 -0
  21. package/lib/aggregation-query.js.map +1 -0
  22. package/lib/aggregation-select.spec.d.ts +2 -0
  23. package/lib/aggregation-select.spec.d.ts.map +1 -0
  24. package/lib/aggregation-select.spec.js +165 -0
  25. package/lib/aggregation-select.spec.js.map +1 -0
  26. package/lib/aggregation.d.ts +97 -0
  27. package/lib/aggregation.d.ts.map +1 -0
  28. package/lib/aggregation.js +241 -0
  29. package/lib/aggregation.js.map +1 -0
  30. package/lib/aggregation.spec.d.ts +2 -0
  31. package/lib/aggregation.spec.d.ts.map +1 -0
  32. package/lib/aggregation.spec.js +360 -0
  33. package/lib/aggregation.spec.js.map +1 -0
  34. package/lib/bind.d.ts.map +1 -1
  35. package/lib/bind.js +29 -0
  36. package/lib/bind.js.map +1 -1
  37. package/lib/filter.d.ts +54 -0
  38. package/lib/filter.d.ts.map +1 -0
  39. package/lib/filter.js +135 -0
  40. package/lib/filter.js.map +1 -0
  41. package/lib/filter.spec.d.ts +2 -0
  42. package/lib/filter.spec.d.ts.map +1 -0
  43. package/lib/filter.spec.js +124 -0
  44. package/lib/filter.spec.js.map +1 -0
  45. package/lib/index.d.ts +2 -0
  46. package/lib/index.d.ts.map +1 -1
  47. package/lib/index.js +2 -0
  48. package/lib/index.js.map +1 -1
  49. package/lib/query.d.ts +173 -12
  50. package/lib/query.d.ts.map +1 -1
  51. package/lib/query.js +529 -64
  52. package/lib/query.js.map +1 -1
  53. package/lib/query.spec.js +7 -4
  54. package/lib/query.spec.js.map +1 -1
  55. package/lib/statements.spec.d.ts +2 -0
  56. package/lib/statements.spec.d.ts.map +1 -0
  57. package/lib/statements.spec.js +423 -0
  58. package/lib/statements.spec.js.map +1 -0
  59. package/lib/webdaql-string.d.ts +9 -0
  60. package/lib/webdaql-string.d.ts.map +1 -1
  61. package/lib/webdaql-string.js +9 -8
  62. package/lib/webdaql-string.js.map +1 -1
  63. 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,CAsC3F"}
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":"AAAA,OAAO,EAAE,WAAW,EAAS,MAAM,UAAU,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,MAAM,EAAE,YAAY,EAAsB,MAAM,qBAAqB,CAAC;AAO/E;;;;GAIG;AACH,SAAS,QAAQ,CAAC,KAAa;IAC7B,MAAM,KAAK,GAAG,IAAI,YAAY,CAAC,WAAW,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;IAC9D,KAAK,CAAC,oBAAoB,EAAE,CAAC;IAC7B,KAAK,CAAC,gBAAgB,CAAC;QACrB,WAAW,EAAE,CAAC,WAAW,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,EAAE;YAC3D,MAAM,IAAI,WAAW,CAAC,GAAG,GAAG,YAAY,KAAK,GAAG,CAAC,CAAC;QACpD,CAAC;KACF,CAAC,CAAC;IACH,OAAO,KAAK,CAAC,YAAY,EAAE,CAAC;AAC9B,CAAC;AAED;;;;GAIG;AACH,SAAS,eAAe,CAAC,MAAmC;IAC1D,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,CAAC,CAAC;IACnC,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC;AAC5E,CAAC;AAED;;;;;GAKG;AACH,SAAS,MAAM,CAAC,KAAa,EAAE,IAAY;IACzC,OAAO,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;AACrD,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,UAAU,IAAI,CAAc,KAAa,EAAE,MAAwB;IACvE,KAAK,KAAK,EAAE,CAAC;IACb,MAAM,YAAY,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,MAAM,CACzC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,YAAY,CAAC,oBAAoB,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,CAAC,eAAe,CACzG,CAAC;IACF,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9B,IAAI,eAAe,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;YAChC,MAAM,IAAI,YAAY,CAAC,wCAAwC,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;QACnH,CAAC;QACD,OAAO,KAAyB,CAAC;IACnC,CAAC;IACD,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,MAAM,IAAI,YAAY,CAAC,sBAAsB,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,yCAAyC,CAAC,CAAC;IAC9G,CAAC;IACD,MAAM,KAAK,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,YAAY,CAAC,eAAe,CAAC;IACpE,IAAI,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,YAAY,CAAC,eAAe,CAAC,KAAK,KAAK,CAAC,EAAE,CAAC;QACxF,MAAM,IAAI,YAAY,CAAC,6EAA6E,CAAC,CAAC;IACxG,CAAC;IACD,0DAA0D;IAC1D,cAAc,CAAC,KAAK,CAAC,CAAC;IAEtB,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;IAClG,MAAM,QAAQ,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;IAC7C,YAAY,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;QAChC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,IAAI,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;YACtF,MAAM,IAAI,YAAY,CAAC,mDAAmD,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC;QAC5F,CAAC;IACH,CAAC,CAAC,CAAC;IACH,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,KAAK,MAAM,KAAK,IAAI,YAAY,EAAE,CAAC;QACjC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;QACxD,QAAQ,GAAG,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC;IACjC,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEtC,MAAM,KAAK,GAAG,MAAM,CAAI,KAAK,EAAE,MAAM,CAAC,CAAC;IACvC,IAAI,CAAC;QACH,iFAAiF;QACjF,cAAc,CAAC,KAAK,CAAC,CAAC;IACxB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,YAAY,CAAC,6CAA8C,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;IAChG,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;GAKG;AACH,SAAS,oBAAoB,CAAC,KAAa;IACzC,MAAM,GAAG,GAAG,IAAI,GAAG,EAAU,CAAC;IAC9B,IAAI,KAAK,GAAG,KAAK,CAAC;IAClB,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACpC,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,CAAC,GAAG,EAAE,CAAC;YACpC,KAAK,GAAG,IAAI,CAAC;QACf,CAAC;aAAM,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,CAAC,KAAK,EAAE,CAAC;YAClF,KAAK,GAAG,KAAK,CAAC;QAChB,CAAC;aAAM,IACL,KAAK;YACL,CAAC,KAAK,CAAC,IAAI,KAAK,YAAY,CAAC,oBAAoB,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,CAAC,eAAe,CAAC,EACjG,CAAC;YACD,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;;GAKG;AACH,SAAS,gBAAgB,CAAC,YAAqB,EAAE,MAAuB;IACtE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAI,YAAY,CAAC,uDAAuD,CAAC,CAAC;IAClF,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,KAAK,YAAY,CAAC,MAAM,EAAE,CAAC;QAC1C,MAAM,IAAI,YAAY,CACpB,qBAAqB,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE,sBAAsB,CAAC,QAAQ,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,QAAQ,CAC/J,CAAC;IACJ,CAAC;IACD,OAAO,CAAC,GAAG,MAAM,CAAC,CAAC;AACrB,CAAC;AAED;;;;;GAKG;AACH,SAAS,WAAW,CAAC,YAAqB,EAAE,MAAuB;IACjE,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,YAAY,CAAC,mDAAmD,CAAC,CAAC;IAC9E,CAAC;IACD,MAAM,MAAM,GAAG,MAA2C,CAAC;IAC3D,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;QACtC,MAAM,IAAI,GAAG,KAAK,CAAC,IAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QACtC,qEAAqE;QACrE,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC;YACxD,MAAM,IAAI,YAAY,CAAC,6BAA6B,IAAI,oBAAoB,CAAC,CAAC;QAChF,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACf,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC;IACtB,CAAC,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;IACnE,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAClB,MAAM,IAAI,YAAY,CACpB,yBAAyB,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,oBAAoB,CACpG,CAAC;IACJ,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -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":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=filter.spec.d.ts.map
@@ -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
@@ -1,4 +1,6 @@
1
1
  export * from "./query.js";
2
2
  export * from "./webdaql-string.js";
3
3
  export * from "./bind.js";
4
+ export * from "./aggregation.js";
5
+ export * from "./filter.js";
4
6
  //# sourceMappingURL=index.d.ts.map
@@ -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
@@ -1,4 +1,6 @@
1
1
  export * from "./query.js";
2
2
  export * from "./webdaql-string.js";
3
3
  export * from "./bind.js";
4
+ export * from "./aggregation.js";
5
+ export * from "./filter.js";
4
6
  //# sourceMappingURL=index.js.map
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"}