diff --git a/connect/connect-tests.ts b/connect/connect-tests.ts new file mode 100644 index 0000000000..e8665f8f91 --- /dev/null +++ b/connect/connect-tests.ts @@ -0,0 +1,32 @@ +/// + +import * as http from "http"; +import * as connect from "connect"; + +const app = connect(); + +// log all requests +app.use((req: http.IncomingMessage, res: http.ServerResponse, next: Function) => { + console.log(req, res); + next(); +}); + +// Stop on errors +app.use((err: Error, req: http.IncomingMessage, res: http.ServerResponse, next: Function) => { + if (err) { + return res.end(`Error: ${err}`); + } + + next(); +}); + +// respond to all requests +app.use((req: http.IncomingMessage, res: http.ServerResponse) => { + res.end("Hello from Connect!\n"); +}); + +//create node.js http server and listen on port +http.createServer(app).listen(3000); + +//create node.js http server and listen on port using connect shortcut +app.listen(3000); diff --git a/connect/connect.d.ts b/connect/connect.d.ts new file mode 100644 index 0000000000..575a341b60 --- /dev/null +++ b/connect/connect.d.ts @@ -0,0 +1,92 @@ +// Type definitions for connect v3.4.0 +// Project: https://github.com/senchalabs/connect +// Definitions by: Maxime LUCE +// Definitions: https://github.com/borisyankov/DefinitelyTyped + +/// + +declare module "connect" { + import * as http from "http"; + + /** + * Create a new connect server. + * @public + */ + function createServer(): createServer.Server; + + module createServer { + export type ServerHandle = HandleFunction | http.Server; + + export type SimpleHandleFunction = (req: http.IncomingMessage, res: http.ServerResponse) => void; + export type NextHandleFunction = (req: http.IncomingMessage, res: http.ServerResponse, next: Function) => void; + export type ErrorHandleFunction = (err: Error, req: http.IncomingMessage, res: http.ServerResponse, next: Function) => void; + export type HandleFunction = SimpleHandleFunction | NextHandleFunction | ErrorHandleFunction; + + export interface ServerStackItem { + route: string; + handle: ServerHandle; + } + + export interface Server extends NodeJS.EventEmitter { + (req: http.IncomingMessage, res: http.ServerResponse, next?: Function): void; + + route: string; + stack: ServerStackItem[]; + + /** + * Utilize the given middleware `handle` to the given `route`, + * defaulting to _/_. This "route" is the mount-point for the + * middleware, when given a value other than _/_ the middleware + * is only effective when that segment is present in the request's + * pathname. + * + * For example if we were to mount a function at _/admin_, it would + * be invoked on _/admin_, and _/admin/settings_, however it would + * not be invoked for _/_, or _/posts_. + * + * @public + */ + use(fn: HandleFunction): Server; + use(route: string, fn: HandleFunction): Server; + + /** + * Handle server requests, punting them down + * the middleware stack. + * + * @private + */ + handle(req: http.IncomingMessage, res: http.ServerResponse, next: Function): void; + + /** + * Listen for connections. + * + * This method takes the same arguments + * as node's `http.Server#listen()`. + * + * HTTP and HTTPS: + * + * If you run your application both as HTTP + * and HTTPS you may wrap them individually, + * since your Connect "server" is really just + * a JavaScript `Function`. + * + * var connect = require('connect') + * , http = require('http') + * , https = require('https'); + * + * var app = connect(); + * + * http.createServer(app).listen(80); + * https.createServer(options, app).listen(443); + * + * @api public + */ + listen(port: number, hostname?: string, backlog?: number, callback?: Function): http.Server; + listen(port: number, hostname?: string, callback?: Function): http.Server; + listen(path: string, callback?: Function): http.Server; + listen(handle: any, listeningListener?: Function): http.Server; + } + } + + export = createServer; +}