# core/loaders/manifest.loader.ts

> 21 lines of code and 10 definitions.

Tree: Bane's Lab Build Scripts
Language: typescript
Layer: infrastructure
Canonical: https://banes-lab.com/anatomy/build-scripts#file-build-scripts-core-loaders-manifest-loader-ts
Source text: https://banes-lab.com/source/build-scripts/core/loaders/manifest.loader.ts.txt

Listed in [core/loaders](https://banes-lab.com/api/source/build-scripts/core/loaders.md), after [core/loaders/icons.loader.ts](https://banes-lab.com/source/build-scripts/core/loaders/icons.loader.ts.md) and before [core/loaders/metric.loader.ts](https://banes-lab.com/source/build-scripts/core/loaders/metric.loader.ts.md).

## Definitions

- `SELF_GOVERNED_KEY` (lexical_declaration, line 6)
- `GOVERNED_PATH_KEY` (lexical_declaration, line 7)
- `parsedAt` (lexical_declaration, line 9)
- `principlesOf` (lexical_declaration, line 13, exported)
- `governance` (lexical_declaration, line 15, exported)
- `principles` (lexical_declaration, line 16, exported)
- `selfGovernedPathOf` (lexical_declaration, line 20, exported)
- `parsed` (lexical_declaration, line 21, exported)
- `governed` (lexical_declaration, line 22, exported)
- `path` (lexical_declaration, line 23, exported)

## Contained in

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

## Source

```typescript
import { existsSync, readFileSync } from "node:fs";
import { MODULE_MANIFEST_NAME } from "#configuration/constants/loader.constants";
import { isRecord } from "#core/selectors/base.selector";
import { join } from "node:path";

const SELF_GOVERNED_KEY = "selfGoverned";
const GOVERNED_PATH_KEY = "paths";

const parsedAt = function parsedAt(file: string): unknown {
    return existsSync(file) ? JSON.parse(readFileSync(file, "utf8")) : null;
};

export const principlesOf = function principlesOf(folder: string, source: string): readonly string[] {
    const parsed = source.length === 0 ? null : parsedAt(join(folder, source));
    const governance = isRecord(parsed) ? parsed["governance"] : null;
    const principles = isRecord(governance) ? governance["principles"] : null;
    return Array.isArray(principles) ? principles.filter((id): id is string => typeof id === "string") : [];
};

export const selfGovernedPathOf = function selfGovernedPathOf(root: string): string | null {
    const parsed = parsedAt(join(root, MODULE_MANIFEST_NAME));
    const governed = isRecord(parsed) ? parsed[SELF_GOVERNED_KEY] : null;
    const path = isRecord(governed) ? governed[GOVERNED_PATH_KEY] : null;
    return typeof path === "string" ? path : null;
};
```
