diff --git a/express/express-3.1-tests.ts b/express/express-3.1-tests.ts index 79f81776c7..979452f4bf 100644 --- a/express/express-3.1-tests.ts +++ b/express/express-3.1-tests.ts @@ -1,6 +1,10 @@ /// +<<<<<<< HEAD import express = module('express'); +======= +var express = require('express'); +>>>>>>> 283e996bd224b71b3c52e4ee44a25df5b53bc3c6 var app = express(); ////////////////////////// diff --git a/express/express-3.1.d.ts b/express/express-3.1.d.ts index f57124767a..387e3515ff 100644 --- a/express/express-3.1.d.ts +++ b/express/express-3.1.d.ts @@ -5,7 +5,11 @@ /* =================== USAGE =================== +<<<<<<< HEAD import express = module('express'); +======= + var express = require('express'); +>>>>>>> 283e996bd224b71b3c52e4ee44a25df5b53bc3c6 var app = express(); =============================================== */ @@ -766,6 +770,7 @@ interface ExpressServerResponse { locals: any; } +<<<<<<< HEAD interface ExpressApplication { /** * Initialize the server. @@ -1917,4 +1922,1156 @@ declare module "express" { * @param server */ export function vhost(hostname: string, server: any): Handler; -} \ No newline at end of file +} +======= +interface ImportConnect { + /** + * Body parser: + * + * Parse request bodies, supports _application/json_, + * _application/x-www-form-urlencoded_, and _multipart/form-data_. + * + * This is equivalent to: + * + * app.use(connect.json()); + * app.use(connect.urlencoded()); + * app.use(connect.multipart()); + * + * Examples: + * + * connect() + * .use(connect.bodyParser()) + * .use(function(req, res) { + * res.end('viewing user ' + req.body.user.name); + * }); + * + * $ curl -d 'user[name]=tj' http://local/ + * $ curl -d '{"user":{"name":"tj"}}' -H "Content-Type: application/json" http://local/ + * + * View [json](json.html), [urlencoded](urlencoded.html), and [multipart](multipart.html) for more info. + * + * @param options + */ + bodyParser(options?: any): Handler; + + /** + * Error handler: + * + * Development error handler, providing stack traces + * and error message responses for requests accepting text, html, + * or json. + * + * Text: + * + * By default, and when _text/plain_ is accepted a simple stack trace + * or error message will be returned. + * + * JSON: + * + * When _application/json_ is accepted, connect will respond with + * an object in the form of `{ "error": error }`. + * + * HTML: + * + * When accepted connect will output a nice html stack trace. + */ + errorHandler(opts?: any): Handler; + + /** + * Method Override: + * + * Provides faux HTTP method support. + * + * Pass an optional `key` to use when checking for + * a method override, othewise defaults to _\_method_. + * The original method is available via `req.originalMethod`. + * + * @param key + */ + methodOverride(key: string): Handler; + + /** + * Cookie parser: + * + * Parse _Cookie_ header and populate `req.cookies` + * with an object keyed by the cookie names. Optionally + * you may enabled signed cookie support by passing + * a `secret` string, which assigns `req.secret` so + * it may be used by other middleware. + * + * Examples: + * + * connect() + * .use(connect.cookieParser('optional secret string')) + * .use(function(req, res, next){ + * res.end(JSON.stringify(req.cookies)); + * }) + * + * @param secret + */ + cookieParser(secret: string): Handler; + + /** + * Session: + * + * Setup session store with the given `options`. + * + * Session data is _not_ saved in the cookie itself, however + * cookies are used, so we must use the [cookieParser()](cookieParser.html) + * middleware _before_ `session()`. + * + * Examples: + * + * connect() + * .use(connect.cookieParser()) + * .use(connect.session({ secret: 'keyboard cat', key: 'sid', cookie: { secure: true }})) + * + * Options: + * + * - `key` cookie name defaulting to `connect.sid` + * - `store` session store instance + * - `secret` session cookie is signed with this secret to prevent tampering + * - `cookie` session cookie settings, defaulting to `{ path: '/', httpOnly: true, maxAge: null }` + * - `proxy` trust the reverse proxy when setting secure cookies (via "x-forwarded-proto") + * + * Cookie option: + * + * By default `cookie.maxAge` is `null`, meaning no "expires" parameter is set + * so the cookie becomes a browser-session cookie. When the user closes the + * browser the cookie (and session) will be removed. + * + * ## req.session + * + * To store or access session data, simply use the request property `req.session`, + * which is (generally) serialized as JSON by the store, so nested objects + * are typically fine. For example below is a user-specific view counter: + * + * connect() + * .use(connect.favicon()) + * .use(connect.cookieParser()) + * .use(connect.session({ secret: 'keyboard cat', cookie: { maxAge: 60000 }})) + * .use(function(req, res, next){ + * var sess = req.session; + * if (sess.views) { + * res.setHeader('Content-Type', 'text/html'); + * res.write('

views: ' + sess.views + '

'); + * res.write('

expires in: ' + (sess.cookie.maxAge / 1000) + 's

'); + * res.end(); + * sess.views++; + * } else { + * sess.views = 1; + * res.end('welcome to the session demo. refresh!'); + * } + * } + * )).listen(3000); + * + * ## Session#regenerate() + * + * To regenerate the session simply invoke the method, once complete + * a new SID and `Session` instance will be initialized at `req.session`. + * + * req.session.regenerate(function(err){ + * // will have a new session here + * }); + * + * ## Session#destroy() + * + * Destroys the session, removing `req.session`, will be re-generated next request. + * + * req.session.destroy(function(err){ + * // cannot access session here + * }); + * + * ## Session#reload() + * + * Reloads the session data. + * + * req.session.reload(function(err){ + * // session updated + * }); + * + * ## Session#save() + * + * Save the session. + * + * req.session.save(function(err){ + * // session saved + * }); + * + * ## Session#touch() + * + * Updates the `.maxAge` property. Typically this is + * not necessary to call, as the session middleware does this for you. + * + * ## Session#cookie + * + * Each session has a unique cookie object accompany it. This allows + * you to alter the session cookie per visitor. For example we can + * set `req.session.cookie.expires` to `false` to enable the cookie + * to remain for only the duration of the user-agent. + * + * ## Session#maxAge + * + * Alternatively `req.session.cookie.maxAge` will return the time + * remaining in milliseconds, which we may also re-assign a new value + * to adjust the `.expires` property appropriately. The following + * are essentially equivalent + * + * var hour = 3600000; + * req.session.cookie.expires = new Date(Date.now() + hour); + * req.session.cookie.maxAge = hour; + * + * For example when `maxAge` is set to `60000` (one minute), and 30 seconds + * has elapsed it will return `30000` until the current request has completed, + * at which time `req.session.touch()` is called to reset `req.session.maxAge` + * to its original value. + * + * req.session.cookie.maxAge; + * // => 30000 + * + * Session Store Implementation: + * + * Every session store _must_ implement the following methods + * + * - `.get(sid, callback)` + * - `.set(sid, session, callback)` + * - `.destroy(sid, callback)` + * + * Recommended methods include, but are not limited to: + * + * - `.length(callback)` + * - `.clear(callback)` + * + * For an example implementation view the [connect-redis](http://github.com/visionmedia/connect-redis) repo. + * + * @param options + */ + session(options?: any): Handler; + + /** + * Hash the given `sess` object omitting changes + * to `.cookie`. + * + * @param sess + */ + hash(sess: string): string; + + /** + * Static: + * + * Static file server with the given `root` path. + * + * Examples: + * + * var oneDay = 86400000; + * + * connect() + * .use(connect.static(__dirname + '/public')) + * + * connect() + * .use(connect.static(__dirname + '/public', { maxAge: oneDay })) + * + * Options: + * + * - `maxAge` Browser cache maxAge in milliseconds. defaults to 0 + * - `hidden` Allow transfer of hidden files. defaults to false + * - `redirect` Redirect to trailing "/" when the pathname is a dir. defaults to true + * + * @param root + * @param options + */ + static (root: string, options?: any): Handler; + + /** + * Basic Auth: + * + * Enfore basic authentication by providing a `callback(user, pass)`, + * which must return `true` in order to gain access. Alternatively an async + * method is provided as well, invoking `callback(user, pass, callback)`. Populates + * `req.user`. The final alternative is simply passing username / password + * strings. + * + * Simple username and password + * + * connect(connect.basicAuth('username', 'password')); + * + * Callback verification + * + * connect() + * .use(connect.basicAuth(function(user, pass){ + * return 'tj' == user & 'wahoo' == pass; + * })) + * + * Async callback verification, accepting `fn(err, user)`. + * + * connect() + * .use(connect.basicAuth(function(user, pass, fn){ + * User.authenticate({ user: user, pass: pass }, fn); + * })) + * + * @param callback or username + * @param realm + */ + basicAuth(callback: Function, realm: string); + + basicAuth(callback: string, realm: string); + + /** + * Compress: + * + * Compress response data with gzip/deflate. + * + * Filter: + * + * A `filter` callback function may be passed to + * replace the default logic of: + * + * exports.filter = function(req, res){ + * return /json|text|javascript/.test(res.getHeader('Content-Type')); + * }; + * + * Options: + * + * All remaining options are passed to the gzip/deflate + * creation functions. Consult node's docs for additional details. + * + * - `chunkSize` (default: 16*1024) + * - `windowBits` + * - `level`: 0-9 where 0 is no compression, and 9 is slow but best compression + * - `memLevel`: 1-9 low is slower but uses less memory, high is fast but uses more + * - `strategy`: compression strategy + * + * @param options + */ + compress(options: any): Handler; + + /** + * Cookie Session: + * + * Cookie session middleware. + * + * var app = connect(); + * app.use(connect.cookieParser()); + * app.use(connect.cookieSession({ secret: 'tobo!', cookie: { maxAge: 60 * 60 * 1000 }})); + * + * Options: + * + * - `key` cookie name defaulting to `connect.sess` + * - `secret` prevents cookie tampering + * - `cookie` session cookie settings, defaulting to `{ path: '/', httpOnly: true, maxAge: null }` + * - `proxy` trust the reverse proxy when setting secure cookies (via "x-forwarded-proto") + * + * Clearing sessions: + * + * To clear the session simply set its value to `null`, + * `cookieSession()` will then respond with a 1970 Set-Cookie. + * + * req.session = null; + * + * @param options + */ + cookieSession(options?: any): Handler; + + /** + * Anti CSRF: + * + * CRSF protection middleware. + * + * By default this middleware generates a token named "_csrf" + * which should be added to requests which mutate + * state, within a hidden form field, query-string etc. This + * token is validated against the visitor's `req.session._csrf` + * property. + * + * The default `value` function checks `req.body` generated + * by the `bodyParser()` middleware, `req.query` generated + * by `query()`, and the "X-CSRF-Token" header field. + * + * This middleware requires session support, thus should be added + * somewhere _below_ `session()` and `cookieParser()`. + * + * Options: + * + * - `value` a function accepting the request, returning the token + * + * @param options + */ + csrf(options: any); + + /** + * Directory: + * + * Serve directory listings with the given `root` path. + * + * Options: + * + * - `hidden` display hidden (dot) files. Defaults to false. + * - `icons` display icons. Defaults to false. + * - `filter` Apply this filter function to files. Defaults to false. + * + * @param root + * @param options + */ + directory(root: string, options?: any): Handler; + + /** + * Favicon: + * + * By default serves the connect favicon, or the favicon + * located by the given `path`. + * + * Options: + * + * - `maxAge` cache-control max-age directive, defaulting to 1 day + * + * Examples: + * + * Serve default favicon: + * + * connect() + * .use(connect.favicon()) + * + * Serve favicon before logging for brevity: + * + * connect() + * .use(connect.favicon()) + * .use(connect.logger('dev')) + * + * Serve custom favicon: + * + * connect() + * .use(connect.favicon('public/favicon.ico)) + * + * @param path + * @param options + */ + favicon(path?: string, options?: any); + + /** + * JSON: + * + * Parse JSON request bodies, providing the + * parsed object as `req.body`. + * + * Options: + * + * - `strict` when `false` anything `JSON.parse()` accepts will be parsed + * - `reviver` used as the second "reviver" argument for JSON.parse + * - `limit` byte limit disabled by default + * + * @param options + */ + json(options?: any): Handler; + + /** + * Limit: + * + * Limit request bodies to the given size in `bytes`. + * + * A string representation of the bytesize may also be passed, + * for example "5mb", "200kb", "1gb", etc. + * + * connect() + * .use(connect.limit('5.5mb')) + * .use(handleImageUpload) + */ + limit(bytes: number): Handler; + + limit(bytes: string): Handler; + + /** + * Logger: + * + * Log requests with the given `options` or a `format` string. + * + * Options: + * + * - `format` Format string, see below for tokens + * - `stream` Output stream, defaults to _stdout_ + * - `buffer` Buffer duration, defaults to 1000ms when _true_ + * - `immediate` Write log line on request instead of response (for response times) + * + * Tokens: + * + * - `:req[header]` ex: `:req[Accept]` + * - `:res[header]` ex: `:res[Content-Length]` + * - `:http-version` + * - `:response-time` + * - `:remote-addr` + * - `:date` + * - `:method` + * - `:url` + * - `:referrer` + * - `:user-agent` + * - `:status` + * + * Formats: + * + * Pre-defined formats that ship with connect: + * + * - `default` ':remote-addr - - [:date] ":method :url HTTP/:http-version" :status :res[content-length] ":referrer" ":user-agent"' + * - `short` ':remote-addr - :method :url HTTP/:http-version :status :res[content-length] - :response-time ms' + * - `tiny` ':method :url :status :res[content-length] - :response-time ms' + * - `dev` concise output colored by response status for development use + * + * Examples: + * + * connect.logger() // default + * connect.logger('short') + * connect.logger('tiny') + * connect.logger({ immediate: true, format: 'dev' }) + * connect.logger(':method :url - :referrer') + * connect.logger(':req[content-type] -> :res[content-type]') + * connect.logger(function(tokens, req, res){ return 'some format string' }) + * + * Defining Tokens: + * + * To define a token, simply invoke `connect.logger.token()` with the + * name and a callback function. The value returned is then available + * as ":type" in this case. + * + * connect.logger.token('type', function(req, res){ return req.headers['content-type']; }) + * + * Defining Formats: + * + * All default formats are defined this way, however it's public API as well: + * + * connect.logger.format('name', 'string or function') + */ + logger(options: string): Handler; + + logger(options: Function): Handler; + + logger(options: any): Handler; + + /** + * Compile `fmt` into a function. + * + * @param fmt + */ + compile(fmt: string): Handler; + + /** + * Define a token function with the given `name`, + * and callback `fn(req, res)`. + * + * @param name + * @param fn + */ + token(name: string, fn: Function): any; + + /** + * Define a `fmt` with the given `name`. + */ + format(name: string, str: string): any; + + format(name: string, str: Function): any; + + /** + * Query: + * + * Automatically parse the query-string when available, + * populating the `req.query` object. + * + * Examples: + * + * connect() + * .use(connect.query()) + * .use(function(req, res){ + * res.end(JSON.stringify(req.query)); + * }); + * + * The `options` passed are provided to qs.parse function. + */ + query(options: any): Handler; + + /** + * Reponse time: + * + * Adds the `X-Response-Time` header displaying the response + * duration in milliseconds. + */ + responseTime(): Handler; + + /** + * Static cache: + * + * Enables a memory cache layer on top of + * the `static()` middleware, serving popular + * static files. + * + * By default a maximum of 128 objects are + * held in cache, with a max of 256k each, + * totalling ~32mb. + * + * A Least-Recently-Used (LRU) cache algo + * is implemented through the `Cache` object, + * simply rotating cache objects as they are + * hit. This means that increasingly popular + * objects maintain their positions while + * others get shoved out of the stack and + * garbage collected. + * + * Benchmarks: + * + * static(): 2700 rps + * node-static: 5300 rps + * static() + staticCache(): 7500 rps + * + * Options: + * + * - `maxObjects` max cache objects [128] + * - `maxLength` max cache object length 256kb + */ + staticCache(options: any): Handler; + + /** + * Timeout: + * + * Times out the request in `ms`, defaulting to `5000`. The + * method `req.clearTimeout()` is added to revert this behaviour + * programmatically within your application's middleware, routes, etc. + * + * The timeout error is passed to `next()` so that you may customize + * the response behaviour. This error has the `.timeout` property as + * well as `.status == 408`. + */ + timeout(ms: number): Handler; + + /** + * Vhost: + * + * Setup vhost for the given `hostname` and `server`. + * + * connect() + * .use(connect.vhost('foo.com', fooApp)) + * .use(connect.vhost('bar.com', barApp)) + * .use(connect.vhost('*.com', mainApp)) + * + * The `server` may be a Connect server or + * a regular Node `http.Server`. + * + * @param hostname + * @param server + */ + vhost(hostname: string, server: any): Handler; +} + +interface ExpressApplication extends ImportConnect { + /** + * Initialize the server. + * + * - setup default configuration + * - setup default middleware + * - setup route reflection methods + */ + init(); + + /** + * Initialize application configuration. + */ + defaultConfiguration(); + + /** + * Proxy `connect#use()` to apply settings to + * mounted applications. + **/ + use(route: string, callback?: Function): ExpressApplication; + + use(route: string, server: ExpressApplication): ExpressApplication; + + use(callback: Function): ExpressApplication; + + use(server: ExpressApplication): ExpressApplication; + + /** + * Register the given template engine callback `fn` + * as `ext`. + * + * By default will `require()` the engine based on the + * file extension. For example if you try to render + * a "foo.jade" file Express will invoke the following internally: + * + * app.engine('jade', require('jade').__express); + * + * For engines that do not provide `.__express` out of the box, + * or if you wish to "map" a different extension to the template engine + * you may use this method. For example mapping the EJS template engine to + * ".html" files: + * + * app.engine('html', require('ejs').renderFile); + * + * In this case EJS provides a `.renderFile()` method with + * the same signature that Express expects: `(path, options, callback)`, + * though note that it aliases this method as `ejs.__express` internally + * so if you're using ".ejs" extensions you dont need to do anything. + * + * Some template engines do not follow this convention, the + * [Consolidate.js](https://github.com/visionmedia/consolidate.js) + * library was created to map all of node's popular template + * engines to follow this convention, thus allowing them to + * work seamlessly within Express. + */ + engine(ext: string, fn: Function): ExpressApplication; + + /** + * Map the given param placeholder `name`(s) to the given callback(s). + * + * Parameter mapping is used to provide pre-conditions to routes + * which use normalized placeholders. For example a _:user_id_ parameter + * could automatically load a user's information from the database without + * any additional code, + * + * The callback uses the samesignature as middleware, the only differencing + * being that the value of the placeholder is passed, in this case the _id_ + * of the user. Once the `next()` function is invoked, just like middleware + * it will continue on to execute the route, or subsequent parameter functions. + * + * app.param('user_id', function(req, res, next, id){ + * User.find(id, function(err, user){ + * if (err) { + * next(err); + * } else if (user) { + * req.user = user; + * next(); + * } else { + * next(new Error('failed to load user')); + * } + * }); + * }); + * + * @param name + * @param fn + */ + param(name: string, fn: Function): ExpressApplication; + + param(name: Array, fn: Function): ExpressApplication; + + /** + * Assign `setting` to `val`, or return `setting`'s value. + * + * app.set('foo', 'bar'); + * app.get('foo'); + * // => "bar" + * + * Mounted servers inherit their parent server's settings. + * + * @param setting + * @param val + */ + set (setting: string, val: string): ExpressApplication; + + /** + * Return the app's absolute pathname + * based on the parent(s) that have + * mounted it. + * + * For example if the application was + * mounted as "/admin", which itself + * was mounted as "/blog" then the + * return value would be "/blog/admin". + */ + path(): string; + + /** + * Check if `setting` is enabled (truthy). + * + * app.enabled('foo') + * // => false + * + * app.enable('foo') + * app.enabled('foo') + * // => true + */ + enabled(setting: string): bool; + + /** + * Check if `setting` is disabled. + * + * app.disabled('foo') + * // => true + * + * app.enable('foo') + * app.disabled('foo') + * // => false + * + * @param setting + */ + disabled(setting: string): bool; + + /** + * Enable `setting`. + * + * @param setting + */ + enable(setting: string): ExpressApplication; + + /** + * Disable `setting`. + * + * @param setting + */ + disable(setting: string): ExpressApplication; + + /** + * Configure callback for zero or more envs, + * when no `env` is specified that callback will + * be invoked for all environments. Any combination + * can be used multiple times, in any order desired. + * + * Examples: + * + * app.configure(function(){ + * // executed for all envs + * }); + * + * app.configure('stage', function(){ + * // executed staging env + * }); + * + * app.configure('stage', 'production', function(){ + * // executed for stage and production + * }); + * + * Note: + * + * These callbacks are invoked immediately, and + * are effectively sugar for the following: + * + * var env = process.env.NODE_ENV || 'development'; + * + * switch (env) { + * case 'development': + * ... + * break; + * case 'stage': + * ... + * break; + * case 'production': + * ... + * break; + * } + * + * @param env + * @param fn + */ + configure(env: string, fn: Function): ExpressApplication; + + /** + * Special-cased "all" method, applying the given route `path`, + * middleware, and callback to _every_ HTTP method. + * + * @param path + * @param fn + */ + all(path: string, fn?: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any): ExpressApplication; + + /** + * Render the given view `name` name with `options` + * and a callback accepting an error and the + * rendered template string. + * + * Example: + * + * app.render('email', { name: 'Tobi' }, function(err, html){ + * // ... + * }) + * + * @param name + * @param options or fn + * @param fn + */ + render(name: string, options: string, fn: Function); + + render(name: string, fn: Function); + + get (name: string): any; + + get (name: string, handler: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any): any; + + get (name: string, + handler: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, + handler2: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any): any; + + get (name: string, + handler: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, + handler2: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, + handler3: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any): any; + + get (name: string, + handler: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, + handler2: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, + handler3: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, + handler4: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any): any; + + get (name: string, + handler: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, + handler2: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, + handler3: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, + handler4: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, + handler5: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any): any; + + get (name: string, + handler: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, + handler2: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, + handler3: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, + handler4: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, + handler5: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, + ...handlers: any[]): any; + + get (name: RegExp): any; + + get (name: RegExp, handler: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any): any; + + get (name: RegExp, + handler: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, + handler2: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any): any; + + get (name: RegExp, + handler: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, + handler2: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, + handler3: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any): any; + + get (name: RegExp, + handler: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, + handler2: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, + handler3: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, + handler4: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any): any; + + get (name: RegExp, + handler: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, + handler2: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, + handler3: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, + handler4: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, + handler5: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, + ...handlers: any[]): any; + + post(name: string): any; + + post(name: string, handler: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any): any; + + post(name: string, + handler: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, + handler2: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any): any; + + post(name: string, + handler: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, + handler2: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, + handler3: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any): any; + + post(name: string, + handler: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, + handler2: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, + handler3: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, + handler4: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any): any; + + post(name: string, + handler: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, + handler2: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, + handler3: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, + handler4: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, + handler5: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, + ...handlers: any[]): any; + + post(name: RegExp): any; + + post(name: RegExp, handler: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any): any; + + post(name: RegExp, + handler: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, + handler2: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any): any; + + post(name: RegExp, + handler: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, + handler2: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, + handler3: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any): any; + + post(name: RegExp, + handler: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, + handler2: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, + handler3: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, + handler4: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any): any; + + post(name: RegExp, + handler: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, + handler2: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, + handler3: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, + handler4: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, + handler5: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, + ...handlers: any[]): any; + + put(name: string): any; + + put(name: string, handler: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any): any; + + put(name: string, + handler: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, + handler2: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any): any; + + put(name: string, + handler: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, + handler2: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, + handler3: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any): any; + + put(name: string, + handler: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, + handler2: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, + handler3: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, + handler4: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any): any; + + put(name: string, + handler: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, + handler2: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, + handler3: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, + handler4: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, + handler5: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, + ...handlers: any[]): any; + + put(name: RegExp): any; + + put(name: RegExp, handler: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any): any; + + put(name: RegExp, + handler: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, + handler2: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any): any; + + put(name: RegExp, + handler: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, + handler2: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, + handler3: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any): any; + + put(name: RegExp, + handler: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, + handler2: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, + handler3: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, + handler4: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any): any; + + put(name: RegExp, + handler: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, + handler2: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, + handler3: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, + handler4: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, + handler5: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, + ...handlers: any[]): any; + + del(name: string): any; + + del(name: string, handler: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any): any; + + del(name: string, + handler: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, + handler2: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any): any; + + del(name: string, + handler: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, + handler2: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, + handler3: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any): any; + + del(name: string, + handler: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, + handler2: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, + handler3: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, + handler4: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any): any; + + del(name: string, + handler: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, + handler2: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, + handler3: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, + handler4: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, + handler5: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, + ...handlers: any[]): any; + + del(name: RegExp): any; + + del(name: RegExp, handler: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any): any; + + del(name: RegExp, + handler: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, + handler2: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any): any; + + del(name: RegExp, + handler: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, + handler2: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, + handler3: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any): any; + + del(name: RegExp, + handler: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, + handler2: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, + handler3: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, + handler4: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any): any; + + del(name: RegExp, + handler: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, + handler2: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, + handler3: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, + handler4: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, + handler5: (req: ExpressServerRequest, res: ExpressServerResponse, next: Function) => any, + ...handlers: any[]): any; + + /** + * Listen for connections. + * + * A node `http.Server` is returned, with this + * application (which is a `Function`) as its + * callback. If you wish to create both an HTTP + * and HTTPS server you may do so with the "http" + * and "https" modules as shown here: + * + * var http = require('http') + * , https = require('https') + * , express = require('express') + * , app = express(); + * + * http.createServer(app).listen(80); + * https.createServer({ ... }, app).listen(443); + */ + listen(port: number, hostname: string, backlog: number, callback: Function): void; + + listen(port: number, callback: Function): void; + + listen(path: string, callback?: Function): void; + + listen(handle: any, listeningListener?: Function): void; + + render(view: string, callback: (err: Error, html) => void ): void; + + render(view: string, optionss: any, callback: (err: Error, html) => void ): void; + + route: Route; + + router: string; + + settings: any; + + resource: any; + + map: any; +} + +interface Express extends ExpressApplication { + /** + * Framework version. + */ + version: string; + + /** + * Expose mime. + */ + mime: string; + + (): ExpressApplication; + + /** + * Create an express application. + */ + createApplication(): ExpressApplication; + + createServer(): ExpressApplication; + + application: any; + + request: ExpressServerRequest; + + response: ExpressServerResponse; +} +>>>>>>> 283e996bd224b71b3c52e4ee44a25df5b53bc3c6