@randsum/notation
Version:
A flexible, type-safe dice notation parser and validator
2 lines (1 loc) • 1.52 kB
JavaScript
import{CapModifier as m,DropModifier as s,ExplodeModifier as u,MinusModifier as f,PlusModifier as d,ReplaceModifier as N,RerollModifier as R,UniqueModifier as y}from"@randsum/core";var e=/^\d+[Dd](\d+|{.*})/,a=new RegExp([e.source,s.highestPattern.source,s.lowestPattern.source,s.constraintsPattern.source,u.pattern.source,y.pattern.source,N.pattern.source,R.pattern.source,m.pattern.source,d.pattern.source,f.pattern.source].join("|"),"g");function p(t){let o=typeof t!=="string";if(!e.test(String(t))||o)return!1;return t.replace(/\s/g,"").replace(a,"").length===0}import{optionsConverter as c}from"@randsum/core";import{CapModifier as O,DropModifier as D,ExplodeModifier as g,MinusModifier as x,PlusModifier as v,ReplaceModifier as V,RerollModifier as A,UniqueModifier as T}from"@randsum/core";function l(t){let o=t.match(e)?.at(0)??"",i=t.replace(o,""),[r,n=""]=o.split(/[Dd]/);if(n.includes("{"))return{quantity:Number(r),sides:[...n.replaceAll(/{|}/g,"")]};return{quantity:Number(r),sides:Number(n),...{modifiers:{...D.parse(i),...g.parse(i),...T.parse(i),...V.parse(i),...A.parse(i),...O.parse(i),...v.parse(i),...x.parse(i)}}}}function C(t){if(!p(t))return{valid:!1,description:[],digested:{},type:"invalid"};let o=l(t);return{valid:!0,digested:o,notation:c.toNotation(o),type:b(o.sides),description:c.toDescription(o)}}function b(t){if(Array.isArray(t))return"custom";return"numerical"}export{C as validateNotation,l as notationToOptions,p as isDiceNotation,e as coreNotationPattern,a as completeRollPattern};