quetch 0.1.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 (125) hide show
  1. package/README.md +29 -0
  2. package/dist/errors/QueryError.d.ts +5 -0
  3. package/dist/errors/QueryError.js +23 -0
  4. package/dist/errors/QueryError.js.map +1 -0
  5. package/dist/errors/RequestError.d.ts +11 -0
  6. package/dist/errors/RequestError.js +33 -0
  7. package/dist/errors/RequestError.js.map +1 -0
  8. package/dist/errors.d.ts +1 -0
  9. package/dist/errors.js +3 -0
  10. package/dist/errors.js.map +1 -0
  11. package/dist/main.d.ts +3 -0
  12. package/dist/main.js +3 -0
  13. package/dist/main.js.map +1 -0
  14. package/dist/middlewares/aggregate.d.ts +19 -0
  15. package/dist/middlewares/aggregate.js +86 -0
  16. package/dist/middlewares/aggregate.js.map +1 -0
  17. package/dist/middlewares/branch.d.ts +18 -0
  18. package/dist/middlewares/branch.js +21 -0
  19. package/dist/middlewares/branch.js.map +1 -0
  20. package/dist/middlewares/cache.d.ts +37 -0
  21. package/dist/middlewares/cache.js +40 -0
  22. package/dist/middlewares/cache.js.map +1 -0
  23. package/dist/middlewares/combine.d.ts +318 -0
  24. package/dist/middlewares/combine.js +20 -0
  25. package/dist/middlewares/combine.js.map +1 -0
  26. package/dist/middlewares/concurrent.d.ts +2 -0
  27. package/dist/middlewares/concurrent.js +20 -0
  28. package/dist/middlewares/concurrent.js.map +1 -0
  29. package/dist/middlewares/fetch.d.ts +2 -0
  30. package/dist/middlewares/fetch.js +20 -0
  31. package/dist/middlewares/fetch.js.map +1 -0
  32. package/dist/middlewares/fetchExternal.d.ts +8 -0
  33. package/dist/middlewares/fetchExternal.js +29 -0
  34. package/dist/middlewares/fetchExternal.js.map +1 -0
  35. package/dist/middlewares/fetchLocal.d.ts +9 -0
  36. package/dist/middlewares/fetchLocal.js +10 -0
  37. package/dist/middlewares/fetchLocal.js.map +1 -0
  38. package/dist/middlewares/identity.d.ts +4 -0
  39. package/dist/middlewares/identity.js +8 -0
  40. package/dist/middlewares/identity.js.map +1 -0
  41. package/dist/middlewares/log.d.ts +8 -0
  42. package/dist/middlewares/log.js +30 -0
  43. package/dist/middlewares/log.js.map +1 -0
  44. package/dist/middlewares/logQuery.d.ts +2 -0
  45. package/dist/middlewares/logQuery.js +25 -0
  46. package/dist/middlewares/logQuery.js.map +1 -0
  47. package/dist/middlewares/retry.d.ts +14 -0
  48. package/dist/middlewares/retry.js +38 -0
  49. package/dist/middlewares/retry.js.map +1 -0
  50. package/dist/middlewares.d.ts +9 -0
  51. package/dist/middlewares.js +11 -0
  52. package/dist/middlewares.js.map +1 -0
  53. package/dist/tools/add.d.ts +8 -0
  54. package/dist/tools/add.js +11 -0
  55. package/dist/tools/add.js.map +1 -0
  56. package/dist/tools/add.test.d.ts +1 -0
  57. package/dist/tools/add.test.js +6 -0
  58. package/dist/tools/add.test.js.map +1 -0
  59. package/dist/tools/defineCheckQuery.d.ts +17 -0
  60. package/dist/tools/defineCheckQuery.js +7 -0
  61. package/dist/tools/defineCheckQuery.js.map +1 -0
  62. package/dist/tools/defineCustomFetch.d.ts +19 -0
  63. package/dist/tools/defineCustomFetch.js +8 -0
  64. package/dist/tools/defineCustomFetch.js.map +1 -0
  65. package/dist/tools/filterFromContext.d.ts +2 -0
  66. package/dist/tools/filterFromContext.js +12 -0
  67. package/dist/tools/filterFromContext.js.map +1 -0
  68. package/dist/tools/filterItem.d.ts +9 -0
  69. package/dist/tools/filterItem.js +101 -0
  70. package/dist/tools/filterItem.js.map +1 -0
  71. package/dist/tools/filterItem.test.d.ts +1 -0
  72. package/dist/tools/filterItem.test.js +86 -0
  73. package/dist/tools/filterItem.test.js.map +1 -0
  74. package/dist/tools/impasse.d.ts +2 -0
  75. package/dist/tools/impasse.js +2 -0
  76. package/dist/tools/impasse.js.map +1 -0
  77. package/dist/tools/normalizeOrder.d.ts +5 -0
  78. package/dist/tools/normalizeOrder.js +10 -0
  79. package/dist/tools/normalizeOrder.js.map +1 -0
  80. package/dist/tools/queryItemList.d.ts +4 -0
  81. package/dist/tools/queryItemList.js +77 -0
  82. package/dist/tools/queryItemList.js.map +1 -0
  83. package/dist/tools/queryItemList.test.d.ts +1 -0
  84. package/dist/tools/queryItemList.test.js +141 -0
  85. package/dist/tools/queryItemList.test.js.map +1 -0
  86. package/dist/tools/sortItemList.d.ts +9 -0
  87. package/dist/tools/sortItemList.js +28 -0
  88. package/dist/tools/sortItemList.js.map +1 -0
  89. package/dist/tools/sortItemList.test.d.ts +1 -0
  90. package/dist/tools/sortItemList.test.js +47 -0
  91. package/dist/tools/sortItemList.test.js.map +1 -0
  92. package/dist/tools.d.ts +8 -0
  93. package/dist/tools.js +10 -0
  94. package/dist/tools.js.map +1 -0
  95. package/dist/types.d.ts +396 -0
  96. package/dist/types.js +2 -0
  97. package/dist/types.js.map +1 -0
  98. package/doc/README.md +1472 -0
  99. package/lib/errors/RequestError.ts +16 -0
  100. package/lib/errors.ts +2 -0
  101. package/lib/main.ts +4 -0
  102. package/lib/middlewares/aggregate.ts +113 -0
  103. package/lib/middlewares/branch.ts +27 -0
  104. package/lib/middlewares/cache.ts +89 -0
  105. package/lib/middlewares/combine.ts +959 -0
  106. package/lib/middlewares/fetchExternal.ts +38 -0
  107. package/lib/middlewares/fetchLocal.ts +14 -0
  108. package/lib/middlewares/identity.ts +20 -0
  109. package/lib/middlewares/log.ts +31 -0
  110. package/lib/middlewares/retry.ts +45 -0
  111. package/lib/middlewares.ts +10 -0
  112. package/lib/tools/defineCheckQuery.ts +24 -0
  113. package/lib/tools/defineCustomFetch.ts +70 -0
  114. package/lib/tools/filterFromContext.ts +16 -0
  115. package/lib/tools/filterItem.test.ts +203 -0
  116. package/lib/tools/filterItem.ts +113 -0
  117. package/lib/tools/impasse.ts +3 -0
  118. package/lib/tools/normalizeOrder.ts +13 -0
  119. package/lib/tools/queryItemList.test.ts +169 -0
  120. package/lib/tools/queryItemList.ts +108 -0
  121. package/lib/tools/sortItemList.test.ts +63 -0
  122. package/lib/tools/sortItemList.ts +33 -0
  123. package/lib/tools.ts +9 -0
  124. package/lib/types.ts +554 -0
  125. package/package.json +72 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"middlewares.js","sourceRoot":"","sources":["../lib/middlewares.ts"],"names":[],"mappings":"AAAA,4DAA4D;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AACxC,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Returns the sum of the two provided numbers.
3
+ *
4
+ * @param a First number umber.
5
+ * @param b Other number.
6
+ * @returns The sum of both numbers.
7
+ */
8
+ export declare function add(a: number, b: number): number;
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Returns the sum of the two provided numbers.
3
+ *
4
+ * @param a First number umber.
5
+ * @param b Other number.
6
+ * @returns The sum of both numbers.
7
+ */
8
+ export function add(a, b) {
9
+ return a + b;
10
+ }
11
+ //# sourceMappingURL=add.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add.js","sourceRoot":"","sources":["../../lib/tools/add.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,UAAU,GAAG,CAAC,CAAS,EAAE,CAAS;IACtC,OAAO,CAAC,GAAG,CAAC,CAAC;AACf,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,6 @@
1
+ import { expect, test } from "vitest";
2
+ import { add } from "./add";
3
+ test("adds two numbers", () => {
4
+ expect(add(1, 2)).toBe(3);
5
+ });
6
+ //# sourceMappingURL=add.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add.test.js","sourceRoot":"","sources":["../../lib/tools/add.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAEtC,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAE5B,IAAI,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAC5B,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC5B,CAAC,CAAC,CAAC"}
@@ -0,0 +1,17 @@
1
+ import type { CustomFieldMap, Query } from "../types";
2
+ export declare function defineCheckQuery<Entities extends Record<string, object>>(): {
3
+ <E extends object, C extends CustomFieldMap<E>, const Q extends Query<E, C>>(query: Q & {
4
+ type: E[];
5
+ customFields?: C | undefined;
6
+ }): Q & {
7
+ type: E[];
8
+ customFields?: C | undefined;
9
+ };
10
+ <T extends keyof Entities, E_1 extends Entities[T], C_1 extends CustomFieldMap<E_1>, const Q_1 extends Query<E_1, C_1>>(query: Q_1 & {
11
+ type: T;
12
+ customFields?: C_1 | undefined;
13
+ }): Q_1 & {
14
+ type: T;
15
+ customFields?: C_1 | undefined;
16
+ };
17
+ };
@@ -0,0 +1,7 @@
1
+ export function defineCheckQuery() {
2
+ function checkQuery(query) {
3
+ return query;
4
+ }
5
+ return checkQuery;
6
+ }
7
+ //# sourceMappingURL=defineCheckQuery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defineCheckQuery.js","sourceRoot":"","sources":["../../lib/tools/defineCheckQuery.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,gBAAgB;IAY9B,SAAS,UAAU,CAKjB,KAA8C;QAC9C,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC"}
@@ -0,0 +1,19 @@
1
+ import type { AnyQuery, CustomFieldMap, EntityItem, Handler, Query } from "../types";
2
+ export declare function defineCustomFetch<M extends Record<string, object>>(handler: Handler<AnyQuery, any, never, never>): {
3
+ <E extends object, C extends CustomFieldMap<E>, const Q extends Query<E, C>>(input: Q & {
4
+ type: E[];
5
+ customFields?: C | undefined;
6
+ }): Promise<Q["method"] extends "get" ? Q extends {
7
+ multiple: true;
8
+ } ? EntityItem<E, C, Q>[] : EntityItem<E, C, Q> : Q["method"] extends "aggregate" ? number : Q extends {
9
+ multiple: true;
10
+ } ? EntityItem<E, C, Q>[] : EntityItem<E, C, Q>>;
11
+ <T extends keyof M, E_1 extends M[T], C_1 extends CustomFieldMap<E_1>, const Q_1 extends Query<E_1, C_1>>(input: Q_1 & {
12
+ type: T;
13
+ customFields?: C_1 | undefined;
14
+ }): Promise<Q_1["method"] extends "get" ? Q_1 extends {
15
+ multiple: true;
16
+ } ? EntityItem<E_1, C_1, Q_1>[] : EntityItem<E_1, C_1, Q_1> : Q_1["method"] extends "aggregate" ? number : Q_1 extends {
17
+ multiple: true;
18
+ } ? EntityItem<E_1, C_1, Q_1>[] : EntityItem<E_1, C_1, Q_1>>;
19
+ };
@@ -0,0 +1,8 @@
1
+ import { impasse } from "./impasse";
2
+ export function defineCustomFetch(handler) {
3
+ async function customFetch(input) {
4
+ return await handler(input, impasse);
5
+ }
6
+ return customFetch;
7
+ }
8
+ //# sourceMappingURL=defineCustomFetch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defineCustomFetch.js","sourceRoot":"","sources":["../../lib/tools/defineCustomFetch.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,MAAM,UAAU,iBAAiB,CAC/B,OAA6C;IAqC7C,KAAK,UAAU,WAAW,CAMxB,KAA8C;QAY9C,OAAO,MAAM,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACvC,CAAC;IACD,OAAO,WAAW,CAAC;AACrB,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { Context, Filter } from "../types";
2
+ export declare function filterFromContext<T extends object>(context: Context<T>): Filter<T>;
@@ -0,0 +1,12 @@
1
+ const { entries } = Object;
2
+ export function filterFromContext(context) {
3
+ return {
4
+ operator: "all",
5
+ value: entries(context).map(([field, value]) => ({
6
+ operator: "equal",
7
+ field,
8
+ value,
9
+ })),
10
+ };
11
+ }
12
+ //# sourceMappingURL=filterFromContext.js.map
@@ -0,0 +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,QAAQ,EAAE,OAAO;YACjB,KAAK;YACL,KAAK;SACN,CAAC,CAAgB;KACnB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { Filter } from "../types";
2
+ /**
3
+ * Checks wether the provided `value` matches the `filter` or not.
4
+ *
5
+ * @param filter The filter to apply.
6
+ * @param value The value to check.
7
+ * @returns `true` if the `value` matches the `filter` and `false` otherwise.
8
+ */
9
+ export declare function filterItem<T extends object>(filter: Filter<T> | undefined, value: T | undefined): boolean;
@@ -0,0 +1,101 @@
1
+ const { isArray } = Array;
2
+ /**
3
+ * Checks wether the provided `value` matches the `filter` or not.
4
+ *
5
+ * @param filter The filter to apply.
6
+ * @param value The value to check.
7
+ * @returns `true` if the `value` matches the `filter` and `false` otherwise.
8
+ */
9
+ export function filterItem(filter, value) {
10
+ if (value === undefined) {
11
+ return false;
12
+ }
13
+ if (filter === undefined) {
14
+ return true;
15
+ }
16
+ switch (filter.operator) {
17
+ case "all":
18
+ return filter.value.every((filter) => filterItem(filter, value));
19
+ case "any": {
20
+ if (filter.value === undefined || filter.value.length === 0) {
21
+ return true;
22
+ }
23
+ return filter.value.some((filter) => filterItem(filter, value));
24
+ }
25
+ case "none": {
26
+ if (filter.value === undefined || filter.value.length === 0) {
27
+ return false;
28
+ }
29
+ return filter.value.every((filter) => !filterItem(filter, value));
30
+ }
31
+ case "exist":
32
+ // TODO: Handle path
33
+ return filter.field in value;
34
+ case "equal": {
35
+ if (isArray(filter.value)) {
36
+ const item = value[filter.field];
37
+ if (!isArray(item)) {
38
+ return false;
39
+ }
40
+ if (filter.value.length !== item.length) {
41
+ return false;
42
+ }
43
+ return filter.value.every((value) => item.includes(value));
44
+ }
45
+ return value[filter.field] === filter.value;
46
+ }
47
+ case "notEqual":
48
+ return value[filter.field] !== filter.value;
49
+ case "startWith":
50
+ return (value[filter.field]?.startsWith(filter.value) ??
51
+ false);
52
+ case "endWith":
53
+ return (value[filter.field]?.endsWith(filter.value) ??
54
+ false);
55
+ case "include": {
56
+ const item = value[filter.field];
57
+ if (item === undefined) {
58
+ return false;
59
+ }
60
+ if (isArray(filter.value)) {
61
+ if (!isArray(item)) {
62
+ return false;
63
+ }
64
+ return filter.value.every((value) => item.includes(value));
65
+ }
66
+ return item.includes?.(filter.value) ?? false;
67
+ }
68
+ case "greaterThan":
69
+ return value[filter.field] > filter.value;
70
+ case "greaterThanOrEqual":
71
+ return value[filter.field] >= filter.value;
72
+ case "lowerThan":
73
+ return value[filter.field] < filter.value;
74
+ case "lowerThanOrEqual":
75
+ return value[filter.field] <= filter.value;
76
+ case "match": {
77
+ const item = value[filter.field];
78
+ if (item === undefined) {
79
+ return false;
80
+ }
81
+ if (filter.regularExpression === undefined) {
82
+ const { options = {} } = filter;
83
+ filter.regularExpression = new RegExp(filter.value, `${options.ignoreCase ? "i" : ""}${options.dotAll ? "s" : ""}`);
84
+ }
85
+ return filter.regularExpression.test(item);
86
+ }
87
+ case "intersect": {
88
+ const item = value[filter.field];
89
+ if (item === undefined) {
90
+ return false;
91
+ }
92
+ if (isArray(item)) {
93
+ return filter.value.some((value) => item?.includes(value));
94
+ }
95
+ return filter.value.includes(item);
96
+ }
97
+ default:
98
+ throw new Error(`Unknown filter operator '${filter.operator}'`);
99
+ }
100
+ }
101
+ //# sourceMappingURL=filterItem.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filterItem.js","sourceRoot":"","sources":["../../lib/tools/filterItem.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,86 @@
1
+ import { expect, test } from "vitest";
2
+ import { filterItem } from "./filterItem";
3
+ test("tests filter lists", () => {
4
+ expect(filterItem({
5
+ operator: "all",
6
+ value: [
7
+ { operator: "equal", field: "a", value: "foo" },
8
+ { operator: "equal", field: "b", value: "bar" },
9
+ ],
10
+ }, { a: "foo", b: "bar" })).toBeTruthy();
11
+ expect(filterItem({
12
+ operator: "all",
13
+ value: [
14
+ { operator: "equal", field: "a", value: "foo" },
15
+ { operator: "equal", field: "b", value: "baz" },
16
+ ],
17
+ }, { a: "foo", b: "bar" })).toBeFalsy();
18
+ expect(filterItem({
19
+ operator: "all",
20
+ value: [],
21
+ }, { a: "foo", b: "bar" })).toBeTruthy();
22
+ expect(filterItem({
23
+ operator: "any",
24
+ }, { a: "foo", b: "bar" })).toBeTruthy();
25
+ expect(filterItem({
26
+ operator: "none",
27
+ }, { a: "foo", b: "bar" })).toBeFalsy();
28
+ expect(filterItem({
29
+ operator: "any",
30
+ value: [
31
+ { operator: "equal", field: "a", value: "foo" },
32
+ { operator: "equal", field: "b", value: "baz" },
33
+ ],
34
+ }, { a: "foo", b: "bar" })).toBeTruthy();
35
+ expect(filterItem({
36
+ operator: "none",
37
+ value: [
38
+ { operator: "equal", field: "a", value: "a" },
39
+ { operator: "equal", field: "b", value: "b" },
40
+ ],
41
+ }, { a: "foo", b: "bar" })).toBeTruthy();
42
+ expect(filterItem({
43
+ operator: "none",
44
+ value: [
45
+ { operator: "equal", field: "a", value: "a" },
46
+ { operator: "equal", field: "b", value: "b" },
47
+ ],
48
+ }, { a: "foo", b: "bar" })).toBeTruthy();
49
+ });
50
+ test("tests filter on string values", () => {
51
+ expect(filterItem({ operator: "equal", field: "a", value: "foo" }, { a: "foo" })).toBeTruthy();
52
+ expect(filterItem({ operator: "equal", field: "a", value: "bar" }, { a: "foo" })).toBeFalsy();
53
+ expect(filterItem({ operator: "notEqual", field: "a", value: "bar" }, { a: "foo" })).toBeTruthy();
54
+ expect(filterItem({ operator: "include", field: "a", value: "bar" }, { a: "foobar" })).toBeTruthy();
55
+ expect(filterItem({ operator: "intersect", field: "a", value: ["foo", "bar", "foobar"] }, { a: "foobar" })).toBeTruthy();
56
+ expect(filterItem({ operator: "intersect", field: "a", value: ["foo", "bar"] }, { a: "foobar" })).toBeFalsy();
57
+ expect(filterItem({
58
+ operator: "match",
59
+ field: "a",
60
+ value: "^FOO",
61
+ options: { ignoreCase: true },
62
+ }, { a: "foobar" })).toBeTruthy();
63
+ expect(filterItem({
64
+ operator: "match",
65
+ field: "a",
66
+ value: "FOO$",
67
+ options: { ignoreCase: true },
68
+ }, { a: "foobar" })).toBeFalsy();
69
+ });
70
+ test("tests filter on number values", () => {
71
+ expect(filterItem({ operator: "equal", field: "a", value: 1 }, { a: 1 })).toBeTruthy();
72
+ expect(filterItem({ operator: "notEqual", field: "a", value: 2 }, { a: 1 })).toBeTruthy();
73
+ expect(filterItem({ operator: "greaterThan", field: "a", value: 0 }, { a: 1 })).toBeTruthy();
74
+ expect(filterItem({ operator: "greaterThanOrEqual", field: "a", value: 1 }, { a: 1 })).toBeTruthy();
75
+ expect(filterItem({ operator: "lowerThan", field: "a", value: 2 }, { a: 1 })).toBeTruthy();
76
+ expect(filterItem({ operator: "lowerThanOrEqual", field: "a", value: 1 }, { a: 1 })).toBeTruthy();
77
+ });
78
+ test("tests filter on array values", () => {
79
+ expect(filterItem({ operator: "equal", field: "a", value: [2, 1] }, { a: [1, 2] })).toBeTruthy();
80
+ expect(filterItem({ operator: "equal", field: "a", value: [2] }, { a: [1, 2] })).toBeFalsy();
81
+ expect(filterItem({ operator: "include", field: "a", value: [1] }, { a: [1, 2] })).toBeTruthy();
82
+ expect(filterItem({ operator: "include", field: "a", value: [2, 3] }, { a: [1, 2] })).toBeFalsy();
83
+ expect(filterItem({ operator: "intersect", field: "a", value: [2, 3] }, { a: [1, 2] })).toBeTruthy();
84
+ expect(filterItem({ operator: "intersect", field: "a", value: [3, 4] }, { a: [1, 2] })).toBeFalsy();
85
+ });
86
+ //# sourceMappingURL=filterItem.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filterItem.test.js","sourceRoot":"","sources":["../../lib/tools/filterItem.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { NextHandler } from "../types";
2
+ export declare const impasse: NextHandler<never, never>;
@@ -0,0 +1,2 @@
1
+ export const impasse = undefined;
2
+ //# sourceMappingURL=impasse.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"impasse.js","sourceRoot":"","sources":["../../lib/tools/impasse.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,OAAO,GAAG,SAAiD,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { Order } from "../types";
2
+ export declare function normalizeOrder<T extends object>(order: Order<T>): {
3
+ field: keyof T;
4
+ descending?: boolean;
5
+ };
@@ -0,0 +1,10 @@
1
+ export function normalizeOrder(order) {
2
+ if (typeof order === "object") {
3
+ return order;
4
+ }
5
+ return {
6
+ field: order,
7
+ descending: false,
8
+ };
9
+ }
10
+ //# sourceMappingURL=normalizeOrder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalizeOrder.js","sourceRoot":"","sources":["../../lib/tools/normalizeOrder.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,cAAc,CAC5B,KAAe;IAEf,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;QAC7B,OAAO,KAAK,CAAC;KACd;IACD,OAAO;QACL,KAAK,EAAE,KAAK;QACZ,UAAU,EAAE,KAAK;KAClB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { CustomFieldMap, Query } from "../types";
2
+ export declare function queryItemList<T extends object, C extends CustomFieldMap<T>>(query: Query<T, C> & {
3
+ type: T[];
4
+ }): number | T | T[];
@@ -0,0 +1,77 @@
1
+ import { RequestError } from "../errors";
2
+ import { filterFromContext } from "./filterFromContext";
3
+ import { filterItem } from "./filterItem";
4
+ import { sortItemList } from "./sortItemList";
5
+ function mergeContextAndFilter(context, filter) {
6
+ if (context === undefined) {
7
+ return filter ?? { operator: "any" };
8
+ }
9
+ if (filter === undefined) {
10
+ return filterFromContext(context);
11
+ }
12
+ return {
13
+ operator: "all",
14
+ value: [filterFromContext(context), filter],
15
+ };
16
+ }
17
+ function normalizeAggregator(aggregator) {
18
+ if (aggregator === "length") {
19
+ return aggregator;
20
+ }
21
+ return aggregator.operator;
22
+ }
23
+ export function queryItemList(query) {
24
+ const data = query.type;
25
+ switch (query.method) {
26
+ case "get":
27
+ case undefined: {
28
+ const { filter, context } = query;
29
+ if (query.multiple) {
30
+ const { offset = 0, limit = Infinity, orderBy } = query;
31
+ // Filter
32
+ let result = data;
33
+ if (context !== undefined || filter !== undefined) {
34
+ const normalizedFilter = mergeContextAndFilter(context, filter);
35
+ result = data.filter((item) => filterItem(normalizedFilter, item));
36
+ }
37
+ // Sort
38
+ result = sortItemList(orderBy, result === data ? [...data] : result);
39
+ // Slice
40
+ if (offset !== 0 || limit !== Infinity) {
41
+ result = result.slice(offset, offset + limit);
42
+ }
43
+ return result;
44
+ }
45
+ const normalizedFilter = mergeContextAndFilter(context, filter);
46
+ const result = data.find((item) => filterItem(normalizedFilter, item));
47
+ if (result === undefined) {
48
+ throw new RequestError("Not found", 404, query);
49
+ }
50
+ return result;
51
+ }
52
+ case "aggregate": {
53
+ const { context, filter, aggregator } = query;
54
+ switch (normalizeAggregator(aggregator)) {
55
+ case "length": {
56
+ if (filter === undefined && context === undefined) {
57
+ return data.length;
58
+ }
59
+ const normalizedFilter = mergeContextAndFilter(context, filter);
60
+ return data.reduce((result, item) => {
61
+ if (filterItem(normalizedFilter, item)) {
62
+ return result + 1;
63
+ }
64
+ return result;
65
+ }, 0);
66
+ }
67
+ default: {
68
+ throw new Error("Not implemented");
69
+ }
70
+ }
71
+ }
72
+ default: {
73
+ throw new Error(`Unknown query method '${query.method}'`);
74
+ }
75
+ }
76
+ }
77
+ //# sourceMappingURL=queryItemList.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queryItemList.js","sourceRoot":"","sources":["../../lib/tools/queryItemList.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,141 @@
1
+ import { expect, test } from "vitest";
2
+ import { queryItemList } from "./queryItemList";
3
+ test("queries a single item", () => {
4
+ expect(queryItemList({
5
+ type: [{ a: 1 }, { a: 2 }, { a: 3 }],
6
+ })).toEqual({ a: 1 });
7
+ expect(() => queryItemList({
8
+ type: [{ a: 1 }, { a: 2 }, { a: 3 }],
9
+ context: {
10
+ a: 4,
11
+ },
12
+ })).toThrow("Not found");
13
+ expect(queryItemList({
14
+ type: [{ a: 1 }, { a: 2 }, { a: 3 }],
15
+ filter: {
16
+ field: "a",
17
+ operator: "greaterThan",
18
+ value: 1,
19
+ },
20
+ })).toEqual({ a: 2 });
21
+ expect(() => queryItemList({
22
+ type: [{ a: 1 }, { a: 2 }, { a: 3 }],
23
+ filter: {
24
+ field: "a",
25
+ operator: "greaterThanOrEqual",
26
+ value: 4,
27
+ },
28
+ })).toThrow("Not found");
29
+ });
30
+ test("queries lists of items", () => {
31
+ expect(queryItemList({
32
+ type: [{ a: 1 }, { a: 2 }, { a: 3 }],
33
+ multiple: true,
34
+ })).toEqual([{ a: 1 }, { a: 2 }, { a: 3 }]);
35
+ expect(queryItemList({
36
+ type: [{ a: 1 }, { a: 2 }, { a: 3 }],
37
+ multiple: true,
38
+ filter: {
39
+ field: "a",
40
+ operator: "greaterThan",
41
+ value: 1,
42
+ },
43
+ })).toEqual([{ a: 2 }, { a: 3 }]);
44
+ expect(queryItemList({
45
+ type: [
46
+ { a: 1, c: "a" },
47
+ { a: 2, c: "a" },
48
+ { a: 3, c: "b" },
49
+ ],
50
+ method: "get",
51
+ multiple: true,
52
+ context: {
53
+ c: "a",
54
+ },
55
+ filter: {
56
+ field: "a",
57
+ operator: "greaterThan",
58
+ value: 1,
59
+ },
60
+ })).toEqual([{ a: 2, c: "a" }]);
61
+ expect(queryItemList({
62
+ type: [{ a: 1 }, { a: 2 }, { a: 3 }],
63
+ multiple: true,
64
+ filter: {
65
+ field: "a",
66
+ operator: "greaterThanOrEqual",
67
+ value: 4,
68
+ },
69
+ })).toEqual([]);
70
+ });
71
+ test("sorts items", () => {
72
+ expect(queryItemList({
73
+ type: [
74
+ { a: 1, c: "a" },
75
+ { a: 2, c: "a" },
76
+ { a: 3, c: "b" },
77
+ { a: 2, c: "b" },
78
+ { a: 1, c: "b" },
79
+ ],
80
+ multiple: true,
81
+ orderBy: ["a", "c"],
82
+ })).toEqual([
83
+ { a: 1, c: "a" },
84
+ { a: 1, c: "b" },
85
+ { a: 2, c: "a" },
86
+ { a: 2, c: "b" },
87
+ { a: 3, c: "b" },
88
+ ]);
89
+ expect(queryItemList({
90
+ type: [
91
+ { a: 1, c: "a" },
92
+ { a: 2, c: "a" },
93
+ { a: 3, c: "b" },
94
+ { a: 2, c: "b" },
95
+ { a: 1, c: "b" },
96
+ ],
97
+ multiple: true,
98
+ orderBy: [
99
+ { field: "a", descending: true },
100
+ { field: "c", descending: true },
101
+ ],
102
+ })).toEqual([
103
+ { a: 3, c: "b" },
104
+ { a: 2, c: "b" },
105
+ { a: 2, c: "a" },
106
+ { a: 1, c: "b" },
107
+ { a: 1, c: "a" },
108
+ ]);
109
+ });
110
+ test("aggregates items", () => {
111
+ expect(queryItemList({
112
+ type: [
113
+ { a: 1, c: "a" },
114
+ { a: 2, c: "a" },
115
+ { a: 3, c: "b" },
116
+ ],
117
+ method: "aggregate",
118
+ aggregator: "length",
119
+ context: {
120
+ c: "a",
121
+ },
122
+ })).toBe(2);
123
+ expect(queryItemList({
124
+ type: [
125
+ { a: 1, c: "a" },
126
+ { a: 2, c: "a" },
127
+ { a: 3, c: "b" },
128
+ ],
129
+ method: "aggregate",
130
+ aggregator: "length",
131
+ context: {
132
+ c: "a",
133
+ },
134
+ filter: {
135
+ field: "a",
136
+ operator: "greaterThan",
137
+ value: 1,
138
+ },
139
+ })).toBe(1);
140
+ });
141
+ //# sourceMappingURL=queryItemList.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queryItemList.test.js","sourceRoot":"","sources":["../../lib/tools/queryItemList.test.ts"],"names":[],"mappings":"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"}