# core/resolvers/location.root.resolver.ts

> 25 lines of code and 7 definitions.

Tree: GovLab Paths
Language: typescript
Layer: infrastructure
Canonical: https://banes-lab.com/anatomy/paths#file-paths-core-resolvers-location-root-resolver-ts
Source text: https://banes-lab.com/source/paths/core/resolvers/location.root.resolver.ts.txt

Listed in [core/resolvers](https://banes-lab.com/api/source/paths/core/resolvers.md), after [core/resolvers/location.resolver.ts](https://banes-lab.com/source/paths/core/resolvers/location.resolver.ts.md).

## Definitions

- `isWorkspaceRoot` (lexical_declaration, line 7)
- `deriveRoot` (lexical_declaration, line 16)
- `manifest` (lexical_declaration, line 8)
- `parsed` (lexical_declaration, line 12)
- `dir` (lexical_declaration, line 17)
- `parent` (lexical_declaration, line 19)
- `ROOT` (lexical_declaration, line 28, exported)

## Contained in

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

## Uses

- [configuration/strings/location.strings.ts](https://banes-lab.com/source/paths/configuration/strings/location.strings.ts.md)
- [core/predicates/location.predicate.ts](https://banes-lab.com/source/paths/core/predicates/location.predicate.ts.md)

## Linked from

- [configuration/strings](https://banes-lab.com/anatomy/paths/folder-paths-configuration-strings.md)
- [core/predicates](https://banes-lab.com/anatomy/paths/folder-paths-core-predicates.md)
- [core/resolvers](https://banes-lab.com/anatomy/paths/folder-paths-core-resolvers.md)

## Source

```typescript
import { MANIFEST_NAME, WORKSPACE_NAME } from "#configuration/constants/location.constants";
import { dirname, join } from "node:path";
import { existsSync, readFileSync } from "node:fs";
import { isRecord } from "#core/predicates/location.predicate";
import { rootNotFound } from "#configuration/strings/location.strings";

const isWorkspaceRoot = function isWorkspaceRoot(dir: string): boolean {
    const manifest = join(dir, MANIFEST_NAME);
    if (!existsSync(manifest)) {
        return false;
    }
    const parsed: unknown = JSON.parse(readFileSync(manifest, "utf8"));
    return isRecord(parsed) && parsed["name"] === WORKSPACE_NAME && Boolean(parsed["workspaces"]);
};

const deriveRoot = function deriveRoot(): string {
    let dir = import.meta.dirname;
    while (!isWorkspaceRoot(dir)) {
        const parent = dirname(dir);
        if (parent === dir) {
            throw new Error(rootNotFound(WORKSPACE_NAME));
        }
        dir = parent;
    }
    return dir;
};

export const ROOT = deriveRoot();
```
