import type { ComponentType, SFC } from 'react';
import type { IAccountDetails } from '../../account/AccountService';
import type { Application } from '../../application/application.model';
import type { IArtifactEditorProps, IArtifactKindConfig, IExecution, INotificationTypeConfig, IStage, IStageTypeConfig, ITriggerTypeConfig } from '../../domain';
import type { ITriggerTemplateComponentProps } from '../manualExecution/TriggerTemplate';
export interface ITransformer {
    transform: (application: Application, execution: IExecution) => void;
}
export declare class PipelineRegistry {
    private triggerTypes;
    private stageTypes;
    private transformers;
    private notificationTypes;
    private artifactKinds;
    constructor();
    private normalizeStageTypes;
    registerNotification(notificationConfig: INotificationTypeConfig): void;
    registerTrigger(triggerConfig: ITriggerTypeConfig): void;
    registerTransformer(transformer: ITransformer): void;
    registerStage(stageConfig: IStageTypeConfig): void;
    /**
     * Registers a custom UI for a preconfigured run job stage.
     *
     * Fetches and applies the preconfigured job configuration from Gate.
     * The following IStageTypeConfig fields are overwritten:
     *
     * - configuration.parameters
     * - configuration.waitForCompletion
     * - defaults
     * - description
     * - label
     * - producesArtifacts
     *
     * @param stageConfigSkeleton a partial IStageTypeConfig (typically from makePreconfiguredJobStage())
     * @returns a promise for the IStageTypeConfig that got registered
     */
    registerPreconfiguredJobStage(stageConfigSkeleton: IStageTypeConfig): Promise<IStageTypeConfig>;
    registerArtifactKind(artifactKindConfig: IArtifactKindConfig): ComponentType<IArtifactEditorProps> | SFC<IArtifactEditorProps>;
    getExecutionTransformers(): ITransformer[];
    getNotificationTypes(): INotificationTypeConfig[];
    getTriggerTypes(): ITriggerTypeConfig[];
    getStageTypes(): IStageTypeConfig[];
    getMatchArtifactKinds(): IArtifactKindConfig[];
    getDefaultArtifactKinds(): IArtifactKindConfig[];
    getCustomArtifactKind(): IArtifactKindConfig;
    private getCloudProvidersForStage;
    getConfigurableStageTypes(accounts?: IAccountDetails[]): IStageTypeConfig[];
    getProvidersFor(key: string): IStageTypeConfig[];
    getNotificationConfig(type: string): INotificationTypeConfig;
    getTriggerConfig(type: string): ITriggerTypeConfig;
    overrideManualExecutionComponent(triggerType: string, component: React.ComponentType<ITriggerTemplateComponentProps>): void;
    /**
     * Checks stage.type against stageType.alias to match stages that may have run as a legacy type.
     * StageTypes set alias='legacyName' for backwards compatibility
     * @param stage
     */
    private checkAliasedStageTypes;
    /**
     * Checks stage.alias against stageType.key to gracefully degrade redirected stages
     * For stages that don't actually exist in orca, if we couldn't find a match for them in deck either
     * (i.e. deprecated/deleted) this allows us to fallback to the stage type that actually ran in orca
     * @param stage
     */
    private checkAliasFallback;
    getStageConfig(stage: IStage): IStageTypeConfig;
    private static resolveCloudProvider;
    private getManualExecutionComponent;
    getManualExecutionComponentForTriggerType(triggerType: string): React.ComponentType<ITriggerTemplateComponentProps>;
    hasManualExecutionComponentForTriggerType(triggerType: string): boolean;
    getManualExecutionComponentForStage(stage: IStage): React.ComponentType<ITriggerTemplateComponentProps>;
}
