diff options
| author | Adam Mathes <adam@adammathes.com> | 2026-02-13 21:34:48 -0800 |
|---|---|---|
| committer | Adam Mathes <adam@adammathes.com> | 2026-02-13 21:34:48 -0800 |
| commit | 76cb9c2a39d477a64824a985ade40507e3bbade1 (patch) | |
| tree | 41e997aa9c6f538d3a136af61dae9424db2005a9 /vanilla/node_modules/@exodus/bytes/hex.node.js | |
| parent | 819a39a21ac992b1393244a4c283bbb125208c69 (diff) | |
| download | neko-76cb9c2a39d477a64824a985ade40507e3bbade1.tar.gz neko-76cb9c2a39d477a64824a985ade40507e3bbade1.tar.bz2 neko-76cb9c2a39d477a64824a985ade40507e3bbade1.zip | |
feat(vanilla): add testing infrastructure and tests (NK-wjnczv)
Diffstat (limited to 'vanilla/node_modules/@exodus/bytes/hex.node.js')
| -rw-r--r-- | vanilla/node_modules/@exodus/bytes/hex.node.js | 28 |
1 files changed, 28 insertions, 0 deletions
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) + } |
