UNPKG

@randsum/notation

Version:

Dice notation parser and types for the @randsum ecosystem

60 lines (52 loc) 1.64 kB
import type { ComparisonOptions } from '../types' /** * Backward-compatible alias. ComparisonOptions now includes all fields. * @deprecated Use ComparisonOptions directly. */ export type ExtendedComparisonOptions = ComparisonOptions /** * Parses a condition string into comparison options. */ export function parseComparisonNotation(conditionString: string): ComparisonOptions { const content = conditionString.replace(/[{}]/g, '') const parts = content .split(',') .map(s => s.trim()) .filter(Boolean) const result: ComparisonOptions = {} const exact: number[] = [] for (const part of parts) { if (part.startsWith('>=')) { result.greaterThanOrEqual = Number(part.slice(2)) } else if (part.startsWith('<=')) { result.lessThanOrEqual = Number(part.slice(2)) } else if (part.startsWith('>')) { result.greaterThan = Number(part.slice(1)) } else if (part.startsWith('<')) { result.lessThan = Number(part.slice(1)) } else if (part.startsWith('=')) { exact.push(Number(part.slice(1))) } else { const num = Number(part) if (!isNaN(num)) { exact.push(num) } } } if (exact.length > 0) { result.exact = exact } return result } /** * Checks if a comparison options object has any conditions defined. */ export function hasConditions(options: ComparisonOptions): boolean { return ( options.greaterThan !== undefined || options.greaterThanOrEqual !== undefined || options.lessThan !== undefined || options.lessThanOrEqual !== undefined || (options.exact !== undefined && options.exact.length > 0) ) }