Generate random uuids and base-36 ids with ease and efficiency.
This library was extracted from b8rjs.
This library also polyfills
crypto.randomUUID()
when it's not otherwise available (i.e. when your app is being served viahttp
). Note that all the cautions against using this stuff for crypto purposes unless you know what you're doing still apply, the goal of this code is to create robust random ids, e.g. for primary keys in sharded databases.
Random and non-random unique ids. All generated using crypto.getRandomValues
, i.e. a
cryptographically strong random number generator
import {uuid, unique, randId, now36, id} from 'path/to/uuid.js'
// () => crypto.randomUUID()
const myId = uuid()
Other ways of generating random / unique ids:
// randpm string of digits in specified base
const tenDigits = randId(10, 10)
// default base is 36, this is a 20 digit string
const uid = randId(20)
The convenience functions now36() and randId(length, base) can be used to create very good ids
// i.e. a unique id that is also going to sort into creation order
// ms since epoch as 9-digit base 36 string + 11 digit base 36 digits
// note that now36() will have a leading '0' until May 25th 2059
const myId = now36() + randId(11)
// or...
const myId = id()
The nice thing about id() is that it's pretty efficient, and it's not going to bite you if you use it as a database key.
Note that I use bun because it's faster than node and it is really good for running tests.