BREAKING CHANGE(core): switch to uInt8Extras
This commit is contained in:
parent
30306f3a40
commit
10d7c5d8e8
@ -43,5 +43,8 @@
|
||||
"buffer validation",
|
||||
"utility",
|
||||
"data processing"
|
||||
]
|
||||
],
|
||||
"dependencies": {
|
||||
"uint8array-extras": "^1.1.0"
|
||||
}
|
||||
}
|
10
pnpm-lock.yaml
generated
10
pnpm-lock.yaml
generated
@ -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:
|
||||
|
@ -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.'
|
||||
}
|
||||
|
62
ts/index.ts
62
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 {
|
||||
|
@ -1,2 +1,5 @@
|
||||
const removeme = {};
|
||||
export { removeme };
|
||||
import * as uInt8ArrayExtras from 'uint8array-extras';
|
||||
|
||||
export {
|
||||
uInt8ArrayExtras,
|
||||
}
|
Loading…
Reference in New Issue
Block a user