core/converters/snapshot.converter.ts
core/converters/snapshot.converter.ts is a file in Bane's Lab Build Scripts. 54 lines of code and 7 definitions.
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),
};
};