import type { IStage } from '../domain';
export declare class ArtifactReferenceService {
    /**
     * Removes an artifact reference from each of a list of stages with a
     * registered `artifactRemover` method.
     *
     * @param reference The ID of the artifact to remove.
     * @param stages The stages from which to remove artifact references.
     */
    static removeReferenceFromStages(reference: string, stages: IStage[]): void;
    /**
     * Removes each of a list of artifact references from each of a list of
     * stages with a registered `artifactRemover` method.
     *
     * @param references The list of artifact IDs to remove.
     * @param stages The stages from which to remove artifact references.
     */
    static removeReferencesFromStages(references: string[], stages: IStage[]): void;
    /**
     * Removes an artifact reference from a field of an object. The field can
     * be either a single artifact ID or a list of artifact IDs.
     *
     * @param path The path to the field from which to remove an artifact
     * reference. A nested path (e.g., `keyA.keyB`) is valid.
     * @param obj The object from which to remove the artifact reference at a
     * given field.
     * @param artifactId The ID of the artifact to remove.
     */
    static removeArtifactFromField(path: string, obj: {
        [key: string]: string | string[];
    }, artifactId: string): void;
    /**
     * Given a list of paths, returns a callback that removes an artifact
     * reference from a stage at those paths. This callback can be registered as
     * the `artifactRemover` of an {IStageTypeConfig}.
     *
     * @param paths The paths to the fields from which to remove an artifact.
     * Nested paths (e.g., `keyA.keyB`) are valid.
     * @returns A function that removes references to a given `artifactId` from
     * a given `stage` at each of the specified paths.
     */
    static removeArtifactFromFields(paths: string[]): (stage: IStage, artifactId: string) => void;
}
