utilyx
Version:
Modern utility helper library for cleaner, faster TypeScript/JavaScript development 🚀🔧
81 lines (80 loc) • 2.58 kB
JavaScript
;
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.');
}
}