diff options
Diffstat (limited to 'packages/server/src/helpers/uint8array.ts')
-rw-r--r-- | packages/server/src/helpers/uint8array.ts | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/packages/server/src/helpers/uint8array.ts b/packages/server/src/helpers/uint8array.ts new file mode 100644 index 0000000..4e2d4dc --- /dev/null +++ b/packages/server/src/helpers/uint8array.ts @@ -0,0 +1,71 @@ +/** + * Make sure two Uint8Arrays are deeply equivalent + */ +export function areEqual(array1: Uint8Array, array2: Uint8Array): boolean { + if (array1.length != array2.length) { + return false; + } + + return array1.every((val, i) => val === array2[i]); +} + +/** + * Convert a Uint8Array to Hexadecimal. + * + * A replacement for `Buffer.toString('hex')` + */ +export function toHex(array: Uint8Array): string { + const hexParts = Array.from(array, i => i.toString(16).padStart(2, "0")); + + // adce000235bcc60a648b0b25f1f05503 + return hexParts.join(''); +} + +/** + * Convert a Uint8Array to Base64. + * + * A replacement for `Buffer.toString('base64')` + */ +export function toBase64(array: Uint8Array): string { + let str = ''; + + for (const charCode of array) { + str += String.fromCharCode(charCode); + } + + const base64String = btoa(str); + + return base64String; +} + +/** + * Combine multiple Uint8Arrays into a single Uint8Array + */ +export function concat(arrays: Uint8Array[]): Uint8Array { + let pointer = 0; + const totalLength = arrays.reduce((prev, curr) => prev + curr.length, 0); + + const toReturn = new Uint8Array(totalLength); + + arrays.forEach((arr) => { + toReturn.set(arr, pointer); + pointer += arr.length; + }); + + return toReturn; +} + +/** + * Convert an ASCII string to Uint8Array + */ +export function fromString(value: string): Uint8Array { + return Uint8Array.from(value.split("").map(x => x.charCodeAt(0))); +} + +export default { + areEqual, + toHex, + toBase64, + concat, + fromString, +}; |