UNPKG

2.62 kBTypeScriptView Raw
1type StateBuilder<S extends string> = Record<S, number>;
2type ComplexStateBuilder<S extends string, M extends string> = StateBuilder<S> & Record<M, number[]>;
3
4interface OtherAlgorithm<State> {
5 (seed?: string, options?: { state?: false }): seedrandom.PRNG;
6 (seed?: string, options?: { state: State | true }): seedrandom.StatefulPRNG<State>;
7}
8
9type Callback<callbackReturnType> = (
10 prng: seedrandom.PRNG,
11 seed: string,
12 is_math_call: boolean,
13 state: undefined | boolean | seedrandom.State.Arc4,
14) => callbackReturnType;
15
16interface callbackOption<callbackReturnType> {
17 pass: Callback<callbackReturnType>;
18}
19interface stateOptionEnabled {
20 state: true | seedrandom.State.Arc4;
21}
22interface seedrandomOptions<callbackReturnType> {
23 global?: boolean;
24 state?: boolean | seedrandom.State.Arc4;
25 entropy?: boolean;
26 pass?: Callback<callbackReturnType>;
27}
28
29declare namespace seedrandom {
30 interface PRNG {
31 (): number;
32 double(): number;
33 int32(): number;
34 quick(): number;
35 }
36 interface StatefulPRNG<State> extends PRNG {
37 state(): State;
38 }
39 namespace State {
40 type Arc4 = ComplexStateBuilder<"i" | "j", "S">;
41 type Alea = StateBuilder<"c" | "s0" | "s1" | "s2">;
42 type Xor128 = StateBuilder<"x" | "y" | "z" | "w">;
43 type Xorwow = StateBuilder<"x" | "y" | "z" | "w" | "v" | "d">;
44 type Xorshift7 = ComplexStateBuilder<"i", "x">;
45 type Xor4096 = ComplexStateBuilder<"i" | "w", "X">;
46 type Tychei = StateBuilder<"a" | "b" | "c" | "d">;
47 }
48}
49
50interface seedrandom {
51 // Arc4 Algorithm, default seedrandom
52 <O extends seedrandomOptions<any>>(seed?: string, options?: O | boolean): O extends callbackOption<
53 infer callbackReturnType
54 > ? callbackReturnType
55 : O extends stateOptionEnabled ? seedrandom.StatefulPRNG<seedrandom.State.Arc4>
56 : seedrandom.PRNG;
57 <O extends seedrandomOptions<any>, callbackReturnType>(
58 seed: string | undefined,
59 options: O | boolean | undefined,
60 callback: Callback<callbackReturnType>,
61 ): O extends callbackOption<infer callbackReturnType> ? callbackReturnType : callbackReturnType;
62
63 // Other Algorithms
64 alea: OtherAlgorithm<seedrandom.State.Alea>;
65 xor128: OtherAlgorithm<seedrandom.State.Xor128>;
66 xorwow: OtherAlgorithm<seedrandom.State.Xorwow>;
67 xorshift7: OtherAlgorithm<seedrandom.State.Xorshift7>;
68 xor4096: OtherAlgorithm<seedrandom.State.Xor4096>;
69 tychei: OtherAlgorithm<seedrandom.State.Tychei>;
70}
71
72declare const seedrandom: seedrandom;
73
74export = seedrandom;