import type { AssetLoadError, Result } from '@forgeax/engine-types';
export interface AssetGraphOptions
{
readonly read: (guid: string, signal: AbortSignal) => Promise>;
readonly maxConcurrentReads?: number;
}
export interface AssetGraphCounters {
readonly loads: number;
readonly cacheHits: number;
readonly readErrors: number;
readonly noChange: number;
readonly listenerFailures: number;
}
export interface AssetGraphSnapshot {
readonly epoch: number;
readonly ready: readonly string[];
readonly pending: number;
readonly resources: number;
readonly sccs: readonly (readonly string[])[];
readonly counters: AssetGraphCounters;
}
type GraphResult = Result
;
type GraphListener = (snapshot: AssetGraphSnapshot) => void;
export declare class AssetGraph
{
private readonly read;
private readonly limit;
private readonly ready;
private readonly forward;
private readonly reverse;
private readonly reads;
private readonly requests;
private readonly listeners;
private readonly lifetime;
private readonly sccs;
private activeReads;
private readWaiters;
private disposed;
private epoch;
private counters;
private currentSnapshot;
constructor(options: AssetGraphOptions
);
load(guid: string, signal?: AbortSignal): Promise>;
invalidate(guid: string): readonly string[];
invalidateForCatalogChange(guids?: readonly string[]): void;
subscribe(listener: GraphListener): () => void;
snapshot(): AssetGraphSnapshot;
lookup(guid: string): P['value'] | undefined;
guidOf(value: P['value']): string | undefined;
dispose(): void;
private loadClosure;
private visit;
private readOnce;
private withPermit;
private link;
private collectAffected;
private drop;
private promote;
private recordScc;
private publish;
}
export {};
//# sourceMappingURL=asset-graph.d.ts.map