diff --git a/History.md b/History.md index ec406e5c..839aa9c0 100644 --- a/History.md +++ b/History.md @@ -1,3 +1,9 @@ +unreleased +========== + + * deprecate things with `depd` module + * use `media-typer` to alter content-type charset + 4.4.4 / 2014-06-20 ================== @@ -196,6 +202,41 @@ - `app.route()` - Proxy to the app's `Router#route()` method to create a new route - Router & Route - public API +3.12.0 / 2014-06-21 +=================== + + * use `media-typer` to alter content-type charset + * deps: connect@2.21.0 + - deprecate `connect(middleware)` -- use `app.use(middleware)` instead + - deprecate `connect.createServer()` -- use `connect()` instead + - fix `res.setHeader()` patch to work with with get -> append -> set pattern + - deps: compression@~1.0.8 + - deps: errorhandler@~1.1.1 + - deps: express-session@~1.5.0 + - deps: serve-index@~1.1.3 + +3.11.0 / 2014-06-19 +=================== + + * deprecate things with `depd` module + * deps: buffer-crc32@0.2.3 + * deps: connect@2.20.2 + - deprecate `verify` option to `json` -- use `body-parser` module directly + - deprecate `verify` option to `urlencoded` -- use `body-parser` module directly + - deprecate things with `depd` module + - use `finalhandler` for final response handling + - use `media-typer` to parse `content-type` for charset + - deps: body-parser@1.4.3 + - deps: connect-timeout@1.1.1 + - deps: cookie-parser@1.3.1 + - deps: csurf@1.2.2 + - deps: errorhandler@1.1.0 + - deps: express-session@1.4.0 + - deps: multiparty@3.2.9 + - deps: serve-index@1.1.2 + - deps: type-is@1.3.1 + - deps: vhost@2.0.0 + 3.10.5 / 2014-06-11 =================== diff --git a/lib/application.js b/lib/application.js index a126020d..47d29907 100644 --- a/lib/application.js +++ b/lib/application.js @@ -13,7 +13,7 @@ var View = require('./view'); var http = require('http'); var compileETag = require('./utils').compileETag; var compileTrust = require('./utils').compileTrust; -var deprecate = require('./utils').deprecate; +var deprecate = require('depd')('express'); var resolve = require('path').resolve; /** @@ -449,7 +449,7 @@ app.all = function(path){ // del -> delete alias -app.del = deprecate(app.delete, 'app.del: Use app.delete instead'); +app.del = deprecate.function(app.delete, 'app.del: Use app.delete instead'); /** * Render the given view `name` name with `options` diff --git a/lib/response.js b/lib/response.js index fbe5de3d..db31d79e 100644 --- a/lib/response.js +++ b/lib/response.js @@ -2,6 +2,7 @@ * Module dependencies. */ +var deprecate = require('depd')('express'); var escapeHtml = require('escape-html'); var http = require('http'); var path = require('path'); @@ -11,7 +12,6 @@ var normalizeType = require('./utils').normalizeType; var normalizeTypes = require('./utils').normalizeTypes; var setCharset = require('./utils').setCharset; var contentDisposition = require('./utils').contentDisposition; -var deprecate = require('./utils').deprecate; var statusCodes = http.STATUS_CODES; var cookie = require('cookie'); var send = require('send'); @@ -186,9 +186,11 @@ res.json = function(obj){ // res.json(body, status) backwards compat if ('number' == typeof arguments[1]) { this.statusCode = arguments[1]; - return 'number' === typeof obj - ? jsonNumDeprecated.call(this, obj) - : jsonDeprecated.call(this, obj); + if (typeof obj === 'number') { + deprecate('res.json(obj, status): Use res.json(status, obj) instead'); + } else { + deprecate('res.json(num, status): Use res.status(status).json(num) instead'); + } } else { this.statusCode = obj; obj = arguments[1]; @@ -207,12 +209,6 @@ res.json = function(obj){ return this.send(body); }; -var jsonDeprecated = deprecate(res.json, - 'res.json(obj, status): Use res.json(status, obj) instead'); - -var jsonNumDeprecated = deprecate(res.json, - 'res.json(num, status): Use res.status(status).json(num) instead'); - /** * Send JSON response with JSONP callback support. * @@ -232,9 +228,11 @@ res.jsonp = function(obj){ // res.json(body, status) backwards compat if ('number' == typeof arguments[1]) { this.statusCode = arguments[1]; - return 'number' === typeof obj - ? jsonpNumDeprecated.call(this, obj) - : jsonpDeprecated.call(this, obj); + if (typeof obj === 'number') { + deprecate('res.jsonp(obj, status): Use res.jsonp(status, obj) instead'); + } else { + deprecate('res.jsonp(num, status): Use res.status(status).jsonp(num) instead'); + } } else { this.statusCode = obj; obj = arguments[1]; @@ -268,12 +266,6 @@ res.jsonp = function(obj){ return this.send(body); }; -var jsonpDeprecated = deprecate(res.json, - 'res.jsonp(obj, status): Use res.jsonp(status, obj) instead'); - -var jsonpNumDeprecated = deprecate(res.json, - 'res.jsonp(num, status): Use res.status(status).jsonp(num) instead'); - /** * Transfer the file at the given `path`. * diff --git a/lib/utils.js b/lib/utils.js index d629fb9b..d6e6e614 100644 --- a/lib/utils.js +++ b/lib/utils.js @@ -6,37 +6,8 @@ var mime = require('send').mime; var crc32 = require('buffer-crc32'); var crypto = require('crypto'); var basename = require('path').basename; -var deprecate = require('util').deprecate; var proxyaddr = require('proxy-addr'); - -/** - * Simple detection of charset parameter in content-type - */ -var charsetRegExp = /;\s*charset\s*=/; - -/** - * Deprecate function, like core `util.deprecate`, - * but with NODE_ENV and color support. - * - * @param {Function} fn - * @param {String} msg - * @return {Function} - * @api private - */ - -exports.deprecate = function(fn, msg){ - if (process.env.NODE_ENV === 'test') return fn; - - // prepend module name - msg = 'express: ' + msg; - - if (process.stderr.isTTY) { - // colorize - msg = '\x1b[31;1m' + msg + '\x1b[0m'; - } - - return deprecate(fn, msg); -}; +var typer = require('media-typer'); /** * Return strong ETag for `body`. @@ -272,21 +243,12 @@ exports.compileTrust = function(val) { exports.setCharset = function(type, charset){ if (!type || !charset) return type; - var exists = charsetRegExp.test(type); + // parse type + var parsed = typer.parse(type); - // removing existing charset - if (exists) { - var parts = type.split(';'); + // set charset + parsed.parameters.charset = charset; - for (var i = 1; i < parts.length; i++) { - if (charsetRegExp.test(';' + parts[i])) { - parts.splice(i, 1); - break; - } - } - - type = parts.join(';'); - } - - return type + '; charset=' + charset; + // format type + return typer.format(parsed); }; diff --git a/package.json b/package.json index 923ec451..28bc7951 100644 --- a/package.json +++ b/package.json @@ -28,7 +28,9 @@ "accepts": "~1.0.5", "buffer-crc32": "0.2.3", "debug": "1.0.2", + "depd": "0.3.0", "escape-html": "1.0.1", + "media-typer": "0.2.0", "methods": "1.0.1", "parseurl": "1.0.1", "proxy-addr": "1.0.1", diff --git a/test/support/env.js b/test/support/env.js index eb938f3b..0701f5e3 100644 --- a/test/support/env.js +++ b/test/support/env.js @@ -1,2 +1,3 @@ process.env.NODE_ENV = 'test'; +process.env.NO_DEPRECATION = 'express'; diff --git a/test/utils.js b/test/utils.js index f190c07f..89601a5e 100644 --- a/test/utils.js +++ b/test/utils.js @@ -2,28 +2,6 @@ var utils = require('../lib/utils') , assert = require('assert'); -describe('utils.deprecate(fn, msg)', function(){ - var env - before(function(){ - env = process.env.NODE_ENV - }) - after(function(){ - process.env.NODE_ENV = env - }) - - it('should pass-through fn in test environment', function(){ - var fn = function(){} - process.env.NODE_ENV = 'test' - utils.deprecate(fn).should.equal(fn) - }) - - it('should return new fn in other environment', function(){ - var fn = function(){} - process.env.NODE_ENV = '' - utils.deprecate(fn).should.not.equal(fn) - }) -}) - describe('utils.etag(body, encoding)', function(){ it('should support strings', function(){ utils.etag('express!')