import { WatchOptions } from 'fs';
import { TSConfig } from 'pkg-types';

declare function runCommand(command: string, argv?: string[]): Promise<void>;

interface CompileFileConfig {
    /**
     * @param {string} inputFile
     * The input file to compile
     * @example 'src/sw.ts'
    */
    inputFile: string;
    /**
     * @param {string} outputFile
     * The output file to compile
     * @example 'public/sw.js'
    */
    outputFile: string;
    tsOptions?: TSConfig;
}

interface HuntersofbookConfig {
    tsTOjs?: CompileFileConfig[];
    blockedWatch?: {
        files: string[];
        options?: WatchOptions;
    };
    [key: string]: any;
}

interface IWatch {
    event: 'add' | 'addDir' | 'change' | 'unlink' | 'unlinkDir';
    file: string;
    startTime?: number;
}

export { HuntersofbookConfig, IWatch, runCommand };
