Skip to content

Getting Started with Notation

Install @randsum/notation to validate and parse dice notation strings without the roll engine.

Terminal window
bun add @randsum/notation

Use isDiceNotation() as a type guard to check user input before processing it:

import { isDiceNotation } from '@randsum/notation'
isDiceNotation('4d6L') // true
isDiceNotation('not-valid') // false
if (isDiceNotation(userInput)) {
// userInput is now typed as DiceNotation
}

validateNotation() returns a result object with either the parsed structure or error details:

import { validateNotation } from '@randsum/notation'
const result = validateNotation('4d6L')
if (result.valid) {
console.log(result.notation) // ['4d6L']
console.log(result.options) // [{ sides: 6, quantity: 4, modifiers: { drop: { lowest: 1 } } }]
} else {
console.log(result.error) // { message: '...', argument: '...' }
}

Convert a notation string into structured ParsedNotationOptions. Returns an array (one entry per roll group):

import { isDiceNotation, notationToOptions } from '@randsum/notation'
const notation = '2d6+3'
if (isDiceNotation(notation)) {
const [options] = notationToOptions(notation)
console.log(options.sides) // 6
console.log(options.quantity) // 2
console.log(options.modifiers) // { plus: 3 }
}
import { optionsToNotation } from '@randsum/notation'
const notation = optionsToNotation({
sides: 6,
quantity: 4,
modifiers: { drop: { lowest: 1 } }
})
console.log(notation) // '4d6L'