summaryrefslogtreecommitdiffstats
path: root/middleware/node_modules/mime/src/build.js
diff options
context:
space:
mode:
Diffstat (limited to 'middleware/node_modules/mime/src/build.js')
-rwxr-xr-xmiddleware/node_modules/mime/src/build.js53
1 files changed, 53 insertions, 0 deletions
diff --git a/middleware/node_modules/mime/src/build.js b/middleware/node_modules/mime/src/build.js
new file mode 100755
index 0000000..4928e48
--- /dev/null
+++ b/middleware/node_modules/mime/src/build.js
@@ -0,0 +1,53 @@
+#!/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 = {};
+
+// Clear out any conflict extensions in mime-db
+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));
+}
+
+// Segregate into standard and non-standard types based on facet per
+// https://tools.ietf.org/html/rfc6838#section-3.1
+const types = {};
+
+Object.keys(db).sort().forEach(k => {
+ const entry = db[k];
+ types[entry.type] = entry.extensions;
+});
+
+writeTypesFile(types, path.join(__dirname, '..', 'types.json'));