@omni-graph/omni-model 0.6.107-1-g0211605 → 0.6.107-13-g8a976b7

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 (65) hide show
  1. package/dist/functions/filtering/baseHandler.d.ts +9 -0
  2. package/dist/functions/filtering/baseHandler.d.ts.map +1 -0
  3. package/dist/functions/filtering/baseHandler.js +12 -0
  4. package/dist/functions/filtering/baseHandler.js.map +1 -0
  5. package/dist/functions/filtering/booleanHandler.d.ts +16 -0
  6. package/dist/functions/filtering/booleanHandler.d.ts.map +1 -0
  7. package/dist/functions/filtering/booleanHandler.js +39 -0
  8. package/dist/functions/filtering/booleanHandler.js.map +1 -0
  9. package/dist/functions/filtering/dateHandler.d.ts +21 -0
  10. package/dist/functions/filtering/dateHandler.d.ts.map +1 -0
  11. package/dist/functions/filtering/dateHandler.js +67 -0
  12. package/dist/functions/filtering/dateHandler.js.map +1 -0
  13. package/dist/functions/filtering/dateRangeHandler.d.ts +14 -0
  14. package/dist/functions/filtering/dateRangeHandler.d.ts.map +1 -0
  15. package/dist/functions/filtering/dateRangeHandler.js +44 -0
  16. package/dist/functions/filtering/dateRangeHandler.js.map +1 -0
  17. package/dist/functions/filtering/filterPredicate.d.ts +2 -0
  18. package/dist/functions/filtering/filterPredicate.d.ts.map +1 -0
  19. package/dist/functions/filtering/filterPredicate.js +2 -0
  20. package/dist/functions/filtering/filterPredicate.js.map +1 -0
  21. package/dist/functions/filtering/generalFilterArgs.d.ts +6 -0
  22. package/dist/functions/filtering/generalFilterArgs.d.ts.map +1 -0
  23. package/dist/functions/filtering/generalFilterArgs.js +2 -0
  24. package/dist/functions/filtering/generalFilterArgs.js.map +1 -0
  25. package/dist/functions/filtering/handler.d.ts +8 -0
  26. package/dist/functions/filtering/handler.d.ts.map +1 -0
  27. package/dist/functions/filtering/handler.js +2 -0
  28. package/dist/functions/filtering/handler.js.map +1 -0
  29. package/dist/functions/filtering/index.d.ts +8 -0
  30. package/dist/functions/filtering/index.d.ts.map +1 -1
  31. package/dist/functions/filtering/multiSelectHandler.d.ts +14 -0
  32. package/dist/functions/filtering/multiSelectHandler.d.ts.map +1 -0
  33. package/dist/functions/filtering/multiSelectHandler.js +46 -0
  34. package/dist/functions/filtering/multiSelectHandler.js.map +1 -0
  35. package/dist/functions/filtering/numberHandler.d.ts +20 -0
  36. package/dist/functions/filtering/numberHandler.d.ts.map +1 -0
  37. package/dist/functions/filtering/numberHandler.js +48 -0
  38. package/dist/functions/filtering/numberHandler.js.map +1 -0
  39. package/dist/functions/filtering/numberRangeHandler.d.ts +13 -0
  40. package/dist/functions/filtering/numberRangeHandler.d.ts.map +1 -0
  41. package/dist/functions/filtering/numberRangeHandler.js +25 -0
  42. package/dist/functions/filtering/numberRangeHandler.js.map +1 -0
  43. package/dist/functions/filtering/queryFilters.d.ts +20 -8
  44. package/dist/functions/filtering/queryFilters.d.ts.map +1 -1
  45. package/dist/functions/filtering/queryFilters.js +57 -431
  46. package/dist/functions/filtering/queryFilters.js.map +1 -1
  47. package/dist/functions/filtering/textHandler.d.ts +20 -0
  48. package/dist/functions/filtering/textHandler.d.ts.map +1 -0
  49. package/dist/functions/filtering/textHandler.js +40 -0
  50. package/dist/functions/filtering/textHandler.js.map +1 -0
  51. package/dist/functions/filtering/utils.d.ts +12 -0
  52. package/dist/functions/filtering/utils.d.ts.map +1 -0
  53. package/dist/functions/filtering/utils.js +97 -0
  54. package/dist/functions/filtering/utils.js.map +1 -0
  55. package/dist/functions/index.d.ts.map +1 -1
  56. package/dist/functions/index.js.map +1 -1
  57. package/dist/zod/filtering/index.d.ts +1 -0
  58. package/dist/zod/filtering/index.d.ts.map +1 -1
  59. package/dist/zod/filtering/index.js +1 -0
  60. package/dist/zod/filtering/index.js.map +1 -1
  61. package/dist/zod/filtering/relativeDateFiltering.d.ts +35 -0
  62. package/dist/zod/filtering/relativeDateFiltering.d.ts.map +1 -0
  63. package/dist/zod/filtering/relativeDateFiltering.js +16 -0
  64. package/dist/zod/filtering/relativeDateFiltering.js.map +1 -0
  65. package/package.json +1 -1
@@ -0,0 +1,9 @@
1
+ import { Handler } from "./handler";
2
+ import { GeneralFilterArgs } from "./generalFilterArgs";
3
+ import { FilterPredicate } from "./filterPredicate";
4
+ export declare abstract class BaseHandler implements Handler {
5
+ private next?;
6
+ setNext(next: Handler): Handler;
7
+ handle(args: GeneralFilterArgs): FilterPredicate | null;
8
+ }
9
+ //# sourceMappingURL=baseHandler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"baseHandler.d.ts","sourceRoot":"","sources":["../../../src/functions/filtering/baseHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAC;AAClC,OAAO,EAAC,iBAAiB,EAAC,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAC,eAAe,EAAC,MAAM,mBAAmB,CAAC;AAElD,8BAAsB,WAAY,YAAW,OAAO;IAClD,OAAO,CAAC,IAAI,CAAC,CAAU;IAEvB,OAAO,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO;IAK/B,MAAM,CAAC,IAAI,EAAE,iBAAiB,GAAG,eAAe,GAAG,IAAI;CAIxD"}
@@ -0,0 +1,12 @@
1
+ export class BaseHandler {
2
+ setNext(next) {
3
+ this.next = next;
4
+ return this;
5
+ }
6
+ handle(args) {
7
+ if (this.next)
8
+ return this.next.handle(args);
9
+ throw new Error(`No handler found for variant "${args.variant}"`);
10
+ }
11
+ }
12
+ //# sourceMappingURL=baseHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"baseHandler.js","sourceRoot":"","sources":["../../../src/functions/filtering/baseHandler.ts"],"names":[],"mappings":"AAIA,MAAM,OAAgB,WAAW;IAG/B,OAAO,CAAC,IAAa;QACnB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,CAAC,IAAuB;QAC5B,IAAI,IAAI,CAAC,IAAI;YAAE,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC7C,MAAM,IAAI,KAAK,CAAC,iCAAiC,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;IACpE,CAAC;CACF"}
@@ -0,0 +1,16 @@
1
+ import { z } from "zod";
2
+ import { BaseHandler } from "./baseHandler";
3
+ import { GeneralFilterArgs } from "./generalFilterArgs";
4
+ import { FilterPredicate } from "./filterPredicate";
5
+ declare const BooleanOperators: z.ZodEnum<{
6
+ "=": "=";
7
+ "!=": "!=";
8
+ isEmpty: "isEmpty";
9
+ isNotEmpty: "isNotEmpty";
10
+ }>;
11
+ export type BooleanOperator = z.infer<typeof BooleanOperators>;
12
+ export declare class BooleanHandler extends BaseHandler {
13
+ handle({ variant, operator, valueJson }: GeneralFilterArgs): FilterPredicate | null;
14
+ }
15
+ export {};
16
+ //# sourceMappingURL=booleanHandler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"booleanHandler.d.ts","sourceRoot":"","sources":["../../../src/functions/filtering/booleanHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,CAAC,EAAC,MAAM,KAAK,CAAC;AAEtB,OAAO,EAAC,WAAW,EAAC,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAC,iBAAiB,EAAC,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAC,eAAe,EAAC,MAAM,mBAAmB,CAAC;AAGlD,QAAA,MAAM,gBAAgB;;;;;EAA+C,CAAC;AACtE,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAE/D,qBAAa,cAAe,SAAQ,WAAW;IACpC,MAAM,CAAC,EAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAC,EAAE,iBAAiB,GAAG,eAAe,GAAG,IAAI;CA6B3F"}
@@ -0,0 +1,39 @@
1
+ import { z } from "zod";
2
+ import { BaseHandler } from "./baseHandler";
3
+ import { parseJSONValue } from "./utils";
4
+ const BooleanOperators = z.enum(['=', '!=', 'isEmpty', 'isNotEmpty']);
5
+ export class BooleanHandler extends BaseHandler {
6
+ handle({ variant, operator, valueJson }) {
7
+ if (variant !== 'boolean')
8
+ return super.handle({ variant, operator, valueJson });
9
+ BooleanOperators.parse(operator);
10
+ const parseBooleanValue = (value) => {
11
+ if (typeof value === 'boolean')
12
+ return value;
13
+ if (value === 'true')
14
+ return true;
15
+ if (value === 'false')
16
+ return false;
17
+ return null;
18
+ };
19
+ const raw = parseJSONValue(valueJson);
20
+ const v = Array.isArray(raw) ? raw[0] : raw;
21
+ const val = parseBooleanValue(v);
22
+ switch (operator) {
23
+ case '=':
24
+ if (val == null)
25
+ throw new Error('Boolean "=" needs value "true" or "false"');
26
+ return (cell) => Boolean(cell) === val;
27
+ case '!=':
28
+ if (val == null)
29
+ throw new Error('Boolean "!=" needs value "true" or "false"');
30
+ return (cell) => Boolean(cell) !== val;
31
+ case 'isEmpty':
32
+ return (cell) => cell == null || cell === '';
33
+ case 'isNotEmpty':
34
+ return (cell) => !(cell == null || cell === '');
35
+ }
36
+ throw new Error(`Unsupported boolean operator "${operator}"`);
37
+ }
38
+ }
39
+ //# sourceMappingURL=booleanHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"booleanHandler.js","sourceRoot":"","sources":["../../../src/functions/filtering/booleanHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,CAAC,EAAC,MAAM,KAAK,CAAC;AAEtB,OAAO,EAAC,WAAW,EAAC,MAAM,eAAe,CAAC;AAG1C,OAAO,EAAC,cAAc,EAAC,MAAM,SAAS,CAAC;AAEvC,MAAM,gBAAgB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC,CAAC;AAGtE,MAAM,OAAO,cAAe,SAAQ,WAAW;IACpC,MAAM,CAAC,EAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAoB;QAC/D,IAAI,OAAO,KAAK,SAAS;YAAE,OAAO,KAAK,CAAC,MAAM,CAAC,EAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAC,CAAC,CAAC;QAC/E,gBAAgB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAEjC,MAAM,iBAAiB,GAAG,CAAC,KAAc,EAAkB,EAAE;YAC3D,IAAI,OAAO,KAAK,KAAK,SAAS;gBAAE,OAAO,KAAK,CAAC;YAC7C,IAAI,KAAK,KAAK,MAAM;gBAAE,OAAO,IAAI,CAAC;YAClC,IAAI,KAAK,KAAK,OAAO;gBAAE,OAAO,KAAK,CAAC;YACpC,OAAO,IAAI,CAAC;QACd,CAAC,CAAC;QAEF,MAAM,GAAG,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC;QACtC,MAAM,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;QAC5C,MAAM,GAAG,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC;QAEjC,QAAQ,QAAQ,EAAE,CAAC;YACjB,KAAK,GAAG;gBACN,IAAI,GAAG,IAAI,IAAI;oBAAE,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;gBAC9E,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC;YACzC,KAAK,IAAI;gBACP,IAAI,GAAG,IAAI,IAAI;oBAAE,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;gBAC/E,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC;YACzC,KAAK,SAAS;gBACZ,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,EAAE,CAAC;YAC/C,KAAK,YAAY;gBACf,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,EAAE,CAAC,CAAC;QACpD,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,iCAAiC,QAAQ,GAAG,CAAC,CAAC;IAChE,CAAC;CACF"}
@@ -0,0 +1,21 @@
1
+ import { z } from "zod";
2
+ import { BaseHandler } from "./baseHandler";
3
+ import { GeneralFilterArgs } from "./generalFilterArgs";
4
+ import { FilterPredicate } from "./filterPredicate";
5
+ declare const DateOperators: z.ZodEnum<{
6
+ "=": "=";
7
+ "!=": "!=";
8
+ "<": "<";
9
+ "<=": "<=";
10
+ ">": ">";
11
+ ">=": ">=";
12
+ isEmpty: "isEmpty";
13
+ isNotEmpty: "isNotEmpty";
14
+ isRelativeToToday: "isRelativeToToday";
15
+ }>;
16
+ export type DateOperator = z.infer<typeof DateOperators>;
17
+ export declare class DateHandler extends BaseHandler {
18
+ handle({ variant, operator, valueJson }: GeneralFilterArgs): FilterPredicate | null;
19
+ }
20
+ export {};
21
+ //# sourceMappingURL=dateHandler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dateHandler.d.ts","sourceRoot":"","sources":["../../../src/functions/filtering/dateHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,CAAC,EAAC,MAAM,KAAK,CAAC;AAEtB,OAAO,EAAC,WAAW,EAAC,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAC,iBAAiB,EAAC,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAC,eAAe,EAAC,MAAM,mBAAmB,CAAC;AAGlD,QAAA,MAAM,aAAa;;;;;;;;;;EAQK,CAAC;AACzB,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AAEzD,qBAAa,WAAY,SAAQ,WAAW;IAEjC,MAAM,CAAC,EAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAC,EAAE,iBAAiB,GAAG,eAAe,GAAG,IAAI;CAsD3F"}
@@ -0,0 +1,67 @@
1
+ import { z } from "zod";
2
+ import { BaseHandler } from "./baseHandler";
3
+ import { addDays, compareDateOnly, parseJSONValue, parseRelative, startOfDay, toDate } from "./utils";
4
+ const DateOperators = z.enum(['=',
5
+ '!=',
6
+ '<',
7
+ '<=',
8
+ '>',
9
+ '>=',
10
+ 'isEmpty',
11
+ 'isNotEmpty',
12
+ 'isRelativeToToday',]);
13
+ export class DateHandler extends BaseHandler {
14
+ handle({ variant, operator, valueJson }) {
15
+ if (variant !== 'date')
16
+ return super.handle({ variant, operator, valueJson });
17
+ DateOperators.parse(operator);
18
+ if (operator === 'isRelativeToToday') {
19
+ const rel = parseRelative(valueJson);
20
+ if (!('offsetDays' in rel))
21
+ throw new Error('date:isRelativeToToday expects {offsetDays, compare}');
22
+ const pivot = addDays(startOfDay(new Date()), rel.offsetDays);
23
+ switch (rel.compare) {
24
+ case '<':
25
+ return (cell) => compareDateOnly(toDate(cell), pivot) < 0;
26
+ case '<=':
27
+ return (cell) => compareDateOnly(toDate(cell), pivot) <= 0;
28
+ case '>':
29
+ return (cell) => compareDateOnly(toDate(cell), pivot) > 0;
30
+ case '>=':
31
+ return (cell) => compareDateOnly(toDate(cell), pivot) >= 0;
32
+ case '=':
33
+ return (cell) => compareDateOnly(toDate(cell), pivot) === 0;
34
+ case '!=':
35
+ return (cell) => compareDateOnly(toDate(cell), pivot) !== 0;
36
+ default:
37
+ throw new Error(`Unsupported compare "${rel.compare}" for isRelativeToToday`);
38
+ }
39
+ }
40
+ const raw = parseJSONValue(valueJson);
41
+ const v = Array.isArray(raw) ? raw[0] : raw;
42
+ const target = toDate(v);
43
+ if (!target && !['isEmpty', 'isNotEmpty'].includes(operator)) {
44
+ throw new Error('Date filter requires a valid date value');
45
+ }
46
+ switch (operator) {
47
+ case '=':
48
+ return (cell) => compareDateOnly(toDate(cell), target) === 0;
49
+ case '!=':
50
+ return (cell) => compareDateOnly(toDate(cell), target) !== 0;
51
+ case '<':
52
+ return (cell) => compareDateOnly(toDate(cell), target) < 0;
53
+ case '<=':
54
+ return (cell) => compareDateOnly(toDate(cell), target) <= 0;
55
+ case '>':
56
+ return (cell) => compareDateOnly(toDate(cell), target) > 0;
57
+ case '>=':
58
+ return (cell) => compareDateOnly(toDate(cell), target) >= 0;
59
+ case 'isEmpty':
60
+ return (cell) => !toDate(cell);
61
+ case 'isNotEmpty':
62
+ return (cell) => !!toDate(cell);
63
+ }
64
+ throw new Error(`Unsupported date operator "${operator}"`);
65
+ }
66
+ }
67
+ //# sourceMappingURL=dateHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dateHandler.js","sourceRoot":"","sources":["../../../src/functions/filtering/dateHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,CAAC,EAAC,MAAM,KAAK,CAAC;AAEtB,OAAO,EAAC,WAAW,EAAC,MAAM,eAAe,CAAC;AAG1C,OAAO,EAAC,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,EAAC,MAAM,SAAS,CAAC;AAEpG,MAAM,aAAa,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG;IAC/B,IAAI;IACJ,GAAG;IACH,IAAI;IACJ,GAAG;IACH,IAAI;IACJ,SAAS;IACT,YAAY;IACZ,mBAAmB,EAAE,CAAC,CAAC;AAGzB,MAAM,OAAO,WAAY,SAAQ,WAAW;IAEjC,MAAM,CAAC,EAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAoB;QAC/D,IAAI,OAAO,KAAK,MAAM;YAAE,OAAO,KAAK,CAAC,MAAM,CAAC,EAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAC,CAAC,CAAC;QAC5E,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAE9B,IAAI,QAAQ,KAAK,mBAAmB,EAAE,CAAC;YACrC,MAAM,GAAG,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC;YACrC,IAAI,CAAC,CAAC,YAAY,IAAI,GAAG,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;YACpG,MAAM,KAAK,GAAG,OAAO,CAAC,UAAU,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC;YAE9D,QAAQ,GAAG,CAAC,OAAO,EAAE,CAAC;gBACpB,KAAK,GAAG;oBACN,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;gBAC5D,KAAK,IAAI;oBACP,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC7D,KAAK,GAAG;oBACN,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;gBAC5D,KAAK,IAAI;oBACP,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC7D,KAAK,GAAG;oBACN,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;gBAC9D,KAAK,IAAI;oBACP,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;gBAC9D;oBACE,MAAM,IAAI,KAAK,CAAC,wBAAwB,GAAG,CAAC,OAAO,yBAAyB,CAAC,CAAC;YAClF,CAAC;QACH,CAAC;QAED,MAAM,GAAG,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC;QACtC,MAAM,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;QAC5C,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACzB,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC7D,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;QAC7D,CAAC;QAED,QAAQ,QAAQ,EAAE,CAAC;YACjB,KAAK,GAAG;gBACN,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;YAC/D,KAAK,IAAI;gBACP,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;YAC/D,KAAK,GAAG;gBACN,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;YAC7D,KAAK,IAAI;gBACP,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;YAC9D,KAAK,GAAG;gBACN,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;YAC7D,KAAK,IAAI;gBACP,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;YAC9D,KAAK,SAAS;gBACZ,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACjC,KAAK,YAAY;gBACf,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACpC,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,8BAA8B,QAAQ,GAAG,CAAC,CAAC;IAC7D,CAAC;CACF"}
@@ -0,0 +1,14 @@
1
+ import { z } from "zod";
2
+ import { BaseHandler } from "./baseHandler";
3
+ import { GeneralFilterArgs } from "./generalFilterArgs";
4
+ import { FilterPredicate } from "./filterPredicate";
5
+ declare const DateRangeOperators: z.ZodEnum<{
6
+ isRelativeToToday: "isRelativeToToday";
7
+ isBetween: "isBetween";
8
+ }>;
9
+ export type DateRangeOperator = z.infer<typeof DateRangeOperators>;
10
+ export declare class DateRangeHandler extends BaseHandler {
11
+ handle({ variant, operator, valueJson }: GeneralFilterArgs): FilterPredicate | null;
12
+ }
13
+ export {};
14
+ //# sourceMappingURL=dateRangeHandler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dateRangeHandler.d.ts","sourceRoot":"","sources":["../../../src/functions/filtering/dateRangeHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,CAAC,EAAC,MAAM,KAAK,CAAC;AAEtB,OAAO,EAAC,WAAW,EAAC,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAC,iBAAiB,EAAC,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAC,eAAe,EAAC,MAAM,mBAAmB,CAAC;AAGlD,QAAA,MAAM,kBAAkB;;;EAA6C,CAAC;AACtE,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAEnE,qBAAa,gBAAiB,SAAQ,WAAW;IACtC,MAAM,CAAC,EAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAC,EAAE,iBAAiB,GAAG,eAAe,GAAG,IAAI;CAsC3F"}
@@ -0,0 +1,44 @@
1
+ import { z } from "zod";
2
+ import { BaseHandler } from "./baseHandler";
3
+ import { addDays, endOfDay, parseJSONValue, parseRelative, startOfDay, toDate } from "./utils";
4
+ const DateRangeOperators = z.enum(['isBetween', 'isRelativeToToday']);
5
+ export class DateRangeHandler extends BaseHandler {
6
+ handle({ variant, operator, valueJson }) {
7
+ if (variant !== 'dateRange')
8
+ return super.handle({ variant, operator, valueJson });
9
+ DateRangeOperators.parse(operator);
10
+ if (operator === 'isRelativeToToday') {
11
+ const rel = parseRelative(valueJson);
12
+ if (!('startOffsetDays' in rel)) {
13
+ throw new Error('dateRange:isRelativeToToday expects {startOffsetDays,endOffsetDays}');
14
+ }
15
+ const today = startOfDay(new Date());
16
+ const start = addDays(today, rel.startOffsetDays);
17
+ const end = addDays(today, rel.endOffsetDays);
18
+ const [lo, hi] = start <= end ? [start, end] : [end, start];
19
+ return (cell) => {
20
+ const d = toDate(cell);
21
+ if (!d)
22
+ return false;
23
+ const sd = startOfDay(d);
24
+ return sd >= lo && sd <= hi;
25
+ };
26
+ }
27
+ // isBetween with absolute dates: valueJson is string | [string, string]
28
+ const raw = parseJSONValue(valueJson);
29
+ const arr = Array.isArray(raw) ? raw : [raw];
30
+ const [startRaw, endRaw] = arr;
31
+ const start = startRaw ? startOfDay(toDate(startRaw)) : null;
32
+ const end = endRaw ? endOfDay(toDate(endRaw)) : null;
33
+ return (cell) => {
34
+ const d = toDate(cell);
35
+ if (!d)
36
+ return false;
37
+ const sd = d;
38
+ const geStart = !start || sd >= start;
39
+ const leEnd = !end || sd <= end;
40
+ return geStart && leEnd;
41
+ };
42
+ }
43
+ }
44
+ //# sourceMappingURL=dateRangeHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dateRangeHandler.js","sourceRoot":"","sources":["../../../src/functions/filtering/dateRangeHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,CAAC,EAAC,MAAM,KAAK,CAAC;AAEtB,OAAO,EAAC,WAAW,EAAC,MAAM,eAAe,CAAC;AAG1C,OAAO,EAAC,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,EAAC,MAAM,SAAS,CAAC;AAE7F,MAAM,kBAAkB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,mBAAmB,CAAC,CAAC,CAAC;AAGtE,MAAM,OAAO,gBAAiB,SAAQ,WAAW;IACtC,MAAM,CAAC,EAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAoB;QAC/D,IAAI,OAAO,KAAK,WAAW;YAAE,OAAO,KAAK,CAAC,MAAM,CAAC,EAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAC,CAAC,CAAC;QACjF,kBAAkB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAEnC,IAAI,QAAQ,KAAK,mBAAmB,EAAE,CAAC;YACrC,MAAM,GAAG,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC;YACrC,IAAI,CAAC,CAAC,iBAAiB,IAAI,GAAG,CAAC,EAAE,CAAC;gBAChC,MAAM,IAAI,KAAK,CAAC,qEAAqE,CAAC,CAAC;YACzF,CAAC;YACD,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;YACrC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,eAAe,CAAC,CAAC;YAClD,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,aAAa,CAAC,CAAC;YAC9C,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,KAAK,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YAE5D,OAAO,CAAC,IAAI,EAAE,EAAE;gBACd,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;gBACvB,IAAI,CAAC,CAAC;oBAAE,OAAO,KAAK,CAAC;gBACrB,MAAM,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;gBACzB,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;YAC9B,CAAC,CAAC;QACJ,CAAC;QAED,wEAAwE;QACxE,MAAM,GAAG,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC;QACtC,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAC7C,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,GAAG,GAAG,CAAC;QAC/B,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAC9D,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAEtD,OAAO,CAAC,IAAI,EAAE,EAAE;YACd,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;YACvB,IAAI,CAAC,CAAC;gBAAE,OAAO,KAAK,CAAC;YACrB,MAAM,EAAE,GAAG,CAAC,CAAC;YACb,MAAM,OAAO,GAAG,CAAC,KAAK,IAAI,EAAE,IAAI,KAAK,CAAC;YACtC,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,EAAE,IAAI,GAAG,CAAC;YAChC,OAAO,OAAO,IAAI,KAAK,CAAC;QAC1B,CAAC,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,2 @@
1
+ export type FilterPredicate = (item: unknown) => boolean;
2
+ //# sourceMappingURL=filterPredicate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filterPredicate.d.ts","sourceRoot":"","sources":["../../../src/functions/filtering/filterPredicate.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,eAAe,GAAG,CAAC,IAAI,EAAE,OAAO,KAAK,OAAO,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=filterPredicate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filterPredicate.js","sourceRoot":"","sources":["../../../src/functions/filtering/filterPredicate.ts"],"names":[],"mappings":""}
@@ -0,0 +1,6 @@
1
+ export type GeneralFilterArgs = {
2
+ variant: string;
3
+ operator: string;
4
+ valueJson: string; /** JSON-encoded value of z.union([z.string(), z.array(z.string())]) */
5
+ };
6
+ //# sourceMappingURL=generalFilterArgs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generalFilterArgs.d.ts","sourceRoot":"","sources":["../../../src/functions/filtering/generalFilterArgs.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,iBAAiB,GAAG;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC,CAAG,uEAAuE;CAC7F,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=generalFilterArgs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generalFilterArgs.js","sourceRoot":"","sources":["../../../src/functions/filtering/generalFilterArgs.ts"],"names":[],"mappings":""}
@@ -0,0 +1,8 @@
1
+ import { GeneralFilterArgs } from "./generalFilterArgs";
2
+ import { FilterPredicate } from "./filterPredicate";
3
+ /** ---------- Chain of Responsibility Handler Pattern ---------- */
4
+ export interface Handler {
5
+ setNext(next: Handler): Handler;
6
+ handle(args: GeneralFilterArgs): FilterPredicate | null;
7
+ }
8
+ //# sourceMappingURL=handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../../src/functions/filtering/handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,iBAAiB,EAAC,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAC,eAAe,EAAC,MAAM,mBAAmB,CAAC;AAElD,oEAAoE;AACpE,MAAM,WAAW,OAAO;IACtB,OAAO,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC;IAEhC,MAAM,CAAC,IAAI,EAAE,iBAAiB,GAAG,eAAe,GAAG,IAAI,CAAC;CACzD"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handler.js","sourceRoot":"","sources":["../../../src/functions/filtering/handler.ts"],"names":[],"mappings":""}
@@ -1,2 +1,10 @@
1
1
  export * from './queryFilters';
2
+ /** ---------- Operators ---------- */
3
+ export { BooleanOperator } from './booleanHandler';
4
+ export { DateOperator } from './dateHandler';
5
+ export { DateRangeOperator } from './dateRangeHandler';
6
+ export { MultiSelectOperator } from './multiSelectHandler';
7
+ export { NumberOperator } from './numberHandler';
8
+ export { NumberRangeOperator } from './numberRangeHandler';
9
+ export { TextOperator } from './textHandler';
2
10
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/functions/filtering/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/functions/filtering/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAE/B,sCAAsC;AACtC,OAAO,EAAC,eAAe,EAAC,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAC,YAAY,EAAC,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAC,iBAAiB,EAAC,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAC,mBAAmB,EAAC,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAC,cAAc,EAAC,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAC,mBAAmB,EAAC,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAC,YAAY,EAAC,MAAM,eAAe,CAAC"}
@@ -0,0 +1,14 @@
1
+ import { z } from "zod";
2
+ import { BaseHandler } from "./baseHandler";
3
+ import { GeneralFilterArgs } from "./generalFilterArgs";
4
+ import { FilterPredicate } from "./filterPredicate";
5
+ declare const MultiSelectOperators: z.ZodEnum<{
6
+ in: "in";
7
+ notIn: "notIn";
8
+ }>;
9
+ export type MultiSelectOperator = z.infer<typeof MultiSelectOperators>;
10
+ export declare class MultiSelectHandler extends BaseHandler {
11
+ handle({ variant, operator, valueJson }: GeneralFilterArgs): FilterPredicate | null;
12
+ }
13
+ export {};
14
+ //# sourceMappingURL=multiSelectHandler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"multiSelectHandler.d.ts","sourceRoot":"","sources":["../../../src/functions/filtering/multiSelectHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,CAAC,EAAC,MAAM,KAAK,CAAC;AAEtB,OAAO,EAAC,WAAW,EAAC,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAC,iBAAiB,EAAC,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAC,eAAe,EAAC,MAAM,mBAAmB,CAAC;AAGlD,QAAA,MAAM,oBAAoB;;;EAA0B,CAAC;AACrD,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAcvE,qBAAa,kBAAmB,SAAQ,WAAW;IACxC,MAAM,CAAC,EAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAC,EAAE,iBAAiB,GAAG,eAAe,GAAG,IAAI;CA2B3F"}
@@ -0,0 +1,46 @@
1
+ import { z } from "zod";
2
+ import { BaseHandler } from "./baseHandler";
3
+ import { parseJSONValue } from "./utils";
4
+ const MultiSelectOperators = z.enum(['in', 'notIn']);
5
+ const asArray = (x) => {
6
+ if (Array.isArray(x))
7
+ return x.map(String);
8
+ // allow comma-separated strings as a convenience
9
+ if (typeof x === 'string')
10
+ return x
11
+ .split(',')
12
+ .map((s) => s.trim())
13
+ .filter(Boolean);
14
+ if (x == null)
15
+ return [];
16
+ return [JSON.stringify(x)];
17
+ };
18
+ export class MultiSelectHandler extends BaseHandler {
19
+ handle({ variant, operator, valueJson }) {
20
+ if (variant !== 'multiSelect')
21
+ return super.handle({ variant, operator, valueJson });
22
+ MultiSelectOperators.parse(operator);
23
+ const raw = parseJSONValue(valueJson);
24
+ const needles = asArray(raw);
25
+ switch (operator) {
26
+ case 'in':
27
+ // cell has ANY of the selected
28
+ return (cell) => {
29
+ const arr = asArray(cell);
30
+ return arr.some((v) => needles.includes(String(v)));
31
+ };
32
+ case 'notIn':
33
+ // cell has NONE of the selected
34
+ return (cell) => {
35
+ const arr = asArray(cell);
36
+ return arr.every((v) => !needles.includes(String(v)));
37
+ };
38
+ case 'isEmpty':
39
+ return (cell) => asArray(cell).length === 0;
40
+ case 'isNotEmpty':
41
+ return (cell) => asArray(cell).length > 0;
42
+ }
43
+ throw new Error(`Unsupported multi-select operator "${operator}"`);
44
+ }
45
+ }
46
+ //# sourceMappingURL=multiSelectHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"multiSelectHandler.js","sourceRoot":"","sources":["../../../src/functions/filtering/multiSelectHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,CAAC,EAAC,MAAM,KAAK,CAAC;AAEtB,OAAO,EAAC,WAAW,EAAC,MAAM,eAAe,CAAC;AAG1C,OAAO,EAAC,cAAc,EAAC,MAAM,SAAS,CAAC;AAEvC,MAAM,oBAAoB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;AAGrD,MAAM,OAAO,GAAG,CAAC,CAAU,EAAY,EAAE;IACvC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QAAE,OAAO,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC3C,iDAAiD;IACjD,IAAI,OAAO,CAAC,KAAK,QAAQ;QACvB,OAAO,CAAC;aACC,KAAK,CAAC,GAAG,CAAC;aACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;aACpB,MAAM,CAAC,OAAO,CAAC,CAAC;IAC3B,IAAI,CAAC,IAAI,IAAI;QAAE,OAAO,EAAE,CAAC;IACzB,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7B,CAAC,CAAC;AAEF,MAAM,OAAO,kBAAmB,SAAQ,WAAW;IACxC,MAAM,CAAC,EAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAoB;QAC/D,IAAI,OAAO,KAAK,aAAa;YAAE,OAAO,KAAK,CAAC,MAAM,CAAC,EAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAC,CAAC,CAAC;QACnF,oBAAoB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAErC,MAAM,GAAG,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC;QACtC,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;QAE7B,QAAQ,QAAQ,EAAE,CAAC;YACjB,KAAK,IAAI;gBACP,+BAA+B;gBAC/B,OAAO,CAAC,IAAI,EAAE,EAAE;oBACd,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;oBAC1B,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACtD,CAAC,CAAC;YACJ,KAAK,OAAO;gBACV,gCAAgC;gBAChC,OAAO,CAAC,IAAI,EAAE,EAAE;oBACd,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;oBAC1B,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACxD,CAAC,CAAC;YACJ,KAAK,SAAS;gBACZ,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC;YAC9C,KAAK,YAAY;gBACf,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;QAC9C,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,sCAAsC,QAAQ,GAAG,CAAC,CAAC;IACrE,CAAC;CACF"}
@@ -0,0 +1,20 @@
1
+ import { z } from "zod";
2
+ import { BaseHandler } from "./baseHandler";
3
+ import { GeneralFilterArgs } from "./generalFilterArgs";
4
+ import { FilterPredicate } from "./filterPredicate";
5
+ declare const NumberOperators: z.ZodEnum<{
6
+ "=": "=";
7
+ "!=": "!=";
8
+ "<": "<";
9
+ "<=": "<=";
10
+ ">": ">";
11
+ ">=": ">=";
12
+ isEmpty: "isEmpty";
13
+ isNotEmpty: "isNotEmpty";
14
+ }>;
15
+ export type NumberOperator = z.infer<typeof NumberOperators>;
16
+ export declare class NumberHandler extends BaseHandler {
17
+ handle({ variant, operator, valueJson }: GeneralFilterArgs): FilterPredicate | null;
18
+ }
19
+ export {};
20
+ //# sourceMappingURL=numberHandler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"numberHandler.d.ts","sourceRoot":"","sources":["../../../src/functions/filtering/numberHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,CAAC,EAAC,MAAM,KAAK,CAAC;AAEtB,OAAO,EAAC,WAAW,EAAC,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAC,iBAAiB,EAAC,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAC,eAAe,EAAC,MAAM,mBAAmB,CAAC;AAIlD,QAAA,MAAM,eAAe;;;;;;;;;EAAqE,CAAC;AAC3F,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAE7D,qBAAa,aAAc,SAAQ,WAAW;IACnC,MAAM,CAAC,EAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAC,EAAE,iBAAiB,GAAG,eAAe,GAAG,IAAI;CA0C3F"}
@@ -0,0 +1,48 @@
1
+ import { z } from "zod";
2
+ import { BaseHandler } from "./baseHandler";
3
+ import { parseJSONValue, toNumber } from "./utils";
4
+ const NumberOperators = z.enum(['=', '!=', '>', '>=', '<', '<=', 'isEmpty', 'isNotEmpty']);
5
+ export class NumberHandler extends BaseHandler {
6
+ handle({ variant, operator, valueJson }) {
7
+ if (variant !== 'number')
8
+ return super.handle({ variant, operator, valueJson });
9
+ NumberOperators.parse(operator);
10
+ const raw = parseJSONValue(valueJson);
11
+ const value = Array.isArray(raw) ? toNumber(raw[0]) : toNumber(raw);
12
+ if (value == null && !['isEmpty', 'isNotEmpty'].includes(operator)) {
13
+ throw new Error('Number filter requires a numeric value');
14
+ }
15
+ switch (operator) {
16
+ case '=':
17
+ return (cell) => toNumber(cell) === value;
18
+ case '!=':
19
+ return (cell) => toNumber(cell) !== value;
20
+ case '<':
21
+ return (cell) => {
22
+ const n = toNumber(cell);
23
+ return n == null ? false : n < value;
24
+ };
25
+ case '<=':
26
+ return (cell) => {
27
+ const n = toNumber(cell);
28
+ return n == null ? false : n <= value;
29
+ };
30
+ case '>':
31
+ return (cell) => {
32
+ const n = toNumber(cell);
33
+ return n == null ? false : n > value;
34
+ };
35
+ case '>=':
36
+ return (cell) => {
37
+ const n = toNumber(cell);
38
+ return n == null ? false : n >= value;
39
+ };
40
+ case 'isEmpty':
41
+ return (cell) => cell == null || cell === '';
42
+ case 'isNotEmpty':
43
+ return (cell) => !(cell == null || cell === '');
44
+ }
45
+ throw new Error(`Unsupported number operator "${operator}"`);
46
+ }
47
+ }
48
+ //# sourceMappingURL=numberHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"numberHandler.js","sourceRoot":"","sources":["../../../src/functions/filtering/numberHandler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import { z } from "zod";
2
+ import { BaseHandler } from "./baseHandler";
3
+ import { GeneralFilterArgs } from "./generalFilterArgs";
4
+ import { FilterPredicate } from "./filterPredicate";
5
+ declare const NumberRangeOperators: z.ZodEnum<{
6
+ isBetween: "isBetween";
7
+ }>;
8
+ export type NumberRangeOperator = z.infer<typeof NumberRangeOperators>;
9
+ export declare class NumberRangeHandler extends BaseHandler {
10
+ handle({ variant, operator, valueJson }: GeneralFilterArgs): FilterPredicate | null;
11
+ }
12
+ export {};
13
+ //# sourceMappingURL=numberRangeHandler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"numberRangeHandler.d.ts","sourceRoot":"","sources":["../../../src/functions/filtering/numberRangeHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,CAAC,EAAC,MAAM,KAAK,CAAC;AAEtB,OAAO,EAAC,WAAW,EAAC,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAC,iBAAiB,EAAC,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAC,eAAe,EAAC,MAAM,mBAAmB,CAAC;AAGlD,QAAA,MAAM,oBAAoB;;EAAwB,CAAC;AACnD,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAEvE,qBAAa,kBAAmB,SAAQ,WAAW;IACxC,MAAM,CAAC,EAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAC,EAAE,iBAAiB,GAAG,eAAe,GAAG,IAAI;CAkB3F"}
@@ -0,0 +1,25 @@
1
+ import { z } from "zod";
2
+ import { BaseHandler } from "./baseHandler";
3
+ import { parseJSONValue, toNumber } from "./utils";
4
+ const NumberRangeOperators = z.enum(['isBetween']);
5
+ export class NumberRangeHandler extends BaseHandler {
6
+ handle({ variant, operator, valueJson }) {
7
+ if (variant !== 'range')
8
+ return super.handle({ variant, operator, valueJson });
9
+ NumberRangeOperators.parse(operator);
10
+ const raw = parseJSONValue(valueJson);
11
+ const arr = Array.isArray(raw) ? raw : [raw];
12
+ const [minStr, maxStr] = arr;
13
+ const min = toNumber(minStr);
14
+ const max = toNumber(maxStr);
15
+ return (cell) => {
16
+ const n = toNumber(cell);
17
+ if (n == null)
18
+ return false;
19
+ const geMin = min == null || n >= min;
20
+ const leMax = max == null || n <= max;
21
+ return geMin && leMax;
22
+ };
23
+ }
24
+ }
25
+ //# sourceMappingURL=numberRangeHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"numberRangeHandler.js","sourceRoot":"","sources":["../../../src/functions/filtering/numberRangeHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,CAAC,EAAC,MAAM,KAAK,CAAC;AAEtB,OAAO,EAAC,WAAW,EAAC,MAAM,eAAe,CAAC;AAG1C,OAAO,EAAC,cAAc,EAAE,QAAQ,EAAC,MAAM,SAAS,CAAC;AAEjD,MAAM,oBAAoB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;AAGnD,MAAM,OAAO,kBAAmB,SAAQ,WAAW;IACxC,MAAM,CAAC,EAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAoB;QAC/D,IAAI,OAAO,KAAK,OAAO;YAAE,OAAO,KAAK,CAAC,MAAM,CAAC,EAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAC,CAAC,CAAC;QAC7E,oBAAoB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAErC,MAAM,GAAG,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC;QACtC,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAC7C,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,GAAG,CAAC;QAC7B,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC7B,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;QAE7B,OAAO,CAAC,IAAI,EAAE,EAAE;YACd,MAAM,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;YACzB,IAAI,CAAC,IAAI,IAAI;gBAAE,OAAO,KAAK,CAAC;YAC5B,MAAM,KAAK,GAAG,GAAG,IAAI,IAAI,IAAI,CAAC,IAAI,GAAG,CAAC;YACtC,MAAM,KAAK,GAAG,GAAG,IAAI,IAAI,IAAI,CAAC,IAAI,GAAG,CAAC;YACtC,OAAO,KAAK,IAAI,KAAK,CAAC;QACxB,CAAC,CAAC;IACJ,CAAC;CACF"}
@@ -1,18 +1,13 @@
1
1
  import type { Row } from '@tanstack/react-table';
2
2
  import { RuleGroupType, RuleType } from 'react-querybuilder';
3
- type GeneralFilterArgs = {
4
- variant: string;
5
- operator: string;
6
- /** JSON-encoded value of z.union([z.string(), z.array(z.string())]) */
7
- valueJson: string;
8
- };
9
- type Predicate<Row = unknown> = (cellValue: unknown, row?: Row) => boolean;
3
+ import { GeneralFilterArgs } from "./generalFilterArgs";
4
+ import { FilterPredicate } from "./filterPredicate";
10
5
  /** ---------- Public factories ---------- */
11
6
  /**
12
7
  * Builds a predicate for a single cell given a filter config.
13
8
  * Throws for unknown variant or irrelevant operators.
14
9
  */
15
- export declare const createFilterPredicate: <Row = unknown>(args: GeneralFilterArgs) => Predicate<Row>;
10
+ export declare const createFilterPredicate: (args: GeneralFilterArgs) => FilterPredicate;
16
11
  /**
17
12
  * A type for defining a function that determines whether a specific row of data
18
13
  * meets the conditions defined by a filter.
@@ -67,7 +62,24 @@ type genericFilterFunction<TData> = (row: TData, filterValue: RuleType) => boole
67
62
  * whether it satisfies the filter.
68
63
  */
69
64
  export declare const genericFilter: <TData>() => genericFilterFunction<TData>;
65
+ /**
66
+ * A type definition for a generic function that processes a row of data and determines
67
+ * whether it satisfies the conditions specified in a filter group.
68
+ *
69
+ * @callback genericFilterGroupFunction
70
+ * @template TData - The type of the data row being evaluated.
71
+ * @param {TData} row - The data row to evaluate against the filter group.
72
+ * @param {RuleGroupType} filter - The object representing the group of filtering rules. (React Query Builder format)
73
+ * @returns {boolean} A boolean indicating whether the data row satisfies the filter group.
74
+ */
70
75
  type genericFilterGroupFunction<TData> = (row: TData, filter: RuleGroupType) => boolean;
76
+ /**
77
+ * A generic filter group function that applies a set of filtering rules to a given data row.
78
+ * This function evaluates the rules based on the combinator provided ('and' or 'or') and applies the corresponding logical operation.
79
+ *
80
+ * @template TData The type of the data to which filtering rules will be applied.
81
+ * @returns {genericFilterGroupFunction<TData>} A function that evaluates a row against the given filter rules.
82
+ */
71
83
  export declare const genericFilterGroup: <TData>() => genericFilterGroupFunction<TData>;
72
84
  export {};
73
85
  //# sourceMappingURL=queryFilters.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"queryFilters.d.ts","sourceRoot":"","sources":["../../../src/functions/filtering/queryFilters.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,GAAG,EAAC,MAAM,uBAAuB,CAAC;AAC/C,OAAO,EAA8B,aAAa,EAAE,QAAQ,EAAC,MAAM,oBAAoB,CAAC;AAyBxF,KAAK,iBAAiB,GAAG;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,uEAAuE;IACvE,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAGF,KAAK,SAAS,CAAC,GAAG,GAAG,OAAO,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,GAAG,KAAK,OAAO,CAAC;AAsc3E,6CAA6C;AAE7C;;;GAGG;AACH,eAAO,MAAM,qBAAqB,GAAI,GAAG,GAAG,OAAO,EAAE,MAAM,iBAAiB,KAAG,SAAS,CAAC,GAAG,CAI3F,CAAC;AAEF;;;;;;;;;GASG;AACH,MAAM,MAAM,2BAA2B,CAAC,KAAK,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC;AAEpH;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,mBAAmB,GAC7B,KAAK,OAAK,2BAA2B,CAAC,KAAK,CAS3C,CAAC;AAEJ;;;;;;;;;;GAUG;AACH,KAAK,qBAAqB,CAAC,KAAK,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,KAAK,OAAO,CAAC;AAsBnF;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,aAAa,GACvB,KAAK,OAAK,qBAAqB,CAAC,KAAK,CAQrC,CAAC;AAEJ,KAAK,0BAA0B,CAAC,KAAK,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,KAAK,OAAO,CAAC;AAExF,eAAO,MAAM,kBAAkB,GAC5B,KAAK,OAAK,0BAA0B,CAAC,KAAK,CAI1C,CAAC"}
1
+ {"version":3,"file":"queryFilters.d.ts","sourceRoot":"","sources":["../../../src/functions/filtering/queryFilters.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,GAAG,EAAC,MAAM,uBAAuB,CAAC;AAC/C,OAAO,EAA8B,aAAa,EAAE,QAAQ,EAAC,MAAM,oBAAoB,CAAC;AAGxF,OAAO,EAAC,iBAAiB,EAAC,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAC,eAAe,EAAC,MAAM,mBAAmB,CAAC;AAoElD,6CAA6C;AAE7C;;;GAGG;AACH,eAAO,MAAM,qBAAqB,GAAI,MAAM,iBAAiB,KAAG,eAI/D,CAAC;AAEF;;;;;;;;;GASG;AACH,MAAM,MAAM,2BAA2B,CAAC,KAAK,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC;AAEpH;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,mBAAmB,GACvB,KAAK,OAAK,2BAA2B,CAAC,KAAK,CAUnC,CAAC;AAElB;;;;;;;;;;GAUG;AACH,KAAK,qBAAqB,CAAC,KAAK,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,KAAK,OAAO,CAAC;AAuCnF;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,aAAa,GACjB,KAAK,OAAK,qBAAqB,CAAC,KAAK,CAU7B,CAAC;AAElB;;;;;;;;;GASG;AACH,KAAK,0BAA0B,CAAC,KAAK,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,KAAK,OAAO,CAAC;AAExF;;;;;;GAMG;AACH,eAAO,MAAM,kBAAkB,GACtB,KAAK,OAAK,0BAA0B,CAAC,KAAK,CAIlC,CAAC"}