quetch 0.15.0 → 0.16.1

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 (214) hide show
  1. package/dist/errors/RequestError.js +8 -24
  2. package/dist/errors/RequestError.js.map +1 -1
  3. package/dist/middlewares/aggregate.js +1 -1
  4. package/dist/middlewares/aggregate.js.map +1 -1
  5. package/dist/middlewares/fetchExternal.js +1 -1
  6. package/dist/middlewares/fetchExternal.js.map +1 -1
  7. package/dist/middlewares/retry.js +1 -1
  8. package/dist/middlewares/retry.js.map +1 -1
  9. package/dist/tools/defineCheckQuery.d.ts +3 -7
  10. package/dist/tools/defineCustomFetch.d.ts +1 -1
  11. package/dist/tools/fieldListFromFilter.d.ts +8 -0
  12. package/dist/tools/fieldListFromFilter.js +37 -0
  13. package/dist/tools/fieldListFromFilter.js.map +1 -0
  14. package/dist/tools/get.d.ts +1 -3
  15. package/dist/tools/get.js.map +1 -1
  16. package/dist/tools/normalizeOrder.d.ts +9 -3
  17. package/dist/tools/normalizeOrder.js +13 -6
  18. package/dist/tools/normalizeOrder.js.map +1 -1
  19. package/dist/tools/queryItemList.d.ts +7 -2
  20. package/dist/tools/queryItemList.js +70 -30
  21. package/dist/tools/queryItemList.js.map +1 -1
  22. package/dist/tools/reverseOrder.d.ts +11 -0
  23. package/dist/tools/reverseOrder.js +15 -0
  24. package/dist/tools/reverseOrder.js.map +1 -0
  25. package/dist/tools/sortItemList.d.ts +2 -2
  26. package/dist/tools/sortItemList.js +11 -8
  27. package/dist/tools/sortItemList.js.map +1 -1
  28. package/dist/tools/testFilter.js +1 -1
  29. package/dist/tools/testFilter.js.map +1 -1
  30. package/dist/tools.d.ts +2 -0
  31. package/dist/tools.js +2 -0
  32. package/dist/tools.js.map +1 -1
  33. package/dist/types/AggregateFunction.d.ts +5 -0
  34. package/dist/types/AggregateFunction.js +0 -1
  35. package/dist/types/AggregateFunctionOperator.js +0 -1
  36. package/dist/types/Any.js +0 -1
  37. package/dist/types/Context.js +0 -1
  38. package/dist/types/CustomFetch.js +0 -1
  39. package/dist/types/CustomFieldAggregateMap.js +0 -1
  40. package/dist/types/CustomFieldMap.js +0 -1
  41. package/dist/types/Field.js +0 -1
  42. package/dist/types/FieldFiltered.d.ts +1 -1
  43. package/dist/types/FieldFiltered.js +0 -1
  44. package/dist/types/FieldFunction.js +0 -1
  45. package/dist/types/FieldFunctionCustom.js +0 -1
  46. package/dist/types/FieldFunctionFormatDate.js +0 -1
  47. package/dist/types/FieldFunctionReturn.js +0 -1
  48. package/dist/types/Filter.js +0 -1
  49. package/dist/types/FilterArray.js +0 -1
  50. package/dist/types/FilterBoolean.js +0 -1
  51. package/dist/types/FilterChildren.js +0 -1
  52. package/dist/types/FilterCustom.js +0 -1
  53. package/dist/types/FilterField.d.ts +1 -1
  54. package/dist/types/FilterField.js +0 -1
  55. package/dist/types/FilterGroup.js +0 -1
  56. package/dist/types/FilterNumber.js +0 -1
  57. package/dist/types/FilterOperator.js +0 -1
  58. package/dist/types/FilterString.js +0 -1
  59. package/dist/types/FilterStringIntersect.js +0 -1
  60. package/dist/types/FilterStringMatch.js +0 -1
  61. package/dist/types/Get.d.ts +2 -2
  62. package/dist/types/Get.js +0 -1
  63. package/dist/types/Group.js +0 -1
  64. package/dist/types/Handler.js +0 -1
  65. package/dist/types/Immutable.js +0 -1
  66. package/dist/types/Increment.d.ts +4 -0
  67. package/dist/types/Increment.js +1 -0
  68. package/dist/types/Increment.js.map +1 -0
  69. package/dist/types/InjectCustomFields.js +0 -1
  70. package/dist/types/Item.js +0 -1
  71. package/dist/types/Join.d.ts +1 -0
  72. package/dist/types/Join.js +1 -0
  73. package/dist/types/Join.js.map +1 -0
  74. package/dist/types/Key.js +0 -1
  75. package/dist/types/KeyFiltered.js +0 -1
  76. package/dist/types/Locale.js +0 -1
  77. package/dist/types/Mutable.js +0 -1
  78. package/dist/types/NextHandler.js +0 -1
  79. package/dist/types/Order.d.ts +3 -2
  80. package/dist/types/Order.js +0 -1
  81. package/dist/types/Parameters.js +0 -1
  82. package/dist/types/Path.d.ts +3 -2
  83. package/dist/types/Path.js +0 -1
  84. package/dist/types/PathFiltered.d.ts +3 -2
  85. package/dist/types/PathFiltered.js +0 -1
  86. package/dist/types/Query.js +0 -1
  87. package/dist/types/QueryAggregate.d.ts +16 -0
  88. package/dist/types/QueryAggregate.js +0 -1
  89. package/dist/types/QueryCreate.js +0 -1
  90. package/dist/types/QueryCreateMultiple.js +0 -1
  91. package/dist/types/QueryDelete.js +0 -1
  92. package/dist/types/QueryDeleteMultiple.js +0 -1
  93. package/dist/types/QueryMethod.js +0 -1
  94. package/dist/types/QueryRead.d.ts +5 -2
  95. package/dist/types/QueryRead.js +0 -1
  96. package/dist/types/QueryReadMultiple.js +0 -1
  97. package/dist/types/QuerySettings.js +0 -1
  98. package/dist/types/QueryUpdate.js +0 -1
  99. package/dist/types/QueryUpdateMultiple.js +0 -1
  100. package/dist/types/Result.js +0 -1
  101. package/dist/types/Store.js +0 -1
  102. package/dist/types/Value.js +0 -1
  103. package/dist/types.d.ts +2 -0
  104. package/dist/types.js +0 -1
  105. package/doc/README.md +85 -2042
  106. package/doc/classes/RequestError.md +30 -39
  107. package/doc/functions/aggregate.md +49 -0
  108. package/doc/functions/branch.md +46 -0
  109. package/doc/functions/cache.md +59 -0
  110. package/doc/functions/combine.md +117 -0
  111. package/doc/functions/cork.md +23 -0
  112. package/doc/functions/defineCheckQuery.md +55 -0
  113. package/doc/functions/defineCustomFetch.md +63 -0
  114. package/doc/functions/defineGenericFetch.md +54 -0
  115. package/doc/functions/escapeRegex.md +27 -0
  116. package/doc/functions/fetchExternal.md +27 -0
  117. package/doc/functions/fetchLocal.md +25 -0
  118. package/doc/functions/fieldListFromFilter.md +31 -0
  119. package/doc/functions/filterChildren.md +31 -0
  120. package/doc/functions/filterFromContext.md +25 -0
  121. package/doc/functions/get.md +40 -0
  122. package/doc/functions/identity.md +33 -0
  123. package/doc/functions/isFilterGroup.md +31 -0
  124. package/doc/functions/log.md +35 -0
  125. package/doc/functions/normalizeOrder.md +39 -0
  126. package/doc/functions/queryItemList.md +33 -0
  127. package/doc/functions/retry.md +33 -0
  128. package/doc/functions/reverseOrder.md +39 -0
  129. package/doc/functions/sortItemList.md +35 -0
  130. package/doc/functions/testFilter.md +39 -0
  131. package/doc/interfaces/CustomFetch.md +15 -21
  132. package/doc/type-aliases/AggregateFunction.md +19 -0
  133. package/doc/type-aliases/AggregateFunctionOperator.md +13 -0
  134. package/doc/type-aliases/Any.md +13 -0
  135. package/doc/type-aliases/Context.md +17 -0
  136. package/doc/type-aliases/CustomFieldAggregateMap.md +17 -0
  137. package/doc/type-aliases/CustomFieldMap.md +17 -0
  138. package/doc/type-aliases/Field.md +17 -0
  139. package/doc/type-aliases/FieldFiltered.md +19 -0
  140. package/doc/type-aliases/FieldFunction.md +17 -0
  141. package/doc/type-aliases/FieldFunctionCustom.md +37 -0
  142. package/doc/type-aliases/FieldFunctionFormatDate.md +33 -0
  143. package/doc/type-aliases/FieldFunctionReturn.md +21 -0
  144. package/doc/type-aliases/Filter.md +19 -0
  145. package/doc/type-aliases/FilterArray.md +31 -0
  146. package/doc/type-aliases/FilterBoolean.md +29 -0
  147. package/doc/type-aliases/FilterChildren.md +38 -0
  148. package/doc/type-aliases/FilterCustom.md +37 -0
  149. package/doc/type-aliases/FilterField.md +31 -0
  150. package/doc/type-aliases/FilterGroup.md +19 -0
  151. package/doc/type-aliases/FilterNumber.md +29 -0
  152. package/doc/type-aliases/FilterOperator.md +13 -0
  153. package/doc/type-aliases/FilterString.md +37 -0
  154. package/doc/type-aliases/FilterStringIntersect.md +37 -0
  155. package/doc/type-aliases/FilterStringMatch.md +53 -0
  156. package/doc/type-aliases/Get.md +21 -0
  157. package/doc/type-aliases/Group.md +19 -0
  158. package/doc/type-aliases/Handler.md +35 -0
  159. package/doc/type-aliases/Immutable.md +17 -0
  160. package/doc/type-aliases/Increment.md +17 -0
  161. package/doc/type-aliases/InjectCustomFields.md +21 -0
  162. package/doc/type-aliases/Item.md +21 -0
  163. package/doc/type-aliases/Join.md +19 -0
  164. package/doc/type-aliases/Key.md +13 -0
  165. package/doc/type-aliases/KeyFiltered.md +21 -0
  166. package/doc/type-aliases/Locale.md +13 -0
  167. package/doc/type-aliases/Mutable.md +17 -0
  168. package/doc/type-aliases/NextHandler.md +29 -0
  169. package/doc/type-aliases/Order.md +19 -0
  170. package/doc/type-aliases/Parameters.md +13 -0
  171. package/doc/type-aliases/Path.md +19 -0
  172. package/doc/type-aliases/PathFiltered.md +21 -0
  173. package/doc/type-aliases/Query.md +19 -0
  174. package/doc/type-aliases/QueryAggregate.md +71 -0
  175. package/doc/type-aliases/QueryCreate.md +53 -0
  176. package/doc/type-aliases/QueryCreateMultiple.md +51 -0
  177. package/doc/type-aliases/QueryDelete.md +51 -0
  178. package/doc/type-aliases/QueryDeleteMultiple.md +51 -0
  179. package/doc/type-aliases/QueryMethod.md +15 -0
  180. package/doc/type-aliases/QueryRead.md +79 -0
  181. package/doc/type-aliases/QueryReadMultiple.md +83 -0
  182. package/doc/type-aliases/QuerySettings.md +63 -0
  183. package/doc/type-aliases/QueryUpdate.md +71 -0
  184. package/doc/type-aliases/QueryUpdateMultiple.md +75 -0
  185. package/doc/type-aliases/Result.md +19 -0
  186. package/doc/type-aliases/Store.md +61 -0
  187. package/doc/type-aliases/Value.md +21 -0
  188. package/lib/middlewares/aggregate.ts +1 -1
  189. package/lib/middlewares/fetchExternal.ts +1 -1
  190. package/lib/middlewares/retry.ts +1 -1
  191. package/lib/tools/fieldListFromFilter.ts +41 -0
  192. package/lib/tools/get.test.ts +13 -4
  193. package/lib/tools/get.ts +1 -11
  194. package/lib/tools/normalizeOrder.ts +19 -8
  195. package/lib/tools/queryItemList.test.ts +61 -0
  196. package/lib/tools/queryItemList.ts +90 -50
  197. package/lib/tools/reverseOrder.ts +22 -0
  198. package/lib/tools/sortItemList.ts +11 -8
  199. package/lib/tools/testFilter.ts +2 -2
  200. package/lib/tools.ts +2 -0
  201. package/lib/types/AggregateFunction.ts +3 -0
  202. package/lib/types/FieldFiltered.ts +2 -2
  203. package/lib/types/FilterField.ts +1 -1
  204. package/lib/types/Get.ts +4 -2
  205. package/lib/types/Increment.ts +5 -0
  206. package/lib/types/Join.ts +12 -0
  207. package/lib/types/Order.ts +4 -2
  208. package/lib/types/Path.ts +7 -3
  209. package/lib/types/PathFiltered.ts +9 -3
  210. package/lib/types/QueryAggregate.ts +16 -0
  211. package/lib/types/QueryRead.ts +5 -2
  212. package/lib/types/QuerySettings.ts +1 -0
  213. package/lib/types.ts +2 -0
  214. package/package.json +30 -29
@@ -0,0 +1,63 @@
1
+ [**quetch**](../README.md) • **Docs**
2
+
3
+ ***
4
+
5
+ [quetch](../README.md) / QuerySettings
6
+
7
+ # Type Alias: QuerySettings\<T\>
8
+
9
+ > **QuerySettings**\<`T`\>: `object`
10
+
11
+ Settings to use when doing a query.
12
+
13
+ ## Type Parameters
14
+
15
+ • **T** *extends* `object`
16
+
17
+ ## Type declaration
18
+
19
+ ### abortController?
20
+
21
+ > `optional` **abortController**: `AbortController`
22
+
23
+ Abort controller to abort the query.
24
+
25
+ ### pathFieldKey?
26
+
27
+ > `optional` **pathFieldKey**: [`FieldFiltered`](FieldFiltered.md)\<`T`, `string`\>
28
+
29
+ Field key to that contains the path value of an item.
30
+
31
+ ### pathFieldSeparator?
32
+
33
+ > `optional` **pathFieldSeparator**: `string`
34
+
35
+ String used to separate the path nodes of an item.
36
+
37
+ ### signal?
38
+
39
+ > `optional` **signal**: `AbortSignal`
40
+
41
+ Abort signal to abort the query.
42
+
43
+ ### transformFilterChildren()?
44
+
45
+ > `optional` **transformFilterChildren**: (`filter`) => `Exclude`\<[`Filter`](Filter.md)\<`T`\>, `object`\>
46
+
47
+ Returns a filter that captures the items expressed by the provided `FilterChildren`. The return filter cannot use filters of type `FilterChildren`.
48
+
49
+ #### Parameters
50
+
51
+ • **filter**: [`FilterChildren`](FilterChildren.md)\<`T`\>
52
+
53
+ The provided `FilterChildren` to express.
54
+
55
+ #### Returns
56
+
57
+ `Exclude`\<[`Filter`](Filter.md)\<`T`\>, `object`\>
58
+
59
+ A filter that captures the items expressed by the provided `FilterChildren`.
60
+
61
+ ## Defined in
62
+
63
+ [lib/types/QuerySettings.ts:8](https://github.com/nevoland/quetch/blob/b70842cb9761fe7c217edef26e0fbc90449abccb/lib/types/QuerySettings.ts#L8)
@@ -0,0 +1,71 @@
1
+ [**quetch**](../README.md) • **Docs**
2
+
3
+ ***
4
+
5
+ [quetch](../README.md) / QueryUpdate
6
+
7
+ # Type Alias: QueryUpdate\<T\>
8
+
9
+ > **QueryUpdate**\<`T`\>: `object`
10
+
11
+ Query for updating an item.
12
+
13
+ ## Type Parameters
14
+
15
+ • **T** *extends* `object`
16
+
17
+ ## Type declaration
18
+
19
+ ### context?
20
+
21
+ > `optional` **context**: [`Context`](Context.md)\<`T`\>
22
+
23
+ Common item properties to use for identifying the context in which to update the item.
24
+
25
+ ### filter?
26
+
27
+ > `optional` **filter**: [`Filter`](Filter.md)\<`T`\>
28
+
29
+ Filter for finding the item, if it cannot be found based on the `context`.
30
+
31
+ ### group?
32
+
33
+ > `optional` **group**: `never`
34
+
35
+ ### method
36
+
37
+ > **method**: `"update"`
38
+
39
+ ### multiple?
40
+
41
+ > `optional` **multiple**: `false`
42
+
43
+ ### offset?
44
+
45
+ > `optional` **offset**: `never`
46
+
47
+ ### order
48
+
49
+ > **order**: `never`
50
+
51
+ ### parameters?
52
+
53
+ > `optional` **parameters**: [`Parameters`](Parameters.md)
54
+
55
+ Query parameters.
56
+
57
+ ### settings?
58
+
59
+ > `optional` **settings**: [`QuerySettings`](QuerySettings.md)\<`T`\>
60
+
61
+ Query settings.
62
+
63
+ ### value
64
+
65
+ > **value**: `Partial`\<`T`\>
66
+
67
+ Partial property values to update.
68
+
69
+ ## Defined in
70
+
71
+ [lib/types/QueryUpdate.ts:9](https://github.com/nevoland/quetch/blob/b70842cb9761fe7c217edef26e0fbc90449abccb/lib/types/QueryUpdate.ts#L9)
@@ -0,0 +1,75 @@
1
+ [**quetch**](../README.md) • **Docs**
2
+
3
+ ***
4
+
5
+ [quetch](../README.md) / QueryUpdateMultiple
6
+
7
+ # Type Alias: QueryUpdateMultiple\<T\>
8
+
9
+ > **QueryUpdateMultiple**\<`T`\>: `object`
10
+
11
+ Query for updating multiple items.
12
+
13
+ ## Type Parameters
14
+
15
+ • **T** *extends* `object`
16
+
17
+ ## Type declaration
18
+
19
+ ### context?
20
+
21
+ > `optional` **context**: [`Context`](Context.md)\<`T`\>
22
+
23
+ Common item properties to use for identifying the context in which to update the item.
24
+
25
+ ### filter?
26
+
27
+ > `optional` **filter**: [`Filter`](Filter.md)\<`T`\>
28
+
29
+ ### limit?
30
+
31
+ > `optional` **limit**: `number`
32
+
33
+ Sets the upper bound of the number of items to update.
34
+
35
+ ### method
36
+
37
+ > **method**: `"update"`
38
+
39
+ ### multiple
40
+
41
+ > **multiple**: `true`
42
+
43
+ ### offset?
44
+
45
+ > `optional` **offset**: `number`
46
+
47
+ Offset of the first matching item to update.
48
+
49
+ ### order?
50
+
51
+ > `optional` **order**: [`Order`](Order.md)\<`T`\>[]
52
+
53
+ Order by which the items should be sorted.
54
+
55
+ ### parameters?
56
+
57
+ > `optional` **parameters**: [`Parameters`](Parameters.md)
58
+
59
+ Query parameters.
60
+
61
+ ### settings?
62
+
63
+ > `optional` **settings**: [`QuerySettings`](QuerySettings.md)\<`T`\>
64
+
65
+ Query settings.
66
+
67
+ ### value
68
+
69
+ > **value**: `Partial`\<`T`\>[]
70
+
71
+ Partial property values to update.
72
+
73
+ ## Defined in
74
+
75
+ [lib/types/QueryUpdateMultiple.ts:10](https://github.com/nevoland/quetch/blob/b70842cb9761fe7c217edef26e0fbc90449abccb/lib/types/QueryUpdateMultiple.ts#L10)
@@ -0,0 +1,19 @@
1
+ [**quetch**](../README.md) • **Docs**
2
+
3
+ ***
4
+
5
+ [quetch](../README.md) / Result
6
+
7
+ # Type Alias: Result\<T, Q\>
8
+
9
+ > **Result**\<`T`, `Q`\>: [`Q`] *extends* [`object`] ? [`Q`] *extends* [`object`] ? `ResultRead`\<`T`, `Q`\>[] : `ResultRead`\<`T`, `Q`\> : [`Q`] *extends* [`object`] ? `number` : [`Q`] *extends* [`object`] ? `ResultRead`\<`T`, `Q`\>[] : `ResultRead`\<`T`, `Q`\>
10
+
11
+ ## Type Parameters
12
+
13
+ • **T** *extends* `object`
14
+
15
+ • **Q** *extends* [`Query`](Query.md)\<`T`\>
16
+
17
+ ## Defined in
18
+
19
+ [lib/types/Result.ts:20](https://github.com/nevoland/quetch/blob/b70842cb9761fe7c217edef26e0fbc90449abccb/lib/types/Result.ts#L20)
@@ -0,0 +1,61 @@
1
+ [**quetch**](../README.md) • **Docs**
2
+
3
+ ***
4
+
5
+ [quetch](../README.md) / Store
6
+
7
+ # Type Alias: Store\<T\>
8
+
9
+ > **Store**\<`T`\>: `object`
10
+
11
+ ## Type Parameters
12
+
13
+ • **T** = `any`
14
+
15
+ ## Type declaration
16
+
17
+ ### delete()
18
+
19
+ #### Parameters
20
+
21
+ • **key**: `string`
22
+
23
+ #### Returns
24
+
25
+ `Promise`\<`void`\>
26
+
27
+ ### get()
28
+
29
+ #### Parameters
30
+
31
+ • **key**: `string`
32
+
33
+ #### Returns
34
+
35
+ `Promise`\<`T`\>
36
+
37
+ ### has()
38
+
39
+ #### Parameters
40
+
41
+ • **key**: `string`
42
+
43
+ #### Returns
44
+
45
+ `Promise`\<`boolean`\>
46
+
47
+ ### set()
48
+
49
+ #### Parameters
50
+
51
+ • **key**: `string`
52
+
53
+ • **value**: `T`
54
+
55
+ #### Returns
56
+
57
+ `Promise`\<`void`\>
58
+
59
+ ## Defined in
60
+
61
+ [lib/types/Store.ts:2](https://github.com/nevoland/quetch/blob/b70842cb9761fe7c217edef26e0fbc90449abccb/lib/types/Store.ts#L2)
@@ -0,0 +1,21 @@
1
+ [**quetch**](../README.md) • **Docs**
2
+
3
+ ***
4
+
5
+ [quetch](../README.md) / Value
6
+
7
+ # Type Alias: Value\<T, V\>
8
+
9
+ > **Value**\<`T`, `V`\>: `object` \| `object`
10
+
11
+ Actual `value` or `valueField` leading to the value.
12
+
13
+ ## Type Parameters
14
+
15
+ • **T** *extends* `object`
16
+
17
+ • **V**
18
+
19
+ ## Defined in
20
+
21
+ [lib/types/Value.ts:6](https://github.com/nevoland/quetch/blob/b70842cb9761fe7c217edef26e0fbc90449abccb/lib/types/Value.ts#L6)
@@ -44,7 +44,7 @@ export function aggregate<
44
44
  },
45
45
  method: "read",
46
46
  multiple: true,
47
- type: queryList[0].type,
47
+ type: queryList[0]?.type,
48
48
  }),
49
49
  resultForQuery = (resultList, query) => {
50
50
  const result = resultList.find(
@@ -1,4 +1,4 @@
1
- import { getGlobal } from "@davidbonnet/get-global";
1
+ import { getGlobal } from "@nevoland/get-global";
2
2
 
3
3
  import { RequestError } from "../errors/RequestError.js";
4
4
  import type { Handler } from "../types";
@@ -1,4 +1,4 @@
1
- import { getGlobal } from "@davidbonnet/get-global";
1
+ import { getGlobal } from "@nevoland/get-global";
2
2
  import { sleep, untilOnline } from "futurise";
3
3
 
4
4
  import { RequestError } from "../errors/RequestError.js";
@@ -0,0 +1,41 @@
1
+ import { EMPTY_ARRAY } from "unchangeable";
2
+
3
+ import type { Field, Filter } from "../types";
4
+
5
+ /**
6
+ * Returns the list of fields used in the provided `filter`.
7
+ *
8
+ * @param filter The filter to extract the fields from.
9
+ * @returns A list of fields.
10
+ */
11
+ export function fieldListFromFilter<T extends object>(
12
+ filter?: Filter<T>,
13
+ ): readonly Field<T>[] {
14
+ if (filter === undefined) {
15
+ return EMPTY_ARRAY;
16
+ }
17
+ switch (filter.operator) {
18
+ case "equal":
19
+ case "include":
20
+ case "intersect":
21
+ case "notEqual":
22
+ case "greaterThan":
23
+ case "greaterThanOrEqual":
24
+ case "lowerThan":
25
+ case "lowerThanOrEqual":
26
+ case "startWith":
27
+ case "endWith":
28
+ case "match":
29
+ case "exist":
30
+ return [filter.field];
31
+ case "all":
32
+ case "any":
33
+ case "none":
34
+ return filter.value?.flatMap(fieldListFromFilter) ?? EMPTY_ARRAY;
35
+ case "children":
36
+ case "custom":
37
+ return EMPTY_ARRAY;
38
+ default:
39
+ return EMPTY_ARRAY;
40
+ }
41
+ }
@@ -6,10 +6,19 @@ test("gets properties", () => {
6
6
  const value = {
7
7
  a: { b: 3, c: true, d: { e: [1, 2, { f: "test" }] } },
8
8
  } as const;
9
- expect(get(value, ["a", "c"])).toBe(value.a.c);
10
- expect(get(value, ["a", "d", "e", 2, "f"])).toBe(value.a.d.e[2].f);
11
- expect(get(value, ["a"])).toBe(value.a);
12
- expect(get(value, "a")).toBe(value.a);
9
+
10
+ const result1 = get(value, ["a", "c"]);
11
+ expect(result1).toBe(value.a.c);
12
+
13
+ const result2 = get(value, ["a", "d", "e", 2, "f"]);
14
+ expect(result2).toBe(value.a.d.e[2].f);
15
+
16
+ const result3 = get(value, ["a"]);
17
+ expect(result3).toBe(value.a);
18
+
19
+ const result4 = get(value, "a");
20
+ expect(result4).toBe(value.a);
21
+
13
22
  // @ts-ignore
14
23
  expect(get(value, "z")).toBeUndefined();
15
24
  // @ts-ignore
package/lib/tools/get.ts CHANGED
@@ -1,14 +1,4 @@
1
- import type { Path } from "../types";
2
-
3
- type Get<T, P> = [P] extends [[infer K, ...infer R]]
4
- ? K extends keyof T
5
- ? R extends Path<T[K]>
6
- ? Get<T[K], R>
7
- : T[K]
8
- : never
9
- : [P] extends [keyof T]
10
- ? T[P]
11
- : T;
1
+ import type { Get, Path } from "../types";
12
2
 
13
3
  /**
14
4
  * Gets the property value of the given `value` at the specified `path` (an array of object property names or array indexes).
@@ -1,13 +1,24 @@
1
- import type { Order } from "../types";
1
+ import type { Field, Order } from "../types";
2
2
 
3
+ const { isArray } = Array;
4
+
5
+ /**
6
+ * Returns a normalized order, which is an object with the `field` and `descending` properties.
7
+ *
8
+ * @param order The string or order object.
9
+ * @returns The normalized order object.
10
+ */
3
11
  export function normalizeOrder<T extends object>(
4
12
  order: Order<T>,
5
- ): { field: keyof T; descending?: boolean } {
6
- if (typeof order === "object") {
7
- return order;
13
+ ): {
14
+ field: Field<T>;
15
+ descending?: boolean | undefined;
16
+ } {
17
+ if (isArray(order) || typeof order !== "object") {
18
+ return {
19
+ field: order,
20
+ descending: false,
21
+ };
8
22
  }
9
- return {
10
- descending: false,
11
- field: order,
12
- };
23
+ return order;
13
24
  }
@@ -166,6 +166,67 @@ test("aggregates items", () => {
166
166
  ],
167
167
  }),
168
168
  ).toBe(1);
169
+ expect(
170
+ queryItemList({
171
+ aggregator: {
172
+ operator: "index",
173
+ filter: {
174
+ field: "a",
175
+ operator: "greaterThan",
176
+ value: 3,
177
+ },
178
+ },
179
+ context: {
180
+ c: "a",
181
+ },
182
+ filter: {
183
+ field: "a",
184
+ operator: "greaterThan",
185
+ value: 1,
186
+ },
187
+ method: "aggregate",
188
+ type: [
189
+ { a: 1, c: "a" },
190
+ { a: 2, c: "a" },
191
+ { a: 3, c: "a" },
192
+ { a: 4, c: "a" },
193
+ { a: 5, c: "a" },
194
+ { a: 11, c: "b" },
195
+ { a: 12, c: "b" },
196
+ ],
197
+ }),
198
+ ).toBe(2);
199
+ expect(
200
+ queryItemList({
201
+ aggregator: {
202
+ operator: "index",
203
+ filter: {
204
+ field: "a",
205
+ operator: "greaterThan",
206
+ value: 3,
207
+ },
208
+ },
209
+ context: {
210
+ c: "a",
211
+ },
212
+ filter: {
213
+ field: "a",
214
+ operator: "greaterThan",
215
+ value: 1,
216
+ },
217
+ offset: 1,
218
+ method: "aggregate",
219
+ type: [
220
+ { a: 1, c: "a" },
221
+ { a: 2, c: "a" },
222
+ { a: 3, c: "a" },
223
+ { a: 4, c: "a" },
224
+ { a: 5, c: "a" },
225
+ { a: 11, c: "b" },
226
+ { a: 12, c: "b" },
227
+ ],
228
+ }),
229
+ ).toBe(1);
169
230
  });
170
231
 
171
232
  test("slices items", () => {