import { EditMode } from "@atomist/automation-client/lib/operations/edit/editModes";
import { Project } from "@atomist/automation-client/lib/project/Project";
import { NoParameters } from "@atomist/automation-client/lib/SmartParameters";
import { TransformResult } from "./CodeTransform";
import { ProjectOperationRegistration } from "./ProjectOperationRegistration";
import { ProjectsOperationRegistration } from "./ProjectsOperationRegistration";
import { PushAwareParametersInvocation } from "./PushAwareParametersInvocation";
/**
 * Signature to create an EditMode out of a PushAwareParametersInvocation and Project.
 */
export declare type TransformPresentation<PARAMS> = (papi: PushAwareParametersInvocation<PARAMS>, p: Project) => EditMode;
/**
 * Type for registering a project transform, which can make changes
 * across projects
 */
export interface CodeTransformRegistration<PARAMS = NoParameters> extends ProjectOperationRegistration<PARAMS>, ProjectsOperationRegistration<PARAMS> {
    /**
     * How to present the transformation - would you like a Pull Request or a branch commit?
     * What would you like in the commit message, or the title of the pull request?
     * All these and more can be specified in the EditMode, which this function can
     * choose based on the invocation of this command and the code itself.
     *
     * This defaults to a pull request with branch name derived from the transform name.
     */
    transformPresentation?: TransformPresentation<PARAMS>;
    /**
     * React to results from running transform across one or more projects
     */
    onTransformResults?(results: TransformResult[], ci: PushAwareParametersInvocation<PARAMS>): Promise<void>;
}
/**
 * Signature of a decorator function that can add additional behavior
 * to a CodeTransformRegistration.
 */
export declare type CodeTransformRegistrationDecorator<PARAMS> = (ctr: CodeTransformRegistration<PARAMS>) => CodeTransformRegistration<PARAMS>;
//# sourceMappingURL=CodeTransformRegistration.d.ts.map