@travetto/model-query 5.0.0 → 5.0.1
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/README.md +3 -3
- package/package.json +5 -5
- package/src/internal/service/common.ts +5 -16
- package/src/service/crud.ts +3 -3
- package/support/test/crud.ts +7 -7
- package/support/test/polymorphism.ts +1 -1
package/README.md
CHANGED
|
@@ -57,14 +57,14 @@ export interface ModelQueryCrudSupport extends ModelCrudSupport, ModelQuerySuppo
|
|
|
57
57
|
* @param data The data
|
|
58
58
|
* @param query The additional query to validate
|
|
59
59
|
*/
|
|
60
|
-
|
|
60
|
+
updateByQuery<T extends ModelType>(cls: Class<T>, data: T, query: ModelQuery<T>): Promise<T>;
|
|
61
61
|
/**
|
|
62
|
-
* Update
|
|
62
|
+
* Update all with partial data, by query
|
|
63
63
|
* @param cls The model class
|
|
64
64
|
* @param query The query to search for
|
|
65
65
|
* @param data The partial data
|
|
66
66
|
*/
|
|
67
|
-
|
|
67
|
+
updatePartialByQuery<T extends ModelType>(cls: Class<T>, query: ModelQuery<T>, data: Partial<T>): Promise<number>;
|
|
68
68
|
/**
|
|
69
69
|
* Delete all by query
|
|
70
70
|
* @param cls The model class
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@travetto/model-query",
|
|
3
|
-
"version": "5.0.
|
|
3
|
+
"version": "5.0.1",
|
|
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.1",
|
|
30
|
+
"@travetto/model": "^5.0.1",
|
|
31
|
+
"@travetto/schema": "^5.0.1"
|
|
32
32
|
},
|
|
33
33
|
"peerDependencies": {
|
|
34
|
-
"@travetto/test": "^5.0.
|
|
34
|
+
"@travetto/test": "^5.0.1"
|
|
35
35
|
},
|
|
36
36
|
"peerDependenciesMeta": {
|
|
37
37
|
"@travetto/test": {
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { hasFunction } from '@travetto/runtime';
|
|
1
2
|
import type { ModelQueryCrudSupport } from '../../service/crud';
|
|
2
3
|
import type { ModelQueryFacetSupport } from '../../service/facet';
|
|
3
4
|
import type { ModelQuerySupport } from '../../service/query';
|
|
@@ -10,32 +11,20 @@ export class ModelQuerySuggestSupportTarget { }
|
|
|
10
11
|
|
|
11
12
|
/**
|
|
12
13
|
* Type guard for determining if service supports query operations
|
|
13
|
-
* @param o
|
|
14
14
|
*/
|
|
15
|
-
export
|
|
16
|
-
return !!o && typeof o === 'object' && 'query' in o && !!o.query;
|
|
17
|
-
}
|
|
15
|
+
export const isQuerySupported = hasFunction<ModelQuerySupport>('query');
|
|
18
16
|
|
|
19
17
|
/**
|
|
20
18
|
* Type guard for determining if service supports query crud operations
|
|
21
|
-
* @param o
|
|
22
19
|
*/
|
|
23
|
-
export
|
|
24
|
-
return !!o && typeof o === 'object' && 'deleteByQuery' in o && !!o.deleteByQuery;
|
|
25
|
-
}
|
|
20
|
+
export const isQueryCrudSupported = hasFunction<ModelQueryCrudSupport>('deleteByQuery');
|
|
26
21
|
|
|
27
22
|
/**
|
|
28
23
|
* Type guard for determining if service supports query facet operations
|
|
29
|
-
* @param o
|
|
30
24
|
*/
|
|
31
|
-
export
|
|
32
|
-
return !!o && typeof o === 'object' && 'facet' in o && !!o.facet;
|
|
33
|
-
}
|
|
25
|
+
export const isQueryFacetSupported = hasFunction<ModelQueryFacetSupport>('facet');
|
|
34
26
|
|
|
35
27
|
/**
|
|
36
28
|
* Type guard for determining if service supports query suggest operations
|
|
37
|
-
* @param o
|
|
38
29
|
*/
|
|
39
|
-
export
|
|
40
|
-
return !!o && typeof o === 'object' && 'suggest' in o && !!o.suggest;
|
|
41
|
-
}
|
|
30
|
+
export const isQuerySuggestSupported = hasFunction<ModelQuerySuggestSupport>('suggest');
|
package/src/service/crud.ts
CHANGED
|
@@ -15,14 +15,14 @@ export interface ModelQueryCrudSupport extends ModelCrudSupport, ModelQuerySuppo
|
|
|
15
15
|
* @param data The data
|
|
16
16
|
* @param query The additional query to validate
|
|
17
17
|
*/
|
|
18
|
-
|
|
18
|
+
updateByQuery<T extends ModelType>(cls: Class<T>, data: T, query: ModelQuery<T>): Promise<T>;
|
|
19
19
|
/**
|
|
20
|
-
* Update
|
|
20
|
+
* Update all with partial data, by query
|
|
21
21
|
* @param cls The model class
|
|
22
22
|
* @param query The query to search for
|
|
23
23
|
* @param data The partial data
|
|
24
24
|
*/
|
|
25
|
-
|
|
25
|
+
updatePartialByQuery<T extends ModelType>(cls: Class<T>, query: ModelQuery<T>, data: Partial<T>): Promise<number>;
|
|
26
26
|
/**
|
|
27
27
|
* Delete all by query
|
|
28
28
|
* @param cls The model class
|
package/support/test/crud.ts
CHANGED
|
@@ -19,7 +19,7 @@ export abstract class ModelQueryCrudSuite extends BaseModelSuite<ModelQueryCrudS
|
|
|
19
19
|
assert(todo1.id);
|
|
20
20
|
assert(todo1.version === 0);
|
|
21
21
|
|
|
22
|
-
const todo1v2 = await svc.
|
|
22
|
+
const todo1v2 = await svc.updateByQuery(Todo, Todo.from({
|
|
23
23
|
id: todo1.id,
|
|
24
24
|
text: `${todo1.text}!!`,
|
|
25
25
|
version: todo1.version + 1
|
|
@@ -29,7 +29,7 @@ export abstract class ModelQueryCrudSuite extends BaseModelSuite<ModelQueryCrudS
|
|
|
29
29
|
assert(todo1v2.version > todo1.version);
|
|
30
30
|
|
|
31
31
|
await assert.rejects(
|
|
32
|
-
() => svc.
|
|
32
|
+
() => svc.updateByQuery(Todo, Todo.from({
|
|
33
33
|
id: todo1.id,
|
|
34
34
|
text: `${todo1.text}!!`,
|
|
35
35
|
version: todo1.version + 1
|
|
@@ -40,7 +40,7 @@ export abstract class ModelQueryCrudSuite extends BaseModelSuite<ModelQueryCrudS
|
|
|
40
40
|
|
|
41
41
|
const todo2 = await svc.create(Todo, Todo.from({ text: 'bob2' }));
|
|
42
42
|
|
|
43
|
-
const result = await svc.
|
|
43
|
+
const result = await svc.updateByQuery(Todo, Todo.from({
|
|
44
44
|
id: todo2.id,
|
|
45
45
|
text: `${todo1.text}!!`,
|
|
46
46
|
version: todo1.version + 1
|
|
@@ -60,7 +60,7 @@ export abstract class ModelQueryCrudSuite extends BaseModelSuite<ModelQueryCrudS
|
|
|
60
60
|
|
|
61
61
|
const todo1v = ['a', 'b', 'c', 'd', 'e'].map(x => Todo.from({ ...todo1, text: `${todo1.text}-${x}`, version: todo1.version + 1 }));
|
|
62
62
|
|
|
63
|
-
const promises = todo1v.map(x => svc.
|
|
63
|
+
const promises = todo1v.map(x => svc.updateByQuery(Todo, x, { where: { version: todo1.version } }));
|
|
64
64
|
|
|
65
65
|
const results = await Promise.allSettled(promises);
|
|
66
66
|
const rejected = results.filter(x => x.status === 'rejected');
|
|
@@ -81,7 +81,7 @@ export abstract class ModelQueryCrudSuite extends BaseModelSuite<ModelQueryCrudS
|
|
|
81
81
|
assert.deepStrictEqual(todo2, succeeded.value);
|
|
82
82
|
|
|
83
83
|
const promises2 = ['a', 'b', 'c', 'd', 'e'].map(x => Todo.from({ ...todo2, text: `${todo2.text}-${x}`, version: todo2.version + 2 }));
|
|
84
|
-
const results2 = await Promise.allSettled(promises2.map(x => svc.
|
|
84
|
+
const results2 = await Promise.allSettled(promises2.map(x => svc.updateByQuery(Todo, x, { where: { version: todo2.version + 1 } })));
|
|
85
85
|
for (const el of results2) {
|
|
86
86
|
assert(el.status === 'rejected');
|
|
87
87
|
assert(el.reason instanceof NotFoundError);
|
|
@@ -137,7 +137,7 @@ export abstract class ModelQueryCrudSuite extends BaseModelSuite<ModelQueryCrudS
|
|
|
137
137
|
|
|
138
138
|
assert(await svc.queryCount(Person, { where: { gender: 'm' } }) === 5);
|
|
139
139
|
|
|
140
|
-
const c = await svc.
|
|
140
|
+
const c = await svc.updatePartialByQuery(Person, { where: { age: { $gt: 3 } } }, { gender: 'f' });
|
|
141
141
|
|
|
142
142
|
assert((await svc.query(Person, {}))[0].address.street1 === 'street1');
|
|
143
143
|
|
|
@@ -145,7 +145,7 @@ export abstract class ModelQueryCrudSuite extends BaseModelSuite<ModelQueryCrudS
|
|
|
145
145
|
|
|
146
146
|
assert(await svc.queryCount(Person, { where: { gender: 'm' } }) === 3);
|
|
147
147
|
|
|
148
|
-
const c2 = await svc.
|
|
148
|
+
const c2 = await svc.updatePartialByQuery(Person, { where: { gender: 'm' } }, { gender: 'f' });
|
|
149
149
|
|
|
150
150
|
assert(c2 === 3);
|
|
151
151
|
|
|
@@ -55,7 +55,7 @@ export abstract class ModelQueryPolymorphismSuite extends BaseModelSuite<ModelQu
|
|
|
55
55
|
await this.saveAll(Worker, [doc, doc2, fire, eng]);
|
|
56
56
|
assert(await this.getSize(Worker) === 4);
|
|
57
57
|
|
|
58
|
-
const c = await svc.
|
|
58
|
+
const c = await svc.updatePartialByQuery(Doctor, { where: { specialty: 'feet' } }, { specialty: 'eyes' });
|
|
59
59
|
assert(c === 1);
|
|
60
60
|
|
|
61
61
|
assert((await svc.queryCount(Doctor, { where: { specialty: 'eyes' } })) === 2);
|