@feathersjs/adapter-commons 5.0.24 → 5.0.26
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 +10 -0
- package/lib/sort.d.ts +3 -3
- package/lib/sort.js +25 -31
- package/lib/sort.js.map +1 -1
- package/package.json +8 -8
- package/src/sort.ts +34 -35
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,16 @@
|
|
|
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.26](https://github.com/feathersjs/feathers/compare/v5.0.25...v5.0.26) (2024-06-09)
|
|
7
|
+
|
|
8
|
+
### Bug Fixes
|
|
9
|
+
|
|
10
|
+
- **adapter-commons:** Faster sorter ([#3495](https://github.com/feathersjs/feathers/issues/3495)) ([22243e4](https://github.com/feathersjs/feathers/commit/22243e4d92edc1a7343b4cf42be6dfb22e8b86d5))
|
|
11
|
+
|
|
12
|
+
## [5.0.25](https://github.com/feathersjs/feathers/compare/v5.0.24...v5.0.25) (2024-05-03)
|
|
13
|
+
|
|
14
|
+
**Note:** Version bump only for package @feathersjs/adapter-commons
|
|
15
|
+
|
|
6
16
|
## [5.0.24](https://github.com/feathersjs/feathers/compare/v5.0.23...v5.0.24) (2024-03-13)
|
|
7
17
|
|
|
8
18
|
**Note:** Version bump only for package @feathersjs/adapter-commons
|
package/lib/sort.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export declare function compareNSB(a:
|
|
2
|
-
export declare function compareArrays(a: any[], b: any[]):
|
|
3
|
-
export declare function compare(a: any, b: any, compareStrings?: any): 0 | 1 | -1;
|
|
1
|
+
export declare function compareNSB(a: number | string | boolean, b: number | string | boolean): 0 | 1 | -1;
|
|
2
|
+
export declare function compareArrays(a: any[], b: any[]): 0 | 1 | -1;
|
|
3
|
+
export declare function compare(a: any, b: any, compareStrings?: (a: any, b: any) => 0 | 1 | -1): 0 | 1 | -1;
|
|
4
4
|
export declare function sorter($sort: {
|
|
5
5
|
[key: string]: -1 | 1;
|
|
6
6
|
}): (a: any, b: any) => number;
|
package/lib/sort.js
CHANGED
|
@@ -4,13 +4,10 @@
|
|
|
4
4
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
5
|
exports.sorter = exports.compare = exports.compareArrays = exports.compareNSB = void 0;
|
|
6
6
|
function compareNSB(a, b) {
|
|
7
|
-
if (a
|
|
8
|
-
return
|
|
9
|
-
}
|
|
10
|
-
if (a > b) {
|
|
11
|
-
return 1;
|
|
7
|
+
if (a === b) {
|
|
8
|
+
return 0;
|
|
12
9
|
}
|
|
13
|
-
return
|
|
10
|
+
return a < b ? -1 : 1;
|
|
14
11
|
}
|
|
15
12
|
exports.compareNSB = compareNSB;
|
|
16
13
|
function compareArrays(a, b) {
|
|
@@ -28,39 +25,35 @@ function compare(a, b, compareStrings = compareNSB) {
|
|
|
28
25
|
if (a === b) {
|
|
29
26
|
return 0;
|
|
30
27
|
}
|
|
31
|
-
// undefined
|
|
32
|
-
if (a
|
|
33
|
-
return -1;
|
|
34
|
-
}
|
|
35
|
-
if (b === undefined) {
|
|
36
|
-
return 1;
|
|
37
|
-
}
|
|
38
|
-
// null
|
|
39
|
-
if (a === null) {
|
|
28
|
+
// null or undefined
|
|
29
|
+
if (a == null) {
|
|
40
30
|
return -1;
|
|
41
31
|
}
|
|
42
|
-
if (b
|
|
32
|
+
if (b == null) {
|
|
43
33
|
return 1;
|
|
44
34
|
}
|
|
35
|
+
// detect typeof once
|
|
36
|
+
const typeofA = typeof a;
|
|
37
|
+
const typeofB = typeof b;
|
|
45
38
|
// Numbers
|
|
46
|
-
if (
|
|
47
|
-
return
|
|
39
|
+
if (typeofA === 'number') {
|
|
40
|
+
return typeofB === 'number' ? compareNSB(a, b) : -1;
|
|
48
41
|
}
|
|
49
|
-
if (
|
|
42
|
+
if (typeofB === 'number') {
|
|
50
43
|
return 1;
|
|
51
44
|
}
|
|
52
45
|
// Strings
|
|
53
|
-
if (
|
|
54
|
-
return
|
|
46
|
+
if (typeofA === 'string') {
|
|
47
|
+
return typeofB === 'string' ? compareStrings(a, b) : -1;
|
|
55
48
|
}
|
|
56
|
-
if (
|
|
49
|
+
if (typeofB === 'string') {
|
|
57
50
|
return 1;
|
|
58
51
|
}
|
|
59
52
|
// Booleans
|
|
60
|
-
if (
|
|
61
|
-
return
|
|
53
|
+
if (typeofA === 'boolean') {
|
|
54
|
+
return typeofB === 'boolean' ? compareNSB(a, b) : -1;
|
|
62
55
|
}
|
|
63
|
-
if (
|
|
56
|
+
if (typeofB === 'boolean') {
|
|
64
57
|
return 1;
|
|
65
58
|
}
|
|
66
59
|
// Dates
|
|
@@ -89,25 +82,26 @@ function compare(a, b, compareStrings = compareNSB) {
|
|
|
89
82
|
return compareNSB(aKeys.length, bKeys.length);
|
|
90
83
|
}
|
|
91
84
|
exports.compare = compare;
|
|
85
|
+
// lodash-y get - probably want to use lodash get instead
|
|
86
|
+
const get = (value, path) => path.reduce((value, key) => value[key], value);
|
|
92
87
|
// An in-memory sorting function according to the
|
|
93
88
|
// $sort special query parameter
|
|
94
89
|
function sorter($sort) {
|
|
95
|
-
const get = (value, path) => path.reduce((value, key) => value[key], value);
|
|
96
90
|
const compares = Object.keys($sort).map((key) => {
|
|
97
91
|
const direction = $sort[key];
|
|
98
|
-
|
|
99
|
-
if (path.length === 1) {
|
|
92
|
+
if (!key.includes('.')) {
|
|
100
93
|
return (a, b) => direction * compare(a[key], b[key]);
|
|
101
94
|
}
|
|
102
95
|
else {
|
|
96
|
+
const path = key.split('.');
|
|
103
97
|
return (a, b) => direction * compare(get(a, path), get(b, path));
|
|
104
98
|
}
|
|
105
99
|
});
|
|
106
100
|
return function (a, b) {
|
|
107
101
|
for (const compare of compares) {
|
|
108
|
-
const
|
|
109
|
-
if (
|
|
110
|
-
return
|
|
102
|
+
const comparison = compare(a, b);
|
|
103
|
+
if (comparison !== 0) {
|
|
104
|
+
return comparison;
|
|
111
105
|
}
|
|
112
106
|
}
|
|
113
107
|
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,CAAC,
|
|
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.
|
|
3
|
+
"version": "5.0.26",
|
|
4
4
|
"description": "Shared database adapter utility functions",
|
|
5
5
|
"homepage": "https://feathersjs.com",
|
|
6
6
|
"keywords": [
|
|
@@ -50,19 +50,19 @@
|
|
|
50
50
|
"access": "public"
|
|
51
51
|
},
|
|
52
52
|
"dependencies": {
|
|
53
|
-
"@feathersjs/commons": "^5.0.
|
|
54
|
-
"@feathersjs/errors": "^5.0.
|
|
55
|
-
"@feathersjs/feathers": "^5.0.
|
|
53
|
+
"@feathersjs/commons": "^5.0.26",
|
|
54
|
+
"@feathersjs/errors": "^5.0.26",
|
|
55
|
+
"@feathersjs/feathers": "^5.0.26"
|
|
56
56
|
},
|
|
57
57
|
"devDependencies": {
|
|
58
58
|
"@types/mocha": "^10.0.6",
|
|
59
59
|
"@types/mongodb": "^4.0.6",
|
|
60
|
-
"@types/node": "^20.
|
|
61
|
-
"mocha": "^10.
|
|
60
|
+
"@types/node": "^20.12.8",
|
|
61
|
+
"mocha": "^10.4.0",
|
|
62
62
|
"mongodb": "^6.5.0",
|
|
63
63
|
"shx": "^0.3.4",
|
|
64
64
|
"ts-node": "^10.9.2",
|
|
65
|
-
"typescript": "^5.4.
|
|
65
|
+
"typescript": "^5.4.5"
|
|
66
66
|
},
|
|
67
|
-
"gitHead": "
|
|
67
|
+
"gitHead": "3fe6843c1a478a2887ca91b6f79eda3b61d35ef3"
|
|
68
68
|
}
|
package/src/sort.ts
CHANGED
|
@@ -1,17 +1,15 @@
|
|
|
1
1
|
// Sorting algorithm taken from NeDB (https://github.com/louischatriot/nedb)
|
|
2
2
|
// See https://github.com/louischatriot/nedb/blob/e3f0078499aa1005a59d0c2372e425ab789145c1/lib/model.js#L189
|
|
3
3
|
|
|
4
|
-
export function compareNSB(a:
|
|
5
|
-
if (a
|
|
6
|
-
return
|
|
7
|
-
}
|
|
8
|
-
if (a > b) {
|
|
9
|
-
return 1
|
|
4
|
+
export function compareNSB(a: number | string | boolean, b: number | string | boolean): 0 | 1 | -1 {
|
|
5
|
+
if (a === b) {
|
|
6
|
+
return 0
|
|
10
7
|
}
|
|
11
|
-
|
|
8
|
+
|
|
9
|
+
return a < b ? -1 : 1
|
|
12
10
|
}
|
|
13
11
|
|
|
14
|
-
export function compareArrays(a: any[], b: any[]) {
|
|
12
|
+
export function compareArrays(a: any[], b: any[]): 0 | 1 | -1 {
|
|
15
13
|
for (let i = 0, l = Math.min(a.length, b.length); i < l; i++) {
|
|
16
14
|
const comparison = compare(a[i], b[i])
|
|
17
15
|
|
|
@@ -24,48 +22,48 @@ export function compareArrays(a: any[], b: any[]) {
|
|
|
24
22
|
return compareNSB(a.length, b.length)
|
|
25
23
|
}
|
|
26
24
|
|
|
27
|
-
export function compare(
|
|
25
|
+
export function compare(
|
|
26
|
+
a: any,
|
|
27
|
+
b: any,
|
|
28
|
+
compareStrings: (a: any, b: any) => 0 | 1 | -1 = compareNSB
|
|
29
|
+
): 0 | 1 | -1 {
|
|
28
30
|
if (a === b) {
|
|
29
31
|
return 0
|
|
30
32
|
}
|
|
31
33
|
|
|
32
|
-
// undefined
|
|
33
|
-
if (a
|
|
34
|
+
// null or undefined
|
|
35
|
+
if (a == null) {
|
|
34
36
|
return -1
|
|
35
37
|
}
|
|
36
|
-
if (b
|
|
38
|
+
if (b == null) {
|
|
37
39
|
return 1
|
|
38
40
|
}
|
|
39
41
|
|
|
40
|
-
//
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
}
|
|
44
|
-
if (b === null) {
|
|
45
|
-
return 1
|
|
46
|
-
}
|
|
42
|
+
// detect typeof once
|
|
43
|
+
const typeofA = typeof a
|
|
44
|
+
const typeofB = typeof b
|
|
47
45
|
|
|
48
46
|
// Numbers
|
|
49
|
-
if (
|
|
50
|
-
return
|
|
47
|
+
if (typeofA === 'number') {
|
|
48
|
+
return typeofB === 'number' ? compareNSB(a, b) : -1
|
|
51
49
|
}
|
|
52
|
-
if (
|
|
50
|
+
if (typeofB === 'number') {
|
|
53
51
|
return 1
|
|
54
52
|
}
|
|
55
53
|
|
|
56
54
|
// Strings
|
|
57
|
-
if (
|
|
58
|
-
return
|
|
55
|
+
if (typeofA === 'string') {
|
|
56
|
+
return typeofB === 'string' ? compareStrings(a, b) : -1
|
|
59
57
|
}
|
|
60
|
-
if (
|
|
58
|
+
if (typeofB === 'string') {
|
|
61
59
|
return 1
|
|
62
60
|
}
|
|
63
61
|
|
|
64
62
|
// Booleans
|
|
65
|
-
if (
|
|
66
|
-
return
|
|
63
|
+
if (typeofA === 'boolean') {
|
|
64
|
+
return typeofB === 'boolean' ? compareNSB(a, b) : -1
|
|
67
65
|
}
|
|
68
|
-
if (
|
|
66
|
+
if (typeofB === 'boolean') {
|
|
69
67
|
return 1
|
|
70
68
|
}
|
|
71
69
|
|
|
@@ -100,28 +98,29 @@ export function compare(a: any, b: any, compareStrings: any = compareNSB): 0 | 1
|
|
|
100
98
|
return compareNSB(aKeys.length, bKeys.length)
|
|
101
99
|
}
|
|
102
100
|
|
|
101
|
+
// lodash-y get - probably want to use lodash get instead
|
|
102
|
+
const get = (value: any, path: string[]) => path.reduce((value, key) => value[key], value)
|
|
103
|
+
|
|
103
104
|
// An in-memory sorting function according to the
|
|
104
105
|
// $sort special query parameter
|
|
105
106
|
export function sorter($sort: { [key: string]: -1 | 1 }) {
|
|
106
|
-
const get = (value: any, path: string[]) => path.reduce((value, key) => value[key], value)
|
|
107
|
-
|
|
108
107
|
const compares = Object.keys($sort).map((key) => {
|
|
109
108
|
const direction = $sort[key]
|
|
110
|
-
const path = key.split('.')
|
|
111
109
|
|
|
112
|
-
if (
|
|
110
|
+
if (!key.includes('.')) {
|
|
113
111
|
return (a: any, b: any) => direction * compare(a[key], b[key])
|
|
114
112
|
} else {
|
|
113
|
+
const path = key.split('.')
|
|
115
114
|
return (a: any, b: any) => direction * compare(get(a, path), get(b, path))
|
|
116
115
|
}
|
|
117
116
|
})
|
|
118
117
|
|
|
119
118
|
return function (a: any, b: any) {
|
|
120
119
|
for (const compare of compares) {
|
|
121
|
-
const
|
|
120
|
+
const comparison = compare(a, b)
|
|
122
121
|
|
|
123
|
-
if (
|
|
124
|
-
return
|
|
122
|
+
if (comparison !== 0) {
|
|
123
|
+
return comparison
|
|
125
124
|
}
|
|
126
125
|
}
|
|
127
126
|
|