# core/loaders/concern.loader.ts

> 18 lines of code and 6 definitions.

Tree: GovLab Quality
Language: typescript
Layer: infrastructure
Canonical: https://banes-lab.com/anatomy/quality#file-quality-core-loaders-concern-loader-ts
Source text: https://banes-lab.com/source/quality/core/loaders/concern.loader.ts.txt

Listed in [core/loaders](https://banes-lab.com/api/source/quality/core/loaders.md), after [core/loaders/concept.loader.ts](https://banes-lab.com/source/quality/core/loaders/concept.loader.ts.md) and before [core/loaders/config.loader.ts](https://banes-lab.com/source/quality/core/loaders/config.loader.ts.md).

## Definitions

- `loadEmitInputs` (lexical_declaration, line 9, exported)
- `config` (lexical_declaration, line 10, exported)
- `concerns` (lexical_declaration, line 11, exported)
- `owners` (lexical_declaration, line 12, exported)
- `conflicts` (lexical_declaration, line 13, exported)
- `detail` (lexical_declaration, line 15, exported)

## Contained in

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

## Uses

- [configuration/strings/quality.strings.ts](https://banes-lab.com/source/quality/configuration/strings/quality.strings.ts.md)

## Linked from

- [configuration/strings](https://banes-lab.com/anatomy/quality/folder-quality-configuration-strings.md)

## Source

```typescript
import type { EmitInputs } from "#types/config.types";
import { loadCanonicalData } from "#core/loaders/canon.loader";
import { loadGovlabConfig } from "#core/loaders/config.loader";
import { ownersInvalid } from "#configuration/strings/quality.strings";
import { validConcepts } from "#core/selectors/concept.selector";
import { validateConcerns } from "#core/validators/concern.validator";
import { validateOwnerOverride } from "#core/validators/surface.validator";

export const loadEmitInputs = async function loadEmitInputs(consumerRoot: string): Promise<EmitInputs> {
    const config = await loadGovlabConfig(consumerRoot);
    const concerns = validateConcerns(config.qualityMaster?.concerns ?? {}, validConcepts());
    const owners = config.qualityMaster?.owners;
    const conflicts = validateOwnerOverride(owners, loadCanonicalData());
    if (conflicts.length > 0) {
        const detail = conflicts.map((conflict) => `  - ${conflict.detail}`).join("\n");
        throw new Error(ownersInvalid(detail));
    }
    return { concerns, config, owners };
};
```
