import { Project } from "@atomist/automation-client/lib/project/Project";
import { ExtensionPack } from "../../api/machine/ExtensionPack";
import { CodeTransform } from "../../api/registration/CodeTransform";
import { GeneratorRegistration } from "../../api/registration/GeneratorRegistration";
import { ParametersObject } from "../../api/registration/ParametersDefinition";
/**
 * Registration for CodeTransform, ParametersObject and an additional test
 */
export interface UniversalTransform<PARAMS = any> {
    /** Return true if provided CodeTransforms should be executed against Project p */
    test?: (p: Project) => Promise<boolean>;
    /** CodeTransforms to execute */
    transforms: CodeTransform<PARAMS> | Array<CodeTransform<PARAMS>>;
    /** Additional parameters the CodeTransforms need */
    parameters?: ((params: any) => Promise<ParametersObject<PARAMS>>) | ParametersObject<PARAMS>;
}
/**
 * Configuration options for the universalGeneratorSupport extension pack
 */
export interface UniversalGeneratorSupportOptions {
    /** Generators to enrich with additional CodeTransforms */
    generators: GeneratorRegistration<any> | Array<GeneratorRegistration<any>>;
    /** Additional CodeTransforms, their parameters and optional project test */
    transformsAndParameters?: UniversalTransform<any> | Array<UniversalTransform<any>>;
}
/**
 * Configure generators in the form GeneratorRegistrations to run additional CodeTransforms
 *
 * The CodeTransforms are getting registered with an optional test which can be used to
 * interrogate the seed project and determine if the CodeTransform should be executed
 * against the seed.
 * CodeTransforms can also register parameter definitions to ask for more parameters via a
 * promptFor question flow.
 */
export declare function universalGeneratorSupport(options: UniversalGeneratorSupportOptions): ExtensionPack;
//# sourceMappingURL=generatorSupport.d.ts.map