UNPKG

@randsum/dice

Version:

A flexible, type-safe dice roller for tabletop RPGs, game development, and probability simulations

40 lines (39 loc) • 1.4 kB
#!/usr/bin/env node import { validateNotation } from '@randsum/notation'; import { roll } from './roll'; function main() { const args = process.argv.slice(2); if (args.length === 0) { console.error('Error: Please provide dice notation (e.g., "2d20" or "4d6L")'); process.exit(1); } const validated = validateNotation(args[0] ?? ''); if (!validated.valid) { console.error('Error: Please provide valid dice notation (e.g., "2d20" or "4d6L")'); process.exit(1); } const message = formatMessage(roll(validated.notation), validated); console.log(message); process.exit(1); } function formatMessage(result, { description, digested }) { const hasModifiers = digested.modifiers !== undefined; const rollResult = result.rawResults.join(', '); const rawRolls = Object.values(result.rolls.map((roll) => roll.rawRolls)) .flat() .join(', '); if (hasModifiers) { return messageFrame(String(result.total), `Raw Rolls: [${rawRolls}]\nRolls: [${rollResult}]`, description.join(', ')); } return messageFrame(String(result.total), `Rolls: [${result.rawResults.join(', ')}]`, description.join(', ')); } function messageFrame(total, inner, description) { return ` šŸŽ² RANDSUM Roll Result: ─────────────── Total: ${total} ${inner} Description: ${description} `; } main();