@xylabs/arraybuffer
Advanced tools
+6
-9
| { | ||
| "name": "@xylabs/arraybuffer", | ||
| "version": "5.0.80", | ||
| "version": "5.0.81", | ||
| "description": "Base functionality used throughout XY Labs TypeScript/JavaScript libraries", | ||
@@ -31,3 +31,2 @@ "keywords": [ | ||
| "types": "./dist/neutral/index.d.ts", | ||
| "source": "./src/index.ts", | ||
| "default": "./dist/neutral/index.mjs" | ||
@@ -38,7 +37,5 @@ }, | ||
| "module": "./dist/neutral/index.mjs", | ||
| "source": "./src/index.ts", | ||
| "types": "./dist/neutral/index.d.ts", | ||
| "files": [ | ||
| "dist", | ||
| "src", | ||
| "!**/*.bench.*", | ||
@@ -49,9 +46,9 @@ "!**/*.spec.*", | ||
| "dependencies": { | ||
| "@xylabs/assert": "~5.0.80", | ||
| "@xylabs/hex": "~5.0.80", | ||
| "@xylabs/typeof": "~5.0.80" | ||
| "@xylabs/assert": "~5.0.81", | ||
| "@xylabs/hex": "~5.0.81", | ||
| "@xylabs/typeof": "~5.0.81" | ||
| }, | ||
| "devDependencies": { | ||
| "@xylabs/ts-scripts-yarn3": "~7.3.2", | ||
| "@xylabs/tsconfig": "~7.3.2", | ||
| "@xylabs/ts-scripts-yarn3": "~7.4.11", | ||
| "@xylabs/tsconfig": "~7.4.11", | ||
| "typescript": "~5.9.3", | ||
@@ -58,0 +55,0 @@ "vitest": "~4.0.18" |
+58
-10
@@ -64,2 +64,4 @@ # @xylabs/arraybuffer | ||
| ## Call Signature | ||
| ```ts | ||
@@ -69,3 +71,3 @@ function isArrayBuffer(value): value is ArrayBuffer; | ||
| ## Parameters | ||
| ### Parameters | ||
@@ -76,6 +78,28 @@ ### value | ||
| ## Returns | ||
| ### Returns | ||
| `value is ArrayBuffer` | ||
| ## Call Signature | ||
| ```ts | ||
| function isArrayBuffer<T>(value): value is Extract<T, ArrayBuffer>; | ||
| ``` | ||
| ### Type Parameters | ||
| ### T | ||
| `T` *extends* `ArrayBuffer` | ||
| ### Parameters | ||
| ### value | ||
| `T` | ||
| ### Returns | ||
| `value is Extract<T, ArrayBuffer>` | ||
| ### <a id="isArrayBufferLike"></a>isArrayBufferLike | ||
@@ -87,2 +111,4 @@ | ||
| ## Call Signature | ||
| ```ts | ||
@@ -92,3 +118,3 @@ function isArrayBufferLike(value): value is ArrayBufferLike; | ||
| ## Parameters | ||
| ### Parameters | ||
@@ -99,6 +125,28 @@ ### value | ||
| ## Returns | ||
| ### Returns | ||
| `value is ArrayBufferLike` | ||
| ## Call Signature | ||
| ```ts | ||
| function isArrayBufferLike<T>(value): value is Extract<T, ArrayBufferLike>; | ||
| ``` | ||
| ### Type Parameters | ||
| ### T | ||
| `T` *extends* `ArrayBufferLike` | ||
| ### Parameters | ||
| ### value | ||
| `T` | ||
| ### Returns | ||
| `value is Extract<T, ArrayBufferLike>` | ||
| ### <a id="toArrayBuffer"></a>toArrayBuffer | ||
@@ -170,3 +218,3 @@ | ||
| padLength?, | ||
| base?): undefined | ArrayBufferLike; | ||
| base?): ArrayBufferLike | undefined; | ||
| ``` | ||
@@ -178,3 +226,3 @@ | ||
| `undefined` | `string` | `bigint` | `ArrayBufferLike` | ||
| `string` | `bigint` | `ArrayBufferLike` | `undefined` | ||
@@ -191,3 +239,3 @@ ### padLength? | ||
| `undefined` \| `ArrayBufferLike` | ||
| `ArrayBufferLike` \| `undefined` | ||
@@ -260,3 +308,3 @@ ### <a id="toUint8Array"></a>toUint8Array | ||
| padLength?, | ||
| base?): undefined | Uint8Array<ArrayBufferLike>; | ||
| base?): Uint8Array<ArrayBufferLike> | undefined; | ||
| ``` | ||
@@ -268,3 +316,3 @@ | ||
| `undefined` | `string` | `bigint` | `ArrayBufferLike` | ||
| `string` | `bigint` | `ArrayBufferLike` | `undefined` | ||
@@ -281,3 +329,3 @@ ### padLength? | ||
| `undefined` \| `Uint8Array`\<`ArrayBufferLike`\> | ||
| `Uint8Array`\<`ArrayBufferLike`\> \| `undefined` | ||
@@ -284,0 +332,0 @@ |
| export const equalArrayBuffers = (a1: ArrayBufferLike, a2: ArrayBufferLike) => { | ||
| const u1 = new Uint8Array(a1) | ||
| const u2 = new Uint8Array(a2) | ||
| if (u1.byteLength !== u2.byteLength) return false | ||
| for (let i = 0; i < u1.byteLength; i++) { | ||
| if (u1[i] !== u2[i]) return false | ||
| } | ||
| return true | ||
| } |
| export * from './equalArrayBuffers.ts' | ||
| export * from './isArrayBuffer.ts' | ||
| export * from './toArrayBuffer.ts' | ||
| export * from './toUint8Array.ts' |
| export function isArrayBuffer(value: unknown): value is ArrayBuffer | ||
| export function isArrayBuffer<T extends ArrayBuffer>(value: T): value is Extract<T, ArrayBuffer> | ||
| export function isArrayBuffer(value: unknown): value is ArrayBuffer { | ||
| return value instanceof ArrayBuffer | ||
| } | ||
| export function isArrayBufferLike(value: unknown): value is ArrayBufferLike | ||
| export function isArrayBufferLike<T extends ArrayBufferLike>(value: T): value is Extract<T, ArrayBufferLike> | ||
| export function isArrayBufferLike(value: unknown): value is ArrayBufferLike { | ||
| return ( | ||
| value !== null | ||
| && typeof value === 'object' | ||
| && 'byteLength' in value | ||
| && typeof (value as ArrayBufferLike).byteLength === 'number' | ||
| && 'slice' in value | ||
| && typeof (value as ArrayBufferLike).slice === 'function' | ||
| ) | ||
| } |
| import { assertEx } from '@xylabs/assert' | ||
| import type { Hex } from '@xylabs/hex' | ||
| import { toHex } from '@xylabs/hex' | ||
| import { isUndefined } from '@xylabs/typeof' | ||
| function hexToArrayBuffer(value: Hex): Uint8Array { | ||
| if (value.length % 2 !== 0) { | ||
| throw new Error('Invalid hex value') | ||
| } | ||
| const length = value.length / 2 | ||
| const result = new Uint8Array(new ArrayBuffer(length)) | ||
| for (let i = 0; i < length; i++) { | ||
| const byte = value.slice(i * 2, i * 2 + 2) | ||
| result[i] = Number.parseInt(byte, 16) | ||
| } | ||
| return result | ||
| } | ||
| function stringToArrayBuffer(value: string, base = 16): Uint8Array { | ||
| switch (base) { | ||
| case 16: { | ||
| return hexToArrayBuffer(toHex((value.startsWith('0x') ? value.slice(2) : value).toUpperCase())) | ||
| } | ||
| default: { | ||
| throw new Error(`Unsupported base [${base}]`) | ||
| } | ||
| } | ||
| } | ||
| export function toArrayBuffer(value: undefined, padLength?: number, base?: number): undefined | ||
| export function toArrayBuffer(value: ArrayBufferLike | bigint | string, padLength?: number, base?: number): ArrayBufferLike | ||
| export function toArrayBuffer(value: ArrayBufferLike | bigint | string | undefined, padLength?: number, base?: number): ArrayBufferLike | undefined | ||
| export function toArrayBuffer(value?: ArrayBufferLike | bigint | string, padLength = 0, base?: number): ArrayBufferLike | undefined { | ||
| if (isUndefined(value)) return undefined | ||
| if (typeof value === 'bigint' && value < 0) { | ||
| throw new Error(`negative bigint values are not supported: ${typeof value}`) | ||
| } | ||
| let result: Uint8Array | undefined | ||
| = typeof value === 'string' | ||
| ? stringToArrayBuffer(value, base) | ||
| : typeof value === 'bigint' ? stringToArrayBuffer(value.toString(16)) : (new Uint8Array(value)) | ||
| if (result === undefined) { | ||
| throw new Error(`toArrayBuffer - Unknown type: ${typeof value}`) | ||
| } | ||
| if (result.length < padLength) { | ||
| result = new Uint8Array([...new Uint8Array(padLength - result.length), ...result]) | ||
| assertEx(result?.length <= padLength, () => 'Resulting length is greater than padLength') | ||
| } | ||
| return result.buffer | ||
| } |
| import { toArrayBuffer } from './toArrayBuffer.ts' | ||
| export function toUint8Array(value: undefined, padLength?: number, base?: number): undefined | ||
| export function toUint8Array(value: ArrayBufferLike | bigint | string, padLength?: number, base?: number): Uint8Array | ||
| export function toUint8Array(value: ArrayBufferLike | bigint | string | undefined, padLength?: number, base?: number): Uint8Array | undefined | ||
| export function toUint8Array(value?: ArrayBufferLike | bigint | string, padLength?: number, base?: number): Uint8Array | undefined { | ||
| const arrayBuffer = toArrayBuffer(value, padLength, base) | ||
| return arrayBuffer ? new Uint8Array(arrayBuffer) : undefined | ||
| } |
358
15.48%26327
-11.73%15
-25%85
-50%Updated
Updated
Updated