# core/converters/snapshot.converter.ts

> 54 lines of code and 7 definitions.

Tree: Bane's Lab Build Scripts
Language: typescript
Layer: processing
Canonical: https://banes-lab.com/anatomy/build-scripts#file-build-scripts-core-converters-snapshot-converter-ts
Source text: https://banes-lab.com/source/build-scripts/core/converters/snapshot.converter.ts.txt

Listed in [core/converters](https://banes-lab.com/api/source/build-scripts/core/converters.md), after [core/converters/site.converter.ts](https://banes-lab.com/source/build-scripts/core/converters/site.converter.ts.md) and before [core/converters/source.converter.ts](https://banes-lab.com/source/build-scripts/core/converters/source.converter.ts.md).

## Definitions

- `qualifiedFinding` (lexical_declaration, line 26)
- `qualifiedRef` (lexical_declaration, line 12)
- `qualifiedDefinition` (lexical_declaration, line 16)
- `qualifiedFile` (lexical_declaration, line 30)
- `qualifiedFolder` (lexical_declaration, line 40)
- `qualifiedSnapshot` (lexical_declaration, line 51, exported)
- `Qualify` (type_alias_declaration, line 10)

## Contained in

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

## Uses

- [core/coordinators/anatomy.coordinator.ts](https://banes-lab.com/source/build-scripts/core/coordinators/anatomy.coordinator.ts.md)

## Used by

- [core/coordinators/anatomy.coordinator.ts](https://banes-lab.com/source/build-scripts/core/coordinators/anatomy.coordinator.ts.md)

## Linked from

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

## Source

```typescript
import type {
    AnatomyFile,
    AnatomyFolder,
    AnatomySnapshot,
    DefinitionRef,
    DefinitionView,
    FindingView,
} from "@banes-lab/web/types/anatomy.types.js";

type Qualify = (path: string) => string;

const qualifiedRef = function qualifiedRef(qualify: Qualify, ref: DefinitionRef): DefinitionRef {
    return { ...ref, file: qualify(ref.file), id: qualify(ref.id) };
};

const qualifiedDefinition = function qualifiedDefinition(qualify: Qualify, definition: DefinitionView): DefinitionView {
    return {
        ...definition,
        callees: definition.callees.map((ref) => qualifiedRef(qualify, ref)),
        callers: definition.callers.map((ref) => qualifiedRef(qualify, ref)),
        file: qualify(definition.file),
        id: qualify(definition.id),
    };
};

const qualifiedFinding = function qualifiedFinding(qualify: Qualify, finding: FindingView): FindingView {
    return { ...finding, file: qualify(finding.file) };
};

const qualifiedFile = function qualifiedFile(qualify: Qualify, file: AnatomyFile): AnatomyFile {
    return {
        ...file,
        definitions: file.definitions.map((definition) => qualifiedDefinition(qualify, definition)),
        findings: file.findings.map((finding) => qualifiedFinding(qualify, finding)),
        id: qualify(file.id),
        path: qualify(file.path),
    };
};

const qualifiedFolder = function qualifiedFolder(qualify: Qualify, folder: AnatomyFolder): AnatomyFolder {
    return {
        ...folder,
        files: folder.files.map((file) => qualifiedFile(qualify, file)),
        findings: folder.findings.map((finding) => qualifiedFinding(qualify, finding)),
        folders: folder.folders.map((child) => qualifiedFolder(qualify, child)),
        id: qualify(folder.id),
        path: qualify(folder.path),
    };
};

export const qualifiedSnapshot = function qualifiedSnapshot(
    snapshot: AnatomySnapshot,
    qualify: Qualify,
): AnatomySnapshot {
    return {
        ...snapshot,
        findings: snapshot.findings.map((finding) => qualifiedFinding(qualify, finding)),
        imports: snapshot.imports.map((edge) => ({ ...edge, from: qualify(edge.from), to: qualify(edge.to) })),
        tree: qualifiedFolder(qualify, snapshot.tree),
    };
};
```
