@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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@travetto/model-query",
3
- "version": "8.0.7",
3
+ "version": "8.0.8",
4
4
  "description": "Datastore abstraction for advanced query support.",
5
5
  "keywords": [
6
6
  "datastore",
@@ -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
  }
@@ -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 svc = await this.service;
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 svc.facetByQuery(Person, 'gender');
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 svc.facetByQuery(Person, 'name');
62
+ const nameFacet = await service.facetByQuery(Person, 'name');
63
63
  assert(Object.keys(names).length === nameFacet.length);
64
64
 
65
- const limitedResults = await svc.facetByQuery(Person, 'gender', { limit: 1 });
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 svc.facetByQuery(Person, 'gender', { limit: 1, offset: 1 });
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 svc.facetByQuery(Person, 'name', { limit: 5 });
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
  }