import * as t from 'typanion';
import { LogReporter } from './log-reporter';
import { IPlugin } from './plugin-manager';
declare const FeatureBumpBehaviorItems: readonly ["always", "never", "normal"];
export type FeatureBumpBehavior = typeof FeatureBumpBehaviorItems[number];
export declare const isBaseConfigurationOptions: t.StrictTest<unknown, Partial<Pick<{
    featureBranchPatterns: string[] | undefined;
    releaseBranchPatterns: string[] | undefined;
    mainBranchPatterns: string[] | undefined;
    independentVersioning: boolean | undefined;
    versionTagPrefix: string | undefined;
    dryRun: boolean | undefined;
    featureBumpBehavior: "always" | "never" | "normal" | undefined;
    featurePushChangelogs: boolean | undefined;
    gitFlags: Record<string, string> | undefined;
}, "featureBranchPatterns" | "releaseBranchPatterns" | "mainBranchPatterns" | "independentVersioning" | "versionTagPrefix" | "dryRun" | "featureBumpBehavior" | "featurePushChangelogs" | "gitFlags">> & Pick<{
    featureBranchPatterns: string[] | undefined;
    releaseBranchPatterns: string[] | undefined;
    mainBranchPatterns: string[] | undefined;
    independentVersioning: boolean | undefined;
    versionTagPrefix: string | undefined;
    dryRun: boolean | undefined;
    featureBumpBehavior: "always" | "never" | "normal" | undefined;
    featurePushChangelogs: boolean | undefined;
    gitFlags: Record<string, string> | undefined;
}, never> & {
    [x: string]: unknown;
}> & t.Trait<Partial<Pick<{
    featureBranchPatterns: string[] | undefined;
    releaseBranchPatterns: string[] | undefined;
    mainBranchPatterns: string[] | undefined;
    independentVersioning: boolean | undefined;
    versionTagPrefix: string | undefined;
    dryRun: boolean | undefined;
    featureBumpBehavior: "always" | "never" | "normal" | undefined;
    featurePushChangelogs: boolean | undefined;
    gitFlags: Record<string, string> | undefined;
}, "featureBranchPatterns" | "releaseBranchPatterns" | "mainBranchPatterns" | "independentVersioning" | "versionTagPrefix" | "dryRun" | "featureBumpBehavior" | "featurePushChangelogs" | "gitFlags">> & Pick<{
    featureBranchPatterns: string[] | undefined;
    releaseBranchPatterns: string[] | undefined;
    mainBranchPatterns: string[] | undefined;
    independentVersioning: boolean | undefined;
    versionTagPrefix: string | undefined;
    dryRun: boolean | undefined;
    featureBumpBehavior: "always" | "never" | "normal" | undefined;
    featurePushChangelogs: boolean | undefined;
    gitFlags: Record<string, string> | undefined;
}, never> & {
    [x: string]: unknown;
}> & {
    properties: {
        featureBranchPatterns: t.StrictValidator<unknown, string[] | undefined>;
        releaseBranchPatterns: t.StrictValidator<unknown, string[] | undefined>;
        mainBranchPatterns: t.StrictValidator<unknown, string[] | undefined>;
        independentVersioning: t.StrictValidator<unknown, boolean | undefined>;
        versionTagPrefix: t.StrictValidator<unknown, string | undefined>;
        dryRun: t.StrictValidator<unknown, boolean | undefined>;
        featureBumpBehavior: t.StrictValidator<unknown, "always" | "never" | "normal" | undefined>;
        featurePushChangelogs: t.StrictValidator<unknown, boolean | undefined>;
        gitFlags: t.StrictValidator<unknown, Record<string, string> | undefined>;
    };
};
export type BaseConfigurationOptions = t.InferType<typeof isBaseConfigurationOptions>;
export interface PluginConfigurationOptions {
    plugins?: IPlugin[];
}
export type ConfigurationOption = PluginConfigurationOptions & BaseConfigurationOptions;
export type RequiredConfigurationOption = PluginConfigurationOptions & Required<BaseConfigurationOptions>;
export declare function defineConfig(config: ConfigurationOption): ConfigurationOption;
export declare enum BranchType {
    MAIN = "main",
    RELEASE = "release",
    FEATURE = "feature",
    UNKNOWN = "unknown"
}
export interface VersionBranch {
    readonly name: string;
    readonly type: BranchType;
}
export interface IConfiguration {
    readonly cwd: string;
    readonly options: RequiredConfigurationOption;
    readonly stagingFolder: string;
    readonly packFolder: string;
}
export interface IUpdateableConfiguration {
    updateOptions(options: BaseConfigurationOptions): void;
}
export declare function isUpdateableConfiguration(config: any): config is IUpdateableConfiguration;
export declare class Configuration implements IConfiguration, IUpdateableConfiguration {
    cwd: string;
    options: RequiredConfigurationOption;
    get stagingFolder(): string;
    get packFolder(): string;
    constructor(cwd: string, options: RequiredConfigurationOption);
    updateOptions(options: BaseConfigurationOptions): void;
    static loadCustomConfig(cwd: string, logger: LogReporter): Promise<(Partial<Pick<{
        featureBranchPatterns: string[] | undefined;
        releaseBranchPatterns: string[] | undefined;
        mainBranchPatterns: string[] | undefined;
        independentVersioning: boolean | undefined;
        versionTagPrefix: string | undefined;
        dryRun: boolean | undefined;
        featureBumpBehavior: "always" | "never" | "normal" | undefined;
        featurePushChangelogs: boolean | undefined;
        gitFlags: Record<string, string> | undefined;
    }, "featureBranchPatterns" | "releaseBranchPatterns" | "mainBranchPatterns" | "independentVersioning" | "versionTagPrefix" | "dryRun" | "featureBumpBehavior" | "featurePushChangelogs" | "gitFlags">> & Pick<{
        featureBranchPatterns: string[] | undefined;
        releaseBranchPatterns: string[] | undefined;
        mainBranchPatterns: string[] | undefined;
        independentVersioning: boolean | undefined;
        versionTagPrefix: string | undefined;
        dryRun: boolean | undefined;
        featureBumpBehavior: "always" | "never" | "normal" | undefined;
        featurePushChangelogs: boolean | undefined;
        gitFlags: Record<string, string> | undefined;
    }, never> & {
        [x: string]: unknown;
    }) | null>;
}
export {};
