You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
58 lines
1.7 KiB
58 lines
1.7 KiB
'use strict'; |
|
|
|
Object.defineProperty(exports, "__esModule", { |
|
value: true |
|
}); |
|
exports.default = unpackFeature; |
|
|
|
var _statuses = require('../lib/statuses'); |
|
|
|
var _statuses2 = _interopRequireDefault(_statuses); |
|
|
|
var _supported = require('../lib/supported'); |
|
|
|
var _supported2 = _interopRequireDefault(_supported); |
|
|
|
var _browsers = require('./browsers'); |
|
|
|
var _browserVersions = require('./browserVersions'); |
|
|
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } |
|
|
|
var MATH2LOG = Math.log(2); |
|
|
|
function unpackSupport(cipher) { |
|
// bit flags |
|
var stats = Object.keys(_supported2.default).reduce(function (list, support) { |
|
if (cipher & _supported2.default[support]) list.push(support); |
|
return list; |
|
}, []); |
|
|
|
// notes |
|
var notes = cipher >> 7; |
|
var notesArray = []; |
|
while (notes) { |
|
var note = Math.floor(Math.log(notes) / MATH2LOG) + 1; |
|
notesArray.unshift('#' + note); |
|
notes -= Math.pow(2, note - 1); |
|
} |
|
|
|
return stats.concat(notesArray).join(' '); |
|
} |
|
|
|
function unpackFeature(packed) { |
|
var unpacked = { status: _statuses2.default[packed.B], title: packed.C }; |
|
unpacked.stats = Object.keys(packed.A).reduce(function (browserStats, key) { |
|
var browser = packed.A[key]; |
|
browserStats[_browsers.browsers[key]] = Object.keys(browser).reduce(function (stats, support) { |
|
var packedVersions = browser[support].split(' '); |
|
var unpacked = unpackSupport(support); |
|
packedVersions.forEach(function (v) { |
|
return stats[_browserVersions.browserVersions[v]] = unpacked; |
|
}); |
|
return stats; |
|
}, {}); |
|
return browserStats; |
|
}, {}); |
|
return unpacked; |
|
} |