npm-shortidx
Version:
Generador de Id aleatorios, Random Id Generator
1 lines • 1.96 kB
JavaScript
export const ShuffleX=(e,r)=>{if(!Array.isArray(e))throw new TypeError("El parámetro debe ser un array");const t=e.length,n=void 0!==r?r:t;if(0===t||0===n)return[];validateLimit(n,t);const o=[...e];for(let e=0;e<n;e++){const r=e+Math.floor(Math.random()*(t-e));[o[e],o[r]]=[o[r],o[e]]}return o.slice(0,n)};const validateLimit=(e,r)=>{if(e<1||e>r)throw new Error(`El límite debe estar entre 1 y ${r}`);return e},generateId=(e,r=7)=>{if(r<1)throw new Error("El límite debe ser mayor a 0");if(e.length<2)throw new Error("El charset debe tener al menos 2 caracteres");const t=e.length,n=4294967295,o=n-n%t;let a="";for(;a.length<r;){const n=r-a.length,s=new Uint32Array(n);crypto.getRandomValues(s);for(let l=0;l<n&&a.length!==r;l++){const r=s[l];r<o&&(a+=e[r%t])}}return a};export const ShortIdx=(e=7)=>generateId("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-_",e);export const RandomIdx=(e=7)=>generateId("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-_!#$%&'()*+,./:;<=>?@[]^`{|}~\"",e);export const RepeatIdx=(e,r,t)=>{if(!Number.isInteger(e)||e<1)throw new Error("El número de elementos debe ser un entero mayor a 0");return Array.from({length:e},()=>r(t))};export const IndexShuffle=e=>{if(e<1)throw new Error("La longitud debe ser mayor a 0");const r=Array.from({length:e},(e,r)=>r);return ShuffleX(r)};export const ShuffleString=e=>ShuffleX(e.split("")).join("");export const CustomIdx=(e,r=7)=>generateId(e,r);const DEFAULT_CHARS="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";export const PasswordGen=({length:e=16,chars:r=DEFAULT_CHARS,extraChars:t=""}={})=>{if(!Number.isInteger(e)||e<1)throw new Error("La longitud debe ser un número entero mayor a 0");if("string"!=typeof t)throw new Error("extraChars debe ser un string");if("string"!=typeof r||r.length<2)throw new Error("El charset debe tener al menos 2 caracteres");const n=Array.from(new Set(r+t)).join("");return generateId(n,e)};