import Joi from "joi"; export interface WatchOptions { ignore?: ReadonlyArray; } export interface Watcher { watch( paths: ReadonlyArray, options?: WatchOptions ): AsyncIterable; } export interface Executor { onInit?(): void; onCleanup?(): void; execute(filePath: string): void; } export interface Options { only?: string[]; } export interface Config { rootDir?: string; backend?: Watcher; watchers: { [key: string]: WatchConfig; }; } export interface WatchConfig { paths: ReadonlyArray; ignore?: ReadonlyArray; executor: Executor; } export const configSchema = Joi.object({ rootDir: Joi.string().optional(), backend: Joi.object().optional(), watchers: Joi.object().pattern( /.*/, Joi.object({ paths: Joi.array() .items(Joi.string()) .unique(), ignore: Joi.array() .items(Joi.string()) .unique() .optional(), executor: Joi.object(), }) ), });