From affde8415d661c9b046e8daa3bfc08b9c89d66be Mon Sep 17 00:00:00 2001 From: Todd Lucas Date: Mon, 29 Aug 2016 12:14:54 -0700 Subject: [PATCH 1/4] Convert incorrect enum and string union usage to string literal types NOTE: This feature requires TypeScript 1.8+. --- isomorphic-fetch/isomorphic-fetch.d.ts | 54 +++++++++++++------------- 1 file changed, 27 insertions(+), 27 deletions(-) diff --git a/isomorphic-fetch/isomorphic-fetch.d.ts b/isomorphic-fetch/isomorphic-fetch.d.ts index 19754db0f1..45182189b5 100644 --- a/isomorphic-fetch/isomorphic-fetch.d.ts +++ b/isomorphic-fetch/isomorphic-fetch.d.ts @@ -3,21 +3,21 @@ // Definitions by: Todd Lucas // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped -declare enum RequestContext { - "audio", "beacon", "cspreport", "download", "embed", "eventsource", - "favicon", "fetch", "font", "form", "frame", "hyperlink", "iframe", - "image", "imageset", "import", "internal", "location", "manifest", - "object", "ping", "plugin", "prefetch", "script", "serviceworker", - "sharedworker", "subresource", "style", "track", "video", "worker", - "xmlhttprequest", "xslt" -} -declare enum RequestMode { "same-origin", "no-cors", "cors" } -declare enum RequestCredentials { "omit", "same-origin", "include" } -declare enum RequestCache { - "default", "no-store", "reload", "no-cache", "force-cache", - "only-if-cached" -} -declare enum ResponseType { "basic", "cors", "default", "error", "opaque" } +type RequestContext = + "audio" | "beacon" | "cspreport" | "download" | "embed" | "eventsource" | + "favicon" | "fetch" | "font" | "form" | "frame" | "hyperlink" | "iframe" | + "image" | "imageset" | "import" | "internal" | "location" | "manifest" | + "object" | "ping" | "plugin" | "prefetch" | "script" | "serviceworker" | + "sharedworker" | "subresource" | "style" | "track" | "video" | "worker" | + "xmlhttprequest" | "xslt"; + +type RequestMode = "same-origin" | "no-cors" | "cors"; +type RequestCredentials = "omit" | "same-origin" | "include"; +type RequestCache = + "default" | "no-store" | "reload" | "no-cache" | "force-cache" | + "only-if-cached"; + +type ResponseType = "basic" | "cors" | "default" | "error" | "opaque"; declare type HeaderInit = Headers | Array; declare type BodyInit = ArrayBuffer | ArrayBufferView | Blob | FormData | string; @@ -27,9 +27,9 @@ interface RequestInit { method?: string; headers?: HeaderInit | { [index: string]: string }; body?: BodyInit; - mode?: string | RequestMode; - credentials?: string | RequestCredentials; - cache?: string | RequestCache; + mode?: RequestMode; + credentials?: RequestCredentials; + cache?: RequestCache; } interface IHeaders { @@ -71,11 +71,11 @@ interface IRequest extends IBody { method: string; url: string; headers: Headers; - context: string | RequestContext; + context: RequestContext; referrer: string; - mode: string | RequestMode; - credentials: string | RequestCredentials; - cache: string | RequestCache; + mode: RequestMode; + credentials: RequestCredentials; + cache: RequestCache; } declare class Request extends Body implements IRequest { @@ -83,11 +83,11 @@ declare class Request extends Body implements IRequest { method: string; url: string; headers: Headers; - context: string | RequestContext; + context: RequestContext; referrer: string; - mode: string | RequestMode; - credentials: string | RequestCredentials; - cache: string | RequestCache; + mode: RequestMode; + credentials: RequestCredentials; + cache: RequestCache; } interface IResponse extends IBody { @@ -96,7 +96,7 @@ interface IResponse extends IBody { statusText: string; ok: boolean; headers: IHeaders; - type: string | ResponseType; + type: ResponseType; size: number; timeout: number; redirect(url: string, status: number): IResponse; From 42bdaf09863d97fe60de8ecba4ca51ac3acac2e7 Mon Sep 17 00:00:00 2001 From: Todd Lucas Date: Mon, 29 Aug 2016 23:40:18 -0700 Subject: [PATCH 2/4] Update interfaces to follow whatwg-fetch spec changes Not all spec options are followed by node-fetch, yet. --- isomorphic-fetch/isomorphic-fetch-tests.ts | 1 + isomorphic-fetch/isomorphic-fetch.d.ts | 125 ++++++++++++++++----- 2 files changed, 95 insertions(+), 31 deletions(-) diff --git a/isomorphic-fetch/isomorphic-fetch-tests.ts b/isomorphic-fetch/isomorphic-fetch-tests.ts index ddf11f84fe..fefabf2080 100644 --- a/isomorphic-fetch/isomorphic-fetch-tests.ts +++ b/isomorphic-fetch/isomorphic-fetch-tests.ts @@ -1,4 +1,5 @@ /// +/// import fetchImportedViaCommonJS = require('isomorphic-fetch'); import * as fetchImportedViaES6Module from 'isomorphic-fetch'; diff --git a/isomorphic-fetch/isomorphic-fetch.d.ts b/isomorphic-fetch/isomorphic-fetch.d.ts index 45182189b5..f0a6756e8b 100644 --- a/isomorphic-fetch/isomorphic-fetch.d.ts +++ b/isomorphic-fetch/isomorphic-fetch.d.ts @@ -3,48 +3,76 @@ // Definitions by: Todd Lucas // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped -type RequestContext = +type RequestContext = // Deprecated "audio" | "beacon" | "cspreport" | "download" | "embed" | "eventsource" | "favicon" | "fetch" | "font" | "form" | "frame" | "hyperlink" | "iframe" | "image" | "imageset" | "import" | "internal" | "location" | "manifest" | "object" | "ping" | "plugin" | "prefetch" | "script" | "serviceworker" | "sharedworker" | "subresource" | "style" | "track" | "video" | "worker" | "xmlhttprequest" | "xslt"; - -type RequestMode = "same-origin" | "no-cors" | "cors"; +type RequestType = "" | "audio" | "font" | "image" | "script" | "style" | + "track" | "video"; +type RequestDestination = "" | "document" | "embed" | "font" | "image" | + "manifest" | "media" | "object" | "report" | "script" | "serviceworker" | + "sharedworker" | "style" | "worker" | "xslt"; +type RequestMode = "navigate" | "same-origin" | "no-cors" | "cors"; type RequestCredentials = "omit" | "same-origin" | "include"; type RequestCache = "default" | "no-store" | "reload" | "no-cache" | "force-cache" | "only-if-cached"; +type RequestRedirect = "follow" | "error" | "manual"; -type ResponseType = "basic" | "cors" | "default" | "error" | "opaque"; +type ResponseType = "basic" | "cors" | "default" | "error" | "opaque" | + "opaqueredirect"; -declare type HeaderInit = Headers | Array; -declare type BodyInit = ArrayBuffer | ArrayBufferView | Blob | FormData | string; -declare type RequestInfo = Request | string; +type HeadersInit = Headers | Array | { [index: string]: string }; +type BodyInit = Blob | ArrayBufferView | ArrayBuffer | FormData /* | URLSearchParams */ | string; +type ResponseBodyInit = BodyInit; + +type ReferrerPolicy = "" | "no-referrer" | "no-referrer-when-downgrade" | + "same-origin" | "origin" | "strict-origin" | "origin-when-cross-origin" | + "strict-origin-when-cross-origin" | "unsafe-url"; interface RequestInit { method?: string; - headers?: HeaderInit | { [index: string]: string }; + headers?: HeadersInit; body?: BodyInit; + referrer?: string; + referrerPolicy?: ReferrerPolicy; mode?: RequestMode; credentials?: RequestCredentials; cache?: RequestCache; + redirect?: RequestRedirect; + integrity?: string; + window?: any; // can only be set to null } interface IHeaders { - get(name: string): string; - getAll(name: string): Array; - has(name: string): boolean; -} - -declare class Headers implements IHeaders { append(name: string, value: string): void; - delete(name: string):void; + delete(name: string): void; get(name: string): string; getAll(name: string): Array; has(name: string): boolean; set(name: string, value: string): void; + + // TODO: iterable; + forEach(callback: (value: string, index: number, headers: IHeaders) => void, thisArg?: any): void; + // NOTE: The following are supported by whatwg-fetch but not node-fetch. + // entries(): IterableIterator<[string, string]>; + // keys(): IterableIterator; + // values(): IterableIterator; +} + +declare class Headers implements IHeaders { + constructor(init?: HeadersInit); + append(name: string, value: string): void; + delete(name: string): void; + get(name: string): string; + getAll(name: string): Array; + has(name: string): boolean; + set(name: string, value: string): void; + + forEach(callback: (value: string, index: number, headers: IHeaders) => void, thisArg?: any): void; } interface IBody { @@ -70,49 +98,84 @@ declare class Body implements IBody { interface IRequest extends IBody { method: string; url: string; - headers: Headers; - context: RequestContext; - referrer: string; + headers: IHeaders; + type: RequestType; + context: RequestContext; // Deprecated + destination: RequestDestination; + referrer?: string; + referrerPolicy?: ReferrerPolicy; mode: RequestMode; credentials: RequestCredentials; cache: RequestCache; + redirect?: RequestRedirect; + integrity?: string; + clone(): IRequest; } +type RequestInfo = IRequest | string; + declare class Request extends Body implements IRequest { - constructor(input: string | Request, init?: RequestInit); + constructor(input: RequestInfo, init?: RequestInit); method: string; url: string; - headers: Headers; + headers: IHeaders; + type: RequestType context: RequestContext; + destination: RequestDestination; referrer: string; + referrerPolicy: ReferrerPolicy; mode: RequestMode; credentials: RequestCredentials; cache: RequestCache; + redirect: RequestRedirect; + integrity: string; + clone(): IRequest; +} + +interface ResponseInit { + status?: number; + statusText?: string; + headers?: HeadersInit; } interface IResponse extends IBody { + type: ResponseType; url: string; + redirected: boolean; status: number; statusText: string; ok: boolean; headers: IHeaders; - type: ResponseType; - size: number; - timeout: number; - redirect(url: string, status: number): IResponse; + // size: number; + // timeout: number; + body: any; + trailer: Promise; + redirect(url: string, status?: number): IResponse; error(): IResponse; clone(): IResponse; } -interface IFetchStatic { - Promise: any; - Headers: IHeaders - Request: IRequest; - Response: IResponse; - (url: string | IRequest, init?: RequestInit): Promise; +declare class Response extends Body implements IResponse { + constructor(body?: ResponseBodyInit, init?: ResponseInit); + type: ResponseType + url: string; + redirected: boolean; + status: number; + statusText: string; + ok: boolean; + headers: IHeaders; + body: any; + trailer: Promise; + redirect(url: string, status?: number): IResponse; + error(): IResponse; + clone(): IResponse; } -declare var fetch: IFetchStatic; +interface Window { + fetch(url: RequestInfo, init?: RequestInit): Promise; +} + +declare var fetch: typeof window.fetch; declare module "isomorphic-fetch" { export = fetch; From 3a59692d1b68cafec250803989014dba45bc16ae Mon Sep 17 00:00:00 2001 From: Todd Lucas Date: Mon, 29 Aug 2016 23:48:34 -0700 Subject: [PATCH 3/4] Remove deprecated RequestContext and reorder declarations --- isomorphic-fetch/isomorphic-fetch.d.ts | 79 ++++++++++++++------------ 1 file changed, 42 insertions(+), 37 deletions(-) diff --git a/isomorphic-fetch/isomorphic-fetch.d.ts b/isomorphic-fetch/isomorphic-fetch.d.ts index f0a6756e8b..f83cd73a41 100644 --- a/isomorphic-fetch/isomorphic-fetch.d.ts +++ b/isomorphic-fetch/isomorphic-fetch.d.ts @@ -3,13 +3,6 @@ // Definitions by: Todd Lucas // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped -type RequestContext = // Deprecated - "audio" | "beacon" | "cspreport" | "download" | "embed" | "eventsource" | - "favicon" | "fetch" | "font" | "form" | "frame" | "hyperlink" | "iframe" | - "image" | "imageset" | "import" | "internal" | "location" | "manifest" | - "object" | "ping" | "plugin" | "prefetch" | "script" | "serviceworker" | - "sharedworker" | "subresource" | "style" | "track" | "video" | "worker" | - "xmlhttprequest" | "xslt"; type RequestType = "" | "audio" | "font" | "image" | "script" | "style" | "track" | "video"; type RequestDestination = "" | "document" | "embed" | "font" | "image" | @@ -25,28 +18,10 @@ type RequestRedirect = "follow" | "error" | "manual"; type ResponseType = "basic" | "cors" | "default" | "error" | "opaque" | "opaqueredirect"; -type HeadersInit = Headers | Array | { [index: string]: string }; -type BodyInit = Blob | ArrayBufferView | ArrayBuffer | FormData /* | URLSearchParams */ | string; -type ResponseBodyInit = BodyInit; - type ReferrerPolicy = "" | "no-referrer" | "no-referrer-when-downgrade" | "same-origin" | "origin" | "strict-origin" | "origin-when-cross-origin" | "strict-origin-when-cross-origin" | "unsafe-url"; -interface RequestInit { - method?: string; - headers?: HeadersInit; - body?: BodyInit; - referrer?: string; - referrerPolicy?: ReferrerPolicy; - mode?: RequestMode; - credentials?: RequestCredentials; - cache?: RequestCache; - redirect?: RequestRedirect; - integrity?: string; - window?: any; // can only be set to null -} - interface IHeaders { append(name: string, value: string): void; delete(name: string): void; @@ -63,6 +38,8 @@ interface IHeaders { // values(): IterableIterator; } +type HeadersInit = Headers | Array | { [index: string]: string }; + declare class Headers implements IHeaders { constructor(init?: HeadersInit); append(name: string, value: string): void; @@ -99,8 +76,8 @@ interface IRequest extends IBody { method: string; url: string; headers: IHeaders; + type: RequestType; - context: RequestContext; // Deprecated destination: RequestDestination; referrer?: string; referrerPolicy?: ReferrerPolicy; @@ -109,18 +86,36 @@ interface IRequest extends IBody { cache: RequestCache; redirect?: RequestRedirect; integrity?: string; + clone(): IRequest; } +type BodyInit = Blob | ArrayBufferView | ArrayBuffer | FormData /* | URLSearchParams */ | string; + +interface RequestInit { + method?: string; + headers?: HeadersInit; + body?: BodyInit; + referrer?: string; + referrerPolicy?: ReferrerPolicy; + mode?: RequestMode; + credentials?: RequestCredentials; + cache?: RequestCache; + redirect?: RequestRedirect; + integrity?: string; + window?: any; // can only be set to null +} + type RequestInfo = IRequest | string; declare class Request extends Body implements IRequest { constructor(input: RequestInfo, init?: RequestInit); + method: string; url: string; headers: IHeaders; + type: RequestType - context: RequestContext; destination: RequestDestination; referrer: string; referrerPolicy: ReferrerPolicy; @@ -129,17 +124,16 @@ declare class Request extends Body implements IRequest { cache: RequestCache; redirect: RequestRedirect; integrity: string; + clone(): IRequest; } -interface ResponseInit { - status?: number; - statusText?: string; - headers?: HeadersInit; -} - interface IResponse extends IBody { + redirect(url: string, status?: number): IResponse; + error(): IResponse; + type: ResponseType; + url: string; redirected: boolean; status: number; @@ -150,14 +144,26 @@ interface IResponse extends IBody { // timeout: number; body: any; trailer: Promise; - redirect(url: string, status?: number): IResponse; - error(): IResponse; + clone(): IResponse; } +type ResponseBodyInit = BodyInit; + +interface ResponseInit { + status?: number; + statusText?: string; + headers?: HeadersInit; +} + declare class Response extends Body implements IResponse { constructor(body?: ResponseBodyInit, init?: ResponseInit); + + redirect(url: string, status?: number): IResponse; + error(): IResponse; + type: ResponseType + url: string; redirected: boolean; status: number; @@ -166,8 +172,7 @@ declare class Response extends Body implements IResponse { headers: IHeaders; body: any; trailer: Promise; - redirect(url: string, status?: number): IResponse; - error(): IResponse; + clone(): IResponse; } From bfc32a918e8f7fb9896b60fe2f03e3d47a0caf16 Mon Sep 17 00:00:00 2001 From: Todd Lucas Date: Tue, 30 Aug 2016 10:56:41 -0700 Subject: [PATCH 4/4] Fix static declarations on Response class --- isomorphic-fetch/isomorphic-fetch.d.ts | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/isomorphic-fetch/isomorphic-fetch.d.ts b/isomorphic-fetch/isomorphic-fetch.d.ts index f83cd73a41..41b63970b3 100644 --- a/isomorphic-fetch/isomorphic-fetch.d.ts +++ b/isomorphic-fetch/isomorphic-fetch.d.ts @@ -129,9 +129,6 @@ declare class Request extends Body implements IRequest { } interface IResponse extends IBody { - redirect(url: string, status?: number): IResponse; - error(): IResponse; - type: ResponseType; url: string; @@ -159,8 +156,8 @@ interface ResponseInit { declare class Response extends Body implements IResponse { constructor(body?: ResponseBodyInit, init?: ResponseInit); - redirect(url: string, status?: number): IResponse; - error(): IResponse; + static redirect(url: string, status?: number): IResponse; + static error(): IResponse; type: ResponseType