@feathersjs/memory 5.0.0-pre.32 → 5.0.0-pre.34

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -3,6 +3,18 @@
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.34](https://github.com/feathersjs/feathers/compare/v5.0.0-pre.33...v5.0.0-pre.34) (2022-12-14)
7
+
8
+ ### Features
9
+
10
+ - **adapter:** Add patch data type to adapters and refactor AdapterBase usage ([#2906](https://github.com/feathersjs/feathers/issues/2906)) ([9ddc2e6](https://github.com/feathersjs/feathers/commit/9ddc2e6b028f026f939d6af68125847e5c6734b4))
11
+
12
+ # [5.0.0-pre.33](https://github.com/feathersjs/feathers/compare/v5.0.0-pre.32...v5.0.0-pre.33) (2022-11-08)
13
+
14
+ ### Bug Fixes
15
+
16
+ - **memory:** Use for loop in \_find() for better performance ([#2844](https://github.com/feathersjs/feathers/issues/2844)) ([d6ee5f1](https://github.com/feathersjs/feathers/commit/d6ee5f1c869f0c65cb470130f35956a52356e5c3))
17
+
6
18
  # [5.0.0-pre.32](https://github.com/feathersjs/feathers/compare/v5.0.0-pre.31...v5.0.0-pre.32) (2022-10-26)
7
19
 
8
20
  **Note:** Version bump only for package @feathersjs/memory
package/lib/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { AdapterBase, AdapterServiceOptions, PaginationOptions, AdapterParams } from '@feathersjs/adapter-commons';
2
- import { NullableId, Id, Params, ServiceMethods, Paginated } from '@feathersjs/feathers';
2
+ import { NullableId, Id, Params, Paginated } from '@feathersjs/feathers';
3
3
  export interface MemoryServiceStore<T> {
4
4
  [key: string]: T;
5
5
  }
@@ -9,12 +9,12 @@ export interface MemoryServiceOptions<T = any> extends AdapterServiceOptions {
9
9
  matcher?: (query: any) => any;
10
10
  sorter?: (sort: any) => any;
11
11
  }
12
- export declare class MemoryAdapter<T = any, D = Partial<T>, P extends Params = Params> extends AdapterBase<T, D, P, MemoryServiceOptions<T>> {
13
- store: MemoryServiceStore<T>;
12
+ export declare class MemoryAdapter<Result = any, Data = Partial<Result>, ServiceParams extends Params = Params, PatchData = Partial<Data>> extends AdapterBase<Result, Data, PatchData, ServiceParams, MemoryServiceOptions<Result>> {
13
+ store: MemoryServiceStore<Result>;
14
14
  _uId: number;
15
- constructor(options?: MemoryServiceOptions<T>);
16
- getEntries(_params?: P): Promise<T[]>;
17
- getQuery(params: P): {
15
+ constructor(options?: MemoryServiceOptions<Result>);
16
+ getEntries(_params?: ServiceParams): Promise<Result[]>;
17
+ getQuery(params: ServiceParams): {
18
18
  query: {
19
19
  [key: string]: any;
20
20
  };
@@ -25,40 +25,40 @@ export declare class MemoryAdapter<T = any, D = Partial<T>, P extends Params = P
25
25
  $select: any;
26
26
  };
27
27
  };
28
- $find(_params?: P & {
28
+ _find(_params?: ServiceParams & {
29
29
  paginate?: PaginationOptions;
30
- }): Promise<Paginated<T>>;
31
- $find(_params?: P & {
30
+ }): Promise<Paginated<Result>>;
31
+ _find(_params?: ServiceParams & {
32
32
  paginate: false;
33
- }): Promise<T[]>;
34
- $find(_params?: P): Promise<Paginated<T> | T[]>;
35
- $get(id: Id, params?: P): Promise<T>;
36
- $create(data: Partial<D>, params?: P): Promise<T>;
37
- $create(data: Partial<D>[], params?: P): Promise<T[]>;
38
- $create(data: Partial<D> | Partial<D>[], _params?: P): Promise<T | T[]>;
39
- $update(id: Id, data: D, params?: P): Promise<T>;
40
- $patch(id: null, data: Partial<D>, params?: P): Promise<T[]>;
41
- $patch(id: Id, data: Partial<D>, params?: P): Promise<T>;
42
- $patch(id: NullableId, data: Partial<D>, _params?: P): Promise<T | T[]>;
43
- $remove(id: null, params?: P): Promise<T[]>;
44
- $remove(id: Id, params?: P): Promise<T>;
45
- $remove(id: NullableId, _params?: P): Promise<T | T[]>;
33
+ }): Promise<Result[]>;
34
+ _find(_params?: ServiceParams): Promise<Paginated<Result> | Result[]>;
35
+ _get(id: Id, params?: ServiceParams): Promise<Result>;
36
+ _create(data: Partial<Data>, params?: ServiceParams): Promise<Result>;
37
+ _create(data: Partial<Data>[], params?: ServiceParams): Promise<Result[]>;
38
+ _create(data: Partial<Data> | Partial<Data>[], _params?: ServiceParams): Promise<Result | Result[]>;
39
+ _update(id: Id, data: Data, params?: ServiceParams): Promise<Result>;
40
+ _patch(id: null, data: PatchData, params?: ServiceParams): Promise<Result[]>;
41
+ _patch(id: Id, data: PatchData, params?: ServiceParams): Promise<Result>;
42
+ _patch(id: NullableId, data: PatchData, _params?: ServiceParams): Promise<Result | Result[]>;
43
+ _remove(id: null, params?: ServiceParams): Promise<Result[]>;
44
+ _remove(id: Id, params?: ServiceParams): Promise<Result>;
45
+ _remove(id: NullableId, _params?: ServiceParams): Promise<Result | Result[]>;
46
46
  }
47
- export declare class MemoryService<T = any, D = Partial<T>, P extends AdapterParams = AdapterParams> extends MemoryAdapter<T, D, P> implements ServiceMethods<T | Paginated<T>, D, P> {
48
- find(params?: P & {
47
+ export declare class MemoryService<Result = any, Data = Partial<Result>, ServiceParams extends AdapterParams = AdapterParams, PatchData = Partial<Data>> extends MemoryAdapter<Result, Data, ServiceParams, PatchData> {
48
+ find(params?: ServiceParams & {
49
49
  paginate?: PaginationOptions;
50
- }): Promise<Paginated<T>>;
51
- find(params?: P & {
50
+ }): Promise<Paginated<Result>>;
51
+ find(params?: ServiceParams & {
52
52
  paginate: false;
53
- }): Promise<T[]>;
54
- find(params?: P): Promise<Paginated<T> | T[]>;
55
- get(id: Id, params?: P): Promise<T>;
56
- create(data: D, params?: P): Promise<T>;
57
- create(data: D[], params?: P): Promise<T[]>;
58
- update(id: Id, data: D, params?: P): Promise<T>;
59
- patch(id: Id, data: Partial<D>, params?: P): Promise<T>;
60
- patch(id: null, data: Partial<D>, params?: P): Promise<T[]>;
61
- remove(id: Id, params?: P): Promise<T>;
62
- remove(id: null, params?: P): Promise<T[]>;
53
+ }): Promise<Result[]>;
54
+ find(params?: ServiceParams): Promise<Paginated<Result> | Result[]>;
55
+ get(id: Id, params?: ServiceParams): Promise<Result>;
56
+ create(data: Data, params?: ServiceParams): Promise<Result>;
57
+ create(data: Data[], params?: ServiceParams): Promise<Result[]>;
58
+ update(id: Id, data: Data, params?: ServiceParams): Promise<Result>;
59
+ patch(id: Id, data: PatchData, params?: ServiceParams): Promise<Result>;
60
+ patch(id: null, data: PatchData, params?: ServiceParams): Promise<Result[]>;
61
+ remove(id: Id, params?: ServiceParams): Promise<Result>;
62
+ remove(id: null, params?: ServiceParams): Promise<Result[]>;
63
63
  }
64
- export declare function memory<T = any, D = Partial<T>, P extends Params = Params>(options?: Partial<MemoryServiceOptions<T>>): MemoryService<T, D, P>;
64
+ export declare function memory<T = any, D = Partial<T>, P extends Params = Params>(options?: Partial<MemoryServiceOptions<T>>): MemoryService<T, D, P, Partial<D>>;
package/lib/index.js CHANGED
@@ -27,7 +27,7 @@ class MemoryAdapter extends adapter_commons_1.AdapterBase {
27
27
  }
28
28
  async getEntries(_params) {
29
29
  const params = _params || {};
30
- return this.$find({
30
+ return this._find({
31
31
  ...params,
32
32
  paginate: false
33
33
  });
@@ -39,32 +39,50 @@ class MemoryAdapter extends adapter_commons_1.AdapterBase {
39
39
  filters: { $skip, $sort, $limit, $select }
40
40
  };
41
41
  }
42
- async $find(params = {}) {
42
+ async _find(params = {}) {
43
43
  const { paginate } = this.getOptions(params);
44
44
  const { query, filters } = this.getQuery(params);
45
- let values = commons_1._.values(this.store).filter(this.options.matcher(query));
45
+ let values = commons_1._.values(this.store);
46
46
  const total = values.length;
47
- if (filters.$sort !== undefined) {
47
+ const hasSkip = filters.$skip !== undefined;
48
+ const hasSort = filters.$sort !== undefined;
49
+ const hasLimit = filters.$limit !== undefined;
50
+ const hasQuery = commons_1._.keys(query).length > 0;
51
+ if (hasSort) {
48
52
  values.sort(this.options.sorter(filters.$sort));
49
53
  }
50
- if (filters.$skip !== undefined) {
51
- values = values.slice(filters.$skip);
52
- }
53
- if (filters.$limit !== undefined) {
54
- values = values.slice(0, filters.$limit);
54
+ if (hasQuery || hasLimit || hasSkip) {
55
+ let skipped = 0;
56
+ const matcher = this.options.matcher(query);
57
+ const matched = [];
58
+ for (let index = 0, length = values.length; index < length; index++) {
59
+ const value = values[index];
60
+ if (hasQuery && !matcher(value, index, values)) {
61
+ continue;
62
+ }
63
+ if (hasSkip && filters.$skip > skipped) {
64
+ skipped++;
65
+ continue;
66
+ }
67
+ matched.push(_select(value, params));
68
+ if (hasLimit && filters.$limit === matched.length) {
69
+ break;
70
+ }
71
+ }
72
+ values = matched;
55
73
  }
56
74
  const result = {
57
- total,
75
+ total: hasQuery ? values.length : total,
58
76
  limit: filters.$limit,
59
77
  skip: filters.$skip || 0,
60
- data: values.map((value) => _select(value, params))
78
+ data: filters.$limit === 0 ? [] : values
61
79
  };
62
80
  if (!paginate) {
63
81
  return result.data;
64
82
  }
65
83
  return result;
66
84
  }
67
- async $get(id, params = {}) {
85
+ async _get(id, params = {}) {
68
86
  const { query } = this.getQuery(params);
69
87
  if (id in this.store) {
70
88
  const value = this.store[id];
@@ -74,25 +92,31 @@ class MemoryAdapter extends adapter_commons_1.AdapterBase {
74
92
  }
75
93
  throw new errors_1.NotFound(`No record found for id '${id}'`);
76
94
  }
77
- async $create(data, params = {}) {
95
+ async _create(data, params = {}) {
78
96
  if (Array.isArray(data)) {
79
- return Promise.all(data.map((current) => this.$create(current, params)));
97
+ return Promise.all(data.map((current) => this._create(current, params)));
80
98
  }
81
99
  const id = data[this.id] || this._uId++;
82
100
  const current = commons_1._.extend({}, data, { [this.id]: id });
83
101
  const result = (this.store[id] = current);
84
102
  return _select(result, params, this.id);
85
103
  }
86
- async $update(id, data, params = {}) {
87
- const oldEntry = await this.$get(id);
104
+ async _update(id, data, params = {}) {
105
+ if (id === null || Array.isArray(data)) {
106
+ throw new errors_1.BadRequest("You can not replace multiple instances. Did you mean 'patch'?");
107
+ }
108
+ const oldEntry = await this._get(id);
88
109
  // We don't want our id to change type if it can be coerced
89
110
  const oldId = oldEntry[this.id];
90
111
  // eslint-disable-next-line eqeqeq
91
112
  id = oldId == id ? oldId : id;
92
113
  this.store[id] = commons_1._.extend({}, data, { [this.id]: id });
93
- return this.$get(id, params);
114
+ return this._get(id, params);
94
115
  }
95
- async $patch(id, data, params = {}) {
116
+ async _patch(id, data, params = {}) {
117
+ if (id === null && !this.allowsMulti('patch', params)) {
118
+ throw new errors_1.MethodNotAllowed('Can not patch multiple entries');
119
+ }
96
120
  const { query } = this.getQuery(params);
97
121
  const patchEntry = (entry) => {
98
122
  const currentId = entry[this.id];
@@ -106,18 +130,21 @@ class MemoryAdapter extends adapter_commons_1.AdapterBase {
106
130
  });
107
131
  return entries.map(patchEntry);
108
132
  }
109
- return patchEntry(await this.$get(id, params)); // Will throw an error if not found
133
+ return patchEntry(await this._get(id, params)); // Will throw an error if not found
110
134
  }
111
- async $remove(id, params = {}) {
135
+ async _remove(id, params = {}) {
136
+ if (id === null && !this.allowsMulti('remove', params)) {
137
+ throw new errors_1.MethodNotAllowed('Can not remove multiple entries');
138
+ }
112
139
  const { query } = this.getQuery(params);
113
140
  if (id === null) {
114
141
  const entries = await this.getEntries({
115
142
  ...params,
116
143
  query
117
144
  });
118
- return Promise.all(entries.map((current) => this.$remove(current[this.id], params)));
145
+ return Promise.all(entries.map((current) => this._remove(current[this.id], params)));
119
146
  }
120
- const entry = await this.$get(id, params);
147
+ const entry = await this._get(id, params);
121
148
  delete this.store[id];
122
149
  return entry;
123
150
  }
@@ -125,22 +152,42 @@ class MemoryAdapter extends adapter_commons_1.AdapterBase {
125
152
  exports.MemoryAdapter = MemoryAdapter;
126
153
  class MemoryService extends MemoryAdapter {
127
154
  async find(params) {
128
- return this._find(params);
155
+ return this._find({
156
+ ...params,
157
+ query: await this.sanitizeQuery(params)
158
+ });
129
159
  }
130
160
  async get(id, params) {
131
- return this._get(id, params);
161
+ return this._get(id, {
162
+ ...params,
163
+ query: await this.sanitizeQuery(params)
164
+ });
132
165
  }
133
166
  async create(data, params) {
167
+ if (Array.isArray(data) && !this.allowsMulti('create', params)) {
168
+ throw new errors_1.MethodNotAllowed('Can not create multiple entries');
169
+ }
134
170
  return this._create(data, params);
135
171
  }
136
172
  async update(id, data, params) {
137
- return this._update(id, data, params);
173
+ return this._update(id, data, {
174
+ ...params,
175
+ query: await this.sanitizeQuery(params)
176
+ });
138
177
  }
139
178
  async patch(id, data, params) {
140
- return this._patch(id, data, params);
179
+ const { $limit, ...query } = await this.sanitizeQuery(params);
180
+ return this._patch(id, data, {
181
+ ...params,
182
+ query
183
+ });
141
184
  }
142
185
  async remove(id, params) {
143
- return this._remove(id, params);
186
+ const { $limit, ...query } = await this.sanitizeQuery(params);
187
+ return this._remove(id, {
188
+ ...params,
189
+ query
190
+ });
144
191
  }
145
192
  }
146
193
  exports.MemoryService = MemoryService;
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;AAAA,+CAA6C;AAC7C,iDAAuC;AACvC,iEAOoC;AACpC,gDAAuB;AAcvB,MAAM,OAAO,GAAG,CAAC,IAAS,EAAE,MAAW,EAAE,GAAG,IAAW,EAAE,EAAE;IACzD,MAAM,IAAI,GAAG,IAAA,wBAAM,EAAC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAA;IAEpC,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AAC/C,CAAC,CAAA;AAED,MAAa,aAAkE,SAAQ,6BAKtF;IAIC,YAAY,UAAmC,EAAE;QAC/C,KAAK,CAAC;YACJ,EAAE,EAAE,IAAI;YACR,OAAO,EAAE,cAAI;YACb,MAAM,EAAN,wBAAM;YACN,KAAK,EAAE,EAAE;YACT,OAAO,EAAE,CAAC;YACV,GAAG,OAAO;SACX,CAAC,CAAA;QACF,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAA;QAChC,IAAI,CAAC,KAAK,GAAG,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAA;IACxC,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,OAAW;QAC1B,MAAM,MAAM,GAAG,OAAO,IAAK,EAAQ,CAAA;QAEnC,OAAO,IAAI,CAAC,KAAK,CAAC;YAChB,GAAG,MAAM;YACT,QAAQ,EAAE,KAAK;SAChB,CAAC,CAAA;IACJ,CAAC;IAED,QAAQ,CAAC,MAAS;QAChB,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,KAAK,EAAE,GAAG,MAAM,CAAC,KAAK,IAAI,EAAE,CAAA;QAEtE,OAAO;YACL,KAAK;YACL,OAAO,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE;SAC3C,CAAA;IACH,CAAC;IAKD,KAAK,CAAC,KAAK,CAAC,SAAY,EAAO;QAC7B,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAA;QAC5C,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;QAEhD,IAAI,MAAM,GAAG,WAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAA;QACrE,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAA;QAE3B,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS,EAAE;YAC/B,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAA;SAChD;QAED,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS,EAAE;YAC/B,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;SACrC;QAED,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,EAAE;YAChC,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAA;SACzC;QAED,MAAM,MAAM,GAAiB;YAC3B,KAAK;YACL,KAAK,EAAE,OAAO,CAAC,MAAM;YACrB,IAAI,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;YACxB,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;SACpD,CAAA;QAED,IAAI,CAAC,QAAQ,EAAE;YACb,OAAO,MAAM,CAAC,IAAI,CAAA;SACnB;QAED,OAAO,MAAM,CAAA;IACf,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,EAAM,EAAE,SAAY,EAAO;QACpC,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;QAEvC,IAAI,EAAE,IAAI,IAAI,CAAC,KAAK,EAAE;YACpB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;YAE5B,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,EAAE;gBACtC,OAAO,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,CAAA;aACvC;SACF;QAED,MAAM,IAAI,iBAAQ,CAAC,2BAA2B,EAAE,GAAG,CAAC,CAAA;IACtD,CAAC;IAKD,KAAK,CAAC,OAAO,CAAC,IAA+B,EAAE,SAAY,EAAO;QAChE,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YACvB,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,CAAA;SACzE;QAED,MAAM,EAAE,GAAI,IAAY,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAA;QAChD,MAAM,OAAO,GAAG,WAAC,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAA;QACrD,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,CAAA;QAEzC,OAAO,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,CAAM,CAAA;IAC9C,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,EAAM,EAAE,IAAO,EAAE,SAAY,EAAO;QAChD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QACpC,2DAA2D;QAC3D,MAAM,KAAK,GAAI,QAAgB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QAExC,kCAAkC;QAClC,EAAE,GAAG,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAA;QAE7B,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,WAAC,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAA;QAEtD,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC,CAAA;IAC9B,CAAC;IAKD,KAAK,CAAC,MAAM,CAAC,EAAc,EAAE,IAAgB,EAAE,SAAY,EAAO;QAChE,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;QACvC,MAAM,UAAU,GAAG,CAAC,KAAQ,EAAE,EAAE;YAC9B,MAAM,SAAS,GAAI,KAAa,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;YAEzC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,WAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,WAAC,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAA;YAE9E,OAAO,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,CAAA;QACxD,CAAC,CAAA;QAED,IAAI,EAAE,KAAK,IAAI,EAAE;YACf,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC;gBACpC,GAAG,MAAM;gBACT,KAAK;aACN,CAAC,CAAA;YAEF,OAAO,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;SAC/B;QAED,OAAO,UAAU,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAA,CAAC,mCAAmC;IACpF,CAAC;IAKD,KAAK,CAAC,OAAO,CAAC,EAAc,EAAE,SAAY,EAAO;QAC/C,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;QAEvC,IAAI,EAAE,KAAK,IAAI,EAAE;YACf,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC;gBACpC,GAAG,MAAM;gBACT,KAAK;aACN,CAAC,CAAA;YAEF,OAAO,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,OAAY,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAO,EAAE,MAAM,CAAC,CAAC,CAAC,CAAA;SAChG;QAED,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC,CAAA;QAEzC,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;QAErB,OAAO,KAAK,CAAA;IACd,CAAC;CACF;AApKD,sCAoKC;AAED,MAAa,aACX,SAAQ,aAAsB;IAM9B,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,IAAa,EAAE,MAAU;QACpC,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;AApCD,sCAoCC;AAED,SAAgB,MAAM,CACpB,UAA4C,EAAE;IAE9C,OAAO,IAAI,aAAa,CAAU,OAAO,CAAC,CAAA;AAC5C,CAAC;AAJD,wBAIC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;AAAA,+CAA2E;AAC3E,iDAAuC;AACvC,iEAOoC;AACpC,gDAAuB;AAcvB,MAAM,OAAO,GAAG,CAAC,IAAS,EAAE,MAAW,EAAE,GAAG,IAAW,EAAE,EAAE;IACzD,MAAM,IAAI,GAAG,IAAA,wBAAM,EAAC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAA;IAEpC,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AAC/C,CAAC,CAAA;AAED,MAAa,aAKX,SAAQ,6BAAiF;IAIzF,YAAY,UAAwC,EAAE;QACpD,KAAK,CAAC;YACJ,EAAE,EAAE,IAAI;YACR,OAAO,EAAE,cAAI;YACb,MAAM,EAAN,wBAAM;YACN,KAAK,EAAE,EAAE;YACT,OAAO,EAAE,CAAC;YACV,GAAG,OAAO;SACX,CAAC,CAAA;QACF,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAA;QAChC,IAAI,CAAC,KAAK,GAAG,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAA;IACxC,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,OAAuB;QACtC,MAAM,MAAM,GAAG,OAAO,IAAK,EAAoB,CAAA;QAE/C,OAAO,IAAI,CAAC,KAAK,CAAC;YAChB,GAAG,MAAM;YACT,QAAQ,EAAE,KAAK;SAChB,CAAC,CAAA;IACJ,CAAC;IAED,QAAQ,CAAC,MAAqB;QAC5B,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,KAAK,EAAE,GAAG,MAAM,CAAC,KAAK,IAAI,EAAE,CAAA;QAEtE,OAAO;YACL,KAAK;YACL,OAAO,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE;SAC3C,CAAA;IACH,CAAC;IAKD,KAAK,CAAC,KAAK,CAAC,SAAwB,EAAmB;QACrD,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAA;QAC5C,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;QAEhD,IAAI,MAAM,GAAG,WAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QACjC,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAA;QAC3B,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,KAAK,SAAS,CAAA;QAC3C,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,KAAK,SAAS,CAAA;QAC3C,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,KAAK,SAAS,CAAA;QAC7C,MAAM,QAAQ,GAAG,WAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CAAA;QAEzC,IAAI,OAAO,EAAE;YACX,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAA;SAChD;QAED,IAAI,QAAQ,IAAI,QAAQ,IAAI,OAAO,EAAE;YACnC,IAAI,OAAO,GAAG,CAAC,CAAA;YACf,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;YAC3C,MAAM,OAAO,GAAG,EAAE,CAAA;YAElB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,GAAG,MAAM,EAAE,KAAK,EAAE,EAAE;gBACnE,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;gBAE3B,IAAI,QAAQ,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,EAAE;oBAC9C,SAAQ;iBACT;gBAED,IAAI,OAAO,IAAI,OAAO,CAAC,KAAK,GAAG,OAAO,EAAE;oBACtC,OAAO,EAAE,CAAA;oBACT,SAAQ;iBACT;gBAED,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAA;gBAEpC,IAAI,QAAQ,IAAI,OAAO,CAAC,MAAM,KAAK,OAAO,CAAC,MAAM,EAAE;oBACjD,MAAK;iBACN;aACF;YAED,MAAM,GAAG,OAAO,CAAA;SACjB;QAED,MAAM,MAAM,GAAsB;YAChC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK;YACvC,KAAK,EAAE,OAAO,CAAC,MAAM;YACrB,IAAI,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;YACxB,IAAI,EAAE,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM;SACzC,CAAA;QAED,IAAI,CAAC,QAAQ,EAAE;YACb,OAAO,MAAM,CAAC,IAAI,CAAA;SACnB;QAED,OAAO,MAAM,CAAA;IACf,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,EAAM,EAAE,SAAwB,EAAmB;QAC5D,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;QAEvC,IAAI,EAAE,IAAI,IAAI,CAAC,KAAK,EAAE;YACpB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;YAE5B,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,EAAE;gBACtC,OAAO,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,CAAA;aACvC;SACF;QAED,MAAM,IAAI,iBAAQ,CAAC,2BAA2B,EAAE,GAAG,CAAC,CAAA;IACtD,CAAC;IAKD,KAAK,CAAC,OAAO,CACX,IAAqC,EACrC,SAAwB,EAAmB;QAE3C,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YACvB,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,CAAA;SACzE;QAED,MAAM,EAAE,GAAI,IAAY,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAA;QAChD,MAAM,OAAO,GAAG,WAAC,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAA;QACrD,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,CAAA;QAEzC,OAAO,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,CAAW,CAAA;IACnD,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,EAAM,EAAE,IAAU,EAAE,SAAwB,EAAmB;QAC3E,IAAI,EAAE,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YACtC,MAAM,IAAI,mBAAU,CAAC,+DAA+D,CAAC,CAAA;SACtF;QAED,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QACpC,2DAA2D;QAC3D,MAAM,KAAK,GAAI,QAAgB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QAExC,kCAAkC;QAClC,EAAE,GAAG,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAA;QAE7B,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,WAAC,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAA;QAEtD,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC,CAAA;IAC9B,CAAC;IAKD,KAAK,CAAC,MAAM,CACV,EAAc,EACd,IAAe,EACf,SAAwB,EAAmB;QAE3C,IAAI,EAAE,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE;YACrD,MAAM,IAAI,yBAAgB,CAAC,gCAAgC,CAAC,CAAA;SAC7D;QAED,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;QACvC,MAAM,UAAU,GAAG,CAAC,KAAa,EAAE,EAAE;YACnC,MAAM,SAAS,GAAI,KAAa,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;YAEzC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,WAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,WAAC,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAA;YAE9E,OAAO,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,CAAA;QACxD,CAAC,CAAA;QAED,IAAI,EAAE,KAAK,IAAI,EAAE;YACf,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC;gBACpC,GAAG,MAAM;gBACT,KAAK;aACN,CAAC,CAAA;YAEF,OAAO,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;SAC/B;QAED,OAAO,UAAU,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAA,CAAC,mCAAmC;IACpF,CAAC;IAKD,KAAK,CAAC,OAAO,CAAC,EAAc,EAAE,SAAwB,EAAmB;QACvE,IAAI,EAAE,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE;YACtD,MAAM,IAAI,yBAAgB,CAAC,iCAAiC,CAAC,CAAA;SAC9D;QAED,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;QAEvC,IAAI,EAAE,KAAK,IAAI,EAAE;YACf,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC;gBACpC,GAAG,MAAM;gBACT,KAAK;aACN,CAAC,CAAA;YAEF,OAAO,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,OAAY,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAO,EAAE,MAAM,CAAC,CAAC,CAAC,CAAA;SAChG;QAED,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC,CAAA;QAEzC,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;QAErB,OAAO,KAAK,CAAA;IACd,CAAC;CACF;AA9MD,sCA8MC;AAED,MAAa,aAKX,SAAQ,aAAqD;IAI7D,KAAK,CAAC,IAAI,CAAC,MAAsB;QAC/B,OAAO,IAAI,CAAC,KAAK,CAAC;YAChB,GAAG,MAAM;YACT,KAAK,EAAE,MAAM,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;SACxC,CAAC,CAAA;IACJ,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,EAAM,EAAE,MAAsB;QACtC,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE;YACnB,GAAG,MAAM;YACT,KAAK,EAAE,MAAM,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;SACxC,CAAC,CAAA;IACJ,CAAC;IAID,KAAK,CAAC,MAAM,CAAC,IAAmB,EAAE,MAAsB;QACtD,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE;YAC9D,MAAM,IAAI,yBAAgB,CAAC,iCAAiC,CAAC,CAAA;SAC9D;QAED,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;IACnC,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,EAAM,EAAE,IAAU,EAAE,MAAsB;QACrD,OAAO,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,IAAI,EAAE;YAC5B,GAAG,MAAM;YACT,KAAK,EAAE,MAAM,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;SACxC,CAAC,CAAA;IACJ,CAAC;IAID,KAAK,CAAC,KAAK,CAAC,EAAc,EAAE,IAAe,EAAE,MAAsB;QACjE,MAAM,EAAE,MAAM,EAAE,GAAG,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAA;QAE7D,OAAO,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE;YAC3B,GAAG,MAAM;YACT,KAAK;SACN,CAAC,CAAA;IACJ,CAAC;IAID,KAAK,CAAC,MAAM,CAAC,EAAc,EAAE,MAAsB;QACjD,MAAM,EAAE,MAAM,EAAE,GAAG,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAA;QAE7D,OAAO,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE;YACtB,GAAG,MAAM;YACT,KAAK;SACN,CAAC,CAAA;IACJ,CAAC;CACF;AA7DD,sCA6DC;AAED,SAAgB,MAAM,CACpB,UAA4C,EAAE;IAE9C,OAAO,IAAI,aAAa,CAAU,OAAO,CAAC,CAAA;AAC5C,CAAC;AAJD,wBAIC"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@feathersjs/memory",
3
3
  "description": "An in memory service store",
4
- "version": "5.0.0-pre.32",
4
+ "version": "5.0.0-pre.34",
5
5
  "homepage": "https://github.com/feathersjs/feathers",
6
6
  "main": "lib/",
7
7
  "types": "lib/",
@@ -49,20 +49,20 @@
49
49
  "lib": "lib"
50
50
  },
51
51
  "dependencies": {
52
- "@feathersjs/adapter-commons": "^5.0.0-pre.32",
53
- "@feathersjs/commons": "^5.0.0-pre.32",
54
- "@feathersjs/errors": "^5.0.0-pre.32",
55
- "sift": "^16.0.0"
52
+ "@feathersjs/adapter-commons": "^5.0.0-pre.34",
53
+ "@feathersjs/commons": "^5.0.0-pre.34",
54
+ "@feathersjs/errors": "^5.0.0-pre.34",
55
+ "sift": "^16.0.1"
56
56
  },
57
57
  "devDependencies": {
58
- "@feathersjs/adapter-tests": "^5.0.0-pre.32",
59
- "@feathersjs/feathers": "^5.0.0-pre.32",
60
- "@types/mocha": "^10.0.0",
61
- "@types/node": "^18.8.2",
62
- "mocha": "^10.0.0",
58
+ "@feathersjs/adapter-tests": "^5.0.0-pre.34",
59
+ "@feathersjs/feathers": "^5.0.0-pre.34",
60
+ "@types/mocha": "^10.0.1",
61
+ "@types/node": "^18.11.10",
62
+ "mocha": "^10.1.0",
63
63
  "shx": "^0.3.4",
64
64
  "ts-node": "^10.9.1",
65
- "typescript": "^4.8.4"
65
+ "typescript": "^4.9.3"
66
66
  },
67
- "gitHead": "b405e205fc6d9fbd42b42c7a3f30ea4bf33d121d"
67
+ "gitHead": "42cca600d00f0b3b9d89fa79be30fcd46bc50132"
68
68
  }
package/src/index.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { NotFound } from '@feathersjs/errors'
1
+ import { BadRequest, MethodNotAllowed, NotFound } from '@feathersjs/errors'
2
2
  import { _ } from '@feathersjs/commons'
3
3
  import {
4
4
  sorter,
@@ -9,7 +9,7 @@ import {
9
9
  AdapterParams
10
10
  } from '@feathersjs/adapter-commons'
11
11
  import sift from 'sift'
12
- import { NullableId, Id, Params, ServiceMethods, Paginated } from '@feathersjs/feathers'
12
+ import { NullableId, Id, Params, Paginated } from '@feathersjs/feathers'
13
13
 
14
14
  export interface MemoryServiceStore<T> {
15
15
  [key: string]: T
@@ -28,16 +28,16 @@ const _select = (data: any, params: any, ...args: any[]) => {
28
28
  return base(JSON.parse(JSON.stringify(data)))
29
29
  }
30
30
 
31
- export class MemoryAdapter<T = any, D = Partial<T>, P extends Params = Params> extends AdapterBase<
32
- T,
33
- D,
34
- P,
35
- MemoryServiceOptions<T>
36
- > {
37
- store: MemoryServiceStore<T>
31
+ export class MemoryAdapter<
32
+ Result = any,
33
+ Data = Partial<Result>,
34
+ ServiceParams extends Params = Params,
35
+ PatchData = Partial<Data>
36
+ > extends AdapterBase<Result, Data, PatchData, ServiceParams, MemoryServiceOptions<Result>> {
37
+ store: MemoryServiceStore<Result>
38
38
  _uId: number
39
39
 
40
- constructor(options: MemoryServiceOptions<T> = {}) {
40
+ constructor(options: MemoryServiceOptions<Result> = {}) {
41
41
  super({
42
42
  id: 'id',
43
43
  matcher: sift,
@@ -50,16 +50,16 @@ export class MemoryAdapter<T = any, D = Partial<T>, P extends Params = Params> e
50
50
  this.store = { ...this.options.store }
51
51
  }
52
52
 
53
- async getEntries(_params?: P) {
54
- const params = _params || ({} as P)
53
+ async getEntries(_params?: ServiceParams) {
54
+ const params = _params || ({} as ServiceParams)
55
55
 
56
- return this.$find({
56
+ return this._find({
57
57
  ...params,
58
58
  paginate: false
59
59
  })
60
60
  }
61
61
 
62
- getQuery(params: P) {
62
+ getQuery(params: ServiceParams) {
63
63
  const { $skip, $sort, $limit, $select, ...query } = params.query || {}
64
64
 
65
65
  return {
@@ -68,33 +68,56 @@ export class MemoryAdapter<T = any, D = Partial<T>, P extends Params = Params> e
68
68
  }
69
69
  }
70
70
 
71
- async $find(_params?: P & { paginate?: PaginationOptions }): Promise<Paginated<T>>
72
- async $find(_params?: P & { paginate: false }): Promise<T[]>
73
- async $find(_params?: P): Promise<Paginated<T> | T[]>
74
- async $find(params: P = {} as P): Promise<Paginated<T> | T[]> {
71
+ async _find(_params?: ServiceParams & { paginate?: PaginationOptions }): Promise<Paginated<Result>>
72
+ async _find(_params?: ServiceParams & { paginate: false }): Promise<Result[]>
73
+ async _find(_params?: ServiceParams): Promise<Paginated<Result> | Result[]>
74
+ async _find(params: ServiceParams = {} as ServiceParams): Promise<Paginated<Result> | Result[]> {
75
75
  const { paginate } = this.getOptions(params)
76
76
  const { query, filters } = this.getQuery(params)
77
77
 
78
- let values = _.values(this.store).filter(this.options.matcher(query))
78
+ let values = _.values(this.store)
79
79
  const total = values.length
80
+ const hasSkip = filters.$skip !== undefined
81
+ const hasSort = filters.$sort !== undefined
82
+ const hasLimit = filters.$limit !== undefined
83
+ const hasQuery = _.keys(query).length > 0
80
84
 
81
- if (filters.$sort !== undefined) {
85
+ if (hasSort) {
82
86
  values.sort(this.options.sorter(filters.$sort))
83
87
  }
84
88
 
85
- if (filters.$skip !== undefined) {
86
- values = values.slice(filters.$skip)
87
- }
89
+ if (hasQuery || hasLimit || hasSkip) {
90
+ let skipped = 0
91
+ const matcher = this.options.matcher(query)
92
+ const matched = []
93
+
94
+ for (let index = 0, length = values.length; index < length; index++) {
95
+ const value = values[index]
96
+
97
+ if (hasQuery && !matcher(value, index, values)) {
98
+ continue
99
+ }
100
+
101
+ if (hasSkip && filters.$skip > skipped) {
102
+ skipped++
103
+ continue
104
+ }
88
105
 
89
- if (filters.$limit !== undefined) {
90
- values = values.slice(0, filters.$limit)
106
+ matched.push(_select(value, params))
107
+
108
+ if (hasLimit && filters.$limit === matched.length) {
109
+ break
110
+ }
111
+ }
112
+
113
+ values = matched
91
114
  }
92
115
 
93
- const result: Paginated<T> = {
94
- total,
116
+ const result: Paginated<Result> = {
117
+ total: hasQuery ? values.length : total,
95
118
  limit: filters.$limit,
96
119
  skip: filters.$skip || 0,
97
- data: values.map((value) => _select(value, params))
120
+ data: filters.$limit === 0 ? [] : values
98
121
  }
99
122
 
100
123
  if (!paginate) {
@@ -104,7 +127,7 @@ export class MemoryAdapter<T = any, D = Partial<T>, P extends Params = Params> e
104
127
  return result
105
128
  }
106
129
 
107
- async $get(id: Id, params: P = {} as P): Promise<T> {
130
+ async _get(id: Id, params: ServiceParams = {} as ServiceParams): Promise<Result> {
108
131
  const { query } = this.getQuery(params)
109
132
 
110
133
  if (id in this.store) {
@@ -118,23 +141,30 @@ export class MemoryAdapter<T = any, D = Partial<T>, P extends Params = Params> e
118
141
  throw new NotFound(`No record found for id '${id}'`)
119
142
  }
120
143
 
121
- async $create(data: Partial<D>, params?: P): Promise<T>
122
- async $create(data: Partial<D>[], params?: P): Promise<T[]>
123
- async $create(data: Partial<D> | Partial<D>[], _params?: P): Promise<T | T[]>
124
- async $create(data: Partial<D> | Partial<D>[], params: P = {} as P): Promise<T | T[]> {
144
+ async _create(data: Partial<Data>, params?: ServiceParams): Promise<Result>
145
+ async _create(data: Partial<Data>[], params?: ServiceParams): Promise<Result[]>
146
+ async _create(data: Partial<Data> | Partial<Data>[], _params?: ServiceParams): Promise<Result | Result[]>
147
+ async _create(
148
+ data: Partial<Data> | Partial<Data>[],
149
+ params: ServiceParams = {} as ServiceParams
150
+ ): Promise<Result | Result[]> {
125
151
  if (Array.isArray(data)) {
126
- return Promise.all(data.map((current) => this.$create(current, params)))
152
+ return Promise.all(data.map((current) => this._create(current, params)))
127
153
  }
128
154
 
129
155
  const id = (data as any)[this.id] || this._uId++
130
156
  const current = _.extend({}, data, { [this.id]: id })
131
157
  const result = (this.store[id] = current)
132
158
 
133
- return _select(result, params, this.id) as T
159
+ return _select(result, params, this.id) as Result
134
160
  }
135
161
 
136
- async $update(id: Id, data: D, params: P = {} as P): Promise<T> {
137
- const oldEntry = await this.$get(id)
162
+ async _update(id: Id, data: Data, params: ServiceParams = {} as ServiceParams): Promise<Result> {
163
+ if (id === null || Array.isArray(data)) {
164
+ throw new BadRequest("You can not replace multiple instances. Did you mean 'patch'?")
165
+ }
166
+
167
+ const oldEntry = await this._get(id)
138
168
  // We don't want our id to change type if it can be coerced
139
169
  const oldId = (oldEntry as any)[this.id]
140
170
 
@@ -143,15 +173,23 @@ export class MemoryAdapter<T = any, D = Partial<T>, P extends Params = Params> e
143
173
 
144
174
  this.store[id] = _.extend({}, data, { [this.id]: id })
145
175
 
146
- return this.$get(id, params)
176
+ return this._get(id, params)
147
177
  }
148
178
 
149
- async $patch(id: null, data: Partial<D>, params?: P): Promise<T[]>
150
- async $patch(id: Id, data: Partial<D>, params?: P): Promise<T>
151
- async $patch(id: NullableId, data: Partial<D>, _params?: P): Promise<T | T[]>
152
- async $patch(id: NullableId, data: Partial<D>, params: P = {} as P): Promise<T | T[]> {
179
+ async _patch(id: null, data: PatchData, params?: ServiceParams): Promise<Result[]>
180
+ async _patch(id: Id, data: PatchData, params?: ServiceParams): Promise<Result>
181
+ async _patch(id: NullableId, data: PatchData, _params?: ServiceParams): Promise<Result | Result[]>
182
+ async _patch(
183
+ id: NullableId,
184
+ data: PatchData,
185
+ params: ServiceParams = {} as ServiceParams
186
+ ): Promise<Result | Result[]> {
187
+ if (id === null && !this.allowsMulti('patch', params)) {
188
+ throw new MethodNotAllowed('Can not patch multiple entries')
189
+ }
190
+
153
191
  const { query } = this.getQuery(params)
154
- const patchEntry = (entry: T) => {
192
+ const patchEntry = (entry: Result) => {
155
193
  const currentId = (entry as any)[this.id]
156
194
 
157
195
  this.store[currentId] = _.extend(this.store[currentId], _.omit(data, this.id))
@@ -168,13 +206,17 @@ export class MemoryAdapter<T = any, D = Partial<T>, P extends Params = Params> e
168
206
  return entries.map(patchEntry)
169
207
  }
170
208
 
171
- return patchEntry(await this.$get(id, params)) // Will throw an error if not found
209
+ return patchEntry(await this._get(id, params)) // Will throw an error if not found
172
210
  }
173
211
 
174
- async $remove(id: null, params?: P): Promise<T[]>
175
- async $remove(id: Id, params?: P): Promise<T>
176
- async $remove(id: NullableId, _params?: P): Promise<T | T[]>
177
- async $remove(id: NullableId, params: P = {} as P): Promise<T | T[]> {
212
+ async _remove(id: null, params?: ServiceParams): Promise<Result[]>
213
+ async _remove(id: Id, params?: ServiceParams): Promise<Result>
214
+ async _remove(id: NullableId, _params?: ServiceParams): Promise<Result | Result[]>
215
+ async _remove(id: NullableId, params: ServiceParams = {} as ServiceParams): Promise<Result | Result[]> {
216
+ if (id === null && !this.allowsMulti('remove', params)) {
217
+ throw new MethodNotAllowed('Can not remove multiple entries')
218
+ }
219
+
178
220
  const { query } = this.getQuery(params)
179
221
 
180
222
  if (id === null) {
@@ -183,10 +225,10 @@ export class MemoryAdapter<T = any, D = Partial<T>, P extends Params = Params> e
183
225
  query
184
226
  })
185
227
 
186
- return Promise.all(entries.map((current: any) => this.$remove(current[this.id] as Id, params)))
228
+ return Promise.all(entries.map((current: any) => this._remove(current[this.id] as Id, params)))
187
229
  }
188
230
 
189
- const entry = await this.$get(id, params)
231
+ const entry = await this._get(id, params)
190
232
 
191
233
  delete this.store[id]
192
234
 
@@ -194,41 +236,66 @@ export class MemoryAdapter<T = any, D = Partial<T>, P extends Params = Params> e
194
236
  }
195
237
  }
196
238
 
197
- export class MemoryService<T = any, D = Partial<T>, P extends AdapterParams = AdapterParams>
198
- extends MemoryAdapter<T, D, P>
199
- implements ServiceMethods<T | Paginated<T>, D, P>
200
- {
201
- async find(params?: P & { paginate?: PaginationOptions }): Promise<Paginated<T>>
202
- async find(params?: P & { paginate: false }): Promise<T[]>
203
- async find(params?: P): Promise<Paginated<T> | T[]>
204
- async find(params?: P): Promise<Paginated<T> | T[]> {
205
- return this._find(params) as any
239
+ export class MemoryService<
240
+ Result = any,
241
+ Data = Partial<Result>,
242
+ ServiceParams extends AdapterParams = AdapterParams,
243
+ PatchData = Partial<Data>
244
+ > extends MemoryAdapter<Result, Data, ServiceParams, PatchData> {
245
+ async find(params?: ServiceParams & { paginate?: PaginationOptions }): Promise<Paginated<Result>>
246
+ async find(params?: ServiceParams & { paginate: false }): Promise<Result[]>
247
+ async find(params?: ServiceParams): Promise<Paginated<Result> | Result[]>
248
+ async find(params?: ServiceParams): Promise<Paginated<Result> | Result[]> {
249
+ return this._find({
250
+ ...params,
251
+ query: await this.sanitizeQuery(params)
252
+ })
206
253
  }
207
254
 
208
- async get(id: Id, params?: P): Promise<T> {
209
- return this._get(id, params)
255
+ async get(id: Id, params?: ServiceParams): Promise<Result> {
256
+ return this._get(id, {
257
+ ...params,
258
+ query: await this.sanitizeQuery(params)
259
+ })
210
260
  }
211
261
 
212
- async create(data: D, params?: P): Promise<T>
213
- async create(data: D[], params?: P): Promise<T[]>
214
- async create(data: D | D[], params?: P): Promise<T | T[]> {
262
+ async create(data: Data, params?: ServiceParams): Promise<Result>
263
+ async create(data: Data[], params?: ServiceParams): Promise<Result[]>
264
+ async create(data: Data | Data[], params?: ServiceParams): Promise<Result | Result[]> {
265
+ if (Array.isArray(data) && !this.allowsMulti('create', params)) {
266
+ throw new MethodNotAllowed('Can not create multiple entries')
267
+ }
268
+
215
269
  return this._create(data, params)
216
270
  }
217
271
 
218
- async update(id: Id, data: D, params?: P): Promise<T> {
219
- return this._update(id, data, params)
272
+ async update(id: Id, data: Data, params?: ServiceParams): Promise<Result> {
273
+ return this._update(id, data, {
274
+ ...params,
275
+ query: await this.sanitizeQuery(params)
276
+ })
220
277
  }
221
278
 
222
- async patch(id: Id, data: Partial<D>, params?: P): Promise<T>
223
- async patch(id: null, data: Partial<D>, params?: P): Promise<T[]>
224
- async patch(id: NullableId, data: Partial<D>, params?: P): Promise<T | T[]> {
225
- return this._patch(id, data, params)
279
+ async patch(id: Id, data: PatchData, params?: ServiceParams): Promise<Result>
280
+ async patch(id: null, data: PatchData, params?: ServiceParams): Promise<Result[]>
281
+ async patch(id: NullableId, data: PatchData, params?: ServiceParams): Promise<Result | Result[]> {
282
+ const { $limit, ...query } = await this.sanitizeQuery(params)
283
+
284
+ return this._patch(id, data, {
285
+ ...params,
286
+ query
287
+ })
226
288
  }
227
289
 
228
- async remove(id: Id, params?: P): Promise<T>
229
- async remove(id: null, params?: P): Promise<T[]>
230
- async remove(id: NullableId, params?: P): Promise<T | T[]> {
231
- return this._remove(id, params)
290
+ async remove(id: Id, params?: ServiceParams): Promise<Result>
291
+ async remove(id: null, params?: ServiceParams): Promise<Result[]>
292
+ async remove(id: NullableId, params?: ServiceParams): Promise<Result | Result[]> {
293
+ const { $limit, ...query } = await this.sanitizeQuery(params)
294
+
295
+ return this._remove(id, {
296
+ ...params,
297
+ query
298
+ })
232
299
  }
233
300
  }
234
301