@travetto/model-query 5.0.14 → 5.0.16

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/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2023 ArcSine Technologies
3
+ Copyright (c) 2020 ArcSine Technologies
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@travetto/model-query",
3
- "version": "5.0.14",
3
+ "version": "5.0.16",
4
4
  "description": "Datastore abstraction for advanced query support.",
5
5
  "keywords": [
6
6
  "datastore",
@@ -26,12 +26,12 @@
26
26
  "directory": "module/model-query"
27
27
  },
28
28
  "dependencies": {
29
- "@travetto/di": "^5.0.13",
30
- "@travetto/model": "^5.0.14",
31
- "@travetto/schema": "^5.0.13"
29
+ "@travetto/di": "^5.0.15",
30
+ "@travetto/model": "^5.0.16",
31
+ "@travetto/schema": "^5.0.15"
32
32
  },
33
33
  "peerDependencies": {
34
- "@travetto/test": "^5.0.15"
34
+ "@travetto/test": "^5.0.17"
35
35
  },
36
36
  "peerDependenciesMeta": {
37
37
  "@travetto/test": {
@@ -31,8 +31,18 @@ export class ModelQueryUtil {
31
31
  if (res.length === 1 || res.length > 1 && !failOnMany) {
32
32
  return res[0]!;
33
33
  }
34
- const requestedId = ((where && 'id' in where && typeof where.id === 'string') ? where.id : undefined) ?? 'unknown';
35
- throw res.length === 0 ? new NotFoundError(cls, requestedId, { where }) : new AppError(`Invalid number of results for find by id: ${res.length}`, { category: 'data' });
34
+ const requestedId = ((where && 'id' in where && typeof where.id === 'string') ? where.id : undefined);
35
+ if (res.length === 0) {
36
+ if (requestedId) {
37
+ throw new NotFoundError(cls, requestedId);
38
+ } else {
39
+ const err = new NotFoundError(cls, 'unknown');
40
+ err.message = 'No results found for query';
41
+ throw err;
42
+ }
43
+ } else {
44
+ throw new AppError(`Invalid number of results: ${res.length}`, { category: 'data' });
45
+ }
36
46
  }
37
47
 
38
48
  /**
package/src/verifier.ts CHANGED
@@ -5,7 +5,6 @@ import { ModelQuery, Query, PageableModelQuery } from './model/query';
5
5
 
6
6
  import { TypeUtil } from './internal/util/types';
7
7
 
8
-
9
8
  type SimpleType = keyof typeof TypeUtil.OPERATORS;
10
9
 
11
10
  interface State {
@@ -37,7 +37,6 @@ export abstract class ModelQueryCrudSuite extends BaseModelSuite<ModelQueryCrudS
37
37
  NotFoundError
38
38
  );
39
39
 
40
-
41
40
  const todo2 = await svc.create(Todo, Todo.from({ text: 'bob2' }));
42
41
 
43
42
  const result = await svc.updateByQuery(Todo, Todo.from({
@@ -88,7 +87,6 @@ export abstract class ModelQueryCrudSuite extends BaseModelSuite<ModelQueryCrudS
88
87
  }
89
88
  }
90
89
 
91
-
92
90
  @Test()
93
91
  async testDeleteByQuery() {
94
92
  const svc = await this.service;
@@ -15,6 +15,36 @@ export abstract class ModelQuerySuite extends BaseModelSuite<ModelQuerySupport &
15
15
 
16
16
  supportsGeo = true;
17
17
 
18
+ @Test()
19
+ async testIds() {
20
+ const svc = await this.service;
21
+
22
+ const people = [1, 2, 3, 8].map(x => Person.from({
23
+ id: svc.idSource.create(),
24
+ name: 'Bob Omber',
25
+ age: 20 + x,
26
+ gender: 'm',
27
+ address: {
28
+ street1: 'a',
29
+ ...(x === 1 ? { street2: 'b' } : {})
30
+ }
31
+ }));
32
+
33
+ await this.saveAll(Person, people);
34
+
35
+ const one = await svc.queryOne(Person, { where: { id: people[0].id } });
36
+ assert(one.id === people[0].id);
37
+
38
+ const one2 = await svc.queryOne(Person, { where: { id: { $eq: people[0].id } } });
39
+ assert(one2.id === people[0].id);
40
+
41
+ const none = await svc.queryCount(Person, { where: { id: { $ne: people[0].id } } });
42
+ assert(none === 3);
43
+
44
+ const noneids = await svc.query(Person, { where: { id: { $ne: people[0].id } } });
45
+ assert(noneids.every(x => x.id !== people[0].id));
46
+ }
47
+
18
48
  @Test('verify word boundary')
19
49
  async testWordBoundary() {
20
50
  const service = await this.service;
@@ -38,7 +68,6 @@ export abstract class ModelQuerySuite extends BaseModelSuite<ModelQuerySupport &
38
68
  assert(results3.length === 0);
39
69
  }
40
70
 
41
-
42
71
  @Test('verify query one behavior')
43
72
  async testQueryOne() {
44
73
  const service = await this.service;
@@ -54,13 +83,7 @@ export abstract class ModelQuerySuite extends BaseModelSuite<ModelQuerySupport &
54
83
 
55
84
  await assert.rejects(() => service.queryOne(Person, { where: { gender: 'm' } }), /Invalid number of results/);
56
85
  await assert.rejects(() => service.queryOne(Person, { where: { gender: 'z' } }), NotFoundError);
57
- await assert.rejects(() => service.queryOne(Person, { where: { gender: 'z' } }), /unknown/);
58
- assert.deepStrictEqual(
59
- (await service.queryOne(Person, { where: { gender: 'z' } }).catch(e => e)).details.where,
60
- {
61
- gender: 'z'
62
- }
63
- );
86
+ await assert.rejects(() => service.queryOne(Person, { where: { gender: 'z' } }), /No results found for query/);
64
87
  await assert.rejects(() => service.queryOne(Person, { where: { id: 'orange' } }), NotFoundError);
65
88
  await assert.rejects(() => service.queryOne(Person, { where: { id: 'orange' } }), /orange/);
66
89
  }
@@ -68,11 +91,11 @@ export abstract class ModelQuerySuite extends BaseModelSuite<ModelQuerySupport &
68
91
  @Test('Verify array $in queries work properly')
69
92
  async testArrayContains() {
70
93
  const svc = await this.service;
71
- await svc.create(SimpleList, SimpleList.from({
94
+ const first = await svc.create(SimpleList, SimpleList.from({
72
95
  names: ['a', 'b', 'c']
73
96
  }));
74
97
 
75
- await svc.create(SimpleList, SimpleList.from({
98
+ const second = await svc.create(SimpleList, SimpleList.from({
76
99
  names: ['b', 'c', 'd']
77
100
  }));
78
101
 
@@ -111,6 +134,24 @@ export abstract class ModelQuerySuite extends BaseModelSuite<ModelQuerySupport &
111
134
  }
112
135
  });
113
136
  assert(none.length === 0);
137
+
138
+ const ids = await svc.query(SimpleList, {
139
+ where: {
140
+ id: {
141
+ $in: [first.id, second.id]
142
+ }
143
+ }
144
+ });
145
+ assert(ids.length === 2);
146
+
147
+ const idNin = await svc.query(SimpleList, {
148
+ where: {
149
+ id: {
150
+ $nin: ['a', 'b']
151
+ }
152
+ }
153
+ });
154
+ assert(idNin.length === 2);
114
155
  }
115
156
 
116
157
  @Test('verify all operators')
@@ -192,7 +233,6 @@ export abstract class ModelQuerySuite extends BaseModelSuite<ModelQuerySupport &
192
233
  assert(all[0].age >= all[1].age);
193
234
  }
194
235
 
195
-
196
236
  @Test('Test within')
197
237
  async testWithin() {
198
238
  if (!this.supportsGeo) {
@@ -240,7 +280,6 @@ export abstract class ModelQuerySuite extends BaseModelSuite<ModelQuerySupport &
240
280
  assert(rad.length > 0);
241
281
  }
242
282
 
243
-
244
283
  @Test()
245
284
  async verifyNestedQuery() {
246
285
  const service = await this.service;
@@ -294,7 +333,6 @@ export abstract class ModelQuerySuite extends BaseModelSuite<ModelQuerySupport &
294
333
  });
295
334
  assert(simple === 5);
296
335
 
297
-
298
336
  const simple2 = await service.queryCount(Aged, {
299
337
  where: {
300
338
  createdAt: {
@@ -304,7 +342,6 @@ export abstract class ModelQuerySuite extends BaseModelSuite<ModelQuerySupport &
304
342
  });
305
343
  assert(simple2 === 6);
306
344
 
307
-
308
345
  const simple3 = await service.queryCount(Aged, {
309
346
  where: {
310
347
  createdAt: {