1a9e5e2c18
- Rules abstraction (5e + pf2e) behind one interface, fully tested - Pure combat engine: turn-order safe across add/remove/reorder/init-change - Dexie storage with real cascade deletes + Zod validation on write - Seedable dice engine with notation parser - Lazy SRD compendium (code-split), bestiary -> combat - Strict TS, 54 unit tests, Playwright e2e smoke (all green) Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
15 lines
353 B
TypeScript
15 lines
353 B
TypeScript
import { z } from 'zod';
|
|
import { num } from './common';
|
|
|
|
export const diceRollSchema = z.object({
|
|
id: z.string(),
|
|
campaignId: z.string().optional(),
|
|
label: z.string().max(120).default(''),
|
|
expression: z.string().min(1),
|
|
total: num,
|
|
breakdown: z.string(),
|
|
createdAt: z.string(),
|
|
});
|
|
|
|
export type DiceRoll = z.infer<typeof diceRollSchema>;
|