You can also input a seed time which will consistently give you the same string for the time component. This is useful for migrating to ulid.
ulid(1469918176385)// 01ARYZ6S41TSV4RRFFQ69G5FAV
Monotonic ULIDs
To generate monotonically increasing ULIDs, create a monotonic counter.
Note that the same seed time is being passed in for this example to demonstrate its behaviour when generating multiple ULIDs within the same millisecond
import{monotonicFactory}from'ulid'constulid=monotonicFactory()// Strict ordering for the same timestamp, by incrementing the least-significant random bit by 1ulid(150000)// 000XAL6S41ACTAV9WEVGEMMVR8ulid(150000)// 000XAL6S41ACTAV9WEVGEMMVR9ulid(150000)// 000XAL6S41ACTAV9WEVGEMMVRAulid(150000)// 000XAL6S41ACTAV9WEVGEMMVRBulid(150000)// 000XAL6S41ACTAV9WEVGEMMVRC// Even if a lower timestamp is passed (or generated), it will preserve sort orderulid(100000)// 000XAL6S41ACTAV9WEVGEMMVRD
Pseudo-Random Number Generators
ulid automatically detects a suitable (cryptographically-secure) PRNG. In the browser it will use crypto.getRandomValues and on node it will use crypto.randomBytes.
Allowing the insecure Math.random
By default, ulid will not use Math.random, because that is insecure. To allow the use of Math.random, you'll have to use factory and detectPrng.
import{factory,detectPrng}from'ulid'constprng=detectPrng(true)// pass `true` to allow insecureconstulid=factory(prng)ulid()// 01BXAVRG61YJ5YSBRM51702F6M
Use your own PRNG
To use your own pseudo-random number generator, import the factory, and pass it your generator function.
请发表评论