| /*! | 
|  * express | 
|  * Copyright(c) 2009-2013 TJ Holowaychuk | 
|  * Copyright(c) 2013 Roman Shtylman | 
|  * Copyright(c) 2014-2015 Douglas Christopher Wilson | 
|  * MIT Licensed | 
|  */ | 
|   | 
| 'use strict'; | 
|   | 
| /** | 
|  * Module dependencies. | 
|  */ | 
|   | 
| var bodyParser = require('body-parser') | 
| var EventEmitter = require('events').EventEmitter; | 
| var mixin = require('merge-descriptors'); | 
| var proto = require('./application'); | 
| var Route = require('./router/route'); | 
| var Router = require('./router'); | 
| var req = require('./request'); | 
| var res = require('./response'); | 
|   | 
| /** | 
|  * Expose `createApplication()`. | 
|  */ | 
|   | 
| exports = module.exports = createApplication; | 
|   | 
| /** | 
|  * Create an express application. | 
|  * | 
|  * @return {Function} | 
|  * @api public | 
|  */ | 
|   | 
| function createApplication() { | 
|   var app = function(req, res, next) { | 
|     app.handle(req, res, next); | 
|   }; | 
|   | 
|   mixin(app, EventEmitter.prototype, false); | 
|   mixin(app, proto, false); | 
|   | 
|   // expose the prototype that will get set on requests | 
|   app.request = Object.create(req, { | 
|     app: { configurable: true, enumerable: true, writable: true, value: app } | 
|   }) | 
|   | 
|   // expose the prototype that will get set on responses | 
|   app.response = Object.create(res, { | 
|     app: { configurable: true, enumerable: true, writable: true, value: app } | 
|   }) | 
|   | 
|   app.init(); | 
|   return app; | 
| } | 
|   | 
| /** | 
|  * Expose the prototypes. | 
|  */ | 
|   | 
| exports.application = proto; | 
| exports.request = req; | 
| exports.response = res; | 
|   | 
| /** | 
|  * Expose constructors. | 
|  */ | 
|   | 
| exports.Route = Route; | 
| exports.Router = Router; | 
|   | 
| /** | 
|  * Expose middleware | 
|  */ | 
|   | 
| exports.json = bodyParser.json | 
| exports.query = require('./middleware/query'); | 
| exports.raw = bodyParser.raw | 
| exports.static = require('serve-static'); | 
| exports.text = bodyParser.text | 
| exports.urlencoded = bodyParser.urlencoded | 
|   | 
| /** | 
|  * Replace removed middleware with an appropriate error message. | 
|  */ | 
|   | 
| var removedMiddlewares = [ | 
|   'bodyParser', | 
|   'compress', | 
|   'cookieSession', | 
|   'session', | 
|   'logger', | 
|   'cookieParser', | 
|   'favicon', | 
|   'responseTime', | 
|   'errorHandler', | 
|   'timeout', | 
|   'methodOverride', | 
|   'vhost', | 
|   'csrf', | 
|   'directory', | 
|   'limit', | 
|   'multipart', | 
|   'staticCache' | 
| ] | 
|   | 
| removedMiddlewares.forEach(function (name) { | 
|   Object.defineProperty(exports, name, { | 
|     get: function () { | 
|       throw new Error('Most middleware (like ' + name + ') is no longer bundled with Express and must be installed separately. Please see https://github.com/senchalabs/connect#middleware.'); | 
|     }, | 
|     configurable: true | 
|   }); | 
| }); |