diff --git a/rs/webbuf_blake3/build/bundler/webbuf_blake3.d.ts b/rs/webbuf_blake3/build/bundler/webbuf_blake3.d.ts index 5d21967..bdd8485 100644 --- a/rs/webbuf_blake3/build/bundler/webbuf_blake3.d.ts +++ b/rs/webbuf_blake3/build/bundler/webbuf_blake3.d.ts @@ -1,18 +1,36 @@ /* tslint:disable */ /* eslint-disable */ -/** - * @param {Uint8Array} data - * @returns {Uint8Array} - */ + +export class Blake3Hasher { + free(): void; + [Symbol.dispose](): void; + /** + * Create a new incremental BLAKE3 hasher. + */ + constructor(); + /** + * Reset the hasher to its initial state, allowing reuse. + */ + reset(): void; + /** + * Feed data into the hasher. Can be called multiple times. + */ + update(data: Uint8Array): void; + /** + * Finalize the hash and return the 32-byte digest. + * This does NOT consume the hasher — you can continue calling `update` and + * `finalize` again to get an extended hash of the data fed so far. + */ + finalize(): Uint8Array; + /** + * Create a new incremental BLAKE3 keyed hasher (for MAC). + * Key must be exactly 32 bytes. + */ + static new_keyed(key: Uint8Array): Blake3Hasher; +} + export function blake3_hash(data: Uint8Array): Uint8Array; -/** - * @param {Uint8Array} data - * @returns {Uint8Array} - */ -export function double_blake3_hash(data: Uint8Array): Uint8Array; -/** - * @param {Uint8Array} key - * @param {Uint8Array} data - * @returns {Uint8Array} - */ + export function blake3_mac(key: Uint8Array, data: Uint8Array): Uint8Array; + +export function double_blake3_hash(data: Uint8Array): Uint8Array; diff --git a/rs/webbuf_blake3/build/bundler/webbuf_blake3.js b/rs/webbuf_blake3/build/bundler/webbuf_blake3.js index 25cd8f8..fe04c2d 100644 --- a/rs/webbuf_blake3/build/bundler/webbuf_blake3.js +++ b/rs/webbuf_blake3/build/bundler/webbuf_blake3.js @@ -1,4 +1,5 @@ import * as wasm from "./webbuf_blake3_bg.wasm"; export * from "./webbuf_blake3_bg.js"; import { __wbg_set_wasm } from "./webbuf_blake3_bg.js"; -__wbg_set_wasm(wasm); \ No newline at end of file +__wbg_set_wasm(wasm); +wasm.__wbindgen_start(); diff --git a/rs/webbuf_blake3/build/bundler/webbuf_blake3_bg.js b/rs/webbuf_blake3/build/bundler/webbuf_blake3_bg.js index 0e851bd..c678c23 100644 --- a/rs/webbuf_blake3/build/bundler/webbuf_blake3_bg.js +++ b/rs/webbuf_blake3/build/bundler/webbuf_blake3_bg.js @@ -3,15 +3,17 @@ export function __wbg_set_wasm(val) { wasm = val; } +function getArrayU8FromWasm0(ptr, len) { + ptr = ptr >>> 0; + return getUint8ArrayMemory0().subarray(ptr / 1, ptr / 1 + len); +} -const lTextDecoder = typeof TextDecoder === 'undefined' ? (0, module.require)('util').TextDecoder : TextDecoder; - -let cachedTextDecoder = new lTextDecoder('utf-8', { ignoreBOM: true, fatal: true }); - -cachedTextDecoder.decode(); +function getStringFromWasm0(ptr, len) { + ptr = ptr >>> 0; + return decodeText(ptr, len); +} let cachedUint8ArrayMemory0 = null; - function getUint8ArrayMemory0() { if (cachedUint8ArrayMemory0 === null || cachedUint8ArrayMemory0.byteLength === 0) { cachedUint8ArrayMemory0 = new Uint8Array(wasm.memory.buffer); @@ -19,28 +21,6 @@ function getUint8ArrayMemory0() { return cachedUint8ArrayMemory0; } -function getStringFromWasm0(ptr, len) { - ptr = ptr >>> 0; - return cachedTextDecoder.decode(getUint8ArrayMemory0().subarray(ptr, ptr + len)); -} - -const heap = new Array(128).fill(undefined); - -heap.push(undefined, null, true, false); - -let heap_next = heap.length; - -function addHeapObject(obj) { - if (heap_next === heap.length) heap.push(heap.length + 1); - const idx = heap_next; - heap_next = heap[idx]; - - heap[idx] = obj; - return idx; -} - -let WASM_VECTOR_LEN = 0; - function passArray8ToWasm0(arg, malloc) { const ptr = malloc(arg.length * 1, 1) >>> 0; getUint8ArrayMemory0().set(arg, ptr / 1); @@ -48,81 +28,121 @@ function passArray8ToWasm0(arg, malloc) { return ptr; } -let cachedDataViewMemory0 = null; +function takeFromExternrefTable0(idx) { + const value = wasm.__wbindgen_externrefs.get(idx); + wasm.__externref_table_dealloc(idx); + return value; +} -function getDataViewMemory0() { - if (cachedDataViewMemory0 === null || cachedDataViewMemory0.buffer.detached === true || (cachedDataViewMemory0.buffer.detached === undefined && cachedDataViewMemory0.buffer !== wasm.memory.buffer)) { - cachedDataViewMemory0 = new DataView(wasm.memory.buffer); +let cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true }); +cachedTextDecoder.decode(); +const MAX_SAFARI_DECODE_BYTES = 2146435072; +let numBytesDecoded = 0; +function decodeText(ptr, len) { + numBytesDecoded += len; + if (numBytesDecoded >= MAX_SAFARI_DECODE_BYTES) { + cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true }); + cachedTextDecoder.decode(); + numBytesDecoded = len; } - return cachedDataViewMemory0; + return cachedTextDecoder.decode(getUint8ArrayMemory0().subarray(ptr, ptr + len)); } -function getObject(idx) { return heap[idx]; } - -function dropObject(idx) { - if (idx < 132) return; - heap[idx] = heap_next; - heap_next = idx; -} +let WASM_VECTOR_LEN = 0; -function takeObject(idx) { - const ret = getObject(idx); - dropObject(idx); - return ret; -} +const Blake3HasherFinalization = (typeof FinalizationRegistry === 'undefined') + ? { register: () => {}, unregister: () => {} } + : new FinalizationRegistry(ptr => wasm.__wbg_blake3hasher_free(ptr >>> 0, 1)); -function getArrayU8FromWasm0(ptr, len) { - ptr = ptr >>> 0; - return getUint8ArrayMemory0().subarray(ptr / 1, ptr / 1 + len); -} /** - * @param {Uint8Array} data - * @returns {Uint8Array} + * Incremental BLAKE3 hasher that maintains state across multiple `update` calls. */ -export function blake3_hash(data) { - try { - const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); +export class Blake3Hasher { + static __wrap(ptr) { + ptr = ptr >>> 0; + const obj = Object.create(Blake3Hasher.prototype); + obj.__wbg_ptr = ptr; + Blake3HasherFinalization.register(obj, obj.__wbg_ptr, obj); + return obj; + } + __destroy_into_raw() { + const ptr = this.__wbg_ptr; + this.__wbg_ptr = 0; + Blake3HasherFinalization.unregister(this); + return ptr; + } + free() { + const ptr = this.__destroy_into_raw(); + wasm.__wbg_blake3hasher_free(ptr, 0); + } + /** + * Create a new incremental BLAKE3 hasher. + */ + constructor() { + const ret = wasm.blake3hasher_new(); + this.__wbg_ptr = ret >>> 0; + Blake3HasherFinalization.register(this, this.__wbg_ptr, this); + return this; + } + /** + * Reset the hasher to its initial state, allowing reuse. + */ + reset() { + wasm.blake3hasher_reset(this.__wbg_ptr); + } + /** + * Feed data into the hasher. Can be called multiple times. + * @param {Uint8Array} data + */ + update(data) { const ptr0 = passArray8ToWasm0(data, wasm.__wbindgen_malloc); const len0 = WASM_VECTOR_LEN; - wasm.blake3_hash(retptr, ptr0, len0); - var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true); - var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true); - var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true); - var r3 = getDataViewMemory0().getInt32(retptr + 4 * 3, true); - if (r3) { - throw takeObject(r2); + wasm.blake3hasher_update(this.__wbg_ptr, ptr0, len0); + } + /** + * Finalize the hash and return the 32-byte digest. + * This does NOT consume the hasher — you can continue calling `update` and + * `finalize` again to get an extended hash of the data fed so far. + * @returns {Uint8Array} + */ + finalize() { + const ret = wasm.blake3hasher_finalize(this.__wbg_ptr); + var v1 = getArrayU8FromWasm0(ret[0], ret[1]).slice(); + wasm.__wbindgen_free(ret[0], ret[1] * 1, 1); + return v1; + } + /** + * Create a new incremental BLAKE3 keyed hasher (for MAC). + * Key must be exactly 32 bytes. + * @param {Uint8Array} key + * @returns {Blake3Hasher} + */ + static new_keyed(key) { + const ptr0 = passArray8ToWasm0(key, wasm.__wbindgen_malloc); + const len0 = WASM_VECTOR_LEN; + const ret = wasm.blake3hasher_new_keyed(ptr0, len0); + if (ret[2]) { + throw takeFromExternrefTable0(ret[1]); } - var v2 = getArrayU8FromWasm0(r0, r1).slice(); - wasm.__wbindgen_free(r0, r1 * 1, 1); - return v2; - } finally { - wasm.__wbindgen_add_to_stack_pointer(16); + return Blake3Hasher.__wrap(ret[0]); } } +if (Symbol.dispose) Blake3Hasher.prototype[Symbol.dispose] = Blake3Hasher.prototype.free; /** * @param {Uint8Array} data * @returns {Uint8Array} */ -export function double_blake3_hash(data) { - try { - const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); - const ptr0 = passArray8ToWasm0(data, wasm.__wbindgen_malloc); - const len0 = WASM_VECTOR_LEN; - wasm.double_blake3_hash(retptr, ptr0, len0); - var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true); - var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true); - var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true); - var r3 = getDataViewMemory0().getInt32(retptr + 4 * 3, true); - if (r3) { - throw takeObject(r2); - } - var v2 = getArrayU8FromWasm0(r0, r1).slice(); - wasm.__wbindgen_free(r0, r1 * 1, 1); - return v2; - } finally { - wasm.__wbindgen_add_to_stack_pointer(16); +export function blake3_hash(data) { + const ptr0 = passArray8ToWasm0(data, wasm.__wbindgen_malloc); + const len0 = WASM_VECTOR_LEN; + const ret = wasm.blake3_hash(ptr0, len0); + if (ret[3]) { + throw takeFromExternrefTable0(ret[2]); } + var v2 = getArrayU8FromWasm0(ret[0], ret[1]).slice(); + wasm.__wbindgen_free(ret[0], ret[1] * 1, 1); + return v2; } /** @@ -131,30 +151,51 @@ export function double_blake3_hash(data) { * @returns {Uint8Array} */ export function blake3_mac(key, data) { - try { - const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); - const ptr0 = passArray8ToWasm0(key, wasm.__wbindgen_malloc); - const len0 = WASM_VECTOR_LEN; - const ptr1 = passArray8ToWasm0(data, wasm.__wbindgen_malloc); - const len1 = WASM_VECTOR_LEN; - wasm.blake3_mac(retptr, ptr0, len0, ptr1, len1); - var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true); - var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true); - var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true); - var r3 = getDataViewMemory0().getInt32(retptr + 4 * 3, true); - if (r3) { - throw takeObject(r2); - } - var v3 = getArrayU8FromWasm0(r0, r1).slice(); - wasm.__wbindgen_free(r0, r1 * 1, 1); - return v3; - } finally { - wasm.__wbindgen_add_to_stack_pointer(16); + const ptr0 = passArray8ToWasm0(key, wasm.__wbindgen_malloc); + const len0 = WASM_VECTOR_LEN; + const ptr1 = passArray8ToWasm0(data, wasm.__wbindgen_malloc); + const len1 = WASM_VECTOR_LEN; + const ret = wasm.blake3_mac(ptr0, len0, ptr1, len1); + if (ret[3]) { + throw takeFromExternrefTable0(ret[2]); } + var v3 = getArrayU8FromWasm0(ret[0], ret[1]).slice(); + wasm.__wbindgen_free(ret[0], ret[1] * 1, 1); + return v3; } -export function __wbindgen_string_new(arg0, arg1) { +/** + * @param {Uint8Array} data + * @returns {Uint8Array} + */ +export function double_blake3_hash(data) { + const ptr0 = passArray8ToWasm0(data, wasm.__wbindgen_malloc); + const len0 = WASM_VECTOR_LEN; + const ret = wasm.double_blake3_hash(ptr0, len0); + if (ret[3]) { + throw takeFromExternrefTable0(ret[2]); + } + var v2 = getArrayU8FromWasm0(ret[0], ret[1]).slice(); + wasm.__wbindgen_free(ret[0], ret[1] * 1, 1); + return v2; +} + +export function __wbg___wbindgen_throw_dd24417ed36fc46e(arg0, arg1) { + throw new Error(getStringFromWasm0(arg0, arg1)); +}; + +export function __wbindgen_cast_2241b6af4c4b2941(arg0, arg1) { + // Cast intrinsic for `Ref(String) -> Externref`. const ret = getStringFromWasm0(arg0, arg1); - return addHeapObject(ret); + return ret; }; +export function __wbindgen_init_externref_table() { + const table = wasm.__wbindgen_externrefs; + const offset = table.grow(4); + table.set(0, undefined); + table.set(offset + 0, undefined); + table.set(offset + 1, null); + table.set(offset + 2, true); + table.set(offset + 3, false); +}; diff --git a/rs/webbuf_blake3/build/bundler/webbuf_blake3_bg.wasm b/rs/webbuf_blake3/build/bundler/webbuf_blake3_bg.wasm index 345a4ce..c39d336 100644 Binary files a/rs/webbuf_blake3/build/bundler/webbuf_blake3_bg.wasm and b/rs/webbuf_blake3/build/bundler/webbuf_blake3_bg.wasm differ diff --git a/rs/webbuf_blake3/build/bundler/webbuf_blake3_bg.wasm.d.ts b/rs/webbuf_blake3/build/bundler/webbuf_blake3_bg.wasm.d.ts index 10eae96..730e46c 100644 --- a/rs/webbuf_blake3/build/bundler/webbuf_blake3_bg.wasm.d.ts +++ b/rs/webbuf_blake3/build/bundler/webbuf_blake3_bg.wasm.d.ts @@ -1,9 +1,17 @@ /* tslint:disable */ /* eslint-disable */ export const memory: WebAssembly.Memory; -export function blake3_hash(a: number, b: number, c: number): void; -export function double_blake3_hash(a: number, b: number, c: number): void; -export function blake3_mac(a: number, b: number, c: number, d: number, e: number): void; -export function __wbindgen_add_to_stack_pointer(a: number): number; -export function __wbindgen_malloc(a: number, b: number): number; -export function __wbindgen_free(a: number, b: number, c: number): void; +export const __wbg_blake3hasher_free: (a: number, b: number) => void; +export const blake3_hash: (a: number, b: number) => [number, number, number, number]; +export const blake3_mac: (a: number, b: number, c: number, d: number) => [number, number, number, number]; +export const blake3hasher_finalize: (a: number) => [number, number]; +export const blake3hasher_new: () => number; +export const blake3hasher_new_keyed: (a: number, b: number) => [number, number, number]; +export const blake3hasher_reset: (a: number) => void; +export const blake3hasher_update: (a: number, b: number, c: number) => void; +export const double_blake3_hash: (a: number, b: number) => [number, number, number, number]; +export const __wbindgen_externrefs: WebAssembly.Table; +export const __wbindgen_malloc: (a: number, b: number) => number; +export const __wbindgen_free: (a: number, b: number, c: number) => void; +export const __externref_table_dealloc: (a: number) => void; +export const __wbindgen_start: () => void; diff --git a/rs/webbuf_blake3/src/lib.rs b/rs/webbuf_blake3/src/lib.rs index 3411b10..929f06d 100644 --- a/rs/webbuf_blake3/src/lib.rs +++ b/rs/webbuf_blake3/src/lib.rs @@ -28,6 +28,57 @@ pub fn blake3_mac(key: &[u8], data: &[u8]) -> Result, String> { Ok(hasher.finalize().as_bytes().to_vec()) } +/// Incremental BLAKE3 hasher that maintains state across multiple `update` calls. +#[cfg_attr(feature = "wasm", wasm_bindgen)] +pub struct Blake3Hasher { + inner: Hasher, +} + +#[cfg_attr(feature = "wasm", wasm_bindgen)] +impl Blake3Hasher { + /// Create a new incremental BLAKE3 hasher. + #[cfg_attr(feature = "wasm", wasm_bindgen(constructor))] + pub fn new() -> Self { + Self { + inner: Hasher::new(), + } + } + + /// Create a new incremental BLAKE3 keyed hasher (for MAC). + /// Key must be exactly 32 bytes. + pub fn new_keyed(key: &[u8]) -> Result { + let key32: [u8; 32] = key + .try_into() + .map_err(|_| "Key must be exactly 32 bytes".to_string())?; + Ok(Self { + inner: Hasher::new_keyed(&key32), + }) + } + + /// Feed data into the hasher. Can be called multiple times. + pub fn update(&mut self, data: &[u8]) { + self.inner.update(data); + } + + /// Finalize the hash and return the 32-byte digest. + /// This does NOT consume the hasher — you can continue calling `update` and + /// `finalize` again to get an extended hash of the data fed so far. + pub fn finalize(&self) -> Vec { + self.inner.finalize().as_bytes().to_vec() + } + + /// Reset the hasher to its initial state, allowing reuse. + pub fn reset(&mut self) { + self.inner.reset(); + } +} + +impl Default for Blake3Hasher { + fn default() -> Self { + Self::new() + } +} + #[cfg(test)] mod tests { use super::*; @@ -76,4 +127,45 @@ mod tests { assert_eq!(encode(mac), expected_mac_hex); } + + #[test] + fn test_incremental_hasher_matches_one_shot() { + let data = b"hello world this is a test of incremental hashing"; + let one_shot = blake3_hash(data).unwrap(); + + let mut hasher = Blake3Hasher::new(); + hasher.update(b"hello world "); + hasher.update(b"this is a test "); + hasher.update(b"of incremental hashing"); + let incremental = hasher.finalize(); + + assert_eq!(one_shot, incremental); + } + + #[test] + fn test_incremental_hasher_reset() { + let data = b"hello"; + let one_shot = blake3_hash(data).unwrap(); + + let mut hasher = Blake3Hasher::new(); + hasher.update(b"some garbage data"); + hasher.reset(); + hasher.update(b"hello"); + let result = hasher.finalize(); + + assert_eq!(one_shot, result); + } + + #[test] + fn test_incremental_keyed_hasher() { + let key_data = blake3_hash(b"key").unwrap(); + let mac_one_shot = blake3_mac(&key_data, b"data").unwrap(); + + let mut hasher = Blake3Hasher::new_keyed(&key_data).unwrap(); + hasher.update(b"da"); + hasher.update(b"ta"); + let mac_incremental = hasher.finalize(); + + assert_eq!(mac_one_shot, mac_incremental); + } } diff --git a/ts/npm-webbuf-blake3/src/index.ts b/ts/npm-webbuf-blake3/src/index.ts index bd00620..1ac743b 100644 --- a/ts/npm-webbuf-blake3/src/index.ts +++ b/ts/npm-webbuf-blake3/src/index.ts @@ -2,6 +2,7 @@ import { blake3_hash, double_blake3_hash, blake3_mac, + Blake3Hasher as WasmBlake3Hasher, } from "./rs-webbuf_blake3-inline-base64/webbuf_blake3.js"; import { WebBuf } from "@webbuf/webbuf"; import { FixedBuf } from "@webbuf/fixedbuf"; @@ -20,3 +21,87 @@ export function blake3Mac(key: FixedBuf<32>, message: WebBuf): FixedBuf<32> { const mac = blake3_mac(key.buf, message); return FixedBuf.fromBuf(32, WebBuf.fromUint8Array(mac)); } + +/** + * Incremental BLAKE3 hasher that maintains state across multiple `update` calls. + * Useful for hashing large files in chunks without loading the entire content + * into memory. + * + * @example + * ```ts + * const hasher = new Blake3Hasher(); + * hasher.update(chunk1); + * hasher.update(chunk2); + * const hash = hasher.finalize(); + * hasher.dispose(); // free WASM memory + * ``` + */ +export class Blake3Hasher { + private inner: WasmBlake3Hasher; + + constructor() { + this.inner = new WasmBlake3Hasher(); + } + + /** + * Create a new keyed (MAC) incremental hasher. + * Key must be exactly 32 bytes. + */ + static newKeyed(key: FixedBuf<32>): Blake3Hasher { + const hasher = Object.create(Blake3Hasher.prototype) as Blake3Hasher; + hasher.inner = WasmBlake3Hasher.new_keyed(key.buf); + return hasher; + } + + /** + * Feed data into the hasher. Can be called multiple times. + */ + update(data: WebBuf): this { + this.inner.update(data); + return this; + } + + /** + * Finalize and return the 32-byte BLAKE3 digest. + * This does NOT consume the hasher — you can continue calling `update` and + * `finalize` again to get the hash of all data fed so far. + */ + finalize(): FixedBuf<32> { + const hash = this.inner.finalize(); + return FixedBuf.fromBuf(32, WebBuf.fromUint8Array(hash)); + } + + /** + * Reset the hasher to its initial state for reuse. + */ + reset(): this { + this.inner.reset(); + return this; + } + + /** + * Free the underlying WASM memory. Call this when done with the hasher. + */ + dispose(): void { + this.inner.free(); + } + + [Symbol.dispose](): void { + this.dispose(); + } +} + +/** + * Create a new incremental BLAKE3 hasher. + */ +export function createBlake3Hasher(): Blake3Hasher { + return new Blake3Hasher(); +} + +/** + * Create a new keyed (MAC) incremental BLAKE3 hasher. + * Key must be exactly 32 bytes. + */ +export function createBlake3KeyedHasher(key: FixedBuf<32>): Blake3Hasher { + return Blake3Hasher.newKeyed(key); +} diff --git a/ts/npm-webbuf-blake3/src/rs-webbuf_blake3-bundler/webbuf_blake3.d.ts b/ts/npm-webbuf-blake3/src/rs-webbuf_blake3-bundler/webbuf_blake3.d.ts index 5d21967..bdd8485 100644 --- a/ts/npm-webbuf-blake3/src/rs-webbuf_blake3-bundler/webbuf_blake3.d.ts +++ b/ts/npm-webbuf-blake3/src/rs-webbuf_blake3-bundler/webbuf_blake3.d.ts @@ -1,18 +1,36 @@ /* tslint:disable */ /* eslint-disable */ -/** - * @param {Uint8Array} data - * @returns {Uint8Array} - */ + +export class Blake3Hasher { + free(): void; + [Symbol.dispose](): void; + /** + * Create a new incremental BLAKE3 hasher. + */ + constructor(); + /** + * Reset the hasher to its initial state, allowing reuse. + */ + reset(): void; + /** + * Feed data into the hasher. Can be called multiple times. + */ + update(data: Uint8Array): void; + /** + * Finalize the hash and return the 32-byte digest. + * This does NOT consume the hasher — you can continue calling `update` and + * `finalize` again to get an extended hash of the data fed so far. + */ + finalize(): Uint8Array; + /** + * Create a new incremental BLAKE3 keyed hasher (for MAC). + * Key must be exactly 32 bytes. + */ + static new_keyed(key: Uint8Array): Blake3Hasher; +} + export function blake3_hash(data: Uint8Array): Uint8Array; -/** - * @param {Uint8Array} data - * @returns {Uint8Array} - */ -export function double_blake3_hash(data: Uint8Array): Uint8Array; -/** - * @param {Uint8Array} key - * @param {Uint8Array} data - * @returns {Uint8Array} - */ + export function blake3_mac(key: Uint8Array, data: Uint8Array): Uint8Array; + +export function double_blake3_hash(data: Uint8Array): Uint8Array; diff --git a/ts/npm-webbuf-blake3/src/rs-webbuf_blake3-bundler/webbuf_blake3.js b/ts/npm-webbuf-blake3/src/rs-webbuf_blake3-bundler/webbuf_blake3.js index 25cd8f8..fe04c2d 100644 --- a/ts/npm-webbuf-blake3/src/rs-webbuf_blake3-bundler/webbuf_blake3.js +++ b/ts/npm-webbuf-blake3/src/rs-webbuf_blake3-bundler/webbuf_blake3.js @@ -1,4 +1,5 @@ import * as wasm from "./webbuf_blake3_bg.wasm"; export * from "./webbuf_blake3_bg.js"; import { __wbg_set_wasm } from "./webbuf_blake3_bg.js"; -__wbg_set_wasm(wasm); \ No newline at end of file +__wbg_set_wasm(wasm); +wasm.__wbindgen_start(); diff --git a/ts/npm-webbuf-blake3/src/rs-webbuf_blake3-bundler/webbuf_blake3_bg.js b/ts/npm-webbuf-blake3/src/rs-webbuf_blake3-bundler/webbuf_blake3_bg.js index 0e851bd..c678c23 100644 --- a/ts/npm-webbuf-blake3/src/rs-webbuf_blake3-bundler/webbuf_blake3_bg.js +++ b/ts/npm-webbuf-blake3/src/rs-webbuf_blake3-bundler/webbuf_blake3_bg.js @@ -3,15 +3,17 @@ export function __wbg_set_wasm(val) { wasm = val; } +function getArrayU8FromWasm0(ptr, len) { + ptr = ptr >>> 0; + return getUint8ArrayMemory0().subarray(ptr / 1, ptr / 1 + len); +} -const lTextDecoder = typeof TextDecoder === 'undefined' ? (0, module.require)('util').TextDecoder : TextDecoder; - -let cachedTextDecoder = new lTextDecoder('utf-8', { ignoreBOM: true, fatal: true }); - -cachedTextDecoder.decode(); +function getStringFromWasm0(ptr, len) { + ptr = ptr >>> 0; + return decodeText(ptr, len); +} let cachedUint8ArrayMemory0 = null; - function getUint8ArrayMemory0() { if (cachedUint8ArrayMemory0 === null || cachedUint8ArrayMemory0.byteLength === 0) { cachedUint8ArrayMemory0 = new Uint8Array(wasm.memory.buffer); @@ -19,28 +21,6 @@ function getUint8ArrayMemory0() { return cachedUint8ArrayMemory0; } -function getStringFromWasm0(ptr, len) { - ptr = ptr >>> 0; - return cachedTextDecoder.decode(getUint8ArrayMemory0().subarray(ptr, ptr + len)); -} - -const heap = new Array(128).fill(undefined); - -heap.push(undefined, null, true, false); - -let heap_next = heap.length; - -function addHeapObject(obj) { - if (heap_next === heap.length) heap.push(heap.length + 1); - const idx = heap_next; - heap_next = heap[idx]; - - heap[idx] = obj; - return idx; -} - -let WASM_VECTOR_LEN = 0; - function passArray8ToWasm0(arg, malloc) { const ptr = malloc(arg.length * 1, 1) >>> 0; getUint8ArrayMemory0().set(arg, ptr / 1); @@ -48,81 +28,121 @@ function passArray8ToWasm0(arg, malloc) { return ptr; } -let cachedDataViewMemory0 = null; +function takeFromExternrefTable0(idx) { + const value = wasm.__wbindgen_externrefs.get(idx); + wasm.__externref_table_dealloc(idx); + return value; +} -function getDataViewMemory0() { - if (cachedDataViewMemory0 === null || cachedDataViewMemory0.buffer.detached === true || (cachedDataViewMemory0.buffer.detached === undefined && cachedDataViewMemory0.buffer !== wasm.memory.buffer)) { - cachedDataViewMemory0 = new DataView(wasm.memory.buffer); +let cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true }); +cachedTextDecoder.decode(); +const MAX_SAFARI_DECODE_BYTES = 2146435072; +let numBytesDecoded = 0; +function decodeText(ptr, len) { + numBytesDecoded += len; + if (numBytesDecoded >= MAX_SAFARI_DECODE_BYTES) { + cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true }); + cachedTextDecoder.decode(); + numBytesDecoded = len; } - return cachedDataViewMemory0; + return cachedTextDecoder.decode(getUint8ArrayMemory0().subarray(ptr, ptr + len)); } -function getObject(idx) { return heap[idx]; } - -function dropObject(idx) { - if (idx < 132) return; - heap[idx] = heap_next; - heap_next = idx; -} +let WASM_VECTOR_LEN = 0; -function takeObject(idx) { - const ret = getObject(idx); - dropObject(idx); - return ret; -} +const Blake3HasherFinalization = (typeof FinalizationRegistry === 'undefined') + ? { register: () => {}, unregister: () => {} } + : new FinalizationRegistry(ptr => wasm.__wbg_blake3hasher_free(ptr >>> 0, 1)); -function getArrayU8FromWasm0(ptr, len) { - ptr = ptr >>> 0; - return getUint8ArrayMemory0().subarray(ptr / 1, ptr / 1 + len); -} /** - * @param {Uint8Array} data - * @returns {Uint8Array} + * Incremental BLAKE3 hasher that maintains state across multiple `update` calls. */ -export function blake3_hash(data) { - try { - const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); +export class Blake3Hasher { + static __wrap(ptr) { + ptr = ptr >>> 0; + const obj = Object.create(Blake3Hasher.prototype); + obj.__wbg_ptr = ptr; + Blake3HasherFinalization.register(obj, obj.__wbg_ptr, obj); + return obj; + } + __destroy_into_raw() { + const ptr = this.__wbg_ptr; + this.__wbg_ptr = 0; + Blake3HasherFinalization.unregister(this); + return ptr; + } + free() { + const ptr = this.__destroy_into_raw(); + wasm.__wbg_blake3hasher_free(ptr, 0); + } + /** + * Create a new incremental BLAKE3 hasher. + */ + constructor() { + const ret = wasm.blake3hasher_new(); + this.__wbg_ptr = ret >>> 0; + Blake3HasherFinalization.register(this, this.__wbg_ptr, this); + return this; + } + /** + * Reset the hasher to its initial state, allowing reuse. + */ + reset() { + wasm.blake3hasher_reset(this.__wbg_ptr); + } + /** + * Feed data into the hasher. Can be called multiple times. + * @param {Uint8Array} data + */ + update(data) { const ptr0 = passArray8ToWasm0(data, wasm.__wbindgen_malloc); const len0 = WASM_VECTOR_LEN; - wasm.blake3_hash(retptr, ptr0, len0); - var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true); - var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true); - var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true); - var r3 = getDataViewMemory0().getInt32(retptr + 4 * 3, true); - if (r3) { - throw takeObject(r2); + wasm.blake3hasher_update(this.__wbg_ptr, ptr0, len0); + } + /** + * Finalize the hash and return the 32-byte digest. + * This does NOT consume the hasher — you can continue calling `update` and + * `finalize` again to get an extended hash of the data fed so far. + * @returns {Uint8Array} + */ + finalize() { + const ret = wasm.blake3hasher_finalize(this.__wbg_ptr); + var v1 = getArrayU8FromWasm0(ret[0], ret[1]).slice(); + wasm.__wbindgen_free(ret[0], ret[1] * 1, 1); + return v1; + } + /** + * Create a new incremental BLAKE3 keyed hasher (for MAC). + * Key must be exactly 32 bytes. + * @param {Uint8Array} key + * @returns {Blake3Hasher} + */ + static new_keyed(key) { + const ptr0 = passArray8ToWasm0(key, wasm.__wbindgen_malloc); + const len0 = WASM_VECTOR_LEN; + const ret = wasm.blake3hasher_new_keyed(ptr0, len0); + if (ret[2]) { + throw takeFromExternrefTable0(ret[1]); } - var v2 = getArrayU8FromWasm0(r0, r1).slice(); - wasm.__wbindgen_free(r0, r1 * 1, 1); - return v2; - } finally { - wasm.__wbindgen_add_to_stack_pointer(16); + return Blake3Hasher.__wrap(ret[0]); } } +if (Symbol.dispose) Blake3Hasher.prototype[Symbol.dispose] = Blake3Hasher.prototype.free; /** * @param {Uint8Array} data * @returns {Uint8Array} */ -export function double_blake3_hash(data) { - try { - const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); - const ptr0 = passArray8ToWasm0(data, wasm.__wbindgen_malloc); - const len0 = WASM_VECTOR_LEN; - wasm.double_blake3_hash(retptr, ptr0, len0); - var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true); - var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true); - var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true); - var r3 = getDataViewMemory0().getInt32(retptr + 4 * 3, true); - if (r3) { - throw takeObject(r2); - } - var v2 = getArrayU8FromWasm0(r0, r1).slice(); - wasm.__wbindgen_free(r0, r1 * 1, 1); - return v2; - } finally { - wasm.__wbindgen_add_to_stack_pointer(16); +export function blake3_hash(data) { + const ptr0 = passArray8ToWasm0(data, wasm.__wbindgen_malloc); + const len0 = WASM_VECTOR_LEN; + const ret = wasm.blake3_hash(ptr0, len0); + if (ret[3]) { + throw takeFromExternrefTable0(ret[2]); } + var v2 = getArrayU8FromWasm0(ret[0], ret[1]).slice(); + wasm.__wbindgen_free(ret[0], ret[1] * 1, 1); + return v2; } /** @@ -131,30 +151,51 @@ export function double_blake3_hash(data) { * @returns {Uint8Array} */ export function blake3_mac(key, data) { - try { - const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); - const ptr0 = passArray8ToWasm0(key, wasm.__wbindgen_malloc); - const len0 = WASM_VECTOR_LEN; - const ptr1 = passArray8ToWasm0(data, wasm.__wbindgen_malloc); - const len1 = WASM_VECTOR_LEN; - wasm.blake3_mac(retptr, ptr0, len0, ptr1, len1); - var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true); - var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true); - var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true); - var r3 = getDataViewMemory0().getInt32(retptr + 4 * 3, true); - if (r3) { - throw takeObject(r2); - } - var v3 = getArrayU8FromWasm0(r0, r1).slice(); - wasm.__wbindgen_free(r0, r1 * 1, 1); - return v3; - } finally { - wasm.__wbindgen_add_to_stack_pointer(16); + const ptr0 = passArray8ToWasm0(key, wasm.__wbindgen_malloc); + const len0 = WASM_VECTOR_LEN; + const ptr1 = passArray8ToWasm0(data, wasm.__wbindgen_malloc); + const len1 = WASM_VECTOR_LEN; + const ret = wasm.blake3_mac(ptr0, len0, ptr1, len1); + if (ret[3]) { + throw takeFromExternrefTable0(ret[2]); } + var v3 = getArrayU8FromWasm0(ret[0], ret[1]).slice(); + wasm.__wbindgen_free(ret[0], ret[1] * 1, 1); + return v3; } -export function __wbindgen_string_new(arg0, arg1) { +/** + * @param {Uint8Array} data + * @returns {Uint8Array} + */ +export function double_blake3_hash(data) { + const ptr0 = passArray8ToWasm0(data, wasm.__wbindgen_malloc); + const len0 = WASM_VECTOR_LEN; + const ret = wasm.double_blake3_hash(ptr0, len0); + if (ret[3]) { + throw takeFromExternrefTable0(ret[2]); + } + var v2 = getArrayU8FromWasm0(ret[0], ret[1]).slice(); + wasm.__wbindgen_free(ret[0], ret[1] * 1, 1); + return v2; +} + +export function __wbg___wbindgen_throw_dd24417ed36fc46e(arg0, arg1) { + throw new Error(getStringFromWasm0(arg0, arg1)); +}; + +export function __wbindgen_cast_2241b6af4c4b2941(arg0, arg1) { + // Cast intrinsic for `Ref(String) -> Externref`. const ret = getStringFromWasm0(arg0, arg1); - return addHeapObject(ret); + return ret; }; +export function __wbindgen_init_externref_table() { + const table = wasm.__wbindgen_externrefs; + const offset = table.grow(4); + table.set(0, undefined); + table.set(offset + 0, undefined); + table.set(offset + 1, null); + table.set(offset + 2, true); + table.set(offset + 3, false); +}; diff --git a/ts/npm-webbuf-blake3/src/rs-webbuf_blake3-bundler/webbuf_blake3_bg.wasm b/ts/npm-webbuf-blake3/src/rs-webbuf_blake3-bundler/webbuf_blake3_bg.wasm index 345a4ce..c39d336 100644 Binary files a/ts/npm-webbuf-blake3/src/rs-webbuf_blake3-bundler/webbuf_blake3_bg.wasm and b/ts/npm-webbuf-blake3/src/rs-webbuf_blake3-bundler/webbuf_blake3_bg.wasm differ diff --git a/ts/npm-webbuf-blake3/src/rs-webbuf_blake3-bundler/webbuf_blake3_bg.wasm.d.ts b/ts/npm-webbuf-blake3/src/rs-webbuf_blake3-bundler/webbuf_blake3_bg.wasm.d.ts index 10eae96..730e46c 100644 --- a/ts/npm-webbuf-blake3/src/rs-webbuf_blake3-bundler/webbuf_blake3_bg.wasm.d.ts +++ b/ts/npm-webbuf-blake3/src/rs-webbuf_blake3-bundler/webbuf_blake3_bg.wasm.d.ts @@ -1,9 +1,17 @@ /* tslint:disable */ /* eslint-disable */ export const memory: WebAssembly.Memory; -export function blake3_hash(a: number, b: number, c: number): void; -export function double_blake3_hash(a: number, b: number, c: number): void; -export function blake3_mac(a: number, b: number, c: number, d: number, e: number): void; -export function __wbindgen_add_to_stack_pointer(a: number): number; -export function __wbindgen_malloc(a: number, b: number): number; -export function __wbindgen_free(a: number, b: number, c: number): void; +export const __wbg_blake3hasher_free: (a: number, b: number) => void; +export const blake3_hash: (a: number, b: number) => [number, number, number, number]; +export const blake3_mac: (a: number, b: number, c: number, d: number) => [number, number, number, number]; +export const blake3hasher_finalize: (a: number) => [number, number]; +export const blake3hasher_new: () => number; +export const blake3hasher_new_keyed: (a: number, b: number) => [number, number, number]; +export const blake3hasher_reset: (a: number) => void; +export const blake3hasher_update: (a: number, b: number, c: number) => void; +export const double_blake3_hash: (a: number, b: number) => [number, number, number, number]; +export const __wbindgen_externrefs: WebAssembly.Table; +export const __wbindgen_malloc: (a: number, b: number) => number; +export const __wbindgen_free: (a: number, b: number, c: number) => void; +export const __externref_table_dealloc: (a: number) => void; +export const __wbindgen_start: () => void; diff --git a/ts/npm-webbuf-blake3/src/rs-webbuf_blake3-inline-base64/webbuf_blake3.d.ts b/ts/npm-webbuf-blake3/src/rs-webbuf_blake3-inline-base64/webbuf_blake3.d.ts index 5d21967..bdd8485 100644 --- a/ts/npm-webbuf-blake3/src/rs-webbuf_blake3-inline-base64/webbuf_blake3.d.ts +++ b/ts/npm-webbuf-blake3/src/rs-webbuf_blake3-inline-base64/webbuf_blake3.d.ts @@ -1,18 +1,36 @@ /* tslint:disable */ /* eslint-disable */ -/** - * @param {Uint8Array} data - * @returns {Uint8Array} - */ + +export class Blake3Hasher { + free(): void; + [Symbol.dispose](): void; + /** + * Create a new incremental BLAKE3 hasher. + */ + constructor(); + /** + * Reset the hasher to its initial state, allowing reuse. + */ + reset(): void; + /** + * Feed data into the hasher. Can be called multiple times. + */ + update(data: Uint8Array): void; + /** + * Finalize the hash and return the 32-byte digest. + * This does NOT consume the hasher — you can continue calling `update` and + * `finalize` again to get an extended hash of the data fed so far. + */ + finalize(): Uint8Array; + /** + * Create a new incremental BLAKE3 keyed hasher (for MAC). + * Key must be exactly 32 bytes. + */ + static new_keyed(key: Uint8Array): Blake3Hasher; +} + export function blake3_hash(data: Uint8Array): Uint8Array; -/** - * @param {Uint8Array} data - * @returns {Uint8Array} - */ -export function double_blake3_hash(data: Uint8Array): Uint8Array; -/** - * @param {Uint8Array} key - * @param {Uint8Array} data - * @returns {Uint8Array} - */ + export function blake3_mac(key: Uint8Array, data: Uint8Array): Uint8Array; + +export function double_blake3_hash(data: Uint8Array): Uint8Array; diff --git a/ts/npm-webbuf-blake3/src/rs-webbuf_blake3-inline-base64/webbuf_blake3.js b/ts/npm-webbuf-blake3/src/rs-webbuf_blake3-inline-base64/webbuf_blake3.js index 11786ed..0df2dce 100644 --- a/ts/npm-webbuf-blake3/src/rs-webbuf_blake3-inline-base64/webbuf_blake3.js +++ b/ts/npm-webbuf-blake3/src/rs-webbuf_blake3-inline-base64/webbuf_blake3.js @@ -1,4 +1,5 @@ import { wasm } from "./webbuf_blake3_bg.wasm.js"; export * from "./webbuf_blake3_bg.js"; import { __wbg_set_wasm } from "./webbuf_blake3_bg.js"; -__wbg_set_wasm(wasm); \ No newline at end of file +__wbg_set_wasm(wasm); +wasm.__wbindgen_start(); diff --git a/ts/npm-webbuf-blake3/src/rs-webbuf_blake3-inline-base64/webbuf_blake3_bg.js b/ts/npm-webbuf-blake3/src/rs-webbuf_blake3-inline-base64/webbuf_blake3_bg.js index 0e851bd..c678c23 100644 --- a/ts/npm-webbuf-blake3/src/rs-webbuf_blake3-inline-base64/webbuf_blake3_bg.js +++ b/ts/npm-webbuf-blake3/src/rs-webbuf_blake3-inline-base64/webbuf_blake3_bg.js @@ -3,15 +3,17 @@ export function __wbg_set_wasm(val) { wasm = val; } +function getArrayU8FromWasm0(ptr, len) { + ptr = ptr >>> 0; + return getUint8ArrayMemory0().subarray(ptr / 1, ptr / 1 + len); +} -const lTextDecoder = typeof TextDecoder === 'undefined' ? (0, module.require)('util').TextDecoder : TextDecoder; - -let cachedTextDecoder = new lTextDecoder('utf-8', { ignoreBOM: true, fatal: true }); - -cachedTextDecoder.decode(); +function getStringFromWasm0(ptr, len) { + ptr = ptr >>> 0; + return decodeText(ptr, len); +} let cachedUint8ArrayMemory0 = null; - function getUint8ArrayMemory0() { if (cachedUint8ArrayMemory0 === null || cachedUint8ArrayMemory0.byteLength === 0) { cachedUint8ArrayMemory0 = new Uint8Array(wasm.memory.buffer); @@ -19,28 +21,6 @@ function getUint8ArrayMemory0() { return cachedUint8ArrayMemory0; } -function getStringFromWasm0(ptr, len) { - ptr = ptr >>> 0; - return cachedTextDecoder.decode(getUint8ArrayMemory0().subarray(ptr, ptr + len)); -} - -const heap = new Array(128).fill(undefined); - -heap.push(undefined, null, true, false); - -let heap_next = heap.length; - -function addHeapObject(obj) { - if (heap_next === heap.length) heap.push(heap.length + 1); - const idx = heap_next; - heap_next = heap[idx]; - - heap[idx] = obj; - return idx; -} - -let WASM_VECTOR_LEN = 0; - function passArray8ToWasm0(arg, malloc) { const ptr = malloc(arg.length * 1, 1) >>> 0; getUint8ArrayMemory0().set(arg, ptr / 1); @@ -48,81 +28,121 @@ function passArray8ToWasm0(arg, malloc) { return ptr; } -let cachedDataViewMemory0 = null; +function takeFromExternrefTable0(idx) { + const value = wasm.__wbindgen_externrefs.get(idx); + wasm.__externref_table_dealloc(idx); + return value; +} -function getDataViewMemory0() { - if (cachedDataViewMemory0 === null || cachedDataViewMemory0.buffer.detached === true || (cachedDataViewMemory0.buffer.detached === undefined && cachedDataViewMemory0.buffer !== wasm.memory.buffer)) { - cachedDataViewMemory0 = new DataView(wasm.memory.buffer); +let cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true }); +cachedTextDecoder.decode(); +const MAX_SAFARI_DECODE_BYTES = 2146435072; +let numBytesDecoded = 0; +function decodeText(ptr, len) { + numBytesDecoded += len; + if (numBytesDecoded >= MAX_SAFARI_DECODE_BYTES) { + cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true }); + cachedTextDecoder.decode(); + numBytesDecoded = len; } - return cachedDataViewMemory0; + return cachedTextDecoder.decode(getUint8ArrayMemory0().subarray(ptr, ptr + len)); } -function getObject(idx) { return heap[idx]; } - -function dropObject(idx) { - if (idx < 132) return; - heap[idx] = heap_next; - heap_next = idx; -} +let WASM_VECTOR_LEN = 0; -function takeObject(idx) { - const ret = getObject(idx); - dropObject(idx); - return ret; -} +const Blake3HasherFinalization = (typeof FinalizationRegistry === 'undefined') + ? { register: () => {}, unregister: () => {} } + : new FinalizationRegistry(ptr => wasm.__wbg_blake3hasher_free(ptr >>> 0, 1)); -function getArrayU8FromWasm0(ptr, len) { - ptr = ptr >>> 0; - return getUint8ArrayMemory0().subarray(ptr / 1, ptr / 1 + len); -} /** - * @param {Uint8Array} data - * @returns {Uint8Array} + * Incremental BLAKE3 hasher that maintains state across multiple `update` calls. */ -export function blake3_hash(data) { - try { - const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); +export class Blake3Hasher { + static __wrap(ptr) { + ptr = ptr >>> 0; + const obj = Object.create(Blake3Hasher.prototype); + obj.__wbg_ptr = ptr; + Blake3HasherFinalization.register(obj, obj.__wbg_ptr, obj); + return obj; + } + __destroy_into_raw() { + const ptr = this.__wbg_ptr; + this.__wbg_ptr = 0; + Blake3HasherFinalization.unregister(this); + return ptr; + } + free() { + const ptr = this.__destroy_into_raw(); + wasm.__wbg_blake3hasher_free(ptr, 0); + } + /** + * Create a new incremental BLAKE3 hasher. + */ + constructor() { + const ret = wasm.blake3hasher_new(); + this.__wbg_ptr = ret >>> 0; + Blake3HasherFinalization.register(this, this.__wbg_ptr, this); + return this; + } + /** + * Reset the hasher to its initial state, allowing reuse. + */ + reset() { + wasm.blake3hasher_reset(this.__wbg_ptr); + } + /** + * Feed data into the hasher. Can be called multiple times. + * @param {Uint8Array} data + */ + update(data) { const ptr0 = passArray8ToWasm0(data, wasm.__wbindgen_malloc); const len0 = WASM_VECTOR_LEN; - wasm.blake3_hash(retptr, ptr0, len0); - var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true); - var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true); - var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true); - var r3 = getDataViewMemory0().getInt32(retptr + 4 * 3, true); - if (r3) { - throw takeObject(r2); + wasm.blake3hasher_update(this.__wbg_ptr, ptr0, len0); + } + /** + * Finalize the hash and return the 32-byte digest. + * This does NOT consume the hasher — you can continue calling `update` and + * `finalize` again to get an extended hash of the data fed so far. + * @returns {Uint8Array} + */ + finalize() { + const ret = wasm.blake3hasher_finalize(this.__wbg_ptr); + var v1 = getArrayU8FromWasm0(ret[0], ret[1]).slice(); + wasm.__wbindgen_free(ret[0], ret[1] * 1, 1); + return v1; + } + /** + * Create a new incremental BLAKE3 keyed hasher (for MAC). + * Key must be exactly 32 bytes. + * @param {Uint8Array} key + * @returns {Blake3Hasher} + */ + static new_keyed(key) { + const ptr0 = passArray8ToWasm0(key, wasm.__wbindgen_malloc); + const len0 = WASM_VECTOR_LEN; + const ret = wasm.blake3hasher_new_keyed(ptr0, len0); + if (ret[2]) { + throw takeFromExternrefTable0(ret[1]); } - var v2 = getArrayU8FromWasm0(r0, r1).slice(); - wasm.__wbindgen_free(r0, r1 * 1, 1); - return v2; - } finally { - wasm.__wbindgen_add_to_stack_pointer(16); + return Blake3Hasher.__wrap(ret[0]); } } +if (Symbol.dispose) Blake3Hasher.prototype[Symbol.dispose] = Blake3Hasher.prototype.free; /** * @param {Uint8Array} data * @returns {Uint8Array} */ -export function double_blake3_hash(data) { - try { - const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); - const ptr0 = passArray8ToWasm0(data, wasm.__wbindgen_malloc); - const len0 = WASM_VECTOR_LEN; - wasm.double_blake3_hash(retptr, ptr0, len0); - var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true); - var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true); - var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true); - var r3 = getDataViewMemory0().getInt32(retptr + 4 * 3, true); - if (r3) { - throw takeObject(r2); - } - var v2 = getArrayU8FromWasm0(r0, r1).slice(); - wasm.__wbindgen_free(r0, r1 * 1, 1); - return v2; - } finally { - wasm.__wbindgen_add_to_stack_pointer(16); +export function blake3_hash(data) { + const ptr0 = passArray8ToWasm0(data, wasm.__wbindgen_malloc); + const len0 = WASM_VECTOR_LEN; + const ret = wasm.blake3_hash(ptr0, len0); + if (ret[3]) { + throw takeFromExternrefTable0(ret[2]); } + var v2 = getArrayU8FromWasm0(ret[0], ret[1]).slice(); + wasm.__wbindgen_free(ret[0], ret[1] * 1, 1); + return v2; } /** @@ -131,30 +151,51 @@ export function double_blake3_hash(data) { * @returns {Uint8Array} */ export function blake3_mac(key, data) { - try { - const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); - const ptr0 = passArray8ToWasm0(key, wasm.__wbindgen_malloc); - const len0 = WASM_VECTOR_LEN; - const ptr1 = passArray8ToWasm0(data, wasm.__wbindgen_malloc); - const len1 = WASM_VECTOR_LEN; - wasm.blake3_mac(retptr, ptr0, len0, ptr1, len1); - var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true); - var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true); - var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true); - var r3 = getDataViewMemory0().getInt32(retptr + 4 * 3, true); - if (r3) { - throw takeObject(r2); - } - var v3 = getArrayU8FromWasm0(r0, r1).slice(); - wasm.__wbindgen_free(r0, r1 * 1, 1); - return v3; - } finally { - wasm.__wbindgen_add_to_stack_pointer(16); + const ptr0 = passArray8ToWasm0(key, wasm.__wbindgen_malloc); + const len0 = WASM_VECTOR_LEN; + const ptr1 = passArray8ToWasm0(data, wasm.__wbindgen_malloc); + const len1 = WASM_VECTOR_LEN; + const ret = wasm.blake3_mac(ptr0, len0, ptr1, len1); + if (ret[3]) { + throw takeFromExternrefTable0(ret[2]); } + var v3 = getArrayU8FromWasm0(ret[0], ret[1]).slice(); + wasm.__wbindgen_free(ret[0], ret[1] * 1, 1); + return v3; } -export function __wbindgen_string_new(arg0, arg1) { +/** + * @param {Uint8Array} data + * @returns {Uint8Array} + */ +export function double_blake3_hash(data) { + const ptr0 = passArray8ToWasm0(data, wasm.__wbindgen_malloc); + const len0 = WASM_VECTOR_LEN; + const ret = wasm.double_blake3_hash(ptr0, len0); + if (ret[3]) { + throw takeFromExternrefTable0(ret[2]); + } + var v2 = getArrayU8FromWasm0(ret[0], ret[1]).slice(); + wasm.__wbindgen_free(ret[0], ret[1] * 1, 1); + return v2; +} + +export function __wbg___wbindgen_throw_dd24417ed36fc46e(arg0, arg1) { + throw new Error(getStringFromWasm0(arg0, arg1)); +}; + +export function __wbindgen_cast_2241b6af4c4b2941(arg0, arg1) { + // Cast intrinsic for `Ref(String) -> Externref`. const ret = getStringFromWasm0(arg0, arg1); - return addHeapObject(ret); + return ret; }; +export function __wbindgen_init_externref_table() { + const table = wasm.__wbindgen_externrefs; + const offset = table.grow(4); + table.set(0, undefined); + table.set(offset + 0, undefined); + table.set(offset + 1, null); + table.set(offset + 2, true); + table.set(offset + 3, false); +}; diff --git a/ts/npm-webbuf-blake3/src/rs-webbuf_blake3-inline-base64/webbuf_blake3_bg.wasm b/ts/npm-webbuf-blake3/src/rs-webbuf_blake3-inline-base64/webbuf_blake3_bg.wasm index 345a4ce..c39d336 100644 Binary files a/ts/npm-webbuf-blake3/src/rs-webbuf_blake3-inline-base64/webbuf_blake3_bg.wasm and b/ts/npm-webbuf-blake3/src/rs-webbuf_blake3-inline-base64/webbuf_blake3_bg.wasm differ diff --git a/ts/npm-webbuf-blake3/src/rs-webbuf_blake3-inline-base64/webbuf_blake3_bg.wasm.js b/ts/npm-webbuf-blake3/src/rs-webbuf_blake3-inline-base64/webbuf_blake3_bg.wasm.js index 8a12a22..b7dcf71 100644 --- a/ts/npm-webbuf-blake3/src/rs-webbuf_blake3-inline-base64/webbuf_blake3_bg.wasm.js +++ b/ts/npm-webbuf-blake3/src/rs-webbuf_blake3-inline-base64/webbuf_blake3_bg.wasm.js @@ -1,6 +1,6 @@ import * as webbuf_blake3_bg from './webbuf_blake3_bg.js'; -const wasmBase64 = "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AhQhCCADKAIMIQ8gAygCBCELIAMoAgAhDSAAIAApA4ABEAUgACgCkAEiDkE3SQRAIAAgDkEFdGoiBEGwAWogBzYCACAEQawBaiAGNgIAIARBqAFqIAg2AgAgBEGkAWogCTYCACAEQaABaiAPNgIAIARBnAFqIAw2AgAgBEGYAWogCzYCACAEQZQBaiANNgIAIAAgDkEBajYCkAEgE0IANwMAIBRCADcDACAVQgA3AwAgF0IANwMAIBhCADcDACAZQgA3AwAgGkIANwMAIBAgAEEIaikDADcDACARIABBEGopAwA3AwAgEiAAQRhqKQMANwMAIANCADcDcCADIAApAwA3A7ABIAApA4ABIRwgBSAbQeAAEDkaIABBADsBiAEgACAcQgF8NwOAASABIApqIQEMAQsgAyAHNgKMASADIAY2AogBIAMgCDYChAEgAyAJNgKAASADIA82AnwgAyAMNgJ4IAMgCzYCdCADIA02AnAgA0HwAGpBvITAAEGIg8AAEBoACyACQYEITwRAIABBlAFqIQ8gACkDgAEhHCADQUBrIQwgA0GwAWohCSADQZABaiEKA0AgHEIKhiEdQX8gAkEBdmd2QQFqIQQDQCAEIgVBAXYhBCAdIAVBAWutg0IAUg0ACyAFQQp2rSEdAkAgBUGBCE8EQCACIAVJDQUgA0HwAGohBiAALQCKASELIwBB4ABrIgQkACAEQThqIg1CADcDACAEQTBqIg5CADcDACAEQShqIhBCADcDACAEQSBqIhFCADcDACAEQRhqIhJCADcDACAEQRBqIhNCADcDACAEQQhqIhRCADcDACAEQgA3AwAgASAFIAAgHCALIARBwAAQBCEHIARB2ABqQgA3AwAgBEHQAGpCADcDACAEQcgAakIANwMAIARCADcDQAJAAkACQAJAIAdBA08EQANAIAdBBXQiB0HBAE8NAiAEIAcgACALIARBQGsiFUEgEAkiB0EFdCIIQcEATw0DIAhBIU8NBCAEIBUgCBA5GiAHQQJLDQALCyAGIAQpAwA3AAAgBkE4aiANKQMANwAAIAZBMGogDikDADcAACAGQShqIBApAwA3AAAgBkEgaiARKQMANwAAIAZBGGogEikDADcAACAGQRBqIBMpAwA3AAAgBkEIaiAUKQMANwAAIARB4ABqJAAMAwsgB0HAAEG4gsAAEB0ACyAIQcAAQciCwAAQHQALIAhBIEHYgsAAEB0ACyAAIAApA4ABEAUgACgCkAEiBkE3Tw0GIA8gBkEFdGoiBEEYaiADQYgBaikAADcAACAEQRBqIANBgAFqKQAANwAAIARBCGogA0H4AGopAAA3AAAgBCADKQBwNwAAIAAgBkEBajYCkAEgACAAKQOAASAdQgGIfBAFIAAoApABIgZBN08NByAPIAZBBXRqIgRBGGogCkEYaikAADcAACAEIAopAAA3AAAgBEEQaiAKQRBqKQAANwAAIARBCGogCkEIaikAADcAACAAIAZBAWo2ApABDAELIANB+ABqQgA3AwAgA0GAAWpCADcDACADQYgBakIANwMAIApCADcDACADQZgBakIANwMAIANBoAFqQgA3AwAgA0GoAWpCADcDACAJIAApAwA3AwAgCUEIaiIGIABBCGopAwA3AwAgCUEQaiIHIABBEGopAwA3AwAgCUEYaiIIIABBGGopAwA3AwAgA0IANwNwIANBADsB2AEgAyAcNwPQASADIAAtAIoBOgDaASADQfAAaiABIAUQCyEEIAwgCSkDADcDACAMQQhqIAYpAwA3AwAgDEEQaiAHKQMANwMAIAxBGGogCCkDADcDACADQQhqIARBCGopAwA3AwAgA0EQaiAEQRBqKQMANwMAIANBGGogBEEYaikDADcDACADQSBqIARBIGopAwA3AwAgA0EoaiAEQShqKQMANwMAIANBMGogBEEwaikDADcDACADQThqIARBOGopAwA3AwAgAyAEKQMANwMAIAMtANoBIQQgAy0A2QEhCyADIAMtANgBIg06AGggAyADKQPQASIcNwNgIAMgBCALRXJBAnIiBDoAaSADQfgBaiILIAgpAgA3AwAgA0HwAWoiCCAHKQIANwMAIANB6AFqIg4gBikCADcDACADIAkpAgA3A+ABIANB4AFqIAMgDSAcIAQQASALKAIAIQYgCCgCACEHIA4oAgAhCCADKAL8ASELIAMoAvQBIQ0gAygC7AEhDiADKALkASEQIAMoAuABIREgACAAKQOAARAFIAAoApABIhJBN08NByAPIBJBBXRqIgQgCzYCHCAEIAY2AhggBCANNgIUIAQgBzYCECAEIA42AgwgBCAINgIIIAQgEDYCBCAEIBE2AgAgACASQQFqNgKQAQsgACAAKQOAASAdfCIcNwOAASACIAVJDQcgASAFaiEBIAIgBWsiAkGACEsNAAsLIAJFDQAgFiABIAIQCxogACAAKQOAARAFCyADQYACaiQADwsgBSACQZiDwAAQHQALIANBGGogA0GIAWopAAA3AwAgA0EQaiADQYABaikAADcDACADQQhqIANB+ABqKQAANwMAIAMgAykAcDcDAAwDCyADQRhqIApBGGopAAA3AwAgA0EQaiAKQRBqKQAANwMAIANBCGogCkEIaikAADcDACADIAopAAA3AwAMAgsgAyALNgL8ASADIAY2AvgBIAMgDTYC9AEgAyAHNgLwASADIA42AuwBIAMgCDYC6AEgAyAQNgLkASADIBE2AuABIANB4AFqQbyEwABBiIPAABAaAAsgBSACQaiDwAAQGwALIANBvITAAEGIg8AAEBoAC8cNAg1/AX4jAEGgAmsiByQAAkACQAJAAkACQCABQYEITwRAIAFBgAhBfyABQQFrQQt2Z3ZBCnRBgAhqIAFBgRBJIg0bIglPDQEgB0EANgIYIAdBATYCDCAHQciAwAA2AgggB0IENwIQIAdBCGpBiILAABAgAAsgB0EANgKIASABQYAIcSIOBEAgByAANgKMASAHQQE2AogBQQEhCwsgB0GMAWohDCADIRQgBSEKIwBBIGsiCCQAIAsgBkEFdiIJIAkgC0sbIg0EQCAEQQJyIQ8gBEEBciEQA0AgDCgCACEJIAhBGGoiESACQRhqKQIANwMAIAhBEGoiEiACQRBqKQIANwMAIAhBCGoiEyACQQhqKQIANwMAIAggAikCADcDACAIIAlBwAAgFCAQEAEgCCAJQUBrQcAAIBQgBBABIAggCUGAAWpBwAAgFCAEEAEgCCAJQcABakHAACAUIAQQASAIIAlBgAJqQcAAIBQgBBABIAggCUHAAmpBwAAgFCAEEAEgCCAJQYADakHAACAUIAQQASAIIAlBwANqQcAAIBQgBBABIAggCUGABGpBwAAgFCAEEAEgCCAJQcAEakHAACAUIAQQASAIIAlBgAVqQcAAIBQgBBABIAggCUHABWpBwAAgFCAEEAEgCCAJQYAGakHAACAUIAQQASAIIAlBwAZqQcAAIBQgBBABIAggCUGAB2pBwAAgFCAEEAEgCCAJQcAHakHAACAUIA8QASAKQRhqIBEpAwA3AAAgCkEQaiASKQMANwAAIApBCGogEykDADcAACAKIAgpAwA3AAAgDEEEaiEMIApBIGohCiAUQgF8IRQgDUEBayINDQALCyAIQSBqJAAgAUH/B3EiCUUNASAHQcgBakIANwMAIAdBwAFqQgA3AwAgB0G4AWpCADcDACAHQbABakIANwMAIAdBqAFqQgA3AwAgB0GgAWpCADcDACAHQZgBakIANwMAIAdB2AFqIgEgAkEIaikCADcDACAHQeABaiIKIAJBEGopAgA3AwAgB0HoAWoiCCACQRhqKQIANwMAIAdCADcDkAEgByAEOgD6ASAHQQA7AfgBIAcgAikCADcD0AEgByALrSADfDcD8AEgB0GQAWogACAOaiAJEAshACAHQdAAaiABKQMANwMAIAdB2ABqIAopAwA3AwAgB0HgAGogCCkDADcDACAHQRBqIABBCGopAwA3AwAgB0EYaiAAQRBqKQMANwMAIAdBIGogAEEYaikDADcDACAHQShqIABBIGopAwA3AwAgB0EwaiAAQShqKQMANwMAIAdBOGogAEEwaikDADcDACAHQUBrIABBOGopAwA3AwAgByAHKQPQATcDSCAHIAApAwA3AwggBy0A+gEhACAHLQD5ASECIAcgBy0A+AEiBDoAcCAHIAcpA/ABIgM3A2ggByAAIAJFckECciIAOgBxIAdBmAJqIgIgCCkDADcDACAHQZACaiIIIAopAwA3AwAgB0GIAmoiCiABKQMANwMAIAcgBykD0AE3A4ACIAdBgAJqIAdBCGogBCADIAAQASALQQV0IgBBIGoiASAGSw0CIAIoAgAhASAIKAIAIQIgCigCACEEIAcoApQCIQYgBygCjAIhCiAHKAKEAiEIIAcoAoACIQkgACAFaiIAIAcoApwCNgAcIAAgATYAGCAAIAY2ABQgACACNgAQIAAgCjYADCAAIAQ2AAggACAINgAEIAAgCTYAACALQQFqIQsMAQtBACAHQQhqIgsiCmtBA3EiDCAKaiEIIAwEQANAIApBADoAACAKQQFqIgogCEkNAAsLIAhBgAEgDGsiDEF8cSIOaiEKIA5BAEoEQANAIAhBADYCACAIQQRqIgggCkkNAAsLIAxBA3EiCARAIAggCmohCANAIApBADoAACAKQQFqIgogCEkNAAsLIAAgCSACIAMgBCALQSBBwAAgDRsiChAEIQggACAJaiABIAlr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aSABQUBrIQEgAkFAaiICQcAASw0ACyAALQBoIQQLIARB/wFxIgNBwQBPDQILIAAgA2ogAUHAACADayIBIAIgASACSRsiARA5GiAAIAAtAGggAWo6AGggAA8LIANBwABBqIHAABAbAAsgA0HAAEGogcAAEBsAC5ADAgZ/A34jAEHgD2siAyQAIANBEGpBiIDAACkCACIJNwMAIANBGGpBkIDAACkCACIKNwMAIANBIGpBmIDAACkCACILNwMAIANBuA9qQgA3AwAgA0GwD2pCADcDACADQagPakIANwMAIANBoA9qQgA3AwAgA0GYD2oiBUIANwMAIANBkA9qIgZCADcDACADQYgPaiIHQgA3AwAgA0HID2ogCTcDACADQdAPaiAKNwMAIANB2A9qIAs3AwAgA0GAgMAAKQIAIgk3AwggA0IANwOADyADIAk3A8APIANBKGogA0GAD2oiBEHgABA5GiADQY8BakEANgAAIANCADcDiAEgA0EANgKYASADQQhqIgggASACEAMgBCAIEBhBoYzAAC0AABpBIEEBEC0iBARAIAQgAykAgA83AAAgBEEYaiAFKQAANwAAIARBEGogBikAADcAACAEQQhqIAcpAAA3AAAgAgRAIAEgAhAzCyAAQgA3AwggAEEgNgIEIAAgBDYCACADQeAPaiQADwtBAUEgECgAC+cCAQV/AkBBzf97QRAgACAAQRBNGyIAayABTQ0AIABBECABQQtqQXhxIAFBC0kbIgRqQQxqEAIiAkUNACACQQhrIQECQCAAQQFrIgMgAnFFBEAgASEADAELIAJBBGsiBSgCACIGQXhxIAIgA2pBACAAa3FBCGsiAiAAQQAgAiABa0EQTRtqIgAgAWsiAmshAyAGQQNxBEAgACADIAAoAgRBAXFyQQJyNgIEIAAgA2oiAyADKAIEQQFyNgIEIAUgAiAFKAIAQQFxckECcjYCACABIAJqIgMgAygCBEEBcjYCBCABIAIQCgwBCyABKAIAIQEgACADNgIEIAAgASACajYCAAsCQCAAKAIEIgFBA3FFDQAgAUF4cSICIARBEGpNDQAgACAEIAFBAXFyQQJyNgIEIAAgBGoiASACIARrIgRBA3I2AgQgACACaiICIAIoAgRBAXI2AgQgASAEEAoLIABBCGohAwsgAwvxAgEEfyAAKAIMIQICQAJAIAFB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NwMAIA1CADcDACAOQgA3AwAgD0IANwMAIAdCADcDACAIQgA3AwAgCUIANwMAIBAgGjcDACARIBs3AwAgEiAcNwMAIBMgGjcDACAUIBs3AwAgFSAcNwMAIANCADcDgA8gAyAdNwPADyADIB03AwggFiAEQeAAEDkaIBdBADYAACADQgA3A4gBIANBADYCmAEgCiAGQSAQAyAEIAoQGEGhjMAALQAAGkEgQQEQLSIERQ0BIAQgAykAgA83AAAgBUEgNgIMIAUgBDYCCCAFQoCAgICABDcCACAEQRhqIAcpAAA3AAAgBEEQaiAIKQAANwAAIARBCGogCSkAADcAACAGQSAQMyADQeAPaiQADAILQQFBIBAoAAtBAUEgECgACyACBEAgASACEDMLIAUoAgwhAiAFKAIIIQEgBSgCBCEDAkAgBSgCAEUEQCACIANPBEAgASELDAILIAJFBEBBASELIAEgAxAzDAILIAEgA0EBIAIQKSILDQFBASACECgACyABIAIQACEYQQEhGSADBEAgASADEDMLQQAhAgsgACAZNgIMIAAgGDYCCCAAIAI2AgQgACALNgIAIAVBEGokAAv4AQECfyMAQSBrIgUkAEHYjMAAQdiMwAAoAgAiBkEBajYCAAJAIAZBAEgNAEGkkMAALQAARQRAQaSQwABBAToAAEGgkMAAQaCQwAAoAgBBAWo2AgBBzIzAACgCACIGQQBIDQFBzIzAACAGQQFqNgIAQcyMwABB0IzAACgCAAR/IAUgACABKAIUEQEAIAUgBDoAHSAFIAM6ABwgBSACNgIYIAUgBSkDADcCEEHQjMAAKAIAIAVBEGpB1IzAACgCACgCFBEBAEHMjMAAKAIAQQFrBSAGCzYCAEGkkMAAQQA6AAAgA0UNAQALIAVBCGogACABKAIYEQEACwALtQEBA38jAEEgayIDJAAgASABIAJqIgJLBEBBAEEAECgAC0EBIQFBCCAAKAIAIgVBAXQiBCACIAIgBEkbIgIgAkEITRsiAkF/c0EfdiEEAkAgBUUEQEEAIQEMAQsgAyAFNgIcIAMgACgCBDYCFAsgAyABNgIYIANBCGogBCACIANBFGoQFyADKAIIBEAgAygCDCADKAIQECgACyADKAIMIQEgACACNgIAIAAgATYCBCADQSBqJAALvAECA38BfiMAQTBrIgIkACABKAIAQYCAgIB4RgRAIAEoAgwhAyACQRRqIgRBADYCACACQoCAgIAQNwIMIAJBKGogA0EQaikCADcDACACQSBqIANBCGopAgA3AwAgAiADKQIANwMYIAJBDGpB3ITAACACQRhqEAgaIAJBCGogBCgCACIDNgIAIAIgAikCDCIFNwMAIAFBCGogAzYCACABIAU3AgALIABB+IbAADYCBCAAIAE2AgAgAkEwaiQAC5kBAQF/AkACQCABBEAgAkEASA0BAn8gAygCBARAAkAgAygCCCIERQRADAELIAMoAgAgBCABIAIQKQwCCwsgASACRQ0AGkGhjMAALQAAGiACIAEQLQsiAwRAIAAgAjYCCCAAIAM2AgQgAEEANgIADwsgACACNgIIIAAgATYCBAwCCyAAQQA2AgQMAQsgAEEANgIECyAAQQE2AgALzQ0CE38IfiMAQZABayIDJAAjAEHQAWsiAiQAAkAgASgCkAEiBUUEQCADIAEpA2A3A0AgAyABKQMgNwMAIANByABqIAFB6ABqKQMANwMAIANB0ABqIAFB8ABqKQMANwMAIANB2ABqIAFB+ABqKQMANwMAIANBCGogAUEoaikDADcDACADQRBqIAFBMGopAwA3AwAgA0EYaiABQThqKQMANwMAIANBIGogAUFAaykDADcDACADQShqIAFByABqKQMANwMAIANBMGogAUHQAGopAwA3AwAgA0E4aiABQdgAaikDADcDACABLQCKASEEIAEtAIkBIQUgAyABLQCIAToAaCADIAEpA4ABNwNgIAMgBCAFRXJBAnI6AGkMAQsCQAJAAkACQEEAIAEtAIgBIglrIAEtAIkBIgZBBnRHBEAgAkG4AWogAUHoAGopAwA3AwAgAkHAAWogAUHwAGopAwA3AwAgAkHIAWogAUH4AGopAwA3AwAgAkH4AGogAUEoaikDADcDACACQYABaiABQTBqKQMANwMAIAJBiAFqIAFBOGopAwA3AwAgAkGQAWogAUFAaykDADcDACACQZgBaiABQcgAaikDADcDACACQaABaiABQdAAaikDADcDACACQagBaiABQdgAaikDADcDACACIAEpA2A3A7ABIAIgASkDIDcDcCABLQCKASEEIAEpA4ABIRUgAiACQfAAakHgABA5IgcgBCAGRXJBAnIiBjoAaSAHIAk6AGggByAVNwNgIARBBHIhByAFIQQMAQsgBUECayEEIAVBAUYNAyABLQCKASEIIAJBGGogAUGUAWoiBiAEQQV0aiIHQRhqKQAAIhU3AwAgAkEQaiAHQRBqKQAAIhY3AwAgAkEIaiAHQQhqKQAAIhc3AwAgAkEgaiAFQQV0IAZqQSBrIgYpAAAiGDcDACACQShqIAZBCGopAAAiGTcDACACQTBqIAZBEGopAAAiGjcDACACQThqIAZBGGopAAAiGzcDACACIAcpAAAiHDcDACACQagBaiAbNwMAIAJBoAFqIBo3AwAgAkGYAWogGTcDACACQZABaiAYNwMAIAJBiAFqIBU3AwAgAkGAAWogFjcDACACQfgAaiAXNwMAIAIgHDcDcCACQcgBaiABQRhqKQMANwMAIAJBwAFqIAFBEGopAwA3AwAgAkG4AWogAUEIaikDADcDACACIAEpAwA3A7ABIAIgAkHwAGpB4AAQOSIGIAhBBHIiBzoAaUHAACEJIAZBwAA6AGhCACEVIAZCADcDYCAHIQYgBEUNAQsgBEEBayIIIAVPDQEgAkGIAWoiCiACQUBrIgVBGGoiCykCADcDACACQYABaiIMIAVBEGoiDSkCADcDACACQfgAaiIOIAVBCGoiDykCADcDACACIAUpAgA3A3AgAkHwAGogAiAJIBUgBhABIA4pAwAhFSAMKQMAIRYgCikDACEXIAIpA3AhGCACQQhqIgkgAUGUAWogCEEFdGoiBkEIaikCADcDACACQRBqIhAgBkEQaikCADcDACACQRhqIhEgBkEYaikCADcDACAFIAEpAwA3AwAgDyABQQhqIhIpAwA3AwAgDSABQRBqIhMpAwA3AwAgCyABQRhqIhQpAwA3AwAgAiAXNwM4IAIgFjcDMCACIBU3AyggAiAYNwMgIAIgBikCADcDACACIAc6AGkgAkHAADoAaCACQgA3A2AgCEUNACAEQQV0IAFqQdQAaiEEA0AgCiALKQIANwMAIAwgDSkCADcDACAOIA8pAgA3AwAgAiAFKQIANwNwIAJB8ABqIAJBwABCACAHEAEgDikDACEVIAwpAwAhFiAKKQMAIRcgAikDcCEYIAkgBEEIaikCADcDACAQIARBEGopAgA3AwAgESAEQRhqKQIANwMAIAUgASkDADcDACAPIBIpAwA3AwAgDSATKQMANwMAIAsgFCkDADcDACACIBc3AzggAiAWNwMwIAIgFTcDKCACIBg3AyAgAiAEKQIANwMAIAIgBzoAaSACQcAAOgBoIAJCADcDYCAEQSBrIQQgCEEBayIIDQALCyADIAJB8AAQORoMAgsgCCAFQciDwAAQHAALIARBAUG4g8AAEBwACyACQdABaiQAIANBiAFqIgEgA0HYAGopAwA3AwAgA0GAAWoiBCADQdAAaikDADcDACADQfgAaiIFIANByABqKQMANwMAIAMgAykDQDcDcCADQfAAaiADIAMtAGhCACADLQBpQQhyEAEgACABKQMANwAYIAAgBCkDADcAECAAIAUpAwA3AAggACADKQNwNwAAIANBkAFqJAALdgEBfyMAQSBrIgIkAAJ/IAAoAgBBgICAgHhHBEAgASAAKAIEIAAoAggQKwwBCyACQRhqIAAoAgwiAEEQaikCADcDACACQRBqIABBCGopAgA3AwAgAiAAKQIANwMIIAEoAhQgASgCGCACQQhqEAgLIAJBIGokAAt+AQF/IwBBQGoiAyQAIANBKzYCDCADQZCEwAA2AgggAyABNgIUIAMgADYCECADQQI2AhwgA0GMicAANgIYIANCAjcCJCADIANBEGqtQoCAgIDQAoQ3AzggAyADQQhqrUKAgICA4AKENwMwIAMgA0EwajYCICADQRhqIAIQIAALaQIBfwF+IwBBMGsiAyQAIAMgADYCACADIAE2AgQgA0ECNgIMIANBmIvAADYCCCADQgI3AhQgA0KAgICAwAAiBCADQQRqrYQ3AyggAyAEIAOthDcDICADIANBIGo2AhAgA0EIaiACECAAC2kCAX8BfiMAQTBrIgMkACADIAE2AgQgAyAANgIAIANBAjYCDCADQfiIwAA2AgggA0ICNwIUIANCgICAgMAAIgQgA62ENwMoIAMgBCADQQRqrYQ3AyAgAyADQSBqNgIQIANBCGogAhAgAAtpAgF/AX4jAEEwayIDJAAgAyAANgIAIAMgATYCBCADQQI2AgwgA0G4i8AANgIIIANCAjcCFCADQoCAgIDAACIEIANBBGqthDcDKCADIAQgA62ENwMgIAMgA0EgajYCECADQQhqIAIQIAALZgAjAEEwayIAJABBoIzAAC0AAARAIABBAjYCDCAAQcCGwAA2AgggAEIBNwIUIAAgATYCLCAAIABBLGqtQoCAgIDAAIQ3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"; +const wasmBase64 = "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ECAAQRBqKQMANwMAIBEgAEEYaikDADcDACADQgA3A4ABIAMgACkDADcDwAEgACkDgAEhGyAFIBpB4AD8CgAAIABBADsBiAEgACAbQgF8NwOAASABIApqIQELIAJBgQhPBEAgAEGcAWohDyAAKQOAASEbIANB0ABqIQwgA0HAAWohCSADQaABaiEKA0AgG0IKhiEcQX8gAkEBdmd2QQFqIQQDQCAEIgVBAXYhBCAcIAVBAWutg0IAUg0ACyAFQQp2rSEcAkACQCAFQYEITwRAIAIgBU8NAUEAIAUgAkHEi8AAECkACyADQYgBakIANwMAIANBkAFqQgA3AwAgA0GYAWpCADcDACAKQgA3AwAgA0GoAWpCADcDACADQbABakIANwMAIANBuAFqQgA3AwAgCSAAKQMANwMAIAlBCGoiByAAQQhqKQMANwMAIAlBEGoiBiAAQRBqKQMANwMAIAlBGGoiCCAAQRhqKQMANwMAIANCADcDgAEgA0EAOwHoASADIBs3A+ABIAMgAC0AigE6AOoBIANBgAFqIAEgBRAQIQQgDCAJKQMANwMAIAxBCGogBykDADcDACAMQRBqIAYpAwA3AwAgDEEYaiAIKQMANwMAIANBGGogBEEIaikDADcDACADQSBqIARBEGopAwA3AwAgA0EoaiAEQRhqKQMANwMAIANBMGogBEEgaikDADcDACADQThqIARBKGopAwA3AwAgA0FAayAEQTBqKQMANwMAIANByABqIARBOGopAwA3AwAgAyAEKQMANwMQIAMtAOoBIQQgAy0A6QEhCyADIAMtAOgBIg06AHggAyADKQPgASIbNwNwIAMgBCALRXJBAnIiBDoAeSADQYgCaiILIAgpAgA3AwAgA0GAAmoiCCAGKQIANwMAIANB+AFqIg4gBykCADcDACADIAkpAgA3A/ABIANB8AFqIANBEGogDSAbIAQQAyALKAIAIQcgCCgCACEGIA4oAgAhCCADKAKMAiELIAMoAoQCIQ0gAygC/AEhDiADKAL0ASEQIAMoAvABIREgACAAKQOAARAIIAAoApgBIgRBN08NByAAIARBAWo2ApgBIA8gBEEFdGoiBCALNgIcIAQgBzYCGCAEIA02AhQgBCAGNgIQIAQgDjYCDCAEIAg2AgggBCAQNgIEIAQgETYCAAwBCyADQYABaiEHIAAtAIoBIQsjAEHgAGsiBCQAIARBOGoiDUIANwMAIARBMGoiDkIANwMAIARBKGoiEEIANwMAIARBIGoiEUIANwMAIARBGGoiEkIANwMAIARBEGoiE0IANwMAIARBCGoiFEIANwMAIARCADcDACABIAUgACAbIAsgBEHAABAGIQggBEHYAGpCADcDACAEQdAAakIANwMAIARByABqQgA3AwAgBEIANwNAAkACQAJAAkAgCEEDTwRAA0AgCEEFdCIGQcEATw0CIAQgBiAAIAsgBEFAayIVQSAQDSIIQQV0IgZBwQBPDQMgBkEhTw0EIAYEQCAEIBUgBvwKAAALIAhBAksNAAsLIAcgBCkDADcAACAHQThqIA0pAwA3AAAgB0EwaiAOKQMANwAAIAdBKGogECkDADcAACAHQSBqIBEpAwA3AAAgB0EYaiASKQMANwAAIAdBEGogEykDADcAACAHQQhqIBQpAwA3AAAgBEHgAGokAAwDC0EAIAZBwABBsIrAABApAAtBACAGQcAAQaCKwAAQKQALQQAgBkEgQZCKwAAQKQALIAAgACkDgAEQCCAAKAKYASIEQTdPDQcgACAEQQFqNgKYASAPIARBBXRqIgQgAykAgAE3AAAgBEEYaiADQZgBaikAADcAACAEQRBqIANBkAFqKQAANwAAIARBCGogA0GIAWopAAA3AAAgACAAKQOAASAcQgGIfBAIIAAoApgBIgRBN08NCCAAIARBAWo2ApgBIA8gBEEFdGoiBCAKKQAANwAAIARBGGogCkEYaikAADcAACAEQRBqIApBEGopAAA3AAAgBEEIaiAKQQhqKQAANwAACyAAIAApA4ABIBx8Ihs3A4ABIAIgBUkNCCABIAVqIQEgAiAFayICQYAISw0ACwsgAkUNACAWIAEgAhAQGiAAIAApA4ABEAgLIANBkAJqJAAPCyADIBtCCoY3AxAgAyACNgLwASADIANB8AFqrUKAgICAIIQ3A5ABIAMgA0EIaq1CgICAgDCENwOIASADIANBEGqtQoCAgIAwhDcDgAFBh4jAACADQYABakG0i8AAECsACyADIAw2ApwBIAMgBzYCmAEgAyAINgKUASADIAk2ApABIAMgDzYCjAEgAyAGNgKIASADIAs2AoQBIAMgDTYCgAEgA0GAAWpBzIzAAEHki8AAECEACyADIAs2AowCIAMgBzYCiAIgAyANNgKEAiADIAY2AoACIAMgDjYC/AEgAyAINgL4ASADIBA2AvQBIAMgETYC8AEgA0HwAWpBzIzAAEHki8AAECEACyADQShqIANBmAFqKQAANwMAIANBIGogA0GQAWopAAA3AwAgA0EYaiADQYgBaikAADcDACADIAMpAIABNwMQDAILIANBKGogCkEYaikAADcDACADQSBqIApBEGopAAA3AwAgA0EYaiAKQQhqKQAANwMAIAMgCikAADcDEAwBCyAFIAIgAkHUi8AAECkACyADQRBqQcyMwABB5IvAABAhAAvCDAINfwF+IwBBoAJrIgckAAJAAkACQAJAAkACQCABQYEITwRAIAFCfyABQQFqQQF2rUIBfXmIpyIITQ0DIAdBCGoiCUEAQYAB/AsAIAAgCEEBaiIIIAIgAyAEIAlBIEHAACAIQYAIRhsiChAGIQsgACAIaiABIAhrIAIgAyAIQQp2rXwgBCAJIApqQYABIAprEAYgC0EBRg0CIAtqQQV0IgBBgQFJDQFBACAAQYABQaCJwAAQKQALIAdBADYCiAEgASABQQAgAUGACEcbIgxrIg1BgAhPBEAgB0EBNgKIASAHIAA2AowBQQEhCQsgB0GMAWohCiADIRQjAEEgayIBJAAgBkEFdiIIIAkgCCAJSRsiCARAIAhBBXQhDiAEQQJyIQ8gBEEBciEQA0AgCigCACEIIAFBGGoiESACQRhqKQIANwMAIAFBEGoiEiACQRBqKQIANwMAIAFBCGoiEyACQQhqKQIANwMAIAEgAikCADcDACABIAhBwAAgFCAQEAMgASAIQUBrQcAAIBQgBBADIAEgCEGAAWpBwAAgFCAEEAMgASAIQcABakHAACAUIAQQAyABIAhBgAJqQcAAIBQgBBADIAEgCEHAAmpBwAAgFCAEEAMgASAIQYADakHAACAUIAQQAyABIAhBwANqQcAAIBQgBBADIAEgCEGABGpBwAAgFCAEEAMgASAIQcAEakHAACAUIAQQAyABIAhBgAVqQcAAIBQgBBADIAEgCEHABWpBwAAgFCAEEAMgASAIQYAGakHAACAUIAQQAyABIAhBwAZqQcAAIBQgBBADIAEgCEGAB2pBwAAgFCAEEAMgASAIQcAHakHAACAUIA8QAyAFIAtqIghBGGogESkDADcAACAIQRBqIBIpAwA3AAAgCEEIaiATKQMANwAAIAggASkDADcAACAKQQRqIQogFEIBfCEUIA4gC0EgaiILRw0ACwsgAUEgaiQAIAxFDQUgB0HIAWpCADcDACAHQcABakIANwMAIAdBuAFqQgA3AwAgB0GwAWpCADcDACAHQagBakIANwMAIAdBoAFqQgA3AwAgB0GYAWpCADcDACAHQdgBaiIBIAJBCGopAgA3AwAgB0HgAWoiCCACQRBqKQIANwMAIAdB6AFqIgogAkEYaikCADcDACAHQgA3A5ABIAcgBDoA+gEgB0EAOwH4ASAHIAIpAgA3A9ABIAcgAyAJrXw3A/ABIAdBkAFqIAAgDWogDBAQIQAgB0HQAGogASkDADcDACAHQdgAaiAIKQMANwMAIAdB4ABqIAopAwA3AwAgB0EQaiAAQQhqKQMANwMAIAdBGGogAEEQaikDADcDACAHQSBqIABBGGopAwA3AwAgB0EoaiAAQSBqKQMANwMAIAdBMGogAEEoaikDADcDACAHQThqIABBMGopAwA3AwAgB0FAayAAQThqKQMANwMAIAcgBykD0AE3A0ggByAAKQMANwMIIActAPoBIQAgBy0A+QEhAiAHIActAPgBIgQ6AHAgByAHKQPwASIDNwNoIAcgACACRXJBAnIiADoAcSAHQZgCaiICIAopAwA3AwAgB0GQAmoiCiAIKQMANwMAIAdBiAJqIgggASkDADcDACAHIAcpA9ABNwOAAiAHQYACaiAHQQhqIAQgAyAAEAMgCUEFdCIAQR9yIAZPDQMgAigCACEBIAooAgAhAiAIKAIAIQQgBygClAIhBiAHKAKMAiEIIAcoAoQCIQogBygCgAIhCyAAIAVqIgAgBygCnAI2ABwgACABNgAYIAAgBjYAFCAAIAI2ABAgACAINgAMIAAgBDYACCAAIAo2AAQgACALNgAAIAlBAWohCQwFCyAHQQhqIAAgAiAEIAUgBhANIQkMBAsgBkE/TQ0CIAUgBykACDcAACAFQThqIAdBQGspAAA3AAAgBUEwaiAHQThqKQAANwAAIAVBKGogB0EwaikAADcAACAFQSBqIAdBKGopAAA3AAAgBUEYaiAHQSBqKQAANwAAIAVBEGogB0EYaikAADcAACAFQQhqIAdBEGopAAA3AABBAiEJDAMLQeiIwABBE0GQicAAECsACyAAIABBIGogBkHA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QDoAAAsgAw8LIANBFEH4kMAAECMAC48EAQJ/IAAgAWohAgJAAkAgACgCBCIDQQFxDQAgA0ECcUUNASAAKAIAIgMgAWohASAAIANrIgBB7JXAACgCAEYEQCACKAIEQQNxQQNHDQFB5JXAACABNgIAIAIgAigCBEF+cTYCBCAAIAFBAXI2AgQgAiABNgIADwsgACADEBILAkACQAJAIAIoAgQiA0ECcUUEQCACQfCVwAAoAgBGDQIgAkHslcAAKAIARg0DIAIgA0F4cSICEBIgACABIAJqIgFBAXI2AgQgACABaiABNgIAIABB7JXAACgCAEcNAUHklcAAIAE2AgAPCyACIANBfnE2AgQgACABQQFyNgIEIAAgAWogATYCAAsgAUGAAk8EQCAAIAEQFAwDCwJAQdyVwAAoAgAiAkEBIAFBA3Z0IgNxRQRAQdyVwAAgAiADcjYCACABQfgBcUHUk8AAaiIBIQIMAQsgAUH4AXEiAUHUk8AAaiECIAFB3JPAAGooAgAhAQsgAiAANgIIIAEgADYCDCAAIAI2AgwgACABNgIIDwtB8JXAACAANgIAQeiVwABB6JXAACgCACABaiIBNgIAIAAgAUEBcjYCBCAAQeyVwAAoAgBHDQFB5JXAAEEANgIAQeyVwABBADYCAA8LQeyVwAAgADYCAEHklcAAQeSVwAAoAgAgAWoiATYCACAAIAFBAXI2AgQgACABaiABNgIACwuYAwECfwJAAkACQCAALQBoIgMEQCADQcEATw0DIAJBwAAgA2siBCACIARJGyIEBEAgACADaiABIAT8CgAACyAAIAAtAGggBGoiAzoAaCABIARqIQEgAiAEayICRQRAQQAhAgwCCyAAQUBrIABBwAAgACkDYCAALQBqIAAtAGlFchADIABCADcDACAAQQA6AGggAEEIakIANwMAIABBEGpCADcDACAAQRhqQgA3AwAgAEEgakIANwMAIABBKGpCADcDACAAQTBqQgA3AwAgAEE4akIANwMAIAAgAC0AaUEBajoAaQtBACEDIAJBwQBJDQEgAEFAayEEIAAtAGkhAwNAIAQgAUHAACAAKQNgIAAtAGogA0H/AXFFchADIAAgAC0AaUEBaiIDOgBpIAFBQGshASACQUBqIgJBwABLDQALIAAtAGghAwsgA0H/AXEiA0HBAE8NAQsgAkHAACADayIEIAIgBEkbIgIEQCAAIANqIAEgAvwKAAALIAAgAC0AaCACajoAaCAADwsgA0HAAEHAAEGAicAAECkAC+cCAQV/AkAgAUHN/3tBECAAIABBEE0bIgBrTw0AIABBECABQQtqQXhxIAFBC0kbIgRqQQxqEAQiAkUNACACQQhrIQECQCAAQQFrIgMgAnFFBEAgASEADAELIAJBBGsiBSgCACIGQXhxIAIgA2pBACAAa3FBCGsiAiAAQQAgAiABa0EQTRtqIgAgAWsiAmshAyAGQQNxBEAgACADIAAoAgRBAXFyQQJyNgIEIAAgA2oiAyADKAIEQQFyNgIEIAUgAiAFKAIAQQFxckECcjYCACABIAJqIgMgAygCBEEBcjYCBCABIAIQDwwBCyABKAIAIQEgACADNgIEIAAgASACajYCAAsCQCAAKAIEIgFBA3FFDQAgAUF4cSICIARBEGpNDQAgACAEIAFBAXFyQQJyNgIEIAAgBGoiASACIARrIgRBA3I2AgQgACACaiICIAIoAgRBAXI2AgQgASAEEA8LIABBCGohAwsgAwuCAwEEfyAAKAIMIQICQAJAAkAgAUGAAk8EQCAAKAIYIQMCQAJAIAAgAkYEQCAAQRRBECAAKAIUIgIbaigCACIBDQFBACECDAILIAAoAggiASACNgIMIAIgATYCCAwBCyAAQRRqIABBEGogAhshBANAIAQhBSABIgJBFGogAkEQaiACKAIUIgEbIQQgAkEUQRAgARtqKAIAIgENAAsgBUEANgIACyADRQ0CAkAgACgCHEECdEHEksAAaiIBKAIAIABHBEAgAygCECAARg0BIAMgAjYCFCACDQMMBAsgASACNgIAIAJFDQQMAgsgAyACNgIQIAINAQwCCyAAKAIIIgAgAkcEQCAAIAI2AgwgAiAANgIIDwtB3JXAAEHclcAAKAIAQX4gAUEDdndxNgIADwsgAiADNgIYIAAoAhAiAQRAIAIgATYCECABIAI2AhgLIAAoAhQiAEUNACACIAA2AhQgACACNgIYDwsPC0HglcAAQeCVwAAoAgBBfiAAKAIcd3E2AgAL3gICA38DfiMAQZACayIAJAAgAEHAAWpCADcDACAAQbgBakIANwMAIABBsAFqQgA3AwAgAEGoAWpCADcDACAAQaABakIANwMAIABBmAFqQgA3AwAgAEGQAWpC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ACAGNgIEQQAhBwtBCCEGCyAAIAZqIAM2AgAgACAHNgIAC6sPAhN/CH4jAEGQAWsiAyQAIAEpA5ABUEUEQCMAQRBrIgQkACAEQfiIwAA2AgwgBCABQZABajYCCCMAQUBqIgAkACAAQdiRwAA2AgQgACAEQQhqNgIAIABB2JHAADYCDCAAIARBDGo2AgggAEGYksAAKAIANgIUIABBjJLAACgCADYCECAAQekANgIcIABB4IrAADYCGCAAIABBCGqtQoCAgICAA4Q3AzggACAArUKAgICAgAOENwMwIAAgAEEYaq1CgICAgKADhDcDKCAAIABBEGqtQoCAgICQA4Q3AyBB64PAACAAQSBqQfSLwAAQKwALIwBB0AFrIgIkAAJAIAEoApgBIgUEQAJAAkACQAJAIAEtAIgBIgkgAS0AiQEiB3JFBEAgBUECayEEIAVBAUcNASAEQQFBwIrAABAjAAsgAkG4AWogAUHoAGopAwA3AwAgAkHAAWogAUHwAGopAwA3AwAgAkHIAWogAUH4AGopAwA3AwAgAkH4AGogAUEoaikDADcDACACQYABaiABQTBqKQMANwMAIAJBiAFqIAFBOGopAwA3AwAgAkGQAWogAUFAaykDADcDACACQZgBaiABQcgAaikDADcDACACQaABaiABQdAAaikDADcDACACQagBaiABQdgAaikDADcDACACIAEpA2A3A7ABIAIgASkDIDcDcCABLQCKASEEIAEpA4ABIRUgAiACQfAAakHgAPwKAAAgAiAEIAdFckECciIGOgBpIAIgCToAaCACIBU3A2AgBEEEciEHIAUhBAwBCyABLQCKASEIIAJBGGogAUGcAWoiBiAEQQV0aiIHQRhqKQAAIhU3AwAgAkEQaiAHQRBqKQAAIhY3AwAgAkEIaiAHQQhqKQAAIhc3AwAgAkEgaiAGIAVBBXRqQSBrIgYpAAAiGDcDACACQShqIAZBCGopAAAiGTcDACACQTBqIAZBEGopAAAiGjcDACACQThqIAZBGGopAAAiGzcDACACIAcpAAAiHDcDACACQagBaiAbNwMAIAJBoAFqIBo3AwAgAkGYAWogGTcDACACQZABaiAYNwMAIAJBiAFqIBU3AwAgAkGAAWogFjcDACACQfgAaiAXNwMAIAIgHDcDcCACQcgBaiABQRhqKQMANwMAIAJBwAFqIAFBEGopAwA3AwAgAkG4AWogAUEIaikDADcDACACIAEpAwA3A7ABIAIgAkHwAGpB4AD8CgAAIAIgCEEEciIHOgBpQcAAIQkgAkHAADoAaEIAIRUgAkIANwNgIAchBiAERQ0BCyAEQQFrIgggBU8NASACQYgBaiIKIAJBQGsiBUEYaiILKQIANwMAIAJBgAFqIgwgBUEQaiINKQIANwMAIAJB+ABqIg4gBUEIaiIPKQIANwMAIAIgBSkCADcDcCACQfAAaiACIAkgFSAGEAMgDikDACEVIAwpAwAhFiAKKQMAIRcgAikDcCEYIAJBCGoiCSABQZwBaiAIQQV0aiIGQQhqKQIANwMAIAJBEGoiECAGQRBqKQIANwMAIAJBGGoiESAGQRhqKQIANwMAIAUgASkDADcDACAPIAFBCGoiEikDADcDACANIAFBEGoiEykDADcDACALIAFBGGoiFCkDADcDACACIBc3AzggAiAWNwMwIAIgFTcDKCACIBg3AyAgAiAGKQIANwMAIAIgBzoAaSACQcAAOgBoIAJCADcDYCAIRQ0AIARBBXQgAWpB3ABqIQQDQCAKIAspAgA3AwAgDCANKQIANwMAIA4gDykCADcDACACIAUpAgA3A3AgAkHwAGogAkHAAEIAIAcQAyAOKQMAIRUgDCkDACEWIAopAwAhFyACKQNwIRggCSAEQQhqKQIANwMAIBAgBEEQaikCADcDACARIARBGGopAgA3AwAgBSABKQMANwMAIA8gEikDADcDACANIBMpAwA3AwAgCyAUKQMANwMAIAIgFzcDOCACIBY3AzAgAiAVNwMoIAIgGDcDICACIAQpAgA3AwAgAiAHOgBpIAJBwAA6AGggAkIANwNgIARBIGshBCAIQQFrIggNAAsLIAMgAkHwAPwKAAAMAgsgCCAFQdCKwAAQIwALIAMgASkDYDcDQCADIAEpAyA3AwAgA0HIAGogAUHoAGopAwA3AwAgA0HQAGogAUHwAGopAwA3AwAgA0HYAGogAUH4AGopAwA3AwAgA0EIaiABQShqKQMANwMAIANBEGogAUEwaikDADcDACADQRhqIAFBOGopAwA3AwAgA0EgaiABQUBrKQMANwMAIANBKGogAUHIAGopAwA3AwAgA0EwaiABQdAAaikDADcDACADQThqIAFB2ABqKQMANwMAIAEtAIoBIQQgAS0AiQEhBSADIAEtAIgBOgBoIAMgASkDgAE3A2AgAyAEIAVFckECcjoAaQsgAkHQAWokACADQYgBaiIBIANB2ABqKQMANwMAIANBgAFqIgQgA0HQAGopAwA3AwAgA0H4AGoiBSADQcgAaikDADcDACADIAMpA0A3A3AgA0HwAGogAyADLQBoQgAgAy0AaUEIchADIAAgASkDADcAGCAAIAQpAwA3ABAgACAFKQMANwAIIAAgAykDcDcAACADQZABaiQAC5wBAQN/IwBBEGsiAyQAAkAgAARAIABBCGsiBCAEKAIAQQFqIgU2AgAgBQ0BAAsQSAALIAAoAgBFBEAgAEF/NgIAIAMgBDYCDCADIAA2AgggAyAAQQhqIgU2AgQgBSABIAIQBSACBEAgASACEEMLIABBADYCACAEIAQoAgBBAWsiADYCACAARQRAIANBDGoQKgsgA0EQaiQADwsQSQALoAEBAX8jAEEQayICJAACQAJAAkAgAUUEQCAARQ0BIABBCGsiASgCAEEBRw0CIAFBADYCACABQX9GDQMgAEEEayIAIAAoAgBBAWsiADYCACAADQMgAUGQDxBDDAMLIABFDQAgAiAAQQhrIgA2AgwgACAAKAIAQQFrIgA2AgAgAA0CIAJBDGoQKgwCCxBIAAtBvIDAAEE/EEcACyACQRBqJAALhwEBAX8jAEEQayIDJAAgAiABIAJqIgFLBEBBAEEAEDgACyADQQRqIAAoAgAiAiAAKAIEQQggASACQQF0IgIgASACSxsiASABQQhNGyIBQQFBARAZIAMoAgRBAUYEQCADKAIIIAMoAgwQOAALIAMoAgghAiAAIAE2AgAgACACNgIEIANBEGokAAvIAgEEfyMAQRBrIgMkAAJAIAAEQCAAQQhrIgQgBCgCAEEBaiICNgIAIAINAQALEEgACyAAKAIARQRAIABBfzYCACADIAQ2AgwgAyAANgIIIAMgAEEIaiICNgIEIwBB4ABrIgFBCGpCADcDACABQRBqQgA3AwAgAUEYakIANwMAIAFBIGpCADcDACABQShqQgA3AwAgAUEwakIANwMAIAFBOGpCADcDACABQdgAaiACQRhqKQMANwMAIAFB0ABqIAJBEGopAwA3AwAgAUHIAGogAkEIaikDADcDACABQgA3AwAgASACKQMANwNAIAJBIGogAUHgAPwKAAAgAkEAOwGIASACQgA3A4ABIAIoApgBBEAgAkEANgKYAQsgAEEANgIAIAQgBCgCAEEBayIANgIAIABFBEAgA0EMahAqCyADQRBqJAAPCxBJAAucAQIDfwF+IwBBIGsiAiQAIAEoAgBBgICAgHhGBEAgASgCDCEDIAJBHGoiBEEANgIAIAJCgICAgBA3AhQgAkEUakGcjcAAIAMoAgAiAygCACADKAIEEAwaIAJBEGogBCgCACIDNgIAIAIgAikCFCIFNwMIIAFBCGogAzYCACABIAU3AgALIABB/I7AADYCBCAAIAE2AgAgAkEgaiQAC40BAQF/AkACQCAAQYQBTwRAIADQbyYBQaSSwAAoAgANAUGkksAAQX82AgAgAEG4ksAAKAIAIgFJDQIgACABayIAQbCSwAAoAgBPDQJBrJLAACgCACAAQQJ0akG0ksAAKAIANgIAQbSSwAAgADYCAEGkksAAQaSSwAAoAgBBAWo2AgALDwtB2IjAABBOCwALXgEBfyMAQSBrIgMkACADQSs2AgQgA0GEjMAANgIAIAMgATYCDCADIAA2AgggAyADQQhqrUKAgICAgAOENwMYIAMgA61CgICAgJADhDcDEEG4hMAAIANBEGogAhArAAscACMAQRBrIgAkAEGIlsAAQQE6AAAgAEEQaiQAC04CAX8BfiMAQSBrIgMkACADIAE2AgwgAyAANgIIIANCgICAgCAiBCADQQhqrYQ3AxggAyAEIANBDGqthDcDEEGNgsAAIANBEGogAhArAAtHAQF/IAAoAgAgACgCCCIDayACSQRAIAAgAyACEB0gACgCCCEDCyACBEAgACgCBCADaiABIAL8CgAACyAAIAIgA2o2AghBAAusBAELfyMAQRBrIggkACABQQFBAAJ/IAhBBmohBUEKIQIgACgCACIKIgBB6AdPBEAgBUEEayEGIAAhAQJAAkADQCABIAFBkM4AbiIAQZDOAGxrIgtB//8DcUHkAG4hCQJAIANBCmoiBEEEa0EKSQRAIAZBCmoiByAJQQF0IgwtALCPQDoAACAEQQNrIgJBCkkNASACQQpB+JDAABAjAAsgBEEEa0EKQfiQwAAQIwALIAdBAWogDEGxj8AAai0AADoAACAEQQJrQQpJBEAgB0ECaiALIAlB5ABsa0EBdEH+/wdxIgItALCPQDoAACAEQQFrQQpPDQIgB0EDaiACQbGPwABqLQAAOgAAIAZBBGshBiADQQRrIQMgAUH/rOIESyAAIQFFDQMMAQsLIARBAmtBCkH4kMAAECMACyAEQQFrQQpB+JDAABAjAAsgA0EKaiECCwJAIABBCU0EQCAAIQMgAiEBDAELIABB//8DcUHkAG4hAwJAIAJBAmsiAUEKSQRAIAEgBWogACADQeQAbGtB//8DcUEBdCIALQCwj0A6AAAgAkEBayICQQpPDQEgAiAFaiAAQbGPwABqLQAAOgAADAILIAFBCkH4kMAAECMACyACQQpB+JDAABAjAAsCQEEAIAogAxtFBEAgAUEBayIBQQpPDQEgASAFaiADQQF0LQCxj0A6AAALIAEMAQsgAUEKQfiQwAAQIwALIgAgBWpBCiAAaxAJIAhBEGokAAs0AQF/IwBBIGsiAiQAIAFBAUEAIAApAwAgAkEMaiIBEA4iACABakEUIABrEAkgAkEgaiQACzQAIwBBEGsiACQAIABCxIzAgMAANwMIIAEoAgAgASgCBEGmhMAAIABBCGoQDCAAQRBqJAALRAECfyABKAIEIQIgASgCACEDQQhBBBBGIgFFBEBBBEEIEEsACyABIAI2AgQgASADNgIAIABB7I3AADYCBCAAIAE2AgAL+AEAAkAgACACTQRAIAAgAU0gASACS3INASMAQSBrIgIkACACIAE2AgwgAiAANgIIIAIgAkEMaq1CgICAgCCENwMYIAIgAkEIaq1CgICAgCCENwMQQeWBwAAgAkEQaiADECsACyMAQSBrIgEkACABIAI2AgwgASAANgIIIAEgAUEMaq1CgICAgCCENwMYIAEgAUEIaq1CgICAgCCENwMQQcSCwAAgAUEQaiADECsACyMAQSBrIgAkACAAIAI2AgwgACABNgIIIAAgAEEMaq1CgICAgCCENwMYIAAgAEEIaq1CgICAgCCENwMQQf2CwAAgAEEQaiADECsACz4BAX8gACgCACIAKAKoAQRAIABBADYCqAELAkAgAEF/Rg0AIAAgACgCBEEBayIBNgIEIAENACAAQZAPEEMLC98BAgF/AX4jAEEgayIDJAAgAyABNgIQIAMgADYCDCADQQE7ARwgAyACNgIYIAMgA0EMajYCFCMAQRBrIgEkACADQRRqIgApAgAhBCABIAA2AgwgASAENwIEIwBB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ACACQRhqIAo3AwAgAkIANwOADyACQZyAwAApAgAiCDcDwA8gAiAINwMAIAJBIGogAkGAD2oiBEHgAPwKAAAgAkGHAWpBADYAACACQQA2ApgBIAJCADcDkAEgAkIANwOAASACIAAgARAFIAQgAhAaAkBBIEEBEEYiBARAIAQgAikAgA83AAAgBEEYaiAFKQAANwAAIARBEGogBikAADcAACAEQQhqIAcpAAA3AAAgAQRAIAAgARBDCyADQQA2AgwgA0IgNwIEIAMgBDYCACACQeAPaiQADAELQQFBIBA4AAsgAygCACADKAIEIAMoAgggAygCDCADQRBqJAALLwACQCABaUEBRiAAQYCAgIB4IAFrTXFFDQAgAARAIAAgARBGIgFFDQELIAEPCwALpgMCA38BfiMAQRBrIgQkACMAQZAeayICJAACQAJAAkAgBAJ/IAFBIEcEQEEcQQEQRiIDRQ0CIANBGGpBmIDAACgAADYAACADQRBqQZCAwAApAAA3AAAgA0EIakGIgMAAKQAANwAAIANBgIDAACkAADcAACABBEAgACABEEMLIANBHBA7IQAgA0EcEENBAQwBCyACQY4PaiAAQQJqLQAAOgAAIAApAAMhBSAAKAALIQEgAC8AACEDIAJBqw9qIABBH2otAAA6AAAgAkGjD2ogAEEXaikAADcAACACIAM7AYwPIAIgACkADzcAmw8gAiABNgCXDyACIAU3AI8PIAJBCGoiASACQYwPaiIDEBYgAEEgEEMgAkGQD2ogAUGAD/wKAABBkA9BCBBGIgBFDQIgAEEANgIIIABCgYCAgBA3AwAgAEEMaiADQYQP/AoAACAAQQhqIQBBAAsiATYCCCAEIABBACABGzYCBCAEQQAgACABGzYCACACQZAeaiQADAILQQFBHBA4AAtBCEGQDxBLAAsgBCgCACAEKAIEIAQoAgggBEEQaiQAC5oCAQR/IwBBEGsiAyQAIwBBMGsiAiQAAkAgAARAIABBCGsiBCAEKAIAQQFqIgE2AgAgAQ0BAAsQSAALAkACQCAAKAIAIgFBf0cEQCAAIAFBAWo2AgAgAiAENgIMIAIgADYCCCACIABBCGoiATYCBCACQRBqIAEQGkEgQQEQRiIBRQ0BIAEgAikAEDcAACABQRhqIAJBKGopAAA3AAAgAUEQaiACQSBqKQAANwAAIAFBCGogAkEYaikAADcAACAAIAAoAgBBAWs2AgAgBCAEKAIAQQFrIgA2AgAgAEUEQCACQQxqECoLIANBIDYCBCADIAE2AgAgAkEwaiQADAILEEkAC0EBQSAQOAALIAMoAgAgAygCBCADQRBqJAALJQEBfyAAKAIAIgFBgICAgHhyQYCAgIB4RwRAIAAoAgQgARBDCwsXAQF/IAAoAgAiAQRAIAAoAgQgARBDCwsfACAAQQhqQfSMwAApAgA3AgAgAEHsjMAAKQIANwIACx8AIABBCGpBhI3AACkCADcCACAAQfyMwAApAgA3AgALHQAgAARAIAAgARBLAAtBjI/AAEEjQaCPwAAQKwALEQAgACABQQF0QQFyIAIQKwALGAAgASgCACABKAIEIAAoAgAgACgCBBAMC/4CAgN/AW8gACABEAIhBQJ/IwBBEGsiAyQAAkBBpJLAACgCAEUEQEGkksAAQX82AgBBtJLAACgCACIBQbCSwAAoAgAiAEYEQAJ/IAEgAUGoksAAKAIAIgBHDQAa0G9BgAEgASABQYABTRsiAvwPASIAQX9GDQMCQEG4ksAAKAIAIgQEQCABIARqIABGDQEMBQtBuJLAACAANgIACyABQaiSwAAoAgAiACABayACTw0AGiADQQRqIABBrJLAACgCACABIAJqIgBBBEEEEBkgAygCBEEBRg0DQaySwAAgAygCCDYCAEGoksAAIAA2AgBBsJLAACgCAAsiAiAATw0CQaySwAAoAgAgAkECdGogAUEBajYCAEGwksAAIAJBAWoiADYCAAsgACABTQ0BQbSSwABBrJLAACgCACABQQJ0aigCADYCAEGkksAAQaSSwAAoAgBBAWo2AgBBuJLAACgCACADQRBqJAAgAWoMAgtByIjAABBOAAsACyIAIAUmASAACw0AIAEEQCAAIAEQQwsLFgAgACgCACABIAIgACgCBCgCDBECAAsUACAAKAIAIAEgACgCBCgCDBEAAAvsBgEFfwJ/AkACQAJAAkACQAJAAkAgAEEEayIHKAIAIghBeHEiBEEEQQggCEEDcSIFGyABak8EQCAFQQAgAUEnaiIGIARJGw0BAkAgAkEJTwRAIAIgAxARIgINAUEADAoLQQAhAiADQcz/e0sNCEEQIANBC2pBeHEgA0ELSRshASAAQQhrIQYCQAJAAkACQCAFBEAgBCAG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c2VydGlvbiBgbGVmdCDAFyByaWdodGAgZmFpbGVkCiAgbGVmdDogwAkKIHJpZ2h0OiDAABBhc3NlcnRpb24gYGxlZnQgwBAgcmlnaHRgIGZhaWxlZDogwAkKICBsZWZ0OiDACQogcmlnaHQ6IMAAD0NhcGFjaXR5RXJyb3I6IMAAwAI6IMAAbGlicmFyeS9jb3JlL3NyYy9mbXQvbnVtLnJzAC9Vc2Vycy9jYXJyeTA5ODcvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi93YXNtLWJpbmRnZW4tMC4yLjEwNi9zcmMvZXh0ZXJucmVmLnJzAGxpYnJhcnkvYWxsb2Mvc3JjL3Jhd192ZWMvbW9kLnJzAC9ydXN0L2RlcHMvZGxtYWxsb2MtMC4yLjExL3NyYy9kbG1hbGxvYy5ycwBsaWJyYXJ5L3N0ZC9zcmMvYWxsb2MucnMAL1VzZXJzL2NhcnJ5MDk4Ny8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL2JsYWtlMy0xLjguMi9zcmMvbGliLnJzABVtZW1vcnkgYWxsb2NhdGlvbiBvZiDADSBieXRlcyBmYWlsZWQAJmNvcHlfZnJvbV9zbGljZTogc291cmNlIHNsaWNlIGxlbmd0aCAowCspIGRvZXMgbm90IG1hdGNoIGRlc3RpbmF0aW9uIHNsaWNlIGxlbmd0aCAowAEpABh0aGUgc3VidHJlZSBzdGFydGluZyBhdCDAEiBjb250YWlucyBhdCBtb3N0IMAOIGJ5dGVzIChmb3VuZCDAASkAWgIQAGsAAAB/AAAAEQAAAFoCEABrAAAAjAAAABEAAABtaWQgPiBsZW4AQYCJwAALoQkrAxAAXQAAAAsCAAARAAAAKwMQAF0AAAAYAwAAHwAAACsDEABdAAAAPAMAABIAAAArAxAAXQAAADUDAAAMAAAAKwMQAF0AAAC+AgAACgAAACsDEABdAAAA7AIAACgAAAArAxAAXQAAAOwCAAA0AAAAKwMQAF0AAADsAgAADAAAACsDEABdAAAA3AIAABcAAAArAxAAXQAAAGIDAABBAAAAKwMQAF0AAABiAwAAEQAAACsDEABdAAAAYAMAACEAAAArAxAAXQAAAFYFAAASAAAAKwMQAF0AAABgBQAAEgAAAHNldF9pbnB1dF9vZmZzZXQgbXVzdCBiZSB1c2VkIHdpdGggZmluYWxpemVfbm9uX3Jvb3QrAxAAXQAAAHUEAAAyAAAAKwMQAF0AAAB9BAAAGwAAACsDEABdAAAAtgQAAA0AAAArAxAAXQAAABMFAAAbAAAAKwMQAF0AAAAlBQAAGwAAACsDEABdAAAApAQAABcAAAArAxAAXQAAAHEFAAAJAAAAY2FsbGVkIGBSZXN1bHQ6OnVud3JhcCgpYCBvbiBhbiBgRXJyYCB2YWx1ZWluc3VmZmljaWVudCBjYXBhY2l0eS8GEAAVAAAAAAAAACAAAAABAAAABQAAAAAAAAAEAAAABAAAAAYAAAAMkRtBRc1DSn6J8happJYRbV3L1ixQ62N4QaZXcRuLuRIDEAAYAAAAcAEAAAkAAAAIAAAADAAAAAQAAAAJAAAACgAAAAsAAAAMAAAAEAAAAAQAAAANAAAADgAAAA8AAAAQAAAAAAAAAAgAAAAEAAAAEQAAABIAAAATAAAAFAAAAAAAAAAIAAAABAAAABUAAABhc3NlcnRpb24gZmFpbGVkOiBwc2l6ZSA+PSBzaXplICsgbWluX292ZXJoZWFkAADnAhAAKgAAALEEAAAJAAAAYXNzZXJ0aW9uIGZhaWxlZDogcHNpemUgPD0gc2l6ZSArIG1heF9vdmVyaGVhZAAA5wIQACoAAAC3BAAADQAAAAgAAAAMAAAABAAAABYAAABjYXBhY2l0eSBvdmVyZmxvdwAAAMYCEAAgAAAAHAAAAAUAAAAwMDAxMDIwMzA0MDUwNjA3MDgwOTEwMTExMjEzMTQxNTE2MTcxODE5MjAyMTIyMjMyNDI1MjYyNzI4MjkzMDMxMzIzMzM0MzUzNjM3MzgzOTQwNDE0MjQzNDQ0NTQ2NDc0ODQ5NTA1MTUyNTM1NDU1NTY1NzU4NTk2MDYxNjI2MzY0NjU2NjY3Njg2OTcwNzE3MjczNzQ3NTc2Nzc3ODc5ODA4MTgyODM4NDg1ODY4Nzg4ODk5MDkxOTI5Mzk0OTU5Njk3OTg5OT4CEAAbAAAAVwIAAAUAAAAwMTIzNDU2Nzg5YWJjZGVmMHgwMTIzNDU2Nzg5QUJDREVGY2FsbGVkIGBPcHRpb246OnVud3JhcCgpYCBvbiBhIGBOb25lYCB2YWx1ZQAAAAAAAAAEAAAABAAAABsAAAA9PSE9bWF0Y2hlc1JlZkNlbGwgYWxyZWFkeSBib3Jyb3dlZADoCBAA6ggQAOwIEAACAAAAAgAAAAcAQaySwAALAQQAcAlwcm9kdWNlcnMCCGxhbmd1YWdlAQRSdXN0AAxwcm9jZXNzZWQtYnkDBXJ1c3RjHTEuOTMuMCAoMjU0YjU5NjA3IDIwMjYtMDEtMTkpBndhbHJ1cwYwLjI0LjUMd2FzbS1iaW5kZ2VuBzAuMi4xMDYAaw90YXJnZXRfZmVhdHVyZXMGKw9tdXRhYmxlLWdsb2JhbHMrE25vbnRyYXBwaW5nLWZwdG9pbnQrC2J1bGstbWVtb3J5KwhzaWduLWV4dCsPcmVmZXJlbmNlLXR5cGVzKwptdWx0aXZhbHVl"; const wasmBinary = Uint8Array.from(atob(wasmBase64), c => c.charCodeAt(0)); const wasmModule = new WebAssembly.Module(wasmBinary); const importObject = { './webbuf_blake3_bg.js': webbuf_blake3_bg }; diff --git a/ts/npm-webbuf-blake3/test/index.test.ts b/ts/npm-webbuf-blake3/test/index.test.ts index 7a301bb..20b935e 100644 --- a/ts/npm-webbuf-blake3/test/index.test.ts +++ b/ts/npm-webbuf-blake3/test/index.test.ts @@ -1,5 +1,12 @@ import { describe, it, expect } from "vitest"; -import { blake3Hash, doubleBlake3Hash, blake3Mac } from "../src/index.js"; +import { + blake3Hash, + doubleBlake3Hash, + blake3Mac, + Blake3Hasher, + createBlake3Hasher, + createBlake3KeyedHasher, +} from "../src/index.js"; import { WebBuf } from "@webbuf/webbuf"; import { FixedBuf } from "@webbuf/fixedbuf"; @@ -38,3 +45,116 @@ describe("Blake3", () => { expect(result.toHex()).toBe(expectedMacHex); }); }); + +describe("Blake3Hasher (incremental/streaming)", () => { + it("should produce the same hash as one-shot blake3Hash", () => { + const input = WebBuf.fromUtf8("test input"); + const expected = blake3Hash(input); + + const hasher = new Blake3Hasher(); + hasher.update(input); + const result = hasher.finalize(); + hasher.dispose(); + + expect(result.toHex()).toBe(expected.toHex()); + }); + + it("should produce correct hash when data is fed in chunks", () => { + const fullData = WebBuf.fromUtf8("hello world this is a streaming test"); + const expected = blake3Hash(fullData); + + const hasher = createBlake3Hasher(); + hasher.update(WebBuf.fromUtf8("hello world ")); + hasher.update(WebBuf.fromUtf8("this is a ")); + hasher.update(WebBuf.fromUtf8("streaming test")); + const result = hasher.finalize(); + hasher.dispose(); + + expect(result.toHex()).toBe(expected.toHex()); + }); + + it("should support method chaining on update", () => { + const fullData = WebBuf.fromUtf8("abcdef"); + const expected = blake3Hash(fullData); + + const hasher = createBlake3Hasher(); + const result = hasher + .update(WebBuf.fromUtf8("ab")) + .update(WebBuf.fromUtf8("cd")) + .update(WebBuf.fromUtf8("ef")) + .finalize(); + hasher.dispose(); + + expect(result.toHex()).toBe(expected.toHex()); + }); + + it("should support reset for reuse", () => { + const hasher = createBlake3Hasher(); + + // Hash some data + hasher.update(WebBuf.fromUtf8("garbage data")); + + // Reset and hash new data + hasher.reset(); + hasher.update(WebBuf.fromUtf8("test input")); + const result = hasher.finalize(); + hasher.dispose(); + + const expected = blake3Hash(WebBuf.fromUtf8("test input")); + expect(result.toHex()).toBe(expected.toHex()); + }); + + it("should support keyed hasher (MAC) in streaming mode", () => { + const key = blake3Hash(WebBuf.fromUtf8("key")); + const message = WebBuf.fromUtf8("message"); + const expected = blake3Mac(key, message); + + const hasher = createBlake3KeyedHasher(key); + hasher.update(WebBuf.fromUtf8("mes")); + hasher.update(WebBuf.fromUtf8("sage")); + const result = hasher.finalize(); + hasher.dispose(); + + expect(result.toHex()).toBe(expected.toHex()); + }); + + it("should support static newKeyed factory", () => { + const key = blake3Hash(WebBuf.fromUtf8("key")); + const message = WebBuf.fromUtf8("message"); + const expected = blake3Mac(key, message); + + const hasher = Blake3Hasher.newKeyed(key); + hasher.update(message); + const result = hasher.finalize(); + hasher.dispose(); + + expect(result.toHex()).toBe(expected.toHex()); + }); + + it("should allow finalize without consuming (can continue updating)", () => { + const hasher = createBlake3Hasher(); + hasher.update(WebBuf.fromUtf8("part1")); + const hash1 = hasher.finalize(); + + // Continue feeding data after finalize + hasher.update(WebBuf.fromUtf8("part2")); + const hash2 = hasher.finalize(); + hasher.dispose(); + + // hash1 should equal blake3Hash("part1") + expect(hash1.toHex()).toBe(blake3Hash(WebBuf.fromUtf8("part1")).toHex()); + + // hash2 should equal blake3Hash("part1part2") + expect(hash2.toHex()).toBe( + blake3Hash(WebBuf.fromUtf8("part1part2")).toHex(), + ); + }); + + it("should support Symbol.dispose", () => { + const hasher = createBlake3Hasher(); + hasher.update(WebBuf.fromUtf8("test")); + hasher.finalize(); + // Should not throw + hasher[Symbol.dispose](); + }); +}); diff --git a/ts/pnpm-lock.yaml b/ts/pnpm-lock.yaml index 9fe9e36..902b535 100644 --- a/ts/pnpm-lock.yaml +++ b/ts/pnpm-lock.yaml @@ -24,8 +24,975 @@ importers: specifier: ^8.21.0 version: 8.48.1(eslint@9.39.1)(typescript@5.8.3) + npm-webbuf: + dependencies: + '@webbuf/acb3': + specifier: workspace:^ + version: link:../npm-webbuf-acb3 + '@webbuf/acb3dh': + specifier: workspace:^ + version: link:../npm-webbuf-acb3dh + '@webbuf/acs2': + specifier: workspace:^ + version: link:../npm-webbuf-acs2 + '@webbuf/acs2dh': + specifier: workspace:^ + version: link:../npm-webbuf-acs2dh + '@webbuf/aescbc': + specifier: workspace:^ + version: link:../npm-webbuf-aescbc + '@webbuf/blake3': + specifier: workspace:^ + version: link:../npm-webbuf-blake3 + '@webbuf/fixedbuf': + specifier: workspace:^ + version: link:../npm-webbuf-fixedbuf + '@webbuf/numbers': + specifier: workspace:^ + version: link:../npm-webbuf-numbers + '@webbuf/ripemd160': + specifier: workspace:^ + version: link:../npm-webbuf-ripemd160 + '@webbuf/rw': + specifier: workspace:^ + version: link:../npm-webbuf-rw + '@webbuf/secp256k1': + specifier: workspace:^ + version: link:../npm-webbuf-secp256k1 + '@webbuf/sha256': + specifier: workspace:^ + version: link:../npm-webbuf-sha256 + '@webbuf/webbuf': + specifier: workspace:^ + version: link:../npm-webbuf-webbuf + devDependencies: + '@eslint/js': + specifier: ^9.18.0 + version: 9.39.1 + '@types/node': + specifier: ^22.13.2 + version: 22.19.9 + buffer: + specifier: ^6.0.3 + version: 6.0.3 + eslint: + specifier: ^9.18.0 + version: 9.39.1 + prettier: + specifier: ^3.4.2 + version: 3.7.4 + rimraf: + specifier: ^6.0.1 + version: 6.1.2 + tsx: + specifier: ^4.19.2 + version: 4.21.0 + typescript: + specifier: ^5.7.3 + version: 5.8.3 + typescript-eslint: + specifier: ^8.21.0 + version: 8.48.1(eslint@9.39.1)(typescript@5.8.3) + vite: + specifier: ^6.1.0 + version: 6.4.1(@types/node@22.19.9)(tsx@4.21.0) + vitest: + specifier: ^3.0.5 + version: 3.2.4(@types/node@22.19.9)(tsx@4.21.0) + + npm-webbuf-acb3: + dependencies: + '@webbuf/aescbc': + specifier: workspace:^ + version: link:../npm-webbuf-aescbc + '@webbuf/blake3': + specifier: workspace:^ + version: link:../npm-webbuf-blake3 + '@webbuf/fixedbuf': + specifier: workspace:^ + version: link:../npm-webbuf-fixedbuf + '@webbuf/webbuf': + specifier: workspace:^ + version: link:../npm-webbuf-webbuf + devDependencies: + '@eslint/js': + specifier: ^9.18.0 + version: 9.39.1 + '@types/node': + specifier: ^22.13.2 + version: 22.19.9 + buffer: + specifier: ^6.0.3 + version: 6.0.3 + eslint: + specifier: ^9.18.0 + version: 9.39.1 + prettier: + specifier: ^3.4.2 + version: 3.7.4 + rimraf: + specifier: ^6.0.1 + version: 6.1.2 + typescript: + specifier: ^5.7.3 + version: 5.8.3 + typescript-eslint: + specifier: ^8.21.0 + version: 8.48.1(eslint@9.39.1)(typescript@5.8.3) + vite: + specifier: ^6.1.0 + version: 6.4.1(@types/node@22.19.9)(tsx@4.21.0) + vitest: + specifier: ^3.0.5 + version: 3.2.4(@types/node@22.19.9)(tsx@4.21.0) + + npm-webbuf-acb3dh: + dependencies: + '@webbuf/acb3': + specifier: workspace:^ + version: link:../npm-webbuf-acb3 + '@webbuf/aescbc': + specifier: workspace:^ + version: link:../npm-webbuf-aescbc + '@webbuf/blake3': + specifier: workspace:^ + version: link:../npm-webbuf-blake3 + '@webbuf/fixedbuf': + specifier: workspace:^ + version: link:../npm-webbuf-fixedbuf + '@webbuf/secp256k1': + specifier: workspace:^ + version: link:../npm-webbuf-secp256k1 + '@webbuf/webbuf': + specifier: workspace:^ + version: link:../npm-webbuf-webbuf + devDependencies: + '@eslint/js': + specifier: ^9.18.0 + version: 9.39.1 + '@types/node': + specifier: ^22.13.2 + version: 22.19.9 + buffer: + specifier: ^6.0.3 + version: 6.0.3 + eslint: + specifier: ^9.18.0 + version: 9.39.1 + prettier: + specifier: ^3.4.2 + version: 3.7.4 + rimraf: + specifier: ^6.0.1 + version: 6.1.2 + typescript: + specifier: ^5.7.3 + version: 5.8.3 + typescript-eslint: + specifier: ^8.21.0 + version: 8.48.1(eslint@9.39.1)(typescript@5.8.3) + vite: + specifier: ^6.1.0 + version: 6.4.1(@types/node@22.19.9)(tsx@4.21.0) + vitest: + specifier: ^3.0.5 + version: 3.2.4(@types/node@22.19.9)(tsx@4.21.0) + + npm-webbuf-acs2: + dependencies: + '@webbuf/aescbc': + specifier: workspace:^ + version: link:../npm-webbuf-aescbc + '@webbuf/fixedbuf': + specifier: workspace:^ + version: link:../npm-webbuf-fixedbuf + '@webbuf/sha256': + specifier: workspace:^ + version: link:../npm-webbuf-sha256 + '@webbuf/webbuf': + specifier: workspace:^ + version: link:../npm-webbuf-webbuf + devDependencies: + '@eslint/js': + specifier: ^9.18.0 + version: 9.39.1 + '@types/node': + specifier: ^22.13.2 + version: 22.19.9 + buffer: + specifier: ^6.0.3 + version: 6.0.3 + eslint: + specifier: ^9.18.0 + version: 9.39.1 + prettier: + specifier: ^3.4.2 + version: 3.7.4 + rimraf: + specifier: ^6.0.1 + version: 6.1.2 + typescript: + specifier: ^5.7.3 + version: 5.8.3 + typescript-eslint: + specifier: ^8.21.0 + version: 8.48.1(eslint@9.39.1)(typescript@5.8.3) + vite: + specifier: ^6.1.0 + version: 6.4.1(@types/node@22.19.9)(tsx@4.21.0) + vitest: + specifier: ^3.0.5 + version: 3.2.4(@types/node@22.19.9)(tsx@4.21.0) + + npm-webbuf-acs2dh: + dependencies: + '@webbuf/acs2': + specifier: workspace:^ + version: link:../npm-webbuf-acs2 + '@webbuf/aescbc': + specifier: workspace:^ + version: link:../npm-webbuf-aescbc + '@webbuf/fixedbuf': + specifier: workspace:^ + version: link:../npm-webbuf-fixedbuf + '@webbuf/secp256k1': + specifier: workspace:^ + version: link:../npm-webbuf-secp256k1 + '@webbuf/sha256': + specifier: workspace:^ + version: link:../npm-webbuf-sha256 + '@webbuf/webbuf': + specifier: workspace:^ + version: link:../npm-webbuf-webbuf + devDependencies: + '@eslint/js': + specifier: ^9.18.0 + version: 9.39.1 + '@types/node': + specifier: ^22.13.2 + version: 22.19.9 + buffer: + specifier: ^6.0.3 + version: 6.0.3 + eslint: + specifier: ^9.18.0 + version: 9.39.1 + prettier: + specifier: ^3.4.2 + version: 3.7.4 + rimraf: + specifier: ^6.0.1 + version: 6.1.2 + typescript: + specifier: ^5.7.3 + version: 5.8.3 + typescript-eslint: + specifier: ^8.21.0 + version: 8.48.1(eslint@9.39.1)(typescript@5.8.3) + vite: + specifier: ^6.1.0 + version: 6.4.1(@types/node@22.19.9)(tsx@4.21.0) + vitest: + specifier: ^3.0.5 + version: 3.2.4(@types/node@22.19.9)(tsx@4.21.0) + + npm-webbuf-aescbc: + dependencies: + '@webbuf/fixedbuf': + specifier: workspace:^ + version: link:../npm-webbuf-fixedbuf + '@webbuf/webbuf': + specifier: workspace:^ + version: link:../npm-webbuf-webbuf + devDependencies: + '@eslint/js': + specifier: ^9.18.0 + version: 9.39.1 + '@types/node': + specifier: ^22.13.2 + version: 22.19.9 + '@webbuf/blake3': + specifier: ^3.0.26 + version: 3.5.0(@webbuf/fixedbuf@npm-webbuf-fixedbuf)(@webbuf/webbuf@npm-webbuf-webbuf) + buffer: + specifier: ^6.0.3 + version: 6.0.3 + eslint: + specifier: ^9.18.0 + version: 9.39.1 + prettier: + specifier: ^3.4.2 + version: 3.7.4 + rimraf: + specifier: ^6.0.1 + version: 6.1.2 + tsx: + specifier: ^4.19.2 + version: 4.21.0 + typescript: + specifier: ^5.7.3 + version: 5.8.3 + typescript-eslint: + specifier: ^8.21.0 + version: 8.48.1(eslint@9.39.1)(typescript@5.8.3) + vite: + specifier: ^6.1.0 + version: 6.4.1(@types/node@22.19.9)(tsx@4.21.0) + vitest: + specifier: ^3.0.5 + version: 3.2.4(@types/node@22.19.9)(tsx@4.21.0) + + npm-webbuf-blake3: + dependencies: + '@webbuf/fixedbuf': + specifier: workspace:^ + version: link:../npm-webbuf-fixedbuf + '@webbuf/webbuf': + specifier: workspace:^ + version: link:../npm-webbuf-webbuf + devDependencies: + '@eslint/js': + specifier: ^9.18.0 + version: 9.39.1 + '@types/node': + specifier: ^22.13.2 + version: 22.19.9 + buffer: + specifier: ^6.0.3 + version: 6.0.3 + eslint: + specifier: ^9.18.0 + version: 9.39.1 + prettier: + specifier: ^3.4.2 + version: 3.7.4 + rimraf: + specifier: ^6.0.1 + version: 6.1.2 + tsx: + specifier: ^4.19.2 + version: 4.21.0 + typescript: + specifier: ^5.7.3 + version: 5.8.3 + typescript-eslint: + specifier: ^8.21.0 + version: 8.48.1(eslint@9.39.1)(typescript@5.8.3) + vite: + specifier: ^6.1.0 + version: 6.4.1(@types/node@22.19.9)(tsx@4.21.0) + vitest: + specifier: ^3.0.5 + version: 3.2.4(@types/node@22.19.9)(tsx@4.21.0) + + npm-webbuf-fixedbuf: + dependencies: + '@webbuf/webbuf': + specifier: workspace:^ + version: link:../npm-webbuf-webbuf + devDependencies: + '@eslint/js': + specifier: ^9.18.0 + version: 9.39.1 + '@types/node': + specifier: ^22.13.2 + version: 22.19.9 + buffer: + specifier: ^6.0.3 + version: 6.0.3 + eslint: + specifier: ^9.18.0 + version: 9.39.1 + prettier: + specifier: ^3.4.2 + version: 3.7.4 + rimraf: + specifier: ^6.0.1 + version: 6.1.2 + typescript: + specifier: ^5.7.3 + version: 5.8.3 + typescript-eslint: + specifier: ^8.21.0 + version: 8.48.1(eslint@9.39.1)(typescript@5.8.3) + vite: + specifier: ^6.1.0 + version: 6.4.1(@types/node@22.19.9)(tsx@4.21.0) + vitest: + specifier: ^3.0.5 + version: 3.2.4(@types/node@22.19.9)(tsx@4.21.0) + + npm-webbuf-numbers: + dependencies: + '@webbuf/fixedbuf': + specifier: workspace:^ + version: link:../npm-webbuf-fixedbuf + '@webbuf/webbuf': + specifier: workspace:^ + version: link:../npm-webbuf-webbuf + devDependencies: + '@eslint/js': + specifier: ^9.18.0 + version: 9.39.1 + '@types/node': + specifier: ^22.13.2 + version: 22.19.9 + buffer: + specifier: ^6.0.3 + version: 6.0.3 + eslint: + specifier: ^9.18.0 + version: 9.39.1 + prettier: + specifier: ^3.4.2 + version: 3.7.4 + rimraf: + specifier: ^6.0.1 + version: 6.1.2 + typescript: + specifier: ^5.7.3 + version: 5.8.3 + typescript-eslint: + specifier: ^8.21.0 + version: 8.48.1(eslint@9.39.1)(typescript@5.8.3) + vite: + specifier: ^6.1.0 + version: 6.4.1(@types/node@22.19.9)(tsx@4.21.0) + vitest: + specifier: ^3.0.5 + version: 3.2.4(@types/node@22.19.9)(tsx@4.21.0) + + npm-webbuf-ripemd160: + dependencies: + '@webbuf/fixedbuf': + specifier: workspace:^ + version: link:../npm-webbuf-fixedbuf + '@webbuf/webbuf': + specifier: workspace:^ + version: link:../npm-webbuf-webbuf + devDependencies: + '@eslint/js': + specifier: ^9.18.0 + version: 9.39.1 + '@types/node': + specifier: ^22.13.2 + version: 22.19.9 + buffer: + specifier: ^6.0.3 + version: 6.0.3 + eslint: + specifier: ^9.18.0 + version: 9.39.1 + prettier: + specifier: ^3.4.2 + version: 3.7.4 + rimraf: + specifier: ^6.0.1 + version: 6.1.2 + ripemd160-js: + specifier: ^3.0.4 + version: 3.0.4 + tsx: + specifier: ^4.19.2 + version: 4.21.0 + typescript: + specifier: ^5.7.3 + version: 5.8.3 + typescript-eslint: + specifier: ^8.21.0 + version: 8.48.1(eslint@9.39.1)(typescript@5.8.3) + vite: + specifier: ^6.1.0 + version: 6.4.1(@types/node@22.19.9)(tsx@4.21.0) + vitest: + specifier: ^3.0.5 + version: 3.2.4(@types/node@22.19.9)(tsx@4.21.0) + + npm-webbuf-rw: + dependencies: + '@webbuf/fixedbuf': + specifier: workspace:^ + version: link:../npm-webbuf-fixedbuf + '@webbuf/numbers': + specifier: workspace:^ + version: link:../npm-webbuf-numbers + '@webbuf/webbuf': + specifier: workspace:^ + version: link:../npm-webbuf-webbuf + devDependencies: + '@eslint/js': + specifier: ^9.18.0 + version: 9.39.1 + '@types/node': + specifier: ^22.13.2 + version: 22.19.9 + buffer: + specifier: ^6.0.3 + version: 6.0.3 + eslint: + specifier: ^9.18.0 + version: 9.39.1 + prettier: + specifier: ^3.4.2 + version: 3.7.4 + rimraf: + specifier: ^6.0.1 + version: 6.1.2 + typescript: + specifier: ^5.7.3 + version: 5.8.3 + typescript-eslint: + specifier: ^8.21.0 + version: 8.48.1(eslint@9.39.1)(typescript@5.8.3) + vite: + specifier: ^6.1.0 + version: 6.4.1(@types/node@22.19.9)(tsx@4.21.0) + vitest: + specifier: ^3.0.5 + version: 3.2.4(@types/node@22.19.9)(tsx@4.21.0) + + npm-webbuf-secp256k1: + dependencies: + '@webbuf/fixedbuf': + specifier: workspace:^ + version: link:../npm-webbuf-fixedbuf + '@webbuf/webbuf': + specifier: workspace:^ + version: link:../npm-webbuf-webbuf + devDependencies: + '@eslint/js': + specifier: ^9.18.0 + version: 9.39.1 + '@noble/secp256k1': + specifier: ^3.0.0 + version: 3.0.0 + '@types/node': + specifier: ^22.13.2 + version: 22.19.9 + '@webbuf/blake3': + specifier: workspace:^ + version: link:../npm-webbuf-blake3 + buffer: + specifier: ^6.0.3 + version: 6.0.3 + eslint: + specifier: ^9.18.0 + version: 9.39.1 + prettier: + specifier: ^3.4.2 + version: 3.7.4 + rimraf: + specifier: ^6.0.1 + version: 6.1.2 + tsx: + specifier: ^4.19.2 + version: 4.21.0 + typescript: + specifier: ^5.7.3 + version: 5.8.3 + typescript-eslint: + specifier: ^8.21.0 + version: 8.48.1(eslint@9.39.1)(typescript@5.8.3) + vite: + specifier: ^6.1.0 + version: 6.4.1(@types/node@22.19.9)(tsx@4.21.0) + vitest: + specifier: ^3.0.5 + version: 3.2.4(@types/node@22.19.9)(tsx@4.21.0) + + npm-webbuf-sha256: + dependencies: + '@webbuf/fixedbuf': + specifier: workspace:^ + version: link:../npm-webbuf-fixedbuf + '@webbuf/webbuf': + specifier: workspace:^ + version: link:../npm-webbuf-webbuf + devDependencies: + '@eslint/js': + specifier: ^9.18.0 + version: 9.39.1 + '@types/node': + specifier: ^22.13.2 + version: 22.19.9 + buffer: + specifier: ^6.0.3 + version: 6.0.3 + eslint: + specifier: ^9.18.0 + version: 9.39.1 + prettier: + specifier: ^3.4.2 + version: 3.7.4 + rimraf: + specifier: ^6.0.1 + version: 6.1.2 + tsx: + specifier: ^4.19.2 + version: 4.21.0 + typescript: + specifier: ^5.7.3 + version: 5.8.3 + typescript-eslint: + specifier: ^8.21.0 + version: 8.48.1(eslint@9.39.1)(typescript@5.8.3) + vite: + specifier: ^6.1.0 + version: 6.4.1(@types/node@22.19.9)(tsx@4.21.0) + vitest: + specifier: ^3.0.5 + version: 3.2.4(@types/node@22.19.9)(tsx@4.21.0) + + npm-webbuf-webbuf: + devDependencies: + '@eslint/js': + specifier: ^9.18.0 + version: 9.39.1 + '@types/node': + specifier: ^22.13.2 + version: 22.19.9 + buffer: + specifier: ^6.0.3 + version: 6.0.3 + eslint: + specifier: ^9.18.0 + version: 9.39.1 + prettier: + specifier: ^3.4.2 + version: 3.7.4 + rimraf: + specifier: ^6.0.1 + version: 6.1.2 + tsx: + specifier: ^4.19.2 + version: 4.21.0 + typescript: + specifier: ^5.7.3 + version: 5.8.3 + typescript-eslint: + specifier: ^8.21.0 + version: 8.48.1(eslint@9.39.1)(typescript@5.8.3) + vite: + specifier: ^6.1.0 + version: 6.4.1(@types/node@22.19.9)(tsx@4.21.0) + vitest: + specifier: ^3.0.5 + version: 3.2.4(@types/node@22.19.9)(tsx@4.21.0) + packages: + '@esbuild/aix-ppc64@0.25.12': + resolution: {integrity: sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + + '@esbuild/aix-ppc64@0.27.3': + resolution: {integrity: sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + + '@esbuild/android-arm64@0.25.12': + resolution: {integrity: sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm64@0.27.3': + resolution: {integrity: sha512-YdghPYUmj/FX2SYKJ0OZxf+iaKgMsKHVPF1MAq/P8WirnSpCStzKJFjOjzsW0QQ7oIAiccHdcqjbHmJxRb/dmg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm@0.25.12': + resolution: {integrity: sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + + '@esbuild/android-arm@0.27.3': + resolution: {integrity: sha512-i5D1hPY7GIQmXlXhs2w8AWHhenb00+GxjxRncS2ZM7YNVGNfaMxgzSGuO8o8SJzRc/oZwU2bcScvVERk03QhzA==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + + '@esbuild/android-x64@0.25.12': + resolution: {integrity: sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + + '@esbuild/android-x64@0.27.3': + resolution: {integrity: sha512-IN/0BNTkHtk8lkOM8JWAYFg4ORxBkZQf9zXiEOfERX/CzxW3Vg1ewAhU7QSWQpVIzTW+b8Xy+lGzdYXV6UZObQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + + '@esbuild/darwin-arm64@0.25.12': + resolution: {integrity: sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-arm64@0.27.3': + resolution: {integrity: sha512-Re491k7ByTVRy0t3EKWajdLIr0gz2kKKfzafkth4Q8A5n1xTHrkqZgLLjFEHVD+AXdUGgQMq+Godfq45mGpCKg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-x64@0.25.12': + resolution: {integrity: sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + + '@esbuild/darwin-x64@0.27.3': + resolution: {integrity: sha512-vHk/hA7/1AckjGzRqi6wbo+jaShzRowYip6rt6q7VYEDX4LEy1pZfDpdxCBnGtl+A5zq8iXDcyuxwtv3hNtHFg==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + + '@esbuild/freebsd-arm64@0.25.12': + resolution: {integrity: sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-arm64@0.27.3': + resolution: {integrity: sha512-ipTYM2fjt3kQAYOvo6vcxJx3nBYAzPjgTCk7QEgZG8AUO3ydUhvelmhrbOheMnGOlaSFUoHXB6un+A7q4ygY9w==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.25.12': + resolution: {integrity: sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.27.3': + resolution: {integrity: sha512-dDk0X87T7mI6U3K9VjWtHOXqwAMJBNN2r7bejDsc+j03SEjtD9HrOl8gVFByeM0aJksoUuUVU9TBaZa2rgj0oA==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + + '@esbuild/linux-arm64@0.25.12': + resolution: {integrity: sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm64@0.27.3': + resolution: {integrity: sha512-sZOuFz/xWnZ4KH3YfFrKCf1WyPZHakVzTiqji3WDc0BCl2kBwiJLCXpzLzUBLgmp4veFZdvN5ChW4Eq/8Fc2Fg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.25.12': + resolution: {integrity: sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-arm@0.27.3': + resolution: {integrity: sha512-s6nPv2QkSupJwLYyfS+gwdirm0ukyTFNl3KTgZEAiJDd+iHZcbTPPcWCcRYH+WlNbwChgH2QkE9NSlNrMT8Gfw==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-ia32@0.25.12': + resolution: {integrity: sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-ia32@0.27.3': + resolution: {integrity: sha512-yGlQYjdxtLdh0a3jHjuwOrxQjOZYD/C9PfdbgJJF3TIZWnm/tMd/RcNiLngiu4iwcBAOezdnSLAwQDPqTmtTYg==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-loong64@0.25.12': + resolution: {integrity: sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-loong64@0.27.3': + resolution: {integrity: sha512-WO60Sn8ly3gtzhyjATDgieJNet/KqsDlX5nRC5Y3oTFcS1l0KWba+SEa9Ja1GfDqSF1z6hif/SkpQJbL63cgOA==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-mips64el@0.25.12': + resolution: {integrity: sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-mips64el@0.27.3': + resolution: {integrity: sha512-APsymYA6sGcZ4pD6k+UxbDjOFSvPWyZhjaiPyl/f79xKxwTnrn5QUnXR5prvetuaSMsb4jgeHewIDCIWljrSxw==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-ppc64@0.25.12': + resolution: {integrity: sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-ppc64@0.27.3': + resolution: {integrity: sha512-eizBnTeBefojtDb9nSh4vvVQ3V9Qf9Df01PfawPcRzJH4gFSgrObw+LveUyDoKU3kxi5+9RJTCWlj4FjYXVPEA==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.25.12': + resolution: {integrity: sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-riscv64@0.27.3': + resolution: {integrity: sha512-3Emwh0r5wmfm3ssTWRQSyVhbOHvqegUDRd0WhmXKX2mkHJe1SFCMJhagUleMq+Uci34wLSipf8Lagt4LlpRFWQ==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-s390x@0.25.12': + resolution: {integrity: sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-s390x@0.27.3': + resolution: {integrity: sha512-pBHUx9LzXWBc7MFIEEL0yD/ZVtNgLytvx60gES28GcWMqil8ElCYR4kvbV2BDqsHOvVDRrOxGySBM9Fcv744hw==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-x64@0.25.12': + resolution: {integrity: sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + + '@esbuild/linux-x64@0.27.3': + resolution: {integrity: sha512-Czi8yzXUWIQYAtL/2y6vogER8pvcsOsk5cpwL4Gk5nJqH5UZiVByIY8Eorm5R13gq+DQKYg0+JyQoytLQas4dA==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-arm64@0.25.12': + resolution: {integrity: sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + + '@esbuild/netbsd-arm64@0.27.3': + resolution: {integrity: sha512-sDpk0RgmTCR/5HguIZa9n9u+HVKf40fbEUt+iTzSnCaGvY9kFP0YKBWZtJaraonFnqef5SlJ8/TiPAxzyS+UoA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.25.12': + resolution: {integrity: sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.27.3': + resolution: {integrity: sha512-P14lFKJl/DdaE00LItAukUdZO5iqNH7+PjoBm+fLQjtxfcfFE20Xf5CrLsmZdq5LFFZzb5JMZ9grUwvtVYzjiA==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-arm64@0.25.12': + resolution: {integrity: sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + + '@esbuild/openbsd-arm64@0.27.3': + resolution: {integrity: sha512-AIcMP77AvirGbRl/UZFTq5hjXK+2wC7qFRGoHSDrZ5v5b8DK/GYpXW3CPRL53NkvDqb9D+alBiC/dV0Fb7eJcw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.25.12': + resolution: {integrity: sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.27.3': + resolution: {integrity: sha512-DnW2sRrBzA+YnE70LKqnM3P+z8vehfJWHXECbwBmH/CU51z6FiqTQTHFenPlHmo3a8UgpLyH3PT+87OViOh1AQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + + '@esbuild/openharmony-arm64@0.25.12': + resolution: {integrity: sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openharmony] + + '@esbuild/openharmony-arm64@0.27.3': + resolution: {integrity: sha512-NinAEgr/etERPTsZJ7aEZQvvg/A6IsZG/LgZy+81wON2huV7SrK3e63dU0XhyZP4RKGyTm7aOgmQk0bGp0fy2g==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openharmony] + + '@esbuild/sunos-x64@0.25.12': + resolution: {integrity: sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + + '@esbuild/sunos-x64@0.27.3': + resolution: {integrity: sha512-PanZ+nEz+eWoBJ8/f8HKxTTD172SKwdXebZ0ndd953gt1HRBbhMsaNqjTyYLGLPdoWHy4zLU7bDVJztF5f3BHA==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + + '@esbuild/win32-arm64@0.25.12': + resolution: {integrity: sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-arm64@0.27.3': + resolution: {integrity: sha512-B2t59lWWYrbRDw/tjiWOuzSsFh1Y/E95ofKz7rIVYSQkUYBjfSgf6oeYPNWHToFRr2zx52JKApIcAS/D5TUBnA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.25.12': + resolution: {integrity: sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-ia32@0.27.3': + resolution: {integrity: sha512-QLKSFeXNS8+tHW7tZpMtjlNb7HKau0QDpwm49u0vUp9y1WOF+PEzkU84y9GqYaAVW8aH8f3GcBck26jh54cX4Q==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.25.12': + resolution: {integrity: sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + + '@esbuild/win32-x64@0.27.3': + resolution: {integrity: sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + '@eslint-community/eslint-utils@4.9.0': resolution: {integrity: sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -80,12 +1047,173 @@ packages: resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} engines: {node: '>=18.18'} + '@isaacs/balanced-match@4.0.1': + resolution: {integrity: sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==} + engines: {node: 20 || >=22} + + '@isaacs/brace-expansion@5.0.1': + resolution: {integrity: sha512-WMz71T1JS624nWj2n2fnYAuPovhv7EUhk69R6i9dsVyzxt5eM3bjwvgk9L+APE1TRscGysAVMANkB0jh0LQZrQ==} + engines: {node: 20 || >=22} + + '@jridgewell/sourcemap-codec@1.5.5': + resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} + + '@noble/secp256k1@3.0.0': + resolution: {integrity: sha512-NJBaR352KyIvj3t6sgT/+7xrNyF9Xk9QlLSIqUGVUYlsnDTAUqY8LOmwpcgEx4AMJXRITQ5XEVHD+mMaPfr3mg==} + + '@rollup/rollup-android-arm-eabi@4.57.1': + resolution: {integrity: sha512-A6ehUVSiSaaliTxai040ZpZ2zTevHYbvu/lDoeAteHI8QnaosIzm4qwtezfRg1jOYaUmnzLX1AOD6Z+UJjtifg==} + cpu: [arm] + os: [android] + + '@rollup/rollup-android-arm64@4.57.1': + resolution: {integrity: sha512-dQaAddCY9YgkFHZcFNS/606Exo8vcLHwArFZ7vxXq4rigo2bb494/xKMMwRRQW6ug7Js6yXmBZhSBRuBvCCQ3w==} + cpu: [arm64] + os: [android] + + '@rollup/rollup-darwin-arm64@4.57.1': + resolution: {integrity: sha512-crNPrwJOrRxagUYeMn/DZwqN88SDmwaJ8Cvi/TN1HnWBU7GwknckyosC2gd0IqYRsHDEnXf328o9/HC6OkPgOg==} + cpu: [arm64] + os: [darwin] + + '@rollup/rollup-darwin-x64@4.57.1': + resolution: {integrity: sha512-Ji8g8ChVbKrhFtig5QBV7iMaJrGtpHelkB3lsaKzadFBe58gmjfGXAOfI5FV0lYMH8wiqsxKQ1C9B0YTRXVy4w==} + cpu: [x64] + os: [darwin] + + '@rollup/rollup-freebsd-arm64@4.57.1': + resolution: {integrity: sha512-R+/WwhsjmwodAcz65guCGFRkMb4gKWTcIeLy60JJQbXrJ97BOXHxnkPFrP+YwFlaS0m+uWJTstrUA9o+UchFug==} + cpu: [arm64] + os: [freebsd] + + '@rollup/rollup-freebsd-x64@4.57.1': + resolution: {integrity: sha512-IEQTCHeiTOnAUC3IDQdzRAGj3jOAYNr9kBguI7MQAAZK3caezRrg0GxAb6Hchg4lxdZEI5Oq3iov/w/hnFWY9Q==} + cpu: [x64] + os: [freebsd] + + '@rollup/rollup-linux-arm-gnueabihf@4.57.1': + resolution: {integrity: sha512-F8sWbhZ7tyuEfsmOxwc2giKDQzN3+kuBLPwwZGyVkLlKGdV1nvnNwYD0fKQ8+XS6hp9nY7B+ZeK01EBUE7aHaw==} + cpu: [arm] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-arm-musleabihf@4.57.1': + resolution: {integrity: sha512-rGfNUfn0GIeXtBP1wL5MnzSj98+PZe/AXaGBCRmT0ts80lU5CATYGxXukeTX39XBKsxzFpEeK+Mrp9faXOlmrw==} + cpu: [arm] + os: [linux] + libc: [musl] + + '@rollup/rollup-linux-arm64-gnu@4.57.1': + resolution: {integrity: sha512-MMtej3YHWeg/0klK2Qodf3yrNzz6CGjo2UntLvk2RSPlhzgLvYEB3frRvbEF2wRKh1Z2fDIg9KRPe1fawv7C+g==} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-arm64-musl@4.57.1': + resolution: {integrity: sha512-1a/qhaaOXhqXGpMFMET9VqwZakkljWHLmZOX48R0I/YLbhdxr1m4gtG1Hq7++VhVUmf+L3sTAf9op4JlhQ5u1Q==} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@rollup/rollup-linux-loong64-gnu@4.57.1': + resolution: {integrity: sha512-QWO6RQTZ/cqYtJMtxhkRkidoNGXc7ERPbZN7dVW5SdURuLeVU7lwKMpo18XdcmpWYd0qsP1bwKPf7DNSUinhvA==} + cpu: [loong64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-loong64-musl@4.57.1': + resolution: {integrity: sha512-xpObYIf+8gprgWaPP32xiN5RVTi/s5FCR+XMXSKmhfoJjrpRAjCuuqQXyxUa/eJTdAE6eJ+KDKaoEqjZQxh3Gw==} + cpu: [loong64] + os: [linux] + libc: [musl] + + '@rollup/rollup-linux-ppc64-gnu@4.57.1': + resolution: {integrity: sha512-4BrCgrpZo4hvzMDKRqEaW1zeecScDCR+2nZ86ATLhAoJ5FQ+lbHVD3ttKe74/c7tNT9c6F2viwB3ufwp01Oh2w==} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-ppc64-musl@4.57.1': + resolution: {integrity: sha512-NOlUuzesGauESAyEYFSe3QTUguL+lvrN1HtwEEsU2rOwdUDeTMJdO5dUYl/2hKf9jWydJrO9OL/XSSf65R5+Xw==} + cpu: [ppc64] + os: [linux] + libc: [musl] + + '@rollup/rollup-linux-riscv64-gnu@4.57.1': + resolution: {integrity: sha512-ptA88htVp0AwUUqhVghwDIKlvJMD/fmL/wrQj99PRHFRAG6Z5nbWoWG4o81Nt9FT+IuqUQi+L31ZKAFeJ5Is+A==} + cpu: [riscv64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-riscv64-musl@4.57.1': + resolution: {integrity: sha512-S51t7aMMTNdmAMPpBg7OOsTdn4tySRQvklmL3RpDRyknk87+Sp3xaumlatU+ppQ+5raY7sSTcC2beGgvhENfuw==} + cpu: [riscv64] + os: [linux] + libc: [musl] + + '@rollup/rollup-linux-s390x-gnu@4.57.1': + resolution: {integrity: sha512-Bl00OFnVFkL82FHbEqy3k5CUCKH6OEJL54KCyx2oqsmZnFTR8IoNqBF+mjQVcRCT5sB6yOvK8A37LNm/kPJiZg==} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-x64-gnu@4.57.1': + resolution: {integrity: sha512-ABca4ceT4N+Tv/GtotnWAeXZUZuM/9AQyCyKYyKnpk4yoA7QIAuBt6Hkgpw8kActYlew2mvckXkvx0FfoInnLg==} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-x64-musl@4.57.1': + resolution: {integrity: sha512-HFps0JeGtuOR2convgRRkHCekD7j+gdAuXM+/i6kGzQtFhlCtQkpwtNzkNj6QhCDp7DRJ7+qC/1Vg2jt5iSOFw==} + cpu: [x64] + os: [linux] + libc: [musl] + + '@rollup/rollup-openbsd-x64@4.57.1': + resolution: {integrity: sha512-H+hXEv9gdVQuDTgnqD+SQffoWoc0Of59AStSzTEj/feWTBAnSfSD3+Dql1ZruJQxmykT/JVY0dE8Ka7z0DH1hw==} + cpu: [x64] + os: [openbsd] + + '@rollup/rollup-openharmony-arm64@4.57.1': + resolution: {integrity: sha512-4wYoDpNg6o/oPximyc/NG+mYUejZrCU2q+2w6YZqrAs2UcNUChIZXjtafAiiZSUc7On8v5NyNj34Kzj/Ltk6dQ==} + cpu: [arm64] + os: [openharmony] + + '@rollup/rollup-win32-arm64-msvc@4.57.1': + resolution: {integrity: sha512-O54mtsV/6LW3P8qdTcamQmuC990HDfR71lo44oZMZlXU4tzLrbvTii87Ni9opq60ds0YzuAlEr/GNwuNluZyMQ==} + cpu: [arm64] + os: [win32] + + '@rollup/rollup-win32-ia32-msvc@4.57.1': + resolution: {integrity: sha512-P3dLS+IerxCT/7D2q2FYcRdWRl22dNbrbBEtxdWhXrfIMPP9lQhb5h4Du04mdl5Woq05jVCDPCMF7Ub0NAjIew==} + cpu: [ia32] + os: [win32] + + '@rollup/rollup-win32-x64-gnu@4.57.1': + resolution: {integrity: sha512-VMBH2eOOaKGtIJYleXsi2B8CPVADrh+TyNxJ4mWPnKfLB/DBUmzW+5m1xUrcwWoMfSLagIRpjUFeW5CO5hyciQ==} + cpu: [x64] + os: [win32] + + '@rollup/rollup-win32-x64-msvc@4.57.1': + resolution: {integrity: sha512-mxRFDdHIWRxg3UfIIAwCm6NzvxG0jDX/wBN6KsQFTvKFqqg9vTrWUE68qEjHt19A5wwx5X5aUi2zuZT7YR0jrA==} + cpu: [x64] + os: [win32] + + '@types/chai@5.2.3': + resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==} + + '@types/deep-eql@4.0.2': + resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} + '@types/estree@1.0.8': resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + '@types/node@22.19.9': + resolution: {integrity: sha512-PD03/U8g1F9T9MI+1OBisaIARhSzeidsUjQaf51fOxrfjeiKN9bLVO06lHuHYjxdnqLWJijJHfqXPSJri2EM2A==} + '@typescript-eslint/eslint-plugin@8.48.1': resolution: {integrity: sha512-X63hI1bxl5ohelzr0LY5coufyl0LJNthld+abwxpCoo6Gq+hSqhKwci7MUWkXo67mzgUK6YFByhmaHmUcuBJmA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -145,6 +1273,42 @@ packages: resolution: {integrity: sha512-BmxxndzEWhE4TIEEMBs8lP3MBWN3jFPs/p6gPm/wkv02o41hI6cq9AuSmGAaTTHPtA1FTi2jBre4A9rm5ZmX+Q==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@vitest/expect@3.2.4': + resolution: {integrity: sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==} + + '@vitest/mocker@3.2.4': + resolution: {integrity: sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ==} + peerDependencies: + msw: ^2.4.9 + vite: ^5.0.0 || ^6.0.0 || ^7.0.0-0 + peerDependenciesMeta: + msw: + optional: true + vite: + optional: true + + '@vitest/pretty-format@3.2.4': + resolution: {integrity: sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==} + + '@vitest/runner@3.2.4': + resolution: {integrity: sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ==} + + '@vitest/snapshot@3.2.4': + resolution: {integrity: sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ==} + + '@vitest/spy@3.2.4': + resolution: {integrity: sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==} + + '@vitest/utils@3.2.4': + resolution: {integrity: sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==} + + '@webbuf/blake3@3.5.0': + resolution: {integrity: sha512-+QiV1Fo70aSzS2M/xyJwatOHwtpnqkUMLjIMd5Iom8UEHCiovfaxZM94yopCBYw5Lda0tMSXyKTcMcyqIWbRlg==} + engines: {node: '>=20.8.0'} + peerDependencies: + '@webbuf/fixedbuf': ^3.5.0 + '@webbuf/webbuf': ^3.5.0 + acorn-jsx@5.3.2: resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: @@ -165,23 +1329,45 @@ packages: argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + assertion-error@2.0.1: + resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} + engines: {node: '>=12'} + balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + brace-expansion@1.1.12: resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==} brace-expansion@2.0.1: resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + buffer@6.0.3: + resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} + + cac@6.7.14: + resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} + engines: {node: '>=8'} + callsites@3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} + chai@5.3.3: + resolution: {integrity: sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==} + engines: {node: '>=18'} + chalk@4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} + check-error@2.1.3: + resolution: {integrity: sha512-PAJdDJusoxnwm1VwW07VWwUN1sl7smmC3OKggvndJFadxxDRyFJBX/ggnu/KE4kQAB7a3Dp8f/YXC1FlUprWmA==} + engines: {node: '>= 16'} + color-convert@2.0.1: resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} engines: {node: '>=7.0.0'} @@ -205,9 +1391,26 @@ packages: supports-color: optional: true + deep-eql@5.0.2: + resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} + engines: {node: '>=6'} + deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + es-module-lexer@1.7.0: + resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} + + esbuild@0.25.12: + resolution: {integrity: sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==} + engines: {node: '>=18'} + hasBin: true + + esbuild@0.27.3: + resolution: {integrity: sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg==} + engines: {node: '>=18'} + hasBin: true + escape-string-regexp@4.0.0: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} @@ -250,10 +1453,17 @@ packages: resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} engines: {node: '>=4.0'} + estree-walker@3.0.3: + resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} + esutils@2.0.3: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} + expect-type@1.3.0: + resolution: {integrity: sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==} + engines: {node: '>=12.0.0'} + fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} @@ -287,10 +1497,22 @@ packages: flatted@3.3.3: resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + get-tsconfig@4.13.5: + resolution: {integrity: sha512-v4/4xAEpBRp6SvCkWhnGCaLkJf9IwWzrsygJPxD/+p2/xPE3C5m2fA9FD0Ry9tG+Rqqq3gBzHSl6y1/T9V/tMQ==} + glob-parent@6.0.2: resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} engines: {node: '>=10.13.0'} + glob@13.0.1: + resolution: {integrity: sha512-B7U/vJpE3DkJ5WXTgTpTRN63uV42DseiXXKMwG14LQBXmsdeIoHAPbU/MEo6II0k5ED74uc2ZGTC6MwHFQhF6w==} + engines: {node: 20 || >=22} + globals@14.0.0: resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} engines: {node: '>=18'} @@ -302,6 +1524,9 @@ packages: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} + ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + ignore@5.3.2: resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} @@ -329,6 +1554,9 @@ packages: isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + js-tokens@9.0.1: + resolution: {integrity: sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==} + js-yaml@4.1.1: resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==} hasBin: true @@ -356,6 +1584,20 @@ packages: lodash.merge@4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + loupe@3.2.1: + resolution: {integrity: sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==} + + lru-cache@11.2.5: + resolution: {integrity: sha512-vFrFJkWtJvJnD5hg+hJvVE8Lh/TcMzKnTgCWmtBipwI5yLX/iX+5UB2tfuyODF5E7k9xEzMdYgGqaSb1c0c5Yw==} + engines: {node: 20 || >=22} + + magic-string@0.30.21: + resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} + + minimatch@10.1.2: + resolution: {integrity: sha512-fu656aJ0n2kcXwsnwnv9g24tkU5uSmOlTjd6WyyaKm2Z+h1qmY6bAjrcaIxF/BslFqbZ8UBtbJi7KgQOZD2PTw==} + engines: {node: 20 || >=22} + minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} @@ -363,9 +1605,18 @@ packages: resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} engines: {node: '>=16 || 14 >=14.17'} + minipass@7.1.2: + resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} + engines: {node: '>=16 || 14 >=14.17'} + ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + nanoid@3.3.11: + resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} @@ -381,6 +1632,9 @@ packages: resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} engines: {node: '>=10'} + package-json-from-dist@1.0.1: + resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} + parent-module@1.0.1: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} @@ -393,10 +1647,28 @@ packages: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} + path-scurry@2.0.1: + resolution: {integrity: sha512-oWyT4gICAu+kaA7QWk/jvCHWarMKNs6pXOGWKDTr7cw4IGcUbW+PeTfbaQiLGheFRpjo6O9J0PmyMfQPjH71oA==} + engines: {node: 20 || >=22} + + pathe@2.0.3: + resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} + + pathval@2.0.1: + resolution: {integrity: sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==} + engines: {node: '>= 14.16'} + + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + picomatch@4.0.3: resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} engines: {node: '>=12'} + postcss@8.5.6: + resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} + engines: {node: ^10 || ^12 || >=14} + prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} @@ -414,6 +1686,23 @@ packages: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} + resolve-pkg-maps@1.0.0: + resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + + rimraf@6.1.2: + resolution: {integrity: sha512-cFCkPslJv7BAXJsYlK1dZsbP8/ZNLkCAQ0bi1hf5EKX2QHegmDFEFA6QhuYJlk7UDdc+02JjO80YSOrWPpw06g==} + engines: {node: 20 || >=22} + hasBin: true + + ripemd160-js@3.0.4: + resolution: {integrity: sha512-lhDcLriFFscUr4yoqVCP2f8ZRpBnikW2TLfnGi2Fw+wSzmvrdSi6c13By8ZGLysrS0s8oLxNVbdodGCWhbPTYw==} + engines: {node: '>= 16', npm: '>=7.0.0'} + + rollup@4.57.1: + resolution: {integrity: sha512-oQL6lgK3e2QZeQ7gcgIkS2YZPg5slw37hYufJ3edKlfQSGGm8ICoxswK15ntSzF/a8+h7ekRy7k7oWc3BQ7y8A==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + semver@7.7.3: resolution: {integrity: sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==} engines: {node: '>=10'} @@ -427,24 +1716,63 @@ packages: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} + siginfo@2.0.0: + resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} + + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + + stackback@0.0.2: + resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} + + std-env@3.10.0: + resolution: {integrity: sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==} + strip-json-comments@3.1.1: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} + strip-literal@3.1.0: + resolution: {integrity: sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg==} + supports-color@7.2.0: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} engines: {node: '>=8'} + tinybench@2.9.0: + resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} + + tinyexec@0.3.2: + resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} + tinyglobby@0.2.15: resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} engines: {node: '>=12.0.0'} + tinypool@1.1.1: + resolution: {integrity: sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==} + engines: {node: ^18.0.0 || >=20.0.0} + + tinyrainbow@2.0.0: + resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==} + engines: {node: '>=14.0.0'} + + tinyspy@4.0.4: + resolution: {integrity: sha512-azl+t0z7pw/z958Gy9svOTuzqIk6xq+NSheJzn5MMWtWTFywIacg2wUlzKFGtt3cthx0r2SxMK0yzJOR0IES7Q==} + engines: {node: '>=14.0.0'} + ts-api-utils@2.1.0: resolution: {integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==} engines: {node: '>=18.12'} peerDependencies: typescript: '>=4.8.4' + tsx@4.21.0: + resolution: {integrity: sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==} + engines: {node: '>=18.0.0'} + hasBin: true + type-check@0.4.0: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} @@ -461,14 +1789,95 @@ packages: engines: {node: '>=14.17'} hasBin: true + undici-types@6.21.0: + resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} + uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + vite-node@3.2.4: + resolution: {integrity: sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + hasBin: true + + vite@6.4.1: + resolution: {integrity: sha512-+Oxm7q9hDoLMyJOYfUYBuHQo+dkAloi33apOPP56pzj+vsdJDzr+j1NISE5pyaAuKL4A3UD34qd0lx5+kfKp2g==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + hasBin: true + peerDependencies: + '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 + jiti: '>=1.21.0' + less: '*' + lightningcss: ^1.21.0 + sass: '*' + sass-embedded: '*' + stylus: '*' + sugarss: '*' + terser: ^5.16.0 + tsx: ^4.8.1 + yaml: ^2.4.2 + peerDependenciesMeta: + '@types/node': + optional: true + jiti: + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + yaml: + optional: true + + vitest@3.2.4: + resolution: {integrity: sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + hasBin: true + peerDependencies: + '@edge-runtime/vm': '*' + '@types/debug': ^4.1.12 + '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 + '@vitest/browser': 3.2.4 + '@vitest/ui': 3.2.4 + happy-dom: '*' + jsdom: '*' + peerDependenciesMeta: + '@edge-runtime/vm': + optional: true + '@types/debug': + optional: true + '@types/node': + optional: true + '@vitest/browser': + optional: true + '@vitest/ui': + optional: true + happy-dom: + optional: true + jsdom: + optional: true + which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'} hasBin: true + why-is-node-running@2.3.0: + resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} + engines: {node: '>=8'} + hasBin: true + word-wrap@1.2.5: resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} engines: {node: '>=0.10.0'} @@ -479,6 +1888,162 @@ packages: snapshots: + '@esbuild/aix-ppc64@0.25.12': + optional: true + + '@esbuild/aix-ppc64@0.27.3': + optional: true + + '@esbuild/android-arm64@0.25.12': + optional: true + + '@esbuild/android-arm64@0.27.3': + optional: true + + '@esbuild/android-arm@0.25.12': + optional: true + + '@esbuild/android-arm@0.27.3': + optional: true + + '@esbuild/android-x64@0.25.12': + optional: true + + '@esbuild/android-x64@0.27.3': + optional: true + + '@esbuild/darwin-arm64@0.25.12': + optional: true + + '@esbuild/darwin-arm64@0.27.3': + optional: true + + '@esbuild/darwin-x64@0.25.12': + optional: true + + '@esbuild/darwin-x64@0.27.3': + optional: true + + '@esbuild/freebsd-arm64@0.25.12': + optional: true + + '@esbuild/freebsd-arm64@0.27.3': + optional: true + + '@esbuild/freebsd-x64@0.25.12': + optional: true + + '@esbuild/freebsd-x64@0.27.3': + optional: true + + '@esbuild/linux-arm64@0.25.12': + optional: true + + '@esbuild/linux-arm64@0.27.3': + optional: true + + '@esbuild/linux-arm@0.25.12': + optional: true + + '@esbuild/linux-arm@0.27.3': + optional: true + + '@esbuild/linux-ia32@0.25.12': + optional: true + + '@esbuild/linux-ia32@0.27.3': + optional: true + + '@esbuild/linux-loong64@0.25.12': + optional: true + + '@esbuild/linux-loong64@0.27.3': + optional: true + + '@esbuild/linux-mips64el@0.25.12': + optional: true + + '@esbuild/linux-mips64el@0.27.3': + optional: true + + '@esbuild/linux-ppc64@0.25.12': + optional: true + + '@esbuild/linux-ppc64@0.27.3': + optional: true + + '@esbuild/linux-riscv64@0.25.12': + optional: true + + '@esbuild/linux-riscv64@0.27.3': + optional: true + + '@esbuild/linux-s390x@0.25.12': + optional: true + + '@esbuild/linux-s390x@0.27.3': + optional: true + + '@esbuild/linux-x64@0.25.12': + optional: true + + '@esbuild/linux-x64@0.27.3': + optional: true + + '@esbuild/netbsd-arm64@0.25.12': + optional: true + + '@esbuild/netbsd-arm64@0.27.3': + optional: true + + '@esbuild/netbsd-x64@0.25.12': + optional: true + + '@esbuild/netbsd-x64@0.27.3': + optional: true + + '@esbuild/openbsd-arm64@0.25.12': + optional: true + + '@esbuild/openbsd-arm64@0.27.3': + optional: true + + '@esbuild/openbsd-x64@0.25.12': + optional: true + + '@esbuild/openbsd-x64@0.27.3': + optional: true + + '@esbuild/openharmony-arm64@0.25.12': + optional: true + + '@esbuild/openharmony-arm64@0.27.3': + optional: true + + '@esbuild/sunos-x64@0.25.12': + optional: true + + '@esbuild/sunos-x64@0.27.3': + optional: true + + '@esbuild/win32-arm64@0.25.12': + optional: true + + '@esbuild/win32-arm64@0.27.3': + optional: true + + '@esbuild/win32-ia32@0.25.12': + optional: true + + '@esbuild/win32-ia32@0.27.3': + optional: true + + '@esbuild/win32-x64@0.25.12': + optional: true + + '@esbuild/win32-x64@0.27.3': + optional: true + '@eslint-community/eslint-utils@4.9.0(eslint@9.39.1)': dependencies: eslint: 9.39.1 @@ -536,10 +2101,106 @@ snapshots: '@humanwhocodes/retry@0.4.3': {} + '@isaacs/balanced-match@4.0.1': {} + + '@isaacs/brace-expansion@5.0.1': + dependencies: + '@isaacs/balanced-match': 4.0.1 + + '@jridgewell/sourcemap-codec@1.5.5': {} + + '@noble/secp256k1@3.0.0': {} + + '@rollup/rollup-android-arm-eabi@4.57.1': + optional: true + + '@rollup/rollup-android-arm64@4.57.1': + optional: true + + '@rollup/rollup-darwin-arm64@4.57.1': + optional: true + + '@rollup/rollup-darwin-x64@4.57.1': + optional: true + + '@rollup/rollup-freebsd-arm64@4.57.1': + optional: true + + '@rollup/rollup-freebsd-x64@4.57.1': + optional: true + + '@rollup/rollup-linux-arm-gnueabihf@4.57.1': + optional: true + + '@rollup/rollup-linux-arm-musleabihf@4.57.1': + optional: true + + '@rollup/rollup-linux-arm64-gnu@4.57.1': + optional: true + + '@rollup/rollup-linux-arm64-musl@4.57.1': + optional: true + + '@rollup/rollup-linux-loong64-gnu@4.57.1': + optional: true + + '@rollup/rollup-linux-loong64-musl@4.57.1': + optional: true + + '@rollup/rollup-linux-ppc64-gnu@4.57.1': + optional: true + + '@rollup/rollup-linux-ppc64-musl@4.57.1': + optional: true + + '@rollup/rollup-linux-riscv64-gnu@4.57.1': + optional: true + + '@rollup/rollup-linux-riscv64-musl@4.57.1': + optional: true + + '@rollup/rollup-linux-s390x-gnu@4.57.1': + optional: true + + '@rollup/rollup-linux-x64-gnu@4.57.1': + optional: true + + '@rollup/rollup-linux-x64-musl@4.57.1': + optional: true + + '@rollup/rollup-openbsd-x64@4.57.1': + optional: true + + '@rollup/rollup-openharmony-arm64@4.57.1': + optional: true + + '@rollup/rollup-win32-arm64-msvc@4.57.1': + optional: true + + '@rollup/rollup-win32-ia32-msvc@4.57.1': + optional: true + + '@rollup/rollup-win32-x64-gnu@4.57.1': + optional: true + + '@rollup/rollup-win32-x64-msvc@4.57.1': + optional: true + + '@types/chai@5.2.3': + dependencies: + '@types/deep-eql': 4.0.2 + assertion-error: 2.0.1 + + '@types/deep-eql@4.0.2': {} + '@types/estree@1.0.8': {} '@types/json-schema@7.0.15': {} + '@types/node@22.19.9': + dependencies: + undici-types: 6.21.0 + '@typescript-eslint/eslint-plugin@8.48.1(@typescript-eslint/parser@8.48.1(eslint@9.39.1)(typescript@5.8.3))(eslint@9.39.1)(typescript@5.8.3)': dependencies: '@eslint-community/regexpp': 4.12.2 @@ -632,6 +2293,53 @@ snapshots: '@typescript-eslint/types': 8.48.1 eslint-visitor-keys: 4.2.1 + '@vitest/expect@3.2.4': + dependencies: + '@types/chai': 5.2.3 + '@vitest/spy': 3.2.4 + '@vitest/utils': 3.2.4 + chai: 5.3.3 + tinyrainbow: 2.0.0 + + '@vitest/mocker@3.2.4(vite@6.4.1(@types/node@22.19.9)(tsx@4.21.0))': + dependencies: + '@vitest/spy': 3.2.4 + estree-walker: 3.0.3 + magic-string: 0.30.21 + optionalDependencies: + vite: 6.4.1(@types/node@22.19.9)(tsx@4.21.0) + + '@vitest/pretty-format@3.2.4': + dependencies: + tinyrainbow: 2.0.0 + + '@vitest/runner@3.2.4': + dependencies: + '@vitest/utils': 3.2.4 + pathe: 2.0.3 + strip-literal: 3.1.0 + + '@vitest/snapshot@3.2.4': + dependencies: + '@vitest/pretty-format': 3.2.4 + magic-string: 0.30.21 + pathe: 2.0.3 + + '@vitest/spy@3.2.4': + dependencies: + tinyspy: 4.0.4 + + '@vitest/utils@3.2.4': + dependencies: + '@vitest/pretty-format': 3.2.4 + loupe: 3.2.1 + tinyrainbow: 2.0.0 + + '@webbuf/blake3@3.5.0(@webbuf/fixedbuf@npm-webbuf-fixedbuf)(@webbuf/webbuf@npm-webbuf-webbuf)': + dependencies: + '@webbuf/fixedbuf': link:npm-webbuf-fixedbuf + '@webbuf/webbuf': link:npm-webbuf-webbuf + acorn-jsx@5.3.2(acorn@8.15.0): dependencies: acorn: 8.15.0 @@ -651,8 +2359,12 @@ snapshots: argparse@2.0.1: {} + assertion-error@2.0.1: {} + balanced-match@1.0.2: {} + base64-js@1.5.1: {} + brace-expansion@1.1.12: dependencies: balanced-match: 1.0.2 @@ -662,13 +2374,30 @@ snapshots: dependencies: balanced-match: 1.0.2 + buffer@6.0.3: + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + + cac@6.7.14: {} + callsites@3.1.0: {} + chai@5.3.3: + dependencies: + assertion-error: 2.0.1 + check-error: 2.1.3 + deep-eql: 5.0.2 + loupe: 3.2.1 + pathval: 2.0.1 + chalk@4.1.2: dependencies: ansi-styles: 4.3.0 supports-color: 7.2.0 + check-error@2.1.3: {} + color-convert@2.0.1: dependencies: color-name: 1.1.4 @@ -687,8 +2416,70 @@ snapshots: dependencies: ms: 2.1.3 + deep-eql@5.0.2: {} + deep-is@0.1.4: {} + es-module-lexer@1.7.0: {} + + esbuild@0.25.12: + optionalDependencies: + '@esbuild/aix-ppc64': 0.25.12 + '@esbuild/android-arm': 0.25.12 + '@esbuild/android-arm64': 0.25.12 + '@esbuild/android-x64': 0.25.12 + '@esbuild/darwin-arm64': 0.25.12 + '@esbuild/darwin-x64': 0.25.12 + '@esbuild/freebsd-arm64': 0.25.12 + '@esbuild/freebsd-x64': 0.25.12 + '@esbuild/linux-arm': 0.25.12 + '@esbuild/linux-arm64': 0.25.12 + '@esbuild/linux-ia32': 0.25.12 + '@esbuild/linux-loong64': 0.25.12 + '@esbuild/linux-mips64el': 0.25.12 + '@esbuild/linux-ppc64': 0.25.12 + '@esbuild/linux-riscv64': 0.25.12 + '@esbuild/linux-s390x': 0.25.12 + '@esbuild/linux-x64': 0.25.12 + '@esbuild/netbsd-arm64': 0.25.12 + '@esbuild/netbsd-x64': 0.25.12 + '@esbuild/openbsd-arm64': 0.25.12 + '@esbuild/openbsd-x64': 0.25.12 + '@esbuild/openharmony-arm64': 0.25.12 + '@esbuild/sunos-x64': 0.25.12 + '@esbuild/win32-arm64': 0.25.12 + '@esbuild/win32-ia32': 0.25.12 + '@esbuild/win32-x64': 0.25.12 + + esbuild@0.27.3: + optionalDependencies: + '@esbuild/aix-ppc64': 0.27.3 + '@esbuild/android-arm': 0.27.3 + '@esbuild/android-arm64': 0.27.3 + '@esbuild/android-x64': 0.27.3 + '@esbuild/darwin-arm64': 0.27.3 + '@esbuild/darwin-x64': 0.27.3 + '@esbuild/freebsd-arm64': 0.27.3 + '@esbuild/freebsd-x64': 0.27.3 + '@esbuild/linux-arm': 0.27.3 + '@esbuild/linux-arm64': 0.27.3 + '@esbuild/linux-ia32': 0.27.3 + '@esbuild/linux-loong64': 0.27.3 + '@esbuild/linux-mips64el': 0.27.3 + '@esbuild/linux-ppc64': 0.27.3 + '@esbuild/linux-riscv64': 0.27.3 + '@esbuild/linux-s390x': 0.27.3 + '@esbuild/linux-x64': 0.27.3 + '@esbuild/netbsd-arm64': 0.27.3 + '@esbuild/netbsd-x64': 0.27.3 + '@esbuild/openbsd-arm64': 0.27.3 + '@esbuild/openbsd-x64': 0.27.3 + '@esbuild/openharmony-arm64': 0.27.3 + '@esbuild/sunos-x64': 0.27.3 + '@esbuild/win32-arm64': 0.27.3 + '@esbuild/win32-ia32': 0.27.3 + '@esbuild/win32-x64': 0.27.3 + escape-string-regexp@4.0.0: {} eslint-scope@8.4.0: @@ -755,8 +2546,14 @@ snapshots: estraverse@5.3.0: {} + estree-walker@3.0.3: + dependencies: + '@types/estree': 1.0.8 + esutils@2.0.3: {} + expect-type@1.3.0: {} + fast-deep-equal@3.1.3: {} fast-json-stable-stringify@2.1.0: {} @@ -783,16 +2580,31 @@ snapshots: flatted@3.3.3: {} + fsevents@2.3.3: + optional: true + + get-tsconfig@4.13.5: + dependencies: + resolve-pkg-maps: 1.0.0 + glob-parent@6.0.2: dependencies: is-glob: 4.0.3 + glob@13.0.1: + dependencies: + minimatch: 10.1.2 + minipass: 7.1.2 + path-scurry: 2.0.1 + globals@14.0.0: {} graphemer@1.4.0: {} has-flag@4.0.0: {} + ieee754@1.2.1: {} + ignore@5.3.2: {} ignore@7.0.5: {} @@ -812,6 +2624,8 @@ snapshots: isexe@2.0.0: {} + js-tokens@9.0.1: {} + js-yaml@4.1.1: dependencies: argparse: 2.0.1 @@ -837,6 +2651,18 @@ snapshots: lodash.merge@4.6.2: {} + loupe@3.2.1: {} + + lru-cache@11.2.5: {} + + magic-string@0.30.21: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + + minimatch@10.1.2: + dependencies: + '@isaacs/brace-expansion': 5.0.1 + minimatch@3.1.2: dependencies: brace-expansion: 1.1.12 @@ -845,8 +2671,12 @@ snapshots: dependencies: brace-expansion: 2.0.1 + minipass@7.1.2: {} + ms@2.1.3: {} + nanoid@3.3.11: {} + natural-compare@1.4.0: {} optionator@0.9.4: @@ -866,6 +2696,8 @@ snapshots: dependencies: p-limit: 3.1.0 + package-json-from-dist@1.0.1: {} + parent-module@1.0.1: dependencies: callsites: 3.1.0 @@ -874,8 +2706,25 @@ snapshots: path-key@3.1.1: {} + path-scurry@2.0.1: + dependencies: + lru-cache: 11.2.5 + minipass: 7.1.2 + + pathe@2.0.3: {} + + pathval@2.0.1: {} + + picocolors@1.1.1: {} + picomatch@4.0.3: {} + postcss@8.5.6: + dependencies: + nanoid: 3.3.11 + picocolors: 1.1.1 + source-map-js: 1.2.1 + prelude-ls@1.2.1: {} prettier@3.7.4: {} @@ -884,6 +2733,46 @@ snapshots: resolve-from@4.0.0: {} + resolve-pkg-maps@1.0.0: {} + + rimraf@6.1.2: + dependencies: + glob: 13.0.1 + package-json-from-dist: 1.0.1 + + ripemd160-js@3.0.4: {} + + rollup@4.57.1: + dependencies: + '@types/estree': 1.0.8 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.57.1 + '@rollup/rollup-android-arm64': 4.57.1 + '@rollup/rollup-darwin-arm64': 4.57.1 + '@rollup/rollup-darwin-x64': 4.57.1 + '@rollup/rollup-freebsd-arm64': 4.57.1 + '@rollup/rollup-freebsd-x64': 4.57.1 + '@rollup/rollup-linux-arm-gnueabihf': 4.57.1 + '@rollup/rollup-linux-arm-musleabihf': 4.57.1 + '@rollup/rollup-linux-arm64-gnu': 4.57.1 + '@rollup/rollup-linux-arm64-musl': 4.57.1 + '@rollup/rollup-linux-loong64-gnu': 4.57.1 + '@rollup/rollup-linux-loong64-musl': 4.57.1 + '@rollup/rollup-linux-ppc64-gnu': 4.57.1 + '@rollup/rollup-linux-ppc64-musl': 4.57.1 + '@rollup/rollup-linux-riscv64-gnu': 4.57.1 + '@rollup/rollup-linux-riscv64-musl': 4.57.1 + '@rollup/rollup-linux-s390x-gnu': 4.57.1 + '@rollup/rollup-linux-x64-gnu': 4.57.1 + '@rollup/rollup-linux-x64-musl': 4.57.1 + '@rollup/rollup-openbsd-x64': 4.57.1 + '@rollup/rollup-openharmony-arm64': 4.57.1 + '@rollup/rollup-win32-arm64-msvc': 4.57.1 + '@rollup/rollup-win32-ia32-msvc': 4.57.1 + '@rollup/rollup-win32-x64-gnu': 4.57.1 + '@rollup/rollup-win32-x64-msvc': 4.57.1 + fsevents: 2.3.3 + semver@7.7.3: {} shebang-command@2.0.0: @@ -892,21 +2781,50 @@ snapshots: shebang-regex@3.0.0: {} + siginfo@2.0.0: {} + + source-map-js@1.2.1: {} + + stackback@0.0.2: {} + + std-env@3.10.0: {} + strip-json-comments@3.1.1: {} + strip-literal@3.1.0: + dependencies: + js-tokens: 9.0.1 + supports-color@7.2.0: dependencies: has-flag: 4.0.0 + tinybench@2.9.0: {} + + tinyexec@0.3.2: {} + tinyglobby@0.2.15: dependencies: fdir: 6.5.0(picomatch@4.0.3) picomatch: 4.0.3 + tinypool@1.1.1: {} + + tinyrainbow@2.0.0: {} + + tinyspy@4.0.4: {} + ts-api-utils@2.1.0(typescript@5.8.3): dependencies: typescript: 5.8.3 + tsx@4.21.0: + dependencies: + esbuild: 0.27.3 + get-tsconfig: 4.13.5 + optionalDependencies: + fsevents: 2.3.3 + type-check@0.4.0: dependencies: prelude-ls: 1.2.1 @@ -924,14 +2842,96 @@ snapshots: typescript@5.8.3: {} + undici-types@6.21.0: {} + uri-js@4.4.1: dependencies: punycode: 2.3.1 + vite-node@3.2.4(@types/node@22.19.9)(tsx@4.21.0): + dependencies: + cac: 6.7.14 + debug: 4.4.1 + es-module-lexer: 1.7.0 + pathe: 2.0.3 + vite: 6.4.1(@types/node@22.19.9)(tsx@4.21.0) + transitivePeerDependencies: + - '@types/node' + - jiti + - less + - lightningcss + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + - tsx + - yaml + + vite@6.4.1(@types/node@22.19.9)(tsx@4.21.0): + dependencies: + esbuild: 0.25.12 + fdir: 6.5.0(picomatch@4.0.3) + picomatch: 4.0.3 + postcss: 8.5.6 + rollup: 4.57.1 + tinyglobby: 0.2.15 + optionalDependencies: + '@types/node': 22.19.9 + fsevents: 2.3.3 + tsx: 4.21.0 + + vitest@3.2.4(@types/node@22.19.9)(tsx@4.21.0): + dependencies: + '@types/chai': 5.2.3 + '@vitest/expect': 3.2.4 + '@vitest/mocker': 3.2.4(vite@6.4.1(@types/node@22.19.9)(tsx@4.21.0)) + '@vitest/pretty-format': 3.2.4 + '@vitest/runner': 3.2.4 + '@vitest/snapshot': 3.2.4 + '@vitest/spy': 3.2.4 + '@vitest/utils': 3.2.4 + chai: 5.3.3 + debug: 4.4.1 + expect-type: 1.3.0 + magic-string: 0.30.21 + pathe: 2.0.3 + picomatch: 4.0.3 + std-env: 3.10.0 + tinybench: 2.9.0 + tinyexec: 0.3.2 + tinyglobby: 0.2.15 + tinypool: 1.1.1 + tinyrainbow: 2.0.0 + vite: 6.4.1(@types/node@22.19.9)(tsx@4.21.0) + vite-node: 3.2.4(@types/node@22.19.9)(tsx@4.21.0) + why-is-node-running: 2.3.0 + optionalDependencies: + '@types/node': 22.19.9 + transitivePeerDependencies: + - jiti + - less + - lightningcss + - msw + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + - tsx + - yaml + which@2.0.2: dependencies: isexe: 2.0.0 + why-is-node-running@2.3.0: + dependencies: + siginfo: 2.0.0 + stackback: 0.0.2 + word-wrap@1.2.5: {} yocto-queue@0.1.0: {}