@feathersjs/adapter-commons 5.0.0-pre.2 → 5.0.0-pre.20
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 +202 -16
- package/LICENSE +1 -1
- package/README.md +2 -2
- package/lib/declarations.d.ts +146 -0
- package/lib/declarations.js +3 -0
- package/lib/declarations.js.map +1 -0
- package/lib/index.d.ts +5 -3
- package/lib/index.js +18 -17
- package/lib/index.js.map +1 -1
- package/lib/query.d.ts +21 -0
- package/lib/query.js +116 -0
- package/lib/query.js.map +1 -0
- package/lib/service.d.ts +86 -62
- package/lib/service.js +129 -65
- package/lib/service.js.map +1 -1
- package/lib/sort.d.ts +6 -4
- package/lib/sort.js +35 -47
- package/lib/sort.js.map +1 -1
- package/package.json +16 -15
- package/src/declarations.ts +153 -0
- package/src/index.ts +10 -13
- package/src/query.ts +138 -0
- package/src/service.ts +205 -151
- package/src/sort.ts +33 -53
- package/lib/filter-query.d.ts +0 -10
- package/lib/filter-query.js +0 -96
- package/lib/filter-query.js.map +0 -1
- package/src/filter-query.ts +0 -116
package/lib/query.js
ADDED
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.filterQuery = exports.FILTERS = exports.OPERATORS = void 0;
|
|
4
|
+
const commons_1 = require("@feathersjs/commons");
|
|
5
|
+
const errors_1 = require("@feathersjs/errors");
|
|
6
|
+
const parse = (value) => typeof value !== 'undefined' ? parseInt(value, 10) : value;
|
|
7
|
+
const isPlainObject = (value) => commons_1._.isObject(value) && value.constructor === {}.constructor;
|
|
8
|
+
const validateQueryProperty = (query, operators = []) => {
|
|
9
|
+
if (!isPlainObject(query)) {
|
|
10
|
+
return query;
|
|
11
|
+
}
|
|
12
|
+
for (const key of Object.keys(query)) {
|
|
13
|
+
if (key.startsWith('$') && !operators.includes(key)) {
|
|
14
|
+
throw new errors_1.BadRequest(`Invalid query parameter ${key}`, query);
|
|
15
|
+
}
|
|
16
|
+
const value = query[key];
|
|
17
|
+
if (isPlainObject(value)) {
|
|
18
|
+
query[key] = validateQueryProperty(value, operators);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
return {
|
|
22
|
+
...query
|
|
23
|
+
};
|
|
24
|
+
};
|
|
25
|
+
const getFilters = (query, settings) => {
|
|
26
|
+
const filterNames = Object.keys(settings.filters);
|
|
27
|
+
return filterNames.reduce((current, key) => {
|
|
28
|
+
const queryValue = query[key];
|
|
29
|
+
const filter = settings.filters[key];
|
|
30
|
+
if (filter) {
|
|
31
|
+
const value = typeof filter === 'function' ? filter(queryValue, settings) : queryValue;
|
|
32
|
+
if (value !== undefined) {
|
|
33
|
+
current[key] = value;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return current;
|
|
37
|
+
}, {});
|
|
38
|
+
};
|
|
39
|
+
const getQuery = (query, settings) => {
|
|
40
|
+
const keys = Object.keys(query).concat(Object.getOwnPropertySymbols(query));
|
|
41
|
+
return keys.reduce((result, key) => {
|
|
42
|
+
if (typeof key === 'string' && key.startsWith('$')) {
|
|
43
|
+
if (settings.filters[key] === undefined) {
|
|
44
|
+
throw new errors_1.BadRequest(`Invalid filter value ${key}`);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
result[key] = validateQueryProperty(query[key], settings.operators);
|
|
49
|
+
}
|
|
50
|
+
return result;
|
|
51
|
+
}, {});
|
|
52
|
+
};
|
|
53
|
+
exports.OPERATORS = ['$in', '$nin', '$lt', '$lte', '$gt', '$gte', '$ne', '$or'];
|
|
54
|
+
exports.FILTERS = {
|
|
55
|
+
$skip: (value) => parse(value),
|
|
56
|
+
$sort: (sort) => {
|
|
57
|
+
if (typeof sort !== 'object' || Array.isArray(sort)) {
|
|
58
|
+
return sort;
|
|
59
|
+
}
|
|
60
|
+
return Object.keys(sort).reduce((result, key) => {
|
|
61
|
+
result[key] = typeof sort[key] === 'object'
|
|
62
|
+
? sort[key] : parse(sort[key]);
|
|
63
|
+
return result;
|
|
64
|
+
}, {});
|
|
65
|
+
},
|
|
66
|
+
$limit: (_limit, { paginate }) => {
|
|
67
|
+
const limit = parse(_limit);
|
|
68
|
+
if (paginate && (paginate.default || paginate.max)) {
|
|
69
|
+
const base = paginate.default || 0;
|
|
70
|
+
const lower = typeof limit === 'number' && !isNaN(limit) && limit >= 0 ? limit : base;
|
|
71
|
+
const upper = typeof paginate.max === 'number' ? paginate.max : Number.MAX_VALUE;
|
|
72
|
+
return Math.min(lower, upper);
|
|
73
|
+
}
|
|
74
|
+
return limit;
|
|
75
|
+
},
|
|
76
|
+
$select: (select) => {
|
|
77
|
+
if (Array.isArray(select)) {
|
|
78
|
+
return select.map(current => `${current}`);
|
|
79
|
+
}
|
|
80
|
+
return select;
|
|
81
|
+
},
|
|
82
|
+
$or: (or, { operators }) => {
|
|
83
|
+
if (Array.isArray(or)) {
|
|
84
|
+
return or.map(current => validateQueryProperty(current, operators));
|
|
85
|
+
}
|
|
86
|
+
return or;
|
|
87
|
+
}
|
|
88
|
+
};
|
|
89
|
+
/**
|
|
90
|
+
* Converts Feathers special query parameters and pagination settings
|
|
91
|
+
* and returns them separately as `filters` and the rest of the query
|
|
92
|
+
* as `query`. `options` also gets passed the pagination settings and
|
|
93
|
+
* a list of additional `operators` to allow when querying properties.
|
|
94
|
+
*
|
|
95
|
+
* @param query The initial query
|
|
96
|
+
* @param options Options for filtering the query
|
|
97
|
+
* @returns An object with `query` which contains the query without `filters`
|
|
98
|
+
* and `filters` which contains the converted values for each filter.
|
|
99
|
+
*/
|
|
100
|
+
function filterQuery(_query, options = {}) {
|
|
101
|
+
const query = _query || {};
|
|
102
|
+
const settings = {
|
|
103
|
+
...options,
|
|
104
|
+
filters: {
|
|
105
|
+
...exports.FILTERS,
|
|
106
|
+
...options.filters
|
|
107
|
+
},
|
|
108
|
+
operators: exports.OPERATORS.concat(options.operators || [])
|
|
109
|
+
};
|
|
110
|
+
return {
|
|
111
|
+
filters: getFilters(query, settings),
|
|
112
|
+
query: getQuery(query, settings)
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
exports.filterQuery = filterQuery;
|
|
116
|
+
//# sourceMappingURL=query.js.map
|
package/lib/query.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query.js","sourceRoot":"","sources":["../src/query.ts"],"names":[],"mappings":"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"}
|
package/lib/service.d.ts
CHANGED
|
@@ -1,60 +1,96 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
total: number;
|
|
4
|
-
limit: number;
|
|
5
|
-
skip: number;
|
|
6
|
-
data: T[];
|
|
7
|
-
}
|
|
8
|
-
export interface ServiceOptions {
|
|
9
|
-
events: string[];
|
|
10
|
-
multi: boolean | string[];
|
|
11
|
-
id: string;
|
|
12
|
-
paginate: {
|
|
13
|
-
default?: number;
|
|
14
|
-
max?: number;
|
|
15
|
-
};
|
|
16
|
-
whitelist: string[];
|
|
17
|
-
filters: string[];
|
|
18
|
-
}
|
|
1
|
+
import { Id, NullableId, Paginated, Query } from '@feathersjs/feathers';
|
|
2
|
+
import { AdapterParams, AdapterServiceOptions, InternalServiceMethods, PaginationOptions } from './declarations';
|
|
19
3
|
/**
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
* from the service and don't want to trigger any of its hooks.
|
|
23
|
-
*
|
|
24
|
-
* Important: These methods are only available internally on the server, not on the client
|
|
25
|
-
* side and only for the Feathers database adapters.
|
|
26
|
-
*
|
|
27
|
-
* These methods do not trigger events.
|
|
28
|
-
*
|
|
29
|
-
* @see {@link https://docs.feathersjs.com/guides/migrating.html#hook-less-service-methods}
|
|
4
|
+
* An abstract base class that a database adapter can extend from to implement the
|
|
5
|
+
* `__find`, `__get`, `__update`, `__patch` and `__remove` methods.
|
|
30
6
|
*/
|
|
31
|
-
export
|
|
7
|
+
export declare abstract class AdapterBase<T = any, D = Partial<T>, P extends AdapterParams = AdapterParams, O extends AdapterServiceOptions = AdapterServiceOptions> implements InternalServiceMethods<T, D, P> {
|
|
8
|
+
options: O;
|
|
9
|
+
constructor(options: O);
|
|
10
|
+
get id(): string;
|
|
11
|
+
get events(): string[];
|
|
12
|
+
/**
|
|
13
|
+
* Check if this adapter allows multiple updates for a method.
|
|
14
|
+
* @param method The method name to check.
|
|
15
|
+
* @param params The service call params.
|
|
16
|
+
* @returns Wether or not multiple updates are allowed.
|
|
17
|
+
*/
|
|
18
|
+
allowsMulti(method: string, params?: P): boolean;
|
|
19
|
+
/**
|
|
20
|
+
* Returns the combined options for a service call. Options will be merged
|
|
21
|
+
* with `this.options` and `params.adapter` for dynamic overrides.
|
|
22
|
+
*
|
|
23
|
+
* @param params The parameters for the service method call
|
|
24
|
+
* @returns The actual options for this call
|
|
25
|
+
*/
|
|
26
|
+
getOptions(params: P): O;
|
|
32
27
|
/**
|
|
33
|
-
*
|
|
28
|
+
* Sanitize the incoming data, e.g. removing invalid keywords etc.
|
|
29
|
+
*
|
|
30
|
+
* @param data The data to sanitize
|
|
31
|
+
* @param _params Service call parameters
|
|
32
|
+
* @returns The sanitized data
|
|
33
|
+
*/
|
|
34
|
+
sanitizeData<X = Partial<D>>(data: X, _params: P): Promise<X>;
|
|
35
|
+
/**
|
|
36
|
+
* Returns a sanitized version of `params.query`, converting filter values
|
|
37
|
+
* (like $limit and $skip) into the expected type. Will throw an error if
|
|
38
|
+
* a `$` prefixed filter or operator value that is not allowed in `filters`
|
|
39
|
+
* or `operators` is encountered.
|
|
40
|
+
*
|
|
41
|
+
* @param params The service call parameter.
|
|
42
|
+
* @returns A new object containing the sanitized query.
|
|
43
|
+
*/
|
|
44
|
+
sanitizeQuery(params?: P): Promise<Query>;
|
|
45
|
+
abstract $find(_params?: P & {
|
|
46
|
+
paginate?: PaginationOptions;
|
|
47
|
+
}): Promise<Paginated<T>>;
|
|
48
|
+
abstract $find(_params?: P & {
|
|
49
|
+
paginate: false;
|
|
50
|
+
}): Promise<T[]>;
|
|
51
|
+
abstract $find(params?: P): Promise<T[] | Paginated<T>>;
|
|
52
|
+
/**
|
|
53
|
+
* Retrieve all resources from this service, skipping any service-level hooks but sanitize the query
|
|
54
|
+
* with allowed filters and properties by calling `sanitizeQuery`.
|
|
34
55
|
*
|
|
35
56
|
* @param params - Service call parameters {@link Params}
|
|
36
57
|
* @see {@link HookLessServiceMethods}
|
|
37
58
|
* @see {@link https://docs.feathersjs.com/api/services.html#find-params|Feathers API Documentation: .find(params)}
|
|
38
59
|
*/
|
|
39
|
-
_find(
|
|
60
|
+
_find(_params?: P & {
|
|
61
|
+
paginate?: PaginationOptions;
|
|
62
|
+
}): Promise<Paginated<T>>;
|
|
63
|
+
_find(_params?: P & {
|
|
64
|
+
paginate: false;
|
|
65
|
+
}): Promise<T[]>;
|
|
66
|
+
_find(params?: P): Promise<T | T[] | Paginated<T>>;
|
|
67
|
+
abstract $get(id: Id, params?: P): Promise<T>;
|
|
40
68
|
/**
|
|
41
|
-
* Retrieve a single resource matching the given ID, skipping any service-level hooks
|
|
69
|
+
* Retrieve a single resource matching the given ID, skipping any service-level hooks but sanitize the query
|
|
70
|
+
* with allowed filters and properties by calling `sanitizeQuery`.
|
|
42
71
|
*
|
|
43
72
|
* @param id - ID of the resource to locate
|
|
44
73
|
* @param params - Service call parameters {@link Params}
|
|
45
74
|
* @see {@link HookLessServiceMethods}
|
|
46
75
|
* @see {@link https://docs.feathersjs.com/api/services.html#get-id-params|Feathers API Documentation: .get(id, params)}
|
|
47
76
|
*/
|
|
48
|
-
_get(id: Id, params?:
|
|
77
|
+
_get(id: Id, params?: P): Promise<T>;
|
|
78
|
+
abstract $create(data: Partial<D>, params?: P): Promise<T>;
|
|
79
|
+
abstract $create(data: Partial<D>[], params?: P): Promise<T[]>;
|
|
80
|
+
abstract $create(data: Partial<D> | Partial<D>[], params?: P): Promise<T | T[]>;
|
|
49
81
|
/**
|
|
50
|
-
* Create a new resource for this service, skipping any service-level hooks
|
|
82
|
+
* Create a new resource for this service, skipping any service-level hooks, sanitize the data
|
|
83
|
+
* and check if multiple updates are allowed.
|
|
51
84
|
*
|
|
52
85
|
* @param data - Data to insert into this service.
|
|
53
86
|
* @param params - Service call parameters {@link Params}
|
|
54
87
|
* @see {@link HookLessServiceMethods}
|
|
55
88
|
* @see {@link https://docs.feathersjs.com/api/services.html#create-data-params|Feathers API Documentation: .create(data, params)}
|
|
56
89
|
*/
|
|
57
|
-
_create(data: Partial<
|
|
90
|
+
_create(data: Partial<D>, params?: P): Promise<T>;
|
|
91
|
+
_create(data: Partial<D>[], params?: P): Promise<T[]>;
|
|
92
|
+
_create(data: Partial<D> | Partial<D>[], params?: P): Promise<T | T[]>;
|
|
93
|
+
abstract $update(id: Id, data: D, params?: P): Promise<T>;
|
|
58
94
|
/**
|
|
59
95
|
* Replace any resources matching the given ID with the given data, skipping any service-level hooks.
|
|
60
96
|
*
|
|
@@ -64,9 +100,13 @@ export interface InternalServiceMethods<T = any> {
|
|
|
64
100
|
* @see {@link HookLessServiceMethods}
|
|
65
101
|
* @see {@link https://docs.feathersjs.com/api/services.html#update-id-data-params|Feathers API Documentation: .update(id, data, params)}
|
|
66
102
|
*/
|
|
67
|
-
_update(id: Id, data:
|
|
103
|
+
_update(id: Id, data: D, params?: P): Promise<T>;
|
|
104
|
+
abstract $patch(id: null, data: Partial<D>, params?: P): Promise<T[]>;
|
|
105
|
+
abstract $patch(id: Id, data: Partial<D>, params?: P): Promise<T>;
|
|
106
|
+
abstract $patch(id: NullableId, data: Partial<D>, params?: P): Promise<T | T[]>;
|
|
68
107
|
/**
|
|
69
108
|
* Merge any resources matching the given ID with the given data, skipping any service-level hooks.
|
|
109
|
+
* Sanitizes the query and data and checks it multiple updates are allowed.
|
|
70
110
|
*
|
|
71
111
|
* @param id - ID of the resource to be patched
|
|
72
112
|
* @param data - Data to merge with the current resource.
|
|
@@ -74,38 +114,22 @@ export interface InternalServiceMethods<T = any> {
|
|
|
74
114
|
* @see {@link HookLessServiceMethods}
|
|
75
115
|
* @see {@link https://docs.feathersjs.com/api/services.html#patch-id-data-params|Feathers API Documentation: .patch(id, data, params)}
|
|
76
116
|
*/
|
|
77
|
-
_patch(id:
|
|
117
|
+
_patch(id: null, data: Partial<D>, params?: P): Promise<T[]>;
|
|
118
|
+
_patch(id: Id, data: Partial<D>, params?: P): Promise<T>;
|
|
119
|
+
_patch(id: NullableId, data: Partial<D>, params?: P): Promise<T | T[]>;
|
|
120
|
+
abstract $remove(id: null, params?: P): Promise<T[]>;
|
|
121
|
+
abstract $remove(id: Id, params?: P): Promise<T>;
|
|
122
|
+
abstract $remove(id: NullableId, params?: P): Promise<T | T[]>;
|
|
78
123
|
/**
|
|
79
124
|
* Remove resources matching the given ID from the this service, skipping any service-level hooks.
|
|
125
|
+
* Sanitized the query and verifies that multiple updates are allowed.
|
|
80
126
|
*
|
|
81
127
|
* @param id - ID of the resource to be removed
|
|
82
128
|
* @param params - Service call parameters {@link Params}
|
|
83
129
|
* @see {@link HookLessServiceMethods}
|
|
84
130
|
* @see {@link https://docs.feathersjs.com/api/services.html#remove-id-params|Feathers API Documentation: .remove(id, params)}
|
|
85
131
|
*/
|
|
86
|
-
_remove(id:
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
options: ServiceOptions;
|
|
90
|
-
constructor(options: Partial<ServiceOptions>);
|
|
91
|
-
get id(): string;
|
|
92
|
-
get events(): string[];
|
|
93
|
-
filterQuery(params?: Params, opts?: any): {
|
|
94
|
-
[key: string]: any;
|
|
95
|
-
} & {
|
|
96
|
-
paginate: any;
|
|
97
|
-
};
|
|
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>, params?: Params): Promise<T>;
|
|
102
|
-
create(data: Partial<T>[], params?: Params): Promise<T[]>;
|
|
103
|
-
update(id: Id, data: T, params?: Params): Promise<T>;
|
|
104
|
-
patch(id: Id, data: Partial<T>, params?: Params): Promise<T>;
|
|
105
|
-
patch(id: null, data: Partial<T>, params?: Params): Promise<T[]>;
|
|
106
|
-
patch(id: NullableId, data: Partial<T>, params?: Params): Promise<T | T[]>;
|
|
107
|
-
remove(id: Id, params?: Params): Promise<T>;
|
|
108
|
-
remove(id: null, params?: Params): Promise<T[]>;
|
|
109
|
-
remove(id: NullableId, params?: Params): Promise<T | T[]>;
|
|
110
|
-
setup(): Promise<void>;
|
|
132
|
+
_remove(id: null, params?: P): Promise<T[]>;
|
|
133
|
+
_remove(id: Id, params?: P): Promise<T>;
|
|
134
|
+
_remove(id: NullableId, params?: P): Promise<T | T[]>;
|
|
111
135
|
}
|
package/lib/service.js
CHANGED
|
@@ -1,38 +1,28 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
exports.
|
|
3
|
+
exports.AdapterBase = void 0;
|
|
13
4
|
const errors_1 = require("@feathersjs/errors");
|
|
14
|
-
const
|
|
15
|
-
const callMethod = (self, name, ...args) => {
|
|
16
|
-
if (typeof self[name] !== 'function') {
|
|
17
|
-
return Promise.reject(new errors_1.NotImplemented(`Method ${name} not available`));
|
|
18
|
-
}
|
|
19
|
-
return self[name](...args);
|
|
20
|
-
};
|
|
5
|
+
const query_1 = require("./query");
|
|
21
6
|
const alwaysMulti = {
|
|
22
7
|
find: true,
|
|
23
8
|
get: false,
|
|
24
9
|
update: false
|
|
25
10
|
};
|
|
26
|
-
|
|
11
|
+
/**
|
|
12
|
+
* An abstract base class that a database adapter can extend from to implement the
|
|
13
|
+
* `__find`, `__get`, `__update`, `__patch` and `__remove` methods.
|
|
14
|
+
*/
|
|
15
|
+
class AdapterBase {
|
|
27
16
|
constructor(options) {
|
|
28
|
-
this.options =
|
|
17
|
+
this.options = {
|
|
29
18
|
id: 'id',
|
|
30
19
|
events: [],
|
|
31
|
-
paginate:
|
|
20
|
+
paginate: false,
|
|
32
21
|
multi: false,
|
|
33
|
-
filters:
|
|
34
|
-
|
|
35
|
-
|
|
22
|
+
filters: {},
|
|
23
|
+
operators: [],
|
|
24
|
+
...options
|
|
25
|
+
};
|
|
36
26
|
}
|
|
37
27
|
get id() {
|
|
38
28
|
return this.options.id;
|
|
@@ -40,64 +30,138 @@ class AdapterService {
|
|
|
40
30
|
get events() {
|
|
41
31
|
return this.options.events;
|
|
42
32
|
}
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
paginate
|
|
51
|
-
}, opts);
|
|
52
|
-
const result = filter_query_1.filterQuery(query, options);
|
|
53
|
-
return Object.assign(result, { paginate });
|
|
54
|
-
}
|
|
55
|
-
allowsMulti(method) {
|
|
33
|
+
/**
|
|
34
|
+
* Check if this adapter allows multiple updates for a method.
|
|
35
|
+
* @param method The method name to check.
|
|
36
|
+
* @param params The service call params.
|
|
37
|
+
* @returns Wether or not multiple updates are allowed.
|
|
38
|
+
*/
|
|
39
|
+
allowsMulti(method, params = {}) {
|
|
56
40
|
const always = alwaysMulti[method];
|
|
57
41
|
if (typeof always !== 'undefined') {
|
|
58
42
|
return always;
|
|
59
43
|
}
|
|
60
|
-
const
|
|
61
|
-
if (
|
|
62
|
-
return
|
|
63
|
-
}
|
|
64
|
-
else {
|
|
65
|
-
return option.includes(method);
|
|
44
|
+
const { multi } = this.getOptions(params);
|
|
45
|
+
if (multi === true || multi === false) {
|
|
46
|
+
return multi;
|
|
66
47
|
}
|
|
48
|
+
return multi.includes(method);
|
|
67
49
|
}
|
|
68
|
-
|
|
69
|
-
|
|
50
|
+
/**
|
|
51
|
+
* Returns the combined options for a service call. Options will be merged
|
|
52
|
+
* with `this.options` and `params.adapter` for dynamic overrides.
|
|
53
|
+
*
|
|
54
|
+
* @param params The parameters for the service method call
|
|
55
|
+
* @returns The actual options for this call
|
|
56
|
+
*/
|
|
57
|
+
getOptions(params) {
|
|
58
|
+
const paginate = params.paginate !== undefined ? params.paginate : this.options.paginate;
|
|
59
|
+
return {
|
|
60
|
+
...this.options,
|
|
61
|
+
paginate,
|
|
62
|
+
...params.adapter
|
|
63
|
+
};
|
|
70
64
|
}
|
|
71
|
-
|
|
72
|
-
|
|
65
|
+
/**
|
|
66
|
+
* Sanitize the incoming data, e.g. removing invalid keywords etc.
|
|
67
|
+
*
|
|
68
|
+
* @param data The data to sanitize
|
|
69
|
+
* @param _params Service call parameters
|
|
70
|
+
* @returns The sanitized data
|
|
71
|
+
*/
|
|
72
|
+
async sanitizeData(data, _params) {
|
|
73
|
+
return data;
|
|
73
74
|
}
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
75
|
+
/**
|
|
76
|
+
* Returns a sanitized version of `params.query`, converting filter values
|
|
77
|
+
* (like $limit and $skip) into the expected type. Will throw an error if
|
|
78
|
+
* a `$` prefixed filter or operator value that is not allowed in `filters`
|
|
79
|
+
* or `operators` is encountered.
|
|
80
|
+
*
|
|
81
|
+
* @param params The service call parameter.
|
|
82
|
+
* @returns A new object containing the sanitized query.
|
|
83
|
+
*/
|
|
84
|
+
async sanitizeQuery(params = {}) {
|
|
85
|
+
const options = this.getOptions(params);
|
|
86
|
+
const { query, filters } = (0, query_1.filterQuery)(params.query, options);
|
|
87
|
+
return {
|
|
88
|
+
...filters,
|
|
89
|
+
...query
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
async _find(params) {
|
|
93
|
+
const query = await this.sanitizeQuery(params);
|
|
94
|
+
return this.$find({
|
|
95
|
+
...params,
|
|
96
|
+
query
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Retrieve a single resource matching the given ID, skipping any service-level hooks but sanitize the query
|
|
101
|
+
* with allowed filters and properties by calling `sanitizeQuery`.
|
|
102
|
+
*
|
|
103
|
+
* @param id - ID of the resource to locate
|
|
104
|
+
* @param params - Service call parameters {@link Params}
|
|
105
|
+
* @see {@link HookLessServiceMethods}
|
|
106
|
+
* @see {@link https://docs.feathersjs.com/api/services.html#get-id-params|Feathers API Documentation: .get(id, params)}
|
|
107
|
+
*/
|
|
108
|
+
async _get(id, params) {
|
|
109
|
+
const query = await this.sanitizeQuery(params);
|
|
110
|
+
return this.$get(id, {
|
|
111
|
+
...params,
|
|
112
|
+
query
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
async _create(data, params) {
|
|
116
|
+
if (Array.isArray(data) && !this.allowsMulti('create', params)) {
|
|
117
|
+
throw new errors_1.MethodNotAllowed('Can not create multiple entries');
|
|
77
118
|
}
|
|
78
|
-
|
|
119
|
+
const payload = Array.isArray(data)
|
|
120
|
+
? (await Promise.all(data.map(current => this.sanitizeData(current, params))))
|
|
121
|
+
: (await this.sanitizeData(data, params));
|
|
122
|
+
return this.$create(payload, params);
|
|
79
123
|
}
|
|
80
|
-
|
|
124
|
+
/**
|
|
125
|
+
* Replace any resources matching the given ID with the given data, skipping any service-level hooks.
|
|
126
|
+
*
|
|
127
|
+
* @param id - ID of the resource to be updated
|
|
128
|
+
* @param data - Data to be put in place of the current resource.
|
|
129
|
+
* @param params - Service call parameters {@link Params}
|
|
130
|
+
* @see {@link HookLessServiceMethods}
|
|
131
|
+
* @see {@link https://docs.feathersjs.com/api/services.html#update-id-data-params|Feathers API Documentation: .update(id, data, params)}
|
|
132
|
+
*/
|
|
133
|
+
async _update(id, data, params) {
|
|
81
134
|
if (id === null || Array.isArray(data)) {
|
|
82
|
-
|
|
135
|
+
throw new errors_1.BadRequest('You can not replace multiple instances. Did you mean \'patch\'?');
|
|
83
136
|
}
|
|
84
|
-
|
|
137
|
+
const payload = await this.sanitizeData(data, params);
|
|
138
|
+
const query = await this.sanitizeQuery(params);
|
|
139
|
+
return this.$update(id, payload, {
|
|
140
|
+
...params,
|
|
141
|
+
query
|
|
142
|
+
});
|
|
85
143
|
}
|
|
86
|
-
|
|
87
|
-
if (id === null && !this.allowsMulti('patch')) {
|
|
88
|
-
|
|
144
|
+
async _patch(id, data, params) {
|
|
145
|
+
if (id === null && !this.allowsMulti('patch', params)) {
|
|
146
|
+
throw new errors_1.MethodNotAllowed('Can not patch multiple entries');
|
|
89
147
|
}
|
|
90
|
-
|
|
148
|
+
const query = await this.sanitizeQuery(params);
|
|
149
|
+
const payload = await this.sanitizeData(data, params);
|
|
150
|
+
return this.$patch(id, payload, {
|
|
151
|
+
...params,
|
|
152
|
+
query
|
|
153
|
+
});
|
|
91
154
|
}
|
|
92
|
-
|
|
93
|
-
if (id === null && !this.allowsMulti('remove')) {
|
|
94
|
-
|
|
155
|
+
async _remove(id, params) {
|
|
156
|
+
if (id === null && !this.allowsMulti('remove', params)) {
|
|
157
|
+
throw new errors_1.MethodNotAllowed('Can not remove multiple entries');
|
|
95
158
|
}
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
159
|
+
const query = await this.sanitizeQuery(params);
|
|
160
|
+
return this.$remove(id, {
|
|
161
|
+
...params,
|
|
162
|
+
query
|
|
163
|
+
});
|
|
100
164
|
}
|
|
101
165
|
}
|
|
102
|
-
exports.
|
|
166
|
+
exports.AdapterBase = AdapterBase;
|
|
103
167
|
//# 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":"
|
|
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;
|