BREAKING CHANGE(core): switch to uInt8Extras
This commit is contained in:
parent
30306f3a40
commit
10d7c5d8e8
@ -43,5 +43,8 @@
|
|||||||
"buffer validation",
|
"buffer validation",
|
||||||
"utility",
|
"utility",
|
||||||
"data processing"
|
"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
|
autoInstallPeers: true
|
||||||
excludeLinksFromLockfile: false
|
excludeLinksFromLockfile: false
|
||||||
|
|
||||||
|
dependencies:
|
||||||
|
uint8array-extras:
|
||||||
|
specifier: ^1.1.0
|
||||||
|
version: 1.1.0
|
||||||
|
|
||||||
devDependencies:
|
devDependencies:
|
||||||
'@git.zone/tsbuild':
|
'@git.zone/tsbuild':
|
||||||
specifier: ^2.1.25
|
specifier: ^2.1.25
|
||||||
@ -5359,6 +5364,11 @@ packages:
|
|||||||
hasBin: true
|
hasBin: true
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
|
/uint8array-extras@1.1.0:
|
||||||
|
resolution: {integrity: sha512-CVaBSyOmGoFHu+zOVPbetXEXykOd8KHVBHLlqvmaMWpwcq3rewj18xVNbU5uzf48hclnNQhfNaNany2cMHFK/g==}
|
||||||
|
engines: {node: '>=18'}
|
||||||
|
dev: false
|
||||||
|
|
||||||
/unbox-primitive@1.0.2:
|
/unbox-primitive@1.0.2:
|
||||||
resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==}
|
resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==}
|
||||||
dependencies:
|
dependencies:
|
||||||
|
@ -3,6 +3,6 @@
|
|||||||
*/
|
*/
|
||||||
export const commitinfo = {
|
export const commitinfo = {
|
||||||
name: '@push.rocks/smartbuffer',
|
name: '@push.rocks/smartbuffer',
|
||||||
version: '1.0.7',
|
version: '2.0.0',
|
||||||
description: 'handle ArrayBufferLike structures'
|
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';
|
import * as plugins from './smartbuffer.plugins.js';
|
||||||
|
|
||||||
export function arrayBufferToBase64(arrayBuffer: ArrayBufferLike | Buffer): string {
|
export const uInt8ArrayExtras = plugins.uInt8ArrayExtras;
|
||||||
var base64 = ''
|
|
||||||
var encodings = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
|
|
||||||
|
|
||||||
var bytes = new Uint8Array(arrayBuffer)
|
export function uInt8ArrayToBase64(uInt8Array: Uint8Array): string {
|
||||||
var byteLength = bytes.byteLength
|
return plugins.uInt8ArrayExtras.uint8ArrayToBase64(uInt8Array);
|
||||||
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
|
export function base64ToUint8Array(base64: string): Uint8Array {
|
||||||
if (byteRemainder == 1) {
|
return plugins.uInt8ArrayExtras.base64ToUint8Array(base64);
|
||||||
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 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 isBufferLike(obj: any): obj is ArrayBufferLike | Buffer {
|
export function isBufferLike(obj: any): obj is ArrayBufferLike | Buffer {
|
||||||
|
@ -1,2 +1,5 @@
|
|||||||
const removeme = {};
|
import * as uInt8ArrayExtras from 'uint8array-extras';
|
||||||
export { removeme };
|
|
||||||
|
export {
|
||||||
|
uInt8ArrayExtras,
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user