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
			
		
		
			
		
	
	
					90 lines
				
				2.1 KiB
			| 
											3 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): unknown; | ||
|  |   } | ||
|  | 
 | ||
|  |   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; |