roll-parser 3.0.0-alpha.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.
- package/CHANGELOG.md +189 -0
- package/MIGRATION.md +147 -0
- package/README.md +985 -43
- package/dist/cli/args.d.ts +1 -0
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js +81 -0
- package/dist/cli/args.js.map +1 -0
- package/dist/cli/format.d.ts +16 -4
- package/dist/cli/format.d.ts.map +1 -1
- package/dist/cli/format.js +17 -0
- package/dist/cli/format.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +14 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/main.d.ts +36 -0
- package/dist/cli/main.d.ts.map +1 -0
- package/dist/cli/main.js +83 -0
- package/dist/cli/main.js.map +1 -0
- package/dist/errors.d.ts +332 -14
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +141 -0
- package/dist/errors.js.map +1 -0
- package/dist/evaluator/die.d.ts +26 -0
- package/dist/evaluator/die.d.ts.map +1 -0
- package/dist/evaluator/die.js +19 -0
- package/dist/evaluator/die.js.map +1 -0
- package/dist/evaluator/env.d.ts +58 -0
- package/dist/evaluator/env.d.ts.map +1 -0
- package/dist/evaluator/env.js +11 -0
- package/dist/evaluator/env.js.map +1 -0
- package/dist/evaluator/evaluator.d.ts +62 -40
- package/dist/evaluator/evaluator.d.ts.map +1 -1
- package/dist/evaluator/evaluator.js +906 -0
- package/dist/evaluator/evaluator.js.map +1 -0
- package/dist/evaluator/modifiers/compare.d.ts +1 -1
- package/dist/evaluator/modifiers/compare.d.ts.map +1 -1
- package/dist/evaluator/modifiers/compare.js +15 -0
- package/dist/evaluator/modifiers/compare.js.map +1 -0
- package/dist/evaluator/modifiers/crit-threshold.d.ts +27 -0
- package/dist/evaluator/modifiers/crit-threshold.d.ts.map +1 -0
- package/dist/evaluator/modifiers/crit-threshold.js +23 -0
- package/dist/evaluator/modifiers/crit-threshold.js.map +1 -0
- package/dist/evaluator/modifiers/die-bound.d.ts +26 -0
- package/dist/evaluator/modifiers/die-bound.d.ts.map +1 -0
- package/dist/evaluator/modifiers/die-bound.js +14 -0
- package/dist/evaluator/modifiers/die-bound.js.map +1 -0
- package/dist/evaluator/modifiers/explode.d.ts +18 -6
- package/dist/evaluator/modifiers/explode.d.ts.map +1 -1
- package/dist/evaluator/modifiers/explode.js +103 -0
- package/dist/evaluator/modifiers/explode.js.map +1 -0
- package/dist/evaluator/modifiers/flags.d.ts +37 -0
- package/dist/evaluator/modifiers/flags.d.ts.map +1 -0
- package/dist/evaluator/modifiers/flags.js +18 -0
- package/dist/evaluator/modifiers/flags.js.map +1 -0
- package/dist/evaluator/modifiers/keep-drop.d.ts +12 -28
- package/dist/evaluator/modifiers/keep-drop.d.ts.map +1 -1
- package/dist/evaluator/modifiers/keep-drop.js +82 -0
- package/dist/evaluator/modifiers/keep-drop.js.map +1 -0
- package/dist/evaluator/modifiers/reroll.d.ts +14 -6
- package/dist/evaluator/modifiers/reroll.d.ts.map +1 -1
- package/dist/evaluator/modifiers/reroll.js +62 -0
- package/dist/evaluator/modifiers/reroll.js.map +1 -0
- package/dist/evaluator/modifiers/sort.d.ts +27 -0
- package/dist/evaluator/modifiers/sort.d.ts.map +1 -0
- package/dist/evaluator/modifiers/sort.js +13 -0
- package/dist/evaluator/modifiers/sort.js.map +1 -0
- package/dist/evaluator/modifiers/success-count.d.ts +2 -6
- package/dist/evaluator/modifiers/success-count.d.ts.map +1 -1
- package/dist/evaluator/modifiers/success-count.js +24 -0
- package/dist/evaluator/modifiers/success-count.js.map +1 -0
- package/dist/index.d.ts +35 -13
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12 -1723
- package/dist/index.js.map +1 -0
- package/dist/lexer/lexer.d.ts +68 -8
- package/dist/lexer/lexer.d.ts.map +1 -1
- package/dist/lexer/lexer.js +260 -0
- package/dist/lexer/lexer.js.map +1 -0
- package/dist/lexer/tokens.d.ts +52 -7
- package/dist/lexer/tokens.d.ts.map +1 -1
- package/dist/lexer/tokens.js +42 -0
- package/dist/lexer/tokens.js.map +1 -0
- package/dist/parser/ast.d.ts +419 -80
- package/dist/parser/ast.d.ts.map +1 -1
- package/dist/parser/ast.js +52 -0
- package/dist/parser/ast.js.map +1 -0
- package/dist/parser/guards.d.ts +106 -0
- package/dist/parser/guards.d.ts.map +1 -0
- package/dist/parser/guards.js +121 -0
- package/dist/parser/guards.js.map +1 -0
- package/dist/parser/parser.d.ts +162 -15
- package/dist/parser/parser.d.ts.map +1 -1
- package/dist/parser/parser.js +751 -0
- package/dist/parser/parser.js.map +1 -0
- package/dist/rng/mock.d.ts +74 -13
- package/dist/rng/mock.d.ts.map +1 -1
- package/dist/rng/mock.js +30 -0
- package/dist/rng/mock.js.map +1 -0
- package/dist/rng/seeded.d.ts +149 -10
- package/dist/rng/seeded.d.ts.map +1 -1
- package/dist/rng/seeded.js +138 -0
- package/dist/rng/seeded.js.map +1 -0
- package/dist/rng/types.d.ts +57 -0
- package/dist/rng/types.d.ts.map +1 -1
- package/dist/rng/types.js +2 -0
- package/dist/rng/types.js.map +1 -0
- package/dist/roll.d.ts +59 -25
- package/dist/roll.d.ts.map +1 -1
- package/dist/roll.js +8 -0
- package/dist/roll.js.map +1 -0
- package/dist/testing.d.ts +5 -4
- package/dist/testing.d.ts.map +1 -1
- package/dist/testing.js +2 -38
- package/dist/testing.js.map +1 -0
- package/dist/types.d.ts +427 -24
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +8 -0
- package/dist/types.js.map +1 -0
- package/dist/version.d.ts +2 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +2 -0
- package/dist/version.js.map +1 -0
- package/package.json +93 -40
- package/src/cli/args.ts +66 -9
- package/src/cli/format.ts +30 -7
- package/src/cli/index.ts +27 -67
- package/src/cli/main.ts +129 -0
- package/src/errors.ts +488 -23
- package/src/evaluator/die.ts +50 -0
- package/src/evaluator/env.ts +73 -0
- package/src/evaluator/evaluator.ts +1296 -349
- package/src/evaluator/modifiers/compare.ts +1 -1
- package/src/evaluator/modifiers/crit-threshold.ts +56 -0
- package/src/evaluator/modifiers/die-bound.ts +39 -0
- package/src/evaluator/modifiers/explode.ts +82 -76
- package/src/evaluator/modifiers/flags.ts +61 -0
- package/src/evaluator/modifiers/keep-drop.ts +124 -126
- package/src/evaluator/modifiers/reroll.ts +36 -64
- package/src/evaluator/modifiers/sort.ts +43 -0
- package/src/evaluator/modifiers/success-count.ts +6 -9
- package/src/index.ts +73 -34
- package/src/lexer/lexer.ts +201 -35
- package/src/lexer/tokens.ts +72 -7
- package/src/parser/ast.ts +453 -104
- package/src/parser/guards.ts +248 -0
- package/src/parser/parser.ts +835 -135
- package/src/rng/mock.ts +75 -14
- package/src/rng/seeded.ts +323 -58
- package/src/rng/types.ts +57 -0
- package/src/roll.ts +66 -41
- package/src/testing.ts +5 -9
- package/src/types.ts +416 -24
- package/src/version.ts +2 -0
- package/dist/cli.js +0 -1775
- package/dist/evaluator/index.d.ts +0 -8
- package/dist/evaluator/index.d.ts.map +0 -1
- package/dist/index.mjs +0 -1724
- package/dist/rng/index.d.ts +0 -8
- package/dist/rng/index.d.ts.map +0 -1
- package/dist/testing.mjs +0 -39
- package/src/evaluator/index.ts +0 -14
- package/src/rng/index.ts +0 -8
|
@@ -3,63 +3,85 @@
|
|
|
3
3
|
*
|
|
4
4
|
* @module evaluator/evaluator
|
|
5
5
|
*/
|
|
6
|
-
import
|
|
7
|
-
import {
|
|
8
|
-
import type {
|
|
9
|
-
import type {
|
|
10
|
-
import
|
|
11
|
-
import { DEFAULT_MAX_EXPLODE_ITERATIONS } from './modifiers/explode';
|
|
12
|
-
import { DEFAULT_MAX_REROLL_ITERATIONS } from './modifiers/reroll';
|
|
6
|
+
import { EvaluatorError } from '../errors.js';
|
|
7
|
+
import type { ASTNode } from '../parser/ast.js';
|
|
8
|
+
import type { RNG } from '../rng/types.js';
|
|
9
|
+
import type { DieResult, EvaluateOptions, RollResult } from '../types.js';
|
|
10
|
+
import { DegreeOfSuccess } from '../types.js';
|
|
11
|
+
import { DEFAULT_MAX_EXPLODE_ITERATIONS } from './modifiers/explode.js';
|
|
12
|
+
import { DEFAULT_MAX_REROLL_ITERATIONS } from './modifiers/reroll.js';
|
|
13
|
+
export { EvaluatorError };
|
|
13
14
|
/**
|
|
14
|
-
*
|
|
15
|
+
* Default value of `EvaluationOptions.maxDice`: the number of dice a single
|
|
16
|
+
* evaluation may roll before `DICE_LIMIT_EXCEEDED` is thrown.
|
|
17
|
+
*
|
|
18
|
+
* Counted across the whole expression, not per pool, so `6000d6+6000d6`
|
|
19
|
+
* breaches it. Includes dice rolled by explosions, rerolls, and
|
|
20
|
+
* meta-expressions.
|
|
21
|
+
*
|
|
22
|
+
* @category Limits
|
|
15
23
|
*/
|
|
16
|
-
export declare class EvaluatorError extends RollParserError {
|
|
17
|
-
readonly nodeType: string | undefined;
|
|
18
|
-
constructor(message: string, code: RollParserErrorCode, nodeType?: string);
|
|
19
|
-
}
|
|
20
|
-
/** Default maximum total dice allowed per evaluation. */
|
|
21
24
|
export declare const DEFAULT_MAX_DICE = 10000;
|
|
22
25
|
export { DEFAULT_MAX_EXPLODE_ITERATIONS, DEFAULT_MAX_REROLL_ITERATIONS };
|
|
23
26
|
/**
|
|
24
|
-
* Per-
|
|
27
|
+
* Per-branch mutable accumulator for tracking rolls and output during recursion.
|
|
25
28
|
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
29
|
+
* Module-level export, deliberately absent from `src/index.ts` — the package
|
|
30
|
+
* surface never mentions it. See {@link mergeMetaRolls} for why the export
|
|
31
|
+
* exists at all.
|
|
28
32
|
*/
|
|
29
|
-
export type
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
totalDiceRolled: number;
|
|
33
|
+
export type EvalContext = {
|
|
34
|
+
rolls: DieResult[];
|
|
35
|
+
expressionParts: string[];
|
|
36
|
+
renderedParts: string[];
|
|
34
37
|
/**
|
|
35
|
-
*
|
|
36
|
-
*
|
|
37
|
-
*
|
|
38
|
+
* Populated by `evalVersus` with the resolved degree and natural value.
|
|
39
|
+
* `evaluate()` reads this from the top-level ctx to surface `degree` and
|
|
40
|
+
* `natural` on the final `RollResult`. Only populated when `vs` is the
|
|
41
|
+
* root of the expression.
|
|
38
42
|
*/
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
* left-chain check.
|
|
45
|
-
*/
|
|
46
|
-
insideVersus: boolean;
|
|
43
|
+
versusMetadata?: {
|
|
44
|
+
degree: DegreeOfSuccess;
|
|
45
|
+
natural: number | undefined;
|
|
46
|
+
dcTotal: number;
|
|
47
|
+
};
|
|
47
48
|
};
|
|
48
49
|
/**
|
|
49
|
-
* Evaluates a parsed AST and returns the roll result.
|
|
50
|
+
* Evaluates a parsed AST against an {@link RNG} and returns the roll result.
|
|
51
|
+
*
|
|
52
|
+
* The second half of the pipeline — {@link roll} is `evaluate(parse(...))`.
|
|
53
|
+
* Call it directly to reuse one AST across many rolls, or to drive a
|
|
54
|
+
* hand-built AST.
|
|
50
55
|
*
|
|
51
|
-
*
|
|
52
|
-
*
|
|
53
|
-
*
|
|
54
|
-
* @
|
|
56
|
+
* Unlike `roll`, the RNG is required: `evaluate` never invents a randomness
|
|
57
|
+
* source, so a caller can never accidentally get an unseeded roll.
|
|
58
|
+
*
|
|
59
|
+
* @param ast - The AST to evaluate, from {@link parse} or hand-built
|
|
60
|
+
* @param rng - Randomness source; one `nextInt` call per die
|
|
61
|
+
* @param options - Evaluation limits plus the original `notation` string,
|
|
62
|
+
* which the AST cannot supply
|
|
63
|
+
* @returns Complete {@link RollResult}
|
|
64
|
+
* @throws {EvaluatorError} On a limit breach, division by zero, an undefined
|
|
65
|
+
* variable, or a non-finite total
|
|
66
|
+
* @throws {RollParserError} `INVALID_EVALUATION_LIMIT` when a supplied limit is
|
|
67
|
+
* not an integer in range — raised before any die is rolled
|
|
55
68
|
*
|
|
56
69
|
* @example
|
|
57
70
|
* ```typescript
|
|
71
|
+
* import { evaluate, parse } from 'roll-parser';
|
|
72
|
+
* import { createMockRng } from 'roll-parser/testing';
|
|
73
|
+
*
|
|
58
74
|
* const ast = parse('2d6+3');
|
|
59
|
-
* const
|
|
60
|
-
*
|
|
61
|
-
*
|
|
75
|
+
* const result = evaluate(ast, createMockRng([4, 2]), { notation: '2d6+3' });
|
|
76
|
+
* result.total; // 9
|
|
77
|
+
* result.rendered; // '2d6[4, 2] + 3 = 9'
|
|
62
78
|
* ```
|
|
79
|
+
*
|
|
80
|
+
* Omitting `notation` falls back to the normalized `expression`, which is
|
|
81
|
+
* reconstructed from the AST — so `RollResult.notation` is always a string,
|
|
82
|
+
* just not necessarily the one the user typed.
|
|
83
|
+
*
|
|
84
|
+
* @category Core
|
|
63
85
|
*/
|
|
64
86
|
export declare function evaluate(ast: ASTNode, rng: RNG, options?: EvaluateOptions): RollResult;
|
|
65
87
|
//# sourceMappingURL=evaluator.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"evaluator.d.ts","sourceRoot":"","sources":["../../src/evaluator/evaluator.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,
|
|
1
|
+
{"version":3,"file":"evaluator.d.ts","sourceRoot":"","sources":["../../src/evaluator/evaluator.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAiB,cAAc,EAAuC,MAAM,cAAc,CAAC;AAClG,OAAO,KAAK,EACV,OAAO,EAmBR,MAAM,kBAAkB,CAAC;AAG1B,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,KAAK,EAIV,SAAS,EACT,eAAe,EAKf,UAAU,EACX,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAK9C,OAAO,EAKL,8BAA8B,EAC/B,MAAM,wBAAwB,CAAC;AAQhC,OAAO,EAGL,6BAA6B,EAC9B,MAAM,uBAAuB,CAAC;AAM/B,OAAO,EAAE,cAAc,EAAE,CAAC;AAM1B;;;;;;;;;GASG;AACH,eAAO,MAAM,gBAAgB,QAAS,CAAC;AAmCvC,OAAO,EAAE,8BAA8B,EAAE,6BAA6B,EAAE,CAAC;AAMzE;;;;;;GAMG;AACH,MAAM,MAAM,WAAW,GAAG;IACxB,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB;;;;;OAKG;IACH,cAAc,CAAC,EAAE;QACf,MAAM,EAAE,eAAe,CAAC;QACxB,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;QAC5B,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;CACH,CAAC;AA++CF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,GAAE,eAAoB,GAAG,UAAU,CA4D1F"}
|