import { Schema } from '@sprucelabs/schema';
import { FeatureAction, ActionOptions, FeatureCode } from '../features/features.types';
import { GlobalEmitter } from '../GlobalEmitter';
import { BlockedCommands, OptionOverrides } from '../types/cli.types';
import ActionExecuter from './ActionExecuter';
import FeatureInstaller from './FeatureInstaller';
export default class ActionFactory {
    private actionOptions;
    private blockedCommands?;
    private optionOverrides?;
    private static overrides;
    constructor(options: FeatureActionFactoryOptions);
    Action<F extends FeatureCode, S extends Schema = Schema>(options: {
        featureCode: F;
        actionCode: string;
        actionExecuter: ActionExecuter;
        featureInstaller: FeatureInstaller;
    }): FeatureAction<S>;
    static setActionClass(featureCode: FeatureCode, action: string, ExecuteTrackingAction: ActionConstructor): void;
    private static overrideKey;
    static clearActionOverrides(): void;
}
export interface FeatureActionFactoryOptions extends Omit<ActionOptions, 'parent' | 'actionExecuter' | 'featureInstaller'> {
    emitter: GlobalEmitter;
    blockedCommands?: BlockedCommands;
    optionOverrides?: OptionOverrides;
}
type ActionConstructor = new (options: ActionOptions) => FeatureAction;
export {};
