import { DUPLICATE_SEED_IDS, INCOMPLETE_SEED, INCOMPLETE_SUFFIX, MISSING_FIELDS, SEEDS_SUFFIX, SLOT_WORDS_MISSING, WROTE, } from "#configuration/strings/derivation.strings"; import { algoSeeds, reportOf } from "#core/converters/lesson.converter"; import { loadFaces, readModelTemplate, readModels, readOperatorProfile, seedsTarget } from "#core/loaders/seed.loader"; import { modelSeeds, slotWordsOf } from "#core/converters/invariant.converter"; import { refuse, say } from "#core/reporters/derivation.reporter"; import { SEED_COMMAND } from "#configuration/constants/contract.constants"; import { SEED_SUMMARY } from "#configuration/strings/contract.strings"; import { persistJson } from "#core/persistence/report.persistence"; import { profileSeeds } from "#core/converters/principle.converter"; import { resolveArgv } from "@govlab/argv"; resolveArgv({ command: SEED_COMMAND, flags: [], summary: SEED_SUMMARY }); const words = slotWordsOf(readModelTemplate()); if (words === null) { refuse(SLOT_WORDS_MISSING); } const faces = loadFaces(); const seeds = [...algoSeeds(faces), ...modelSeeds(readModels(), words), ...profileSeeds(readOperatorProfile().text)]; const duplicates = seeds.map((seed) => seed.id).filter((id, index, ids) => ids.indexOf(id) !== index); if (duplicates.length > 0) { refuse(`${DUPLICATE_SEED_IDS}${duplicates.join(", ")}`); } const report = reportOf(seeds); for (const incomplete of report.incomplete) { say(`${INCOMPLETE_SEED}${incomplete.id}${MISSING_FIELDS}${incomplete.missing.join(", ")}`); } const target = seedsTarget(); await persistJson(target, report); say( `${WROTE}${target}: ${String(report.seeds.length)}${SEEDS_SUFFIX}${String(report.incomplete.length)}${INCOMPLETE_SUFFIX}`, );