1 const crypto
= require('crypto')
4 * Generate a cryptographically secure random number in the [0,1[ range
7 function secureRandom () {
8 return crypto
.randomBytes(4).readUInt32LE() / 0x100000000
12 * Generate a cryptographically secure random number in the [0,1[ range
15 function secureRandomWithRandomValues () {
16 return crypto
.getRandomValues(new Uint32Array(1))[0] / 0x100000000
24 function generateRandomInteger (max
= Number
.MAX_SAFE_INTEGER
, min
= 0) {
25 if (max
< min
|| max
< 0 || min
< 0) {
26 throw new RangeError('Invalid interval')
29 if (min
!= null && min
!== 0) {
31 return Math
.floor(secureRandom() * (max
- min
+ 1)) + min
33 return Math
.floor(secureRandom() * (max
+ 1))
42 function generateRandomFloat (max
= Number
.MAX_VALUE
, min
= 0) {
44 throw new RangeError('Invalid interval')
46 if (max
- min
=== Infinity
) {
47 throw new RangeError('Invalid interval')
49 return (crypto
.randomBytes(4).readUInt32LE() / 0xffffffff) * (max
- min
) + min
56 * @param numberGenerator
59 function generateRandomNumberArray (
61 max
= Number
.MAX_VALUE
,
62 numberGenerator
= generateRandomFloat
65 for (let i
= 0; i
< size
; i
++) {
66 array
.push(numberGenerator(max
))
75 * @param numberGenerator
78 function generateRandomObject (
80 numberMax
= Number
.MAX_VALUE
,
81 numberGenerator
= generateRandomFloat
83 const size
= generateRandomInteger(sizeMax
)
85 for (let i
= 0; i
< size
; i
++) {
86 object
[i
.toString()] = numberGenerator(numberMax
)
95 async
function sleep (ms
) {
96 return new Promise(resolve
=> setTimeout(resolve
, ms
))
100 generateRandomInteger
,
102 generateRandomNumberArray
,
103 generateRandomObject
,
106 secureRandomWithRandomValues