@axerunners/axecore-lib
Version:
A pure and powerful JavaScript Axe library.
71 lines (64 loc) • 1.87 kB
JavaScript
/* eslint-disable */
// TODO: Remove previous line and work through linting issues at next edit
var binaryRegex = /^[0-1]*$/;
/**
* @param {string} bitString
* @return {boolean}
*/
function isBitString(bitString) {
return binaryRegex.test(bitString);
}
function toBitString(bitArray) {
if (!Array.isArray(bitArray)) {
throw new TypeError("Argument is not a bit array");
}
return bitArray.map(function(bool) {
return Number(bool);
}).join('');
}
/**
* Converts boolean array to uint8 array, i.e:
* [true, true, true, true, true, true, true, true] will be converted to [255]
* @param {boolean[]|number[]} bitArray
* @param {boolean} [reverseBits]
* @return {number[]}
*/
function convertBitArrayToUInt8Array(bitArray, reverseBits) {
var bitString = toBitString(bitArray);
return bitStringToUInt8Array(bitString, reverseBits);
}
/**
* Converts a bit string, i.e. '1000101010101010100' to an array with 8 bit unsigned integers
* @param {string} bitString
* @param {boolean} reverseBits
* @return {number[]}
*/
function bitStringToUInt8Array(bitString, reverseBits) {
if (!isBitString(bitString)) {
throw new TypeError("Argument is not a bit array");
}
var byteStrings = bitString.match(/.{1,8}/g);
return byteStrings.map(function (byteString) {
if (reverseBits) {
byteString = byteString.split("").reverse().join("");
}
return parseInt(byteString, 2);
});
}
function uint8ArrayToBitString(uin8arr) {
return uin8arr
.map(function(num) {
return num.toString(2);
})
.reduce(function (acc, val) {
// Add leading zeros if needed
if (val.length < 8) {
val = '0'.repeat(8 - val.length) + val;
}
return acc + val
}, '');
}
module.exports = {
convertBitArrayToUInt8Array: convertBitArrayToUInt8Array,
uint8ArrayToBitString: uint8ArrayToBitString
};