//#region src/app/internal/prefetch.d.ts /** drained in this order */ declare const PREFETCH_PRIORITIES: readonly ["route", "payload", "island", "hint"]; export type PrefetchPriority = typeof PREFETCH_PRIORITIES[number]; export interface PrefetchTask { /** A task whose key is already queued or in flight is dropped. */ key: string; priority: PrefetchPriority; /** `navigation` tasks are aborted and dequeued when the app navigates. */ scope: 'navigation' | 'app'; /** The destination this work belongs to. Promoted together, and retained across a navigation to it. */ group?: string; /** * Runs exactly once, so that callers can rely on its result settling. A dropped task (a * duplicate key, or dequeued by a navigation) is run with an aborted signal rather than * given a slot. */ run: (signal: AbortSignal, promoted: boolean) => unknown | Promise; } interface PrefetchSchedulerOptions { total?: number; /** Per-priority caps keep one kind of work, such as slow resource hints, off the whole budget. */ concurrency?: Partial>; /** Consulted before each drain; queued tasks are held, not dropped, when it returns `false`. */ canPrefetch?: () => boolean; /** Hands a started task to the event loop. Slots are accounted for before this is called. */ defer?: (run: () => void, promoted: boolean, priority: PrefetchPriority) => void; } export interface PrefetchScheduler { /** A batch is queued ahead of work already queued at the same priority, keeping its own order. */ schedule: (task: PrefetchTask | PrefetchTask[]) => void; /** Move every queued task in this group to the front of its priority. */ promote: (group: string) => void; /** * Abort in-flight `navigation` tasks and drop queued ones, except work for `retainGroup`. * Its forwarded hints go too, as a destination re-declares those itself once it is current. */ reset: (retainGroup?: string) => void; /** Drain again, once something that was holding work back has changed. */ resume: () => void; /** @internal */ inspect?: () => { active: number; pending: string[]; }; } export declare function createPrefetchScheduler(options?: PrefetchSchedulerOptions): PrefetchScheduler; //#endregion export {};