import { Debugger } from 'debug';
import { Task } from './engine';
import { ValueQueueManager } from './engine/value-queue-manager';
export declare enum FlowStateEnum {
    Ready = "Ready",
    Running = "Running",
    Finished = "Finished",
    Pausing = "Pausing",
    Paused = "Paused",
    Stopping = "Stopping",
    Stopped = "Stopped"
}
export declare enum FlowTransitionEnum {
    Start = "Start",
    Finished = "Finished",
    Reset = "Reset",
    Pause = "Pause",
    Paused = "Paused",
    Resume = "Resume",
    Stop = "Stop",
    Stopped = "Stopped"
}
export type AnyValue = any;
export type TransformTemplate = AnyValue;
export type OptPromise<T> = T | Promise<T>;
export interface ValueMap {
    [key: string]: AnyValue;
}
export type GenericValueMap = ValueMap;
export interface ITaskResolver {
    exec(params: ValueMap, context?: ValueMap, task?: Task, debug?: Debugger, log?: LoggerFn): OptPromise<ValueMap>;
}
export declare class TaskResolver implements ITaskResolver {
    exec(_params: ValueMap, _context?: ValueMap, _task?: Task, _debug?: Debugger, _log?: LoggerFn): OptPromise<ValueMap>;
}
export type TaskResolverFn = (params: ValueMap, context?: ValueMap, task?: Task, debug?: Debugger, log?: LoggerFn) => OptPromise<ValueMap>;
export type TaskResolverClass = typeof TaskResolver;
export type TaskResolverExecutor = TaskResolverClass | TaskResolverFn;
export declare class TaskResolverMap {
    [key: string]: TaskResolverExecutor;
}
export interface TaskMap {
    [code: string]: Task;
}
export interface TaskRunStatus {
    solvedReqs: ValueQueueManager;
    solvedResults: ValueMap;
}
export interface FlowedPlugin {
    resolverLibrary: TaskResolverMap;
}
export interface FlowedLogger {
    log(entry: FlowedLogEntry): void;
}
export interface FlowedLogEntry {
    timestamp: Date;
    level: string;
    eventType: string;
    message: string;
    objectId?: string;
    tags?: string[];
    extra?: ValueMap;
}
export type LoggerFn = ({ n, m, mp, l, e }: {
    n?: number;
    m: string;
    mp?: ValueMap;
    l?: string;
    e?: string;
}) => void;
