1 const crypto
= require('crypto')
4 * Generate a cryptographically secure random number in the [0,1[ range
8 function secureRandom () {
9 return crypto
.randomBytes(4).readUInt32LE() / 0x100000000
13 * Generate a cryptographically secure random number in the [0,1[ range
17 function secureRandomWithRandomValues () {
18 return crypto
.getRandomValues(new Uint32Array(1))[0] / 0x100000000
26 function generateRandomInteger (max
= Number
.MAX_SAFE_INTEGER
, min
= 0) {
27 if (max
< min
|| max
< 0 || min
< 0) {
28 throw new RangeError('Invalid interval')
31 if (min
!= null && min
!== 0) {
33 return Math
.floor(secureRandom() * (max
- min
+ 1)) + min
35 return Math
.floor(secureRandom() * (max
+ 1))
45 function generateRandomFloat (max
= Number
.MAX_VALUE
, min
= 0, negative
= true) {
46 if (max
< min
|| max
< 0 || min
< 0) {
47 throw new RangeError('Invalid interval')
49 const randomPositiveFloat
= crypto
.randomBytes(4).readUInt32LE() / 0xffffffff
50 const sign
= negative
&& randomPositiveFloat
< 0.5 ? -1 : 1
51 return sign
* (randomPositiveFloat
* (max
- min
) + min
)
58 * @param numberGenerator
61 function generateRandomNumberArray (
63 max
= Number
.MAX_VALUE
,
64 numberGenerator
= generateRandomFloat
67 for (let i
= 0; i
< size
; i
++) {
68 array
.push(numberGenerator(max
))
77 * @param numberGenerator
80 function generateRandomObject (
82 numberMax
= Number
.MAX_VALUE
,
83 numberGenerator
= generateRandomFloat
85 const size
= generateRandomInteger(sizeMax
)
87 for (let i
= 0; i
< size
; i
++) {
88 object
[i
.toString()] = numberGenerator(numberMax
)
97 async
function sleep (ms
) {
98 return new Promise(resolve
=> setTimeout(resolve
, ms
))
102 generateRandomInteger
,
104 generateRandomNumberArray
,
105 generateRandomObject
,
108 secureRandomWithRandomValues