@lde/search 0.24.3 → 0.25.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/project.d.ts.map +1 -1
- package/dist/project.js +157 -29
- package/dist/schema.d.ts +3 -1
- package/dist/schema.d.ts.map +1 -1
- package/dist/schema.js +13 -1
- package/package.json +1 -1
package/dist/project.d.ts.map
CHANGED
|
@@ -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;AAEzC,OAAO,EAGL,KAAK,UAAU,EAChB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAkBL,KAAK,eAAe,EAEpB,KAAK,QAAQ,EAEb,KAAK,YAAY,EACjB,KAAK,UAAU,EAEhB,MAAM,aAAa,CAAC;AAErB;;;;;;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;CAC3B;AAKD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,UAAU,EAChB,UAAU,EAAE,UAAU,EACtB,MAAM,CAAC,EAAE,YAAY,EACrB,OAAO,GAAE,iBAAyC,GACjD,cAAc,CAgBhB;
|
|
1
|
+
{"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../src/project.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAEzC,OAAO,EAGL,KAAK,UAAU,EAChB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAkBL,KAAK,eAAe,EAEpB,KAAK,QAAQ,EAEb,KAAK,YAAY,EACjB,KAAK,UAAU,EAEhB,MAAM,aAAa,CAAC;AAErB;;;;;;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;CAC3B;AAKD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,UAAU,EAChB,UAAU,EAAE,UAAU,EACtB,MAAM,CAAC,EAAE,YAAY,EACrB,OAAO,GAAE,iBAAyC,GACjD,cAAc,CAgBhB;AAuHD;;;;;;;;;;;;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"}
|
package/dist/project.js
CHANGED
|
@@ -69,11 +69,11 @@ function pruneInternalFields(document, searchType, schema) {
|
|
|
69
69
|
* Pruning is deferred to a single recursive pass ({@link pruneInternalFields})
|
|
70
70
|
* once the whole nested structure is projected, so a derive at any depth can
|
|
71
71
|
* still read an internal field before it is removed. */
|
|
72
|
-
function projectFields(node, searchType, schema, context) {
|
|
72
|
+
function projectFields(node, searchType, schema, context, nested = false) {
|
|
73
73
|
const id = documentIdOf(node, searchType);
|
|
74
74
|
const document = id === undefined ? {} : { id };
|
|
75
75
|
for (const field of searchType.fields) {
|
|
76
|
-
applyField(document, node, field, searchType, schema, context);
|
|
76
|
+
applyField(document, node, field, searchType, schema, context, nested);
|
|
77
77
|
}
|
|
78
78
|
return document;
|
|
79
79
|
}
|
|
@@ -145,7 +145,7 @@ export async function* projectRoots(quads, roots, schema, searchType, context =
|
|
|
145
145
|
yield projectDocument(node, searchType, schema, context);
|
|
146
146
|
}
|
|
147
147
|
}
|
|
148
|
-
function applyField(document, node, field, searchType, schema, context) {
|
|
148
|
+
function applyField(document, node, field, searchType, schema, context, nested) {
|
|
149
149
|
// The three value sources, mutually exclusive by declaration
|
|
150
150
|
// (`validateSearchType`): a projection value, a computed value, a graph path.
|
|
151
151
|
if ((field.kind === 'keyword' || field.kind === 'reference') &&
|
|
@@ -201,7 +201,7 @@ function applyField(document, node, field, searchType, schema, context) {
|
|
|
201
201
|
// project nothing rather than fall through and emit the referent IRIs under
|
|
202
202
|
// the field name (the wrong shape).
|
|
203
203
|
if (schema !== undefined) {
|
|
204
|
-
applyInlineReference(document, node, alias, field, schema, context);
|
|
204
|
+
applyInlineReference(document, node, alias, field, schema, context, nested);
|
|
205
205
|
}
|
|
206
206
|
return;
|
|
207
207
|
}
|
|
@@ -217,7 +217,7 @@ function applyField(document, node, field, searchType, schema, context) {
|
|
|
217
217
|
// a filter can reach – an engine welds conditions on an entry's LEAF
|
|
218
218
|
// fields only. `filterable` therefore fans out the id beside the object,
|
|
219
219
|
// exactly as an inline reference's identity companion does.
|
|
220
|
-
applyLocalIdentity(document, endpoints, field, schema);
|
|
220
|
+
applyLocalIdentity(document, endpoints, field, schema, nested);
|
|
221
221
|
return;
|
|
222
222
|
}
|
|
223
223
|
}
|
|
@@ -295,9 +295,10 @@ function referenceValues(node, alias, field, schema) {
|
|
|
295
295
|
}
|
|
296
296
|
/**
|
|
297
297
|
* Project a text field. **Display** (when `output`) preserves *every* language
|
|
298
|
-
* present – one label per language
|
|
299
|
-
* stored `index: false` so extra
|
|
300
|
-
*
|
|
298
|
+
* present – one label per language, or every label of it for an `array` field
|
|
299
|
+
* (accents preserved, untagged under `und`), stored `index: false` so extra
|
|
300
|
+
* languages cost nothing – so a value in an undeclared language still renders
|
|
301
|
+
* rather than collapsing to a bare IRI.
|
|
301
302
|
* **Search** (folded, when `searchable`) and **sort** (folded primary, when
|
|
302
303
|
* `sortable`) stay on the declared `locales`, which drive the indexed, stemmed,
|
|
303
304
|
* weighted fanout; a value in an undeclared language is not indexed. Absent
|
|
@@ -316,13 +317,30 @@ function referenceValues(node, alias, field, schema) {
|
|
|
316
317
|
*/
|
|
317
318
|
function applyText(document, values, field) {
|
|
318
319
|
if (field.output) {
|
|
319
|
-
//
|
|
320
|
-
//
|
|
321
|
-
|
|
320
|
+
// Every present language lands as a display field (kept off the search
|
|
321
|
+
// index), a language absent from `locales` included. `array` decides the
|
|
322
|
+
// shape, as it does for every other kind: a declared list keeps every
|
|
323
|
+
// value of a language, deduped; a single-valued field keeps the first.
|
|
324
|
+
const valuesPerLang = new Map();
|
|
322
325
|
for (const { lang, value } of values) {
|
|
323
|
-
if (
|
|
324
|
-
|
|
325
|
-
|
|
326
|
+
if (value === '') {
|
|
327
|
+
continue;
|
|
328
|
+
}
|
|
329
|
+
const langValues = valuesPerLang.get(lang);
|
|
330
|
+
if (langValues === undefined) {
|
|
331
|
+
valuesPerLang.set(lang, [value]);
|
|
332
|
+
}
|
|
333
|
+
else {
|
|
334
|
+
langValues.push(value);
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
for (const [lang, langValues] of valuesPerLang) {
|
|
338
|
+
const name = displayFieldName(field, lang);
|
|
339
|
+
if (field.array === true) {
|
|
340
|
+
setArray(document, name, dedupe(langValues));
|
|
341
|
+
}
|
|
342
|
+
else {
|
|
343
|
+
setString(document, name, langValues[0]);
|
|
326
344
|
}
|
|
327
345
|
}
|
|
328
346
|
}
|
|
@@ -455,7 +473,7 @@ function applyProjectionValue(document, field, from, context, schema) {
|
|
|
455
473
|
* the schema’s declared depth. The referent type is guaranteed declared by
|
|
456
474
|
* {@link searchSchema}.
|
|
457
475
|
*/
|
|
458
|
-
function applyInlineReference(document, node, alias, field, schema, context) {
|
|
476
|
+
function applyInlineReference(document, node, alias, field, schema, context, nested) {
|
|
459
477
|
// Resolves for a schema that declares the referent (always so for the schema a
|
|
460
478
|
// type is projected through); a type framed against a foreign schema that
|
|
461
479
|
// omits it simply contributes no nesting.
|
|
@@ -464,7 +482,7 @@ function applyInlineReference(document, node, alias, field, schema, context) {
|
|
|
464
482
|
return;
|
|
465
483
|
}
|
|
466
484
|
const referents = applyNestedReferents(document, valuesOf(node, alias), field, referenceType, schema, context);
|
|
467
|
-
applyIdentityCompanion(document, referents, field, schema);
|
|
485
|
+
applyIdentityCompanion(document, referents, field, schema, nested);
|
|
468
486
|
}
|
|
469
487
|
/**
|
|
470
488
|
* Write the {@link ReferenceStrategy.identity identity companion} of an inline
|
|
@@ -482,7 +500,7 @@ function applyInlineReference(document, node, alias, field, schema, context) {
|
|
|
482
500
|
* `id`. Both are read here, because which one a deployment declares is about
|
|
483
501
|
* how much of the referent it wants to display – not about what identifies it.
|
|
484
502
|
*/
|
|
485
|
-
function applyIdentityCompanion(document, referents, field, schema) {
|
|
503
|
+
function applyIdentityCompanion(document, referents, field, schema, nested) {
|
|
486
504
|
const names = physicalFields(field, schema);
|
|
487
505
|
if (names.identity === undefined) {
|
|
488
506
|
return;
|
|
@@ -500,14 +518,44 @@ function applyIdentityCompanion(document, referents, field, schema) {
|
|
|
500
518
|
if (ids.length === 0) {
|
|
501
519
|
return;
|
|
502
520
|
}
|
|
503
|
-
|
|
521
|
+
setIdentity(document, names.identity, ids, field, nested);
|
|
504
522
|
// Same rule as every other facetable reference: where the target declares a
|
|
505
523
|
// facet policy, the facet reads a narrowed companion of its own, so an
|
|
506
524
|
// excluded id is never seen by the engine rather than merely unlabelled.
|
|
507
525
|
const policy = inheritedFacetKeys(field, schema);
|
|
508
526
|
if (policy !== undefined) {
|
|
509
|
-
|
|
527
|
+
setIdentity(document, names.facet, ids.filter(policy.only), field, nested);
|
|
528
|
+
}
|
|
529
|
+
}
|
|
530
|
+
/**
|
|
531
|
+
* Write an identity companion under the arity of the reference it belongs to –
|
|
532
|
+
* `array` decides the shape here exactly as it does for every other kind
|
|
533
|
+
* ({@link applyFacet}).
|
|
534
|
+
*
|
|
535
|
+
* It matters most where the companion is a **nested** leaf. That is the field a
|
|
536
|
+
* weld actually names – the endpoint's own id is a level deeper than a weld can
|
|
537
|
+
* reach – and a weld asks whether ONE entry satisfies every condition. A
|
|
538
|
+
* companion holding a list inside an entry stands for each of its ids at once,
|
|
539
|
+
* so the entry answers the weld with none of them; a Typesense 30.2 engine does
|
|
540
|
+
* not answer at all, and hangs (ADR 26). The entry fans out instead
|
|
541
|
+
* ({@link tuplesOf}), which leaves exactly one id per entry for this to write.
|
|
542
|
+
*
|
|
543
|
+
* A top-level companion is unaffected: it is a flat field standing for the whole
|
|
544
|
+
* document rather than for one entry, so an `array` reference's companion holds
|
|
545
|
+
* every id its entries reference, as it always has.
|
|
546
|
+
*/
|
|
547
|
+
function setIdentity(document, name, ids, field, nested) {
|
|
548
|
+
// `filterable` is the whole condition, and it is about the COMPANION rather
|
|
549
|
+
// than about the split. `tuplesOf` splits the identity field whatever Role
|
|
550
|
+
// earned it, so an entry holds one id either way – but only a `filterable`
|
|
551
|
+
// reference has a weld to serve, and only there is the single value worth the
|
|
552
|
+
// narrower declared type the collection then matches. A `facetable`-only
|
|
553
|
+
// companion stays a list, which is what a facet reads.
|
|
554
|
+
if (!nested || field.array === true || field.filterable !== true) {
|
|
555
|
+
setArray(document, name, ids);
|
|
556
|
+
return;
|
|
510
557
|
}
|
|
558
|
+
setString(document, name, ids[0]);
|
|
511
559
|
}
|
|
512
560
|
/**
|
|
513
561
|
* Write the identity companion of a {@link ReferenceStrategy.local local}
|
|
@@ -517,7 +565,7 @@ function applyIdentityCompanion(document, referents, field, schema) {
|
|
|
517
565
|
* Nothing to do where the field is not `filterable`: without that Role there is
|
|
518
566
|
* no companion, and the endpoint is display weight like every other nesting.
|
|
519
567
|
*/
|
|
520
|
-
function applyLocalIdentity(document, endpoints, field, schema) {
|
|
568
|
+
function applyLocalIdentity(document, endpoints, field, schema, nested) {
|
|
521
569
|
const names = physicalFields(field, schema);
|
|
522
570
|
if (names.identity === undefined) {
|
|
523
571
|
return;
|
|
@@ -529,9 +577,7 @@ function applyLocalIdentity(document, endpoints, field, schema) {
|
|
|
529
577
|
const ids = dedupe(stored
|
|
530
578
|
.map((endpoint) => endpoint.id)
|
|
531
579
|
.filter((id) => typeof id === 'string'));
|
|
532
|
-
|
|
533
|
-
setArray(document, names.identity, ids);
|
|
534
|
-
}
|
|
580
|
+
setIdentity(document, names.identity, ids, field, nested);
|
|
535
581
|
}
|
|
536
582
|
/** The id a value under an identity field carries: the value itself when the
|
|
537
583
|
* field stores bare ids, its `id` when it stores nested documents. */
|
|
@@ -557,20 +603,90 @@ function identityValue(value) {
|
|
|
557
603
|
* target’s collection files it under, and the lookup can find it.
|
|
558
604
|
*/
|
|
559
605
|
function applyNestedReferents(document, values, field, nestedType, schema, context) {
|
|
606
|
+
// One node may stand for several entries: a weldable leaf is single-valued,
|
|
607
|
+
// so an edge the graph gave several roles or several endpoints fans out into
|
|
608
|
+
// one entry per combination BEFORE it is projected (ADR 26).
|
|
560
609
|
const referents = values
|
|
561
610
|
.filter(isObject)
|
|
562
|
-
.
|
|
611
|
+
.flatMap((value) => tuplesOf(value, nestedType, field))
|
|
612
|
+
.map((tuple) => projectFields(tuple, nestedType, schema, context, true))
|
|
563
613
|
// Fields, not identity, are what makes something a referent: a literal
|
|
564
614
|
// value object under the alias (dirty source data), or a node this
|
|
565
615
|
// reference type reads nothing from, projects nothing and is no referent.
|
|
566
616
|
// Nesting it would hand the writer a content-free document – and, for a
|
|
567
617
|
// single-valued reference, let it win the slot over a real referent.
|
|
568
618
|
.filter((referent) => Object.keys(referent).length > 0);
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
619
|
+
// Fan-out splits RAW framed values, and two distinct ones can still collapse
|
|
620
|
+
// downstream – a `transform` mapping two spellings onto one canonical value,
|
|
621
|
+
// or a keyed target re-keying two referent IRIs to the same document key. The
|
|
622
|
+
// pre-fan-out shape deduped, because those values met inside one entry and
|
|
623
|
+
// `applyFacet` deduped them there; split across entries they would reach the
|
|
624
|
+
// index and the API as byte-identical duplicates instead.
|
|
625
|
+
const distinct = dedupeBy(referents, (referent) => JSON.stringify(referent));
|
|
626
|
+
if (distinct.length === 0) {
|
|
627
|
+
return distinct;
|
|
628
|
+
}
|
|
629
|
+
document[field.name] = field.array === true ? distinct : distinct[0];
|
|
630
|
+
return distinct;
|
|
631
|
+
}
|
|
632
|
+
/**
|
|
633
|
+
* Split one framed edge node into the entries it stands for: the cartesian
|
|
634
|
+
* product of its **weldable** leaves’ values, one value each.
|
|
635
|
+
*
|
|
636
|
+
* A weld asks whether ONE entry satisfies every condition, so a leaf a weld can
|
|
637
|
+
* name (`filterable` – `searchSchema` refuses `array` on one) states a single
|
|
638
|
+
* value. An edge the graph gave two roles and two endpoints is therefore four
|
|
639
|
+
* entries rather than one entry holding two lists, which stands for all four at
|
|
640
|
+
* once and answers the weld with none of them. See
|
|
641
|
+
* [ADR 26](../../docs/decisions/0026-fan-out-a-qualified-edge-into-one-entry-per-tuple.md).
|
|
642
|
+
*
|
|
643
|
+
* Done on the **framed node**, before projection, so each leaf reaches
|
|
644
|
+
* {@link applyField} single-valued and passes through `transform`, folding and
|
|
645
|
+
* the facet companion exactly as a single-valued field always has – no
|
|
646
|
+
* downstream step learns that fan-out happened. Only the weldable aliases are
|
|
647
|
+
* split: an `output`-only leaf keeps its list, because nothing welds it, and it
|
|
648
|
+
* is shared unchanged across the entries the node fans out to.
|
|
649
|
+
*
|
|
650
|
+
* Inline references only. A {@link ReferenceStrategy.local local} lookup runs
|
|
651
|
+
* through this same body but nests the endpoint’s **own Root Type**, whose
|
|
652
|
+
* fields are multi-valued for reasons of their own – fanning one out would
|
|
653
|
+
* split a person across their `sameAs` values. What a weld names there is the
|
|
654
|
+
* flat `${name}_id` companion, which {@link applyLocalIdentity} already writes
|
|
655
|
+
* beside the object.
|
|
656
|
+
*
|
|
657
|
+
* **Unbounded, deliberately and only for now.** The product grows with the
|
|
658
|
+
* edge's own values, which ADR 12 says is no bound at all. The bound belongs
|
|
659
|
+
* where the data enters memory – the CONSTRUCT already paid for those values,
|
|
660
|
+
* the subject index already holds them, and the framed node already
|
|
661
|
+
* materialised them – not here, at the last and cheapest step to skip. See
|
|
662
|
+
* [#826](https://github.com/ldelements/lde/issues/826).
|
|
663
|
+
*/
|
|
664
|
+
function tuplesOf(node, nestedType, field) {
|
|
665
|
+
if (!isInlineReference(field)) {
|
|
666
|
+
return [node];
|
|
667
|
+
}
|
|
668
|
+
// `filterable` names the leaves a weld can condition on directly. The
|
|
669
|
+
// reference's `identity` field joins them: nothing welds it by name, but the
|
|
670
|
+
// flat companion harvested FROM it is the leaf a weld uses to name the
|
|
671
|
+
// endpoint ({@link applyIdentityCompanion}). An entry whose identity field
|
|
672
|
+
// holds three ids stands for three endpoints at once – the same tuple
|
|
673
|
+
// problem, one field further in – so it is a tuple position like any other.
|
|
674
|
+
const identity = field.ref.identity;
|
|
675
|
+
const weldable = nestedType.fields
|
|
676
|
+
.filter((nested) => nested.filterable === true || nested.name === identity)
|
|
677
|
+
.map((nested) => irAlias(nestedType, nested))
|
|
678
|
+
// A leaf the frame carries at most one value for is already a tuple
|
|
679
|
+
// position; splitting it would copy the node to no purpose.
|
|
680
|
+
.filter((alias) => valuesOf(node, alias).length > 1);
|
|
681
|
+
if (weldable.length === 0) {
|
|
682
|
+
return [node];
|
|
683
|
+
}
|
|
684
|
+
let tuples = [node];
|
|
685
|
+
for (const alias of weldable) {
|
|
686
|
+
const values = valuesOf(node, alias);
|
|
687
|
+
tuples = tuples.flatMap((tuple) => values.map((value) => ({ ...tuple, [alias]: value })));
|
|
688
|
+
}
|
|
689
|
+
return tuples;
|
|
574
690
|
}
|
|
575
691
|
function langValuesOf(node, key) {
|
|
576
692
|
return valuesOf(node, key)
|
|
@@ -678,6 +794,18 @@ function setNumber(document, field, value) {
|
|
|
678
794
|
function dedupe(values) {
|
|
679
795
|
return [...new Set(values)];
|
|
680
796
|
}
|
|
797
|
+
/** Keep the first of each distinct `key`, in order. */
|
|
798
|
+
function dedupeBy(values, key) {
|
|
799
|
+
const seen = new Set();
|
|
800
|
+
return values.filter((value) => {
|
|
801
|
+
const identity = key(value);
|
|
802
|
+
if (seen.has(identity)) {
|
|
803
|
+
return false;
|
|
804
|
+
}
|
|
805
|
+
seen.add(identity);
|
|
806
|
+
return true;
|
|
807
|
+
});
|
|
808
|
+
}
|
|
681
809
|
function setString(document, field, value) {
|
|
682
810
|
if (value !== undefined && value !== '') {
|
|
683
811
|
document[field] = value;
|
package/dist/schema.d.ts
CHANGED
|
@@ -77,7 +77,9 @@ export interface SearchFieldBase {
|
|
|
77
77
|
/** Multi-valued: the field stores a list. Single-valued (the default) stores
|
|
78
78
|
* the FIRST value the graph carries, whatever their number – for every kind
|
|
79
79
|
* alike – so one declaration cannot mean a list to the projection and a
|
|
80
|
-
* scalar to the collection definition and the API.
|
|
80
|
+
* scalar to the collection definition and the API. For localized `text`
|
|
81
|
+
* the list is per language: an `array` field keeps every value of each
|
|
82
|
+
* present language, a single-valued one the first of each. */
|
|
81
83
|
readonly array?: boolean;
|
|
82
84
|
/** Always present: a non-null scalar in the API output and
|
|
83
85
|
* a non-optional field in the engine index. Moot for arrays/booleans/`id`,
|
package/dist/schema.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAGrE;;;;;;GAMG;AACH,MAAM,MAAM,SAAS,GACnB,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,GAAG,WAAW,CAAC;AAE/E;oEACoE;AACpE,MAAM,MAAM,cAAc,GAAG,IAAI,GAAG,OAAO,GAAG,IAAI,CAAC;AAcnD;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,SAAS,GAAG,cAAc,GAAG,SAAS,CAE7E;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,MAAM,MAAM,WAAW,GACrB,SAAS,GAAG,YAAY,GAAG,cAAc,GAAG,YAAY,GAAG,YAAY,CAAC;AAE1E,qEAAqE;AACrE,MAAM,WAAW,eAAe;IAC9B;wCACoC;IACpC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B;+EAC2E;IAC3E,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"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"}
|
package/dist/schema.js
CHANGED
|
@@ -519,10 +519,19 @@ function assertNoInlineCycle(referenceType, referenceTypes, onPath) {
|
|
|
519
519
|
* Field}, the reading device that is the other half of an inline reference’s
|
|
520
520
|
* job.
|
|
521
521
|
*
|
|
522
|
+
* **`filterable` with `array` is refused**, for a reason about meaning rather
|
|
523
|
+
* than about any engine: a weld asks whether ONE entry satisfies every
|
|
524
|
+
* condition, so a leaf a weld can name states one value per entry. A leaf
|
|
525
|
+
* holding a list stands for every combination at once and answers the weld with
|
|
526
|
+
* none of them. Multiplicity belongs to the entry list instead – the projection
|
|
527
|
+
* emits one entry per combination. An `output`-only nested
|
|
528
|
+
* leaf is untouched: nothing welds it, so it may carry a list for display.
|
|
529
|
+
*
|
|
522
530
|
* Checked schema-wide, like the label sources and for the same reason: a single
|
|
523
531
|
* declaration cannot see whether it is a Reference Type at all.
|
|
524
532
|
*
|
|
525
|
-
* See [ADR 24](../../docs/decisions/0024-carry-data-on-a-reference-edge.md)
|
|
533
|
+
* See [ADR 24](../../docs/decisions/0024-carry-data-on-a-reference-edge.md) and
|
|
534
|
+
* [ADR 26](../../docs/decisions/0026-fan-out-a-qualified-edge-into-one-entry-per-tuple.md).
|
|
526
535
|
*/
|
|
527
536
|
function assertServiceableNestedFields(referenceTypes) {
|
|
528
537
|
for (const referenceType of referenceTypes.values()) {
|
|
@@ -536,6 +545,9 @@ function assertServiceableNestedFields(referenceTypes) {
|
|
|
536
545
|
if (field.labelSource !== undefined) {
|
|
537
546
|
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.`);
|
|
538
547
|
}
|
|
548
|
+
if (field.filterable === true && field.array === true) {
|
|
549
|
+
throw new Error(`Nested field “${referenceType.name}.${field.name}” declares both “filterable” and “array”: a weld asks whether ONE entry satisfies every condition, and an entry holding a list has no single value to test – it stands for each combination at once, so the weld degenerates into the cross-product it exists to exclude. Declare the field single-valued; the projection emits one entry per combination.`);
|
|
550
|
+
}
|
|
539
551
|
}
|
|
540
552
|
}
|
|
541
553
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lde/search",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.25.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",
|