core/factories/context.factory.ts
core/factories/context.factory.ts is a file in GovLab Context. 56 lines of code and 10 definitions.
import type { Faces, GovlabContext, GovlabContextOptions } from "#types/context.types";
import { checkGapsFor, runValidation } from "#core/validators/ontology.validator";
import {
isAlgoGrammar,
isArchRelations,
isLexicon,
isPagGrammar,
isReasonOntology,
requireFace,
} from "#core/guards/context.guard";
import { COLLECTIONS } from "#configuration/constants/ontology.constants";
import type { DeclaredCheck } from "#types/check.types";
import { KIND_TAXONOMY } from "#configuration/constants/kind.constants";
import { ONTOLOGY_FACES } from "#core/registries/context.registry";
import { checkedRecordsOf } from "#core/selectors/check.selector";
import { collectionRefResolver } from "#core/resolvers/reference.resolver";
import { createLayerJoin } from "#core/factories/layer.factory";
import { crossValidateFaces } from "#core/validators/vocabulary.validator";
import { foldFaces } from "#core/registries/ontology.registry";
import { slugify } from "#core/converters/identifier.converter";
const assemble = function assemble(faces: Faces, checks: readonly DeclaredCheck[]): GovlabContext {
return {
algo: faces.algo,
arch: faces.arch,
checkGaps: () => checkGapsFor(faces, checks),
checkedRecords: () => checkedRecordsOf(faces, checks),
crossValidate: () => crossValidateFaces(faces),
joinConcerns: () =>
faces.algo.joinConcerns({
principlesForForce: (force) => faces.arch.query({ scope: force }).map((principle) => principle.id),
}),
kindTaxonomy: () => KIND_TAXONOMY,
layerOf: (idOrName) => faces.layerJoin.layerOf(idOrName),
layers: () => faces.layerJoin.layers(),
lex: faces.lex,
pag: faces.pag,
reason: faces.reason,
resolutions: () => faces.layerJoin.resolutions(),
resolveRef: collectionRefResolver(faces),
resolveTension: (a, b) => faces.layerJoin.resolveTension(a, b),
slugify,
topology: () => faces.layerJoin.topology(),
validateResolution: () => runValidation(faces, checks),
};
};
export const createGovlabContext = function createGovlabContext(options: GovlabContextOptions = {}): GovlabContext {
const { checks = [], logger, canonicalizeId } = options;
const built = foldFaces(ONTOLOGY_FACES, { canonicalizeId, logger });
const arch = requireFace(built.get(COLLECTIONS.architecture), isArchRelations, COLLECTIONS.architecture);
const algo = requireFace(built.get(COLLECTIONS.algorithms), isAlgoGrammar, COLLECTIONS.algorithms);
const pag = requireFace(built.get(COLLECTIONS.pag), isPagGrammar, COLLECTIONS.pag);
const lex = requireFace(built.get(COLLECTIONS.lexicon), isLexicon, COLLECTIONS.lexicon);
const reason = requireFace(built.get(COLLECTIONS.reasoning), isReasonOntology, COLLECTIONS.reasoning);
const layerJoin = createLayerJoin({ algo, arch, lex });
return assemble({ algo, arch, layerJoin, lex, pag, reason }, checks);
};