UNPKG

@tuplo/numberfmt

Version:

Native numeric formatting using a text pattern

2 lines (1 loc) 4.45 kB
var ct=Object.defineProperty;var O=Object.getOwnPropertySymbols;var pt=Object.prototype.hasOwnProperty,ft=Object.prototype.propertyIsEnumerable;var C=(t,r,e)=>r in t?ct(t,r,{enumerable:!0,configurable:!0,writable:!0,value:e}):t[r]=e,F=(t,r)=>{for(var e in r||={})pt.call(r,e)&&C(t,e,r[e]);if(O)for(var e of O(r))ft.call(r,e)&&C(t,e,r[e]);return t};function P(t){if(t===null||Array.isArray(t)&&t.length===0)return null;let r=Number(t);return Number.isNaN(r)?null:Number(t)}var N=/([A-Z]{3})[scn]?/,M=/[A-Z]{3}([scn]?)/,w=/([A-Z]{3}[scn]?)/,B=/([0,.[\]]+)/,$=/\.\]?([0-9[\]]*)/,U=/\[\.\]/,p=/^\([^)]*\)/,T=/^([0-9]+)/,k=/^([0]+)/,R=/[aA]\)?$/,V=/E\)?$/,A=/A\)?$/,K=/e\)?$/,Z=/a\)?$/,v=/[aAeE]\)?$/,l=/\[([0]+)\]/,L=/o\)?$/,q=/([0]+)/,f=/[0\]]\s[o%bBmk]/,E=/^\+/,y=/^([0]+)/,H=/b$/,j=/B$/,G=/[bB]$/,b=/k\)?$/,d=/m\)?$/,g=/[bBmik]\)?$/;function W(t){if(Z.test(t))return"short";if(A.test(t))return"long"}function z(t){let[,r]=t.match(N)||[""];return r||void 0}function J(t){let[,r]=t.match(M)||[""];switch(r){case"s":return"narrowSymbol";case"c":return"code";case"n":return"name";default:return"symbol"}}function Q(t){return p.test(t)?"accounting":"standard"}function a(t){let[r]=B.exec(t||"")||["0,000"];return r==="0,0"?"0,000":r}function x(t){let[r]=$.exec(t)||[""],[e]=q.exec(r)||[""],[,i]=l.exec(r)||["",""];return[e.length,i.length]}function X(t,r){let e=a(r),[i,n]=x(e);return g.test(r)?Math.max(i+n,2):i+n}function lt(t,r){let[e]=r;return e}function Y(t,r){let e=a(r),[i,n]=x(e);if(U.test(e)){let o=t.toString();return l.test(e)?lt(t,[i,n]):o.indexOf(".")>-1?i:0}return l.test(e)?i:i+n}function D(t){let[r]=k.exec(t)||[""];return r.length}function _(t,r){let e=a(r);if(e==="0,000"||v.test(r||""))return;let i=D(e),n=t.toString(),[o]=T.exec(n)||[""],[u]=y.exec(n)||[""];return Math.max(i,o.length-u.length)||void 0}function tt(t){return R.test(t)?"compact":K.test(t)?"scientific":V.test(t)?"engineering":"standard"}function rt(t){return p.test(t)?"never":E.test(t)?"exceptZero":"auto"}function et(t){return w.test(t)?"currency":g.test(t)?"unit":t.includes("%")?"percent":"decimal"}function nt(t,r){let e=Math.floor(Math.log(t)/Math.log(1024));return r[e]}function yt(t){let r=Math.abs(t);return r>999.9999?"kilometer":r>=.01&&r<=.0999?"centimeter":r>=.001&&r<=.00999?"millimeter":"meter"}function bt(t){let r=Math.abs(t);return r>=.001&&r<=.00999?"gram":"kilogram"}function it(t,r){if(g.test(r)){if(d.test(r))return yt(t);if(b.test(r))return bt(t);if(H.test(r))return nt(t,["bit","kilobit","megabit","gigabit","terabit"]);if(j.test(r))return nt(t,["byte","kilobyte","megabyte","gigabyte","terabyte","petabyte"])}}function ot(t){return g.test(t)&&!f.test(t)?"narrow":"short"}function dt(t){switch(t){case"en-GB":default:return new Map([["one","st"],["two","nd"],["few","rd"],["other","th"]])}}function st(t){let{value:r,formatted:e,locale:i,format:n}=t,u=new Intl.PluralRules(i,{type:"ordinal"}).select(r),c=dt(i).get(u);return f.test(n)?`${e} ${c}`:`${e}${c}`}function mt(t){return t.reduce((r,e)=>{let{type:i,value:n}=e;return i==="integer"?(r[i]=r[i]||[],r[i].push(n)):r[i]=n,r},{})}function gt(t){let{value:r,numberFormatter:e,format:i}=t,{minusSign:n,integer:o,group:u,decimal:c,fraction:s,percentSign:I}=mt(e.formatToParts(r));return[n,o.join(u||""),c,s,f.test(i)&&" ",I].filter(Boolean).join("")}function xt(t){let r=t;for(;r>=1024;)r/=1024;return r}function Dt(t){let r=Math.abs(t);return r>999.9999?t/1e3:r>=.01&&r<=.0999?t*100:r>=.001&&r<=.00999?t*1e3:t}function It(t){let r=Math.abs(t);return r>=.001&&r<=.00999?t*1e3:t}function at(t,r){return G.test(r)?xt(t):d.test(r)?Dt(t):b.test(r)?It(t):t}function ut(t){let{locale:r}=t||{},{locale:e,numberingSystem:i}=F(F({},Intl.DateTimeFormat(r).resolvedOptions()),t);return{locale:e,numberingSystem:i}}function S(t,r,e){let i=P(t);if(i===null)return"";let n=r||"0,0",{locale:o,numberingSystem:u}=ut(e),c=a(n),s=at(i,n),I={compactDisplay:W(n),currency:z(n),currencyDisplay:J(n),currencySign:Q(n),maximumFractionDigits:X(s,n),minimumFractionDigits:Y(s,n),minimumIntegerDigits:_(s,n),notation:tt(n),numberingSystem:u,signDisplay:rt(n),style:et(n),useGrouping:c.includes(","),unit:it(i,n),unitDisplay:ot(n)},h=new Intl.NumberFormat(o,I),m=h.format(s);return D(c)===0&&(m=m.replace(y,"")),n.includes("%")&&(m=gt({value:s,numberFormatter:h,format:n})),L.test(n)&&(m=st({value:s,formatted:m,format:n,locale:o})),p.test(n)&&s<0&&(m=`(${m})`),m}S.partial=(t,r)=>e=>S(e,t,r);var Vr=S;export{Vr as default};