UNPKG

@randsum/dice

Version:

A flexible, type-safe dice roller

81 lines 3.24 kB
import type { CustomRollOptions, ModifierOptions, NumericRollOptions } from '@randsum/core'; import type { CustomDiceNotation, NumericDiceNotation } from '@randsum/notation'; export interface BaseD<T extends number | string[]> { readonly sides: number; readonly faces: T extends number ? number[] : string[]; readonly type: T extends number ? 'numerical' : 'custom'; readonly isCustom: T extends number ? false : true; roll: (quantity?: number) => T extends number ? number : string; rollSpread: (quantity?: number) => T extends number ? number[] : string[]; rollModified: (quantity: number, modifiers?: ModifierOptions) => T extends number ? NumericRollResult : CustomRollResult; toOptions: T extends number ? NumericRollOptions : CustomRollOptions; } export type NumericRollArgument = BaseD<number> | NumericRollOptions | NumericDiceNotation | number | `${number}`; export type CustomRollArgument = BaseD<string[]> | CustomRollOptions | CustomDiceNotation | string[]; export type RollArgument = NumericRollArgument | CustomRollArgument; interface BaseRollParams { description: string[]; } export interface NumericRollParams extends BaseRollParams { argument: NumericRollArgument; options: NumericRollOptions; die: BaseD<number>; notation: NumericDiceNotation; } export interface CustomRollParams extends BaseRollParams { argument: CustomRollArgument; options: CustomRollOptions; die: BaseD<string[]>; notation: CustomDiceNotation; } export type RollParams = NumericRollParams | CustomRollParams; export interface DicePool { dicePools: Record<string, RollParams>; } interface BaseRollResult { rawResult: (number | string)[]; type: 'numerical' | 'custom' | 'mixed'; rawRolls: Record<string, number[] | string[]>; modifiedRolls: Record<string, { rolls: string[] | number[]; total: string | number; }>; result: (string | number)[]; total: string | number; } export interface NumericRollResult extends BaseRollResult { type: 'numerical'; rawRolls: Record<string, number[]>; rawResult: number[]; modifiedRolls: Record<string, { rolls: number[]; total: number; }>; result: number[]; total: number; } export interface CustomRollResult extends BaseRollResult { type: 'custom'; rawRolls: Record<string, string[]>; rawResult: string[]; modifiedRolls: Record<string, { rolls: string[]; total: string; }>; result: string[]; total: string; } export interface MixedRollResult extends BaseRollResult { type: 'mixed'; rawRolls: Record<string, number[] | string[]>; modifiedRolls: Record<string, { rolls: string[] | number[]; total: string | number; }>; result: (string | number)[]; total: string; } export type RollResult = NumericRollResult | CustomRollResult | MixedRollResult; export type { ComparisonOptions, CustomRollOptions, DropOptions, ModifierOptions, NumericRollBonus, NumericRollOptions, ReplaceOptions, RerollOptions, RollOptions, UniqueOptions } from '@randsum/core'; export type { CustomDiceNotation, DiceNotation, NumericDiceNotation } from '@randsum/notation'; //# sourceMappingURL=types.d.ts.map