| | |
| | | poolOffset += bytes |
| | | } |
| | | let random = bytes => { |
| | | fillPool(bytes) |
| | | fillPool((bytes -= 0)) |
| | | return pool.subarray(poolOffset - bytes, poolOffset) |
| | | } |
| | | let customRandom = (alphabet, size, getRandom) => { |
| | | let customRandom = (alphabet, defaultSize, getRandom) => { |
| | | let mask = (2 << (31 - Math.clz32((alphabet.length - 1) | 1))) - 1 |
| | | let step = Math.ceil((1.6 * mask * size) / alphabet.length) |
| | | return () => { |
| | | let step = Math.ceil((1.6 * mask * defaultSize) / alphabet.length) |
| | | return (size = defaultSize) => { |
| | | let id = '' |
| | | while (true) { |
| | | let bytes = getRandom(step) |
| | |
| | | } |
| | | } |
| | | } |
| | | let customAlphabet = (alphabet, size) => customRandom(alphabet, size, random) |
| | | let customAlphabet = (alphabet, size = 21) => |
| | | customRandom(alphabet, size, random) |
| | | let nanoid = (size = 21) => { |
| | | fillPool(size) |
| | | fillPool((size -= 0)) |
| | | let id = '' |
| | | for (let i = poolOffset - size; i < poolOffset; i++) { |
| | | id += urlAlphabet[pool[i] & 63] |