import { CryptoUtil } from './classes/util/crypto.js'; const timers = new Map(); export const EPSILON = 2.23e-16; export const INCINERATOR_ADDRESS = 0; export const debounce = async (fn, delayMs) => { const timer = timers.get(fn); if (timer) { return timer.result; } const result = await fn(); timers.set(fn, { result }); setTimeout(() => { timers.delete(fn); }, delayMs); return result; }; export const delay = async (delayMs) => { await new Promise((resolve) => { setTimeout(resolve, delayMs); }); }; export const hexToRGB = (input) => { if (input.startsWith('#')) { input = input.slice(1); } const r = parseInt(`${input[0]}${input[1]}`, 16); const g = parseInt(`${input[2]}${input[3]}`, 16); const b = parseInt(`${input[4]}${input[5]}`, 16); return { r, g, b }; }; export const displayNumber = (value, decimals = 2) => (value.toString().length > decimals + 4 ? value.toFixed(decimals) : value); export const randomID = () => CryptoUtil.randomUUID().replaceAll('-', '').slice(0, 8); export const mochaRun = () => { if (mocha._state !== 'running') { mocha.run(); } };