@travetto/model-query 8.0.0-alpha.14 → 8.0.0-alpha.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/README.md +3 -3
- package/package.json +5 -5
- package/src/model/where-clause.ts +2 -9
- package/src/types/facet.ts +1 -1
- package/src/types/suggest.ts +2 -2
- package/src/util/facet.ts +1 -1
- package/src/util/suggest.ts +1 -1
- package/support/test/facet.ts +2 -2
- package/support/test/polymorphism.ts +11 -11
- package/support/test/suggest.ts +4 -4
package/README.md
CHANGED
|
@@ -86,7 +86,7 @@ export interface ModelQueryFacetSupport extends ModelQuerySupport {
|
|
|
86
86
|
* @param field The field to facet on
|
|
87
87
|
* @param query Additional query filtering
|
|
88
88
|
*/
|
|
89
|
-
|
|
89
|
+
facetByQuery<T extends ModelType>(cls: Class<T>, field: ValidStringFields<T>, query?: ModelQuery<T>): Promise<ModelQueryFacet[]>;
|
|
90
90
|
}
|
|
91
91
|
```
|
|
92
92
|
|
|
@@ -104,7 +104,7 @@ export interface ModelQuerySuggestSupport extends ModelQuerySupport {
|
|
|
104
104
|
* @param prefix The search prefix for the given field
|
|
105
105
|
* @param query A query to filter the search on, in addition to the prefix
|
|
106
106
|
*/
|
|
107
|
-
|
|
107
|
+
suggestByQuery<T extends ModelType>(cls: Class<T>, field: ValidStringFields<T>, prefix?: string, query?: PageableModelQuery<T>): Promise<T[]>;
|
|
108
108
|
/**
|
|
109
109
|
* Suggest distinct values for a given cls and a given field
|
|
110
110
|
*
|
|
@@ -113,7 +113,7 @@ export interface ModelQuerySuggestSupport extends ModelQuerySupport {
|
|
|
113
113
|
* @param prefix The search prefix for the given field
|
|
114
114
|
* @param query A query to filter the search on, in addition to the prefix
|
|
115
115
|
*/
|
|
116
|
-
|
|
116
|
+
suggestValuesByQuery<T extends ModelType>(cls: Class<T>, field: ValidStringFields<T>, prefix?: string, query?: PageableModelQuery<T>): Promise<string[]>;
|
|
117
117
|
}
|
|
118
118
|
```
|
|
119
119
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@travetto/model-query",
|
|
3
|
-
"version": "8.0.0-alpha.
|
|
3
|
+
"version": "8.0.0-alpha.16",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Datastore abstraction for advanced query support.",
|
|
6
6
|
"keywords": [
|
|
@@ -27,12 +27,12 @@
|
|
|
27
27
|
"directory": "module/model-query"
|
|
28
28
|
},
|
|
29
29
|
"dependencies": {
|
|
30
|
-
"@travetto/di": "^8.0.0-alpha.
|
|
31
|
-
"@travetto/model": "^8.0.0-alpha.
|
|
32
|
-
"@travetto/schema": "^8.0.0-alpha.
|
|
30
|
+
"@travetto/di": "^8.0.0-alpha.14",
|
|
31
|
+
"@travetto/model": "^8.0.0-alpha.15",
|
|
32
|
+
"@travetto/schema": "^8.0.0-alpha.15"
|
|
33
33
|
},
|
|
34
34
|
"peerDependencies": {
|
|
35
|
-
"@travetto/test": "^8.0.0-alpha.
|
|
35
|
+
"@travetto/test": "^8.0.0-alpha.14"
|
|
36
36
|
},
|
|
37
37
|
"peerDependenciesMeta": {
|
|
38
38
|
"@travetto/test": {
|
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
import type { Primitive, ValidFields, TimeSpan } from '@travetto/runtime';
|
|
1
|
+
import type { Primitive, ValidFields, TimeSpan, ValidTypedFields } from '@travetto/runtime';
|
|
2
2
|
import type { Point } from '@travetto/schema';
|
|
3
3
|
|
|
4
4
|
export type QueryPrimitive = Primitive | Date | Point;
|
|
5
5
|
export type QueryPrimitiveArray = QueryPrimitive[];
|
|
6
6
|
export type DistanceUnit = 'mi' | 'm' | 'km' | 'ft' | 'rad';
|
|
7
7
|
export type RetainQueryPrimitiveFields<T> = Pick<T, ValidFields<T, QueryPrimitive>>;
|
|
8
|
+
export type ValidStringFields<T> = ValidTypedFields<T, String | string | string[] | String[] | undefined>;
|
|
8
9
|
|
|
9
10
|
type General<T> = {
|
|
10
11
|
$eq?: T;
|
|
@@ -67,11 +68,3 @@ export type WhereClauseRaw<T> =
|
|
|
67
68
|
* Full where clause, typed against the input type T
|
|
68
69
|
*/
|
|
69
70
|
export type WhereClause<T> = WhereClauseRaw<RetainQueryPrimitiveFields<T>>;
|
|
70
|
-
|
|
71
|
-
/**
|
|
72
|
-
* Provides all the valid string type fields from a given type T
|
|
73
|
-
*/
|
|
74
|
-
export type ValidStringFields<T> = {
|
|
75
|
-
[K in Extract<keyof T, string>]:
|
|
76
|
-
(T[K] extends (String | string | string[] | String[] | undefined) ? K : never)
|
|
77
|
-
}[Extract<keyof T, string>];
|
package/src/types/facet.ts
CHANGED
|
@@ -18,5 +18,5 @@ export interface ModelQueryFacetSupport extends ModelQuerySupport {
|
|
|
18
18
|
* @param field The field to facet on
|
|
19
19
|
* @param query Additional query filtering
|
|
20
20
|
*/
|
|
21
|
-
|
|
21
|
+
facetByQuery<T extends ModelType>(cls: Class<T>, field: ValidStringFields<T>, query?: ModelQuery<T>): Promise<ModelQueryFacet[]>;
|
|
22
22
|
}
|
package/src/types/suggest.ts
CHANGED
|
@@ -18,7 +18,7 @@ export interface ModelQuerySuggestSupport extends ModelQuerySupport {
|
|
|
18
18
|
* @param prefix The search prefix for the given field
|
|
19
19
|
* @param query A query to filter the search on, in addition to the prefix
|
|
20
20
|
*/
|
|
21
|
-
|
|
21
|
+
suggestByQuery<T extends ModelType>(cls: Class<T>, field: ValidStringFields<T>, prefix?: string, query?: PageableModelQuery<T>): Promise<T[]>;
|
|
22
22
|
/**
|
|
23
23
|
* Suggest distinct values for a given cls and a given field
|
|
24
24
|
*
|
|
@@ -27,5 +27,5 @@ export interface ModelQuerySuggestSupport extends ModelQuerySupport {
|
|
|
27
27
|
* @param prefix The search prefix for the given field
|
|
28
28
|
* @param query A query to filter the search on, in addition to the prefix
|
|
29
29
|
*/
|
|
30
|
-
|
|
30
|
+
suggestValuesByQuery<T extends ModelType>(cls: Class<T>, field: ValidStringFields<T>, prefix?: string, query?: PageableModelQuery<T>): Promise<string[]>;
|
|
31
31
|
}
|
package/src/util/facet.ts
CHANGED
package/src/util/suggest.ts
CHANGED
|
@@ -14,7 +14,7 @@ export class ModelQuerySuggestUtil {
|
|
|
14
14
|
/**
|
|
15
15
|
* Type guard for determining if service supports query suggest operations
|
|
16
16
|
*/
|
|
17
|
-
static isSupported = hasFunction<ModelQuerySuggestSupport>('
|
|
17
|
+
static isSupported = hasFunction<ModelQuerySuggestSupport>('suggestByQuery');
|
|
18
18
|
|
|
19
19
|
/**
|
|
20
20
|
* Build regex for suggesting
|
package/support/test/facet.ts
CHANGED
|
@@ -36,7 +36,7 @@ export abstract class ModelQueryFacetSuite extends BaseModelSuite<ModelQueryFace
|
|
|
36
36
|
|
|
37
37
|
assert(saved === 50);
|
|
38
38
|
|
|
39
|
-
const results = await svc.
|
|
39
|
+
const results = await svc.facetByQuery(Person, 'gender');
|
|
40
40
|
|
|
41
41
|
assert(results.length === 2);
|
|
42
42
|
assert(results[0].count >= results[1].count);
|
|
@@ -51,7 +51,7 @@ export abstract class ModelQueryFacetSuite extends BaseModelSuite<ModelQueryFace
|
|
|
51
51
|
names[el.name!] = (names[el.name!] || 0) + 1;
|
|
52
52
|
}
|
|
53
53
|
|
|
54
|
-
const nameFacet = await svc.
|
|
54
|
+
const nameFacet = await svc.facetByQuery(Person, 'name');
|
|
55
55
|
assert(Object.keys(names).length === nameFacet.length);
|
|
56
56
|
}
|
|
57
57
|
}
|
|
@@ -83,15 +83,15 @@ export abstract class ModelQueryPolymorphismSuite extends BaseModelSuite<ModelQu
|
|
|
83
83
|
await this.saveAll(Worker, [doc, doc2, fire, eng]);
|
|
84
84
|
assert(await this.getSize(Worker) === 4);
|
|
85
85
|
|
|
86
|
-
assert((await svc.
|
|
87
|
-
assert((await svc.
|
|
88
|
-
assert((await svc.
|
|
89
|
-
assert((await svc.
|
|
90
|
-
assert((await svc.
|
|
91
|
-
assert((await svc.
|
|
92
|
-
|
|
93
|
-
assert((await svc.
|
|
94
|
-
assert((await svc.
|
|
86
|
+
assert((await svc.suggestByQuery(Worker, 'name', '')).length === 4);
|
|
87
|
+
assert((await svc.suggestValuesByQuery(Worker, 'name', '')).length === 4);
|
|
88
|
+
assert((await svc.suggestByQuery(Worker, 'name', 'r')).length === 1);
|
|
89
|
+
assert((await svc.suggestByQuery(Worker, 'name', 'r'))[0] instanceof Firefighter);
|
|
90
|
+
assert((await svc.suggestByQuery(Doctor, 'name', 'r')).length === 0);
|
|
91
|
+
assert((await svc.suggestByQuery(Firefighter, 'name', 'r')).length === 1);
|
|
92
|
+
|
|
93
|
+
assert((await svc.suggestValuesByQuery(Firefighter, 'name', 'r')).length === 1);
|
|
94
|
+
assert((await svc.suggestValuesByQuery(Firefighter, 'name', 'r'))[0] === 'rob');
|
|
95
95
|
}
|
|
96
96
|
|
|
97
97
|
@Test({ skip: ModelQueryPolymorphismSuite.ifNot(ModelQueryFacetUtil.isSupported) })
|
|
@@ -107,8 +107,8 @@ export abstract class ModelQueryPolymorphismSuite extends BaseModelSuite<ModelQu
|
|
|
107
107
|
await this.saveAll(Worker, [doc, doc2, fire, eng]);
|
|
108
108
|
assert(await this.getSize(Worker) === 4);
|
|
109
109
|
|
|
110
|
-
assert((await svc.
|
|
111
|
-
const docFacet = await svc.
|
|
110
|
+
assert((await svc.facetByQuery(Worker, 'name')).length === 4);
|
|
111
|
+
const docFacet = await svc.facetByQuery(Doctor, 'specialty');
|
|
112
112
|
assert.deepStrictEqual(docFacet, [{ count: 2, key: 'eyes' }]);
|
|
113
113
|
}
|
|
114
114
|
}
|
package/support/test/suggest.ts
CHANGED
|
@@ -33,13 +33,13 @@ export abstract class ModelQuerySuggestSuite extends BaseModelSuite<ModelQuerySu
|
|
|
33
33
|
|
|
34
34
|
await this.#loadPeople();
|
|
35
35
|
|
|
36
|
-
let suggested = await service.
|
|
36
|
+
let suggested = await service.suggestValuesByQuery(Person, 'name', 'bo');
|
|
37
37
|
assert(suggested.length === 2);
|
|
38
38
|
|
|
39
|
-
suggested = await service.
|
|
39
|
+
suggested = await service.suggestValuesByQuery(Person, 'name', 'b');
|
|
40
40
|
assert(suggested.length === 3);
|
|
41
41
|
|
|
42
|
-
suggested = await service.
|
|
42
|
+
suggested = await service.suggestValuesByQuery(Person, 'name', 'b', {
|
|
43
43
|
where: {
|
|
44
44
|
address: {
|
|
45
45
|
street2: {
|
|
@@ -57,7 +57,7 @@ export abstract class ModelQuerySuggestSuite extends BaseModelSuite<ModelQuerySu
|
|
|
57
57
|
|
|
58
58
|
await this.#loadPeople();
|
|
59
59
|
|
|
60
|
-
const suggestedEntities = await service.
|
|
60
|
+
const suggestedEntities = await service.suggestByQuery(Person, 'name', 'bo');
|
|
61
61
|
|
|
62
62
|
assert(suggestedEntities.length === 2);
|
|
63
63
|
assert(suggestedEntities[0].name === 'Bo');
|