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,9 @@
1
+ import type { Order } from "../types";
2
+ /**
3
+ * Sorts provided `value` array *in place* according to the `orderList`.
4
+ *
5
+ * @param orderList The order to use for sorting.
6
+ * @param value The array to sort.
7
+ * @returns The same array sorted in place.
8
+ */
9
+ export declare function sortItemList<T extends object>(orderList: Order<T>[] | undefined, value: T[]): T[];
@@ -0,0 +1,28 @@
1
+ import { normalizeOrder } from "./normalizeOrder";
2
+ /**
3
+ * Sorts provided `value` array *in place* according to the `orderList`.
4
+ *
5
+ * @param orderList The order to use for sorting.
6
+ * @param value The array to sort.
7
+ * @returns The same array sorted in place.
8
+ */
9
+ export function sortItemList(orderList, value) {
10
+ if (orderList === undefined || orderList.length === 0) {
11
+ return value;
12
+ }
13
+ const normalizedOrderBy = orderList.map(normalizeOrder);
14
+ return value.sort((a, b) => {
15
+ for (let index = 0; index < normalizedOrderBy.length; index++) {
16
+ const { field, descending } = normalizedOrderBy[index];
17
+ if (a[field] === b[field]) {
18
+ continue;
19
+ }
20
+ if (a[field] > b[field]) {
21
+ return descending ? -1 : 1;
22
+ }
23
+ return descending ? 1 : -1;
24
+ }
25
+ return 0;
26
+ });
27
+ }
28
+ //# sourceMappingURL=sortItemList.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sortItemList.js","sourceRoot":"","sources":["../../lib/tools/sortItemList.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAC1B,SAAiC,EACjC,KAAU;IAEV,IAAI,SAAS,KAAK,SAAS,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;QACrD,OAAO,KAAK,CAAC;KACd;IACD,MAAM,iBAAiB,GAAG,SAAS,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IACxD,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACzB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,iBAAiB,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;YAC7D,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;YACvD,IAAI,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,EAAE;gBACzB,SAAS;aACV;YACD,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE;gBACvB,OAAO,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;aAC5B;YACD,OAAO,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;SAC5B;QACD,OAAO,CAAC,CAAC;IACX,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,47 @@
1
+ import { expect, test } from "vitest";
2
+ import { sortItemList } from "./sortItemList";
3
+ test("sorts items", () => {
4
+ expect(sortItemList(["a", "c"], [
5
+ { a: 1, c: "a" },
6
+ { a: 2, c: "a" },
7
+ { a: 3, c: "b" },
8
+ { a: 2, c: "b" },
9
+ { a: 1, c: "b" },
10
+ ])).toEqual([
11
+ { a: 1, c: "a" },
12
+ { a: 1, c: "b" },
13
+ { a: 2, c: "a" },
14
+ { a: 2, c: "b" },
15
+ { a: 3, c: "b" },
16
+ ]);
17
+ expect(sortItemList([
18
+ { field: "a", descending: true },
19
+ { field: "c", descending: true },
20
+ ], [
21
+ { a: 1, c: "a" },
22
+ { a: 2, c: "a" },
23
+ { a: 3, c: "b" },
24
+ { a: 2, c: "b" },
25
+ { a: 1, c: "b" },
26
+ ])).toEqual([
27
+ { a: 3, c: "b" },
28
+ { a: 2, c: "b" },
29
+ { a: 2, c: "a" },
30
+ { a: 1, c: "b" },
31
+ { a: 1, c: "a" },
32
+ ]);
33
+ expect(sortItemList(["a", { field: "c", descending: true }], [
34
+ { a: 1, c: "a" },
35
+ { a: 2, c: "a" },
36
+ { a: 3, c: "b" },
37
+ { a: 2, c: "b" },
38
+ { a: 1, c: "b" },
39
+ ])).toEqual([
40
+ { a: 1, c: "b" },
41
+ { a: 1, c: "a" },
42
+ { a: 2, c: "b" },
43
+ { a: 2, c: "a" },
44
+ { a: 3, c: "b" },
45
+ ]);
46
+ });
47
+ //# sourceMappingURL=sortItemList.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sortItemList.test.js","sourceRoot":"","sources":["../../lib/tools/sortItemList.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export { defineCheckQuery } from "./tools/defineCheckQuery";
2
+ export { defineCustomFetch } from "./tools/defineCustomFetch";
3
+ export { filterFromContext } from "./tools/filterFromContext";
4
+ export { filterItem } from "./tools/filterItem";
5
+ export { impasse } from "./tools/impasse";
6
+ export { normalizeOrder } from "./tools/normalizeOrder";
7
+ export { queryItemList } from "./tools/queryItemList";
8
+ export { sortItemList } from "./tools/sortItemList";
package/dist/tools.js ADDED
@@ -0,0 +1,10 @@
1
+ // File automatically generated by `vite-plugin-module-list`
2
+ export { defineCheckQuery } from "./tools/defineCheckQuery";
3
+ export { defineCustomFetch } from "./tools/defineCustomFetch";
4
+ export { filterFromContext } from "./tools/filterFromContext";
5
+ export { filterItem } from "./tools/filterItem";
6
+ export { impasse } from "./tools/impasse";
7
+ export { normalizeOrder } from "./tools/normalizeOrder";
8
+ export { queryItemList } from "./tools/queryItemList";
9
+ export { sortItemList } from "./tools/sortItemList";
10
+ //# sourceMappingURL=tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../lib/tools.ts"],"names":[],"mappings":"AAAA,4DAA4D;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,396 @@
1
+ export type Any = boolean | string | number | object | symbol | null | undefined | Array<any> | ((...args: any[]) => any);
2
+ export type Store<T = any> = {
3
+ has(key: string): Promise<boolean>;
4
+ get(key: string): Promise<T>;
5
+ set(key: string, value: T): Promise<void>;
6
+ delete(key: string): Promise<void>;
7
+ };
8
+ /**
9
+ * Handles an `input` query and returns an `output` promise, eventually using the `next` handler.
10
+ */
11
+ export type Handler<I, O, NI, No> = (input: I, next: NextHandler<NI, No>) => Promise<O>;
12
+ /**
13
+ * Handles an `input` query and returns an `output` promise.
14
+ */
15
+ export type NextHandler<I, R> = (input: I) => Promise<R>;
16
+ /**
17
+ * Returns the inferred item type of an array, or an alternative type if it is something else (e.g., `undefined`).
18
+ */
19
+ type ArrayItem<T, S> = T extends Array<infer I> ? I : T extends ReadonlyArray<infer I> ? I : S;
20
+ type Get<T extends object, K extends string, D> = T extends {
21
+ [key in K]: any;
22
+ } ? T[K] : D;
23
+ /**
24
+ * Entity type for a given query.
25
+ */
26
+ export type EntityItem<E extends object, C extends CustomFieldMap<E>, Q extends Query<E, C>> = Q extends {
27
+ customFields: CustomFieldMap<E>;
28
+ } ? {
29
+ readonly [K in ArrayItem<Get<Q, "fields", undefined>, keyof E | keyof Q["customFields"]>]: K extends keyof E ? E[K] : K extends keyof Q["customFields"] ? Q["customFields"][K] extends FieldFunctionCustom<E> ? ReturnType<Q["customFields"][K]["value"]> : Q["customFields"][K]["operator"] extends keyof FieldFunctionReturn ? FieldFunctionReturn[Q["customFields"][K]["operator"]] : never : never;
30
+ } : {
31
+ readonly [K in ArrayItem<Get<Q, "fields", undefined>, keyof E>]: K extends keyof E ? E[K] : never;
32
+ };
33
+ /**
34
+ * Query that fetches or mutates an entity.
35
+ */
36
+ export type Query<T extends object, C extends CustomFieldMap<T>> = QueryGet<T, C> | QueryGetMultiple<T, C> | QueryCreate<T> | QueryCreateMultiple<T> | QueryUpdate<T, C> | QueryUpdateMultiple<T, C> | QueryDelete<T> | QueryDeleteMultiple<T> | QueryAggregate<T>;
37
+ export type AnyQuery = Query<any, any>;
38
+ export type AnyQueryExternal = Omit<Query<any, any>, "type"> & {
39
+ type: string;
40
+ };
41
+ export type AnyQueryLocal = Omit<Query<any, any>, "type"> & {
42
+ type: object[];
43
+ };
44
+ export type Context<T extends object> = {
45
+ [K in keyof T]?: T[K];
46
+ };
47
+ export type QueryBase<T extends object> = {
48
+ type: string | T[];
49
+ /**
50
+ * Common item properties to use for identifying the item.
51
+ *
52
+ * @example
53
+ * ```typescript
54
+ * { context: { id: "000001" } }
55
+ * { context: { organisation: "World Company" } }
56
+ * ```
57
+ */
58
+ context?: Context<T>;
59
+ /**
60
+ * Abort signal to abort the request.
61
+ */
62
+ signal?: AbortSignal;
63
+ };
64
+ /**
65
+ * Available query methods.
66
+ */
67
+ export type QueryMethod = Exclude<Query<never, never>["method"], undefined>;
68
+ /**
69
+ * Injects the custom fields into the entity type.
70
+ */
71
+ type InjectCustomField<T extends object, C extends CustomFieldMap<T>> = {
72
+ readonly [K in keyof T | keyof C]: K extends keyof T ? T[K] : K extends keyof C ? C[K] extends FieldFunctionCustom<T> ? ReturnType<C[K]["value"]> : C[K]["operator"] extends keyof FieldFunctionReturn ? FieldFunctionReturn[C[K]["operator"]] : never : never;
73
+ };
74
+ /**
75
+ * Query for getting a single item.
76
+ */
77
+ export type QueryGet<T extends object, C extends CustomFieldMap<T>> = QueryBase<T> & {
78
+ method?: "get";
79
+ multiple?: false;
80
+ offset?: never;
81
+ orderBy?: never;
82
+ groupBy?: never;
83
+ } & ({
84
+ /**
85
+ * Item fields to pick. If omitted, all fields are picked.
86
+ */
87
+ fields?: readonly (keyof InjectCustomField<T, C>)[];
88
+ /**
89
+ * Filter for finding the item, if it cannot be found based on the `context`.
90
+ */
91
+ filter?: Filter<InjectCustomField<T, C>>;
92
+ /**
93
+ * Custom fields to add to each item, which can be used in the `filter`.
94
+ */
95
+ customFields: C;
96
+ } | {
97
+ /**
98
+ * Item fields to pick. If omitted, all fields are picked.
99
+ */
100
+ fields?: readonly (keyof T)[];
101
+ /**
102
+ * Filter for finding the item, if it cannot be found based on the `context`.
103
+ */
104
+ filter?: Filter<T>;
105
+ customFields?: never;
106
+ });
107
+ /**
108
+ * Query for getting a list of items.
109
+ */
110
+ export type QueryGetMultiple<T extends object, C extends CustomFieldMap<T>> = QueryBase<T> & {
111
+ method?: "get";
112
+ multiple: true;
113
+ /**
114
+ * Offset of the first matching item.
115
+ */
116
+ offset?: number;
117
+ /**
118
+ * Upper bound of the number of items to return.
119
+ */
120
+ limit?: number;
121
+ } & ({
122
+ /**
123
+ * Item fields to pick. If omitted, all fields are picked.
124
+ */
125
+ fields?: readonly (keyof InjectCustomField<T, C>)[];
126
+ /**
127
+ * Filter that picks the items.
128
+ */
129
+ filter?: Filter<InjectCustomField<T, C>>;
130
+ /**
131
+ * Custom fields to add to each item, which can be used in the `filter` and `groupBy`.
132
+ */
133
+ customFields: C;
134
+ /**
135
+ * Order by which the items should be sorted.
136
+ */
137
+ orderBy?: Order<InjectCustomField<T, C>>[];
138
+ /**
139
+ * Groups items by specified fields.
140
+ */
141
+ groupBy?: Group<InjectCustomField<T, C>>[];
142
+ } | {
143
+ /**
144
+ * Item fields to pick. If omitted, all fields are picked.
145
+ */
146
+ fields?: readonly (keyof T)[];
147
+ /**
148
+ * Filter that picks the items.
149
+ */
150
+ filter?: Filter<T>;
151
+ customFields?: never;
152
+ /**
153
+ * Order by which the items should be sorted.
154
+ */
155
+ orderBy?: Order<T>[];
156
+ /**
157
+ * Groups items by specified fields.
158
+ */
159
+ groupBy?: Group<T>[];
160
+ });
161
+ /**
162
+ * Query for creating an item.
163
+ */
164
+ export type QueryCreate<T extends object> = QueryBase<T> & {
165
+ method: "create";
166
+ value: Partial<T>;
167
+ };
168
+ /**
169
+ * Query for creating multiple items.
170
+ */
171
+ export type QueryCreateMultiple<T extends object> = QueryBase<T> & {
172
+ method: "create";
173
+ multiple: true;
174
+ value: Partial<T>[];
175
+ };
176
+ /**
177
+ * Query for updating an item.
178
+ */
179
+ export type QueryUpdate<T extends object, C extends CustomFieldMap<T>> = QueryBase<T> & {
180
+ method: "update";
181
+ value: Partial<T>;
182
+ /**
183
+ * Custom fields to add to each item, which can be used in the `filter`.
184
+ */
185
+ customFields?: C;
186
+ /**
187
+ * Filter for finding the item, if it cannot be found based on the `context`.
188
+ */
189
+ filter?: Filter<InjectCustomField<T, C>>;
190
+ offset?: never;
191
+ orderBy: never;
192
+ groupBy?: never;
193
+ };
194
+ /**
195
+ * Query for updating multiple items.
196
+ */
197
+ export type QueryUpdateMultiple<T extends object, C extends CustomFieldMap<T>> = QueryBase<T> & {
198
+ method: "update";
199
+ multiple: true;
200
+ value: Partial<T>[];
201
+ /**
202
+ * Custom fields to add to each item, which can be used in the `filter`.
203
+ */
204
+ customFields?: C;
205
+ filter?: Filter<T>;
206
+ /**
207
+ * Order by which the items should be sorted.
208
+ */
209
+ orderBy?: Order<InjectCustomField<T, C>>[];
210
+ /**
211
+ * Offset of the first matching item to update.
212
+ */
213
+ offset?: number;
214
+ /**
215
+ * Sets the upper bound of the number of items to update.
216
+ */
217
+ limit?: number;
218
+ };
219
+ /**
220
+ * Query for deleting an item.
221
+ */
222
+ export type QueryDelete<T extends object> = QueryBase<T> & {
223
+ method: "delete";
224
+ filter?: Filter<T>;
225
+ };
226
+ /**
227
+ * Query for deleting multiple items.
228
+ */
229
+ export type QueryDeleteMultiple<T extends object> = QueryBase<T> & {
230
+ method: "delete";
231
+ multiple: true;
232
+ filter?: Filter<T>;
233
+ };
234
+ /**
235
+ * Query for computing an aggregated value.
236
+ */
237
+ export type QueryAggregate<T extends object> = QueryBase<T> & {
238
+ method: "aggregate";
239
+ aggregator: AggregateFunction<T>;
240
+ filter?: Filter<T>;
241
+ };
242
+ /**
243
+ * Order item.
244
+ */
245
+ export type Order<T extends object> = keyof T | {
246
+ field: keyof T;
247
+ descending?: boolean;
248
+ };
249
+ type FilterKeys<T extends object, P> = {
250
+ [K in keyof T]-?: T[K] extends P ? K : never;
251
+ }[keyof T];
252
+ export type FieldFunction<T extends object> = FieldFunctionCustom<T> | FieldFunctionFormatDate<T>;
253
+ /**
254
+ * Applies a custom field transform function.
255
+ */
256
+ export type FieldFunctionCustom<T extends object> = {
257
+ operator: "custom";
258
+ value: (item: T) => any;
259
+ };
260
+ /**
261
+ * Formats the date found in a given field, which can be an ISO string date or a timestamp.
262
+ */
263
+ export type FieldFunctionFormatDate<T extends object> = {
264
+ operator: "formatDate";
265
+ field: FilterKeys<T, string | number>;
266
+ format: string;
267
+ };
268
+ /**
269
+ * Possible field function operators.
270
+ */
271
+ export type FieldFunctionOperator = FieldFunction<never>["operator"];
272
+ /**
273
+ * Return types of custom field functions.
274
+ */
275
+ export type FieldFunctionReturn = {
276
+ formatDate: string;
277
+ };
278
+ export type CustomFieldMap<T extends object> = Record<string, FieldFunction<T>>;
279
+ /**
280
+ * Aggregation function.
281
+ */
282
+ export type AggregateFunction<T extends object> = "length" | {
283
+ operator: "length";
284
+ } | {
285
+ operator: "median" | "standardDeviation" | "mean" | "minimum" | "maximum" | "variance" | "mode";
286
+ field: keyof T;
287
+ };
288
+ export type AggregateFunctionOperator = Exclude<AggregateFunction<{}>, string>["operator"];
289
+ type CustomFieldAggregateMap<T extends object> = Record<string, AggregateFunction<T>>;
290
+ type Group<T extends object> = keyof T | {
291
+ field: keyof T;
292
+ customFields?: CustomFieldAggregateMap<T>;
293
+ };
294
+ /**
295
+ * Describes a predicate for filtering items.
296
+ */
297
+ export type Filter<T extends object> = FilterList<T> | FilterField<T> | FilterBoolean<T> | FilterString<T> | FilterStringMatch<T> | FilterStringInclude<T> | FilterNumber<T> | FilterArray<T>;
298
+ export type FilterOperator = Filter<never>["operator"];
299
+ /**
300
+ * Joins a list of filters with a specific boolean operator.
301
+ */
302
+ export type FilterList<T extends object> = {
303
+ /**
304
+ * Boolean operator to use for joining the filters.
305
+ */
306
+ operator: "all";
307
+ /**
308
+ * Filters to join.
309
+ */
310
+ value: Filter<T>[];
311
+ } | {
312
+ /**
313
+ * Boolean operator to use for joining the filters.
314
+ */
315
+ operator: "any" | "none";
316
+ /**
317
+ * Filters to join.
318
+ */
319
+ value?: Filter<T>[];
320
+ };
321
+ /**
322
+ * Checks if a given field exists.
323
+ */
324
+ export type FilterField<T extends object> = {
325
+ operator: "exist";
326
+ field: keyof T;
327
+ };
328
+ /**
329
+ * Checks if a given boolean field is `true` or `false`.
330
+ */
331
+ export type FilterBoolean<T extends object> = {
332
+ operator: "equal" | "notEqual";
333
+ field: FilterKeys<T, boolean>;
334
+ value: boolean;
335
+ };
336
+ /**
337
+ * Checks if a given string field matches a given string value according to a given operator.
338
+ */
339
+ export type FilterString<T extends object> = {
340
+ operator: "equal" | "notEqual" | "startWith" | "endWith" | "include" | "greaterThan" | "greaterThanOrEqual" | "lowerThan" | "lowerThanOrEqual";
341
+ field: FilterKeys<T, string>;
342
+ value: string;
343
+ };
344
+ /**
345
+ * Checks if a given string field matches a given regular expression.
346
+ */
347
+ export type FilterStringMatch<T extends object> = {
348
+ operator: "match";
349
+ field: FilterKeys<T, string>;
350
+ /**
351
+ * Raw regular expression string.
352
+ */
353
+ value: string;
354
+ /**
355
+ * Regular expression options.
356
+ */
357
+ options?: {
358
+ /**
359
+ * When matching, casing differences are ignored.
360
+ */
361
+ ignoreCase?: boolean;
362
+ /**
363
+ * Allows . to match newlines.
364
+ */
365
+ dotAll?: boolean;
366
+ };
367
+ /**
368
+ * Compiled regular expression generated by the `testFilter` function.
369
+ */
370
+ regularExpression?: RegExp;
371
+ };
372
+ /**
373
+ * Checks if a given string field has any of the provided values.
374
+ */
375
+ export type FilterStringInclude<T extends object> = {
376
+ operator: "intersect";
377
+ field: FilterKeys<T, string>;
378
+ value: string[];
379
+ };
380
+ /**
381
+ * Checks if a given number field matches a given number value according to a given operator.
382
+ */
383
+ export type FilterNumber<T extends object> = {
384
+ operator: "equal" | "notEqual" | "greaterThan" | "greaterThanOrEqual" | "lowerThan" | "lowerThanOrEqual";
385
+ field: FilterKeys<T, number>;
386
+ value: number;
387
+ };
388
+ /**
389
+ * Checks if a given array field matches a given array value according to a given operator.
390
+ */
391
+ export type FilterArray<T extends object, P = Any> = {
392
+ operator: "equal" | "include" | "intersect";
393
+ field: FilterKeys<T, P[]>;
394
+ value: P[];
395
+ };
396
+ export {};
package/dist/types.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../lib/types.ts"],"names":[],"mappings":""}