# core/resolvers/package.resolver.ts

> 21 lines of code and 8 definitions.

Tree: GovLab Patterns
Language: typescript
Layer: infrastructure
Canonical: https://banes-lab.com/anatomy/patterns#file-patterns-core-resolvers-package-resolver-ts
Source text: https://banes-lab.com/source/patterns/core/resolvers/package.resolver.ts.txt

Listed in [core/resolvers](https://banes-lab.com/api/source/patterns/core/resolvers.md), after [core/resolvers/math.resolver.ts](https://banes-lab.com/source/patterns/core/resolvers/math.resolver.ts.md) and before [core/resolvers/representation.resolver.ts](https://banes-lab.com/source/patterns/core/resolvers/representation.resolver.ts.md).

## Definitions

- `isSelfGoverned` (lexical_declaration, line 9, exported)
- `titleFor` (lexical_declaration, line 18, exported)
- `MEMBER_MANIFEST` (lexical_declaration, line 5)
- `SELF_GOVERNED_KEY` (lexical_declaration, line 6)
- `PATH_SEP` (lexical_declaration, line 7)
- `manifest` (lexical_declaration, line 10, exported)
- `parsed` (lexical_declaration, line 14, exported)
- `rel` (lexical_declaration, line 22, exported)

## Contained in

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

## Uses

- [core/predicates/record.predicate.ts](https://banes-lab.com/source/patterns/core/predicates/record.predicate.ts.md)

## Used by

- [runtime/entrypoints/report.entrypoint.ts](https://banes-lab.com/source/patterns/runtime/entrypoints/report.entrypoint.ts.md)

## Linked from

- [core/predicates](https://banes-lab.com/anatomy/patterns/folder-patterns-core-predicates.md)
- [core/resolvers](https://banes-lab.com/anatomy/patterns/folder-patterns-core-resolvers.md)
- [runtime/entrypoints](https://banes-lab.com/anatomy/patterns/folder-patterns-runtime-entrypoints.md)

## Source

```typescript
import { basename, join, relative, sep } from "node:path";
import { existsSync, readFileSync } from "node:fs";
import { isRecord } from "#core/predicates/record.predicate";

const MEMBER_MANIFEST = "_manifest.json";
const SELF_GOVERNED_KEY = "selfGoverned";
const PATH_SEP = "/";

export const isSelfGoverned = function isSelfGoverned(moduleDir: string): boolean {
    const manifest = join(moduleDir, MEMBER_MANIFEST);
    if (!existsSync(manifest)) {
        return false;
    }
    const parsed: unknown = JSON.parse(readFileSync(manifest, "utf8"));
    return isRecord(parsed) && SELF_GOVERNED_KEY in parsed;
};

export const titleFor = function titleFor(root: string, moduleDir: string): string {
    if (isSelfGoverned(moduleDir)) {
        return basename(moduleDir);
    }
    const rel = relative(root, moduleDir);
    return rel.length > 0 ? rel.split(sep).join(PATH_SEP) : basename(moduleDir);
};
```
