import type { PackumentVersion, RegistryAdapter } from '../registry/types.js'; import type { RejectedCandidate } from './diagnostics.js'; export type Awaitable = T | Promise; export type Verdict = { ok: true; } | { ok: false; reason?: string; } | { ok: 'unevaluable'; reason?: string; }; export interface ConditionContext { readonly name: string; readonly version: string; readonly corgi: PackumentVersion; manifest(): Promise; readonly registry: RegistryAdapter; } export interface Condition { readonly kind: string; readonly cost?: number; evaluate(ctx: ConditionContext): Awaitable; } export type OnUnevaluable = 'reject' | 'accept'; export interface SelectResult { selected?: PackumentVersion; rejected: RejectedCandidate[]; } export declare function engines(required: Record, opts?: { mode?: 'lenient' | 'strict'; }): Condition; export declare function license(policy: { allow?: readonly string[]; deny?: readonly string[]; }): Condition; export declare function selectConstrained(registry: RegistryAdapter, name: string, range: string, constraints: readonly Condition[], onUnevaluable: OnUnevaluable): Promise; export declare function constrainedCandidates(registry: RegistryAdapter, name: string, range: string, constraints: readonly Condition[], onUnevaluable: OnUnevaluable): AsyncGenerator<{ version: string; node: PackumentVersion; }>;