@travetto/model-query 8.0.7 → 8.0.8
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/package.json +1 -1
- package/src/util/suggest.ts +1 -1
- package/support/test/facet.ts +40 -7
package/package.json
CHANGED
package/src/util/suggest.ts
CHANGED
|
@@ -99,7 +99,7 @@ export class ModelQuerySuggestUtil {
|
|
|
99
99
|
}
|
|
100
100
|
if (Array.isArray(resultValue)) {
|
|
101
101
|
out.push(...resultValue.filter(item => pattern.test(item)).map((item: string) => [item, transform(item, result)] as const));
|
|
102
|
-
} else if (typeof resultValue === 'string') {
|
|
102
|
+
} else if (typeof resultValue === 'string' && pattern.test(resultValue)) {
|
|
103
103
|
out.push([resultValue, transform(resultValue, result)]);
|
|
104
104
|
}
|
|
105
105
|
}
|
package/support/test/facet.ts
CHANGED
|
@@ -6,7 +6,7 @@ import { Suite, Test } from '@travetto/test';
|
|
|
6
6
|
import { BaseModelSuite } from '@travetto/model/support/test/base.ts';
|
|
7
7
|
|
|
8
8
|
import type { ModelQueryFacetSupport } from '../../src/types/facet.ts';
|
|
9
|
-
import { Person } from './model.ts';
|
|
9
|
+
import { Person, WithNestedLists, WithNestedNestedLists } from './model.ts';
|
|
10
10
|
|
|
11
11
|
const pick = <T>(arr: T[] | readonly T[]): T => arr[Math.trunc(Math.random() * arr.length)]!;
|
|
12
12
|
|
|
@@ -33,12 +33,12 @@ export abstract class ModelQueryFacetSuite extends BaseModelSuite<ModelQueryFace
|
|
|
33
33
|
})
|
|
34
34
|
);
|
|
35
35
|
|
|
36
|
-
const
|
|
36
|
+
const service = await this.service;
|
|
37
37
|
const saved = await this.saveAll(Person, people);
|
|
38
38
|
|
|
39
39
|
assert(saved === 50);
|
|
40
40
|
|
|
41
|
-
const results = await
|
|
41
|
+
const results = await service.facetByQuery(Person, 'gender');
|
|
42
42
|
|
|
43
43
|
assert(results.length === 2);
|
|
44
44
|
assert(results[0].count >= results[1].count);
|
|
@@ -59,20 +59,53 @@ export abstract class ModelQueryFacetSuite extends BaseModelSuite<ModelQueryFace
|
|
|
59
59
|
names[el.name!] = (names[el.name!] || 0) + 1;
|
|
60
60
|
}
|
|
61
61
|
|
|
62
|
-
const nameFacet = await
|
|
62
|
+
const nameFacet = await service.facetByQuery(Person, 'name');
|
|
63
63
|
assert(Object.keys(names).length === nameFacet.length);
|
|
64
64
|
|
|
65
|
-
const limitedResults = await
|
|
65
|
+
const limitedResults = await service.facetByQuery(Person, 'gender', { limit: 1 });
|
|
66
66
|
assert(limitedResults.length === 1);
|
|
67
67
|
assert(limitedResults[0].count === Math.max(genders.m, genders.f));
|
|
68
68
|
|
|
69
|
-
const offsetGender = await
|
|
69
|
+
const offsetGender = await service.facetByQuery(Person, 'gender', { limit: 1, offset: 1 });
|
|
70
70
|
assert(offsetGender.length === 1);
|
|
71
71
|
assert(offsetGender[0].count === Math.min(genders.m, genders.f));
|
|
72
72
|
assert(offsetGender[0].key !== limitedResults[0].key);
|
|
73
73
|
|
|
74
|
-
const topNames = await
|
|
74
|
+
const topNames = await service.facetByQuery(Person, 'name', { limit: 5 });
|
|
75
75
|
assert(topNames.length === Math.min(5, Object.keys(names).length));
|
|
76
76
|
assert(topNames[0].count >= (topNames[1]?.count ?? 0));
|
|
77
77
|
}
|
|
78
|
+
|
|
79
|
+
@Test('verify string array faceting')
|
|
80
|
+
async testFacetStringArray() {
|
|
81
|
+
const service = await this.service;
|
|
82
|
+
await this.saveAll(WithNestedLists, [
|
|
83
|
+
WithNestedLists.from({ tags: ['apple', 'banana', 'apricot'] }),
|
|
84
|
+
WithNestedLists.from({ tags: ['apple', 'blueberry'] }),
|
|
85
|
+
WithNestedLists.from({ tags: ['apple', 'banana'] })
|
|
86
|
+
]);
|
|
87
|
+
|
|
88
|
+
const tagFacets = await service.facetByQuery(WithNestedLists, 'tags');
|
|
89
|
+
assert(tagFacets.length === 4);
|
|
90
|
+
assert(tagFacets[0].key === 'apple' && tagFacets[0].count === 3);
|
|
91
|
+
assert(tagFacets[1].key === 'banana' && tagFacets[1].count === 2);
|
|
92
|
+
|
|
93
|
+
const limitedFacets = await service.facetByQuery(WithNestedLists, 'tags', { limit: 2 });
|
|
94
|
+
assert(limitedFacets.length === 2);
|
|
95
|
+
assert(limitedFacets[0].key === 'apple' && limitedFacets[0].count === 3);
|
|
96
|
+
assert(limitedFacets[1].key === 'banana' && limitedFacets[1].count === 2);
|
|
97
|
+
|
|
98
|
+
const offsetFacets = await service.facetByQuery(WithNestedLists, 'tags', { limit: 2, offset: 1 });
|
|
99
|
+
assert(offsetFacets.length === 2);
|
|
100
|
+
assert(offsetFacets[0].key === 'banana' && offsetFacets[0].count === 2);
|
|
101
|
+
|
|
102
|
+
await this.saveAll(WithNestedNestedLists, [
|
|
103
|
+
WithNestedNestedLists.from({ sub: { names: ['alex', 'amber'] } }),
|
|
104
|
+
WithNestedNestedLists.from({ sub: { names: ['alex', 'avocado'] } })
|
|
105
|
+
]);
|
|
106
|
+
|
|
107
|
+
const nestedFacets = await service.facetByQuery(WithNestedNestedLists, 'sub.names');
|
|
108
|
+
assert(nestedFacets.length === 3);
|
|
109
|
+
assert(nestedFacets[0].key === 'alex' && nestedFacets[0].count === 2);
|
|
110
|
+
}
|
|
78
111
|
}
|