63 lines
2.1 KiB
JavaScript
63 lines
2.1 KiB
JavaScript
import { buildFindings, createFileRecord } from "./finding-engine.js";
|
|
import { extractReferencesFromValue } from "./reference-extractor.js";
|
|
import { createFileLocator } from "./path-utils.js";
|
|
|
|
export async function analyzeStorage({ listFiles, listSources, onProgress }={}) {
|
|
const files = [];
|
|
let fileCount = 0;
|
|
let sourceCount = 0;
|
|
let referenceCount = 0;
|
|
|
|
onProgress?.({ phase: "files", label: "Scanne Dateien", files: 0, sources: 0, references: 0 });
|
|
for await (const entry of listFiles()) {
|
|
files.push(createFileRecord(createFileLocator(entry.storage, entry.path), entry.size ?? null));
|
|
fileCount += 1;
|
|
if ((fileCount % 100) === 0) {
|
|
onProgress?.({ phase: "files", label: "Scanne Dateien", files: fileCount, sources: sourceCount, references: referenceCount });
|
|
await yieldToUI();
|
|
}
|
|
}
|
|
|
|
const references = [];
|
|
onProgress?.({ phase: "sources", label: "Lese Referenzen", files: fileCount, sources: 0, references: 0 });
|
|
for await (const source of listSources()) {
|
|
sourceCount += 1;
|
|
const extracted = extractReferencesFromValue(source.value, {
|
|
sourceType: source.sourceType,
|
|
sourceScope: source.sourceScope,
|
|
sourceLabel: source.sourceLabel,
|
|
sourceName: source.sourceName,
|
|
sourceUuid: source.sourceUuid
|
|
});
|
|
references.push(...extracted);
|
|
referenceCount += extracted.length;
|
|
if ((sourceCount % 50) === 0) {
|
|
onProgress?.({
|
|
phase: "sources",
|
|
label: "Lese Referenzen",
|
|
files: fileCount,
|
|
sources: sourceCount,
|
|
references: referenceCount,
|
|
currentSource: source.sourceLabel
|
|
});
|
|
await yieldToUI();
|
|
}
|
|
}
|
|
|
|
onProgress?.({ phase: "findings", label: "Klassifiziere Findings", files: fileCount, sources: sourceCount, references: referenceCount });
|
|
const findings = buildFindings({ files, references });
|
|
onProgress?.({
|
|
phase: "done",
|
|
label: "Analyse abgeschlossen",
|
|
files: fileCount,
|
|
sources: sourceCount,
|
|
references: referenceCount,
|
|
findings: findings.length
|
|
});
|
|
return { files, references, findings };
|
|
}
|
|
|
|
async function yieldToUI() {
|
|
await new Promise(resolve => setTimeout(resolve, 0));
|
|
}
|