@guillaume-docquier/tools-ts 6.7.0 → 7.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -58,12 +58,12 @@ Use this tool when code needs shared ordering helpers.
58
58
  Use these tools when code needs injectable randomness or deterministic
59
59
  pseudo-random sequences.
60
60
 
61
- | Export | What it is | Use it when |
62
- | ---------------- | -------------------------------------------------------------------- | ----------------------------------------------------------------------------------------- |
63
- | `Rng` | Type for the RNG facade returned by `createRng`. | A function accepts or stores the package RNG abstraction. |
64
- | `createRng` | Builds an RNG facade from a generator that returns values in [0, 1). | You need range-aware random numbers, shuffling, or draws backed by injectable randomness. |
65
- | `Generator` | Type for raw generators that return values in [0, 1). | You accept or provide the primitive random source used to construct an `Rng`. |
66
- | `mulberry32Prng` | Deterministic seeded pseudo-random generator factory. | Tests, simulations, or generation code need repeatable pseudo-random sequences. |
61
+ | Export | What it is | Use it when |
62
+ | ---------------- | ----------------------------------------------------------------- | ------------------------------------------------------------------------------------- |
63
+ | `Rng` | Builds a stateful RNG facade from a serializable generator. | You need range-aware random numbers, shuffling, draws, or resumable random sequences. |
64
+ | `RngState` | Serializable generator and cached-normal state captured by `Rng`. | You need to persist an `Rng` and resume its exact sequence later. |
65
+ | `Generator` | Contract for random sources that expose their serializable state. | You provide the primitive, resumable random source used to construct an `Rng`. |
66
+ | `mulberry32Prng` | Deterministic, resumable Mulberry32 generator factory. | Tests, simulations, or generation code need repeatable pseudo-random sequences. |
67
67
 
68
68
  ### Utility Types
69
69
 
@@ -26,7 +26,8 @@ export type { LoggerContext } from "./logging/log-context/LoggerContext.js";
26
26
  export type { LogContextProvider } from "./logging/log-context/LogContextProvider.js";
27
27
  export { debounce } from "./debounce.js";
28
28
  export { Sort } from "./Sort.js";
29
- export { createRng, type Rng, type Generator } from "./rng/rng.js";
29
+ export { Rng, type RngState } from "./rng/Rng.js";
30
+ export type { Generator } from "./rng/Generator.js";
30
31
  export { mulberry32Prng } from "./rng/mulberry32prng.js";
31
32
  export { Datetime } from "./Datetime.js";
32
33
  export { Angle, UnitOfAngle } from "./measurements/Angle.js";
@@ -21,7 +21,7 @@ export { prettyConsoleFormatter } from "./logging/formatter/prettyConsoleFormatt
21
21
  export { createConsoleLogSink } from "./logging/sink/ConsoleLogSink.js";
22
22
  export { debounce } from "./debounce.js";
23
23
  export { Sort } from "./Sort.js";
24
- export { createRng } from "./rng/rng.js";
24
+ export { Rng } from "./rng/Rng.js";
25
25
  export { mulberry32Prng } from "./rng/mulberry32prng.js";
26
26
  export { Datetime } from "./Datetime.js";
27
27
  export { Angle, UnitOfAngle } from "./measurements/Angle.js";
@@ -1 +1 @@
1
- {"version":3,"file":"entry.tools-ts.js","sourceRoot":"","sources":["../src/entry.tools-ts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAA;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAA;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAA;AACrE,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAI5C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACtC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,MAAM,EAA8B,MAAM,aAAa,CAAA;AAChE,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACtC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAClC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AAE3C,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAC5C,OAAO,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAA;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,0CAA0C,CAAA;AAC5E,OAAO,EAAE,sBAAsB,EAAE,MAAM,+CAA+C,CAAA;AAEtF,OAAO,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAA;AAKvE,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,SAAS,EAA4B,MAAM,cAAc,CAAA;AAClE,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AAC5D,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAA;AACzD,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAA;AACrE,OAAO,EAAE,OAAO,EAAW,MAAM,2BAA2B,CAAA;AAC5D,OAAO,EAAE,OAAO,EAAY,MAAM,2BAA2B,CAAA;AAC7D,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAClC,OAAO,EAAgB,OAAO,EAAE,MAAM,YAAY,CAAA"}
1
+ {"version":3,"file":"entry.tools-ts.js","sourceRoot":"","sources":["../src/entry.tools-ts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAA;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAA;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAA;AACrE,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAI5C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACtC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,MAAM,EAA8B,MAAM,aAAa,CAAA;AAChE,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACtC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAClC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AAE3C,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAC5C,OAAO,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAA;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,0CAA0C,CAAA;AAC5E,OAAO,EAAE,sBAAsB,EAAE,MAAM,+CAA+C,CAAA;AAEtF,OAAO,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAA;AAKvE,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,GAAG,EAAiB,MAAM,cAAc,CAAA;AAEjD,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AAC5D,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAA;AACzD,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAA;AACrE,OAAO,EAAE,OAAO,EAAW,MAAM,2BAA2B,CAAA;AAC5D,OAAO,EAAE,OAAO,EAAY,MAAM,2BAA2B,CAAA;AAC7D,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAClC,OAAO,EAAgB,OAAO,EAAE,MAAM,YAAY,CAAA"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * A stateful generator that returns numbers in the range [0, 1).
3
+ * Its state must be serializable so the generated sequence can be resumed.
4
+ */
5
+ export type Generator<TState = unknown> = {
6
+ next: () => number;
7
+ getState: () => TState;
8
+ };
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=Generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Generator.js","sourceRoot":"","sources":["../../src/rng/Generator.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ import type { Generator } from "./Generator.js";
2
+ export declare function createGeneratorStub(value: number | (() => number)): Generator<null>;
@@ -0,0 +1,8 @@
1
+ import { TypeGuard } from "../TypeGuard.js";
2
+ export function createGeneratorStub(value) {
3
+ return {
4
+ next: TypeGuard.isNumber(value) ? () => value : value,
5
+ getState: () => null,
6
+ };
7
+ }
8
+ //# sourceMappingURL=Generator.stub.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Generator.stub.js","sourceRoot":"","sources":["../../src/rng/Generator.stub.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAG3C,MAAM,UAAU,mBAAmB,CAAC,KAA8B;IAChE,OAAO;QACL,IAAI,EAAE,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK;QACrD,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAI;KACrB,CAAA;AACH,CAAC"}
@@ -1,9 +1,10 @@
1
1
  import type { Range } from "../Range.js";
2
- /**
3
- * A generator that returns numbers in the range [0, 1)
4
- */
5
- export type Generator = () => number;
6
- export type Rng = {
2
+ import { type Generator } from "./Generator.js";
3
+ export type RngState<TGeneratorState> = {
4
+ generatorState: TGeneratorState;
5
+ spareNormal: number | null;
6
+ };
7
+ export type Rng<TGeneratorState = unknown> = {
7
8
  /**
8
9
  * Generates a random number based on the given Range.
9
10
  * It will output an int given an int Range, or a float given a float Range.
@@ -36,9 +37,19 @@ export type Rng = {
36
37
  * The std is the spread of the distribution (default: 1)
37
38
  */
38
39
  normal: (mean?: number, std?: number) => number;
40
+ /**
41
+ * Returns the state required to resume the random sequence.
42
+ */
43
+ getState: () => RngState<TGeneratorState>;
44
+ };
45
+ export declare const Rng: {
46
+ /**
47
+ * Creates a random number generator based on your generator of choice.
48
+ * @param generator The generator that returns numbers in the range [0, 1)
49
+ */
50
+ create<TGeneratorState>(generator: Generator<TGeneratorState>): Rng<TGeneratorState>;
51
+ /**
52
+ * Restores a random number generator from previously captured state.
53
+ */
54
+ fromState<TGeneratorState>(state: RngState<TGeneratorState>, createGenerator: (state: TGeneratorState) => Generator<TGeneratorState>): Rng<TGeneratorState>;
39
55
  };
40
- /**
41
- * Creates a random number generator based on your generator of choice.
42
- * @param generator The generator that returns numbers in the range [0, 1)
43
- */
44
- export declare function createRng(generator: Generator): Rng;
@@ -3,11 +3,22 @@ const intBoundsOffset = {
3
3
  inclusive: 1,
4
4
  exclusive: 0,
5
5
  };
6
- /**
7
- * Creates a random number generator based on your generator of choice.
8
- * @param generator The generator that returns numbers in the range [0, 1)
9
- */
10
- export function createRng(generator) {
6
+ export const Rng = {
7
+ /**
8
+ * Creates a random number generator based on your generator of choice.
9
+ * @param generator The generator that returns numbers in the range [0, 1)
10
+ */
11
+ create(generator) {
12
+ return createRng(generator, null);
13
+ },
14
+ /**
15
+ * Restores a random number generator from previously captured state.
16
+ */
17
+ fromState(state, createGenerator) {
18
+ return createRng(createGenerator(state.generatorState), state.spareNormal);
19
+ },
20
+ };
21
+ function createRng(generator, initialSpareNormal) {
11
22
  function random(range) {
12
23
  switch (range.numericType) {
13
24
  case "float":
@@ -20,10 +31,10 @@ export function createRng(generator) {
20
31
  }
21
32
  function float(range) {
22
33
  if (range === undefined) {
23
- return generator();
34
+ return generator.next();
24
35
  }
25
36
  // Because of floating point errors, this is inclusive when min > 1, but that's statistically insignificant.
26
- return range.min + generator() * (range.max - range.min);
37
+ return range.min + generator.next() * (range.max - range.min);
27
38
  }
28
39
  function int(range) {
29
40
  // We +1 the max because float is exclusive of the max, but for int we want the range to be inclusive.
@@ -36,7 +47,7 @@ export function createRng(generator) {
36
47
  */
37
48
  function shuffle(values) {
38
49
  for (let i = values.length - 1; i > 0; i--) {
39
- const j = Math.floor(generator() * (i + 1));
50
+ const j = Math.floor(generator.next() * (i + 1));
40
51
  [values[i], values[j]] = [values[j], values[i]];
41
52
  }
42
53
  return values;
@@ -51,22 +62,28 @@ export function createRng(generator) {
51
62
  /**
52
63
  * box-muller outputs 2 numbers, so we keep the extra value that we can return instead of recomputing
53
64
  */
54
- let spareNormal;
65
+ let spareNormal = initialSpareNormal;
55
66
  function normal(mean = 0, std = 1) {
56
- if (spareNormal !== undefined) {
67
+ if (spareNormal !== null) {
57
68
  const value = spareNormal;
58
- spareNormal = undefined;
69
+ spareNormal = null;
59
70
  return mean + std * value;
60
71
  }
61
72
  // u1 must be non-zero
62
73
  let u1;
63
74
  do {
64
- u1 = generator();
75
+ u1 = generator.next();
65
76
  } while (u1 === 0);
66
- const { z1, z2 } = boxMullerSample(u1, generator());
77
+ const { z1, z2 } = boxMullerSample(u1, generator.next());
67
78
  spareNormal = z1;
68
79
  return mean + std * z2;
69
80
  }
81
+ function getState() {
82
+ return {
83
+ generatorState: generator.getState(),
84
+ spareNormal,
85
+ };
86
+ }
70
87
  return {
71
88
  random,
72
89
  float,
@@ -74,6 +91,7 @@ export function createRng(generator) {
74
91
  shuffle,
75
92
  draw,
76
93
  normal,
94
+ getState,
77
95
  };
78
96
  }
79
- //# sourceMappingURL=rng.js.map
97
+ //# sourceMappingURL=Rng.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Rng.js","sourceRoot":"","sources":["../../src/rng/Rng.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
- import type { Generator } from "./rng.js";
1
+ import { type Generator } from "./Generator.js";
2
2
  /**
3
3
  * Creates a deterministic pseudo-random number generator based on a 32-bit integer seed using the mulberry32 algorithm.
4
4
  *
5
5
  * It generates floats in the range [0, 1)
6
6
  */
7
- export declare function mulberry32Prng(seed: number): Generator;
7
+ export declare function mulberry32Prng(seed: number): Generator<number>;
@@ -5,12 +5,15 @@
5
5
  */
6
6
  export function mulberry32Prng(seed) {
7
7
  let state = seed >>> 0;
8
- return () => {
9
- state += 0x6d2b79f5;
10
- let next = state;
11
- next = Math.imul(next ^ (next >>> 15), next | 1);
12
- next ^= next + Math.imul(next ^ (next >>> 7), next | 61);
13
- return ((next ^ (next >>> 14)) >>> 0) / 4_294_967_296;
8
+ return {
9
+ next: () => {
10
+ state = (state + 0x6d2b79f5) >>> 0;
11
+ let next = state;
12
+ next = Math.imul(next ^ (next >>> 15), next | 1);
13
+ next ^= next + Math.imul(next ^ (next >>> 7), next | 61);
14
+ return ((next ^ (next >>> 14)) >>> 0) / 4_294_967_296;
15
+ },
16
+ getState: () => state,
14
17
  };
15
18
  }
16
19
  //# sourceMappingURL=mulberry32prng.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"mulberry32prng.js","sourceRoot":"","sources":["../../src/rng/mulberry32prng.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,IAAI,KAAK,GAAG,IAAI,KAAK,CAAC,CAAA;IAEtB,OAAO,GAAG,EAAE;QACV,KAAK,IAAI,UAAU,CAAA;QAEnB,IAAI,IAAI,GAAG,KAAK,CAAA;QAChB,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,KAAK,EAAE,CAAC,EAAE,IAAI,GAAG,CAAC,CAAC,CAAA;QAChD,IAAI,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,KAAK,CAAC,CAAC,EAAE,IAAI,GAAG,EAAE,CAAC,CAAA;QAExD,OAAO,CAAC,CAAC,IAAI,GAAG,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,aAAa,CAAA;IACvD,CAAC,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"mulberry32prng.js","sourceRoot":"","sources":["../../src/rng/mulberry32prng.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,IAAI,KAAK,GAAG,IAAI,KAAK,CAAC,CAAA;IAEtB,OAAO;QACL,IAAI,EAAE,GAAG,EAAE;YACT,KAAK,GAAG,CAAC,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,CAAA;YAElC,IAAI,IAAI,GAAG,KAAK,CAAA;YAChB,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,KAAK,EAAE,CAAC,EAAE,IAAI,GAAG,CAAC,CAAC,CAAA;YAChD,IAAI,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,KAAK,CAAC,CAAC,EAAE,IAAI,GAAG,EAAE,CAAC,CAAA;YAExD,OAAO,CAAC,CAAC,IAAI,GAAG,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,aAAa,CAAA;QACvD,CAAC;QACD,QAAQ,EAAE,GAAG,EAAE,CAAC,KAAK;KACtB,CAAA;AACH,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@guillaume-docquier/tools-ts",
3
- "version": "6.7.0",
3
+ "version": "7.1.0",
4
4
  "description": "My personal collection of typescript tools",
5
5
  "homepage": "https://github.com/Guillaume-Docquier/tools-ts",
6
6
  "license": "MIT",
@@ -1 +0,0 @@
1
- {"version":3,"file":"rng.js","sourceRoot":"","sources":["../../src/rng/rng.ts"],"names":[],"mappings":"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"}