import { Goal, GoalDefinition } from "./Goal";
/**
 * Represents goals set in response to a push
 */
export declare class Goals {
    name: string;
    readonly goals: Goal[];
    /**
     * Return a Goal set that contains these goals and one more goal,
     * with an appropriate name
     * @param {Goal} g goal to add
     * @return {Goals}
     */
    and(g: Goal): Goals;
    /**
     * Return a form of these goals that is locked, so that more goals cannot be
     * added through contribution model
     * @return {Goals}
     */
    andLock(): Goals;
    constructor(name: string, ...goals: Goal[]);
}
export declare function isGoals(a: any): a is Goals;
/**
 *  Builder to build Goals instances.
 */
export interface GoalsBuilder {
    /**
     * Plan the given goal or goals to this Goals instance.
     * @param {GoalDefinition | Goal | Goals} goals
     * @returns {Goals & GoalsAndPreConditionBuilder}
     */
    plan(...goals: Array<GoalDefinition | Goal | Goals>): Goals & GoalsAndPreConditionBuilder;
}
/**
 * Extension to GoalsBuilder allowing to add preConditions.
 */
export interface GoalsAndPreConditionBuilder extends GoalsBuilder {
    /**
     * Add preCondition(s) to previously planned goal or goals.
     * Note:
     * This only will affect the goal or goals that were planned immediately
     * before calling `after`.
     * Only call this once; an additional call will remove other preconditions
     * that may have existed on the original goal.
     * @param {Goal} goals
     * @returns {Goals & GoalsBuilder}
     */
    after(...goals: Array<Goals | GoalDefinition | Goal>): Goals & GoalsBuilder;
}
/**
 * Create Goals instance using a fluent API.
 *
 *  const simpleGoals = goals("Simple Goals")
 *     .plan(CodeInspectionGoal)
 *     .plan(BuildGoal, Autofix).after(CodeInspectionGoal)
 *     .plan(StagingEndpointGoal).after(BuildGoal)
 *     .plan(ProductionDeploymentGoal).after(BuildGoal, StagingEndpointGoal);
 *
 * @param {string} name
 * @returns {Goals & GoalsBuilder}
 */
export declare function goals(name: string): Goals & GoalsBuilder;
//# sourceMappingURL=Goals.d.ts.map