CoolFace
Apppublic

AK-21/Graphite-Industrial-Intelligence

sourceHugging Faceupdated 3mo agoView on Hugging Face
0likes
index.cjs45 linesDownload Raw Back to async
1let crypto = require('crypto')2 3let { urlAlphabet } = require('../url-alphabet/index.cjs')4 5let random = bytes =>6  new Promise((resolve, reject) => {7    crypto.randomFill(Buffer.allocUnsafe(bytes), (err, buf) => {8      if (err) {9        reject(err)10      } else {11        resolve(buf)12      }13    })14  })15 16let customAlphabet = (alphabet, defaultSize = 21) => {17  let mask = (2 << (31 - Math.clz32((alphabet.length - 1) | 1))) - 118 19 20  let step = Math.ceil((1.6 * mask * defaultSize) / alphabet.length)21 22  let tick = (id, size = defaultSize) =>23    random(step).then(bytes => {24      let i = step25      while (i--) {26        id += alphabet[bytes[i] & mask] || ''27        if (id.length >= size) return id28      }29      return tick(id, size)30    })31 32  return size => tick('', size)33}34 35let nanoid = (size = 21) =>36  random((size |= 0)).then(bytes => {37    let id = ''38    while (size--) {39      id += urlAlphabet[bytes[size] & 63]40    }41    return id42  })43 44module.exports = { nanoid, customAlphabet, random }45