From af6f7102df3fbd15b453f87b773947f67fe07fa0 Mon Sep 17 00:00:00 2001 From: Robert Kieffer Date: Tue, 12 Sep 2017 16:35:09 -0700 Subject: [PATCH 1/2] node v0.12 support --- Mime.js | 72 +++++++------- package-lock.json | 237 ++++++++++++++++++++++++++++++++++++++++++++++ package.json | 4 +- src/test.js | 31 +++--- 4 files changed, 292 insertions(+), 52 deletions(-) diff --git a/Mime.js b/Mime.js index 07982b8f..2c2c377a 100644 --- a/Mime.js +++ b/Mime.js @@ -2,65 +2,63 @@ * @param typeMap [Object] Map of MIME type -> Array[extensions] * @param ... */ -class Mime { - constructor() { - this._types = Object.create(null); - this._extensions = Object.create(null); +function Mime() { + this._types = Object.create(null); + this._extensions = Object.create(null); - for (var i = 0; i < arguments.length; i++) { - this.define(arguments[i]); - } + for (var i = 0; i < arguments.length; i++) { + this.define(arguments[i]); } +} - /** - * Define mimetype -> xtension mappings. Each key is a mime-type that maps - * to an array of extensions associated with the type. The first extension is - * used as the default extension for the type. - * - * e.g. mime.define({'audio/ogg', ['oga', 'ogg', 'spx']}); - * - * @param map (Object) type definitions - */ - define(typeMap, force) { - for (let type in typeMap) { +/** + * Define mimetype -> xtension mappings. Each key is a mime-type that maps + * to an array of extensions associated with the type. The first extension is + * used as the default extension for the type. + * + * e.g. mime.define({'audio/ogg', ['oga', 'ogg', 'spx']}); + * + * @param map (Object) type definitions + */ + Mime.prototype.define = function(typeMap, force) { + for (var type in typeMap) { var extensions = typeMap[type]; - for (let i = 0; i < extensions.length; i++) { + for (var i = 0; i < extensions.length; i++) { var ext = extensions[i]; if (!force && (ext in this._types)) { - throw new Error(`Attempt to change mapping for "${ext}" extension from "${this._types[ext]}" to "${type}". Pass \`force=true\` to allow this, otherwise remove "${ext}" from the list of extensions for "${type}".`); + throw new Error('Attempt to change mapping for "' + ext + '" extension from "' + this._types[ext] + '" to "' + type + '". Pass \`force=true\` to allow this, otherwise remove "' + ext + '" from the list of extensions for "${type}".'); } - this._types[ext] = type; +this._types[ext] = type; } - // Use first extension as default - if (force || !this._extensions[type]) { - this._extensions[type] = extensions[0]; - } +// Use first extension as default +if (force || !this._extensions[type]) { + this._extensions[type] = extensions[0]; +} } } - /** - * Lookup a mime type based on extension - */ - getType(path) { +/** + * Lookup a mime type based on extension + */ + Mime.prototype.getType = function(path) { path = String(path); var last = path.replace(/.*[\/\\]/, '').toLowerCase(); var ext = last.replace(/.*\./, '').toLowerCase(); - var hasPath = last.length < path.length; - var hasDot = ext.length < last.length - 1; +var hasPath = last.length < path.length; +var hasDot = ext.length < last.length - 1; - return (hasDot || !hasPath) && this._types[ext] || null; +return (hasDot || !hasPath) && this._types[ext] || null; } - /** - * Return file extension associated with a mime type - */ - getExtension(type) { +/** + * Return file extension associated with a mime type + */ + Mime.prototype.getExtension = function(type) { type = /^\s*([^;\s]*)/.test(type) && RegExp.$1; return type && this._extensions[type.toLowerCase()] || null; } -} module.exports = Mime; diff --git a/package-lock.json b/package-lock.json index 4d5c1ba2..67e004c1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4,11 +4,248 @@ "lockfileVersion": 1, "requires": true, "dependencies": { + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + }, + "brace-expansion": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", + "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", + "requires": { + "balanced-match": "1.0.0", + "concat-map": "0.0.1" + } + }, + "browser-stdout": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.0.tgz", + "integrity": "sha1-81HTKWnTL6XXpVZxVCY9korjvR8=" + }, + "commander": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", + "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=", + "requires": { + "graceful-readlink": "1.0.1" + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "debug": { + "version": "2.6.8", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", + "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=", + "requires": { + "ms": "2.0.0" + } + }, + "diff": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.2.0.tgz", + "integrity": "sha1-yc45Okt8vQsFinJck98pkCeGj/k=" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "glob": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.1.tgz", + "integrity": "sha1-gFIR3wT6rxxjo2ADBs31reULLsg=", + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "graceful-readlink": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", + "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=" + }, + "growl": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.9.2.tgz", + "integrity": "sha1-Dqd0NxXbjY3ixe3hd14bRayFwC8=" + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" + }, + "he": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", + "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=" + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "json3": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz", + "integrity": "sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=" + }, + "lodash._baseassign": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz", + "integrity": "sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4=", + "requires": { + "lodash._basecopy": "3.0.1", + "lodash.keys": "3.1.2" + } + }, + "lodash._basecopy": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz", + "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=" + }, + "lodash._basecreate": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash._basecreate/-/lodash._basecreate-3.0.3.tgz", + "integrity": "sha1-G8ZhYU2qf8MRt9A78WgGoCE8+CE=" + }, + "lodash._getnative": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", + "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=" + }, + "lodash._isiterateecall": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz", + "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=" + }, + "lodash.create": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lodash.create/-/lodash.create-3.1.1.tgz", + "integrity": "sha1-1/KEnw29p+BGgruM1yqwIkYd6+c=", + "requires": { + "lodash._baseassign": "3.2.0", + "lodash._basecreate": "3.0.3", + "lodash._isiterateecall": "3.0.9" + } + }, + "lodash.isarguments": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", + "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=" + }, + "lodash.isarray": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", + "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=" + }, + "lodash.keys": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", + "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", + "requires": { + "lodash._getnative": "3.9.1", + "lodash.isarguments": "3.1.0", + "lodash.isarray": "3.0.4" + } + }, "mime-db": { "version": "1.30.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.30.0.tgz", "integrity": "sha1-dMZD2i3Z1qRTmZY0ZbJtXKfXHwE=", "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "requires": { + "brace-expansion": "1.1.8" + } + }, + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "requires": { + "minimist": "0.0.8" + } + }, + "mocha": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-3.5.3.tgz", + "integrity": "sha512-/6na001MJWEtYxHOV1WLfsmR4YIynkUEhBwzsb+fk2qmQ3iqsi258l/Q2MWHJMImAcNpZ8DEdYAK72NHoIQ9Eg==", + "requires": { + "browser-stdout": "1.3.0", + "commander": "2.9.0", + "debug": "2.6.8", + "diff": "3.2.0", + "escape-string-regexp": "1.0.5", + "glob": "7.1.1", + "growl": "1.9.2", + "he": "1.1.1", + "json3": "3.3.2", + "lodash.create": "3.1.1", + "mkdirp": "0.5.1", + "supports-color": "3.1.2" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1.0.2" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + }, + "supports-color": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.1.2.tgz", + "integrity": "sha1-cqJiiU2dQIuVbKBf83su2KbiotU=", + "requires": { + "has-flag": "1.0.0" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" } } } diff --git a/package.json b/package.json index aca5ef60..e721a3a2 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,9 @@ ], "description": "A comprehensive library for mime-type mapping", "license": "MIT", - "dependencies": {}, + "dependencies": { + "mocha": "3.5.3" + }, "devDependencies": { "chalk": "1.1.3", "github-release-notes": "0.9.0", diff --git a/src/test.js b/src/test.js index b2d95e24..5c7b8903 100644 --- a/src/test.js +++ b/src/test.js @@ -6,9 +6,9 @@ var chalk = require('chalk'); describe('class Mime', function () { it('new constructor()', function () { - const Mime = require('../Mime'); + var Mime = require('../Mime'); - const mime = new Mime( + var mime = new Mime( {'text/a': ['a', 'a1']}, {'text/b': ['b', 'b1']} ); @@ -27,9 +27,9 @@ describe('class Mime', function () { }); it('define()', function () { - const Mime = require('../Mime'); + var Mime = require('../Mime'); - const mime = new Mime({'text/a': ['a']}, {'text/b': ['b']}); + var mime = new Mime({'text/a': ['a']}, {'text/b': ['b']}); assert.throws(function() { mime.define({'text/c': ['b']}); @@ -109,21 +109,24 @@ describe('DB', function() { if (diffs.length) { console.log('\n[INFO] The following inconsistencies with MDN and/or mime-types are expected:'); diffs.forEach(function(d) { - console.warn(` ${d[0]}[${chalk.blue(d[1])}] = ${chalk.red(d[2])}, node-uuid[${d[1]}] = ${chalk.green(d[3])}`); + console.warn( + ' ' + d[0] + + '[' + chalk.blue(d[1]) + '] = ' + + chalk.red(d[2]) + ', node-uuid[' + d[1] + '] = ' + chalk.green(d[3])); }); } }); it('Consistency', function() { for (var ext in this.types) { - const ext2 = this.extensions[this.types[ext]]; + var ext2 = this.extensions[this.types[ext]]; assert.equal(ext, this.extensions[this.types[ext]], '${ext} does not have consistent ext->type->ext mapping'); } }); it('MDN types', function () { // MDN types listed at https://goo.gl/lHrFU6 - const MDN = { + var MDN = { 'aac': 'audio/aac', 'abw': 'application/x-abiword', 'arc': 'application/octet-stream', @@ -182,16 +185,16 @@ describe('DB', function() { '7z': 'application/x-7z-compressed', }; - for (let ext in MDN) { - const expected = MDN[ext]; - const actual = mime.getType(ext); + for (var ext in MDN) { + var expected = MDN[ext]; + var actual = mime.getType(ext); if (actual != expected) diffs.push(['MDN', ext, expected, actual]); } - const mimeTypes = require('../node_modules/mime-types'); + var mimeTypes = require('../node_modules/mime-types'); - for (let ext in mimeTypes.types) { - const expected = mimeTypes.types[ext]; - const actual = mime.getType(ext); + for (var ext in mimeTypes.types) { + var expected = mimeTypes.types[ext]; + var actual = mime.getType(ext); if (actual != expected) diffs.push(['mime-types', ext, expected, actual]); } }); From a1b2279dfa352489130aa2bd266dcb2e3fae3556 Mon Sep 17 00:00:00 2001 From: Robert Kieffer Date: Tue, 12 Sep 2017 16:35:56 -0700 Subject: [PATCH 2/2] 2.0.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index e721a3a2..cafe896b 100644 --- a/package.json +++ b/package.json @@ -40,5 +40,5 @@ "url": "https://github.com/broofa/node-mime", "type": "git" }, - "version": "2.0.0" + "version": "2.0.1" }