core/stores/lexicon.store.ts
core/stores/lexicon.store.ts is a file in GovLab Context. 28 lines of code and 6 definitions.
import type { Lexicon, LexiconOptions, Term, TermFilter } from "#types/lexicon.types";
import { BaseOntology } from "#core/stores/ontology.store";
import { COLLECTIONS } from "#configuration/constants/ontology.constants";
import { ReadAudit } from "#core/observers/record.observer";
import { loadTerms } from "#core/loaders/lexicon.loader";
import { matchesTerm } from "#core/matchers/lexicon.matcher";
import { slugify } from "#core/converters/identifier.converter";
export class LexiconStore extends BaseOntology<Term, TermFilter> implements Lexicon {
private readonly resolveId: (term: string) => string;
public constructor(options: LexiconOptions = {}, audit = new ReadAudit(COLLECTIONS.lexicon)) {
super(loadTerms(audit, options.data), {
audit,
idOf: (term) => term.id,
label: COLLECTIONS.lexicon,
logger: options.logger,
matches: matchesTerm,
});
const base = options.canonicalizeId ?? slugify;
const aliasByKey = new Map<string, string>();
for (const term of this.all()) {
for (const alias of term.aliases) {
aliasByKey.set(slugify(alias), term.id);
}
}
this.resolveId = (term): string => aliasByKey.get(slugify(term)) ?? base(term);
}
public resolve = (target: string): Term | null => this.get(this.resolveId(target));
}