From 15e315003c58e29e2920222884dadca27e4cc245 Mon Sep 17 00:00:00 2001 From: Flarna Date: Tue, 13 Jun 2017 13:05:18 +0200 Subject: [PATCH 1/4] * Add missing OS signals * add missing process APIs --- types/node/index.d.ts | 33 +++++++++++++++++++++++---------- 1 file changed, 23 insertions(+), 10 deletions(-) diff --git a/types/node/index.d.ts b/types/node/index.d.ts index 178a8920e1..5ed6beb44c 100644 --- a/types/node/index.d.ts +++ b/types/node/index.d.ts @@ -382,7 +382,7 @@ declare namespace NodeJS { "SIGABRT" | "SIGALRM" | "SIGBUS" | "SIGCHLD" | "SIGCONT" | "SIGFPE" | "SIGHUP" | "SIGILL" | "SIGINT" | "SIGIO" | "SIGIOT" | "SIGKILL" | "SIGPIPE" | "SIGPOLL" | "SIGPROF" | "SIGPWR" | "SIGQUIT" | "SIGSEGV" | "SIGSTKFLT" | "SIGSTOP" | "SIGSYS" | "SIGTERM" | "SIGTRAP" | "SIGTSTP" | "SIGTTIN" | "SIGTTOU" | "SIGUNUSED" | "SIGURG" | - "SIGUSR1" | "SIGUSR2" | "SIGVTALRM" | "SIGWINCH" | "SIGXCPU" | "SIGXFSZ"; + "SIGUSR1" | "SIGUSR2" | "SIGVTALRM" | "SIGWINCH" | "SIGXCPU" | "SIGXFSZ" | "SIGBREAK" | "SIGLOST" | "SIGINFO"; export interface Socket extends ReadWriteStream { isTTY?: true; @@ -467,7 +467,9 @@ declare namespace NodeJS { * 6. uncaughtException * 7. unhandledRejection * 8. warning - * 9. + * 9. message + * 10. + * 11. anything else */ addListener(event: "beforeExit", listener: (code: number) => void): this; @@ -477,16 +479,20 @@ declare namespace NodeJS { addListener(event: "uncaughtException", listener: (error: Error) => void): this; addListener(event: "unhandledRejection", listener: (reason: any, promise: Promise) => void): this; addListener(event: "warning", listener: (warning: Error) => void): this; + addListener(event: "message", listener: (message: any, sendHandle: any) => void): this; addListener(event: Signals, listener: () => void): this; + addListener(event: string | symbol, listener: (...args: any[]) => void): this; - emit(event: "beforeExit", listener: (code: number) => void): boolean; - emit(event: "disconnect", listener: () => void): boolean; - emit(event: "exit", listener: (code: number) => void): boolean; - emit(event: "rejectionHandled", listener: (promise: Promise) => void): boolean; - emit(event: "uncaughtException", listener: (error: Error) => void): boolean; - emit(event: "unhandledRejection", listener: (reason: any, promise: Promise) => void): boolean; - emit(event: "warning", listener: (warning: Error) => void): boolean; - emit(event: Signals, listener: () => void): boolean; + emit(event: "beforeExit", code: number): boolean; + emit(event: "disconnect"): boolean; + emit(event: "exit", code: number): boolean; + emit(event: "rejectionHandled", promise: Promise): boolean; + emit(event: "uncaughtException", error: Error): boolean; + emit(event: "unhandledRejection", reason: any, promise: Promise): boolean; + emit(event: "warning", warning: Error): boolean; + emit(event: "message", message: any, sendHandle: any): this; + emit(event: Signals): boolean; + emit(event: string | symbol, ...args: any[]): boolean; on(event: "beforeExit", listener: (code: number) => void): this; on(event: "disconnect", listener: () => void): this; @@ -497,6 +503,7 @@ declare namespace NodeJS { on(event: "warning", listener: (warning: Error) => void): this; on(event: "message", listener: (message: any, sendHandle: any) => void): this; on(event: Signals, listener: () => void): this; + on(event: string | symbol, listener: (...args: any[]) => void): this; once(event: "beforeExit", listener: (code: number) => void): this; once(event: "disconnect", listener: () => void): this; @@ -505,7 +512,9 @@ declare namespace NodeJS { once(event: "uncaughtException", listener: (error: Error) => void): this; once(event: "unhandledRejection", listener: (reason: any, promise: Promise) => void): this; once(event: "warning", listener: (warning: Error) => void): this; + once(event: "message", listener: (message: any, sendHandle: any) => void): this; once(event: Signals, listener: () => void): this; + once(event: string | symbol, listener: (...args: any[]) => void): this; prependListener(event: "beforeExit", listener: (code: number) => void): this; prependListener(event: "disconnect", listener: () => void): this; @@ -514,7 +523,9 @@ declare namespace NodeJS { prependListener(event: "uncaughtException", listener: (error: Error) => void): this; prependListener(event: "unhandledRejection", listener: (reason: any, promise: Promise) => void): this; prependListener(event: "warning", listener: (warning: Error) => void): this; + prependListener(event: "message", listener: (message: any, sendHandle: any) => void): this; prependListener(event: Signals, listener: () => void): this; + prependListener(event: string | symbol, listener: (...args: any[]) => void): this; prependOnceListener(event: "beforeExit", listener: (code: number) => void): this; prependOnceListener(event: "disconnect", listener: () => void): this; @@ -523,7 +534,9 @@ declare namespace NodeJS { prependOnceListener(event: "uncaughtException", listener: (error: Error) => void): this; prependOnceListener(event: "unhandledRejection", listener: (reason: any, promise: Promise) => void): this; prependOnceListener(event: "warning", listener: (warning: Error) => void): this; + prependOnceListener(event: "message", listener: (message: any, sendHandle: any) => void): this; prependOnceListener(event: Signals, listener: () => void): this; + prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this; } export interface Global { From 56866537591b4d78d0904ceb9cd7ea2cc4a12267 Mon Sep 17 00:00:00 2001 From: Flarna Date: Tue, 13 Jun 2017 22:08:10 +0200 Subject: [PATCH 2/4] * remove catch-all variants for on/once/... in Process * add "newListener" | "removeListener" variants * correct emit() functions for "cluster" * add some tests --- types/node/index.d.ts | 55 ++++++++++++++++++++-------------------- types/node/node-tests.ts | 11 ++++++++ 2 files changed, 38 insertions(+), 28 deletions(-) diff --git a/types/node/index.d.ts b/types/node/index.d.ts index 5ed6beb44c..4498b49210 100644 --- a/types/node/index.d.ts +++ b/types/node/index.d.ts @@ -469,9 +469,8 @@ declare namespace NodeJS { * 8. warning * 9. message * 10. - * 11. anything else + * 11. newListener/removeListener inherited from EventEmitter */ - addListener(event: "beforeExit", listener: (code: number) => void): this; addListener(event: "disconnect", listener: () => void): this; addListener(event: "exit", listener: (code: number) => void): this; @@ -481,7 +480,7 @@ declare namespace NodeJS { addListener(event: "warning", listener: (warning: Error) => void): this; addListener(event: "message", listener: (message: any, sendHandle: any) => void): this; addListener(event: Signals, listener: () => void): this; - addListener(event: string | symbol, listener: (...args: any[]) => void): this; + addListener(event: "newListener" | "removeListener", listener: (event: string, listener: Function) => void): this; emit(event: "beforeExit", code: number): boolean; emit(event: "disconnect"): boolean; @@ -492,7 +491,7 @@ declare namespace NodeJS { emit(event: "warning", warning: Error): boolean; emit(event: "message", message: any, sendHandle: any): this; emit(event: Signals): boolean; - emit(event: string | symbol, ...args: any[]): boolean; + emit(event: "newListener" | "removeListener", eventName: string, listener: Function): this; on(event: "beforeExit", listener: (code: number) => void): this; on(event: "disconnect", listener: () => void): this; @@ -503,7 +502,7 @@ declare namespace NodeJS { on(event: "warning", listener: (warning: Error) => void): this; on(event: "message", listener: (message: any, sendHandle: any) => void): this; on(event: Signals, listener: () => void): this; - on(event: string | symbol, listener: (...args: any[]) => void): this; + on(event: "newListener" | "removeListener", listener: (event: string, listener: Function) => void): this; once(event: "beforeExit", listener: (code: number) => void): this; once(event: "disconnect", listener: () => void): this; @@ -514,7 +513,7 @@ declare namespace NodeJS { once(event: "warning", listener: (warning: Error) => void): this; once(event: "message", listener: (message: any, sendHandle: any) => void): this; once(event: Signals, listener: () => void): this; - once(event: string | symbol, listener: (...args: any[]) => void): this; + once(event: "newListener" | "removeListener", listener: (event: string, listener: Function) => void): this; prependListener(event: "beforeExit", listener: (code: number) => void): this; prependListener(event: "disconnect", listener: () => void): this; @@ -525,7 +524,7 @@ declare namespace NodeJS { prependListener(event: "warning", listener: (warning: Error) => void): this; prependListener(event: "message", listener: (message: any, sendHandle: any) => void): this; prependListener(event: Signals, listener: () => void): this; - prependListener(event: string | symbol, listener: (...args: any[]) => void): this; + prependListener(event: "newListener" | "removeListener", listener: (event: string, listener: Function) => void): this; prependOnceListener(event: "beforeExit", listener: (code: number) => void): this; prependOnceListener(event: "disconnect", listener: () => void): this; @@ -536,7 +535,7 @@ declare namespace NodeJS { prependOnceListener(event: "warning", listener: (warning: Error) => void): this; prependOnceListener(event: "message", listener: (message: any, sendHandle: any) => void): this; prependOnceListener(event: Signals, listener: () => void): this; - prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this; + prependOnceListener(event: "newListener" | "removeListener", listener: (event: string, listener: Function) => void): this; } export interface Global { @@ -959,12 +958,12 @@ declare module "cluster" { addListener(event: "online", listener: () => void): this; emit(event: string, listener: Function): boolean - emit(event: "disconnect", listener: () => void): boolean - emit(event: "error", listener: (code: number, signal: string) => void): boolean - emit(event: "exit", listener: (code: number, signal: string) => void): boolean - emit(event: "listening", listener: (address: Address) => void): boolean - emit(event: "message", listener: (message: any, handle: net.Socket | net.Server) => void): boolean - emit(event: "online", listener: () => void): boolean + emit(event: "disconnect"): boolean + emit(event: "error", code: number, signal: string): boolean + emit(event: "exit", code: number, signal: string): boolean + emit(event: "listening", address: Address): boolean + emit(event: "message", message: any, handle: net.Socket | net.Server): boolean + emit(event: "online"): boolean on(event: string, listener: Function): this; on(event: "disconnect", listener: () => void): this; @@ -1033,13 +1032,13 @@ declare module "cluster" { addListener(event: "setup", listener: (settings: any) => void): this; emit(event: string, listener: Function): boolean; - emit(event: "disconnect", listener: (worker: Worker) => void): boolean; - emit(event: "exit", listener: (worker: Worker, code: number, signal: string) => void): boolean; - emit(event: "fork", listener: (worker: Worker) => void): boolean; - emit(event: "listening", listener: (worker: Worker, address: Address) => void): boolean; - emit(event: "message", listener: (worker: Worker, message: any, handle: net.Socket | net.Server) => void): boolean; - emit(event: "online", listener: (worker: Worker) => void): boolean; - emit(event: "setup", listener: (settings: any) => void): boolean; + emit(event: "disconnect", worker: Worker): boolean; + emit(event: "exit", worker: Worker, code: number, signal: string): boolean; + emit(event: "fork", worker: Worker): boolean; + emit(event: "listening", worker: Worker, address: Address): boolean; + emit(event: "message", worker: Worker, message: any, handle: net.Socket | net.Server): boolean; + emit(event: "online", worker: Worker): boolean; + emit(event: "setup", settings: any): boolean; on(event: string, listener: Function): this; on(event: "disconnect", listener: (worker: Worker) => void): this; @@ -1111,13 +1110,13 @@ declare module "cluster" { export function addListener(event: "setup", listener: (settings: any) => void): Cluster; export function emit(event: string, listener: Function): boolean; - export function emit(event: "disconnect", listener: (worker: Worker) => void): boolean; - export function emit(event: "exit", listener: (worker: Worker, code: number, signal: string) => void): boolean; - export function emit(event: "fork", listener: (worker: Worker) => void): boolean; - export function emit(event: "listening", listener: (worker: Worker, address: Address) => void): boolean; - export function emit(event: "message", listener: (worker: Worker, message: any, handle: net.Socket | net.Server) => void): boolean; - export function emit(event: "online", listener: (worker: Worker) => void): boolean; - export function emit(event: "setup", listener: (settings: any) => void): boolean; + export function emit(event: "disconnect", worker: Worker): boolean; + export function emit(event: "exit", worker: Worker, code: number, signal: string): boolean; + export function emit(event: "fork", worker: Worker): boolean; + export function emit(event: "listening", worker: Worker, address: Address): boolean; + export function emit(event: "message", worker: Worker, message: any, handle: net.Socket | net.Server): boolean; + export function emit(event: "online", worker: Worker): boolean; + export function emit(event: "setup", settings: any): boolean; export function on(event: string, listener: Function): Cluster; export function on(event: "disconnect", listener: (worker: Worker) => void): Cluster; diff --git a/types/node/node-tests.ts b/types/node/node-tests.ts index 35260b138b..251ef2d7eb 100644 --- a/types/node/node-tests.ts +++ b/types/node/node-tests.ts @@ -1892,6 +1892,17 @@ namespace process_tests { } { process.on("message", (req: any) => { }); + process.addListener("beforeExit", (code: number) => { }); + process.once("disconnect", () => { }); + process.prependListener("exit", (code: number) => { }); + process.prependOnceListener("rejectionHandled", (promise: Promise) => { }); + process.on("uncaughtException", (error: Error) => { }); + process.addListener("unhandledRejection", (reason: any, promise: Promise) => { }); + process.once("warning", (warning: Error) => { }); + process.prependListener("message", (message: any, sendHandle: any) => { }); + process.prependOnceListener("SIGBREAK", () => { }); + process.on("newListener", (event: string, listener: Function) => { }); + process.once("removeListener", (event: string, listener: Function) => { }); } } From c6eb2e6f077407495082353c6547241fd5e1ae73 Mon Sep 17 00:00:00 2001 From: Flarna Date: Wed, 14 Jun 2017 09:14:02 +0200 Subject: [PATCH 3/4] split events newListener/removeListener for Process --- types/node/index.d.ts | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/types/node/index.d.ts b/types/node/index.d.ts index 4498b49210..369b786f17 100644 --- a/types/node/index.d.ts +++ b/types/node/index.d.ts @@ -480,7 +480,8 @@ declare namespace NodeJS { addListener(event: "warning", listener: (warning: Error) => void): this; addListener(event: "message", listener: (message: any, sendHandle: any) => void): this; addListener(event: Signals, listener: () => void): this; - addListener(event: "newListener" | "removeListener", listener: (event: string, listener: Function) => void): this; + addListener(event: "newListener", listener: (event: string, listener: Function) => void): this; + addListener(event: "removeListener", listener: (event: string, listener: Function) => void): this; emit(event: "beforeExit", code: number): boolean; emit(event: "disconnect"): boolean; @@ -491,7 +492,8 @@ declare namespace NodeJS { emit(event: "warning", warning: Error): boolean; emit(event: "message", message: any, sendHandle: any): this; emit(event: Signals): boolean; - emit(event: "newListener" | "removeListener", eventName: string, listener: Function): this; + emit(event: "newListener", eventName: string, listener: Function): this; + emit(event: "removeListener", eventName: string, listener: Function): this; on(event: "beforeExit", listener: (code: number) => void): this; on(event: "disconnect", listener: () => void): this; @@ -502,7 +504,8 @@ declare namespace NodeJS { on(event: "warning", listener: (warning: Error) => void): this; on(event: "message", listener: (message: any, sendHandle: any) => void): this; on(event: Signals, listener: () => void): this; - on(event: "newListener" | "removeListener", listener: (event: string, listener: Function) => void): this; + on(event: "newListener", listener: (event: string, listener: Function) => void): this; + on(event: "removeListener", listener: (event: string, listener: Function) => void): this; once(event: "beforeExit", listener: (code: number) => void): this; once(event: "disconnect", listener: () => void): this; @@ -513,7 +516,8 @@ declare namespace NodeJS { once(event: "warning", listener: (warning: Error) => void): this; once(event: "message", listener: (message: any, sendHandle: any) => void): this; once(event: Signals, listener: () => void): this; - once(event: "newListener" | "removeListener", listener: (event: string, listener: Function) => void): this; + once(event: "newListener", listener: (event: string, listener: Function) => void): this; + once(event: "removeListener", listener: (event: string, listener: Function) => void): this; prependListener(event: "beforeExit", listener: (code: number) => void): this; prependListener(event: "disconnect", listener: () => void): this; @@ -524,7 +528,8 @@ declare namespace NodeJS { prependListener(event: "warning", listener: (warning: Error) => void): this; prependListener(event: "message", listener: (message: any, sendHandle: any) => void): this; prependListener(event: Signals, listener: () => void): this; - prependListener(event: "newListener" | "removeListener", listener: (event: string, listener: Function) => void): this; + prependListener(event: "newListener", listener: (event: string, listener: Function) => void): this; + prependListener(event: "removeListener", listener: (event: string, listener: Function) => void): this; prependOnceListener(event: "beforeExit", listener: (code: number) => void): this; prependOnceListener(event: "disconnect", listener: () => void): this; @@ -535,7 +540,8 @@ declare namespace NodeJS { prependOnceListener(event: "warning", listener: (warning: Error) => void): this; prependOnceListener(event: "message", listener: (message: any, sendHandle: any) => void): this; prependOnceListener(event: Signals, listener: () => void): this; - prependOnceListener(event: "newListener" | "removeListener", listener: (event: string, listener: Function) => void): this; + prependOnceListener(event: "newListener", listener: (event: string, listener: Function) => void): this; + prependOnceListener(event: "removeListener", listener: (event: string, listener: Function) => void): this; } export interface Global { From 74fd1f601de36965ab6ee0147a14d44755491e73 Mon Sep 17 00:00:00 2001 From: Flarna Date: Tue, 20 Jun 2017 01:01:48 +0200 Subject: [PATCH 4/4] - Added dedicated types for listeners to avoid unneeded copy/paste. - Added overloads for listen() to cover issue discussed in latest comments of #16705 --- types/node/index.d.ts | 136 +++++++++++++++++++++++---------------- types/node/node-tests.ts | 4 ++ 2 files changed, 84 insertions(+), 56 deletions(-) diff --git a/types/node/index.d.ts b/types/node/index.d.ts index 369b786f17..a9c5649efc 100644 --- a/types/node/index.d.ts +++ b/types/node/index.d.ts @@ -384,6 +384,18 @@ declare namespace NodeJS { "SIGSTOP" | "SIGSYS" | "SIGTERM" | "SIGTRAP" | "SIGTSTP" | "SIGTTIN" | "SIGTTOU" | "SIGUNUSED" | "SIGURG" | "SIGUSR1" | "SIGUSR2" | "SIGVTALRM" | "SIGWINCH" | "SIGXCPU" | "SIGXFSZ" | "SIGBREAK" | "SIGLOST" | "SIGINFO"; + type BeforeExitListener = (code: number) => void; + type DisconnectListener = () => void; + type ExitListener = (code: number) => void; + type RejectionHandledListender = (promise: Promise) => void; + type UncaughtExceptionListener = (error: Error) => void; + type UnhandledRejectionListener = (reason: any, promise: Promise) => void; + type WarningListener = (warning: Error) => void; + type MessageListener = (message: any, sendHandle: any) => void; + type SignalsListener = () => void; + type NewListenerListener = (type: string | symbol, listener: Function) => void; + type RemoveListenerListener = (type: string | symbol, listener: Function) => void; + export interface Socket extends ReadWriteStream { isTTY?: true; } @@ -471,17 +483,17 @@ declare namespace NodeJS { * 10. * 11. newListener/removeListener inherited from EventEmitter */ - addListener(event: "beforeExit", listener: (code: number) => void): this; - addListener(event: "disconnect", listener: () => void): this; - addListener(event: "exit", listener: (code: number) => void): this; - addListener(event: "rejectionHandled", listener: (promise: Promise) => void): this; - addListener(event: "uncaughtException", listener: (error: Error) => void): this; - addListener(event: "unhandledRejection", listener: (reason: any, promise: Promise) => void): this; - addListener(event: "warning", listener: (warning: Error) => void): this; - addListener(event: "message", listener: (message: any, sendHandle: any) => void): this; - addListener(event: Signals, listener: () => void): this; - addListener(event: "newListener", listener: (event: string, listener: Function) => void): this; - addListener(event: "removeListener", listener: (event: string, listener: Function) => void): this; + addListener(event: "beforeExit", listener: BeforeExitListener): this; + addListener(event: "disconnect", listener: DisconnectListener): this; + addListener(event: "exit", listener: ExitListener): this; + addListener(event: "rejectionHandled", listener: RejectionHandledListender): this; + addListener(event: "uncaughtException", listener: UncaughtExceptionListener): this; + addListener(event: "unhandledRejection", listener: UnhandledRejectionListener): this; + addListener(event: "warning", listener: WarningListener): this; + addListener(event: "message", listener: MessageListener): this; + addListener(event: Signals, listener: SignalsListener): this; + addListener(event: "newListener", listener: NewListenerListener): this; + addListener(event: "removeListener", listener: RemoveListenerListener): this; emit(event: "beforeExit", code: number): boolean; emit(event: "disconnect"): boolean; @@ -492,56 +504,68 @@ declare namespace NodeJS { emit(event: "warning", warning: Error): boolean; emit(event: "message", message: any, sendHandle: any): this; emit(event: Signals): boolean; - emit(event: "newListener", eventName: string, listener: Function): this; + emit(event: "newListener", eventName: string | symbol, listener: Function): this; emit(event: "removeListener", eventName: string, listener: Function): this; - on(event: "beforeExit", listener: (code: number) => void): this; - on(event: "disconnect", listener: () => void): this; - on(event: "exit", listener: (code: number) => void): this; - on(event: "rejectionHandled", listener: (promise: Promise) => void): this; - on(event: "uncaughtException", listener: (error: Error) => void): this; - on(event: "unhandledRejection", listener: (reason: any, promise: Promise) => void): this; - on(event: "warning", listener: (warning: Error) => void): this; - on(event: "message", listener: (message: any, sendHandle: any) => void): this; - on(event: Signals, listener: () => void): this; - on(event: "newListener", listener: (event: string, listener: Function) => void): this; - on(event: "removeListener", listener: (event: string, listener: Function) => void): this; + on(event: "beforeExit", listener: BeforeExitListener): this; + on(event: "disconnect", listener: DisconnectListener): this; + on(event: "exit", listener: ExitListener): this; + on(event: "rejectionHandled", listener: RejectionHandledListender): this; + on(event: "uncaughtException", listener: UncaughtExceptionListener): this; + on(event: "unhandledRejection", listener: UnhandledRejectionListener): this; + on(event: "warning", listener: WarningListener): this; + on(event: "message", listener: MessageListener): this; + on(event: Signals, listener: SignalsListener): this; + on(event: "newListener", listener: NewListenerListener): this; + on(event: "removeListener", listener: RemoveListenerListener): this; - once(event: "beforeExit", listener: (code: number) => void): this; - once(event: "disconnect", listener: () => void): this; - once(event: "exit", listener: (code: number) => void): this; - once(event: "rejectionHandled", listener: (promise: Promise) => void): this; - once(event: "uncaughtException", listener: (error: Error) => void): this; - once(event: "unhandledRejection", listener: (reason: any, promise: Promise) => void): this; - once(event: "warning", listener: (warning: Error) => void): this; - once(event: "message", listener: (message: any, sendHandle: any) => void): this; - once(event: Signals, listener: () => void): this; - once(event: "newListener", listener: (event: string, listener: Function) => void): this; - once(event: "removeListener", listener: (event: string, listener: Function) => void): this; + once(event: "beforeExit", listener: BeforeExitListener): this; + once(event: "disconnect", listener: DisconnectListener): this; + once(event: "exit", listener: ExitListener): this; + once(event: "rejectionHandled", listener: RejectionHandledListender): this; + once(event: "uncaughtException", listener: UncaughtExceptionListener): this; + once(event: "unhandledRejection", listener: UnhandledRejectionListener): this; + once(event: "warning", listener: WarningListener): this; + once(event: "message", listener: MessageListener): this; + once(event: Signals, listener: SignalsListener): this; + once(event: "newListener", listener: NewListenerListener): this; + once(event: "removeListener", listener: RemoveListenerListener): this; - prependListener(event: "beforeExit", listener: (code: number) => void): this; - prependListener(event: "disconnect", listener: () => void): this; - prependListener(event: "exit", listener: (code: number) => void): this; - prependListener(event: "rejectionHandled", listener: (promise: Promise) => void): this; - prependListener(event: "uncaughtException", listener: (error: Error) => void): this; - prependListener(event: "unhandledRejection", listener: (reason: any, promise: Promise) => void): this; - prependListener(event: "warning", listener: (warning: Error) => void): this; - prependListener(event: "message", listener: (message: any, sendHandle: any) => void): this; - prependListener(event: Signals, listener: () => void): this; - prependListener(event: "newListener", listener: (event: string, listener: Function) => void): this; - prependListener(event: "removeListener", listener: (event: string, listener: Function) => void): this; + prependListener(event: "beforeExit", listener: BeforeExitListener): this; + prependListener(event: "disconnect", listener: DisconnectListener): this; + prependListener(event: "exit", listener: ExitListener): this; + prependListener(event: "rejectionHandled", listener: RejectionHandledListender): this; + prependListener(event: "uncaughtException", listener: UncaughtExceptionListener): this; + prependListener(event: "unhandledRejection", listener: UnhandledRejectionListener): this; + prependListener(event: "warning", listener: WarningListener): this; + prependListener(event: "message", listener: MessageListener): this; + prependListener(event: Signals, listener: SignalsListener): this; + prependListener(event: "newListener", listener: NewListenerListener): this; + prependListener(event: "removeListener", listener: RemoveListenerListener): this; - prependOnceListener(event: "beforeExit", listener: (code: number) => void): this; - prependOnceListener(event: "disconnect", listener: () => void): this; - prependOnceListener(event: "exit", listener: (code: number) => void): this; - prependOnceListener(event: "rejectionHandled", listener: (promise: Promise) => void): this; - prependOnceListener(event: "uncaughtException", listener: (error: Error) => void): this; - prependOnceListener(event: "unhandledRejection", listener: (reason: any, promise: Promise) => void): this; - prependOnceListener(event: "warning", listener: (warning: Error) => void): this; - prependOnceListener(event: "message", listener: (message: any, sendHandle: any) => void): this; - prependOnceListener(event: Signals, listener: () => void): this; - prependOnceListener(event: "newListener", listener: (event: string, listener: Function) => void): this; - prependOnceListener(event: "removeListener", listener: (event: string, listener: Function) => void): this; + prependOnceListener(event: "beforeExit", listener: BeforeExitListener): this; + prependOnceListener(event: "disconnect", listener: DisconnectListener): this; + prependOnceListener(event: "exit", listener: ExitListener): this; + prependOnceListener(event: "rejectionHandled", listener: RejectionHandledListender): this; + prependOnceListener(event: "uncaughtException", listener: UncaughtExceptionListener): this; + prependOnceListener(event: "unhandledRejection", listener: UnhandledRejectionListener): this; + prependOnceListener(event: "warning", listener: WarningListener): this; + prependOnceListener(event: "message", listener: MessageListener): this; + prependOnceListener(event: Signals, listener: SignalsListener): this; + prependOnceListener(event: "newListener", listener: NewListenerListener): this; + prependOnceListener(event: "removeListener", listener: RemoveListenerListener): this; + + listeners(event: "beforeExit"): BeforeExitListener[]; + listeners(event: "disconnect"): DisconnectListener[]; + listeners(event: "exit"): ExitListener[]; + listeners(event: "rejectionHandled"): RejectionHandledListender[]; + listeners(event: "uncaughtException"): UncaughtExceptionListener[]; + listeners(event: "unhandledRejection"): UnhandledRejectionListener[]; + listeners(event: "warning"): WarningListener[]; + listeners(event: "message"): MessageListener[]; + listeners(event: Signals): SignalsListener[]; + listeners(event: "newListener"): NewListenerListener[]; + listeners(event: "removeListener"): RemoveListenerListener[]; } export interface Global { diff --git a/types/node/node-tests.ts b/types/node/node-tests.ts index 251ef2d7eb..6aa3109d7c 100644 --- a/types/node/node-tests.ts +++ b/types/node/node-tests.ts @@ -1903,6 +1903,10 @@ namespace process_tests { process.prependOnceListener("SIGBREAK", () => { }); process.on("newListener", (event: string, listener: Function) => { }); process.once("removeListener", (event: string, listener: Function) => { }); + + const listeners = process.listeners('uncaughtException'); + const oldHandler = listeners[listeners.length - 1]; + process.addListener('uncaughtException', oldHandler); } }