@servicetitan/data-query 31.2.0 → 31.3.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/accessor.js +7 -7
- package/dist/accessor.js.map +1 -1
- package/dist/array.operators.js +22 -23
- package/dist/array.operators.js.map +1 -1
- package/dist/common.interfaces.js +4 -1
- package/dist/common.interfaces.js.map +1 -1
- package/dist/data-result.interface.js +4 -1
- package/dist/data-result.interface.js.map +1 -1
- package/dist/data-source/async-data-source.js +28 -36
- package/dist/data-source/async-data-source.js.map +1 -1
- package/dist/data-source/data-source.js +2 -1
- package/dist/data-source/data-source.js.map +1 -1
- package/dist/data-source/in-memory-data-source.js +47 -50
- package/dist/data-source/in-memory-data-source.js.map +1 -1
- package/dist/data-source/index.js +2 -0
- package/dist/data-source/index.js.map +1 -1
- package/dist/filter-serialization.common.js +33 -43
- package/dist/filter-serialization.common.js.map +1 -1
- package/dist/filtering/filter-descriptor.interface.js +2 -2
- package/dist/filtering/filter-descriptor.interface.js.map +1 -1
- package/dist/filtering/filter-expression.factory.js +7 -8
- package/dist/filtering/filter-expression.factory.js.map +1 -1
- package/dist/filtering/filter-no-eval.js +42 -50
- package/dist/filtering/filter-no-eval.js.map +1 -1
- package/dist/filtering/filter.operators.js +42 -40
- package/dist/filtering/filter.operators.js.map +1 -1
- package/dist/funcs.js +5 -8
- package/dist/funcs.js.map +1 -1
- package/dist/grouping/aggregate.operators.js +4 -4
- package/dist/grouping/aggregate.operators.js.map +1 -1
- package/dist/grouping/group-descriptor.interface.js +4 -2
- package/dist/grouping/group-descriptor.interface.js.map +1 -1
- package/dist/grouping/group.operators.js +13 -12
- package/dist/grouping/group.operators.js.map +1 -1
- package/dist/index.js +13 -6
- package/dist/index.js.map +1 -1
- package/dist/mvc/deserialization.js +30 -31
- package/dist/mvc/deserialization.js.map +1 -1
- package/dist/mvc/operators.js +66 -48
- package/dist/mvc/operators.js.map +1 -1
- package/dist/odata-filtering.operators.js +68 -38
- package/dist/odata-filtering.operators.js.map +1 -1
- package/dist/odata.operators.js +12 -17
- package/dist/odata.operators.js.map +1 -1
- package/dist/sort-descriptor.js +4 -1
- package/dist/sort-descriptor.js.map +1 -1
- package/dist/sorting/sort-array.operator.js +10 -13
- package/dist/sorting/sort-array.operator.js.map +1 -1
- package/dist/sorting/sort.js +9 -10
- package/dist/sorting/sort.js.map +1 -1
- package/dist/state.js +4 -1
- package/dist/state.js.map +1 -1
- package/dist/transducers.js +93 -102
- package/dist/transducers.js.map +1 -1
- package/dist/utils.js +11 -20
- package/dist/utils.js.map +1 -1
- package/package.json +3 -3
|
@@ -2,49 +2,79 @@ import { isCompositeFilterDescriptor } from './filtering/filter-descriptor.inter
|
|
|
2
2
|
import { compose, ifElse } from './funcs';
|
|
3
3
|
import { normalizeField, quote, toLower, isDateValue, isStringValue, serializeFilters, encodeValue, toUTC } from './filter-serialization.common';
|
|
4
4
|
import { normalizeFilters } from './filtering/filter.operators';
|
|
5
|
-
const formatDate = ({ utcDates })
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
});
|
|
11
|
-
const fnFormatter = ({ operator })
|
|
12
|
-
const singleOperatorFormatter = ({ operator })
|
|
13
|
-
const stringFormat = formatter
|
|
14
|
-
const stringFnOperator = settings
|
|
15
|
-
const stringOperator = settings
|
|
16
|
-
const numericOperator = settings
|
|
17
|
-
const dateOperator = settings
|
|
18
|
-
const ifDate = settings
|
|
19
|
-
const typedOperator = settings
|
|
20
|
-
const appendEqual = str
|
|
21
|
-
const nonValueExpression = formatter
|
|
22
|
-
const filterOperators = (operator, settings)
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
5
|
+
const formatDate = ({ utcDates })=>({ field, value, ignoreCase, operator })=>({
|
|
6
|
+
value: JSON.stringify(!utcDates ? toUTC(value) : value).replace(/"/g, ""),
|
|
7
|
+
field,
|
|
8
|
+
ignoreCase,
|
|
9
|
+
operator
|
|
10
|
+
});
|
|
11
|
+
const fnFormatter = ({ operator })=>({ field, value })=>`${operator}(${field},${value})`;
|
|
12
|
+
const singleOperatorFormatter = ({ operator })=>({ field, value })=>`${field} ${operator} ${value}`;
|
|
13
|
+
const stringFormat = (formatter)=>compose(formatter, encodeValue, quote, toLower, normalizeField);
|
|
14
|
+
const stringFnOperator = (settings)=>stringFormat(fnFormatter(settings));
|
|
15
|
+
const stringOperator = (settings)=>stringFormat(singleOperatorFormatter(settings));
|
|
16
|
+
const numericOperator = (settings)=>compose(singleOperatorFormatter(settings), normalizeField);
|
|
17
|
+
const dateOperator = (settings)=>compose(singleOperatorFormatter(settings), normalizeField, formatDate(settings));
|
|
18
|
+
const ifDate = (settings)=>ifElse(isDateValue, dateOperator(settings), numericOperator(settings));
|
|
19
|
+
const typedOperator = (settings)=>ifElse(isStringValue, stringOperator(settings), ifDate(settings));
|
|
20
|
+
const appendEqual = (str)=>`${str} eq -1`;
|
|
21
|
+
const nonValueExpression = (formatter)=>compose(formatter, normalizeField);
|
|
22
|
+
const filterOperators = (operator, settings)=>({
|
|
23
|
+
contains: stringFnOperator({
|
|
24
|
+
...settings,
|
|
25
|
+
operator: "contains"
|
|
26
|
+
}),
|
|
27
|
+
doesnotcontain: compose(appendEqual, stringFnOperator({
|
|
28
|
+
...settings,
|
|
29
|
+
operator: "indexof"
|
|
30
|
+
})),
|
|
31
|
+
endswith: stringFnOperator({
|
|
32
|
+
...settings,
|
|
33
|
+
operator: "endswith"
|
|
34
|
+
}),
|
|
35
|
+
eq: typedOperator({
|
|
36
|
+
...settings,
|
|
37
|
+
operator: "eq"
|
|
38
|
+
}),
|
|
39
|
+
gt: typedOperator({
|
|
40
|
+
...settings,
|
|
41
|
+
operator: "gt"
|
|
42
|
+
}),
|
|
43
|
+
gte: typedOperator({
|
|
44
|
+
...settings,
|
|
45
|
+
operator: "ge"
|
|
46
|
+
}),
|
|
47
|
+
isempty: nonValueExpression(({ field })=>`${field} eq ''`),
|
|
48
|
+
isnotempty: nonValueExpression(({ field })=>`${field} ne ''`),
|
|
49
|
+
isnotnull: nonValueExpression(({ field })=>`${field} ne null`),
|
|
50
|
+
isnull: nonValueExpression(({ field })=>`${field} eq null`),
|
|
51
|
+
lt: typedOperator({
|
|
52
|
+
...settings,
|
|
53
|
+
operator: "lt"
|
|
54
|
+
}),
|
|
55
|
+
lte: typedOperator({
|
|
56
|
+
...settings,
|
|
57
|
+
operator: "le"
|
|
58
|
+
}),
|
|
59
|
+
neq: typedOperator({
|
|
60
|
+
...settings,
|
|
61
|
+
operator: "ne"
|
|
62
|
+
}),
|
|
63
|
+
startswith: stringFnOperator({
|
|
64
|
+
...settings,
|
|
65
|
+
operator: "startswith"
|
|
66
|
+
})
|
|
67
|
+
})[operator];
|
|
68
|
+
const join = (x)=>` ${x.logic} `;
|
|
69
|
+
const serialize = (settings)=>(x)=>filterOperators(x.operator, settings)(x);
|
|
70
|
+
const serializeAll = (settings)=>serializeFilters((filter)=>ifElse(isCompositeFilterDescriptor, serializeAll(settings), serialize(settings))(filter), join);
|
|
41
71
|
/**
|
|
42
72
|
* @hidden
|
|
43
|
-
*/
|
|
44
|
-
export const serializeFilter = (filter, settings = {}) => {
|
|
73
|
+
*/ export const serializeFilter = (filter, settings = {})=>{
|
|
45
74
|
if (filter.filters && filter.filters.length) {
|
|
46
75
|
return "$filter=" + serializeAll(settings)(normalizeFilters(filter));
|
|
47
76
|
}
|
|
48
77
|
return "";
|
|
49
78
|
};
|
|
79
|
+
|
|
50
80
|
//# sourceMappingURL=odata-filtering.operators.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":["../src/odata-filtering.operators.ts"],"sourcesContent":["import { CompositeFilterDescriptor, FilterDescriptor, isCompositeFilterDescriptor } from './filtering/filter-descriptor.interface';\nimport { compose, ifElse } from './funcs';\nimport {\n normalizeField,\n quote,\n toLower,\n isDateValue,\n isStringValue,\n serializeFilters,\n encodeValue,\n Transformation,\n toUTC\n} from './filter-serialization.common';\nimport { ODataSettings } from './odata.operators';\nimport { normalizeFilters } from './filtering/filter.operators';\n\nconst formatDate: (settings: any) => Transformation =\n ({ utcDates }: ODataSettings) =>\n ({ field, value, ignoreCase, operator }) => ({\n value: JSON.stringify(!utcDates ? toUTC(value) : value).replace(/\"/g, \"\"),\n field,\n ignoreCase,\n operator\n });\n\nconst fnFormatter = ({ operator }) => ({ field, value }: FilterDescriptor): string => `${operator}(${field},${value})`;\nconst singleOperatorFormatter = ({ operator }) => ({ field, value }: FilterDescriptor): string => `${field} ${operator} ${value}`;\n\nconst stringFormat = formatter => compose(formatter, encodeValue, quote, toLower, normalizeField);\n\nconst stringFnOperator = settings => stringFormat(fnFormatter(settings));\nconst stringOperator = settings => stringFormat(singleOperatorFormatter(settings));\nconst numericOperator = settings => compose(singleOperatorFormatter(settings), normalizeField);\n\nconst dateOperator = settings => compose(\n singleOperatorFormatter(settings),\n normalizeField,\n formatDate(settings)\n);\n\nconst ifDate = settings => ifElse(isDateValue, dateOperator(settings), numericOperator(settings));\nconst typedOperator = settings => ifElse(isStringValue, stringOperator(settings), ifDate(settings));\n\nconst appendEqual = str => `${str} eq -1`;\n\nconst nonValueExpression = formatter => compose(formatter, normalizeField);\n\nconst filterOperators = (operator: string, settings: ODataSettings) => ({\n contains: stringFnOperator({ ...settings, operator: \"contains\" }),\n doesnotcontain: compose(appendEqual, stringFnOperator({ ...settings, operator: \"indexof\" })),\n endswith: stringFnOperator({ ...settings, operator: \"endswith\" }),\n eq: typedOperator({ ...settings, operator: \"eq\" }),\n gt: typedOperator({ ...settings, operator: \"gt\" }),\n gte: typedOperator({ ...settings, operator: \"ge\" }),\n isempty: nonValueExpression(({ field }: FilterDescriptor): string => `${field} eq ''`),\n isnotempty: nonValueExpression(({ field }: FilterDescriptor): string => `${field} ne ''`),\n isnotnull: nonValueExpression(({ field }: FilterDescriptor): string => `${field} ne null`),\n isnull: nonValueExpression(({ field }: FilterDescriptor): string => `${field} eq null`),\n lt: typedOperator({ ...settings, operator: \"lt\" }),\n lte: typedOperator({ ...settings, operator: \"le\" }),\n neq: typedOperator({ ...settings, operator: \"ne\" }),\n startswith: stringFnOperator({ ...settings, operator: \"startswith\" })\n}[operator]);\n\nconst join = x => ` ${x.logic} `;\nconst serialize = settings => x => filterOperators(x.operator, settings)(x);\n\nconst serializeAll = settings => serializeFilters(\n filter => ifElse(isCompositeFilterDescriptor, serializeAll(settings), serialize(settings))(filter),\n join\n);\n\n/**\n * @hidden\n */\nexport const serializeFilter = (filter: CompositeFilterDescriptor, settings: any = {}): string => {\n if (filter.filters && filter.filters.length) {\n return \"$filter=\" + serializeAll(settings)(normalizeFilters(filter));\n }\n return \"\";\n};\n"],"names":["isCompositeFilterDescriptor","compose","ifElse","normalizeField","quote","toLower","isDateValue","isStringValue","serializeFilters","encodeValue","toUTC","normalizeFilters","formatDate","utcDates","field","value","ignoreCase","operator","JSON","stringify","replace","fnFormatter","singleOperatorFormatter","stringFormat","formatter","stringFnOperator","settings","stringOperator","numericOperator","dateOperator","ifDate","typedOperator","appendEqual","str","nonValueExpression","filterOperators","contains","doesnotcontain","endswith","eq","gt","gte","isempty","isnotempty","isnotnull","isnull","lt","lte","neq","startswith","join","x","logic","serialize","serializeAll","filter","serializeFilter","filters","length"],"mappings":"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"}
|
package/dist/odata.operators.js
CHANGED
|
@@ -1,24 +1,22 @@
|
|
|
1
1
|
import { isPresent, isNotNullOrEmptyString } from './utils';
|
|
2
2
|
import { serializeFilter } from './odata-filtering.operators';
|
|
3
3
|
import { ifElse, constant } from './funcs';
|
|
4
|
-
const serializeSort = (orderby)
|
|
5
|
-
const str = orderby
|
|
6
|
-
.filter(sort => isPresent(sort.dir))
|
|
7
|
-
.map(sort => {
|
|
4
|
+
const serializeSort = (orderby)=>{
|
|
5
|
+
const str = orderby.filter((sort)=>isPresent(sort.dir)).map((sort)=>{
|
|
8
6
|
const order = sort.field.replace(/\./g, "/");
|
|
9
7
|
return sort.dir === "desc" ? order + " desc" : order;
|
|
10
8
|
}).join(",");
|
|
11
9
|
return str ? `$orderby=${str}` : str;
|
|
12
10
|
};
|
|
13
11
|
const emptyString = constant('');
|
|
14
|
-
const concat = a
|
|
15
|
-
const serializeKey = (strings, val)
|
|
16
|
-
const rules = (settings, state)
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
}[key]
|
|
12
|
+
const concat = (a)=>(b)=>a + b;
|
|
13
|
+
const serializeKey = (strings, val)=>ifElse(isPresent, concat(strings[0]), emptyString)(val);
|
|
14
|
+
const rules = (settings, state)=>(key)=>({
|
|
15
|
+
"filter": serializeFilter(state.filter || {}, settings),
|
|
16
|
+
"skip": serializeKey`$skip=${state.skip}`,
|
|
17
|
+
"sort": serializeSort(state.sort || []),
|
|
18
|
+
"take": serializeKey`$top=${state.take}`
|
|
19
|
+
})[key];
|
|
22
20
|
// tslint:enable:max-line-length
|
|
23
21
|
/**
|
|
24
22
|
* Converts a [`State`]({% slug api_kendo-data-query_state %}) into an OData v4 compatible string.
|
|
@@ -26,9 +24,6 @@ const rules = (settings, state) => (key) => ({
|
|
|
26
24
|
* @param {State} state - The state that will be serialized.
|
|
27
25
|
* @param {ODataSettings} settings - The settings that are used during the serialization.
|
|
28
26
|
* @returns {string} - The serialized state.
|
|
29
|
-
*/
|
|
30
|
-
|
|
31
|
-
.map(rules(settings, state))
|
|
32
|
-
.filter(isNotNullOrEmptyString)
|
|
33
|
-
.join('&'));
|
|
27
|
+
*/ export const toODataString = (state, settings = {})=>Object.keys(state).map(rules(settings, state)).filter(isNotNullOrEmptyString).join('&');
|
|
28
|
+
|
|
34
29
|
//# sourceMappingURL=odata.operators.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":["../src/odata.operators.ts"],"sourcesContent":["import { isPresent, isNotNullOrEmptyString } from './utils';\nimport { SortDescriptor } from './sort-descriptor';\nimport { State } from './state';\nimport { serializeFilter } from './odata-filtering.operators';\nimport { ifElse, constant } from './funcs';\n\nconst serializeSort = (orderby: Array<SortDescriptor>): string => {\n const str = orderby\n .filter(sort => isPresent(sort.dir))\n .map(sort => {\n const order = sort.field.replace(/\\./g, \"/\");\n return sort.dir === \"desc\" ? order + \" desc\" : order;\n }).join(\",\");\n\n return str ? `$orderby=${str}` : str;\n};\n\nconst emptyString = constant('');\nconst concat = a => b => a + b;\n\nconst serializeKey = (strings, val) => ifElse(isPresent, concat(strings[0]), emptyString)(val);\n\nconst rules = (settings, state) => (key) => ({\n \"filter\": serializeFilter(state.filter || {}, settings),\n \"skip\": serializeKey`$skip=${state.skip}`,\n \"sort\": serializeSort(state.sort || []),\n \"take\": serializeKey`$top=${state.take}`\n}[key]);\n\n// tslint:disable:max-line-length\n/**\n * The settings for the ODataString serialization.\n */\nexport interface ODataSettings {\n /**\n * Determines if the dates that are set in the filter descriptors will be serialized as UTC by subtracting the offset for the current time zone. Defaults to `false` which means that the dates will be serialized without modification.\n */\n utcDates?: boolean;\n}\n// tslint:enable:max-line-length\n\n/**\n * Converts a [`State`]({% slug api_kendo-data-query_state %}) into an OData v4 compatible string.\n *\n * @param {State} state - The state that will be serialized.\n * @param {ODataSettings} settings - The settings that are used during the serialization.\n * @returns {string} - The serialized state.\n */\nexport const toODataString = (state: State, settings: ODataSettings = {}): string => (\n Object.keys(state)\n .map(rules(settings, state))\n .filter(isNotNullOrEmptyString)\n .join('&')\n);\n"],"names":["isPresent","isNotNullOrEmptyString","serializeFilter","ifElse","constant","serializeSort","orderby","str","filter","sort","dir","map","order","field","replace","join","emptyString","concat","a","b","serializeKey","strings","val","rules","settings","state","key","skip","take","toODataString","Object","keys"],"mappings":"AAAA,SAASA,SAAS,EAAEC,sBAAsB,QAAQ,UAAU;AAG5D,SAASC,eAAe,QAAQ,8BAA8B;AAC9D,SAASC,MAAM,EAAEC,QAAQ,QAAQ,UAAU;AAE3C,MAAMC,gBAAgB,CAACC;IACnB,MAAMC,MAAMD,QACPE,MAAM,CAACC,CAAAA,OAAQT,UAAUS,KAAKC,GAAG,GACjCC,GAAG,CAACF,CAAAA;QACD,MAAMG,QAAQH,KAAKI,KAAK,CAACC,OAAO,CAAC,OAAO;QACxC,OAAOL,KAAKC,GAAG,KAAK,SAASE,QAAQ,UAAUA;IACnD,GAAGG,IAAI,CAAC;IAEZ,OAAOR,MAAM,CAAC,SAAS,EAAEA,KAAK,GAAGA;AACrC;AAEA,MAAMS,cAAcZ,SAAS;AAC7B,MAAMa,SAASC,CAAAA,IAAKC,CAAAA,IAAKD,IAAIC;AAE7B,MAAMC,eAAe,CAACC,SAASC,MAAQnB,OAAOH,WAAWiB,OAAOI,OAAO,CAAC,EAAE,GAAGL,aAAaM;AAE1F,MAAMC,QAAQ,CAACC,UAAUC,QAAU,CAACC,MAAS,CAAA;YACzC,UAAUxB,gBAAgBuB,MAAMjB,MAAM,IAAI,CAAC,GAAGgB;YAC9C,QAAQJ,YAAY,CAAC,MAAM,EAAEK,MAAME,IAAI,CAAC,CAAC;YACzC,QAAQtB,cAAcoB,MAAMhB,IAAI,IAAI,EAAE;YACtC,QAAQW,YAAY,CAAC,KAAK,EAAEK,MAAMG,IAAI,CAAC,CAAC;QAC5C,CAAA,CAAC,CAACF,IAAI;AAYN,gCAAgC;AAEhC;;;;;;CAMC,GACD,OAAO,MAAMG,gBAAgB,CAACJ,OAAcD,WAA0B,CAAC,CAAC,GACpEM,OAAOC,IAAI,CAACN,OACPd,GAAG,CAACY,MAAMC,UAAUC,QACpBjB,MAAM,CAACP,wBACPc,IAAI,CAAC,KACZ"}
|
package/dist/sort-descriptor.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":["../src/sort-descriptor.ts"],"sourcesContent":["/**\n * The sort descriptor used by the `orderBy` method.\n */\nexport interface SortDescriptor {\n /**\n * The field that is sorted.\n */\n field: string;\n\n /**\n * The sort direction. If no direction is set, the descriptor will be skipped during processing.\n *\n * The available values are:\n * - `asc`\n * - `desc`\n */\n dir?: 'asc' | 'desc';\n}\n"],"names":[],"mappings":"AAAA;;CAEC,GACD,WAcC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { isPresent, isBlank } from '../utils';
|
|
2
2
|
import { getter } from '../accessor';
|
|
3
|
-
const compare = (a, b)
|
|
3
|
+
const compare = (a, b)=>{
|
|
4
4
|
if (isBlank(a)) {
|
|
5
5
|
return a === b ? 0 : -1;
|
|
6
6
|
}
|
|
@@ -10,18 +10,18 @@ const compare = (a, b) => {
|
|
|
10
10
|
if (a.localeCompare) {
|
|
11
11
|
return a.localeCompare(b);
|
|
12
12
|
}
|
|
13
|
-
return a > b ? 1 :
|
|
13
|
+
return a > b ? 1 : a < b ? -1 : 0;
|
|
14
14
|
};
|
|
15
|
-
const compareDesc = (a, b)
|
|
16
|
-
const descriptorAsFunc = (descriptor, preprocessors = {})
|
|
17
|
-
const prop = a
|
|
15
|
+
const compareDesc = (a, b)=>compare(b, a);
|
|
16
|
+
const descriptorAsFunc = (descriptor, preprocessors = {})=>{
|
|
17
|
+
const prop = (a)=>{
|
|
18
18
|
const value = getter(descriptor.field, true)(a);
|
|
19
19
|
const preprocessor = preprocessors[descriptor.field];
|
|
20
20
|
return preprocessor ? preprocessor(value) : value;
|
|
21
21
|
};
|
|
22
|
-
return (a, b)
|
|
22
|
+
return (a, b)=>(descriptor.dir === 'asc' ? compare : compareDesc)(prop(a), prop(b));
|
|
23
23
|
};
|
|
24
|
-
const initial = (_a, _b)
|
|
24
|
+
const initial = (_a, _b)=>0;
|
|
25
25
|
// tslint:disable:max-line-length
|
|
26
26
|
/**
|
|
27
27
|
* Converts the `SortDescriptors` into a [`Comparer`]({% slug api_kendo-data-query_comparer %}) function that can be used through `Array.sort`. If multiple descriptors are provided, sorting is applied in a right-to-left order.
|
|
@@ -37,10 +37,7 @@ const initial = (_a, _b) => 0;
|
|
|
37
37
|
* const result = data.sort(comparer);
|
|
38
38
|
* // output: [{ name: "Beef" }, { name: "Pepper" }, { name: "Pork" }];
|
|
39
39
|
* ```
|
|
40
|
-
*/
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
.filter(x => isPresent(x.dir))
|
|
44
|
-
.map((descriptor) => descriptorAsFunc(descriptor, preprocessors))
|
|
45
|
-
.reduce((acc, curr) => (a, b) => acc(a, b) || curr(a, b), initial));
|
|
40
|
+
*/ // tslint:enable:max-line-length
|
|
41
|
+
export const composeSortDescriptors = (descriptors, preprocessors = {})=>descriptors.filter((x)=>isPresent(x.dir)).map((descriptor)=>descriptorAsFunc(descriptor, preprocessors)).reduce((acc, curr)=>(a, b)=>acc(a, b) || curr(a, b), initial);
|
|
42
|
+
|
|
46
43
|
//# sourceMappingURL=sort-array.operator.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":["../../src/sorting/sort-array.operator.ts"],"sourcesContent":["import { SortDescriptor } from '../sort-descriptor';\nimport { isPresent, isBlank } from '../utils';\nimport { getter } from '../accessor';\nimport { Preprocessors } from '../common.interfaces';\n\n// tslint:disable:max-line-length\n/**\n * A type that represents a function which compares two values and returns `1`, `0`, or `-1` (minus one).\n *\n * For more information, refer to the [`composeSortDescriptors`]({% slug api_kendo-data-query_composesortdescriptors %}) configuration.\n *\n * @example\n * ```ts-no-run\n * const isGreaterThan: Comparer = (a, b) => a > b ? 1 : -1;\n * isGreaterThan(42, 42); // 0\n * isGreaterThan(22, 42); // -1\n * isGreaterThan(42, 22); // 1\n * ```\n */\n// tslint:enable:max-line-length\nexport type Comparer = <T>(a: T, b: T) => number;\n\nconst compare = (a, b) => {\n if (isBlank(a)) {\n return a === b ? 0 : -1;\n }\n\n if (isBlank(b)) {\n return 1;\n }\n\n if (a.localeCompare) {\n return a.localeCompare(b);\n }\n return a > b ? 1 : (a < b ? -1 : 0);\n};\n\nconst compareDesc: Comparer = (a, b) => compare(b, a);\n\nconst descriptorAsFunc = <T>(descriptor: SortDescriptor, preprocessors: Preprocessors<T> = {}): Comparer => {\n const prop = a => {\n const value = getter(descriptor.field, true)(a);\n const preprocessor = preprocessors[descriptor.field];\n return preprocessor ? preprocessor(value) : value;\n };\n return (a, b) => (descriptor.dir === 'asc' ? compare : compareDesc)(prop(a), prop(b));\n};\n\nconst initial: Comparer = (_a, _b) => 0;\n\n// tslint:disable:max-line-length\n/**\n * Converts the `SortDescriptors` into a [`Comparer`]({% slug api_kendo-data-query_comparer %}) function that can be used through `Array.sort`. If multiple descriptors are provided, sorting is applied in a right-to-left order.\n * @param {SortDescriptor[]} descriptors - The descriptors which will be converted.\n * @returns {Comparer} - The produced function.\n *\n * @example\n * ```ts-no-run\n * import { composeSortDescriptors } from '@progress/kendo-data-query';\n *\n * const data = [{ name: \"Pork\" }, { name: \"Pepper\" }, { name: \"Beef\" } ];\n * const comparer = composeSortDescriptors([{ field: \"name\", dir: \"asc\" }]);\n * const result = data.sort(comparer);\n * // output: [{ name: \"Beef\" }, { name: \"Pepper\" }, { name: \"Pork\" }];\n * ```\n */\n// tslint:enable:max-line-length\nexport const composeSortDescriptors = <T>(descriptors: SortDescriptor[], preprocessors: Preprocessors<T> = {}): Comparer => (\n descriptors\n .filter(x => isPresent(x.dir))\n .map((descriptor: SortDescriptor) => descriptorAsFunc(descriptor, preprocessors))\n .reduce(\n (acc: Comparer, curr: Function): Comparer => (a, b) => acc(a, b) || curr(a, b),\n initial\n )\n);\n"],"names":["isPresent","isBlank","getter","compare","a","b","localeCompare","compareDesc","descriptorAsFunc","descriptor","preprocessors","prop","value","field","preprocessor","dir","initial","_a","_b","composeSortDescriptors","descriptors","filter","x","map","reduce","acc","curr"],"mappings":"AACA,SAASA,SAAS,EAAEC,OAAO,QAAQ,WAAW;AAC9C,SAASC,MAAM,QAAQ,cAAc;AAoBrC,MAAMC,UAAU,CAACC,GAAGC;IAChB,IAAIJ,QAAQG,IAAI;QACZ,OAAOA,MAAMC,IAAI,IAAI,CAAC;IAC1B;IAEA,IAAIJ,QAAQI,IAAI;QACZ,OAAO;IACX;IAEA,IAAID,EAAEE,aAAa,EAAE;QACjB,OAAOF,EAAEE,aAAa,CAACD;IAC3B;IACA,OAAOD,IAAIC,IAAI,IAAKD,IAAIC,IAAI,CAAC,IAAI;AACrC;AAEA,MAAME,cAAwB,CAACH,GAAGC,IAAMF,QAAQE,GAAGD;AAEnD,MAAMI,mBAAmB,CAAIC,YAA4BC,gBAAkC,CAAC,CAAC;IACzF,MAAMC,OAAOP,CAAAA;QACT,MAAMQ,QAAQV,OAAOO,WAAWI,KAAK,EAAE,MAAMT;QAC7C,MAAMU,eAAeJ,aAAa,CAACD,WAAWI,KAAK,CAAC;QACpD,OAAOC,eAAeA,aAAaF,SAASA;IAChD;IACA,OAAO,CAACR,GAAGC,IAAM,AAACI,CAAAA,WAAWM,GAAG,KAAK,QAAQZ,UAAUI,WAAU,EAAGI,KAAKP,IAAIO,KAAKN;AACtF;AAEA,MAAMW,UAAoB,CAACC,IAAIC,KAAO;AAEtC,iCAAiC;AACjC;;;;;;;;;;;;;;CAcC,GACD,gCAAgC;AAChC,OAAO,MAAMC,yBAAyB,CAAIC,aAA+BV,gBAAkC,CAAC,CAAC,GACzGU,YACKC,MAAM,CAACC,CAAAA,IAAKtB,UAAUsB,EAAEP,GAAG,GAC3BQ,GAAG,CAAC,CAACd,aAA+BD,iBAAiBC,YAAYC,gBACjEc,MAAM,CACH,CAACC,KAAeC,OAA6B,CAACtB,GAAGC,IAAMoB,IAAIrB,GAAGC,MAAMqB,KAAKtB,GAAGC,IAC5EW,SAEV"}
|
package/dist/sorting/sort.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
const merge = (data, left, middle, right, compare)
|
|
1
|
+
const merge = (data, left, middle, right, compare)=>{
|
|
2
2
|
let leftLength = middle - left;
|
|
3
3
|
let rightLength = right - middle;
|
|
4
4
|
const temp = [];
|
|
5
|
-
for
|
|
5
|
+
for(let idx = 0; idx < leftLength; idx++){
|
|
6
6
|
temp.push(data[left + idx]);
|
|
7
7
|
}
|
|
8
8
|
let cursor1 = 0;
|
|
@@ -12,31 +12,30 @@ const merge = (data, left, middle, right, compare) => {
|
|
|
12
12
|
if (compare(data[cursor2], temp[cursor1]) < 0) {
|
|
13
13
|
data[dest++] = data[cursor2++];
|
|
14
14
|
rightLength--;
|
|
15
|
-
}
|
|
16
|
-
else {
|
|
15
|
+
} else {
|
|
17
16
|
data[dest++] = temp[cursor1++];
|
|
18
17
|
leftLength--;
|
|
19
18
|
}
|
|
20
|
-
}
|
|
21
|
-
while
|
|
19
|
+
}while (rightLength > 0 && leftLength > 0)
|
|
20
|
+
while(leftLength){
|
|
22
21
|
data[dest++] = temp[cursor1++];
|
|
23
22
|
leftLength--;
|
|
24
23
|
}
|
|
25
|
-
while
|
|
24
|
+
while(rightLength){
|
|
26
25
|
data[dest++] = data[cursor2++];
|
|
27
26
|
rightLength--;
|
|
28
27
|
}
|
|
29
28
|
};
|
|
30
29
|
/**
|
|
31
30
|
* @hidden
|
|
32
|
-
*/
|
|
33
|
-
export const sort = (data, start, end, compare) => {
|
|
31
|
+
*/ export const sort = (data, start, end, compare)=>{
|
|
34
32
|
if (end - start < 2) {
|
|
35
33
|
return;
|
|
36
34
|
}
|
|
37
|
-
const mid =
|
|
35
|
+
const mid = start + end >>> 1; // tslint:disable-line:no-bitwise
|
|
38
36
|
sort(data, start, mid, compare);
|
|
39
37
|
sort(data, mid, end, compare);
|
|
40
38
|
merge(data, start, mid, end, compare);
|
|
41
39
|
};
|
|
40
|
+
|
|
42
41
|
//# sourceMappingURL=sort.js.map
|
package/dist/sorting/sort.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":["../../src/sorting/sort.ts"],"sourcesContent":["import { Comparer } from './sort-array.operator';\n\nconst merge = <T>(data: T[], left: number, middle: number, right: number, compare: Comparer) => {\n let leftLength = middle - left;\n let rightLength = right - middle;\n\n const temp = [];\n\n for (let idx = 0; idx < leftLength; idx++) {\n temp.push(data[left + idx]);\n }\n\n let cursor1 = 0;\n let cursor2 = middle;\n let dest = left;\n\n do {\n if (compare(data[cursor2], temp[cursor1]) < 0) {\n data[dest++] = data[cursor2++];\n rightLength--;\n } else {\n data[dest++] = temp[cursor1++];\n leftLength--;\n }\n } while (rightLength > 0 && leftLength > 0);\n\n while (leftLength) {\n data[dest++] = temp[cursor1++];\n leftLength--;\n }\n\n while (rightLength) {\n data[dest++] = data[cursor2++];\n rightLength--;\n }\n};\n\n/**\n * @hidden\n */\nexport const sort = <T>(data: T[], start: number, end: number, compare): T[] => {\n if (end - start < 2) {\n return;\n }\n\n const mid = (start + end) >>> 1; // tslint:disable-line:no-bitwise\n\n sort(data, start, mid, compare);\n sort(data, mid, end, compare);\n\n merge(data, start, mid, end, compare);\n};\n"],"names":["merge","data","left","middle","right","compare","leftLength","rightLength","temp","idx","push","cursor1","cursor2","dest","sort","start","end","mid"],"mappings":"AAEA,MAAMA,QAAQ,CAAIC,MAAWC,MAAcC,QAAgBC,OAAeC;IACtE,IAAIC,aAAaH,SAASD;IAC1B,IAAIK,cAAcH,QAAQD;IAE1B,MAAMK,OAAO,EAAE;IAEf,IAAK,IAAIC,MAAM,GAAGA,MAAMH,YAAYG,MAAO;QACvCD,KAAKE,IAAI,CAACT,IAAI,CAACC,OAAOO,IAAI;IAC9B;IAEA,IAAIE,UAAU;IACd,IAAIC,UAAUT;IACd,IAAIU,OAAOX;IAEX,GAAG;QACC,IAAIG,QAAQJ,IAAI,CAACW,QAAQ,EAAEJ,IAAI,CAACG,QAAQ,IAAI,GAAG;YAC3CV,IAAI,CAACY,OAAO,GAAGZ,IAAI,CAACW,UAAU;YAC9BL;QACJ,OAAO;YACHN,IAAI,CAACY,OAAO,GAAGL,IAAI,CAACG,UAAU;YAC9BL;QACJ;IACJ,QAASC,cAAc,KAAKD,aAAa,EAAG;IAE5C,MAAOA,WAAY;QACfL,IAAI,CAACY,OAAO,GAAGL,IAAI,CAACG,UAAU;QAC9BL;IACJ;IAEA,MAAOC,YAAa;QAChBN,IAAI,CAACY,OAAO,GAAGZ,IAAI,CAACW,UAAU;QAC9BL;IACJ;AACJ;AAEA;;CAEC,GACD,OAAO,MAAMO,OAAO,CAAIb,MAAWc,OAAeC,KAAaX;IAC3D,IAAIW,MAAMD,QAAQ,GAAG;QACjB;IACJ;IAEA,MAAME,MAAM,AAACF,QAAQC,QAAS,GAAG,iCAAiC;IAElEF,KAAKb,MAAMc,OAAOE,KAAKZ;IACvBS,KAAKb,MAAMgB,KAAKD,KAAKX;IAErBL,MAAMC,MAAMc,OAAOE,KAAKD,KAAKX;AACjC,EAAE"}
|
package/dist/state.js
CHANGED
package/dist/state.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":["../src/state.ts"],"sourcesContent":["import { SortDescriptor } from './sort-descriptor';\nimport { CompositeFilterDescriptor } from './filtering/filter-descriptor.interface';\nimport { GroupDescriptor } from './grouping/group-descriptor.interface';\n\n/**\n * The state of the data operations applied to the Grid component.\n */\nexport interface State {\n /**\n * The number of records to be skipped by the pager.\n */\n skip?: number;\n\n /**\n * The number of records to take.\n */\n take?: number;\n\n /**\n * The descriptors used for sorting.\n */\n sort?: Array<SortDescriptor>;\n\n /**\n * The descriptors used for filtering.\n */\n filter?: CompositeFilterDescriptor;\n\n /**\n * The descriptors used for grouping.\n */\n group?: Array<GroupDescriptor>;\n}\n\n"],"names":[],"mappings":"AAIA;;CAEC,GACD,WAyBC"}
|