export type NpmRegistryFailure = { kind: 'http-error'; status: number; } | { kind: 'invalid-response'; } | { kind: 'transport-error'; message: string; }; export type NpmRegistryFetch = (input: string | URL, init?: RequestInit) => Promise>; export type NpmVersionResolution = { status: 'resolved'; version: string; } | { status: 'no-target'; reason: NpmVersionNoTargetReason; } | { status: 'error'; failure: NpmRegistryFailure; }; export type NpmDistTagResult = { status: 'resolved'; version: string; } | { status: 'missing'; } | { status: 'invalid'; value: unknown; } | { status: 'error'; failure: NpmRegistryFailure; }; export type NpmDistTagClassification = Exclude; export type NpmVersionNoTargetReason = { kind: 'missing-channel'; channel: string; } | { kind: 'invalid-channel-version'; channel: string; version: string; } | { kind: 'prerelease-channel'; channel: string; version: string; } | { kind: 'unacceptable-latest'; version: string | null; } | { kind: 'no-valid-candidates'; }; export type NpmDistTagsResult = { status: 'ok'; tags: Record; } | { status: 'error'; failure: NpmRegistryFailure; }; /** The sole injected registry boundary used by all target resolvers. */ export type NpmDistTagsLoader = () => Promise; export declare function decodeNpmDistTags(value: unknown): Record | null; export declare function isValidSemver(value: string): boolean; export declare function isPrerelease(value: string): boolean; export type ExplicitNpmUpdateTargetDecision = { status: 'allowed'; version: string; } | { status: 'rejected'; reason: string; } | { status: 'registry-error'; reason: string; failure: NpmRegistryFailure; }; /** The one pure owner of missing, malformed, and validated dist-tag states. */ export declare function classifyNpmDistTag(tags: Readonly>, tag: string): NpmDistTagClassification; /** Canonical npm-registry boundary shared by automatic and explicit updates. */ export declare function fetchNpmDistTags(deps?: { fetch?: NpmRegistryFetch; }): Promise; export declare function resolveNpmDistTag(tag: string, loadDistTags?: NpmDistTagsLoader): Promise; /** * Classify an explicit update target. Dist-tags resolve to one concrete version; * ranges, aliases, unknown tags, and registry failures fail closed. */ export declare function resolveExplicitNpmUpdateTarget(target: string, allowPrerelease: boolean, loadDistTags?: NpmDistTagsLoader): Promise; /** Pure channel/default selection over one already-decoded registry response. */ export declare function selectNpmVersionTarget(result: NpmDistTagsResult, allowPrerelease?: boolean, channel?: string): NpmVersionResolution; /** Select the version followed by automatic polling or an explicit channel pin. */ export declare function resolveNpmVersionTarget(allowPrerelease?: boolean, channel?: string, loadDistTags?: NpmDistTagsLoader): Promise; export declare function compareSemver(a: string, b: string): number; //# sourceMappingURL=npm-registry.d.ts.map