1 | type StateBuilder<S extends string> = Record<S, number>;
|
2 | type ComplexStateBuilder<S extends string, M extends string> = StateBuilder<S> & Record<M, number[]>;
|
3 |
|
4 | interface OtherAlgorithm<State> {
|
5 | (seed?: string, options?: { state?: false }): seedrandom.PRNG;
|
6 | (seed?: string, options?: { state: State | true }): seedrandom.StatefulPRNG<State>;
|
7 | }
|
8 |
|
9 | type Callback<callbackReturnType> = (
|
10 | prng: seedrandom.PRNG,
|
11 | seed: string,
|
12 | is_math_call: boolean,
|
13 | state: undefined | boolean | seedrandom.State.Arc4,
|
14 | ) => callbackReturnType;
|
15 |
|
16 | interface callbackOption<callbackReturnType> {
|
17 | pass: Callback<callbackReturnType>;
|
18 | }
|
19 | interface stateOptionEnabled {
|
20 | state: true | seedrandom.State.Arc4;
|
21 | }
|
22 | interface seedrandomOptions<callbackReturnType> {
|
23 | global?: boolean;
|
24 | state?: boolean | seedrandom.State.Arc4;
|
25 | entropy?: boolean;
|
26 | pass?: Callback<callbackReturnType>;
|
27 | }
|
28 |
|
29 | declare 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 |
|
50 | interface seedrandom {
|
51 |
|
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 |
|
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 |
|
72 | declare const seedrandom: seedrandom;
|
73 |
|
74 | export = seedrandom;
|