@yipe/dice 0.7.0 → 0.8.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.
@@ -6,6 +6,8 @@ import type { DiceQuery } from "../pmf/query.js";
6
6
  import { AttackBuilder } from "./attack.js";
7
7
  import type { ExpressionNode } from "./nodes.js";
8
8
  import type { RollConfig, RollType } from "./types.js";
9
+ /** Clears the plain-roll PMF cache (test/bench seam; mirrors {@link clearAttackCache}). */
10
+ export declare function clearRollCache(): void;
9
11
  export declare const defaultConfig: RollConfig;
10
12
  export declare class RollBuilder {
11
13
  protected readonly subRollConfigs: readonly RollConfig[];
@@ -14,6 +16,15 @@ export declare class RollBuilder {
14
16
  protected get lastConfig(): RollConfig;
15
17
  hasHiddenState(): boolean;
16
18
  getSubRollConfigs(): readonly RollConfig[];
19
+ /**
20
+ * A cheap, stable string that FULLY identifies this builder's PMF — used by {@link AttackBuilder.toPMF}
21
+ * to cache resolved attack PMFs across rebuilds without walking the AST via {@link toExpression}. A plain
22
+ * roll is fully determined by its {@link RollConfig} array (count/sides/modifier/reroll/explode/minimum/
23
+ * bestOf/keep/rollType/isSubtraction), so serializing that is sound. Subclasses whose PMF depends on
24
+ * hidden state NOT captured by `subRollConfigs` (half/scale/max/parsed/pooled/composite transforms) return
25
+ * `null` to opt OUT of caching — a conservative miss is always safe; a wrong key would corrupt DPR.
26
+ */
27
+ cacheKey(): string | null;
17
28
  static fromConfig(config: Partial<RollConfig>): RollBuilder;
18
29
  static fromConfigs(configs: Partial<RollConfig>[]): RollBuilder;
19
30
  static fromArgs(...args: any[]): RollBuilder;
@@ -80,6 +91,7 @@ export declare class HalfRollBuilder extends RollBuilder {
80
91
  private readonly innerRoll;
81
92
  constructor(innerRoll: RollBuilder);
82
93
  hasHiddenState(): boolean;
94
+ cacheKey(): string | null;
83
95
  get lastConfig(): RollConfig;
84
96
  getSubRollConfigs(): readonly RollConfig[];
85
97
  toExpression(): string;
@@ -99,6 +111,7 @@ export declare class ScaleRollBuilder extends RollBuilder {
99
111
  private readonly rounding;
100
112
  constructor(innerRoll: RollBuilder, numerator: number, denominator?: number, rounding?: "floor" | "round" | "ceil");
101
113
  hasHiddenState(): boolean;
114
+ cacheKey(): string | null;
102
115
  get lastConfig(): RollConfig;
103
116
  getSubRollConfigs(): readonly RollConfig[];
104
117
  toExpression(): string;
@@ -113,6 +126,7 @@ export declare class MaxOfRollBuilder extends RollBuilder {
113
126
  private readonly diceSides?;
114
127
  constructor(innerRoll: RollBuilder, count: number, diceCount?: number | undefined, diceSides?: number | undefined);
115
128
  hasHiddenState(): boolean;
129
+ cacheKey(): string | null;
116
130
  get lastConfig(): RollConfig;
117
131
  getSubRollConfigs(): readonly RollConfig[];
118
132
  toExpression(): string;
@@ -132,6 +146,7 @@ export declare class AlwaysHitBuilder extends RollBuilder {
132
146
  onHit(count: number, die: RollBuilder, modifier: number): AttackBuilder;
133
147
  onHit(count: number, sides: number, modifier: number): AttackBuilder;
134
148
  get critThreshold(): number;
149
+ cacheKey(): string | null;
135
150
  critOn(critThreshold: number): AlwaysHitBuilder;
136
151
  alwaysCrits(): AlwaysCritBuilder;
137
152
  toExpression(): string;
@@ -155,6 +170,7 @@ export declare class AlwaysCritBuilder extends RollBuilder {
155
170
  onHit(count: number, die: RollBuilder, modifier: number): AttackBuilder;
156
171
  onHit(count: number, sides: number, modifier: number): AttackBuilder;
157
172
  get critThreshold(): number;
173
+ cacheKey(): string | null;
158
174
  critOn(critThreshold: number): AlwaysCritBuilder;
159
175
  toExpression(): string;
160
176
  toPMF(): PMF;
@@ -165,6 +181,7 @@ export declare class ParsedRollBuilder extends RollBuilder {
165
181
  private readonly originalExpression;
166
182
  constructor(expression: string);
167
183
  hasHiddenState(): boolean;
184
+ cacheKey(): string | null;
168
185
  protected create(configs: readonly RollConfig[]): RollBuilder;
169
186
  toPMF(_eps?: number): PMF;
170
187
  toExpression(): string;
@@ -178,6 +195,7 @@ export declare class PooledRollBuilder extends RollBuilder {
178
195
  constructor(baseAST: ExpressionNode, baseExpression: string, configs?: readonly RollConfig[]);
179
196
  protected create(configs: readonly RollConfig[]): PooledRollBuilder;
180
197
  hasHiddenState(): boolean;
198
+ cacheKey(): string | null;
181
199
  d(_sides: number | undefined): RollBuilder;
182
200
  reroll(_value: number): RollBuilder;
183
201
  explode(_count?: number | undefined): RollBuilder;
@@ -1 +1 @@
1
- {"version":3,"file":"roll.d.ts","sourceRoot":"","sources":["../../src/builder/roll.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"roll.d.ts","sourceRoot":"","sources":["../../src/builder/roll.ts"],"names":[],"mappings":"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"}
@@ -4,6 +4,8 @@ import type { DCBuilder } from "./dc.js";
4
4
  import { type RollBuilder } from "./roll.js";
5
5
  import type { CheckBuilder, SaveResolution } from "./types.js";
6
6
  export type SaveOutcome = "normal" | "half";
7
+ /** Clears the resolved-save PMF cache (test/bench seam; mirrors {@link clearAttackCache}). */
8
+ export declare function clearSaveCache(): void;
7
9
  export declare class SaveBuilder implements CheckBuilder {
8
10
  readonly check: DCBuilder;
9
11
  private readonly failureEffect?;
@@ -12,6 +14,13 @@ export declare class SaveBuilder implements CheckBuilder {
12
14
  saveHalf(): SaveBuilder;
13
15
  toExpression(): string;
14
16
  resolve(eps?: number): SaveResolution;
17
+ /**
18
+ * A cheap, complete key for this save's resolved PMF, or `null` when it can't be cached soundly.
19
+ * {@link resolve} reads exactly three things: the DC check (via `resolveProbabilities`), the failure
20
+ * effect's PMF, and the save outcome — so composing their keys pins it. A `ParsedRollBuilder` failure
21
+ * effect returns `null`, which correctly forces this uncached.
22
+ */
23
+ private cacheKey;
15
24
  toPMF(eps?: number): PMF;
16
25
  get pmf(): PMF;
17
26
  toQuery(eps?: number): DiceQuery;
@@ -1 +1 @@
1
- {"version":3,"file":"save.d.ts","sourceRoot":"","sources":["../../src/builder/save.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AACjC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAG9C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AACtC,OAAO,EAAqB,KAAK,WAAW,EAAE,MAAM,QAAQ,CAAC;AAC7D,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE5D,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,MAAM,CAAC;AAE5C,qBAAa,WAAY,YAAW,YAAY;IAE5C,QAAQ,CAAC,KAAK,EAAE,SAAS;IACzB,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC;IAC/B,OAAO,CAAC,QAAQ,CAAC,WAAW;IAH9B,YACW,KAAK,EAAE,SAAS,EACR,aAAa,CAAC,EAAE,WAAW,YAAA,EAC3B,WAAW,GAAE,WAAsB,EAClD;IAEJ,QAAQ,IAAI,WAAW,CAEtB;IAED,YAAY,IAAI,MAAM,CAOrB;IAED,OAAO,CAAC,GAAG,GAAE,MAAY,GAAG,cAAc,CA8BzC;IAGD,KAAK,CAAC,GAAG,GAAE,MAAU,GAAG,GAAG,CAE1B;IAED,IAAI,GAAG,QAEN;IAGD,OAAO,CAAC,GAAG,GAAE,MAAU,GAAG,SAAS,CAElC;CACF"}
1
+ {"version":3,"file":"save.d.ts","sourceRoot":"","sources":["../../src/builder/save.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AACjC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAG9C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AACtC,OAAO,EAAqB,KAAK,WAAW,EAAE,MAAM,QAAQ,CAAC;AAC7D,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE5D,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,MAAM,CAAC;AAU5C,8FAA8F;AAC9F,wBAAgB,cAAc,IAAI,IAAI,CAErC;AAED,qBAAa,WAAY,YAAW,YAAY;IAE5C,QAAQ,CAAC,KAAK,EAAE,SAAS;IACzB,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC;IAC/B,OAAO,CAAC,QAAQ,CAAC,WAAW;IAH9B,YACW,KAAK,EAAE,SAAS,EACR,aAAa,CAAC,EAAE,WAAW,YAAA,EAC3B,WAAW,GAAE,WAAsB,EAClD;IAEJ,QAAQ,IAAI,WAAW,CAEtB;IAED,YAAY,IAAI,MAAM,CAOrB;IAED,OAAO,CAAC,GAAG,GAAE,MAAY,GAAG,cAAc,CA8BzC;IAED;;;;;OAKG;IACH,OAAO,CAAC,QAAQ;IAehB,KAAK,CAAC,GAAG,GAAE,MAAU,GAAG,GAAG,CAQ1B;IAED,IAAI,GAAG,QAEN;IAGD,OAAO,CAAC,GAAG,GAAE,MAAU,GAAG,SAAS,CAElC;CACF"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yipe/dice",
3
- "version": "0.7.0",
3
+ "version": "0.8.1",
4
4
  "description": "A high-performance dice probability engine for D&D 5e DPR calculations. Powers dprcalc.com.",
5
5
  "keywords": [
6
6
  "dnd",