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))
44 function generateRandomFloat (max
= Number
.MAX_VALUE
, min
= 0) {
46 throw new RangeError('Invalid interval')
48 if (max
- min
=== Infinity
) {
49 throw new RangeError('Invalid interval')
51 return (crypto
.randomBytes(4).readUInt32LE() / 0xffffffff) * (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