import type { AnyCaseNodeOrData } from '../../entities/types';
export declare const SETUP_NAMED_STATE: "case:NamedState";
export declare const SETUP_VARIABLE_STATE: "case:StateWithVariables";
export type NameOnlyState = HasTypeForState<typeof SETUP_NAMED_STATE> & {
    stateName: string;
};
export type StateWithVariables = HasTypeForState<typeof SETUP_VARIABLE_STATE> & {
    stateName: string;
    variables: Record<string, AnyCaseNodeOrData>;
};
export type AnyStateType = typeof SETUP_NAMED_STATE | typeof SETUP_VARIABLE_STATE;
export type AnyState = NameOnlyState | StateWithVariables;
export type HasTypeForState<T extends AnyStateType> = {
    'case:state:type': T;
};
export type PromiseOrRaw<T> = Promise<T> | T;
type SetupFunction = () => PromiseOrRaw<Record<string, AnyCaseNodeOrData> | void>;
type TeardownFunction = () => PromiseOrRaw<void>;
type SetupTeardown = {
    setup: SetupFunction;
    teardown: TeardownFunction;
};
export type StateHandlers = Record<string, SetupFunction | SetupTeardown>;
export declare const isSetupFunction: (f: SetupFunction | SetupTeardown | undefined) => f is SetupFunction;
export {};
