quetch 0.16.3 → 0.18.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/tools/filterFromContext.js +41 -5
- package/dist/tools/filterFromContext.js.map +1 -1
- package/dist/tools/normalizeOrder.js +1 -1
- package/dist/tools/normalizeOrder.js.map +1 -1
- package/dist/tools/queryItemList.d.ts +1 -1
- package/dist/tools/queryItemList.js.map +1 -1
- package/dist/tools/sortItemList.d.ts +1 -1
- package/dist/tools/sortItemList.js.map +1 -1
- package/dist/types/FilterGroup.d.ts +2 -2
- package/dist/types/FilterStringIntersect.d.ts +1 -1
- package/dist/types/Locale.d.ts +1 -1
- package/dist/types/Parameters.d.ts +1 -1
- package/dist/types/Path.d.ts +1 -1
- package/dist/types/PathFiltered.d.ts +2 -2
- package/dist/types/QueryAggregate.d.ts +1 -1
- package/dist/types/QueryCreateMultiple.d.ts +1 -1
- package/dist/types/QueryRead.d.ts +1 -1
- package/dist/types/QueryReadMultiple.d.ts +2 -2
- package/dist/types/QueryUpdateMultiple.d.ts +1 -1
- package/dist/types/Result.d.ts +2 -2
- package/lib/tools/filterFromContext.test.ts +41 -0
- package/lib/tools/filterFromContext.ts +47 -5
- package/lib/tools/normalizeOrder.ts +1 -1
- package/lib/tools/queryItemList.ts +2 -2
- package/lib/tools/sortItemList.ts +2 -2
- package/lib/types/FilterGroup.ts +2 -2
- package/lib/types/FilterStringIntersect.ts +1 -1
- package/lib/types/Locale.ts +1 -1
- package/lib/types/Parameters.ts +4 -1
- package/lib/types/Path.ts +1 -1
- package/lib/types/PathFiltered.ts +5 -5
- package/lib/types/QueryAggregate.ts +1 -1
- package/lib/types/QueryCreateMultiple.ts +1 -1
- package/lib/types/QueryRead.ts +1 -1
- package/lib/types/QueryReadMultiple.ts +2 -2
- package/lib/types/QueryUpdateMultiple.ts +1 -1
- package/lib/types/Result.ts +3 -2
- package/package.json +1 -1
|
@@ -1,12 +1,48 @@
|
|
|
1
|
+
import { EMPTY_ARRAY } from "unchangeable";
|
|
1
2
|
const { entries } = Object;
|
|
2
3
|
export function filterFromContext(context) {
|
|
3
4
|
return {
|
|
4
5
|
operator: "all",
|
|
5
|
-
value:
|
|
6
|
-
field,
|
|
7
|
-
operator: "equal",
|
|
8
|
-
value,
|
|
9
|
-
})),
|
|
6
|
+
value: criteria(context),
|
|
10
7
|
};
|
|
11
8
|
}
|
|
9
|
+
function criteria(context, path = EMPTY_ARRAY) {
|
|
10
|
+
return entries(context).flatMap(([field, value]) => {
|
|
11
|
+
switch (typeof value) {
|
|
12
|
+
case "bigint":
|
|
13
|
+
case "string":
|
|
14
|
+
case "number":
|
|
15
|
+
case "boolean":
|
|
16
|
+
case "symbol":
|
|
17
|
+
case "undefined":
|
|
18
|
+
return [
|
|
19
|
+
{
|
|
20
|
+
field: path.length === 0 ? field : [...path, field],
|
|
21
|
+
operator: "equal",
|
|
22
|
+
value,
|
|
23
|
+
},
|
|
24
|
+
];
|
|
25
|
+
case "object":
|
|
26
|
+
return criteria(value, [...path, field]);
|
|
27
|
+
default:
|
|
28
|
+
return EMPTY_ARRAY;
|
|
29
|
+
// Ignore
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
/*
|
|
34
|
+
|
|
35
|
+
{
|
|
36
|
+
filter: {
|
|
37
|
+
field: "a"
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
{
|
|
42
|
+
operator: "equal",
|
|
43
|
+
field: ["filter", "field"],
|
|
44
|
+
value: "a"
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
*/
|
|
12
48
|
//# sourceMappingURL=filterFromContext.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filterFromContext.js","sourceRoot":"","sources":["../../lib/tools/filterFromContext.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"filterFromContext.js","sourceRoot":"","sources":["../../lib/tools/filterFromContext.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAI3C,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC;AAE3B,MAAM,UAAU,iBAAiB,CAC/B,OAAmB;IAEnB,OAAO;QACL,QAAQ,EAAE,KAAK;QACf,KAAK,EAAE,QAAQ,CAAC,OAAO,CAAgB;KACxC,CAAC;AACJ,CAAC;AAED,SAAS,QAAQ,CACf,OAAe,EACf,OAA0B,WAAW;IAErC,OAAO,OAAO,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE;QACjD,QAAQ,OAAO,KAAK,EAAE,CAAC;YACrB,KAAK,QAAQ,CAAC;YACd,KAAK,QAAQ,CAAC;YACd,KAAK,QAAQ,CAAC;YACd,KAAK,SAAS,CAAC;YACf,KAAK,QAAQ,CAAC;YACd,KAAK,WAAW;gBACd,OAAO;oBACL;wBACE,KAAK,EAAE,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,EAAE,KAAK,CAAC;wBACnD,QAAQ,EAAE,OAAO;wBACjB,KAAK;qBACN;iBACF,CAAC;YACJ,KAAK,QAAQ;gBACX,OAAO,QAAQ,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;YAC3C;gBACE,OAAO,WAAW,CAAC;YACrB,SAAS;QACX,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;;;;;;;EAcE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"normalizeOrder.js","sourceRoot":"","sources":["../../lib/tools/normalizeOrder.ts"],"names":[],"mappings":"AAEA,MAAM,
|
|
1
|
+
{"version":3,"file":"normalizeOrder.js","sourceRoot":"","sources":["../../lib/tools/normalizeOrder.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,GAAG,KAAK,CAAC,OAAkD,CAAC;AAEzE;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAC5B,KAAe;IAKf,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAChD,OAAO;YACL,KAAK,EAAE,KAAY;YACnB,UAAU,EAAE,KAAK;SAClB,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queryItemList.js","sourceRoot":"","sources":["../../lib/tools/queryItemList.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAS5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,SAAS,qBAAqB,CAC5B,OAAoB,EACpB,MAAkB;IAElB,IAAI,OAAO,KAAK,SAAS,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QAClD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,OAAO,MAAM,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;IACvC,CAAC;IACD,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,OAAO,iBAAiB,CAAC,OAAO,CAAC,CAAC;IACpC,CAAC;IACD,OAAO;QACL,QAAQ,EAAE,KAAK;QACf,KAAK,EAAE,CAAC,iBAAiB,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;KAC5C,CAAC;AACJ,CAAC;AAED,SAAS,mBAAmB,CAC1B,UAAgC;IAEhC,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE,CAAC;QACnC,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC;IAClC,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAC3B,
|
|
1
|
+
{"version":3,"file":"queryItemList.js","sourceRoot":"","sources":["../../lib/tools/queryItemList.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,4 +6,4 @@ import type { Order } from "../types";
|
|
|
6
6
|
* @param value The array to sort.
|
|
7
7
|
* @returns A new sorted array.
|
|
8
8
|
*/
|
|
9
|
-
export declare function sortItemList<T extends object>(orderList: Order<T>[] | undefined, value: T[]): T[];
|
|
9
|
+
export declare function sortItemList<T extends object>(orderList: readonly Order<T>[] | undefined, value: readonly T[]): readonly T[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sortItemList.js","sourceRoot":"","sources":["../../lib/tools/sortItemList.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAC1B,
|
|
1
|
+
{"version":3,"file":"sortItemList.js","sourceRoot":"","sources":["../../lib/tools/sortItemList.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAC1B,SAA0C,EAC1C,KAAmB;IAEnB,IAAI,SAAS,KAAK,SAAS,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,eAAe,GAAG,SAAS,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IACtD,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QAC9B,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,eAAe,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;YAC5D,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,eAAe,CAAC,KAAK,CAAE,CAAC;YACtD,MAAM,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;YAC7B,MAAM,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;YAC7B,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;gBACtB,SAAS;YACX,CAAC;YACD,IAAI,MAAM,GAAG,MAAM,EAAE,CAAC;gBACpB,OAAO,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC7B,CAAC;YACD,OAAO,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7B,CAAC;QACD,OAAO,CAAC,CAAC;IACX,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -10,7 +10,7 @@ export type FilterGroup<T extends object> = {
|
|
|
10
10
|
/**
|
|
11
11
|
* Filters to join.
|
|
12
12
|
*/
|
|
13
|
-
value: Filter<T>[];
|
|
13
|
+
value: readonly Filter<T>[];
|
|
14
14
|
} | {
|
|
15
15
|
/**
|
|
16
16
|
* Boolean operator to use for joining the filters.
|
|
@@ -19,5 +19,5 @@ export type FilterGroup<T extends object> = {
|
|
|
19
19
|
/**
|
|
20
20
|
* Filters to join.
|
|
21
21
|
*/
|
|
22
|
-
value?: Filter<T>[];
|
|
22
|
+
value?: readonly Filter<T>[];
|
|
23
23
|
};
|
package/dist/types/Locale.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export type Locale = string | string[];
|
|
1
|
+
export type Locale = string | readonly string[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export type Parameters = Record<string, string | string[] | number | number[]>;
|
|
1
|
+
export type Parameters = Record<string, string | readonly string[] | number | readonly number[]>;
|
package/dist/types/Path.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import type { Increment } from "./Increment";
|
|
2
|
-
export type Path<T, D = 0> = D extends 4 ? never : T extends Array<infer P> ? [number] | [number, ...Path<P, Increment<D>>] : T extends object ? {
|
|
2
|
+
export type Path<T, D = 0> = D extends 4 ? never : T extends Array<infer P> ? readonly [number] | readonly [number, ...Path<P, Increment<D>>] : T extends object ? {
|
|
3
3
|
[K in keyof T]-?: [K] | [K, ...Path<T[K], Increment<D>>];
|
|
4
4
|
}[keyof T] : never;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import type { Increment } from "./Increment";
|
|
2
|
-
export type PathFiltered<T, P, D = 0> = D extends 4 ? never : T extends
|
|
3
|
-
[K in keyof T]-?: T[K] extends P ? [K] : [K, ...PathFiltered<T[K], P, Increment<D>>];
|
|
2
|
+
export type PathFiltered<T, P, D = 0> = D extends 4 ? never : T extends ReadonlyArray<infer I> ? I extends P ? readonly [number] : readonly [number, ...PathFiltered<I, P, Increment<D>>] : T extends object ? {
|
|
3
|
+
[K in keyof T]-?: T[K] extends P ? readonly [K] : readonly [K, ...PathFiltered<T[K], P, Increment<D>>];
|
|
4
4
|
}[keyof T] : never;
|
|
@@ -11,7 +11,7 @@ export type QueryCreateMultiple<T extends object> = {
|
|
|
11
11
|
* Common item properties to use for identifying the context in which to create the items.
|
|
12
12
|
*/
|
|
13
13
|
context?: Context<T>;
|
|
14
|
-
value: Partial<T>[];
|
|
14
|
+
value: readonly Partial<T>[];
|
|
15
15
|
/**
|
|
16
16
|
* Query parameters.
|
|
17
17
|
*/
|
|
@@ -33,11 +33,11 @@ export type QueryReadMultiple<T extends object> = {
|
|
|
33
33
|
/**
|
|
34
34
|
* Order by which the items should be sorted.
|
|
35
35
|
*/
|
|
36
|
-
order?: Order<T>[];
|
|
36
|
+
order?: readonly Order<T>[];
|
|
37
37
|
/**
|
|
38
38
|
* Groups items by specified fields.
|
|
39
39
|
*/
|
|
40
|
-
group?: Group<T>[];
|
|
40
|
+
group?: readonly Group<T>[];
|
|
41
41
|
/**
|
|
42
42
|
* Query parameters.
|
|
43
43
|
*/
|
package/dist/types/Result.d.ts
CHANGED
|
@@ -19,8 +19,8 @@ export type Result<T extends object, Q extends Query<T>> = [Q] extends [
|
|
|
19
19
|
}
|
|
20
20
|
] ? [Q] extends [{
|
|
21
21
|
multiple: true;
|
|
22
|
-
}] ? ResultRead<T, Q>[] : ResultRead<T, Q> : [Q] extends [{
|
|
22
|
+
}] ? readonly ResultRead<T, Q>[] : ResultRead<T, Q> : [Q] extends [{
|
|
23
23
|
method: "aggregate";
|
|
24
24
|
}] ? number : [Q] extends [{
|
|
25
25
|
multiple: true;
|
|
26
|
-
}] ? ResultRead<T, Q>[] : ResultRead<T, Q>;
|
|
26
|
+
}] ? readonly ResultRead<T, Q>[] : ResultRead<T, Q>;
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { expect, test } from "vitest";
|
|
2
|
+
|
|
3
|
+
import { filterFromContext } from "./filterFromContext.js";
|
|
4
|
+
|
|
5
|
+
test("returns filter from context", () => {
|
|
6
|
+
expect(filterFromContext({ a: 1 })).toEqual({
|
|
7
|
+
operator: "all",
|
|
8
|
+
value: [
|
|
9
|
+
{
|
|
10
|
+
field: "a",
|
|
11
|
+
operator: "equal",
|
|
12
|
+
value: 1,
|
|
13
|
+
},
|
|
14
|
+
],
|
|
15
|
+
});
|
|
16
|
+
expect(filterFromContext({ a: { b: 1 } })).toEqual({
|
|
17
|
+
operator: "all",
|
|
18
|
+
value: [
|
|
19
|
+
{
|
|
20
|
+
field: ["a", "b"],
|
|
21
|
+
operator: "equal",
|
|
22
|
+
value: 1,
|
|
23
|
+
},
|
|
24
|
+
],
|
|
25
|
+
});
|
|
26
|
+
expect(filterFromContext({ a: { b: 1 }, c: 2 })).toEqual({
|
|
27
|
+
operator: "all",
|
|
28
|
+
value: [
|
|
29
|
+
{
|
|
30
|
+
field: ["a", "b"],
|
|
31
|
+
operator: "equal",
|
|
32
|
+
value: 1,
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
field: "c",
|
|
36
|
+
operator: "equal",
|
|
37
|
+
value: 2,
|
|
38
|
+
},
|
|
39
|
+
],
|
|
40
|
+
});
|
|
41
|
+
});
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { EMPTY_ARRAY } from "unchangeable";
|
|
2
|
+
|
|
1
3
|
import type { Context, Filter } from "../types";
|
|
2
4
|
|
|
3
5
|
const { entries } = Object;
|
|
@@ -7,10 +9,50 @@ export function filterFromContext<T extends object>(
|
|
|
7
9
|
): Filter<T> {
|
|
8
10
|
return {
|
|
9
11
|
operator: "all",
|
|
10
|
-
value:
|
|
11
|
-
field,
|
|
12
|
-
operator: "equal",
|
|
13
|
-
value,
|
|
14
|
-
})) as Filter<T>[],
|
|
12
|
+
value: criteria(context) as Filter<T>[],
|
|
15
13
|
};
|
|
16
14
|
}
|
|
15
|
+
|
|
16
|
+
function criteria<T extends object>(
|
|
17
|
+
context: object,
|
|
18
|
+
path: readonly string[] = EMPTY_ARRAY,
|
|
19
|
+
): readonly Filter<T>[] {
|
|
20
|
+
return entries(context).flatMap(([field, value]) => {
|
|
21
|
+
switch (typeof value) {
|
|
22
|
+
case "bigint":
|
|
23
|
+
case "string":
|
|
24
|
+
case "number":
|
|
25
|
+
case "boolean":
|
|
26
|
+
case "symbol":
|
|
27
|
+
case "undefined":
|
|
28
|
+
return [
|
|
29
|
+
{
|
|
30
|
+
field: path.length === 0 ? field : [...path, field],
|
|
31
|
+
operator: "equal",
|
|
32
|
+
value,
|
|
33
|
+
},
|
|
34
|
+
];
|
|
35
|
+
case "object":
|
|
36
|
+
return criteria(value, [...path, field]);
|
|
37
|
+
default:
|
|
38
|
+
return EMPTY_ARRAY;
|
|
39
|
+
// Ignore
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/*
|
|
45
|
+
|
|
46
|
+
{
|
|
47
|
+
filter: {
|
|
48
|
+
field: "a"
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
{
|
|
53
|
+
operator: "equal",
|
|
54
|
+
field: ["filter", "field"],
|
|
55
|
+
value: "a"
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
*/
|
|
@@ -46,9 +46,9 @@ function normalizeAggregator<T extends object>(
|
|
|
46
46
|
* @returns The result of the query.
|
|
47
47
|
*/
|
|
48
48
|
export function queryItemList<T extends object, const Q extends Query<T>>(
|
|
49
|
-
query: Q & { type: T[] },
|
|
49
|
+
query: Q & { type: readonly T[] },
|
|
50
50
|
): Result<T, Q> {
|
|
51
|
-
const data = query.type
|
|
51
|
+
const data = query.type;
|
|
52
52
|
switch (query.method) {
|
|
53
53
|
case "read":
|
|
54
54
|
case undefined: {
|
|
@@ -11,8 +11,8 @@ import { normalizeOrder } from "./normalizeOrder.js";
|
|
|
11
11
|
* @returns A new sorted array.
|
|
12
12
|
*/
|
|
13
13
|
export function sortItemList<T extends object>(
|
|
14
|
-
orderList: Order<T>[] | undefined,
|
|
15
|
-
value: T[],
|
|
14
|
+
orderList: readonly Order<T>[] | undefined,
|
|
15
|
+
value: readonly T[],
|
|
16
16
|
) {
|
|
17
17
|
if (orderList === undefined || orderList.length === 0) {
|
|
18
18
|
return value;
|
package/lib/types/FilterGroup.ts
CHANGED
|
@@ -12,7 +12,7 @@ export type FilterGroup<T extends object> =
|
|
|
12
12
|
/**
|
|
13
13
|
* Filters to join.
|
|
14
14
|
*/
|
|
15
|
-
value: Filter<T>[];
|
|
15
|
+
value: readonly Filter<T>[];
|
|
16
16
|
}
|
|
17
17
|
| {
|
|
18
18
|
/**
|
|
@@ -22,5 +22,5 @@ export type FilterGroup<T extends object> =
|
|
|
22
22
|
/**
|
|
23
23
|
* Filters to join.
|
|
24
24
|
*/
|
|
25
|
-
value?: Filter<T>[];
|
|
25
|
+
value?: readonly Filter<T>[];
|
|
26
26
|
};
|
package/lib/types/Locale.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export type Locale = string | string[];
|
|
1
|
+
export type Locale = string | readonly string[];
|
package/lib/types/Parameters.ts
CHANGED
package/lib/types/Path.ts
CHANGED
|
@@ -3,7 +3,7 @@ import type { Increment } from "./Increment";
|
|
|
3
3
|
export type Path<T, D = 0> = D extends 4
|
|
4
4
|
? never
|
|
5
5
|
: T extends Array<infer P>
|
|
6
|
-
? [number] | [number, ...Path<P, Increment<D>>]
|
|
6
|
+
? readonly [number] | readonly [number, ...Path<P, Increment<D>>]
|
|
7
7
|
: T extends object
|
|
8
8
|
? {
|
|
9
9
|
[K in keyof T]-?: [K] | [K, ...Path<T[K], Increment<D>>];
|
|
@@ -2,14 +2,14 @@ import type { Increment } from "./Increment";
|
|
|
2
2
|
|
|
3
3
|
export type PathFiltered<T, P, D = 0> = D extends 4
|
|
4
4
|
? never
|
|
5
|
-
: T extends
|
|
5
|
+
: T extends ReadonlyArray<infer I>
|
|
6
6
|
? I extends P
|
|
7
|
-
? [number]
|
|
8
|
-
: [number, ...PathFiltered<I, P, Increment<D>>]
|
|
7
|
+
? readonly [number]
|
|
8
|
+
: readonly [number, ...PathFiltered<I, P, Increment<D>>]
|
|
9
9
|
: T extends object
|
|
10
10
|
? {
|
|
11
11
|
[K in keyof T]-?: T[K] extends P
|
|
12
|
-
? [K]
|
|
13
|
-
: [K, ...PathFiltered<T[K], P, Increment<D>>];
|
|
12
|
+
? readonly [K]
|
|
13
|
+
: readonly [K, ...PathFiltered<T[K], P, Increment<D>>];
|
|
14
14
|
}[keyof T]
|
|
15
15
|
: never;
|
|
@@ -12,7 +12,7 @@ export type QueryCreateMultiple<T extends object> = {
|
|
|
12
12
|
* Common item properties to use for identifying the context in which to create the items.
|
|
13
13
|
*/
|
|
14
14
|
context?: Context<T>;
|
|
15
|
-
value: Partial<T>[];
|
|
15
|
+
value: readonly Partial<T>[];
|
|
16
16
|
/**
|
|
17
17
|
* Query parameters.
|
|
18
18
|
*/
|
package/lib/types/QueryRead.ts
CHANGED
|
@@ -34,11 +34,11 @@ export type QueryReadMultiple<T extends object> = {
|
|
|
34
34
|
/**
|
|
35
35
|
* Order by which the items should be sorted.
|
|
36
36
|
*/
|
|
37
|
-
order?: Order<T>[];
|
|
37
|
+
order?: readonly Order<T>[];
|
|
38
38
|
/**
|
|
39
39
|
* Groups items by specified fields.
|
|
40
40
|
*/
|
|
41
|
-
group?: Group<T>[];
|
|
41
|
+
group?: readonly Group<T>[];
|
|
42
42
|
/**
|
|
43
43
|
* Query parameters.
|
|
44
44
|
*/
|
package/lib/types/Result.ts
CHANGED
|
@@ -12,6 +12,7 @@ export type PickFields<
|
|
|
12
12
|
: { readonly [K in keyof T]: T[K] };
|
|
13
13
|
|
|
14
14
|
export type ResultRead<T extends object, Q extends Query<T>> = [Q] extends [
|
|
15
|
+
// FIXME: `keyof T` should be `Field<T>`
|
|
15
16
|
{ fields: (keyof T)[] },
|
|
16
17
|
]
|
|
17
18
|
? PickFields<T, Item<Q["fields"]>>
|
|
@@ -21,10 +22,10 @@ export type Result<T extends object, Q extends Query<T>> = [Q] extends [
|
|
|
21
22
|
{ method: "read" },
|
|
22
23
|
]
|
|
23
24
|
? [Q] extends [{ multiple: true }]
|
|
24
|
-
? ResultRead<T, Q>[]
|
|
25
|
+
? readonly ResultRead<T, Q>[]
|
|
25
26
|
: ResultRead<T, Q>
|
|
26
27
|
: [Q] extends [{ method: "aggregate" }]
|
|
27
28
|
? number
|
|
28
29
|
: [Q] extends [{ multiple: true }]
|
|
29
|
-
? ResultRead<T, Q>[]
|
|
30
|
+
? readonly ResultRead<T, Q>[]
|
|
30
31
|
: ResultRead<T, Q>;
|