# core/loaders/dependency.loader.ts

> 28 lines of code and 6 definitions.

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

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

## Definitions

- `loadInstallRegistry` (lexical_declaration, line 10, exported)
- `isInstallRegistry` (lexical_declaration, line 6)
- `installRecordFor` (lexical_declaration, line 19, exported)
- `selectableTools` (lexical_declaration, line 26, exported)
- `file` (lexical_declaration, line 11, exported)
- `parsed` (lexical_declaration, line 12, exported)

## Contained in

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

## Uses

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

## Used by

- [core/resolvers/scope.resolver.ts](https://banes-lab.com/source/quality/core/resolvers/scope.resolver.ts.md)
- [core/validators/dependency.validator.ts](https://banes-lab.com/source/quality/core/validators/dependency.validator.ts.md)

## Linked from

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

## Source

```typescript
import type { InstallRecord, InstallRegistry } from "#types/dependency.types";
import { absolutePath } from "@ssot/paths";
import { invalidRegistry } from "#configuration/strings/dependency.strings";
import { readFileSync } from "node:fs";

const isInstallRegistry = function isInstallRegistry(value: unknown): value is InstallRegistry {
    return typeof value === "object" && value !== null && "records" in value && Array.isArray(value.records);
};

export const loadInstallRegistry = function loadInstallRegistry(): InstallRegistry {
    const file = absolutePath("govlab.quality.data.registry");
    const parsed: unknown = JSON.parse(readFileSync(file, "utf8"));
    if (isInstallRegistry(parsed)) {
        return parsed;
    }
    throw new Error(invalidRegistry(file));
};

export const installRecordFor = function installRecordFor(
    tool: string,
    registry: InstallRegistry = loadInstallRegistry(),
): InstallRecord | undefined {
    return registry.records.find((record) => record.tool === tool);
};

export const selectableTools = function selectableTools(
    registry: InstallRegistry = loadInstallRegistry(),
): Set<string> {
    return new Set(
        registry.records.filter((record) => record.disposition === "selectable").map((record) => record.tool),
    );
};
```
