quetch 0.13.0 → 0.15.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/filterChildren.d.ts +2 -2
- package/dist/tools/filterChildren.js.map +1 -1
- package/dist/tools/get.d.ts +14 -0
- package/dist/tools/get.js +36 -0
- package/dist/tools/get.js.map +1 -0
- package/dist/tools/queryItemList.js +4 -4
- package/dist/tools/queryItemList.js.map +1 -1
- package/dist/tools/{filterItem.d.ts → testFilter.d.ts} +2 -2
- package/dist/tools/testFilter.js +214 -0
- package/dist/tools/testFilter.js.map +1 -0
- package/dist/tools.d.ts +2 -1
- package/dist/tools.js +2 -1
- package/dist/tools.js.map +1 -1
- package/dist/types/Field.d.ts +2 -0
- package/dist/types/Field.js +2 -0
- package/dist/types/Field.js.map +1 -0
- package/dist/types/FieldFiltered.d.ts +3 -0
- package/dist/types/FieldFiltered.js +2 -0
- package/dist/types/FieldFiltered.js.map +1 -0
- package/dist/types/FieldFunctionFormatDate.d.ts +2 -2
- package/dist/types/FilterArray.d.ts +4 -4
- package/dist/types/FilterBoolean.d.ts +4 -4
- package/dist/types/FilterChildren.d.ts +1 -1
- package/dist/types/FilterField.d.ts +3 -2
- package/dist/types/FilterNumber.d.ts +4 -4
- package/dist/types/FilterString.d.ts +4 -4
- package/dist/types/FilterStringIntersect.d.ts +4 -4
- package/dist/types/FilterStringMatch.d.ts +5 -8
- package/dist/types/Get.d.ts +2 -3
- package/dist/types/{FilterKeys.d.ts → KeyFiltered.d.ts} +1 -1
- package/dist/types/KeyFiltered.js +2 -0
- package/dist/types/KeyFiltered.js.map +1 -0
- package/dist/types/Path.d.ts +3 -0
- package/dist/types/Path.js +2 -0
- package/dist/types/Path.js.map +1 -0
- package/dist/types/PathFiltered.d.ts +3 -0
- package/dist/types/PathFiltered.js +2 -0
- package/dist/types/PathFiltered.js.map +1 -0
- package/dist/types/QuerySettings.d.ts +2 -2
- package/dist/types/Value.d.ts +15 -0
- package/dist/types/Value.js +2 -0
- package/dist/types/Value.js.map +1 -0
- package/dist/types.d.ts +6 -1
- package/doc/README.md +396 -290
- package/doc/classes/RequestError.md +12 -8
- package/doc/interfaces/CustomFetch.md +5 -5
- package/lib/tools/filterChildren.ts +2 -2
- package/lib/tools/get.test.ts +23 -0
- package/lib/tools/get.ts +57 -0
- package/lib/tools/queryItemList.ts +4 -4
- package/lib/tools/{filterItem.test.ts → testFilter.test.ts} +44 -38
- package/lib/tools/testFilter.ts +320 -0
- package/lib/tools.ts +2 -1
- package/lib/types/Field.ts +3 -0
- package/lib/types/FieldFiltered.ts +6 -0
- package/lib/types/FieldFunctionFormatDate.ts +2 -2
- package/lib/types/FilterArray.ts +4 -4
- package/lib/types/FilterBoolean.ts +4 -4
- package/lib/types/FilterChildren.ts +1 -1
- package/lib/types/FilterField.ts +4 -2
- package/lib/types/FilterNumber.ts +4 -4
- package/lib/types/FilterString.ts +4 -4
- package/lib/types/FilterStringIntersect.ts +4 -4
- package/lib/types/FilterStringMatch.ts +5 -8
- package/lib/types/Get.ts +9 -5
- package/lib/types/{FilterKeys.ts → KeyFiltered.ts} +1 -1
- package/lib/types/Path.ts +7 -0
- package/lib/types/PathFiltered.ts +9 -0
- package/lib/types/QuerySettings.ts +2 -2
- package/lib/types/Value.ts +18 -0
- package/lib/types.ts +6 -1
- package/package.json +9 -7
- package/dist/tools/filterItem.js +0 -197
- package/dist/tools/filterItem.js.map +0 -1
- package/dist/types/FilterKeys.js +0 -2
- package/dist/types/FilterKeys.js.map +0 -1
- package/lib/tools/filterItem.ts +0 -299
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
export declare function filterChildren<T extends object>(parentPath: string, pathFieldKey:
|
|
1
|
+
import type { FieldFiltered, Filter } from "../types.ts";
|
|
2
|
+
export declare function filterChildren<T extends object>(parentPath: string, pathFieldKey: FieldFiltered<T, string>, deep?: boolean, pathSeparator?: string): Filter<T>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filterChildren.js","sourceRoot":"","sources":["../../lib/tools/filterChildren.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,MAAM,UAAU,cAAc,CAC5B,UAAkB,EAClB,
|
|
1
|
+
{"version":3,"file":"filterChildren.js","sourceRoot":"","sources":["../../lib/tools/filterChildren.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,MAAM,UAAU,cAAc,CAC5B,UAAkB,EAClB,YAAsC,EACtC,IAAI,GAAG,KAAK,EACZ,aAAa,GAAG,GAAG;IAEnB,OAAO;QACL,KAAK,EAAE,YAAY;QACnB,QAAQ,EAAE,OAAO;QACjB,KAAK,EAAE,aAAa,CAAC,UAAU,EAAE,IAAI,EAAE,aAAa,CAAC;KACtD,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CACpB,UAAkB,EAClB,IAAI,GAAG,KAAK,EACZ,aAAa,GAAG,GAAG;IAEnB,MAAM,gBAAgB,GAAG,WAAW,CAAC,aAAa,CAAC,CAAC;IACpD,OAAO,IAAI,WAAW,CAAC,UAAU,CAAC,GAChC,UAAU,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,gBAC3B,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,gBAAgB,QAAQ,EAAE,CAAC;AACjD,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { Path } from "../types";
|
|
2
|
+
type Get<T, P> = [P] extends [[infer K, ...infer R]] ? K extends keyof T ? R extends Path<T[K]> ? Get<T[K], R> : T[K] : never : [P] extends [keyof T] ? T[P] : T;
|
|
3
|
+
/**
|
|
4
|
+
* Gets the property value of the given `value` at the specified `path` (an array of object property names or array indexes).
|
|
5
|
+
* If the `path` is undefined, returns the `value` itself.
|
|
6
|
+
* If the `path` is a string, it is considered as a path with one item.
|
|
7
|
+
* If the `path` leads to an unknown property, returns `undefined`.
|
|
8
|
+
*
|
|
9
|
+
* @param value The value from which to get the property value.
|
|
10
|
+
* @param path The path leading to the property value or a property name or `undefined`.
|
|
11
|
+
* @returns The property value found at the given path, or `undefined` if it cannot be found.
|
|
12
|
+
*/
|
|
13
|
+
export declare function get<T, P extends keyof T | Path<T>>(value: T, path?: P): Get<T, P>;
|
|
14
|
+
export {};
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Gets the property value of the given `value` at the specified `path` (an array of object property names or array indexes).
|
|
3
|
+
* If the `path` is undefined, returns the `value` itself.
|
|
4
|
+
* If the `path` is a string, it is considered as a path with one item.
|
|
5
|
+
* If the `path` leads to an unknown property, returns `undefined`.
|
|
6
|
+
*
|
|
7
|
+
* @param value The value from which to get the property value.
|
|
8
|
+
* @param path The path leading to the property value or a property name or `undefined`.
|
|
9
|
+
* @returns The property value found at the given path, or `undefined` if it cannot be found.
|
|
10
|
+
*/
|
|
11
|
+
export function get(value, path) {
|
|
12
|
+
if (path === undefined) {
|
|
13
|
+
return value;
|
|
14
|
+
}
|
|
15
|
+
switch (typeof path) {
|
|
16
|
+
case "string":
|
|
17
|
+
case "number":
|
|
18
|
+
case "symbol":
|
|
19
|
+
return value?.[path];
|
|
20
|
+
default: {
|
|
21
|
+
switch (path.length) {
|
|
22
|
+
case 1:
|
|
23
|
+
return value?.[path[0]];
|
|
24
|
+
case 2:
|
|
25
|
+
return value?.[path[0]]?.[path[1]];
|
|
26
|
+
case 3:
|
|
27
|
+
return value?.[path[0]]?.[path[1]]?.[path[2]];
|
|
28
|
+
case 4:
|
|
29
|
+
return value?.[path[0]]?.[path[1]]?.[path[2]]?.[path[3]];
|
|
30
|
+
default:
|
|
31
|
+
return path.reduce((value, key) => value?.[key], value);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=get.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get.js","sourceRoot":"","sources":["../../lib/tools/get.ts"],"names":[],"mappings":"AAYA;;;;;;;;;GASG;AACH,MAAM,UAAU,GAAG,CACjB,KAAQ,EACR,IAAQ;IAER,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,OAAO,KAAY,CAAC;IACtB,CAAC;IACD,QAAQ,OAAO,IAAI,EAAE,CAAC;QACpB,KAAK,QAAQ,CAAC;QACd,KAAK,QAAQ,CAAC;QACd,KAAK,QAAQ;YACX,OAAQ,KAAa,EAAE,CAAC,IAAI,CAAC,CAAC;QAChC,OAAO,CAAC,CAAC,CAAC;YACR,QAAQ,IAAI,CAAC,MAAM,EAAE,CAAC;gBACpB,KAAK,CAAC;oBACJ,OAAQ,KAAa,EAAE,CAAC,IAAI,CAAC,CAAC,CAAQ,CAAC,CAAC;gBAC1C,KAAK,CAAC;oBACJ,OAAQ,KAAa,EAAE,CAAC,IAAI,CAAC,CAAC,CAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAQ,CAAC,CAAC;gBAC5D,KAAK,CAAC;oBACJ,OAAQ,KAAa,EAAE,CAAC,IAAI,CAAC,CAAC,CAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAQ,CAAC,EAAE,CACzD,IAAI,CAAC,CAAC,CAAQ,CACf,CAAC;gBACJ,KAAK,CAAC;oBACJ,OAAQ,KAAa,EAAE,CAAC,IAAI,CAAC,CAAC,CAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAQ,CAAC,EAAE,CACzD,IAAI,CAAC,CAAC,CAAQ,CACf,EAAE,CAAC,IAAI,CAAC,CAAC,CAAQ,CAAC,CAAC;gBACtB;oBACE,OAAO,IAAI,CAAC,MAAM,CAChB,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE,CAAE,KAAa,EAAE,CAAC,GAAG,CAAC,EACrC,KAAK,CACC,CAAC;YACb,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { RequestError } from "../errors.js";
|
|
2
2
|
import { filterFromContext } from "./filterFromContext.js";
|
|
3
|
-
import { filterItem } from "./filterItem.js";
|
|
4
3
|
import { sortItemList } from "./sortItemList.js";
|
|
4
|
+
import { testFilter } from "./testFilter.js";
|
|
5
5
|
function mergeContextAndFilter(context, filter) {
|
|
6
6
|
if (context === undefined) {
|
|
7
7
|
return filter ?? { operator: "any" };
|
|
@@ -32,7 +32,7 @@ function queryItemList(query) {
|
|
|
32
32
|
let result = data;
|
|
33
33
|
if (context !== undefined || filter !== undefined) {
|
|
34
34
|
const normalizedFilter = mergeContextAndFilter(context, filter);
|
|
35
|
-
result = data.filter((item) =>
|
|
35
|
+
result = data.filter((item) => testFilter(normalizedFilter, item, query.settings));
|
|
36
36
|
}
|
|
37
37
|
// Sort
|
|
38
38
|
result = sortItemList(order, result === data ? [...data] : result);
|
|
@@ -43,7 +43,7 @@ function queryItemList(query) {
|
|
|
43
43
|
return result;
|
|
44
44
|
}
|
|
45
45
|
const normalizedFilter = mergeContextAndFilter(context, filter);
|
|
46
|
-
const result = data.find((item) =>
|
|
46
|
+
const result = data.find((item) => testFilter(normalizedFilter, item, query.settings));
|
|
47
47
|
if (result === undefined) {
|
|
48
48
|
throw new RequestError("Not found", 404, query);
|
|
49
49
|
}
|
|
@@ -58,7 +58,7 @@ function queryItemList(query) {
|
|
|
58
58
|
}
|
|
59
59
|
const normalizedFilter = mergeContextAndFilter(context, filter);
|
|
60
60
|
return data.reduce((result, item) => {
|
|
61
|
-
if (
|
|
61
|
+
if (testFilter(normalizedFilter, item, query.settings)) {
|
|
62
62
|
return result + 1;
|
|
63
63
|
}
|
|
64
64
|
return result;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queryItemList.js","sourceRoot":"","sources":["../../lib/tools/queryItemList.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAW5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"queryItemList.js","sourceRoot":"","sources":["../../lib/tools/queryItemList.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { Filter } from "../types";
|
|
2
1
|
import type { QuerySettings } from "../types/QuerySettings.js";
|
|
2
|
+
import type { Filter } from "../types.js";
|
|
3
3
|
/**
|
|
4
4
|
* Checks wether the provided `value` matches the `filter` or not.
|
|
5
5
|
*
|
|
@@ -8,4 +8,4 @@ import type { QuerySettings } from "../types/QuerySettings.js";
|
|
|
8
8
|
* @param settings Optional query settings.
|
|
9
9
|
* @returns `true` if the `value` matches the `filter` and `false` otherwise.
|
|
10
10
|
*/
|
|
11
|
-
export declare function
|
|
11
|
+
export declare function testFilter<T extends object>(filter: Filter<T> | undefined, value: T | undefined, settings?: QuerySettings<T>): boolean;
|
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
import { SymbolCache } from "../constants/SymbolCache.js";
|
|
2
|
+
import { filterChildren } from "./filterChildren.js";
|
|
3
|
+
import { get } from "./get.js";
|
|
4
|
+
const { isArray } = Array;
|
|
5
|
+
function valueFromFilter(value, filter) {
|
|
6
|
+
if ("valueField" in filter) {
|
|
7
|
+
return get(value, filter.valueField);
|
|
8
|
+
}
|
|
9
|
+
return filter.value;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Checks wether the provided `value` matches the `filter` or not.
|
|
13
|
+
*
|
|
14
|
+
* @param filter The filter to apply.
|
|
15
|
+
* @param value The value to check.
|
|
16
|
+
* @param settings Optional query settings.
|
|
17
|
+
* @returns `true` if the `value` matches the `filter` and `false` otherwise.
|
|
18
|
+
*/
|
|
19
|
+
export function testFilter(filter, value, settings) {
|
|
20
|
+
if (value === undefined) {
|
|
21
|
+
return false;
|
|
22
|
+
}
|
|
23
|
+
if (filter === undefined) {
|
|
24
|
+
return true;
|
|
25
|
+
}
|
|
26
|
+
switch (filter.operator) {
|
|
27
|
+
case "all":
|
|
28
|
+
return filter.value.every((filter) => testFilter(filter, value));
|
|
29
|
+
case "any": {
|
|
30
|
+
if (filter.value === undefined || filter.value.length === 0) {
|
|
31
|
+
return true;
|
|
32
|
+
}
|
|
33
|
+
return filter.value.some((filter) => testFilter(filter, value));
|
|
34
|
+
}
|
|
35
|
+
case "none": {
|
|
36
|
+
if (filter.value === undefined || filter.value.length === 0) {
|
|
37
|
+
return false;
|
|
38
|
+
}
|
|
39
|
+
return filter.value.every((filter) => !testFilter(filter, value));
|
|
40
|
+
}
|
|
41
|
+
case "exist":
|
|
42
|
+
return get(value, filter.value) !== undefined;
|
|
43
|
+
case "equal": {
|
|
44
|
+
const rightValue = valueFromFilter(value, filter);
|
|
45
|
+
if (isArray(rightValue)) {
|
|
46
|
+
const leftValue = get(value, filter.field);
|
|
47
|
+
if (!isArray(leftValue)) {
|
|
48
|
+
return false;
|
|
49
|
+
}
|
|
50
|
+
if (rightValue.length !== leftValue.length) {
|
|
51
|
+
return false;
|
|
52
|
+
}
|
|
53
|
+
return rightValue.every((value) => leftValue.includes(value));
|
|
54
|
+
}
|
|
55
|
+
const leftValue = get(value, filter.field);
|
|
56
|
+
if (leftValue === rightValue) {
|
|
57
|
+
return true;
|
|
58
|
+
}
|
|
59
|
+
if (filter.options ||
|
|
60
|
+
filter.locale) {
|
|
61
|
+
return (leftValue !== undefined &&
|
|
62
|
+
rightValue.localeCompare(leftValue, filter.locale, filter.options) === 0);
|
|
63
|
+
}
|
|
64
|
+
return false;
|
|
65
|
+
}
|
|
66
|
+
case "notEqual": {
|
|
67
|
+
const rightValue = valueFromFilter(value, filter);
|
|
68
|
+
const leftValue = get(value, filter.field);
|
|
69
|
+
if (leftValue === rightValue) {
|
|
70
|
+
return false;
|
|
71
|
+
}
|
|
72
|
+
if (filter.options ||
|
|
73
|
+
filter.locale) {
|
|
74
|
+
return (rightValue.localeCompare(get(value, filter.field), filter.locale, filter.options) !== 0);
|
|
75
|
+
}
|
|
76
|
+
return true;
|
|
77
|
+
}
|
|
78
|
+
case "children": {
|
|
79
|
+
if (filter[SymbolCache] === undefined) {
|
|
80
|
+
switch (true) {
|
|
81
|
+
case settings?.transformFilterChildren !== undefined:
|
|
82
|
+
filter[SymbolCache] = settings.transformFilterChildren(filter);
|
|
83
|
+
break;
|
|
84
|
+
default: {
|
|
85
|
+
const { pathFieldKey = "id", pathFieldSeparator = "/", } = settings || {};
|
|
86
|
+
filter[SymbolCache] = filterChildren(filter.value, pathFieldKey, filter.deep, pathFieldSeparator);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
return testFilter(filter[SymbolCache], value);
|
|
91
|
+
}
|
|
92
|
+
case "custom": {
|
|
93
|
+
return filter.value(value);
|
|
94
|
+
}
|
|
95
|
+
case "startWith": {
|
|
96
|
+
const rightValue = valueFromFilter(value, filter);
|
|
97
|
+
const leftValue = get(value, filter.field);
|
|
98
|
+
if (leftValue === undefined || leftValue.length < rightValue.length) {
|
|
99
|
+
return false;
|
|
100
|
+
}
|
|
101
|
+
if (filter.options !== undefined || filter.locale !== undefined) {
|
|
102
|
+
return (rightValue.localeCompare(leftValue.slice(0, rightValue.length), filter.locale, filter.options) !== 0);
|
|
103
|
+
}
|
|
104
|
+
return leftValue.startsWith(rightValue) ?? false;
|
|
105
|
+
}
|
|
106
|
+
case "endWith": {
|
|
107
|
+
const rightValue = valueFromFilter(value, filter);
|
|
108
|
+
const leftValue = get(value, filter.field);
|
|
109
|
+
if (leftValue === undefined || leftValue.length < rightValue.length) {
|
|
110
|
+
return false;
|
|
111
|
+
}
|
|
112
|
+
if (filter.options !== undefined || filter.locale !== undefined) {
|
|
113
|
+
return (rightValue.localeCompare(leftValue.slice(-rightValue.length), filter.locale, filter.options) !== 0);
|
|
114
|
+
}
|
|
115
|
+
return leftValue.endsWith(rightValue) ?? false;
|
|
116
|
+
}
|
|
117
|
+
case "include": {
|
|
118
|
+
const rightValue = valueFromFilter(value, filter);
|
|
119
|
+
const leftValue = get(value, filter.field);
|
|
120
|
+
if (leftValue == null) {
|
|
121
|
+
return false;
|
|
122
|
+
}
|
|
123
|
+
if (isArray(rightValue)) {
|
|
124
|
+
// FIXME: Get unique values
|
|
125
|
+
if (!isArray(leftValue) || leftValue.length < rightValue.length) {
|
|
126
|
+
return false;
|
|
127
|
+
}
|
|
128
|
+
return rightValue.every((value) => leftValue.includes(value));
|
|
129
|
+
}
|
|
130
|
+
if (isArray(leftValue) || leftValue.length < rightValue.length) {
|
|
131
|
+
return false;
|
|
132
|
+
}
|
|
133
|
+
if (filter.options ||
|
|
134
|
+
filter.locale) {
|
|
135
|
+
const { length } = rightValue;
|
|
136
|
+
const end = leftValue.length - length + 1;
|
|
137
|
+
for (let i = 0; i < end; i++) {
|
|
138
|
+
if (rightValue.localeCompare(leftValue.slice(i, i + length), filter.locale, filter.options) === 0) {
|
|
139
|
+
return true;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
return false;
|
|
143
|
+
}
|
|
144
|
+
return leftValue.includes?.(rightValue) ?? false;
|
|
145
|
+
}
|
|
146
|
+
case "greaterThan": {
|
|
147
|
+
const rightValue = valueFromFilter(value, filter);
|
|
148
|
+
const leftValue = get(value, filter.field);
|
|
149
|
+
if (filter.options ||
|
|
150
|
+
filter.locale) {
|
|
151
|
+
return (rightValue.localeCompare(leftValue, filter.locale, filter.options) < 0);
|
|
152
|
+
}
|
|
153
|
+
return leftValue > rightValue;
|
|
154
|
+
}
|
|
155
|
+
case "greaterThanOrEqual": {
|
|
156
|
+
const rightValue = valueFromFilter(value, filter);
|
|
157
|
+
const leftValue = get(value, filter.field);
|
|
158
|
+
if (filter.options ||
|
|
159
|
+
filter.locale) {
|
|
160
|
+
return (rightValue.localeCompare(leftValue, filter.locale, filter.options) <= 0);
|
|
161
|
+
}
|
|
162
|
+
return leftValue >= rightValue;
|
|
163
|
+
}
|
|
164
|
+
case "lowerThan": {
|
|
165
|
+
const rightValue = valueFromFilter(value, filter);
|
|
166
|
+
const leftValue = get(value, filter.field);
|
|
167
|
+
if (filter.options ||
|
|
168
|
+
filter.locale) {
|
|
169
|
+
return (rightValue.localeCompare(leftValue, filter.locale, filter.options) > 0);
|
|
170
|
+
}
|
|
171
|
+
return leftValue < rightValue;
|
|
172
|
+
}
|
|
173
|
+
case "lowerThanOrEqual": {
|
|
174
|
+
const rightValue = valueFromFilter(value, filter);
|
|
175
|
+
const leftValue = get(value, filter.field);
|
|
176
|
+
if (filter.options ||
|
|
177
|
+
filter.locale) {
|
|
178
|
+
return (rightValue.localeCompare(leftValue, filter.locale, filter.options) >= 0);
|
|
179
|
+
}
|
|
180
|
+
return leftValue <= rightValue;
|
|
181
|
+
}
|
|
182
|
+
case "match": {
|
|
183
|
+
const rightValue = valueFromFilter(value, filter);
|
|
184
|
+
const leftValue = get(value, filter.field);
|
|
185
|
+
if (leftValue === undefined) {
|
|
186
|
+
return false;
|
|
187
|
+
}
|
|
188
|
+
if (filter[SymbolCache] === undefined) {
|
|
189
|
+
filter[SymbolCache] = new RegExp(rightValue, `${filter.options?.ignoreCase ? "i" : ""}${filter.options?.dotAll ? "s" : ""}`);
|
|
190
|
+
}
|
|
191
|
+
return filter[SymbolCache].test(leftValue);
|
|
192
|
+
}
|
|
193
|
+
case "intersect": {
|
|
194
|
+
const rightValue = valueFromFilter(value, filter);
|
|
195
|
+
const leftValue = get(value, filter.field);
|
|
196
|
+
if (leftValue == null) {
|
|
197
|
+
return false;
|
|
198
|
+
}
|
|
199
|
+
if (isArray(leftValue)) {
|
|
200
|
+
return (isArray(rightValue) &&
|
|
201
|
+
rightValue.some((value) => leftValue.includes(value)));
|
|
202
|
+
}
|
|
203
|
+
if (filter.options ||
|
|
204
|
+
filter.locale) {
|
|
205
|
+
return (leftValue !== undefined &&
|
|
206
|
+
rightValue.some((value) => value.localeCompare(leftValue, filter.locale, filter.options) === 0));
|
|
207
|
+
}
|
|
208
|
+
return rightValue.includes(leftValue);
|
|
209
|
+
}
|
|
210
|
+
default:
|
|
211
|
+
throw new Error(`Unknown filter operator '${filter.operator}'`);
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
//# sourceMappingURL=testFilter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"testFilter.js","sourceRoot":"","sources":["../../lib/tools/testFilter.ts"],"names":[],"mappings":"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"}
|
package/dist/tools.d.ts
CHANGED
|
@@ -5,8 +5,9 @@ export { defineGenericFetch } from "./tools/defineGenericFetch.js";
|
|
|
5
5
|
export { escapeRegex } from "./tools/escapeRegex.js";
|
|
6
6
|
export { filterChildren } from "./tools/filterChildren.js";
|
|
7
7
|
export { filterFromContext } from "./tools/filterFromContext.js";
|
|
8
|
-
export {
|
|
8
|
+
export { get } from "./tools/get.js";
|
|
9
9
|
export { isFilterGroup } from "./tools/isFilterGroup.js";
|
|
10
10
|
export { normalizeOrder } from "./tools/normalizeOrder.js";
|
|
11
11
|
export { queryItemList } from "./tools/queryItemList.js";
|
|
12
12
|
export { sortItemList } from "./tools/sortItemList.js";
|
|
13
|
+
export { testFilter } from "./tools/testFilter.js";
|
package/dist/tools.js
CHANGED
|
@@ -6,9 +6,10 @@ export { defineGenericFetch } from "./tools/defineGenericFetch.js";
|
|
|
6
6
|
export { escapeRegex } from "./tools/escapeRegex.js";
|
|
7
7
|
export { filterChildren } from "./tools/filterChildren.js";
|
|
8
8
|
export { filterFromContext } from "./tools/filterFromContext.js";
|
|
9
|
-
export {
|
|
9
|
+
export { get } from "./tools/get.js";
|
|
10
10
|
export { isFilterGroup } from "./tools/isFilterGroup.js";
|
|
11
11
|
export { normalizeOrder } from "./tools/normalizeOrder.js";
|
|
12
12
|
export { queryItemList } from "./tools/queryItemList.js";
|
|
13
13
|
export { sortItemList } from "./tools/sortItemList.js";
|
|
14
|
+
export { testFilter } from "./tools/testFilter.js";
|
|
14
15
|
//# sourceMappingURL=tools.js.map
|
package/dist/tools.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../lib/tools.ts"],"names":[],"mappings":"AAAA,4DAA4D;AAC5D,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AACvC,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../lib/tools.ts"],"names":[],"mappings":"AAAA,4DAA4D;AAC5D,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AACvC,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Field.js","sourceRoot":"","sources":["../../lib/types/Field.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FieldFiltered.js","sourceRoot":"","sources":["../../lib/types/FieldFiltered.ts"],"names":[],"mappings":""}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { FieldFiltered } from "./FieldFiltered";
|
|
2
2
|
/**
|
|
3
3
|
* Formats the date found in a given field, which can be an ISO string date or a timestamp.
|
|
4
4
|
*/
|
|
5
5
|
export type FieldFunctionFormatDate<T extends object> = {
|
|
6
6
|
operator: "formatDate";
|
|
7
|
-
field:
|
|
7
|
+
field: FieldFiltered<T, string | number>;
|
|
8
8
|
format: string;
|
|
9
9
|
};
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import type { Any } from "./Any";
|
|
2
|
-
import type {
|
|
2
|
+
import type { FieldFiltered } from "./FieldFiltered";
|
|
3
|
+
import type { Value } from "./Value";
|
|
3
4
|
/**
|
|
4
5
|
* Checks if a given array field matches a given array value according to a given operator.
|
|
5
6
|
*/
|
|
6
7
|
export type FilterArray<T extends object, P = Any> = {
|
|
7
8
|
operator: "equal" | "include" | "intersect";
|
|
8
|
-
field:
|
|
9
|
-
|
|
10
|
-
};
|
|
9
|
+
field: FieldFiltered<T, P[]>;
|
|
10
|
+
} & Value<T, P[]>;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { FieldFiltered } from "./FieldFiltered";
|
|
2
|
+
import type { Value } from "./Value";
|
|
2
3
|
/**
|
|
3
4
|
* Checks if a given boolean field is `true` or `false`.
|
|
4
5
|
*/
|
|
5
6
|
export type FilterBoolean<T extends object> = {
|
|
6
7
|
operator: "equal" | "notEqual";
|
|
7
|
-
field:
|
|
8
|
-
|
|
9
|
-
};
|
|
8
|
+
field: FieldFiltered<T, boolean>;
|
|
9
|
+
} & Value<T, boolean>;
|
|
@@ -1,10 +1,11 @@
|
|
|
1
|
+
import type { Field } from "./Field";
|
|
1
2
|
/**
|
|
2
3
|
* Checks if a given field exists.
|
|
3
4
|
*/
|
|
4
5
|
export type FilterField<T extends object> = {
|
|
5
6
|
operator: "exist";
|
|
6
7
|
/**
|
|
7
|
-
* The field name for which to check its existence.
|
|
8
|
+
* The field name or path for which to check its existence.
|
|
8
9
|
*/
|
|
9
|
-
value:
|
|
10
|
+
value: Field<T>;
|
|
10
11
|
};
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { FieldFiltered } from "./FieldFiltered";
|
|
2
|
+
import type { Value } from "./Value";
|
|
2
3
|
/**
|
|
3
4
|
* Checks if a given number field matches a given number value according to a given operator.
|
|
4
5
|
*/
|
|
5
6
|
export type FilterNumber<T extends object> = {
|
|
6
7
|
operator: "equal" | "notEqual" | "greaterThan" | "greaterThanOrEqual" | "lowerThan" | "lowerThanOrEqual";
|
|
7
|
-
field:
|
|
8
|
-
|
|
9
|
-
};
|
|
8
|
+
field: FieldFiltered<T, number>;
|
|
9
|
+
} & Value<T, number>;
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { FieldFiltered } from "./FieldFiltered";
|
|
2
2
|
import type { Locale } from "./Locale";
|
|
3
|
+
import type { Value } from "./Value";
|
|
3
4
|
/**
|
|
4
5
|
* Checks if a given string field matches a given string value according to a given operator.
|
|
5
6
|
*/
|
|
6
7
|
export type FilterString<T extends object> = {
|
|
7
8
|
operator: "equal" | "notEqual" | "startWith" | "endWith" | "include" | "greaterThan" | "greaterThanOrEqual" | "lowerThan" | "lowerThanOrEqual";
|
|
8
|
-
field:
|
|
9
|
-
value: string;
|
|
9
|
+
field: FieldFiltered<T, string>;
|
|
10
10
|
options?: Intl.CollatorOptions;
|
|
11
11
|
locale?: Locale;
|
|
12
|
-
}
|
|
12
|
+
} & Value<T, string>;
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { FieldFiltered } from "./FieldFiltered";
|
|
2
2
|
import type { Locale } from "./Locale";
|
|
3
|
+
import type { Value } from "./Value";
|
|
3
4
|
/**
|
|
4
5
|
* Checks if a given string field has any of the provided values.
|
|
5
6
|
*/
|
|
6
7
|
export type FilterStringIntersect<T extends object> = {
|
|
7
8
|
operator: "intersect";
|
|
8
|
-
field:
|
|
9
|
-
value: string[];
|
|
9
|
+
field: FieldFiltered<T, string>;
|
|
10
10
|
options?: Intl.CollatorOptions;
|
|
11
11
|
locale?: Locale;
|
|
12
|
-
}
|
|
12
|
+
} & Value<T, string[]>;
|
|
@@ -1,15 +1,12 @@
|
|
|
1
1
|
import type { SymbolCache } from "../constants/SymbolCache";
|
|
2
|
-
import type {
|
|
2
|
+
import type { FieldFiltered } from "./FieldFiltered";
|
|
3
|
+
import type { Value } from "./Value";
|
|
3
4
|
/**
|
|
4
|
-
* Checks if a given string field matches a given regular expression.
|
|
5
|
+
* Checks if a given string field matches a given regular expression, the value being a raw regular expression string.
|
|
5
6
|
*/
|
|
6
7
|
export type FilterStringMatch<T extends object> = {
|
|
7
8
|
operator: "match";
|
|
8
|
-
field:
|
|
9
|
-
/**
|
|
10
|
-
* Raw regular expression string.
|
|
11
|
-
*/
|
|
12
|
-
value: string;
|
|
9
|
+
field: FieldFiltered<T, string>;
|
|
13
10
|
/**
|
|
14
11
|
* Regular expression options.
|
|
15
12
|
*/
|
|
@@ -27,4 +24,4 @@ export type FilterStringMatch<T extends object> = {
|
|
|
27
24
|
* Compiled regular expression generated by the `testFilter` function.
|
|
28
25
|
*/
|
|
29
26
|
[SymbolCache]?: RegExp;
|
|
30
|
-
}
|
|
27
|
+
} & Value<T, string>;
|
package/dist/types/Get.d.ts
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
|
+
import type { Path } from "./Path";
|
|
1
2
|
/**
|
|
2
3
|
* Returns the type of the property at the specified `K` key.
|
|
3
4
|
*/
|
|
4
|
-
export type Get<T extends
|
|
5
|
-
[key in K]: any;
|
|
6
|
-
} ? T[K] : D;
|
|
5
|
+
export type Get<T, P> = [P] extends [[infer K, ...infer R]] ? K extends keyof T ? R extends Path<T[K]> ? Get<T[K], R> : T[K] : never : never;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Returns object type with field extending the provided `P` type.
|
|
3
3
|
*/
|
|
4
|
-
export type
|
|
4
|
+
export type KeyFiltered<T extends object, P> = keyof T & keyof {
|
|
5
5
|
[K in keyof T as T[K] extends P ? K : never]-?: T[K];
|
|
6
6
|
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"KeyFiltered.js","sourceRoot":"","sources":["../../lib/types/KeyFiltered.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Path.js","sourceRoot":"","sources":["../../lib/types/Path.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PathFiltered.js","sourceRoot":"","sources":["../../lib/types/PathFiltered.ts"],"names":[],"mappings":""}
|