-
Notifications
You must be signed in to change notification settings - Fork 1
/
index.js
57 lines (46 loc) · 1.41 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
const murmur = require('./murmur')
const keygen = require('./keygen')
const util = require('./util')
function createSeed (seed, length) {
const seedKey = Array.isArray(seed) ? seed : [keygen(seed, false)]
return new Array(length).fill().map((v, i) => murmur([i, ...seedKey], true))
}
/**
* Creates a deterministic random generator
*
* @param {...number} seed Raw seed of the random generator
*/
function random (seed) {
/**
* Creates a subgenerator from the current one
*
* @param {string} key Key of the subgenerator
* @param {...number} params Parameters affecting the subgenerator's seed
*/
function subgen (key, ...params) {
return random(createSeed([...seed, keygen(key), ...params], seed.length))
}
/**
* Retrieves a value from the random generator
*
* **Warning:** keys are cached indefinitely, keep them constant
*
* @param {string} key Key of the random value
* @param {...number} params Parameters affecting the value
*/
function value (key, ...params) {
return murmur([...seed, keygen(key), ...params])
}
return { seed, subgen, value, util }
}
/**
* Creates a deterministic random generator
*
* @param {string} seed Seed of the random generator
* @param {number} length Length of the seed (defaults to 4)
*/
function createRandom (seed, length = 4) {
return random(createSeed(seed, length))
}
module.exports = createRandom
module.exports.raw = random