@feathersjs/mongodb 5.0.0-pre.22 → 5.0.0-pre.25
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 +28 -0
- package/lib/adapter.js +24 -17
- package/lib/adapter.js.map +1 -1
- package/lib/error-handler.js.map +1 -1
- package/lib/index.d.ts +1 -1
- package/lib/index.js.map +1 -1
- package/package.json +10 -10
- package/src/adapter.ts +105 -65
- package/src/error-handler.ts +1 -1
- package/src/index.ts +23 -17
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,34 @@
|
|
|
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.25](https://github.com/feathersjs/feathers/compare/v5.0.0-pre.24...v5.0.0-pre.25) (2022-06-22)
|
|
7
|
+
|
|
8
|
+
**Note:** Version bump only for package @feathersjs/mongodb
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
# [5.0.0-pre.24](https://github.com/feathersjs/feathers/compare/v5.0.0-pre.23...v5.0.0-pre.24) (2022-06-21)
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
### Features
|
|
18
|
+
|
|
19
|
+
* **authentication-local:** Add passwordHash property resolver ([#2660](https://github.com/feathersjs/feathers/issues/2660)) ([b41279b](https://github.com/feathersjs/feathers/commit/b41279b55eea3771a6fa4983a37be2413287bbc6))
|
|
20
|
+
* **knex:** Add KnexJS SQL database adapter to core ([#2671](https://github.com/feathersjs/feathers/issues/2671)) ([9380fff](https://github.com/feathersjs/feathers/commit/9380fff58596e8bb90b8bb098d2795b7eadfec20))
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
# [5.0.0-pre.23](https://github.com/feathersjs/feathers/compare/v5.0.0-pre.22...v5.0.0-pre.23) (2022-06-06)
|
|
27
|
+
|
|
28
|
+
**Note:** Version bump only for package @feathersjs/mongodb
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
|
|
6
34
|
# [5.0.0-pre.22](https://github.com/feathersjs/feathers/compare/v5.0.0-pre.21...v5.0.0-pre.22) (2022-05-24)
|
|
7
35
|
|
|
8
36
|
**Note:** Version bump only for package @feathersjs/mongodb
|
package/lib/adapter.js
CHANGED
|
@@ -29,7 +29,9 @@ class MongoDbAdapter extends adapter_commons_1.AdapterBase {
|
|
|
29
29
|
filterQuery(id, params) {
|
|
30
30
|
const { $select, $sort, $limit, $skip, ...query } = (params.query || {});
|
|
31
31
|
if (id !== null) {
|
|
32
|
-
query.$and = (query.$and || []).concat({
|
|
32
|
+
query.$and = (query.$and || []).concat({
|
|
33
|
+
[this.id]: this.getObjectId(id)
|
|
34
|
+
});
|
|
33
35
|
}
|
|
34
36
|
if (query[this.id]) {
|
|
35
37
|
query[this.id] = this.getObjectId(query[this.id]);
|
|
@@ -70,18 +72,21 @@ class MongoDbAdapter extends adapter_commons_1.AdapterBase {
|
|
|
70
72
|
async $get(id, params = {}) {
|
|
71
73
|
const { Model } = this.getOptions(params);
|
|
72
74
|
const { query, filters: { $select } } = this.filterQuery(id, params);
|
|
73
|
-
const projection = $select
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
75
|
+
const projection = $select
|
|
76
|
+
? {
|
|
77
|
+
projection: {
|
|
78
|
+
...this.getSelect($select),
|
|
79
|
+
[this.id]: 1
|
|
80
|
+
}
|
|
77
81
|
}
|
|
78
|
-
|
|
82
|
+
: {};
|
|
79
83
|
const findOptions = {
|
|
80
84
|
...params.mongodb,
|
|
81
85
|
...projection
|
|
82
86
|
};
|
|
83
|
-
return Promise.resolve(Model)
|
|
84
|
-
.then(
|
|
87
|
+
return Promise.resolve(Model)
|
|
88
|
+
.then((model) => model.findOne(query, findOptions))
|
|
89
|
+
.then((data) => {
|
|
85
90
|
if (data == null) {
|
|
86
91
|
throw new errors_1.NotFound(`No record found for id '${id}'`);
|
|
87
92
|
}
|
|
@@ -114,12 +119,12 @@ class MongoDbAdapter extends adapter_commons_1.AdapterBase {
|
|
|
114
119
|
data: filters.$limit === 0 ? [] : (await q.toArray())
|
|
115
120
|
});
|
|
116
121
|
if (paginate && paginate.default) {
|
|
117
|
-
if (useEstimatedDocumentCount &&
|
|
122
|
+
if (useEstimatedDocumentCount && typeof model.estimatedDocumentCount === 'function') {
|
|
118
123
|
return model.estimatedDocumentCount().then(runQuery);
|
|
119
124
|
}
|
|
120
125
|
return model.countDocuments(query, findOptions).then(runQuery);
|
|
121
126
|
}
|
|
122
|
-
return runQuery(0).then(page => page.data);
|
|
127
|
+
return runQuery(0).then((page) => page.data);
|
|
123
128
|
}
|
|
124
129
|
async $create(data, params = {}) {
|
|
125
130
|
const writeOptions = params.mongodb;
|
|
@@ -137,15 +142,19 @@ class MongoDbAdapter extends adapter_commons_1.AdapterBase {
|
|
|
137
142
|
return entry;
|
|
138
143
|
};
|
|
139
144
|
const promise = Array.isArray(data)
|
|
140
|
-
? model
|
|
141
|
-
|
|
145
|
+
? model
|
|
146
|
+
.insertMany(data.map(setId), writeOptions)
|
|
147
|
+
.then(async (result) => Promise.all(Object.values(result.insertedIds).map(async (_id) => model.findOne({ _id }))))
|
|
148
|
+
: model
|
|
149
|
+
.insertOne(setId(data), writeOptions)
|
|
150
|
+
.then(async (result) => model.findOne({ _id: result.insertedId }));
|
|
142
151
|
return promise.then((0, adapter_commons_1.select)(params, this.id)).catch(error_handler_1.errorHandler);
|
|
143
152
|
}
|
|
144
153
|
async $patch(id, _data, params = {}) {
|
|
145
154
|
const data = this.normalizeId(id, _data);
|
|
146
155
|
const { Model } = this.getOptions(params);
|
|
147
156
|
const model = await Promise.resolve(Model);
|
|
148
|
-
const { query, filters: { $select
|
|
157
|
+
const { query, filters: { $select } } = this.filterQuery(id, params);
|
|
149
158
|
const updateOptions = { ...params.mongodb };
|
|
150
159
|
const modifier = Object.keys(data).reduce((current, key) => {
|
|
151
160
|
const value = data[key];
|
|
@@ -168,13 +177,12 @@ class MongoDbAdapter extends adapter_commons_1.AdapterBase {
|
|
|
168
177
|
},
|
|
169
178
|
paginate: false
|
|
170
179
|
});
|
|
171
|
-
const items =
|
|
180
|
+
const items = Array.isArray(originalIds) ? originalIds : [originalIds];
|
|
172
181
|
const idList = items.map((item) => item[this.id]);
|
|
173
182
|
const findParams = {
|
|
174
183
|
...params,
|
|
175
184
|
paginate: false,
|
|
176
185
|
query: {
|
|
177
|
-
...($limit === 0 ? { $limit: 0 } : {}),
|
|
178
186
|
[this.id]: { $in: idList },
|
|
179
187
|
$select
|
|
180
188
|
}
|
|
@@ -193,14 +201,13 @@ class MongoDbAdapter extends adapter_commons_1.AdapterBase {
|
|
|
193
201
|
async $remove(id, params = {}) {
|
|
194
202
|
const { Model } = this.getOptions(params);
|
|
195
203
|
const model = await Promise.resolve(Model);
|
|
196
|
-
const { query, filters: { $select
|
|
204
|
+
const { query, filters: { $select } } = this.filterQuery(id, params);
|
|
197
205
|
const deleteOptions = { ...params.mongodb };
|
|
198
206
|
const findParams = {
|
|
199
207
|
...params,
|
|
200
208
|
paginate: false,
|
|
201
209
|
query: {
|
|
202
210
|
...query,
|
|
203
|
-
...($limit === 0 ? { $limit: 0 } : {}),
|
|
204
211
|
$select
|
|
205
212
|
}
|
|
206
213
|
};
|
package/lib/adapter.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":"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"}
|
package/lib/error-handler.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"error-handler.js","sourceRoot":"","sources":["../src/error-handler.ts"],"names":[],"mappings":";;;AAAA,+CAAiD;AAGjD,SAAgB,YAAY,
|
|
1
|
+
{"version":3,"file":"error-handler.js","sourceRoot":"","sources":["../src/error-handler.ts"],"names":[],"mappings":";;;AAAA,+CAAiD;AAGjD,SAAgB,YAAY,CAAC,KAAiB;IAC5C,kEAAkE;IAClE,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE;QACzD,MAAM,IAAI,qBAAY,CAAC,KAAK,EAAE;YAC5B,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,IAAI,EAAE,KAAK,CAAC,IAAI;SACjB,CAAC,CAAA;KACH;IAED,MAAM,KAAK,CAAA;AACb,CAAC;AAVD,oCAUC"}
|
package/lib/index.d.ts
CHANGED
|
@@ -3,7 +3,7 @@ import { Paginated, ServiceMethods, Id } from '@feathersjs/feathers';
|
|
|
3
3
|
import { MongoDbAdapter, MongoDBAdapterParams } from './adapter';
|
|
4
4
|
export * from './adapter';
|
|
5
5
|
export * from './error-handler';
|
|
6
|
-
export declare class MongoDBService<T = any, D = Partial<T>, P extends MongoDBAdapterParams = MongoDBAdapterParams> extends MongoDbAdapter<T, D, P> implements ServiceMethods<T | Paginated<T>, D, P> {
|
|
6
|
+
export declare class MongoDBService<T = any, D = Partial<T>, P extends MongoDBAdapterParams<any> = MongoDBAdapterParams> extends MongoDbAdapter<T, D, P> implements ServiceMethods<T | Paginated<T>, D, P> {
|
|
7
7
|
find(params?: P & {
|
|
8
8
|
paginate?: PaginationOptions;
|
|
9
9
|
}): Promise<Paginated<T>>;
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAEA,uCAAgE;AAEhE,4CAAyB;AACzB,kDAA+B;AAE/B,MAAa,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAEA,uCAAgE;AAEhE,4CAAyB;AACzB,kDAA+B;AAE/B,MAAa,cAKX,SAAQ,wBAAuB;IAM/B,KAAK,CAAC,IAAI,CAAC,MAAU;QACnB,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAQ,CAAA;IAClC,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,EAAM,EAAE,MAAU;QAC1B,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC,CAAA;IAC9B,CAAC;IAID,KAAK,CAAC,MAAM,CAAC,IAA+B,EAAE,MAAU;QACtD,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;IACnC,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,EAAM,EAAE,IAAO,EAAE,MAAU;QACtC,OAAO,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,CAAA;IACvC,CAAC;IAID,KAAK,CAAC,KAAK,CAAC,EAAc,EAAE,IAAgB,EAAE,MAAU;QACtD,OAAO,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,CAAA;IACtC,CAAC;IAID,KAAK,CAAC,MAAM,CAAC,EAAc,EAAE,MAAU;QACrC,OAAO,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,MAAM,CAAC,CAAA;IACjC,CAAC;CACF;AAxCD,wCAwCC"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@feathersjs/mongodb",
|
|
3
3
|
"description": "Feathers MongoDB service adapter",
|
|
4
|
-
"version": "5.0.0-pre.
|
|
4
|
+
"version": "5.0.0-pre.25",
|
|
5
5
|
"homepage": "https://feathersjs.com",
|
|
6
6
|
"main": "lib/",
|
|
7
7
|
"keywords": [
|
|
@@ -50,22 +50,22 @@
|
|
|
50
50
|
"access": "public"
|
|
51
51
|
},
|
|
52
52
|
"dependencies": {
|
|
53
|
-
"@feathersjs/adapter-commons": "^5.0.0-pre.
|
|
54
|
-
"@feathersjs/commons": "^5.0.0-pre.
|
|
55
|
-
"@feathersjs/errors": "^5.0.0-pre.
|
|
56
|
-
"@feathersjs/feathers": "^5.0.0-pre.
|
|
53
|
+
"@feathersjs/adapter-commons": "^5.0.0-pre.25",
|
|
54
|
+
"@feathersjs/commons": "^5.0.0-pre.25",
|
|
55
|
+
"@feathersjs/errors": "^5.0.0-pre.25",
|
|
56
|
+
"@feathersjs/feathers": "^5.0.0-pre.25"
|
|
57
57
|
},
|
|
58
58
|
"peerDependencies": {
|
|
59
59
|
"mongodb": "^4.5.0"
|
|
60
60
|
},
|
|
61
61
|
"devDependencies": {
|
|
62
|
-
"@feathersjs/adapter-tests": "^5.0.0-pre.
|
|
62
|
+
"@feathersjs/adapter-tests": "^5.0.0-pre.25",
|
|
63
63
|
"@types/mocha": "^9.1.1",
|
|
64
|
-
"@types/node": "^17.0.
|
|
64
|
+
"@types/node": "^17.0.40",
|
|
65
65
|
"mocha": "^10.0.0",
|
|
66
|
-
"mongodb-memory-server": "^8.
|
|
66
|
+
"mongodb-memory-server": "^8.6.0",
|
|
67
67
|
"shx": "^0.3.4",
|
|
68
|
-
"typescript": "^4.
|
|
68
|
+
"typescript": "^4.7.3"
|
|
69
69
|
},
|
|
70
|
-
"gitHead": "
|
|
70
|
+
"gitHead": "c0ab3b603920dff6e9c912b2767cf168094d45c8"
|
|
71
71
|
}
|
package/src/adapter.ts
CHANGED
|
@@ -1,27 +1,50 @@
|
|
|
1
1
|
import {
|
|
2
|
-
ObjectId,
|
|
3
|
-
|
|
2
|
+
ObjectId,
|
|
3
|
+
Collection,
|
|
4
|
+
FindOptions,
|
|
5
|
+
BulkWriteOptions,
|
|
6
|
+
InsertOneOptions,
|
|
7
|
+
DeleteOptions,
|
|
8
|
+
CountDocumentsOptions,
|
|
9
|
+
ReplaceOptions
|
|
4
10
|
} from 'mongodb'
|
|
5
11
|
import { NotFound } from '@feathersjs/errors'
|
|
6
12
|
import { _ } from '@feathersjs/commons'
|
|
7
|
-
import {
|
|
13
|
+
import {
|
|
14
|
+
AdapterBase,
|
|
15
|
+
select,
|
|
16
|
+
AdapterParams,
|
|
17
|
+
AdapterServiceOptions,
|
|
18
|
+
PaginationOptions,
|
|
19
|
+
AdapterQuery
|
|
20
|
+
} from '@feathersjs/adapter-commons'
|
|
8
21
|
import { NullableId, Id, Paginated } from '@feathersjs/feathers'
|
|
9
22
|
import { errorHandler } from './error-handler'
|
|
10
23
|
|
|
11
24
|
export interface MongoDBAdapterOptions extends AdapterServiceOptions {
|
|
12
|
-
Model: Collection|Promise<Collection
|
|
13
|
-
disableObjectify?: boolean
|
|
25
|
+
Model: Collection | Promise<Collection>
|
|
26
|
+
disableObjectify?: boolean
|
|
14
27
|
useEstimatedDocumentCount?: boolean
|
|
15
28
|
}
|
|
16
29
|
|
|
17
|
-
export interface MongoDBAdapterParams<Q = AdapterQuery>
|
|
18
|
-
|
|
30
|
+
export interface MongoDBAdapterParams<Q = AdapterQuery>
|
|
31
|
+
extends AdapterParams<Q, Partial<MongoDBAdapterOptions>> {
|
|
32
|
+
mongodb?:
|
|
33
|
+
| BulkWriteOptions
|
|
34
|
+
| FindOptions
|
|
35
|
+
| InsertOneOptions
|
|
36
|
+
| DeleteOptions
|
|
37
|
+
| CountDocumentsOptions
|
|
38
|
+
| ReplaceOptions
|
|
19
39
|
}
|
|
20
40
|
|
|
21
41
|
// Create the service.
|
|
22
|
-
export class MongoDbAdapter<
|
|
23
|
-
|
|
24
|
-
|
|
42
|
+
export class MongoDbAdapter<
|
|
43
|
+
T,
|
|
44
|
+
D = Partial<T>,
|
|
45
|
+
P extends MongoDBAdapterParams<any> = MongoDBAdapterParams
|
|
46
|
+
> extends AdapterBase<T, D, P, MongoDBAdapterOptions> {
|
|
47
|
+
constructor(options: MongoDBAdapterOptions) {
|
|
25
48
|
if (!options) {
|
|
26
49
|
throw new Error('MongoDB options have to be provided')
|
|
27
50
|
}
|
|
@@ -32,7 +55,7 @@ export class MongoDbAdapter<T, D = Partial<T>, P extends MongoDBAdapterParams<an
|
|
|
32
55
|
})
|
|
33
56
|
}
|
|
34
57
|
|
|
35
|
-
getObjectId
|
|
58
|
+
getObjectId(id: Id | ObjectId) {
|
|
36
59
|
if (this.options.disableObjectify) {
|
|
37
60
|
return id
|
|
38
61
|
}
|
|
@@ -44,11 +67,13 @@ export class MongoDbAdapter<T, D = Partial<T>, P extends MongoDBAdapterParams<an
|
|
|
44
67
|
return id
|
|
45
68
|
}
|
|
46
69
|
|
|
47
|
-
filterQuery
|
|
48
|
-
const { $select, $sort, $limit, $skip, ...query } = (params.query || {}) as AdapterQuery
|
|
70
|
+
filterQuery(id: NullableId, params: P) {
|
|
71
|
+
const { $select, $sort, $limit, $skip, ...query } = (params.query || {}) as AdapterQuery
|
|
49
72
|
|
|
50
73
|
if (id !== null) {
|
|
51
|
-
query.$and = (query.$and || []).concat({
|
|
74
|
+
query.$and = (query.$and || []).concat({
|
|
75
|
+
[this.id]: this.getObjectId(id)
|
|
76
|
+
})
|
|
52
77
|
}
|
|
53
78
|
|
|
54
79
|
if (query[this.id]) {
|
|
@@ -61,22 +86,25 @@ export class MongoDbAdapter<T, D = Partial<T>, P extends MongoDBAdapterParams<an
|
|
|
61
86
|
}
|
|
62
87
|
}
|
|
63
88
|
|
|
64
|
-
getSelect
|
|
89
|
+
getSelect(select: string[] | { [key: string]: number }) {
|
|
65
90
|
if (Array.isArray(select)) {
|
|
66
|
-
return select.reduce<{ [key: string]: number }>(
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
91
|
+
return select.reduce<{ [key: string]: number }>(
|
|
92
|
+
(value, name) => ({
|
|
93
|
+
...value,
|
|
94
|
+
[name]: 1
|
|
95
|
+
}),
|
|
96
|
+
{}
|
|
97
|
+
)
|
|
70
98
|
}
|
|
71
99
|
|
|
72
100
|
return select
|
|
73
101
|
}
|
|
74
102
|
|
|
75
|
-
async $findOrGet
|
|
103
|
+
async $findOrGet(id: NullableId, params: P) {
|
|
76
104
|
return id === null ? await this.$find(params) : await this.$get(id, params)
|
|
77
105
|
}
|
|
78
106
|
|
|
79
|
-
normalizeId
|
|
107
|
+
normalizeId(id: NullableId, data: Partial<D>): Partial<D> {
|
|
80
108
|
if (this.id === '_id') {
|
|
81
109
|
// Default Mongo IDs cannot be updated. The Mongo library handles
|
|
82
110
|
// this automatically.
|
|
@@ -92,22 +120,28 @@ export class MongoDbAdapter<T, D = Partial<T>, P extends MongoDBAdapterParams<an
|
|
|
92
120
|
return data
|
|
93
121
|
}
|
|
94
122
|
|
|
95
|
-
async $get
|
|
96
|
-
const { Model } = this.getOptions(params)
|
|
97
|
-
const {
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
123
|
+
async $get(id: Id, params: P = {} as P): Promise<T> {
|
|
124
|
+
const { Model } = this.getOptions(params)
|
|
125
|
+
const {
|
|
126
|
+
query,
|
|
127
|
+
filters: { $select }
|
|
128
|
+
} = this.filterQuery(id, params)
|
|
129
|
+
const projection = $select
|
|
130
|
+
? {
|
|
131
|
+
projection: {
|
|
132
|
+
...this.getSelect($select),
|
|
133
|
+
[this.id]: 1
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
: {}
|
|
104
137
|
const findOptions: FindOptions = {
|
|
105
138
|
...params.mongodb,
|
|
106
139
|
...projection
|
|
107
140
|
}
|
|
108
141
|
|
|
109
|
-
return Promise.resolve(Model)
|
|
110
|
-
.then(
|
|
142
|
+
return Promise.resolve(Model)
|
|
143
|
+
.then((model) => model.findOne(query, findOptions))
|
|
144
|
+
.then((data) => {
|
|
111
145
|
if (data == null) {
|
|
112
146
|
throw new NotFound(`No record found for id '${id}'`)
|
|
113
147
|
}
|
|
@@ -117,10 +151,10 @@ export class MongoDbAdapter<T, D = Partial<T>, P extends MongoDBAdapterParams<an
|
|
|
117
151
|
.catch(errorHandler)
|
|
118
152
|
}
|
|
119
153
|
|
|
120
|
-
async $find
|
|
121
|
-
async $find
|
|
122
|
-
async $find
|
|
123
|
-
async $find
|
|
154
|
+
async $find(params?: P & { paginate?: PaginationOptions }): Promise<Paginated<T>>
|
|
155
|
+
async $find(params?: P & { paginate: false }): Promise<T[]>
|
|
156
|
+
async $find(params?: P): Promise<Paginated<T> | T[]>
|
|
157
|
+
async $find(params: P = {} as P): Promise<Paginated<T> | T[]> {
|
|
124
158
|
const { filters, query } = this.filterQuery(null, params)
|
|
125
159
|
const { paginate, Model, useEstimatedDocumentCount } = this.getOptions(params)
|
|
126
160
|
const findOptions = { ...params.mongodb }
|
|
@@ -147,24 +181,24 @@ export class MongoDbAdapter<T, D = Partial<T>, P extends MongoDBAdapterParams<an
|
|
|
147
181
|
total,
|
|
148
182
|
limit: filters.$limit,
|
|
149
183
|
skip: filters.$skip || 0,
|
|
150
|
-
data: filters.$limit === 0 ? [] : (await q.toArray()) as any as T[]
|
|
184
|
+
data: filters.$limit === 0 ? [] : ((await q.toArray()) as any as T[])
|
|
151
185
|
})
|
|
152
186
|
|
|
153
187
|
if (paginate && paginate.default) {
|
|
154
|
-
if (useEstimatedDocumentCount &&
|
|
188
|
+
if (useEstimatedDocumentCount && typeof model.estimatedDocumentCount === 'function') {
|
|
155
189
|
return model.estimatedDocumentCount().then(runQuery)
|
|
156
190
|
}
|
|
157
191
|
|
|
158
192
|
return model.countDocuments(query, findOptions).then(runQuery)
|
|
159
193
|
}
|
|
160
194
|
|
|
161
|
-
return runQuery(0).then(page => page.data)
|
|
195
|
+
return runQuery(0).then((page) => page.data)
|
|
162
196
|
}
|
|
163
197
|
|
|
164
|
-
async $create
|
|
165
|
-
async $create
|
|
166
|
-
async $create
|
|
167
|
-
async $create
|
|
198
|
+
async $create(data: Partial<D>, params?: P): Promise<T>
|
|
199
|
+
async $create(data: Partial<D>[], params?: P): Promise<T[]>
|
|
200
|
+
async $create(data: Partial<D> | Partial<D>[], _params?: P): Promise<T | T[]>
|
|
201
|
+
async $create(data: Partial<D> | Partial<D>[], params: P = {} as P): Promise<T | T[]> {
|
|
168
202
|
const writeOptions = params.mongodb
|
|
169
203
|
const { Model } = this.getOptions(params)
|
|
170
204
|
const model = await Promise.resolve(Model)
|
|
@@ -182,24 +216,29 @@ export class MongoDbAdapter<T, D = Partial<T>, P extends MongoDBAdapterParams<an
|
|
|
182
216
|
return entry
|
|
183
217
|
}
|
|
184
218
|
const promise = Array.isArray(data)
|
|
185
|
-
? model
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
219
|
+
? model
|
|
220
|
+
.insertMany(data.map(setId), writeOptions)
|
|
221
|
+
.then(async (result) =>
|
|
222
|
+
Promise.all(Object.values(result.insertedIds).map(async (_id) => model.findOne({ _id })))
|
|
223
|
+
)
|
|
224
|
+
: model
|
|
225
|
+
.insertOne(setId(data), writeOptions)
|
|
226
|
+
.then(async (result) => model.findOne({ _id: result.insertedId }))
|
|
191
227
|
|
|
192
228
|
return promise.then(select(params, this.id)).catch(errorHandler)
|
|
193
229
|
}
|
|
194
230
|
|
|
195
|
-
async $patch
|
|
196
|
-
async $patch
|
|
197
|
-
async $patch
|
|
198
|
-
async $patch
|
|
231
|
+
async $patch(id: null, data: Partial<D>, params?: P): Promise<T[]>
|
|
232
|
+
async $patch(id: Id, data: Partial<D>, params?: P): Promise<T>
|
|
233
|
+
async $patch(id: NullableId, data: Partial<D>, _params?: P): Promise<T | T[]>
|
|
234
|
+
async $patch(id: NullableId, _data: Partial<D>, params: P = {} as P): Promise<T | T[]> {
|
|
199
235
|
const data = this.normalizeId(id, _data)
|
|
200
236
|
const { Model } = this.getOptions(params)
|
|
201
237
|
const model = await Promise.resolve(Model)
|
|
202
|
-
const {
|
|
238
|
+
const {
|
|
239
|
+
query,
|
|
240
|
+
filters: { $select }
|
|
241
|
+
} = this.filterQuery(id, params)
|
|
203
242
|
const updateOptions = { ...params.mongodb }
|
|
204
243
|
const modifier = Object.keys(data).reduce((current, key) => {
|
|
205
244
|
const value = (data as any)[key]
|
|
@@ -219,17 +258,16 @@ export class MongoDbAdapter<T, D = Partial<T>, P extends MongoDBAdapterParams<an
|
|
|
219
258
|
...params,
|
|
220
259
|
query: {
|
|
221
260
|
...query,
|
|
222
|
-
$select: [
|
|
261
|
+
$select: [this.id]
|
|
223
262
|
},
|
|
224
263
|
paginate: false
|
|
225
264
|
})
|
|
226
|
-
const items =
|
|
265
|
+
const items = Array.isArray(originalIds) ? originalIds : [originalIds]
|
|
227
266
|
const idList = items.map((item: any) => item[this.id])
|
|
228
267
|
const findParams = {
|
|
229
268
|
...params,
|
|
230
269
|
paginate: false,
|
|
231
270
|
query: {
|
|
232
|
-
...($limit === 0 ? { $limit: 0 } : {}),
|
|
233
271
|
[this.id]: { $in: idList },
|
|
234
272
|
$select
|
|
235
273
|
}
|
|
@@ -240,7 +278,7 @@ export class MongoDbAdapter<T, D = Partial<T>, P extends MongoDBAdapterParams<an
|
|
|
240
278
|
return this.$findOrGet(id, findParams).catch(errorHandler)
|
|
241
279
|
}
|
|
242
280
|
|
|
243
|
-
async $update
|
|
281
|
+
async $update(id: Id, data: D, params: P = {} as P): Promise<T> {
|
|
244
282
|
const { Model } = this.getOptions(params)
|
|
245
283
|
const model = await Promise.resolve(Model)
|
|
246
284
|
const { query } = this.filterQuery(id, params)
|
|
@@ -251,26 +289,28 @@ export class MongoDbAdapter<T, D = Partial<T>, P extends MongoDBAdapterParams<an
|
|
|
251
289
|
return this.$findOrGet(id, params).catch(errorHandler)
|
|
252
290
|
}
|
|
253
291
|
|
|
254
|
-
async $remove
|
|
255
|
-
async $remove
|
|
256
|
-
async $remove
|
|
257
|
-
async $remove
|
|
292
|
+
async $remove(id: null, params?: P): Promise<T[]>
|
|
293
|
+
async $remove(id: Id, params?: P): Promise<T>
|
|
294
|
+
async $remove(id: NullableId, _params?: P): Promise<T | T[]>
|
|
295
|
+
async $remove(id: NullableId, params: P = {} as P): Promise<T | T[]> {
|
|
258
296
|
const { Model } = this.getOptions(params)
|
|
259
297
|
const model = await Promise.resolve(Model)
|
|
260
|
-
const {
|
|
298
|
+
const {
|
|
299
|
+
query,
|
|
300
|
+
filters: { $select }
|
|
301
|
+
} = this.filterQuery(id, params)
|
|
261
302
|
const deleteOptions = { ...params.mongodb }
|
|
262
303
|
const findParams = {
|
|
263
304
|
...params,
|
|
264
305
|
paginate: false,
|
|
265
306
|
query: {
|
|
266
307
|
...query,
|
|
267
|
-
...($limit === 0 ? { $limit: 0 } : {}),
|
|
268
308
|
$select
|
|
269
309
|
}
|
|
270
310
|
}
|
|
271
311
|
|
|
272
312
|
return this.$findOrGet(id, findParams)
|
|
273
|
-
.then(async items => {
|
|
313
|
+
.then(async (items) => {
|
|
274
314
|
await model.deleteMany(query, deleteOptions)
|
|
275
315
|
return items
|
|
276
316
|
})
|
package/src/error-handler.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { GeneralError } from '@feathersjs/errors'
|
|
2
2
|
import { MongoError } from 'mongodb'
|
|
3
3
|
|
|
4
|
-
export function errorHandler
|
|
4
|
+
export function errorHandler(error: MongoError): any {
|
|
5
5
|
// See https://github.com/mongodb/mongo/blob/master/docs/errors.md
|
|
6
6
|
if (error && error.name && error.name.startsWith('Mongo')) {
|
|
7
7
|
throw new GeneralError(error, {
|
package/src/index.ts
CHANGED
|
@@ -5,38 +5,44 @@ import { MongoDbAdapter, MongoDBAdapterParams } from './adapter'
|
|
|
5
5
|
export * from './adapter'
|
|
6
6
|
export * from './error-handler'
|
|
7
7
|
|
|
8
|
-
export class MongoDBService<
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
8
|
+
export class MongoDBService<
|
|
9
|
+
T = any,
|
|
10
|
+
D = Partial<T>,
|
|
11
|
+
P extends MongoDBAdapterParams<any> = MongoDBAdapterParams
|
|
12
|
+
>
|
|
13
|
+
extends MongoDbAdapter<T, D, P>
|
|
14
|
+
implements ServiceMethods<T | Paginated<T>, D, P>
|
|
15
|
+
{
|
|
16
|
+
async find(params?: P & { paginate?: PaginationOptions }): Promise<Paginated<T>>
|
|
17
|
+
async find(params?: P & { paginate: false }): Promise<T[]>
|
|
18
|
+
async find(params?: P): Promise<Paginated<T> | T[]>
|
|
19
|
+
async find(params?: P): Promise<Paginated<T> | T[]> {
|
|
14
20
|
return this._find(params) as any
|
|
15
21
|
}
|
|
16
22
|
|
|
17
|
-
async get
|
|
23
|
+
async get(id: Id, params?: P): Promise<T> {
|
|
18
24
|
return this._get(id, params)
|
|
19
25
|
}
|
|
20
26
|
|
|
21
|
-
async create
|
|
22
|
-
async create
|
|
23
|
-
async create
|
|
27
|
+
async create(data: Partial<D>, params?: P): Promise<T>
|
|
28
|
+
async create(data: Partial<D>[], params?: P): Promise<T[]>
|
|
29
|
+
async create(data: Partial<D> | Partial<D>[], params?: P): Promise<T | T[]> {
|
|
24
30
|
return this._create(data, params)
|
|
25
31
|
}
|
|
26
32
|
|
|
27
|
-
async update
|
|
33
|
+
async update(id: Id, data: D, params?: P): Promise<T> {
|
|
28
34
|
return this._update(id, data, params)
|
|
29
35
|
}
|
|
30
36
|
|
|
31
|
-
async patch
|
|
32
|
-
async patch
|
|
33
|
-
async patch
|
|
37
|
+
async patch(id: Id, data: Partial<D>, params?: P): Promise<T>
|
|
38
|
+
async patch(id: null, data: Partial<D>, params?: P): Promise<T[]>
|
|
39
|
+
async patch(id: NullableId, data: Partial<D>, params?: P): Promise<T | T[]> {
|
|
34
40
|
return this._patch(id, data, params)
|
|
35
41
|
}
|
|
36
42
|
|
|
37
|
-
async remove
|
|
38
|
-
async remove
|
|
39
|
-
async remove
|
|
43
|
+
async remove(id: Id, params?: P): Promise<T>
|
|
44
|
+
async remove(id: null, params?: P): Promise<T[]>
|
|
45
|
+
async remove(id: NullableId, params?: P): Promise<T | T[]> {
|
|
40
46
|
return this._remove(id, params)
|
|
41
47
|
}
|
|
42
48
|
}
|