quetch 0.16.3 → 0.18.0

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 (38) hide show
  1. package/dist/tools/filterFromContext.js +41 -5
  2. package/dist/tools/filterFromContext.js.map +1 -1
  3. package/dist/tools/normalizeOrder.js +1 -1
  4. package/dist/tools/normalizeOrder.js.map +1 -1
  5. package/dist/tools/queryItemList.d.ts +1 -1
  6. package/dist/tools/queryItemList.js.map +1 -1
  7. package/dist/tools/sortItemList.d.ts +1 -1
  8. package/dist/tools/sortItemList.js.map +1 -1
  9. package/dist/types/FilterGroup.d.ts +2 -2
  10. package/dist/types/FilterStringIntersect.d.ts +1 -1
  11. package/dist/types/Locale.d.ts +1 -1
  12. package/dist/types/Parameters.d.ts +1 -1
  13. package/dist/types/Path.d.ts +1 -1
  14. package/dist/types/PathFiltered.d.ts +2 -2
  15. package/dist/types/QueryAggregate.d.ts +1 -1
  16. package/dist/types/QueryCreateMultiple.d.ts +1 -1
  17. package/dist/types/QueryRead.d.ts +1 -1
  18. package/dist/types/QueryReadMultiple.d.ts +2 -2
  19. package/dist/types/QueryUpdateMultiple.d.ts +1 -1
  20. package/dist/types/Result.d.ts +2 -2
  21. package/lib/tools/filterFromContext.test.ts +41 -0
  22. package/lib/tools/filterFromContext.ts +47 -5
  23. package/lib/tools/normalizeOrder.ts +1 -1
  24. package/lib/tools/queryItemList.ts +2 -2
  25. package/lib/tools/sortItemList.ts +2 -2
  26. package/lib/types/FilterGroup.ts +2 -2
  27. package/lib/types/FilterStringIntersect.ts +1 -1
  28. package/lib/types/Locale.ts +1 -1
  29. package/lib/types/Parameters.ts +4 -1
  30. package/lib/types/Path.ts +1 -1
  31. package/lib/types/PathFiltered.ts +5 -5
  32. package/lib/types/QueryAggregate.ts +1 -1
  33. package/lib/types/QueryCreateMultiple.ts +1 -1
  34. package/lib/types/QueryRead.ts +1 -1
  35. package/lib/types/QueryReadMultiple.ts +2 -2
  36. package/lib/types/QueryUpdateMultiple.ts +1 -1
  37. package/lib/types/Result.ts +3 -2
  38. package/package.json +1 -1
@@ -1,12 +1,48 @@
1
+ import { EMPTY_ARRAY } from "unchangeable";
1
2
  const { entries } = Object;
2
3
  export function filterFromContext(context) {
3
4
  return {
4
5
  operator: "all",
5
- value: entries(context).map(([field, value]) => ({
6
- field,
7
- operator: "equal",
8
- value,
9
- })),
6
+ value: criteria(context),
10
7
  };
11
8
  }
9
+ function criteria(context, path = EMPTY_ARRAY) {
10
+ return entries(context).flatMap(([field, value]) => {
11
+ switch (typeof value) {
12
+ case "bigint":
13
+ case "string":
14
+ case "number":
15
+ case "boolean":
16
+ case "symbol":
17
+ case "undefined":
18
+ return [
19
+ {
20
+ field: path.length === 0 ? field : [...path, field],
21
+ operator: "equal",
22
+ value,
23
+ },
24
+ ];
25
+ case "object":
26
+ return criteria(value, [...path, field]);
27
+ default:
28
+ return EMPTY_ARRAY;
29
+ // Ignore
30
+ }
31
+ });
32
+ }
33
+ /*
34
+
35
+ {
36
+ filter: {
37
+ field: "a"
38
+ }
39
+ }
40
+
41
+ {
42
+ operator: "equal",
43
+ field: ["filter", "field"],
44
+ value: "a"
45
+ }
46
+
47
+ */
12
48
  //# sourceMappingURL=filterFromContext.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"filterFromContext.js","sourceRoot":"","sources":["../../lib/tools/filterFromContext.ts"],"names":[],"mappings":"AAEA,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC;AAE3B,MAAM,UAAU,iBAAiB,CAC/B,OAAmB;IAEnB,OAAO;QACL,QAAQ,EAAE,KAAK;QACf,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;YAC/C,KAAK;YACL,QAAQ,EAAE,OAAO;YACjB,KAAK;SACN,CAAC,CAAgB;KACnB,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"filterFromContext.js","sourceRoot":"","sources":["../../lib/tools/filterFromContext.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAI3C,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC;AAE3B,MAAM,UAAU,iBAAiB,CAC/B,OAAmB;IAEnB,OAAO;QACL,QAAQ,EAAE,KAAK;QACf,KAAK,EAAE,QAAQ,CAAC,OAAO,CAAgB;KACxC,CAAC;AACJ,CAAC;AAED,SAAS,QAAQ,CACf,OAAe,EACf,OAA0B,WAAW;IAErC,OAAO,OAAO,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE;QACjD,QAAQ,OAAO,KAAK,EAAE,CAAC;YACrB,KAAK,QAAQ,CAAC;YACd,KAAK,QAAQ,CAAC;YACd,KAAK,QAAQ,CAAC;YACd,KAAK,SAAS,CAAC;YACf,KAAK,QAAQ,CAAC;YACd,KAAK,WAAW;gBACd,OAAO;oBACL;wBACE,KAAK,EAAE,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,EAAE,KAAK,CAAC;wBACnD,QAAQ,EAAE,OAAO;wBACjB,KAAK;qBACN;iBACF,CAAC;YACJ,KAAK,QAAQ;gBACX,OAAO,QAAQ,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;YAC3C;gBACE,OAAO,WAAW,CAAC;YACrB,SAAS;QACX,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;;;;;;;EAcE"}
@@ -1,4 +1,4 @@
1
- const { isArray } = Array;
1
+ const isArray = Array.isArray;
2
2
  /**
3
3
  * Returns a normalized order, which is an object with the `field` and `descending` properties.
4
4
  *
@@ -1 +1 @@
1
- {"version":3,"file":"normalizeOrder.js","sourceRoot":"","sources":["../../lib/tools/normalizeOrder.ts"],"names":[],"mappings":"AAEA,MAAM,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC;AAE1B;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAC5B,KAAe;IAKf,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAChD,OAAO;YACL,KAAK,EAAE,KAAY;YACnB,UAAU,EAAE,KAAK;SAClB,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
1
+ {"version":3,"file":"normalizeOrder.js","sourceRoot":"","sources":["../../lib/tools/normalizeOrder.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,GAAG,KAAK,CAAC,OAAkD,CAAC;AAEzE;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAC5B,KAAe;IAKf,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAChD,OAAO;YACL,KAAK,EAAE,KAAY;YACnB,UAAU,EAAE,KAAK;SAClB,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -6,5 +6,5 @@ import type { Query, Result } from "../types.js";
6
6
  * @returns The result of the query.
7
7
  */
8
8
  export declare function queryItemList<T extends object, const Q extends Query<T>>(query: Q & {
9
- type: T[];
9
+ type: readonly T[];
10
10
  }): Result<T, Q>;
@@ -1 +1 @@
1
- {"version":3,"file":"queryItemList.js","sourceRoot":"","sources":["../../lib/tools/queryItemList.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAS5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,SAAS,qBAAqB,CAC5B,OAAoB,EACpB,MAAkB;IAElB,IAAI,OAAO,KAAK,SAAS,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QAClD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,OAAO,MAAM,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;IACvC,CAAC;IACD,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,OAAO,iBAAiB,CAAC,OAAO,CAAC,CAAC;IACpC,CAAC;IACD,OAAO;QACL,QAAQ,EAAE,KAAK;QACf,KAAK,EAAE,CAAC,iBAAiB,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;KAC5C,CAAC;AACJ,CAAC;AAED,SAAS,mBAAmB,CAC1B,UAAgC;IAEhC,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE,CAAC;QACnC,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC;IAClC,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAC3B,KAAwB;IAExB,MAAM,IAAI,GAAG,KAAK,CAAC,IAAW,CAAC;IAC/B,QAAQ,KAAK,CAAC,MAAM,EAAE,CAAC;QACrB,KAAK,MAAM,CAAC;QACZ,KAAK,SAAS,CAAC,CAAC,CAAC;YACf,MAAM,EACJ,MAAM,EACN,OAAO,EACP,MAAM,GAAG,CAAC,EACV,KAAK,GAAG,QAAQ,EAChB,KAAK,EACL,QAAQ,GAAG,KAAK,EAChB,QAAQ,GACT,GAAG,KAAK,CAAC;YACV,SAAS;YACT,IAAI,MAAM,GAAG,IAAI,CAAC;YAClB,MAAM,gBAAgB,GAAG,qBAAqB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YAChE,IAAI,CAAC,QAAQ,IAAI,MAAM,KAAK,CAAC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACrD,MAAM,IAAI,GACR,gBAAgB,KAAK,SAAS;oBAC5B,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;oBACX,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CACnB,UAAU,CAAC,gBAAgB,EAAE,IAAI,EAAE,QAAQ,CAAC,CAC7C,CAAC;gBACR,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;oBACvB,MAAM,IAAI,YAAY,CAAC,WAAW,EAAE,GAAG,EAAE,KAAmB,CAAC,CAAC;gBAChE,CAAC;gBACD,OAAO,IAAoB,CAAC;YAC9B,CAAC;YACD,SAAS;YACT,IAAI,gBAAgB,KAAK,SAAS,EAAE,CAAC;gBACnC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAC5B,UAAU,CAAC,gBAAgB,EAAE,IAAI,EAAE,QAAQ,CAAC,CAC7C,CAAC;YACJ,CAAC;YACD,OAAO;YACP,MAAM,GAAG,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;YACrC,QAAQ;YACR,IAAI,MAAM,KAAK,CAAC,IAAI,KAAK,KAAK,QAAQ,EAAE,CAAC;gBACvC,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,KAAK,CAAC,CAAC;YAChD,CAAC;YACD,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;gBACvB,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;oBACvB,MAAM,IAAI,YAAY,CAAC,WAAW,EAAE,GAAG,EAAE,KAAmB,CAAC,CAAC;gBAChE,CAAC;gBACD,OAAO,IAAoB,CAAC;YAC9B,CAAC;YACD,OAAO,MAAsB,CAAC;QAChC,CAAC;QACD,KAAK,WAAW,CAAC,CAAC,CAAC;YACjB,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC;YACxD,MAAM,oBAAoB,GAAG,mBAAmB,CAAC,UAAU,CAAC,CAAC;YAC7D,QAAQ,oBAAoB,CAAC,QAAQ,EAAE,CAAC;gBACtC,KAAK,QAAQ,CAAC,CAAC,CAAC;oBACd,MAAM,gBAAgB,GAAG,qBAAqB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;oBAChE,IAAI,gBAAgB,KAAK,SAAS,EAAE,CAAC;wBACnC,OAAO,IAAI,CAAC,MAAsB,CAAC;oBACrC,CAAC;oBACD,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE;wBAClC,IAAI,UAAU,CAAC,gBAAgB,EAAE,IAAI,EAAE,QAAQ,CAAC,EAAE,CAAC;4BACjD,OAAO,MAAM,GAAG,CAAC,CAAC;wBACpB,CAAC;wBACD,OAAO,MAAM,CAAC;oBAChB,CAAC,EAAE,CAAW,CAAiB,CAAC;gBAClC,CAAC;gBACD,KAAK,OAAO,CAAC,CAAC,CAAC;oBACb,MAAM,EAAE,MAAM,GAAG,CAAC,EAAE,KAAK,EAAE,KAAK,GAAG,QAAQ,EAAE,GAAG,KAAK,CAAC;oBACtD,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,oBAAoB,CAAC;oBAC1D,IAAI,MAAM,GAAG,IAAI,CAAC;oBAClB,SAAS;oBACT,MAAM,gBAAgB,GAAG,qBAAqB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;oBAChE,IAAI,gBAAgB,KAAK,SAAS,EAAE,CAAC;wBACnC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAC5B,UAAU,CAAC,gBAAgB,EAAE,IAAI,EAAE,QAAQ,CAAC,CAC7C,CAAC;oBACJ,CAAC;oBACD,OAAO;oBACP,MAAM,GAAG,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;oBACrC,QAAQ;oBACR,IAAI,MAAM,KAAK,CAAC,IAAI,KAAK,KAAK,QAAQ,EAAE,CAAC;wBACvC,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,KAAK,CAAC,CAAC;oBAChD,CAAC;oBACD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;wBACxB,OAAO,CAAC,CAAiB,CAAC;oBAC5B,CAAC;oBACD,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;wBAC7B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAiB,CAAC;oBACxD,CAAC;oBACD,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAC3D,UAAU,CAAC,UAAU,EAAE,IAAI,EAAE,QAAQ,CAAC,CACvB,CAAC;gBACpB,CAAC;gBACD,OAAO,CAAC,CAAC,CAAC;oBACR,MAAM,IAAI,KAAK,CACb,wBAAwB,oBAAoB,CAAC,QAAQ,sBAAsB,CAC5E,CAAC;gBACJ,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,CAAC,CAAC,CAAC;YACR,MAAM,IAAI,KAAK,CAAC,yBAAyB,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"queryItemList.js","sourceRoot":"","sources":["../../lib/tools/queryItemList.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAS5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,SAAS,qBAAqB,CAC5B,OAAoB,EACpB,MAAkB;IAElB,IAAI,OAAO,KAAK,SAAS,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QAClD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,OAAO,MAAM,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;IACvC,CAAC;IACD,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,OAAO,iBAAiB,CAAC,OAAO,CAAC,CAAC;IACpC,CAAC;IACD,OAAO;QACL,QAAQ,EAAE,KAAK;QACf,KAAK,EAAE,CAAC,iBAAiB,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;KAC5C,CAAC;AACJ,CAAC;AAED,SAAS,mBAAmB,CAC1B,UAAgC;IAEhC,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE,CAAC;QACnC,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC;IAClC,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAC3B,KAAiC;IAEjC,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;IACxB,QAAQ,KAAK,CAAC,MAAM,EAAE,CAAC;QACrB,KAAK,MAAM,CAAC;QACZ,KAAK,SAAS,CAAC,CAAC,CAAC;YACf,MAAM,EACJ,MAAM,EACN,OAAO,EACP,MAAM,GAAG,CAAC,EACV,KAAK,GAAG,QAAQ,EAChB,KAAK,EACL,QAAQ,GAAG,KAAK,EAChB,QAAQ,GACT,GAAG,KAAK,CAAC;YACV,SAAS;YACT,IAAI,MAAM,GAAG,IAAI,CAAC;YAClB,MAAM,gBAAgB,GAAG,qBAAqB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YAChE,IAAI,CAAC,QAAQ,IAAI,MAAM,KAAK,CAAC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACrD,MAAM,IAAI,GACR,gBAAgB,KAAK,SAAS;oBAC5B,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;oBACX,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CACnB,UAAU,CAAC,gBAAgB,EAAE,IAAI,EAAE,QAAQ,CAAC,CAC7C,CAAC;gBACR,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;oBACvB,MAAM,IAAI,YAAY,CAAC,WAAW,EAAE,GAAG,EAAE,KAAmB,CAAC,CAAC;gBAChE,CAAC;gBACD,OAAO,IAAoB,CAAC;YAC9B,CAAC;YACD,SAAS;YACT,IAAI,gBAAgB,KAAK,SAAS,EAAE,CAAC;gBACnC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAC5B,UAAU,CAAC,gBAAgB,EAAE,IAAI,EAAE,QAAQ,CAAC,CAC7C,CAAC;YACJ,CAAC;YACD,OAAO;YACP,MAAM,GAAG,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;YACrC,QAAQ;YACR,IAAI,MAAM,KAAK,CAAC,IAAI,KAAK,KAAK,QAAQ,EAAE,CAAC;gBACvC,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,KAAK,CAAC,CAAC;YAChD,CAAC;YACD,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;gBACvB,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;oBACvB,MAAM,IAAI,YAAY,CAAC,WAAW,EAAE,GAAG,EAAE,KAAmB,CAAC,CAAC;gBAChE,CAAC;gBACD,OAAO,IAAoB,CAAC;YAC9B,CAAC;YACD,OAAO,MAAsB,CAAC;QAChC,CAAC;QACD,KAAK,WAAW,CAAC,CAAC,CAAC;YACjB,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC;YACxD,MAAM,oBAAoB,GAAG,mBAAmB,CAAC,UAAU,CAAC,CAAC;YAC7D,QAAQ,oBAAoB,CAAC,QAAQ,EAAE,CAAC;gBACtC,KAAK,QAAQ,CAAC,CAAC,CAAC;oBACd,MAAM,gBAAgB,GAAG,qBAAqB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;oBAChE,IAAI,gBAAgB,KAAK,SAAS,EAAE,CAAC;wBACnC,OAAO,IAAI,CAAC,MAAsB,CAAC;oBACrC,CAAC;oBACD,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE;wBAClC,IAAI,UAAU,CAAC,gBAAgB,EAAE,IAAI,EAAE,QAAQ,CAAC,EAAE,CAAC;4BACjD,OAAO,MAAM,GAAG,CAAC,CAAC;wBACpB,CAAC;wBACD,OAAO,MAAM,CAAC;oBAChB,CAAC,EAAE,CAAW,CAAiB,CAAC;gBAClC,CAAC;gBACD,KAAK,OAAO,CAAC,CAAC,CAAC;oBACb,MAAM,EAAE,MAAM,GAAG,CAAC,EAAE,KAAK,EAAE,KAAK,GAAG,QAAQ,EAAE,GAAG,KAAK,CAAC;oBACtD,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,oBAAoB,CAAC;oBAC1D,IAAI,MAAM,GAAG,IAAI,CAAC;oBAClB,SAAS;oBACT,MAAM,gBAAgB,GAAG,qBAAqB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;oBAChE,IAAI,gBAAgB,KAAK,SAAS,EAAE,CAAC;wBACnC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAC5B,UAAU,CAAC,gBAAgB,EAAE,IAAI,EAAE,QAAQ,CAAC,CAC7C,CAAC;oBACJ,CAAC;oBACD,OAAO;oBACP,MAAM,GAAG,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;oBACrC,QAAQ;oBACR,IAAI,MAAM,KAAK,CAAC,IAAI,KAAK,KAAK,QAAQ,EAAE,CAAC;wBACvC,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,KAAK,CAAC,CAAC;oBAChD,CAAC;oBACD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;wBACxB,OAAO,CAAC,CAAiB,CAAC;oBAC5B,CAAC;oBACD,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;wBAC7B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAiB,CAAC;oBACxD,CAAC;oBACD,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAC3D,UAAU,CAAC,UAAU,EAAE,IAAI,EAAE,QAAQ,CAAC,CACvB,CAAC;gBACpB,CAAC;gBACD,OAAO,CAAC,CAAC,CAAC;oBACR,MAAM,IAAI,KAAK,CACb,wBAAwB,oBAAoB,CAAC,QAAQ,sBAAsB,CAC5E,CAAC;gBACJ,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,CAAC,CAAC,CAAC;YACR,MAAM,IAAI,KAAK,CAAC,yBAAyB,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -6,4 +6,4 @@ import type { Order } from "../types";
6
6
  * @param value The array to sort.
7
7
  * @returns A new sorted array.
8
8
  */
9
- export declare function sortItemList<T extends object>(orderList: Order<T>[] | undefined, value: T[]): T[];
9
+ export declare function sortItemList<T extends object>(orderList: readonly Order<T>[] | undefined, value: readonly T[]): readonly T[];
@@ -1 +1 @@
1
- {"version":3,"file":"sortItemList.js","sourceRoot":"","sources":["../../lib/tools/sortItemList.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAC1B,SAAiC,EACjC,KAAU;IAEV,IAAI,SAAS,KAAK,SAAS,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,eAAe,GAAG,SAAS,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IACtD,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QAC9B,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,eAAe,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;YAC5D,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,eAAe,CAAC,KAAK,CAAE,CAAC;YACtD,MAAM,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;YAC7B,MAAM,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;YAC7B,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;gBACtB,SAAS;YACX,CAAC;YACD,IAAI,MAAM,GAAG,MAAM,EAAE,CAAC;gBACpB,OAAO,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC7B,CAAC;YACD,OAAO,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7B,CAAC;QACD,OAAO,CAAC,CAAC;IACX,CAAC,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"sortItemList.js","sourceRoot":"","sources":["../../lib/tools/sortItemList.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAC1B,SAA0C,EAC1C,KAAmB;IAEnB,IAAI,SAAS,KAAK,SAAS,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,eAAe,GAAG,SAAS,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IACtD,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QAC9B,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,eAAe,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;YAC5D,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,eAAe,CAAC,KAAK,CAAE,CAAC;YACtD,MAAM,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;YAC7B,MAAM,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;YAC7B,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;gBACtB,SAAS;YACX,CAAC;YACD,IAAI,MAAM,GAAG,MAAM,EAAE,CAAC;gBACpB,OAAO,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC7B,CAAC;YACD,OAAO,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7B,CAAC;QACD,OAAO,CAAC,CAAC;IACX,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -10,7 +10,7 @@ export type FilterGroup<T extends object> = {
10
10
  /**
11
11
  * Filters to join.
12
12
  */
13
- value: Filter<T>[];
13
+ value: readonly Filter<T>[];
14
14
  } | {
15
15
  /**
16
16
  * Boolean operator to use for joining the filters.
@@ -19,5 +19,5 @@ export type FilterGroup<T extends object> = {
19
19
  /**
20
20
  * Filters to join.
21
21
  */
22
- value?: Filter<T>[];
22
+ value?: readonly Filter<T>[];
23
23
  };
@@ -9,4 +9,4 @@ export type FilterStringIntersect<T extends object> = {
9
9
  field: FieldFiltered<T, string>;
10
10
  options?: Intl.CollatorOptions;
11
11
  locale?: Locale;
12
- } & Value<T, string[]>;
12
+ } & Value<T, readonly string[]>;
@@ -1 +1 @@
1
- export type Locale = string | string[];
1
+ export type Locale = string | readonly string[];
@@ -1 +1 @@
1
- export type Parameters = Record<string, string | string[] | number | number[]>;
1
+ export type Parameters = Record<string, string | readonly string[] | number | readonly number[]>;
@@ -1,4 +1,4 @@
1
1
  import type { Increment } from "./Increment";
2
- export type Path<T, D = 0> = D extends 4 ? never : T extends Array<infer P> ? [number] | [number, ...Path<P, Increment<D>>] : T extends object ? {
2
+ export type Path<T, D = 0> = D extends 4 ? never : T extends Array<infer P> ? readonly [number] | readonly [number, ...Path<P, Increment<D>>] : T extends object ? {
3
3
  [K in keyof T]-?: [K] | [K, ...Path<T[K], Increment<D>>];
4
4
  }[keyof T] : never;
@@ -1,4 +1,4 @@
1
1
  import type { Increment } from "./Increment";
2
- export type PathFiltered<T, P, D = 0> = D extends 4 ? never : T extends Array<infer I> ? I extends P ? [number] : [number, ...PathFiltered<I, P, Increment<D>>] : T extends object ? {
3
- [K in keyof T]-?: T[K] extends P ? [K] : [K, ...PathFiltered<T[K], P, Increment<D>>];
2
+ export type PathFiltered<T, P, D = 0> = D extends 4 ? never : T extends ReadonlyArray<infer I> ? I extends P ? readonly [number] : readonly [number, ...PathFiltered<I, P, Increment<D>>] : T extends object ? {
3
+ [K in keyof T]-?: T[K] extends P ? readonly [K] : readonly [K, ...PathFiltered<T[K], P, Increment<D>>];
4
4
  }[keyof T] : never;
@@ -21,7 +21,7 @@ export type QueryAggregate<T extends object> = {
21
21
  /**
22
22
  * Order by which the items should be sorted.
23
23
  */
24
- order?: Order<T>[];
24
+ order?: readonly Order<T>[];
25
25
  /**
26
26
  * Offset of the first matching item.
27
27
  */
@@ -11,7 +11,7 @@ export type QueryCreateMultiple<T extends object> = {
11
11
  * Common item properties to use for identifying the context in which to create the items.
12
12
  */
13
13
  context?: Context<T>;
14
- value: Partial<T>[];
14
+ value: readonly Partial<T>[];
15
15
  /**
16
16
  * Query parameters.
17
17
  */
@@ -30,7 +30,7 @@ export type QueryRead<T extends object> = {
30
30
  /**
31
31
  * Order by which the items should be sorted.
32
32
  */
33
- order?: Order<T>[];
33
+ order?: readonly Order<T>[];
34
34
  /**
35
35
  * Query parameters.
36
36
  */
@@ -33,11 +33,11 @@ export type QueryReadMultiple<T extends object> = {
33
33
  /**
34
34
  * Order by which the items should be sorted.
35
35
  */
36
- order?: Order<T>[];
36
+ order?: readonly Order<T>[];
37
37
  /**
38
38
  * Groups items by specified fields.
39
39
  */
40
- group?: Group<T>[];
40
+ group?: readonly Group<T>[];
41
41
  /**
42
42
  * Query parameters.
43
43
  */
@@ -16,7 +16,7 @@ export type QueryUpdateMultiple<T extends object> = {
16
16
  /**
17
17
  * Partial property values to update.
18
18
  */
19
- value: Partial<T>[];
19
+ value: readonly Partial<T>[];
20
20
  filter?: Filter<T>;
21
21
  /**
22
22
  * Order by which the items should be sorted.
@@ -19,8 +19,8 @@ export type Result<T extends object, Q extends Query<T>> = [Q] extends [
19
19
  }
20
20
  ] ? [Q] extends [{
21
21
  multiple: true;
22
- }] ? ResultRead<T, Q>[] : ResultRead<T, Q> : [Q] extends [{
22
+ }] ? readonly ResultRead<T, Q>[] : ResultRead<T, Q> : [Q] extends [{
23
23
  method: "aggregate";
24
24
  }] ? number : [Q] extends [{
25
25
  multiple: true;
26
- }] ? ResultRead<T, Q>[] : ResultRead<T, Q>;
26
+ }] ? readonly ResultRead<T, Q>[] : ResultRead<T, Q>;
@@ -0,0 +1,41 @@
1
+ import { expect, test } from "vitest";
2
+
3
+ import { filterFromContext } from "./filterFromContext.js";
4
+
5
+ test("returns filter from context", () => {
6
+ expect(filterFromContext({ a: 1 })).toEqual({
7
+ operator: "all",
8
+ value: [
9
+ {
10
+ field: "a",
11
+ operator: "equal",
12
+ value: 1,
13
+ },
14
+ ],
15
+ });
16
+ expect(filterFromContext({ a: { b: 1 } })).toEqual({
17
+ operator: "all",
18
+ value: [
19
+ {
20
+ field: ["a", "b"],
21
+ operator: "equal",
22
+ value: 1,
23
+ },
24
+ ],
25
+ });
26
+ expect(filterFromContext({ a: { b: 1 }, c: 2 })).toEqual({
27
+ operator: "all",
28
+ value: [
29
+ {
30
+ field: ["a", "b"],
31
+ operator: "equal",
32
+ value: 1,
33
+ },
34
+ {
35
+ field: "c",
36
+ operator: "equal",
37
+ value: 2,
38
+ },
39
+ ],
40
+ });
41
+ });
@@ -1,3 +1,5 @@
1
+ import { EMPTY_ARRAY } from "unchangeable";
2
+
1
3
  import type { Context, Filter } from "../types";
2
4
 
3
5
  const { entries } = Object;
@@ -7,10 +9,50 @@ export function filterFromContext<T extends object>(
7
9
  ): Filter<T> {
8
10
  return {
9
11
  operator: "all",
10
- value: entries(context).map(([field, value]) => ({
11
- field,
12
- operator: "equal",
13
- value,
14
- })) as Filter<T>[],
12
+ value: criteria(context) as Filter<T>[],
15
13
  };
16
14
  }
15
+
16
+ function criteria<T extends object>(
17
+ context: object,
18
+ path: readonly string[] = EMPTY_ARRAY,
19
+ ): readonly Filter<T>[] {
20
+ return entries(context).flatMap(([field, value]) => {
21
+ switch (typeof value) {
22
+ case "bigint":
23
+ case "string":
24
+ case "number":
25
+ case "boolean":
26
+ case "symbol":
27
+ case "undefined":
28
+ return [
29
+ {
30
+ field: path.length === 0 ? field : [...path, field],
31
+ operator: "equal",
32
+ value,
33
+ },
34
+ ];
35
+ case "object":
36
+ return criteria(value, [...path, field]);
37
+ default:
38
+ return EMPTY_ARRAY;
39
+ // Ignore
40
+ }
41
+ });
42
+ }
43
+
44
+ /*
45
+
46
+ {
47
+ filter: {
48
+ field: "a"
49
+ }
50
+ }
51
+
52
+ {
53
+ operator: "equal",
54
+ field: ["filter", "field"],
55
+ value: "a"
56
+ }
57
+
58
+ */
@@ -1,6 +1,6 @@
1
1
  import type { Field, Order } from "../types";
2
2
 
3
- const { isArray } = Array;
3
+ const isArray = Array.isArray as (value: any) => value is readonly any[];
4
4
 
5
5
  /**
6
6
  * Returns a normalized order, which is an object with the `field` and `descending` properties.
@@ -46,9 +46,9 @@ function normalizeAggregator<T extends object>(
46
46
  * @returns The result of the query.
47
47
  */
48
48
  export function queryItemList<T extends object, const Q extends Query<T>>(
49
- query: Q & { type: T[] },
49
+ query: Q & { type: readonly T[] },
50
50
  ): Result<T, Q> {
51
- const data = query.type as T[];
51
+ const data = query.type;
52
52
  switch (query.method) {
53
53
  case "read":
54
54
  case undefined: {
@@ -11,8 +11,8 @@ import { normalizeOrder } from "./normalizeOrder.js";
11
11
  * @returns A new sorted array.
12
12
  */
13
13
  export function sortItemList<T extends object>(
14
- orderList: Order<T>[] | undefined,
15
- value: T[],
14
+ orderList: readonly Order<T>[] | undefined,
15
+ value: readonly T[],
16
16
  ) {
17
17
  if (orderList === undefined || orderList.length === 0) {
18
18
  return value;
@@ -12,7 +12,7 @@ export type FilterGroup<T extends object> =
12
12
  /**
13
13
  * Filters to join.
14
14
  */
15
- value: Filter<T>[];
15
+ value: readonly Filter<T>[];
16
16
  }
17
17
  | {
18
18
  /**
@@ -22,5 +22,5 @@ export type FilterGroup<T extends object> =
22
22
  /**
23
23
  * Filters to join.
24
24
  */
25
- value?: Filter<T>[];
25
+ value?: readonly Filter<T>[];
26
26
  };
@@ -10,4 +10,4 @@ export type FilterStringIntersect<T extends object> = {
10
10
  field: FieldFiltered<T, string>;
11
11
  options?: Intl.CollatorOptions;
12
12
  locale?: Locale;
13
- } & Value<T, string[]>;
13
+ } & Value<T, readonly string[]>;
@@ -1 +1 @@
1
- export type Locale = string | string[];
1
+ export type Locale = string | readonly string[];
@@ -1 +1,4 @@
1
- export type Parameters = Record<string, string | string[] | number | number[]>;
1
+ export type Parameters = Record<
2
+ string,
3
+ string | readonly string[] | number | readonly number[]
4
+ >;
package/lib/types/Path.ts CHANGED
@@ -3,7 +3,7 @@ import type { Increment } from "./Increment";
3
3
  export type Path<T, D = 0> = D extends 4
4
4
  ? never
5
5
  : T extends Array<infer P>
6
- ? [number] | [number, ...Path<P, Increment<D>>]
6
+ ? readonly [number] | readonly [number, ...Path<P, Increment<D>>]
7
7
  : T extends object
8
8
  ? {
9
9
  [K in keyof T]-?: [K] | [K, ...Path<T[K], Increment<D>>];
@@ -2,14 +2,14 @@ import type { Increment } from "./Increment";
2
2
 
3
3
  export type PathFiltered<T, P, D = 0> = D extends 4
4
4
  ? never
5
- : T extends Array<infer I>
5
+ : T extends ReadonlyArray<infer I>
6
6
  ? I extends P
7
- ? [number]
8
- : [number, ...PathFiltered<I, P, Increment<D>>]
7
+ ? readonly [number]
8
+ : readonly [number, ...PathFiltered<I, P, Increment<D>>]
9
9
  : T extends object
10
10
  ? {
11
11
  [K in keyof T]-?: T[K] extends P
12
- ? [K]
13
- : [K, ...PathFiltered<T[K], P, Increment<D>>];
12
+ ? readonly [K]
13
+ : readonly [K, ...PathFiltered<T[K], P, Increment<D>>];
14
14
  }[keyof T]
15
15
  : never;
@@ -22,7 +22,7 @@ export type QueryAggregate<T extends object> = {
22
22
  /**
23
23
  * Order by which the items should be sorted.
24
24
  */
25
- order?: Order<T>[];
25
+ order?: readonly Order<T>[];
26
26
  /**
27
27
  * Offset of the first matching item.
28
28
  */
@@ -12,7 +12,7 @@ export type QueryCreateMultiple<T extends object> = {
12
12
  * Common item properties to use for identifying the context in which to create the items.
13
13
  */
14
14
  context?: Context<T>;
15
- value: Partial<T>[];
15
+ value: readonly Partial<T>[];
16
16
  /**
17
17
  * Query parameters.
18
18
  */
@@ -31,7 +31,7 @@ export type QueryRead<T extends object> = {
31
31
  /**
32
32
  * Order by which the items should be sorted.
33
33
  */
34
- order?: Order<T>[];
34
+ order?: readonly Order<T>[];
35
35
  /**
36
36
  * Query parameters.
37
37
  */
@@ -34,11 +34,11 @@ export type QueryReadMultiple<T extends object> = {
34
34
  /**
35
35
  * Order by which the items should be sorted.
36
36
  */
37
- order?: Order<T>[];
37
+ order?: readonly Order<T>[];
38
38
  /**
39
39
  * Groups items by specified fields.
40
40
  */
41
- group?: Group<T>[];
41
+ group?: readonly Group<T>[];
42
42
  /**
43
43
  * Query parameters.
44
44
  */
@@ -17,7 +17,7 @@ export type QueryUpdateMultiple<T extends object> = {
17
17
  /**
18
18
  * Partial property values to update.
19
19
  */
20
- value: Partial<T>[];
20
+ value: readonly Partial<T>[];
21
21
  filter?: Filter<T>;
22
22
  /**
23
23
  * Order by which the items should be sorted.
@@ -12,6 +12,7 @@ export type PickFields<
12
12
  : { readonly [K in keyof T]: T[K] };
13
13
 
14
14
  export type ResultRead<T extends object, Q extends Query<T>> = [Q] extends [
15
+ // FIXME: `keyof T` should be `Field<T>`
15
16
  { fields: (keyof T)[] },
16
17
  ]
17
18
  ? PickFields<T, Item<Q["fields"]>>
@@ -21,10 +22,10 @@ export type Result<T extends object, Q extends Query<T>> = [Q] extends [
21
22
  { method: "read" },
22
23
  ]
23
24
  ? [Q] extends [{ multiple: true }]
24
- ? ResultRead<T, Q>[]
25
+ ? readonly ResultRead<T, Q>[]
25
26
  : ResultRead<T, Q>
26
27
  : [Q] extends [{ method: "aggregate" }]
27
28
  ? number
28
29
  : [Q] extends [{ multiple: true }]
29
- ? ResultRead<T, Q>[]
30
+ ? readonly ResultRead<T, Q>[]
30
31
  : ResultRead<T, Q>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "quetch",
3
- "version": "0.16.3",
3
+ "version": "0.18.0",
4
4
  "type": "module",
5
5
  "main": "./dist/main.js",
6
6
  "exports": {