import { default as default_2 } from 'zod';
import { z } from 'zod';

export declare const $BarrelConfig: z.ZodObject<{
    root: z.ZodDefault<z.ZodOptional<z.ZodString>>;
    name: z.ZodDefault<z.ZodOptional<z.ZodString>>;
    include: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodString>>>;
    exclude: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodString>>>;
    order: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodString>>>;
    replace: z.ZodDefault<z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>>;
    exports: z.ZodDefault<z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodArray<z.ZodString>>>>;
    bracketSpacing: z.ZodOptional<z.ZodBoolean>;
    singleQuote: z.ZodOptional<z.ZodBoolean>;
    semi: z.ZodOptional<z.ZodBoolean>;
    insertFinalNewline: z.ZodOptional<z.ZodBoolean>;
}, z.core.$strip>;

export declare const $Config: z.ZodObject<{
    $schema: z.ZodDefault<z.ZodOptional<z.ZodString>>;
    bracketSpacing: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
    singleQuote: z.ZodDefault<z.ZodBoolean>;
    semi: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
    insertFinalNewline: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
    barrels: z.ZodPrefault<z.ZodArray<z.ZodObject<{
        root: z.ZodDefault<z.ZodOptional<z.ZodString>>;
        name: z.ZodDefault<z.ZodOptional<z.ZodString>>;
        include: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodString>>>;
        exclude: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodString>>>;
        order: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodString>>>;
        replace: z.ZodDefault<z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>>;
        exports: z.ZodDefault<z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodArray<z.ZodString>>>>;
        bracketSpacing: z.ZodOptional<z.ZodBoolean>;
        singleQuote: z.ZodOptional<z.ZodBoolean>;
        semi: z.ZodOptional<z.ZodBoolean>;
        insertFinalNewline: z.ZodOptional<z.ZodBoolean>;
    }, z.core.$strip>>>;
}, z.core.$strip>;

export declare type BarrelConfig = z.infer<typeof $BarrelConfig>;

export declare function cliInit(): void;

export declare function colorize(text: string, foreground: TerminalColor, background?: TerminalColor): string;

export declare type Config = z.infer<typeof $Config>;

export declare type ExportInfo = {
    name: string;
    exportKind?: 'type' | 'value' | null | undefined;
    exportName?: string | undefined;
};

export declare type ExportPathInfo = {
    originalPath: string;
    modifiedPath: string;
    exports?: string[];
};

export declare function extractExports(sourcePath: string): Promise<ExportInfo[]>;

export declare function extractExportsFromFile(sourcePath: string, options: ExtractExportsOptions): Promise<ExportInfo[]>;

/**
 * Options for extracting exports from source files
 */
export declare type ExtractExportsOptions = {
    /**
     * Whether the source file is a TypeScript file
     */
    isTypeScriptSource: boolean;
    /**
     * Whether to recursively process imports
     */
    recursive: boolean;
};

export declare function formatExportLine(path: ExportPathInfo, config: Config, barrelConfig: BarrelConfig): string;

export declare function generateBarrels(configDir: string, config: Config): Promise<void>;

export declare type GenerateCommandOptions = default_2.infer<typeof GenerateCommandOptionsSchema>;

export declare const GenerateCommandOptionsSchema: default_2.ZodObject<{
    configPath: default_2.ZodString;
    watch: default_2.ZodBoolean;
}, default_2.core.$strict>;

export declare function getExportedPathsFromContent(content: string): Promise<string[]>;

export declare function globPaths(rootDir: string, barrelConfig: BarrelConfig): Promise<string[]>;

export declare function handlePathExports(rootDir: string, barrelConfig: BarrelConfig, exportPaths: ExportPathInfo[]): Promise<void>;

export declare function handlePathOrder(config: BarrelConfig, paths: ExportPathInfo[]): Promise<void>;

export declare function handlePathReplace(config: BarrelConfig, paths: ExportPathInfo[]): Promise<void>;

export declare function handlePaths(configDir: string, barrelConfig: BarrelConfig): Promise<ExportPathInfo[]>;

export declare const INITIAL_CONFIG: z.input<typeof $Config>;

export declare function logDebug(message: string): void;

export declare function logError(message: string): void;

export declare function logInfo(message: string): void;

export declare function logWarning(message: string): void;

export declare function parseConfig(configPath: string): Config;

export declare type PathsDifferences = {
    insertions: string[];
    deletions: string[];
};

export declare function pathsDifferences(newPaths: string[], oldPaths: string[]): PathsDifferences;

export declare function runGenerateCommand(options: GenerateCommandOptions): Promise<void>;

export declare function runInitCommand(baseConfigFilePath: string): Promise<void>;

export declare enum TerminalColor {
    BLACK = 0,
    RED = 1,
    GREEN = 2,
    YELLOW = 3,
    BLUE = 4,
    MAGENTA = 5,
    CYAN = 6,
    WHITE = 7,
    GRAY = 60
}

export declare function tryParseRegex(s: string): RegExp | null;

export declare function watchBarrels(configDir: string, config: Config): Promise<void>;

export { }
