diff --git a/isomorphic-fetch/isomorphic-fetch-tests.ts b/isomorphic-fetch/isomorphic-fetch-tests.ts
new file mode 100644
index 000000000..3235912ac
--- /dev/null
+++ b/isomorphic-fetch/isomorphic-fetch-tests.ts
@@ -0,0 +1,53 @@
+///
+
+function test_isomorphicFetchTestCases() {
+ expectSuccess(fetch('http://localhost:3000/good'), 'Good response');
+
+ fetch('http://localhost:3000/bad')
+ .then((response: IResponse) => {
+ return response.text();
+ })
+ .catch((err) => {
+ });
+}
+
+function test_whatwgTestCases() {
+ var headers = new Headers();
+ headers.append("Content-Type", "application/json");
+ var requestOptions: RequestInit = {
+ method: "POST",
+ headers: headers,
+ mode: 'same-origin',
+ credentials: 'omit',
+ cache: 'default'
+ };
+
+ expectSuccess(fetch('http://localhost:3000/poster', requestOptions), 'Post response:');
+
+ var requestOptions: RequestInit = {
+ method: "POST",
+ headers: {
+ 'Content-Type': 'application/json'
+ }
+ };
+
+ expectSuccess(fetch('http://localhost:3000/poster', requestOptions), 'Post response:');
+
+ var requestOptions: RequestInit = {
+ method: "POST",
+ headers: {
+ 'Content-Type': 'application/json'
+ }
+ };
+ var request: Request = new Request('http://localhost:3000/poster', requestOptions);
+
+ expectSuccess(fetch(request), 'Post response:');
+}
+
+function expectSuccess(promise: Promise, responseText: string) {
+ promise.then((response: IResponse) => {
+ return response.text();
+ })
+ .then((text: string) => {
+ });
+}
diff --git a/isomorphic-fetch/isomorphic-fetch-tests.ts.tscparams b/isomorphic-fetch/isomorphic-fetch-tests.ts.tscparams
new file mode 100644
index 000000000..f5c1d1215
--- /dev/null
+++ b/isomorphic-fetch/isomorphic-fetch-tests.ts.tscparams
@@ -0,0 +1 @@
+--target es6 --noImplicitAny
\ No newline at end of file
diff --git a/isomorphic-fetch/isomorphic-fetch.d.ts b/isomorphic-fetch/isomorphic-fetch.d.ts
new file mode 100644
index 000000000..84e4c4b01
--- /dev/null
+++ b/isomorphic-fetch/isomorphic-fetch.d.ts
@@ -0,0 +1,119 @@
+// Type definitions for isomorphic-fetch
+// Project: https://github.com/matthew-andrews/isomorphic-fetch
+// Definitions by: Todd Lucas
+// Definitions: https://github.com/borisyankov/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" }
+
+declare type HeaderInit = Headers | Array;
+declare type BodyInit = Blob | FormData | string;
+declare type RequestInfo = Request | string;
+
+interface RequestInit {
+ method?: string;
+ headers?: HeaderInit | { [index: string]: string };
+ body?: BodyInit;
+ mode?: string | RequestMode;
+ credentials?: string | RequestCredentials;
+ cache?: string | RequestCache;
+}
+
+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;
+ get(name: string): string;
+ getAll(name: string): Array;
+ has(name: string): boolean;
+ set(name: string, value: string): void;
+}
+
+interface IBody {
+ bodyUsed: boolean;
+ arrayBuffer(): Promise;
+ blob(): Promise;
+ formData(): Promise;
+ json(): Promise;
+ json(): Promise;
+ text(): Promise;
+}
+
+declare class Body implements IBody {
+ bodyUsed: boolean;
+ arrayBuffer(): Promise;
+ blob(): Promise;
+ formData(): Promise;
+ json(): Promise;
+ json(): Promise;
+ text(): Promise;
+}
+
+interface IRequest extends IBody {
+ method: string;
+ url: string;
+ headers: Headers;
+ context: string | RequestContext;
+ referrer: string;
+ mode: string | RequestMode;
+ credentials: string | RequestCredentials;
+ cache: string | RequestCache;
+}
+
+declare class Request extends Body implements IRequest {
+ constructor(input: string | Request, init?: RequestInit);
+ method: string;
+ url: string;
+ headers: Headers;
+ context: string | RequestContext;
+ referrer: string;
+ mode: string | RequestMode;
+ credentials: string | RequestCredentials;
+ cache: string | RequestCache;
+}
+
+interface IResponse extends IBody {
+ url: string;
+ status: number;
+ statusText: string;
+ ok: boolean;
+ headers: IHeaders;
+ type: string | ResponseType;
+ size: number;
+ timeout: number;
+ 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 module "isomorphic-fetch" {
+ export default IFetchStatic;
+}
+
+declare var fetch: IFetchStatic;