import type { ExecutionDetails, Maybe, PromiseOrDirect } from "../interfaces.ts";
import type { Multistep, UnwrapMultistep } from "../multistep.ts";
import type { Step } from "../step.ts";
export declare const nextTick: (cb: () => void) => void;
export type IOEquivalence<TSpec> = null | string | {
    [key in Exclude<keyof TSpec, keyof any[]>]?: string | null;
};
export declare function makeAccessMap<TLookup extends Multistep>($spec: Step, ioEquivalence: IOEquivalence<UnwrapMultistep<TLookup>>): Record<string, Step>;
export declare function ioEquivalenceMatches(io1: IOEquivalence<Multistep>, io2: IOEquivalence<Multistep>): boolean;
export declare function paramSig(paramDepIdByKey: Record<string, number>, depIdToStepId: (depId: number) => number): string;
interface LoadBatch {
    deferred: PromiseWithResolvers<any>;
    batchSpecs: readonly any[];
}
export declare function executeBatches<TLoadInfo extends {
    shared: any;
    attributes: readonly any[];
    params: any;
    /** @deprecated use `shared` instead (it's identical) */
    unary: any;
}, TCallback extends (specs: ReadonlyArray<any>, info: TLoadInfo) => PromiseOrDirect<ReadonlyArray<any>>>(loadBatches: readonly LoadBatch[], loadInfo: TLoadInfo, load: TCallback): Promise<void>;
type LoadCallback = (...args: any[]) => any;
export declare function executeLoad<const TLookup extends Multistep, TItem, TData extends Maybe<TItem> | Maybe<ReadonlyArray<Maybe<TItem>>>, TParams extends Record<string, any>, const TLoadContext extends Multistep = never>(details: ExecutionDetails, sharedDepId: number | null, paramDepIdByKey: Record<string, number>, baseLoadInfo: {
    attributes: readonly any[];
}, load: LoadCallback): PromiseOrDirect<TData>[] | Promise<PromiseOrDirect<TData>[]>;
export {};
//# sourceMappingURL=_loadCommon.d.ts.map