import { CrossbowConfiguration, OutgoingSignals } from './config';
import { UserInput } from "./input.resolve";
import * as reports from "./reporter.resolve";
import { OutgoingReporter } from "./reporter.resolve";
export interface CLI {
    input: string[];
    flags: any;
    trailing?: string;
    command?: string;
}
export interface CrossbowInput {
    tasks: any;
    watch: any;
    options: any;
    env?: any;
    config?: any;
}
export interface CrossbowReporter {
    (report: reports.IncomingReport): void;
}
export interface PreparedInputErrors {
    type: reports.ReportTypes;
}
export interface PreparedInput {
    cli: CLI;
    config: CrossbowConfiguration;
    reportFn?: CrossbowReporter;
    userInput: UserInput;
    errors: PreparedInputErrors[];
}
/**
 * Handle any type of init. It could be from the CLI, or via the API.
 * eg, any command from the CLI ultimately ends up in the following call
 *    $  crossbow run task1 -c conf/cb.js
 *    -> handleIncoming({
 *          input: ['run', 'task1'],
 *          flags: {c: 'conf/cb.js'}
 *       });
 */
export declare function prepareInput(cli: CLI, input?: CrossbowInput | any, outputObserver?: OutgoingReporter, signalObserver?: OutgoingSignals): PreparedInput;
/**
 * This the the proxy that allows command/run mode to be handled
 * @param preparedInput
 */
export declare function handleIncoming<ReturnType>(preparedInput: PreparedInput): ReturnType;
/**
 * This is the default export that can be
 * used as a convenience method.
 * Note: types are lost when using this method.
 */
export default function (cli: CLI, input?: CrossbowInput): any;
