import type { BaseProgram } from './';
export interface ICallable {
    apply(program?: BaseProgram): void;
}
export interface IExtension<Program extends BaseProgram = BaseProgram> {
    apply(program: Program): void;
}
export type BaseArgs = {
    input: AbsolutePath;
    config: AbsolutePath;
    quiet: boolean;
    strict: boolean;
    jobs: number | true;
    workerMaxOldSpace: number;
    extensions?: string[];
    copyOnWrite: boolean;
    originAsInput: boolean;
};
export type BaseConfig = {
    input: AbsolutePath;
    quiet?: boolean;
    strict?: boolean;
    jobs?: number;
    workerMaxOldSpace?: number;
    extensions?: (string | ExtensionInfo)[];
    copyOnWrite?: boolean;
    originAsInput?: boolean;
};
export type ExtensionInfo<Options extends Hash = Hash> = {
    name: string;
} & Options;
export type Report = {
    code: number;
} & Hash;
