diff --git a/package.json b/package.json index 9b3b814..27ba4c8 100644 --- a/package.json +++ b/package.json @@ -43,5 +43,8 @@ "buffer validation", "utility", "data processing" - ] + ], + "dependencies": { + "uint8array-extras": "^1.1.0" + } } \ No newline at end of file diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 093a3e4..a38c058 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -4,6 +4,11 @@ settings: autoInstallPeers: true excludeLinksFromLockfile: false +dependencies: + uint8array-extras: + specifier: ^1.1.0 + version: 1.1.0 + devDependencies: '@git.zone/tsbuild': specifier: ^2.1.25 @@ -5359,6 +5364,11 @@ packages: hasBin: true dev: true + /uint8array-extras@1.1.0: + resolution: {integrity: sha512-CVaBSyOmGoFHu+zOVPbetXEXykOd8KHVBHLlqvmaMWpwcq3rewj18xVNbU5uzf48hclnNQhfNaNany2cMHFK/g==} + engines: {node: '>=18'} + dev: false + /unbox-primitive@1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} dependencies: diff --git a/ts/00_commitinfo_data.ts b/ts/00_commitinfo_data.ts index 54b1a3b..29055b7 100644 --- a/ts/00_commitinfo_data.ts +++ b/ts/00_commitinfo_data.ts @@ -3,6 +3,6 @@ */ export const commitinfo = { name: '@push.rocks/smartbuffer', - version: '1.0.7', - description: 'handle ArrayBufferLike structures' + version: '2.0.0', + description: 'A module for handling ArrayBufferLike structures, including conversion and validation utilities.' } diff --git a/ts/index.ts b/ts/index.ts index 4e82e24..7855bcf 100644 --- a/ts/index.ts +++ b/ts/index.ts @@ -1,65 +1,13 @@ import * as plugins from './smartbuffer.plugins.js'; -export function arrayBufferToBase64(arrayBuffer: ArrayBufferLike | Buffer): string { - var base64 = '' - var encodings = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/' +export const uInt8ArrayExtras = plugins.uInt8ArrayExtras; - var bytes = new Uint8Array(arrayBuffer) - var byteLength = bytes.byteLength - var byteRemainder = byteLength % 3 - var mainLength = byteLength - byteRemainder - - var a, b, c, d - var chunk - - // Main loop deals with bytes in chunks of 3 - for (var i = 0; i < mainLength; i = i + 3) { - // Combine the three bytes into a single integer - chunk = (bytes[i] << 16) | (bytes[i + 1] << 8) | bytes[i + 2] - - // Use bitmasks to extract 6-bit segments from the triplet - a = (chunk & 16515072) >> 18 // 16515072 = (2^6 - 1) << 18 - b = (chunk & 258048) >> 12 // 258048 = (2^6 - 1) << 12 - c = (chunk & 4032) >> 6 // 4032 = (2^6 - 1) << 6 - d = chunk & 63 // 63 = 2^6 - 1 - - // Convert the raw binary segments to the appropriate ASCII encoding - base64 += encodings[a] + encodings[b] + encodings[c] + encodings[d] - } - - // Deal with the remaining bytes and padding - if (byteRemainder == 1) { - chunk = bytes[mainLength] - - a = (chunk & 252) >> 2 // 252 = (2^6 - 1) << 2 - - // Set the 4 least significant bits to zero - b = (chunk & 3) << 4 // 3 = 2^2 - 1 - - base64 += encodings[a] + encodings[b] + '==' - } else if (byteRemainder == 2) { - chunk = (bytes[mainLength] << 8) | bytes[mainLength + 1] - - a = (chunk & 64512) >> 10 // 64512 = (2^6 - 1) << 10 - b = (chunk & 1008) >> 4 // 1008 = (2^6 - 1) << 4 - - // Set the 2 least significant bits to zero - c = (chunk & 15) << 2 // 15 = 2^4 - 1 - - base64 += encodings[a] + encodings[b] + encodings[c] + '=' - } - - return base64 +export function uInt8ArrayToBase64(uInt8Array: Uint8Array): string { + return plugins.uInt8ArrayExtras.uint8ArrayToBase64(uInt8Array); } -export function base64ToArrayBuffer(base64: string): Uint8Array { - const binaryString = window.atob(base64); - const arrayLength = binaryString.length; - const arrayBuffer = new Uint8Array( arrayLength ); - for (var i = 0; i < arrayLength; i++) { - arrayBuffer[i] = binaryString.charCodeAt(i); - } - return arrayBuffer; +export function base64ToUint8Array(base64: string): Uint8Array { + return plugins.uInt8ArrayExtras.base64ToUint8Array(base64); } export function isBufferLike(obj: any): obj is ArrayBufferLike | Buffer { diff --git a/ts/smartbuffer.plugins.ts b/ts/smartbuffer.plugins.ts index 29aa9da..b09a6ba 100644 --- a/ts/smartbuffer.plugins.ts +++ b/ts/smartbuffer.plugins.ts @@ -1,2 +1,5 @@ -const removeme = {}; -export { removeme }; +import * as uInt8ArrayExtras from 'uint8array-extras'; + +export { + uInt8ArrayExtras, +} \ No newline at end of file