'use strict' const createParseBitmask = (allProducts, defaultProducts) => { allProducts = allProducts.sort((p1, p2) => p2.bitmask - p1.bitmask) // desc if (allProducts.length === 0) throw new Error('allProducts is empty.') for (let product of allProducts) { if ('string' !== typeof product.product) { throw new Error('allProducts[].product must be a string.') } if ('number' !== typeof product.bitmask) { throw new Error(product.product + '.bitmask must be a number.') } } const parseBitmask = (bitmask) => { const res = Object.assign({}, defaultProducts) for (let product of allProducts) { if (bitmask === 0) break if ((product.bitmask & bitmask) > 0) { res[product.product] = true bitmask -= product.bitmask } else{ res[product.product] = false } } return res } return parseBitmask } module.exports = createParseBitmask