|
#!/usr/bin/env node |
|
|
|
'use strict'; |
|
|
|
const fs = require('fs'); |
|
const path = require('path'); |
|
const mimeScore = require('mime-score'); |
|
|
|
let db = require('mime-db'); |
|
let chalk = require('chalk'); |
|
|
|
const STANDARD_FACET_SCORE = 900; |
|
|
|
const byExtension = {}; |
|
|
|
|
|
for (let type in db) { |
|
let entry = db[type]; |
|
entry.type = type; |
|
|
|
if (!entry.extensions) continue; |
|
|
|
entry.extensions.forEach(ext => { |
|
if (ext in byExtension) { |
|
const e0 = entry; |
|
const e1 = byExtension[ext]; |
|
e0.pri = mimeScore(e0.type, e0.source); |
|
e1.pri = mimeScore(e1.type, e1.source); |
|
|
|
let drop = e0.pri < e1.pri ? e0 : e1; |
|
let keep = e0.pri >= e1.pri ? e0 : e1; |
|
drop.extensions = drop.extensions.filter(e => e !== ext); |
|
|
|
console.log(`${ext}: Keeping ${chalk.green(keep.type)} (${keep.pri}), dropping ${chalk.red(drop.type)} (${drop.pri})`); |
|
} |
|
byExtension[ext] = entry; |
|
}); |
|
} |
|
|
|
function writeTypesFile(types, path) { |
|
fs.writeFileSync(path, JSON.stringify(types)); |
|
} |
|
|
|
|
|
|
|
const types = {}; |
|
|
|
Object.keys(db).sort().forEach(k => { |
|
const entry = db[k]; |
|
types[entry.type] = entry.extensions; |
|
}); |
|
|
|
writeTypesFile(types, path.join(__dirname, '..', 'types.json')); |
|
|