Skip to content

@dice-roller/rpg-dice-roller / Roll

Class: Roll<T> ​

Defined in: src/Roll.ts:72

One evaluated notation: the result tree and its totals.

Can be used on its own, or through a Roller, which adds rolls made by roll() to its history.

total is calculated straight away; minTotal / maxTotal evaluate the expression again in min / max mode on first access, and are cached (or taken from the data on import). The readonly properties do not make the result tree or shared settings deeply immutable.

Example ​

ts
const roll = new Roll("4d6kh3");   // rolls straight away
roll.total;                        // e.g. 14
`${roll}`;                         // e.g. "4d6kh3: [3d, 5, 6, 3] = 14"

new Roll("4d6", { engine: engines.MersenneTwister19937.seed(42) });

Type Parameters ​

T ​

T = string

the output type of the configured presenter

Constructors ​

Constructor ​

new Roll<T>(input, options?): Roll<T>

Defined in: src/Roll.ts:94

Parses (if a string) and rolls the input. RollData is restored as it is, without rolling or validating: its result and totals are used, and reroll() rolls its expression. Use Roll.import() / Roll.fromJSON() for exported data, which validate it.

Parameters ​

input ​

string | ExpressionNode | RollData

the notation or expression to roll, or data to restore without validation

options? ​

RollSettings<T> | RollOptions<T>

how to roll; RollSettings are used as they are, so they can be shared

Returns ​

Roll<T>

Throws ​

the notation is invalid

Properties ​

notation ​

readonly notation: string

Defined in: src/Roll.ts:74

The original notation (or the notation of an AST input).


result ​

readonly result: ExpressionResult

Defined in: src/Roll.ts:76

The evaluated expression tree, including individual dice results.


total ​

readonly total: number

Defined in: src/Roll.ts:78

The total, rounded to 2 decimal places.

Accessors ​

averageTotal ​

Get Signature ​

get averageTotal(): number

Defined in: src/Roll.ts:180

The midpoint of minTotal and maxTotal, as in v5.

This is not the statistical mean for notations like 4d6kh3 or exploding dice.

Returns ​

number


description ​

Get Signature ​

get description(): DescriptionNode | undefined

Defined in: src/Roll.ts:161

The first description in the notation.

Returns ​

DescriptionNode | undefined


expression ​

Get Signature ​

get expression(): ExpressionNode

Defined in: src/Roll.ts:156

The AST that was evaluated.

Returns ​

ExpressionNode


maxTotal ​

Get Signature ​

get maxTotal(): number

Defined in: src/Roll.ts:171

Total with each die at its maximum, rounded to 2 decimal places; not necessarily an expression maximum (e.g. -d6).

Returns ​

number


minTotal ​

Get Signature ​

get minTotal(): number

Defined in: src/Roll.ts:166

Total with each die at its minimum, rounded to 2 decimal places; not necessarily an expression minimum (e.g. -d6).

Returns ​

number

Methods ​

export() ​

Call Signature ​

export(format): object

Defined in: src/Roll.ts:207

Exports as JSON (default), a JSON-safe object, or UTF-8 base64 JSON. Evaluates uncached min/max totals.

Parameters ​
format ​

"object"

Returns ​

object

averageTotal ​

readonly averageTotal: EncodedNumber

maxTotal ​

readonly maxTotal: EncodedNumber

minTotal ​

readonly minTotal: EncodedNumber

notation ​

readonly notation: string

result ​

readonly result: { node: { type: "number"; value: EncodedNumber; }; type: "number"; value: EncodedNumber; } | { die: { average: EncodedNumber; faceCount: EncodedNumber; max: EncodedNumber; min: EncodedNumber; notation: string; }; dieArgs: readonly { readonly type: "number"; readonly node: { readonly type: "number"; readonly value: EncodedNumber; }; readonly value: EncodedNumber; } | { readonly type: "pool"; ... 5 more ...; readonly rolls: readonly { ...; }[]; } | ... 4 more ... | { ...; }[]; node: { description?: { style: DescriptionStyle; text: string; }; die: { args: readonly ({ type: "number"; value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... | { readonly type: "group"; readonly expressions: readonly ({ readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; })[]; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ... | { description?: { style: DescriptionStyle; text: string; }; expressions: readonly ({ readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?:...; modifiers: readonly ({ comparePoint?: ...; compound: ...; name: ...; penetrate: ...; type: ...; } | { failure?: ...; name: ...; success: ...; type: ...; } | { end: ...; name: ...; qty: ...; type: ...; } | { end: ...; name: ...; qty: ...; type: ...; } | { comparePoint?: ...; name: ...; once: ...; type: ...; } | { comparePoint?: ...; name: ...; once: ...; type: ...; } | { comparePoint?: ...; name: ...; type: ...; } | { comparePoint?: ...; name: ...; type: ...; } | { direction: ...; name: ...; type: ...; } | { name: ...; type: ...; value: ...; } | { name: ...; type: ...; value: ...; })[]; type: "group"; } | { left: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; op: "+" | "-" | "*" | "/" | "%" | "^"; right: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "binary"; } | { op: "-"; operand: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "unary"; } | { expression: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "paren"; } | { args: readonly ({ readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?:...; name: "abs" | "ceil" | "cos" | "exp" | "floor" | "log" | "round" | "sign" | "sin" | "sqrt" | "tan" | "pow" | "max" | "min" | "trunc"; type: "function"; })[]; name: string; type: "die"; }; modifiers: readonly ({ comparePoint?: { operator: "=" | "!=" | "<>" | "<" | ">" | "<=" | ">="; value: EncodedNumber; }; compound: boolean; name: "explode"; penetrate: boolean; type: "modifier"; } | { failure?: { operator: "=" | "!=" | "<>" | "<" | ">" | "<=" | ">="; value: EncodedNumber; }; name: "target"; success: { operator: "=" | "!=" | "<>" | "<" | ">" | "<=" | ">="; value: EncodedNumber; }; type: "modifier"; } | { end: PoolEnd; name: "drop"; qty: EncodedNumber; type: "modifier"; } | { end: PoolEnd; name: "keep"; qty: EncodedNumber; type: "modifier"; } | { comparePoint?: { operator: "=" | "!=" | "<>" | "<" | ">" | "<=" | ">="; value: EncodedNumber; }; name: "re-roll"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: "=" | "!=" | "<>" | "<" | ">" | "<=" | ">="; value: EncodedNumber; }; name: "unique"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: "=" | "!=" | "<>" | "<" | ">" | "<=" | ">="; value: EncodedNumber; }; name: "critical-success"; type: "modifier"; } | { comparePoint?: { operator: "=" | "!=" | "<>" | "<" | ">" | "<=" | ">="; value: EncodedNumber; }; name: "critical-failure"; type: "modifier"; } | { direction: SortDirection; name: "sort"; type: "modifier"; } | { name: "max"; type: "modifier"; value: EncodedNumber; } | { name: "min"; type: "modifier"; value: EncodedNumber; })[]; qty: { type: "number"; value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... | { readonly type: "group"; readonly expressions: readonly ({ readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; })[]; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ... | { description?: { style: DescriptionStyle; text: string; }; expressions: readonly { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...[]; modifiers: readonly ({ comparePoint?: { operator: ...; value: ...; }; compound: boolean; name: "explode"; penetrate: boolean; type: "modifier"; } | { failure?: { operator: ...; value: ...; }; name: "target"; success: { operator: ... | ... | ... | ... | ... | ... | ...; value: EncodedNumber; }; type: "modifier"; } | { end: PoolEnd; name: "drop"; qty: EncodedNumber; type: "modifier"; } | { end: PoolEnd; name: "keep"; qty: EncodedNumber; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "re-roll"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "unique"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "critical-success"; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "critical-failure"; type: "modifier"; } | { direction: SortDirection; name: "sort"; type: "modifier"; } | { name: "max"; type: "modifier"; value: EncodedNumber; } | { name: "min"; type: "modifier"; value: EncodedNumber; })[]; type: "group"; } | { left: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; op: "+" | "-" | "*" | "/" | "%" | "^"; right: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "binary"; } | { op: "-"; operand: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "unary"; } | { expression: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "paren"; } | { args: readonly { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...[]; name: "abs" | "ceil" | "cos" | "exp" | "floor" | "log" | "round" | "sign" | "sin" | "sqrt" | "tan" | "pow" | "max" | "min" | "trunc"; type: "function"; }; type: "pool"; }; qty: { readonly type: "number"; readonly node: { readonly type: "number"; readonly value: EncodedNumber; }; readonly value: EncodedNumber; } | { readonly type: "pool"; ... 5 more ...; readonly rolls: readonly { ...; }[]; } | ... 4 more ... | { ...; }; rolls: readonly object[]; type: "pool"; value: EncodedNumber; } | { members: readonly object[]; node: { description?: { style: DescriptionStyle; text: string; }; expressions: readonly ({ type: "number"; value: EncodedNumber; } | { description?: { style: DescriptionStyle; text: string; }; die: { args: readonly ({ readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?:...; name: string; type: "die"; }; modifiers: readonly ({ comparePoint?: ... | ...; compound: boolean; name: "explode"; penetrate: boolean; type: "modifier"; } | { failure?: ... | ...; name: "target"; success: { operator: ...; value: ...; }; type: "modifier"; } | { end: PoolEnd; name: "drop"; qty: EncodedNumber; type: "modifier"; } | { end: PoolEnd; name: "keep"; qty: EncodedNumber; type: "modifier"; } | { comparePoint?: ... | ...; name: "re-roll"; once: boolean; type: "modifier"; } | { comparePoint?: ... | ...; name: "unique"; once: boolean; type: "modifier"; } | { comparePoint?: ... | ...; name: "critical-success"; type: "modifier"; } | { comparePoint?: ... | ...; name: "critical-failure"; type: "modifier"; } | { direction: SortDirection; name: "sort"; type: "modifier"; } | { name: "max"; type: "modifier"; value: EncodedNumber; } | { name: "min"; type: "modifier"; value: EncodedNumber; })[]; qty: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "pool"; } | { readonly type: "group"; readonly expressions: readonly ({ readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... ... | { left: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; op: "+" | "-" | "*" | "/" | "%" | "^"; right: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "binary"; } | { op: "-"; operand: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "unary"; } | { expression: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "paren"; } | { args: readonly ({ readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?:...; name: "abs" | "ceil" | "cos" | "exp" | "floor" | "log" | "round" | "sign" | "sin" | "sqrt" | "tan" | "pow" | "max" | "min" | "trunc"; type: "function"; })[]; modifiers: readonly ({ comparePoint?: { operator: "=" | "!=" | "<>" | "<" | ">" | "<=" | ">="; value: EncodedNumber; }; compound: boolean; name: "explode"; penetrate: boolean; type: "modifier"; } | { failure?: { operator: "=" | "!=" | "<>" | "<" | ">" | "<=" | ">="; value: EncodedNumber; }; name: "target"; success: { operator: "=" | "!=" | "<>" | "<" | ">" | "<=" | ">="; value: EncodedNumber; }; type: "modifier"; } | { end: PoolEnd; name: "drop"; qty: EncodedNumber; type: "modifier"; } | { end: PoolEnd; name: "keep"; qty: EncodedNumber; type: "modifier"; } | { comparePoint?: { operator: "=" | "!=" | "<>" | "<" | ">" | "<=" | ">="; value: EncodedNumber; }; name: "re-roll"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: "=" | "!=" | "<>" | "<" | ">" | "<=" | ">="; value: EncodedNumber; }; name: "unique"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: "=" | "!=" | "<>" | "<" | ">" | "<=" | ">="; value: EncodedNumber; }; name: "critical-success"; type: "modifier"; } | { comparePoint?: { operator: "=" | "!=" | "<>" | "<" | ">" | "<=" | ">="; value: EncodedNumber; }; name: "critical-failure"; type: "modifier"; } | { direction: SortDirection; name: "sort"; type: "modifier"; } | { name: "max"; type: "modifier"; value: EncodedNumber; } | { name: "min"; type: "modifier"; value: EncodedNumber; })[]; type: "group"; }; type: "group"; value: EncodedNumber; } | { left: { readonly type: "number"; readonly node: { readonly type: "number"; readonly value: EncodedNumber; }; readonly value: EncodedNumber; } | { readonly type: "pool"; ... 5 more ...; readonly rolls: readonly { ...; }[]; } | ... 4 more ... | { ...; }; node: { left: { type: "number"; value: EncodedNumber; } | { description?: { style: DescriptionStyle; text: string; }; die: { args: readonly { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...[]; name: string; type: "die"; }; modifiers: readonly ({ comparePoint?: { operator: ...; value: ...; }; compound: boolean; name: "explode"; penetrate: boolean; type: "modifier"; } | { failure?: { operator: ...; value: ...; }; name: "target"; success: { operator: ... | ... | ... | ... | ... | ... | ...; value: EncodedNumber; }; type: "modifier"; } | { end: PoolEnd; name: "drop"; qty: EncodedNumber; type: "modifier"; } | { end: PoolEnd; name: "keep"; qty: EncodedNumber; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "re-roll"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "unique"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "critical-success"; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "critical-failure"; type: "modifier"; } | { direction: SortDirection; name: "sort"; type: "modifier"; } | { name: "max"; type: "modifier"; value: EncodedNumber; } | { name: "min"; type: "modifier"; value: EncodedNumber; })[]; qty: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "pool"; } | { description?: { style: DescriptionStyle; text: string; }; expressions: readonly { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...[]; modifiers: readonly ({ comparePoint?: { operator: ...; value: ...; }; compound: boolean; name: "explode"; penetrate: boolean; type: "modifier"; } | { failure?: { operator: ...; value: ...; }; name: "target"; success: { operator: ... | ... | ... | ... | ... | ... | ...; value: EncodedNumber; }; type: "modifier"; } | { end: PoolEnd; name: "drop"; qty: EncodedNumber; type: "modifier"; } | { end: PoolEnd; name: "keep"; qty: EncodedNumber; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "re-roll"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "unique"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "critical-success"; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "critical-failure"; type: "modifier"; } | { direction: SortDirection; name: "sort"; type: "modifier"; } | { name: "max"; type: "modifier"; value: EncodedNumber; } | { name: "min"; type: "modifier"; value: EncodedNumber; })[]; type: "group"; } | { readonly type: "binary"; readonly op: "+" | "-" | "*" | "/" | "%" | "^"; readonly left: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { ...; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...;... | { op: "-"; operand: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "unary"; } | { expression: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "paren"; } | { args: readonly { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...[]; name: "abs" | "ceil" | "cos" | "exp" | "floor" | "log" | "round" | "sign" | "sin" | "sqrt" | "tan" | "pow" | "max" | "min" | "trunc"; type: "function"; }; op: "+" | "-" | "*" | "/" | "%" | "^"; right: { type: "number"; value: EncodedNumber; } | { description?: { style: DescriptionStyle; text: string; }; die: { args: readonly { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...[]; name: string; type: "die"; }; modifiers: readonly ({ comparePoint?: { operator: ...; value: ...; }; compound: boolean; name: "explode"; penetrate: boolean; type: "modifier"; } | { failure?: { operator: ...; value: ...; }; name: "target"; success: { operator: ... | ... | ... | ... | ... | ... | ...; value: EncodedNumber; }; type: "modifier"; } | { end: PoolEnd; name: "drop"; qty: EncodedNumber; type: "modifier"; } | { end: PoolEnd; name: "keep"; qty: EncodedNumber; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "re-roll"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "unique"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "critical-success"; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "critical-failure"; type: "modifier"; } | { direction: SortDirection; name: "sort"; type: "modifier"; } | { name: "max"; type: "modifier"; value: EncodedNumber; } | { name: "min"; type: "modifier"; value: EncodedNumber; })[]; qty: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "pool"; } | { description?: { style: DescriptionStyle; text: string; }; expressions: readonly { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...[]; modifiers: readonly ({ comparePoint?: { operator: ...; value: ...; }; compound: boolean; name: "explode"; penetrate: boolean; type: "modifier"; } | { failure?: { operator: ...; value: ...; }; name: "target"; success: { operator: ... | ... | ... | ... | ... | ... | ...; value: EncodedNumber; }; type: "modifier"; } | { end: PoolEnd; name: "drop"; qty: EncodedNumber; type: "modifier"; } | { end: PoolEnd; name: "keep"; qty: EncodedNumber; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "re-roll"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "unique"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "critical-success"; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "critical-failure"; type: "modifier"; } | { direction: SortDirection; name: "sort"; type: "modifier"; } | { name: "max"; type: "modifier"; value: EncodedNumber; } | { name: "min"; type: "modifier"; value: EncodedNumber; })[]; type: "group"; } | { readonly type: "binary"; readonly op: "+" | "-" | "*" | "/" | "%" | "^"; readonly left: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { ...; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...;... | { op: "-"; operand: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "unary"; } | { expression: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "paren"; } | { args: readonly { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...[]; name: "abs" | "ceil" | "cos" | "exp" | "floor" | "log" | "round" | "sign" | "sin" | "sqrt" | "tan" | "pow" | "max" | "min" | "trunc"; type: "function"; }; type: "binary"; }; right: { readonly type: "number"; readonly node: { readonly type: "number"; readonly value: EncodedNumber; }; readonly value: EncodedNumber; } | { readonly type: "pool"; ... 5 more ...; readonly rolls: readonly { ...; }[]; } | ... 4 more ... | { ...; }; type: "binary"; value: EncodedNumber; } | { node: { op: "-"; operand: { type: "number"; value: EncodedNumber; } | { description?: { style: DescriptionStyle; text: string; }; die: { args: readonly { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...[]; name: string; type: "die"; }; modifiers: readonly ({ comparePoint?: { operator: ...; value: ...; }; compound: boolean; name: "explode"; penetrate: boolean; type: "modifier"; } | { failure?: { operator: ...; value: ...; }; name: "target"; success: { operator: ... | ... | ... | ... | ... | ... | ...; value: EncodedNumber; }; type: "modifier"; } | { end: PoolEnd; name: "drop"; qty: EncodedNumber; type: "modifier"; } | { end: PoolEnd; name: "keep"; qty: EncodedNumber; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "re-roll"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "unique"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "critical-success"; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "critical-failure"; type: "modifier"; } | { direction: SortDirection; name: "sort"; type: "modifier"; } | { name: "max"; type: "modifier"; value: EncodedNumber; } | { name: "min"; type: "modifier"; value: EncodedNumber; })[]; qty: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "pool"; } | { description?: { style: DescriptionStyle; text: string; }; expressions: readonly { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...[]; modifiers: readonly ({ comparePoint?: { operator: ...; value: ...; }; compound: boolean; name: "explode"; penetrate: boolean; type: "modifier"; } | { failure?: { operator: ...; value: ...; }; name: "target"; success: { operator: ... | ... | ... | ... | ... | ... | ...; value: EncodedNumber; }; type: "modifier"; } | { end: PoolEnd; name: "drop"; qty: EncodedNumber; type: "modifier"; } | { end: PoolEnd; name: "keep"; qty: EncodedNumber; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "re-roll"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "unique"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "critical-success"; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "critical-failure"; type: "modifier"; } | { direction: SortDirection; name: "sort"; type: "modifier"; } | { name: "max"; type: "modifier"; value: EncodedNumber; } | { name: "min"; type: "modifier"; value: EncodedNumber; })[]; type: "group"; } | { left: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; op: "+" | "-" | "*" | "/" | "%" | "^"; right: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "binary"; } | { readonly type: "unary"; readonly op: "-"; readonly operand: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... | { expression: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "paren"; } | { args: readonly { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...[]; name: "abs" | "ceil" | "cos" | "exp" | "floor" | "log" | "round" | "sign" | "sin" | "sqrt" | "tan" | "pow" | "max" | "min" | "trunc"; type: "function"; }; type: "unary"; }; operand: { readonly type: "number"; readonly node: { readonly type: "number"; readonly value: EncodedNumber; }; readonly value: EncodedNumber; } | { readonly type: "pool"; ... 5 more ...; readonly rolls: readonly { ...; }[]; } | ... 4 more ... | { ...; }; type: "unary"; value: EncodedNumber; } | { inner: { readonly type: "number"; readonly node: { readonly type: "number"; readonly value: EncodedNumber; }; readonly value: EncodedNumber; } | { readonly type: "pool"; ... 5 more ...; readonly rolls: readonly { ...; }[]; } | ... 4 more ... | { ...; }; node: { expression: { type: "number"; value: EncodedNumber; } | { description?: { style: DescriptionStyle; text: string; }; die: { args: readonly { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...[]; name: string; type: "die"; }; modifiers: readonly ({ comparePoint?: { operator: ...; value: ...; }; compound: boolean; name: "explode"; penetrate: boolean; type: "modifier"; } | { failure?: { operator: ...; value: ...; }; name: "target"; success: { operator: ... | ... | ... | ... | ... | ... | ...; value: EncodedNumber; }; type: "modifier"; } | { end: PoolEnd; name: "drop"; qty: EncodedNumber; type: "modifier"; } | { end: PoolEnd; name: "keep"; qty: EncodedNumber; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "re-roll"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "unique"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "critical-success"; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "critical-failure"; type: "modifier"; } | { direction: SortDirection; name: "sort"; type: "modifier"; } | { name: "max"; type: "modifier"; value: EncodedNumber; } | { name: "min"; type: "modifier"; value: EncodedNumber; })[]; qty: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "pool"; } | { description?: { style: DescriptionStyle; text: string; }; expressions: readonly { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...[]; modifiers: readonly ({ comparePoint?: { operator: ...; value: ...; }; compound: boolean; name: "explode"; penetrate: boolean; type: "modifier"; } | { failure?: { operator: ...; value: ...; }; name: "target"; success: { operator: ... | ... | ... | ... | ... | ... | ...; value: EncodedNumber; }; type: "modifier"; } | { end: PoolEnd; name: "drop"; qty: EncodedNumber; type: "modifier"; } | { end: PoolEnd; name: "keep"; qty: EncodedNumber; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "re-roll"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "unique"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "critical-success"; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "critical-failure"; type: "modifier"; } | { direction: SortDirection; name: "sort"; type: "modifier"; } | { name: "max"; type: "modifier"; value: EncodedNumber; } | { name: "min"; type: "modifier"; value: EncodedNumber; })[]; type: "group"; } | { left: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; op: "+" | "-" | "*" | "/" | "%" | "^"; right: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "binary"; } | { op: "-"; operand: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "unary"; } | { readonly type: "paren"; readonly expression: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... ... | { args: readonly { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...[]; name: "abs" | "ceil" | "cos" | "exp" | "floor" | "log" | "round" | "sign" | "sin" | "sqrt" | "tan" | "pow" | "max" | "min" | "trunc"; type: "function"; }; type: "paren"; }; type: "paren"; value: EncodedNumber; } | { args: readonly { readonly type: "number"; readonly node: { readonly type: "number"; readonly value: EncodedNumber; }; readonly value: EncodedNumber; } | { readonly type: "pool"; ... 5 more ...; readonly rolls: readonly { ...; }[]; } | ... 4 more ... | { ...; }[]; node: { args: readonly ({ type: "number"; value: EncodedNumber; } | { description?: { style: DescriptionStyle; text: string; }; die: { args: readonly ({ readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?:...; name: string; type: "die"; }; modifiers: readonly ({ comparePoint?: ... | ...; compound: boolean; name: "explode"; penetrate: boolean; type: "modifier"; } | { failure?: ... | ...; name: "target"; success: { operator: ...; value: ...; }; type: "modifier"; } | { end: PoolEnd; name: "drop"; qty: EncodedNumber; type: "modifier"; } | { end: PoolEnd; name: "keep"; qty: EncodedNumber; type: "modifier"; } | { comparePoint?: ... | ...; name: "re-roll"; once: boolean; type: "modifier"; } | { comparePoint?: ... | ...; name: "unique"; once: boolean; type: "modifier"; } | { comparePoint?: ... | ...; name: "critical-success"; type: "modifier"; } | { comparePoint?: ... | ...; name: "critical-failure"; type: "modifier"; } | { direction: SortDirection; name: "sort"; type: "modifier"; } | { name: "max"; type: "modifier"; value: EncodedNumber; } | { name: "min"; type: "modifier"; value: EncodedNumber; })[]; qty: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "pool"; } | { description?: { style: DescriptionStyle; text: string; }; expressions: readonly ({ readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?:...; modifiers: readonly ({ comparePoint?: ... | ...; compound: boolean; name: "explode"; penetrate: boolean; type: "modifier"; } | { failure?: ... | ...; name: "target"; success: { operator: ...; value: ...; }; type: "modifier"; } | { end: PoolEnd; name: "drop"; qty: EncodedNumber; type: "modifier"; } | { end: PoolEnd; name: "keep"; qty: EncodedNumber; type: "modifier"; } | { comparePoint?: ... | ...; name: "re-roll"; once: boolean; type: "modifier"; } | { comparePoint?: ... | ...; name: "unique"; once: boolean; type: "modifier"; } | { comparePoint?: ... | ...; name: "critical-success"; type: "modifier"; } | { comparePoint?: ... | ...; name: "critical-failure"; type: "modifier"; } | { direction: SortDirection; name: "sort"; type: "modifier"; } | { name: "max"; type: "modifier"; value: EncodedNumber; } | { name: "min"; type: "modifier"; value: EncodedNumber; })[]; type: "group"; } | { left: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; op: "+" | "-" | "*" | "/" | "%" | "^"; right: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "binary"; } | { op: "-"; operand: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "unary"; } | { expression: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "paren"; } | { readonly type: "function"; readonly name: "abs" | "ceil" | "cos" | "exp" | "floor" | "log" | "round" | "sign" | "sin" | "sqrt" | "tan" | "pow" | "max" | "min" | "trunc"; readonly args: readonly ({ readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | ...)[]; })[]; name: "abs" | "ceil" | "cos" | "exp" | "floor" | "log" | "round" | "sign" | "sin" | "sqrt" | "tan" | "pow" | "max" | "min" | "trunc"; type: "function"; }; type: "function"; value: EncodedNumber; }

Union Members ​
Type Literal ​

{ node: { type: "number"; value: EncodedNumber; }; type: "number"; value: EncodedNumber; }


Type Literal ​

{ die: { average: EncodedNumber; faceCount: EncodedNumber; max: EncodedNumber; min: EncodedNumber; notation: string; }; dieArgs: readonly { readonly type: "number"; readonly node: { readonly type: "number"; readonly value: EncodedNumber; }; readonly value: EncodedNumber; } | { readonly type: "pool"; ... 5 more ...; readonly rolls: readonly { ...; }[]; } | ... 4 more ... | { ...; }[]; node: { description?: { style: DescriptionStyle; text: string; }; die: { args: readonly ({ type: "number"; value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... | { readonly type: "group"; readonly expressions: readonly ({ readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; })[]; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ... | { description?: { style: DescriptionStyle; text: string; }; expressions: readonly ({ readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?:...; modifiers: readonly ({ comparePoint?: ...; compound: ...; name: ...; penetrate: ...; type: ...; } | { failure?: ...; name: ...; success: ...; type: ...; } | { end: ...; name: ...; qty: ...; type: ...; } | { end: ...; name: ...; qty: ...; type: ...; } | { comparePoint?: ...; name: ...; once: ...; type: ...; } | { comparePoint?: ...; name: ...; once: ...; type: ...; } | { comparePoint?: ...; name: ...; type: ...; } | { comparePoint?: ...; name: ...; type: ...; } | { direction: ...; name: ...; type: ...; } | { name: ...; type: ...; value: ...; } | { name: ...; type: ...; value: ...; })[]; type: "group"; } | { left: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; op: "+" | "-" | "*" | "/" | "%" | "^"; right: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "binary"; } | { op: "-"; operand: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "unary"; } | { expression: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "paren"; } | { args: readonly ({ readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?:...; name: "abs" | "ceil" | "cos" | "exp" | "floor" | "log" | "round" | "sign" | "sin" | "sqrt" | "tan" | "pow" | "max" | "min" | "trunc"; type: "function"; })[]; name: string; type: "die"; }; modifiers: readonly ({ comparePoint?: { operator: "=" | "!=" | "<>" | "<" | ">" | "<=" | ">="; value: EncodedNumber; }; compound: boolean; name: "explode"; penetrate: boolean; type: "modifier"; } | { failure?: { operator: "=" | "!=" | "<>" | "<" | ">" | "<=" | ">="; value: EncodedNumber; }; name: "target"; success: { operator: "=" | "!=" | "<>" | "<" | ">" | "<=" | ">="; value: EncodedNumber; }; type: "modifier"; } | { end: PoolEnd; name: "drop"; qty: EncodedNumber; type: "modifier"; } | { end: PoolEnd; name: "keep"; qty: EncodedNumber; type: "modifier"; } | { comparePoint?: { operator: "=" | "!=" | "<>" | "<" | ">" | "<=" | ">="; value: EncodedNumber; }; name: "re-roll"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: "=" | "!=" | "<>" | "<" | ">" | "<=" | ">="; value: EncodedNumber; }; name: "unique"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: "=" | "!=" | "<>" | "<" | ">" | "<=" | ">="; value: EncodedNumber; }; name: "critical-success"; type: "modifier"; } | { comparePoint?: { operator: "=" | "!=" | "<>" | "<" | ">" | "<=" | ">="; value: EncodedNumber; }; name: "critical-failure"; type: "modifier"; } | { direction: SortDirection; name: "sort"; type: "modifier"; } | { name: "max"; type: "modifier"; value: EncodedNumber; } | { name: "min"; type: "modifier"; value: EncodedNumber; })[]; qty: { type: "number"; value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... | { readonly type: "group"; readonly expressions: readonly ({ readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; })[]; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ... | { description?: { style: DescriptionStyle; text: string; }; expressions: readonly { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...[]; modifiers: readonly ({ comparePoint?: { operator: ...; value: ...; }; compound: boolean; name: "explode"; penetrate: boolean; type: "modifier"; } | { failure?: { operator: ...; value: ...; }; name: "target"; success: { operator: ... | ... | ... | ... | ... | ... | ...; value: EncodedNumber; }; type: "modifier"; } | { end: PoolEnd; name: "drop"; qty: EncodedNumber; type: "modifier"; } | { end: PoolEnd; name: "keep"; qty: EncodedNumber; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "re-roll"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "unique"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "critical-success"; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "critical-failure"; type: "modifier"; } | { direction: SortDirection; name: "sort"; type: "modifier"; } | { name: "max"; type: "modifier"; value: EncodedNumber; } | { name: "min"; type: "modifier"; value: EncodedNumber; })[]; type: "group"; } | { left: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; op: "+" | "-" | "*" | "/" | "%" | "^"; right: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "binary"; } | { op: "-"; operand: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "unary"; } | { expression: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "paren"; } | { args: readonly { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...[]; name: "abs" | "ceil" | "cos" | "exp" | "floor" | "log" | "round" | "sign" | "sin" | "sqrt" | "tan" | "pow" | "max" | "min" | "trunc"; type: "function"; }; type: "pool"; }; qty: { readonly type: "number"; readonly node: { readonly type: "number"; readonly value: EncodedNumber; }; readonly value: EncodedNumber; } | { readonly type: "pool"; ... 5 more ...; readonly rolls: readonly { ...; }[]; } | ... 4 more ... | { ...; }; rolls: readonly object[]; type: "pool"; value: EncodedNumber; }

die ​

readonly die: object

The values of the die the factory created, for presenters.

die.average ​

readonly average: EncodedNumber

die.faceCount ​

readonly faceCount: EncodedNumber

die.max ​

readonly max: EncodedNumber

die.min ​

readonly min: EncodedNumber

die.notation ​

readonly notation: string

dieArgs ​

readonly dieArgs: readonly { readonly type: "number"; readonly node: { readonly type: "number"; readonly value: EncodedNumber; }; readonly value: EncodedNumber; } | { readonly type: "pool"; ... 5 more ...; readonly rolls: readonly { ...; }[]; } | ... 4 more ... | { ...; }[]

The evaluated node.die.args, e.g. the 6 in d6 or the (2+3) in d(2+3).

node ​

readonly node: object

node.description? ​

readonly optional description?: object

node.description.style ​

readonly style: DescriptionStyle

node.description.text ​

readonly text: string

node.die ​

readonly die: object

node.die.args ​

readonly args: readonly ({ type: "number"; value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... | { readonly type: "group"; readonly expressions: readonly ({ readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; })[]; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ... | { description?: { style: DescriptionStyle; text: string; }; expressions: readonly ({ readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?:...; modifiers: readonly ({ comparePoint?: ...; compound: ...; name: ...; penetrate: ...; type: ...; } | { failure?: ...; name: ...; success: ...; type: ...; } | { end: ...; name: ...; qty: ...; type: ...; } | { end: ...; name: ...; qty: ...; type: ...; } | { comparePoint?: ...; name: ...; once: ...; type: ...; } | { comparePoint?: ...; name: ...; once: ...; type: ...; } | { comparePoint?: ...; name: ...; type: ...; } | { comparePoint?: ...; name: ...; type: ...; } | { direction: ...; name: ...; type: ...; } | { name: ...; type: ...; value: ...; } | { name: ...; type: ...; value: ...; })[]; type: "group"; } | { left: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; op: "+" | "-" | "*" | "/" | "%" | "^"; right: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "binary"; } | { op: "-"; operand: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "unary"; } | { expression: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "paren"; } | { args: readonly ({ readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?:...; name: "abs" | "ceil" | "cos" | "exp" | "floor" | "log" | "round" | "sign" | "sin" | "sqrt" | "tan" | "pow" | "max" | "min" | "trunc"; type: "function"; })[]

node.die.name ​

readonly name: string

The registered name: a BuiltInDieName, or the name of a user-registered die.

node.die.type ​

readonly type: "die"

node.modifiers ​

readonly modifiers: readonly ({ comparePoint?: { operator: "=" | "!=" | "<>" | "<" | ">" | "<=" | ">="; value: EncodedNumber; }; compound: boolean; name: "explode"; penetrate: boolean; type: "modifier"; } | { failure?: { operator: "=" | "!=" | "<>" | "<" | ">" | "<=" | ">="; value: EncodedNumber; }; name: "target"; success: { operator: "=" | "!=" | "<>" | "<" | ">" | "<=" | ">="; value: EncodedNumber; }; type: "modifier"; } | { end: PoolEnd; name: "drop"; qty: EncodedNumber; type: "modifier"; } | { end: PoolEnd; name: "keep"; qty: EncodedNumber; type: "modifier"; } | { comparePoint?: { operator: "=" | "!=" | "<>" | "<" | ">" | "<=" | ">="; value: EncodedNumber; }; name: "re-roll"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: "=" | "!=" | "<>" | "<" | ">" | "<=" | ">="; value: EncodedNumber; }; name: "unique"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: "=" | "!=" | "<>" | "<" | ">" | "<=" | ">="; value: EncodedNumber; }; name: "critical-success"; type: "modifier"; } | { comparePoint?: { operator: "=" | "!=" | "<>" | "<" | ">" | "<=" | ">="; value: EncodedNumber; }; name: "critical-failure"; type: "modifier"; } | { direction: SortDirection; name: "sort"; type: "modifier"; } | { name: "max"; type: "modifier"; value: EncodedNumber; } | { name: "min"; type: "modifier"; value: EncodedNumber; })[]

In notation order after deduplication; handlers may execute in a different order.

node.qty ​

readonly qty: { type: "number"; value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... | { readonly type: "group"; readonly expressions: readonly ({ readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; })[]; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ... | { description?: { style: DescriptionStyle; text: string; }; expressions: readonly { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...[]; modifiers: readonly ({ comparePoint?: { operator: ...; value: ...; }; compound: boolean; name: "explode"; penetrate: boolean; type: "modifier"; } | { failure?: { operator: ...; value: ...; }; name: "target"; success: { operator: ... | ... | ... | ... | ... | ... | ...; value: EncodedNumber; }; type: "modifier"; } | { end: PoolEnd; name: "drop"; qty: EncodedNumber; type: "modifier"; } | { end: PoolEnd; name: "keep"; qty: EncodedNumber; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "re-roll"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "unique"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "critical-success"; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "critical-failure"; type: "modifier"; } | { direction: SortDirection; name: "sort"; type: "modifier"; } | { name: "max"; type: "modifier"; value: EncodedNumber; } | { name: "min"; type: "modifier"; value: EncodedNumber; })[]; type: "group"; } | { left: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; op: "+" | "-" | "*" | "/" | "%" | "^"; right: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "binary"; } | { op: "-"; operand: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "unary"; } | { expression: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "paren"; } | { args: readonly { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...[]; name: "abs" | "ceil" | "cos" | "exp" | "floor" | "log" | "round" | "sign" | "sin" | "sqrt" | "tan" | "pow" | "max" | "min" | "trunc"; type: "function"; }

The number of dice; a NumberNode for literal quantities.

node.type ​

readonly type: "pool"

qty ​

readonly qty: { readonly type: "number"; readonly node: { readonly type: "number"; readonly value: EncodedNumber; }; readonly value: EncodedNumber; } | { readonly type: "pool"; ... 5 more ...; readonly rolls: readonly { ...; }[]; } | ... 4 more ... | { ...; }

rolls ​

readonly rolls: readonly object[]

type ​

readonly type: "pool"

value ​

readonly value: EncodedNumber

The sum of calculationValue for the rolls that are useInTotal.


Type Literal ​

{ members: readonly object[]; node: { description?: { style: DescriptionStyle; text: string; }; expressions: readonly ({ type: "number"; value: EncodedNumber; } | { description?: { style: DescriptionStyle; text: string; }; die: { args: readonly ({ readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?:...; name: string; type: "die"; }; modifiers: readonly ({ comparePoint?: ... | ...; compound: boolean; name: "explode"; penetrate: boolean; type: "modifier"; } | { failure?: ... | ...; name: "target"; success: { operator: ...; value: ...; }; type: "modifier"; } | { end: PoolEnd; name: "drop"; qty: EncodedNumber; type: "modifier"; } | { end: PoolEnd; name: "keep"; qty: EncodedNumber; type: "modifier"; } | { comparePoint?: ... | ...; name: "re-roll"; once: boolean; type: "modifier"; } | { comparePoint?: ... | ...; name: "unique"; once: boolean; type: "modifier"; } | { comparePoint?: ... | ...; name: "critical-success"; type: "modifier"; } | { comparePoint?: ... | ...; name: "critical-failure"; type: "modifier"; } | { direction: SortDirection; name: "sort"; type: "modifier"; } | { name: "max"; type: "modifier"; value: EncodedNumber; } | { name: "min"; type: "modifier"; value: EncodedNumber; })[]; qty: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "pool"; } | { readonly type: "group"; readonly expressions: readonly ({ readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... ... | { left: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; op: "+" | "-" | "*" | "/" | "%" | "^"; right: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "binary"; } | { op: "-"; operand: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "unary"; } | { expression: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "paren"; } | { args: readonly ({ readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?:...; name: "abs" | "ceil" | "cos" | "exp" | "floor" | "log" | "round" | "sign" | "sin" | "sqrt" | "tan" | "pow" | "max" | "min" | "trunc"; type: "function"; })[]; modifiers: readonly ({ comparePoint?: { operator: "=" | "!=" | "<>" | "<" | ">" | "<=" | ">="; value: EncodedNumber; }; compound: boolean; name: "explode"; penetrate: boolean; type: "modifier"; } | { failure?: { operator: "=" | "!=" | "<>" | "<" | ">" | "<=" | ">="; value: EncodedNumber; }; name: "target"; success: { operator: "=" | "!=" | "<>" | "<" | ">" | "<=" | ">="; value: EncodedNumber; }; type: "modifier"; } | { end: PoolEnd; name: "drop"; qty: EncodedNumber; type: "modifier"; } | { end: PoolEnd; name: "keep"; qty: EncodedNumber; type: "modifier"; } | { comparePoint?: { operator: "=" | "!=" | "<>" | "<" | ">" | "<=" | ">="; value: EncodedNumber; }; name: "re-roll"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: "=" | "!=" | "<>" | "<" | ">" | "<=" | ">="; value: EncodedNumber; }; name: "unique"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: "=" | "!=" | "<>" | "<" | ">" | "<=" | ">="; value: EncodedNumber; }; name: "critical-success"; type: "modifier"; } | { comparePoint?: { operator: "=" | "!=" | "<>" | "<" | ">" | "<=" | ">="; value: EncodedNumber; }; name: "critical-failure"; type: "modifier"; } | { direction: SortDirection; name: "sort"; type: "modifier"; } | { name: "max"; type: "modifier"; value: EncodedNumber; } | { name: "min"; type: "modifier"; value: EncodedNumber; })[]; type: "group"; }; type: "group"; value: EncodedNumber; }

members ​

readonly members: readonly object[]

node ​

readonly node: object

node.description? ​

readonly optional description?: object

node.description.style ​

readonly style: DescriptionStyle

node.description.text ​

readonly text: string

node.expressions ​

readonly expressions: readonly ({ type: "number"; value: EncodedNumber; } | { description?: { style: DescriptionStyle; text: string; }; die: { args: readonly ({ readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?:...; name: string; type: "die"; }; modifiers: readonly ({ comparePoint?: ... | ...; compound: boolean; name: "explode"; penetrate: boolean; type: "modifier"; } | { failure?: ... | ...; name: "target"; success: { operator: ...; value: ...; }; type: "modifier"; } | { end: PoolEnd; name: "drop"; qty: EncodedNumber; type: "modifier"; } | { end: PoolEnd; name: "keep"; qty: EncodedNumber; type: "modifier"; } | { comparePoint?: ... | ...; name: "re-roll"; once: boolean; type: "modifier"; } | { comparePoint?: ... | ...; name: "unique"; once: boolean; type: "modifier"; } | { comparePoint?: ... | ...; name: "critical-success"; type: "modifier"; } | { comparePoint?: ... | ...; name: "critical-failure"; type: "modifier"; } | { direction: SortDirection; name: "sort"; type: "modifier"; } | { name: "max"; type: "modifier"; value: EncodedNumber; } | { name: "min"; type: "modifier"; value: EncodedNumber; })[]; qty: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "pool"; } | { readonly type: "group"; readonly expressions: readonly ({ readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... ... | { left: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; op: "+" | "-" | "*" | "/" | "%" | "^"; right: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "binary"; } | { op: "-"; operand: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "unary"; } | { expression: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "paren"; } | { args: readonly ({ readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?:...; name: "abs" | "ceil" | "cos" | "exp" | "floor" | "log" | "round" | "sign" | "sin" | "sqrt" | "tan" | "pow" | "max" | "min" | "trunc"; type: "function"; })[]

node.modifiers ​

readonly modifiers: readonly ({ comparePoint?: { operator: "=" | "!=" | "<>" | "<" | ">" | "<=" | ">="; value: EncodedNumber; }; compound: boolean; name: "explode"; penetrate: boolean; type: "modifier"; } | { failure?: { operator: "=" | "!=" | "<>" | "<" | ">" | "<=" | ">="; value: EncodedNumber; }; name: "target"; success: { operator: "=" | "!=" | "<>" | "<" | ">" | "<=" | ">="; value: EncodedNumber; }; type: "modifier"; } | { end: PoolEnd; name: "drop"; qty: EncodedNumber; type: "modifier"; } | { end: PoolEnd; name: "keep"; qty: EncodedNumber; type: "modifier"; } | { comparePoint?: { operator: "=" | "!=" | "<>" | "<" | ">" | "<=" | ">="; value: EncodedNumber; }; name: "re-roll"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: "=" | "!=" | "<>" | "<" | ">" | "<=" | ">="; value: EncodedNumber; }; name: "unique"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: "=" | "!=" | "<>" | "<" | ">" | "<=" | ">="; value: EncodedNumber; }; name: "critical-success"; type: "modifier"; } | { comparePoint?: { operator: "=" | "!=" | "<>" | "<" | ">" | "<=" | ">="; value: EncodedNumber; }; name: "critical-failure"; type: "modifier"; } | { direction: SortDirection; name: "sort"; type: "modifier"; } | { name: "max"; type: "modifier"; value: EncodedNumber; } | { name: "min"; type: "modifier"; value: EncodedNumber; })[]

node.type ​

readonly type: "group"

type ​

readonly type: "group"

value ​

readonly value: EncodedNumber

The sum of calculationValue for members included in the total.


Type Literal ​

{ left: { readonly type: "number"; readonly node: { readonly type: "number"; readonly value: EncodedNumber; }; readonly value: EncodedNumber; } | { readonly type: "pool"; ... 5 more ...; readonly rolls: readonly { ...; }[]; } | ... 4 more ... | { ...; }; node: { left: { type: "number"; value: EncodedNumber; } | { description?: { style: DescriptionStyle; text: string; }; die: { args: readonly { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...[]; name: string; type: "die"; }; modifiers: readonly ({ comparePoint?: { operator: ...; value: ...; }; compound: boolean; name: "explode"; penetrate: boolean; type: "modifier"; } | { failure?: { operator: ...; value: ...; }; name: "target"; success: { operator: ... | ... | ... | ... | ... | ... | ...; value: EncodedNumber; }; type: "modifier"; } | { end: PoolEnd; name: "drop"; qty: EncodedNumber; type: "modifier"; } | { end: PoolEnd; name: "keep"; qty: EncodedNumber; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "re-roll"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "unique"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "critical-success"; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "critical-failure"; type: "modifier"; } | { direction: SortDirection; name: "sort"; type: "modifier"; } | { name: "max"; type: "modifier"; value: EncodedNumber; } | { name: "min"; type: "modifier"; value: EncodedNumber; })[]; qty: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "pool"; } | { description?: { style: DescriptionStyle; text: string; }; expressions: readonly { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...[]; modifiers: readonly ({ comparePoint?: { operator: ...; value: ...; }; compound: boolean; name: "explode"; penetrate: boolean; type: "modifier"; } | { failure?: { operator: ...; value: ...; }; name: "target"; success: { operator: ... | ... | ... | ... | ... | ... | ...; value: EncodedNumber; }; type: "modifier"; } | { end: PoolEnd; name: "drop"; qty: EncodedNumber; type: "modifier"; } | { end: PoolEnd; name: "keep"; qty: EncodedNumber; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "re-roll"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "unique"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "critical-success"; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "critical-failure"; type: "modifier"; } | { direction: SortDirection; name: "sort"; type: "modifier"; } | { name: "max"; type: "modifier"; value: EncodedNumber; } | { name: "min"; type: "modifier"; value: EncodedNumber; })[]; type: "group"; } | { readonly type: "binary"; readonly op: "+" | "-" | "*" | "/" | "%" | "^"; readonly left: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { ...; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...;... | { op: "-"; operand: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "unary"; } | { expression: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "paren"; } | { args: readonly { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...[]; name: "abs" | "ceil" | "cos" | "exp" | "floor" | "log" | "round" | "sign" | "sin" | "sqrt" | "tan" | "pow" | "max" | "min" | "trunc"; type: "function"; }; op: "+" | "-" | "*" | "/" | "%" | "^"; right: { type: "number"; value: EncodedNumber; } | { description?: { style: DescriptionStyle; text: string; }; die: { args: readonly { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...[]; name: string; type: "die"; }; modifiers: readonly ({ comparePoint?: { operator: ...; value: ...; }; compound: boolean; name: "explode"; penetrate: boolean; type: "modifier"; } | { failure?: { operator: ...; value: ...; }; name: "target"; success: { operator: ... | ... | ... | ... | ... | ... | ...; value: EncodedNumber; }; type: "modifier"; } | { end: PoolEnd; name: "drop"; qty: EncodedNumber; type: "modifier"; } | { end: PoolEnd; name: "keep"; qty: EncodedNumber; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "re-roll"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "unique"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "critical-success"; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "critical-failure"; type: "modifier"; } | { direction: SortDirection; name: "sort"; type: "modifier"; } | { name: "max"; type: "modifier"; value: EncodedNumber; } | { name: "min"; type: "modifier"; value: EncodedNumber; })[]; qty: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "pool"; } | { description?: { style: DescriptionStyle; text: string; }; expressions: readonly { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...[]; modifiers: readonly ({ comparePoint?: { operator: ...; value: ...; }; compound: boolean; name: "explode"; penetrate: boolean; type: "modifier"; } | { failure?: { operator: ...; value: ...; }; name: "target"; success: { operator: ... | ... | ... | ... | ... | ... | ...; value: EncodedNumber; }; type: "modifier"; } | { end: PoolEnd; name: "drop"; qty: EncodedNumber; type: "modifier"; } | { end: PoolEnd; name: "keep"; qty: EncodedNumber; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "re-roll"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "unique"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "critical-success"; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "critical-failure"; type: "modifier"; } | { direction: SortDirection; name: "sort"; type: "modifier"; } | { name: "max"; type: "modifier"; value: EncodedNumber; } | { name: "min"; type: "modifier"; value: EncodedNumber; })[]; type: "group"; } | { readonly type: "binary"; readonly op: "+" | "-" | "*" | "/" | "%" | "^"; readonly left: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { ...; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...;... | { op: "-"; operand: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "unary"; } | { expression: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "paren"; } | { args: readonly { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...[]; name: "abs" | "ceil" | "cos" | "exp" | "floor" | "log" | "round" | "sign" | "sin" | "sqrt" | "tan" | "pow" | "max" | "min" | "trunc"; type: "function"; }; type: "binary"; }; right: { readonly type: "number"; readonly node: { readonly type: "number"; readonly value: EncodedNumber; }; readonly value: EncodedNumber; } | { readonly type: "pool"; ... 5 more ...; readonly rolls: readonly { ...; }[]; } | ... 4 more ... | { ...; }; type: "binary"; value: EncodedNumber; }


Type Literal ​

{ node: { op: "-"; operand: { type: "number"; value: EncodedNumber; } | { description?: { style: DescriptionStyle; text: string; }; die: { args: readonly { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...[]; name: string; type: "die"; }; modifiers: readonly ({ comparePoint?: { operator: ...; value: ...; }; compound: boolean; name: "explode"; penetrate: boolean; type: "modifier"; } | { failure?: { operator: ...; value: ...; }; name: "target"; success: { operator: ... | ... | ... | ... | ... | ... | ...; value: EncodedNumber; }; type: "modifier"; } | { end: PoolEnd; name: "drop"; qty: EncodedNumber; type: "modifier"; } | { end: PoolEnd; name: "keep"; qty: EncodedNumber; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "re-roll"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "unique"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "critical-success"; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "critical-failure"; type: "modifier"; } | { direction: SortDirection; name: "sort"; type: "modifier"; } | { name: "max"; type: "modifier"; value: EncodedNumber; } | { name: "min"; type: "modifier"; value: EncodedNumber; })[]; qty: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "pool"; } | { description?: { style: DescriptionStyle; text: string; }; expressions: readonly { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...[]; modifiers: readonly ({ comparePoint?: { operator: ...; value: ...; }; compound: boolean; name: "explode"; penetrate: boolean; type: "modifier"; } | { failure?: { operator: ...; value: ...; }; name: "target"; success: { operator: ... | ... | ... | ... | ... | ... | ...; value: EncodedNumber; }; type: "modifier"; } | { end: PoolEnd; name: "drop"; qty: EncodedNumber; type: "modifier"; } | { end: PoolEnd; name: "keep"; qty: EncodedNumber; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "re-roll"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "unique"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "critical-success"; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "critical-failure"; type: "modifier"; } | { direction: SortDirection; name: "sort"; type: "modifier"; } | { name: "max"; type: "modifier"; value: EncodedNumber; } | { name: "min"; type: "modifier"; value: EncodedNumber; })[]; type: "group"; } | { left: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; op: "+" | "-" | "*" | "/" | "%" | "^"; right: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "binary"; } | { readonly type: "unary"; readonly op: "-"; readonly operand: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... | { expression: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "paren"; } | { args: readonly { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...[]; name: "abs" | "ceil" | "cos" | "exp" | "floor" | "log" | "round" | "sign" | "sin" | "sqrt" | "tan" | "pow" | "max" | "min" | "trunc"; type: "function"; }; type: "unary"; }; operand: { readonly type: "number"; readonly node: { readonly type: "number"; readonly value: EncodedNumber; }; readonly value: EncodedNumber; } | { readonly type: "pool"; ... 5 more ...; readonly rolls: readonly { ...; }[]; } | ... 4 more ... | { ...; }; type: "unary"; value: EncodedNumber; }


Type Literal ​

{ inner: { readonly type: "number"; readonly node: { readonly type: "number"; readonly value: EncodedNumber; }; readonly value: EncodedNumber; } | { readonly type: "pool"; ... 5 more ...; readonly rolls: readonly { ...; }[]; } | ... 4 more ... | { ...; }; node: { expression: { type: "number"; value: EncodedNumber; } | { description?: { style: DescriptionStyle; text: string; }; die: { args: readonly { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...[]; name: string; type: "die"; }; modifiers: readonly ({ comparePoint?: { operator: ...; value: ...; }; compound: boolean; name: "explode"; penetrate: boolean; type: "modifier"; } | { failure?: { operator: ...; value: ...; }; name: "target"; success: { operator: ... | ... | ... | ... | ... | ... | ...; value: EncodedNumber; }; type: "modifier"; } | { end: PoolEnd; name: "drop"; qty: EncodedNumber; type: "modifier"; } | { end: PoolEnd; name: "keep"; qty: EncodedNumber; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "re-roll"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "unique"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "critical-success"; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "critical-failure"; type: "modifier"; } | { direction: SortDirection; name: "sort"; type: "modifier"; } | { name: "max"; type: "modifier"; value: EncodedNumber; } | { name: "min"; type: "modifier"; value: EncodedNumber; })[]; qty: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "pool"; } | { description?: { style: DescriptionStyle; text: string; }; expressions: readonly { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...[]; modifiers: readonly ({ comparePoint?: { operator: ...; value: ...; }; compound: boolean; name: "explode"; penetrate: boolean; type: "modifier"; } | { failure?: { operator: ...; value: ...; }; name: "target"; success: { operator: ... | ... | ... | ... | ... | ... | ...; value: EncodedNumber; }; type: "modifier"; } | { end: PoolEnd; name: "drop"; qty: EncodedNumber; type: "modifier"; } | { end: PoolEnd; name: "keep"; qty: EncodedNumber; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "re-roll"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "unique"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "critical-success"; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "critical-failure"; type: "modifier"; } | { direction: SortDirection; name: "sort"; type: "modifier"; } | { name: "max"; type: "modifier"; value: EncodedNumber; } | { name: "min"; type: "modifier"; value: EncodedNumber; })[]; type: "group"; } | { left: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; op: "+" | "-" | "*" | "/" | "%" | "^"; right: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "binary"; } | { op: "-"; operand: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "unary"; } | { readonly type: "paren"; readonly expression: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... ... | { args: readonly { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...[]; name: "abs" | "ceil" | "cos" | "exp" | "floor" | "log" | "round" | "sign" | "sin" | "sqrt" | "tan" | "pow" | "max" | "min" | "trunc"; type: "function"; }; type: "paren"; }; type: "paren"; value: EncodedNumber; }


Type Literal ​

{ args: readonly { readonly type: "number"; readonly node: { readonly type: "number"; readonly value: EncodedNumber; }; readonly value: EncodedNumber; } | { readonly type: "pool"; ... 5 more ...; readonly rolls: readonly { ...; }[]; } | ... 4 more ... | { ...; }[]; node: { args: readonly ({ type: "number"; value: EncodedNumber; } | { description?: { style: DescriptionStyle; text: string; }; die: { args: readonly ({ readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?:...; name: string; type: "die"; }; modifiers: readonly ({ comparePoint?: ... | ...; compound: boolean; name: "explode"; penetrate: boolean; type: "modifier"; } | { failure?: ... | ...; name: "target"; success: { operator: ...; value: ...; }; type: "modifier"; } | { end: PoolEnd; name: "drop"; qty: EncodedNumber; type: "modifier"; } | { end: PoolEnd; name: "keep"; qty: EncodedNumber; type: "modifier"; } | { comparePoint?: ... | ...; name: "re-roll"; once: boolean; type: "modifier"; } | { comparePoint?: ... | ...; name: "unique"; once: boolean; type: "modifier"; } | { comparePoint?: ... | ...; name: "critical-success"; type: "modifier"; } | { comparePoint?: ... | ...; name: "critical-failure"; type: "modifier"; } | { direction: SortDirection; name: "sort"; type: "modifier"; } | { name: "max"; type: "modifier"; value: EncodedNumber; } | { name: "min"; type: "modifier"; value: EncodedNumber; })[]; qty: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "pool"; } | { description?: { style: DescriptionStyle; text: string; }; expressions: readonly ({ readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?:...; modifiers: readonly ({ comparePoint?: ... | ...; compound: boolean; name: "explode"; penetrate: boolean; type: "modifier"; } | { failure?: ... | ...; name: "target"; success: { operator: ...; value: ...; }; type: "modifier"; } | { end: PoolEnd; name: "drop"; qty: EncodedNumber; type: "modifier"; } | { end: PoolEnd; name: "keep"; qty: EncodedNumber; type: "modifier"; } | { comparePoint?: ... | ...; name: "re-roll"; once: boolean; type: "modifier"; } | { comparePoint?: ... | ...; name: "unique"; once: boolean; type: "modifier"; } | { comparePoint?: ... | ...; name: "critical-success"; type: "modifier"; } | { comparePoint?: ... | ...; name: "critical-failure"; type: "modifier"; } | { direction: SortDirection; name: "sort"; type: "modifier"; } | { name: "max"; type: "modifier"; value: EncodedNumber; } | { name: "min"; type: "modifier"; value: EncodedNumber; })[]; type: "group"; } | { left: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; op: "+" | "-" | "*" | "/" | "%" | "^"; right: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "binary"; } | { op: "-"; operand: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "unary"; } | { expression: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "paren"; } | { readonly type: "function"; readonly name: "abs" | "ceil" | "cos" | "exp" | "floor" | "log" | "round" | "sign" | "sin" | "sqrt" | "tan" | "pow" | "max" | "min" | "trunc"; readonly args: readonly ({ readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | ...)[]; })[]; name: "abs" | "ceil" | "cos" | "exp" | "floor" | "log" | "round" | "sign" | "sin" | "sqrt" | "tan" | "pow" | "max" | "min" | "trunc"; type: "function"; }; type: "function"; value: EncodedNumber; }

total ​

readonly total: EncodedNumber

type ​

readonly type: "roll"

version ​

readonly version: 1

Call Signature ​

export(format?): string

Defined in: src/Roll.ts:208

Exports as JSON (default), a JSON-safe object, or UTF-8 base64 JSON. Evaluates uncached min/max totals.

Parameters ​
format? ​

"json" | "base64"

Returns ​

string

Call Signature ​

export(format): string | { averageTotal: EncodedNumber; maxTotal: EncodedNumber; minTotal: EncodedNumber; notation: string; result: { node: { type: "number"; value: EncodedNumber; }; type: "number"; value: EncodedNumber; } | { die: { average: EncodedNumber; faceCount: EncodedNumber; max: EncodedNumber; min: EncodedNumber; notation: string; }; dieArgs: readonly { readonly type: "number"; readonly node: { readonly type: "number"; readonly value: EncodedNumber; }; readonly value: EncodedNumber; } | { readonly type: "pool"; ... 5 more ...; readonly rolls: readonly { ...; }[]; } | ... 4 more ... | { ...; }[]; node: { description?: { style: DescriptionStyle; text: string; }; die: { args: readonly ({ type: "number"; value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... | { readonly type: "group"; readonly expressions: readonly ({ readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; })[]; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ... | { description?: { style: ...; text: ...; }; expressions: readonly ({ readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?:...; modifiers: readonly (... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ...)[]; type: "group"; } | { left: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; op: "+" | "-" | "*" | "/" | "%" | "^"; right: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "binary"; } | { op: "-"; operand: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "unary"; } | { expression: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "paren"; } | { args: readonly ({ readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?:...; name: "abs" | "ceil" | "cos" | "exp" | "floor" | "log" | "round" | "sign" | "sin" | "sqrt" | "tan" | "pow" | "max" | "min" | "trunc"; type: "function"; })[]; name: string; type: "die"; }; modifiers: readonly ({ comparePoint?: { operator: ... | ... | ... | ... | ... | ... | ...; value: EncodedNumber; }; compound: boolean; name: "explode"; penetrate: boolean; type: "modifier"; } | { failure?: { operator: ... | ... | ... | ... | ... | ... | ...; value: EncodedNumber; }; name: "target"; success: { operator: "=" | "!=" | "<>" | "<" | ">" | "<=" | ">="; value: EncodedNumber; }; type: "modifier"; } | { end: PoolEnd; name: "drop"; qty: EncodedNumber; type: "modifier"; } | { end: PoolEnd; name: "keep"; qty: EncodedNumber; type: "modifier"; } | { comparePoint?: { operator: ... | ... | ... | ... | ... | ... | ...; value: EncodedNumber; }; name: "re-roll"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: ... | ... | ... | ... | ... | ... | ...; value: EncodedNumber; }; name: "unique"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: ... | ... | ... | ... | ... | ... | ...; value: EncodedNumber; }; name: "critical-success"; type: "modifier"; } | { comparePoint?: { operator: ... | ... | ... | ... | ... | ... | ...; value: EncodedNumber; }; name: "critical-failure"; type: "modifier"; } | { direction: SortDirection; name: "sort"; type: "modifier"; } | { name: "max"; type: "modifier"; value: EncodedNumber; } | { name: "min"; type: "modifier"; value: EncodedNumber; })[]; qty: { type: "number"; value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... | { readonly type: "group"; readonly expressions: readonly ({ readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; })[]; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ... | { description?: { style: DescriptionStyle; text: string; }; expressions: readonly { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...[]; modifiers: readonly ({ comparePoint?: ... | ...; compound: boolean; name: "explode"; penetrate: boolean; type: "modifier"; } | { failure?: ... | ...; name: "target"; success: { operator: ...; value: ...; }; type: "modifier"; } | { end: PoolEnd; name: "drop"; qty: EncodedNumber; type: "modifier"; } | { end: PoolEnd; name: "keep"; qty: EncodedNumber; type: "modifier"; } | { comparePoint?: ... | ...; name: "re-roll"; once: boolean; type: "modifier"; } | { comparePoint?: ... | ...; name: "unique"; once: boolean; type: "modifier"; } | { comparePoint?: ... | ...; name: "critical-success"; type: "modifier"; } | { comparePoint?: ... | ...; name: "critical-failure"; type: "modifier"; } | { direction: SortDirection; name: "sort"; type: "modifier"; } | { name: "max"; type: "modifier"; value: EncodedNumber; } | { name: "min"; type: "modifier"; value: EncodedNumber; })[]; type: "group"; } | { left: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; op: "+" | "-" | "*" | "/" | "%" | "^"; right: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "binary"; } | { op: "-"; operand: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "unary"; } | { expression: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "paren"; } | { args: readonly { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...[]; name: "abs" | "ceil" | "cos" | "exp" | "floor" | "log" | "round" | "sign" | "sin" | "sqrt" | "tan" | "pow" | "max" | "min" | "trunc"; type: "function"; }; type: "pool"; }; qty: { readonly type: "number"; readonly node: { readonly type: "number"; readonly value: EncodedNumber; }; readonly value: EncodedNumber; } | { readonly type: "pool"; ... 5 more ...; readonly rolls: readonly { ...; }[]; } | ... 4 more ... | { ...; }; rolls: readonly object[]; type: "pool"; value: EncodedNumber; } | { members: readonly object[]; node: { description?: { style: DescriptionStyle; text: string; }; expressions: readonly ({ type: "number"; value: EncodedNumber; } | { description?: { style: DescriptionStyle; text: string; }; die: { args: readonly ({ readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?:...; name: string; type: "die"; }; modifiers: readonly ({ comparePoint?: ...; compound: ...; name: ...; penetrate: ...; type: ...; } | { failure?: ...; name: ...; success: ...; type: ...; } | { end: ...; name: ...; qty: ...; type: ...; } | { end: ...; name: ...; qty: ...; type: ...; } | { comparePoint?: ...; name: ...; once: ...; type: ...; } | { comparePoint?: ...; name: ...; once: ...; type: ...; } | { comparePoint?: ...; name: ...; type: ...; } | { comparePoint?: ...; name: ...; type: ...; } | { direction: ...; name: ...; type: ...; } | { name: ...; type: ...; value: ...; } | { name: ...; type: ...; value: ...; })[]; qty: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "pool"; } | { readonly type: "group"; readonly expressions: readonly ({ readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... ... | { left: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; op: "+" | "-" | "*" | "/" | "%" | "^"; right: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "binary"; } | { op: "-"; operand: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "unary"; } | { expression: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "paren"; } | { args: readonly ({ readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?:...; name: "abs" | "ceil" | "cos" | "exp" | "floor" | "log" | "round" | "sign" | "sin" | "sqrt" | "tan" | "pow" | "max" | "min" | "trunc"; type: "function"; })[]; modifiers: readonly ({ comparePoint?: { operator: ... | ... | ... | ... | ... | ... | ...; value: EncodedNumber; }; compound: boolean; name: "explode"; penetrate: boolean; type: "modifier"; } | { failure?: { operator: ... | ... | ... | ... | ... | ... | ...; value: EncodedNumber; }; name: "target"; success: { operator: "=" | "!=" | "<>" | "<" | ">" | "<=" | ">="; value: EncodedNumber; }; type: "modifier"; } | { end: PoolEnd; name: "drop"; qty: EncodedNumber; type: "modifier"; } | { end: PoolEnd; name: "keep"; qty: EncodedNumber; type: "modifier"; } | { comparePoint?: { operator: ... | ... | ... | ... | ... | ... | ...; value: EncodedNumber; }; name: "re-roll"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: ... | ... | ... | ... | ... | ... | ...; value: EncodedNumber; }; name: "unique"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: ... | ... | ... | ... | ... | ... | ...; value: EncodedNumber; }; name: "critical-success"; type: "modifier"; } | { comparePoint?: { operator: ... | ... | ... | ... | ... | ... | ...; value: EncodedNumber; }; name: "critical-failure"; type: "modifier"; } | { direction: SortDirection; name: "sort"; type: "modifier"; } | { name: "max"; type: "modifier"; value: EncodedNumber; } | { name: "min"; type: "modifier"; value: EncodedNumber; })[]; type: "group"; }; type: "group"; value: EncodedNumber; } | { left: { readonly type: "number"; readonly node: { readonly type: "number"; readonly value: EncodedNumber; }; readonly value: EncodedNumber; } | { readonly type: "pool"; ... 5 more ...; readonly rolls: readonly { ...; }[]; } | ... 4 more ... | { ...; }; node: { left: { type: "number"; value: EncodedNumber; } | { description?: { style: DescriptionStyle; text: string; }; die: { args: readonly { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...[]; name: string; type: "die"; }; modifiers: readonly ({ comparePoint?: ... | ...; compound: boolean; name: "explode"; penetrate: boolean; type: "modifier"; } | { failure?: ... | ...; name: "target"; success: { operator: ...; value: ...; }; type: "modifier"; } | { end: PoolEnd; name: "drop"; qty: EncodedNumber; type: "modifier"; } | { end: PoolEnd; name: "keep"; qty: EncodedNumber; type: "modifier"; } | { comparePoint?: ... | ...; name: "re-roll"; once: boolean; type: "modifier"; } | { comparePoint?: ... | ...; name: "unique"; once: boolean; type: "modifier"; } | { comparePoint?: ... | ...; name: "critical-success"; type: "modifier"; } | { comparePoint?: ... | ...; name: "critical-failure"; type: "modifier"; } | { direction: SortDirection; name: "sort"; type: "modifier"; } | { name: "max"; type: "modifier"; value: EncodedNumber; } | { name: "min"; type: "modifier"; value: EncodedNumber; })[]; qty: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "pool"; } | { description?: { style: DescriptionStyle; text: string; }; expressions: readonly { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...[]; modifiers: readonly ({ comparePoint?: ... | ...; compound: boolean; name: "explode"; penetrate: boolean; type: "modifier"; } | { failure?: ... | ...; name: "target"; success: { operator: ...; value: ...; }; type: "modifier"; } | { end: PoolEnd; name: "drop"; qty: EncodedNumber; type: "modifier"; } | { end: PoolEnd; name: "keep"; qty: EncodedNumber; type: "modifier"; } | { comparePoint?: ... | ...; name: "re-roll"; once: boolean; type: "modifier"; } | { comparePoint?: ... | ...; name: "unique"; once: boolean; type: "modifier"; } | { comparePoint?: ... | ...; name: "critical-success"; type: "modifier"; } | { comparePoint?: ... | ...; name: "critical-failure"; type: "modifier"; } | { direction: SortDirection; name: "sort"; type: "modifier"; } | { name: "max"; type: "modifier"; value: EncodedNumber; } | { name: "min"; type: "modifier"; value: EncodedNumber; })[]; type: "group"; } | { readonly type: "binary"; readonly op: "+" | "-" | "*" | "/" | "%" | "^"; readonly left: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { ...; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...;... | { op: "-"; operand: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "unary"; } | { expression: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "paren"; } | { args: readonly { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...[]; name: "abs" | "ceil" | "cos" | "exp" | "floor" | "log" | "round" | "sign" | "sin" | "sqrt" | "tan" | "pow" | "max" | "min" | "trunc"; type: "function"; }; op: "+" | "-" | "*" | "/" | "%" | "^"; right: { type: "number"; value: EncodedNumber; } | { description?: { style: DescriptionStyle; text: string; }; die: { args: readonly { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...[]; name: string; type: "die"; }; modifiers: readonly ({ comparePoint?: ... | ...; compound: boolean; name: "explode"; penetrate: boolean; type: "modifier"; } | { failure?: ... | ...; name: "target"; success: { operator: ...; value: ...; }; type: "modifier"; } | { end: PoolEnd; name: "drop"; qty: EncodedNumber; type: "modifier"; } | { end: PoolEnd; name: "keep"; qty: EncodedNumber; type: "modifier"; } | { comparePoint?: ... | ...; name: "re-roll"; once: boolean; type: "modifier"; } | { comparePoint?: ... | ...; name: "unique"; once: boolean; type: "modifier"; } | { comparePoint?: ... | ...; name: "critical-success"; type: "modifier"; } | { comparePoint?: ... | ...; name: "critical-failure"; type: "modifier"; } | { direction: SortDirection; name: "sort"; type: "modifier"; } | { name: "max"; type: "modifier"; value: EncodedNumber; } | { name: "min"; type: "modifier"; value: EncodedNumber; })[]; qty: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "pool"; } | { description?: { style: DescriptionStyle; text: string; }; expressions: readonly { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...[]; modifiers: readonly ({ comparePoint?: ... | ...; compound: boolean; name: "explode"; penetrate: boolean; type: "modifier"; } | { failure?: ... | ...; name: "target"; success: { operator: ...; value: ...; }; type: "modifier"; } | { end: PoolEnd; name: "drop"; qty: EncodedNumber; type: "modifier"; } | { end: PoolEnd; name: "keep"; qty: EncodedNumber; type: "modifier"; } | { comparePoint?: ... | ...; name: "re-roll"; once: boolean; type: "modifier"; } | { comparePoint?: ... | ...; name: "unique"; once: boolean; type: "modifier"; } | { comparePoint?: ... | ...; name: "critical-success"; type: "modifier"; } | { comparePoint?: ... | ...; name: "critical-failure"; type: "modifier"; } | { direction: SortDirection; name: "sort"; type: "modifier"; } | { name: "max"; type: "modifier"; value: EncodedNumber; } | { name: "min"; type: "modifier"; value: EncodedNumber; })[]; type: "group"; } | { readonly type: "binary"; readonly op: "+" | "-" | "*" | "/" | "%" | "^"; readonly left: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { ...; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...;... | { op: "-"; operand: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "unary"; } | { expression: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "paren"; } | { args: readonly { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...[]; name: "abs" | "ceil" | "cos" | "exp" | "floor" | "log" | "round" | "sign" | "sin" | "sqrt" | "tan" | "pow" | "max" | "min" | "trunc"; type: "function"; }; type: "binary"; }; right: { readonly type: "number"; readonly node: { readonly type: "number"; readonly value: EncodedNumber; }; readonly value: EncodedNumber; } | { readonly type: "pool"; ... 5 more ...; readonly rolls: readonly { ...; }[]; } | ... 4 more ... | { ...; }; type: "binary"; value: EncodedNumber; } | { node: { op: "-"; operand: { type: "number"; value: EncodedNumber; } | { description?: { style: DescriptionStyle; text: string; }; die: { args: readonly { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...[]; name: string; type: "die"; }; modifiers: readonly ({ comparePoint?: ... | ...; compound: boolean; name: "explode"; penetrate: boolean; type: "modifier"; } | { failure?: ... | ...; name: "target"; success: { operator: ...; value: ...; }; type: "modifier"; } | { end: PoolEnd; name: "drop"; qty: EncodedNumber; type: "modifier"; } | { end: PoolEnd; name: "keep"; qty: EncodedNumber; type: "modifier"; } | { comparePoint?: ... | ...; name: "re-roll"; once: boolean; type: "modifier"; } | { comparePoint?: ... | ...; name: "unique"; once: boolean; type: "modifier"; } | { comparePoint?: ... | ...; name: "critical-success"; type: "modifier"; } | { comparePoint?: ... | ...; name: "critical-failure"; type: "modifier"; } | { direction: SortDirection; name: "sort"; type: "modifier"; } | { name: "max"; type: "modifier"; value: EncodedNumber; } | { name: "min"; type: "modifier"; value: EncodedNumber; })[]; qty: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "pool"; } | { description?: { style: DescriptionStyle; text: string; }; expressions: readonly { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...[]; modifiers: readonly ({ comparePoint?: ... | ...; compound: boolean; name: "explode"; penetrate: boolean; type: "modifier"; } | { failure?: ... | ...; name: "target"; success: { operator: ...; value: ...; }; type: "modifier"; } | { end: PoolEnd; name: "drop"; qty: EncodedNumber; type: "modifier"; } | { end: PoolEnd; name: "keep"; qty: EncodedNumber; type: "modifier"; } | { comparePoint?: ... | ...; name: "re-roll"; once: boolean; type: "modifier"; } | { comparePoint?: ... | ...; name: "unique"; once: boolean; type: "modifier"; } | { comparePoint?: ... | ...; name: "critical-success"; type: "modifier"; } | { comparePoint?: ... | ...; name: "critical-failure"; type: "modifier"; } | { direction: SortDirection; name: "sort"; type: "modifier"; } | { name: "max"; type: "modifier"; value: EncodedNumber; } | { name: "min"; type: "modifier"; value: EncodedNumber; })[]; type: "group"; } | { left: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; op: "+" | "-" | "*" | "/" | "%" | "^"; right: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "binary"; } | { readonly type: "unary"; readonly op: "-"; readonly operand: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... | { expression: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "paren"; } | { args: readonly { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...[]; name: "abs" | "ceil" | "cos" | "exp" | "floor" | "log" | "round" | "sign" | "sin" | "sqrt" | "tan" | "pow" | "max" | "min" | "trunc"; type: "function"; }; type: "unary"; }; operand: { readonly type: "number"; readonly node: { readonly type: "number"; readonly value: EncodedNumber; }; readonly value: EncodedNumber; } | { readonly type: "pool"; ... 5 more ...; readonly rolls: readonly { ...; }[]; } | ... 4 more ... | { ...; }; type: "unary"; value: EncodedNumber; } | { inner: { readonly type: "number"; readonly node: { readonly type: "number"; readonly value: EncodedNumber; }; readonly value: EncodedNumber; } | { readonly type: "pool"; ... 5 more ...; readonly rolls: readonly { ...; }[]; } | ... 4 more ... | { ...; }; node: { expression: { type: "number"; value: EncodedNumber; } | { description?: { style: DescriptionStyle; text: string; }; die: { args: readonly { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...[]; name: string; type: "die"; }; modifiers: readonly ({ comparePoint?: ... | ...; compound: boolean; name: "explode"; penetrate: boolean; type: "modifier"; } | { failure?: ... | ...; name: "target"; success: { operator: ...; value: ...; }; type: "modifier"; } | { end: PoolEnd; name: "drop"; qty: EncodedNumber; type: "modifier"; } | { end: PoolEnd; name: "keep"; qty: EncodedNumber; type: "modifier"; } | { comparePoint?: ... | ...; name: "re-roll"; once: boolean; type: "modifier"; } | { comparePoint?: ... | ...; name: "unique"; once: boolean; type: "modifier"; } | { comparePoint?: ... | ...; name: "critical-success"; type: "modifier"; } | { comparePoint?: ... | ...; name: "critical-failure"; type: "modifier"; } | { direction: SortDirection; name: "sort"; type: "modifier"; } | { name: "max"; type: "modifier"; value: EncodedNumber; } | { name: "min"; type: "modifier"; value: EncodedNumber; })[]; qty: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "pool"; } | { description?: { style: DescriptionStyle; text: string; }; expressions: readonly { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...[]; modifiers: readonly ({ comparePoint?: ... | ...; compound: boolean; name: "explode"; penetrate: boolean; type: "modifier"; } | { failure?: ... | ...; name: "target"; success: { operator: ...; value: ...; }; type: "modifier"; } | { end: PoolEnd; name: "drop"; qty: EncodedNumber; type: "modifier"; } | { end: PoolEnd; name: "keep"; qty: EncodedNumber; type: "modifier"; } | { comparePoint?: ... | ...; name: "re-roll"; once: boolean; type: "modifier"; } | { comparePoint?: ... | ...; name: "unique"; once: boolean; type: "modifier"; } | { comparePoint?: ... | ...; name: "critical-success"; type: "modifier"; } | { comparePoint?: ... | ...; name: "critical-failure"; type: "modifier"; } | { direction: SortDirection; name: "sort"; type: "modifier"; } | { name: "max"; type: "modifier"; value: EncodedNumber; } | { name: "min"; type: "modifier"; value: EncodedNumber; })[]; type: "group"; } | { left: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; op: "+" | "-" | "*" | "/" | "%" | "^"; right: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "binary"; } | { op: "-"; operand: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "unary"; } | { readonly type: "paren"; readonly expression: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... ... | { args: readonly { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...[]; name: "abs" | "ceil" | "cos" | "exp" | "floor" | "log" | "round" | "sign" | "sin" | "sqrt" | "tan" | "pow" | "max" | "min" | "trunc"; type: "function"; }; type: "paren"; }; type: "paren"; value: EncodedNumber; } | { args: readonly { readonly type: "number"; readonly node: { readonly type: "number"; readonly value: EncodedNumber; }; readonly value: EncodedNumber; } | { readonly type: "pool"; ... 5 more ...; readonly rolls: readonly { ...; }[]; } | ... 4 more ... | { ...; }[]; node: { args: readonly ({ type: "number"; value: EncodedNumber; } | { description?: { style: DescriptionStyle; text: string; }; die: { args: readonly ({ readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?:...; name: string; type: "die"; }; modifiers: readonly ({ comparePoint?: ...; compound: ...; name: ...; penetrate: ...; type: ...; } | { failure?: ...; name: ...; success: ...; type: ...; } | { end: ...; name: ...; qty: ...; type: ...; } | { end: ...; name: ...; qty: ...; type: ...; } | { comparePoint?: ...; name: ...; once: ...; type: ...; } | { comparePoint?: ...; name: ...; once: ...; type: ...; } | { comparePoint?: ...; name: ...; type: ...; } | { comparePoint?: ...; name: ...; type: ...; } | { direction: ...; name: ...; type: ...; } | { name: ...; type: ...; value: ...; } | { name: ...; type: ...; value: ...; })[]; qty: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "pool"; } | { description?: { style: DescriptionStyle; text: string; }; expressions: readonly ({ readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?:...; modifiers: readonly ({ comparePoint?: ...; compound: ...; name: ...; penetrate: ...; type: ...; } | { failure?: ...; name: ...; success: ...; type: ...; } | { end: ...; name: ...; qty: ...; type: ...; } | { end: ...; name: ...; qty: ...; type: ...; } | { comparePoint?: ...; name: ...; once: ...; type: ...; } | { comparePoint?: ...; name: ...; once: ...; type: ...; } | { comparePoint?: ...; name: ...; type: ...; } | { comparePoint?: ...; name: ...; type: ...; } | { direction: ...; name: ...; type: ...; } | { name: ...; type: ...; value: ...; } | { name: ...; type: ...; value: ...; })[]; type: "group"; } | { left: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; op: "+" | "-" | "*" | "/" | "%" | "^"; right: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "binary"; } | { op: "-"; operand: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "unary"; } | { expression: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "paren"; } | { readonly type: "function"; readonly name: "abs" | "ceil" | "cos" | "exp" | "floor" | "log" | "round" | "sign" | "sin" | "sqrt" | "tan" | "pow" | "max" | "min" | "trunc"; readonly args: readonly ({ readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | ...)[]; })[]; name: "abs" | "ceil" | "cos" | "exp" | "floor" | "log" | "round" | "sign" | "sin" | "sqrt" | "tan" | "pow" | "max" | "min" | "trunc"; type: "function"; }; type: "function"; value: EncodedNumber; }; total: EncodedNumber; type: "roll"; version: 1; }

Defined in: src/Roll.ts:209

Exports as JSON (default), a JSON-safe object, or UTF-8 base64 JSON. Evaluates uncached min/max totals.

Parameters ​
format ​

"object" | "json" | "base64"

Returns ​

string | { averageTotal: EncodedNumber; maxTotal: EncodedNumber; minTotal: EncodedNumber; notation: string; result: { node: { type: "number"; value: EncodedNumber; }; type: "number"; value: EncodedNumber; } | { die: { average: EncodedNumber; faceCount: EncodedNumber; max: EncodedNumber; min: EncodedNumber; notation: string; }; dieArgs: readonly { readonly type: "number"; readonly node: { readonly type: "number"; readonly value: EncodedNumber; }; readonly value: EncodedNumber; } | { readonly type: "pool"; ... 5 more ...; readonly rolls: readonly { ...; }[]; } | ... 4 more ... | { ...; }[]; node: { description?: { style: DescriptionStyle; text: string; }; die: { args: readonly ({ type: "number"; value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... | { readonly type: "group"; readonly expressions: readonly ({ readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; })[]; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ... | { description?: { style: ...; text: ...; }; expressions: readonly ({ readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?:...; modifiers: readonly (... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ...)[]; type: "group"; } | { left: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; op: "+" | "-" | "*" | "/" | "%" | "^"; right: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "binary"; } | { op: "-"; operand: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "unary"; } | { expression: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "paren"; } | { args: readonly ({ readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?:...; name: "abs" | "ceil" | "cos" | "exp" | "floor" | "log" | "round" | "sign" | "sin" | "sqrt" | "tan" | "pow" | "max" | "min" | "trunc"; type: "function"; })[]; name: string; type: "die"; }; modifiers: readonly ({ comparePoint?: { operator: ... | ... | ... | ... | ... | ... | ...; value: EncodedNumber; }; compound: boolean; name: "explode"; penetrate: boolean; type: "modifier"; } | { failure?: { operator: ... | ... | ... | ... | ... | ... | ...; value: EncodedNumber; }; name: "target"; success: { operator: "=" | "!=" | "<>" | "<" | ">" | "<=" | ">="; value: EncodedNumber; }; type: "modifier"; } | { end: PoolEnd; name: "drop"; qty: EncodedNumber; type: "modifier"; } | { end: PoolEnd; name: "keep"; qty: EncodedNumber; type: "modifier"; } | { comparePoint?: { operator: ... | ... | ... | ... | ... | ... | ...; value: EncodedNumber; }; name: "re-roll"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: ... | ... | ... | ... | ... | ... | ...; value: EncodedNumber; }; name: "unique"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: ... | ... | ... | ... | ... | ... | ...; value: EncodedNumber; }; name: "critical-success"; type: "modifier"; } | { comparePoint?: { operator: ... | ... | ... | ... | ... | ... | ...; value: EncodedNumber; }; name: "critical-failure"; type: "modifier"; } | { direction: SortDirection; name: "sort"; type: "modifier"; } | { name: "max"; type: "modifier"; value: EncodedNumber; } | { name: "min"; type: "modifier"; value: EncodedNumber; })[]; qty: { type: "number"; value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... | { readonly type: "group"; readonly expressions: readonly ({ readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; })[]; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ... | { description?: { style: DescriptionStyle; text: string; }; expressions: readonly { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...[]; modifiers: readonly ({ comparePoint?: ... | ...; compound: boolean; name: "explode"; penetrate: boolean; type: "modifier"; } | { failure?: ... | ...; name: "target"; success: { operator: ...; value: ...; }; type: "modifier"; } | { end: PoolEnd; name: "drop"; qty: EncodedNumber; type: "modifier"; } | { end: PoolEnd; name: "keep"; qty: EncodedNumber; type: "modifier"; } | { comparePoint?: ... | ...; name: "re-roll"; once: boolean; type: "modifier"; } | { comparePoint?: ... | ...; name: "unique"; once: boolean; type: "modifier"; } | { comparePoint?: ... | ...; name: "critical-success"; type: "modifier"; } | { comparePoint?: ... | ...; name: "critical-failure"; type: "modifier"; } | { direction: SortDirection; name: "sort"; type: "modifier"; } | { name: "max"; type: "modifier"; value: EncodedNumber; } | { name: "min"; type: "modifier"; value: EncodedNumber; })[]; type: "group"; } | { left: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; op: "+" | "-" | "*" | "/" | "%" | "^"; right: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "binary"; } | { op: "-"; operand: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "unary"; } | { expression: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "paren"; } | { args: readonly { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...[]; name: "abs" | "ceil" | "cos" | "exp" | "floor" | "log" | "round" | "sign" | "sin" | "sqrt" | "tan" | "pow" | "max" | "min" | "trunc"; type: "function"; }; type: "pool"; }; qty: { readonly type: "number"; readonly node: { readonly type: "number"; readonly value: EncodedNumber; }; readonly value: EncodedNumber; } | { readonly type: "pool"; ... 5 more ...; readonly rolls: readonly { ...; }[]; } | ... 4 more ... | { ...; }; rolls: readonly object[]; type: "pool"; value: EncodedNumber; } | { members: readonly object[]; node: { description?: { style: DescriptionStyle; text: string; }; expressions: readonly ({ type: "number"; value: EncodedNumber; } | { description?: { style: DescriptionStyle; text: string; }; die: { args: readonly ({ readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?:...; name: string; type: "die"; }; modifiers: readonly ({ comparePoint?: ...; compound: ...; name: ...; penetrate: ...; type: ...; } | { failure?: ...; name: ...; success: ...; type: ...; } | { end: ...; name: ...; qty: ...; type: ...; } | { end: ...; name: ...; qty: ...; type: ...; } | { comparePoint?: ...; name: ...; once: ...; type: ...; } | { comparePoint?: ...; name: ...; once: ...; type: ...; } | { comparePoint?: ...; name: ...; type: ...; } | { comparePoint?: ...; name: ...; type: ...; } | { direction: ...; name: ...; type: ...; } | { name: ...; type: ...; value: ...; } | { name: ...; type: ...; value: ...; })[]; qty: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "pool"; } | { readonly type: "group"; readonly expressions: readonly ({ readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... ... | { left: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; op: "+" | "-" | "*" | "/" | "%" | "^"; right: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "binary"; } | { op: "-"; operand: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "unary"; } | { expression: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "paren"; } | { args: readonly ({ readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?:...; name: "abs" | "ceil" | "cos" | "exp" | "floor" | "log" | "round" | "sign" | "sin" | "sqrt" | "tan" | "pow" | "max" | "min" | "trunc"; type: "function"; })[]; modifiers: readonly ({ comparePoint?: { operator: ... | ... | ... | ... | ... | ... | ...; value: EncodedNumber; }; compound: boolean; name: "explode"; penetrate: boolean; type: "modifier"; } | { failure?: { operator: ... | ... | ... | ... | ... | ... | ...; value: EncodedNumber; }; name: "target"; success: { operator: "=" | "!=" | "<>" | "<" | ">" | "<=" | ">="; value: EncodedNumber; }; type: "modifier"; } | { end: PoolEnd; name: "drop"; qty: EncodedNumber; type: "modifier"; } | { end: PoolEnd; name: "keep"; qty: EncodedNumber; type: "modifier"; } | { comparePoint?: { operator: ... | ... | ... | ... | ... | ... | ...; value: EncodedNumber; }; name: "re-roll"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: ... | ... | ... | ... | ... | ... | ...; value: EncodedNumber; }; name: "unique"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: ... | ... | ... | ... | ... | ... | ...; value: EncodedNumber; }; name: "critical-success"; type: "modifier"; } | { comparePoint?: { operator: ... | ... | ... | ... | ... | ... | ...; value: EncodedNumber; }; name: "critical-failure"; type: "modifier"; } | { direction: SortDirection; name: "sort"; type: "modifier"; } | { name: "max"; type: "modifier"; value: EncodedNumber; } | { name: "min"; type: "modifier"; value: EncodedNumber; })[]; type: "group"; }; type: "group"; value: EncodedNumber; } | { left: { readonly type: "number"; readonly node: { readonly type: "number"; readonly value: EncodedNumber; }; readonly value: EncodedNumber; } | { readonly type: "pool"; ... 5 more ...; readonly rolls: readonly { ...; }[]; } | ... 4 more ... | { ...; }; node: { left: { type: "number"; value: EncodedNumber; } | { description?: { style: DescriptionStyle; text: string; }; die: { args: readonly { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...[]; name: string; type: "die"; }; modifiers: readonly ({ comparePoint?: ... | ...; compound: boolean; name: "explode"; penetrate: boolean; type: "modifier"; } | { failure?: ... | ...; name: "target"; success: { operator: ...; value: ...; }; type: "modifier"; } | { end: PoolEnd; name: "drop"; qty: EncodedNumber; type: "modifier"; } | { end: PoolEnd; name: "keep"; qty: EncodedNumber; type: "modifier"; } | { comparePoint?: ... | ...; name: "re-roll"; once: boolean; type: "modifier"; } | { comparePoint?: ... | ...; name: "unique"; once: boolean; type: "modifier"; } | { comparePoint?: ... | ...; name: "critical-success"; type: "modifier"; } | { comparePoint?: ... | ...; name: "critical-failure"; type: "modifier"; } | { direction: SortDirection; name: "sort"; type: "modifier"; } | { name: "max"; type: "modifier"; value: EncodedNumber; } | { name: "min"; type: "modifier"; value: EncodedNumber; })[]; qty: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "pool"; } | { description?: { style: DescriptionStyle; text: string; }; expressions: readonly { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...[]; modifiers: readonly ({ comparePoint?: ... | ...; compound: boolean; name: "explode"; penetrate: boolean; type: "modifier"; } | { failure?: ... | ...; name: "target"; success: { operator: ...; value: ...; }; type: "modifier"; } | { end: PoolEnd; name: "drop"; qty: EncodedNumber; type: "modifier"; } | { end: PoolEnd; name: "keep"; qty: EncodedNumber; type: "modifier"; } | { comparePoint?: ... | ...; name: "re-roll"; once: boolean; type: "modifier"; } | { comparePoint?: ... | ...; name: "unique"; once: boolean; type: "modifier"; } | { comparePoint?: ... | ...; name: "critical-success"; type: "modifier"; } | { comparePoint?: ... | ...; name: "critical-failure"; type: "modifier"; } | { direction: SortDirection; name: "sort"; type: "modifier"; } | { name: "max"; type: "modifier"; value: EncodedNumber; } | { name: "min"; type: "modifier"; value: EncodedNumber; })[]; type: "group"; } | { readonly type: "binary"; readonly op: "+" | "-" | "*" | "/" | "%" | "^"; readonly left: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { ...; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...;... | { op: "-"; operand: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "unary"; } | { expression: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "paren"; } | { args: readonly { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...[]; name: "abs" | "ceil" | "cos" | "exp" | "floor" | "log" | "round" | "sign" | "sin" | "sqrt" | "tan" | "pow" | "max" | "min" | "trunc"; type: "function"; }; op: "+" | "-" | "*" | "/" | "%" | "^"; right: { type: "number"; value: EncodedNumber; } | { description?: { style: DescriptionStyle; text: string; }; die: { args: readonly { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...[]; name: string; type: "die"; }; modifiers: readonly ({ comparePoint?: ... | ...; compound: boolean; name: "explode"; penetrate: boolean; type: "modifier"; } | { failure?: ... | ...; name: "target"; success: { operator: ...; value: ...; }; type: "modifier"; } | { end: PoolEnd; name: "drop"; qty: EncodedNumber; type: "modifier"; } | { end: PoolEnd; name: "keep"; qty: EncodedNumber; type: "modifier"; } | { comparePoint?: ... | ...; name: "re-roll"; once: boolean; type: "modifier"; } | { comparePoint?: ... | ...; name: "unique"; once: boolean; type: "modifier"; } | { comparePoint?: ... | ...; name: "critical-success"; type: "modifier"; } | { comparePoint?: ... | ...; name: "critical-failure"; type: "modifier"; } | { direction: SortDirection; name: "sort"; type: "modifier"; } | { name: "max"; type: "modifier"; value: EncodedNumber; } | { name: "min"; type: "modifier"; value: EncodedNumber; })[]; qty: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "pool"; } | { description?: { style: DescriptionStyle; text: string; }; expressions: readonly { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...[]; modifiers: readonly ({ comparePoint?: ... | ...; compound: boolean; name: "explode"; penetrate: boolean; type: "modifier"; } | { failure?: ... | ...; name: "target"; success: { operator: ...; value: ...; }; type: "modifier"; } | { end: PoolEnd; name: "drop"; qty: EncodedNumber; type: "modifier"; } | { end: PoolEnd; name: "keep"; qty: EncodedNumber; type: "modifier"; } | { comparePoint?: ... | ...; name: "re-roll"; once: boolean; type: "modifier"; } | { comparePoint?: ... | ...; name: "unique"; once: boolean; type: "modifier"; } | { comparePoint?: ... | ...; name: "critical-success"; type: "modifier"; } | { comparePoint?: ... | ...; name: "critical-failure"; type: "modifier"; } | { direction: SortDirection; name: "sort"; type: "modifier"; } | { name: "max"; type: "modifier"; value: EncodedNumber; } | { name: "min"; type: "modifier"; value: EncodedNumber; })[]; type: "group"; } | { readonly type: "binary"; readonly op: "+" | "-" | "*" | "/" | "%" | "^"; readonly left: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { ...; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...;... | { op: "-"; operand: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "unary"; } | { expression: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "paren"; } | { args: readonly { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...[]; name: "abs" | "ceil" | "cos" | "exp" | "floor" | "log" | "round" | "sign" | "sin" | "sqrt" | "tan" | "pow" | "max" | "min" | "trunc"; type: "function"; }; type: "binary"; }; right: { readonly type: "number"; readonly node: { readonly type: "number"; readonly value: EncodedNumber; }; readonly value: EncodedNumber; } | { readonly type: "pool"; ... 5 more ...; readonly rolls: readonly { ...; }[]; } | ... 4 more ... | { ...; }; type: "binary"; value: EncodedNumber; } | { node: { op: "-"; operand: { type: "number"; value: EncodedNumber; } | { description?: { style: DescriptionStyle; text: string; }; die: { args: readonly { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...[]; name: string; type: "die"; }; modifiers: readonly ({ comparePoint?: ... | ...; compound: boolean; name: "explode"; penetrate: boolean; type: "modifier"; } | { failure?: ... | ...; name: "target"; success: { operator: ...; value: ...; }; type: "modifier"; } | { end: PoolEnd; name: "drop"; qty: EncodedNumber; type: "modifier"; } | { end: PoolEnd; name: "keep"; qty: EncodedNumber; type: "modifier"; } | { comparePoint?: ... | ...; name: "re-roll"; once: boolean; type: "modifier"; } | { comparePoint?: ... | ...; name: "unique"; once: boolean; type: "modifier"; } | { comparePoint?: ... | ...; name: "critical-success"; type: "modifier"; } | { comparePoint?: ... | ...; name: "critical-failure"; type: "modifier"; } | { direction: SortDirection; name: "sort"; type: "modifier"; } | { name: "max"; type: "modifier"; value: EncodedNumber; } | { name: "min"; type: "modifier"; value: EncodedNumber; })[]; qty: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "pool"; } | { description?: { style: DescriptionStyle; text: string; }; expressions: readonly { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...[]; modifiers: readonly ({ comparePoint?: ... | ...; compound: boolean; name: "explode"; penetrate: boolean; type: "modifier"; } | { failure?: ... | ...; name: "target"; success: { operator: ...; value: ...; }; type: "modifier"; } | { end: PoolEnd; name: "drop"; qty: EncodedNumber; type: "modifier"; } | { end: PoolEnd; name: "keep"; qty: EncodedNumber; type: "modifier"; } | { comparePoint?: ... | ...; name: "re-roll"; once: boolean; type: "modifier"; } | { comparePoint?: ... | ...; name: "unique"; once: boolean; type: "modifier"; } | { comparePoint?: ... | ...; name: "critical-success"; type: "modifier"; } | { comparePoint?: ... | ...; name: "critical-failure"; type: "modifier"; } | { direction: SortDirection; name: "sort"; type: "modifier"; } | { name: "max"; type: "modifier"; value: EncodedNumber; } | { name: "min"; type: "modifier"; value: EncodedNumber; })[]; type: "group"; } | { left: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; op: "+" | "-" | "*" | "/" | "%" | "^"; right: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "binary"; } | { readonly type: "unary"; readonly op: "-"; readonly operand: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... | { expression: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "paren"; } | { args: readonly { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...[]; name: "abs" | "ceil" | "cos" | "exp" | "floor" | "log" | "round" | "sign" | "sin" | "sqrt" | "tan" | "pow" | "max" | "min" | "trunc"; type: "function"; }; type: "unary"; }; operand: { readonly type: "number"; readonly node: { readonly type: "number"; readonly value: EncodedNumber; }; readonly value: EncodedNumber; } | { readonly type: "pool"; ... 5 more ...; readonly rolls: readonly { ...; }[]; } | ... 4 more ... | { ...; }; type: "unary"; value: EncodedNumber; } | { inner: { readonly type: "number"; readonly node: { readonly type: "number"; readonly value: EncodedNumber; }; readonly value: EncodedNumber; } | { readonly type: "pool"; ... 5 more ...; readonly rolls: readonly { ...; }[]; } | ... 4 more ... | { ...; }; node: { expression: { type: "number"; value: EncodedNumber; } | { description?: { style: DescriptionStyle; text: string; }; die: { args: readonly { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...[]; name: string; type: "die"; }; modifiers: readonly ({ comparePoint?: ... | ...; compound: boolean; name: "explode"; penetrate: boolean; type: "modifier"; } | { failure?: ... | ...; name: "target"; success: { operator: ...; value: ...; }; type: "modifier"; } | { end: PoolEnd; name: "drop"; qty: EncodedNumber; type: "modifier"; } | { end: PoolEnd; name: "keep"; qty: EncodedNumber; type: "modifier"; } | { comparePoint?: ... | ...; name: "re-roll"; once: boolean; type: "modifier"; } | { comparePoint?: ... | ...; name: "unique"; once: boolean; type: "modifier"; } | { comparePoint?: ... | ...; name: "critical-success"; type: "modifier"; } | { comparePoint?: ... | ...; name: "critical-failure"; type: "modifier"; } | { direction: SortDirection; name: "sort"; type: "modifier"; } | { name: "max"; type: "modifier"; value: EncodedNumber; } | { name: "min"; type: "modifier"; value: EncodedNumber; })[]; qty: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "pool"; } | { description?: { style: DescriptionStyle; text: string; }; expressions: readonly { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...[]; modifiers: readonly ({ comparePoint?: ... | ...; compound: boolean; name: "explode"; penetrate: boolean; type: "modifier"; } | { failure?: ... | ...; name: "target"; success: { operator: ...; value: ...; }; type: "modifier"; } | { end: PoolEnd; name: "drop"; qty: EncodedNumber; type: "modifier"; } | { end: PoolEnd; name: "keep"; qty: EncodedNumber; type: "modifier"; } | { comparePoint?: ... | ...; name: "re-roll"; once: boolean; type: "modifier"; } | { comparePoint?: ... | ...; name: "unique"; once: boolean; type: "modifier"; } | { comparePoint?: ... | ...; name: "critical-success"; type: "modifier"; } | { comparePoint?: ... | ...; name: "critical-failure"; type: "modifier"; } | { direction: SortDirection; name: "sort"; type: "modifier"; } | { name: "max"; type: "modifier"; value: EncodedNumber; } | { name: "min"; type: "modifier"; value: EncodedNumber; })[]; type: "group"; } | { left: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; op: "+" | "-" | "*" | "/" | "%" | "^"; right: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "binary"; } | { op: "-"; operand: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "unary"; } | { readonly type: "paren"; readonly expression: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... ... | { args: readonly { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...[]; name: "abs" | "ceil" | "cos" | "exp" | "floor" | "log" | "round" | "sign" | "sin" | "sqrt" | "tan" | "pow" | "max" | "min" | "trunc"; type: "function"; }; type: "paren"; }; type: "paren"; value: EncodedNumber; } | { args: readonly { readonly type: "number"; readonly node: { readonly type: "number"; readonly value: EncodedNumber; }; readonly value: EncodedNumber; } | { readonly type: "pool"; ... 5 more ...; readonly rolls: readonly { ...; }[]; } | ... 4 more ... | { ...; }[]; node: { args: readonly ({ type: "number"; value: EncodedNumber; } | { description?: { style: DescriptionStyle; text: string; }; die: { args: readonly ({ readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?:...; name: string; type: "die"; }; modifiers: readonly ({ comparePoint?: ...; compound: ...; name: ...; penetrate: ...; type: ...; } | { failure?: ...; name: ...; success: ...; type: ...; } | { end: ...; name: ...; qty: ...; type: ...; } | { end: ...; name: ...; qty: ...; type: ...; } | { comparePoint?: ...; name: ...; once: ...; type: ...; } | { comparePoint?: ...; name: ...; once: ...; type: ...; } | { comparePoint?: ...; name: ...; type: ...; } | { comparePoint?: ...; name: ...; type: ...; } | { direction: ...; name: ...; type: ...; } | { name: ...; type: ...; value: ...; } | { name: ...; type: ...; value: ...; })[]; qty: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "pool"; } | { description?: { style: DescriptionStyle; text: string; }; expressions: readonly ({ readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?:...; modifiers: readonly ({ comparePoint?: ...; compound: ...; name: ...; penetrate: ...; type: ...; } | { failure?: ...; name: ...; success: ...; type: ...; } | { end: ...; name: ...; qty: ...; type: ...; } | { end: ...; name: ...; qty: ...; type: ...; } | { comparePoint?: ...; name: ...; once: ...; type: ...; } | { comparePoint?: ...; name: ...; once: ...; type: ...; } | { comparePoint?: ...; name: ...; type: ...; } | { comparePoint?: ...; name: ...; type: ...; } | { direction: ...; name: ...; type: ...; } | { name: ...; type: ...; value: ...; } | { name: ...; type: ...; value: ...; })[]; type: "group"; } | { left: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; op: "+" | "-" | "*" | "/" | "%" | "^"; right: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "binary"; } | { op: "-"; operand: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "unary"; } | { expression: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "paren"; } | { readonly type: "function"; readonly name: "abs" | "ceil" | "cos" | "exp" | "floor" | "log" | "round" | "sign" | "sin" | "sqrt" | "tan" | "pow" | "max" | "min" | "trunc"; readonly args: readonly ({ readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | ...)[]; })[]; name: "abs" | "ceil" | "cos" | "exp" | "floor" | "log" | "round" | "sign" | "sin" | "sqrt" | "tan" | "pow" | "max" | "min" | "trunc"; type: "function"; }; type: "function"; value: EncodedNumber; }; total: EncodedNumber; type: "roll"; version: 1; }


present() ​

Call Signature ​

present(): T

Defined in: src/Roll.ts:190

Presents the roll with the presenter, or the one from the options (default TextPresenter).

Returns ​

T

Call Signature ​

present<U>(presenter): U

Defined in: src/Roll.ts:191

Presents the roll with the presenter, or the one from the options (default TextPresenter).

Type Parameters ​
U ​

U

Parameters ​
presenter ​

Presenter<U>

Returns ​

U


reroll() ​

reroll(): Roll<T>

Defined in: src/Roll.ts:185

Rolls the original input again with the same settings; restored rolls use their stored expression. Does not add to a history.

Returns ​

Roll<T>


toJSON() ​

toJSON(): object

Defined in: src/Roll.ts:202

JSON-safe export data with non-finite numbers tagged; evaluates uncached min/max totals.

Returns ​

object

averageTotal ​

readonly averageTotal: EncodedNumber

maxTotal ​

readonly maxTotal: EncodedNumber

minTotal ​

readonly minTotal: EncodedNumber

notation ​

readonly notation: string

result ​

readonly result: { node: { type: "number"; value: EncodedNumber; }; type: "number"; value: EncodedNumber; } | { die: { average: EncodedNumber; faceCount: EncodedNumber; max: EncodedNumber; min: EncodedNumber; notation: string; }; dieArgs: readonly { readonly type: "number"; readonly node: { readonly type: "number"; readonly value: EncodedNumber; }; readonly value: EncodedNumber; } | { readonly type: "pool"; ... 5 more ...; readonly rolls: readonly { ...; }[]; } | ... 4 more ... | { ...; }[]; node: { description?: { style: DescriptionStyle; text: string; }; die: { args: readonly ({ type: "number"; value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... | { readonly type: "group"; readonly expressions: readonly ({ readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; })[]; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ... | { description?: { style: DescriptionStyle; text: string; }; expressions: readonly ({ readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?:...; modifiers: readonly ({ comparePoint?: ...; compound: ...; name: ...; penetrate: ...; type: ...; } | { failure?: ...; name: ...; success: ...; type: ...; } | { end: ...; name: ...; qty: ...; type: ...; } | { end: ...; name: ...; qty: ...; type: ...; } | { comparePoint?: ...; name: ...; once: ...; type: ...; } | { comparePoint?: ...; name: ...; once: ...; type: ...; } | { comparePoint?: ...; name: ...; type: ...; } | { comparePoint?: ...; name: ...; type: ...; } | { direction: ...; name: ...; type: ...; } | { name: ...; type: ...; value: ...; } | { name: ...; type: ...; value: ...; })[]; type: "group"; } | { left: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; op: "+" | "-" | "*" | "/" | "%" | "^"; right: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "binary"; } | { op: "-"; operand: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "unary"; } | { expression: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "paren"; } | { args: readonly ({ readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?:...; name: "abs" | "ceil" | "cos" | "exp" | "floor" | "log" | "round" | "sign" | "sin" | "sqrt" | "tan" | "pow" | "max" | "min" | "trunc"; type: "function"; })[]; name: string; type: "die"; }; modifiers: readonly ({ comparePoint?: { operator: "=" | "!=" | "<>" | "<" | ">" | "<=" | ">="; value: EncodedNumber; }; compound: boolean; name: "explode"; penetrate: boolean; type: "modifier"; } | { failure?: { operator: "=" | "!=" | "<>" | "<" | ">" | "<=" | ">="; value: EncodedNumber; }; name: "target"; success: { operator: "=" | "!=" | "<>" | "<" | ">" | "<=" | ">="; value: EncodedNumber; }; type: "modifier"; } | { end: PoolEnd; name: "drop"; qty: EncodedNumber; type: "modifier"; } | { end: PoolEnd; name: "keep"; qty: EncodedNumber; type: "modifier"; } | { comparePoint?: { operator: "=" | "!=" | "<>" | "<" | ">" | "<=" | ">="; value: EncodedNumber; }; name: "re-roll"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: "=" | "!=" | "<>" | "<" | ">" | "<=" | ">="; value: EncodedNumber; }; name: "unique"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: "=" | "!=" | "<>" | "<" | ">" | "<=" | ">="; value: EncodedNumber; }; name: "critical-success"; type: "modifier"; } | { comparePoint?: { operator: "=" | "!=" | "<>" | "<" | ">" | "<=" | ">="; value: EncodedNumber; }; name: "critical-failure"; type: "modifier"; } | { direction: SortDirection; name: "sort"; type: "modifier"; } | { name: "max"; type: "modifier"; value: EncodedNumber; } | { name: "min"; type: "modifier"; value: EncodedNumber; })[]; qty: { type: "number"; value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... | { readonly type: "group"; readonly expressions: readonly ({ readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; })[]; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ... | { description?: { style: DescriptionStyle; text: string; }; expressions: readonly { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...[]; modifiers: readonly ({ comparePoint?: { operator: ...; value: ...; }; compound: boolean; name: "explode"; penetrate: boolean; type: "modifier"; } | { failure?: { operator: ...; value: ...; }; name: "target"; success: { operator: ... | ... | ... | ... | ... | ... | ...; value: EncodedNumber; }; type: "modifier"; } | { end: PoolEnd; name: "drop"; qty: EncodedNumber; type: "modifier"; } | { end: PoolEnd; name: "keep"; qty: EncodedNumber; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "re-roll"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "unique"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "critical-success"; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "critical-failure"; type: "modifier"; } | { direction: SortDirection; name: "sort"; type: "modifier"; } | { name: "max"; type: "modifier"; value: EncodedNumber; } | { name: "min"; type: "modifier"; value: EncodedNumber; })[]; type: "group"; } | { left: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; op: "+" | "-" | "*" | "/" | "%" | "^"; right: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "binary"; } | { op: "-"; operand: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "unary"; } | { expression: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "paren"; } | { args: readonly { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...[]; name: "abs" | "ceil" | "cos" | "exp" | "floor" | "log" | "round" | "sign" | "sin" | "sqrt" | "tan" | "pow" | "max" | "min" | "trunc"; type: "function"; }; type: "pool"; }; qty: { readonly type: "number"; readonly node: { readonly type: "number"; readonly value: EncodedNumber; }; readonly value: EncodedNumber; } | { readonly type: "pool"; ... 5 more ...; readonly rolls: readonly { ...; }[]; } | ... 4 more ... | { ...; }; rolls: readonly object[]; type: "pool"; value: EncodedNumber; } | { members: readonly object[]; node: { description?: { style: DescriptionStyle; text: string; }; expressions: readonly ({ type: "number"; value: EncodedNumber; } | { description?: { style: DescriptionStyle; text: string; }; die: { args: readonly ({ readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?:...; name: string; type: "die"; }; modifiers: readonly ({ comparePoint?: ... | ...; compound: boolean; name: "explode"; penetrate: boolean; type: "modifier"; } | { failure?: ... | ...; name: "target"; success: { operator: ...; value: ...; }; type: "modifier"; } | { end: PoolEnd; name: "drop"; qty: EncodedNumber; type: "modifier"; } | { end: PoolEnd; name: "keep"; qty: EncodedNumber; type: "modifier"; } | { comparePoint?: ... | ...; name: "re-roll"; once: boolean; type: "modifier"; } | { comparePoint?: ... | ...; name: "unique"; once: boolean; type: "modifier"; } | { comparePoint?: ... | ...; name: "critical-success"; type: "modifier"; } | { comparePoint?: ... | ...; name: "critical-failure"; type: "modifier"; } | { direction: SortDirection; name: "sort"; type: "modifier"; } | { name: "max"; type: "modifier"; value: EncodedNumber; } | { name: "min"; type: "modifier"; value: EncodedNumber; })[]; qty: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "pool"; } | { readonly type: "group"; readonly expressions: readonly ({ readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... ... | { left: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; op: "+" | "-" | "*" | "/" | "%" | "^"; right: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "binary"; } | { op: "-"; operand: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "unary"; } | { expression: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "paren"; } | { args: readonly ({ readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?:...; name: "abs" | "ceil" | "cos" | "exp" | "floor" | "log" | "round" | "sign" | "sin" | "sqrt" | "tan" | "pow" | "max" | "min" | "trunc"; type: "function"; })[]; modifiers: readonly ({ comparePoint?: { operator: "=" | "!=" | "<>" | "<" | ">" | "<=" | ">="; value: EncodedNumber; }; compound: boolean; name: "explode"; penetrate: boolean; type: "modifier"; } | { failure?: { operator: "=" | "!=" | "<>" | "<" | ">" | "<=" | ">="; value: EncodedNumber; }; name: "target"; success: { operator: "=" | "!=" | "<>" | "<" | ">" | "<=" | ">="; value: EncodedNumber; }; type: "modifier"; } | { end: PoolEnd; name: "drop"; qty: EncodedNumber; type: "modifier"; } | { end: PoolEnd; name: "keep"; qty: EncodedNumber; type: "modifier"; } | { comparePoint?: { operator: "=" | "!=" | "<>" | "<" | ">" | "<=" | ">="; value: EncodedNumber; }; name: "re-roll"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: "=" | "!=" | "<>" | "<" | ">" | "<=" | ">="; value: EncodedNumber; }; name: "unique"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: "=" | "!=" | "<>" | "<" | ">" | "<=" | ">="; value: EncodedNumber; }; name: "critical-success"; type: "modifier"; } | { comparePoint?: { operator: "=" | "!=" | "<>" | "<" | ">" | "<=" | ">="; value: EncodedNumber; }; name: "critical-failure"; type: "modifier"; } | { direction: SortDirection; name: "sort"; type: "modifier"; } | { name: "max"; type: "modifier"; value: EncodedNumber; } | { name: "min"; type: "modifier"; value: EncodedNumber; })[]; type: "group"; }; type: "group"; value: EncodedNumber; } | { left: { readonly type: "number"; readonly node: { readonly type: "number"; readonly value: EncodedNumber; }; readonly value: EncodedNumber; } | { readonly type: "pool"; ... 5 more ...; readonly rolls: readonly { ...; }[]; } | ... 4 more ... | { ...; }; node: { left: { type: "number"; value: EncodedNumber; } | { description?: { style: DescriptionStyle; text: string; }; die: { args: readonly { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...[]; name: string; type: "die"; }; modifiers: readonly ({ comparePoint?: { operator: ...; value: ...; }; compound: boolean; name: "explode"; penetrate: boolean; type: "modifier"; } | { failure?: { operator: ...; value: ...; }; name: "target"; success: { operator: ... | ... | ... | ... | ... | ... | ...; value: EncodedNumber; }; type: "modifier"; } | { end: PoolEnd; name: "drop"; qty: EncodedNumber; type: "modifier"; } | { end: PoolEnd; name: "keep"; qty: EncodedNumber; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "re-roll"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "unique"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "critical-success"; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "critical-failure"; type: "modifier"; } | { direction: SortDirection; name: "sort"; type: "modifier"; } | { name: "max"; type: "modifier"; value: EncodedNumber; } | { name: "min"; type: "modifier"; value: EncodedNumber; })[]; qty: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "pool"; } | { description?: { style: DescriptionStyle; text: string; }; expressions: readonly { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...[]; modifiers: readonly ({ comparePoint?: { operator: ...; value: ...; }; compound: boolean; name: "explode"; penetrate: boolean; type: "modifier"; } | { failure?: { operator: ...; value: ...; }; name: "target"; success: { operator: ... | ... | ... | ... | ... | ... | ...; value: EncodedNumber; }; type: "modifier"; } | { end: PoolEnd; name: "drop"; qty: EncodedNumber; type: "modifier"; } | { end: PoolEnd; name: "keep"; qty: EncodedNumber; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "re-roll"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "unique"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "critical-success"; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "critical-failure"; type: "modifier"; } | { direction: SortDirection; name: "sort"; type: "modifier"; } | { name: "max"; type: "modifier"; value: EncodedNumber; } | { name: "min"; type: "modifier"; value: EncodedNumber; })[]; type: "group"; } | { readonly type: "binary"; readonly op: "+" | "-" | "*" | "/" | "%" | "^"; readonly left: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { ...; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...;... | { op: "-"; operand: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "unary"; } | { expression: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "paren"; } | { args: readonly { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...[]; name: "abs" | "ceil" | "cos" | "exp" | "floor" | "log" | "round" | "sign" | "sin" | "sqrt" | "tan" | "pow" | "max" | "min" | "trunc"; type: "function"; }; op: "+" | "-" | "*" | "/" | "%" | "^"; right: { type: "number"; value: EncodedNumber; } | { description?: { style: DescriptionStyle; text: string; }; die: { args: readonly { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...[]; name: string; type: "die"; }; modifiers: readonly ({ comparePoint?: { operator: ...; value: ...; }; compound: boolean; name: "explode"; penetrate: boolean; type: "modifier"; } | { failure?: { operator: ...; value: ...; }; name: "target"; success: { operator: ... | ... | ... | ... | ... | ... | ...; value: EncodedNumber; }; type: "modifier"; } | { end: PoolEnd; name: "drop"; qty: EncodedNumber; type: "modifier"; } | { end: PoolEnd; name: "keep"; qty: EncodedNumber; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "re-roll"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "unique"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "critical-success"; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "critical-failure"; type: "modifier"; } | { direction: SortDirection; name: "sort"; type: "modifier"; } | { name: "max"; type: "modifier"; value: EncodedNumber; } | { name: "min"; type: "modifier"; value: EncodedNumber; })[]; qty: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "pool"; } | { description?: { style: DescriptionStyle; text: string; }; expressions: readonly { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...[]; modifiers: readonly ({ comparePoint?: { operator: ...; value: ...; }; compound: boolean; name: "explode"; penetrate: boolean; type: "modifier"; } | { failure?: { operator: ...; value: ...; }; name: "target"; success: { operator: ... | ... | ... | ... | ... | ... | ...; value: EncodedNumber; }; type: "modifier"; } | { end: PoolEnd; name: "drop"; qty: EncodedNumber; type: "modifier"; } | { end: PoolEnd; name: "keep"; qty: EncodedNumber; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "re-roll"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "unique"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "critical-success"; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "critical-failure"; type: "modifier"; } | { direction: SortDirection; name: "sort"; type: "modifier"; } | { name: "max"; type: "modifier"; value: EncodedNumber; } | { name: "min"; type: "modifier"; value: EncodedNumber; })[]; type: "group"; } | { readonly type: "binary"; readonly op: "+" | "-" | "*" | "/" | "%" | "^"; readonly left: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { ...; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...;... | { op: "-"; operand: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "unary"; } | { expression: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "paren"; } | { args: readonly { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...[]; name: "abs" | "ceil" | "cos" | "exp" | "floor" | "log" | "round" | "sign" | "sin" | "sqrt" | "tan" | "pow" | "max" | "min" | "trunc"; type: "function"; }; type: "binary"; }; right: { readonly type: "number"; readonly node: { readonly type: "number"; readonly value: EncodedNumber; }; readonly value: EncodedNumber; } | { readonly type: "pool"; ... 5 more ...; readonly rolls: readonly { ...; }[]; } | ... 4 more ... | { ...; }; type: "binary"; value: EncodedNumber; } | { node: { op: "-"; operand: { type: "number"; value: EncodedNumber; } | { description?: { style: DescriptionStyle; text: string; }; die: { args: readonly { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...[]; name: string; type: "die"; }; modifiers: readonly ({ comparePoint?: { operator: ...; value: ...; }; compound: boolean; name: "explode"; penetrate: boolean; type: "modifier"; } | { failure?: { operator: ...; value: ...; }; name: "target"; success: { operator: ... | ... | ... | ... | ... | ... | ...; value: EncodedNumber; }; type: "modifier"; } | { end: PoolEnd; name: "drop"; qty: EncodedNumber; type: "modifier"; } | { end: PoolEnd; name: "keep"; qty: EncodedNumber; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "re-roll"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "unique"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "critical-success"; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "critical-failure"; type: "modifier"; } | { direction: SortDirection; name: "sort"; type: "modifier"; } | { name: "max"; type: "modifier"; value: EncodedNumber; } | { name: "min"; type: "modifier"; value: EncodedNumber; })[]; qty: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "pool"; } | { description?: { style: DescriptionStyle; text: string; }; expressions: readonly { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...[]; modifiers: readonly ({ comparePoint?: { operator: ...; value: ...; }; compound: boolean; name: "explode"; penetrate: boolean; type: "modifier"; } | { failure?: { operator: ...; value: ...; }; name: "target"; success: { operator: ... | ... | ... | ... | ... | ... | ...; value: EncodedNumber; }; type: "modifier"; } | { end: PoolEnd; name: "drop"; qty: EncodedNumber; type: "modifier"; } | { end: PoolEnd; name: "keep"; qty: EncodedNumber; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "re-roll"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "unique"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "critical-success"; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "critical-failure"; type: "modifier"; } | { direction: SortDirection; name: "sort"; type: "modifier"; } | { name: "max"; type: "modifier"; value: EncodedNumber; } | { name: "min"; type: "modifier"; value: EncodedNumber; })[]; type: "group"; } | { left: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; op: "+" | "-" | "*" | "/" | "%" | "^"; right: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "binary"; } | { readonly type: "unary"; readonly op: "-"; readonly operand: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... | { expression: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "paren"; } | { args: readonly { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...[]; name: "abs" | "ceil" | "cos" | "exp" | "floor" | "log" | "round" | "sign" | "sin" | "sqrt" | "tan" | "pow" | "max" | "min" | "trunc"; type: "function"; }; type: "unary"; }; operand: { readonly type: "number"; readonly node: { readonly type: "number"; readonly value: EncodedNumber; }; readonly value: EncodedNumber; } | { readonly type: "pool"; ... 5 more ...; readonly rolls: readonly { ...; }[]; } | ... 4 more ... | { ...; }; type: "unary"; value: EncodedNumber; } | { inner: { readonly type: "number"; readonly node: { readonly type: "number"; readonly value: EncodedNumber; }; readonly value: EncodedNumber; } | { readonly type: "pool"; ... 5 more ...; readonly rolls: readonly { ...; }[]; } | ... 4 more ... | { ...; }; node: { expression: { type: "number"; value: EncodedNumber; } | { description?: { style: DescriptionStyle; text: string; }; die: { args: readonly { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...[]; name: string; type: "die"; }; modifiers: readonly ({ comparePoint?: { operator: ...; value: ...; }; compound: boolean; name: "explode"; penetrate: boolean; type: "modifier"; } | { failure?: { operator: ...; value: ...; }; name: "target"; success: { operator: ... | ... | ... | ... | ... | ... | ...; value: EncodedNumber; }; type: "modifier"; } | { end: PoolEnd; name: "drop"; qty: EncodedNumber; type: "modifier"; } | { end: PoolEnd; name: "keep"; qty: EncodedNumber; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "re-roll"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "unique"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "critical-success"; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "critical-failure"; type: "modifier"; } | { direction: SortDirection; name: "sort"; type: "modifier"; } | { name: "max"; type: "modifier"; value: EncodedNumber; } | { name: "min"; type: "modifier"; value: EncodedNumber; })[]; qty: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "pool"; } | { description?: { style: DescriptionStyle; text: string; }; expressions: readonly { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...[]; modifiers: readonly ({ comparePoint?: { operator: ...; value: ...; }; compound: boolean; name: "explode"; penetrate: boolean; type: "modifier"; } | { failure?: { operator: ...; value: ...; }; name: "target"; success: { operator: ... | ... | ... | ... | ... | ... | ...; value: EncodedNumber; }; type: "modifier"; } | { end: PoolEnd; name: "drop"; qty: EncodedNumber; type: "modifier"; } | { end: PoolEnd; name: "keep"; qty: EncodedNumber; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "re-roll"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "unique"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "critical-success"; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "critical-failure"; type: "modifier"; } | { direction: SortDirection; name: "sort"; type: "modifier"; } | { name: "max"; type: "modifier"; value: EncodedNumber; } | { name: "min"; type: "modifier"; value: EncodedNumber; })[]; type: "group"; } | { left: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; op: "+" | "-" | "*" | "/" | "%" | "^"; right: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "binary"; } | { op: "-"; operand: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "unary"; } | { readonly type: "paren"; readonly expression: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... ... | { args: readonly { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...[]; name: "abs" | "ceil" | "cos" | "exp" | "floor" | "log" | "round" | "sign" | "sin" | "sqrt" | "tan" | "pow" | "max" | "min" | "trunc"; type: "function"; }; type: "paren"; }; type: "paren"; value: EncodedNumber; } | { args: readonly { readonly type: "number"; readonly node: { readonly type: "number"; readonly value: EncodedNumber; }; readonly value: EncodedNumber; } | { readonly type: "pool"; ... 5 more ...; readonly rolls: readonly { ...; }[]; } | ... 4 more ... | { ...; }[]; node: { args: readonly ({ type: "number"; value: EncodedNumber; } | { description?: { style: DescriptionStyle; text: string; }; die: { args: readonly ({ readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?:...; name: string; type: "die"; }; modifiers: readonly ({ comparePoint?: ... | ...; compound: boolean; name: "explode"; penetrate: boolean; type: "modifier"; } | { failure?: ... | ...; name: "target"; success: { operator: ...; value: ...; }; type: "modifier"; } | { end: PoolEnd; name: "drop"; qty: EncodedNumber; type: "modifier"; } | { end: PoolEnd; name: "keep"; qty: EncodedNumber; type: "modifier"; } | { comparePoint?: ... | ...; name: "re-roll"; once: boolean; type: "modifier"; } | { comparePoint?: ... | ...; name: "unique"; once: boolean; type: "modifier"; } | { comparePoint?: ... | ...; name: "critical-success"; type: "modifier"; } | { comparePoint?: ... | ...; name: "critical-failure"; type: "modifier"; } | { direction: SortDirection; name: "sort"; type: "modifier"; } | { name: "max"; type: "modifier"; value: EncodedNumber; } | { name: "min"; type: "modifier"; value: EncodedNumber; })[]; qty: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "pool"; } | { description?: { style: DescriptionStyle; text: string; }; expressions: readonly ({ readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?:...; modifiers: readonly ({ comparePoint?: ... | ...; compound: boolean; name: "explode"; penetrate: boolean; type: "modifier"; } | { failure?: ... | ...; name: "target"; success: { operator: ...; value: ...; }; type: "modifier"; } | { end: PoolEnd; name: "drop"; qty: EncodedNumber; type: "modifier"; } | { end: PoolEnd; name: "keep"; qty: EncodedNumber; type: "modifier"; } | { comparePoint?: ... | ...; name: "re-roll"; once: boolean; type: "modifier"; } | { comparePoint?: ... | ...; name: "unique"; once: boolean; type: "modifier"; } | { comparePoint?: ... | ...; name: "critical-success"; type: "modifier"; } | { comparePoint?: ... | ...; name: "critical-failure"; type: "modifier"; } | { direction: SortDirection; name: "sort"; type: "modifier"; } | { name: "max"; type: "modifier"; value: EncodedNumber; } | { name: "min"; type: "modifier"; value: EncodedNumber; })[]; type: "group"; } | { left: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; op: "+" | "-" | "*" | "/" | "%" | "^"; right: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "binary"; } | { op: "-"; operand: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "unary"; } | { expression: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "paren"; } | { readonly type: "function"; readonly name: "abs" | "ceil" | "cos" | "exp" | "floor" | "log" | "round" | "sign" | "sin" | "sqrt" | "tan" | "pow" | "max" | "min" | "trunc"; readonly args: readonly ({ readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | ...)[]; })[]; name: "abs" | "ceil" | "cos" | "exp" | "floor" | "log" | "round" | "sign" | "sin" | "sqrt" | "tan" | "pow" | "max" | "min" | "trunc"; type: "function"; }; type: "function"; value: EncodedNumber; }

Union Members ​
Type Literal ​

{ node: { type: "number"; value: EncodedNumber; }; type: "number"; value: EncodedNumber; }


Type Literal ​

{ die: { average: EncodedNumber; faceCount: EncodedNumber; max: EncodedNumber; min: EncodedNumber; notation: string; }; dieArgs: readonly { readonly type: "number"; readonly node: { readonly type: "number"; readonly value: EncodedNumber; }; readonly value: EncodedNumber; } | { readonly type: "pool"; ... 5 more ...; readonly rolls: readonly { ...; }[]; } | ... 4 more ... | { ...; }[]; node: { description?: { style: DescriptionStyle; text: string; }; die: { args: readonly ({ type: "number"; value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... | { readonly type: "group"; readonly expressions: readonly ({ readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; })[]; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ... | { description?: { style: DescriptionStyle; text: string; }; expressions: readonly ({ readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?:...; modifiers: readonly ({ comparePoint?: ...; compound: ...; name: ...; penetrate: ...; type: ...; } | { failure?: ...; name: ...; success: ...; type: ...; } | { end: ...; name: ...; qty: ...; type: ...; } | { end: ...; name: ...; qty: ...; type: ...; } | { comparePoint?: ...; name: ...; once: ...; type: ...; } | { comparePoint?: ...; name: ...; once: ...; type: ...; } | { comparePoint?: ...; name: ...; type: ...; } | { comparePoint?: ...; name: ...; type: ...; } | { direction: ...; name: ...; type: ...; } | { name: ...; type: ...; value: ...; } | { name: ...; type: ...; value: ...; })[]; type: "group"; } | { left: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; op: "+" | "-" | "*" | "/" | "%" | "^"; right: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "binary"; } | { op: "-"; operand: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "unary"; } | { expression: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "paren"; } | { args: readonly ({ readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?:...; name: "abs" | "ceil" | "cos" | "exp" | "floor" | "log" | "round" | "sign" | "sin" | "sqrt" | "tan" | "pow" | "max" | "min" | "trunc"; type: "function"; })[]; name: string; type: "die"; }; modifiers: readonly ({ comparePoint?: { operator: "=" | "!=" | "<>" | "<" | ">" | "<=" | ">="; value: EncodedNumber; }; compound: boolean; name: "explode"; penetrate: boolean; type: "modifier"; } | { failure?: { operator: "=" | "!=" | "<>" | "<" | ">" | "<=" | ">="; value: EncodedNumber; }; name: "target"; success: { operator: "=" | "!=" | "<>" | "<" | ">" | "<=" | ">="; value: EncodedNumber; }; type: "modifier"; } | { end: PoolEnd; name: "drop"; qty: EncodedNumber; type: "modifier"; } | { end: PoolEnd; name: "keep"; qty: EncodedNumber; type: "modifier"; } | { comparePoint?: { operator: "=" | "!=" | "<>" | "<" | ">" | "<=" | ">="; value: EncodedNumber; }; name: "re-roll"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: "=" | "!=" | "<>" | "<" | ">" | "<=" | ">="; value: EncodedNumber; }; name: "unique"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: "=" | "!=" | "<>" | "<" | ">" | "<=" | ">="; value: EncodedNumber; }; name: "critical-success"; type: "modifier"; } | { comparePoint?: { operator: "=" | "!=" | "<>" | "<" | ">" | "<=" | ">="; value: EncodedNumber; }; name: "critical-failure"; type: "modifier"; } | { direction: SortDirection; name: "sort"; type: "modifier"; } | { name: "max"; type: "modifier"; value: EncodedNumber; } | { name: "min"; type: "modifier"; value: EncodedNumber; })[]; qty: { type: "number"; value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... | { readonly type: "group"; readonly expressions: readonly ({ readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; })[]; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ... | { description?: { style: DescriptionStyle; text: string; }; expressions: readonly { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...[]; modifiers: readonly ({ comparePoint?: { operator: ...; value: ...; }; compound: boolean; name: "explode"; penetrate: boolean; type: "modifier"; } | { failure?: { operator: ...; value: ...; }; name: "target"; success: { operator: ... | ... | ... | ... | ... | ... | ...; value: EncodedNumber; }; type: "modifier"; } | { end: PoolEnd; name: "drop"; qty: EncodedNumber; type: "modifier"; } | { end: PoolEnd; name: "keep"; qty: EncodedNumber; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "re-roll"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "unique"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "critical-success"; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "critical-failure"; type: "modifier"; } | { direction: SortDirection; name: "sort"; type: "modifier"; } | { name: "max"; type: "modifier"; value: EncodedNumber; } | { name: "min"; type: "modifier"; value: EncodedNumber; })[]; type: "group"; } | { left: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; op: "+" | "-" | "*" | "/" | "%" | "^"; right: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "binary"; } | { op: "-"; operand: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "unary"; } | { expression: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "paren"; } | { args: readonly { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...[]; name: "abs" | "ceil" | "cos" | "exp" | "floor" | "log" | "round" | "sign" | "sin" | "sqrt" | "tan" | "pow" | "max" | "min" | "trunc"; type: "function"; }; type: "pool"; }; qty: { readonly type: "number"; readonly node: { readonly type: "number"; readonly value: EncodedNumber; }; readonly value: EncodedNumber; } | { readonly type: "pool"; ... 5 more ...; readonly rolls: readonly { ...; }[]; } | ... 4 more ... | { ...; }; rolls: readonly object[]; type: "pool"; value: EncodedNumber; }

die ​

readonly die: object

The values of the die the factory created, for presenters.

die.average ​

readonly average: EncodedNumber

die.faceCount ​

readonly faceCount: EncodedNumber

die.max ​

readonly max: EncodedNumber

die.min ​

readonly min: EncodedNumber

die.notation ​

readonly notation: string

dieArgs ​

readonly dieArgs: readonly { readonly type: "number"; readonly node: { readonly type: "number"; readonly value: EncodedNumber; }; readonly value: EncodedNumber; } | { readonly type: "pool"; ... 5 more ...; readonly rolls: readonly { ...; }[]; } | ... 4 more ... | { ...; }[]

The evaluated node.die.args, e.g. the 6 in d6 or the (2+3) in d(2+3).

node ​

readonly node: object

node.description? ​

readonly optional description?: object

node.description.style ​

readonly style: DescriptionStyle

node.description.text ​

readonly text: string

node.die ​

readonly die: object

node.die.args ​

readonly args: readonly ({ type: "number"; value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... | { readonly type: "group"; readonly expressions: readonly ({ readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; })[]; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ... | { description?: { style: DescriptionStyle; text: string; }; expressions: readonly ({ readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?:...; modifiers: readonly ({ comparePoint?: ...; compound: ...; name: ...; penetrate: ...; type: ...; } | { failure?: ...; name: ...; success: ...; type: ...; } | { end: ...; name: ...; qty: ...; type: ...; } | { end: ...; name: ...; qty: ...; type: ...; } | { comparePoint?: ...; name: ...; once: ...; type: ...; } | { comparePoint?: ...; name: ...; once: ...; type: ...; } | { comparePoint?: ...; name: ...; type: ...; } | { comparePoint?: ...; name: ...; type: ...; } | { direction: ...; name: ...; type: ...; } | { name: ...; type: ...; value: ...; } | { name: ...; type: ...; value: ...; })[]; type: "group"; } | { left: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; op: "+" | "-" | "*" | "/" | "%" | "^"; right: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "binary"; } | { op: "-"; operand: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "unary"; } | { expression: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "paren"; } | { args: readonly ({ readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?:...; name: "abs" | "ceil" | "cos" | "exp" | "floor" | "log" | "round" | "sign" | "sin" | "sqrt" | "tan" | "pow" | "max" | "min" | "trunc"; type: "function"; })[]

node.die.name ​

readonly name: string

The registered name: a BuiltInDieName, or the name of a user-registered die.

node.die.type ​

readonly type: "die"

node.modifiers ​

readonly modifiers: readonly ({ comparePoint?: { operator: "=" | "!=" | "<>" | "<" | ">" | "<=" | ">="; value: EncodedNumber; }; compound: boolean; name: "explode"; penetrate: boolean; type: "modifier"; } | { failure?: { operator: "=" | "!=" | "<>" | "<" | ">" | "<=" | ">="; value: EncodedNumber; }; name: "target"; success: { operator: "=" | "!=" | "<>" | "<" | ">" | "<=" | ">="; value: EncodedNumber; }; type: "modifier"; } | { end: PoolEnd; name: "drop"; qty: EncodedNumber; type: "modifier"; } | { end: PoolEnd; name: "keep"; qty: EncodedNumber; type: "modifier"; } | { comparePoint?: { operator: "=" | "!=" | "<>" | "<" | ">" | "<=" | ">="; value: EncodedNumber; }; name: "re-roll"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: "=" | "!=" | "<>" | "<" | ">" | "<=" | ">="; value: EncodedNumber; }; name: "unique"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: "=" | "!=" | "<>" | "<" | ">" | "<=" | ">="; value: EncodedNumber; }; name: "critical-success"; type: "modifier"; } | { comparePoint?: { operator: "=" | "!=" | "<>" | "<" | ">" | "<=" | ">="; value: EncodedNumber; }; name: "critical-failure"; type: "modifier"; } | { direction: SortDirection; name: "sort"; type: "modifier"; } | { name: "max"; type: "modifier"; value: EncodedNumber; } | { name: "min"; type: "modifier"; value: EncodedNumber; })[]

In notation order after deduplication; handlers may execute in a different order.

node.qty ​

readonly qty: { type: "number"; value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... | { readonly type: "group"; readonly expressions: readonly ({ readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; })[]; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ... | { description?: { style: DescriptionStyle; text: string; }; expressions: readonly { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...[]; modifiers: readonly ({ comparePoint?: { operator: ...; value: ...; }; compound: boolean; name: "explode"; penetrate: boolean; type: "modifier"; } | { failure?: { operator: ...; value: ...; }; name: "target"; success: { operator: ... | ... | ... | ... | ... | ... | ...; value: EncodedNumber; }; type: "modifier"; } | { end: PoolEnd; name: "drop"; qty: EncodedNumber; type: "modifier"; } | { end: PoolEnd; name: "keep"; qty: EncodedNumber; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "re-roll"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "unique"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "critical-success"; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "critical-failure"; type: "modifier"; } | { direction: SortDirection; name: "sort"; type: "modifier"; } | { name: "max"; type: "modifier"; value: EncodedNumber; } | { name: "min"; type: "modifier"; value: EncodedNumber; })[]; type: "group"; } | { left: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; op: "+" | "-" | "*" | "/" | "%" | "^"; right: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "binary"; } | { op: "-"; operand: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "unary"; } | { expression: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "paren"; } | { args: readonly { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...[]; name: "abs" | "ceil" | "cos" | "exp" | "floor" | "log" | "round" | "sign" | "sin" | "sqrt" | "tan" | "pow" | "max" | "min" | "trunc"; type: "function"; }

The number of dice; a NumberNode for literal quantities.

node.type ​

readonly type: "pool"

qty ​

readonly qty: { readonly type: "number"; readonly node: { readonly type: "number"; readonly value: EncodedNumber; }; readonly value: EncodedNumber; } | { readonly type: "pool"; ... 5 more ...; readonly rolls: readonly { ...; }[]; } | ... 4 more ... | { ...; }

rolls ​

readonly rolls: readonly object[]

type ​

readonly type: "pool"

value ​

readonly value: EncodedNumber

The sum of calculationValue for the rolls that are useInTotal.


Type Literal ​

{ members: readonly object[]; node: { description?: { style: DescriptionStyle; text: string; }; expressions: readonly ({ type: "number"; value: EncodedNumber; } | { description?: { style: DescriptionStyle; text: string; }; die: { args: readonly ({ readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?:...; name: string; type: "die"; }; modifiers: readonly ({ comparePoint?: ... | ...; compound: boolean; name: "explode"; penetrate: boolean; type: "modifier"; } | { failure?: ... | ...; name: "target"; success: { operator: ...; value: ...; }; type: "modifier"; } | { end: PoolEnd; name: "drop"; qty: EncodedNumber; type: "modifier"; } | { end: PoolEnd; name: "keep"; qty: EncodedNumber; type: "modifier"; } | { comparePoint?: ... | ...; name: "re-roll"; once: boolean; type: "modifier"; } | { comparePoint?: ... | ...; name: "unique"; once: boolean; type: "modifier"; } | { comparePoint?: ... | ...; name: "critical-success"; type: "modifier"; } | { comparePoint?: ... | ...; name: "critical-failure"; type: "modifier"; } | { direction: SortDirection; name: "sort"; type: "modifier"; } | { name: "max"; type: "modifier"; value: EncodedNumber; } | { name: "min"; type: "modifier"; value: EncodedNumber; })[]; qty: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "pool"; } | { readonly type: "group"; readonly expressions: readonly ({ readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... ... | { left: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; op: "+" | "-" | "*" | "/" | "%" | "^"; right: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "binary"; } | { op: "-"; operand: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "unary"; } | { expression: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "paren"; } | { args: readonly ({ readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?:...; name: "abs" | "ceil" | "cos" | "exp" | "floor" | "log" | "round" | "sign" | "sin" | "sqrt" | "tan" | "pow" | "max" | "min" | "trunc"; type: "function"; })[]; modifiers: readonly ({ comparePoint?: { operator: "=" | "!=" | "<>" | "<" | ">" | "<=" | ">="; value: EncodedNumber; }; compound: boolean; name: "explode"; penetrate: boolean; type: "modifier"; } | { failure?: { operator: "=" | "!=" | "<>" | "<" | ">" | "<=" | ">="; value: EncodedNumber; }; name: "target"; success: { operator: "=" | "!=" | "<>" | "<" | ">" | "<=" | ">="; value: EncodedNumber; }; type: "modifier"; } | { end: PoolEnd; name: "drop"; qty: EncodedNumber; type: "modifier"; } | { end: PoolEnd; name: "keep"; qty: EncodedNumber; type: "modifier"; } | { comparePoint?: { operator: "=" | "!=" | "<>" | "<" | ">" | "<=" | ">="; value: EncodedNumber; }; name: "re-roll"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: "=" | "!=" | "<>" | "<" | ">" | "<=" | ">="; value: EncodedNumber; }; name: "unique"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: "=" | "!=" | "<>" | "<" | ">" | "<=" | ">="; value: EncodedNumber; }; name: "critical-success"; type: "modifier"; } | { comparePoint?: { operator: "=" | "!=" | "<>" | "<" | ">" | "<=" | ">="; value: EncodedNumber; }; name: "critical-failure"; type: "modifier"; } | { direction: SortDirection; name: "sort"; type: "modifier"; } | { name: "max"; type: "modifier"; value: EncodedNumber; } | { name: "min"; type: "modifier"; value: EncodedNumber; })[]; type: "group"; }; type: "group"; value: EncodedNumber; }

members ​

readonly members: readonly object[]

node ​

readonly node: object

node.description? ​

readonly optional description?: object

node.description.style ​

readonly style: DescriptionStyle

node.description.text ​

readonly text: string

node.expressions ​

readonly expressions: readonly ({ type: "number"; value: EncodedNumber; } | { description?: { style: DescriptionStyle; text: string; }; die: { args: readonly ({ readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?:...; name: string; type: "die"; }; modifiers: readonly ({ comparePoint?: ... | ...; compound: boolean; name: "explode"; penetrate: boolean; type: "modifier"; } | { failure?: ... | ...; name: "target"; success: { operator: ...; value: ...; }; type: "modifier"; } | { end: PoolEnd; name: "drop"; qty: EncodedNumber; type: "modifier"; } | { end: PoolEnd; name: "keep"; qty: EncodedNumber; type: "modifier"; } | { comparePoint?: ... | ...; name: "re-roll"; once: boolean; type: "modifier"; } | { comparePoint?: ... | ...; name: "unique"; once: boolean; type: "modifier"; } | { comparePoint?: ... | ...; name: "critical-success"; type: "modifier"; } | { comparePoint?: ... | ...; name: "critical-failure"; type: "modifier"; } | { direction: SortDirection; name: "sort"; type: "modifier"; } | { name: "max"; type: "modifier"; value: EncodedNumber; } | { name: "min"; type: "modifier"; value: EncodedNumber; })[]; qty: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "pool"; } | { readonly type: "group"; readonly expressions: readonly ({ readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... ... | { left: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; op: "+" | "-" | "*" | "/" | "%" | "^"; right: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "binary"; } | { op: "-"; operand: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "unary"; } | { expression: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "paren"; } | { args: readonly ({ readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?:...; name: "abs" | "ceil" | "cos" | "exp" | "floor" | "log" | "round" | "sign" | "sin" | "sqrt" | "tan" | "pow" | "max" | "min" | "trunc"; type: "function"; })[]

node.modifiers ​

readonly modifiers: readonly ({ comparePoint?: { operator: "=" | "!=" | "<>" | "<" | ">" | "<=" | ">="; value: EncodedNumber; }; compound: boolean; name: "explode"; penetrate: boolean; type: "modifier"; } | { failure?: { operator: "=" | "!=" | "<>" | "<" | ">" | "<=" | ">="; value: EncodedNumber; }; name: "target"; success: { operator: "=" | "!=" | "<>" | "<" | ">" | "<=" | ">="; value: EncodedNumber; }; type: "modifier"; } | { end: PoolEnd; name: "drop"; qty: EncodedNumber; type: "modifier"; } | { end: PoolEnd; name: "keep"; qty: EncodedNumber; type: "modifier"; } | { comparePoint?: { operator: "=" | "!=" | "<>" | "<" | ">" | "<=" | ">="; value: EncodedNumber; }; name: "re-roll"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: "=" | "!=" | "<>" | "<" | ">" | "<=" | ">="; value: EncodedNumber; }; name: "unique"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: "=" | "!=" | "<>" | "<" | ">" | "<=" | ">="; value: EncodedNumber; }; name: "critical-success"; type: "modifier"; } | { comparePoint?: { operator: "=" | "!=" | "<>" | "<" | ">" | "<=" | ">="; value: EncodedNumber; }; name: "critical-failure"; type: "modifier"; } | { direction: SortDirection; name: "sort"; type: "modifier"; } | { name: "max"; type: "modifier"; value: EncodedNumber; } | { name: "min"; type: "modifier"; value: EncodedNumber; })[]

node.type ​

readonly type: "group"

type ​

readonly type: "group"

value ​

readonly value: EncodedNumber

The sum of calculationValue for members included in the total.


Type Literal ​

{ left: { readonly type: "number"; readonly node: { readonly type: "number"; readonly value: EncodedNumber; }; readonly value: EncodedNumber; } | { readonly type: "pool"; ... 5 more ...; readonly rolls: readonly { ...; }[]; } | ... 4 more ... | { ...; }; node: { left: { type: "number"; value: EncodedNumber; } | { description?: { style: DescriptionStyle; text: string; }; die: { args: readonly { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...[]; name: string; type: "die"; }; modifiers: readonly ({ comparePoint?: { operator: ...; value: ...; }; compound: boolean; name: "explode"; penetrate: boolean; type: "modifier"; } | { failure?: { operator: ...; value: ...; }; name: "target"; success: { operator: ... | ... | ... | ... | ... | ... | ...; value: EncodedNumber; }; type: "modifier"; } | { end: PoolEnd; name: "drop"; qty: EncodedNumber; type: "modifier"; } | { end: PoolEnd; name: "keep"; qty: EncodedNumber; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "re-roll"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "unique"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "critical-success"; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "critical-failure"; type: "modifier"; } | { direction: SortDirection; name: "sort"; type: "modifier"; } | { name: "max"; type: "modifier"; value: EncodedNumber; } | { name: "min"; type: "modifier"; value: EncodedNumber; })[]; qty: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "pool"; } | { description?: { style: DescriptionStyle; text: string; }; expressions: readonly { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...[]; modifiers: readonly ({ comparePoint?: { operator: ...; value: ...; }; compound: boolean; name: "explode"; penetrate: boolean; type: "modifier"; } | { failure?: { operator: ...; value: ...; }; name: "target"; success: { operator: ... | ... | ... | ... | ... | ... | ...; value: EncodedNumber; }; type: "modifier"; } | { end: PoolEnd; name: "drop"; qty: EncodedNumber; type: "modifier"; } | { end: PoolEnd; name: "keep"; qty: EncodedNumber; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "re-roll"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "unique"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "critical-success"; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "critical-failure"; type: "modifier"; } | { direction: SortDirection; name: "sort"; type: "modifier"; } | { name: "max"; type: "modifier"; value: EncodedNumber; } | { name: "min"; type: "modifier"; value: EncodedNumber; })[]; type: "group"; } | { readonly type: "binary"; readonly op: "+" | "-" | "*" | "/" | "%" | "^"; readonly left: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { ...; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...;... | { op: "-"; operand: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "unary"; } | { expression: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "paren"; } | { args: readonly { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...[]; name: "abs" | "ceil" | "cos" | "exp" | "floor" | "log" | "round" | "sign" | "sin" | "sqrt" | "tan" | "pow" | "max" | "min" | "trunc"; type: "function"; }; op: "+" | "-" | "*" | "/" | "%" | "^"; right: { type: "number"; value: EncodedNumber; } | { description?: { style: DescriptionStyle; text: string; }; die: { args: readonly { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...[]; name: string; type: "die"; }; modifiers: readonly ({ comparePoint?: { operator: ...; value: ...; }; compound: boolean; name: "explode"; penetrate: boolean; type: "modifier"; } | { failure?: { operator: ...; value: ...; }; name: "target"; success: { operator: ... | ... | ... | ... | ... | ... | ...; value: EncodedNumber; }; type: "modifier"; } | { end: PoolEnd; name: "drop"; qty: EncodedNumber; type: "modifier"; } | { end: PoolEnd; name: "keep"; qty: EncodedNumber; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "re-roll"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "unique"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "critical-success"; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "critical-failure"; type: "modifier"; } | { direction: SortDirection; name: "sort"; type: "modifier"; } | { name: "max"; type: "modifier"; value: EncodedNumber; } | { name: "min"; type: "modifier"; value: EncodedNumber; })[]; qty: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "pool"; } | { description?: { style: DescriptionStyle; text: string; }; expressions: readonly { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...[]; modifiers: readonly ({ comparePoint?: { operator: ...; value: ...; }; compound: boolean; name: "explode"; penetrate: boolean; type: "modifier"; } | { failure?: { operator: ...; value: ...; }; name: "target"; success: { operator: ... | ... | ... | ... | ... | ... | ...; value: EncodedNumber; }; type: "modifier"; } | { end: PoolEnd; name: "drop"; qty: EncodedNumber; type: "modifier"; } | { end: PoolEnd; name: "keep"; qty: EncodedNumber; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "re-roll"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "unique"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "critical-success"; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "critical-failure"; type: "modifier"; } | { direction: SortDirection; name: "sort"; type: "modifier"; } | { name: "max"; type: "modifier"; value: EncodedNumber; } | { name: "min"; type: "modifier"; value: EncodedNumber; })[]; type: "group"; } | { readonly type: "binary"; readonly op: "+" | "-" | "*" | "/" | "%" | "^"; readonly left: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { ...; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...;... | { op: "-"; operand: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "unary"; } | { expression: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "paren"; } | { args: readonly { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...[]; name: "abs" | "ceil" | "cos" | "exp" | "floor" | "log" | "round" | "sign" | "sin" | "sqrt" | "tan" | "pow" | "max" | "min" | "trunc"; type: "function"; }; type: "binary"; }; right: { readonly type: "number"; readonly node: { readonly type: "number"; readonly value: EncodedNumber; }; readonly value: EncodedNumber; } | { readonly type: "pool"; ... 5 more ...; readonly rolls: readonly { ...; }[]; } | ... 4 more ... | { ...; }; type: "binary"; value: EncodedNumber; }


Type Literal ​

{ node: { op: "-"; operand: { type: "number"; value: EncodedNumber; } | { description?: { style: DescriptionStyle; text: string; }; die: { args: readonly { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...[]; name: string; type: "die"; }; modifiers: readonly ({ comparePoint?: { operator: ...; value: ...; }; compound: boolean; name: "explode"; penetrate: boolean; type: "modifier"; } | { failure?: { operator: ...; value: ...; }; name: "target"; success: { operator: ... | ... | ... | ... | ... | ... | ...; value: EncodedNumber; }; type: "modifier"; } | { end: PoolEnd; name: "drop"; qty: EncodedNumber; type: "modifier"; } | { end: PoolEnd; name: "keep"; qty: EncodedNumber; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "re-roll"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "unique"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "critical-success"; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "critical-failure"; type: "modifier"; } | { direction: SortDirection; name: "sort"; type: "modifier"; } | { name: "max"; type: "modifier"; value: EncodedNumber; } | { name: "min"; type: "modifier"; value: EncodedNumber; })[]; qty: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "pool"; } | { description?: { style: DescriptionStyle; text: string; }; expressions: readonly { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...[]; modifiers: readonly ({ comparePoint?: { operator: ...; value: ...; }; compound: boolean; name: "explode"; penetrate: boolean; type: "modifier"; } | { failure?: { operator: ...; value: ...; }; name: "target"; success: { operator: ... | ... | ... | ... | ... | ... | ...; value: EncodedNumber; }; type: "modifier"; } | { end: PoolEnd; name: "drop"; qty: EncodedNumber; type: "modifier"; } | { end: PoolEnd; name: "keep"; qty: EncodedNumber; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "re-roll"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "unique"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "critical-success"; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "critical-failure"; type: "modifier"; } | { direction: SortDirection; name: "sort"; type: "modifier"; } | { name: "max"; type: "modifier"; value: EncodedNumber; } | { name: "min"; type: "modifier"; value: EncodedNumber; })[]; type: "group"; } | { left: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; op: "+" | "-" | "*" | "/" | "%" | "^"; right: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "binary"; } | { readonly type: "unary"; readonly op: "-"; readonly operand: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... | { expression: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "paren"; } | { args: readonly { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...[]; name: "abs" | "ceil" | "cos" | "exp" | "floor" | "log" | "round" | "sign" | "sin" | "sqrt" | "tan" | "pow" | "max" | "min" | "trunc"; type: "function"; }; type: "unary"; }; operand: { readonly type: "number"; readonly node: { readonly type: "number"; readonly value: EncodedNumber; }; readonly value: EncodedNumber; } | { readonly type: "pool"; ... 5 more ...; readonly rolls: readonly { ...; }[]; } | ... 4 more ... | { ...; }; type: "unary"; value: EncodedNumber; }


Type Literal ​

{ inner: { readonly type: "number"; readonly node: { readonly type: "number"; readonly value: EncodedNumber; }; readonly value: EncodedNumber; } | { readonly type: "pool"; ... 5 more ...; readonly rolls: readonly { ...; }[]; } | ... 4 more ... | { ...; }; node: { expression: { type: "number"; value: EncodedNumber; } | { description?: { style: DescriptionStyle; text: string; }; die: { args: readonly { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...[]; name: string; type: "die"; }; modifiers: readonly ({ comparePoint?: { operator: ...; value: ...; }; compound: boolean; name: "explode"; penetrate: boolean; type: "modifier"; } | { failure?: { operator: ...; value: ...; }; name: "target"; success: { operator: ... | ... | ... | ... | ... | ... | ...; value: EncodedNumber; }; type: "modifier"; } | { end: PoolEnd; name: "drop"; qty: EncodedNumber; type: "modifier"; } | { end: PoolEnd; name: "keep"; qty: EncodedNumber; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "re-roll"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "unique"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "critical-success"; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "critical-failure"; type: "modifier"; } | { direction: SortDirection; name: "sort"; type: "modifier"; } | { name: "max"; type: "modifier"; value: EncodedNumber; } | { name: "min"; type: "modifier"; value: EncodedNumber; })[]; qty: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "pool"; } | { description?: { style: DescriptionStyle; text: string; }; expressions: readonly { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...[]; modifiers: readonly ({ comparePoint?: { operator: ...; value: ...; }; compound: boolean; name: "explode"; penetrate: boolean; type: "modifier"; } | { failure?: { operator: ...; value: ...; }; name: "target"; success: { operator: ... | ... | ... | ... | ... | ... | ...; value: EncodedNumber; }; type: "modifier"; } | { end: PoolEnd; name: "drop"; qty: EncodedNumber; type: "modifier"; } | { end: PoolEnd; name: "keep"; qty: EncodedNumber; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "re-roll"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "unique"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "critical-success"; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "critical-failure"; type: "modifier"; } | { direction: SortDirection; name: "sort"; type: "modifier"; } | { name: "max"; type: "modifier"; value: EncodedNumber; } | { name: "min"; type: "modifier"; value: EncodedNumber; })[]; type: "group"; } | { left: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; op: "+" | "-" | "*" | "/" | "%" | "^"; right: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "binary"; } | { op: "-"; operand: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "unary"; } | { readonly type: "paren"; readonly expression: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... ... | { args: readonly { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...[]; name: "abs" | "ceil" | "cos" | "exp" | "floor" | "log" | "round" | "sign" | "sin" | "sqrt" | "tan" | "pow" | "max" | "min" | "trunc"; type: "function"; }; type: "paren"; }; type: "paren"; value: EncodedNumber; }


Type Literal ​

{ args: readonly { readonly type: "number"; readonly node: { readonly type: "number"; readonly value: EncodedNumber; }; readonly value: EncodedNumber; } | { readonly type: "pool"; ... 5 more ...; readonly rolls: readonly { ...; }[]; } | ... 4 more ... | { ...; }[]; node: { args: readonly ({ type: "number"; value: EncodedNumber; } | { description?: { style: DescriptionStyle; text: string; }; die: { args: readonly ({ readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?:...; name: string; type: "die"; }; modifiers: readonly ({ comparePoint?: ... | ...; compound: boolean; name: "explode"; penetrate: boolean; type: "modifier"; } | { failure?: ... | ...; name: "target"; success: { operator: ...; value: ...; }; type: "modifier"; } | { end: PoolEnd; name: "drop"; qty: EncodedNumber; type: "modifier"; } | { end: PoolEnd; name: "keep"; qty: EncodedNumber; type: "modifier"; } | { comparePoint?: ... | ...; name: "re-roll"; once: boolean; type: "modifier"; } | { comparePoint?: ... | ...; name: "unique"; once: boolean; type: "modifier"; } | { comparePoint?: ... | ...; name: "critical-success"; type: "modifier"; } | { comparePoint?: ... | ...; name: "critical-failure"; type: "modifier"; } | { direction: SortDirection; name: "sort"; type: "modifier"; } | { name: "max"; type: "modifier"; value: EncodedNumber; } | { name: "min"; type: "modifier"; value: EncodedNumber; })[]; qty: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "pool"; } | { description?: { style: DescriptionStyle; text: string; }; expressions: readonly ({ readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?:...; modifiers: readonly ({ comparePoint?: ... | ...; compound: boolean; name: "explode"; penetrate: boolean; type: "modifier"; } | { failure?: ... | ...; name: "target"; success: { operator: ...; value: ...; }; type: "modifier"; } | { end: PoolEnd; name: "drop"; qty: EncodedNumber; type: "modifier"; } | { end: PoolEnd; name: "keep"; qty: EncodedNumber; type: "modifier"; } | { comparePoint?: ... | ...; name: "re-roll"; once: boolean; type: "modifier"; } | { comparePoint?: ... | ...; name: "unique"; once: boolean; type: "modifier"; } | { comparePoint?: ... | ...; name: "critical-success"; type: "modifier"; } | { comparePoint?: ... | ...; name: "critical-failure"; type: "modifier"; } | { direction: SortDirection; name: "sort"; type: "modifier"; } | { name: "max"; type: "modifier"; value: EncodedNumber; } | { name: "min"; type: "modifier"; value: EncodedNumber; })[]; type: "group"; } | { left: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; op: "+" | "-" | "*" | "/" | "%" | "^"; right: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "binary"; } | { op: "-"; operand: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "unary"; } | { expression: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "paren"; } | { readonly type: "function"; readonly name: "abs" | "ceil" | "cos" | "exp" | "floor" | "log" | "round" | "sign" | "sin" | "sqrt" | "tan" | "pow" | "max" | "min" | "trunc"; readonly args: readonly ({ readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | ...)[]; })[]; name: "abs" | "ceil" | "cos" | "exp" | "floor" | "log" | "round" | "sign" | "sin" | "sqrt" | "tan" | "pow" | "max" | "min" | "trunc"; type: "function"; }; type: "function"; value: EncodedNumber; }

total ​

readonly total: EncodedNumber

type ​

readonly type: "roll"

version ​

readonly version: 1


toString() ​

toString(): string

Defined in: src/Roll.ts:197

Always the default TextPresenter output.

Returns ​

string


fromJSON() ​

static fromJSON<T>(data, options?): Roll<T>

Defined in: src/Roll.ts:128

Creates a roll from exported data (e.g. from toJSON()), without rolling.

The options are used by reroll(). Pools refer to their die by factory name, so re-rolling uses the die registered under that name in these settings.

Type Parameters ​

T ​

T = string

Parameters ​

data ​
averageTotal ​

EncodedNumber

maxTotal ​

EncodedNumber

minTotal ​

EncodedNumber

notation ​

string

result ​

{ node: { type: "number"; value: EncodedNumber; }; type: "number"; value: EncodedNumber; } | { die: { average: EncodedNumber; faceCount: EncodedNumber; max: EncodedNumber; min: EncodedNumber; notation: string; }; dieArgs: readonly { readonly type: "number"; readonly node: { readonly type: "number"; readonly value: EncodedNumber; }; readonly value: EncodedNumber; } | { readonly type: "pool"; ... 5 more ...; readonly rolls: readonly { ...; }[]; } | ... 4 more ... | { ...; }[]; node: { description?: { style: DescriptionStyle; text: string; }; die: { args: readonly ({ type: "number"; value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... | { readonly type: "group"; readonly expressions: readonly ({ readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; })[]; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ... | { description?: { style: DescriptionStyle; text: string; }; expressions: readonly ({ readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?:...; modifiers: readonly ({ comparePoint?: ...; compound: ...; name: ...; penetrate: ...; type: ...; } | { failure?: ...; name: ...; success: ...; type: ...; } | { end: ...; name: ...; qty: ...; type: ...; } | { end: ...; name: ...; qty: ...; type: ...; } | { comparePoint?: ...; name: ...; once: ...; type: ...; } | { comparePoint?: ...; name: ...; once: ...; type: ...; } | { comparePoint?: ...; name: ...; type: ...; } | { comparePoint?: ...; name: ...; type: ...; } | { direction: ...; name: ...; type: ...; } | { name: ...; type: ...; value: ...; } | { name: ...; type: ...; value: ...; })[]; type: "group"; } | { left: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; op: "+" | "-" | "*" | "/" | "%" | "^"; right: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "binary"; } | { op: "-"; operand: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "unary"; } | { expression: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "paren"; } | { args: readonly ({ readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?:...; name: "abs" | "ceil" | "cos" | "exp" | "floor" | "log" | "round" | "sign" | "sin" | "sqrt" | "tan" | "pow" | "max" | "min" | "trunc"; type: "function"; })[]; name: string; type: "die"; }; modifiers: readonly ({ comparePoint?: { operator: "=" | "!=" | "<>" | "<" | ">" | "<=" | ">="; value: EncodedNumber; }; compound: boolean; name: "explode"; penetrate: boolean; type: "modifier"; } | { failure?: { operator: "=" | "!=" | "<>" | "<" | ">" | "<=" | ">="; value: EncodedNumber; }; name: "target"; success: { operator: "=" | "!=" | "<>" | "<" | ">" | "<=" | ">="; value: EncodedNumber; }; type: "modifier"; } | { end: PoolEnd; name: "drop"; qty: EncodedNumber; type: "modifier"; } | { end: PoolEnd; name: "keep"; qty: EncodedNumber; type: "modifier"; } | { comparePoint?: { operator: "=" | "!=" | "<>" | "<" | ">" | "<=" | ">="; value: EncodedNumber; }; name: "re-roll"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: "=" | "!=" | "<>" | "<" | ">" | "<=" | ">="; value: EncodedNumber; }; name: "unique"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: "=" | "!=" | "<>" | "<" | ">" | "<=" | ">="; value: EncodedNumber; }; name: "critical-success"; type: "modifier"; } | { comparePoint?: { operator: "=" | "!=" | "<>" | "<" | ">" | "<=" | ">="; value: EncodedNumber; }; name: "critical-failure"; type: "modifier"; } | { direction: SortDirection; name: "sort"; type: "modifier"; } | { name: "max"; type: "modifier"; value: EncodedNumber; } | { name: "min"; type: "modifier"; value: EncodedNumber; })[]; qty: { type: "number"; value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... | { readonly type: "group"; readonly expressions: readonly ({ readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; })[]; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ... | { description?: { style: DescriptionStyle; text: string; }; expressions: readonly { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...[]; modifiers: readonly ({ comparePoint?: { operator: ...; value: ...; }; compound: boolean; name: "explode"; penetrate: boolean; type: "modifier"; } | { failure?: { operator: ...; value: ...; }; name: "target"; success: { operator: ... | ... | ... | ... | ... | ... | ...; value: EncodedNumber; }; type: "modifier"; } | { end: PoolEnd; name: "drop"; qty: EncodedNumber; type: "modifier"; } | { end: PoolEnd; name: "keep"; qty: EncodedNumber; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "re-roll"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "unique"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "critical-success"; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "critical-failure"; type: "modifier"; } | { direction: SortDirection; name: "sort"; type: "modifier"; } | { name: "max"; type: "modifier"; value: EncodedNumber; } | { name: "min"; type: "modifier"; value: EncodedNumber; })[]; type: "group"; } | { left: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; op: "+" | "-" | "*" | "/" | "%" | "^"; right: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "binary"; } | { op: "-"; operand: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "unary"; } | { expression: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "paren"; } | { args: readonly { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...[]; name: "abs" | "ceil" | "cos" | "exp" | "floor" | "log" | "round" | "sign" | "sin" | "sqrt" | "tan" | "pow" | "max" | "min" | "trunc"; type: "function"; }; type: "pool"; }; qty: { readonly type: "number"; readonly node: { readonly type: "number"; readonly value: EncodedNumber; }; readonly value: EncodedNumber; } | { readonly type: "pool"; ... 5 more ...; readonly rolls: readonly { ...; }[]; } | ... 4 more ... | { ...; }; rolls: readonly object[]; type: "pool"; value: EncodedNumber; } | { members: readonly object[]; node: { description?: { style: DescriptionStyle; text: string; }; expressions: readonly ({ type: "number"; value: EncodedNumber; } | { description?: { style: DescriptionStyle; text: string; }; die: { args: readonly ({ readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?:...; name: string; type: "die"; }; modifiers: readonly ({ comparePoint?: ... | ...; compound: boolean; name: "explode"; penetrate: boolean; type: "modifier"; } | { failure?: ... | ...; name: "target"; success: { operator: ...; value: ...; }; type: "modifier"; } | { end: PoolEnd; name: "drop"; qty: EncodedNumber; type: "modifier"; } | { end: PoolEnd; name: "keep"; qty: EncodedNumber; type: "modifier"; } | { comparePoint?: ... | ...; name: "re-roll"; once: boolean; type: "modifier"; } | { comparePoint?: ... | ...; name: "unique"; once: boolean; type: "modifier"; } | { comparePoint?: ... | ...; name: "critical-success"; type: "modifier"; } | { comparePoint?: ... | ...; name: "critical-failure"; type: "modifier"; } | { direction: SortDirection; name: "sort"; type: "modifier"; } | { name: "max"; type: "modifier"; value: EncodedNumber; } | { name: "min"; type: "modifier"; value: EncodedNumber; })[]; qty: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "pool"; } | { readonly type: "group"; readonly expressions: readonly ({ readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... ... | { left: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; op: "+" | "-" | "*" | "/" | "%" | "^"; right: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "binary"; } | { op: "-"; operand: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "unary"; } | { expression: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "paren"; } | { args: readonly ({ readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?:...; name: "abs" | "ceil" | "cos" | "exp" | "floor" | "log" | "round" | "sign" | "sin" | "sqrt" | "tan" | "pow" | "max" | "min" | "trunc"; type: "function"; })[]; modifiers: readonly ({ comparePoint?: { operator: "=" | "!=" | "<>" | "<" | ">" | "<=" | ">="; value: EncodedNumber; }; compound: boolean; name: "explode"; penetrate: boolean; type: "modifier"; } | { failure?: { operator: "=" | "!=" | "<>" | "<" | ">" | "<=" | ">="; value: EncodedNumber; }; name: "target"; success: { operator: "=" | "!=" | "<>" | "<" | ">" | "<=" | ">="; value: EncodedNumber; }; type: "modifier"; } | { end: PoolEnd; name: "drop"; qty: EncodedNumber; type: "modifier"; } | { end: PoolEnd; name: "keep"; qty: EncodedNumber; type: "modifier"; } | { comparePoint?: { operator: "=" | "!=" | "<>" | "<" | ">" | "<=" | ">="; value: EncodedNumber; }; name: "re-roll"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: "=" | "!=" | "<>" | "<" | ">" | "<=" | ">="; value: EncodedNumber; }; name: "unique"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: "=" | "!=" | "<>" | "<" | ">" | "<=" | ">="; value: EncodedNumber; }; name: "critical-success"; type: "modifier"; } | { comparePoint?: { operator: "=" | "!=" | "<>" | "<" | ">" | "<=" | ">="; value: EncodedNumber; }; name: "critical-failure"; type: "modifier"; } | { direction: SortDirection; name: "sort"; type: "modifier"; } | { name: "max"; type: "modifier"; value: EncodedNumber; } | { name: "min"; type: "modifier"; value: EncodedNumber; })[]; type: "group"; }; type: "group"; value: EncodedNumber; } | { left: { readonly type: "number"; readonly node: { readonly type: "number"; readonly value: EncodedNumber; }; readonly value: EncodedNumber; } | { readonly type: "pool"; ... 5 more ...; readonly rolls: readonly { ...; }[]; } | ... 4 more ... | { ...; }; node: { left: { type: "number"; value: EncodedNumber; } | { description?: { style: DescriptionStyle; text: string; }; die: { args: readonly { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...[]; name: string; type: "die"; }; modifiers: readonly ({ comparePoint?: { operator: ...; value: ...; }; compound: boolean; name: "explode"; penetrate: boolean; type: "modifier"; } | { failure?: { operator: ...; value: ...; }; name: "target"; success: { operator: ... | ... | ... | ... | ... | ... | ...; value: EncodedNumber; }; type: "modifier"; } | { end: PoolEnd; name: "drop"; qty: EncodedNumber; type: "modifier"; } | { end: PoolEnd; name: "keep"; qty: EncodedNumber; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "re-roll"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "unique"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "critical-success"; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "critical-failure"; type: "modifier"; } | { direction: SortDirection; name: "sort"; type: "modifier"; } | { name: "max"; type: "modifier"; value: EncodedNumber; } | { name: "min"; type: "modifier"; value: EncodedNumber; })[]; qty: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "pool"; } | { description?: { style: DescriptionStyle; text: string; }; expressions: readonly { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...[]; modifiers: readonly ({ comparePoint?: { operator: ...; value: ...; }; compound: boolean; name: "explode"; penetrate: boolean; type: "modifier"; } | { failure?: { operator: ...; value: ...; }; name: "target"; success: { operator: ... | ... | ... | ... | ... | ... | ...; value: EncodedNumber; }; type: "modifier"; } | { end: PoolEnd; name: "drop"; qty: EncodedNumber; type: "modifier"; } | { end: PoolEnd; name: "keep"; qty: EncodedNumber; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "re-roll"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "unique"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "critical-success"; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "critical-failure"; type: "modifier"; } | { direction: SortDirection; name: "sort"; type: "modifier"; } | { name: "max"; type: "modifier"; value: EncodedNumber; } | { name: "min"; type: "modifier"; value: EncodedNumber; })[]; type: "group"; } | { readonly type: "binary"; readonly op: "+" | "-" | "*" | "/" | "%" | "^"; readonly left: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { ...; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...;... | { op: "-"; operand: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "unary"; } | { expression: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "paren"; } | { args: readonly { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...[]; name: "abs" | "ceil" | "cos" | "exp" | "floor" | "log" | "round" | "sign" | "sin" | "sqrt" | "tan" | "pow" | "max" | "min" | "trunc"; type: "function"; }; op: "+" | "-" | "*" | "/" | "%" | "^"; right: { type: "number"; value: EncodedNumber; } | { description?: { style: DescriptionStyle; text: string; }; die: { args: readonly { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...[]; name: string; type: "die"; }; modifiers: readonly ({ comparePoint?: { operator: ...; value: ...; }; compound: boolean; name: "explode"; penetrate: boolean; type: "modifier"; } | { failure?: { operator: ...; value: ...; }; name: "target"; success: { operator: ... | ... | ... | ... | ... | ... | ...; value: EncodedNumber; }; type: "modifier"; } | { end: PoolEnd; name: "drop"; qty: EncodedNumber; type: "modifier"; } | { end: PoolEnd; name: "keep"; qty: EncodedNumber; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "re-roll"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "unique"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "critical-success"; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "critical-failure"; type: "modifier"; } | { direction: SortDirection; name: "sort"; type: "modifier"; } | { name: "max"; type: "modifier"; value: EncodedNumber; } | { name: "min"; type: "modifier"; value: EncodedNumber; })[]; qty: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "pool"; } | { description?: { style: DescriptionStyle; text: string; }; expressions: readonly { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...[]; modifiers: readonly ({ comparePoint?: { operator: ...; value: ...; }; compound: boolean; name: "explode"; penetrate: boolean; type: "modifier"; } | { failure?: { operator: ...; value: ...; }; name: "target"; success: { operator: ... | ... | ... | ... | ... | ... | ...; value: EncodedNumber; }; type: "modifier"; } | { end: PoolEnd; name: "drop"; qty: EncodedNumber; type: "modifier"; } | { end: PoolEnd; name: "keep"; qty: EncodedNumber; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "re-roll"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "unique"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "critical-success"; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "critical-failure"; type: "modifier"; } | { direction: SortDirection; name: "sort"; type: "modifier"; } | { name: "max"; type: "modifier"; value: EncodedNumber; } | { name: "min"; type: "modifier"; value: EncodedNumber; })[]; type: "group"; } | { readonly type: "binary"; readonly op: "+" | "-" | "*" | "/" | "%" | "^"; readonly left: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { ...; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...;... | { op: "-"; operand: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "unary"; } | { expression: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "paren"; } | { args: readonly { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...[]; name: "abs" | "ceil" | "cos" | "exp" | "floor" | "log" | "round" | "sign" | "sin" | "sqrt" | "tan" | "pow" | "max" | "min" | "trunc"; type: "function"; }; type: "binary"; }; right: { readonly type: "number"; readonly node: { readonly type: "number"; readonly value: EncodedNumber; }; readonly value: EncodedNumber; } | { readonly type: "pool"; ... 5 more ...; readonly rolls: readonly { ...; }[]; } | ... 4 more ... | { ...; }; type: "binary"; value: EncodedNumber; } | { node: { op: "-"; operand: { type: "number"; value: EncodedNumber; } | { description?: { style: DescriptionStyle; text: string; }; die: { args: readonly { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...[]; name: string; type: "die"; }; modifiers: readonly ({ comparePoint?: { operator: ...; value: ...; }; compound: boolean; name: "explode"; penetrate: boolean; type: "modifier"; } | { failure?: { operator: ...; value: ...; }; name: "target"; success: { operator: ... | ... | ... | ... | ... | ... | ...; value: EncodedNumber; }; type: "modifier"; } | { end: PoolEnd; name: "drop"; qty: EncodedNumber; type: "modifier"; } | { end: PoolEnd; name: "keep"; qty: EncodedNumber; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "re-roll"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "unique"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "critical-success"; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "critical-failure"; type: "modifier"; } | { direction: SortDirection; name: "sort"; type: "modifier"; } | { name: "max"; type: "modifier"; value: EncodedNumber; } | { name: "min"; type: "modifier"; value: EncodedNumber; })[]; qty: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "pool"; } | { description?: { style: DescriptionStyle; text: string; }; expressions: readonly { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...[]; modifiers: readonly ({ comparePoint?: { operator: ...; value: ...; }; compound: boolean; name: "explode"; penetrate: boolean; type: "modifier"; } | { failure?: { operator: ...; value: ...; }; name: "target"; success: { operator: ... | ... | ... | ... | ... | ... | ...; value: EncodedNumber; }; type: "modifier"; } | { end: PoolEnd; name: "drop"; qty: EncodedNumber; type: "modifier"; } | { end: PoolEnd; name: "keep"; qty: EncodedNumber; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "re-roll"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "unique"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "critical-success"; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "critical-failure"; type: "modifier"; } | { direction: SortDirection; name: "sort"; type: "modifier"; } | { name: "max"; type: "modifier"; value: EncodedNumber; } | { name: "min"; type: "modifier"; value: EncodedNumber; })[]; type: "group"; } | { left: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; op: "+" | "-" | "*" | "/" | "%" | "^"; right: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "binary"; } | { readonly type: "unary"; readonly op: "-"; readonly operand: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... | { expression: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "paren"; } | { args: readonly { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...[]; name: "abs" | "ceil" | "cos" | "exp" | "floor" | "log" | "round" | "sign" | "sin" | "sqrt" | "tan" | "pow" | "max" | "min" | "trunc"; type: "function"; }; type: "unary"; }; operand: { readonly type: "number"; readonly node: { readonly type: "number"; readonly value: EncodedNumber; }; readonly value: EncodedNumber; } | { readonly type: "pool"; ... 5 more ...; readonly rolls: readonly { ...; }[]; } | ... 4 more ... | { ...; }; type: "unary"; value: EncodedNumber; } | { inner: { readonly type: "number"; readonly node: { readonly type: "number"; readonly value: EncodedNumber; }; readonly value: EncodedNumber; } | { readonly type: "pool"; ... 5 more ...; readonly rolls: readonly { ...; }[]; } | ... 4 more ... | { ...; }; node: { expression: { type: "number"; value: EncodedNumber; } | { description?: { style: DescriptionStyle; text: string; }; die: { args: readonly { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...[]; name: string; type: "die"; }; modifiers: readonly ({ comparePoint?: { operator: ...; value: ...; }; compound: boolean; name: "explode"; penetrate: boolean; type: "modifier"; } | { failure?: { operator: ...; value: ...; }; name: "target"; success: { operator: ... | ... | ... | ... | ... | ... | ...; value: EncodedNumber; }; type: "modifier"; } | { end: PoolEnd; name: "drop"; qty: EncodedNumber; type: "modifier"; } | { end: PoolEnd; name: "keep"; qty: EncodedNumber; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "re-roll"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "unique"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "critical-success"; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "critical-failure"; type: "modifier"; } | { direction: SortDirection; name: "sort"; type: "modifier"; } | { name: "max"; type: "modifier"; value: EncodedNumber; } | { name: "min"; type: "modifier"; value: EncodedNumber; })[]; qty: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "pool"; } | { description?: { style: DescriptionStyle; text: string; }; expressions: readonly { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...[]; modifiers: readonly ({ comparePoint?: { operator: ...; value: ...; }; compound: boolean; name: "explode"; penetrate: boolean; type: "modifier"; } | { failure?: { operator: ...; value: ...; }; name: "target"; success: { operator: ... | ... | ... | ... | ... | ... | ...; value: EncodedNumber; }; type: "modifier"; } | { end: PoolEnd; name: "drop"; qty: EncodedNumber; type: "modifier"; } | { end: PoolEnd; name: "keep"; qty: EncodedNumber; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "re-roll"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "unique"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "critical-success"; type: "modifier"; } | { comparePoint?: { operator: ...; value: ...; }; name: "critical-failure"; type: "modifier"; } | { direction: SortDirection; name: "sort"; type: "modifier"; } | { name: "max"; type: "modifier"; value: EncodedNumber; } | { name: "min"; type: "modifier"; value: EncodedNumber; })[]; type: "group"; } | { left: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; op: "+" | "-" | "*" | "/" | "%" | "^"; right: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "binary"; } | { op: "-"; operand: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "unary"; } | { readonly type: "paren"; readonly expression: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... ... | { args: readonly { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...[]; name: "abs" | "ceil" | "cos" | "exp" | "floor" | "log" | "round" | "sign" | "sin" | "sqrt" | "tan" | "pow" | "max" | "min" | "trunc"; type: "function"; }; type: "paren"; }; type: "paren"; value: EncodedNumber; } | { args: readonly { readonly type: "number"; readonly node: { readonly type: "number"; readonly value: EncodedNumber; }; readonly value: EncodedNumber; } | { readonly type: "pool"; ... 5 more ...; readonly rolls: readonly { ...; }[]; } | ... 4 more ... | { ...; }[]; node: { args: readonly ({ type: "number"; value: EncodedNumber; } | { description?: { style: DescriptionStyle; text: string; }; die: { args: readonly ({ readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?:...; name: string; type: "die"; }; modifiers: readonly ({ comparePoint?: ... | ...; compound: boolean; name: "explode"; penetrate: boolean; type: "modifier"; } | { failure?: ... | ...; name: "target"; success: { operator: ...; value: ...; }; type: "modifier"; } | { end: PoolEnd; name: "drop"; qty: EncodedNumber; type: "modifier"; } | { end: PoolEnd; name: "keep"; qty: EncodedNumber; type: "modifier"; } | { comparePoint?: ... | ...; name: "re-roll"; once: boolean; type: "modifier"; } | { comparePoint?: ... | ...; name: "unique"; once: boolean; type: "modifier"; } | { comparePoint?: ... | ...; name: "critical-success"; type: "modifier"; } | { comparePoint?: ... | ...; name: "critical-failure"; type: "modifier"; } | { direction: SortDirection; name: "sort"; type: "modifier"; } | { name: "max"; type: "modifier"; value: EncodedNumber; } | { name: "min"; type: "modifier"; value: EncodedNumber; })[]; qty: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "pool"; } | { description?: { style: DescriptionStyle; text: string; }; expressions: readonly ({ readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?:...; modifiers: readonly ({ comparePoint?: ... | ...; compound: boolean; name: "explode"; penetrate: boolean; type: "modifier"; } | { failure?: ... | ...; name: "target"; success: { operator: ...; value: ...; }; type: "modifier"; } | { end: PoolEnd; name: "drop"; qty: EncodedNumber; type: "modifier"; } | { end: PoolEnd; name: "keep"; qty: EncodedNumber; type: "modifier"; } | { comparePoint?: ... | ...; name: "re-roll"; once: boolean; type: "modifier"; } | { comparePoint?: ... | ...; name: "unique"; once: boolean; type: "modifier"; } | { comparePoint?: ... | ...; name: "critical-success"; type: "modifier"; } | { comparePoint?: ... | ...; name: "critical-failure"; type: "modifier"; } | { direction: SortDirection; name: "sort"; type: "modifier"; } | { name: "max"; type: "modifier"; value: EncodedNumber; } | { name: "min"; type: "modifier"; value: EncodedNumber; })[]; type: "group"; } | { left: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; op: "+" | "-" | "*" | "/" | "%" | "^"; right: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "binary"; } | { op: "-"; operand: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "unary"; } | { expression: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "paren"; } | { readonly type: "function"; readonly name: "abs" | "ceil" | "cos" | "exp" | "floor" | "log" | "round" | "sign" | "sin" | "sqrt" | "tan" | "pow" | "max" | "min" | "trunc"; readonly args: readonly ({ readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | ...)[]; })[]; name: "abs" | "ceil" | "cos" | "exp" | "floor" | "log" | "round" | "sign" | "sin" | "sqrt" | "tan" | "pow" | "max" | "min" | "trunc"; type: "function"; }; type: "function"; value: EncodedNumber; }

total ​

EncodedNumber

type ​

"roll"

version ​

1

options? ​

RollOptions<T> | RollSettings<T>

Returns ​

Roll<T>

Throws ​

the data is invalid, or is a history


import() ​

static import<T>(data, options?): Roll<T>

Defined in: src/Roll.ts:140

Imports an exported roll (an object, JSON or base64), without rolling.

Type Parameters ​

T ​

T = string

Parameters ​

data ​

string | { averageTotal: EncodedNumber; maxTotal: EncodedNumber; minTotal: EncodedNumber; notation: string; result: { node: { type: "number"; value: EncodedNumber; }; type: "number"; value: EncodedNumber; } | { die: { average: EncodedNumber; faceCount: EncodedNumber; max: EncodedNumber; min: EncodedNumber; notation: string; }; dieArgs: readonly { readonly type: "number"; readonly node: { readonly type: "number"; readonly value: EncodedNumber; }; readonly value: EncodedNumber; } | { readonly type: "pool"; ... 5 more ...; readonly rolls: readonly { ...; }[]; } | ... 4 more ... | { ...; }[]; node: { description?: { style: DescriptionStyle; text: string; }; die: { args: readonly ({ type: "number"; value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... | { readonly type: "group"; readonly expressions: readonly ({ readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; })[]; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ... | { description?: { style: ...; text: ...; }; expressions: readonly ({ readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?:...; modifiers: readonly (... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ...)[]; type: "group"; } | { left: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; op: "+" | "-" | "*" | "/" | "%" | "^"; right: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "binary"; } | { op: "-"; operand: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "unary"; } | { expression: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "paren"; } | { args: readonly ({ readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?:...; name: "abs" | "ceil" | "cos" | "exp" | "floor" | "log" | "round" | "sign" | "sin" | "sqrt" | "tan" | "pow" | "max" | "min" | "trunc"; type: "function"; })[]; name: string; type: "die"; }; modifiers: readonly ({ comparePoint?: { operator: ... | ... | ... | ... | ... | ... | ...; value: EncodedNumber; }; compound: boolean; name: "explode"; penetrate: boolean; type: "modifier"; } | { failure?: { operator: ... | ... | ... | ... | ... | ... | ...; value: EncodedNumber; }; name: "target"; success: { operator: "=" | "!=" | "<>" | "<" | ">" | "<=" | ">="; value: EncodedNumber; }; type: "modifier"; } | { end: PoolEnd; name: "drop"; qty: EncodedNumber; type: "modifier"; } | { end: PoolEnd; name: "keep"; qty: EncodedNumber; type: "modifier"; } | { comparePoint?: { operator: ... | ... | ... | ... | ... | ... | ...; value: EncodedNumber; }; name: "re-roll"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: ... | ... | ... | ... | ... | ... | ...; value: EncodedNumber; }; name: "unique"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: ... | ... | ... | ... | ... | ... | ...; value: EncodedNumber; }; name: "critical-success"; type: "modifier"; } | { comparePoint?: { operator: ... | ... | ... | ... | ... | ... | ...; value: EncodedNumber; }; name: "critical-failure"; type: "modifier"; } | { direction: SortDirection; name: "sort"; type: "modifier"; } | { name: "max"; type: "modifier"; value: EncodedNumber; } | { name: "min"; type: "modifier"; value: EncodedNumber; })[]; qty: { type: "number"; value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... | { readonly type: "group"; readonly expressions: readonly ({ readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; })[]; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ... | { description?: { style: DescriptionStyle; text: string; }; expressions: readonly { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...[]; modifiers: readonly ({ comparePoint?: ... | ...; compound: boolean; name: "explode"; penetrate: boolean; type: "modifier"; } | { failure?: ... | ...; name: "target"; success: { operator: ...; value: ...; }; type: "modifier"; } | { end: PoolEnd; name: "drop"; qty: EncodedNumber; type: "modifier"; } | { end: PoolEnd; name: "keep"; qty: EncodedNumber; type: "modifier"; } | { comparePoint?: ... | ...; name: "re-roll"; once: boolean; type: "modifier"; } | { comparePoint?: ... | ...; name: "unique"; once: boolean; type: "modifier"; } | { comparePoint?: ... | ...; name: "critical-success"; type: "modifier"; } | { comparePoint?: ... | ...; name: "critical-failure"; type: "modifier"; } | { direction: SortDirection; name: "sort"; type: "modifier"; } | { name: "max"; type: "modifier"; value: EncodedNumber; } | { name: "min"; type: "modifier"; value: EncodedNumber; })[]; type: "group"; } | { left: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; op: "+" | "-" | "*" | "/" | "%" | "^"; right: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "binary"; } | { op: "-"; operand: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "unary"; } | { expression: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "paren"; } | { args: readonly { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...[]; name: "abs" | "ceil" | "cos" | "exp" | "floor" | "log" | "round" | "sign" | "sin" | "sqrt" | "tan" | "pow" | "max" | "min" | "trunc"; type: "function"; }; type: "pool"; }; qty: { readonly type: "number"; readonly node: { readonly type: "number"; readonly value: EncodedNumber; }; readonly value: EncodedNumber; } | { readonly type: "pool"; ... 5 more ...; readonly rolls: readonly { ...; }[]; } | ... 4 more ... | { ...; }; rolls: readonly object[]; type: "pool"; value: EncodedNumber; } | { members: readonly object[]; node: { description?: { style: DescriptionStyle; text: string; }; expressions: readonly ({ type: "number"; value: EncodedNumber; } | { description?: { style: DescriptionStyle; text: string; }; die: { args: readonly ({ readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?:...; name: string; type: "die"; }; modifiers: readonly ({ comparePoint?: ...; compound: ...; name: ...; penetrate: ...; type: ...; } | { failure?: ...; name: ...; success: ...; type: ...; } | { end: ...; name: ...; qty: ...; type: ...; } | { end: ...; name: ...; qty: ...; type: ...; } | { comparePoint?: ...; name: ...; once: ...; type: ...; } | { comparePoint?: ...; name: ...; once: ...; type: ...; } | { comparePoint?: ...; name: ...; type: ...; } | { comparePoint?: ...; name: ...; type: ...; } | { direction: ...; name: ...; type: ...; } | { name: ...; type: ...; value: ...; } | { name: ...; type: ...; value: ...; })[]; qty: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "pool"; } | { readonly type: "group"; readonly expressions: readonly ({ readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... ... | { left: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; op: "+" | "-" | "*" | "/" | "%" | "^"; right: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "binary"; } | { op: "-"; operand: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "unary"; } | { expression: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "paren"; } | { args: readonly ({ readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?:...; name: "abs" | "ceil" | "cos" | "exp" | "floor" | "log" | "round" | "sign" | "sin" | "sqrt" | "tan" | "pow" | "max" | "min" | "trunc"; type: "function"; })[]; modifiers: readonly ({ comparePoint?: { operator: ... | ... | ... | ... | ... | ... | ...; value: EncodedNumber; }; compound: boolean; name: "explode"; penetrate: boolean; type: "modifier"; } | { failure?: { operator: ... | ... | ... | ... | ... | ... | ...; value: EncodedNumber; }; name: "target"; success: { operator: "=" | "!=" | "<>" | "<" | ">" | "<=" | ">="; value: EncodedNumber; }; type: "modifier"; } | { end: PoolEnd; name: "drop"; qty: EncodedNumber; type: "modifier"; } | { end: PoolEnd; name: "keep"; qty: EncodedNumber; type: "modifier"; } | { comparePoint?: { operator: ... | ... | ... | ... | ... | ... | ...; value: EncodedNumber; }; name: "re-roll"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: ... | ... | ... | ... | ... | ... | ...; value: EncodedNumber; }; name: "unique"; once: boolean; type: "modifier"; } | { comparePoint?: { operator: ... | ... | ... | ... | ... | ... | ...; value: EncodedNumber; }; name: "critical-success"; type: "modifier"; } | { comparePoint?: { operator: ... | ... | ... | ... | ... | ... | ...; value: EncodedNumber; }; name: "critical-failure"; type: "modifier"; } | { direction: SortDirection; name: "sort"; type: "modifier"; } | { name: "max"; type: "modifier"; value: EncodedNumber; } | { name: "min"; type: "modifier"; value: EncodedNumber; })[]; type: "group"; }; type: "group"; value: EncodedNumber; } | { left: { readonly type: "number"; readonly node: { readonly type: "number"; readonly value: EncodedNumber; }; readonly value: EncodedNumber; } | { readonly type: "pool"; ... 5 more ...; readonly rolls: readonly { ...; }[]; } | ... 4 more ... | { ...; }; node: { left: { type: "number"; value: EncodedNumber; } | { description?: { style: DescriptionStyle; text: string; }; die: { args: readonly { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...[]; name: string; type: "die"; }; modifiers: readonly ({ comparePoint?: ... | ...; compound: boolean; name: "explode"; penetrate: boolean; type: "modifier"; } | { failure?: ... | ...; name: "target"; success: { operator: ...; value: ...; }; type: "modifier"; } | { end: PoolEnd; name: "drop"; qty: EncodedNumber; type: "modifier"; } | { end: PoolEnd; name: "keep"; qty: EncodedNumber; type: "modifier"; } | { comparePoint?: ... | ...; name: "re-roll"; once: boolean; type: "modifier"; } | { comparePoint?: ... | ...; name: "unique"; once: boolean; type: "modifier"; } | { comparePoint?: ... | ...; name: "critical-success"; type: "modifier"; } | { comparePoint?: ... | ...; name: "critical-failure"; type: "modifier"; } | { direction: SortDirection; name: "sort"; type: "modifier"; } | { name: "max"; type: "modifier"; value: EncodedNumber; } | { name: "min"; type: "modifier"; value: EncodedNumber; })[]; qty: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "pool"; } | { description?: { style: DescriptionStyle; text: string; }; expressions: readonly { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...[]; modifiers: readonly ({ comparePoint?: ... | ...; compound: boolean; name: "explode"; penetrate: boolean; type: "modifier"; } | { failure?: ... | ...; name: "target"; success: { operator: ...; value: ...; }; type: "modifier"; } | { end: PoolEnd; name: "drop"; qty: EncodedNumber; type: "modifier"; } | { end: PoolEnd; name: "keep"; qty: EncodedNumber; type: "modifier"; } | { comparePoint?: ... | ...; name: "re-roll"; once: boolean; type: "modifier"; } | { comparePoint?: ... | ...; name: "unique"; once: boolean; type: "modifier"; } | { comparePoint?: ... | ...; name: "critical-success"; type: "modifier"; } | { comparePoint?: ... | ...; name: "critical-failure"; type: "modifier"; } | { direction: SortDirection; name: "sort"; type: "modifier"; } | { name: "max"; type: "modifier"; value: EncodedNumber; } | { name: "min"; type: "modifier"; value: EncodedNumber; })[]; type: "group"; } | { readonly type: "binary"; readonly op: "+" | "-" | "*" | "/" | "%" | "^"; readonly left: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { ...; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...;... | { op: "-"; operand: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "unary"; } | { expression: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "paren"; } | { args: readonly { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...[]; name: "abs" | "ceil" | "cos" | "exp" | "floor" | "log" | "round" | "sign" | "sin" | "sqrt" | "tan" | "pow" | "max" | "min" | "trunc"; type: "function"; }; op: "+" | "-" | "*" | "/" | "%" | "^"; right: { type: "number"; value: EncodedNumber; } | { description?: { style: DescriptionStyle; text: string; }; die: { args: readonly { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...[]; name: string; type: "die"; }; modifiers: readonly ({ comparePoint?: ... | ...; compound: boolean; name: "explode"; penetrate: boolean; type: "modifier"; } | { failure?: ... | ...; name: "target"; success: { operator: ...; value: ...; }; type: "modifier"; } | { end: PoolEnd; name: "drop"; qty: EncodedNumber; type: "modifier"; } | { end: PoolEnd; name: "keep"; qty: EncodedNumber; type: "modifier"; } | { comparePoint?: ... | ...; name: "re-roll"; once: boolean; type: "modifier"; } | { comparePoint?: ... | ...; name: "unique"; once: boolean; type: "modifier"; } | { comparePoint?: ... | ...; name: "critical-success"; type: "modifier"; } | { comparePoint?: ... | ...; name: "critical-failure"; type: "modifier"; } | { direction: SortDirection; name: "sort"; type: "modifier"; } | { name: "max"; type: "modifier"; value: EncodedNumber; } | { name: "min"; type: "modifier"; value: EncodedNumber; })[]; qty: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "pool"; } | { description?: { style: DescriptionStyle; text: string; }; expressions: readonly { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...[]; modifiers: readonly ({ comparePoint?: ... | ...; compound: boolean; name: "explode"; penetrate: boolean; type: "modifier"; } | { failure?: ... | ...; name: "target"; success: { operator: ...; value: ...; }; type: "modifier"; } | { end: PoolEnd; name: "drop"; qty: EncodedNumber; type: "modifier"; } | { end: PoolEnd; name: "keep"; qty: EncodedNumber; type: "modifier"; } | { comparePoint?: ... | ...; name: "re-roll"; once: boolean; type: "modifier"; } | { comparePoint?: ... | ...; name: "unique"; once: boolean; type: "modifier"; } | { comparePoint?: ... | ...; name: "critical-success"; type: "modifier"; } | { comparePoint?: ... | ...; name: "critical-failure"; type: "modifier"; } | { direction: SortDirection; name: "sort"; type: "modifier"; } | { name: "max"; type: "modifier"; value: EncodedNumber; } | { name: "min"; type: "modifier"; value: EncodedNumber; })[]; type: "group"; } | { readonly type: "binary"; readonly op: "+" | "-" | "*" | "/" | "%" | "^"; readonly left: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { ...; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...;... | { op: "-"; operand: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "unary"; } | { expression: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "paren"; } | { args: readonly { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...[]; name: "abs" | "ceil" | "cos" | "exp" | "floor" | "log" | "round" | "sign" | "sin" | "sqrt" | "tan" | "pow" | "max" | "min" | "trunc"; type: "function"; }; type: "binary"; }; right: { readonly type: "number"; readonly node: { readonly type: "number"; readonly value: EncodedNumber; }; readonly value: EncodedNumber; } | { readonly type: "pool"; ... 5 more ...; readonly rolls: readonly { ...; }[]; } | ... 4 more ... | { ...; }; type: "binary"; value: EncodedNumber; } | { node: { op: "-"; operand: { type: "number"; value: EncodedNumber; } | { description?: { style: DescriptionStyle; text: string; }; die: { args: readonly { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...[]; name: string; type: "die"; }; modifiers: readonly ({ comparePoint?: ... | ...; compound: boolean; name: "explode"; penetrate: boolean; type: "modifier"; } | { failure?: ... | ...; name: "target"; success: { operator: ...; value: ...; }; type: "modifier"; } | { end: PoolEnd; name: "drop"; qty: EncodedNumber; type: "modifier"; } | { end: PoolEnd; name: "keep"; qty: EncodedNumber; type: "modifier"; } | { comparePoint?: ... | ...; name: "re-roll"; once: boolean; type: "modifier"; } | { comparePoint?: ... | ...; name: "unique"; once: boolean; type: "modifier"; } | { comparePoint?: ... | ...; name: "critical-success"; type: "modifier"; } | { comparePoint?: ... | ...; name: "critical-failure"; type: "modifier"; } | { direction: SortDirection; name: "sort"; type: "modifier"; } | { name: "max"; type: "modifier"; value: EncodedNumber; } | { name: "min"; type: "modifier"; value: EncodedNumber; })[]; qty: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "pool"; } | { description?: { style: DescriptionStyle; text: string; }; expressions: readonly { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...[]; modifiers: readonly ({ comparePoint?: ... | ...; compound: boolean; name: "explode"; penetrate: boolean; type: "modifier"; } | { failure?: ... | ...; name: "target"; success: { operator: ...; value: ...; }; type: "modifier"; } | { end: PoolEnd; name: "drop"; qty: EncodedNumber; type: "modifier"; } | { end: PoolEnd; name: "keep"; qty: EncodedNumber; type: "modifier"; } | { comparePoint?: ... | ...; name: "re-roll"; once: boolean; type: "modifier"; } | { comparePoint?: ... | ...; name: "unique"; once: boolean; type: "modifier"; } | { comparePoint?: ... | ...; name: "critical-success"; type: "modifier"; } | { comparePoint?: ... | ...; name: "critical-failure"; type: "modifier"; } | { direction: SortDirection; name: "sort"; type: "modifier"; } | { name: "max"; type: "modifier"; value: EncodedNumber; } | { name: "min"; type: "modifier"; value: EncodedNumber; })[]; type: "group"; } | { left: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; op: "+" | "-" | "*" | "/" | "%" | "^"; right: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "binary"; } | { readonly type: "unary"; readonly op: "-"; readonly operand: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... | { expression: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "paren"; } | { args: readonly { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...[]; name: "abs" | "ceil" | "cos" | "exp" | "floor" | "log" | "round" | "sign" | "sin" | "sqrt" | "tan" | "pow" | "max" | "min" | "trunc"; type: "function"; }; type: "unary"; }; operand: { readonly type: "number"; readonly node: { readonly type: "number"; readonly value: EncodedNumber; }; readonly value: EncodedNumber; } | { readonly type: "pool"; ... 5 more ...; readonly rolls: readonly { ...; }[]; } | ... 4 more ... | { ...; }; type: "unary"; value: EncodedNumber; } | { inner: { readonly type: "number"; readonly node: { readonly type: "number"; readonly value: EncodedNumber; }; readonly value: EncodedNumber; } | { readonly type: "pool"; ... 5 more ...; readonly rolls: readonly { ...; }[]; } | ... 4 more ... | { ...; }; node: { expression: { type: "number"; value: EncodedNumber; } | { description?: { style: DescriptionStyle; text: string; }; die: { args: readonly { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...[]; name: string; type: "die"; }; modifiers: readonly ({ comparePoint?: ... | ...; compound: boolean; name: "explode"; penetrate: boolean; type: "modifier"; } | { failure?: ... | ...; name: "target"; success: { operator: ...; value: ...; }; type: "modifier"; } | { end: PoolEnd; name: "drop"; qty: EncodedNumber; type: "modifier"; } | { end: PoolEnd; name: "keep"; qty: EncodedNumber; type: "modifier"; } | { comparePoint?: ... | ...; name: "re-roll"; once: boolean; type: "modifier"; } | { comparePoint?: ... | ...; name: "unique"; once: boolean; type: "modifier"; } | { comparePoint?: ... | ...; name: "critical-success"; type: "modifier"; } | { comparePoint?: ... | ...; name: "critical-failure"; type: "modifier"; } | { direction: SortDirection; name: "sort"; type: "modifier"; } | { name: "max"; type: "modifier"; value: EncodedNumber; } | { name: "min"; type: "modifier"; value: EncodedNumber; })[]; qty: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "pool"; } | { description?: { style: DescriptionStyle; text: string; }; expressions: readonly { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...[]; modifiers: readonly ({ comparePoint?: ... | ...; compound: boolean; name: "explode"; penetrate: boolean; type: "modifier"; } | { failure?: ... | ...; name: "target"; success: { operator: ...; value: ...; }; type: "modifier"; } | { end: PoolEnd; name: "drop"; qty: EncodedNumber; type: "modifier"; } | { end: PoolEnd; name: "keep"; qty: EncodedNumber; type: "modifier"; } | { comparePoint?: ... | ...; name: "re-roll"; once: boolean; type: "modifier"; } | { comparePoint?: ... | ...; name: "unique"; once: boolean; type: "modifier"; } | { comparePoint?: ... | ...; name: "critical-success"; type: "modifier"; } | { comparePoint?: ... | ...; name: "critical-failure"; type: "modifier"; } | { direction: SortDirection; name: "sort"; type: "modifier"; } | { name: "max"; type: "modifier"; value: EncodedNumber; } | { name: "min"; type: "modifier"; value: EncodedNumber; })[]; type: "group"; } | { left: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; op: "+" | "-" | "*" | "/" | "%" | "^"; right: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "binary"; } | { op: "-"; operand: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "unary"; } | { readonly type: "paren"; readonly expression: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... ... | { args: readonly { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...[]; name: "abs" | "ceil" | "cos" | "exp" | "floor" | "log" | "round" | "sign" | "sin" | "sqrt" | "tan" | "pow" | "max" | "min" | "trunc"; type: "function"; }; type: "paren"; }; type: "paren"; value: EncodedNumber; } | { args: readonly { readonly type: "number"; readonly node: { readonly type: "number"; readonly value: EncodedNumber; }; readonly value: EncodedNumber; } | { readonly type: "pool"; ... 5 more ...; readonly rolls: readonly { ...; }[]; } | ... 4 more ... | { ...; }[]; node: { args: readonly ({ type: "number"; value: EncodedNumber; } | { description?: { style: DescriptionStyle; text: string; }; die: { args: readonly ({ readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?:...; name: string; type: "die"; }; modifiers: readonly ({ comparePoint?: ...; compound: ...; name: ...; penetrate: ...; type: ...; } | { failure?: ...; name: ...; success: ...; type: ...; } | { end: ...; name: ...; qty: ...; type: ...; } | { end: ...; name: ...; qty: ...; type: ...; } | { comparePoint?: ...; name: ...; once: ...; type: ...; } | { comparePoint?: ...; name: ...; once: ...; type: ...; } | { comparePoint?: ...; name: ...; type: ...; } | { comparePoint?: ...; name: ...; type: ...; } | { direction: ...; name: ...; type: ...; } | { name: ...; type: ...; value: ...; } | { name: ...; type: ...; value: ...; })[]; qty: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "pool"; } | { description?: { style: DescriptionStyle; text: string; }; expressions: readonly ({ readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?:...; modifiers: readonly ({ comparePoint?: ...; compound: ...; name: ...; penetrate: ...; type: ...; } | { failure?: ...; name: ...; success: ...; type: ...; } | { end: ...; name: ...; qty: ...; type: ...; } | { end: ...; name: ...; qty: ...; type: ...; } | { comparePoint?: ...; name: ...; once: ...; type: ...; } | { comparePoint?: ...; name: ...; once: ...; type: ...; } | { comparePoint?: ...; name: ...; type: ...; } | { comparePoint?: ...; name: ...; type: ...; } | { direction: ...; name: ...; type: ...; } | { name: ...; type: ...; value: ...; } | { name: ...; type: ...; value: ...; })[]; type: "group"; } | { left: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; op: "+" | "-" | "*" | "/" | "%" | "^"; right: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "binary"; } | { op: "-"; operand: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "unary"; } | { expression: { readonly type: "number"; readonly value: EncodedNumber; } | { readonly type: "pool"; readonly qty: { readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | { ...; }; readonly die: { ...; }; readonly modifiers: readonly ({ ...; } | ... 9 more ... | { ...; })[]; readonly description?: { ...; } ...; type: "paren"; } | { readonly type: "function"; readonly name: "abs" | "ceil" | "cos" | "exp" | "floor" | "log" | "round" | "sign" | "sin" | "sqrt" | "tan" | "pow" | "max" | "min" | "trunc"; readonly args: readonly ({ readonly type: "number"; readonly value: EncodedNumber; } | ... 5 more ... | ...)[]; })[]; name: "abs" | "ceil" | "cos" | "exp" | "floor" | "log" | "round" | "sign" | "sin" | "sqrt" | "tan" | "pow" | "max" | "min" | "trunc"; type: "function"; }; type: "function"; value: EncodedNumber; }; total: EncodedNumber; type: "roll"; version: 1; }

options? ​

RollOptions<T> | RollSettings<T>

Returns ​

Roll<T>

Throws ​

the data is invalid, or is a history

MIT Licensed · Credits