import type { AnyRecord, EmptyObject } from '../BaseTypes';
import type { AnyEffectFactory, EffectFactory } from '../effect/Types';
import type { AnyExecutionContext, ExecutionContext } from './ExecutionContext';
type ContextWithExtensionFactories<T extends AnyEffectFactory[]> = T extends [
    EffectFactory<any, infer P>,
    ...infer R
] ? P & (R extends AnyEffectFactory[] ? ContextWithExtensionFactories<R> : EmptyObject) : EmptyObject;
type ContextRegistryMap<C> = C extends ExecutionContext<AnyRecord, infer R> ? R : AnyRecord;
export type ContextUsing<Factories extends AnyEffectFactory[], BaseContext extends AnyExecutionContext> = ExecutionContext<ContextWithExtensionFactories<Factories> & BaseContext['effects'], ContextRegistryMap<BaseContext>>;
export type ContextHaving<Dependencies extends AnyRecord, Exports extends AnyRecord, BaseContext extends AnyExecutionContext> = ExecutionContext<BaseContext['effects'], ContextRegistryMap<BaseContext> & Dependencies & Partial<Exports>>;
export type PrintConfig = {
    styled: boolean;
    cascading: boolean;
};
export interface ErrorWithPath extends Error {
    path: string[];
    printPath: (config?: PrintConfig) => void;
}
export {};
