From 76cb9c2a39d477a64824a985ade40507e3bbade1 Mon Sep 17 00:00:00 2001 From: Adam Mathes Date: Fri, 13 Feb 2026 21:34:48 -0800 Subject: feat(vanilla): add testing infrastructure and tests (NK-wjnczv) --- vanilla/node_modules/@exodus/bytes/hex.node.js | 28 ++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 vanilla/node_modules/@exodus/bytes/hex.node.js (limited to 'vanilla/node_modules/@exodus/bytes/hex.node.js') diff --git a/vanilla/node_modules/@exodus/bytes/hex.node.js b/vanilla/node_modules/@exodus/bytes/hex.node.js new file mode 100644 index 0000000..a4fc000 --- /dev/null +++ b/vanilla/node_modules/@exodus/bytes/hex.node.js @@ -0,0 +1,28 @@ +import { typedView } from './array.js' +import { assertU8, E_STRING } from './fallback/_utils.js' +import { E_HEX } from './fallback/hex.js' + +if (Buffer.TYPED_ARRAY_SUPPORT) throw new Error('Unexpected Buffer polyfill') + +const { toHex: webHex } = Uint8Array.prototype // Modern engines have this +const denoBug = Buffer.from('ag', 'hex').length > 0 + +export function toHex(arr) { + assertU8(arr) + if (arr.length === 0) return '' + if (webHex && arr.toHex === webHex) return arr.toHex() + if (arr.constructor === Buffer && Buffer.isBuffer(arr)) return arr.hexSlice(0, arr.byteLength) + return Buffer.from(arr.buffer, arr.byteOffset, arr.byteLength).hexSlice(0, arr.byteLength) +} + +// Unlike Buffer.from(), throws on invalid input +export const fromHex = Uint8Array.fromHex + ? (str, format = 'uint8') => typedView(Uint8Array.fromHex(str), format) + : (str, format = 'uint8') => { + if (typeof str !== 'string') throw new TypeError(E_STRING) + if (str.length % 2 !== 0) throw new SyntaxError(E_HEX) + if (denoBug && /[^\dA-Fa-f]/.test(str)) throw new SyntaxError(E_HEX) + const buf = Buffer.from(str, 'hex') // will stop on first non-hex character, so we can just validate length + if (buf.length * 2 !== str.length) throw new SyntaxError(E_HEX) + return typedView(buf, format) + } -- cgit v1.2.3