From 879861b8eeeacf0c63af3640d87dee8be085de5e Mon Sep 17 00:00:00 2001 From: Mike Marcacci Date: Wed, 5 Jun 2019 11:24:35 -0700 Subject: [PATCH] Add RequestInit.signal to node-fetch (#35636) * Add RequestInit.signal to node-fetch * Make comments more clear. Co-Authored-By: Niklas Lindgren * Move AbortSignal into its own file * rename to externals.d.ts per suggestion * Make more requested changes * add back files entry, as required by checks * Add back import/export --- types/node-fetch/externals.d.ts | 21 +++++++++++++++++++++ types/node-fetch/index.d.ts | 2 ++ types/node-fetch/node-fetch-tests.ts | 15 +++++++++++++++ types/node-fetch/tsconfig.json | 3 ++- 4 files changed, 40 insertions(+), 1 deletion(-) create mode 100644 types/node-fetch/externals.d.ts diff --git a/types/node-fetch/externals.d.ts b/types/node-fetch/externals.d.ts new file mode 100644 index 0000000000..6695fc470f --- /dev/null +++ b/types/node-fetch/externals.d.ts @@ -0,0 +1,21 @@ +// `AbortSignal` is defined here to prevent a dependency on a particular +// implementation like the `abort-controller` package, and to avoid requiring +// the `dom` library in `tsconfig.json`. + +export interface AbortSignal { + aborted: boolean; + + addEventListener: (type: "abort", listener: ((this: AbortSignal, event: any) => any), options?: boolean | { + capture?: boolean, + once?: boolean, + passive?: boolean + }) => void; + + removeEventListener: (type: "abort", listener: ((this: AbortSignal, event: any) => any), options?: boolean | { + capture?: boolean + }) => void; + + dispatchEvent: (event: any) => boolean; + + onabort?: null | ((this: AbortSignal, event: any) => void); +} diff --git a/types/node-fetch/index.d.ts b/types/node-fetch/index.d.ts index c5b5c707a3..f35c13f2a0 100644 --- a/types/node-fetch/index.d.ts +++ b/types/node-fetch/index.d.ts @@ -13,6 +13,7 @@ import { Agent } from "http"; import { URLSearchParams } from "url"; +import { AbortSignal } from "./externals"; export class Request extends Body { constructor(input: string | { href: string } | Request, init?: RequestInit); @@ -42,6 +43,7 @@ export interface RequestInit { headers?: HeadersInit; method?: string; redirect?: RequestRedirect; + signal?: AbortSignal | null; // node-fetch extensions agent?: Agent; // =null http.Agent instance, allows custom proxy, certificate etc. diff --git a/types/node-fetch/node-fetch-tests.ts b/types/node-fetch/node-fetch-tests.ts index 9dfb3179e4..3f42000022 100644 --- a/types/node-fetch/node-fetch-tests.ts +++ b/types/node-fetch/node-fetch-tests.ts @@ -50,6 +50,21 @@ function test_fetchUrlWithRequestObject() { method: "POST", headers: { "Content-Type": "application/json" + }, + signal: { + aborted: false, + + addEventListener: (type: "abort", listener: ((event: any) => any), options?: boolean | { + capture?: boolean, + once?: boolean, + passive?: boolean + }) => undefined, + + removeEventListener: (type: "abort", listener: ((event: any) => any), options?: boolean | { + capture?: boolean + }) => undefined, + + dispatchEvent: (event: any) => false } }; const request: Request = new Request( diff --git a/types/node-fetch/tsconfig.json b/types/node-fetch/tsconfig.json index d349bf9665..50f65d691a 100644 --- a/types/node-fetch/tsconfig.json +++ b/types/node-fetch/tsconfig.json @@ -19,6 +19,7 @@ }, "files": [ "index.d.ts", + "externals.d.ts", "node-fetch-tests.ts" ] -} \ No newline at end of file +}