@feathersjs/adapter-commons 5.0.0-pre.14 → 5.0.0-pre.15
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/CHANGELOG.md +13 -0
- package/lib/index.d.ts +1 -1
- package/lib/index.js +6 -9
- package/lib/index.js.map +1 -1
- package/lib/sort.d.ts +5 -3
- package/lib/sort.js +35 -47
- package/lib/sort.js.map +1 -1
- package/package.json +9 -9
- package/src/index.ts +6 -11
- package/src/sort.ts +33 -53
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,19 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
# [5.0.0-pre.15](https://github.com/feathersjs/feathers/compare/v5.0.0-pre.14...v5.0.0-pre.15) (2021-11-27)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### Bug Fixes
|
|
10
|
+
|
|
11
|
+
* **adapter-commons:** clean up in sort.ts and select function ([#2492](https://github.com/feathersjs/feathers/issues/2492)) ([c3ec8a4](https://github.com/feathersjs/feathers/commit/c3ec8a418bdc85506e3c5100015720a45454d8d3))
|
|
12
|
+
* **adapter-commons:** Fix sorting for embedded objects ([#2488](https://github.com/feathersjs/feathers/issues/2488)) ([9c22f70](https://github.com/feathersjs/feathers/commit/9c22f70a838cb6341775d91705a7527c8fc5590e))
|
|
13
|
+
* **typescript:** Overall typing improvements ([#2478](https://github.com/feathersjs/feathers/issues/2478)) ([b8eb804](https://github.com/feathersjs/feathers/commit/b8eb804158556d9651a8607e3c3fda15e0bfd110))
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
|
|
6
19
|
# [5.0.0-pre.14](https://github.com/feathersjs/feathers/compare/v5.0.0-pre.13...v5.0.0-pre.14) (2021-10-13)
|
|
7
20
|
|
|
8
21
|
**Note:** Version bump only for package @feathersjs/adapter-commons
|
package/lib/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
export { AdapterService, InternalServiceMethods, ServiceOptions, AdapterParams } from './service';
|
|
2
2
|
export { filterQuery, FILTERS, OPERATORS } from './filter-query';
|
|
3
3
|
export * from './sort';
|
|
4
|
-
export declare function select(params: any, ...otherFields:
|
|
4
|
+
export declare function select(params: any, ...otherFields: string[]): (result: any) => any;
|
package/lib/index.js
CHANGED
|
@@ -23,16 +23,13 @@ __exportStar(require("./sort"), exports);
|
|
|
23
23
|
// and picks only the fields passed as `params.query.$select`
|
|
24
24
|
// and additional `otherFields`
|
|
25
25
|
function select(params, ...otherFields) {
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
26
|
+
var _a;
|
|
27
|
+
const queryFields = (_a = params === null || params === void 0 ? void 0 : params.query) === null || _a === void 0 ? void 0 : _a.$select;
|
|
28
|
+
if (!queryFields) {
|
|
29
|
+
return (result) => result;
|
|
29
30
|
}
|
|
30
|
-
const
|
|
31
|
-
|
|
32
|
-
return result;
|
|
33
|
-
}
|
|
34
|
-
return commons_1._.pick(result, ...fields);
|
|
35
|
-
};
|
|
31
|
+
const resultFields = queryFields.concat(otherFields);
|
|
32
|
+
const convert = (result) => commons_1._.pick(result, ...resultFields);
|
|
36
33
|
return (result) => {
|
|
37
34
|
if (Array.isArray(result)) {
|
|
38
35
|
return result.map(convert);
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,iDAAwC;AAExC,qCAAkG;AAAzF,yGAAA,cAAc,OAAA;AACvB,+CAAiE;AAAxD,2GAAA,WAAW,OAAA;AAAE,uGAAA,OAAO,OAAA;AAAE,yGAAA,SAAS,OAAA;AACxC,yCAAuB;AAEvB,0DAA0D;AAC1D,6DAA6D;AAC7D,+BAA+B;AAC/B,SAAgB,MAAM,CAAE,MAAW,EAAE,GAAG,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,iDAAwC;AAExC,qCAAkG;AAAzF,yGAAA,cAAc,OAAA;AACvB,+CAAiE;AAAxD,2GAAA,WAAW,OAAA;AAAE,uGAAA,OAAO,OAAA;AAAE,yGAAA,SAAS,OAAA;AACxC,yCAAuB;AAEvB,0DAA0D;AAC1D,6DAA6D;AAC7D,+BAA+B;AAC/B,SAAgB,MAAM,CAAE,MAAW,EAAE,GAAG,WAAqB;;IAC3D,MAAM,WAAW,GAAyB,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,KAAK,0CAAE,OAAO,CAAC;IAEjE,IAAI,CAAC,WAAW,EAAE;QAChB,OAAO,CAAC,MAAW,EAAE,EAAE,CAAC,MAAM,CAAC;KAChC;IAED,MAAM,YAAY,GAAG,WAAW,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IACrD,MAAM,OAAO,GAAG,CAAC,MAAW,EAAE,EAAE,CAAC,WAAC,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,YAAY,CAAC,CAAC;IAEjE,OAAO,CAAC,MAAW,EAAE,EAAE;QACrB,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;YACzB,OAAO,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;SAC5B;QAED,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC;IACzB,CAAC,CAAC;AACJ,CAAC;AAjBD,wBAiBC"}
|
package/lib/sort.d.ts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
export declare function compareNSB(a: any, b: any): 1 | -1 | 0;
|
|
2
|
-
export declare function compareArrays(a: any, b: any):
|
|
3
|
-
export declare function compare(a: any, b: any, compareStrings?: any):
|
|
4
|
-
export declare function sorter($sort:
|
|
2
|
+
export declare function compareArrays(a: any[], b: any[]): 1 | -1 | 0;
|
|
3
|
+
export declare function compare(a: any, b: any, compareStrings?: any): 0 | 1 | -1;
|
|
4
|
+
export declare function sorter($sort: {
|
|
5
|
+
[key: string]: -1 | 1;
|
|
6
|
+
}): (a: any, b: any) => number;
|
package/lib/sort.js
CHANGED
|
@@ -14,77 +14,76 @@ function compareNSB(a, b) {
|
|
|
14
14
|
}
|
|
15
15
|
exports.compareNSB = compareNSB;
|
|
16
16
|
function compareArrays(a, b) {
|
|
17
|
-
let i;
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
if (comp !== 0) {
|
|
22
|
-
return comp;
|
|
17
|
+
for (let i = 0, l = Math.min(a.length, b.length); i < l; i++) {
|
|
18
|
+
const comparison = compare(a[i], b[i]);
|
|
19
|
+
if (comparison !== 0) {
|
|
20
|
+
return comparison;
|
|
23
21
|
}
|
|
24
22
|
}
|
|
25
23
|
// Common section was identical, longest one wins
|
|
26
|
-
return
|
|
24
|
+
return compareNSB(a.length, b.length);
|
|
27
25
|
}
|
|
28
26
|
exports.compareArrays = compareArrays;
|
|
29
|
-
function compare(a, b, compareStrings =
|
|
30
|
-
|
|
27
|
+
function compare(a, b, compareStrings = compareNSB) {
|
|
28
|
+
if (a === b) {
|
|
29
|
+
return 0;
|
|
30
|
+
}
|
|
31
31
|
// undefined
|
|
32
32
|
if (a === undefined) {
|
|
33
|
-
return
|
|
33
|
+
return -1;
|
|
34
34
|
}
|
|
35
35
|
if (b === undefined) {
|
|
36
|
-
return
|
|
36
|
+
return 1;
|
|
37
37
|
}
|
|
38
38
|
// null
|
|
39
39
|
if (a === null) {
|
|
40
|
-
return
|
|
40
|
+
return -1;
|
|
41
41
|
}
|
|
42
42
|
if (b === null) {
|
|
43
|
-
return
|
|
43
|
+
return 1;
|
|
44
44
|
}
|
|
45
45
|
// Numbers
|
|
46
46
|
if (typeof a === 'number') {
|
|
47
47
|
return typeof b === 'number' ? compareNSB(a, b) : -1;
|
|
48
48
|
}
|
|
49
49
|
if (typeof b === 'number') {
|
|
50
|
-
return
|
|
50
|
+
return 1;
|
|
51
51
|
}
|
|
52
52
|
// Strings
|
|
53
53
|
if (typeof a === 'string') {
|
|
54
54
|
return typeof b === 'string' ? compareStrings(a, b) : -1;
|
|
55
55
|
}
|
|
56
56
|
if (typeof b === 'string') {
|
|
57
|
-
return
|
|
57
|
+
return 1;
|
|
58
58
|
}
|
|
59
59
|
// Booleans
|
|
60
60
|
if (typeof a === 'boolean') {
|
|
61
61
|
return typeof b === 'boolean' ? compareNSB(a, b) : -1;
|
|
62
62
|
}
|
|
63
63
|
if (typeof b === 'boolean') {
|
|
64
|
-
return
|
|
64
|
+
return 1;
|
|
65
65
|
}
|
|
66
66
|
// Dates
|
|
67
67
|
if (a instanceof Date) {
|
|
68
68
|
return b instanceof Date ? compareNSB(a.getTime(), b.getTime()) : -1;
|
|
69
69
|
}
|
|
70
70
|
if (b instanceof Date) {
|
|
71
|
-
return
|
|
71
|
+
return 1;
|
|
72
72
|
}
|
|
73
73
|
// Arrays (first element is most significant and so on)
|
|
74
74
|
if (Array.isArray(a)) {
|
|
75
75
|
return Array.isArray(b) ? compareArrays(a, b) : -1;
|
|
76
76
|
}
|
|
77
77
|
if (Array.isArray(b)) {
|
|
78
|
-
return
|
|
78
|
+
return 1;
|
|
79
79
|
}
|
|
80
80
|
// Objects
|
|
81
81
|
const aKeys = Object.keys(a).sort();
|
|
82
82
|
const bKeys = Object.keys(b).sort();
|
|
83
|
-
let
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
return comp;
|
|
83
|
+
for (let i = 0, l = Math.min(aKeys.length, bKeys.length); i < l; i++) {
|
|
84
|
+
const comparison = compare(a[aKeys[i]], b[bKeys[i]]);
|
|
85
|
+
if (comparison !== 0) {
|
|
86
|
+
return comparison;
|
|
88
87
|
}
|
|
89
88
|
}
|
|
90
89
|
return compareNSB(aKeys.length, bKeys.length);
|
|
@@ -93,33 +92,22 @@ exports.compare = compare;
|
|
|
93
92
|
// An in-memory sorting function according to the
|
|
94
93
|
// $sort special query parameter
|
|
95
94
|
function sorter($sort) {
|
|
96
|
-
|
|
97
|
-
const
|
|
98
|
-
let keys = sortKeys.map(key => key);
|
|
99
|
-
let val = a;
|
|
100
|
-
do {
|
|
101
|
-
let key = keys.shift();
|
|
102
|
-
val = val[key];
|
|
103
|
-
} while (keys.length);
|
|
104
|
-
return val;
|
|
105
|
-
};
|
|
106
|
-
const criteria = Object.keys($sort).map(key => {
|
|
95
|
+
const get = (value, path) => path.reduce((value, key) => value[key], value);
|
|
96
|
+
const compares = Object.keys($sort).map(key => {
|
|
107
97
|
const direction = $sort[key];
|
|
108
|
-
const
|
|
109
|
-
|
|
110
|
-
|
|
98
|
+
const path = key.split('.');
|
|
99
|
+
if (path.length === 1) {
|
|
100
|
+
return (a, b) => direction * compare(a[key], b[key]);
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
return (a, b) => direction * compare(get(a, path), get(b, path));
|
|
104
|
+
}
|
|
111
105
|
});
|
|
112
106
|
return function (a, b) {
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
if (
|
|
116
|
-
|
|
117
|
-
}
|
|
118
|
-
else {
|
|
119
|
-
compare = criterion.direction * exports.compare(a[criterion.keys[0]], b[criterion.keys[0]]);
|
|
120
|
-
}
|
|
121
|
-
if (compare !== 0) {
|
|
122
|
-
return compare;
|
|
107
|
+
for (const compare of compares) {
|
|
108
|
+
const comparasion = compare(a, b);
|
|
109
|
+
if (comparasion !== 0) {
|
|
110
|
+
return comparasion;
|
|
123
111
|
}
|
|
124
112
|
}
|
|
125
113
|
return 0;
|
package/lib/sort.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sort.js","sourceRoot":"","sources":["../src/sort.ts"],"names":[],"mappings":";AAAA,4EAA4E;AAC5E,4GAA4G;;;AAE5G,SAAgB,UAAU,CAAE,CAAM,EAAE,CAAM;IACxC,IAAI,CAAC,GAAG,CAAC,EAAE;QAAE,OAAO,CAAC,CAAC,CAAC;KAAE;IACzB,IAAI,CAAC,GAAG,CAAC,EAAE;QAAE,OAAO,CAAC,CAAC;KAAE;IACxB,OAAO,CAAC,CAAC;AACX,CAAC;AAJD,gCAIC;AAED,SAAgB,aAAa,CAAE,
|
|
1
|
+
{"version":3,"file":"sort.js","sourceRoot":"","sources":["../src/sort.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@feathersjs/adapter-commons",
|
|
3
|
-
"version": "5.0.0-pre.
|
|
3
|
+
"version": "5.0.0-pre.15",
|
|
4
4
|
"description": "Shared database adapter utility functions",
|
|
5
5
|
"homepage": "https://feathersjs.com",
|
|
6
6
|
"keywords": [
|
|
@@ -48,19 +48,19 @@
|
|
|
48
48
|
"access": "public"
|
|
49
49
|
},
|
|
50
50
|
"dependencies": {
|
|
51
|
-
"@feathersjs/commons": "^5.0.0-pre.
|
|
52
|
-
"@feathersjs/errors": "^5.0.0-pre.
|
|
53
|
-
"@feathersjs/feathers": "^5.0.0-pre.
|
|
51
|
+
"@feathersjs/commons": "^5.0.0-pre.15",
|
|
52
|
+
"@feathersjs/errors": "^5.0.0-pre.15",
|
|
53
|
+
"@feathersjs/feathers": "^5.0.0-pre.15"
|
|
54
54
|
},
|
|
55
55
|
"devDependencies": {
|
|
56
56
|
"@types/mocha": "^9.0.0",
|
|
57
57
|
"@types/mongodb": "^4.0.6",
|
|
58
|
-
"@types/node": "^16.
|
|
59
|
-
"mocha": "^9.1.
|
|
60
|
-
"mongodb": "^4.1.
|
|
58
|
+
"@types/node": "^16.11.6",
|
|
59
|
+
"mocha": "^9.1.3",
|
|
60
|
+
"mongodb": "^4.1.4",
|
|
61
61
|
"shx": "^0.3.3",
|
|
62
|
-
"ts-node": "^10.
|
|
62
|
+
"ts-node": "^10.4.0",
|
|
63
63
|
"typescript": "^4.4.4"
|
|
64
64
|
},
|
|
65
|
-
"gitHead": "
|
|
65
|
+
"gitHead": "8008bf4f8529a2a40b6a2f976c1f43ae13675693"
|
|
66
66
|
}
|
package/src/index.ts
CHANGED
|
@@ -7,20 +7,15 @@ export * from './sort';
|
|
|
7
7
|
// Return a function that filters a result object or array
|
|
8
8
|
// and picks only the fields passed as `params.query.$select`
|
|
9
9
|
// and additional `otherFields`
|
|
10
|
-
export function select (params: any, ...otherFields:
|
|
11
|
-
const
|
|
10
|
+
export function select (params: any, ...otherFields: string[]) {
|
|
11
|
+
const queryFields: string[] | undefined = params?.query?.$select;
|
|
12
12
|
|
|
13
|
-
if (
|
|
14
|
-
|
|
13
|
+
if (!queryFields) {
|
|
14
|
+
return (result: any) => result;
|
|
15
15
|
}
|
|
16
16
|
|
|
17
|
-
const
|
|
18
|
-
|
|
19
|
-
return result;
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
return _.pick(result, ...fields);
|
|
23
|
-
};
|
|
17
|
+
const resultFields = queryFields.concat(otherFields);
|
|
18
|
+
const convert = (result: any) => _.pick(result, ...resultFields);
|
|
24
19
|
|
|
25
20
|
return (result: any) => {
|
|
26
21
|
if (Array.isArray(result)) {
|
package/src/sort.ts
CHANGED
|
@@ -7,60 +7,56 @@ export function compareNSB (a: any, b: any) {
|
|
|
7
7
|
return 0;
|
|
8
8
|
}
|
|
9
9
|
|
|
10
|
-
export function compareArrays (a: any, b: any) {
|
|
11
|
-
let i;
|
|
12
|
-
|
|
10
|
+
export function compareArrays (a: any[], b: any[]) {
|
|
11
|
+
for (let i = 0, l = Math.min(a.length, b.length); i < l; i++) {
|
|
12
|
+
const comparison = compare(a[i], b[i]);
|
|
13
13
|
|
|
14
|
-
|
|
15
|
-
comp = exports.compare(a[i], b[i]);
|
|
16
|
-
|
|
17
|
-
if (comp !== 0) { return comp; }
|
|
14
|
+
if (comparison !== 0) { return comparison; }
|
|
18
15
|
}
|
|
19
16
|
|
|
20
17
|
// Common section was identical, longest one wins
|
|
21
|
-
return
|
|
18
|
+
return compareNSB(a.length, b.length);
|
|
22
19
|
}
|
|
23
20
|
|
|
24
|
-
export function compare (a: any, b: any, compareStrings: any =
|
|
25
|
-
|
|
21
|
+
export function compare (a: any, b: any, compareStrings: any = compareNSB): 0 | 1 | -1 {
|
|
22
|
+
if (a === b) { return 0; }
|
|
26
23
|
|
|
27
24
|
// undefined
|
|
28
|
-
if (a === undefined) { return
|
|
29
|
-
if (b === undefined) { return
|
|
25
|
+
if (a === undefined) { return -1; }
|
|
26
|
+
if (b === undefined) { return 1; }
|
|
30
27
|
|
|
31
28
|
// null
|
|
32
|
-
if (a === null) { return
|
|
33
|
-
if (b === null) { return
|
|
29
|
+
if (a === null) { return -1; }
|
|
30
|
+
if (b === null) { return 1; }
|
|
34
31
|
|
|
35
32
|
// Numbers
|
|
36
33
|
if (typeof a === 'number') { return typeof b === 'number' ? compareNSB(a, b) : -1; }
|
|
37
|
-
if (typeof b === 'number') { return
|
|
34
|
+
if (typeof b === 'number') { return 1; }
|
|
38
35
|
|
|
39
36
|
// Strings
|
|
40
37
|
if (typeof a === 'string') { return typeof b === 'string' ? compareStrings(a, b) : -1; }
|
|
41
|
-
if (typeof b === 'string') { return
|
|
38
|
+
if (typeof b === 'string') { return 1; }
|
|
42
39
|
|
|
43
40
|
// Booleans
|
|
44
41
|
if (typeof a === 'boolean') { return typeof b === 'boolean' ? compareNSB(a, b) : -1; }
|
|
45
|
-
if (typeof b === 'boolean') { return
|
|
42
|
+
if (typeof b === 'boolean') { return 1; }
|
|
46
43
|
|
|
47
44
|
// Dates
|
|
48
45
|
if (a instanceof Date) { return b instanceof Date ? compareNSB(a.getTime(), b.getTime()) : -1; }
|
|
49
|
-
if (b instanceof Date) { return
|
|
46
|
+
if (b instanceof Date) { return 1; }
|
|
50
47
|
|
|
51
48
|
// Arrays (first element is most significant and so on)
|
|
52
49
|
if (Array.isArray(a)) { return Array.isArray(b) ? compareArrays(a, b) : -1; }
|
|
53
|
-
if (Array.isArray(b)) { return
|
|
50
|
+
if (Array.isArray(b)) { return 1; }
|
|
54
51
|
|
|
55
52
|
// Objects
|
|
56
53
|
const aKeys = Object.keys(a).sort();
|
|
57
54
|
const bKeys = Object.keys(b).sort();
|
|
58
|
-
let comp = 0;
|
|
59
55
|
|
|
60
|
-
for (let i = 0
|
|
61
|
-
|
|
56
|
+
for (let i = 0, l = Math.min(aKeys.length, bKeys.length); i < l; i++) {
|
|
57
|
+
const comparison = compare(a[aKeys[i]], b[bKeys[i]]);
|
|
62
58
|
|
|
63
|
-
if (
|
|
59
|
+
if (comparison !== 0) { return comparison; }
|
|
64
60
|
}
|
|
65
61
|
|
|
66
62
|
return compareNSB(aKeys.length, bKeys.length);
|
|
@@ -68,41 +64,25 @@ export function compare (a: any, b: any, compareStrings: any = exports.compareNS
|
|
|
68
64
|
|
|
69
65
|
// An in-memory sorting function according to the
|
|
70
66
|
// $sort special query parameter
|
|
71
|
-
export function sorter ($sort:
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
const getVal = (a: any, sortKeys: any[]) => {
|
|
75
|
-
let keys = sortKeys.map(key => key);
|
|
76
|
-
let val = a;
|
|
77
|
-
do {
|
|
78
|
-
let key = keys.shift();
|
|
79
|
-
val = val[key];
|
|
80
|
-
} while (keys.length);
|
|
81
|
-
|
|
82
|
-
return val;
|
|
83
|
-
};
|
|
84
|
-
|
|
85
|
-
const criteria = Object.keys($sort).map(key => {
|
|
86
|
-
const direction = $sort[key];
|
|
87
|
-
const keys = key.split('.');
|
|
88
|
-
sortLevels = keys.length > 1;
|
|
89
|
-
|
|
90
|
-
return { keys, direction };
|
|
91
|
-
});
|
|
67
|
+
export function sorter ($sort: { [key: string]: -1 | 1 }) {
|
|
68
|
+
const get = (value: any, path: string[]) => path.reduce((value, key) => value[key], value);
|
|
92
69
|
|
|
93
|
-
|
|
94
|
-
|
|
70
|
+
const compares = Object.keys($sort).map(key => {
|
|
71
|
+
const direction = $sort[key];
|
|
72
|
+
const path = key.split('.');
|
|
95
73
|
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
compare = criterion.direction * exports.compare(getVal(a, criterion.keys), getVal(b, criterion.keys));
|
|
74
|
+
if (path.length === 1) {
|
|
75
|
+
return (a: any, b: any) => direction * compare(a[key], b[key]);
|
|
99
76
|
} else {
|
|
100
|
-
|
|
77
|
+
return (a: any, b: any) => direction * compare(get(a, path), get(b, path));
|
|
101
78
|
}
|
|
79
|
+
});
|
|
80
|
+
|
|
81
|
+
return function (a: any, b: any) {
|
|
82
|
+
for (const compare of compares) {
|
|
83
|
+
const comparasion = compare(a, b);
|
|
102
84
|
|
|
103
|
-
if (
|
|
104
|
-
return compare;
|
|
105
|
-
}
|
|
85
|
+
if (comparasion !== 0) { return comparasion; }
|
|
106
86
|
}
|
|
107
87
|
|
|
108
88
|
return 0;
|