roll-parser 3.0.0-beta.0 → 3.0.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.
Files changed (159) hide show
  1. package/CHANGELOG.md +107 -9
  2. package/MIGRATION.md +147 -0
  3. package/README.md +960 -154
  4. package/dist/cli/args.d.ts +1 -0
  5. package/dist/cli/args.d.ts.map +1 -1
  6. package/dist/cli/args.js +81 -0
  7. package/dist/cli/args.js.map +1 -0
  8. package/dist/cli/format.d.ts +15 -3
  9. package/dist/cli/format.d.ts.map +1 -1
  10. package/dist/cli/format.js +17 -0
  11. package/dist/cli/format.js.map +1 -0
  12. package/dist/cli/index.d.ts +3 -0
  13. package/dist/cli/index.d.ts.map +1 -1
  14. package/dist/cli/index.js +14 -0
  15. package/dist/cli/index.js.map +1 -0
  16. package/dist/cli/main.d.ts +36 -0
  17. package/dist/cli/main.d.ts.map +1 -0
  18. package/dist/cli/main.js +83 -0
  19. package/dist/cli/main.js.map +1 -0
  20. package/dist/errors.d.ts +332 -17
  21. package/dist/errors.d.ts.map +1 -1
  22. package/dist/errors.js +141 -0
  23. package/dist/errors.js.map +1 -0
  24. package/dist/evaluator/die.d.ts +26 -0
  25. package/dist/evaluator/die.d.ts.map +1 -0
  26. package/dist/evaluator/die.js +19 -0
  27. package/dist/evaluator/die.js.map +1 -0
  28. package/dist/evaluator/env.d.ts +58 -0
  29. package/dist/evaluator/env.d.ts.map +1 -0
  30. package/dist/evaluator/env.js +11 -0
  31. package/dist/evaluator/env.js.map +1 -0
  32. package/dist/evaluator/evaluator.d.ts +41 -75
  33. package/dist/evaluator/evaluator.d.ts.map +1 -1
  34. package/dist/evaluator/evaluator.js +906 -0
  35. package/dist/evaluator/evaluator.js.map +1 -0
  36. package/dist/evaluator/modifiers/compare.js +15 -0
  37. package/dist/evaluator/modifiers/compare.js.map +1 -0
  38. package/dist/evaluator/modifiers/crit-threshold.d.ts +0 -1
  39. package/dist/evaluator/modifiers/crit-threshold.d.ts.map +1 -1
  40. package/dist/evaluator/modifiers/crit-threshold.js +23 -0
  41. package/dist/evaluator/modifiers/crit-threshold.js.map +1 -0
  42. package/dist/evaluator/modifiers/die-bound.d.ts +26 -0
  43. package/dist/evaluator/modifiers/die-bound.d.ts.map +1 -0
  44. package/dist/evaluator/modifiers/die-bound.js +14 -0
  45. package/dist/evaluator/modifiers/die-bound.js.map +1 -0
  46. package/dist/evaluator/modifiers/explode.d.ts +13 -5
  47. package/dist/evaluator/modifiers/explode.d.ts.map +1 -1
  48. package/dist/evaluator/modifiers/explode.js +103 -0
  49. package/dist/evaluator/modifiers/explode.js.map +1 -0
  50. package/dist/evaluator/modifiers/flags.d.ts +37 -0
  51. package/dist/evaluator/modifiers/flags.d.ts.map +1 -0
  52. package/dist/evaluator/modifiers/flags.js +18 -0
  53. package/dist/evaluator/modifiers/flags.js.map +1 -0
  54. package/dist/evaluator/modifiers/keep-drop.d.ts +12 -28
  55. package/dist/evaluator/modifiers/keep-drop.d.ts.map +1 -1
  56. package/dist/evaluator/modifiers/keep-drop.js +82 -0
  57. package/dist/evaluator/modifiers/keep-drop.js.map +1 -0
  58. package/dist/evaluator/modifiers/reroll.d.ts +12 -4
  59. package/dist/evaluator/modifiers/reroll.d.ts.map +1 -1
  60. package/dist/evaluator/modifiers/reroll.js +62 -0
  61. package/dist/evaluator/modifiers/reroll.js.map +1 -0
  62. package/dist/evaluator/modifiers/sort.d.ts +4 -0
  63. package/dist/evaluator/modifiers/sort.d.ts.map +1 -1
  64. package/dist/evaluator/modifiers/sort.js +13 -0
  65. package/dist/evaluator/modifiers/sort.js.map +1 -0
  66. package/dist/evaluator/modifiers/success-count.d.ts +2 -6
  67. package/dist/evaluator/modifiers/success-count.d.ts.map +1 -1
  68. package/dist/evaluator/modifiers/success-count.js +24 -0
  69. package/dist/evaluator/modifiers/success-count.js.map +1 -0
  70. package/dist/index.d.ts +33 -11
  71. package/dist/index.d.ts.map +1 -1
  72. package/dist/index.js +12 -2560
  73. package/dist/index.js.map +1 -26
  74. package/dist/lexer/lexer.d.ts +50 -5
  75. package/dist/lexer/lexer.d.ts.map +1 -1
  76. package/dist/lexer/lexer.js +260 -0
  77. package/dist/lexer/lexer.js.map +1 -0
  78. package/dist/lexer/tokens.d.ts +31 -6
  79. package/dist/lexer/tokens.d.ts.map +1 -1
  80. package/dist/lexer/tokens.js +42 -0
  81. package/dist/lexer/tokens.js.map +1 -0
  82. package/dist/parser/ast.d.ts +314 -160
  83. package/dist/parser/ast.d.ts.map +1 -1
  84. package/dist/parser/ast.js +52 -0
  85. package/dist/parser/ast.js.map +1 -0
  86. package/dist/parser/guards.d.ts +106 -0
  87. package/dist/parser/guards.d.ts.map +1 -0
  88. package/dist/parser/guards.js +121 -0
  89. package/dist/parser/guards.js.map +1 -0
  90. package/dist/parser/parser.d.ts +118 -14
  91. package/dist/parser/parser.d.ts.map +1 -1
  92. package/dist/parser/parser.js +751 -0
  93. package/dist/parser/parser.js.map +1 -0
  94. package/dist/rng/mock.d.ts +73 -12
  95. package/dist/rng/mock.d.ts.map +1 -1
  96. package/dist/rng/mock.js +30 -0
  97. package/dist/rng/mock.js.map +1 -0
  98. package/dist/rng/seeded.d.ts +141 -9
  99. package/dist/rng/seeded.d.ts.map +1 -1
  100. package/dist/rng/seeded.js +138 -0
  101. package/dist/rng/seeded.js.map +1 -0
  102. package/dist/rng/types.d.ts +57 -0
  103. package/dist/rng/types.d.ts.map +1 -1
  104. package/dist/rng/types.js +2 -0
  105. package/dist/rng/types.js.map +1 -0
  106. package/dist/roll.d.ts +58 -28
  107. package/dist/roll.d.ts.map +1 -1
  108. package/dist/roll.js +8 -0
  109. package/dist/roll.js.map +1 -0
  110. package/dist/testing.d.ts +5 -4
  111. package/dist/testing.d.ts.map +1 -1
  112. package/dist/testing.js +2 -41
  113. package/dist/testing.js.map +1 -11
  114. package/dist/types.d.ts +306 -44
  115. package/dist/types.d.ts.map +1 -1
  116. package/dist/types.js +8 -0
  117. package/dist/types.js.map +1 -0
  118. package/dist/version.d.ts +2 -0
  119. package/dist/version.d.ts.map +1 -0
  120. package/dist/version.js +2 -0
  121. package/dist/version.js.map +1 -0
  122. package/package.json +83 -34
  123. package/src/cli/args.ts +66 -10
  124. package/src/cli/format.ts +22 -3
  125. package/src/cli/index.ts +27 -84
  126. package/src/cli/main.ts +129 -0
  127. package/src/errors.ts +480 -27
  128. package/src/evaluator/die.ts +50 -0
  129. package/src/evaluator/env.ts +73 -0
  130. package/src/evaluator/evaluator.ts +653 -421
  131. package/src/evaluator/modifiers/crit-threshold.ts +3 -6
  132. package/src/evaluator/modifiers/die-bound.ts +39 -0
  133. package/src/evaluator/modifiers/explode.ts +60 -58
  134. package/src/evaluator/modifiers/flags.ts +61 -0
  135. package/src/evaluator/modifiers/keep-drop.ts +124 -126
  136. package/src/evaluator/modifiers/reroll.ts +28 -49
  137. package/src/evaluator/modifiers/sort.ts +14 -1
  138. package/src/evaluator/modifiers/success-count.ts +5 -8
  139. package/src/index.ts +56 -35
  140. package/src/lexer/lexer.ts +107 -34
  141. package/src/lexer/tokens.ts +31 -6
  142. package/src/parser/ast.ts +323 -341
  143. package/src/parser/guards.ts +248 -0
  144. package/src/parser/parser.ts +419 -242
  145. package/src/rng/mock.ts +74 -13
  146. package/src/rng/seeded.ts +299 -64
  147. package/src/rng/types.ts +57 -0
  148. package/src/roll.ts +64 -47
  149. package/src/testing.ts +5 -9
  150. package/src/types.ts +310 -43
  151. package/src/version.ts +2 -0
  152. package/dist/cli.js +0 -2608
  153. package/dist/cli.js.map +0 -28
  154. package/dist/evaluator/index.d.ts +0 -8
  155. package/dist/evaluator/index.d.ts.map +0 -1
  156. package/dist/rng/index.d.ts +0 -8
  157. package/dist/rng/index.d.ts.map +0 -1
  158. package/src/evaluator/index.ts +0 -14
  159. package/src/rng/index.ts +0 -8
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/parser/parser.ts"],"names":[],"mappings":"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"}
@@ -5,32 +5,93 @@
5
5
  */
6
6
  import type { RNG } from './types.js';
7
7
  /**
8
- * Error thrown when MockRNG exhausts its predefined values.
8
+ * Error thrown when a mock RNG runs out of predefined values.
9
9
  *
10
- * This is intentional behavior to catch incorrect roll counts in tests.
11
- * If you see this error, your test is consuming more random values than expected.
10
+ * This is intentional behavior, not a limitation: a mock that wrapped around
11
+ * would silently pass a test whose expression rolls more dice than the author
12
+ * thought. Seeing this error means the notation consumed more draws than the
13
+ * sequence supplied — count the dice, including explosions, rerolls, and
14
+ * meta-expressions, and check the draw order in the roll-parser README.
15
+ *
16
+ * Deliberately outside the `RollParserError` hierarchy — no `code`, and
17
+ * `isRollParserError` answers `false` for it. An exhausted mock is a bug in the
18
+ * test fixture, not a failure mode of the notation, so the
19
+ * `if (!isRollParserError(error)) throw error` line a consumer writes around
20
+ * `roll()` rethrows it and fails the test instead of routing it to a "bad dice"
21
+ * message. `instanceof` is the check here — there is no `code` to branch on.
22
+ *
23
+ * @example
24
+ * ```typescript
25
+ * import { roll } from 'roll-parser';
26
+ * import { createMockRng, MockRNGExhaustedError } from 'roll-parser/testing';
27
+ *
28
+ * try {
29
+ * roll('4d6', { rng: createMockRng([1, 2, 3]) });
30
+ * } catch (error) {
31
+ * error instanceof MockRNGExhaustedError; // true
32
+ * (error as MockRNGExhaustedError).consumed; // 3
33
+ * (error as Error).message;
34
+ * // 'MockRNG exhausted: consumed 3 values, no more available'
35
+ * }
36
+ * ```
37
+ *
38
+ * @category Testing
12
39
  */
13
40
  export declare class MockRNGExhaustedError extends Error {
41
+ /**
42
+ * How many values the sequence handed out before running dry — equivalently,
43
+ * the length of the array that was passed to `createMockRng`. Compare it
44
+ * against the dice you expected to be rolled to find the miscount.
45
+ */
14
46
  readonly consumed: number;
15
47
  constructor(consumed: number);
16
48
  }
17
49
  /**
18
- * Creates a mock RNG that returns predefined values in sequence.
50
+ * Creates a mock {@link RNG} that hands out predefined values in order — the
51
+ * way to write dice tests with exact expected totals.
52
+ *
53
+ * Two deliberate strictnesses, both there to surface a miscounted sequence
54
+ * instead of hiding it:
19
55
  *
20
- * IMPORTANT: Throws MockRNGExhaustedError when all values are consumed.
21
- * This behavior catches incorrect roll counts in tests - it never wraps around.
56
+ * - It never wraps around. Running out throws {@link MockRNGExhaustedError}.
57
+ * - `nextInt` rejects a scripted value outside the requested `[min, max]`
58
+ * with a `RangeError`, so `createMockRng([7])` cannot satisfy a `d6`.
22
59
  *
23
- * @param values - Array of values to return (dice results for nextInt, floats for next)
24
- * @returns RNG instance returning predefined values
60
+ * Both are the only failures that reach a caller of `roll()` without a
61
+ * roll-parser `code`, and only ever when a mock was injected — see
62
+ * {@link MockRNGExhaustedError} for why they stay outside the hierarchy.
63
+ *
64
+ * Draw order matters when the notation contains meta-expressions. Keep/drop
65
+ * counts (`4d6kh(1d2)`) are drawn *before* the pool; threshold expressions
66
+ * (`4d6cs>(1d2)`) are drawn *after* it. The README's Randomness section has
67
+ * the full tables.
68
+ *
69
+ * @param values - Values to return, in draw order (die faces for `nextInt`,
70
+ * floats in `[0, 1)` for `next`)
71
+ * @returns An `RNG` that replays `values`
25
72
  *
26
73
  * @example
27
74
  * ```typescript
75
+ * import { createMockRng } from 'roll-parser/testing';
76
+ *
28
77
  * const rng = createMockRng([4, 2, 6]);
29
- * rng.nextInt(1, 6); // Returns 4
30
- * rng.nextInt(1, 6); // Returns 2
31
- * rng.nextInt(1, 6); // Returns 6
32
- * rng.nextInt(1, 6); // Throws MockRNGExhaustedError
78
+ * rng.nextInt(1, 6); // 4
79
+ * rng.nextInt(1, 6); // 2
80
+ * rng.nextInt(1, 6); // 6
81
+ * rng.nextInt(1, 6); // throws MockRNGExhaustedError
82
+ * ```
83
+ *
84
+ * @example Pinning a roll
85
+ * ```typescript
86
+ * import { roll } from 'roll-parser';
87
+ * import { createMockRng } from 'roll-parser/testing';
88
+ *
89
+ * const result = roll('4d6kh3', { rng: createMockRng([3, 6, 2, 5]) });
90
+ * result.total; // 14
91
+ * result.rendered; // '4d6[3, 6, ~~2~~, 5] = 14'
33
92
  * ```
93
+ *
94
+ * @category Testing
34
95
  */
35
96
  export declare function createMockRng(values: number[]): RNG;
36
97
  //# sourceMappingURL=mock.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"mock.d.ts","sourceRoot":"","sources":["../../src/rng/mock.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AAEtC;;;;;GAKG;AACH,qBAAa,qBAAsB,SAAQ,KAAK;IAC9C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;gBAEd,QAAQ,EAAE,MAAM;CAK7B;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,GAAG,CAsBnD"}
1
+ {"version":3,"file":"mock.d.ts","sourceRoot":"","sources":["../../src/rng/mock.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AAEtC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,qBAAa,qBAAsB,SAAQ,KAAK;IAC9C;;;;OAIG;IACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAE1B,YAAY,QAAQ,EAAE,MAAM,EAI3B;CACF;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,GAAG,CAsBnD"}
@@ -0,0 +1,30 @@
1
+ export class MockRNGExhaustedError extends Error {
2
+ consumed;
3
+ constructor(consumed) {
4
+ super(`MockRNG exhausted: consumed ${consumed} values, no more available`);
5
+ this.name = 'MockRNGExhaustedError';
6
+ this.consumed = consumed;
7
+ }
8
+ }
9
+ export function createMockRng(values) {
10
+ let index = 0;
11
+ const getNext = () => {
12
+ const value = values[index];
13
+ if (value == null) {
14
+ throw new MockRNGExhaustedError(index);
15
+ }
16
+ index++;
17
+ return value;
18
+ };
19
+ return {
20
+ next: getNext,
21
+ nextInt: (min, max) => {
22
+ const value = getNext();
23
+ if (value < min || value > max) {
24
+ throw new RangeError(`MockRNG value ${value} is out of bounds [${min}, ${max}]`);
25
+ }
26
+ return value;
27
+ },
28
+ };
29
+ }
30
+ //# sourceMappingURL=mock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mock.js","sourceRoot":"","sources":["../../src/rng/mock.ts"],"names":[],"mappings":"AAyCA,MAAM,OAAO,qBAAsB,SAAQ,KAAK;IAMrC,QAAQ,CAAS;IAE1B,YAAY,QAAgB;QAC1B,KAAK,CAAC,+BAA+B,QAAQ,4BAA4B,CAAC,CAAC;QAC3E,IAAI,CAAC,IAAI,GAAG,uBAAuB,CAAC;QACpC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;CACF;AAiDD,MAAM,UAAU,aAAa,CAAC,MAAgB;IAC5C,IAAI,KAAK,GAAG,CAAC,CAAC;IAEd,MAAM,OAAO,GAAG,GAAW,EAAE;QAC3B,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;QAC5B,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;YAClB,MAAM,IAAI,qBAAqB,CAAC,KAAK,CAAC,CAAC;QACzC,CAAC;QACD,KAAK,EAAE,CAAC;QACR,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;IAEF,OAAO;QACL,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,CAAC,GAAW,EAAE,GAAW,EAAU,EAAE;YAC5C,MAAM,KAAK,GAAG,OAAO,EAAE,CAAC;YACxB,IAAI,KAAK,GAAG,GAAG,IAAI,KAAK,GAAG,GAAG,EAAE,CAAC;gBAC/B,MAAM,IAAI,UAAU,CAAC,iBAAiB,KAAK,sBAAsB,GAAG,KAAK,GAAG,GAAG,CAAC,CAAC;YACnF,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -1,33 +1,165 @@
1
1
  /**
2
- * Seedable RNG using xorshift128 algorithm.
2
+ * Seedable RNG using the xoshiro128** algorithm.
3
3
  *
4
4
  * @module rng/seeded
5
5
  */
6
6
  import type { RNG } from './types.js';
7
7
  /**
8
- * Seedable pseudo-random number generator using xorshift128.
8
+ * A snapshot of {@link SeededRNG}'s internal state: a format version followed
9
+ * by the four state words as unsigned 32-bit integers. Pass one back to the
10
+ * constructor to resume the exact sequence it was taken from.
9
11
  *
10
- * Produces reproducible sequences from identical seeds.
11
- * Period: 2^128 - 1
12
+ * Opaque and bound to the major version, the same contract seeds carry: the
13
+ * words mean nothing outside the engine that produced them, and a release that
14
+ * changes that engine bumps the leading version. A snapshot from a different
15
+ * version is rejected with an `INCOMPATIBLE_RNG_STATE` error rather than
16
+ * resumed under the wrong semantics — safe to hold in memory or serialize for
17
+ * a save file, and loud rather than silent across an upgrade.
18
+ *
19
+ * @category RNG
20
+ */
21
+ export type RngState = readonly [version: number, s0: number, s1: number, s2: number, s3: number];
22
+ /**
23
+ * Seedable pseudo-random number generator using xoshiro128**. The default
24
+ * randomness source — `roll(notation)` builds one per call, and
25
+ * `roll(notation, { seed })` builds one from your seed.
26
+ *
27
+ * Period 2^128 - 1. Every seed is stringified and hashed with cyrb128 into
28
+ * the full 128-bit state, so numeric seeds keep all 53 bits and unrelated
29
+ * strings are overwhelmingly unlikely to share a state; an omitted seed hashes
30
+ * `Date.now()` together with two `Math.random()` draws, roughly 100 bits of
31
+ * width rather than 32 — wide enough that concurrently created generators are
32
+ * very unlikely to collide, though unpredictability stays bounded by the host
33
+ * engine's `Math.random()` seeding. The first 8 draws are discarded as a run-in.
34
+ *
35
+ * Stringifying means `42` and `'42'` are the same seed — the two forms share
36
+ * one namespace, which matters when seeds arrive from a CLI flag or JSON.
37
+ *
38
+ * {@link state} snapshots the state words as a versioned {@link RngState}, and
39
+ * passing one to the constructor resumes that exact sequence — restore copies
40
+ * the words verbatim, skipping both the hash and the run-in. A snapshot from
41
+ * another format version throws `INCOMPATIBLE_RNG_STATE`; within the current
42
+ * version the type is the contract, and a hand-built tuple is coerced to 32
43
+ * bits per word rather than rejected.
44
+ *
45
+ * Reproducibility guarantee: the same seed and the same notation produce the
46
+ * same dice for the lifetime of a major version, and `RngState` carries that
47
+ * binding. The one exception is a genuine distribution bug — bias, faulty
48
+ * rejection sampling — which may change the mapping in a minor release, never
49
+ * silently in a patch, and always with a `BREAKING` changelog note. The
50
+ * sequence is *not* cryptographically secure. To pin a roll beyond that,
51
+ * persist the {@link RollResult} rather than re-deriving it from a seed.
12
52
  *
13
53
  * @example
14
54
  * ```typescript
55
+ * import { SeededRNG, roll } from 'roll-parser';
56
+ *
15
57
  * // Same seed = same sequence
16
- * const rng1 = new SeededRNG('test-seed');
17
- * const rng2 = new SeededRNG('test-seed');
18
- * rng1.nextInt(1, 6) === rng2.nextInt(1, 6); // true
58
+ * const a = new SeededRNG('test-seed');
59
+ * const b = new SeededRNG('test-seed');
60
+ * a.nextInt(1, 6) === b.nextInt(1, 6); // true
61
+ *
62
+ * // An injected instance keeps advancing across rolls; `{ seed }` restarts
63
+ * // the stream on every call.
64
+ * const rng = new SeededRNG('demo');
65
+ * roll('1d20', { rng }).total; // 1
66
+ * roll('1d20', { rng }).total; // 20 — the stream moved on
67
+ * roll('1d20', { seed: 'demo' }).total; // 1, every single time
19
68
  * ```
69
+ *
70
+ * @category RNG
20
71
  */
21
72
  export declare class SeededRNG implements RNG {
22
73
  private s0;
23
74
  private s1;
24
75
  private s2;
25
76
  private s3;
26
- constructor(seed?: string | number);
77
+ constructor(seed?: string | number | RngState);
27
78
  private initState;
28
- private hashString;
79
+ /** All-zero is a fixed point for xoshiro — at least one word must be non-zero. */
80
+ private guardZeroState;
81
+ /**
82
+ * Returns the current state as a format version followed by four unsigned
83
+ * 32-bit words. Feeding the snapshot back to the constructor resumes this
84
+ * exact sequence; the source instance is untouched, and the two then advance
85
+ * independently.
86
+ *
87
+ * The words are {@link RngState} — opaque, restorable within the major
88
+ * version that produced them, and rejected with `INCOMPATIBLE_RNG_STATE`
89
+ * outside it.
90
+ *
91
+ * @returns A snapshot of the version and the four state words
92
+ *
93
+ * @example Replay a roll that was never seeded
94
+ * ```typescript
95
+ * import { SeededRNG, roll } from 'roll-parser';
96
+ *
97
+ * const rng = new SeededRNG();
98
+ * const snapshot = rng.state();
99
+ *
100
+ * const first = roll('1d20', { rng });
101
+ * const replay = roll('1d20', { rng: new SeededRNG(snapshot) });
102
+ * first.total === replay.total; // true
103
+ * ```
104
+ *
105
+ * Not a fork primitive. A restored generator replays the parent's stream, so
106
+ * children taken at different points are the same sequence at an offset, not
107
+ * independent substreams — derive a seed per entity instead.
108
+ *
109
+ * @example Per-entity streams — derive seeds, do not fork state
110
+ * ```typescript
111
+ * import { SeededRNG } from 'roll-parser';
112
+ *
113
+ * const goblin = new SeededRNG('world:goblin');
114
+ * const orc = new SeededRNG('world:orc');
115
+ * ```
116
+ */
117
+ state(): RngState;
118
+ /**
119
+ * Normalizes the constructor seed into a string. Numbers are stringified
120
+ * rather than coerced to uint32, so all 53 exact bits reach the hash.
121
+ */
122
+ private toSeedString;
123
+ /** cyrb128 — hashes the seed into all four state words at once. */
124
+ private hashSeed;
29
125
  private nextUint32;
126
+ /**
127
+ * Returns a float in `[0, 1)`, derived from one uint32 draw. Resolution is
128
+ * 2^-32, not the full 2^-53 a double can hold.
129
+ *
130
+ * Not used by the evaluator — dice go through {@link nextInt}.
131
+ *
132
+ * @returns A float in `[0, 1)`
133
+ */
30
134
  next(): number;
135
+ /**
136
+ * Returns an integer in the inclusive range `[min, max]`, uniformly
137
+ * distributed — rejection sampling removes the modulo bias a plain
138
+ * `% range` would introduce.
139
+ *
140
+ * Bounds handling, in order:
141
+ * - `min > max` is normalized by swapping, so `nextInt(6, 1)` behaves as
142
+ * `nextInt(1, 6)`. (The mock RNG throws instead; see {@link RNG.nextInt}.)
143
+ * - `min === max` returns that value without consuming a draw.
144
+ * - Ranges wider than 2^32 use two draws composed into a 53-bit value.
145
+ * - Ranges wider than 2^53 cannot be sampled exactly and throw a
146
+ * `RangeError` rather than silently skewing.
147
+ *
148
+ * @param min - Lower bound, inclusive
149
+ * @param max - Upper bound, inclusive
150
+ * @returns An integer in `[min, max]`
151
+ * @throws {RangeError} If `max - min + 1` exceeds 2^53
152
+ *
153
+ * @example
154
+ * ```typescript
155
+ * import { SeededRNG } from 'roll-parser';
156
+ *
157
+ * const rng = new SeededRNG('demo');
158
+ * rng.nextInt(1, 6); // 1..6
159
+ * rng.nextInt(3, 3); // 3, always
160
+ * rng.nextInt(1, Number.MAX_SAFE_INTEGER); // fine — two-draw path
161
+ * ```
162
+ */
31
163
  nextInt(min: number, max: number): number;
32
164
  /**
33
165
  * Unbiased sampling in `[0, range)` for ranges above 2^32, built from two
@@ -1 +1 @@
1
- {"version":3,"file":"seeded.d.ts","sourceRoot":"","sources":["../../src/rng/seeded.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AAEtC;;;;;;;;;;;;;GAaG;AACH,qBAAa,SAAU,YAAW,GAAG;IACnC,OAAO,CAAC,EAAE,CAAS;IACnB,OAAO,CAAC,EAAE,CAAS;IACnB,OAAO,CAAC,EAAE,CAAS;IACnB,OAAO,CAAC,EAAE,CAAS;gBAEP,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM;IAelC,OAAO,CAAC,SAAS;IA+BjB,OAAO,CAAC,UAAU;IASlB,OAAO,CAAC,UAAU;IAgBlB,IAAI,IAAI,MAAM;IAKd,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM;IA6BzC;;;;;OAKG;IACH,OAAO,CAAC,eAAe;CAiBxB"}
1
+ {"version":3,"file":"seeded.d.ts","sourceRoot":"","sources":["../../src/rng/seeded.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AAEtC;;;;;;;;;;;;;GAaG;AACH,MAAM,MAAM,QAAQ,GAAG,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;AAiFlG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiDG;AACH,qBAAa,SAAU,YAAW,GAAG;IAKnC,OAAO,CAAC,EAAE,CAAS;IACnB,OAAO,CAAC,EAAE,CAAS;IACnB,OAAO,CAAC,EAAE,CAAS;IACnB,OAAO,CAAC,EAAE,CAAS;IAEnB,YAAY,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,QAAQ,EAwB5C;IAED,OAAO,CAAC,SAAS;IAKjB,kFAAkF;IAClF,OAAO,CAAC,cAAc;IAMtB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAmCG;IACH,KAAK,IAAI,QAAQ,CAEhB;IAED;;;OAGG;IACH,OAAO,CAAC,YAAY;IAMpB,mEAAmE;IACnE,OAAO,CAAC,QAAQ;IA+BhB,OAAO,CAAC,UAAU;IAmBlB;;;;;;;OAOG;IACH,IAAI,IAAI,MAAM,CAEb;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;OA2BG;IACH,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAyBxC;IAED;;;;;OAKG;IACH,OAAO,CAAC,eAAe;CAexB"}
@@ -0,0 +1,138 @@
1
+ import { RollParserError } from '../errors.js';
2
+ const RNG_STATE_VERSION = 1;
3
+ const RNG_STATE_LENGTH = 5;
4
+ const rotl = (value, bits) => (value << bits) | (value >>> (32 - bits));
5
+ const WARMUP_DRAWS = 8;
6
+ const UINT32_SPACE = 0x100000000;
7
+ const MAX_EXACT_INT = 2 ** 53;
8
+ const HIGH_DRAW_SCALE = 0x200000;
9
+ const LOW_DRAW_SHIFT = 11;
10
+ const CYRB128_BASIS_1 = 1779033703;
11
+ const CYRB128_BASIS_2 = 3144134277;
12
+ const CYRB128_BASIS_3 = 1013904242;
13
+ const CYRB128_BASIS_4 = 2773480762;
14
+ const SCRAMBLE_MULTIPLIER_1 = 5;
15
+ const SCRAMBLE_ROTATION = 7;
16
+ const SCRAMBLE_MULTIPLIER_2 = 9;
17
+ const STATE_SHIFT = 9;
18
+ const STATE_ROTATION = 11;
19
+ const CYRB128_MULTIPLIER_1 = 597399067;
20
+ const CYRB128_MULTIPLIER_2 = 2869860233;
21
+ const CYRB128_MULTIPLIER_3 = 951274213;
22
+ const CYRB128_MULTIPLIER_4 = 2716044179;
23
+ function assertRestorable(state) {
24
+ if (state.length !== RNG_STATE_LENGTH) {
25
+ throw new RollParserError(`Incompatible RngState: expected ${RNG_STATE_LENGTH} values, received ${state.length}`, 'INCOMPATIBLE_RNG_STATE');
26
+ }
27
+ if (state[0] !== RNG_STATE_VERSION) {
28
+ throw new RollParserError(`Incompatible RngState version: expected ${RNG_STATE_VERSION}, received ${state[0]}`, 'INCOMPATIBLE_RNG_STATE');
29
+ }
30
+ }
31
+ export class SeededRNG {
32
+ s0;
33
+ s1;
34
+ s2;
35
+ s3;
36
+ constructor(seed) {
37
+ this.s0 = 0;
38
+ this.s1 = 0;
39
+ this.s2 = 0;
40
+ this.s3 = 0;
41
+ if (seed !== null && typeof seed === 'object') {
42
+ assertRestorable(seed);
43
+ this.s0 = seed[1] | 0;
44
+ this.s1 = seed[2] | 0;
45
+ this.s2 = seed[3] | 0;
46
+ this.s3 = seed[4] | 0;
47
+ this.guardZeroState();
48
+ return;
49
+ }
50
+ this.initState(seed);
51
+ for (let i = 0; i < WARMUP_DRAWS; i++) {
52
+ this.nextUint32();
53
+ }
54
+ }
55
+ initState(seed) {
56
+ this.hashSeed(this.toSeedString(seed));
57
+ this.guardZeroState();
58
+ }
59
+ guardZeroState() {
60
+ if (this.s0 === 0 && this.s1 === 0 && this.s2 === 0 && this.s3 === 0) {
61
+ this.s0 = 1;
62
+ }
63
+ }
64
+ state() {
65
+ return [RNG_STATE_VERSION, this.s0 >>> 0, this.s1 >>> 0, this.s2 >>> 0, this.s3 >>> 0];
66
+ }
67
+ toSeedString(seed) {
68
+ if (seed == null)
69
+ return `${Date.now()}-${Math.random()}-${Math.random()}`;
70
+ return String(seed);
71
+ }
72
+ hashSeed(str) {
73
+ let h1 = CYRB128_BASIS_1;
74
+ let h2 = CYRB128_BASIS_2;
75
+ let h3 = CYRB128_BASIS_3;
76
+ let h4 = CYRB128_BASIS_4;
77
+ for (let i = 0; i < str.length; i++) {
78
+ const k = str.charCodeAt(i);
79
+ h1 = h2 ^ Math.imul(h1 ^ k, CYRB128_MULTIPLIER_1);
80
+ h2 = h3 ^ Math.imul(h2 ^ k, CYRB128_MULTIPLIER_2);
81
+ h3 = h4 ^ Math.imul(h3 ^ k, CYRB128_MULTIPLIER_3);
82
+ h4 = h1 ^ Math.imul(h4 ^ k, CYRB128_MULTIPLIER_4);
83
+ }
84
+ h1 = Math.imul(h3 ^ (h1 >>> 18), CYRB128_MULTIPLIER_1);
85
+ h2 = Math.imul(h4 ^ (h2 >>> 22), CYRB128_MULTIPLIER_2);
86
+ h3 = Math.imul(h1 ^ (h3 >>> 17), CYRB128_MULTIPLIER_3);
87
+ h4 = Math.imul(h2 ^ (h4 >>> 19), CYRB128_MULTIPLIER_4);
88
+ const mixed = h1 ^ h2 ^ h3 ^ h4;
89
+ this.s0 = mixed;
90
+ this.s1 = h2 ^ mixed;
91
+ this.s2 = h3 ^ mixed;
92
+ this.s3 = h4 ^ mixed;
93
+ }
94
+ nextUint32() {
95
+ const scrambled = rotl(Math.imul(this.s1, SCRAMBLE_MULTIPLIER_1), SCRAMBLE_ROTATION);
96
+ const result = Math.imul(scrambled, SCRAMBLE_MULTIPLIER_2) >>> 0;
97
+ const t = this.s1 << STATE_SHIFT;
98
+ this.s2 ^= this.s0;
99
+ this.s3 ^= this.s1;
100
+ this.s1 ^= this.s2;
101
+ this.s0 ^= this.s3;
102
+ this.s2 ^= t;
103
+ this.s3 = rotl(this.s3, STATE_ROTATION);
104
+ return result;
105
+ }
106
+ next() {
107
+ return this.nextUint32() / UINT32_SPACE;
108
+ }
109
+ nextInt(min, max) {
110
+ const lo = min > max ? max : min;
111
+ const hi = min > max ? min : max;
112
+ const range = hi - lo + 1;
113
+ if (range <= 1) {
114
+ return lo;
115
+ }
116
+ if (range > UINT32_SPACE) {
117
+ return lo + this.nextBoundedWide(range);
118
+ }
119
+ const threshold = (UINT32_SPACE - range) % range;
120
+ let value;
121
+ do {
122
+ value = this.nextUint32();
123
+ } while (value < threshold);
124
+ return lo + (value % range);
125
+ }
126
+ nextBoundedWide(range) {
127
+ if (range > MAX_EXACT_INT) {
128
+ throw new RangeError(`nextInt range ${range} exceeds 2^53 and cannot be sampled exactly`);
129
+ }
130
+ const limit = Math.floor(MAX_EXACT_INT / range) * range;
131
+ let value;
132
+ do {
133
+ value = this.nextUint32() * HIGH_DRAW_SCALE + (this.nextUint32() >>> LOW_DRAW_SHIFT);
134
+ } while (value >= limit);
135
+ return value % range;
136
+ }
137
+ }
138
+ //# sourceMappingURL=seeded.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seeded.js","sourceRoot":"","sources":["../../src/rng/seeded.ts"],"names":[],"mappings":"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"}
@@ -7,6 +7,57 @@
7
7
  */
8
8
  /**
9
9
  * Random Number Generator interface for dice rolling.
10
+ *
11
+ * Guaranteed by every implementation:
12
+ *
13
+ * - `next()` returns a float in `[0, 1)`.
14
+ * - `nextInt(min, max)` returns an integer in `[min, max]` when `min <= max`.
15
+ * - `nextInt(n, n)` returns `n`.
16
+ *
17
+ * Deliberately NOT guaranteed: behavior when `min > max`. The two shipped
18
+ * implementations differ, and each difference is load-bearing — see
19
+ * {@link nextInt}. Evaluator code never inverts its bounds, so callers should
20
+ * treat inverted bounds as a programming error rather than an API.
21
+ *
22
+ * The evaluator only ever calls `nextInt`, once per die, left to right;
23
+ * `next` exists for implementations that want a float source of their own.
24
+ * Two shipped implementations satisfy the interface — {@link SeededRNG} and
25
+ * the mock from `roll-parser/testing` — and anything structurally compatible
26
+ * works, so a crypto-backed or table-driven generator drops straight in.
27
+ *
28
+ * @example A crypto-backed RNG
29
+ * ```typescript
30
+ * import { roll, type RNG } from 'roll-parser';
31
+ *
32
+ * const cryptoRng: RNG = {
33
+ * next: () => crypto.getRandomValues(new Uint32Array(1))[0]! / 2 ** 32,
34
+ * nextInt: (min, max) => min + Math.floor(cryptoRng.next() * (max - min + 1)),
35
+ * };
36
+ *
37
+ * roll('4d6kh3', { rng: cryptoRng }).total; // 3..18
38
+ * ```
39
+ *
40
+ * @example Wrapping an RNG to log every draw
41
+ * ```typescript
42
+ * import { SeededRNG, roll, type RNG } from 'roll-parser';
43
+ *
44
+ * function withLog(inner: RNG, log: number[]): RNG {
45
+ * return {
46
+ * next: () => inner.next(),
47
+ * nextInt: (min, max) => {
48
+ * const value = inner.nextInt(min, max);
49
+ * log.push(value);
50
+ * return value;
51
+ * },
52
+ * };
53
+ * }
54
+ *
55
+ * const draws: number[] = [];
56
+ * roll('4d6kh3', { rng: withLog(new SeededRNG('demo'), draws) });
57
+ * draws; // [4, 3, 3, 3] — every face, including the dropped one
58
+ * ```
59
+ *
60
+ * @category RNG
10
61
  */
11
62
  export type RNG = {
12
63
  /**
@@ -16,6 +67,12 @@ export type RNG = {
16
67
  /**
17
68
  * Returns a random integer in the inclusive range [min, max].
18
69
  *
70
+ * Inverted bounds (`min > max`) are implementation-defined:
71
+ * `SeededRNG` normalizes by swapping them, so `nextInt(6, 1)` yields the
72
+ * same sequence as `nextInt(1, 6)`; the mock RNG from `roll-parser/testing`
73
+ * raises `RangeError`, because a scripted value can never satisfy an empty
74
+ * range and silently accepting it would hide a miscounted test sequence.
75
+ *
19
76
  * @param min - Minimum value (inclusive)
20
77
  * @param max - Maximum value (inclusive)
21
78
  */
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/rng/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;GAEG;AACH,MAAM,MAAM,GAAG,GAAG;IAChB;;OAEG;IACH,IAAI,IAAI,MAAM,CAAC;IAEf;;;;;OAKG;IACH,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;CAC3C,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/rng/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqDG;AACH,MAAM,MAAM,GAAG,GAAG;IAChB;;OAEG;IACH,IAAI,IAAI,MAAM,CAAC;IAEf;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;CAC3C,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/rng/types.ts"],"names":[],"mappings":""}