Files
talk/scripts/watcher/types.ts
T
Kiwi 044e1c2863 Watcher infrastructure (#1724)
* wip

* Adding chokidar and types

* specifiying build tasks

* new structure, new types, executor and watchers

* Adding log

* Fully implemented watchers

* adapt vscode launc

* Add .babelrc.js to toplevel tsconfig project

* Typo

* Get schema path from .graphqlconfig

* Use watcher binary

* Add joi validation to watcher

* Remove fb-watchman for now

* Use correct ignore path

* Fix dist folder

* Allow setting watcher

* Per default only spawn one process at a time

* Support runOnInit

* Rename RestartingExecutor to LongRunningExecutor

* Use debounce instead of throttle

* Remove console log

* Debounce command execution

* Simplify debounce

* Watcher name change

* Typos

* Rename "watcher" root level config to "backend"
2018-07-03 12:21:58 -06:00

51 lines
958 B
TypeScript

import Joi from "joi";
export interface WatchOptions {
ignore?: ReadonlyArray<string>;
}
export interface Watcher {
watch(
paths: ReadonlyArray<string>,
options?: WatchOptions
): AsyncIterable<string>;
}
export interface Executor {
onInit?(): void;
onCleanup?(): void;
execute(filePath: string): void;
}
export interface Config {
rootDir?: string;
backend?: Watcher;
watchers: {
[key: string]: WatchConfig;
};
}
export interface WatchConfig {
paths: ReadonlyArray<string>;
ignore?: ReadonlyArray<string>;
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(),
})
),
});