142 lines
4.2 KiB
TypeScript
142 lines
4.2 KiB
TypeScript
export type NodemonEventHandler =
|
|
| 'start'
|
|
| 'crash'
|
|
| 'exit'
|
|
| 'quit'
|
|
| 'restart'
|
|
| 'config:update'
|
|
| 'log'
|
|
| 'readable'
|
|
| 'stdout'
|
|
| 'stderr';
|
|
|
|
export type NodemonEventListener = {
|
|
on(event: 'start' | 'crash' | 'readable', listener: () => void): Nodemon;
|
|
on(event: 'log', listener: (e: NodemonEventLog) => void): Nodemon;
|
|
on(event: 'stdout' | 'stderr', listener: (e: string) => void): Nodemon;
|
|
on(event: 'restart', listener: (e?: NodemonEventRestart) => void): Nodemon;
|
|
on(event: 'quit', listener: (e?: NodemonEventQuit) => void): Nodemon;
|
|
on(event: 'exit', listener: (e?: NodemonEventExit) => void): Nodemon;
|
|
on(
|
|
event: 'config:update',
|
|
listener: (e?: NodemonEventConfig) => void
|
|
): Nodemon;
|
|
};
|
|
|
|
export type Nodemon = {
|
|
(options?: NodemonSettings): Nodemon;
|
|
on(event: 'start' | 'crash', listener: () => void): Nodemon;
|
|
on(event: 'log', listener: (e: NodemonEventLog) => void): Nodemon;
|
|
on(event: 'restart', listener: (e?: NodemonEventRestart) => void): Nodemon;
|
|
on(event: 'quit', listener: (e?: NodemonEventQuit) => void): Nodemon;
|
|
on(event: 'exit', listener: (e?: NodemonEventExit) => void): Nodemon;
|
|
on(
|
|
event: 'config:update',
|
|
listener: (e?: NodemonEventConfig) => void
|
|
): Nodemon;
|
|
|
|
// this is repeated because VS Code doesn't autocomplete otherwise
|
|
addEventListener(event: 'start' | 'crash', listener: () => void): Nodemon;
|
|
addEventListener(
|
|
event: 'log',
|
|
listener: (e: NodemonEventLog) => void
|
|
): Nodemon;
|
|
addEventListener(
|
|
event: 'restart',
|
|
listener: (e?: NodemonEventRestart) => void
|
|
): Nodemon;
|
|
addEventListener(
|
|
event: 'quit',
|
|
listener: (e?: NodemonEventQuit) => void
|
|
): Nodemon;
|
|
addEventListener(
|
|
event: 'exit',
|
|
listener: (e?: NodemonEventExit) => void
|
|
): Nodemon;
|
|
addEventListener(
|
|
event: 'config:update',
|
|
listener: (e?: NodemonEventConfig) => void
|
|
): Nodemon;
|
|
|
|
once(event: 'start' | 'crash', listener: () => void): Nodemon;
|
|
once(event: 'log', listener: (e: NodemonEventLog) => void): Nodemon;
|
|
once(event: 'restart', listener: (e?: NodemonEventRestart) => void): Nodemon;
|
|
once(event: 'quit', listener: (e?: NodemonEventQuit) => void): Nodemon;
|
|
once(event: 'exit', listener: (e?: NodemonEventExit) => void): Nodemon;
|
|
once(
|
|
event: 'config:update',
|
|
listener: (e?: NodemonEventConfig) => void
|
|
): Nodemon;
|
|
|
|
removeAllListeners(event: NodemonEventHandler): Nodemon;
|
|
emit(type: NodemonEventHandler, event?: any): Nodemon;
|
|
reset(callback: Function): Nodemon;
|
|
restart(): Nodemon;
|
|
config: NodemonSettings;
|
|
};
|
|
|
|
export type NodemonEventLog = {
|
|
/**
|
|
detail*: what you get with nodemon --verbose.
|
|
status: subprocess starting, restarting.
|
|
fail: is the subprocess crashing.
|
|
error: is a nodemon system error.
|
|
*/
|
|
type: 'detail' | 'log' | 'status' | 'error' | 'fail';
|
|
/** the plain text message */
|
|
message: String;
|
|
/** contains the terminal escape codes to add colour, plus the "[nodemon]" prefix */
|
|
colour: String;
|
|
};
|
|
|
|
export interface NodemonEventRestart {
|
|
matched?: {
|
|
result: string[];
|
|
total: number;
|
|
};
|
|
}
|
|
|
|
export type NodemonEventQuit = 143 | 130;
|
|
export type NodemonEventExit = number;
|
|
|
|
// TODO: Define the type of NodemonEventConfig
|
|
export type NodemonEventConfig = any;
|
|
|
|
export interface NodemonConfig {
|
|
/* restartable defaults to "rs" as a string the user enters */
|
|
restartable?: false | String;
|
|
colours?: Boolean;
|
|
execMap?: { [key: string]: string };
|
|
ignoreRoot?: string[];
|
|
watch?: string[];
|
|
stdin?: boolean;
|
|
runOnChangeOnly?: boolean;
|
|
verbose?: boolean;
|
|
signal?: string;
|
|
stdout?: boolean;
|
|
watchOptions?: WatchOptions;
|
|
}
|
|
|
|
export interface NodemonSettings extends NodemonConfig {
|
|
script: string;
|
|
ext?: string; // "js,mjs" etc (should really support an array of strings, but I don't think it does right now)
|
|
events?: { [key: string]: string };
|
|
env?: { [key: string]: string };
|
|
exec?: string; // node, python, etc
|
|
execArgs?: string[]; // args passed to node, etc,
|
|
nodeArgs?: string[]; // args passed to node, etc,
|
|
delay?: number;
|
|
}
|
|
|
|
export interface WatchOptions {
|
|
ignorePermissionErrors: boolean;
|
|
ignored: string;
|
|
persistent: boolean;
|
|
usePolling: boolean;
|
|
interval: number;
|
|
}
|
|
|
|
const nodemon: Nodemon = (settings: NodemonSettings): Nodemon => {};
|
|
|
|
export default nodemon;
|