import type { Diagnostic } from '../graph.js'; import type { FormatId } from './format-contract.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: 'registry' | 'artifacts' | 'manifests' | 'config'; subject?: string; }> | Readonly<{ kind: 'use-project-api'; api: 'convertProject'; }> | Readonly<{ kind: 'allow-loss'; option: 'strict'; value: 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 diagnostic: Diagnostic; } export interface LockfileErrorInit { code: LockfileErrorCode; message?: string; cause?: unknown; diagnostics?: readonly Diagnostic[]; losses?: readonly ProjectionLoss[]; } export declare class LockfileError extends Error { readonly code: LockfileErrorCode; readonly diagnostics: readonly Diagnostic[]; readonly losses?: readonly ProjectionLoss[]; constructor(init: LockfileErrorInit); }