# core/resolvers/source.resolver.ts

> 31 lines of code and 8 definitions.

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

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

## Definitions

- `relFromModules` (lexical_declaration, line 12, exported)
- `posix` (lexical_declaration, line 8)
- `resolveTargetFile` (lexical_declaration, line 17, exported)
- `targetExists` (lexical_declaration, line 34, exported)
- `PARENT_PREFIX` (lexical_declaration, line 6)
- `rel` (lexical_declaration, line 23, exported)
- `fromRoot` (lexical_declaration, line 26, exported)
- `fromModule` (lexical_declaration, line 30, exported)

## Contained in

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

## Uses

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

## Used by

- [core/analyzers/definition.analyzer.ts](https://banes-lab.com/source/docs/core/analyzers/definition.analyzer.ts.md)
- [core/factories/code.typescript.factory.ts](https://banes-lab.com/source/docs/core/factories/code.typescript.factory.ts.md)
- [core/plugins/code.typescript.plugin.ts](https://banes-lab.com/source/docs/core/plugins/code.typescript.plugin.ts.md)
- [core/validators/manifest.prose.validator.ts](https://banes-lab.com/source/docs/core/validators/manifest.prose.validator.ts.md)

## Linked from

- [core/analyzers](https://banes-lab.com/anatomy/docs/folder-docs-core-analyzers.md)
- [core/factories](https://banes-lab.com/anatomy/docs/folder-docs-core-factories.md)
- [core/plugins](https://banes-lab.com/anatomy/docs/folder-docs-core-plugins.md)
- [core/predicates](https://banes-lab.com/anatomy/docs/folder-docs-core-predicates.md)
- [core/resolvers](https://banes-lab.com/anatomy/docs/folder-docs-core-resolvers.md)
- [core/validators](https://banes-lab.com/anatomy/docs/folder-docs-core-validators.md)

## Source

```typescript
import { relative, resolve } from "node:path";
import { ROOT } from "@ssot/paths";
import { existsSync } from "node:fs";
import { isRelativeTarget } from "#core/predicates/reference.predicate";

const PARENT_PREFIX = "..";

const posix = function posix(file: string): string {
    return file.split("\\").join("/");
};

export const relFromModules = function relFromModules(file: string): string {
    const rel = relative(ROOT, file);
    return rel.startsWith(PARENT_PREFIX) ? posix(file) : posix(rel);
};

export const resolveTargetFile = function resolveTargetFile(
    file: string,
    moduleDir: string,
    consumerRoot: string,
): string | null {
    if (isRelativeTarget(file)) {
        const rel = resolve(moduleDir, file);
        return existsSync(rel) ? rel : null;
    }
    const fromRoot = resolve(consumerRoot, file);
    if (existsSync(fromRoot)) {
        return fromRoot;
    }
    const fromModule = resolve(moduleDir, file);
    return existsSync(fromModule) ? fromModule : null;
};

export const targetExists = function targetExists(target: string, moduleDir: string, consumerRoot: string): boolean {
    return resolveTargetFile(target, moduleDir, consumerRoot) !== null;
};
```
