Projekt

Obecné

Profil

Stáhnout (1.84 KB) Statistiky
| Větev: | Revize:
1
#!/usr/bin/env node
2

    
3
'use strict';
4

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

    
9
var db = require('mime-db');
10
var chalk = require('chalk');
11

    
12
var STANDARD_FACET_SCORE = 900;
13

    
14
var byExtension = {};
15

    
16
// Clear out any conflict extensions in mime-db
17
for (var type in db) {
18
  var entry = db[type];
19
  entry.type = type;
20
  if (!entry.extensions) continue;
21

    
22
  entry.extensions.forEach(function(ext) {
23
    var drop;
24
    var keep = entry;
25
    if (ext in byExtension) {
26
      var e0 = entry;
27
      var e1 = byExtension[ext];
28

    
29
      e0.pri = mimeScore(e0.type, e0.source);
30
      e1.pri = mimeScore(e1.type, e1.source);
31

    
32
      drop = e0.pri < e1.pri ? e0 : e1;
33
      keep = e0.pri >= e1.pri ? e0 : e1;
34

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

    
38
      console.log(
39
        ext + ': Preferring ' + chalk.green(keep.type) + ' (' + keep.pri +
40
        ') over ' + chalk.red(drop.type) + ' (' + drop.pri + ')' + ' for ' + ext
41
      );
42
    }
43

    
44
    // Cache the hightest ranking type for this extension
45
    if (keep == entry) byExtension[ext] = entry;
46
  });
47
}
48

    
49
function writeTypesFile(types, path) {
50
  fs.writeFileSync(path, 'module.exports = ' + JSON.stringify(types) + ';');
51
}
52

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

    
58
Object.keys(db).sort().forEach(function(k) {
59
  var entry = db[k];
60

    
61
  if (entry.extensions) {
62
    if (mimeScore(entry.type, entry.source) >= STANDARD_FACET_SCORE) {
63
      standard[entry.type] = entry.extensions;
64
    } else {
65
      other[entry.type] = entry.extensions;
66
    }
67
  }
68
});
69

    
70
writeTypesFile(standard, path.join(__dirname, '../types', 'standard.js'));
71
writeTypesFile(other, path.join(__dirname, '../types', 'other.js'));
(3-3/4)