@randsum/notation
Version:
A flexible, type-safe dice notation parser and validator
2 lines (1 loc) • 2 kB
JavaScript
var g=require("node:module");var{defineProperty:m,getOwnPropertyNames:N,getOwnPropertyDescriptor:R}=Object,y=Object.prototype.hasOwnProperty;var f=new WeakMap,O=(t)=>{var o=f.get(t),e;if(o)return o;if(o=m({},"__esModule",{value:!0}),t&&typeof t==="object"||typeof t==="function")N(t).map((n)=>!y.call(o,n)&&m(o,n,{get:()=>t[n],enumerable:!(e=R(t,n))||e.enumerable}));return f.set(t,o),o};var D=(t,o)=>{for(var e in o)m(t,e,{get:o[e],enumerable:!0,configurable:!0,set:(n)=>o[e]=()=>n})};var v={};D(v,{validateNotation:()=>d,notationToOptions:()=>l,isDiceNotation:()=>p,coreNotationPattern:()=>s,completeRollPattern:()=>a});module.exports=O(v);var i=require("@randsum/core"),s=/^\d+[Dd](\d+|{.*})/,a=new RegExp([s.source,i.DropModifier.highestPattern.source,i.DropModifier.lowestPattern.source,i.DropModifier.constraintsPattern.source,i.ExplodeModifier.pattern.source,i.UniqueModifier.pattern.source,i.ReplaceModifier.pattern.source,i.RerollModifier.pattern.source,i.CapModifier.pattern.source,i.PlusModifier.pattern.source,i.MinusModifier.pattern.source].join("|"),"g");function p(t){let o=typeof t!=="string";if(!s.test(String(t))||o)return!1;return t.replace(/\s/g,"").replace(a,"").length===0}var u=require("@randsum/core");var r=require("@randsum/core");function l(t){let o=t.match(s)?.at(0)??"",e=t.replace(o,""),[n,c=""]=o.split(/[Dd]/);if(c.includes("{"))return{quantity:Number(n),sides:[...c.replaceAll(/{|}/g,"")]};return{quantity:Number(n),sides:Number(c),...{modifiers:{...r.DropModifier.parse(e),...r.ExplodeModifier.parse(e),...r.UniqueModifier.parse(e),...r.ReplaceModifier.parse(e),...r.RerollModifier.parse(e),...r.CapModifier.parse(e),...r.PlusModifier.parse(e),...r.MinusModifier.parse(e)}}}}function d(t){if(!p(t))return{valid:!1,description:[],digested:{},type:"invalid"};let o=l(t);return{valid:!0,digested:o,notation:u.optionsConverter.toNotation(o),type:x(o.sides),description:u.optionsConverter.toDescription(o)}}function x(t){if(Array.isArray(t))return"custom";return"numerical"}