# runtime/entrypoints/seed.entrypoint.ts

> 40 lines of code and 7 definitions.

Tree: Bane's Lab Content
Language: typescript
Layer: runtime
Canonical: https://banes-lab.com/anatomy/content#file-content-runtime-entrypoints-seed-entrypoint-ts
Source text: https://banes-lab.com/source/content/runtime/entrypoints/seed.entrypoint.ts.txt

Listed in [runtime/entrypoints](https://banes-lab.com/api/source/content/runtime/entrypoints.md), after [runtime/entrypoints/link.entrypoint.ts](https://banes-lab.com/source/content/runtime/entrypoints/link.entrypoint.ts.md) and before [runtime/entrypoints/template.entrypoint.ts](https://banes-lab.com/source/content/runtime/entrypoints/template.entrypoint.ts.md).

## Definitions

- `words` (lexical_declaration, line 22)
- `faces` (lexical_declaration, line 27)
- `seeds` (lexical_declaration, line 28)
- `duplicates` (lexical_declaration, line 29)
- `report` (lexical_declaration, line 34)
- `target` (lexical_declaration, line 38)
- `summary` (lexical_declaration, line 40)

## Contained in

- [runtime/entrypoints](https://banes-lab.com/anatomy/content/folder-content-runtime-entrypoints.md)

## Source

```typescript
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);
const summary = `${WROTE}${target}: ${String(report.seeds.length)}${SEEDS_SUFFIX}${String(report.incomplete.length)}${INCOMPLETE_SUFFIX}`;
if (report.incomplete.length > 0) {
    refuse(summary);
}
say(summary);
```
