@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 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: any[]): (result: any) => any;
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
- const fields = params && params.query && params.query.$select;
27
- if (Array.isArray(fields) && otherFields.length) {
28
- fields.push(...otherFields);
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 convert = (result) => {
31
- if (!Array.isArray(fields)) {
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,WAAkB;IACxD,MAAM,MAAM,GAAG,MAAM,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC;IAE9D,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,WAAW,CAAC,MAAM,EAAE;QAC/C,MAAM,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,CAAC;KAC7B;IAED,MAAM,OAAO,GAAG,CAAC,MAAW,EAAE,EAAE;QAC9B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;YAC1B,OAAO,MAAM,CAAC;SACf;QAED,OAAO,WAAC,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC;IACnC,CAAC,CAAC;IAEF,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;AAtBD,wBAsBC"}
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): any;
3
- export declare function compare(a: any, b: any, compareStrings?: any): any;
4
- export declare function sorter($sort: any): (a: any, b: any) => number;
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
- let comp;
19
- for (i = 0; i < Math.min(a.length, b.length); i += 1) {
20
- comp = exports.compare(a[i], b[i]);
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 exports.compareNSB(a.length, b.length);
24
+ return compareNSB(a.length, b.length);
27
25
  }
28
26
  exports.compareArrays = compareArrays;
29
- function compare(a, b, compareStrings = exports.compareNSB) {
30
- const { compareNSB, compare, compareArrays } = exports;
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 b === undefined ? 0 : -1;
33
+ return -1;
34
34
  }
35
35
  if (b === undefined) {
36
- return a === undefined ? 0 : 1;
36
+ return 1;
37
37
  }
38
38
  // null
39
39
  if (a === null) {
40
- return b === null ? 0 : -1;
40
+ return -1;
41
41
  }
42
42
  if (b === null) {
43
- return a === null ? 0 : 1;
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 typeof a === 'number' ? compareNSB(a, b) : 1;
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 typeof a === 'string' ? compareStrings(a, b) : 1;
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 typeof a === 'boolean' ? compareNSB(a, b) : 1;
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 a instanceof Date ? compareNSB(a.getTime(), b.getTime()) : 1;
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 Array.isArray(a) ? compareArrays(a, b) : 1;
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 comp = 0;
84
- for (let i = 0; i < Math.min(aKeys.length, bKeys.length); i += 1) {
85
- comp = compare(a[aKeys[i]], b[bKeys[i]]);
86
- if (comp !== 0) {
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
- let sortLevels = false; // True if $sort has tags with '.' i.e. '{a: 1, b: -1, "c.x.z": 1}'
97
- const getVal = (a, sortKeys) => {
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 keys = key.split('.');
109
- sortLevels = keys.length > 1;
110
- return { keys, direction };
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
- let compare;
114
- for (const criterion of criteria) {
115
- if (sortLevels) {
116
- compare = criterion.direction * exports.compare(getVal(a, criterion.keys), getVal(b, criterion.keys));
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,CAAM,EAAE,CAAM;IAC3C,IAAI,CAAC,CAAC;IACN,IAAI,IAAI,CAAC;IAET,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE;QACpD,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAEnC,IAAI,IAAI,KAAK,CAAC,EAAE;YAAE,OAAO,IAAI,CAAC;SAAE;KACjC;IAED,iDAAiD;IACjD,OAAO,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;AAChD,CAAC;AAZD,sCAYC;AAED,SAAgB,OAAO,CAAE,CAAM,EAAE,CAAM,EAAE,iBAAsB,OAAO,CAAC,UAAU;IAC/E,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC;IAEvD,YAAY;IACZ,IAAI,CAAC,KAAK,SAAS,EAAE;QAAE,OAAO,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;KAAE;IACzD,IAAI,CAAC,KAAK,SAAS,EAAE;QAAE,OAAO,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;KAAE;IAExD,OAAO;IACP,IAAI,CAAC,KAAK,IAAI,EAAE;QAAE,OAAO,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;KAAE;IAC/C,IAAI,CAAC,KAAK,IAAI,EAAE;QAAE,OAAO,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;KAAE;IAE9C,UAAU;IACV,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE;QAAE,OAAO,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;KAAE;IACpF,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE;QAAE,OAAO,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;KAAE;IAEnF,UAAU;IACV,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE;QAAE,OAAO,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;KAAE;IACxF,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE;QAAE,OAAO,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;KAAE;IAEvF,WAAW;IACX,IAAI,OAAO,CAAC,KAAK,SAAS,EAAE;QAAE,OAAO,OAAO,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;KAAE;IACtF,IAAI,OAAO,CAAC,KAAK,SAAS,EAAE;QAAE,OAAO,OAAO,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;KAAE;IAErF,QAAQ;IACR,IAAI,CAAC,YAAY,IAAI,EAAE;QAAE,OAAO,CAAC,YAAY,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;KAAE;IAChG,IAAI,CAAC,YAAY,IAAI,EAAE;QAAE,OAAO,CAAC,YAAY,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;KAAE;IAE/F,uDAAuD;IACvD,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;QAAE,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;KAAE;IAC7E,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;QAAE,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;KAAE;IAE5E,UAAU;IACV,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACpC,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACpC,IAAI,IAAI,GAAG,CAAC,CAAC;IAEb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE;QAChE,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAEzC,IAAI,IAAI,KAAK,CAAC,EAAE;YAAE,OAAO,IAAI,CAAC;SAAE;KACjC;IAED,OAAO,UAAU,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;AAChD,CAAC;AA3CD,0BA2CC;AAED,iDAAiD;AACjD,gCAAgC;AAChC,SAAgB,MAAM,CAAE,KAAU;IAChC,IAAI,UAAU,GAAG,KAAK,CAAC,CAAC,mEAAmE;IAE3F,MAAM,MAAM,GAAG,CAAC,CAAM,EAAE,QAAe,EAAE,EAAE;QACzC,IAAI,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;QACpC,IAAI,GAAG,GAAG,CAAC,CAAC;QACZ,GAAG;YACD,IAAI,GAAG,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;YACvB,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;SAChB,QAAQ,IAAI,CAAC,MAAM,EAAE;QAEtB,OAAO,GAAG,CAAC;IACb,CAAC,CAAC;IAEA,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;QAC5C,MAAM,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;QAC7B,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC5B,UAAU,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;QAE7B,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;IAC7B,CAAC,CAAC,CAAC;IAEL,OAAO,UAAU,CAAM,EAAE,CAAM;QAC7B,IAAI,OAAO,CAAC;QAEZ,KAAK,MAAM,SAAS,IAAI,QAAQ,EAAE;YAClC,IAAI,UAAU,EAAE;gBACd,OAAO,GAAG,SAAS,CAAC,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,SAAS,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;aACvG;iBAAM;gBACL,OAAO,GAAG,SAAS,CAAC,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;aAC7F;YAEC,IAAI,OAAO,KAAK,CAAC,EAAE;gBACjB,OAAO,OAAO,CAAC;aAChB;SACF;QAED,OAAO,CAAC,CAAC;IACX,CAAC,CAAC;AACJ,CAAC;AAvCD,wBAuCC"}
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.14",
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.14",
52
- "@feathersjs/errors": "^5.0.0-pre.14",
53
- "@feathersjs/feathers": "^5.0.0-pre.14"
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.10.4",
59
- "mocha": "^9.1.2",
60
- "mongodb": "^4.1.3",
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.3.0",
62
+ "ts-node": "^10.4.0",
63
63
  "typescript": "^4.4.4"
64
64
  },
65
- "gitHead": "9bb26276938aead1f3f582be5517a49a8ce00f09"
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: any[]) {
11
- const fields = params && params.query && params.query.$select;
10
+ export function select (params: any, ...otherFields: string[]) {
11
+ const queryFields: string[] | undefined = params?.query?.$select;
12
12
 
13
- if (Array.isArray(fields) && otherFields.length) {
14
- fields.push(...otherFields);
13
+ if (!queryFields) {
14
+ return (result: any) => result;
15
15
  }
16
16
 
17
- const convert = (result: any) => {
18
- if (!Array.isArray(fields)) {
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
- let comp;
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
- for (i = 0; i < Math.min(a.length, b.length); i += 1) {
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 exports.compareNSB(a.length, b.length);
18
+ return compareNSB(a.length, b.length);
22
19
  }
23
20
 
24
- export function compare (a: any, b: any, compareStrings: any = exports.compareNSB) {
25
- const { compareNSB, compare, compareArrays } = exports;
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 b === undefined ? 0 : -1; }
29
- if (b === undefined) { return a === undefined ? 0 : 1; }
25
+ if (a === undefined) { return -1; }
26
+ if (b === undefined) { return 1; }
30
27
 
31
28
  // null
32
- if (a === null) { return b === null ? 0 : -1; }
33
- if (b === null) { return a === null ? 0 : 1; }
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 typeof a === 'number' ? compareNSB(a, b) : 1; }
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 typeof a === 'string' ? compareStrings(a, b) : 1; }
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 typeof a === 'boolean' ? compareNSB(a, b) : 1; }
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 a instanceof Date ? compareNSB(a.getTime(), b.getTime()) : 1; }
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 Array.isArray(a) ? compareArrays(a, b) : 1; }
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; i < Math.min(aKeys.length, bKeys.length); i += 1) {
61
- comp = compare(a[aKeys[i]], b[bKeys[i]]);
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 (comp !== 0) { return comp; }
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: any) {
72
- let sortLevels = false; // True if $sort has tags with '.' i.e. '{a: 1, b: -1, "c.x.z": 1}'
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
- return function (a: any, b: any) {
94
- let compare;
70
+ const compares = Object.keys($sort).map(key => {
71
+ const direction = $sort[key];
72
+ const path = key.split('.');
95
73
 
96
- for (const criterion of criteria) {
97
- if (sortLevels) {
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
- compare = criterion.direction * exports.compare(a[criterion.keys[0]], b[criterion.keys[0]]);
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 (compare !== 0) {
104
- return compare;
105
- }
85
+ if (comparasion !== 0) { return comparasion; }
106
86
  }
107
87
 
108
88
  return 0;