From 686775b8d68234997d45ea5b1b48d01af422f2b1 Mon Sep 17 00:00:00 2001 From: Zebulon McCorkle Date: Tue, 27 Jun 2017 19:07:05 -0400 Subject: [PATCH] Add extremely alpha typings for http-proxy-middleware --- .../http-proxy-middleware-tests.ts | 23 +++++++ types/http-proxy-middleware/index.d.ts | 67 +++++++++++++++++++ types/http-proxy-middleware/tsconfig.json | 22 ++++++ 3 files changed, 112 insertions(+) create mode 100644 types/http-proxy-middleware/http-proxy-middleware-tests.ts create mode 100644 types/http-proxy-middleware/index.d.ts create mode 100644 types/http-proxy-middleware/tsconfig.json diff --git a/types/http-proxy-middleware/http-proxy-middleware-tests.ts b/types/http-proxy-middleware/http-proxy-middleware-tests.ts new file mode 100644 index 0000000000..db331eec3d --- /dev/null +++ b/types/http-proxy-middleware/http-proxy-middleware-tests.ts @@ -0,0 +1,23 @@ +// Derived from https://github.com/chimurai/http-proxy-middleware#example + +import * as express from 'express'; +import * as proxy from 'http-proxy-middleware'; + +const options = { + target: 'http://www.example.org', + changeOrigin: true, + ws: true, + pathRewrite: { + '^/api/old-path': '/api/new-path', + '^/api/remove/path': '/path' + }, + router: { + 'dev.localhost:3000': 'http://localhost:8000' + } +}; + +const myProxy = proxy(options); + +const app = express(); +app.use('/api', myProxy); +app.listen(3000); diff --git a/types/http-proxy-middleware/index.d.ts b/types/http-proxy-middleware/index.d.ts new file mode 100644 index 0000000000..516ba72709 --- /dev/null +++ b/types/http-proxy-middleware/index.d.ts @@ -0,0 +1,67 @@ +// Type definitions for http-proxy-middleware +// Project: https://github.com/chimurai/http-proxy-middleware +// Definitions by: Zebulon McCorkle +// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped +// TypeScript Version: 2.2 + +/// +/// + +import * as http from 'http'; +import * as net from 'net'; +import * as tls from 'tls'; +import * as connect from 'connect'; + +declare function proxy(config: proxy.Config): proxy.Proxy; +declare function proxy(contextOrUri: string, config: proxy.Config): proxy.Proxy; + +declare namespace proxy { + type Logger = (...objs: any[]) => void; + export interface LogProvider { + log: Logger, + debug?: Logger, + info?: Logger, + warn?: Logger, + error?: Logger, + } + + export interface Config { + pathRewrite?: { [regexp: string]: string } | ((path: string, req: http.IncomingMessage) => string), + router?: { [hostOrPath: string]: string } | ((req: http.IncomingMessage) => string), + logLevel?: 'debug' | 'info' | 'warn' | 'error' | 'silent', + logProvider?: (provider: LogProvider) => LogProvider, + + onError?: connect.HandleFunction, + onProxyRes?: (proxyRes: http.ServerResponse, req: http.IncomingMessage, res: http.ServerResponse) => void, + onProxyReq?: (proxyReq: http.ClientRequest, req: http.IncomingMessage, res: http.ServerResponse) => void, + onProxyReqWs?: (proxyReq: http.ClientRequest, req: http.IncomingMessage, socket: any, options: any, head: any) => void, // TODO: Figure out the types of the last 3 + onOpen?: (proxySocket: net.Socket) => void, + onClose?: (res: http.ServerResponse, socket: net.Socket) => void, + + target?: string, + forward?: string, + agent?: http.Agent, + ssl?: tls.TlsOptions, + ws?: boolean, + xfwd?: boolean, + secure?: boolean, + toProxy?: boolean, + prependPath?: boolean, + ignorePath?: boolean, + localAddress?: string, + changeOrigin?: boolean, + auth?: string, + hostRewrite?: any, // TODO + autoRewrite?: any, // TODO + protocolRewrite?: any, // TODO + cookieDomainRewrite?: false | string | { [domain: string]: string }, + headers?: { [header: string]: string }, + proxyTimeout?: number, + } + + export interface Proxy extends connect.NextHandleFunction { + + } +} + +export = proxy; diff --git a/types/http-proxy-middleware/tsconfig.json b/types/http-proxy-middleware/tsconfig.json new file mode 100644 index 0000000000..1fa2b32d6d --- /dev/null +++ b/types/http-proxy-middleware/tsconfig.json @@ -0,0 +1,22 @@ +{ + "compilerOptions": { + "module": "commonjs", + "lib": [ + "es6" + ], + "noImplicitAny": true, + "noImplicitThis": true, + "strictNullChecks": true, + "baseUrl": "../", + "typeRoots": [ + "../" + ], + "types": [], + "noEmit": true, + "forceConsistentCasingInFileNames": true + }, + "files": [ + "index.d.ts", + "http-proxy-middleware-tests.ts" + ] +}