UNPKG

@jbrowse/core

Version:

JBrowse 2 core libraries used by plugins

37 lines (36 loc) 1.21 kB
export const urlAlphabet = 'useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict'; export const random = (bytes) => crypto.getRandomValues(new Uint8Array(bytes)); export const customRandom = (alphabet, defaultSize, getRandom) => { const mask = (2 << (Math.log(alphabet.length - 1) / Math.LN2)) - 1; const step = -~((1.6 * mask * defaultSize) / alphabet.length); return (size = defaultSize) => { let id = ''; while (true) { const bytes = getRandom(step); let j = step; while (j--) { id += alphabet[bytes[j] & mask] || ''; if (id.length === size) { return id; } } } }; }; export const customAlphabet = (alphabet, size = 21) => customRandom(alphabet, size, random); export const nanoid = (size = 21) => crypto.getRandomValues(new Uint8Array(size)).reduce((id, byte) => { byte &= 63; if (byte < 36) { id += byte.toString(36); } else if (byte < 62) { id += (byte - 26).toString(36).toUpperCase(); } else if (byte > 62) { id += '-'; } else { id += '_'; } return id; }, '');