roll-parser - v3.4.0
    Preparing search index...

    Type Alias RollParserErrorCode

    RollParserErrorCode: typeof ROLL_PARSER_ERROR_CODES[number]

    Programmatic identifier carried by every roll-parser error, grouped by the stage that raises it. The runtime list behind this union is exported as ROLL_PARSER_ERROR_CODES.

    Lexer: UNEXPECTED_CHARACTER, UNEXPECTED_IDENTIFIER

    Parser: UNEXPECTED_TOKEN, UNEXPECTED_END, EXPECTED_TOKEN, INVALID_KEEP_DROP_TARGET, INVALID_EXPLODE_TARGET, INVALID_REROLL_TARGET, INVALID_SUCCESS_COUNT_TARGET, INVALID_SORT_TARGET, INVALID_CRIT_THRESHOLD_TARGET, INVALID_DIE_BOUND_TARGET, NESTED_VERSUS, INVALID_FUNCTION_ARITY, AMBIGUOUS_DICE_CHAIN, MAX_DEPTH_EXCEEDED

    Evaluator: INVALID_DICE_COUNT, INVALID_DICE_SIDES, DICE_LIMIT_EXCEEDED, DIVISION_BY_ZERO, MODULO_BY_ZERO, UNKNOWN_OPERATOR, UNKNOWN_NODE_TYPE, INVALID_KEEP_DROP_COUNT, EXPLODE_LIMIT_EXCEEDED, REROLL_LIMIT_EXCEEDED, INVALID_THRESHOLD, NESTED_VERSUS, UNKNOWN_FUNCTION, UNDEFINED_VARIABLE, INVALID_VARIABLE_VALUE, NON_FINITE_RESULT

    RNG: INCOMPATIBLE_RNG_STATE

    Options: INVALID_EVALUATION_LIMIT — raised before evaluation begins, from the options object rather than from the notation, so it carries no span.

    Input: INVALID_NOTATION_TYPE — raised before lexing, when notation is not a string, so it carries no span either.

    New codes are only ever introduced in a minor release, never a patch. Treat the union as open when you switch over it: give the switch a default arm rather than relying on exhaustiveness, or a minor upgrade turns a new code into a silent fall-through.

    import { isRollParserError, roll, type RollParserErrorCode } from 'roll-parser';

    const MESSAGES: Partial<Record<RollParserErrorCode, string>> = {
    DICE_LIMIT_EXCEEDED: 'That is too many dice.',
    DIVISION_BY_ZERO: 'Cannot divide by zero.',
    UNEXPECTED_CHARACTER: 'That is not valid dice notation.',
    };

    try {
    roll(userInput);
    } catch (error) {
    if (isRollParserError(error)) {
    reply(MESSAGES[error.code] ?? error.message);
    }
    }