core/pipelines/record.pipeline.ts

core/pipelines/record.pipeline.ts is a file in GovLab Patterns. 17 lines of code and 5 definitions.

import type { AnalyzeOptions, AnalyzeReport, AnalyzeResult } from "#types/record.types";
import { assemble, feed } from "#core/coordinators/field.coordinator";
import { buildAnalyzers } from "#core/factories/field.factory";
import { detectSchema } from "#core/analyzers/schema.analyzer";
import { graphOf } from "#core/factories/graph.factory";
import { inferMapping } from "#core/resolvers/representation.resolver";
import { toReport } from "#core/converters/report.converter";

export const analyze = function analyze(records: readonly unknown[], options: AnalyzeOptions = {}): AnalyzeResult {
    const schema = detectSchema(records, options.floatFields);
    const analyzers = buildAnalyzers(options.mapping ?? inferMapping(schema));
    feed(analyzers, records);
    const { nodes, findings } = assemble(analyzers);
    return { findings, graph: graphOf(nodes), schema };
};

export const report = function report(records: readonly unknown[], options: AnalyzeOptions = {}): AnalyzeReport {
    return toReport(records.length, analyze(records, options));
};