UNPKG

utilyx

Version:

Modern utility helper library for cleaner, faster TypeScript/JavaScript development 🚀🔧

81 lines (80 loc) • 2.58 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.randomUUID = randomUUID; exports.debounce = debounce; exports.throttle = throttle; exports.deepClone = deepClone; exports.deepEqual = deepEqual; exports.generateTokenBase64 = generateTokenBase64; // 1. uuid: Generate a random UUID (v4 style) function randomUUID() { return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, c => { const r = (Math.random() * 16) | 0; const v = c === 'x' ? r : (r & 0x3) | 0x8; return v.toString(16); }); } // 7. debounce: stop spamming, chill function debounce(fn, delay) { let timer; return (...args) => { clearTimeout(timer); timer = setTimeout(() => fn(...args), delay); }; } // 8. throttle: cool down function calls function throttle(fn, delay) { let last = 0; return (...args) => { const now = Date.now(); if (now - last >= delay) { last = now; fn(...args); } }; } // 9. deepClone: like cloning yourself in a sci-fi flick function deepClone(obj) { return structuredClone(obj); // modern, fast 🔥 // For older environments: return JSON.parse(JSON.stringify(obj)) } // 10. deepEqual: check if two things are actually twins function deepEqual(a, b) { if (a === b) return true; if (typeof a !== typeof b || a === null || b === null) return false; if (typeof a === 'object') { const aKeys = Object.keys(a); const bKeys = Object.keys(b); if (aKeys.length !== bKeys.length) return false; return aKeys.every(key => deepEqual(a[key], b[key])); } return false; } function generateTokenBase64(length = 32) { const cryptoObj = typeof window !== 'undefined' && window.crypto ? window.crypto : typeof globalThis !== 'undefined' && globalThis.crypto ? globalThis.crypto : null; if (!cryptoObj?.getRandomValues) { throw new Error('Secure crypto not available in this environment.'); } const bytes = new Uint8Array(length); cryptoObj.getRandomValues(bytes); // Convert bytes to base64 string if (typeof window !== 'undefined' && typeof btoa === 'function') { // Browser-safe const binary = String.fromCharCode(...bytes); return btoa(binary); } else if (typeof Buffer !== 'undefined') { // Node.js return Buffer.from(bytes).toString('base64'); } else { throw new Error('No base64 encoding method available.'); } }