@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 +1 -1
- package/package.json +5 -5
- package/src/internal/service/query.ts +12 -2
- package/src/verifier.ts +0 -1
- package/support/test/crud.ts +0 -2
- package/support/test/query.ts +51 -14
package/LICENSE
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@travetto/model-query",
|
|
3
|
-
"version": "5.0.
|
|
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.
|
|
30
|
-
"@travetto/model": "^5.0.
|
|
31
|
-
"@travetto/schema": "^5.0.
|
|
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.
|
|
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)
|
|
35
|
-
|
|
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
package/support/test/crud.ts
CHANGED
|
@@ -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;
|
package/support/test/query.ts
CHANGED
|
@@ -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' } }), /
|
|
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: {
|