UNPKG

n2words

Version:

Convert numbers to words in 70+ languages with zero dependencies. Supports BigInt, decimals, and browser/Node.js environments.

3 lines (2 loc) 5.79 kB
/*! n2words/yo-NG v5.1.2 | MIT License | github.com/forzagreen/n2words */ function n(n){let[e,r]=n.toLowerCase().split("e");const t=parseInt(r,10);let i="";"-"===e[0]&&(i="-",e=e.slice(1));const o=e.indexOf("."),s=-1===o?e:e.slice(0,o)+e.slice(o+1),u=(-1===o?e.length:o)+t;return u>=s.length?i+s+"0".repeat(u-s.length):u<=0?i+"0."+"0".repeat(-u)+s:i+s.slice(0,u)+"."+s.slice(u)}function e(e){const t=e.toString();return r(t)?n(t):t}function r(n){return n.includes("e")||n.includes("E")}function t(n){const e="-"===n[0];e&&(n=n.slice(1));const r=n.indexOf(".");if(-1===r)return{isNegative:e,integerPart:BigInt(n)};const t=n.slice(0,r)||"0",i=n.slice(r+1);return{isNegative:e,integerPart:BigInt(t),decimalPart:i}}function i(e){let t=e.trim();if(0===t.length||Number.isNaN(Number(t)))throw new RangeError(`Invalid currency format: "${e}"`);r(t)&&(t=n(t));const i="-"===t[0];i&&(t=t.slice(1));const o=t.indexOf(".");if(-1===o)return{isNegative:i,dollars:BigInt(t),cents:0n};const s=t.slice(0,o)||"0",u=(t.slice(o+1)+"00").slice(0,2);return{isNegative:i,dollars:BigInt(s),cents:BigInt(u)}}const o=null,s=o,u=o,a=o,g=["","ọ̀kan","èjì","ẹ̀ta","ẹ̀rin","àrùn","ẹ̀fà","èje","ẹ̀jọ","ẹ̀sán","ẹ̀wá"],l=["","ọ̀kànlá","èjìlá","ẹ̀talá","ẹ̀rinlá"],c=["àrùndínlógún","ẹ̀rìndínlógún","ẹ̀tadínlógún","èjìdínlógún","ọ̀kàndínlógún"],f={20:"ogún",30:"ọgbọ̀n",40:"ogójì",50:"àádọ́ta",60:"ogóta",70:"àádọ́rin",80:"ogórin",90:"àádọ́rùn",100:"ọgọ́rùn"},d={20:"lógún",30:"lọgbọ̀n",40:"lógójì",50:"láàádọ́ta",60:"lógóta",70:"láàádọ́rin",80:"lógórin",90:"láàádọ́rùn",100:"lọ́gọ́rùn"},b={20:"dínlógún",30:"dínlọgbọ̀n",40:"dínlógójì",50:"dínláàádọ́ta",60:"dínlógóta",70:"dínláàádọ́rin",80:"dínlógórin",90:"dínláàádọ́rùn",100:"dínlọ́gọ́rùn"},m="ọgọ́rùn",w="igba",N="irinwó",p="ẹgbẹ̀rún",h="mílíọ̀nù",v="àìní",I="ó lé";function y(n){if(0===n)return"";if(n<=10)return g[n];if(n<=14)return l[n-10];if(n<=19)return c[n-15];if(n%10==0)return f[n];const e=10*Math.trunc(n/10),r=n%10;return r<=4?g[r]+" lé "+d[e]:g[10-r]+b[e+10]}function E(n){if(n<100)return y(n);const e=Math.trunc(n/100),r=n%100;let t;return 2===e&&0===r?w:4===e&&0===r?N:(t=1===e?m:2===e?w:4===e?N:g[e]+" "+m,r>0&&(t+=" ó lé "+y(r)),t)}function R(n){if(0n===n)return"òdo";if(n<100n)return y(Number(n));if(n<1000n)return E(Number(n));const e=[];let r=n;if(r>=1000000n){const n=r/1000000n;r%=1000000n,e.push(1n===n?h+" kan":h+" "+R(n))}if(r>=1000n){const n=r/1000n;r%=1000n,e.push(1n===n?p+" kan":10n===n?"ẹgbàárùn":20n===n?"ọ̀kẹ́":n<100n?p+" "+y(Number(n)):p+" "+E(Number(n)))}return r>0n&&e.push(r<100n?e.length>0?I+" "+y(Number(r)):y(Number(r)):e.length>0?I+" "+E(Number(r)):E(Number(r))),e.join(", ")}function O(i){const{isNegative:o,integerPart:s,decimalPart:u}=function(i){const o=typeof i;if("bigint"==typeof i)return i<0n?{isNegative:!0,integerPart:-i}:{isNegative:!1,integerPart:i};if("number"==typeof i){if(!Number.isFinite(i))throw new RangeError("Number must be finite (NaN and Infinity are not supported)");return Number.isSafeInteger(i)?i<0?{isNegative:!0,integerPart:BigInt(-i)}:{isNegative:!1,integerPart:BigInt(i)}:t(e(i))}if("string"==typeof i)return t(function(e){const t=e.trim();if(0===t.length||Number.isNaN(Number(t)))throw new RangeError(`Invalid number format: "${e}"`);return r(t)?n(t):t}(i));throw new TypeError(`Invalid value type: expected number, string, or bigint, received ${o}`)}(i);let a="";return o&&(a=v+" "),a+=R(s),u&&(a+=" àmì "+function(n){const e=[];for(const r of n){const n=parseInt(r,10);e.push(0===n?"òdo":g[n])}return e.join(" ")}(u)),a}function B(e){const t=function(e){const t=typeof e;if("bigint"==typeof e){if(e<=0n)throw new RangeError("Ordinals must be positive integers");return e}if("number"==typeof e){if(!Number.isFinite(e))throw new RangeError("Ordinals must be finite numbers");if(!Number.isInteger(e))throw new RangeError("Ordinals must be whole numbers");if(e<=0)throw new RangeError("Ordinals must be positive integers");return BigInt(e)}if("string"==typeof e)return function(e){const t=e.trim();if(0===t.length)throw new RangeError("Ordinals cannot be empty strings");if("-"===t[0])throw new RangeError("Ordinals cannot be negative");if(t.includes("."))throw new RangeError("Ordinals must be whole numbers");if(r(t)){const e=n(t);if(e.includes("."))throw new RangeError("Ordinals must be whole numbers");const r=BigInt(e);if(r<=0n)throw new RangeError("Ordinals must be positive integers");return r}try{const n=BigInt(t);if(n<=0n)throw new RangeError("Ordinals must be positive integers");return n}catch(n){if(n instanceof RangeError)throw n;throw new RangeError(`Invalid ordinal format: "${e}"`,{cause:n})}}(e);throw new TypeError(`Invalid value type: expected number, string, or bigint, received ${t}`)}(e);return 1n===(i=t)?"àkọ́kọ́":2n===i?"ìkejì":"ìkẹ"+R(i);var i}function j(n){const{isNegative:r,dollars:t,cents:o}=function(n){const r=typeof n;if("bigint"==typeof n)return n<0n?{isNegative:!0,dollars:-n,cents:0n}:{isNegative:!1,dollars:n,cents:0n};if("number"==typeof n){if(!Number.isFinite(n))throw new RangeError("Currency must be a finite number");return Number.isSafeInteger(n)?n<0?{isNegative:!0,dollars:BigInt(-n),cents:0n}:{isNegative:!1,dollars:BigInt(n),cents:0n}:i(e(n))}if("string"==typeof n)return i(n);throw new TypeError(`Invalid value type: expected number, string, or bigint, received ${r}`)}(n);let s="";return r&&(s=v+" "),(t>0n||0n===o)&&(s+=R(t)+" náírà"),o>0n&&(t>0n&&(s+=" àti "),s+=R(o)+" kọ́bọ̀"),s}export{s as cardinalMax,a as currencyMax,u as ordinalMax,O as toCardinal,j as toCurrency,B as toOrdinal};