/// <reference types="node" />
import { EventEmitter } from 'events';
import { Command, Message, OptionDefinition, OptionsSource, Uri } from './types';
export declare function getOptionDefinitions(): Promise<OptionDefinition[]>;
export interface BuilderInterface extends EventEmitter {
    getTargets(): Promise<string[]>;
    kill(message?: string): Promise<void>;
    run(commands: Command[]): Promise<boolean>;
    setInstanceOptions(options: OptionsSource, merge?: boolean): Promise<void>;
    setUserOptions(options: OptionsSource, merge?: boolean): Promise<void>;
    setDirectoryOptions(options: OptionsSource, merge?: boolean): Promise<void>;
    setProjectOptions(options: OptionsSource, merge?: boolean): Promise<void>;
    on(event: 'log', listener: (messages: Message[]) => void): this;
    on(event: string | symbol, listener: (...args: any[]) => void): this;
    once(event: 'log', listener: (messages: Message[]) => void): this;
    once(event: string | symbol, listener: (...args: any[]) => void): this;
    prependListener(event: 'log', listener: (messages: Message[]) => void): this;
    prependListener(event: string | symbol, listener: (...args: any[]) => void): this;
    prependOnceListener(event: 'log', listener: (messages: Message[]) => void): this;
    prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this;
    removeListener(event: 'log', listener: (messages: Message[]) => void): this;
    removeListener(event: string | symbol, listener: (...args: any[]) => void): this;
}
export interface BuilderCacheInterface extends EventEmitter {
    get(file: Uri): Promise<BuilderInterface>;
    clear(file: Uri): Promise<void>;
    clearAll(): Promise<void>;
    destroy(): Promise<void>;
    getTargets(file: Uri): Promise<string[]>;
    kill(file: Uri, message?: string): Promise<void>;
    killAll(message?: string): Promise<void>;
    run(file: Uri, commands: Command[]): Promise<boolean>;
    setInstanceOptions(file: Uri, options: OptionsSource, merge?: boolean): Promise<void>;
    setUserOptions(file: Uri, options: OptionsSource, merge?: boolean): Promise<void>;
    setDirectoryOptions(file: Uri, options: OptionsSource, merge?: boolean): Promise<void>;
    setProjectOptions(file: Uri, options: OptionsSource, merge?: boolean): Promise<void>;
    on(event: 'log', listener: (file: Uri, messages: Message[]) => void): this;
    on(event: string | symbol, listener: (...args: any[]) => void): this;
    once(event: 'log', listener: (file: Uri, messages: Message[]) => void): this;
    once(event: string | symbol, listener: (...args: any[]) => void): this;
    prependListener(event: 'log', listener: (file: Uri, messages: Message[]) => void): this;
    prependListener(event: string | symbol, listener: (...args: any[]) => void): this;
    prependOnceListener(event: 'log', listener: (file: Uri, messages: Message[]) => void): this;
    prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this;
    removeListener(event: 'log', listener: (file: Uri, messages: Message[]) => void): this;
    removeListener(event: string | symbol, listener: (...args: any[]) => void): this;
}
