Useful utilities for working with
Uint8Array(andBuffer)
It's time to transition from Buffer to Uint8Array, and this package helps fill in the gaps.
Note that Buffer is a Uint8Array subclass, so you can use this package with Buffer too.
This package is tree-shakeable and browser-compatible.
This package also includes methods to convert a string to Base64 and back.
Note: In the browser, do not use globalThis.atob() / globalThis.btoa() because they do not support Unicode. This package does.
npm install uint8array-extrasimport {concatUint8Arrays} from 'uint8array-extras'; const a = new Uint8Array([1, 2, 3]); const b = new Uint8Array([4, 5, 6]); console.log(concatUint8Arrays([a, b])); //=> Uint8Array [1, 2, 3, 4, 5, 6]Check if the given value is an instance of Uint8Array.
Replacement for Buffer.isBuffer().
import {isUint8Array} from 'uint8array-extras'; console.log(isUint8Array(new Uint8Array())); //=> true console.log(isUint8Array(Buffer.from('x'))); //=> true console.log(isUint8Array(new ArrayBuffer(10))); //=> falseThrow a TypeError if the given value is not an instance of Uint8Array.
import {assertUint8Array} from 'uint8array-extras'; try { assertUint8Array(new ArrayBuffer(10)); // Throws a TypeError } catch (error) { console.error(error.message); }Throw a TypeError if the given value is not an instance of Uint8Array or ArrayBuffer.
Useful as a guard for functions that accept either a Uint8Array or ArrayBuffer.
import {assertUint8ArrayOrArrayBuffer} from 'uint8array-extras'; assertUint8ArrayOrArrayBuffer(new Uint8Array()); assertUint8ArrayOrArrayBuffer(new ArrayBuffer(8));Convert a value to a Uint8Array without copying its data.
This can be useful for converting a Buffer to a pure Uint8Array. Buffer is already a Uint8Array subclass, but Buffer alters some behavior, so it can be useful to cast it to a pure Uint8Array before returning it.
Tip: If you want a copy, just call .slice() on the return value.
Concatenate the given arrays into a new array.
If arrays is empty, it will return a zero-sized Uint8Array.
If totalLength is not specified, it is calculated from summing the lengths of the given arrays.
Replacement for Buffer.concat().
import {concatUint8Arrays} from 'uint8array-extras'; const a = new Uint8Array([1, 2, 3]); const b = new Uint8Array([4, 5, 6]); console.log(concatUint8Arrays([a, b])); //=> Uint8Array [1, 2, 3, 4, 5, 6]Check if two arrays are identical by verifying that they contain the same bytes in the same sequence.
Replacement for Buffer#equals().
import {areUint8ArraysEqual} from 'uint8array-extras'; const a = new Uint8Array([1, 2, 3]); const b = new Uint8Array([1, 2, 3]); const c = new Uint8Array([4, 5, 6]); console.log(areUint8ArraysEqual(a, b)); //=> true console.log(areUint8ArraysEqual(a, c)); //=> falseCompare two arrays and indicate their relative order or equality. Useful for sorting.
Replacement for Buffer.compare().
import {compareUint8Arrays} from 'uint8array-extras'; const array1 = new Uint8Array([1, 2, 3]); const array2 = new Uint8Array([4, 5, 6]); const array3 = new Uint8Array([7, 8, 9]); [array3, array1, array2].sort(compareUint8Arrays); //=> [[1, 2, 3], [4, 5, 6], [7, 8, 9]]Convert a Uint8Array to a string.
- Parameter:
encoding- The encoding to convert from.
Replacement for Buffer#toString(). For the encoding parameter, latin1 should be used instead of binary and utf-16le instead of utf16le.
import {uint8ArrayToString} from 'uint8array-extras'; const byteArray = new Uint8Array([72, 101, 108, 108, 111]); console.log(uint8ArrayToString(byteArray)); //=> 'Hello' const zh = new Uint8Array([167, 65, 166, 110]); console.log(uint8ArrayToString(zh, 'big5')); //=> '你好' const ja = new Uint8Array([130, 177, 130, 241, 130, 201, 130, 191, 130, 205]); console.log(uint8ArrayToString(ja, 'shift-jis')); //=> 'こんにちは'Convert a string to a Uint8Array (using UTF-8 encoding).
Replacement for Buffer.from('Hello').
import {stringToUint8Array} from 'uint8array-extras'; console.log(stringToUint8Array('Hello')); //=> Uint8Array [72, 101, 108, 108, 111]Convert a Uint8Array to a Base64-encoded string.
Specify {urlSafe: true} to get a Base64URL-encoded string.
Replacement for Buffer#toString('base64').
import {uint8ArrayToBase64} from 'uint8array-extras'; const byteArray = new Uint8Array([72, 101, 108, 108, 111]); console.log(uint8ArrayToBase64(byteArray)); //=> 'SGVsbG8='Convert a Base64-encoded or Base64URL-encoded string to a Uint8Array.
Accepts Base64URL with or without padding.
Replacement for Buffer.from('SGVsbG8=', 'base64').
import {base64ToUint8Array} from 'uint8array-extras'; console.log(base64ToUint8Array('SGVsbG8=')); //=> Uint8Array [72, 101, 108, 108, 111]Encode a string to a Base64-encoded string.
Specify {urlSafe: true} to get a Base64URL-encoded string.
Replacement for Buffer.from('Hello').toString('base64') and btoa().
import {stringToBase64} from 'uint8array-extras'; console.log(stringToBase64('Hello')); //=> 'SGVsbG8='Decode a Base64-encoded or Base64URL-encoded string to a string.
Accepts Base64URL with or without padding.
Replacement for Buffer.from('SGVsbG8=', 'base64').toString() and atob().
import {base64ToString} from 'uint8array-extras'; console.log(base64ToString('SGVsbG8=')); //=> 'Hello'Convert a Uint8Array to a Hex string.
Replacement for Buffer#toString('hex').
import {uint8ArrayToHex} from 'uint8array-extras'; const byteArray = new Uint8Array([72, 101, 108, 108, 111]); console.log(uint8ArrayToHex(byteArray)); //=> '48656c6c6f'Convert a Hex string to a Uint8Array.
Replacement for Buffer.from('48656c6c6f', 'hex').
import {hexToUint8Array} from 'uint8array-extras'; console.log(hexToUint8Array('48656c6c6f')); //=> Uint8Array [72, 101, 108, 108, 111]Read DataView#byteLength number of bytes from the given view, up to 48-bit.
Replacement for Buffer#readUIntBE
import {getUintBE} from 'uint8array-extras'; const byteArray = new Uint8Array([0x12, 0x34, 0x56, 0x78, 0x90, 0xab]); console.log(getUintBE(new DataView(byteArray.buffer))); //=> 20015998341291Find the index of the first occurrence of the given sequence of bytes (value) within the given Uint8Array (array).
Replacement for Buffer#indexOf. Uint8Array#indexOf only takes a number which is different from Buffer's indexOf implementation.
import {indexOf} from 'uint8array-extras'; const byteArray = new Uint8Array([0x12, 0x34, 0x56, 0x78, 0x90, 0xab, 0xcd, 0xef]); console.log(indexOf(byteArray, new Uint8Array([0x78, 0x90]))); //=> 3Checks if the given sequence of bytes (value) is within the given Uint8Array (array).
Returns true if the value is included, otherwise false.
Replacement for Buffer#includes. Uint8Array#includes only takes a number which is different from Buffer's includes implementation.
import {includes} from 'uint8array-extras'; const byteArray = new Uint8Array([0x12, 0x34, 0x56, 0x78, 0x90, 0xab, 0xcd, 0xef]); console.log(includes(byteArray, new Uint8Array([0x78, 0x90]))); //=> true