Fix definition to be compatible with TS 2.2 (#14837)

TS 2.2 provides definitions for the fetch API directly in the
dom library, and those definitions are slightly different from
those that were provided in @types/whatwg-fetch. This change
updates the webappsec-credential-management definitions to be
compatible with TS 2.2, and drops the dependency on
@types/whatwg-fetch.
This commit is contained in:
Iain McGinniss 2017-03-10 14:56:19 -08:00 committed by Mohamed Hegazy
parent 0e2384e4d3
commit 82bfe951e1

View File

@ -1,10 +1,150 @@
// Type definitions for W3C (WebAppSec) Credential Management API, Level 1, 0.0
// Type definitions for W3C (WebAppSec) Credential Management API Level 1, 0.1
// Project: https://github.com/w3c/webappsec-credential-management
// Definitions by: Iain McGinniss <https://github.com/iainmcgin>
// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
// Spec: http://www.w3.org/TR/2016/WD-credential-management-1-20160425/
/// <reference types="whatwg-fetch" />
/* ************************ FETCH API DEFINITIONS ******************************
* TS 2.2 introduced definitions for the fetch API in the dom library, but
* prior to that it was necessary to use the types defined in
* @types/whatwg-fetch. In order to support all versions of TS 2.x, the
* definitions for fetch from TS 2.2 dom are duplicated here. As long as these
* remain identical to the definitions in dom 2.2+, they cause no issues.
*
* One caveat to "identical" here is that type definitions cannot be duplicated,
* and so the "RequestInfo" type has been substituted for its expansion in
* the below definitions:
*
* type RequestInfo = Request|string;
* ************************************************************************** */
interface Request extends Object, Body {
readonly cache: string;
readonly credentials: string;
readonly destination: string;
readonly headers: Headers;
readonly integrity: string;
readonly keepalive: boolean;
readonly method: string;
readonly mode: string;
readonly redirect: string;
readonly referrer: string;
readonly referrerPolicy: string;
readonly type: string;
readonly url: string;
clone(): Request;
}
declare var Request: {
prototype: Request;
new(input: Request | string, init?: RequestInit): Request;
};
interface Headers {
append(name: string, value: string): void;
delete(name: string): void;
forEach(callback: ForEachCallback): void;
get(name: string): string | null;
has(name: string): boolean;
set(name: string, value: string): void;
}
declare var Headers: {
prototype: Headers;
new(init?: any): Headers;
};
interface Response extends Object, Body {
readonly body: ReadableStream | null;
readonly headers: Headers;
readonly ok: boolean;
readonly status: number;
readonly statusText: string;
readonly type: string;
readonly url: string;
clone(): Response;
}
declare var Response: {
prototype: Response;
new(body?: any, init?: ResponseInit): Response;
};
interface ResponseInit {
status?: number;
statusText?: string;
headers?: any;
}
interface ReadableStream {
readonly locked: boolean;
cancel(): Promise<void>;
getReader(): ReadableStreamReader;
}
declare var ReadableStream: {
prototype: ReadableStream;
new(): ReadableStream;
};
interface ReadableStreamReader {
cancel(): Promise<void>;
read(): Promise<any>;
releaseLock(): void;
}
declare var ReadableStreamReader: {
prototype: ReadableStreamReader;
new(): ReadableStreamReader;
};
interface Body {
readonly bodyUsed: boolean;
arrayBuffer(): Promise<ArrayBuffer>;
blob(): Promise<Blob>;
json(): Promise<any>;
text(): Promise<string>;
}
interface URLSearchParams {
/**
* Appends a specified key/value pair as a new search parameter.
*/
append(name: string, value: string): void;
/**
* Deletes the given search parameter, and its associated value, from the list of all search parameters.
*/
delete(name: string): void;
/**
* Returns the first value associated to the given search parameter.
*/
get(name: string): string | null;
/**
* Returns all the values association with a given search parameter.
*/
getAll(name: string): string[];
/**
* Returns a Boolean indicating if such a search parameter exists.
*/
has(name: string): boolean;
/**
* Sets the value associated to a given search parameter to the given value. If there were several values, delete the others.
*/
set(name: string, value: string): void;
}
declare var URLSearchParams: {
prototype: URLSearchParams;
/**
* Constructor returning a URLSearchParams object.
*/
new (init?: string | URLSearchParams): URLSearchParams;
};
interface GlobalFetch {
fetch(input: Request|string, init?: RequestInit): Promise<Response>;
}
/* ************************* FETCH MODIFICATIONS *******************************
* The credential management spec modifies fetch(), by adding a new
@ -16,78 +156,54 @@
* See: https://www.w3.org/TR/credential-management-1/#monkey-patching
* ************************************************************************** */
interface Window {
fetch(url: CMRequestInfo, init?: CMRequestInit): Promise<Response>;
}
declare function fetch(
input: Request|string,
init?: RequestInit|CMRequestInit):
Promise<Response>;
type CMRequestInfo = CMRequest|string;
interface GlobalFetch {
// variant for navigator.credentials monkey patching
fetch(url: Request|string, init?: CMRequestInit): Promise<Response>;
}
/**
* Variant of {@link Request} that permits a {@code 'password'} value in the
* {@code credentials} property.
* Original definition from TS 2.2 dom.
*/
interface CMRequest extends Body {
// the only modified property from RequestCredentials:
credentials: CMRequestCredentials;
method: string;
url: string;
headers: Headers;
type: RequestType;
destination: RequestDestination;
referrer: string;
referrerPolicy: ReferrerPolicy;
mode: RequestMode;
cache: RequestCache;
redirect: RequestRedirect;
integrity: string;
clone(): Request;
interface RequestInit {
method?: string;
headers?: any;
body?: any;
referrer?: string;
referrerPolicy?: string;
mode?: string;
credentials?: string;
cache?: string;
redirect?: string;
integrity?: string;
keepalive?: boolean;
window?: any;
}
type CMRequestCredentials = RequestCredentials|'password';
/**
* Variant of {@link RequestInit} that permits a {@link PasswordCredential} to
* be used in the {@code credentials} property. All other properties are
* identical to {@link RequestInit}.
*/
interface CMRequestInit {
credentials?: PasswordCredential|CMRequestCredentials;
method?: string;
headers?: HeadersInit;
body?: BodyInit;
headers?: any;
body?: any;
referrer?: string;
referrerPolicy?: ReferrerPolicy;
mode?: RequestMode;
cache?: RequestCache;
redirect?: RequestRedirect;
referrerPolicy?: string;
mode?: string;
credentials?: PasswordCredential|string;
cache?: string;
redirect?: string;
integrity?: string;
keepalive?: boolean;
window?: any;
}
/**
* URLSearchParams is not yet included in the core lib.d.ts declarations, so we
* include it here.
* The official definition should be included in TypeScript 2.2, at which point
* this can be removed.
*
* @see {@link https://github.com/Microsoft/TypeScript/issues/12517}
*/
declare class URLSearchParams {
constructor(init?: string|URLSearchParams);
append(name: string, value: string): void;
delete(name: string): void;
get(name: string): string|null;
getAll(name: string): string[];
has(name: string): boolean;
set(name: string, value: string): void;
}
/* ***************** CREDENTIAL MANAGEMENT API DEFINITONS ******************* */
/**