import type { FormatId } from '../format-contract.js'; import { type Diagnostic, type DiagnosticCode } from './diagnostics.js'; export type LockfileErrorCode = 'PARSE_FAILED' | 'FORMAT_DETECT_FAILED' | 'FORMAT_MISMATCH' | 'CAPABILITY_LACK' | 'IRREDUCIBLE_LOSS' | 'INVALID_INPUT' | 'ENRICH_REQUIRED' | 'MISSING_REQUIRED_FIELD' | 'INVARIANT_VIOLATION'; export type ProjectionLossClass = 'enrichable' | 'inherent-meaningful' | 'berry-checksum' | 'structural-expected'; export type ProjectionRemedy = Readonly<{ kind: 'supply'; source: 'packuments' | 'artifacts' | 'manifests' | 'policy'; subject?: string; }> | Readonly<{ kind: 'use-convert'; contract: 'install'; }> | Readonly<{ kind: 'allow-loss'; strict: false; }> | Readonly<{ kind: 'verify-target'; requirement: 'pinned-frozen-oracle'; }>; export interface ProjectionLoss { readonly class: ProjectionLossClass; readonly feature: string; readonly target: FormatId; readonly subject?: Diagnostic['subject']; readonly remedy: ProjectionRemedy; readonly reason: DiagnosticCode; } export interface LockfileError extends Error { readonly code: LockfileErrorCode; readonly diagnostics: readonly Diagnostic[]; readonly losses?: readonly ProjectionLoss[]; readonly cause?: unknown; } interface LockfileErrorConstructor { readonly prototype: LockfileError; new (options: Readonly<{ code: LockfileErrorCode; message?: string; cause?: unknown; diagnostics?: readonly Diagnostic[]; losses?: readonly ProjectionLoss[]; }>): LockfileError; } export declare const LockfileError: LockfileErrorConstructor; export {};