import type { AnyExecutionContext } from '../../../../framework-types/execution-context/ExecutionContext';
import type { NamedTask, Task } from '../../../../framework-types/task/Types';
import type { ContextWithState } from '../../Types';
export type Prioritize<Payload, Context extends AnyExecutionContext, TechnologyName extends string> = (supportedTechnologies: Technology<Payload, Context, TechnologyName>[]) => Technology<Payload, Context, TechnologyName>;
export type Technology<Payload, Context extends AnyExecutionContext, TechnologyName extends string> = {
    name: TechnologyName;
    supported: NamedTask<Task<Context, Payload, boolean>>;
    instantiate: NamedTask<Task<Context, Payload, void>>;
};
export type Factory<Payload, Context extends AnyExecutionContext, TechnologyName extends string> = {
    resolve: NamedTask<Task<Context, Payload, void>>;
    add(technology: Technology<Payload, Context, TechnologyName>, abortSignal: AbortSignal): void;
};
export declare const TechnologyExport = "technology";
export type TechnologyExports = {
    [TechnologyExport]: {
        create: <Payload, Context extends AnyExecutionContext, TechnologyName extends string>(context: ContextWithState, prioritize: Prioritize<Payload, Context, TechnologyName>) => Factory<Payload, Context, TechnologyName>;
    };
};
