@mcptoolshop/roll 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (75) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/LICENSE +21 -0
  3. package/README.es.md +204 -0
  4. package/README.fr.md +204 -0
  5. package/README.hi.md +204 -0
  6. package/README.it.md +204 -0
  7. package/README.ja.md +204 -0
  8. package/README.md +204 -0
  9. package/README.pt-BR.md +204 -0
  10. package/README.zh.md +204 -0
  11. package/dist/analyze/distribution.d.ts +6 -0
  12. package/dist/analyze/distribution.d.ts.map +1 -0
  13. package/dist/analyze/distribution.js +252 -0
  14. package/dist/analyze/distribution.js.map +1 -0
  15. package/dist/analyze/montecarlo.d.ts +5 -0
  16. package/dist/analyze/montecarlo.d.ts.map +1 -0
  17. package/dist/analyze/montecarlo.js +19 -0
  18. package/dist/analyze/montecarlo.js.map +1 -0
  19. package/dist/analyze/stats.d.ts +16 -0
  20. package/dist/analyze/stats.d.ts.map +1 -0
  21. package/dist/analyze/stats.js +66 -0
  22. package/dist/analyze/stats.js.map +1 -0
  23. package/dist/bin.d.ts +3 -0
  24. package/dist/bin.d.ts.map +1 -0
  25. package/dist/bin.js +267 -0
  26. package/dist/bin.js.map +1 -0
  27. package/dist/display/box.d.ts +5 -0
  28. package/dist/display/box.d.ts.map +1 -0
  29. package/dist/display/box.js +26 -0
  30. package/dist/display/box.js.map +1 -0
  31. package/dist/display/color.d.ts +12 -0
  32. package/dist/display/color.d.ts.map +1 -0
  33. package/dist/display/color.js +19 -0
  34. package/dist/display/color.js.map +1 -0
  35. package/dist/display/format.d.ts +13 -0
  36. package/dist/display/format.d.ts.map +1 -0
  37. package/dist/display/format.js +134 -0
  38. package/dist/display/format.js.map +1 -0
  39. package/dist/display/histogram.d.ts +7 -0
  40. package/dist/display/histogram.d.ts.map +1 -0
  41. package/dist/display/histogram.js +48 -0
  42. package/dist/display/histogram.js.map +1 -0
  43. package/dist/engine/random.d.ts +6 -0
  44. package/dist/engine/random.d.ts.map +1 -0
  45. package/dist/engine/random.js +17 -0
  46. package/dist/engine/random.js.map +1 -0
  47. package/dist/engine/roller.d.ts +19 -0
  48. package/dist/engine/roller.d.ts.map +1 -0
  49. package/dist/engine/roller.js +168 -0
  50. package/dist/engine/roller.js.map +1 -0
  51. package/dist/index.d.ts +27 -0
  52. package/dist/index.d.ts.map +1 -0
  53. package/dist/index.js +37 -0
  54. package/dist/index.js.map +1 -0
  55. package/dist/loot/table.d.ts +27 -0
  56. package/dist/loot/table.d.ts.map +1 -0
  57. package/dist/loot/table.js +92 -0
  58. package/dist/loot/table.js.map +1 -0
  59. package/dist/parser/ast.d.ts +27 -0
  60. package/dist/parser/ast.d.ts.map +1 -0
  61. package/dist/parser/ast.js +2 -0
  62. package/dist/parser/ast.js.map +1 -0
  63. package/dist/parser/lexer.d.ts +7 -0
  64. package/dist/parser/lexer.d.ts.map +1 -0
  65. package/dist/parser/lexer.js +126 -0
  66. package/dist/parser/lexer.js.map +1 -0
  67. package/dist/parser/parser.d.ts +7 -0
  68. package/dist/parser/parser.d.ts.map +1 -0
  69. package/dist/parser/parser.js +188 -0
  70. package/dist/parser/parser.js.map +1 -0
  71. package/dist/parser/tokens.d.ts +25 -0
  72. package/dist/parser/tokens.d.ts.map +1 -0
  73. package/dist/parser/tokens.js +21 -0
  74. package/dist/parser/tokens.js.map +1 -0
  75. package/package.json +55 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"distribution.js","sourceRoot":"","sources":["../../src/analyze/distribution.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { ASTNode } from "../parser/ast.js";
2
+ import type { Distribution } from "./distribution.js";
3
+ /** Monte Carlo simulation to estimate distribution. */
4
+ export declare function monteCarloDistribution(ast: ASTNode, samples?: number): Distribution;
5
+ //# sourceMappingURL=montecarlo.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"montecarlo.d.ts","sourceRoot":"","sources":["../../src/analyze/montecarlo.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAGhD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAItD,uDAAuD;AACvD,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,OAAO,EACZ,OAAO,GAAE,MAAwB,GAChC,YAAY,CAgBd"}
@@ -0,0 +1,19 @@
1
+ import { evaluate } from "../engine/roller.js";
2
+ import { seededRng } from "../engine/random.js";
3
+ const DEFAULT_SAMPLES = 100_000;
4
+ /** Monte Carlo simulation to estimate distribution. */
5
+ export function monteCarloDistribution(ast, samples = DEFAULT_SAMPLES) {
6
+ const counts = new Map();
7
+ for (let i = 0; i < samples; i++) {
8
+ const rng = seededRng(i * 2654435761); // spread seeds widely
9
+ const result = evaluate(ast, rng);
10
+ counts.set(result.total, (counts.get(result.total) ?? 0) + 1);
11
+ }
12
+ // Convert counts to probabilities
13
+ const dist = new Map();
14
+ for (const [value, count] of counts) {
15
+ dist.set(value, count / samples);
16
+ }
17
+ return dist;
18
+ }
19
+ //# sourceMappingURL=montecarlo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"montecarlo.js","sourceRoot":"","sources":["../../src/analyze/montecarlo.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAGhD,MAAM,eAAe,GAAG,OAAO,CAAC;AAEhC,uDAAuD;AACvD,MAAM,UAAU,sBAAsB,CACpC,GAAY,EACZ,UAAkB,eAAe;IAEjC,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;IAEzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC;QACjC,MAAM,GAAG,GAAG,SAAS,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,sBAAsB;QAC7D,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAClC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAChE,CAAC;IAED,kCAAkC;IAClC,MAAM,IAAI,GAAiB,IAAI,GAAG,EAAE,CAAC;IACrC,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,MAAM,EAAE,CAAC;QACpC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,CAAC;IACnC,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,16 @@
1
+ import type { Distribution } from "./distribution.js";
2
+ export interface DistributionStats {
3
+ min: number;
4
+ max: number;
5
+ mean: number;
6
+ median: number;
7
+ mode: number;
8
+ stddev: number;
9
+ percentiles: Record<number, number>;
10
+ entropy: number;
11
+ }
12
+ /** Compute statistics from a probability distribution. */
13
+ export declare function computeStats(dist: Distribution): DistributionStats;
14
+ /** Compute P(result >= target). */
15
+ export declare function probabilityAtLeast(dist: Distribution, target: number): number;
16
+ //# sourceMappingURL=stats.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stats.d.ts","sourceRoot":"","sources":["../../src/analyze/stats.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtD,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,0DAA0D;AAC1D,wBAAgB,YAAY,CAAC,IAAI,EAAE,YAAY,GAAG,iBAAiB,CAkElE;AAED,mCAAmC;AACnC,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAM7E"}
@@ -0,0 +1,66 @@
1
+ /** Compute statistics from a probability distribution. */
2
+ export function computeStats(dist) {
3
+ // Sort by value
4
+ const entries = [...dist.entries()].sort((a, b) => a[0] - b[0]);
5
+ if (entries.length === 0) {
6
+ return {
7
+ min: 0, max: 0, mean: 0, median: 0, mode: 0,
8
+ stddev: 0, percentiles: {}, entropy: 0,
9
+ };
10
+ }
11
+ const min = entries[0][0];
12
+ const max = entries[entries.length - 1][0];
13
+ // Mean
14
+ let mean = 0;
15
+ for (const [v, p] of entries) {
16
+ mean += v * p;
17
+ }
18
+ // Mode (highest probability value)
19
+ let mode = entries[0][0];
20
+ let modeProbability = 0;
21
+ for (const [v, p] of entries) {
22
+ if (p > modeProbability) {
23
+ modeProbability = p;
24
+ mode = v;
25
+ }
26
+ }
27
+ // Standard deviation
28
+ let variance = 0;
29
+ for (const [v, p] of entries) {
30
+ variance += p * (v - mean) ** 2;
31
+ }
32
+ const stddev = Math.sqrt(variance);
33
+ // Percentiles via cumulative distribution
34
+ const percentileKeys = [10, 25, 50, 75, 90, 95];
35
+ const percentiles = {};
36
+ let cumulative = 0;
37
+ let percentileIndex = 0;
38
+ for (const [v, p] of entries) {
39
+ cumulative += p;
40
+ while (percentileIndex < percentileKeys.length &&
41
+ cumulative >= percentileKeys[percentileIndex] / 100) {
42
+ percentiles[percentileKeys[percentileIndex]] = v;
43
+ percentileIndex++;
44
+ }
45
+ }
46
+ // Median is the 50th percentile
47
+ const median = percentiles[50] ?? mode;
48
+ // Shannon entropy
49
+ let entropy = 0;
50
+ for (const [, p] of entries) {
51
+ if (p > 0) {
52
+ entropy -= p * Math.log2(p);
53
+ }
54
+ }
55
+ return { min, max, mean, median, mode, stddev, percentiles, entropy };
56
+ }
57
+ /** Compute P(result >= target). */
58
+ export function probabilityAtLeast(dist, target) {
59
+ let prob = 0;
60
+ for (const [v, p] of dist) {
61
+ if (v >= target)
62
+ prob += p;
63
+ }
64
+ return prob;
65
+ }
66
+ //# sourceMappingURL=stats.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stats.js","sourceRoot":"","sources":["../../src/analyze/stats.ts"],"names":[],"mappings":"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"}
package/dist/bin.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=bin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bin.d.ts","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":""}
package/dist/bin.js ADDED
@@ -0,0 +1,267 @@
1
+ #!/usr/bin/env node
2
+ import { parseArgs } from "node:util";
3
+ import { readFileSync } from "node:fs";
4
+ import { createRequire } from "node:module";
5
+ import { parse } from "./parser/parser.js";
6
+ import { evaluate } from "./engine/roller.js";
7
+ import { computeDistribution } from "./analyze/distribution.js";
8
+ import { computeStats, probabilityAtLeast } from "./analyze/stats.js";
9
+ import { rollLootTable, validateLootTables } from "./loot/table.js";
10
+ import { formatRollResult, formatStats, formatAtLeast, formatComparison, formatJson } from "./display/format.js";
11
+ import { renderHistogram } from "./display/histogram.js";
12
+ import { bold, cyan, dim, red, green, boldYellow } from "./display/color.js";
13
+ import { drawBox } from "./display/box.js";
14
+ const require = createRequire(import.meta.url);
15
+ const { version } = require("../package.json");
16
+ const USAGE = `
17
+ ${bold("@mcptoolshop/roll")} ${dim(`v${version}`)} — RPG dice engine
18
+
19
+ ${bold("Usage:")}
20
+ ${cyan("roll")} <expression> Roll dice
21
+ ${cyan("roll")} <expression> ${dim("--analyze")} Show probability distribution
22
+ ${cyan("roll")} <expression> ${dim("--at-least")} N P(result >= N)
23
+ ${cyan("roll")} ${dim("--compare")} "expr1" "expr2" Compare two distributions
24
+ ${cyan("roll")} ${dim("--loot")} table.json Roll on a loot table
25
+ ${cyan("roll")} <expression> ${dim("--times")} N Roll N times
26
+
27
+ ${bold("Dice Notation:")}
28
+ 2d6 Roll two six-sided dice
29
+ d20+5 Roll d20, add 5
30
+ 4d6kh3 Roll 4d6, keep highest 3
31
+ 4d6dl1 Roll 4d6, drop lowest 1
32
+ 1d6! Exploding d6 (reroll on max)
33
+ 1d6!>4 Explode on 4+
34
+ d% Percentile die (1-100)
35
+ 4dF Four Fate/Fudge dice (-1, 0, +1)
36
+ (2d6+3)*2 Grouped arithmetic
37
+
38
+ ${bold("Flags:")}
39
+ --analyze Show full probability distribution + statistics
40
+ --at-least N Show probability of rolling >= N
41
+ --compare Compare two dice expressions side by side
42
+ --loot FILE Roll on a JSON loot table
43
+ --times N Roll multiple times (default: 1)
44
+ --json Output as JSON
45
+ --help Show this help
46
+ --version Show version
47
+ `;
48
+ function main() {
49
+ const { values, positionals } = parseArgs({
50
+ allowPositionals: true,
51
+ options: {
52
+ analyze: { type: "boolean", default: false },
53
+ "at-least": { type: "string" },
54
+ compare: { type: "boolean", default: false },
55
+ loot: { type: "string" },
56
+ times: { type: "string", default: "1" },
57
+ json: { type: "boolean", default: false },
58
+ help: { type: "boolean", short: "h", default: false },
59
+ version: { type: "boolean", short: "v", default: false },
60
+ },
61
+ });
62
+ if (values.help) {
63
+ console.log(USAGE);
64
+ return;
65
+ }
66
+ if (values.version) {
67
+ console.log(`@mcptoolshop/roll v${version}`);
68
+ return;
69
+ }
70
+ // Loot table mode
71
+ if (values.loot) {
72
+ return handleLoot(values.loot, values.json);
73
+ }
74
+ // Compare mode
75
+ if (values.compare) {
76
+ if (positionals.length < 2) {
77
+ console.error(red("Error: --compare requires two dice expressions"));
78
+ console.error(dim(' Example: roll --compare "4d6dl1" "3d6"'));
79
+ process.exit(1);
80
+ }
81
+ return handleCompare(positionals[0], positionals[1], values.json);
82
+ }
83
+ // Need at least one expression
84
+ if (positionals.length === 0) {
85
+ console.log(USAGE);
86
+ return;
87
+ }
88
+ const expression = positionals.join("");
89
+ const times = parseInt(values.times, 10) || 1;
90
+ // At-least mode
91
+ if (values["at-least"]) {
92
+ const target = parseInt(values["at-least"], 10);
93
+ if (isNaN(target)) {
94
+ console.error(red("Error: --at-least requires a number"));
95
+ process.exit(1);
96
+ }
97
+ return handleAtLeast(expression, target, values.json);
98
+ }
99
+ // Analyze mode
100
+ if (values.analyze) {
101
+ return handleAnalyze(expression, values.json);
102
+ }
103
+ // Roll mode
104
+ handleRoll(expression, times, values.json);
105
+ }
106
+ function handleRoll(expression, times, json) {
107
+ try {
108
+ const ast = parse(expression);
109
+ for (let i = 0; i < times; i++) {
110
+ const result = evaluate(ast);
111
+ result.expression = expression;
112
+ if (json) {
113
+ console.log(formatJson(result, expression));
114
+ }
115
+ else {
116
+ if (times > 1) {
117
+ console.log(dim(`--- Roll ${i + 1} of ${times} ---`));
118
+ }
119
+ console.log(formatRollResult(result, expression));
120
+ if (i < times - 1)
121
+ console.log();
122
+ }
123
+ }
124
+ if (times > 1 && !json) {
125
+ // Show summary for multiple rolls
126
+ const totals = [];
127
+ const summaryAst = parse(expression);
128
+ for (let i = 0; i < times; i++) {
129
+ totals.push(evaluate(summaryAst).total);
130
+ }
131
+ // Already printed above — just totals were from different RNG calls
132
+ }
133
+ }
134
+ catch (e) {
135
+ console.error(red(`Error: ${e.message}`));
136
+ process.exit(1);
137
+ }
138
+ }
139
+ function handleAnalyze(expression, json) {
140
+ try {
141
+ const ast = parse(expression);
142
+ const dist = computeDistribution(ast);
143
+ const stats = computeStats(dist);
144
+ if (json) {
145
+ const entries = [...dist.entries()].sort((a, b) => a[0] - b[0]);
146
+ console.log(JSON.stringify({ expression, stats, distribution: entries }, null, 2));
147
+ return;
148
+ }
149
+ console.log();
150
+ console.log(renderHistogram(dist, stats));
151
+ console.log();
152
+ console.log(formatStats(stats));
153
+ console.log();
154
+ }
155
+ catch (e) {
156
+ console.error(red(`Error: ${e.message}`));
157
+ process.exit(1);
158
+ }
159
+ }
160
+ function handleAtLeast(expression, target, json) {
161
+ try {
162
+ const ast = parse(expression);
163
+ const dist = computeDistribution(ast);
164
+ const prob = probabilityAtLeast(dist, target);
165
+ if (json) {
166
+ console.log(JSON.stringify({ expression, target, probability: prob }, null, 2));
167
+ return;
168
+ }
169
+ console.log();
170
+ console.log(formatAtLeast(target, prob, expression));
171
+ console.log();
172
+ }
173
+ catch (e) {
174
+ console.error(red(`Error: ${e.message}`));
175
+ process.exit(1);
176
+ }
177
+ }
178
+ function handleCompare(expr1, expr2, json) {
179
+ try {
180
+ const ast1 = parse(expr1);
181
+ const ast2 = parse(expr2);
182
+ const dist1 = computeDistribution(ast1);
183
+ const dist2 = computeDistribution(ast2);
184
+ const stats1 = computeStats(dist1);
185
+ const stats2 = computeStats(dist2);
186
+ if (json) {
187
+ console.log(JSON.stringify({ expressions: [expr1, expr2], stats: [stats1, stats2] }, null, 2));
188
+ return;
189
+ }
190
+ console.log();
191
+ console.log(formatComparison(expr1, stats1, expr2, stats2));
192
+ console.log();
193
+ // Show both histograms
194
+ console.log(bold(cyan(` ${expr1}`)));
195
+ console.log(renderHistogram(dist1, stats1, 40));
196
+ console.log();
197
+ console.log(bold(cyan(` ${expr2}`)));
198
+ console.log(renderHistogram(dist2, stats2, 40));
199
+ console.log();
200
+ }
201
+ catch (e) {
202
+ console.error(red(`Error: ${e.message}`));
203
+ process.exit(1);
204
+ }
205
+ }
206
+ function handleLoot(filePath, json) {
207
+ try {
208
+ const raw = readFileSync(filePath, "utf-8");
209
+ const data = JSON.parse(raw);
210
+ // Accept either { tables: [...] } or [...] or a single table object
211
+ let tables;
212
+ if (Array.isArray(data)) {
213
+ tables = data;
214
+ }
215
+ else if (data.tables) {
216
+ tables = data.tables;
217
+ }
218
+ else if (data.table && data.items) {
219
+ tables = [data];
220
+ }
221
+ else {
222
+ console.error(red("Error: Invalid loot table format"));
223
+ process.exit(1);
224
+ return;
225
+ }
226
+ const errors = validateLootTables(tables);
227
+ if (errors.length > 0) {
228
+ console.error(red("Loot table validation errors:"));
229
+ for (const err of errors)
230
+ console.error(red(` - ${err}`));
231
+ process.exit(1);
232
+ }
233
+ const drops = rollLootTable(tables);
234
+ if (json) {
235
+ console.log(JSON.stringify(drops, null, 2));
236
+ return;
237
+ }
238
+ const lines = [];
239
+ for (const drop of drops) {
240
+ let line = boldYellow(drop.item);
241
+ if (drop.quantity > 1)
242
+ line += dim(` x${drop.quantity}`);
243
+ if (drop.rollValue !== undefined) {
244
+ line += ` ${dim("(")}${green(String(drop.rollValue))}${dim(")")}`;
245
+ if (drop.rollExpression)
246
+ line += dim(` [${drop.rollExpression}]`);
247
+ }
248
+ lines.push(line);
249
+ }
250
+ lines.push("");
251
+ lines.push(dim(`from: ${drops[0]?.fromTable ?? "unknown"}`));
252
+ console.log();
253
+ console.log(drawBox(lines, "Loot Drop"));
254
+ console.log();
255
+ }
256
+ catch (e) {
257
+ if (e.code === "ENOENT") {
258
+ console.error(red(`Error: File not found: ${filePath}`));
259
+ }
260
+ else {
261
+ console.error(red(`Error: ${e.message}`));
262
+ }
263
+ process.exit(1);
264
+ }
265
+ }
266
+ main();
267
+ //# sourceMappingURL=bin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /** Strip ANSI escape sequences to get visible character length. */
2
+ export declare function stripAnsi(s: string): number;
3
+ /** Draw a Unicode box around lines of text. */
4
+ export declare function drawBox(lines: string[], title?: string): string;
5
+ //# sourceMappingURL=box.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"box.d.ts","sourceRoot":"","sources":["../../src/display/box.ts"],"names":[],"mappings":"AASA,mEAAmE;AACnE,wBAAgB,SAAS,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAE3C;AAED,+CAA+C;AAC/C,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAgB/D"}
@@ -0,0 +1,26 @@
1
+ import { bold, dim } from "./color.js";
2
+ const TOP_LEFT = "┌";
3
+ const TOP_RIGHT = "┐";
4
+ const BOTTOM_LEFT = "└";
5
+ const BOTTOM_RIGHT = "┘";
6
+ const HORIZONTAL = "─";
7
+ const VERTICAL = "│";
8
+ /** Strip ANSI escape sequences to get visible character length. */
9
+ export function stripAnsi(s) {
10
+ return s.replace(/\x1b\[[0-9;]*m/g, "").length;
11
+ }
12
+ /** Draw a Unicode box around lines of text. */
13
+ export function drawBox(lines, title) {
14
+ const maxLen = Math.max(...lines.map(stripAnsi), title ? stripAnsi(title) + 2 : 0);
15
+ const width = maxLen + 2; // 1 space padding each side
16
+ const top = title
17
+ ? `${TOP_LEFT}${HORIZONTAL} ${bold(title)} ${HORIZONTAL.repeat(Math.max(0, width - stripAnsi(title) - 3))}${TOP_RIGHT}`
18
+ : `${TOP_LEFT}${HORIZONTAL.repeat(width)}${TOP_RIGHT}`;
19
+ const bottom = `${BOTTOM_LEFT}${HORIZONTAL.repeat(width)}${BOTTOM_RIGHT}`;
20
+ const body = lines.map((line) => {
21
+ const pad = maxLen - stripAnsi(line);
22
+ return `${dim(VERTICAL)} ${line}${" ".repeat(pad)} ${dim(VERTICAL)}`;
23
+ });
24
+ return [top, ...body, bottom].join("\n");
25
+ }
26
+ //# sourceMappingURL=box.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"box.js","sourceRoot":"","sources":["../../src/display/box.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AAEvC,MAAM,QAAQ,GAAG,GAAG,CAAC;AACrB,MAAM,SAAS,GAAG,GAAG,CAAC;AACtB,MAAM,WAAW,GAAG,GAAG,CAAC;AACxB,MAAM,YAAY,GAAG,GAAG,CAAC;AACzB,MAAM,UAAU,GAAG,GAAG,CAAC;AACvB,MAAM,QAAQ,GAAG,GAAG,CAAC;AAErB,mEAAmE;AACnE,MAAM,UAAU,SAAS,CAAC,CAAS;IACjC,OAAO,CAAC,CAAC,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC;AACjD,CAAC;AAED,+CAA+C;AAC/C,MAAM,UAAU,OAAO,CAAC,KAAe,EAAE,KAAc;IACrD,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACnF,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC,4BAA4B;IAEtD,MAAM,GAAG,GAAG,KAAK;QACf,CAAC,CAAC,GAAG,QAAQ,GAAG,UAAU,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,SAAS,EAAE;QACvH,CAAC,CAAC,GAAG,QAAQ,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,SAAS,EAAE,CAAC;IAEzD,MAAM,MAAM,GAAG,GAAG,WAAW,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,YAAY,EAAE,CAAC;IAE1E,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QAC9B,MAAM,GAAG,GAAG,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;QACrC,OAAO,GAAG,GAAG,CAAC,QAAQ,CAAC,IAAI,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;IACvE,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,GAAG,EAAE,GAAG,IAAI,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC3C,CAAC"}
@@ -0,0 +1,12 @@
1
+ export declare const bold: (s: string) => string;
2
+ export declare const dim: (s: string) => string;
3
+ export declare const red: (s: string) => string;
4
+ export declare const green: (s: string) => string;
5
+ export declare const yellow: (s: string) => string;
6
+ export declare const cyan: (s: string) => string;
7
+ export declare const magenta: (s: string) => string;
8
+ export declare const boldGreen: (s: string) => string;
9
+ export declare const boldRed: (s: string) => string;
10
+ export declare const boldYellow: (s: string) => string;
11
+ export declare const boldCyan: (s: string) => string;
12
+ //# sourceMappingURL=color.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"color.d.ts","sourceRoot":"","sources":["../../src/display/color.ts"],"names":[],"mappings":"AASA,eAAO,MAAM,IAAI,GAAI,GAAG,MAAM,WAAqB,CAAC;AACpD,eAAO,MAAM,GAAG,GAAI,GAAG,MAAM,WAAoB,CAAC;AAClD,eAAO,MAAM,GAAG,GAAI,GAAG,MAAM,WAAoB,CAAC;AAClD,eAAO,MAAM,KAAK,GAAI,GAAG,MAAM,WAAsB,CAAC;AACtD,eAAO,MAAM,MAAM,GAAI,GAAG,MAAM,WAAuB,CAAC;AACxD,eAAO,MAAM,IAAI,GAAI,GAAG,MAAM,WAAqB,CAAC;AACpD,eAAO,MAAM,OAAO,GAAI,GAAG,MAAM,WAAwB,CAAC;AAC1D,eAAO,MAAM,SAAS,GAAI,GAAG,MAAM,WAAgC,CAAC;AACpE,eAAO,MAAM,OAAO,GAAI,GAAG,MAAM,WAA8B,CAAC;AAChE,eAAO,MAAM,UAAU,GAAI,GAAG,MAAM,WAAiC,CAAC;AACtE,eAAO,MAAM,QAAQ,GAAI,GAAG,MAAM,WAA+B,CAAC"}
@@ -0,0 +1,19 @@
1
+ import { styleText } from "node:util";
2
+ const noColor = !!process.env["NO_COLOR"];
3
+ function style(styles, text) {
4
+ if (noColor)
5
+ return text;
6
+ return styleText(styles, text);
7
+ }
8
+ export const bold = (s) => style("bold", s);
9
+ export const dim = (s) => style("dim", s);
10
+ export const red = (s) => style("red", s);
11
+ export const green = (s) => style("green", s);
12
+ export const yellow = (s) => style("yellow", s);
13
+ export const cyan = (s) => style("cyan", s);
14
+ export const magenta = (s) => style("magenta", s);
15
+ export const boldGreen = (s) => style(["bold", "green"], s);
16
+ export const boldRed = (s) => style(["bold", "red"], s);
17
+ export const boldYellow = (s) => style(["bold", "yellow"], s);
18
+ export const boldCyan = (s) => style(["bold", "cyan"], s);
19
+ //# sourceMappingURL=color.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"color.js","sourceRoot":"","sources":["../../src/display/color.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,MAAM,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;AAE1C,SAAS,KAAK,CAAC,MAAyB,EAAE,IAAY;IACpD,IAAI,OAAO;QAAE,OAAO,IAAI,CAAC;IACzB,OAAO,SAAS,CAAC,MAAyC,EAAE,IAAI,CAAC,CAAC;AACpE,CAAC;AAED,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;AACpD,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AAClD,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AAClD,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;AACtD,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;AACxD,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;AACpD,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;AAC1D,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;AACpE,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;AAChE,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;AACtE,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC"}
@@ -0,0 +1,13 @@
1
+ import type { RollResult } from "../engine/roller.js";
2
+ import type { DistributionStats } from "../analyze/stats.js";
3
+ /** Format a roll result for terminal display. */
4
+ export declare function formatRollResult(result: RollResult, expression: string): string;
5
+ /** Format stats summary for terminal display. */
6
+ export declare function formatStats(stats: DistributionStats): string;
7
+ /** Format probability for --at-least display. */
8
+ export declare function formatAtLeast(target: number, probability: number, expression: string): string;
9
+ /** Format a comparison of two distributions side by side. */
10
+ export declare function formatComparison(expr1: string, stats1: DistributionStats, expr2: string, stats2: DistributionStats): string;
11
+ /** Format roll result as JSON. */
12
+ export declare function formatJson(result: RollResult, expression: string): string;
13
+ //# sourceMappingURL=format.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../src/display/format.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAA8B,MAAM,qBAAqB,CAAC;AAClF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAqC7D,iDAAiD;AACjD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAc/E;AAED,iDAAiD;AACjD,wBAAgB,WAAW,CAAC,KAAK,EAAE,iBAAiB,GAAG,MAAM,CAmB5D;AAED,iDAAiD;AACjD,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAsB7F;AAED,6DAA6D;AAC7D,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,iBAAiB,EACzB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,iBAAiB,GACxB,MAAM,CAyBR;AAED,kCAAkC;AAClC,wBAAgB,UAAU,CAAC,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAczE"}