...**/!(*.map|*.min.js)Size
Gzip
Dependencies
Publish
Install
Publish
Install
@@ -16,8 +16,7 @@ | |||
| 16 | var EventEmitter = require('events').EventEmitter; | 16 | var EventEmitter = require('events').EventEmitter; |
| 17 | var mixin = require('merge-descriptors'); | 17 | var mixin = require('merge-descriptors'); |
| 18 | var proto = require('./application'); | 18 | var proto = require('./application'); |
| 19 | var Route = require('./router/route'); | ||
| 20 | var Router = require('./router'); | 19 | var Router = require('router'); |
| 21 | var req = require('./request'); | 20 | var req = require('./request'); |
| 22 | var res = require('./response'); | 21 | var res = require('./response'); |
| 23 | 22 | ||
@@ -68,7 +67,7 @@ | |||
| 68 | * Expose constructors. | 67 | * Expose constructors. |
| 69 | */ | 68 | */ |
| 70 | 69 | ||
| 71 | exports.Route = Route; | 70 | exports.Route = Router.Route; |
| 72 | exports.Router = Router; | 71 | exports.Router = Router; |
| 73 | 72 | ||
| 74 | /** | 73 | /** |
@@ -76,41 +75,7 @@ | |||
| 76 | */ | 75 | */ |
| 77 | 76 | ||
| 78 | exports.json = bodyParser.json | 77 | exports.json = bodyParser.json |
| 79 | exports.query = require('./middleware/query'); | ||
| 80 | exports.raw = bodyParser.raw | 78 | exports.raw = bodyParser.raw |
| 81 | exports.static = require('serve-static'); | 79 | exports.static = require('serve-static'); |
| 82 | exports.text = bodyParser.text | 80 | exports.text = bodyParser.text |
| 83 | exports.urlencoded = bodyParser.urlencoded | 81 | exports.urlencoded = bodyParser.urlencoded |
| 84 | |||
| 85 | /** | ||
| 86 | * Replace removed middleware with an appropriate error message. | ||
| 87 | */ | ||
| 88 | |||
| 89 | var removedMiddlewares = [ | ||
| 90 | 'bodyParser', | ||
| 91 | 'compress', | ||
| 92 | 'cookieSession', | ||
| 93 | 'session', | ||
| 94 | 'logger', | ||
| 95 | 'cookieParser', | ||
| 96 | 'favicon', | ||
| 97 | 'responseTime', | ||
| 98 | 'errorHandler', | ||
| 99 | 'timeout', | ||
| 100 | 'methodOverride', | ||
| 101 | 'vhost', | ||
| 102 | 'csrf', | ||
| 103 | 'directory', | ||
| 104 | 'limit', | ||
| 105 | 'multipart', | ||
| 106 | 'staticCache' | ||
| 107 | ] | ||
| 108 | |||
| 109 | removedMiddlewares.forEach(function (name) { | ||
| 110 | Object.defineProperty(exports, name, { | ||
| 111 | get: function () { | ||
| 112 | 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.'); | ||
| 113 | }, | ||
| 114 | configurable: true | ||
| 115 | }); | ||
| 116 | }); | ||
@@ -13,12 +13,9 @@ | |||
| 13 | */ | 13 | */ |
| 14 | 14 | ||
| 15 | var Buffer = require('safe-buffer').Buffer | 15 | var Buffer = require('safe-buffer').Buffer |
| 16 | var contentDisposition = require('content-disposition'); | ||
| 17 | var contentType = require('content-type'); | 16 | var contentType = require('content-type'); |
| 18 | var deprecate = require('depd')('express'); | ||
| 19 | var flatten = require('array-flatten'); | ||
| 20 | var mime = require('send').mime; | ||
| 21 | var etag = require('etag'); | 17 | var etag = require('etag'); |
| 18 | var mime = require('mime-types') | ||
| 22 | var proxyaddr = require('proxy-addr'); | 19 | var proxyaddr = require('proxy-addr'); |
| 23 | var qs = require('qs'); | 20 | var qs = require('qs'); |
| 24 | var querystring = require('querystring'); | 21 | var querystring = require('querystring'); |
@@ -46,31 +43,6 @@ | |||
| 46 | exports.wetag = createETagGenerator({ weak: true }) | 43 | exports.wetag = createETagGenerator({ weak: true }) |
| 47 | 44 | ||
| 48 | /** | 45 | /** |
| 49 | * Check if `path` looks absolute. | ||
| 50 | * | ||
| 51 | * @param {String} path | ||
| 52 | * @return {Boolean} | ||
| 53 | * @api private | ||
| 54 | */ | ||
| 55 | |||
| 56 | exports.isAbsolute = function(path){ | ||
| 57 | if ('/' === path[0]) return true; | ||
| 58 | if (':' === path[1] && ('\\' === path[2] || '/' === path[2])) return true; // Windows device path | ||
| 59 | if ('\\\\' === path.substring(0, 2)) return true; // Microsoft Azure absolute path | ||
| 60 | }; | ||
| 61 | |||
| 62 | /** | ||
| 63 | * Flatten the given `arr`. | ||
| 64 | * | ||
| 65 | * @param {Array} arr | ||
| 66 | * @return {Array} | ||
| 67 | * @api private | ||
| 68 | */ | ||
| 69 | |||
| 70 | exports.flatten = deprecate.function(flatten, | ||
| 71 | 'utils.flatten: use array-flatten npm module instead'); | ||
| 72 | |||
| 73 | /** | ||
| 74 | * Normalize the given `type`, for example "html" becomes "text/html". | 46 | * Normalize the given `type`, for example "html" becomes "text/html". |
| 75 | * | 47 | * |
| 76 | * @param {String} type | 48 | * @param {String} type |
@@ -81,7 +53,7 @@ | |||
| 81 | exports.normalizeType = function(type){ | 53 | exports.normalizeType = function(type){ |
| 82 | return ~type.indexOf('/') | 54 | return ~type.indexOf('/') |
| 83 | ? acceptParams(type) | 55 | ? acceptParams(type) |
| 84 | : { value: mime.lookup(type), params: {} }; | 56 | : { value: (mime.lookup(type) || 'application/octet-stream'), params: {} } |
| 85 | }; | 57 | }; |
| 86 | 58 | ||
| 87 | /** | 59 | /** |
@@ -103,18 +75,6 @@ | |||
| 103 | }; | 75 | }; |
| 104 | 76 | ||
| 105 | /** | 77 | /** |
| 106 | * Generate Content-Disposition header appropriate for the filename. | ||
| 107 | * non-ascii filenames are urlencoded and a filename* parameter is added | ||
| 108 | * | ||
| 109 | * @param {String} filename | ||
| 110 | * @return {String} | ||
| 111 | * @api private | ||
| 112 | */ | ||
| 113 | |||
| 114 | exports.contentDisposition = deprecate.function(contentDisposition, | ||
| 115 | 'utils.contentDisposition: use content-disposition npm module instead'); | ||
| 116 | |||
| 117 | /** | ||
| 118 | * Parse accept params `str` returning an | 78 | * Parse accept params `str` returning an |
| 119 | * object with `.value`, `.quality` and `.params`. | 79 | * object with `.value`, `.quality` and `.params`. |
| 120 | * | 80 | * |
@@ -192,7 +152,6 @@ | |||
| 192 | fn = querystring.parse; | 152 | fn = querystring.parse; |
| 193 | break; | 153 | break; |
| 194 | case false: | 154 | case false: |
| 195 | fn = newObject; | ||
| 196 | break; | 155 | break; |
| 197 | case 'extended': | 156 | case 'extended': |
| 198 | fn = parseExtendedQueryString; | 157 | fn = parseExtendedQueryString; |
@@ -290,14 +249,3 @@ | |||
| 290 | allowPrototypes: true | 249 | allowPrototypes: true |
| 291 | }); | 250 | }); |
| 292 | } | 251 | } |
| 293 | |||
| 294 | /** | ||
| 295 | * Return new empty object. | ||
| 296 | * | ||
| 297 | * @return {Object} | ||
| 298 | * @api private | ||
| 299 | */ | ||
| 300 | |||
| 301 | function newObject() { | ||
| 302 | return {}; | ||
| 303 | } | ||
@@ -131,8 +131,31 @@ | |||
| 131 | */ | 131 | */ |
| 132 | 132 | ||
| 133 | View.prototype.render = function render(options, callback) { | 133 | View.prototype.render = function render(options, callback) { |
| 134 | var sync = true; | ||
| 135 | |||
| 134 | debug('render "%s"', this.path); | 136 | debug('render "%s"', this.path); |
| 135 | this.engine(this.path, options, callback); | 137 | |
| 138 | // render, normalizing sync callbacks | ||
| 139 | this.engine(this.path, options, function onRender() { | ||
| 140 | if (!sync) { | ||
| 141 | return callback.apply(this, arguments); | ||
| 142 | } | ||
| 143 | |||
| 144 | // copy arguments | ||
| 145 | var args = new Array(arguments.length); | ||
| 146 | var cntx = this; | ||
| 147 | |||
| 148 | for (var i = 0; i < arguments.length; i++) { | ||
| 149 | args[i] = arguments[i]; | ||
| 150 | } | ||
| 151 | |||
| 152 | // force callback to be async | ||
| 153 | return process.nextTick(function renderTick() { | ||
| 154 | return callback.apply(cntx, args); | ||
| 155 | }); | ||
| 156 | }); | ||
| 157 | |||
| 158 | sync = false; | ||
| 136 | }; | 159 | }; |
| 137 | 160 | ||
| 138 | /** | 161 | /** |
@@ -1,7 +1,7 @@ | |||
| 1 | { | 1 | { |
| 2 | "name": "express", | 2 | "name": "express", |
| 3 | "description": "Fast, unopinionated, minimalist web framework", | 3 | "description": "Fast, unopinionated, minimalist web framework", |
| 4 | "version": "4.22.1", | 4 | "version": "5.0.0", |
| 5 | "author": "TJ Holowaychuk <tj@vision-media.ca>", | 5 | "author": "TJ Holowaychuk <tj@vision-media.ca>", |
| 6 | "contributors": [ | 6 | "contributors": [ |
| 7 | "Aaron Heckmann <aaron.heckmann+github@gmail.com>", | 7 | "Aaron Heckmann <aaron.heckmann+github@gmail.com>", |
@@ -15,10 +15,6 @@ | |||
| 15 | "license": "MIT", | 15 | "license": "MIT", |
| 16 | "repository": "expressjs/express", | 16 | "repository": "expressjs/express", |
| 17 | "homepage": "http://expressjs.com/", | 17 | "homepage": "http://expressjs.com/", |
| 18 | "funding": { | ||
| 19 | "type": "opencollective", | ||
| 20 | "url": "https://opencollective.com/express" | ||
| 21 | }, | ||
| 22 | "keywords": [ | 18 | "keywords": [ |
| 23 | "express", | 19 | "express", |
| 24 | "framework", | 20 | "framework", |
@@ -32,35 +28,36 @@ | |||
| 32 | "api" | 28 | "api" |
| 33 | ], | 29 | ], |
| 34 | "dependencies": { | 30 | "dependencies": { |
| 35 | "accepts": "~1.3.8", | ||
| 36 | "array-flatten": "1.1.1", | ||
| 37 | "body-parser": "~1.20.3", | ||
| 38 | "content-disposition": "~0.5.4", | 31 | "accepts": "^2.0.0", |
| 32 | "body-parser": "^2.0.1", | ||
| 33 | "content-disposition": "^1.0.0", | ||
| 39 | "content-type": "~1.0.4", | 34 | "content-type": "~1.0.4", |
| 40 | "cookie": "~0.7.1", | ||
| 41 | "cookie-signature": "~1.0.6", | ||
| 42 | "debug": "2.6.9", | 35 | "cookie": "0.6.0", |
| 36 | "cookie-signature": "^1.2.1", | ||
| 37 | "debug": "4.3.6", | ||
| 43 | "depd": "2.0.0", | 38 | "depd": "2.0.0", |
| 44 | "encodeurl": "~2.0.0", | 39 | "encodeurl": "~2.0.0", |
| 45 | "escape-html": "~1.0.3", | 40 | "escape-html": "~1.0.3", |
| 46 | "etag": "~1.8.1", | 41 | "etag": "~1.8.1", |
| 47 | "finalhandler": "~1.3.1", | ||
| 48 | "fresh": "~0.5.2", | ||
| 49 | "http-errors": "~2.0.0", | ||
| 50 | "merge-descriptors": "1.0.3", | 42 | "finalhandler": "^2.0.0", |
| 43 | "fresh": "2.0.0", | ||
| 44 | "http-errors": "2.0.0", | ||
| 45 | "merge-descriptors": "^2.0.0", | ||
| 51 | "methods": "~1.1.2", | 46 | "methods": "~1.1.2", |
| 52 | "on-finished": "~2.4.1", | 47 | "mime-types": "^3.0.0", |
| 48 | "on-finished": "2.4.1", | ||
| 49 | "once": "1.4.0", | ||
| 53 | "parseurl": "~1.3.3", | 50 | "parseurl": "~1.3.3", |
| 54 | "path-to-regexp": "~0.1.12", | ||
| 55 | "proxy-addr": "~2.0.7", | 51 | "proxy-addr": "~2.0.7", |
| 56 | "qs": "~6.14.0", | 52 | "qs": "6.13.0", |
| 57 | "range-parser": "~1.2.1", | 53 | "range-parser": "~1.2.1", |
| 54 | "router": "^2.0.0", | ||
| 58 | "safe-buffer": "5.2.1", | 55 | "safe-buffer": "5.2.1", |
| 59 | "send": "~0.19.0", | ||
| 60 | "serve-static": "~1.16.2", | 56 | "send": "^1.1.0", |
| 57 | "serve-static": "^2.1.0", | ||
| 61 | "setprototypeof": "1.2.0", | 58 | "setprototypeof": "1.2.0", |
| 62 | "statuses": "~2.0.1", | ||
| 63 | "type-is": "~1.6.18", | 59 | "statuses": "2.0.1", |
| 60 | "type-is": "^2.0.0", | ||
| 64 | "utils-merge": "1.0.1", | 61 | "utils-merge": "1.0.1", |
| 65 | "vary": "~1.1.2" | 62 | "vary": "~1.1.2" |
| 66 | }, | 63 | }, |
@@ -75,15 +72,15 @@ | |||
| 75 | "hbs": "4.2.0", | 72 | "hbs": "4.2.0", |
| 76 | "marked": "0.7.0", | 73 | "marked": "0.7.0", |
| 77 | "method-override": "3.0.0", | 74 | "method-override": "3.0.0", |
| 78 | "mocha": "^6.2.2", | 75 | "mocha": "10.2.0", |
| 79 | "morgan": "1.10.0", | 76 | "morgan": "1.10.0", |
| 80 | "nyc": "^14.1.1", | 77 | "nyc": "15.1.0", |
| 81 | "pbkdf2-password": "1.2.1", | 78 | "pbkdf2-password": "1.2.1", |
| 82 | "supertest": "^6.1.6", | 79 | "supertest": "6.3.0", |
| 83 | "vhost": "~3.0.2" | 80 | "vhost": "~3.0.2" |
| 84 | }, | 81 | }, |
| 85 | "engines": { | 82 | "engines": { |
| 86 | "node": ">= 0.10.0" | 83 | "node": ">= 18" |
| 87 | }, | 84 | }, |
| 88 | "files": [ | 85 | "files": [ |
| 89 | "LICENSE", | 86 | "LICENSE", |