# core/factories/seed.factory.ts

> 21 lines of code and 5 definitions.

Tree: GovLab Docs
Language: typescript
Layer: infrastructure
Canonical: https://banes-lab.com/anatomy/docs#file-docs-core-factories-seed-factory-ts
Source text: https://banes-lab.com/source/docs/core/factories/seed.factory.ts.txt

Listed in [core/factories](https://banes-lab.com/api/source/docs/core/factories.md), after [core/factories/registry.factory.ts](https://banes-lab.com/source/docs/core/factories/registry.factory.ts.md).

## Definitions

- `seedKey` (lexical_declaration, line 7)
- `seedsForBarrel` (lexical_declaration, line 11)
- `entrySeeds` (lexical_declaration, line 19, exported)
- `exported` (lexical_declaration, line 12)
- `appLabel` (lexical_declaration, line 20, exported)

## Contained in

- [core/factories](https://banes-lab.com/anatomy/docs/folder-docs-core-factories.md)

## Uses

- [core/resolvers/barrel.resolver.ts](https://banes-lab.com/source/docs/core/resolvers/barrel.resolver.ts.md)

## Linked from

- [core/factories](https://banes-lab.com/anatomy/docs/folder-docs-core-factories.md)
- [core/resolvers](https://banes-lab.com/anatomy/docs/folder-docs-core-resolvers.md)

## Source

```typescript
import type { EntrySeed, PackageJsonLike } from "#types/code.types";
import { MODULE_ID } from "#configuration/constants/graph.constants";
import { barrelExports } from "#core/parsers/export.parser";
import { basename } from "node:path";
import { resolveSourceBarrels } from "#core/resolvers/barrel.resolver";

const seedKey = function seedKey(seed: EntrySeed): string {
    return `${seed.axis} ${seed.label}`;
};

const seedsForBarrel = function seedsForBarrel(axis: string, barrel: string, appLabel: string): EntrySeed[] {
    const exported = barrelExports(barrel);
    if (exported.length === 0) {
        return [{ axis, barrel, label: appLabel, name: MODULE_ID }];
    }
    return exported.map(({ name, label }) => ({ axis, barrel, label, name }));
};

export const entrySeeds = function entrySeeds(moduleDir: string, pkg: PackageJsonLike): EntrySeed[] {
    const appLabel = basename(moduleDir);
    return resolveSourceBarrels(moduleDir, pkg)
        .flatMap(({ axis, barrel }) => seedsForBarrel(axis, barrel, appLabel))
        .toSorted((left, right) => seedKey(left).localeCompare(seedKey(right)));
};
```
