You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

90 lines
2.1 KiB

4 years ago
import { EventEmitter } from "events";
declare function avvio(done?: Function): avvio.Avvio<null>;
declare function avvio<I>(
instance: I,
options?: avvio.Options,
done?: Function
): avvio.Avvio<I>;
/**
* Typescript cannot manage changes related to options "expose"
* because undefined before runtime
*/
declare namespace avvio {
type context<I> = I extends null ? Avvio<I> : mixedInstance<I>;
type mixedInstance<I> = I & Server<I>;
interface Options {
expose?: {
use?: string;
after?: string;
ready?: string;
};
autostart?: boolean;
}
interface Plugin<O, I> {
(server: context<I>, options: O, done: (err?: Error) => void): void;
}
interface Server<I> {
use: Use<I>;
after: After<I>;
ready: Ready<I>;
close: Close<I>;
onClose: OnClose<I>;
}
interface Avvio<I> extends EventEmitter, Server<I> {
on(event: "start", listener: () => void): this;
on(event: "preReady", listener: () => void): this;
on(event: "close", listener: () => void): this;
start(): this;
toJSON(): Object;
prettyPrint(): string;
override: (
server: context<I>,
fn: Plugin<any, I>,
options: any
) => context<I>;
started: boolean;
booted: boolean;
}
// Avvio methods
interface After<I, C = context<I>> {
(fn: (err: Error) => void): C;
(fn: (err: Error, done: Function) => void): C;
(fn: (err: Error, context: C, done: Function) => void): C;
}
interface Use<I, C = context<I>> {
<O>(fn: avvio.Plugin<O, I>, options?: O): C;
}
interface Ready<I, C = context<I>> {
(): Promise<C>;
(callback: (err?: Error) => void): void;
(callback: (err: Error, done: Function) => void): void;
(callback: (err: Error, context: C, done: Function) => void): void;
}
interface Close<I, C = context<I>> {
(fn: (err: Error) => void): void;
(fn: (err: Error, done: Function) => void): void;
(fn: (err: Error, context: C, done: Function) => void): void;
}
interface OnClose<I, C = context<I>> {
(fn: (context: C, done: Function) => void): C;
}
}
export = avvio;