@lde/search 0.41.2 → 0.42.0

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/dist/adapter.d.ts CHANGED
@@ -6,14 +6,14 @@
6
6
  * deployment author declaring a schema and running searches needs none of
7
7
  * this; the main entry point carries that (small) authoring surface.
8
8
  */
9
- export { assertTypeInSchema, physicalFields, irAlias, displayFieldName, displayFieldPattern, displayLangOf, searchableFields, facetableFields, filterableFields, sortableFields, outputFields, isInternalField, isInlineReference, nestedReferenceType, nestedFieldName, localLookupTargetsOf, referencedTargetsOf, storedTargetOf, TARGET_FIELD, holdsNoIds, identityFieldOf, identityFieldName, inheritedFacetPolicies, referenceFields, referenceTypeNamed, endpointFieldOf, rootTypeNamed, inlineFramingDepth, fieldNamed, datasetField, ID_FIELD, AND_KEY, OR_KEY, labelFieldOf, labelFieldNameOf, labelSourceNamesOf, labelTargetNamesOf, literalKindOf, documentKeyOf, DEFAULT_LABEL_FIELD, isRangeFacet, isBinnedRangeFacet, storedFacetRanges, isAbsoluteIri, isoToUnixSeconds, storedRangeBound, lastSecondOf, unixSecondsToIso, isDatePrecision, } from './schema.js';
10
- export type { PhysicalFields, DatePrecision, StoredDate } from './schema.js';
9
+ export { assertTypeInSchema, physicalFields, irAlias, displayFieldName, displayFieldPattern, displayLangOf, searchableFields, facetableFields, filterableFields, sortableFields, outputFields, isInternalField, isInlineReference, nestedReferenceType, nestedFieldName, localLookupTargetsOf, referencedTargetsOf, storedTargetOf, TARGET_FIELD, facetNamed, facetsOf, holdsNoIds, identityFieldOf, identityFieldName, inheritedFacetPolicies, referenceFields, referenceTypeNamed, endpointFieldOf, rootTypeNamed, inlineFramingDepth, fieldNamed, datasetField, ID_FIELD, AND_KEY, OR_KEY, labelFieldOf, labelFieldNameOf, labelSourceNamesOf, labelTargetNamesOf, literalKindOf, documentKeyOf, DEFAULT_LABEL_FIELD, isRangeFacet, isBinnedRangeFacet, storedFacetRanges, isAbsoluteIri, isoToUnixSeconds, storedRangeBound, lastSecondOf, unixSecondsToIso, isDatePrecision, } from './schema.js';
10
+ export type { FacetDeclaration, PhysicalFields, DatePrecision, StoredDate, } from './schema.js';
11
11
  export { missingRequiredFields } from './project.js';
12
12
  export { physicalNameTokens } from './physical-name.js';
13
13
  export { matchLanguage } from './language.js';
14
14
  export { joinGraph, MAX_JOIN_DEPTH } from './join-graph.js';
15
15
  export type { JoinGraph } from './join-graph.js';
16
- export { filterOperatorFor, filterOperator, filterOn, isWelded, isUnsatisfiable, facetSearches, validateQuery, assertValidQuery, resolvePath, pageForOffset, } from './query.js';
16
+ export { filterOperatorFor, filterOperator, filterOn, selectionOf, isWelded, isUnsatisfiable, facetSearches, validateQuery, assertValidQuery, resolvePath, pageForOffset, } from './query.js';
17
17
  export type { FacetSearch, FilterOperator, QueryIssue, ResolvedPath, PathFailure, } from './query.js';
18
18
  export type { RebuildRequests } from './rebuild.js';
19
19
  //# sourceMappingURL=adapter.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EACL,kBAAkB,EAClB,cAAc,EACd,OAAO,EACP,gBAAgB,EAChB,mBAAmB,EACnB,aAAa,EACb,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,YAAY,EACZ,eAAe,EACf,iBAAiB,EACjB,mBAAmB,EACnB,eAAe,EACf,oBAAoB,EACpB,mBAAmB,EACnB,cAAc,EACd,YAAY,EACZ,UAAU,EACV,eAAe,EACf,iBAAiB,EACjB,sBAAsB,EACtB,eAAe,EACf,kBAAkB,EAClB,eAAe,EACf,aAAa,EACb,kBAAkB,EAClB,UAAU,EACV,YAAY,EACZ,QAAQ,EACR,OAAO,EACP,MAAM,EACN,YAAY,EACZ,gBAAgB,EAChB,kBAAkB,EAClB,kBAAkB,EAClB,aAAa,EACb,aAAa,EACb,mBAAmB,EACnB,YAAY,EACZ,kBAAkB,EAClB,iBAAiB,EACjB,aAAa,EACb,gBAAgB,EAChB,gBAAgB,EAChB,YAAY,EACZ,gBAAgB,EAChB,eAAe,GAChB,MAAM,aAAa,CAAC;AACrB,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC7E,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAC5D,YAAY,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EACL,iBAAiB,EACjB,cAAc,EACd,QAAQ,EACR,QAAQ,EACR,eAAe,EACf,aAAa,EACb,aAAa,EACb,gBAAgB,EAChB,WAAW,EACX,aAAa,GACd,MAAM,YAAY,CAAC;AACpB,YAAY,EACV,WAAW,EACX,cAAc,EACd,UAAU,EACV,YAAY,EACZ,WAAW,GACZ,MAAM,YAAY,CAAC;AACpB,YAAY,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EACL,kBAAkB,EAClB,cAAc,EACd,OAAO,EACP,gBAAgB,EAChB,mBAAmB,EACnB,aAAa,EACb,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,YAAY,EACZ,eAAe,EACf,iBAAiB,EACjB,mBAAmB,EACnB,eAAe,EACf,oBAAoB,EACpB,mBAAmB,EACnB,cAAc,EACd,YAAY,EACZ,UAAU,EACV,QAAQ,EACR,UAAU,EACV,eAAe,EACf,iBAAiB,EACjB,sBAAsB,EACtB,eAAe,EACf,kBAAkB,EAClB,eAAe,EACf,aAAa,EACb,kBAAkB,EAClB,UAAU,EACV,YAAY,EACZ,QAAQ,EACR,OAAO,EACP,MAAM,EACN,YAAY,EACZ,gBAAgB,EAChB,kBAAkB,EAClB,kBAAkB,EAClB,aAAa,EACb,aAAa,EACb,mBAAmB,EACnB,YAAY,EACZ,kBAAkB,EAClB,iBAAiB,EACjB,aAAa,EACb,gBAAgB,EAChB,gBAAgB,EAChB,YAAY,EACZ,gBAAgB,EAChB,eAAe,GAChB,MAAM,aAAa,CAAC;AACrB,YAAY,EACV,gBAAgB,EAChB,cAAc,EACd,aAAa,EACb,UAAU,GACX,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAC5D,YAAY,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EACL,iBAAiB,EACjB,cAAc,EACd,QAAQ,EACR,WAAW,EACX,QAAQ,EACR,eAAe,EACf,aAAa,EACb,aAAa,EACb,gBAAgB,EAChB,WAAW,EACX,aAAa,GACd,MAAM,YAAY,CAAC;AACpB,YAAY,EACV,WAAW,EACX,cAAc,EACd,UAAU,EACV,YAAY,EACZ,WAAW,GACZ,MAAM,YAAY,CAAC;AACpB,YAAY,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC"}
package/dist/adapter.js CHANGED
@@ -6,9 +6,9 @@
6
6
  * deployment author declaring a schema and running searches needs none of
7
7
  * this; the main entry point carries that (small) authoring surface.
8
8
  */
9
- export { assertTypeInSchema, physicalFields, irAlias, displayFieldName, displayFieldPattern, displayLangOf, searchableFields, facetableFields, filterableFields, sortableFields, outputFields, isInternalField, isInlineReference, nestedReferenceType, nestedFieldName, localLookupTargetsOf, referencedTargetsOf, storedTargetOf, TARGET_FIELD, holdsNoIds, identityFieldOf, identityFieldName, inheritedFacetPolicies, referenceFields, referenceTypeNamed, endpointFieldOf, rootTypeNamed, inlineFramingDepth, fieldNamed, datasetField, ID_FIELD, AND_KEY, OR_KEY, labelFieldOf, labelFieldNameOf, labelSourceNamesOf, labelTargetNamesOf, literalKindOf, documentKeyOf, DEFAULT_LABEL_FIELD, isRangeFacet, isBinnedRangeFacet, storedFacetRanges, isAbsoluteIri, isoToUnixSeconds, storedRangeBound, lastSecondOf, unixSecondsToIso, isDatePrecision, } from './schema.js';
9
+ export { assertTypeInSchema, physicalFields, irAlias, displayFieldName, displayFieldPattern, displayLangOf, searchableFields, facetableFields, filterableFields, sortableFields, outputFields, isInternalField, isInlineReference, nestedReferenceType, nestedFieldName, localLookupTargetsOf, referencedTargetsOf, storedTargetOf, TARGET_FIELD, facetNamed, facetsOf, holdsNoIds, identityFieldOf, identityFieldName, inheritedFacetPolicies, referenceFields, referenceTypeNamed, endpointFieldOf, rootTypeNamed, inlineFramingDepth, fieldNamed, datasetField, ID_FIELD, AND_KEY, OR_KEY, labelFieldOf, labelFieldNameOf, labelSourceNamesOf, labelTargetNamesOf, literalKindOf, documentKeyOf, DEFAULT_LABEL_FIELD, isRangeFacet, isBinnedRangeFacet, storedFacetRanges, isAbsoluteIri, isoToUnixSeconds, storedRangeBound, lastSecondOf, unixSecondsToIso, isDatePrecision, } from './schema.js';
10
10
  export { missingRequiredFields } from './project.js';
11
11
  export { physicalNameTokens } from './physical-name.js';
12
12
  export { matchLanguage } from './language.js';
13
13
  export { joinGraph, MAX_JOIN_DEPTH } from './join-graph.js';
14
- export { filterOperatorFor, filterOperator, filterOn, isWelded, isUnsatisfiable, facetSearches, validateQuery, assertValidQuery, resolvePath, pageForOffset, } from './query.js';
14
+ export { filterOperatorFor, filterOperator, filterOn, selectionOf, isWelded, isUnsatisfiable, facetSearches, validateQuery, assertValidQuery, resolvePath, pageForOffset, } from './query.js';
package/dist/engine.d.ts CHANGED
@@ -128,7 +128,15 @@ export interface FacetExtent {
128
128
  */
129
129
  export type FacetFieldsOf<Type extends SearchType> = RootType extends Type ? string : Extract<Type['fields'][number], {
130
130
  readonly facetable: true;
131
- }>['name'];
131
+ }>['name'] | FacetedLeavesOf<Type['fields'][number]>;
132
+ /** The `‹reference›.‹leaf›` facet names an inline reference declares through
133
+ * its faceted leaves (`ref.facetedLeaves`). */
134
+ type FacetedLeavesOf<Field> = Field extends {
135
+ readonly name: infer Name extends string;
136
+ readonly ref: {
137
+ readonly facetedLeaves: readonly (infer Leaf extends string)[];
138
+ };
139
+ } ? `${Name}.${Leaf}` : never;
132
140
  /**
133
141
  * The output-field-name union of a search type – the keys a {@link ResultDocument}
134
142
  * can hold. Like {@link FacetFieldsOf}, degrades to `string` for a widened
@@ -246,4 +254,5 @@ export interface FacetBucket {
246
254
  */
247
255
  readonly is?: boolean;
248
256
  }
257
+ export {};
249
258
  //# sourceMappingURL=engine.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../src/project.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAGzC,OAAO,EAGL,KAAK,UAAU,EAChB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAyBL,KAAK,eAAe,EAIpB,KAAK,QAAQ,EAEb,KAAK,YAAY,EACjB,KAAK,UAAU,EAGhB,MAAM,aAAa,CAAC;AAUrB;;;;;;GAMG;AACH,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAEpD,+DAA+D;AAC/D,MAAM,MAAM,cAAc,GAAG;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,GAAG,aAAa,CAAC;AAE5D;;;;;;;;;;GAUG;AACH,MAAM,WAAW,iBAAkB,SAAQ,OAAO,CAChD,QAAQ,CAAC,MAAM,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC,CAC1C;IACC,4CAA4C;IAC5C,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B;;;;;;OAMG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,UAAU,EAAE,eAAe,KAAK,IAAI,CAAC;IAC9D;;;;;;;OAOG;IACH,QAAQ,CAAC,eAAe,CAAC,EAAE,cAAc,CAAC;CAC3C;AAED,qFAAqF;AACrF,MAAM,WAAW,eAAe;IAC9B;0CACsC;IACtC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,2DAA2D;IAC3D,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,2DAA2D;IAC3D,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;CACrB;AAKD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,UAAU,EAChB,UAAU,EAAE,UAAU,EACtB,MAAM,CAAC,EAAE,YAAY,EACrB,OAAO,GAAE,iBAAyC,GACjD,cAAc,CAkBhB;AAgMD;;;;;;;;;;;;GAYG;AACH,wBAAuB,YAAY,CACjC,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,EACrB,KAAK,EAAE,SAAS,MAAM,EAAE,EACxB,MAAM,EAAE,YAAY,EACpB,UAAU,EAAE,QAAQ,EACpB,OAAO,GAAE,iBAAyC,GACjD,aAAa,CAAC,cAAc,CAAC,CAc/B;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,aAAa,EACvB,UAAU,EAAE,UAAU,EACtB,MAAM,CAAC,EAAE,YAAY,GACpB,SAAS,MAAM,EAAE,CAmCnB"}
1
+ {"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../src/project.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAGzC,OAAO,EAGL,KAAK,UAAU,EAChB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EA0BL,KAAK,eAAe,EAIpB,KAAK,QAAQ,EAEb,KAAK,YAAY,EACjB,KAAK,UAAU,EAGhB,MAAM,aAAa,CAAC;AAUrB;;;;;;GAMG;AACH,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAEpD,+DAA+D;AAC/D,MAAM,MAAM,cAAc,GAAG;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,GAAG,aAAa,CAAC;AAE5D;;;;;;;;;;GAUG;AACH,MAAM,WAAW,iBAAkB,SAAQ,OAAO,CAChD,QAAQ,CAAC,MAAM,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC,CAC1C;IACC,4CAA4C;IAC5C,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B;;;;;;OAMG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,UAAU,EAAE,eAAe,KAAK,IAAI,CAAC;IAC9D;;;;;;;OAOG;IACH,QAAQ,CAAC,eAAe,CAAC,EAAE,cAAc,CAAC;CAC3C;AAED,qFAAqF;AACrF,MAAM,WAAW,eAAe;IAC9B;0CACsC;IACtC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,2DAA2D;IAC3D,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,2DAA2D;IAC3D,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;CACrB;AAKD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,UAAU,EAChB,UAAU,EAAE,UAAU,EACtB,MAAM,CAAC,EAAE,YAAY,EACrB,OAAO,GAAE,iBAAyC,GACjD,cAAc,CAkBhB;AAgMD;;;;;;;;;;;;GAYG;AACH,wBAAuB,YAAY,CACjC,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,EACrB,KAAK,EAAE,SAAS,MAAM,EAAE,EACxB,MAAM,EAAE,YAAY,EACpB,UAAU,EAAE,QAAQ,EACpB,OAAO,GAAE,iBAAyC,GACjD,aAAa,CAAC,cAAc,CAAC,CAc/B;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,aAAa,EACvB,UAAU,EAAE,UAAU,EACtB,MAAM,CAAC,EAAE,YAAY,GACpB,SAAS,MAAM,EAAE,CAmCnB"}
package/dist/project.js CHANGED
@@ -49,8 +49,8 @@ export function projectDocument(node, searchType, schema, context = NO_PROJECTIO
49
49
  *
50
50
  * A Reference Type entry’s `id` is pruned here too. It is a reading device of
51
51
  * the same kind: the node IRI a derive on the referrer may read, and never a
52
- * document key – an entry is kept in no collection, a weld names the flat
53
- * identity companion beside it, and an entry’s own key answers no query (ADR
52
+ * document key – an entry is kept in no collection, a weld names the identity
53
+ * field inside it, and an entry’s own key answers no query (ADR
54
54
  * 24). Left in, it would make an entry’s shape depend on whether a publisher
55
55
  * minted an IRI for a relationship, and be a field the collection never
56
56
  * declared. A Root Type keeps its `id` wherever it nests: that is the key its
@@ -327,8 +327,7 @@ function applyField(document, node, field, searchType, schema, context, sink, ne
327
327
  // A `local` lookup stores an object, so its own id is a level deeper than
328
328
  // a filter can reach – an engine welds conditions on an entry's LEAF
329
329
  // fields only, and facets flat values. `filterable` and `facetable`
330
- // therefore fan out the id beside the object, exactly as an inline
331
- // reference’s identity companion does.
330
+ // therefore fan out the id beside the object.
332
331
  applyLocalIdentity(document, endpoints, field, schema, nested);
333
332
  return;
334
333
  }
@@ -769,7 +768,7 @@ function applyInlineReference(document, node, alias, field, schema, context, sin
769
768
  const asEdge = edgeReader(referenceType, field.ref.identity);
770
769
  const asLiteralEntry = literalReader(referenceType);
771
770
  const referents = applyNestedReferents(document, valuesOf(node, alias).map((value) => asLiteralEntry(value) ?? asEdge(value)), field, [referenceType], schema, context, sink);
772
- applyIdentityCompanion(document, referents, field, schema, nested);
771
+ applyNarrowedFacet(document, referents, field, schema, nested);
773
772
  }
774
773
  /**
775
774
  * Read each framed node an inline reference reached as an **edge**: unchanged
@@ -817,10 +816,12 @@ function literalReader(referenceType) {
817
816
  : { [literalAlias]: [value] };
818
817
  }
819
818
  /**
820
- * Write the {@link ReferenceStrategy.identity identity companion} of an inline
821
- * reference: the ids its entries reference, flattened out of the nested
822
- * documents just projected, under the flat physical name an engine filters and
823
- * facets ({@link physicalFields}).
819
+ * Write the narrowed facet companion of an inline reference naming an
820
+ * {@link ReferenceStrategy.identity identity}, where its target declares a
821
+ * {@link FacetKeys facet policy}: the admitted ids its entries reference,
822
+ * flattened out of the nested documents just projected. Nothing to write
823
+ * otherwise – the engine filters and facets the identity’s leaf inside each
824
+ * entry, which the entries already hold ({@link physicalFields}).
824
825
  *
825
826
  * Harvested from the entries rather than read from a second path, so what the
826
827
  * companion holds is exactly what the entries hold – including the re-keying
@@ -832,9 +833,9 @@ function literalReader(referenceType) {
832
833
  * `id`. Both are read here, because which one a deployment declares is about
833
834
  * how much of the referent it wants to display – not about what identifies it.
834
835
  */
835
- function applyIdentityCompanion(document, referents, field, schema, nested) {
836
+ function applyNarrowedFacet(document, referents, field, schema, nested) {
836
837
  const names = physicalFields(field, schema);
837
- if (names.identity === undefined) {
838
+ if (nested || names.facet === undefined || names.facet === names.filter) {
838
839
  return;
839
840
  }
840
841
  const identity = field.ref.identity;
@@ -848,23 +849,23 @@ function applyIdentityCompanion(document, referents, field, schema, nested) {
848
849
  const targetById = new Map();
849
850
  for (const referent of stored) {
850
851
  const remembered = referent[REFERENT_TARGETS];
851
- const raw = referent[identity];
852
- for (const value of Array.isArray(raw) ? raw : [raw]) {
853
- const id = identityValue(value);
854
- if (id === undefined || targetById.has(id)) {
855
- continue;
856
- }
857
- targetById.set(id, isObject(value) && typeof value[TARGET_FIELD] === 'string'
858
- ? value[TARGET_FIELD]
859
- : remembered?.get(id)?.name);
852
+ // Single-valued: the identity field is `filterable`, and a filterable
853
+ // nested field states one value per entry.
854
+ const value = referent[identity];
855
+ const id = identityValue(value);
856
+ if (id === undefined || targetById.has(id)) {
857
+ continue;
860
858
  }
859
+ targetById.set(id, isObject(value) && typeof value[TARGET_FIELD] === 'string'
860
+ ? value[TARGET_FIELD]
861
+ : remembered?.get(id)?.name);
861
862
  }
862
- writeIdentityCompanions(document, targetById, field, referencedTargetsOf(identityFieldOf(field, schema), schema), schema, nested);
863
+ writeNarrowedFacet(document, names, targetById, field, referencedTargetsOf(identityFieldOf(field, schema), schema), schema, nested);
863
864
  }
864
865
  /**
865
- * Write an identity companion under the arity of the reference it belongs to –
866
- * `array` decides the shape here exactly as it does for every other kind
867
- * ({@link applyFacet}).
866
+ * Write a local lookup’s identity companion under the arity of the reference it
867
+ * belongs to – `array` decides the shape here exactly as it does for every
868
+ * other kind ({@link applyFacet}).
868
869
  *
869
870
  * It matters most where the companion is a **nested** leaf. That is the field a
870
871
  * weld actually names – the endpoint's own id is a level deeper than a weld can
@@ -879,12 +880,10 @@ function applyIdentityCompanion(document, referents, field, schema, nested) {
879
880
  * every id its entries reference, as it always has.
880
881
  */
881
882
  function setIdentity(document, name, ids, field, nested) {
882
- // `filterable` is the whole condition, and it is about the COMPANION rather
883
- // than about the split. `tuplesOf` splits the identity field whatever Role
884
- // earned it, so an entry holds one id either way – but only a `filterable`
885
- // reference has a weld to serve, and only there is the single value worth the
886
- // narrower declared type the collection then matches. A `facetable`-only
887
- // companion stays a list, which is what a facet reads.
883
+ // `filterable` is the whole condition: only a `filterable` reference has a
884
+ // weld to serve, and {@link tuplesOf} splits only `filterable` fields, so
885
+ // only there does an entry hold the single id the narrower declared type
886
+ // matches. A `facetable`-only companion stays a list, which a facet reads.
888
887
  if (!nested || field.array === true || field.filterable !== true) {
889
888
  setArray(document, name, ids);
890
889
  return;
@@ -921,31 +920,30 @@ function applyLocalIdentity(document, endpoints, field, schema, nested) {
921
920
  const target = endpoint[TARGET_FIELD];
922
921
  targetById.set(endpoint.id, typeof target === 'string' ? target : undefined);
923
922
  }
924
- writeIdentityCompanions(document, targetById, field, referencedTargetsOf(field, schema), schema, nested);
923
+ const ids = [...targetById.keys()];
924
+ if (ids.length === 0) {
925
+ return;
926
+ }
927
+ setIdentity(document, names.identity, ids, field, nested);
928
+ writeNarrowedFacet(document, names, targetById, field, referencedTargetsOf(field, schema), schema, nested);
925
929
  }
926
930
  /**
927
- * Write an identity companion – the ids, each with the target it was resolved
928
- * through – and, where a target declares a facet policy, the narrowed
929
- * companion the facet reads instead: the same rule as every other facetable
930
- * reference, so an excluded id is never seen by the engine rather than merely
931
- * unlabelled.
931
+ * Write the narrowed facet companion of a local lookup or an inline reference’s
932
+ * identity, where a target declares a facet policy: the admitted ids, each
933
+ * judged by the target it was resolved through – the same rule as every other
934
+ * facetable reference, so an excluded id is never seen by the engine rather
935
+ * than merely unlabelled. Nothing to write without a policy, where the facet
936
+ * reads the filter field itself.
932
937
  *
933
- * The narrowed companion is written at the top level only. A nested field is
934
- * never faceted – an engine facets per document, not per entry – so no
935
- * collection declares one there for it to fill.
938
+ * Written at the top level only: the companion counts root documents, so no
939
+ * collection declares one inside an entry for it to fill.
936
940
  */
937
- function writeIdentityCompanions(document, targetById, field, targets, schema, nested) {
938
- const names = physicalFields(field, schema);
939
- const ids = [...targetById.keys()];
940
- if (names.identity === undefined || ids.length === 0) {
941
+ function writeNarrowedFacet(document, names, targetById, field, targets, schema, nested) {
942
+ if (nested || names.facet === undefined || names.facet === names.filter) {
941
943
  return;
942
944
  }
943
- setIdentity(document, names.identity, ids, field, nested);
944
945
  const policies = inheritedFacetPolicies(field, schema);
945
- if (nested || policies.size === 0) {
946
- return;
947
- }
948
- setIdentity(document, names.facet, ids.filter((id) => admitsFacet(policies, targets, targetById.get(id), id)), field, nested);
946
+ setArray(document, names.facet, [...targetById.keys()].filter((id) => admitsFacet(policies, targets, targetById.get(id), id)));
949
947
  }
950
948
  /** The id a value under an identity field carries: the value itself when the
951
949
  * field stores bare ids, its `id` when it stores nested documents. */
@@ -1060,15 +1058,10 @@ function tuplesOf(node, nestedType, field) {
1060
1058
  if (!isInlineReference(field)) {
1061
1059
  return [node];
1062
1060
  }
1063
- // `filterable` names the leaves a weld can condition on directly. The
1064
- // reference's `identity` field joins them: nothing welds it by name, but the
1065
- // flat companion harvested FROM it is the leaf a weld uses to name the
1066
- // endpoint ({@link applyIdentityCompanion}). An entry whose identity field
1067
- // holds three ids stands for three endpoints at once – the same tuple
1068
- // problem, one field further in – so it is a tuple position like any other.
1069
- const identity = field.ref.identity;
1061
+ // `filterable` names the leaves a weld can condition on directly – the
1062
+ // reference's `identity` field among them, which must be filterable.
1070
1063
  const weldable = nestedType.fields
1071
- .filter((nested) => nested.filterable === true || nested.name === identity)
1064
+ .filter((nested) => nested.filterable === true)
1072
1065
  .map((nested) => irAlias(nestedType, nested))
1073
1066
  // A leaf the frame carries at most one value for is already a tuple
1074
1067
  // position; splitting it would copy the node to no purpose.
package/dist/query.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { type SearchSchema, type SearchType } from './schema.js';
1
+ import { type FacetDeclaration, type SearchSchema, type SearchType } from './schema.js';
2
2
  import { type JoinGraph } from './join-graph.js';
3
3
  /**
4
4
  * The engine- and protocol-neutral query IR. Every API surface compiles its
@@ -223,6 +223,12 @@ export interface FacetSearch {
223
223
  * reached through a join path is a different axis than the local field of the
224
224
  * same name ([ADR 18](../../docs/decisions/0018-filter-across-several-fields-with-one-clause.md)).
225
225
  *
226
+ * A condition on a leaf of an inline reference – reached through `on`, or
227
+ * welded to one entry alone – is on the axis `‹reference›.‹leaf›`, which a
228
+ * faceted leaf owns. A weld of several conditions is nobody’s own: it
229
+ * constrains two parts of one entry, as a clause spanning two fields
230
+ * constrains two fields.
231
+ *
226
232
  * A default a surface adds to `where` (a valid-only `status`) is a clause
227
233
  * like any other: its facet counts across every value and reports the
228
234
  * default’s values as selected.
@@ -372,4 +378,11 @@ export declare function assertValidQuery(query: SearchQuery, searchType: SearchT
372
378
  * than dividing by zero.
373
379
  */
374
380
  export declare function pageForOffset(offset: number, limit: number): number;
381
+ /**
382
+ * The clause that selects one bucket of a facet – the inverse of the axis a
383
+ * facet owns ({@link facetSearches}): `is` on a boolean, `in` on anything
384
+ * else, and for a faceted leaf a condition welded to one entry of the
385
+ * reference it is reached through.
386
+ */
387
+ export declare function selectionOf(facet: FacetDeclaration, value: string): Filter;
375
388
  //# sourceMappingURL=query.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../src/query.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../src/query.ts"],"names":[],"mappings":"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"}
package/dist/query.js CHANGED
@@ -1,4 +1,4 @@
1
- import { fieldNamed, filterOperatorFor, ID_FIELD, holdsNoIds, nestedReferenceType, referencedTargetsOf, storedRangeBound, } from './schema.js';
1
+ import { facetNamed, fieldNamed, filterOperatorFor, ID_FIELD, holdsNoIds, nestedReferenceType, referencedTargetsOf, storedRangeBound, } from './schema.js';
2
2
  import { MAX_JOIN_DEPTH } from './join-graph.js';
3
3
  /** Whether a criterion welds conditions to one entry ({@link WeldedCriterion}). */
4
4
  export function isWelded(criterion) {
@@ -75,6 +75,12 @@ export function isUnsatisfiable(query) {
75
75
  * reached through a join path is a different axis than the local field of the
76
76
  * same name ([ADR 18](../../docs/decisions/0018-filter-across-several-fields-with-one-clause.md)).
77
77
  *
78
+ * A condition on a leaf of an inline reference – reached through `on`, or
79
+ * welded to one entry alone – is on the axis `‹reference›.‹leaf›`, which a
80
+ * faceted leaf owns. A weld of several conditions is nobody’s own: it
81
+ * constrains two parts of one entry, as a clause spanning two fields
82
+ * constrains two fields.
83
+ *
78
84
  * A default a surface adds to `where` (a valid-only `status`) is a clause
79
85
  * like any other: its facet counts across every value and reports the
80
86
  * default’s values as selected.
@@ -90,13 +96,7 @@ export function facetSearches(query) {
90
96
  for (const field of facets.filter((field) => owned.has(field))) {
91
97
  const own = query.where.filter((_, index) => owners[index] === field);
92
98
  const selected = [
93
- ...new Set(own
94
- .flatMap((filter) => filter.or)
95
- .flatMap((criterion) => 'in' in criterion
96
- ? criterion.in
97
- : 'is' in criterion
98
- ? [String(criterion.is)]
99
- : [])),
99
+ ...new Set(own.flatMap((filter) => filter.or).flatMap(selectedValues)),
100
100
  ];
101
101
  searches.push({
102
102
  query: {
@@ -317,13 +317,16 @@ export function validateQuery(query, searchType, schema, joins) {
317
317
  }
318
318
  }
319
319
  for (const name of query.facets) {
320
- const field = fieldNamed(searchType, name);
321
- if (field === undefined) {
322
- issues.push({ part: 'facets', field: name, reason: 'unknown-field' });
323
- }
324
- else if (field.facetable !== true) {
325
- issues.push({ part: 'facets', field: name, reason: 'not-facetable' });
320
+ if (facetNamed(searchType, name, schema) !== undefined) {
321
+ continue;
326
322
  }
323
+ issues.push({
324
+ part: 'facets',
325
+ field: name,
326
+ reason: fieldNamed(searchType, name) === undefined
327
+ ? 'unknown-field'
328
+ : 'not-facetable',
329
+ });
327
330
  }
328
331
  collectProjectionIssues(query.resolve, [searchType], schema, issues);
329
332
  for (const sort of query.orderBy) {
@@ -452,6 +455,42 @@ function ownedField(filter) {
452
455
  * facet and simply never drops.
453
456
  */
454
457
  function axisOf(criterion) {
455
- const on = criterion.on ?? [];
456
- return on.length === 0 ? criterion.field : [...on, criterion.field].join('.');
458
+ const path = [...(criterion.on ?? []), criterion.field];
459
+ if (!isWelded(criterion)) {
460
+ return path.join('.');
461
+ }
462
+ // One condition on one leaf selects on that leaf’s axis, the same documents
463
+ // whether read per entry or per document. Several are welded to one entry:
464
+ // like a clause spanning two fields, that constrains no single axis.
465
+ const [only, ...more] = criterion.entry;
466
+ return only !== undefined && more.length === 0
467
+ ? [...path, only.field].join('.')
468
+ : undefined;
469
+ }
470
+ /**
471
+ * The clause that selects one bucket of a facet – the inverse of the axis a
472
+ * facet owns ({@link facetSearches}): `is` on a boolean, `in` on anything
473
+ * else, and for a faceted leaf a condition welded to one entry of the
474
+ * reference it is reached through.
475
+ */
476
+ export function selectionOf(facet, value) {
477
+ const field = facet.field.name;
478
+ const condition = facet.field.kind === 'boolean'
479
+ ? { field, is: value === 'true' }
480
+ : { field, in: [value] };
481
+ return filterOn(facet.reference === undefined
482
+ ? condition
483
+ : { field: facet.reference.name, entry: [condition] });
484
+ }
485
+ /** The values a criterion selects: those of an `in` or `is`, looking through a
486
+ * weld – which a facet owns only with one condition ({@link axisOf}). */
487
+ function selectedValues(criterion) {
488
+ if (isWelded(criterion)) {
489
+ return selectedValues(criterion.entry[0]);
490
+ }
491
+ return 'in' in criterion
492
+ ? criterion.in
493
+ : 'is' in criterion
494
+ ? [String(criterion.is)]
495
+ : [];
457
496
  }
package/dist/schema.d.ts CHANGED
@@ -209,6 +209,7 @@ export type ReferenceStrategy = {
209
209
  readonly typeName?: string;
210
210
  readonly target?: never;
211
211
  readonly identity?: never;
212
+ readonly facetedLeaves?: never;
212
213
  } | {
213
214
  readonly strategy: 'lookup';
214
215
  /**
@@ -274,6 +275,7 @@ export type ReferenceStrategy = {
274
275
  */
275
276
  readonly literal?: LiteralKind;
276
277
  readonly identity?: never;
278
+ readonly facetedLeaves?: never;
277
279
  } | {
278
280
  readonly strategy: 'inline';
279
281
  readonly typeName: string;
@@ -286,12 +288,12 @@ export type ReferenceStrategy = {
286
288
  * the reference type’s own filterable fields.
287
289
  *
288
290
  * A nested object is not something an engine can filter or facet by id,
289
- * so an inline reference naming an identity fans out an **identity
290
- * companion**: a flat physical field holding the ids its entries
291
- * reference ({@link physicalFields}), which the engine filters and facets
292
- * in the nested object’s place. The same mechanism `${name}_facet`
293
- * already uses – one logical field, two physical fields, one holding a
294
- * derived subset of the other.
291
+ * so the engine filters and facets the named field’s **leaf inside each
292
+ * entry** in the nested object’s place ({@link PhysicalFields.filter}).
293
+ * Typesense flattens a leaf under an `object[]` into one list per
294
+ * document, so a facet on it counts each document once, however many of
295
+ * its entries name the same endpoint. The named field must therefore be
296
+ * `filterable`, which is what indexes that leaf.
295
297
  *
296
298
  * Declared rather than inferred, because a reference type may carry more
297
299
  * than one nested reference and only the schema author knows which one
@@ -300,12 +302,31 @@ export type ReferenceStrategy = {
300
302
  * these ids are, which is what a facet policy is inherited through
301
303
  * ({@link inheritedFacetPolicies}) and what types the filter at the surface.
302
304
  *
303
- * The companion holds ids only, so a facet over it is exact and
305
+ * The leaf holds ids only, so a facet over it is exact and
304
306
  * identity-keyed: an entry whose endpoint the graph named inline – a
305
307
  * literal, a blank node – contributes no bucket rather than a bucket
306
308
  * keyed on a label, so two endpoints that share a label are never merged.
307
309
  */
308
310
  readonly identity?: string;
311
+ /**
312
+ * The `name`s of **leaf fields** of this reference type that the root
313
+ * document is faceted on, each served as the facet
314
+ * `‹reference›.‹leaf›` (GraphQL: `facets { ‹reference› { ‹leaf› } }`).
315
+ *
316
+ * A bucket counts **root documents**, not entries: a work with three
317
+ * reproductions, two under one licence, counts once under that licence.
318
+ * That is the question such a facet answers – *which works have a
319
+ * reproduction I may reuse?* – and it is how an engine counts a value
320
+ * stored under every entry, so the facet reads the nested path itself
321
+ * and needs no companion.
322
+ *
323
+ * Declared on the reference rather than on the leaf because the count
324
+ * is a fact about the root, and a reference type nested from several
325
+ * places may be faceted from one and not another. Each leaf must be
326
+ * `filterable`, so a bucket selects through a condition on one entry
327
+ * ({@link searchSchema} enforces it), and the reference must be too.
328
+ */
329
+ readonly facetedLeaves?: readonly string[];
309
330
  };
310
331
  /** The `literal` kinds a declaration may name, checked at runtime for one
311
332
  * built outside TypeScript. */
@@ -780,8 +801,8 @@ export declare function isInlineReference(field: SearchField): field is Referenc
780
801
  * Role is a reading device, pruned before the writer
781
802
  * ({@link isInternalField}), while one that is `filterable` or `facetable`
782
803
  * without being `output` still has its entries stored – they are what a nested
783
- * filter constrains and what the
784
- * {@link ReferenceStrategy.identity identity companion} is harvested from. Only
804
+ * filter constrains and what a
805
+ * {@link ReferenceStrategy.identity identity} is filtered and faceted on. Only
785
806
  * `output` decides whether they are *surfaced*, which is the surfaces’ own
786
807
  * question ({@link outputFields}).
787
808
  *
@@ -1006,20 +1027,28 @@ export interface PhysicalFields {
1006
1027
  /** Per-locale folded sort keys `${name}_sort_${locale}` (localized text,
1007
1028
  * `sortable`); a non-localized field sorts on its own `name` field. */
1008
1029
  readonly sort: readonly string[];
1009
- /** The field a facet on this field reads, when `facetable`: the field’s own
1010
- * `name`, or the `${name}_facet` companion holding the subset its target’s
1011
- * {@link FacetKeys facet policy} admits. `undefined` for a field that is
1012
- * not facetable. */
1030
+ /** The field a facet on this field reads, when `facetable`: the field a
1031
+ * {@link filter} reads, or the `_facet` companion holding the subset its
1032
+ * target’s {@link FacetKeys facet policy} admits. `undefined` for a field
1033
+ * that is not facetable. */
1013
1034
  readonly facet: string | undefined;
1014
1035
  /**
1015
- * The **identity companion** an inline reference filters and facets through:
1016
- * `${name}_id`, holding the ids its entries reference
1017
- * ({@link ReferenceStrategy.identity}). `undefined` for every other field –
1018
- * an ordinary field filters on its own `name`.
1036
+ * The field a membership filter on this field reads: its own `name`, the
1037
+ * {@link identity} companion of a `local` lookup, or – for an inline
1038
+ * reference naming an {@link ReferenceStrategy.identity identity} – the
1039
+ * nested id leaf of that identity in each entry (`${name}.${leaf}`).
1019
1040
  *
1020
1041
  * A nested object is not a value an engine filters or facets, so this is the
1021
- * flat field it filters and facets in its place. The logical field keeps one
1022
- * name at the surface; only the physical fanout knows there are two.
1042
+ * field it filters and facets in its place. The logical field keeps one name
1043
+ * at the surface; only the physical fanout knows they differ.
1044
+ */
1045
+ readonly filter: string;
1046
+ /**
1047
+ * The **identity companion** of a {@link ReferenceStrategy.local local}
1048
+ * lookup that is `filterable` or `facetable`: `${name}_id`, a leaf beside the
1049
+ * nested endpoints holding their ids, because an endpoint’s own `id` is a
1050
+ * level further in than a condition on one entry reaches. `undefined` for
1051
+ * every other field.
1023
1052
  */
1024
1053
  readonly identity: string | undefined;
1025
1054
  /**
@@ -1053,17 +1082,17 @@ export interface PhysicalFields {
1053
1082
  readonly end: string;
1054
1083
  } | undefined;
1055
1084
  }
1056
- /** The physical name of an inline reference’s
1057
- * {@link ReferenceStrategy.identity identity companion}. */
1085
+ /** The physical name of a {@link ReferenceStrategy.local local} lookup’s
1086
+ * {@link PhysicalFields.identity identity companion}. */
1058
1087
  export declare function identityFieldName(name: string): string;
1059
1088
  /**
1060
1089
  * The Root Types whose labels a reference’s **facet buckets** read, by name and
1061
1090
  * in order of precedence – its own label sources, or, for an inline reference,
1062
- * those its {@link ReferenceStrategy.identity identity companion} points at.
1091
+ * those its {@link ReferenceStrategy.identity identity} points at.
1063
1092
  * Empty for a field that labels no bucket.
1064
1093
  *
1065
1094
  * The same one-level-in reading {@link inheritedFacetPolicies} makes, and for
1066
- * the same reason: the companion holds that field’s ids, so the types that
1095
+ * the same reason: the facet counts that field’s ids, so the types that
1067
1096
  * name those ids are the types that can label them. Kept together with it so a
1068
1097
  * facet cannot inherit a policy from one type and its labels from another –
1069
1098
  * or, as happened first, inherit the policy and no labels at all.
@@ -1088,7 +1117,7 @@ export declare function localLookupTargetsOf(field: SearchField, schema: SearchS
1088
1117
  export declare function holdsNoIds(field: SearchField, schema: SearchSchema | undefined): boolean;
1089
1118
  /**
1090
1119
  * The nested reference an inline reference’s
1091
- * {@link ReferenceStrategy.identity identity companion} harvests, or
1120
+ * {@link ReferenceStrategy.identity identity} names, or
1092
1121
  * `undefined` where the field declares none (or the schema cannot resolve its
1093
1122
  * reference type). The one reading of *which nested field identifies the edge*,
1094
1123
  * so the projection (which harvests it), {@link inheritedFacetPolicies} (which
@@ -1145,6 +1174,35 @@ export declare function searchableFields(searchType: SearchType): readonly (Sear
1145
1174
  })[];
1146
1175
  /** Fields returned as facet buckets, in declaration order. */
1147
1176
  export declare function facetableFields(searchType: SearchType): readonly SearchField[];
1177
+ /**
1178
+ * One facet a Root Type serves: a facetable field of its own, or a leaf of an
1179
+ * inline reference the type is faceted on
1180
+ * ({@link ReferenceStrategy.facetedLeaves}).
1181
+ */
1182
+ export interface FacetDeclaration {
1183
+ /** The logical name a query asks for and a result files buckets under: the
1184
+ * field’s own name, or `‹reference›.‹leaf›`. */
1185
+ readonly name: string;
1186
+ /** The field whose values the buckets are – the facetable field, or the
1187
+ * faceted leaf. Its kind types the buckets, and its label source labels
1188
+ * them. */
1189
+ readonly field: SearchField;
1190
+ /** The inline reference a faceted leaf is reached through; absent for a
1191
+ * field of the type’s own. */
1192
+ readonly reference?: SearchField;
1193
+ /** The physical field the engine facets ({@link physicalFields}): the field
1194
+ * itself or one of its companions, or the nested path of a leaf. */
1195
+ readonly engineField: string;
1196
+ }
1197
+ /**
1198
+ * Every facet a Root Type serves, in declaration order: each facetable field,
1199
+ * then each reference’s faceted leaves after it. The one place a logical facet
1200
+ * name is mapped to what an engine facets, so a surface, a validator and an
1201
+ * adapter enumerate the same facets.
1202
+ */
1203
+ export declare function facetsOf(searchType: SearchType, schema?: SearchSchema): readonly FacetDeclaration[];
1204
+ /** The facet a Root Type serves under `name`, or `undefined`. */
1205
+ export declare function facetNamed(searchType: SearchType, name: string, schema?: SearchSchema): FacetDeclaration | undefined;
1148
1206
  /** Fields usable in `where`, in declaration order. */
1149
1207
  export declare function filterableFields(searchType: SearchType): readonly SearchField[];
1150
1208
  /** Fields publicly selectable in `orderBy`, in declaration order. */
@@ -1367,14 +1425,16 @@ export declare function storableUnixSeconds(seconds: number): number | undefined
1367
1425
  * localized `text` field’s display fields are pattern-based and not enumerated
1368
1426
  * here – see {@link displayFieldName} and its siblings.
1369
1427
  *
1370
- * The facet is the one member that depends on more than the declaration. A
1371
- * field storing a nested object facets its `${name}_id` identity companion
1372
- * rather than itself, and a facetable reference whose target declares a
1373
- * {@link FacetKeys facet policy} facets a `_facet` companion of whichever field
1374
- * it would otherwise facet – `${name}_facet` or `${name}_id_facet`. Only the
1375
- * `schema` can resolve either ({@link inheritedFacetPolicies}). Without one the
1376
- * field facets on its own name – the same reading the projection makes without
1377
- * a schema, where it cannot re-key a reference either.
1428
+ * The filter and facet are the members that depend on more than the
1429
+ * declaration. A field storing a nested object filters and facets an id leaf
1430
+ * rather than itself – a local lookup its `${name}_id` companion, an inline
1431
+ * reference its identity’s leaf inside each entry – and a facetable reference
1432
+ * whose target declares a {@link FacetKeys facet policy} facets a top-level
1433
+ * `_facet` companion instead: `${name}_facet`, or `${name}_id_facet` for a
1434
+ * local lookup. Only the `schema` can resolve any of these
1435
+ * ({@link inheritedFacetPolicies}). Without one the field filters and facets
1436
+ * its own name – the same reading the projection makes without a schema,
1437
+ * where it cannot re-key a reference either.
1378
1438
  */
1379
1439
  export declare function physicalFields(field: SearchField, schema?: SearchSchema): PhysicalFields;
1380
1440
  /** The value companions a field stores beside its own name: a `date`’s
@@ -1397,8 +1457,8 @@ export declare function companionNames(field: SearchField): string[];
1397
1457
  * companion) and {@link physicalFields} (which names it) share.
1398
1458
  *
1399
1459
  * An **inline** reference names its target one level in, through the nested
1400
- * reference its {@link ReferenceStrategy.identity identity companion} harvests
1401
- * ({@link identityFieldOf}). The boundary is the same one: the companion holds
1460
+ * reference its {@link ReferenceStrategy.identity identity} names
1461
+ * ({@link identityFieldOf}). The boundary is the same one: the facet counts
1402
1462
  * that field’s ids, so the policy that narrows a facet over those ids is the
1403
1463
  * policy of the type that field names. Reading it through the nested field
1404
1464
  * rather than declaring it twice is what keeps *which of a type’s ids deserve
@@ -1 +1 @@
1
- {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"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"}
package/dist/schema.js CHANGED
@@ -123,6 +123,7 @@ export function searchSchema(...types) {
123
123
  referenceTypesBySchema.set(schema, referenceTypes);
124
124
  rootTypesBySchema.set(schema, new Map(rootTypes.map((searchType) => [searchType.name, searchType])));
125
125
  assertResolvableLabelSources(types, schema);
126
+ assertUnnarrowedFacetedLeaves(rootTypes, schema);
126
127
  // Build the join graph eagerly and discard it: it is cached per schema, and
127
128
  // building it is what enforces the schema-wide join rules (one joinable
128
129
  // reference per target, every target an indexed Root Type, no cycles). A
@@ -186,8 +187,8 @@ export function isInlineReference(field) {
186
187
  * Role is a reading device, pruned before the writer
187
188
  * ({@link isInternalField}), while one that is `filterable` or `facetable`
188
189
  * without being `output` still has its entries stored – they are what a nested
189
- * filter constrains and what the
190
- * {@link ReferenceStrategy.identity identity companion} is harvested from. Only
190
+ * filter constrains and what a
191
+ * {@link ReferenceStrategy.identity identity} is filtered and faceted on. Only
191
192
  * `output` decides whether they are *surfaced*, which is the surfaces’ own
192
193
  * question ({@link outputFields}).
193
194
  *
@@ -377,15 +378,16 @@ function assertResolvableInlineReferences(types, referenceTypes) {
377
378
  }
378
379
  // An inline reference’s stored value is a nested object, which an engine
379
380
  // can neither tokenize for free text nor order by. `filterable` and
380
- // `facetable` it CAN serve – through the identity companion below – so
381
- // only the roles no companion could answer are refused here.
381
+ // `facetable` it CAN serve – through its identity’s leaf below – so only
382
+ // the roles no leaf could answer are refused here.
382
383
  const extraRoles = unserviceableInlineRoles(field);
383
384
  if (extraRoles.length > 0) {
384
385
  throw new Error(`Inline reference “${searchType.name}.${field.name}” declares ${extraRoles
385
386
  .map((role) => `“${role}”`)
386
387
  .join(', ')}, which it cannot serve: its value is a nested object, not a token an engine can search, sort or join on.`);
387
388
  }
388
- assertIdentityCompanion(searchType, field, referenceType);
389
+ assertIdentity(searchType, field, referenceType);
390
+ assertFacetedLeaves(searchType, field, referenceType);
389
391
  }
390
392
  }
391
393
  for (const searchType of types) {
@@ -434,20 +436,20 @@ function assertLiteralField(referenceType) {
434
436
  }
435
437
  }
436
438
  /**
437
- * An inline reference’s {@link ReferenceStrategy.identity identity companion}
438
- * holds together in both directions: `facetable` needs an `identity` to point
439
- * the engine at, and an `identity` with neither Role is a companion nothing
440
- * reads. `filterable` without one is served by conditions welded to one entry
441
- * alone, so it needs a filterable field on the entry instead.
439
+ * An inline reference’s {@link ReferenceStrategy.identity identity} holds
440
+ * together in both directions: `facetable` needs an `identity` to point the
441
+ * engine at, and an `identity` with neither Role is a leaf nothing reads.
442
+ * `filterable` without one is served by conditions welded to one entry alone,
443
+ * so it needs a filterable field on the entry instead.
442
444
  *
443
445
  * The named field must be a nested **reference that names a target** – a
444
446
  * `lookup`’s `target` or an `idOnly`’s `labelSource` – because naming one is
445
- * exactly the claim the companion rests on: *these values are ids of documents
447
+ * exactly the claim the identity rests on: *these values are ids of documents
446
448
  * in that collection* (ADR 20). That the target resolves to a declared Root
447
449
  * Type needs no rule here: {@link assertResolvableLabelSources} walks Reference
448
450
  * Types too, so the nested reference this names is resolved with every other.
449
451
  */
450
- function assertIdentityCompanion(searchType, field, referenceType) {
452
+ function assertIdentity(searchType, field, referenceType) {
451
453
  const where = `Inline reference “${searchType.name}.${field.name}”`;
452
454
  const identity = field.ref.identity;
453
455
  const filters = field.filterable === true || field.facetable === true;
@@ -476,15 +478,15 @@ function assertIdentityCompanion(searchType, field, referenceType) {
476
478
  return;
477
479
  }
478
480
  if (!filters) {
479
- throw new Error(`${where} declares an “identity” but neither “filterable” nor “facetable”: the companion it names would be indexed and never read. Declare a Role for it, or drop the “identity”.`);
481
+ throw new Error(`${where} declares an “identity” but neither “filterable” nor “facetable”: the leaf it names would be indexed and never read. Declare a Role for it, or drop the “identity”.`);
480
482
  }
481
- // A companion is a FLAT field beside the reference, and only a Root Type has
482
- // somewhere flat to put one: inside a Reference Type it would be written into
483
- // each entry and declared nowhere, so a filter on it would name a field the
484
- // collection does not carry. An edge nested inside another edge is not a
485
- // shape anything has needed; refusing it is better than serving it wrong.
483
+ // The identity’s leaf is one level in from the Root Type, which is as deep as
484
+ // a facet counts documents and a condition on one entry reaches. Inside a
485
+ // Reference Type it would be two levels in. An edge nested inside another
486
+ // edge is not a shape anything has needed; refusing it is better than
487
+ // serving it wrong.
486
488
  if (searchType.class === undefined) {
487
- throw new Error(`${where} declares an “identity”, but “${searchType.name}” is a reference type: an identity companion is a flat field beside the reference, and a nested one has nowhere to live. Declare the companion on the reference that carries this type.`);
489
+ throw new Error(`${where} declares an “identity”, but “${searchType.name}” is a reference type: a filter and a facet read the identity one level in from a Root Type, and inside a reference type it would be two. Declare the identity on the reference that carries this type.`);
488
490
  }
489
491
  const identityField = fieldNamed(referenceType, identity);
490
492
  if (identityField === undefined) {
@@ -492,7 +494,12 @@ function assertIdentityCompanion(searchType, field, referenceType) {
492
494
  }
493
495
  if (identityField.kind !== 'reference' ||
494
496
  labelSourceNamesOf(identityField).length === 0) {
495
- throw new Error(`${where} names identity “${identity}”, which names no target: an identity companion holds ids of documents in a collection, so the field it harvests must be a reference declaring a “lookup” target or a label source.`);
497
+ throw new Error(`${where} names identity “${identity}”, which names no target: an identity holds ids of documents in a collection, so the field it names must be a reference declaring a “lookup” target or a label source.`);
498
+ }
499
+ // A filter and a facet on the reference read this field’s leaf inside each
500
+ // entry, which the engine indexes only for a field with a query Role.
501
+ if (identityField.filterable !== true) {
502
+ throw new Error(`${where} names identity “${identity}”, which is not “filterable”: the reference filters and facets on that field inside each entry, so it must be indexed. Declare “filterable” on “${field.ref.typeName}.${identity}”.`);
496
503
  }
497
504
  // An endpoint stated without its edge carries the identity field alone, so
498
505
  // any other required field would be missing from it, dropping the document.
@@ -503,6 +510,78 @@ function assertIdentityCompanion(searchType, field, referenceType) {
503
510
  throw new Error(`${where} nests “${field.ref.typeName}”, which declares an “edgeClass” and requires “${requiredOnEdge.name}”: an endpoint the graph states without its edge carries only “${identity}”, so it would never have “${requiredOnEdge.name}”. Drop “required” from “${requiredOnEdge.name}”.`);
504
511
  }
505
512
  }
513
+ /** The leaf kinds a root document may be faceted on: values a bucket can key
514
+ * on, with no range bins ({@link ReferenceStrategy.facetedLeaves}). */
515
+ const FACETABLE_LEAF_KINDS = new Set([
516
+ 'keyword',
517
+ 'boolean',
518
+ 'reference',
519
+ ]);
520
+ /**
521
+ * An inline reference’s {@link ReferenceStrategy.facetedLeaves faceted leaves}
522
+ * each name a single-valued leaf of the type it nests that a condition on one
523
+ * entry can select, so every bucket round-trips into a filter. Only a Root
524
+ * Type’s reference may declare them: the facet is a count of root documents,
525
+ * and a reference type has none.
526
+ */
527
+ function assertFacetedLeaves(searchType, field, referenceType) {
528
+ const leaves = facetedLeavesOf(field);
529
+ if (leaves.length === 0) {
530
+ return;
531
+ }
532
+ const where = `Inline reference “${searchType.name}.${field.name}”`;
533
+ if (searchType.class === undefined) {
534
+ throw new Error(`${where} declares “facetedLeaves”, but “${searchType.name}” is a reference type: a faceted leaf counts root documents, and an entry is not one. Declare it on the Root Type’s reference instead.`);
535
+ }
536
+ if (field.facetable === true) {
537
+ throw new Error(`${where} is “facetable” and declares “facetedLeaves”: its facet and its leaves’ facets would both be named after “${field.name}”. Facet the reference or its leaves, not both.`);
538
+ }
539
+ if (field.filterable !== true) {
540
+ throw new Error(`${where} declares “facetedLeaves” without “filterable”: a bucket is selected by a condition on one entry, which the reference must accept. Declare “filterable” on it.`);
541
+ }
542
+ const seen = new Set();
543
+ for (const name of leaves) {
544
+ if (seen.has(name)) {
545
+ throw new Error(`${where} names faceted leaf “${name}” twice.`);
546
+ }
547
+ seen.add(name);
548
+ const leaf = fieldNamed(referenceType, name);
549
+ if (leaf === undefined) {
550
+ throw new Error(`${where} names faceted leaf “${name}”, which “${field.ref.typeName}” does not declare.`);
551
+ }
552
+ const storesObject = isInlineReference(leaf) ||
553
+ (leaf.kind === 'reference' &&
554
+ leaf.ref?.strategy === 'lookup' &&
555
+ leaf.ref.local === true);
556
+ if (!FACETABLE_LEAF_KINDS.has(leaf.kind) ||
557
+ storesObject ||
558
+ literalKindOf(leaf) !== undefined) {
559
+ throw new Error(`${where} names faceted leaf “${name}”, ${storesObject ? 'which stores a nested object' : `a “${leaf.kind}”`}: only a “keyword”, “boolean” or “reference” leaf holding ids keys a bucket.`);
560
+ }
561
+ if (leaf.filterable !== true) {
562
+ throw new Error(`${where} names faceted leaf “${name}”, which is not “filterable”: a bucket selects through a condition on that leaf. Declare “filterable” on “${field.ref.typeName}.${name}”.`);
563
+ }
564
+ }
565
+ }
566
+ /**
567
+ * A faceted leaf facets its nested path as stored, so a facet policy on the
568
+ * leaf’s target ({@link RootType.facetKeys}) would go unapplied: the buckets
569
+ * would offer ids the policy excludes. Refused until a narrowed companion is
570
+ * written inside each entry.
571
+ */
572
+ function assertUnnarrowedFacetedLeaves(rootTypes, schema) {
573
+ for (const searchType of rootTypes) {
574
+ for (const facet of facetsOf(searchType, schema)) {
575
+ if (facet.reference === undefined) {
576
+ continue;
577
+ }
578
+ const narrowing = referencedTargetsOf(facet.field, schema).find((target) => target.facetKeys !== undefined);
579
+ if (narrowing !== undefined) {
580
+ throw new Error(`Inline reference “${searchType.name}.${facet.reference.name}” names faceted leaf “${facet.field.name}”, whose target “${narrowing.name}” declares “facetKeys”: a faceted leaf cannot be narrowed by a facet policy yet, so its buckets would offer ids the policy excludes.`);
581
+ }
582
+ }
583
+ }
584
+ }
506
585
  /**
507
586
  * A {@link ReferenceStrategy.local local} lookup stores a nested object rather
508
587
  * than an id, so it is held to the same Roles an inline reference is: an engine
@@ -607,8 +686,8 @@ function assertNoInlineCycle(referenceType, referenceTypes, onPath) {
607
686
  * a bucket counts every entry of every matching document, including the
608
687
  * entries that did not satisfy the filter. The count is therefore wrong in a
609
688
  * way no work on our side recovers. Facet a qualified edge through its
610
- * {@link ReferenceStrategy.identity identity companion}, which is a flat
611
- * field an engine facets exactly.
689
+ * Root Type’s reference and its {@link ReferenceStrategy.identity identity},
690
+ * which counts documents.
612
691
  * - **`sortable`** – there is no such thing as sorting *into* an element of an
613
692
  * array; a document holds many entries and a sort key is one value.
614
693
  *
@@ -639,7 +718,7 @@ function assertServiceableNestedFields(referenceTypes) {
639
718
  if (unserviceable.length > 0) {
640
719
  throw new Error(`Nested field “${referenceType.name}.${field.name}” declares ${unserviceable
641
720
  .map((role) => `“${role}”`)
642
- .join(', ')}, which nesting cannot serve: an engine facets a nested field per document rather than per entry, sorts on one value rather than into an array, and has no collection to join to from inside an entry. Facet the edge through the inline reference’s “identity” companion instead.`);
721
+ .join(', ')}, which nesting cannot serve: an engine facets a nested field per document rather than per entry, sorts on one value rather than into an array, and has no collection to join to from inside an entry. Facet the edge through the inline reference’s “identity”, or the root document on this leaf through the reference’s “facetedLeaves”, instead.`);
643
722
  }
644
723
  if (field.labelSource !== undefined) {
645
724
  throw new Error(`Nested field “${referenceType.name}.${field.name}” declares a label source, which an inline reference cannot serve; declare a “lookup” on the nested reference instead of resolving a label for it.`);
@@ -681,7 +760,7 @@ const UNSERVICEABLE_NESTED_ROLES = [
681
760
  /** The Roles the **inline reference itself** declares that it cannot serve, in
682
761
  * declaration order. Its value is a nested object, which an engine can neither
683
762
  * tokenize for free text nor order by; `filterable` and `facetable` it serves
684
- * through its {@link ReferenceStrategy.identity identity companion}. */
763
+ * through its {@link ReferenceStrategy.identity identity}. */
685
764
  function unserviceableInlineRoles(field) {
686
765
  return UNSERVICEABLE_INLINE_ROLES.filter((role) => role === 'searchable'
687
766
  ? field.searchable !== undefined
@@ -763,8 +842,8 @@ export function referencedTargetsOf(field, schema) {
763
842
  * Reference Types are walked too, so a **nested** `lookup` has its `target`
764
843
  * resolved by the same pass a top-level one does. That is also what validates
765
844
  * the target behind an inline reference’s
766
- * {@link ReferenceStrategy.identity identity companion}, since the companion
767
- * harvests a nested reference that names one.
845
+ * {@link ReferenceStrategy.identity identity}, since the identity names a
846
+ * nested reference that names one.
768
847
  */
769
848
  function assertResolvableLabelSources(types, schema) {
770
849
  for (const searchType of types) {
@@ -1313,19 +1392,19 @@ export function assertValidSearchType(searchType) {
1313
1392
  throw new Error(`Invalid search type “${searchType.name}”: ${detail}.`);
1314
1393
  }
1315
1394
  }
1316
- /** The physical name of an inline reference’s
1317
- * {@link ReferenceStrategy.identity identity companion}. */
1395
+ /** The physical name of a {@link ReferenceStrategy.local local} lookup’s
1396
+ * {@link PhysicalFields.identity identity companion}. */
1318
1397
  export function identityFieldName(name) {
1319
1398
  return `${name}_id`;
1320
1399
  }
1321
1400
  /**
1322
1401
  * The Root Types whose labels a reference’s **facet buckets** read, by name and
1323
1402
  * in order of precedence – its own label sources, or, for an inline reference,
1324
- * those its {@link ReferenceStrategy.identity identity companion} points at.
1403
+ * those its {@link ReferenceStrategy.identity identity} points at.
1325
1404
  * Empty for a field that labels no bucket.
1326
1405
  *
1327
1406
  * The same one-level-in reading {@link inheritedFacetPolicies} makes, and for
1328
- * the same reason: the companion holds that field’s ids, so the types that
1407
+ * the same reason: the facet counts that field’s ids, so the types that
1329
1408
  * name those ids are the types that can label them. Kept together with it so a
1330
1409
  * facet cannot inherit a policy from one type and its labels from another –
1331
1410
  * or, as happened first, inherit the policy and no labels at all.
@@ -1366,7 +1445,7 @@ export function holdsNoIds(field, schema) {
1366
1445
  }
1367
1446
  /**
1368
1447
  * The nested reference an inline reference’s
1369
- * {@link ReferenceStrategy.identity identity companion} harvests, or
1448
+ * {@link ReferenceStrategy.identity identity} names, or
1370
1449
  * `undefined` where the field declares none (or the schema cannot resolve its
1371
1450
  * reference type). The one reading of *which nested field identifies the edge*,
1372
1451
  * so the projection (which harvests it), {@link inheritedFacetPolicies} (which
@@ -1385,7 +1464,7 @@ export function identityFieldOf(field, schema) {
1385
1464
  if (referenceType === undefined) {
1386
1465
  return undefined;
1387
1466
  }
1388
- // `assertIdentityCompanion` guarantees the named field is declared and is a
1467
+ // `assertIdentity` guarantees the named field is declared and is a
1389
1468
  // reference, so this is a read rather than a search.
1390
1469
  return fieldNamed(referenceType, identity);
1391
1470
  }
@@ -1451,6 +1530,72 @@ export function searchableFields(searchType) {
1451
1530
  export function facetableFields(searchType) {
1452
1531
  return searchType.fields.filter((field) => field.facetable === true);
1453
1532
  }
1533
+ /**
1534
+ * Every facet a Root Type serves, in declaration order: each facetable field,
1535
+ * then each reference’s faceted leaves after it. The one place a logical facet
1536
+ * name is mapped to what an engine facets, so a surface, a validator and an
1537
+ * adapter enumerate the same facets.
1538
+ */
1539
+ export function facetsOf(searchType, schema) {
1540
+ if (schema === undefined) {
1541
+ return declaredFacets(searchType, schema);
1542
+ }
1543
+ // Read per facet a query names, on every search: derived once per type.
1544
+ let bySchema = facetsBySchema.get(schema);
1545
+ if (bySchema === undefined) {
1546
+ bySchema = new WeakMap();
1547
+ facetsBySchema.set(schema, bySchema);
1548
+ }
1549
+ const cached = bySchema.get(searchType);
1550
+ if (cached !== undefined) {
1551
+ return cached;
1552
+ }
1553
+ const facets = declaredFacets(searchType, schema);
1554
+ bySchema.set(searchType, facets);
1555
+ return facets;
1556
+ }
1557
+ /** The {@link ReferenceStrategy.facetedLeaves faceted leaves} an inline
1558
+ * reference declares, or none. */
1559
+ function facetedLeavesOf(inlineReference) {
1560
+ return (inlineReference.ref.facetedLeaves ?? []);
1561
+ }
1562
+ const facetsBySchema = new WeakMap();
1563
+ function declaredFacets(searchType, schema) {
1564
+ return searchType.fields.flatMap((field) => {
1565
+ const own = field.facetable === true
1566
+ ? [
1567
+ {
1568
+ name: field.name,
1569
+ field,
1570
+ engineField: physicalFields(field, schema).facet,
1571
+ },
1572
+ ]
1573
+ : [];
1574
+ const referenceType = schema === undefined ? undefined : nestedReferenceType(schema, field);
1575
+ if (referenceType === undefined) {
1576
+ return own;
1577
+ }
1578
+ // Only an inline reference nests a reference type, and `searchSchema`
1579
+ // has resolved every faceted leaf against it.
1580
+ const leaves = facetedLeavesOf(field);
1581
+ return [
1582
+ ...own,
1583
+ ...leaves.map((leafName) => {
1584
+ const path = nestedFieldName(field.name, leafName);
1585
+ return {
1586
+ name: path,
1587
+ field: fieldNamed(referenceType, leafName),
1588
+ reference: field,
1589
+ engineField: path,
1590
+ };
1591
+ }),
1592
+ ];
1593
+ });
1594
+ }
1595
+ /** The facet a Root Type serves under `name`, or `undefined`. */
1596
+ export function facetNamed(searchType, name, schema) {
1597
+ return facetsOf(searchType, schema).find((facet) => facet.name === name);
1598
+ }
1454
1599
  /** Fields usable in `where`, in declaration order. */
1455
1600
  export function filterableFields(searchType) {
1456
1601
  return searchType.fields.filter((field) => field.filterable === true);
@@ -1905,14 +2050,16 @@ function deepTimeDate(year) {
1905
2050
  * localized `text` field’s display fields are pattern-based and not enumerated
1906
2051
  * here – see {@link displayFieldName} and its siblings.
1907
2052
  *
1908
- * The facet is the one member that depends on more than the declaration. A
1909
- * field storing a nested object facets its `${name}_id` identity companion
1910
- * rather than itself, and a facetable reference whose target declares a
1911
- * {@link FacetKeys facet policy} facets a `_facet` companion of whichever field
1912
- * it would otherwise facet – `${name}_facet` or `${name}_id_facet`. Only the
1913
- * `schema` can resolve either ({@link inheritedFacetPolicies}). Without one the
1914
- * field facets on its own name – the same reading the projection makes without
1915
- * a schema, where it cannot re-key a reference either.
2053
+ * The filter and facet are the members that depend on more than the
2054
+ * declaration. A field storing a nested object filters and facets an id leaf
2055
+ * rather than itself – a local lookup its `${name}_id` companion, an inline
2056
+ * reference its identity’s leaf inside each entry – and a facetable reference
2057
+ * whose target declares a {@link FacetKeys facet policy} facets a top-level
2058
+ * `_facet` companion instead: `${name}_facet`, or `${name}_id_facet` for a
2059
+ * local lookup. Only the `schema` can resolve any of these
2060
+ * ({@link inheritedFacetPolicies}). Without one the field filters and facets
2061
+ * its own name – the same reading the projection makes without a schema,
2062
+ * where it cannot re-key a reference either.
1916
2063
  */
1917
2064
  export function physicalFields(field, schema) {
1918
2065
  if (field.kind === 'text') {
@@ -1926,30 +2073,37 @@ export function physicalFields(field, schema) {
1926
2073
  : [],
1927
2074
  // Text is never facetable (`validateSearchType`).
1928
2075
  facet: undefined,
2076
+ filter: field.name,
1929
2077
  identity: undefined,
1930
2078
  precision: undefined,
1931
2079
  period: undefined,
1932
2080
  };
1933
2081
  }
1934
2082
  // A field storing a nested OBJECT cannot be filtered or faceted as itself, so
1935
- // everything an engine indexes for it reads the identity companion instead –
1936
- // the facet included, which is why the facet name is derived from the
1937
- // companion rather than from `name`. Two shapes store one: an inline
1938
- // reference that names an `identity`, and a `local` lookup, whose own id is
1939
- // otherwise a level further in than an engine can weld a condition to.
1940
- const nestsAnObject = identityFieldOf(field, schema) !== undefined ||
1941
- (localLookupTargetsOf(field, schema).length > 0 &&
1942
- (field.filterable === true || field.facetable === true));
1943
- const identity = nestsAnObject ? identityFieldName(field.name) : undefined;
1944
- const filtered = identity ?? field.name;
2083
+ // what an engine filters and facets for it is an id leaf. A `local` lookup’s
2084
+ // own id is a level further in than a condition on one entry reaches, so it
2085
+ // gets a companion leaf beside the endpoints; an inline reference naming an
2086
+ // `identity` reads that identity’s leaf inside each entry, which Typesense
2087
+ // flattens into one list per document – the count a facet wants.
2088
+ const identity = localLookupTargetsOf(field, schema).length > 0 &&
2089
+ (field.filterable === true || field.facetable === true)
2090
+ ? identityFieldName(field.name)
2091
+ : undefined;
2092
+ const identityField = identityFieldOf(field, schema);
2093
+ const filter = identityField === undefined
2094
+ ? (identity ?? field.name)
2095
+ : nestedFieldName(field.name, physicalFields(identityField, schema).filter);
1945
2096
  return {
1946
2097
  search: field.searchable !== undefined ? [`${field.name}_search`] : [],
1947
2098
  sort: [],
2099
+ // The narrowed companion is a top-level field even where the filter reads
2100
+ // a nested leaf: it holds the admitted ids of the whole document.
1948
2101
  facet: field.facetable !== true
1949
2102
  ? undefined
1950
2103
  : inheritedFacetPolicies(field, schema).size === 0
1951
- ? filtered
1952
- : `${filtered}_facet`,
2104
+ ? filter
2105
+ : `${identity ?? field.name}_facet`,
2106
+ filter,
1953
2107
  identity,
1954
2108
  precision: field.kind === 'date' ? `${field.name}_precision` : undefined,
1955
2109
  period: storesPeriods(field)
@@ -1994,8 +2148,8 @@ export function companionNames(field) {
1994
2148
  * companion) and {@link physicalFields} (which names it) share.
1995
2149
  *
1996
2150
  * An **inline** reference names its target one level in, through the nested
1997
- * reference its {@link ReferenceStrategy.identity identity companion} harvests
1998
- * ({@link identityFieldOf}). The boundary is the same one: the companion holds
2151
+ * reference its {@link ReferenceStrategy.identity identity} names
2152
+ * ({@link identityFieldOf}). The boundary is the same one: the facet counts
1999
2153
  * that field’s ids, so the policy that narrows a facet over those ids is the
2000
2154
  * policy of the type that field names. Reading it through the nested field
2001
2155
  * rather than declaring it twice is what keeps *which of a type’s ids deserve
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lde/search",
3
- "version": "0.41.2",
3
+ "version": "0.42.0",
4
4
  "description": "Engine- and domain-agnostic core for RDF-backed search: a unified declarative field model (SearchField/SearchType/SearchSchema), a neutral query IR, the SearchEngine port with logical result types, and a streaming CONSTRUCT-to-document projection. Bakes in no engine, protocol, or domain.",
5
5
  "repository": {
6
6
  "url": "git+https://github.com/ldelements/lde.git",