Skip to content

Commit aa11c8d

Browse files
authoredJan 16, 2021
Cli tests (#252)
* chore: downgrade to mocha@7 for node 8 testing * chore: CLI test * chore: eslint * chore: switch to github actions for CI
1 parent 17372e9 commit aa11c8d

12 files changed

+484
-253
lines changed
 

‎.eslintrc.json

+2
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
"node": true,
1010
"mocha": true
1111
},
12+
"ignorePatterns": ["types/"],
1213
"extends": ["eslint:recommended"],
1314
"rules": {
1415
"array-bracket-spacing": ["warn", "never"],
@@ -37,6 +38,7 @@
3738
"no-undef": "error",
3839
"no-unused-vars": ["warn", {"args": "none"}],
3940
"one-var": ["warn", "never"],
41+
"no-var": "warn",
4042
"padded-blocks": ["warn", "never"],
4143
"object-curly-spacing": ["warn", "never"],
4244
"quotes": ["warn", "single"],

‎.github/workflows/ci.yml

+2-5
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,7 @@
1-
name: Node.js CI
1+
name: Mime CI
22

33
on:
4-
push:
5-
branches: [ $default-branch ]
6-
pull_request:
7-
branches: [ $default-branch ]
4+
[push]
85

96
jobs:
107
build:

‎Mime.js

+14-12
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ function Mime() {
88
this._types = Object.create(null);
99
this._extensions = Object.create(null);
1010

11-
for (var i = 0; i < arguments.length; i++) {
11+
for (let i = 0; i < arguments.length; i++) {
1212
this.define(arguments[i]);
1313
}
1414

@@ -37,16 +37,18 @@ function Mime() {
3737
* @param force (Boolean) if true, force overriding of existing definitions
3838
*/
3939
Mime.prototype.define = function(typeMap, force) {
40-
for (var type in typeMap) {
41-
var extensions = typeMap[type].map(function(t) {return t.toLowerCase()});
40+
for (let type in typeMap) {
41+
let extensions = typeMap[type].map(function(t) {
42+
return t.toLowerCase();
43+
});
4244
type = type.toLowerCase();
4345

44-
for (var i = 0; i < extensions.length; i++) {
45-
var ext = extensions[i];
46+
for (let i = 0; i < extensions.length; i++) {
47+
const ext = extensions[i];
4648

4749
// '*' prefix = not the preferred type for this extension. So fixup the
4850
// extension, and skip it.
49-
if (ext[0] == '*') {
51+
if (ext[0] === '*') {
5052
continue;
5153
}
5254

@@ -64,8 +66,8 @@ Mime.prototype.define = function(typeMap, force) {
6466

6567
// Use first extension as default
6668
if (force || !this._extensions[type]) {
67-
var ext = extensions[0];
68-
this._extensions[type] = (ext[0] != '*') ? ext : ext.substr(1)
69+
const ext = extensions[0];
70+
this._extensions[type] = (ext[0] !== '*') ? ext : ext.substr(1);
6971
}
7072
}
7173
};
@@ -75,11 +77,11 @@ Mime.prototype.define = function(typeMap, force) {
7577
*/
7678
Mime.prototype.getType = function(path) {
7779
path = String(path);
78-
var last = path.replace(/^.*[/\\]/, '').toLowerCase();
79-
var ext = last.replace(/^.*\./, '').toLowerCase();
80+
let last = path.replace(/^.*[/\\]/, '').toLowerCase();
81+
let ext = last.replace(/^.*\./, '').toLowerCase();
8082

81-
var hasPath = last.length < path.length;
82-
var hasDot = ext.length < last.length - 1;
83+
let hasPath = last.length < path.length;
84+
let hasDot = ext.length < last.length - 1;
8385

8486
return (hasDot || !hasPath) && this._types[ext] || null;
8587
};

‎cli.js

+7-9
Original file line numberDiff line numberDiff line change
@@ -3,19 +3,17 @@
33
'use strict';
44

55
process.title = 'mime';
6-
var mime = require('.');
7-
var pkg = require('./package.json');
8-
var args = process.argv.splice(2);
6+
let mime = require('.');
7+
let pkg = require('./package.json');
8+
let args = process.argv.splice(2);
99

1010
if (args.includes('--version') || args.includes('-v') || args.includes('--v')) {
1111
console.log(pkg.version);
1212
process.exit(0);
13-
}
14-
else if (args.includes('--name') || args.includes('-n') || args.includes('--n')) {
13+
} else if (args.includes('--name') || args.includes('-n') || args.includes('--n')) {
1514
console.log(pkg.name);
1615
process.exit(0);
17-
}
18-
else if (args.includes('--help') || args.includes('-h') || args.includes('--h')) {
16+
} else if (args.includes('--help') || args.includes('-h') || args.includes('--h')) {
1917
console.log(pkg.name + ' - ' + pkg.description + '\n');
2018
console.log(`Usage:
2119
@@ -41,8 +39,8 @@ else if (args.includes('--help') || args.includes('-h') || args.includes('--h'))
4139
process.exit(0);
4240
}
4341

44-
var file = args[0];
45-
var type = mime.getType(file);
42+
let file = args[0];
43+
let type = mime.getType(file);
4644

4745
process.stdout.write(type + '\n');
4846

‎index.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
'use strict';
22

3-
var Mime = require('./Mime');
3+
let Mime = require('./Mime');
44
module.exports = new Mime(require('./types/standard'), require('./types/other'));

‎lite.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
'use strict';
22

3-
var Mime = require('./Mime');
3+
let Mime = require('./Mime');
44
module.exports = new Mime(require('./types/standard'));

‎mime.code-workspace

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
{
2+
"folders": [
3+
{
4+
"path": "."
5+
}
6+
]
7+
}

‎package-lock.json

+395-186
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
"mime-db": "1.45.0",
2222
"mime-score": "1.2.0",
2323
"mime-types": "2.1.27",
24-
"mocha": "8.2.1",
24+
"mocha": "7.2.0",
2525
"runmd": "*",
2626
"standard-version": "9.0.0"
2727
},

‎src/benchmark.js

+2
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
'use strict';
2+
13
const Benchmark = require('benchmark');
24
const mime = require('..');
35
const mimeLite = require('../lite');

‎src/build.js

+20-18
Original file line numberDiff line numberDiff line change
@@ -2,29 +2,29 @@
22

33
'use strict';
44

5-
var fs = require('fs');
6-
var path = require('path');
7-
var mimeScore = require('mime-score');
5+
let fs = require('fs');
6+
let path = require('path');
7+
let mimeScore = require('mime-score');
88

9-
var db = require('mime-db');
10-
var chalk = require('chalk');
9+
let db = require('mime-db');
10+
let chalk = require('chalk');
1111

12-
var STANDARD_FACET_SCORE = 900;
12+
let STANDARD_FACET_SCORE = 900;
1313

14-
var byExtension = {};
14+
let byExtension = {};
1515

1616
// Clear out any conflict extensions in mime-db
17-
for (var type in db) {
18-
var entry = db[type];
17+
for (let type in db) {
18+
const entry = db[type];
1919
entry.type = type;
2020
if (!entry.extensions) continue;
2121

2222
entry.extensions.forEach(function(ext) {
23-
var drop;
24-
var keep = entry;
23+
let drop;
24+
let keep = entry;
2525
if (ext in byExtension) {
26-
var e0 = entry;
27-
var e1 = byExtension[ext];
26+
let e0 = entry;
27+
let e1 = byExtension[ext];
2828

2929
e0.pri = mimeScore(e0.type, e0.source);
3030
e1.pri = mimeScore(e1.type, e1.source);
@@ -33,7 +33,9 @@ for (var type in db) {
3333
keep = e0.pri >= e1.pri ? e0 : e1;
3434

3535
// Prefix lower-priority extensions with '*'
36-
drop.extensions = drop.extensions.map(function(e) {return e == ext ? '*' + e : e});
36+
drop.extensions = drop.extensions.map(function(e) {
37+
return e === ext ? '*' + e : e;
38+
});
3739

3840
console.log(
3941
ext + ': Preferring ' + chalk.green(keep.type) + ' (' + keep.pri +
@@ -42,7 +44,7 @@ for (var type in db) {
4244
}
4345

4446
// Cache the hightest ranking type for this extension
45-
if (keep == entry) byExtension[ext] = entry;
47+
if (keep === entry) byExtension[ext] = entry;
4648
});
4749
}
4850

@@ -52,11 +54,11 @@ function writeTypesFile(types, path) {
5254

5355
// Segregate into standard and non-standard types based on facet per
5456
// https://tools.ietf.org/html/rfc6838#section-3.1
55-
var standard = {};
56-
var other = {};
57+
let standard = {};
58+
let other = {};
5759

5860
Object.keys(db).sort().forEach(function(k) {
59-
var entry = db[k];
61+
let entry = db[k];
6062

6163
if (entry.extensions) {
6264
if (mimeScore(entry.type, entry.source) >= STANDARD_FACET_SCORE) {

‎src/test.js

+32-20
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
'use strict';
22

3-
var mime = require('..');
4-
var mimeTypes = require('../node_modules/mime-types');
5-
var assert = require('assert');
6-
var chalk = require('chalk');
3+
const mime = require('..');
4+
const mimeTypes = require('../node_modules/mime-types');
5+
const assert = require('assert');
6+
const chalk = require('chalk');
7+
const {exec} = require('child_process');
78

89
describe('class Mime', function() {
910
it('mime and mime/lite coexist', function() {
@@ -13,9 +14,9 @@ describe('class Mime', function() {
1314
});
1415

1516
it('new constructor()', function() {
16-
var Mime = require('../Mime');
17+
let Mime = require('../Mime');
1718

18-
var mime = new Mime(
19+
let mime = new Mime(
1920
{'text/a': ['a', 'a1']},
2021
{'text/b': ['b', 'b1']}
2122
);
@@ -34,9 +35,9 @@ describe('class Mime', function() {
3435
});
3536

3637
it('define()', function() {
37-
var Mime = require('../Mime');
38+
let Mime = require('../Mime');
3839

39-
var mime = new Mime({'text/a': ['a']}, {'text/b': ['b']});
40+
let mime = new Mime({'text/a': ['a']}, {'text/b': ['b']});
4041

4142
assert.throws(function() {
4243
mime.define({'text/c': ['b']});
@@ -59,9 +60,9 @@ describe('class Mime', function() {
5960
});
6061

6162
it('define() *\'ed types', function() {
62-
var Mime = require('../Mime');
63+
let Mime = require('../Mime');
6364

64-
var mime = new Mime(
65+
let mime = new Mime(
6566
{'text/a': ['*b']},
6667
{'text/b': ['b']}
6768
);
@@ -77,7 +78,7 @@ describe('class Mime', function() {
7778
});
7879

7980
it ('case-insensitive', function() {
80-
var Mime = require('../Mime');
81+
let Mime = require('../Mime');
8182
const mime = new Mime({
8283
'TEXT/UPPER': ['UP'],
8384
'text/lower': ['low'],
@@ -146,7 +147,7 @@ describe('class Mime', function() {
146147
});
147148

148149
describe('DB', function() {
149-
var diffs = [];
150+
let diffs = [];
150151

151152
after(function() {
152153
if (diffs.length) {
@@ -161,14 +162,14 @@ describe('DB', function() {
161162
});
162163

163164
it('Consistency', function() {
164-
for (var ext in this.types) {
165+
for (let ext in this.types) {
165166
assert.equal(ext, this.extensions[this.types[ext]], '${ext} does not have consistent ext->type->ext mapping');
166167
}
167168
});
168169

169170
it('MDN types', function() {
170171
// MDN types listed at https://goo.gl/lHrFU6
171-
var MDN = {
172+
let MDN = {
172173
aac: 'audio/aac',
173174
abw: 'application/x-abiword',
174175
arc: 'application/x-freearc',
@@ -245,15 +246,15 @@ describe('DB', function() {
245246
'7z': 'application/x-7z-compressed',
246247
};
247248

248-
for (var ext in MDN) {
249-
var expected = MDN[ext];
250-
var actual = mime.getType(ext);
249+
for (let ext in MDN) {
250+
let expected = MDN[ext];
251+
let actual = mime.getType(ext);
251252
if (actual !== expected) diffs.push(['MDN', ext, expected, actual]);
252253
}
253254

254-
for (var ext in mimeTypes.types) {
255-
var expected = mimeTypes.types[ext];
256-
var actual = mime.getType(ext);
255+
for (let ext in mimeTypes.types) {
256+
let expected = mimeTypes.types[ext];
257+
let actual = mime.getType(ext);
257258
if (actual !== expected) diffs.push(['mime-types', ext, expected, actual]);
258259
}
259260
});
@@ -291,3 +292,14 @@ describe('DB', function() {
291292
assert.equal(mime.getExtension('text/xml'), 'xml'); // See #180
292293
});
293294
});
295+
296+
describe('mime CLI', function() {
297+
it('returns type', function(done) {
298+
exec('./cli.js mpeg', (err, stdout, stderr) => {
299+
if (err) done(err);
300+
assert.equal(stdout, 'video/mpeg\n');
301+
done();
302+
});
303+
});
304+
});
305+

0 commit comments

Comments
 (0)
Please sign in to comment.