UNPKG

numeric-quantity

Version:

Number parser with support for mixed numbers, vulgar fractions, and Roman numerals

2 lines 3.38 kB
"use strict";var NumericQuantity=(()=>{var f=Object.defineProperty;var C=Object.getOwnPropertyDescriptor;var h=Object.getOwnPropertyNames;var E=Object.prototype.hasOwnProperty;var O=(n,r)=>{for(var e in r)f(n,e,{get:r[e],enumerable:!0})},F=(n,r,e,s)=>{if(r&&typeof r=="object"||typeof r=="function")for(let t of h(r))!E.call(n,t)&&t!==e&&f(n,t,{get:()=>r[t],enumerable:!(s=C(r,t))||s.enumerable});return n};var _=n=>F(f({},"__esModule",{value:!0}),n);var Q={};O(Q,{defaultOptions:()=>d,numericQuantity:()=>v,numericRegex:()=>N,numericRegexWithTrailingInvalid:()=>x,parseRomanNumerals:()=>b,romanNumeralRegex:()=>X,romanNumeralUnicodeRegex:()=>V,romanNumeralUnicodeToAsciiMap:()=>g,romanNumeralValues:()=>m,vulgarFractionToAsciiMap:()=>I,vulgarFractionsRegex:()=>y});var I={"\xBC":"1/4","\xBD":"1/2","\xBE":"3/4","\u2150":"1/7","\u2151":"1/9","\u2152":"1/10","\u2153":"1/3","\u2154":"2/3","\u2155":"1/5","\u2156":"2/5","\u2157":"3/5","\u2158":"4/5","\u2159":"1/6","\u215A":"5/6","\u215B":"1/8","\u215C":"3/8","\u215D":"5/8","\u215E":"7/8","\u215F":"1/"},N=/^(?=-?\s*\.\d|-?\s*\d)(-)?\s*((?:\d(?:[\d,_]*\d)?)*)(([eE][+-]?\d(?:[\d,_]*\d)?)?|\.\d(?:[\d,_]*\d)?([eE][+-]?\d(?:[\d,_]*\d)?)?|(\s+\d(?:[\d,_]*\d)?\s*)?\s*\/\s*\d(?:[\d,_]*\d)?)?$/,x=new RegExp(N.source.replace(/\$$/,"(?:\\s*[^\\.\\d\\/].*)?")),y=new RegExp(`(${Object.keys(I).join("|")})`),m={MMM:3e3,MM:2e3,M:1e3,CM:900,DCCC:800,DCC:700,DC:600,D:500,CD:400,CCC:300,CC:200,C:100,XC:90,LXXX:80,LXX:70,LX:60,L:50,XL:40,XXX:30,XX:20,XII:12,XI:11,X:10,IX:9,VIII:8,VII:7,VI:6,V:5,IV:4,III:3,II:2,I:1},g={"\u2160":"I","\u2161":"II","\u2162":"III","\u2163":"IV","\u2164":"V","\u2165":"VI","\u2166":"VII","\u2167":"VIII","\u2168":"IX","\u2169":"X","\u216A":"XI","\u216B":"XII","\u216C":"L","\u216D":"C","\u216E":"D","\u216F":"M","\u2170":"I","\u2171":"II","\u2172":"III","\u2173":"IV","\u2174":"V","\u2175":"VI","\u2176":"VII","\u2177":"VIII","\u2178":"IX","\u2179":"X","\u217A":"XI","\u217B":"XII","\u217C":"L","\u217D":"C","\u217E":"D","\u217F":"M"},V=new RegExp(`(${Object.keys(g).join("|")})`,"gi"),X=/^(?=[MDCLXVI])(M{0,3})(C[MD]|D?C{0,3})(X[CL]|L?X{0,3})(I[XV]|V?I{0,3})$/i,d={round:3,allowTrailingInvalid:!1,romanNumerals:!1,bigIntOnOverflow:!1};var b=n=>{let r=`${n}`.replace(V,(M,R)=>g[R]).toUpperCase(),e=X.exec(r);if(!e)return NaN;let[,s,t,p,c]=e;return(m[s]??0)+(m[t]??0)+(m[p]??0)+(m[c]??0)};var T=/^\s*\//;function v(n,r=d){if(typeof n=="number"||typeof n=="bigint")return n;let e=NaN,s=`${n}`.replace(y,(a,u)=>` ${I[u]}`).replace("\u2044","/").trim();if(s.length===0)return NaN;let t={...d,...r},p=(t.allowTrailingInvalid?x:N).exec(s);if(!p)return t.romanNumerals?b(s):NaN;let[,c,M,R]=p,l=M.replace(/[,_]/g,""),o=R?.replace(/[,_]/g,"");if(!l&&o&&o.startsWith("."))e=0;else{if(t.bigIntOnOverflow){let a=BigInt(c?`-${l}`:l);if(a>BigInt(Number.MAX_SAFE_INTEGER)||a<BigInt(Number.MIN_SAFE_INTEGER))return a}e=parseInt(l)}if(!o)return c?e*-1:e;let i=t.round===!1?NaN:parseFloat(`1e${Math.floor(Math.max(0,t.round))}`);if(o.startsWith(".")||o.startsWith("e")||o.startsWith("E")){let a=parseFloat(`${e}${o}`);e=isNaN(i)?a:Math.round(a*i)/i}else if(T.test(o)){let a=parseInt(l),u=parseInt(o.replace("/",""));e=isNaN(i)?a/u:Math.round(a*i/u)/i}else{let a=o.split("/"),[u,$]=a.map(A=>parseInt(A));e+=isNaN(i)?u/$:Math.round(u*i/$)/i}return c?e*-1:e}return _(Q);})(); //# sourceMappingURL=numeric-quantity.umd.min.js.map