@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 +173 -7
- package/LICENSE +1 -1
- package/README.md +1 -1
- package/lib/filter-query.js +3 -2
- package/lib/filter-query.js.map +1 -1
- package/lib/index.d.ts +2 -2
- package/lib/index.js +6 -9
- package/lib/index.js.map +1 -1
- package/lib/service.d.ts +37 -27
- package/lib/service.js +18 -12
- package/lib/service.js.map +1 -1
- package/lib/sort.d.ts +6 -4
- package/lib/sort.js +35 -30
- package/lib/sort.js.map +1 -1
- package/package.json +15 -15
- package/src/filter-query.ts +3 -2
- package/src/index.ts +7 -12
- package/src/service.ts +61 -37
- package/src/sort.ts +32 -33
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.
|
|
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/
|
|
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/
|
|
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/
|
|
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/
|
|
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/
|
|
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/
|
|
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
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)
|
|
20
|
+
Copyright (c) 2021 [Feathers contributors](https://github.com/feathersjs/feathers/graphs/contributors)
|
|
21
21
|
|
|
22
22
|
Licensed under the [MIT license](LICENSE).
|
package/lib/filter-query.js
CHANGED
|
@@ -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
|
|
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
|
}
|
package/lib/filter-query.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filter-query.js","sourceRoot":"","sources":["../src/filter-query.ts"],"names":[],"mappings":";;;AAAA,iDAAwC;AACxC,+CAAgD;AAEhD,SAAS,KAAK,CAAE,MAAW;IACzB,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;QACjC,OAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC;KACvC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,8DAA8D;AAC9D,sCAAsC;AACtC,SAAS,QAAQ,CAAE,KAAU,EAAE,QAAa;IAC1C,IAAI,QAAQ,IAAI,QAAQ,CAAC,OAAO,EAAE;
|
|
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,
|
|
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,
|
|
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
|
|
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
|
|
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?:
|
|
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?:
|
|
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:
|
|
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:
|
|
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:
|
|
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?:
|
|
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:
|
|
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?:
|
|
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
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
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
|
-
|
|
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
|
|
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.
|
|
52
|
+
const { multi: option } = this.getOptions(params);
|
|
52
53
|
if (option === true || option === false) {
|
|
53
54
|
return option;
|
|
54
55
|
}
|
|
55
|
-
|
|
56
|
-
|
|
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
|
package/lib/service.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service.js","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":";;;AAAA,+CAAkF;AAElF,iDAA6C;
|
|
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 |
|
|
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:
|
|
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
|
-
|
|
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,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
|
|
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
|
-
|
|
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
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
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":";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": [
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
},
|
|
14
14
|
"repository": {
|
|
15
15
|
"type": "git",
|
|
16
|
-
"url": "git://github.com/feathersjs/
|
|
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/
|
|
25
|
+
"url": "https://github.com/feathersjs/feathers/issues"
|
|
26
26
|
},
|
|
27
27
|
"engines": {
|
|
28
|
-
"node": ">=
|
|
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.
|
|
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
|
-
"@types/mocha": "^
|
|
57
|
-
"@types/mongodb": "^
|
|
58
|
-
"@types/node": "^
|
|
59
|
-
"mocha": "^
|
|
60
|
-
"mongodb": "^
|
|
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": "^
|
|
63
|
-
"typescript": "^4.
|
|
62
|
+
"ts-node": "^10.4.0",
|
|
63
|
+
"typescript": "^4.4.4"
|
|
64
64
|
},
|
|
65
|
-
"gitHead": "
|
|
65
|
+
"gitHead": "8008bf4f8529a2a40b6a2f976c1f43ae13675693"
|
|
66
66
|
}
|
package/src/filter-query.ts
CHANGED
|
@@ -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
|
|
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,
|
|
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:
|
|
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/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
|
|
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
|
|
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?:
|
|
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?:
|
|
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:
|
|
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:
|
|
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:
|
|
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?:
|
|
113
|
+
_remove (id: NullableId, params?: AdapterParams): Promise<T | T[]>;
|
|
112
114
|
}
|
|
113
115
|
|
|
114
|
-
export class AdapterService<
|
|
115
|
-
|
|
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:
|
|
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
|
-
|
|
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:
|
|
142
|
+
filterQuery (params: AdapterParams = {}, opts: any = {}) {
|
|
137
143
|
const paginate = typeof params.paginate !== 'undefined'
|
|
138
|
-
? params.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.
|
|
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
|
-
|
|
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?:
|
|
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
|
|
175
|
-
|
|
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:
|
|
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:
|
|
193
|
-
|
|
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:
|
|
201
|
-
|
|
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
|
-
|
|
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,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:
|
|
72
|
-
const
|
|
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
|
-
|
|
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
|
-
|
|
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 (
|
|
85
|
-
return compare;
|
|
86
|
-
}
|
|
85
|
+
if (comparasion !== 0) { return comparasion; }
|
|
87
86
|
}
|
|
88
87
|
|
|
89
88
|
return 0;
|