@yipe/dice 0.2.0 → 0.2.1

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.
@@ -0,0 +1,255 @@
1
+ import { P as PMF, b as DiceQuery, L as LRUCache } from '../pmf-DIegvlyA.cjs';
2
+
3
+ type ExpressionNode = DieNode | ConstantNode | SumNode | AddNode | KeepNode | D20RollNode;
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
+
39
+ type RollFactory = {
40
+ (count: number, sides?: number, modifier?: number): RollBuilder;
41
+ (count: number, die: RollBuilder, modifier?: number): RollBuilder;
42
+ d(sides: number): RollBuilder;
43
+ hd20(): RollBuilder;
44
+ d4(): RollBuilder;
45
+ d6(): RollBuilder;
46
+ d8(): RollBuilder;
47
+ d10(): RollBuilder;
48
+ d12(): RollBuilder;
49
+ d20(): RollBuilder;
50
+ d100(): RollBuilder;
51
+ flat(n: number): RollBuilder;
52
+ };
53
+ type RollType = "flat" | "advantage" | "disadvantage" | "elven accuracy";
54
+ type KeepMode = "highest" | "lowest";
55
+ type RollConfig = {
56
+ count: number;
57
+ sides: number;
58
+ modifier: number;
59
+ reroll: number;
60
+ explode: number;
61
+ minimum: number;
62
+ bestOf: number;
63
+ keep: {
64
+ total: number;
65
+ count: number;
66
+ mode: KeepMode;
67
+ } | undefined;
68
+ rollType: RollType;
69
+ isSubtraction?: boolean;
70
+ };
71
+ type Resolution = {
72
+ pmf: PMF;
73
+ check: PMF;
74
+ weights: {
75
+ [key: string]: number;
76
+ };
77
+ };
78
+ type AttackResolution = Resolution & {
79
+ hit: PMF;
80
+ crit: PMF;
81
+ miss: PMF;
82
+ weights: {
83
+ hit: number;
84
+ crit: number;
85
+ miss: number;
86
+ };
87
+ };
88
+ type SaveResolution = Resolution & {
89
+ saveFail: PMF;
90
+ saveSuccess: PMF;
91
+ weights: {
92
+ success: number;
93
+ fail: number;
94
+ };
95
+ };
96
+ interface CheckBuilder {
97
+ resolve(eps?: number): Resolution;
98
+ toExpression(): string;
99
+ }
100
+
101
+ declare const defaultConfig: RollConfig;
102
+ declare class RollBuilder {
103
+ protected readonly subRollConfigs: readonly RollConfig[];
104
+ constructor(countOrConfigs?: number | readonly RollConfig[]);
105
+ protected get lastConfig(): RollConfig;
106
+ getSubRollConfigs(): readonly RollConfig[];
107
+ static fromConfig(config: Partial<RollConfig>): RollBuilder;
108
+ static fromConfigs(configs: Partial<RollConfig>[]): RollBuilder;
109
+ static fromArgs(...args: any[]): RollBuilder;
110
+ d(sides: number | undefined): RollBuilder;
111
+ plus(modOrRoll: number | RollBuilder | undefined): RollBuilder;
112
+ plus(count: number, die: RollBuilder): RollBuilder;
113
+ minus(modOrRoll: number | RollBuilder | undefined): RollBuilder;
114
+ minus(count: number, die: RollBuilder): RollBuilder;
115
+ /** Apply one-pass reroll threshold (k): reroll faces 1..k once, must keep. */
116
+ reroll(value: number): RollBuilder;
117
+ /** Set finite explode count for max-face explosions (Infinity allowed). */
118
+ explode(count?: number | undefined): RollBuilder;
119
+ /** Apply per-die minimum value (min > 0). */
120
+ minimum(val: number | undefined): RollBuilder;
121
+ bestOf(count: number | undefined): RollBuilder;
122
+ keepHighest(total: number, count: number): RollBuilder;
123
+ keepLowest(total: number, count: number): RollBuilder;
124
+ withAdvantage(): RollBuilder;
125
+ withDisadvantage(): RollBuilder;
126
+ add(anotherRoll: RollBuilder | undefined): RollBuilder;
127
+ withBonus(anotherRoll: RollBuilder): RollBuilder;
128
+ addRoll(count?: number): RollBuilder;
129
+ doubleDice(): RollBuilder;
130
+ copy(): RollBuilder;
131
+ d4: () => RollBuilder;
132
+ d6: () => RollBuilder;
133
+ d8: () => RollBuilder;
134
+ d10: () => RollBuilder;
135
+ d12: () => RollBuilder;
136
+ d20: () => RollBuilder;
137
+ d100: () => RollBuilder;
138
+ ac(targetAC: number): ACBuilder;
139
+ withElvenAccuracy(): RollBuilder;
140
+ dc(saveDC: number): DCBuilder;
141
+ toExpression(): string;
142
+ toPMF(eps?: number): PMF;
143
+ toQuery(eps?: number): DiceQuery;
144
+ toAST(): ExpressionNode;
145
+ private configToSingleExpressionWithoutModifier;
146
+ getRootDieConfig(): RollConfig | undefined;
147
+ getAllDieConfigs(): readonly RollConfig[];
148
+ getBonusDiceConfigs(): RollConfig[];
149
+ getBonusDicePMFs(check: RollBuilder, eps?: number): PMF[];
150
+ get modifier(): number;
151
+ get rollType(): RollType;
152
+ get baseReroll(): number;
153
+ }
154
+
155
+ type ActionEffect = RollBuilder;
156
+ declare class AttackBuilder implements CheckBuilder {
157
+ readonly check: ACBuilder;
158
+ private readonly hitEffect?;
159
+ private readonly critEffect?;
160
+ private readonly missEffect?;
161
+ constructor(check: ACBuilder, hitEffect?: ActionEffect, critEffect?: ActionEffect | null, missEffect?: ActionEffect);
162
+ onCrit(val: number): AttackBuilder;
163
+ onCrit(val: RollBuilder): AttackBuilder;
164
+ onCrit(count: number, die: RollBuilder): AttackBuilder;
165
+ onCrit(count: number, sides: number): AttackBuilder;
166
+ onCrit(count: number, die: RollBuilder, modifier: number): AttackBuilder;
167
+ onCrit(count: number, sides: number, modifier: number): AttackBuilder;
168
+ onMiss(val: number): AttackBuilder;
169
+ onMiss(val: RollBuilder): AttackBuilder;
170
+ onMiss(count: number, die: RollBuilder): AttackBuilder;
171
+ onMiss(count: number, sides: number): AttackBuilder;
172
+ onMiss(count: number, die: RollBuilder, modifier: number): AttackBuilder;
173
+ onMiss(count: number, sides: number, modifier: number): AttackBuilder;
174
+ noCrit(): AttackBuilder;
175
+ toExpression(): string;
176
+ resolveProbabilities(check: ACBuilder, eps?: number): {
177
+ pSuccess: number;
178
+ pHit: number;
179
+ pCrit: number;
180
+ pMiss: number;
181
+ };
182
+ resolve(eps?: number): AttackResolution;
183
+ toPMF(eps?: number): PMF;
184
+ toQuery(eps?: number): DiceQuery;
185
+ }
186
+
187
+ interface AttackConfig {
188
+ ac: number;
189
+ critThreshold: number;
190
+ }
191
+ declare class ACBuilder extends RollBuilder {
192
+ readonly attackConfig: AttackConfig;
193
+ constructor(baseRoll: RollBuilder, ac: number, attackConfig?: AttackConfig);
194
+ onHit(val: number): AttackBuilder;
195
+ onHit(val: RollBuilder): AttackBuilder;
196
+ onHit(count: number, die: RollBuilder): AttackBuilder;
197
+ onHit(count: number, sides: number): AttackBuilder;
198
+ onHit(count: number, die: RollBuilder, modifier: number): AttackBuilder;
199
+ onHit(count: number, sides: number, modifier: number): AttackBuilder;
200
+ dc(_: number): never;
201
+ get critThreshold(): number;
202
+ critOn(threshold: number): ACBuilder;
203
+ toExpression(): string;
204
+ toPMF(eps?: number): PMF;
205
+ copy(): ACBuilder;
206
+ }
207
+
208
+ type SaveOutcome = "normal" | "half";
209
+ declare class SaveBuilder implements CheckBuilder {
210
+ readonly check: DCBuilder;
211
+ private readonly failureEffect?;
212
+ private readonly saveOutcome;
213
+ constructor(check: DCBuilder, failureEffect?: RollBuilder, saveOutcome?: SaveOutcome);
214
+ saveHalf(): SaveBuilder;
215
+ toExpression(): string;
216
+ resolve(eps?: number): SaveResolution;
217
+ toPMF(eps?: number): PMF;
218
+ toQuery(eps?: number): DiceQuery;
219
+ }
220
+
221
+ interface SaveConfig {
222
+ dc: number;
223
+ }
224
+ declare class DCBuilder extends RollBuilder {
225
+ private readonly saveConfig;
226
+ constructor(baseRoll: RollBuilder, saveConfig?: SaveConfig);
227
+ dc(saveDC: number): DCBuilder;
228
+ get saveDC(): number;
229
+ add(anotherRoll: RollBuilder): DCBuilder;
230
+ addRoll(count?: number): DCBuilder;
231
+ onSaveFailure(val: number): SaveBuilder;
232
+ onSaveFailure(val: RollBuilder): SaveBuilder;
233
+ onSaveFailure(count: number, die: RollBuilder): SaveBuilder;
234
+ onSaveFailure(count: number, sides: number): SaveBuilder;
235
+ onSaveFailure(count: number, die: RollBuilder, modifier: number): SaveBuilder;
236
+ onSaveFailure(count: number, sides: number, modifier: number): SaveBuilder;
237
+ withElvenAccuracy(): never;
238
+ toExpression(): string;
239
+ toPMF(eps?: number): PMF;
240
+ }
241
+
242
+ declare function d(sides: number): RollBuilder;
243
+ declare const d4: RollBuilder;
244
+ declare const d6: RollBuilder;
245
+ declare const d8: RollBuilder;
246
+ declare const d10: RollBuilder;
247
+ declare const d12: RollBuilder;
248
+ declare const d20: RollBuilder;
249
+ declare const hd20: RollBuilder;
250
+ declare const d100: RollBuilder;
251
+ declare const flat: (n: number) => RollBuilder;
252
+ declare const roll: RollFactory;
253
+ declare const builderPMFCache: LRUCache<string, PMF>;
254
+
255
+ export { ACBuilder, type AttackConfig, type AttackResolution, type CheckBuilder, DCBuilder, type KeepMode, 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 };
@@ -0,0 +1,255 @@
1
+ import { P as PMF, b as DiceQuery, L as LRUCache } from '../pmf-DIegvlyA.js';
2
+
3
+ type ExpressionNode = DieNode | ConstantNode | SumNode | AddNode | KeepNode | D20RollNode;
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
+
39
+ type RollFactory = {
40
+ (count: number, sides?: number, modifier?: number): RollBuilder;
41
+ (count: number, die: RollBuilder, modifier?: number): RollBuilder;
42
+ d(sides: number): RollBuilder;
43
+ hd20(): RollBuilder;
44
+ d4(): RollBuilder;
45
+ d6(): RollBuilder;
46
+ d8(): RollBuilder;
47
+ d10(): RollBuilder;
48
+ d12(): RollBuilder;
49
+ d20(): RollBuilder;
50
+ d100(): RollBuilder;
51
+ flat(n: number): RollBuilder;
52
+ };
53
+ type RollType = "flat" | "advantage" | "disadvantage" | "elven accuracy";
54
+ type KeepMode = "highest" | "lowest";
55
+ type RollConfig = {
56
+ count: number;
57
+ sides: number;
58
+ modifier: number;
59
+ reroll: number;
60
+ explode: number;
61
+ minimum: number;
62
+ bestOf: number;
63
+ keep: {
64
+ total: number;
65
+ count: number;
66
+ mode: KeepMode;
67
+ } | undefined;
68
+ rollType: RollType;
69
+ isSubtraction?: boolean;
70
+ };
71
+ type Resolution = {
72
+ pmf: PMF;
73
+ check: PMF;
74
+ weights: {
75
+ [key: string]: number;
76
+ };
77
+ };
78
+ type AttackResolution = Resolution & {
79
+ hit: PMF;
80
+ crit: PMF;
81
+ miss: PMF;
82
+ weights: {
83
+ hit: number;
84
+ crit: number;
85
+ miss: number;
86
+ };
87
+ };
88
+ type SaveResolution = Resolution & {
89
+ saveFail: PMF;
90
+ saveSuccess: PMF;
91
+ weights: {
92
+ success: number;
93
+ fail: number;
94
+ };
95
+ };
96
+ interface CheckBuilder {
97
+ resolve(eps?: number): Resolution;
98
+ toExpression(): string;
99
+ }
100
+
101
+ declare const defaultConfig: RollConfig;
102
+ declare class RollBuilder {
103
+ protected readonly subRollConfigs: readonly RollConfig[];
104
+ constructor(countOrConfigs?: number | readonly RollConfig[]);
105
+ protected get lastConfig(): RollConfig;
106
+ getSubRollConfigs(): readonly RollConfig[];
107
+ static fromConfig(config: Partial<RollConfig>): RollBuilder;
108
+ static fromConfigs(configs: Partial<RollConfig>[]): RollBuilder;
109
+ static fromArgs(...args: any[]): RollBuilder;
110
+ d(sides: number | undefined): RollBuilder;
111
+ plus(modOrRoll: number | RollBuilder | undefined): RollBuilder;
112
+ plus(count: number, die: RollBuilder): RollBuilder;
113
+ minus(modOrRoll: number | RollBuilder | undefined): RollBuilder;
114
+ minus(count: number, die: RollBuilder): RollBuilder;
115
+ /** Apply one-pass reroll threshold (k): reroll faces 1..k once, must keep. */
116
+ reroll(value: number): RollBuilder;
117
+ /** Set finite explode count for max-face explosions (Infinity allowed). */
118
+ explode(count?: number | undefined): RollBuilder;
119
+ /** Apply per-die minimum value (min > 0). */
120
+ minimum(val: number | undefined): RollBuilder;
121
+ bestOf(count: number | undefined): RollBuilder;
122
+ keepHighest(total: number, count: number): RollBuilder;
123
+ keepLowest(total: number, count: number): RollBuilder;
124
+ withAdvantage(): RollBuilder;
125
+ withDisadvantage(): RollBuilder;
126
+ add(anotherRoll: RollBuilder | undefined): RollBuilder;
127
+ withBonus(anotherRoll: RollBuilder): RollBuilder;
128
+ addRoll(count?: number): RollBuilder;
129
+ doubleDice(): RollBuilder;
130
+ copy(): RollBuilder;
131
+ d4: () => RollBuilder;
132
+ d6: () => RollBuilder;
133
+ d8: () => RollBuilder;
134
+ d10: () => RollBuilder;
135
+ d12: () => RollBuilder;
136
+ d20: () => RollBuilder;
137
+ d100: () => RollBuilder;
138
+ ac(targetAC: number): ACBuilder;
139
+ withElvenAccuracy(): RollBuilder;
140
+ dc(saveDC: number): DCBuilder;
141
+ toExpression(): string;
142
+ toPMF(eps?: number): PMF;
143
+ toQuery(eps?: number): DiceQuery;
144
+ toAST(): ExpressionNode;
145
+ private configToSingleExpressionWithoutModifier;
146
+ getRootDieConfig(): RollConfig | undefined;
147
+ getAllDieConfigs(): readonly RollConfig[];
148
+ getBonusDiceConfigs(): RollConfig[];
149
+ getBonusDicePMFs(check: RollBuilder, eps?: number): PMF[];
150
+ get modifier(): number;
151
+ get rollType(): RollType;
152
+ get baseReroll(): number;
153
+ }
154
+
155
+ type ActionEffect = RollBuilder;
156
+ declare class AttackBuilder implements CheckBuilder {
157
+ readonly check: ACBuilder;
158
+ private readonly hitEffect?;
159
+ private readonly critEffect?;
160
+ private readonly missEffect?;
161
+ constructor(check: ACBuilder, hitEffect?: ActionEffect, critEffect?: ActionEffect | null, missEffect?: ActionEffect);
162
+ onCrit(val: number): AttackBuilder;
163
+ onCrit(val: RollBuilder): AttackBuilder;
164
+ onCrit(count: number, die: RollBuilder): AttackBuilder;
165
+ onCrit(count: number, sides: number): AttackBuilder;
166
+ onCrit(count: number, die: RollBuilder, modifier: number): AttackBuilder;
167
+ onCrit(count: number, sides: number, modifier: number): AttackBuilder;
168
+ onMiss(val: number): AttackBuilder;
169
+ onMiss(val: RollBuilder): AttackBuilder;
170
+ onMiss(count: number, die: RollBuilder): AttackBuilder;
171
+ onMiss(count: number, sides: number): AttackBuilder;
172
+ onMiss(count: number, die: RollBuilder, modifier: number): AttackBuilder;
173
+ onMiss(count: number, sides: number, modifier: number): AttackBuilder;
174
+ noCrit(): AttackBuilder;
175
+ toExpression(): string;
176
+ resolveProbabilities(check: ACBuilder, eps?: number): {
177
+ pSuccess: number;
178
+ pHit: number;
179
+ pCrit: number;
180
+ pMiss: number;
181
+ };
182
+ resolve(eps?: number): AttackResolution;
183
+ toPMF(eps?: number): PMF;
184
+ toQuery(eps?: number): DiceQuery;
185
+ }
186
+
187
+ interface AttackConfig {
188
+ ac: number;
189
+ critThreshold: number;
190
+ }
191
+ declare class ACBuilder extends RollBuilder {
192
+ readonly attackConfig: AttackConfig;
193
+ constructor(baseRoll: RollBuilder, ac: number, attackConfig?: AttackConfig);
194
+ onHit(val: number): AttackBuilder;
195
+ onHit(val: RollBuilder): AttackBuilder;
196
+ onHit(count: number, die: RollBuilder): AttackBuilder;
197
+ onHit(count: number, sides: number): AttackBuilder;
198
+ onHit(count: number, die: RollBuilder, modifier: number): AttackBuilder;
199
+ onHit(count: number, sides: number, modifier: number): AttackBuilder;
200
+ dc(_: number): never;
201
+ get critThreshold(): number;
202
+ critOn(threshold: number): ACBuilder;
203
+ toExpression(): string;
204
+ toPMF(eps?: number): PMF;
205
+ copy(): ACBuilder;
206
+ }
207
+
208
+ type SaveOutcome = "normal" | "half";
209
+ declare class SaveBuilder implements CheckBuilder {
210
+ readonly check: DCBuilder;
211
+ private readonly failureEffect?;
212
+ private readonly saveOutcome;
213
+ constructor(check: DCBuilder, failureEffect?: RollBuilder, saveOutcome?: SaveOutcome);
214
+ saveHalf(): SaveBuilder;
215
+ toExpression(): string;
216
+ resolve(eps?: number): SaveResolution;
217
+ toPMF(eps?: number): PMF;
218
+ toQuery(eps?: number): DiceQuery;
219
+ }
220
+
221
+ interface SaveConfig {
222
+ dc: number;
223
+ }
224
+ declare class DCBuilder extends RollBuilder {
225
+ private readonly saveConfig;
226
+ constructor(baseRoll: RollBuilder, saveConfig?: SaveConfig);
227
+ dc(saveDC: number): DCBuilder;
228
+ get saveDC(): number;
229
+ add(anotherRoll: RollBuilder): DCBuilder;
230
+ addRoll(count?: number): DCBuilder;
231
+ onSaveFailure(val: number): SaveBuilder;
232
+ onSaveFailure(val: RollBuilder): SaveBuilder;
233
+ onSaveFailure(count: number, die: RollBuilder): SaveBuilder;
234
+ onSaveFailure(count: number, sides: number): SaveBuilder;
235
+ onSaveFailure(count: number, die: RollBuilder, modifier: number): SaveBuilder;
236
+ onSaveFailure(count: number, sides: number, modifier: number): SaveBuilder;
237
+ withElvenAccuracy(): never;
238
+ toExpression(): string;
239
+ toPMF(eps?: number): PMF;
240
+ }
241
+
242
+ declare function d(sides: number): RollBuilder;
243
+ declare const d4: RollBuilder;
244
+ declare const d6: RollBuilder;
245
+ declare const d8: RollBuilder;
246
+ declare const d10: RollBuilder;
247
+ declare const d12: RollBuilder;
248
+ declare const d20: RollBuilder;
249
+ declare const hd20: RollBuilder;
250
+ declare const d100: RollBuilder;
251
+ declare const flat: (n: number) => RollBuilder;
252
+ declare const roll: RollFactory;
253
+ declare const builderPMFCache: LRUCache<string, PMF>;
254
+
255
+ export { ACBuilder, type AttackConfig, type AttackResolution, type CheckBuilder, DCBuilder, type KeepMode, 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 };