@xylabs/arraybuffer
Advanced tools
@@ -74,2 +74,2 @@ // src/equalArrayBuffers.ts | ||
| }; | ||
| //# sourceMappingURL=index.mjs.map | ||
| //# sourceMappingURL=index.mjs.map |
@@ -1,1 +0,7 @@ | ||
| {"version":3,"sources":["../../src/equalArrayBuffers.ts","../../src/isArrayBuffer.ts","../../src/toArrayBuffer.ts","../../src/toUint8Array.ts"],"sourcesContent":["/**\n * Compares two ArrayBuffers for byte-level equality.\n * @param a1 - First buffer\n * @param a2 - Second buffer\n * @returns True if the buffers have the same length and identical bytes\n */\nexport const equalArrayBuffers = (a1: ArrayBufferLike, a2: ArrayBufferLike) => {\n const u1 = new Uint8Array(a1)\n const u2 = new Uint8Array(a2)\n if (u1.byteLength !== u2.byteLength) return false\n for (let i = 0; i < u1.byteLength; i++) {\n if (u1[i] !== u2[i]) return false\n }\n return true\n}\n","/** Type guard that checks if a value is an ArrayBuffer instance. */\nexport function isArrayBuffer(value: unknown): value is ArrayBuffer\nexport function isArrayBuffer<T extends ArrayBuffer>(value: T): value is Extract<T, ArrayBuffer>\nexport function isArrayBuffer(value: unknown): value is ArrayBuffer {\n return value instanceof ArrayBuffer\n}\n\n/** Type guard that checks if a value conforms to the ArrayBufferLike interface (has byteLength and slice). */\nexport function isArrayBufferLike(value: unknown): value is ArrayBufferLike\nexport function isArrayBufferLike<T extends ArrayBufferLike>(value: T): value is Extract<T, ArrayBufferLike>\nexport function isArrayBufferLike(value: unknown): value is ArrayBufferLike {\n return (\n value !== null\n && typeof value === 'object'\n && 'byteLength' in value\n && typeof (value as ArrayBufferLike).byteLength === 'number'\n && 'slice' in value\n && typeof (value as ArrayBufferLike).slice === 'function'\n )\n}\n","import { assertEx } from '@xylabs/assert'\nimport type { Hex } from '@xylabs/hex'\nimport { toHex } from '@xylabs/hex'\nimport { isUndefined } from '@xylabs/typeof'\n\nfunction hexToArrayBuffer(value: Hex): Uint8Array {\n if (value.length % 2 !== 0) {\n throw new Error('Invalid hex value')\n }\n\n const length = value.length / 2\n const result = new Uint8Array(new ArrayBuffer(length))\n\n for (let i = 0; i < length; i++) {\n const byte = value.slice(i * 2, i * 2 + 2)\n result[i] = Number.parseInt(byte, 16)\n }\n\n return result\n}\n\nfunction stringToArrayBuffer(value: string, base = 16): Uint8Array {\n switch (base) {\n case 16: {\n return hexToArrayBuffer(toHex((value.startsWith('0x') ? value.slice(2) : value).toUpperCase()))\n }\n default: {\n throw new Error(`Unsupported base [${base}]`)\n }\n }\n}\n\n/**\n * Converts a string, bigint, or ArrayBufferLike to an ArrayBufferLike, with optional zero-padding.\n * @param value - The value to convert (hex string, bigint, or existing buffer)\n * @param padLength - Minimum byte length, left-padded with zeros if needed\n * @param base - Numeric base for string parsing (default 16)\n * @returns The resulting ArrayBufferLike, or undefined if value is undefined\n */\nexport function toArrayBuffer(value: undefined, padLength?: number, base?: number): undefined\nexport function toArrayBuffer(value: ArrayBufferLike | bigint | string, padLength?: number, base?: number): ArrayBufferLike\nexport function toArrayBuffer(value: ArrayBufferLike | bigint | string | undefined, padLength?: number, base?: number): ArrayBufferLike | undefined\nexport function toArrayBuffer(value?: ArrayBufferLike | bigint | string, padLength = 0, base?: number): ArrayBufferLike | undefined {\n if (isUndefined(value)) return undefined\n\n if (typeof value === 'bigint' && value < 0) {\n throw new Error(`negative bigint values are not supported: ${typeof value}`)\n }\n\n let result: Uint8Array | undefined\n = typeof value === 'string'\n ? stringToArrayBuffer(value, base)\n : typeof value === 'bigint' ? stringToArrayBuffer(value.toString(16)) : (new Uint8Array(value))\n\n if (result === undefined) {\n throw new Error(`toArrayBuffer - Unknown type: ${typeof value}`)\n }\n\n if (result.length < padLength) {\n result = new Uint8Array([...new Uint8Array(padLength - result.length), ...result])\n assertEx(result?.length <= padLength, () => 'Resulting length is greater than padLength')\n }\n\n return result.buffer\n}\n","import { toArrayBuffer } from './toArrayBuffer.ts'\n\n/**\n * Converts a string, bigint, or ArrayBufferLike to a Uint8Array, with optional zero-padding.\n * @param value - The value to convert\n * @param padLength - Minimum byte length, left-padded with zeros if needed\n * @param base - Numeric base for string parsing (default 16)\n * @returns The resulting Uint8Array, or undefined if value is undefined\n */\nexport function toUint8Array(value: undefined, padLength?: number, base?: number): undefined\nexport function toUint8Array(value: ArrayBufferLike | bigint | string, padLength?: number, base?: number): Uint8Array\nexport function toUint8Array(value: ArrayBufferLike | bigint | string | undefined, padLength?: number, base?: number): Uint8Array | undefined\nexport function toUint8Array(value?: ArrayBufferLike | bigint | string, padLength?: number, base?: number): Uint8Array | undefined {\n const arrayBuffer = toArrayBuffer(value, padLength, base)\n return arrayBuffer ? new Uint8Array(arrayBuffer) : undefined\n}\n"],"mappings":";AAMO,IAAM,oBAAoB,CAAC,IAAqB,OAAwB;AAC7E,QAAM,KAAK,IAAI,WAAW,EAAE;AAC5B,QAAM,KAAK,IAAI,WAAW,EAAE;AAC5B,MAAI,GAAG,eAAe,GAAG,WAAY,QAAO;AAC5C,WAAS,IAAI,GAAG,IAAI,GAAG,YAAY,KAAK;AACtC,QAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAG,QAAO;AAAA,EAC9B;AACA,SAAO;AACT;;;ACXO,SAAS,cAAc,OAAsC;AAClE,SAAO,iBAAiB;AAC1B;AAKO,SAAS,kBAAkB,OAA0C;AAC1E,SACE,UAAU,QACP,OAAO,UAAU,YACjB,gBAAgB,SAChB,OAAQ,MAA0B,eAAe,YACjD,WAAW,SACX,OAAQ,MAA0B,UAAU;AAEnD;;;ACnBA,SAAS,gBAAgB;AAEzB,SAAS,aAAa;AACtB,SAAS,mBAAmB;AAE5B,SAAS,iBAAiB,OAAwB;AAChD,MAAI,MAAM,SAAS,MAAM,GAAG;AAC1B,UAAM,IAAI,MAAM,mBAAmB;AAAA,EACrC;AAEA,QAAM,SAAS,MAAM,SAAS;AAC9B,QAAM,SAAS,IAAI,WAAW,IAAI,YAAY,MAAM,CAAC;AAErD,WAAS,IAAI,GAAG,IAAI,QAAQ,KAAK;AAC/B,UAAM,OAAO,MAAM,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC;AACzC,WAAO,CAAC,IAAI,OAAO,SAAS,MAAM,EAAE;AAAA,EACtC;AAEA,SAAO;AACT;AAEA,SAAS,oBAAoB,OAAe,OAAO,IAAgB;AACjE,UAAQ,MAAM;AAAA,IACZ,KAAK,IAAI;AACP,aAAO,iBAAiB,OAAO,MAAM,WAAW,IAAI,IAAI,MAAM,MAAM,CAAC,IAAI,OAAO,YAAY,CAAC,CAAC;AAAA,IAChG;AAAA,IACA,SAAS;AACP,YAAM,IAAI,MAAM,qBAAqB,IAAI,GAAG;AAAA,IAC9C;AAAA,EACF;AACF;AAYO,SAAS,cAAc,OAA2C,YAAY,GAAG,MAA4C;AAClI,MAAI,YAAY,KAAK,EAAG,QAAO;AAE/B,MAAI,OAAO,UAAU,YAAY,QAAQ,GAAG;AAC1C,UAAM,IAAI,MAAM,6CAA6C,OAAO,KAAK,EAAE;AAAA,EAC7E;AAEA,MAAI,SACA,OAAO,UAAU,WACf,oBAAoB,OAAO,IAAI,IAC/B,OAAO,UAAU,WAAW,oBAAoB,MAAM,SAAS,EAAE,CAAC,IAAK,IAAI,WAAW,KAAK;AAEjG,MAAI,WAAW,QAAW;AACxB,UAAM,IAAI,MAAM,iCAAiC,OAAO,KAAK,EAAE;AAAA,EACjE;AAEA,MAAI,OAAO,SAAS,WAAW;AAC7B,aAAS,IAAI,WAAW,CAAC,GAAG,IAAI,WAAW,YAAY,OAAO,MAAM,GAAG,GAAG,MAAM,CAAC;AACjF,aAAS,QAAQ,UAAU,WAAW,MAAM,4CAA4C;AAAA,EAC1F;AAEA,SAAO,OAAO;AAChB;;;ACpDO,SAAS,aAAa,OAA2C,WAAoB,MAAuC;AACjI,QAAM,cAAc,cAAc,OAAO,WAAW,IAAI;AACxD,SAAO,cAAc,IAAI,WAAW,WAAW,IAAI;AACrD;","names":[]} | ||
| { | ||
| "version": 3, | ||
| "sources": ["../../src/equalArrayBuffers.ts", "../../src/isArrayBuffer.ts", "../../src/toArrayBuffer.ts", "../../src/toUint8Array.ts"], | ||
| "sourcesContent": ["/**\n * Compares two ArrayBuffers for byte-level equality.\n * @param a1 - First buffer\n * @param a2 - Second buffer\n * @returns True if the buffers have the same length and identical bytes\n */\nexport const equalArrayBuffers = (a1: ArrayBufferLike, a2: ArrayBufferLike) => {\n const u1 = new Uint8Array(a1)\n const u2 = new Uint8Array(a2)\n if (u1.byteLength !== u2.byteLength) return false\n for (let i = 0; i < u1.byteLength; i++) {\n if (u1[i] !== u2[i]) return false\n }\n return true\n}\n", "/** Type guard that checks if a value is an ArrayBuffer instance. */\nexport function isArrayBuffer(value: unknown): value is ArrayBuffer\nexport function isArrayBuffer<T extends ArrayBuffer>(value: T): value is Extract<T, ArrayBuffer>\nexport function isArrayBuffer(value: unknown): value is ArrayBuffer {\n return value instanceof ArrayBuffer\n}\n\n/** Type guard that checks if a value conforms to the ArrayBufferLike interface (has byteLength and slice). */\nexport function isArrayBufferLike(value: unknown): value is ArrayBufferLike\nexport function isArrayBufferLike<T extends ArrayBufferLike>(value: T): value is Extract<T, ArrayBufferLike>\nexport function isArrayBufferLike(value: unknown): value is ArrayBufferLike {\n return (\n value !== null\n && typeof value === 'object'\n && 'byteLength' in value\n && typeof (value as ArrayBufferLike).byteLength === 'number'\n && 'slice' in value\n && typeof (value as ArrayBufferLike).slice === 'function'\n )\n}\n", "import { assertEx } from '@xylabs/assert'\nimport type { Hex } from '@xylabs/hex'\nimport { toHex } from '@xylabs/hex'\nimport { isUndefined } from '@xylabs/typeof'\n\nfunction hexToArrayBuffer(value: Hex): Uint8Array {\n if (value.length % 2 !== 0) {\n throw new Error('Invalid hex value')\n }\n\n const length = value.length / 2\n const result = new Uint8Array(new ArrayBuffer(length))\n\n for (let i = 0; i < length; i++) {\n const byte = value.slice(i * 2, i * 2 + 2)\n result[i] = Number.parseInt(byte, 16)\n }\n\n return result\n}\n\nfunction stringToArrayBuffer(value: string, base = 16): Uint8Array {\n switch (base) {\n case 16: {\n return hexToArrayBuffer(toHex((value.startsWith('0x') ? value.slice(2) : value).toUpperCase()))\n }\n default: {\n throw new Error(`Unsupported base [${base}]`)\n }\n }\n}\n\n/**\n * Converts a string, bigint, or ArrayBufferLike to an ArrayBufferLike, with optional zero-padding.\n * @param value - The value to convert (hex string, bigint, or existing buffer)\n * @param padLength - Minimum byte length, left-padded with zeros if needed\n * @param base - Numeric base for string parsing (default 16)\n * @returns The resulting ArrayBufferLike, or undefined if value is undefined\n */\nexport function toArrayBuffer(value: undefined, padLength?: number, base?: number): undefined\nexport function toArrayBuffer(value: ArrayBufferLike | bigint | string, padLength?: number, base?: number): ArrayBufferLike\nexport function toArrayBuffer(value: ArrayBufferLike | bigint | string | undefined, padLength?: number, base?: number): ArrayBufferLike | undefined\nexport function toArrayBuffer(value?: ArrayBufferLike | bigint | string, padLength = 0, base?: number): ArrayBufferLike | undefined {\n if (isUndefined(value)) return undefined\n\n if (typeof value === 'bigint' && value < 0) {\n throw new Error(`negative bigint values are not supported: ${typeof value}`)\n }\n\n let result: Uint8Array | undefined\n = typeof value === 'string'\n ? stringToArrayBuffer(value, base)\n : typeof value === 'bigint' ? stringToArrayBuffer(value.toString(16)) : (new Uint8Array(value))\n\n if (result === undefined) {\n throw new Error(`toArrayBuffer - Unknown type: ${typeof value}`)\n }\n\n if (result.length < padLength) {\n result = new Uint8Array([...new Uint8Array(padLength - result.length), ...result])\n assertEx(result?.length <= padLength, () => 'Resulting length is greater than padLength')\n }\n\n return result.buffer\n}\n", "import { toArrayBuffer } from './toArrayBuffer.ts'\n\n/**\n * Converts a string, bigint, or ArrayBufferLike to a Uint8Array, with optional zero-padding.\n * @param value - The value to convert\n * @param padLength - Minimum byte length, left-padded with zeros if needed\n * @param base - Numeric base for string parsing (default 16)\n * @returns The resulting Uint8Array, or undefined if value is undefined\n */\nexport function toUint8Array(value: undefined, padLength?: number, base?: number): undefined\nexport function toUint8Array(value: ArrayBufferLike | bigint | string, padLength?: number, base?: number): Uint8Array\nexport function toUint8Array(value: ArrayBufferLike | bigint | string | undefined, padLength?: number, base?: number): Uint8Array | undefined\nexport function toUint8Array(value?: ArrayBufferLike | bigint | string, padLength?: number, base?: number): Uint8Array | undefined {\n const arrayBuffer = toArrayBuffer(value, padLength, base)\n return arrayBuffer ? new Uint8Array(arrayBuffer) : undefined\n}\n"], | ||
| "mappings": ";AAMO,IAAM,oBAAoB,CAAC,IAAqB,OAAwB;AAC7E,QAAM,KAAK,IAAI,WAAW,EAAE;AAC5B,QAAM,KAAK,IAAI,WAAW,EAAE;AAC5B,MAAI,GAAG,eAAe,GAAG,WAAY,QAAO;AAC5C,WAAS,IAAI,GAAG,IAAI,GAAG,YAAY,KAAK;AACtC,QAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAG,QAAO;AAAA,EAC9B;AACA,SAAO;AACT;;;ACXO,SAAS,cAAc,OAAsC;AAClE,SAAO,iBAAiB;AAC1B;AAKO,SAAS,kBAAkB,OAA0C;AAC1E,SACE,UAAU,QACP,OAAO,UAAU,YACjB,gBAAgB,SAChB,OAAQ,MAA0B,eAAe,YACjD,WAAW,SACX,OAAQ,MAA0B,UAAU;AAEnD;;;ACnBA,SAAS,gBAAgB;AAEzB,SAAS,aAAa;AACtB,SAAS,mBAAmB;AAE5B,SAAS,iBAAiB,OAAwB;AAChD,MAAI,MAAM,SAAS,MAAM,GAAG;AAC1B,UAAM,IAAI,MAAM,mBAAmB;AAAA,EACrC;AAEA,QAAM,SAAS,MAAM,SAAS;AAC9B,QAAM,SAAS,IAAI,WAAW,IAAI,YAAY,MAAM,CAAC;AAErD,WAAS,IAAI,GAAG,IAAI,QAAQ,KAAK;AAC/B,UAAM,OAAO,MAAM,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC;AACzC,WAAO,CAAC,IAAI,OAAO,SAAS,MAAM,EAAE;AAAA,EACtC;AAEA,SAAO;AACT;AAEA,SAAS,oBAAoB,OAAe,OAAO,IAAgB;AACjE,UAAQ,MAAM;AAAA,IACZ,KAAK,IAAI;AACP,aAAO,iBAAiB,OAAO,MAAM,WAAW,IAAI,IAAI,MAAM,MAAM,CAAC,IAAI,OAAO,YAAY,CAAC,CAAC;AAAA,IAChG;AAAA,IACA,SAAS;AACP,YAAM,IAAI,MAAM,qBAAqB,IAAI,GAAG;AAAA,IAC9C;AAAA,EACF;AACF;AAYO,SAAS,cAAc,OAA2C,YAAY,GAAG,MAA4C;AAClI,MAAI,YAAY,KAAK,EAAG,QAAO;AAE/B,MAAI,OAAO,UAAU,YAAY,QAAQ,GAAG;AAC1C,UAAM,IAAI,MAAM,6CAA6C,OAAO,KAAK,EAAE;AAAA,EAC7E;AAEA,MAAI,SACA,OAAO,UAAU,WACf,oBAAoB,OAAO,IAAI,IAC/B,OAAO,UAAU,WAAW,oBAAoB,MAAM,SAAS,EAAE,CAAC,IAAK,IAAI,WAAW,KAAK;AAEjG,MAAI,WAAW,QAAW;AACxB,UAAM,IAAI,MAAM,iCAAiC,OAAO,KAAK,EAAE;AAAA,EACjE;AAEA,MAAI,OAAO,SAAS,WAAW;AAC7B,aAAS,IAAI,WAAW,CAAC,GAAG,IAAI,WAAW,YAAY,OAAO,MAAM,GAAG,GAAG,MAAM,CAAC;AACjF,aAAS,QAAQ,UAAU,WAAW,MAAM,4CAA4C;AAAA,EAC1F;AAEA,SAAO,OAAO;AAChB;;;ACpDO,SAAS,aAAa,OAA2C,WAAoB,MAAuC;AACjI,QAAM,cAAc,cAAc,OAAO,WAAW,IAAI;AACxD,SAAO,cAAc,IAAI,WAAW,WAAW,IAAI;AACrD;", | ||
| "names": [] | ||
| } |
+9
-9
| { | ||
| "name": "@xylabs/arraybuffer", | ||
| "version": "5.1.2", | ||
| "version": "5.1.3", | ||
| "description": "Base functionality used throughout XY Labs TypeScript/JavaScript libraries", | ||
@@ -43,13 +43,13 @@ "keywords": [ | ||
| "dependencies": { | ||
| "@xylabs/assert": "~5.1.2", | ||
| "@xylabs/hex": "~5.1.2", | ||
| "@xylabs/typeof": "~5.1.2" | ||
| "@xylabs/assert": "~5.1.3", | ||
| "@xylabs/hex": "~5.1.3", | ||
| "@xylabs/typeof": "~5.1.3" | ||
| }, | ||
| "devDependencies": { | ||
| "@xylabs/toolchain": "~7.13.15", | ||
| "@xylabs/tsconfig": "~7.13.15", | ||
| "@xylabs/toolchain": "~8.0.4", | ||
| "@xylabs/tsconfig": "~8.0.4", | ||
| "eslint": "^10.3.0", | ||
| "typescript": "^5.9.3", | ||
| "vite": "^8.0.10", | ||
| "vitest": "^4.1.5", | ||
| "typescript": "^6.0.3", | ||
| "vite": "^8.0.13", | ||
| "vitest": "^4.1.6", | ||
| "zod": "^4.4.3" | ||
@@ -56,0 +56,0 @@ }, |
29258
0.09%108
0.93%Updated
Updated
Updated