# shared/resolvers/location.resolver.ts

> 29 lines of code and 9 definitions.

Tree: Governance tree
Language: typescript
Layer: infrastructure
Canonical: https://banes-lab.com/anatomy/governance#file-governance-shared-resolvers-location-resolver-ts
Source text: https://banes-lab.com/source/governance/shared/resolvers/location.resolver.ts.txt

Listed in [shared/resolvers](https://banes-lab.com/api/source/governance/shared/resolvers.md), after [shared/resolvers/container.resolver.ts](https://banes-lab.com/source/governance/shared/resolvers/container.resolver.ts.md) and before [shared/resolvers/scope.resolver.ts](https://banes-lab.com/source/governance/shared/resolvers/scope.resolver.ts.md).

## Definitions

- `MEMBER_MANIFEST` (lexical_declaration, line 6)
- `SELF_GOVERNED_KEY` (lexical_declaration, line 7)
- `PATHS_FIELD` (lexical_declaration, line 8)
- `declaredPaths` (lexical_declaration, line 10)
- `paths` (lexical_declaration, line 18)
- `memberPathsConfig` (lexical_declaration, line 22)
- `manifest` (lexical_declaration, line 23)
- `declared` (lexical_declaration, line 27)
- `MEMBER_PATHS_CONFIGS` (lexical_declaration, line 31, exported)

## Source

```typescript
import { PROJECT_ROOT, normalizePath } from "./anchor.resolver.ts";
import { existsSync, readdirSync } from "node:fs";
import { join } from "node:path";
import { jsonRecordAt } from "../loaders/manifest.loader.ts";

const MEMBER_MANIFEST = "_manifest.json";
const SELF_GOVERNED_KEY = "selfGoverned";
const PATHS_FIELD = "paths";

const declaredPaths = function declaredPaths(parsed: unknown): string | null {
    if (typeof parsed !== "object" || parsed === null || !(SELF_GOVERNED_KEY in parsed)) {
        return null;
    }
    const declared: unknown = parsed[SELF_GOVERNED_KEY];
    if (typeof declared !== "object" || declared === null || !(PATHS_FIELD in declared)) {
        return null;
    }
    const paths: unknown = declared[PATHS_FIELD];
    return typeof paths === "string" ? paths : null;
};

const memberPathsConfig = function memberPathsConfig(member: string): string[] {
    const manifest = join(PROJECT_ROOT, member, MEMBER_MANIFEST);
    if (!existsSync(manifest)) {
        return [];
    }
    const declared = declaredPaths(jsonRecordAt(manifest));
    return declared === null ? [] : [normalizePath(join(PROJECT_ROOT, member, declared))];
};

export const MEMBER_PATHS_CONFIGS: ReadonlySet<string> = new Set(
    existsSync(PROJECT_ROOT) ? readdirSync(PROJECT_ROOT).flatMap(memberPathsConfig) : [],
);
```
