quetch 0.30.0 → 0.31.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 (164) hide show
  1. package/dist/tools/comparatorFieldValues.d.ts +8 -0
  2. package/dist/tools/comparatorFieldValues.js +26 -0
  3. package/dist/tools/comparatorFieldValues.js.map +1 -0
  4. package/dist/tools/get.d.ts +4 -4
  5. package/dist/tools/get.js +6 -2
  6. package/dist/tools/get.js.map +1 -1
  7. package/dist/tools/querySettings.d.ts +8 -0
  8. package/dist/tools/querySettings.js +16 -0
  9. package/dist/tools/querySettings.js.map +1 -0
  10. package/dist/tools/sortItemList.d.ts +4 -4
  11. package/dist/tools/sortItemList.js +17 -24
  12. package/dist/tools/sortItemList.js.map +1 -1
  13. package/dist/tools/transformerFilterChildren.d.ts +2 -22
  14. package/dist/tools/transformerFilterChildren.js +1 -4
  15. package/dist/tools/transformerFilterChildren.js.map +1 -1
  16. package/dist/tools.d.ts +2 -0
  17. package/dist/tools.js +2 -0
  18. package/dist/tools.js.map +1 -1
  19. package/dist/types/CombineUnion.d.ts +1 -1
  20. package/dist/types/Decrement.d.ts +4 -0
  21. package/dist/types/Decrement.js +1 -0
  22. package/dist/types/Decrement.js.map +1 -0
  23. package/dist/types/DepthLimit.d.ts +1 -0
  24. package/dist/types/DepthLimit.js +1 -0
  25. package/dist/types/DepthLimit.js.map +1 -0
  26. package/dist/types/FieldKey.d.ts +2 -1
  27. package/dist/types/Get.d.ts +3 -1
  28. package/dist/types/KeyFiltered.d.ts +1 -1
  29. package/dist/types/NormalizedPathFieldSettings.d.ts +24 -0
  30. package/dist/types/NormalizedPathFieldSettings.js +1 -0
  31. package/dist/types/NormalizedPathFieldSettings.js.map +1 -0
  32. package/dist/types/Path.d.ts +4 -3
  33. package/dist/types/PathFiltered.d.ts +4 -3
  34. package/dist/types/QuerySettings.d.ts +12 -17
  35. package/dist/types.d.ts +3 -1
  36. package/doc/README.md +5 -1
  37. package/doc/classes/RequestError.md +5 -5
  38. package/doc/functions/aggregate.md +1 -1
  39. package/doc/functions/branch.md +1 -1
  40. package/doc/functions/cache.md +1 -1
  41. package/doc/functions/combine.md +1 -1
  42. package/doc/functions/comparatorFieldValues.md +33 -0
  43. package/doc/functions/cork.md +1 -1
  44. package/doc/functions/defineCheckQuery.md +1 -1
  45. package/doc/functions/defineCustomFetch.md +1 -1
  46. package/doc/functions/defineGenericFetch.md +1 -1
  47. package/doc/functions/escapeRegex.md +1 -1
  48. package/doc/functions/fetchExternal.md +1 -1
  49. package/doc/functions/fetchLocal.md +1 -1
  50. package/doc/functions/fieldListFromFilter.md +1 -1
  51. package/doc/functions/filterChildren.md +1 -1
  52. package/doc/functions/filterFromValue.md +1 -1
  53. package/doc/functions/get.md +2 -2
  54. package/doc/functions/groupFilters.md +1 -1
  55. package/doc/functions/identity.md +1 -1
  56. package/doc/functions/intrinsicFilter.md +1 -1
  57. package/doc/functions/isFilterGroup.md +1 -1
  58. package/doc/functions/log.md +1 -1
  59. package/doc/functions/normalizeOrder.md +1 -1
  60. package/doc/functions/queryItemList.md +1 -1
  61. package/doc/functions/querySettings.md +33 -0
  62. package/doc/functions/retry.md +1 -1
  63. package/doc/functions/reverseOrder.md +1 -1
  64. package/doc/functions/sameField.md +1 -1
  65. package/doc/functions/sortItemList.md +2 -2
  66. package/doc/functions/splitPath.md +2 -2
  67. package/doc/functions/testFilter.md +1 -1
  68. package/doc/functions/transformerFilterChildren.md +2 -2
  69. package/doc/interfaces/CustomFetch.md +1 -1
  70. package/doc/type-aliases/AggregateFunction.md +1 -1
  71. package/doc/type-aliases/AggregateFunctionOperator.md +1 -1
  72. package/doc/type-aliases/CombineUnion.md +2 -2
  73. package/doc/type-aliases/Context.md +1 -1
  74. package/doc/type-aliases/CustomFieldAggregateMap.md +1 -1
  75. package/doc/type-aliases/CustomFieldMap.md +1 -1
  76. package/doc/type-aliases/Decrement.md +17 -0
  77. package/doc/type-aliases/DepthLimit.md +13 -0
  78. package/doc/type-aliases/Field.md +1 -1
  79. package/doc/type-aliases/FieldFiltered.md +1 -1
  80. package/doc/type-aliases/FieldFunction.md +1 -1
  81. package/doc/type-aliases/FieldFunctionCustom.md +1 -1
  82. package/doc/type-aliases/FieldFunctionFormatDate.md +1 -1
  83. package/doc/type-aliases/FieldFunctionReturn.md +1 -1
  84. package/doc/type-aliases/FieldKey.md +2 -2
  85. package/doc/type-aliases/FieldMap.md +1 -1
  86. package/doc/type-aliases/Filter.md +1 -1
  87. package/doc/type-aliases/FilterArray.md +1 -1
  88. package/doc/type-aliases/FilterBoolean.md +1 -1
  89. package/doc/type-aliases/FilterChildren.md +1 -1
  90. package/doc/type-aliases/FilterCustom.md +1 -1
  91. package/doc/type-aliases/FilterField.md +1 -1
  92. package/doc/type-aliases/FilterGroup.md +1 -1
  93. package/doc/type-aliases/FilterNumber.md +1 -1
  94. package/doc/type-aliases/FilterOperator.md +1 -1
  95. package/doc/type-aliases/FilterString.md +1 -1
  96. package/doc/type-aliases/FilterStringIntersect.md +1 -1
  97. package/doc/type-aliases/FilterStringMatch.md +1 -1
  98. package/doc/type-aliases/Get.md +5 -3
  99. package/doc/type-aliases/Group.md +1 -1
  100. package/doc/type-aliases/Handler.md +1 -1
  101. package/doc/type-aliases/Immutable.md +1 -1
  102. package/doc/type-aliases/InjectCustomFields.md +1 -1
  103. package/doc/type-aliases/IntersectUnion.md +1 -1
  104. package/doc/type-aliases/IntrinsicFilter.md +1 -1
  105. package/doc/type-aliases/Item.md +1 -1
  106. package/doc/type-aliases/Join.md +1 -1
  107. package/doc/type-aliases/Key.md +1 -1
  108. package/doc/type-aliases/KeyFiltered.md +2 -2
  109. package/doc/type-aliases/KeyFromUnion.md +1 -1
  110. package/doc/type-aliases/Locale.md +1 -1
  111. package/doc/type-aliases/NextHandler.md +1 -1
  112. package/doc/type-aliases/NormalizedPathFieldSettings.md +57 -0
  113. package/doc/type-aliases/Order.md +1 -1
  114. package/doc/type-aliases/OrderNormalized.md +1 -1
  115. package/doc/type-aliases/Parameters.md +1 -1
  116. package/doc/type-aliases/Path.md +3 -3
  117. package/doc/type-aliases/PathFiltered.md +3 -3
  118. package/doc/type-aliases/Primitive.md +1 -1
  119. package/doc/type-aliases/PrimitiveObject.md +1 -1
  120. package/doc/type-aliases/Query.md +1 -1
  121. package/doc/type-aliases/QueryAggregate.md +1 -1
  122. package/doc/type-aliases/QueryCreate.md +1 -1
  123. package/doc/type-aliases/QueryCreateMultiple.md +1 -1
  124. package/doc/type-aliases/QueryDelete.md +1 -1
  125. package/doc/type-aliases/QueryDeleteMultiple.md +1 -1
  126. package/doc/type-aliases/QueryMethod.md +1 -1
  127. package/doc/type-aliases/QueryRead.md +1 -1
  128. package/doc/type-aliases/QueryReadMultiple.md +1 -1
  129. package/doc/type-aliases/QuerySettings.md +36 -30
  130. package/doc/type-aliases/QueryUpdate.md +1 -1
  131. package/doc/type-aliases/QueryUpdateMultiple.md +1 -1
  132. package/doc/type-aliases/Result.md +1 -1
  133. package/doc/type-aliases/Store.md +1 -1
  134. package/doc/type-aliases/Value.md +1 -1
  135. package/doc/type-aliases/ValueMap.md +1 -1
  136. package/doc/variables/CACHE.md +1 -1
  137. package/doc/variables/FILTER_ANY.md +1 -1
  138. package/doc/variables/FILTER_NONE.md +1 -1
  139. package/doc/variables/SELF.md +1 -1
  140. package/lib/tools/comparatorFieldValues.ts +46 -0
  141. package/lib/tools/get.ts +9 -4
  142. package/lib/tools/querySettings.ts +20 -0
  143. package/lib/tools/sortItemList.test.ts +31 -8
  144. package/lib/tools/sortItemList.ts +21 -41
  145. package/lib/tools/testFilter.test.ts +35 -12
  146. package/lib/tools/transformerFilterChildren.ts +3 -26
  147. package/lib/tools.ts +2 -0
  148. package/lib/types/CombineUnion.ts +12 -10
  149. package/lib/types/Decrement.ts +5 -0
  150. package/lib/types/DepthLimit.ts +1 -0
  151. package/lib/types/FieldKey.ts +6 -1
  152. package/lib/types/Get.ts +17 -9
  153. package/lib/types/KeyFiltered.ts +14 -10
  154. package/lib/types/NormalizedPathFieldSettings.ts +25 -0
  155. package/lib/types/Path.ts +18 -15
  156. package/lib/types/PathFiltered.ts +20 -17
  157. package/lib/types/QuerySettings.ts +16 -17
  158. package/lib/types.ts +3 -1
  159. package/package.json +2 -2
  160. package/dist/types/Increment.d.ts +0 -4
  161. package/dist/types/Increment.js +0 -1
  162. package/dist/types/Increment.js.map +0 -1
  163. package/doc/type-aliases/Increment.md +0 -17
  164. package/lib/types/Increment.ts +0 -5
@@ -16,4 +16,4 @@ Filter that does not rely on query settings, and thus can be evaluated directly
16
16
 
17
17
  ## Defined in
18
18
 
19
- [lib/types/IntrinsicFilter.ts:6](https://github.com/nevoland/quetch/blob/94f546831241bf41f83cf97787b7e923c8cf7824/lib/types/IntrinsicFilter.ts#L6)
19
+ [lib/types/IntrinsicFilter.ts:6](https://github.com/nevoland/quetch/blob/1cf615b166541d2a753e34c0a2dd4a9474026d7a/lib/types/IntrinsicFilter.ts#L6)
@@ -18,4 +18,4 @@ Returns the inferred item type of an array, or an alternative type if it is some
18
18
 
19
19
  ## Defined in
20
20
 
21
- [lib/types/Item.ts:4](https://github.com/nevoland/quetch/blob/94f546831241bf41f83cf97787b7e923c8cf7824/lib/types/Item.ts#L4)
21
+ [lib/types/Item.ts:4](https://github.com/nevoland/quetch/blob/1cf615b166541d2a753e34c0a2dd4a9474026d7a/lib/types/Item.ts#L4)
@@ -16,4 +16,4 @@
16
16
 
17
17
  ## Defined in
18
18
 
19
- [lib/types/Join.ts:1](https://github.com/nevoland/quetch/blob/94f546831241bf41f83cf97787b7e923c8cf7824/lib/types/Join.ts#L1)
19
+ [lib/types/Join.ts:1](https://github.com/nevoland/quetch/blob/1cf615b166541d2a753e34c0a2dd4a9474026d7a/lib/types/Join.ts#L1)
@@ -10,4 +10,4 @@
10
10
 
11
11
  ## Defined in
12
12
 
13
- [lib/types/Key.ts:1](https://github.com/nevoland/quetch/blob/94f546831241bf41f83cf97787b7e923c8cf7824/lib/types/Key.ts#L1)
13
+ [lib/types/Key.ts:1](https://github.com/nevoland/quetch/blob/1cf615b166541d2a753e34c0a2dd4a9474026d7a/lib/types/Key.ts#L1)
@@ -6,7 +6,7 @@
6
6
 
7
7
  # Type Alias: KeyFiltered\<T, P\>
8
8
 
9
- > **KeyFiltered**\<`T`, `P`\>: [`0`] *extends* [`1` & `T`] ? [`Key`](Key.md) \| `SymbolSelf` : `T` *extends* `string` \| `number` \| `boolean` \| `bigint` \| `symbol` ? `T` *extends* `P` ? `SymbolSelf` : `never` : `T` *extends* `object` ? keyof `{ [K in keyof T as Extract<T[K], P> extends never ? never : K]-?: T[K] }` : `never`
9
+ > **KeyFiltered**\<`T`, `P`\>: [`unknown`] *extends* [`T`] ? [`Key`](Key.md) \| `SymbolSelf` : [`0`] *extends* [`1` & `T`] ? [`Key`](Key.md) \| `SymbolSelf` : `T` *extends* `string` \| `number` \| `boolean` \| `bigint` \| `symbol` ? `T` *extends* `P` ? `SymbolSelf` : `never` : `T` *extends* `object` ? keyof `{ [K in keyof T as Extract<T[K], P> extends never ? never : K]-?: T[K] }` : `never`
10
10
 
11
11
  Returns union of keys whose mapped value extend the provided `P` type.
12
12
 
@@ -18,4 +18,4 @@ Returns union of keys whose mapped value extend the provided `P` type.
18
18
 
19
19
  ## Defined in
20
20
 
21
- [lib/types/KeyFiltered.ts:10](https://github.com/nevoland/quetch/blob/94f546831241bf41f83cf97787b7e923c8cf7824/lib/types/KeyFiltered.ts#L10)
21
+ [lib/types/KeyFiltered.ts:10](https://github.com/nevoland/quetch/blob/1cf615b166541d2a753e34c0a2dd4a9474026d7a/lib/types/KeyFiltered.ts#L10)
@@ -14,4 +14,4 @@
14
14
 
15
15
  ## Defined in
16
16
 
17
- [lib/types/KeyFromUnion.ts:1](https://github.com/nevoland/quetch/blob/94f546831241bf41f83cf97787b7e923c8cf7824/lib/types/KeyFromUnion.ts#L1)
17
+ [lib/types/KeyFromUnion.ts:1](https://github.com/nevoland/quetch/blob/1cf615b166541d2a753e34c0a2dd4a9474026d7a/lib/types/KeyFromUnion.ts#L1)
@@ -10,4 +10,4 @@
10
10
 
11
11
  ## Defined in
12
12
 
13
- [lib/types/Locale.ts:1](https://github.com/nevoland/quetch/blob/94f546831241bf41f83cf97787b7e923c8cf7824/lib/types/Locale.ts#L1)
13
+ [lib/types/Locale.ts:1](https://github.com/nevoland/quetch/blob/1cf615b166541d2a753e34c0a2dd4a9474026d7a/lib/types/Locale.ts#L1)
@@ -28,4 +28,4 @@ Handles an `input` query and returns an `output` promise.
28
28
 
29
29
  ## Defined in
30
30
 
31
- [lib/types/NextHandler.ts:4](https://github.com/nevoland/quetch/blob/94f546831241bf41f83cf97787b7e923c8cf7824/lib/types/NextHandler.ts#L4)
31
+ [lib/types/NextHandler.ts:4](https://github.com/nevoland/quetch/blob/1cf615b166541d2a753e34c0a2dd4a9474026d7a/lib/types/NextHandler.ts#L4)
@@ -0,0 +1,57 @@
1
+ [**quetch**](../README.md)
2
+
3
+ ***
4
+
5
+ [quetch](../README.md) / NormalizedPathFieldSettings
6
+
7
+ # Type Alias: NormalizedPathFieldSettings\<T\>
8
+
9
+ > **NormalizedPathFieldSettings**\<`T`\>: `object`
10
+
11
+ Settings for fields that contain path values of items, used for displaying items in a tree.
12
+
13
+ ## Type Parameters
14
+
15
+ • **T**
16
+
17
+ ## Type declaration
18
+
19
+ ### pathField?
20
+
21
+ > `optional` **pathField**: [`FieldFiltered`](FieldFiltered.md)\<`T`, `string`\>
22
+
23
+ Path to the field that contains the path value of an item, used for displaying items in a tree.
24
+
25
+ #### Default
26
+
27
+ ```ts
28
+ "path"
29
+ ```
30
+
31
+ ### pathFieldSeparator?
32
+
33
+ > `optional` **pathFieldSeparator**: `string`
34
+
35
+ Maps path fields to a string used to separate the path nodes of a field value.
36
+
37
+ #### Default
38
+
39
+ ```ts
40
+ "/"
41
+ ```
42
+
43
+ ### pathFieldSeparatorEscape?
44
+
45
+ > `optional` **pathFieldSeparatorEscape**: `string`
46
+
47
+ String used to escape the separator.
48
+
49
+ #### Default
50
+
51
+ ```ts
52
+ "\\"
53
+ ```
54
+
55
+ ## Defined in
56
+
57
+ [lib/types/NormalizedPathFieldSettings.ts:6](https://github.com/nevoland/quetch/blob/1cf615b166541d2a753e34c0a2dd4a9474026d7a/lib/types/NormalizedPathFieldSettings.ts#L6)
@@ -16,4 +16,4 @@ Order item.
16
16
 
17
17
  ## Defined in
18
18
 
19
- [lib/types/Order.ts:6](https://github.com/nevoland/quetch/blob/94f546831241bf41f83cf97787b7e923c8cf7824/lib/types/Order.ts#L6)
19
+ [lib/types/Order.ts:6](https://github.com/nevoland/quetch/blob/1cf615b166541d2a753e34c0a2dd4a9474026d7a/lib/types/Order.ts#L6)
@@ -24,4 +24,4 @@
24
24
 
25
25
  ## Defined in
26
26
 
27
- [lib/types/OrderNormalized.ts:3](https://github.com/nevoland/quetch/blob/94f546831241bf41f83cf97787b7e923c8cf7824/lib/types/OrderNormalized.ts#L3)
27
+ [lib/types/OrderNormalized.ts:3](https://github.com/nevoland/quetch/blob/1cf615b166541d2a753e34c0a2dd4a9474026d7a/lib/types/OrderNormalized.ts#L3)
@@ -10,4 +10,4 @@
10
10
 
11
11
  ## Defined in
12
12
 
13
- [lib/types/Parameters.ts:1](https://github.com/nevoland/quetch/blob/94f546831241bf41f83cf97787b7e923c8cf7824/lib/types/Parameters.ts#L1)
13
+ [lib/types/Parameters.ts:1](https://github.com/nevoland/quetch/blob/1cf615b166541d2a753e34c0a2dd4a9474026d7a/lib/types/Parameters.ts#L1)
@@ -6,14 +6,14 @@
6
6
 
7
7
  # Type Alias: Path\<T, D\>
8
8
 
9
- > **Path**\<`T`, `D`\>: [`0`] *extends* [`1` & `T`] ? readonly ([`Key`](Key.md) \| `never`)[] : `D` *extends* `-1` ? `never` : `T` *extends* [`Primitive`](Primitive.md) ? readonly `never`[] : `T` *extends* infer P[] ? readonly [`number`] \| readonly [`number`, `...Path<P, Increment<D>>`] : `T` *extends* `object` ? \{ \[K in keyof T\]: readonly \[K\] \| readonly \[K, ...(...)\] \}\[keyof `T`\] : `never`
9
+ > **Path**\<`T`, `D`\>: [`unknown`] *extends* [`T`] ? readonly ([`Key`](Key.md) \| `never`)[] : [`0`] *extends* [`1` & `T`] ? readonly ([`Key`](Key.md) \| `never`)[] : `D` *extends* `-1` ? `never` : `T` *extends* [`Primitive`](Primitive.md) ? readonly `never`[] : `T` *extends* infer P[] ? readonly [`number`] \| readonly [`number`, `...Path<P, Decrement<(...)>>`] : `T` *extends* `object` ? \{ \[K in keyof T\]: readonly \[(...)\] \| readonly \[(...), (...)\] \}\[keyof `T`\] : `never`
10
10
 
11
11
  ## Type Parameters
12
12
 
13
13
  • **T**
14
14
 
15
- • **D** = `7`
15
+ • **D** = [`DepthLimit`](DepthLimit.md)
16
16
 
17
17
  ## Defined in
18
18
 
19
- [lib/types/Path.ts:5](https://github.com/nevoland/quetch/blob/94f546831241bf41f83cf97787b7e923c8cf7824/lib/types/Path.ts#L5)
19
+ [lib/types/Path.ts:6](https://github.com/nevoland/quetch/blob/1cf615b166541d2a753e34c0a2dd4a9474026d7a/lib/types/Path.ts#L6)
@@ -6,7 +6,7 @@
6
6
 
7
7
  # Type Alias: PathFiltered\<T, P, D\>
8
8
 
9
- > **PathFiltered**\<`T`, `P`, `D`\>: [`0`] *extends* [`1` & `T`] ? readonly ([`Key`](Key.md) \| `never`)[] : `D` *extends* `-1` ? `never` : `T` *extends* `P` ? readonly `never`[] : `T` *extends* `ReadonlyArray`\<infer I\> ? `Extract`\<`I`, `P`\> *extends* `never` ? readonly [`number`, `...PathFiltered<I, P, Increment<D>>`] : readonly [`number`] : `T` *extends* `object` ? `{ [K in keyof T]: Extract<T[K], P> extends never ? readonly [K, ...(...)] : readonly [K] }`\[keyof `T`\] : `never`
9
+ > **PathFiltered**\<`T`, `P`, `D`\>: [`unknown`] *extends* [`T`] ? readonly ([`Key`](Key.md) \| `never`)[] : [`0`] *extends* [`1` & `T`] ? readonly ([`Key`](Key.md) \| `never`)[] : `D` *extends* `-1` ? `never` : `T` *extends* `P` ? readonly `never`[] : `T` *extends* `ReadonlyArray`\<infer I\> ? `Extract`\<`I`, `P`\> *extends* `never` ? readonly [`number`, `...PathFiltered<I, P, Decrement<(...)>>`] : readonly [`number`] : `T` *extends* `object` ? `{ [K in keyof T]: Extract<(...)[(...)], P> extends never ? readonly [(...), (...)] : readonly [(...)] }`\[keyof `T`\] : `never`
10
10
 
11
11
  ## Type Parameters
12
12
 
@@ -14,8 +14,8 @@
14
14
 
15
15
  • **P**
16
16
 
17
- • **D** = `7`
17
+ • **D** = [`DepthLimit`](DepthLimit.md)
18
18
 
19
19
  ## Defined in
20
20
 
21
- [lib/types/PathFiltered.ts:4](https://github.com/nevoland/quetch/blob/94f546831241bf41f83cf97787b7e923c8cf7824/lib/types/PathFiltered.ts#L4)
21
+ [lib/types/PathFiltered.ts:5](https://github.com/nevoland/quetch/blob/1cf615b166541d2a753e34c0a2dd4a9474026d7a/lib/types/PathFiltered.ts#L5)
@@ -10,4 +10,4 @@
10
10
 
11
11
  ## Defined in
12
12
 
13
- [lib/types/Primitive.ts:1](https://github.com/nevoland/quetch/blob/94f546831241bf41f83cf97787b7e923c8cf7824/lib/types/Primitive.ts#L1)
13
+ [lib/types/Primitive.ts:1](https://github.com/nevoland/quetch/blob/1cf615b166541d2a753e34c0a2dd4a9474026d7a/lib/types/Primitive.ts#L1)
@@ -10,4 +10,4 @@
10
10
 
11
11
  ## Defined in
12
12
 
13
- [lib/types/PrimitiveObject.ts:1](https://github.com/nevoland/quetch/blob/94f546831241bf41f83cf97787b7e923c8cf7824/lib/types/PrimitiveObject.ts#L1)
13
+ [lib/types/PrimitiveObject.ts:1](https://github.com/nevoland/quetch/blob/1cf615b166541d2a753e34c0a2dd4a9474026d7a/lib/types/PrimitiveObject.ts#L1)
@@ -16,4 +16,4 @@ Query that fetches or mutates an entity.
16
16
 
17
17
  ## Defined in
18
18
 
19
- [lib/types/Query.ts:14](https://github.com/nevoland/quetch/blob/94f546831241bf41f83cf97787b7e923c8cf7824/lib/types/Query.ts#L14)
19
+ [lib/types/Query.ts:14](https://github.com/nevoland/quetch/blob/1cf615b166541d2a753e34c0a2dd4a9474026d7a/lib/types/Query.ts#L14)
@@ -68,4 +68,4 @@ Query settings.
68
68
 
69
69
  ## Defined in
70
70
 
71
- [lib/types/QueryAggregate.ts:11](https://github.com/nevoland/quetch/blob/94f546831241bf41f83cf97787b7e923c8cf7824/lib/types/QueryAggregate.ts#L11)
71
+ [lib/types/QueryAggregate.ts:11](https://github.com/nevoland/quetch/blob/1cf615b166541d2a753e34c0a2dd4a9474026d7a/lib/types/QueryAggregate.ts#L11)
@@ -50,4 +50,4 @@ Value properties of the item to create.
50
50
 
51
51
  ## Defined in
52
52
 
53
- [lib/types/QueryCreate.ts:8](https://github.com/nevoland/quetch/blob/94f546831241bf41f83cf97787b7e923c8cf7824/lib/types/QueryCreate.ts#L8)
53
+ [lib/types/QueryCreate.ts:8](https://github.com/nevoland/quetch/blob/1cf615b166541d2a753e34c0a2dd4a9474026d7a/lib/types/QueryCreate.ts#L8)
@@ -48,4 +48,4 @@ Query settings.
48
48
 
49
49
  ## Defined in
50
50
 
51
- [lib/types/QueryCreateMultiple.ts:8](https://github.com/nevoland/quetch/blob/94f546831241bf41f83cf97787b7e923c8cf7824/lib/types/QueryCreateMultiple.ts#L8)
51
+ [lib/types/QueryCreateMultiple.ts:8](https://github.com/nevoland/quetch/blob/1cf615b166541d2a753e34c0a2dd4a9474026d7a/lib/types/QueryCreateMultiple.ts#L8)
@@ -60,4 +60,4 @@ Query settings.
60
60
 
61
61
  ## Defined in
62
62
 
63
- [lib/types/QueryDelete.ts:9](https://github.com/nevoland/quetch/blob/94f546831241bf41f83cf97787b7e923c8cf7824/lib/types/QueryDelete.ts#L9)
63
+ [lib/types/QueryDelete.ts:9](https://github.com/nevoland/quetch/blob/1cf615b166541d2a753e34c0a2dd4a9474026d7a/lib/types/QueryDelete.ts#L9)
@@ -62,4 +62,4 @@ Query settings.
62
62
 
63
63
  ## Defined in
64
64
 
65
- [lib/types/QueryDeleteMultiple.ts:9](https://github.com/nevoland/quetch/blob/94f546831241bf41f83cf97787b7e923c8cf7824/lib/types/QueryDeleteMultiple.ts#L9)
65
+ [lib/types/QueryDeleteMultiple.ts:9](https://github.com/nevoland/quetch/blob/1cf615b166541d2a753e34c0a2dd4a9474026d7a/lib/types/QueryDeleteMultiple.ts#L9)
@@ -12,4 +12,4 @@ Available query methods.
12
12
 
13
13
  ## Defined in
14
14
 
15
- [lib/types/QueryMethod.ts:6](https://github.com/nevoland/quetch/blob/94f546831241bf41f83cf97787b7e923c8cf7824/lib/types/QueryMethod.ts#L6)
15
+ [lib/types/QueryMethod.ts:6](https://github.com/nevoland/quetch/blob/1cf615b166541d2a753e34c0a2dd4a9474026d7a/lib/types/QueryMethod.ts#L6)
@@ -76,4 +76,4 @@ Query settings.
76
76
 
77
77
  ## Defined in
78
78
 
79
- [lib/types/QueryRead.ts:10](https://github.com/nevoland/quetch/blob/94f546831241bf41f83cf97787b7e923c8cf7824/lib/types/QueryRead.ts#L10)
79
+ [lib/types/QueryRead.ts:10](https://github.com/nevoland/quetch/blob/1cf615b166541d2a753e34c0a2dd4a9474026d7a/lib/types/QueryRead.ts#L10)
@@ -80,4 +80,4 @@ Query settings.
80
80
 
81
81
  ## Defined in
82
82
 
83
- [lib/types/QueryReadMultiple.ts:11](https://github.com/nevoland/quetch/blob/94f546831241bf41f83cf97787b7e923c8cf7824/lib/types/QueryReadMultiple.ts#L11)
83
+ [lib/types/QueryReadMultiple.ts:11](https://github.com/nevoland/quetch/blob/1cf615b166541d2a753e34c0a2dd4a9474026d7a/lib/types/QueryReadMultiple.ts#L11)
@@ -22,62 +22,68 @@ Settings to use when doing a query.
22
22
 
23
23
  Abort controller to abort the query.
24
24
 
25
- ### pathField?
26
-
27
- > `optional` **pathField**: [`FieldFiltered`](FieldFiltered.md)\<`T`, `string`\>
25
+ ### signal?
28
26
 
29
- Path to the field that contains the path value of an item, used for displaying items in a tree.
27
+ > `optional` **signal**: `AbortSignal`
30
28
 
31
- ### pathFieldSeparator?
29
+ Abort signal to abort the query.
32
30
 
33
- > `optional` **pathFieldSeparator**: `string`
31
+ ### transformFilterChildren()?
34
32
 
35
- Maps path fields to a string used to separate the path nodes of a field value.
33
+ > `optional` **transformFilterChildren**: (`filter`) => [`IntrinsicFilter`](IntrinsicFilter.md)\<`T`\>
36
34
 
37
- #### Default
35
+ Returns a filter that captures the items expressed by the provided `FilterChildren`. The return filter cannot use filters of type `FilterChildren` or `FilterContext`.
38
36
 
39
- ```ts
40
- "/"
41
- ```
37
+ #### Parameters
42
38
 
43
- ### pathFieldSeparatorEscape?
39
+ ##### filter
44
40
 
45
- > `optional` **pathFieldSeparatorEscape**: `string`
41
+ [`FilterChildren`](FilterChildren.md)\<`T`\>
46
42
 
47
- String used to escape the separator.
43
+ The provided `FilterChildren` to express.
48
44
 
49
- #### Default
45
+ #### Returns
50
46
 
51
- ```ts
52
- "\\"
53
- ```
47
+ [`IntrinsicFilter`](IntrinsicFilter.md)\<`T`\>
54
48
 
55
- ### signal?
49
+ A filter that captures the items expressed by the provided `FilterChildren`.
56
50
 
57
- > `optional` **signal**: `AbortSignal`
51
+ ### compareFieldValues()?
58
52
 
59
- Abort signal to abort the query.
53
+ Compares two values of a field for sorting purposes. If not provided, values are compared using the default comparison operators (`>`, `<`, `===`).
60
54
 
61
- ### transformFilterChildren()?
55
+ This function is called only when both `a` and `b` are defined and different. If it returns `undefined`, the default comparison operators are used as a fallback.
62
56
 
63
- > `optional` **transformFilterChildren**: (`filter`) => [`IntrinsicFilter`](IntrinsicFilter.md)\<`T`\>
57
+ #### Type Parameters
64
58
 
65
- Returns a filter that captures the items expressed by the provided `FilterChildren`. The return filter cannot use filters of type `FilterChildren` or `FilterContext`.
59
+ **T**
66
60
 
67
61
  #### Parameters
68
62
 
69
- ##### filter
63
+ ##### field
70
64
 
71
- [`FilterChildren`](FilterChildren.md)\<`T`\>
65
+ [`Field`](Field.md)\<`T`\>
72
66
 
73
- The provided `FilterChildren` to express.
67
+ The field for which the values are compared.
68
+
69
+ ##### a
70
+
71
+ `any`
72
+
73
+ The first value to compare.
74
+
75
+ ##### b
76
+
77
+ `any`
78
+
79
+ The second value to compare.
74
80
 
75
81
  #### Returns
76
82
 
77
- [`IntrinsicFilter`](IntrinsicFilter.md)\<`T`\>
83
+ `undefined` \| `0` \| `1` \| `-1`
78
84
 
79
- A filter that captures the items expressed by the provided `FilterChildren`.
85
+ `-1` if `a` should be sorted before `b`, `1` if `a` should be sorted after `b`, `0` if they are considered equal, or `undefined` to use the default comparison operators.
80
86
 
81
87
  ## Defined in
82
88
 
83
- [lib/types/QuerySettings.ts:8](https://github.com/nevoland/quetch/blob/94f546831241bf41f83cf97787b7e923c8cf7824/lib/types/QuerySettings.ts#L8)
89
+ [lib/types/QuerySettings.ts:8](https://github.com/nevoland/quetch/blob/1cf615b166541d2a753e34c0a2dd4a9474026d7a/lib/types/QuerySettings.ts#L8)
@@ -68,4 +68,4 @@ Partial property values to update.
68
68
 
69
69
  ## Defined in
70
70
 
71
- [lib/types/QueryUpdate.ts:9](https://github.com/nevoland/quetch/blob/94f546831241bf41f83cf97787b7e923c8cf7824/lib/types/QueryUpdate.ts#L9)
71
+ [lib/types/QueryUpdate.ts:9](https://github.com/nevoland/quetch/blob/1cf615b166541d2a753e34c0a2dd4a9474026d7a/lib/types/QueryUpdate.ts#L9)
@@ -74,4 +74,4 @@ Partial property values to update.
74
74
 
75
75
  ## Defined in
76
76
 
77
- [lib/types/QueryUpdateMultiple.ts:10](https://github.com/nevoland/quetch/blob/94f546831241bf41f83cf97787b7e923c8cf7824/lib/types/QueryUpdateMultiple.ts#L10)
77
+ [lib/types/QueryUpdateMultiple.ts:10](https://github.com/nevoland/quetch/blob/1cf615b166541d2a753e34c0a2dd4a9474026d7a/lib/types/QueryUpdateMultiple.ts#L10)
@@ -16,4 +16,4 @@
16
16
 
17
17
  ## Defined in
18
18
 
19
- [lib/types/Result.ts:20](https://github.com/nevoland/quetch/blob/94f546831241bf41f83cf97787b7e923c8cf7824/lib/types/Result.ts#L20)
19
+ [lib/types/Result.ts:20](https://github.com/nevoland/quetch/blob/1cf615b166541d2a753e34c0a2dd4a9474026d7a/lib/types/Result.ts#L20)
@@ -68,4 +68,4 @@
68
68
 
69
69
  ## Defined in
70
70
 
71
- [lib/types/Store.ts:2](https://github.com/nevoland/quetch/blob/94f546831241bf41f83cf97787b7e923c8cf7824/lib/types/Store.ts#L2)
71
+ [lib/types/Store.ts:2](https://github.com/nevoland/quetch/blob/1cf615b166541d2a753e34c0a2dd4a9474026d7a/lib/types/Store.ts#L2)
@@ -36,4 +36,4 @@ Path leading to the value.
36
36
 
37
37
  ## Defined in
38
38
 
39
- [lib/types/Value.ts:6](https://github.com/nevoland/quetch/blob/94f546831241bf41f83cf97787b7e923c8cf7824/lib/types/Value.ts#L6)
39
+ [lib/types/Value.ts:6](https://github.com/nevoland/quetch/blob/1cf615b166541d2a753e34c0a2dd4a9474026d7a/lib/types/Value.ts#L6)
@@ -18,4 +18,4 @@ Maps the properties of the provided value `T` to a specific value `V`.
18
18
 
19
19
  ## Defined in
20
20
 
21
- [lib/types/ValueMap.ts:6](https://github.com/nevoland/quetch/blob/94f546831241bf41f83cf97787b7e923c8cf7824/lib/types/ValueMap.ts#L6)
21
+ [lib/types/ValueMap.ts:6](https://github.com/nevoland/quetch/blob/1cf615b166541d2a753e34c0a2dd4a9474026d7a/lib/types/ValueMap.ts#L6)
@@ -10,4 +10,4 @@
10
10
 
11
11
  ## Defined in
12
12
 
13
- [lib/constants/CACHE.ts:1](https://github.com/nevoland/quetch/blob/94f546831241bf41f83cf97787b7e923c8cf7824/lib/constants/CACHE.ts#L1)
13
+ [lib/constants/CACHE.ts:1](https://github.com/nevoland/quetch/blob/1cf615b166541d2a753e34c0a2dd4a9474026d7a/lib/constants/CACHE.ts#L1)
@@ -16,4 +16,4 @@
16
16
 
17
17
  ## Defined in
18
18
 
19
- [lib/constants/FILTER\_ANY.ts:1](https://github.com/nevoland/quetch/blob/94f546831241bf41f83cf97787b7e923c8cf7824/lib/constants/FILTER_ANY.ts#L1)
19
+ [lib/constants/FILTER\_ANY.ts:1](https://github.com/nevoland/quetch/blob/1cf615b166541d2a753e34c0a2dd4a9474026d7a/lib/constants/FILTER_ANY.ts#L1)
@@ -16,4 +16,4 @@
16
16
 
17
17
  ## Defined in
18
18
 
19
- [lib/constants/FILTER\_NONE.ts:1](https://github.com/nevoland/quetch/blob/94f546831241bf41f83cf97787b7e923c8cf7824/lib/constants/FILTER_NONE.ts#L1)
19
+ [lib/constants/FILTER\_NONE.ts:1](https://github.com/nevoland/quetch/blob/1cf615b166541d2a753e34c0a2dd4a9474026d7a/lib/constants/FILTER_NONE.ts#L1)
@@ -10,4 +10,4 @@
10
10
 
11
11
  ## Defined in
12
12
 
13
- [lib/constants/SELF.ts:1](https://github.com/nevoland/quetch/blob/94f546831241bf41f83cf97787b7e923c8cf7824/lib/constants/SELF.ts#L1)
13
+ [lib/constants/SELF.ts:1](https://github.com/nevoland/quetch/blob/1cf615b166541d2a753e34c0a2dd4a9474026d7a/lib/constants/SELF.ts#L1)
@@ -0,0 +1,46 @@
1
+ import { EMPTY_OBJECT } from "unchangeable";
2
+
3
+ import type {
4
+ FieldFiltered,
5
+ NormalizedPathFieldSettings,
6
+ QuerySettings,
7
+ } from "../types";
8
+
9
+ import { escapeRegex } from "./escapeRegex.js";
10
+ import { sameField } from "./sameField.js";
11
+
12
+ /**
13
+ * Returns a function that transforms a `FilterChildren` into a `FilterStringMatch`.
14
+ *
15
+ * @param options - Options for the transformer.
16
+ * @returns A function that takes a `FilterChildren` and returns a `FilterStringMatch` that matches the paths of the children of the item specified in the `FilterChildren`.
17
+ */
18
+ export function comparatorFieldValues<T>({
19
+ pathField = "path" as FieldFiltered<T, string>,
20
+ pathFieldSeparator = "/",
21
+ pathFieldSeparatorEscape = "\\",
22
+ }: NormalizedPathFieldSettings<T> = EMPTY_OBJECT): QuerySettings<T>["compareFieldValues"] {
23
+ const fieldSeparatorRegexp = new RegExp(
24
+ !pathFieldSeparatorEscape
25
+ ? escapeRegex(pathFieldSeparator)
26
+ : `(?<!${escapeRegex(pathFieldSeparatorEscape)})${escapeRegex(pathFieldSeparator)}`,
27
+ "g",
28
+ );
29
+ return (field, a, b) => {
30
+ if (!sameField(field, pathField)) {
31
+ return undefined;
32
+ }
33
+ const normalizedA = (a as string).replaceAll?.(
34
+ fieldSeparatorRegexp,
35
+ "\x00",
36
+ );
37
+ const normalizedB = (b as string).replaceAll?.(
38
+ fieldSeparatorRegexp,
39
+ "\x00",
40
+ );
41
+ if (normalizedA > normalizedB) {
42
+ return 1;
43
+ }
44
+ return -1;
45
+ };
46
+ }
package/lib/tools/get.ts CHANGED
@@ -1,5 +1,7 @@
1
1
  import { SELF } from "../constants/SELF.js";
2
- import type { Get, Path } from "../types";
2
+ import type { Field, Get } from "../types";
3
+
4
+ const { isArray } = Array;
3
5
 
4
6
  /**
5
7
  * Gets the property value of the given `value` at the specified `path` (an array of object property names or array indexes).
@@ -7,11 +9,11 @@ import type { Get, Path } from "../types";
7
9
  * If the `path` is a string, it is considered as a path with one item.
8
10
  * If the `path` leads to an unknown property, returns `undefined`.
9
11
  *
10
- * @param value The value from which to get the property value.
11
- * @param path The path leading to the property value or a property name or `undefined`.
12
+ * @param value - The value from which to get the property value.
13
+ * @param path - The path leading to the property value or a property name or `undefined`.
12
14
  * @returns The property value found at the given path, or `undefined` if it cannot be found.
13
15
  */
14
- export function get<const T, const P extends Path<T> | keyof T>(
16
+ export function get<const T, const P extends Field<T>>(
15
17
  value: T,
16
18
  path?: P,
17
19
  ): Get<T, P> {
@@ -24,6 +26,9 @@ export function get<const T, const P extends Path<T> | keyof T>(
24
26
  case "symbol":
25
27
  return (value as any)?.[path];
26
28
  default: {
29
+ if (!isArray(path)) {
30
+ return value as any;
31
+ }
27
32
  switch (path.length as number) {
28
33
  case 0:
29
34
  return value as any;
@@ -0,0 +1,20 @@
1
+ import { EMPTY_OBJECT } from "unchangeable";
2
+
3
+ import type { NormalizedPathFieldSettings, QuerySettings } from "../types";
4
+
5
+ import { comparatorFieldValues } from "./comparatorFieldValues.js";
6
+ import { transformerFilterChildren } from "./transformerFilterChildren.js";
7
+ /**
8
+ * Returns query settings for path fields.
9
+ *
10
+ * @param settings - Settings for normalizing path fields.
11
+ * @returns Query settings for path fields.
12
+ */
13
+ export function querySettings<T>(
14
+ settings: NormalizedPathFieldSettings<T> = EMPTY_OBJECT,
15
+ ): QuerySettings<T> {
16
+ return {
17
+ compareFieldValues: comparatorFieldValues(settings),
18
+ transformFilterChildren: transformerFilterChildren(settings),
19
+ };
20
+ }
@@ -1,5 +1,6 @@
1
1
  import { expect, test } from "vitest";
2
2
 
3
+ import { querySettings } from "./querySettings.js";
3
4
  import { sortItemList } from "./sortItemList.js";
4
5
 
5
6
  test("sorts items", () => {
@@ -76,10 +77,7 @@ test("sorts items with separator setting", () => {
76
77
  { path: "a\\/b.c" },
77
78
  { path: "a.b/c" },
78
79
  ],
79
- {
80
- pathField: "path",
81
- pathFieldSeparator: "/",
82
- },
80
+ querySettings(),
83
81
  ),
84
82
  ).toEqual([
85
83
  { path: "a" },
@@ -104,10 +102,7 @@ test("sorts items with separator setting", () => {
104
102
  { path: "a\\/b.c" },
105
103
  { path: "a.b/c" },
106
104
  ],
107
- {
108
- pathField: "path",
109
- pathFieldSeparator: "/",
110
- },
105
+ querySettings(),
111
106
  ),
112
107
  ).toEqual([
113
108
  { path: "a" },
@@ -119,4 +114,32 @@ test("sorts items with separator setting", () => {
119
114
  { path: "a.b.c" },
120
115
  { path: "a\\/b.c" },
121
116
  ]);
117
+
118
+ expect(
119
+ sortItemList(
120
+ [{ descending: false, field: "path" }],
121
+ [
122
+ { path: "a" },
123
+ { path: "a/b" },
124
+ { path: "a.b" },
125
+ { path: "a/b/c" },
126
+ { path: "a.b.c" },
127
+ { path: "a/b.c" },
128
+ { path: "a\\.b.c" },
129
+ { path: "a.b/c" },
130
+ ],
131
+ querySettings({
132
+ pathFieldSeparator: ".",
133
+ }),
134
+ ),
135
+ ).toEqual([
136
+ { path: "a" },
137
+ { path: "a.b" },
138
+ { path: "a.b.c" },
139
+ { path: "a.b/c" },
140
+ { path: "a/b" },
141
+ { path: "a/b.c" },
142
+ { path: "a/b/c" },
143
+ { path: "a\\.b.c" },
144
+ ]);
122
145
  });