
Security News
Attackers Are Hunting High-Impact Node.js Maintainers in a Coordinated Social Engineering Campaign
Multiple high-impact npm maintainers confirm they have been targeted in the same social engineering campaign that compromised Axios.
@bitarray/typedarray
Advanced tools
A BitArray object exhibiting the interface of standard ecmascript TypedArray's
A bit array object exhibiting the interface of standard ecmascript TypedArray's.
[!TIP] If you are looking for easily applying bitwise operations, check out @bitarray/es6, which builds on top of the present library. Here, we purposely stick to methods and properties described by the ecmascript specification (there are no bitwise operations on arrays specified by ecmascript).
The ecmascript specification has introduced TypedArrays for Int8, Uint8, Uint8Clamped, Int16, Uint16, Int32, Uint32, Float32, Float64, BigInt64 and BigUint64 types.
This library adds support for the Bit type. It provides a very memory-efficient means
to store sequences of bits, while exposing the familiar, standard interface of typed arrays.
The library uses a Proxy object, which is an ES6 (aka ES2015) feature. It can NOT be polyfilled (to the extent it is used by the library).
Note: standard TypedArray is also a feature of ecmascript ES6.
npm install @bitarray/typedarray
or
yarn add @bitarray/typedarray
Usage is same as for any standard typed array. You may check the MDN documentation for details.
import BitArray from "@bitarray/typedarray"
const length = 32; // or whatever length value
const bits = new BitArray(length);
// Bit arrays can be created from iterables.
// The following are all equivalent
new BitArray("11001010");
new BitArray([1, 1, 0, 0, 1, 0, 1, 0]);
new BitArray([true, true, false, false, true, false, true, false]);
BitArray.from("11001010");
BitArray.from([1, 1, 0, 0, 1, 0, 1, 0]);
BitArray.from([true, true, false, false, true, false, true, false]);
BitArray.of(..."11001010");
BitArray.of(1, 1, 0, 0, 1, 0, 1, 0);
BitArray.of(true, true, false, false, true, false, true, false);
bits[1]; // 0 by default
bits[1] = 1;
bits[1]; // 1
bits.at(1); // 1
// can also take boolean values
// (will be coerced to bit)
bits[1] = false;
bits.at(1); // 0
for (let i=0; i<bits.length; i++)
// do something with bits[i]
bits.forEach((val, i, arr) => { /* do something */ });
for (let i in bits)
// do something with bits[i]
for (let bit of bits)
// do something with bit
// indexes - following two are the same
Object.keys(bits); // [0, 1, 2, ...]
Object.getOwnPropertyNames(bits);
// values
Object.values(bits); // [0, 1, 0, 0, 0, ...]
// entries
Object.entries(bits); // [["0", 0], ["1", 1], ["2", 0], ["3", 0], ...]
// properties
bits.buffer;
bits.byteLength;
bits.byteOffset;
bits.length;
BitArray.BYTES_PER_ELEMENT; // 0.125 == 1/8, read-only
BitArray.name; // "BitArray", read-only
BitArray.prototype; // Object {...}
For the most part, mapping the behaviour of standard methods and properties to the case of bit arrays is obvious. There are a few caveats though.
Note: not all features of the specification are implemented yet [WIP; PRs welcome!].
In standard typed arrays, except for the Uint8clamped type, values exceeding the limits go round. For instance, setting value 257 to a Uint8 results in the value of 1 (== 257 % 0xFF). Also, non-numerical values become 0.
With BitArray, values are first coerced to number. If the result is truthy, the bit will be set to 1; 0 otherwise.
let arr = new BitArray(2);
// one would normally set values like this
arr[0] = 0;
arr[1] = 1;
// or using booleans:
arr[0] = false;
arr[1] = true;
// this will also work
arr[0] = -.000001; // arr[0] === 1, because Boolean(-.000001) === true
arr[1] = "a"; // arr[1] === 0, because Number("a") === NaN, which is falsy
.toString() methodThe standard method returns a comma-separated list of numbers. In the case of bit sequences, interleaving commas is unnecessarily heavy, for no benefit. Instead, we list 0|1 bits in sequence, grouping them by eight for better clarity (human-reading), and separating groups by a space rather than a comma, to match common practice of text representation of bit sequences.
new BitArray(20).toString(); // "00000000 00000000 0000"
FAQs
A BitArray object exhibiting the interface of standard ecmascript TypedArray's
We found that @bitarray/typedarray demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
Multiple high-impact npm maintainers confirm they have been targeted in the same social engineering campaign that compromised Axios.

Security News
Axios compromise traced to social engineering, showing how attacks on maintainers can bypass controls and expose the broader software supply chain.

Security News
Node.js has paused its bug bounty program after funding ended, removing payouts for vulnerability reports but keeping its security process unchanged.