@feathersjs/adapter-commons 5.0.0-pre.1 → 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,18 +3,184 @@
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.1](https://github.com/feathersjs/databases/compare/v4.5.11...v5.0.0-pre.1) (2020-12-17)
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
+
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)
20
+
21
+ **Note:** Version bump only for package @feathersjs/adapter-commons
22
+
23
+
24
+
25
+
26
+
27
+ # [5.0.0-pre.13](https://github.com/feathersjs/feathers/compare/v5.0.0-pre.12...v5.0.0-pre.13) (2021-10-13)
28
+
29
+ **Note:** Version bump only for package @feathersjs/adapter-commons
30
+
31
+
32
+
33
+
34
+
35
+ # [5.0.0-pre.12](https://github.com/feathersjs/feathers/compare/v5.0.0-pre.11...v5.0.0-pre.12) (2021-10-12)
36
+
37
+ **Note:** Version bump only for package @feathersjs/adapter-commons
38
+
39
+
40
+
41
+
42
+
43
+ # [5.0.0-pre.11](https://github.com/feathersjs/feathers/compare/v5.0.0-pre.10...v5.0.0-pre.11) (2021-10-06)
44
+
45
+ **Note:** Version bump only for package @feathersjs/adapter-commons
46
+
47
+
48
+
49
+
50
+
51
+ # [5.0.0-pre.10](https://github.com/feathersjs/feathers/compare/v5.0.0-pre.9...v5.0.0-pre.10) (2021-09-19)
52
+
53
+ **Note:** Version bump only for package @feathersjs/adapter-commons
54
+
55
+
56
+
57
+
58
+
59
+ # [5.0.0-pre.9](https://github.com/feathersjs/feathers/compare/v5.0.0-pre.8...v5.0.0-pre.9) (2021-08-09)
60
+
61
+ **Note:** Version bump only for package @feathersjs/adapter-commons
62
+
63
+
64
+
65
+
66
+
67
+ # [5.0.0-pre.8](https://github.com/feathersjs/feathers/compare/v5.0.0-pre.7...v5.0.0-pre.8) (2021-08-09)
68
+
69
+ **Note:** Version bump only for package @feathersjs/adapter-commons
70
+
71
+
72
+
73
+
74
+
75
+ # [5.0.0-pre.7](https://github.com/feathersjs/feathers/compare/v5.0.0-pre.6...v5.0.0-pre.7) (2021-08-09)
76
+
77
+ **Note:** Version bump only for package @feathersjs/adapter-commons
78
+
79
+
80
+
81
+
82
+
83
+ # [5.0.0-pre.6](https://github.com/feathersjs/feathers/compare/v5.0.0-pre.5...v5.0.0-pre.6) (2021-08-08)
84
+
85
+ **Note:** Version bump only for package @feathersjs/adapter-commons
86
+
87
+
88
+
89
+
90
+
91
+ # [5.0.0-pre.5](https://github.com/feathersjs/feathers/compare/v5.0.0-pre.4...v5.0.0-pre.5) (2021-06-23)
92
+
93
+
94
+ ### Bug Fixes
95
+
96
+ * Update database adapter common repository urls ([#2380](https://github.com/feathersjs/feathers/issues/2380)) ([3f4db68](https://github.com/feathersjs/feathers/commit/3f4db68d6700c7d9023ecd17d0d39893f75a19fd))
97
+
98
+
99
+ ### Features
100
+
101
+ * **adapter-commons:** Add support for params.adapter option and move memory adapter to @feathersjs/memory ([#2367](https://github.com/feathersjs/feathers/issues/2367)) ([a43e7da](https://github.com/feathersjs/feathers/commit/a43e7da22b6b981a96d1321736ea9a0cb924fb4f))
102
+ * **typescript:** Allow to pass generic service options to adapter services ([#2392](https://github.com/feathersjs/feathers/issues/2392)) ([f9431f2](https://github.com/feathersjs/feathers/commit/f9431f242354f804cafb835519f98dd405ac4f0b))
103
+
104
+
105
+
106
+
107
+
108
+ # [5.0.0-pre.4](https://github.com/feathersjs/feathers/compare/v5.0.0-pre.3...v5.0.0-pre.4) (2021-05-13)
109
+
110
+
111
+ ### Bug Fixes
112
+
113
+ * **typescript:** Move Paginated type back for better compatibility ([#2350](https://github.com/feathersjs/feathers/issues/2350)) ([2917d05](https://github.com/feathersjs/feathers/commit/2917d05fffb4716d3c4cdaa5ac6a1aee0972e8a6))
114
+
115
+
116
+
117
+
118
+
119
+ # [5.0.0-pre.3](https://github.com/feathersjs/feathers/compare/v5.0.0-pre.2...v5.0.0-pre.3) (2021-04-21)
120
+
121
+
122
+ ### Bug Fixes
123
+
124
+ * **typescript:** Improve TypeScript backwards compatibility ([#2310](https://github.com/feathersjs/feathers/issues/2310)) ([f33be73](https://github.com/feathersjs/feathers/commit/f33be73fc46a533efb15df9aab0658e3240d3897))
125
+
126
+
127
+
128
+
129
+
130
+ # [5.0.0-pre.2](https://github.com/feathersjs/feathers/compare/v5.0.0-beta.1...v5.0.0-pre.2) (2021-04-06)
131
+
132
+ **Note:** Version bump only for package @feathersjs/adapter-commons
133
+
134
+
135
+
136
+
137
+
138
+ # [5.0.0-beta.1](https://github.com/feathersjs/feathers/compare/v5.0.0-beta.0...v5.0.0-beta.1) (2021-04-03)
139
+
140
+
141
+ ### Bug Fixes
142
+
143
+ * **dependencies:** Fix transport-commons dependency and update other dependencies ([#2284](https://github.com/feathersjs/feathers/issues/2284)) ([05b03b2](https://github.com/feathersjs/feathers/commit/05b03b27b40604d956047e3021d8053c3a137616))
144
+
145
+
146
+ ### Features
147
+
148
+ * **adapter-commons:** Added mongoDB like search in embedded objects ([687e3c7](https://github.com/feathersjs/feathers/commit/687e3c7c36904221b2707d0220c0893e3cb1faa9))
149
+
150
+
151
+
152
+
153
+
154
+ # [5.0.0-beta.0](https://github.com/feathersjs/feathers/compare/v5.0.0-pre.1...v5.0.0-beta.0) (2021-03-28)
155
+
156
+
157
+ ### Bug Fixes
158
+
159
+ * **adapter-commons:** Always respect paginate.max ([#2267](https://github.com/feathersjs/feathers/issues/2267)) ([f588257](https://github.com/feathersjs/feathers/commit/f5882575536624ed3a32bb6e3ff1919fa17e366d))
160
+ * Update Grant usage and other dependencies ([#2264](https://github.com/feathersjs/feathers/issues/2264)) ([7b0f8fa](https://github.com/feathersjs/feathers/commit/7b0f8fad252419ed0ad0bf259cdf3104d322ab60))
161
+ * **adapter-commons:** Return missing overloads ([#2203](https://github.com/feathersjs/feathers/issues/2203)) ([bbe7e2a](https://github.com/feathersjs/feathers/commit/bbe7e2a131633e9a6e7aac7f7fa02a312bca63c7))
162
+
163
+
164
+ ### Features
165
+
166
+ * Feathers v5 core refactoring and features ([#2255](https://github.com/feathersjs/feathers/issues/2255)) ([2dafb7c](https://github.com/feathersjs/feathers/commit/2dafb7ce14ba57406aeec13d10ca45b1e709bee9))
167
+
168
+
169
+
170
+
171
+
172
+ # [5.0.0-pre.1](https://github.com/feathersjs/feathers/compare/v4.5.11...v5.0.0-pre.1) (2020-12-17)
7
173
 
8
174
 
9
175
  ### Features
10
176
 
11
- * **memory:** Move feathers-memory into @feathersjs/adapter-memory ([#2153](https://github.com/feathersjs/databases/issues/2153)) ([dd61fe3](https://github.com/feathersjs/databases/commit/dd61fe371fb0502f78b8ccbe1f45a030e31ecff6))
177
+ * **memory:** Move feathers-memory into @feathersjs/memory ([#2153](https://github.com/feathersjs/feathers/issues/2153)) ([dd61fe3](https://github.com/feathersjs/feathers/commit/dd61fe371fb0502f78b8ccbe1f45a030e31ecff6))
12
178
 
13
179
 
14
180
 
15
181
 
16
182
 
17
- ## [4.5.11](https://github.com/feathersjs/databases/compare/v4.5.10...v4.5.11) (2020-12-05)
183
+ ## [4.5.11](https://github.com/feathersjs/feathers/compare/v4.5.10...v4.5.11) (2020-12-05)
18
184
 
19
185
  **Note:** Version bump only for package @feathersjs/adapter-commons
20
186
 
@@ -22,7 +188,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline
22
188
 
23
189
 
24
190
 
25
- ## [4.5.7](https://github.com/feathersjs/databases/compare/@feathersjs/adapter-commons@4.5.6...@feathersjs/adapter-commons@4.5.7) (2020-10-21)
191
+ ## [4.5.7](https://github.com/feathersjs/feathers/compare/v4.5.6...v4.5.7) (2020-10-21)
26
192
 
27
193
 
28
194
  ### Bug Fixes
@@ -33,7 +199,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline
33
199
 
34
200
 
35
201
 
36
- ## [4.5.6](https://github.com/feathersjs/databases/compare/@feathersjs/adapter-commons@4.5.5...@feathersjs/adapter-commons@4.5.6) (2020-10-21)
202
+ ## [4.5.6](https://github.com/feathersjs/feathers/compare/v4.5.5...v4.5.6) (2020-10-21)
37
203
 
38
204
 
39
205
  ### Bug Fixes
@@ -44,7 +210,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline
44
210
 
45
211
 
46
212
 
47
- ## [4.5.5](https://github.com/feathersjs/databases/compare/@feathersjs/adapter-commons@4.5.4...@feathersjs/adapter-commons@4.5.5) (2020-10-21)
213
+ ## [4.5.5](https://github.com/feathersjs/feathers/compare/v4.5.4...v4.5.5) (2020-10-21)
48
214
 
49
215
 
50
216
  ### Bug Fixes
@@ -55,7 +221,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline
55
221
 
56
222
 
57
223
 
58
- ## [4.5.4](https://github.com/feathersjs/databases/compare/@feathersjs/adapter-commons@4.5.3...@feathersjs/adapter-commons@4.5.4) (2020-09-27)
224
+ ## [4.5.4](https://github.com/feathersjs/feathers/compare/v4.5.3...v4.5.4) (2020-09-27)
59
225
 
60
226
  **Note:** Version bump only for package @feathersjs/adapter-commons
61
227
 
package/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  The MIT License (MIT)
2
2
 
3
- Copyright (c) 2020 Feathers
3
+ Copyright (c) 2021 Feathers
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
package/README.md CHANGED
@@ -17,6 +17,6 @@ This is a repository for handling Feathers common database syntax. See the [API
17
17
 
18
18
  ## License
19
19
 
20
- Copyright (c) 2019 Feathers contributors
20
+ Copyright (c) 2021 [Feathers contributors](https://github.com/feathersjs/feathers/graphs/contributors)
21
21
 
22
22
  Licensed under the [MIT license](LICENSE).
@@ -12,8 +12,9 @@ function parse(number) {
12
12
  // Returns the pagination limit and will take into account the
13
13
  // default and max pagination settings
14
14
  function getLimit(limit, paginate) {
15
- if (paginate && paginate.default) {
16
- const lower = typeof limit === 'number' && !isNaN(limit) ? limit : paginate.default;
15
+ if (paginate && (paginate.default || paginate.max)) {
16
+ const base = paginate.default || 0;
17
+ const lower = typeof limit === 'number' && !isNaN(limit) ? limit : base;
17
18
  const upper = typeof paginate.max === 'number' ? paginate.max : Number.MAX_VALUE;
18
19
  return Math.min(lower, upper);
19
20
  }
@@ -1 +1 @@
1
- {"version":3,"file":"filter-query.js","sourceRoot":"","sources":["../src/filter-query.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"filter-query.js","sourceRoot":"","sources":["../src/filter-query.ts"],"names":[],"mappings":"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"}
package/lib/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- export { AdapterService, InternalServiceMethods, ServiceOptions, Paginated } from './service';
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,qCAA8F;AAArF,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/service.d.ts CHANGED
@@ -1,21 +1,22 @@
1
- import { ServiceMethods, Params, Id, NullableId } from '@feathersjs/feathers';
2
- export interface Paginated<T> {
3
- total: number;
4
- limit: number;
5
- skip: number;
6
- data: T[];
7
- }
1
+ import { ServiceMethods, Params, Id, NullableId, Paginated } from '@feathersjs/feathers';
8
2
  export interface ServiceOptions {
9
- events: string[];
3
+ events?: string[];
10
4
  multi: boolean | string[];
11
5
  id: string;
12
6
  paginate: {
13
7
  default?: number;
14
8
  max?: number;
15
9
  };
16
- whitelist: string[];
10
+ whitelist?: string[];
11
+ allow: string[];
17
12
  filters: string[];
18
13
  }
14
+ export interface AdapterOptions<M = any> extends Pick<ServiceOptions, 'multi' | 'allow' | 'paginate'> {
15
+ Model?: M;
16
+ }
17
+ export interface AdapterParams<M = any> extends Params {
18
+ adapter?: Partial<AdapterOptions<M>>;
19
+ }
19
20
  /**
20
21
  * Hook-less (internal) service methods. Directly call database adapter service methods
21
22
  * without running any service-level hooks. This can be useful if you need the raw data
@@ -28,7 +29,7 @@ export interface ServiceOptions {
28
29
  *
29
30
  * @see {@link https://docs.feathersjs.com/guides/migrating.html#hook-less-service-methods}
30
31
  */
31
- export interface InternalServiceMethods<T = any> {
32
+ export interface InternalServiceMethods<T = any, D = Partial<T>> {
32
33
  /**
33
34
  * Retrieve all resources from this service, skipping any service-level hooks.
34
35
  *
@@ -36,7 +37,7 @@ export interface InternalServiceMethods<T = any> {
36
37
  * @see {@link HookLessServiceMethods}
37
38
  * @see {@link https://docs.feathersjs.com/api/services.html#find-params|Feathers API Documentation: .find(params)}
38
39
  */
39
- _find(params?: Params): Promise<T | T[] | Paginated<T>>;
40
+ _find(params?: AdapterParams): Promise<T | T[] | Paginated<T>>;
40
41
  /**
41
42
  * Retrieve a single resource matching the given ID, skipping any service-level hooks.
42
43
  *
@@ -45,7 +46,7 @@ export interface InternalServiceMethods<T = any> {
45
46
  * @see {@link HookLessServiceMethods}
46
47
  * @see {@link https://docs.feathersjs.com/api/services.html#get-id-params|Feathers API Documentation: .get(id, params)}
47
48
  */
48
- _get(id: Id, params?: Params): Promise<T>;
49
+ _get(id: Id, params?: AdapterParams): Promise<T>;
49
50
  /**
50
51
  * Create a new resource for this service, skipping any service-level hooks.
51
52
  *
@@ -54,7 +55,7 @@ export interface InternalServiceMethods<T = any> {
54
55
  * @see {@link HookLessServiceMethods}
55
56
  * @see {@link https://docs.feathersjs.com/api/services.html#create-data-params|Feathers API Documentation: .create(data, params)}
56
57
  */
57
- _create(data: Partial<T> | Partial<T>[], params?: Params): Promise<T | T[]>;
58
+ _create(data: D | D[], params?: AdapterParams): Promise<T | T[]>;
58
59
  /**
59
60
  * Replace any resources matching the given ID with the given data, skipping any service-level hooks.
60
61
  *
@@ -64,7 +65,7 @@ export interface InternalServiceMethods<T = any> {
64
65
  * @see {@link HookLessServiceMethods}
65
66
  * @see {@link https://docs.feathersjs.com/api/services.html#update-id-data-params|Feathers API Documentation: .update(id, data, params)}
66
67
  */
67
- _update(id: Id, data: T, params?: Params): Promise<T>;
68
+ _update(id: Id, data: D, params?: AdapterParams): Promise<T>;
68
69
  /**
69
70
  * Merge any resources matching the given ID with the given data, skipping any service-level hooks.
70
71
  *
@@ -74,7 +75,7 @@ export interface InternalServiceMethods<T = any> {
74
75
  * @see {@link HookLessServiceMethods}
75
76
  * @see {@link https://docs.feathersjs.com/api/services.html#patch-id-data-params|Feathers API Documentation: .patch(id, data, params)}
76
77
  */
77
- _patch(id: NullableId, data: Partial<T>, params?: Params): Promise<T | T[]>;
78
+ _patch(id: NullableId, data: D, params?: AdapterParams): Promise<T | T[]>;
78
79
  /**
79
80
  * Remove resources matching the given ID from the this service, skipping any service-level hooks.
80
81
  *
@@ -83,23 +84,32 @@ export interface InternalServiceMethods<T = any> {
83
84
  * @see {@link HookLessServiceMethods}
84
85
  * @see {@link https://docs.feathersjs.com/api/services.html#remove-id-params|Feathers API Documentation: .remove(id, params)}
85
86
  */
86
- _remove(id: NullableId, params?: Params): Promise<T | T[]>;
87
+ _remove(id: NullableId, params?: AdapterParams): Promise<T | T[]>;
87
88
  }
88
- export declare class AdapterService<T = any> implements ServiceMethods<T | Paginated<T>> {
89
- options: ServiceOptions;
90
- constructor(options: Partial<ServiceOptions>);
89
+ export declare class AdapterService<T = any, D = Partial<T>, O extends Partial<ServiceOptions> = Partial<ServiceOptions>> implements ServiceMethods<T | Paginated<T>, D> {
90
+ options: ServiceOptions & O;
91
+ constructor(options: O);
91
92
  get id(): string;
92
93
  get events(): string[];
93
- filterQuery(params?: Params, opts?: any): {
94
+ filterQuery(params?: AdapterParams, opts?: any): {
94
95
  [key: string]: any;
95
96
  } & {
96
97
  paginate: any;
97
98
  };
98
- allowsMulti(method: string): boolean;
99
- find(params?: Params): Promise<T[] | Paginated<T>>;
100
- get(id: Id, params?: Params): Promise<T>;
101
- create(data: Partial<T> | Partial<T>[], params?: Params): Promise<T | T[]>;
102
- update(id: Id, data: T, params?: Params): Promise<T>;
103
- patch(id: NullableId, data: Partial<T>, params?: Params): Promise<T | T[]>;
104
- remove(id: NullableId, params?: Params): Promise<T | T[]>;
99
+ allowsMulti(method: string, params?: AdapterParams): boolean;
100
+ getOptions(params: AdapterParams): ServiceOptions & {
101
+ model?: any;
102
+ };
103
+ find(params?: AdapterParams): Promise<T[] | Paginated<T>>;
104
+ get(id: Id, params?: AdapterParams): Promise<T>;
105
+ create(data: Partial<T>, params?: AdapterParams): Promise<T>;
106
+ create(data: Partial<T>[], params?: AdapterParams): Promise<T[]>;
107
+ update(id: Id, data: D, params?: AdapterParams): Promise<T>;
108
+ patch(id: Id, data: Partial<T>, params?: AdapterParams): Promise<T>;
109
+ patch(id: null, data: Partial<T>, params?: AdapterParams): Promise<T[]>;
110
+ patch(id: NullableId, data: Partial<T>, params?: AdapterParams): Promise<T | T[]>;
111
+ remove(id: Id, params?: AdapterParams): Promise<T>;
112
+ remove(id: null, params?: AdapterParams): Promise<T[]>;
113
+ remove(id: NullableId, params?: AdapterParams): Promise<T | T[]>;
114
+ setup(): Promise<void>;
105
115
  }
package/lib/service.js CHANGED
@@ -22,7 +22,7 @@ class AdapterService {
22
22
  paginate: {},
23
23
  multi: false,
24
24
  filters: [],
25
- whitelist: []
25
+ allow: []
26
26
  }, options);
27
27
  }
28
28
  get id() {
@@ -33,28 +33,33 @@ class AdapterService {
33
33
  }
34
34
  filterQuery(params = {}, opts = {}) {
35
35
  const paginate = typeof params.paginate !== 'undefined'
36
- ? params.paginate : this.options.paginate;
36
+ ? params.paginate
37
+ : this.getOptions(params).paginate;
37
38
  const { query = {} } = params;
38
39
  const options = Object.assign({
39
- operators: this.options.whitelist || [],
40
+ operators: this.options.whitelist || this.options.allow || [],
40
41
  filters: this.options.filters,
41
42
  paginate
42
43
  }, opts);
43
- const result = filter_query_1.filterQuery(query, options);
44
+ const result = (0, filter_query_1.filterQuery)(query, options);
44
45
  return Object.assign(result, { paginate });
45
46
  }
46
- allowsMulti(method) {
47
+ allowsMulti(method, params = {}) {
47
48
  const always = alwaysMulti[method];
48
49
  if (typeof always !== 'undefined') {
49
50
  return always;
50
51
  }
51
- const option = this.options.multi;
52
+ const { multi: option } = this.getOptions(params);
52
53
  if (option === true || option === false) {
53
54
  return option;
54
55
  }
55
- else {
56
- return option.includes(method);
57
- }
56
+ return option.includes(method);
57
+ }
58
+ getOptions(params) {
59
+ return {
60
+ ...this.options,
61
+ ...params.adapter
62
+ };
58
63
  }
59
64
  find(params) {
60
65
  return callMethod(this, '_find', params);
@@ -63,7 +68,7 @@ class AdapterService {
63
68
  return callMethod(this, '_get', id, params);
64
69
  }
65
70
  create(data, params) {
66
- if (Array.isArray(data) && !this.allowsMulti('create')) {
71
+ if (Array.isArray(data) && !this.allowsMulti('create', params)) {
67
72
  return Promise.reject(new errors_1.MethodNotAllowed('Can not create multiple entries'));
68
73
  }
69
74
  return callMethod(this, '_create', data, params);
@@ -75,17 +80,18 @@ class AdapterService {
75
80
  return callMethod(this, '_update', id, data, params);
76
81
  }
77
82
  patch(id, data, params) {
78
- if (id === null && !this.allowsMulti('patch')) {
83
+ if (id === null && !this.allowsMulti('patch', params)) {
79
84
  return Promise.reject(new errors_1.MethodNotAllowed('Can not patch multiple entries'));
80
85
  }
81
86
  return callMethod(this, '_patch', id, data, params);
82
87
  }
83
88
  remove(id, params) {
84
- if (id === null && !this.allowsMulti('remove')) {
89
+ if (id === null && !this.allowsMulti('remove', params)) {
85
90
  return Promise.reject(new errors_1.MethodNotAllowed('Can not remove multiple entries'));
86
91
  }
87
92
  return callMethod(this, '_remove', id, params);
88
93
  }
94
+ async setup() { }
89
95
  }
90
96
  exports.AdapterService = AdapterService;
91
97
  //# sourceMappingURL=service.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"service.js","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"service.js","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"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"}
package/lib/sort.d.ts CHANGED
@@ -1,4 +1,6 @@
1
- export declare function compareNSB(a: any, b: any): 1 | 0 | -1;
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;
1
+ export declare function compareNSB(a: any, b: any): 1 | -1 | 0;
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,16 +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
- 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 => {
97
97
  const direction = $sort[key];
98
- return { key, 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
+ }
99
105
  });
100
106
  return function (a, b) {
101
- let compare;
102
- for (const criterion of criteria) {
103
- compare = criterion.direction * exports.compare(a[criterion.key], b[criterion.key]);
104
- if (compare !== 0) {
105
- return compare;
107
+ for (const compare of compares) {
108
+ const comparasion = compare(a, b);
109
+ if (comparasion !== 0) {
110
+ return comparasion;
106
111
  }
107
112
  }
108
113
  return 0;
package/lib/sort.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"sort.js","sourceRoot":"","sources":["../src/sort.ts"],"names":[],"mappings":"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"}
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,CAAQ,EAAE,CAAQ;IAC/C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;QAC5D,MAAM,UAAU,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAEvC,IAAI,UAAU,KAAK,CAAC,EAAE;YAAE,OAAO,UAAU,CAAC;SAAE;KAC7C;IAED,iDAAiD;IACjD,OAAO,UAAU,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;AACxC,CAAC;AATD,sCASC;AAED,SAAgB,OAAO,CAAE,CAAM,EAAE,CAAM,EAAE,iBAAsB,UAAU;IACvE,IAAI,CAAC,KAAK,CAAC,EAAE;QAAE,OAAO,CAAC,CAAC;KAAE;IAE1B,YAAY;IACZ,IAAI,CAAC,KAAK,SAAS,EAAE;QAAE,OAAO,CAAC,CAAC,CAAC;KAAE;IACnC,IAAI,CAAC,KAAK,SAAS,EAAE;QAAE,OAAO,CAAC,CAAC;KAAE;IAElC,OAAO;IACP,IAAI,CAAC,KAAK,IAAI,EAAE;QAAE,OAAO,CAAC,CAAC,CAAC;KAAE;IAC9B,IAAI,CAAC,KAAK,IAAI,EAAE;QAAE,OAAO,CAAC,CAAC;KAAE;IAE7B,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,CAAC,CAAC;KAAE;IAExC,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,CAAC,CAAC;KAAE;IAExC,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,CAAC,CAAC;KAAE;IAEzC,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,CAAC;KAAE;IAEpC,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,CAAC,CAAC;KAAE;IAEnC,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;IAEpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;QACpE,MAAM,UAAU,GAAG,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAErD,IAAI,UAAU,KAAK,CAAC,EAAE;YAAE,OAAO,UAAU,CAAC;SAAE;KAC7C;IAED,OAAO,UAAU,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;AAChD,CAAC;AA1CD,0BA0CC;AAED,iDAAiD;AACjD,gCAAgC;AAChC,SAAgB,MAAM,CAAE,KAAgC;IACtD,MAAM,GAAG,GAAG,CAAC,KAAU,EAAE,IAAc,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC;IAE3F,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;QAE5B,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;YACrB,OAAO,CAAC,CAAM,EAAE,CAAM,EAAE,EAAE,CAAC,SAAS,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;SAChE;aAAM;YACL,OAAO,CAAC,CAAM,EAAE,CAAM,EAAE,EAAE,CAAC,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;SAC5E;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,UAAU,CAAM,EAAE,CAAM;QAC7B,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE;YAC9B,MAAM,WAAW,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAElC,IAAI,WAAW,KAAK,CAAC,EAAE;gBAAE,OAAO,WAAW,CAAC;aAAE;SAC/C;QAED,OAAO,CAAC,CAAC;IACX,CAAC,CAAC;AACJ,CAAC;AAvBD,wBAuBC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@feathersjs/adapter-commons",
3
- "version": "5.0.0-pre.1",
3
+ "version": "5.0.0-pre.15",
4
4
  "description": "Shared database adapter utility functions",
5
5
  "homepage": "https://feathersjs.com",
6
6
  "keywords": [
@@ -13,7 +13,7 @@
13
13
  },
14
14
  "repository": {
15
15
  "type": "git",
16
- "url": "git://github.com/feathersjs/databases.git"
16
+ "url": "git://github.com/feathersjs/feathers.git"
17
17
  },
18
18
  "author": {
19
19
  "name": "Feathers contributor",
@@ -22,10 +22,10 @@
22
22
  },
23
23
  "contributors": [],
24
24
  "bugs": {
25
- "url": "https://github.com/feathersjs/databases/issues"
25
+ "url": "https://github.com/feathersjs/feathers/issues"
26
26
  },
27
27
  "engines": {
28
- "node": ">= 10"
28
+ "node": ">= 12"
29
29
  },
30
30
  "main": "lib/",
31
31
  "types": "lib/",
@@ -48,19 +48,19 @@
48
48
  "access": "public"
49
49
  },
50
50
  "dependencies": {
51
- "@feathersjs/commons": "^5.0.0-pre.1",
52
- "@feathersjs/errors": "^5.0.0-pre.1",
53
- "@feathersjs/feathers": "^5.0.0-pre.1"
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
- "@types/mocha": "^8.0.4",
57
- "@types/mongodb": "^3.6.1",
58
- "@types/node": "^14.14.10",
59
- "mocha": "^8.2.1",
60
- "mongodb": "^3.6.3",
56
+ "@types/mocha": "^9.0.0",
57
+ "@types/mongodb": "^4.0.6",
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": "^9.1.0",
63
- "typescript": "^4.1.2"
62
+ "ts-node": "^10.4.0",
63
+ "typescript": "^4.4.4"
64
64
  },
65
- "gitHead": "3756506935c520fc50d4be416ff649c2158afdac"
65
+ "gitHead": "8008bf4f8529a2a40b6a2f976c1f43ae13675693"
66
66
  }
@@ -12,8 +12,9 @@ function parse (number: any) {
12
12
  // Returns the pagination limit and will take into account the
13
13
  // default and max pagination settings
14
14
  function getLimit (limit: any, paginate: any) {
15
- if (paginate && paginate.default) {
16
- const lower = typeof limit === 'number' && !isNaN(limit) ? limit : paginate.default;
15
+ if (paginate && (paginate.default || paginate.max)) {
16
+ const base = paginate.default || 0;
17
+ const lower = typeof limit === 'number' && !isNaN(limit) ? limit : base;
17
18
  const upper = typeof paginate.max === 'number' ? paginate.max : Number.MAX_VALUE;
18
19
 
19
20
  return Math.min(lower, upper);
package/src/index.ts CHANGED
@@ -1,26 +1,21 @@
1
1
  import { _ } from '@feathersjs/commons';
2
2
 
3
- export { AdapterService, InternalServiceMethods, ServiceOptions, Paginated } from './service';
3
+ export { AdapterService, InternalServiceMethods, ServiceOptions, AdapterParams } from './service';
4
4
  export { filterQuery, FILTERS, OPERATORS } from './filter-query';
5
5
  export * from './sort';
6
6
 
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/service.ts CHANGED
@@ -1,14 +1,7 @@
1
1
  import { NotImplemented, BadRequest, MethodNotAllowed } from '@feathersjs/errors';
2
- import { ServiceMethods, Params, Id, NullableId } from '@feathersjs/feathers';
2
+ import { ServiceMethods, Params, Id, NullableId, Paginated } from '@feathersjs/feathers';
3
3
  import { filterQuery } from './filter-query';
4
4
 
5
- export interface Paginated<T> {
6
- total: number;
7
- limit: number;
8
- skip: number;
9
- data: T[];
10
- }
11
-
12
5
  const callMethod = (self: any, name: any, ...args: any[]) => {
13
6
  if (typeof self[name] !== 'function') {
14
7
  return Promise.reject(new NotImplemented(`Method ${name} not available`));
@@ -24,17 +17,26 @@ const alwaysMulti: { [key: string]: boolean } = {
24
17
  };
25
18
 
26
19
  export interface ServiceOptions {
27
- events: string[];
20
+ events?: string[];
28
21
  multi: boolean|string[];
29
22
  id: string;
30
23
  paginate: {
31
24
  default?: number;
32
25
  max?: number;
33
26
  }
34
- whitelist: string[];
27
+ whitelist?: string[];
28
+ allow: string[];
35
29
  filters: string[];
36
30
  }
37
31
 
32
+ export interface AdapterOptions<M = any> extends Pick<ServiceOptions, 'multi'|'allow'|'paginate'> {
33
+ Model?: M;
34
+ }
35
+
36
+ export interface AdapterParams<M = any> extends Params {
37
+ adapter?: Partial<AdapterOptions<M>>;
38
+ }
39
+
38
40
  /**
39
41
  * Hook-less (internal) service methods. Directly call database adapter service methods
40
42
  * without running any service-level hooks. This can be useful if you need the raw data
@@ -47,7 +49,7 @@ export interface ServiceOptions {
47
49
  *
48
50
  * @see {@link https://docs.feathersjs.com/guides/migrating.html#hook-less-service-methods}
49
51
  */
50
- export interface InternalServiceMethods<T = any> {
52
+ export interface InternalServiceMethods<T = any, D = Partial<T>> {
51
53
 
52
54
  /**
53
55
  * Retrieve all resources from this service, skipping any service-level hooks.
@@ -56,7 +58,7 @@ export interface InternalServiceMethods<T = any> {
56
58
  * @see {@link HookLessServiceMethods}
57
59
  * @see {@link https://docs.feathersjs.com/api/services.html#find-params|Feathers API Documentation: .find(params)}
58
60
  */
59
- _find (params?: Params): Promise<T | T[] | Paginated<T>>;
61
+ _find (params?: AdapterParams): Promise<T | T[] | Paginated<T>>;
60
62
 
61
63
  /**
62
64
  * Retrieve a single resource matching the given ID, skipping any service-level hooks.
@@ -66,7 +68,7 @@ export interface InternalServiceMethods<T = any> {
66
68
  * @see {@link HookLessServiceMethods}
67
69
  * @see {@link https://docs.feathersjs.com/api/services.html#get-id-params|Feathers API Documentation: .get(id, params)}
68
70
  */
69
- _get (id: Id, params?: Params): Promise<T>;
71
+ _get (id: Id, params?: AdapterParams): Promise<T>;
70
72
 
71
73
  /**
72
74
  * Create a new resource for this service, skipping any service-level hooks.
@@ -76,7 +78,7 @@ export interface InternalServiceMethods<T = any> {
76
78
  * @see {@link HookLessServiceMethods}
77
79
  * @see {@link https://docs.feathersjs.com/api/services.html#create-data-params|Feathers API Documentation: .create(data, params)}
78
80
  */
79
- _create (data: Partial<T> | Partial<T>[], params?: Params): Promise<T | T[]>;
81
+ _create (data: D | D[], params?: AdapterParams): Promise<T | T[]>;
80
82
 
81
83
  /**
82
84
  * Replace any resources matching the given ID with the given data, skipping any service-level hooks.
@@ -87,7 +89,7 @@ export interface InternalServiceMethods<T = any> {
87
89
  * @see {@link HookLessServiceMethods}
88
90
  * @see {@link https://docs.feathersjs.com/api/services.html#update-id-data-params|Feathers API Documentation: .update(id, data, params)}
89
91
  */
90
- _update (id: Id, data: T, params?: Params): Promise<T>;
92
+ _update (id: Id, data: D, params?: AdapterParams): Promise<T>;
91
93
 
92
94
  /**
93
95
  * Merge any resources matching the given ID with the given data, skipping any service-level hooks.
@@ -98,7 +100,7 @@ export interface InternalServiceMethods<T = any> {
98
100
  * @see {@link HookLessServiceMethods}
99
101
  * @see {@link https://docs.feathersjs.com/api/services.html#patch-id-data-params|Feathers API Documentation: .patch(id, data, params)}
100
102
  */
101
- _patch (id: NullableId, data: Partial<T>, params?: Params): Promise<T | T[]>;
103
+ _patch (id: NullableId, data: D, params?: AdapterParams): Promise<T | T[]>;
102
104
 
103
105
  /**
104
106
  * Remove resources matching the given ID from the this service, skipping any service-level hooks.
@@ -108,20 +110,24 @@ export interface InternalServiceMethods<T = any> {
108
110
  * @see {@link HookLessServiceMethods}
109
111
  * @see {@link https://docs.feathersjs.com/api/services.html#remove-id-params|Feathers API Documentation: .remove(id, params)}
110
112
  */
111
- _remove (id: NullableId, params?: Params): Promise<T | T[]>;
113
+ _remove (id: NullableId, params?: AdapterParams): Promise<T | T[]>;
112
114
  }
113
115
 
114
- export class AdapterService<T = any> implements ServiceMethods<T|Paginated<T>> {
115
- options: ServiceOptions;
116
+ export class AdapterService<
117
+ T = any,
118
+ D = Partial<T>,
119
+ O extends Partial<ServiceOptions> = Partial<ServiceOptions>
120
+ > implements ServiceMethods<T|Paginated<T>, D> {
121
+ options: ServiceOptions & O;
116
122
 
117
- constructor (options: Partial<ServiceOptions>) {
123
+ constructor (options: O) {
118
124
  this.options = Object.assign({
119
125
  id: 'id',
120
126
  events: [],
121
127
  paginate: {},
122
128
  multi: false,
123
129
  filters: [],
124
- whitelist: []
130
+ allow: []
125
131
  }, options);
126
132
  }
127
133
 
@@ -133,12 +139,13 @@ export class AdapterService<T = any> implements ServiceMethods<T|Paginated<T>> {
133
139
  return this.options.events;
134
140
  }
135
141
 
136
- filterQuery (params: Params = {}, opts: any = {}) {
142
+ filterQuery (params: AdapterParams = {}, opts: any = {}) {
137
143
  const paginate = typeof params.paginate !== 'undefined'
138
- ? params.paginate : this.options.paginate;
144
+ ? params.paginate
145
+ : this.getOptions(params).paginate;
139
146
  const { query = {} } = params;
140
147
  const options = Object.assign({
141
- operators: this.options.whitelist || [],
148
+ operators: this.options.whitelist || this.options.allow || [],
142
149
  filters: this.options.filters,
143
150
  paginate
144
151
  }, opts);
@@ -147,39 +154,48 @@ export class AdapterService<T = any> implements ServiceMethods<T|Paginated<T>> {
147
154
  return Object.assign(result, { paginate });
148
155
  }
149
156
 
150
- allowsMulti (method: string) {
157
+ allowsMulti (method: string, params: AdapterParams = {}) {
151
158
  const always = alwaysMulti[method];
152
159
 
153
160
  if (typeof always !== 'undefined') {
154
161
  return always;
155
162
  }
156
163
 
157
- const option = this.options.multi;
164
+ const { multi: option } = this.getOptions(params);
158
165
 
159
166
  if (option === true || option === false) {
160
167
  return option;
161
- } else {
162
- return option.includes(method);
163
168
  }
169
+
170
+ return option.includes(method);
164
171
  }
165
172
 
166
- find (params?: Params): Promise<T[] | Paginated<T>> {
173
+ getOptions (params: AdapterParams): ServiceOptions & { model?: any } {
174
+ return {
175
+ ...this.options,
176
+ ...params.adapter
177
+ }
178
+ }
179
+
180
+ find (params?: AdapterParams): Promise<T[] | Paginated<T>> {
167
181
  return callMethod(this, '_find', params);
168
182
  }
169
183
 
170
- get (id: Id, params?: Params): Promise<T> {
184
+ get (id: Id, params?: AdapterParams): Promise<T> {
171
185
  return callMethod(this, '_get', id, params);
172
186
  }
173
187
 
174
- create (data: Partial<T> | Partial<T>[], params?: Params): Promise<T | T[]> {
175
- if (Array.isArray(data) && !this.allowsMulti('create')) {
188
+ create (data: Partial<T>, params?: AdapterParams): Promise<T>;
189
+ create (data: Partial<T>[], params?: AdapterParams): Promise<T[]>;
190
+ create (data: Partial<T> | Partial<T>[], params?: AdapterParams): Promise<T | T[]> {
191
+ if (Array.isArray(data) && !this.allowsMulti('create', params)) {
176
192
  return Promise.reject(new MethodNotAllowed('Can not create multiple entries'));
177
193
  }
178
194
 
179
195
  return callMethod(this, '_create', data, params);
180
196
  }
181
197
 
182
- update (id: Id, data: T, params?: Params): Promise<T> {
198
+ update (id: Id, data: D, params?: AdapterParams): Promise<T> {
183
199
  if (id === null || Array.isArray(data)) {
184
200
  return Promise.reject(new BadRequest(
185
201
  'You can not replace multiple instances. Did you mean \'patch\'?'
@@ -189,19 +205,27 @@ export class AdapterService<T = any> implements ServiceMethods<T|Paginated<T>> {
189
205
  return callMethod(this, '_update', id, data, params);
190
206
  }
191
207
 
192
- patch (id: NullableId, data: Partial<T>, params?: Params): Promise<T | T[]> {
193
- if (id === null && !this.allowsMulti('patch')) {
208
+ patch (id: Id, data: Partial<T>, params?: AdapterParams): Promise<T>;
209
+ patch (id: null, data: Partial<T>, params?: AdapterParams): Promise<T[]>;
210
+ patch (id: NullableId, data: Partial<T>, params?: AdapterParams): Promise<T | T[]>;
211
+ patch (id: NullableId, data: Partial<T>, params?: AdapterParams): Promise<T | T[]> {
212
+ if (id === null && !this.allowsMulti('patch', params)) {
194
213
  return Promise.reject(new MethodNotAllowed('Can not patch multiple entries'));
195
214
  }
196
215
 
197
216
  return callMethod(this, '_patch', id, data, params);
198
217
  }
199
218
 
200
- remove (id: NullableId, params?: Params): Promise<T | T[]> {
201
- if (id === null && !this.allowsMulti('remove')) {
219
+ remove (id: Id, params?: AdapterParams): Promise<T>;
220
+ remove (id: null, params?: AdapterParams): Promise<T[]>;
221
+ remove (id: NullableId, params?: AdapterParams): Promise<T | T[]>;
222
+ remove (id: NullableId, params?: AdapterParams): Promise<T | T[]> {
223
+ if (id === null && !this.allowsMulti('remove', params)) {
202
224
  return Promise.reject(new MethodNotAllowed('Can not remove multiple entries'));
203
225
  }
204
226
 
205
227
  return callMethod(this, '_remove', id, params);
206
228
  }
229
+
230
+ async setup () {}
207
231
  }
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,22 +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
- const criteria = Object.keys($sort).map(key => {
67
+ export function sorter ($sort: { [key: string]: -1 | 1 }) {
68
+ const get = (value: any, path: string[]) => path.reduce((value, key) => value[key], value);
69
+
70
+ const compares = Object.keys($sort).map(key => {
73
71
  const direction = $sort[key];
72
+ const path = key.split('.');
74
73
 
75
- return { key, direction };
74
+ if (path.length === 1) {
75
+ return (a: any, b: any) => direction * compare(a[key], b[key]);
76
+ } else {
77
+ return (a: any, b: any) => direction * compare(get(a, path), get(b, path));
78
+ }
76
79
  });
77
80
 
78
81
  return function (a: any, b: any) {
79
- let compare;
80
-
81
- for (const criterion of criteria) {
82
- compare = criterion.direction * exports.compare(a[criterion.key], b[criterion.key]);
82
+ for (const compare of compares) {
83
+ const comparasion = compare(a, b);
83
84
 
84
- if (compare !== 0) {
85
- return compare;
86
- }
85
+ if (comparasion !== 0) { return comparasion; }
87
86
  }
88
87
 
89
88
  return 0;