Assessor_2.0/src/features/project-import/policy-backup-impact-source...

20 lines
1.1 KiB
TypeScript

import type { FindingRecord } from '../../domain/finding';
import { policyBackupImpactKey, type PolicyWorkResult } from '../../evaluation/policy-work-results';
import { policySourceReference } from '../../profiles/group-policy/source-presentation';
/** All evidence sources of a Fail comparison, not a new per-backup verdict. */
export function policyBackupImpactSources(result: PolicyWorkResult): NonNullable<FindingRecord['policyFailingBackupSources']> {
if (result.status !== 'Fail') return [];
const sources = new Map<string, { id: string; label: string }>();
for (const source of result.sources) {
const id = policyBackupImpactKey(source);
if (!id || sources.has(id)) continue;
const reference = policySourceReference(source.sourceLocator?.objectPath);
const nativeBackup = /^(\{[0-9a-f-]+\})\//i.exec(reference)?.[1];
// Include the retained internal identity so equal names/references never hide distinct backups.
const label = [nativeBackup, source.policyBackupInstanceId, source.importedAt].filter(Boolean).join(' · ');
sources.set(id, { id, label });
}
return [...sources.values()];
}