import { z } from 'zod';
export declare const configSchema: z.ZodObject<{
    $schema: z.ZodOptional<z.ZodString>;
    debounceTime: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
    defaultIgnoredFiles: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodString, "many">>>;
    plugins: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodDiscriminatedUnion<"name", [z.ZodObject<{
        name: z.ZodLiteral<"shadowdog-rake">;
        options: z.ZodOptional<z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>>;
    }, "strip", z.ZodTypeAny, {
        name: "shadowdog-rake";
        options?: {} | undefined;
    }, {
        name: "shadowdog-rake";
        options?: {} | undefined;
    }>, z.ZodObject<{
        name: z.ZodLiteral<"shadowdog-local-cache">;
        options: z.ZodDefault<z.ZodObject<{
            path: z.ZodDefault<z.ZodString>;
            read: z.ZodDefault<z.ZodBoolean>;
            write: z.ZodDefault<z.ZodBoolean>;
        }, "strip", z.ZodTypeAny, {
            path: string;
            read: boolean;
            write: boolean;
        }, {
            path?: string | undefined;
            read?: boolean | undefined;
            write?: boolean | undefined;
        }>>;
    }, "strip", z.ZodTypeAny, {
        options: {
            path: string;
            read: boolean;
            write: boolean;
        };
        name: "shadowdog-local-cache";
    }, {
        name: "shadowdog-local-cache";
        options?: {
            path?: string | undefined;
            read?: boolean | undefined;
            write?: boolean | undefined;
        } | undefined;
    }>, z.ZodObject<{
        name: z.ZodLiteral<"shadowdog-remote-aws-s3-cache">;
        options: z.ZodObject<{
            path: z.ZodDefault<z.ZodString>;
            bucketName: z.ZodString;
            read: z.ZodDefault<z.ZodBoolean>;
            write: z.ZodDefault<z.ZodBoolean>;
        }, "strip", z.ZodTypeAny, {
            path: string;
            read: boolean;
            write: boolean;
            bucketName: string;
        }, {
            bucketName: string;
            path?: string | undefined;
            read?: boolean | undefined;
            write?: boolean | undefined;
        }>;
    }, "strip", z.ZodTypeAny, {
        options: {
            path: string;
            read: boolean;
            write: boolean;
            bucketName: string;
        };
        name: "shadowdog-remote-aws-s3-cache";
    }, {
        options: {
            bucketName: string;
            path?: string | undefined;
            read?: boolean | undefined;
            write?: boolean | undefined;
        };
        name: "shadowdog-remote-aws-s3-cache";
    }>, z.ZodObject<{
        name: z.ZodLiteral<"shadowdog-tag">;
        options: z.ZodOptional<z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>>;
    }, "strip", z.ZodTypeAny, {
        name: "shadowdog-tag";
        options?: {} | undefined;
    }, {
        name: "shadowdog-tag";
        options?: {} | undefined;
    }>, z.ZodObject<{
        name: z.ZodLiteral<"shadowdog-tree">;
        options: z.ZodOptional<z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>>;
    }, "strip", z.ZodTypeAny, {
        name: "shadowdog-tree";
        options?: {} | undefined;
    }, {
        name: "shadowdog-tree";
        options?: {} | undefined;
    }>, z.ZodObject<{
        name: z.ZodLiteral<"shadowdog-socket">;
        options: z.ZodDefault<z.ZodObject<{
            path: z.ZodDefault<z.ZodString>;
        }, "strip", z.ZodTypeAny, {
            path: string;
        }, {
            path?: string | undefined;
        }>>;
    }, "strip", z.ZodTypeAny, {
        options: {
            path: string;
        };
        name: "shadowdog-socket";
    }, {
        name: "shadowdog-socket";
        options?: {
            path?: string | undefined;
        } | undefined;
    }>, z.ZodObject<{
        name: z.ZodLiteral<"shadowdog-git">;
        options: z.ZodOptional<z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>>;
    }, "strip", z.ZodTypeAny, {
        name: "shadowdog-git";
        options?: {} | undefined;
    }, {
        name: "shadowdog-git";
        options?: {} | undefined;
    }>, z.ZodObject<{
        name: z.ZodLiteral<"shadowdog-lock">;
        options: z.ZodDefault<z.ZodObject<{
            path: z.ZodDefault<z.ZodString>;
        }, "strip", z.ZodTypeAny, {
            path: string;
        }, {
            path?: string | undefined;
        }>>;
    }, "strip", z.ZodTypeAny, {
        options: {
            path: string;
        };
        name: "shadowdog-lock";
    }, {
        name: "shadowdog-lock";
        options?: {
            path?: string | undefined;
        } | undefined;
    }>]>, "many">>>;
    watchers: z.ZodArray<z.ZodObject<{
        enabled: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
        files: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
        invalidators: z.ZodDefault<z.ZodObject<{
            files: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
            environment: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
        }, "strip", z.ZodTypeAny, {
            files: string[];
            environment: string[];
        }, {
            files?: string[] | undefined;
            environment?: string[] | undefined;
        }>>;
        ignored: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
        label: z.ZodOptional<z.ZodString>;
        commands: z.ZodArray<z.ZodObject<{
            command: z.ZodString;
            workingDirectory: z.ZodDefault<z.ZodString>;
            tags: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
            artifacts: z.ZodDefault<z.ZodArray<z.ZodObject<{
                output: z.ZodString;
                description: z.ZodOptional<z.ZodString>;
                ignore: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
            }, "strict", z.ZodTypeAny, {
                output: string;
                description?: string | undefined;
                ignore?: string[] | undefined;
            }, {
                output: string;
                description?: string | undefined;
                ignore?: string[] | undefined;
            }>, "many">>;
        }, "strict", z.ZodTypeAny, {
            command: string;
            workingDirectory: string;
            tags: string[];
            artifacts: {
                output: string;
                description?: string | undefined;
                ignore?: string[] | undefined;
            }[];
        }, {
            command: string;
            workingDirectory?: string | undefined;
            tags?: string[] | undefined;
            artifacts?: {
                output: string;
                description?: string | undefined;
                ignore?: string[] | undefined;
            }[] | undefined;
        }>, "many">;
    }, "strict", z.ZodTypeAny, {
        enabled: boolean;
        files: string[];
        invalidators: {
            files: string[];
            environment: string[];
        };
        ignored: string[];
        commands: {
            command: string;
            workingDirectory: string;
            tags: string[];
            artifacts: {
                output: string;
                description?: string | undefined;
                ignore?: string[] | undefined;
            }[];
        }[];
        label?: string | undefined;
    }, {
        commands: {
            command: string;
            workingDirectory?: string | undefined;
            tags?: string[] | undefined;
            artifacts?: {
                output: string;
                description?: string | undefined;
                ignore?: string[] | undefined;
            }[] | undefined;
        }[];
        enabled?: boolean | undefined;
        files?: string[] | undefined;
        invalidators?: {
            files?: string[] | undefined;
            environment?: string[] | undefined;
        } | undefined;
        ignored?: string[] | undefined;
        label?: string | undefined;
    }>, "many">;
}, "strict", z.ZodTypeAny, {
    debounceTime: number;
    defaultIgnoredFiles: string[];
    plugins: ({
        name: "shadowdog-rake";
        options?: {} | undefined;
    } | {
        options: {
            path: string;
            read: boolean;
            write: boolean;
        };
        name: "shadowdog-local-cache";
    } | {
        options: {
            path: string;
            read: boolean;
            write: boolean;
            bucketName: string;
        };
        name: "shadowdog-remote-aws-s3-cache";
    } | {
        name: "shadowdog-tag";
        options?: {} | undefined;
    } | {
        name: "shadowdog-tree";
        options?: {} | undefined;
    } | {
        options: {
            path: string;
        };
        name: "shadowdog-socket";
    } | {
        name: "shadowdog-git";
        options?: {} | undefined;
    } | {
        options: {
            path: string;
        };
        name: "shadowdog-lock";
    })[];
    watchers: {
        enabled: boolean;
        files: string[];
        invalidators: {
            files: string[];
            environment: string[];
        };
        ignored: string[];
        commands: {
            command: string;
            workingDirectory: string;
            tags: string[];
            artifacts: {
                output: string;
                description?: string | undefined;
                ignore?: string[] | undefined;
            }[];
        }[];
        label?: string | undefined;
    }[];
    $schema?: string | undefined;
}, {
    watchers: {
        commands: {
            command: string;
            workingDirectory?: string | undefined;
            tags?: string[] | undefined;
            artifacts?: {
                output: string;
                description?: string | undefined;
                ignore?: string[] | undefined;
            }[] | undefined;
        }[];
        enabled?: boolean | undefined;
        files?: string[] | undefined;
        invalidators?: {
            files?: string[] | undefined;
            environment?: string[] | undefined;
        } | undefined;
        ignored?: string[] | undefined;
        label?: string | undefined;
    }[];
    $schema?: string | undefined;
    debounceTime?: number | undefined;
    defaultIgnoredFiles?: string[] | undefined;
    plugins?: ({
        name: "shadowdog-rake";
        options?: {} | undefined;
    } | {
        name: "shadowdog-local-cache";
        options?: {
            path?: string | undefined;
            read?: boolean | undefined;
            write?: boolean | undefined;
        } | undefined;
    } | {
        options: {
            bucketName: string;
            path?: string | undefined;
            read?: boolean | undefined;
            write?: boolean | undefined;
        };
        name: "shadowdog-remote-aws-s3-cache";
    } | {
        name: "shadowdog-tag";
        options?: {} | undefined;
    } | {
        name: "shadowdog-tree";
        options?: {} | undefined;
    } | {
        name: "shadowdog-socket";
        options?: {
            path?: string | undefined;
        } | undefined;
    } | {
        name: "shadowdog-git";
        options?: {} | undefined;
    } | {
        name: "shadowdog-lock";
        options?: {
            path?: string | undefined;
        } | undefined;
    })[] | undefined;
}>;
export type ConfigFile = z.infer<typeof configSchema>;
export type WatcherConfig = ConfigFile['watchers'][number];
export type CommandConfig = WatcherConfig['commands'][number];
export type ArtifactConfig = NonNullable<CommandConfig['artifacts']>[number];
export type PluginsConfig = ConfigFile['plugins'];
export type InvalidatorConfig = WatcherConfig['invalidators'];
export declare const loadConfig: (configFilePath: string) => ConfigFile;
