if (process.env.NODE_ENV !== 'production') { if (typeof navigator !== 'undefined' && navigator.product === 'ReactNative') { throw new Error( 'React Native does not have a built-in secure random generator. ' + 'If you don’t need unpredictable IDs, you can use `nanoid/non-secure`. ' + 'For secure ID install `expo-random` locally and use `nanoid/async`.' ) } if (typeof self === 'undefined' || (!self.crypto && !self.msCrypto)) { throw new Error( 'Your browser does not have secure random generator. ' + 'If you don’t need unpredictable IDs, you can use nanoid/non-secure.' ) } } var crypto = self.crypto || self.msCrypto /* * This alphabet uses a-z A-Z 0-9 _- symbols. * Symbols order was changed for better gzip compression. */ var url = 'Uint8ArdomValuesObj012345679BCDEFGHIJKLMNPQRSTWXYZ_cfghkpqvwxyz-' module.exports = function (size) { size = size || 21 var id = '' var bytes = crypto.getRandomValues(new Uint8Array(size)) while (size--) { id += url[bytes[size] & 63] } return id }