@yipe/dice 0.2.20 → 0.2.22

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,54 +1,9 @@
1
- import { P as PMF, C as CritConfig, i as DiceQuery, L as LRUCache } from '../pmf-BC1poIqF.cjs';
2
-
3
- type ExpressionNode = DieNode | ConstantNode | SumNode | AddNode | KeepNode | D20RollNode | HalfNode | MaxOfNode;
4
- type DieNode = {
5
- type: "die";
6
- sides: number;
7
- reroll?: number;
8
- minimum?: number;
9
- explode?: number;
10
- };
11
- type ConstantNode = {
12
- type: "constant";
13
- value: number;
14
- };
15
- type SumNode = {
16
- type: "sum";
17
- count: number;
18
- child: ExpressionNode;
19
- };
20
- type AddNode = {
21
- type: "add";
22
- children: {
23
- node: ExpressionNode;
24
- sign: 1 | -1;
25
- }[];
26
- };
27
- type KeepNode = {
28
- type: "keep";
29
- mode: "highest" | "lowest";
30
- count: number;
31
- child: SumNode | KeepNode;
32
- };
33
- type D20RollNode = {
34
- type: "d20Roll";
35
- rollType: "advantage" | "disadvantage" | "elven accuracy";
36
- child: ExpressionNode;
37
- };
38
- type HalfNode = {
39
- type: "half";
40
- child: ExpressionNode;
41
- };
42
- type MaxOfNode = {
43
- type: "maxOf";
44
- count: number;
45
- child: ExpressionNode;
46
- };
1
+ import { P as PMF, i as DiceQuery, C as CritConfig, L as LRUCache } from '../pmf-BC1poIqF.cjs';
47
2
 
48
3
  type RollFactory = {
49
4
  (count: number, sides?: number, modifier?: number): RollBuilder;
50
5
  (count: number, die: RollBuilder, modifier?: number): RollBuilder;
51
- d(sides: number): RollBuilder;
6
+ d(sides: number | string): RollBuilder;
52
7
  hd20(): RollBuilder;
53
8
  d4(): RollBuilder;
54
9
  d6(): RollBuilder;
@@ -108,11 +63,94 @@ interface CheckBuilder {
108
63
  readonly pmf: PMF;
109
64
  }
110
65
 
66
+ type SaveOutcome = "normal" | "half";
67
+ declare class SaveBuilder implements CheckBuilder {
68
+ readonly check: DCBuilder;
69
+ private readonly failureEffect?;
70
+ private readonly saveOutcome;
71
+ constructor(check: DCBuilder, failureEffect?: RollBuilder, saveOutcome?: SaveOutcome);
72
+ saveHalf(): SaveBuilder;
73
+ toExpression(): string;
74
+ resolve(eps?: number): SaveResolution;
75
+ toPMF(eps?: number): PMF;
76
+ get pmf(): PMF;
77
+ toQuery(eps?: number): DiceQuery;
78
+ }
79
+
80
+ interface SaveConfig {
81
+ dc: number;
82
+ }
83
+ declare class DCBuilder extends RollBuilder {
84
+ private readonly saveConfig;
85
+ constructor(baseRoll: RollBuilder, saveConfig?: SaveConfig);
86
+ dc(saveDC: number): DCBuilder;
87
+ get saveDC(): number;
88
+ add(anotherRoll: RollBuilder): DCBuilder;
89
+ addRoll(count?: number): DCBuilder;
90
+ onSaveFailure(val: number): SaveBuilder;
91
+ onSaveFailure(val: string): SaveBuilder;
92
+ onSaveFailure(val: RollBuilder): SaveBuilder;
93
+ onSaveFailure(count: number, die: RollBuilder): SaveBuilder;
94
+ onSaveFailure(count: number, sides: number): SaveBuilder;
95
+ onSaveFailure(count: number, die: RollBuilder, modifier: number): SaveBuilder;
96
+ onSaveFailure(count: number, sides: number, modifier: number): SaveBuilder;
97
+ withElvenAccuracy(): never;
98
+ toExpression(): string;
99
+ toPMF(eps?: number): PMF;
100
+ }
101
+
102
+ type ExpressionNode = DieNode | ConstantNode | SumNode | AddNode | KeepNode | D20RollNode | HalfNode | MaxOfNode;
103
+ type DieNode = {
104
+ type: "die";
105
+ sides: number;
106
+ reroll?: number;
107
+ minimum?: number;
108
+ explode?: number;
109
+ };
110
+ type ConstantNode = {
111
+ type: "constant";
112
+ value: number;
113
+ };
114
+ type SumNode = {
115
+ type: "sum";
116
+ count: number;
117
+ child: ExpressionNode;
118
+ };
119
+ type AddNode = {
120
+ type: "add";
121
+ children: {
122
+ node: ExpressionNode;
123
+ sign: 1 | -1;
124
+ }[];
125
+ };
126
+ type KeepNode = {
127
+ type: "keep";
128
+ mode: "highest" | "lowest";
129
+ count: number;
130
+ child: SumNode | KeepNode;
131
+ };
132
+ type D20RollNode = {
133
+ type: "d20Roll";
134
+ rollType: "advantage" | "disadvantage" | "elven accuracy";
135
+ child: ExpressionNode;
136
+ };
137
+ type HalfNode = {
138
+ type: "half";
139
+ child: ExpressionNode;
140
+ };
141
+ type MaxOfNode = {
142
+ type: "maxOf";
143
+ count: number;
144
+ child: ExpressionNode;
145
+ };
146
+
111
147
  declare const defaultConfig: RollConfig;
112
148
  declare class RollBuilder {
113
149
  protected readonly subRollConfigs: readonly RollConfig[];
114
150
  constructor(countOrConfigs?: number | readonly RollConfig[]);
151
+ protected create(configs: readonly RollConfig[]): RollBuilder;
115
152
  protected get lastConfig(): RollConfig;
153
+ hasHiddenState(): boolean;
116
154
  getSubRollConfigs(): readonly RollConfig[];
117
155
  static fromConfig(config: Partial<RollConfig>): RollBuilder;
118
156
  static fromConfigs(configs: Partial<RollConfig>[]): RollBuilder;
@@ -131,6 +169,8 @@ declare class RollBuilder {
131
169
  bestOf(count: number | undefined): RollBuilder;
132
170
  keepHighest(total: number, count: number): RollBuilder;
133
171
  keepLowest(total: number, count: number): RollBuilder;
172
+ keepHighestAll(total: number, count: number): PooledRollBuilder;
173
+ keepLowestAll(total: number, count: number): PooledRollBuilder;
134
174
  withAdvantage(): RollBuilder;
135
175
  withDisadvantage(): RollBuilder;
136
176
  add(anotherRoll: RollBuilder | undefined): RollBuilder;
@@ -164,10 +204,13 @@ declare class RollBuilder {
164
204
  get baseReroll(): number;
165
205
  half(): HalfRollBuilder;
166
206
  maxOf(count: number): MaxOfRollBuilder;
207
+ ac(targetAC: number): ACBuilder;
208
+ dc(saveDC: number): DCBuilder;
167
209
  }
168
210
  declare class HalfRollBuilder extends RollBuilder {
169
211
  private readonly innerRoll;
170
212
  constructor(innerRoll: RollBuilder);
213
+ hasHiddenState(): boolean;
171
214
  get lastConfig(): any;
172
215
  getSubRollConfigs(): readonly RollConfig[];
173
216
  toExpression(): string;
@@ -181,6 +224,7 @@ declare class MaxOfRollBuilder extends RollBuilder {
181
224
  private readonly diceCount?;
182
225
  private readonly diceSides?;
183
226
  constructor(innerRoll: RollBuilder, count: number, diceCount?: number, diceSides?: number);
227
+ hasHiddenState(): boolean;
184
228
  get lastConfig(): any;
185
229
  getSubRollConfigs(): readonly RollConfig[];
186
230
  toExpression(): string;
@@ -191,6 +235,7 @@ declare class MaxOfRollBuilder extends RollBuilder {
191
235
  declare class AlwaysHitBuilder extends RollBuilder {
192
236
  readonly attackConfig: CritConfig;
193
237
  constructor(baseRoll: RollBuilder, attackConfig?: CritConfig);
238
+ protected create(configs: readonly RollConfig[]): RollBuilder;
194
239
  onHit(val: number): AttackBuilder;
195
240
  onHit(val: string): AttackBuilder;
196
241
  onHit(val: RollBuilder): AttackBuilder;
@@ -213,6 +258,7 @@ declare class AlwaysCritBuilder extends RollBuilder {
213
258
  constructor(baseRoll: RollBuilder, attackConfig?: CritConfig & {
214
259
  ac?: number;
215
260
  }, fromAlwaysHit?: boolean);
261
+ protected create(configs: readonly RollConfig[]): RollBuilder;
216
262
  onHit(val: number): AttackBuilder;
217
263
  onHit(val: string): AttackBuilder;
218
264
  onHit(val: RollBuilder): AttackBuilder;
@@ -226,22 +272,40 @@ declare class AlwaysCritBuilder extends RollBuilder {
226
272
  toPMF(): PMF;
227
273
  copy(): AlwaysCritBuilder;
228
274
  }
229
- /**
230
- * A RollBuilder that wraps a pre-computed PMF from a parsed string expression.
231
- * This is used to support string-based damage expressions in onHit/onCrit/onMiss.
232
- * The builder is not fully composable (e.g., you can't call .plus() on it),
233
- * but it can be used anywhere a RollBuilder is expected for terminal damage.
234
- */
235
275
  declare class ParsedRollBuilder extends RollBuilder {
236
276
  private readonly cachedPMF;
237
277
  private readonly originalExpression;
238
278
  constructor(expression: string);
239
- toPMF(eps?: number): PMF;
279
+ hasHiddenState(): boolean;
280
+ protected create(configs: readonly RollConfig[]): RollBuilder;
281
+ toPMF(_eps?: number): PMF;
240
282
  toExpression(): string;
241
283
  toAST(): ExpressionNode;
242
284
  copy(): ParsedRollBuilder;
243
285
  doubleDice(): ParsedRollBuilder;
244
286
  }
287
+ declare class PooledRollBuilder extends RollBuilder {
288
+ private readonly baseAST;
289
+ private readonly baseExpression;
290
+ constructor(baseAST: ExpressionNode, baseExpression: string, configs?: readonly RollConfig[]);
291
+ protected create(configs: readonly RollConfig[]): PooledRollBuilder;
292
+ hasHiddenState(): boolean;
293
+ d(_sides: number | undefined): RollBuilder;
294
+ reroll(_value: number): RollBuilder;
295
+ explode(_count?: number | undefined): RollBuilder;
296
+ minimum(_val: number | undefined): RollBuilder;
297
+ bestOf(_count: number | undefined): RollBuilder;
298
+ keepHighest(_total: number, _count: number): RollBuilder;
299
+ keepLowest(_total: number, _count: number): RollBuilder;
300
+ withAdvantage(): RollBuilder;
301
+ withDisadvantage(): RollBuilder;
302
+ withElvenAccuracy(): RollBuilder;
303
+ toAST(): ExpressionNode;
304
+ toExpression(): string;
305
+ copy(): PooledRollBuilder;
306
+ scaleDice(scale: number): RollBuilder;
307
+ times(count: number): PooledRollBuilder;
308
+ }
245
309
 
246
310
  type ActionEffect = RollBuilder;
247
311
  declare class AttackBuilder implements CheckBuilder {
@@ -299,54 +363,8 @@ declare class ACBuilder extends RollBuilder {
299
363
  toPMF(eps?: number): PMF;
300
364
  copy(): ACBuilder;
301
365
  }
302
- declare module "./roll" {
303
- interface RollBuilder {
304
- ac(targetAC: number): ACBuilder;
305
- }
306
- }
307
-
308
- type SaveOutcome = "normal" | "half";
309
- declare class SaveBuilder implements CheckBuilder {
310
- readonly check: DCBuilder;
311
- private readonly failureEffect?;
312
- private readonly saveOutcome;
313
- constructor(check: DCBuilder, failureEffect?: RollBuilder, saveOutcome?: SaveOutcome);
314
- saveHalf(): SaveBuilder;
315
- toExpression(): string;
316
- resolve(eps?: number): SaveResolution;
317
- toPMF(eps?: number): PMF;
318
- get pmf(): PMF;
319
- toQuery(eps?: number): DiceQuery;
320
- }
321
-
322
- interface SaveConfig {
323
- dc: number;
324
- }
325
- declare class DCBuilder extends RollBuilder {
326
- private readonly saveConfig;
327
- constructor(baseRoll: RollBuilder, saveConfig?: SaveConfig);
328
- dc(saveDC: number): DCBuilder;
329
- get saveDC(): number;
330
- add(anotherRoll: RollBuilder): DCBuilder;
331
- addRoll(count?: number): DCBuilder;
332
- onSaveFailure(val: number): SaveBuilder;
333
- onSaveFailure(val: string): SaveBuilder;
334
- onSaveFailure(val: RollBuilder): SaveBuilder;
335
- onSaveFailure(count: number, die: RollBuilder): SaveBuilder;
336
- onSaveFailure(count: number, sides: number): SaveBuilder;
337
- onSaveFailure(count: number, die: RollBuilder, modifier: number): SaveBuilder;
338
- onSaveFailure(count: number, sides: number, modifier: number): SaveBuilder;
339
- withElvenAccuracy(): never;
340
- toExpression(): string;
341
- toPMF(eps?: number): PMF;
342
- }
343
- declare module "./roll" {
344
- interface RollBuilder {
345
- dc(saveDC: number): DCBuilder;
346
- }
347
- }
348
366
 
349
- declare function d(sides: number): RollBuilder;
367
+ declare function d(sides: number | string): RollBuilder;
350
368
  declare const d4: RollBuilder;
351
369
  declare const d6: RollBuilder;
352
370
  declare const d8: RollBuilder;
@@ -359,4 +377,4 @@ declare const flat: (n: number) => RollBuilder;
359
377
  declare const roll: RollFactory;
360
378
  declare const builderPMFCache: LRUCache<string, PMF>;
361
379
 
362
- export { ACBuilder, AlwaysCritBuilder, AlwaysHitBuilder, type AttackConfig, type AttackResolution, type CheckBuilder, DCBuilder, HalfRollBuilder, type KeepMode, MaxOfRollBuilder, ParsedRollBuilder, type Resolution, RollBuilder, type RollConfig, type RollFactory, type RollType, SaveBuilder, type SaveOutcome, type SaveResolution, builderPMFCache, d, d10, d100, d12, d20, d4, d6, d8, defaultConfig, flat, hd20, roll };
380
+ export { ACBuilder, AlwaysCritBuilder, AlwaysHitBuilder, type AttackConfig, type AttackResolution, type CheckBuilder, DCBuilder, HalfRollBuilder, type KeepMode, MaxOfRollBuilder, ParsedRollBuilder, PooledRollBuilder, type Resolution, RollBuilder, type RollConfig, type RollFactory, type RollType, SaveBuilder, type SaveOutcome, type SaveResolution, builderPMFCache, d, d10, d100, d12, d20, d4, d6, d8, defaultConfig, flat, hd20, roll };
@@ -1,54 +1,9 @@
1
- import { P as PMF, C as CritConfig, i as DiceQuery, L as LRUCache } from '../pmf-BC1poIqF.js';
2
-
3
- type ExpressionNode = DieNode | ConstantNode | SumNode | AddNode | KeepNode | D20RollNode | HalfNode | MaxOfNode;
4
- type DieNode = {
5
- type: "die";
6
- sides: number;
7
- reroll?: number;
8
- minimum?: number;
9
- explode?: number;
10
- };
11
- type ConstantNode = {
12
- type: "constant";
13
- value: number;
14
- };
15
- type SumNode = {
16
- type: "sum";
17
- count: number;
18
- child: ExpressionNode;
19
- };
20
- type AddNode = {
21
- type: "add";
22
- children: {
23
- node: ExpressionNode;
24
- sign: 1 | -1;
25
- }[];
26
- };
27
- type KeepNode = {
28
- type: "keep";
29
- mode: "highest" | "lowest";
30
- count: number;
31
- child: SumNode | KeepNode;
32
- };
33
- type D20RollNode = {
34
- type: "d20Roll";
35
- rollType: "advantage" | "disadvantage" | "elven accuracy";
36
- child: ExpressionNode;
37
- };
38
- type HalfNode = {
39
- type: "half";
40
- child: ExpressionNode;
41
- };
42
- type MaxOfNode = {
43
- type: "maxOf";
44
- count: number;
45
- child: ExpressionNode;
46
- };
1
+ import { P as PMF, i as DiceQuery, C as CritConfig, L as LRUCache } from '../pmf-BC1poIqF.js';
47
2
 
48
3
  type RollFactory = {
49
4
  (count: number, sides?: number, modifier?: number): RollBuilder;
50
5
  (count: number, die: RollBuilder, modifier?: number): RollBuilder;
51
- d(sides: number): RollBuilder;
6
+ d(sides: number | string): RollBuilder;
52
7
  hd20(): RollBuilder;
53
8
  d4(): RollBuilder;
54
9
  d6(): RollBuilder;
@@ -108,11 +63,94 @@ interface CheckBuilder {
108
63
  readonly pmf: PMF;
109
64
  }
110
65
 
66
+ type SaveOutcome = "normal" | "half";
67
+ declare class SaveBuilder implements CheckBuilder {
68
+ readonly check: DCBuilder;
69
+ private readonly failureEffect?;
70
+ private readonly saveOutcome;
71
+ constructor(check: DCBuilder, failureEffect?: RollBuilder, saveOutcome?: SaveOutcome);
72
+ saveHalf(): SaveBuilder;
73
+ toExpression(): string;
74
+ resolve(eps?: number): SaveResolution;
75
+ toPMF(eps?: number): PMF;
76
+ get pmf(): PMF;
77
+ toQuery(eps?: number): DiceQuery;
78
+ }
79
+
80
+ interface SaveConfig {
81
+ dc: number;
82
+ }
83
+ declare class DCBuilder extends RollBuilder {
84
+ private readonly saveConfig;
85
+ constructor(baseRoll: RollBuilder, saveConfig?: SaveConfig);
86
+ dc(saveDC: number): DCBuilder;
87
+ get saveDC(): number;
88
+ add(anotherRoll: RollBuilder): DCBuilder;
89
+ addRoll(count?: number): DCBuilder;
90
+ onSaveFailure(val: number): SaveBuilder;
91
+ onSaveFailure(val: string): SaveBuilder;
92
+ onSaveFailure(val: RollBuilder): SaveBuilder;
93
+ onSaveFailure(count: number, die: RollBuilder): SaveBuilder;
94
+ onSaveFailure(count: number, sides: number): SaveBuilder;
95
+ onSaveFailure(count: number, die: RollBuilder, modifier: number): SaveBuilder;
96
+ onSaveFailure(count: number, sides: number, modifier: number): SaveBuilder;
97
+ withElvenAccuracy(): never;
98
+ toExpression(): string;
99
+ toPMF(eps?: number): PMF;
100
+ }
101
+
102
+ type ExpressionNode = DieNode | ConstantNode | SumNode | AddNode | KeepNode | D20RollNode | HalfNode | MaxOfNode;
103
+ type DieNode = {
104
+ type: "die";
105
+ sides: number;
106
+ reroll?: number;
107
+ minimum?: number;
108
+ explode?: number;
109
+ };
110
+ type ConstantNode = {
111
+ type: "constant";
112
+ value: number;
113
+ };
114
+ type SumNode = {
115
+ type: "sum";
116
+ count: number;
117
+ child: ExpressionNode;
118
+ };
119
+ type AddNode = {
120
+ type: "add";
121
+ children: {
122
+ node: ExpressionNode;
123
+ sign: 1 | -1;
124
+ }[];
125
+ };
126
+ type KeepNode = {
127
+ type: "keep";
128
+ mode: "highest" | "lowest";
129
+ count: number;
130
+ child: SumNode | KeepNode;
131
+ };
132
+ type D20RollNode = {
133
+ type: "d20Roll";
134
+ rollType: "advantage" | "disadvantage" | "elven accuracy";
135
+ child: ExpressionNode;
136
+ };
137
+ type HalfNode = {
138
+ type: "half";
139
+ child: ExpressionNode;
140
+ };
141
+ type MaxOfNode = {
142
+ type: "maxOf";
143
+ count: number;
144
+ child: ExpressionNode;
145
+ };
146
+
111
147
  declare const defaultConfig: RollConfig;
112
148
  declare class RollBuilder {
113
149
  protected readonly subRollConfigs: readonly RollConfig[];
114
150
  constructor(countOrConfigs?: number | readonly RollConfig[]);
151
+ protected create(configs: readonly RollConfig[]): RollBuilder;
115
152
  protected get lastConfig(): RollConfig;
153
+ hasHiddenState(): boolean;
116
154
  getSubRollConfigs(): readonly RollConfig[];
117
155
  static fromConfig(config: Partial<RollConfig>): RollBuilder;
118
156
  static fromConfigs(configs: Partial<RollConfig>[]): RollBuilder;
@@ -131,6 +169,8 @@ declare class RollBuilder {
131
169
  bestOf(count: number | undefined): RollBuilder;
132
170
  keepHighest(total: number, count: number): RollBuilder;
133
171
  keepLowest(total: number, count: number): RollBuilder;
172
+ keepHighestAll(total: number, count: number): PooledRollBuilder;
173
+ keepLowestAll(total: number, count: number): PooledRollBuilder;
134
174
  withAdvantage(): RollBuilder;
135
175
  withDisadvantage(): RollBuilder;
136
176
  add(anotherRoll: RollBuilder | undefined): RollBuilder;
@@ -164,10 +204,13 @@ declare class RollBuilder {
164
204
  get baseReroll(): number;
165
205
  half(): HalfRollBuilder;
166
206
  maxOf(count: number): MaxOfRollBuilder;
207
+ ac(targetAC: number): ACBuilder;
208
+ dc(saveDC: number): DCBuilder;
167
209
  }
168
210
  declare class HalfRollBuilder extends RollBuilder {
169
211
  private readonly innerRoll;
170
212
  constructor(innerRoll: RollBuilder);
213
+ hasHiddenState(): boolean;
171
214
  get lastConfig(): any;
172
215
  getSubRollConfigs(): readonly RollConfig[];
173
216
  toExpression(): string;
@@ -181,6 +224,7 @@ declare class MaxOfRollBuilder extends RollBuilder {
181
224
  private readonly diceCount?;
182
225
  private readonly diceSides?;
183
226
  constructor(innerRoll: RollBuilder, count: number, diceCount?: number, diceSides?: number);
227
+ hasHiddenState(): boolean;
184
228
  get lastConfig(): any;
185
229
  getSubRollConfigs(): readonly RollConfig[];
186
230
  toExpression(): string;
@@ -191,6 +235,7 @@ declare class MaxOfRollBuilder extends RollBuilder {
191
235
  declare class AlwaysHitBuilder extends RollBuilder {
192
236
  readonly attackConfig: CritConfig;
193
237
  constructor(baseRoll: RollBuilder, attackConfig?: CritConfig);
238
+ protected create(configs: readonly RollConfig[]): RollBuilder;
194
239
  onHit(val: number): AttackBuilder;
195
240
  onHit(val: string): AttackBuilder;
196
241
  onHit(val: RollBuilder): AttackBuilder;
@@ -213,6 +258,7 @@ declare class AlwaysCritBuilder extends RollBuilder {
213
258
  constructor(baseRoll: RollBuilder, attackConfig?: CritConfig & {
214
259
  ac?: number;
215
260
  }, fromAlwaysHit?: boolean);
261
+ protected create(configs: readonly RollConfig[]): RollBuilder;
216
262
  onHit(val: number): AttackBuilder;
217
263
  onHit(val: string): AttackBuilder;
218
264
  onHit(val: RollBuilder): AttackBuilder;
@@ -226,22 +272,40 @@ declare class AlwaysCritBuilder extends RollBuilder {
226
272
  toPMF(): PMF;
227
273
  copy(): AlwaysCritBuilder;
228
274
  }
229
- /**
230
- * A RollBuilder that wraps a pre-computed PMF from a parsed string expression.
231
- * This is used to support string-based damage expressions in onHit/onCrit/onMiss.
232
- * The builder is not fully composable (e.g., you can't call .plus() on it),
233
- * but it can be used anywhere a RollBuilder is expected for terminal damage.
234
- */
235
275
  declare class ParsedRollBuilder extends RollBuilder {
236
276
  private readonly cachedPMF;
237
277
  private readonly originalExpression;
238
278
  constructor(expression: string);
239
- toPMF(eps?: number): PMF;
279
+ hasHiddenState(): boolean;
280
+ protected create(configs: readonly RollConfig[]): RollBuilder;
281
+ toPMF(_eps?: number): PMF;
240
282
  toExpression(): string;
241
283
  toAST(): ExpressionNode;
242
284
  copy(): ParsedRollBuilder;
243
285
  doubleDice(): ParsedRollBuilder;
244
286
  }
287
+ declare class PooledRollBuilder extends RollBuilder {
288
+ private readonly baseAST;
289
+ private readonly baseExpression;
290
+ constructor(baseAST: ExpressionNode, baseExpression: string, configs?: readonly RollConfig[]);
291
+ protected create(configs: readonly RollConfig[]): PooledRollBuilder;
292
+ hasHiddenState(): boolean;
293
+ d(_sides: number | undefined): RollBuilder;
294
+ reroll(_value: number): RollBuilder;
295
+ explode(_count?: number | undefined): RollBuilder;
296
+ minimum(_val: number | undefined): RollBuilder;
297
+ bestOf(_count: number | undefined): RollBuilder;
298
+ keepHighest(_total: number, _count: number): RollBuilder;
299
+ keepLowest(_total: number, _count: number): RollBuilder;
300
+ withAdvantage(): RollBuilder;
301
+ withDisadvantage(): RollBuilder;
302
+ withElvenAccuracy(): RollBuilder;
303
+ toAST(): ExpressionNode;
304
+ toExpression(): string;
305
+ copy(): PooledRollBuilder;
306
+ scaleDice(scale: number): RollBuilder;
307
+ times(count: number): PooledRollBuilder;
308
+ }
245
309
 
246
310
  type ActionEffect = RollBuilder;
247
311
  declare class AttackBuilder implements CheckBuilder {
@@ -299,54 +363,8 @@ declare class ACBuilder extends RollBuilder {
299
363
  toPMF(eps?: number): PMF;
300
364
  copy(): ACBuilder;
301
365
  }
302
- declare module "./roll" {
303
- interface RollBuilder {
304
- ac(targetAC: number): ACBuilder;
305
- }
306
- }
307
-
308
- type SaveOutcome = "normal" | "half";
309
- declare class SaveBuilder implements CheckBuilder {
310
- readonly check: DCBuilder;
311
- private readonly failureEffect?;
312
- private readonly saveOutcome;
313
- constructor(check: DCBuilder, failureEffect?: RollBuilder, saveOutcome?: SaveOutcome);
314
- saveHalf(): SaveBuilder;
315
- toExpression(): string;
316
- resolve(eps?: number): SaveResolution;
317
- toPMF(eps?: number): PMF;
318
- get pmf(): PMF;
319
- toQuery(eps?: number): DiceQuery;
320
- }
321
-
322
- interface SaveConfig {
323
- dc: number;
324
- }
325
- declare class DCBuilder extends RollBuilder {
326
- private readonly saveConfig;
327
- constructor(baseRoll: RollBuilder, saveConfig?: SaveConfig);
328
- dc(saveDC: number): DCBuilder;
329
- get saveDC(): number;
330
- add(anotherRoll: RollBuilder): DCBuilder;
331
- addRoll(count?: number): DCBuilder;
332
- onSaveFailure(val: number): SaveBuilder;
333
- onSaveFailure(val: string): SaveBuilder;
334
- onSaveFailure(val: RollBuilder): SaveBuilder;
335
- onSaveFailure(count: number, die: RollBuilder): SaveBuilder;
336
- onSaveFailure(count: number, sides: number): SaveBuilder;
337
- onSaveFailure(count: number, die: RollBuilder, modifier: number): SaveBuilder;
338
- onSaveFailure(count: number, sides: number, modifier: number): SaveBuilder;
339
- withElvenAccuracy(): never;
340
- toExpression(): string;
341
- toPMF(eps?: number): PMF;
342
- }
343
- declare module "./roll" {
344
- interface RollBuilder {
345
- dc(saveDC: number): DCBuilder;
346
- }
347
- }
348
366
 
349
- declare function d(sides: number): RollBuilder;
367
+ declare function d(sides: number | string): RollBuilder;
350
368
  declare const d4: RollBuilder;
351
369
  declare const d6: RollBuilder;
352
370
  declare const d8: RollBuilder;
@@ -359,4 +377,4 @@ declare const flat: (n: number) => RollBuilder;
359
377
  declare const roll: RollFactory;
360
378
  declare const builderPMFCache: LRUCache<string, PMF>;
361
379
 
362
- export { ACBuilder, AlwaysCritBuilder, AlwaysHitBuilder, type AttackConfig, type AttackResolution, type CheckBuilder, DCBuilder, HalfRollBuilder, type KeepMode, MaxOfRollBuilder, ParsedRollBuilder, type Resolution, RollBuilder, type RollConfig, type RollFactory, type RollType, SaveBuilder, type SaveOutcome, type SaveResolution, builderPMFCache, d, d10, d100, d12, d20, d4, d6, d8, defaultConfig, flat, hd20, roll };
380
+ export { ACBuilder, AlwaysCritBuilder, AlwaysHitBuilder, type AttackConfig, type AttackResolution, type CheckBuilder, DCBuilder, HalfRollBuilder, type KeepMode, MaxOfRollBuilder, ParsedRollBuilder, PooledRollBuilder, type Resolution, RollBuilder, type RollConfig, type RollFactory, type RollType, SaveBuilder, type SaveOutcome, type SaveResolution, builderPMFCache, d, d10, d100, d12, d20, d4, d6, d8, defaultConfig, flat, hd20, roll };