diff --git a/assets/libraries/n2words.esm.js b/assets/libraries/n2words.esm.js index c5c0b8a..b468469 100644 --- a/assets/libraries/n2words.esm.js +++ b/assets/libraries/n2words.esm.js @@ -1,2 +1,2 @@ -var y=n=>{throw TypeError(n)};var z=(n,t,e)=>t.has(n)||y("Cannot "+e);var d=(n,t,e)=>(z(n,t,"read from private field"),e?e.call(n):t.get(n)),l=(n,t,e)=>t.has(n)?y("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(n):t.set(n,e),f=(n,t,e,s)=>(z(n,t,"write to private field"),s?s.call(n,e):t.set(n,e),e);var c,p,g,m,w,u=class{constructor(t){l(this,c);l(this,p);l(this,g);l(this,m);l(this,w);t=Object.assign({negativeWord:"",separatorWord:"",zero:"",spaceSeparator:" "},t),f(this,c,t.negativeWord),f(this,p,t.separatorWord),f(this,g,t.zero),f(this,m,t.spaceSeparator)}get negativeWord(){return d(this,c)}get separatorWord(){return d(this,p)}get zero(){return d(this,g)}get spaceSeparator(){return d(this,m)}get wholeNumber(){return d(this,w)}decimalToCardinal(t){let e=[],s=[...t],i=0;for(;i0&&e.push(this.hundreds[W]),a>1&&e.push(this.twenties[a]),a==1?e.push(this.tens[h]):h>0&&(o=i==1||this.feminine&&i==0?this.onesFeminine:this.ones,e.push(o[h])),i>0&&e.push(this.pluralize(r,this.thousands[i]))}return e.join(" ")}splitByX(t,e){let s=[],i=t.length,r;if(i>e){let o=i%e;o>0&&(r=t.slice(0,o),s.push(BigInt(r)));for(let h=o;h20n)&&(t%10n==1n?s=0:t%10n<5n&&t%10n>1n&&(s=1)),e[s]}};var N=class extends b{and;ones={1:"\u05D0\u05B6\u05D7\u05B8\u05D3",2:"\u05E9\u05C1\u05B0\u05E0\u05B7\u05D9\u05B4\u05DD",3:"\u05E9\u05C1\u05B0\u05DC\u05B9\u05E9\u05C1\u05B8\u05D4",4:"\u05D0\u05B7\u05E8\u05B0\u05D1\u05BC\u05B8\u05E2\u05B8\u05D4",5:"\u05D7\u05B2\u05DE\u05B4\u05E9\u05BC\u05C1\u05B8\u05D4",6:"\u05E9\u05C1\u05B4\u05E9\u05BC\u05C1\u05B8\u05D4",7:"\u05E9\u05C1\u05B4\u05D1\u05B0\u05E2\u05B8\u05D4",8:"\u05E9\u05C1\u05B0\u05DE\u05D5\u05B9\u05E0\u05B8\u05D4",9:"\u05EA\u05BC\u05B4\u05E9\u05C1\u05B0\u05E2\u05B8\u05D4"};tens={0:"\u05E2\u05B2\u05E9\u05C2\u05B8\u05E8\u05B8\u05D4",2:"\u05E9\u05C1\u05B0\u05E0\u05B5\u05D9\u05DD \u05E2\u05B8\u05E9\u05C2\u05B8\u05E8"};two="\u05E9\u05C1\u05B0\u05E0\u05B5\u05D9";ten="\u05E2\u05B8\u05E9\u05C2\u05B8\u05E8";twenties={2:"\u05E2\u05B6\u05E9\u05C2\u05B0\u05E8\u05B4\u05D9\u05DD",3:"\u05E9\u05C1\u05B0\u05DC\u05B9\u05E9\u05C1\u05B4\u05D9\u05DD",4:"\u05D0\u05B7\u05E8\u05B0\u05D1\u05BC\u05B8\u05E2\u05B4\u05D9\u05DD",5:"\u05D7\u05DE\u05D9\u05E9\u05D9\u05DD",6:"\u05E9\u05E9\u05D9\u05DD",7:"\u05E9\u05D1\u05E2\u05D9\u05DD",8:"\u05E9\u05DE\u05D5\u05E0\u05D9\u05DD",9:"\u05EA\u05E9\u05E2\u05D9\u05DD"};hundreds={1:"\u05DE\u05D0\u05D4",2:"\u05DE\u05D0\u05EA\u05D9\u05D9\u05DD",3:"\u05DE\u05D0\u05D5\u05EA"};thousands={1:"\u05D0\u05DC\u05E3",2:"\u05D0\u05DC\u05E4\u05D9\u05D9\u05DD",3:"\u05E9\u05DC\u05E9\u05EA \u05D0\u05DC\u05E4\u05D9\u05DD",4:"\u05D0\u05E8\u05D1\u05E2\u05EA \u05D0\u05DC\u05E4\u05D9\u05DD",5:"\u05D7\u05DE\u05E9\u05EA \u05D0\u05DC\u05E4\u05D9\u05DD",6:"\u05E9\u05E9\u05EA \u05D0\u05DC\u05E4\u05D9\u05DD",7:"\u05E9\u05D1\u05E2\u05EA \u05D0\u05DC\u05E4\u05D9\u05DD",8:"\u05E9\u05DE\u05D5\u05E0\u05EA \u05D0\u05DC\u05E4\u05D9\u05DD",9:"\u05EA\u05E9\u05E2\u05EA \u05D0\u05DC\u05E4\u05D9\u05DD"};constructor(t){t=Object.assign({negativeWord:"\u05DE\u05D9\u05E0\u05D5\u05E1",zero:"\u05D0\u05E4\u05E1",and:"\u05D5\u05B0",altAnd:"\u05D5\u05BC"},t),super(t),this.and=t.and}toCardinal(t){switch(t){case 0:return this.zero;case 2:return this.two}let e=[],s=this.splitByX(t.toString(),3),i=s.length;for(let r of s){if(i=i-1,r==0)continue;let[o,h,a]=this.getDigits(r);if(i>0){e.push(this.thousands[o]);continue}a>0&&(a<=2?e.push(this.hundreds[a]):e.push(this.ones[a]+" "+this.hundreds[3])),h==1?e.push(o in this.tens?this.tens[o]:this.ones[o]+" "+this.ten):o>0&&e.push(this.ones[o]),h>1&&e.push(this.twenties[h])}return e.length>1&&(e[e.length-1]=(e[e.length-1]==this.twenties[3]?this.altAnd:this.and)+e[e.length-1]),e.join(" ")}};function C(n,t={}){return new N(t).floatToCardinal(n)}export{C as default}; +var y=n=>{throw TypeError(n)};var z=(n,t,e)=>t.has(n)||y("Cannot "+e);var d=(n,t,e)=>(z(n,t,"read from private field"),e?e.call(n):t.get(n)),l=(n,t,e)=>t.has(n)?y("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(n):t.set(n,e),f=(n,t,e,s)=>(z(n,t,"write to private field"),s?s.call(n,e):t.set(n,e),e);var c,p,g,m,w,u=class{constructor(t){l(this,c);l(this,p);l(this,g);l(this,m);l(this,w);t=Object.assign({negativeWord:"",separatorWord:"",zero:"",spaceSeparator:" "},t),f(this,c,t.negativeWord),f(this,p,t.separatorWord),f(this,g,t.zero),f(this,m,t.spaceSeparator)}get negativeWord(){return d(this,c)}get separatorWord(){return d(this,p)}get zero(){return d(this,g)}get spaceSeparator(){return d(this,m)}get wholeNumber(){return d(this,w)}decimalToCardinal(t){let e=[],s=[...t],i=0;for(;i0&&e.push(this.hundreds[W]),a>1&&e.push(this.twenties[a]),a==1?e.push(this.tens[h]):h>0&&(o=i==1||this.feminine&&i==0?this.onesFeminine:this.ones,e.push(o[h])),i>0&&e.push(this.pluralize(r,this.thousands[i]))}return e.join(" ")}splitByX(t,e){let s=[],i=t.length,r;if(i>e){let o=i%e;o>0&&(r=t.slice(0,o),s.push(BigInt(r)));for(let h=o;h20n)&&(t%10n==1n?s=0:t%10n<5n&&t%10n>1n&&(s=1)),e[s]}};var N=class extends b{and;ones={1:"\u05D0\u05B6\u05D7\u05B8\u05D3",2:"\u05E9\u05C1\u05B0\u05E0\u05B7\u05D9\u05B4\u05DD",3:"\u05E9\u05C1\u05B0\u05DC\u05B9\u05E9\u05C1\u05B8\u05D4",4:"\u05D0\u05B7\u05E8\u05B0\u05D1\u05BC\u05B8\u05E2\u05B8\u05D4",5:"\u05D7\u05B2\u05DE\u05B4\u05E9\u05BC\u05C1\u05B8\u05D4",6:"\u05E9\u05C1\u05B4\u05E9\u05BC\u05C1\u05B8\u05D4",7:"\u05E9\u05C1\u05B4\u05D1\u05B0\u05E2\u05B8\u05D4",8:"\u05E9\u05C1\u05B0\u05DE\u05D5\u05B9\u05E0\u05B8\u05D4",9:"\u05EA\u05BC\u05B4\u05E9\u05C1\u05B0\u05E2\u05B8\u05D4"};tens={0:"\u05E2\u05B2\u05E9\u05C2\u05B8\u05E8\u05B8\u05D4",2:"\u05E9\u05C1\u05B0\u05E0\u05B5\u05D9\u05DD \u05E2\u05B8\u05E9\u05C2\u05B8\u05E8"};two="\u05E9\u05C1\u05B0\u05E0\u05B5\u05D9";ten="\u05E2\u05B8\u05E9\u05C2\u05B8\u05E8";twenties={2:"\u05E2\u05B6\u05E9\u05C2\u05B0\u05E8\u05B4\u05D9\u05DD",3:"\u05E9\u05C1\u05B0\u05DC\u05B9\u05E9\u05C1\u05B4\u05D9\u05DD",4:"\u05D0\u05B7\u05E8\u05B0\u05D1\u05BC\u05B8\u05E2\u05B4\u05D9\u05DD",5:"\u05D7\u05DE\u05D9\u05E9\u05D9\u05DD",6:"\u05E9\u05E9\u05D9\u05DD",7:"\u05E9\u05D1\u05E2\u05D9\u05DD",8:"\u05E9\u05DE\u05D5\u05E0\u05D9\u05DD",9:"\u05EA\u05E9\u05E2\u05D9\u05DD"};hundreds={1:"\u05DE\u05D0\u05D4",2:"\u05DE\u05D0\u05EA\u05D9\u05D9\u05DD",3:"\u05DE\u05D0\u05D5\u05EA"};thousands={1:"\u05D0\u05DC\u05E3",2:"\u05D0\u05DC\u05E4\u05D9\u05D9\u05DD",3:"\u05E9\u05DC\u05E9\u05EA \u05D0\u05DC\u05E4\u05D9\u05DD",4:"\u05D0\u05E8\u05D1\u05E2\u05EA \u05D0\u05DC\u05E4\u05D9\u05DD",5:"\u05D7\u05DE\u05E9\u05EA \u05D0\u05DC\u05E4\u05D9\u05DD",6:"\u05E9\u05E9\u05EA \u05D0\u05DC\u05E4\u05D9\u05DD",7:"\u05E9\u05D1\u05E2\u05EA \u05D0\u05DC\u05E4\u05D9\u05DD",8:"\u05E9\u05DE\u05D5\u05E0\u05EA \u05D0\u05DC\u05E4\u05D9\u05DD",9:"\u05EA\u05E9\u05E2\u05EA \u05D0\u05DC\u05E4\u05D9\u05DD"};constructor(t){t=Object.assign({negativeWord:"\u05DE\u05D9\u05E0\u05D5\u05E1",zero:"\u05D0\u05E4\u05E1",and:"\u05D5\u05B0",altAnd:"\u05D5\u05BC"},t),super(t),this.and=t.and}toCardinal(t){switch(t){case 0:case 0n:return this.zero;case 2:case 2n:return this.two}let e=[],s=this.splitByX(t.toString(),3),i=s.length;for(let r of s){if(i=i-1,r==0)continue;let[o,h,a]=this.getDigits(r);if(i>0){e.push(this.thousands[o]);continue}a>0&&(a<=2?e.push(this.hundreds[a]):e.push(this.ones[a]+" "+this.hundreds[3])),h==1?e.push(o in this.tens?this.tens[o]:this.ones[o]+" "+this.ten):o>0&&e.push(this.ones[o]),h>1&&e.push(this.twenties[h])}return e.length>1&&(e[e.length-1]=(e[e.length-1]==this.twenties[3]?this.altAnd:this.and)+e[e.length-1]),e.join(" ")}};function C(n,t={}){return new N(t).floatToCardinal(n)}export{C as default}; //# sourceMappingURL=n2words.esm.js.map diff --git a/assets/libraries/n2words.esm.js.map b/assets/libraries/n2words.esm.js.map index 239c34f..b9a1216 100644 --- a/assets/libraries/n2words.esm.js.map +++ b/assets/libraries/n2words.esm.js.map @@ -1,7 +1,7 @@ { "version": 3, "sources": ["../lib/classes/abstract-language.js", "../lib/i18n/ru.js", "../lib/i18n/he.js"], - "sourcesContent": ["/**\r\n * Creates new language class that processes decimals separately.\r\n * Requires implementing `toCardinal`.\r\n */\r\nexport default class AbstractLanguage {\r\n #negativeWord;\r\n #separatorWord;\r\n #zero;\r\n #spaceSeparator;\r\n #wholeNumber;\r\n\r\n /**\r\n * @param {object} options Options for class.\r\n * @param {string} [options.negativeWord] Word that precedes a negative number (if any).\r\n * @param {string} options.separatorWord Word that separates cardinal numbers (i.e. \"and\").\r\n * @param {string} options.zero Word for 0 (i.e. \"zero\").\r\n * @param {string} [options.spaceSeparator] Character that separates words.\r\n */\r\n constructor(options) {\r\n // Merge supplied options with defaults\r\n options = Object.assign({\r\n negativeWord: '',\r\n separatorWord: '',\r\n zero: '',\r\n spaceSeparator: ' '\r\n }, options);\r\n\r\n // Make options available to class\r\n this.#negativeWord = options.negativeWord;\r\n this.#separatorWord = options.separatorWord;\r\n this.#zero = options.zero;\r\n this.#spaceSeparator = options.spaceSeparator;\r\n }\r\n\r\n /**\r\n * @returns {string} Word that precedes a negative number (if any).\r\n */\r\n get negativeWord() {\r\n return this.#negativeWord;\r\n }\r\n\r\n /**\r\n * @returns {string} Word that separates cardinal numbers (i.e. \"and\").\r\n */\r\n get separatorWord() {\r\n return this.#separatorWord;\r\n }\r\n\r\n /**\r\n * @returns {string} Word for 0 (i.e. \"zero\").\r\n */\r\n get zero() {\r\n return this.#zero;\r\n }\r\n\r\n /**\r\n * @returns {string} Character that separates words.\r\n */\r\n get spaceSeparator() {\r\n return this.#spaceSeparator;\r\n }\r\n\r\n /**\r\n * @returns {number} Input value without decimal.\r\n */\r\n get wholeNumber() {\r\n return this.#wholeNumber;\r\n }\r\n\r\n /**\r\n * Convert ONLY decimal portion of number (processing leading zeros) to a string array of cardinal numbers.\r\n * @param {string} decimal Decimal string to convert.\r\n * @returns {string} Value in written format.\r\n */\r\n decimalToCardinal(decimal) {\r\n const words = [];\r\n\r\n // Split decimal string into an array of characters\r\n const chars = [...decimal];\r\n\r\n // Loop through characters adding leading zeros to words array\r\n let index = 0;\r\n while (index < chars.length && chars[index] === '0') {\r\n words.push(this.zero);\r\n index++;\r\n }\r\n\r\n // Prevent further processing if entire string was zeros\r\n if (index === chars.length) {\r\n return words;\r\n }\r\n\r\n // Convert and add remaining then return words array\r\n return [...words, this.toCardinal(BigInt(decimal))];\r\n }\r\n\r\n /**\r\n * Convert a number to cardinal form.\r\n * @param {number|string|bigint} value Number to be convert.\r\n * @returns {string} Value in written format.\r\n * @throws {Error} Value must be a valid number.\r\n */\r\n floatToCardinal(value) {\r\n // Validate user input value and convert to string (excluding BigInt)\r\n if (typeof value == 'number') {\r\n if (Number.isNaN(value)) {\r\n throw new TypeError('NaN is not an accepted number.');\r\n }\r\n value = value.toString();\r\n } else if (typeof value == 'string') {\r\n value = value.trim();\r\n if (value.length === 0 || Number.isNaN(Number(value))) {\r\n throw new Error('\"' + value + '\" is not a valid number.');\r\n }\r\n } else if (typeof value != 'bigint') {\r\n throw new TypeError('Invalid variable type: ' + typeof value);\r\n }\r\n\r\n let words = [];\r\n let wholeNumber;\r\n let decimalNumber;\r\n\r\n // If negative number add negative word\r\n if (value < 0) {\r\n words.push(this.negativeWord);\r\n }\r\n\r\n // Split value decimal (if any) then convert to BigInt\r\n if (typeof value == 'bigint') {\r\n wholeNumber = value;\r\n } else {\r\n const splitValue = value.split('.');\r\n wholeNumber = BigInt(splitValue[0]);\r\n decimalNumber = splitValue[1];\r\n }\r\n\r\n // Convert whole number to positive (if negative)\r\n if (wholeNumber < 0) {\r\n wholeNumber = -wholeNumber;\r\n }\r\n\r\n // NOTE: Only needed for CZ\r\n this.#wholeNumber = wholeNumber;\r\n\r\n // Add whole number in written form\r\n words = [...words, this.toCardinal(wholeNumber)];\r\n\r\n // Add decimal number in written form (if any)\r\n if (decimalNumber) {\r\n words.push(this.separatorWord);\r\n\r\n words = [...words, ...this.decimalToCardinal(decimalNumber)];\r\n }\r\n\r\n // Join words with spaces\r\n return words.join(this.spaceSeparator);\r\n }\r\n}\r\n", "import AbstractLanguage from '../classes/abstract-language.js';\r\n\r\nexport class N2WordsRU extends AbstractLanguage {\r\n /** @type {boolean} */\r\n feminine;\r\n\r\n /** @type {object} */\r\n ones = {\r\n 1: '\u043E\u0434\u0438\u043D',\r\n 2: '\u0434\u0432\u0430',\r\n 3: '\u0442\u0440\u0438',\r\n 4: '\u0447\u0435\u0442\u044B\u0440\u0435',\r\n 5: '\u043F\u044F\u0442\u044C',\r\n 6: '\u0448\u0435\u0441\u0442\u044C',\r\n 7: '\u0441\u0435\u043C\u044C',\r\n 8: '\u0432\u043E\u0441\u0435\u043C\u044C',\r\n 9: '\u0434\u0435\u0432\u044F\u0442\u044C'\r\n };\r\n\r\n /** @type {object} */\r\n onesFeminine = {\r\n 1: '\u043E\u0434\u043D\u0430',\r\n 2: '\u0434\u0432\u0435',\r\n 3: '\u0442\u0440\u0438',\r\n 4: '\u0447\u0435\u0442\u044B\u0440\u0435',\r\n 5: '\u043F\u044F\u0442\u044C',\r\n 6: '\u0448\u0435\u0441\u0442\u044C',\r\n 7: '\u0441\u0435\u043C\u044C',\r\n 8: '\u0432\u043E\u0441\u0435\u043C\u044C',\r\n 9: '\u0434\u0435\u0432\u044F\u0442\u044C'\r\n };\r\n\r\n /** @type {object} */\r\n tens = {\r\n 0: '\u0434\u0435\u0441\u044F\u0442\u044C',\r\n 1: '\u043E\u0434\u0438\u043D\u043D\u0430\u0434\u0446\u0430\u0442\u044C',\r\n 2: '\u0434\u0432\u0435\u043D\u0430\u0434\u0446\u0430\u0442\u044C',\r\n 3: '\u0442\u0440\u0438\u043D\u0430\u0434\u0446\u0430\u0442\u044C',\r\n 4: '\u0447\u0435\u0442\u044B\u0440\u043D\u0430\u0434\u0446\u0430\u0442\u044C',\r\n 5: '\u043F\u044F\u0442\u043D\u0430\u0434\u0446\u0430\u0442\u044C',\r\n 6: '\u0448\u0435\u0441\u0442\u043D\u0430\u0434\u0446\u0430\u0442\u044C',\r\n 7: '\u0441\u0435\u043C\u043D\u0430\u0434\u0446\u0430\u0442\u044C',\r\n 8: '\u0432\u043E\u0441\u0435\u043C\u043D\u0430\u0434\u0446\u0430\u0442\u044C',\r\n 9: '\u0434\u0435\u0432\u044F\u0442\u043D\u0430\u0434\u0446\u0430\u0442\u044C'\r\n };\r\n\r\n /** @type {object} */\r\n twenties = {\r\n 2: '\u0434\u0432\u0430\u0434\u0446\u0430\u0442\u044C',\r\n 3: '\u0442\u0440\u0438\u0434\u0446\u0430\u0442\u044C',\r\n 4: '\u0441\u043E\u0440\u043E\u043A',\r\n 5: '\u043F\u044F\u0442\u044C\u0434\u0435\u0441\u044F\u0442',\r\n 6: '\u0448\u0435\u0441\u0442\u044C\u0434\u0435\u0441\u044F\u0442',\r\n 7: '\u0441\u0435\u043C\u044C\u0434\u0435\u0441\u044F\u0442',\r\n 8: '\u0432\u043E\u0441\u0435\u043C\u044C\u0434\u0435\u0441\u044F\u0442',\r\n 9: '\u0434\u0435\u0432\u044F\u043D\u043E\u0441\u0442\u043E'\r\n };\r\n\r\n /** @type {object} */\r\n hundreds = {\r\n 1: '\u0441\u0442\u043E',\r\n 2: '\u0434\u0432\u0435\u0441\u0442\u0438',\r\n 3: '\u0442\u0440\u0438\u0441\u0442\u0430',\r\n 4: '\u0447\u0435\u0442\u044B\u0440\u0435\u0441\u0442\u0430',\r\n 5: '\u043F\u044F\u0442\u044C\u0441\u043E\u0442',\r\n 6: '\u0448\u0435\u0441\u0442\u044C\u0441\u043E\u0442',\r\n 7: '\u0441\u0435\u043C\u044C\u0441\u043E\u0442',\r\n 8: '\u0432\u043E\u0441\u0435\u043C\u044C\u0441\u043E\u0442',\r\n 9: '\u0434\u0435\u0432\u044F\u0442\u044C\u0441\u043E\u0442'\r\n };\r\n\r\n /** @type {object} */\r\n thousands = {\r\n 1: ['\u0442\u044B\u0441\u044F\u0447\u0430', '\u0442\u044B\u0441\u044F\u0447\u0438', '\u0442\u044B\u0441\u044F\u0447'], // 10^ 3\r\n 2: ['\u043C\u0438\u043B\u043B\u0438\u043E\u043D', '\u043C\u0438\u043B\u043B\u0438\u043E\u043D\u0430', '\u043C\u0438\u043B\u043B\u0438\u043E\u043D\u043E\u0432'], // 10^ 6\r\n 3: ['\u043C\u0438\u043B\u043B\u0438\u0430\u0440\u0434', '\u043C\u0438\u043B\u043B\u0438\u0430\u0440\u0434\u0430', '\u043C\u0438\u043B\u043B\u0438\u0430\u0440\u0434\u043E\u0432'], // 10^ 9\r\n 4: ['\u0442\u0440\u0438\u043B\u043B\u0438\u043E\u043D', '\u0442\u0440\u0438\u043B\u043B\u0438\u043E\u043D\u0430', '\u0442\u0440\u0438\u043B\u043B\u0438\u043E\u043D\u043E\u0432'], // 10^ 12\r\n 5: ['\u043A\u0432\u0430\u0434\u0440\u0438\u043B\u043B\u0438\u043E\u043D', '\u043A\u0432\u0430\u0434\u0440\u0438\u043B\u043B\u0438\u043E\u043D\u0430', '\u043A\u0432\u0430\u0434\u0440\u0438\u043B\u043B\u0438\u043E\u043D\u043E\u0432'], // 10^ 15\r\n 6: ['\u043A\u0432\u0438\u043D\u0442\u0438\u043B\u043B\u0438\u043E\u043D', '\u043A\u0432\u0438\u043D\u0442\u0438\u043B\u043B\u0438\u043E\u043D\u0430', '\u043A\u0432\u0438\u043D\u0442\u0438\u043B\u043B\u0438\u043E\u043D\u043E\u0432'], // 10^ 18\r\n 7: ['\u0441\u0435\u043A\u0441\u0442\u0438\u043B\u043B\u0438\u043E\u043D', '\u0441\u0435\u043A\u0441\u0442\u0438\u043B\u043B\u0438\u043E\u043D\u0430', '\u0441\u0435\u043A\u0441\u0442\u0438\u043B\u043B\u0438\u043E\u043D\u043E\u0432'], // 10^ 21\r\n 8: ['\u0441\u0435\u043F\u0442\u0438\u043B\u043B\u0438\u043E\u043D', '\u0441\u0435\u043F\u0442\u0438\u043B\u043B\u0438\u043E\u043D\u0430', '\u0441\u0435\u043F\u0442\u0438\u043B\u043B\u0438\u043E\u043D\u043E\u0432'], // 10^ 24\r\n 9: ['\u043E\u043A\u0442\u0438\u043B\u043B\u0438\u043E\u043D', '\u043E\u043A\u0442\u0438\u043B\u043B\u0438\u043E\u043D\u0430', '\u043E\u043A\u0442\u0438\u043B\u043B\u0438\u043E\u043D\u043E\u0432'], // 10^ 27\r\n 10: ['\u043D\u043E\u043D\u0438\u043B\u043B\u0438\u043E\u043D', '\u043D\u043E\u043D\u0438\u043B\u043B\u0438\u043E\u043D\u0430', '\u043D\u043E\u043D\u0438\u043B\u043B\u0438\u043E\u043D\u043E\u0432'], // 10^ 30\r\n };\r\n\r\n constructor(options) {\r\n options = Object.assign({\r\n negativeWord: '\u043C\u0438\u043D\u0443\u0441',\r\n separatorWord: '\u0437\u0430\u043F\u044F\u0442\u0430\u044F',\r\n zero: '\u043D\u043E\u043B\u044C',\r\n feminine: false\r\n }, options);\r\n\r\n super(options);\r\n\r\n this.feminine = options.feminine;\r\n }\r\n\r\n toCardinal(number) {\r\n if (number == 0) {\r\n return this.zero;\r\n }\r\n\r\n const words = [];\r\n\r\n const chunks = this.splitByX(number.toString(), 3);\r\n\r\n let index = chunks.length;\r\n\r\n for (const x of chunks) {\r\n let ones = [];\r\n index = index - 1;\r\n\r\n if (x == 0) {\r\n continue;\r\n }\r\n\r\n const [n1, n2, n3] = this.getDigits(x);\r\n\r\n if (n3 > 0) {\r\n words.push(this.hundreds[n3]);\r\n }\r\n\r\n if (n2 > 1) {\r\n words.push(this.twenties[n2]);\r\n }\r\n\r\n if (n2 == 1) {\r\n words.push(this.tens[n1]);\r\n } else if (n1 > 0) {\r\n ones = (index == 1 || this.feminine && index == 0) ? this.onesFeminine : this.ones;\r\n words.push(ones[n1]);\r\n }\r\n\r\n if (index > 0) {\r\n words.push(this.pluralize(x, this.thousands[index]));\r\n }\r\n }\r\n\r\n return words.join(' ');\r\n }\r\n\r\n splitByX(n, x) {\r\n const results = [];\r\n const l = n.length;\r\n let result;\r\n\r\n if (l > x) {\r\n const start = l % x;\r\n\r\n if (start > 0) {\r\n result = n.slice(0, start);\r\n\r\n results.push(BigInt(result));\r\n }\r\n\r\n for (let index = start; index < l; index += x) {\r\n result = n.slice(index, index + x);\r\n\r\n results.push(BigInt(result));\r\n }\r\n } else {\r\n results.push(BigInt(n));\r\n }\r\n\r\n return results;\r\n }\r\n\r\n getDigits(value) {\r\n // TODO ESLint suggestion\r\n // eslint-disable-next-line unicorn/no-useless-spread\r\n const a = [...value.toString().padStart(3, '0').slice(-3)].reverse();\r\n return a.map(BigInt);\r\n }\r\n\r\n pluralize(n, forms) {\r\n let form = 2;\r\n if ((n % 100n < 10n) || (n % 100n > 20n)) {\r\n if (n % 10n == 1n) {\r\n form = 0;\r\n } else if ((n % 10n < 5n) && (n % 10n > 1n)) {\r\n form = 1;\r\n }\r\n }\r\n return forms[form];\r\n }\r\n}\r\n\r\n/**\r\n * Converts a value to cardinal (written) form.\r\n * @param {number|string|bigint} value Number to be convert.\r\n * @param {object} [options] Options for class.\r\n * @returns {string} Value in cardinal (written) format.\r\n * @throws {Error} Value cannot be invalid.\r\n */\r\nexport default function floatToCardinal (value, options = {}) {\r\n return new N2WordsRU(options).floatToCardinal(value);\r\n}\r\n", "import { N2WordsRU } from './ru.js';\r\n\r\nclass N2WordsHE extends N2WordsRU {\r\n and;\r\n\r\n ones = { 1: '\u05D0\u05B6\u05D7\u05B8\u05D3', 2: '\u05E9\u05C1\u05B0\u05E0\u05B7\u05D9\u05B4\u05DD', 3: '\u05E9\u05C1\u05B0\u05DC\u05B9\u05E9\u05C1\u05B8\u05D4', 4: '\u05D0\u05B7\u05E8\u05B0\u05D1\u05BC\u05B8\u05E2\u05B8\u05D4', 5: '\u05D7\u05B2\u05DE\u05B4\u05E9\u05BC\u05C1\u05B8\u05D4', 6: '\u05E9\u05C1\u05B4\u05E9\u05BC\u05C1\u05B8\u05D4', 7: '\u05E9\u05C1\u05B4\u05D1\u05B0\u05E2\u05B8\u05D4', 8: '\u05E9\u05C1\u05B0\u05DE\u05D5\u05B9\u05E0\u05B8\u05D4', 9: '\u05EA\u05BC\u05B4\u05E9\u05C1\u05B0\u05E2\u05B8\u05D4' };\r\n tens = {\r\n 0: '\u05E2\u05B2\u05E9\u05C2\u05B8\u05E8\u05B8\u05D4', 2: '\u05E9\u05C1\u05B0\u05E0\u05B5\u05D9\u05DD \u05E2\u05B8\u05E9\u05C2\u05B8\u05E8'\r\n };\r\n\r\n two = \"\u05E9\u05C1\u05B0\u05E0\u05B5\u05D9\";\r\n ten = \"\u05E2\u05B8\u05E9\u05C2\u05B8\u05E8\";\r\n\r\n twenties = {\r\n 2: '\u05E2\u05B6\u05E9\u05C2\u05B0\u05E8\u05B4\u05D9\u05DD',\r\n 3: '\u05E9\u05C1\u05B0\u05DC\u05B9\u05E9\u05C1\u05B4\u05D9\u05DD',\r\n 4: '\u05D0\u05B7\u05E8\u05B0\u05D1\u05BC\u05B8\u05E2\u05B4\u05D9\u05DD',\r\n 5: '\u05D7\u05DE\u05D9\u05E9\u05D9\u05DD',\r\n 6: '\u05E9\u05E9\u05D9\u05DD',\r\n 7: '\u05E9\u05D1\u05E2\u05D9\u05DD',\r\n 8: '\u05E9\u05DE\u05D5\u05E0\u05D9\u05DD',\r\n 9: '\u05EA\u05E9\u05E2\u05D9\u05DD'\r\n };\r\n\r\n hundreds = {\r\n 1: '\u05DE\u05D0\u05D4',\r\n 2: '\u05DE\u05D0\u05EA\u05D9\u05D9\u05DD',\r\n 3: '\u05DE\u05D0\u05D5\u05EA'\r\n };\r\n\r\n thousands = {\r\n 1: '\u05D0\u05DC\u05E3',\r\n 2: '\u05D0\u05DC\u05E4\u05D9\u05D9\u05DD',\r\n 3: '\u05E9\u05DC\u05E9\u05EA \u05D0\u05DC\u05E4\u05D9\u05DD',\r\n 4: '\u05D0\u05E8\u05D1\u05E2\u05EA \u05D0\u05DC\u05E4\u05D9\u05DD',\r\n 5: '\u05D7\u05DE\u05E9\u05EA \u05D0\u05DC\u05E4\u05D9\u05DD',\r\n 6: '\u05E9\u05E9\u05EA \u05D0\u05DC\u05E4\u05D9\u05DD',\r\n 7: '\u05E9\u05D1\u05E2\u05EA \u05D0\u05DC\u05E4\u05D9\u05DD',\r\n 8: '\u05E9\u05DE\u05D5\u05E0\u05EA \u05D0\u05DC\u05E4\u05D9\u05DD',\r\n 9: '\u05EA\u05E9\u05E2\u05EA \u05D0\u05DC\u05E4\u05D9\u05DD'\r\n };\r\n\r\n constructor(options) {\r\n // TODO Confirm `negativeWord`\r\n // TODO Set `separatorWord`\r\n options = Object.assign({\r\n negativeWord: '\u05DE\u05D9\u05E0\u05D5\u05E1',\r\n //separatorWord: ,\r\n zero: '\u05D0\u05E4\u05E1',\r\n and: '\u05D5\u05B0',\r\n altAnd: '\u05D5\u05BC'\r\n }, options);\r\n\r\n super(options);\r\n\r\n this.and = options.and;\r\n }\r\n\r\n toCardinal(number) {\r\n switch (number) {\r\n case 0:\r\n return this.zero;\r\n case 2:\r\n return this.two;\r\n }\r\n\r\n const words = [];\r\n const chunks = this.splitByX(number.toString(), 3);\r\n let index = chunks.length;\r\n for (const x of chunks) {\r\n index = index - 1;\r\n if (x == 0) {\r\n continue;\r\n }\r\n\r\n const [n1, n2, n3] = this.getDigits(x);\r\n\r\n if (index > 0) {\r\n words.push(this.thousands[n1]);\r\n continue;\r\n }\r\n\r\n\r\n if (n3 > 0) {\r\n if (n3 <= 2) {\r\n words.push(this.hundreds[n3]);\r\n } else {\r\n words.push(this.ones[n3] + ' ' + this.hundreds[3]);\r\n }\r\n }\r\n\r\n if (n2 == 1) {\r\n words.push(n1 in this.tens ? this.tens[n1] : this.ones[n1] + \" \" + this.ten);\r\n } else if (n1 > 0) {\r\n words.push(this.ones[n1]);\r\n }\r\n\r\n if (n2 > 1) {\r\n words.push(this.twenties[n2]);\r\n }\r\n }\r\n\r\n if (words.length > 1) {\r\n words[words.length - 1] = (words[words.length - 1] == this.twenties[3] ? this.altAnd : this.and) + words[words.length - 1];\r\n }\r\n\r\n return words.join(' ');\r\n }\r\n}\r\n\r\n/**\r\n * Converts a value to cardinal (written) form.\r\n * @param {number|string|bigint} value Number to be convert.\r\n * @param {object} [options] Options for class.\r\n * @returns {string} Value in cardinal (written) format.\r\n * @throws {Error} Value cannot be invalid.\r\n */\r\nexport default function floatToCardinal (value, options = {}) {\r\n return new N2WordsHE(options).floatToCardinal(value);\r\n}\r\n"], - "mappings": "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", + "sourcesContent": ["/**\r\n * Creates new language class that processes decimals separately.\r\n * Requires implementing `toCardinal`.\r\n */\r\nexport default class AbstractLanguage {\r\n #negativeWord;\r\n #separatorWord;\r\n #zero;\r\n #spaceSeparator;\r\n #wholeNumber;\r\n\r\n /**\r\n * @param {object} options Options for class.\r\n * @param {string} [options.negativeWord] Word that precedes a negative number (if any).\r\n * @param {string} options.separatorWord Word that separates cardinal numbers (i.e. \"and\").\r\n * @param {string} options.zero Word for 0 (i.e. \"zero\").\r\n * @param {string} [options.spaceSeparator] Character that separates words.\r\n */\r\n constructor(options) {\r\n // Merge supplied options with defaults\r\n options = Object.assign({\r\n negativeWord: '',\r\n separatorWord: '',\r\n zero: '',\r\n spaceSeparator: ' '\r\n }, options);\r\n\r\n // Make options available to class\r\n this.#negativeWord = options.negativeWord;\r\n this.#separatorWord = options.separatorWord;\r\n this.#zero = options.zero;\r\n this.#spaceSeparator = options.spaceSeparator;\r\n }\r\n\r\n /**\r\n * @returns {string} Word that precedes a negative number (if any).\r\n */\r\n get negativeWord() {\r\n return this.#negativeWord;\r\n }\r\n\r\n /**\r\n * @returns {string} Word that separates cardinal numbers (i.e. \"and\").\r\n */\r\n get separatorWord() {\r\n return this.#separatorWord;\r\n }\r\n\r\n /**\r\n * @returns {string} Word for 0 (i.e. \"zero\").\r\n */\r\n get zero() {\r\n return this.#zero;\r\n }\r\n\r\n /**\r\n * @returns {string} Character that separates words.\r\n */\r\n get spaceSeparator() {\r\n return this.#spaceSeparator;\r\n }\r\n\r\n /**\r\n * @returns {number} Input value without decimal.\r\n */\r\n get wholeNumber() {\r\n return this.#wholeNumber;\r\n }\r\n\r\n /**\r\n * Convert ONLY decimal portion of number (processing leading zeros) to a string array of cardinal numbers.\r\n * @param {string} decimal Decimal string to convert.\r\n * @returns {string} Value in written format.\r\n */\r\n decimalToCardinal(decimal) {\r\n const words = [];\r\n\r\n // Split decimal string into an array of characters\r\n const chars = [...decimal];\r\n\r\n // Loop through characters adding leading zeros to words array\r\n let index = 0;\r\n while (index < chars.length && chars[index] === '0') {\r\n words.push(this.zero);\r\n index++;\r\n }\r\n\r\n // Prevent further processing if entire string was zeros\r\n if (index === chars.length) {\r\n return words;\r\n }\r\n\r\n // Convert and add remaining then return words array\r\n return [...words, this.toCardinal(BigInt(decimal))];\r\n }\r\n\r\n /**\r\n * Convert a number to cardinal form.\r\n * @param {number|string|bigint} value Number to be convert.\r\n * @returns {string} Value in written format.\r\n * @throws {Error} Value must be a valid number.\r\n */\r\n floatToCardinal(value) {\r\n // Validate user input value and convert to string (excluding BigInt)\r\n if (typeof value == 'number') {\r\n if (Number.isNaN(value)) {\r\n throw new TypeError('NaN is not an accepted number.');\r\n }\r\n value = value.toString();\r\n } else if (typeof value == 'string') {\r\n value = value.trim();\r\n if (value.length === 0 || Number.isNaN(Number(value))) {\r\n throw new Error('\"' + value + '\" is not a valid number.');\r\n }\r\n } else if (typeof value != 'bigint') {\r\n throw new TypeError('Invalid variable type: ' + typeof value);\r\n }\r\n\r\n let words = [];\r\n let wholeNumber;\r\n let decimalNumber;\r\n\r\n // If negative number add negative word\r\n if (value < 0) {\r\n words.push(this.negativeWord);\r\n }\r\n\r\n // Split value decimal (if any) then convert to BigInt\r\n if (typeof value == 'bigint') {\r\n wholeNumber = value;\r\n } else {\r\n const splitValue = value.split('.');\r\n wholeNumber = BigInt(splitValue[0]);\r\n decimalNumber = splitValue[1];\r\n }\r\n\r\n // Convert whole number to positive (if negative)\r\n if (wholeNumber < 0) {\r\n wholeNumber = -wholeNumber;\r\n }\r\n\r\n // NOTE: Only needed for CZ\r\n this.#wholeNumber = wholeNumber;\r\n\r\n // Add whole number in written form\r\n words = [...words, this.toCardinal(wholeNumber)];\r\n\r\n // Add decimal number in written form (if any)\r\n if (decimalNumber) {\r\n words.push(this.separatorWord);\r\n\r\n words = [...words, ...this.decimalToCardinal(decimalNumber)];\r\n }\r\n\r\n // Join words with spaces\r\n return words.join(this.spaceSeparator);\r\n }\r\n}\r\n", "import AbstractLanguage from '../classes/abstract-language.js';\r\n\r\nexport class N2WordsRU extends AbstractLanguage {\r\n /** @type {boolean} */\r\n feminine;\r\n\r\n /** @type {object} */\r\n ones = {\r\n 1: '\u043E\u0434\u0438\u043D',\r\n 2: '\u0434\u0432\u0430',\r\n 3: '\u0442\u0440\u0438',\r\n 4: '\u0447\u0435\u0442\u044B\u0440\u0435',\r\n 5: '\u043F\u044F\u0442\u044C',\r\n 6: '\u0448\u0435\u0441\u0442\u044C',\r\n 7: '\u0441\u0435\u043C\u044C',\r\n 8: '\u0432\u043E\u0441\u0435\u043C\u044C',\r\n 9: '\u0434\u0435\u0432\u044F\u0442\u044C'\r\n };\r\n\r\n /** @type {object} */\r\n onesFeminine = {\r\n 1: '\u043E\u0434\u043D\u0430',\r\n 2: '\u0434\u0432\u0435',\r\n 3: '\u0442\u0440\u0438',\r\n 4: '\u0447\u0435\u0442\u044B\u0440\u0435',\r\n 5: '\u043F\u044F\u0442\u044C',\r\n 6: '\u0448\u0435\u0441\u0442\u044C',\r\n 7: '\u0441\u0435\u043C\u044C',\r\n 8: '\u0432\u043E\u0441\u0435\u043C\u044C',\r\n 9: '\u0434\u0435\u0432\u044F\u0442\u044C'\r\n };\r\n\r\n /** @type {object} */\r\n tens = {\r\n 0: '\u0434\u0435\u0441\u044F\u0442\u044C',\r\n 1: '\u043E\u0434\u0438\u043D\u043D\u0430\u0434\u0446\u0430\u0442\u044C',\r\n 2: '\u0434\u0432\u0435\u043D\u0430\u0434\u0446\u0430\u0442\u044C',\r\n 3: '\u0442\u0440\u0438\u043D\u0430\u0434\u0446\u0430\u0442\u044C',\r\n 4: '\u0447\u0435\u0442\u044B\u0440\u043D\u0430\u0434\u0446\u0430\u0442\u044C',\r\n 5: '\u043F\u044F\u0442\u043D\u0430\u0434\u0446\u0430\u0442\u044C',\r\n 6: '\u0448\u0435\u0441\u0442\u043D\u0430\u0434\u0446\u0430\u0442\u044C',\r\n 7: '\u0441\u0435\u043C\u043D\u0430\u0434\u0446\u0430\u0442\u044C',\r\n 8: '\u0432\u043E\u0441\u0435\u043C\u043D\u0430\u0434\u0446\u0430\u0442\u044C',\r\n 9: '\u0434\u0435\u0432\u044F\u0442\u043D\u0430\u0434\u0446\u0430\u0442\u044C'\r\n };\r\n\r\n /** @type {object} */\r\n twenties = {\r\n 2: '\u0434\u0432\u0430\u0434\u0446\u0430\u0442\u044C',\r\n 3: '\u0442\u0440\u0438\u0434\u0446\u0430\u0442\u044C',\r\n 4: '\u0441\u043E\u0440\u043E\u043A',\r\n 5: '\u043F\u044F\u0442\u044C\u0434\u0435\u0441\u044F\u0442',\r\n 6: '\u0448\u0435\u0441\u0442\u044C\u0434\u0435\u0441\u044F\u0442',\r\n 7: '\u0441\u0435\u043C\u044C\u0434\u0435\u0441\u044F\u0442',\r\n 8: '\u0432\u043E\u0441\u0435\u043C\u044C\u0434\u0435\u0441\u044F\u0442',\r\n 9: '\u0434\u0435\u0432\u044F\u043D\u043E\u0441\u0442\u043E'\r\n };\r\n\r\n /** @type {object} */\r\n hundreds = {\r\n 1: '\u0441\u0442\u043E',\r\n 2: '\u0434\u0432\u0435\u0441\u0442\u0438',\r\n 3: '\u0442\u0440\u0438\u0441\u0442\u0430',\r\n 4: '\u0447\u0435\u0442\u044B\u0440\u0435\u0441\u0442\u0430',\r\n 5: '\u043F\u044F\u0442\u044C\u0441\u043E\u0442',\r\n 6: '\u0448\u0435\u0441\u0442\u044C\u0441\u043E\u0442',\r\n 7: '\u0441\u0435\u043C\u044C\u0441\u043E\u0442',\r\n 8: '\u0432\u043E\u0441\u0435\u043C\u044C\u0441\u043E\u0442',\r\n 9: '\u0434\u0435\u0432\u044F\u0442\u044C\u0441\u043E\u0442'\r\n };\r\n\r\n /** @type {object} */\r\n thousands = {\r\n 1: ['\u0442\u044B\u0441\u044F\u0447\u0430', '\u0442\u044B\u0441\u044F\u0447\u0438', '\u0442\u044B\u0441\u044F\u0447'], // 10^ 3\r\n 2: ['\u043C\u0438\u043B\u043B\u0438\u043E\u043D', '\u043C\u0438\u043B\u043B\u0438\u043E\u043D\u0430', '\u043C\u0438\u043B\u043B\u0438\u043E\u043D\u043E\u0432'], // 10^ 6\r\n 3: ['\u043C\u0438\u043B\u043B\u0438\u0430\u0440\u0434', '\u043C\u0438\u043B\u043B\u0438\u0430\u0440\u0434\u0430', '\u043C\u0438\u043B\u043B\u0438\u0430\u0440\u0434\u043E\u0432'], // 10^ 9\r\n 4: ['\u0442\u0440\u0438\u043B\u043B\u0438\u043E\u043D', '\u0442\u0440\u0438\u043B\u043B\u0438\u043E\u043D\u0430', '\u0442\u0440\u0438\u043B\u043B\u0438\u043E\u043D\u043E\u0432'], // 10^ 12\r\n 5: ['\u043A\u0432\u0430\u0434\u0440\u0438\u043B\u043B\u0438\u043E\u043D', '\u043A\u0432\u0430\u0434\u0440\u0438\u043B\u043B\u0438\u043E\u043D\u0430', '\u043A\u0432\u0430\u0434\u0440\u0438\u043B\u043B\u0438\u043E\u043D\u043E\u0432'], // 10^ 15\r\n 6: ['\u043A\u0432\u0438\u043D\u0442\u0438\u043B\u043B\u0438\u043E\u043D', '\u043A\u0432\u0438\u043D\u0442\u0438\u043B\u043B\u0438\u043E\u043D\u0430', '\u043A\u0432\u0438\u043D\u0442\u0438\u043B\u043B\u0438\u043E\u043D\u043E\u0432'], // 10^ 18\r\n 7: ['\u0441\u0435\u043A\u0441\u0442\u0438\u043B\u043B\u0438\u043E\u043D', '\u0441\u0435\u043A\u0441\u0442\u0438\u043B\u043B\u0438\u043E\u043D\u0430', '\u0441\u0435\u043A\u0441\u0442\u0438\u043B\u043B\u0438\u043E\u043D\u043E\u0432'], // 10^ 21\r\n 8: ['\u0441\u0435\u043F\u0442\u0438\u043B\u043B\u0438\u043E\u043D', '\u0441\u0435\u043F\u0442\u0438\u043B\u043B\u0438\u043E\u043D\u0430', '\u0441\u0435\u043F\u0442\u0438\u043B\u043B\u0438\u043E\u043D\u043E\u0432'], // 10^ 24\r\n 9: ['\u043E\u043A\u0442\u0438\u043B\u043B\u0438\u043E\u043D', '\u043E\u043A\u0442\u0438\u043B\u043B\u0438\u043E\u043D\u0430', '\u043E\u043A\u0442\u0438\u043B\u043B\u0438\u043E\u043D\u043E\u0432'], // 10^ 27\r\n 10: ['\u043D\u043E\u043D\u0438\u043B\u043B\u0438\u043E\u043D', '\u043D\u043E\u043D\u0438\u043B\u043B\u0438\u043E\u043D\u0430', '\u043D\u043E\u043D\u0438\u043B\u043B\u0438\u043E\u043D\u043E\u0432'], // 10^ 30\r\n };\r\n\r\n constructor(options) {\r\n options = Object.assign({\r\n negativeWord: '\u043C\u0438\u043D\u0443\u0441',\r\n separatorWord: '\u0437\u0430\u043F\u044F\u0442\u0430\u044F',\r\n zero: '\u043D\u043E\u043B\u044C',\r\n feminine: false\r\n }, options);\r\n\r\n super(options);\r\n\r\n this.feminine = options.feminine;\r\n }\r\n\r\n toCardinal(number) {\r\n if (number == 0) {\r\n return this.zero;\r\n }\r\n\r\n const words = [];\r\n\r\n const chunks = this.splitByX(number.toString(), 3);\r\n\r\n let index = chunks.length;\r\n\r\n for (const x of chunks) {\r\n let ones = [];\r\n index = index - 1;\r\n\r\n if (x == 0) {\r\n continue;\r\n }\r\n\r\n const [n1, n2, n3] = this.getDigits(x);\r\n\r\n if (n3 > 0) {\r\n words.push(this.hundreds[n3]);\r\n }\r\n\r\n if (n2 > 1) {\r\n words.push(this.twenties[n2]);\r\n }\r\n\r\n if (n2 == 1) {\r\n words.push(this.tens[n1]);\r\n } else if (n1 > 0) {\r\n ones = (index == 1 || this.feminine && index == 0) ? this.onesFeminine : this.ones;\r\n words.push(ones[n1]);\r\n }\r\n\r\n if (index > 0) {\r\n words.push(this.pluralize(x, this.thousands[index]));\r\n }\r\n }\r\n\r\n return words.join(' ');\r\n }\r\n\r\n splitByX(n, x) {\r\n const results = [];\r\n const l = n.length;\r\n let result;\r\n\r\n if (l > x) {\r\n const start = l % x;\r\n\r\n if (start > 0) {\r\n result = n.slice(0, start);\r\n\r\n results.push(BigInt(result));\r\n }\r\n\r\n for (let index = start; index < l; index += x) {\r\n result = n.slice(index, index + x);\r\n\r\n results.push(BigInt(result));\r\n }\r\n } else {\r\n results.push(BigInt(n));\r\n }\r\n\r\n return results;\r\n }\r\n\r\n getDigits(value) {\r\n // TODO ESLint suggestion\r\n // eslint-disable-next-line unicorn/no-useless-spread\r\n const a = [...value.toString().padStart(3, '0').slice(-3)].reverse();\r\n return a.map(BigInt);\r\n }\r\n\r\n pluralize(n, forms) {\r\n let form = 2;\r\n if ((n % 100n < 10n) || (n % 100n > 20n)) {\r\n if (n % 10n == 1n) {\r\n form = 0;\r\n } else if ((n % 10n < 5n) && (n % 10n > 1n)) {\r\n form = 1;\r\n }\r\n }\r\n return forms[form];\r\n }\r\n}\r\n\r\n/**\r\n * Converts a value to cardinal (written) form.\r\n * @param {number|string|bigint} value Number to be convert.\r\n * @param {object} [options] Options for class.\r\n * @returns {string} Value in cardinal (written) format.\r\n * @throws {Error} Value cannot be invalid.\r\n */\r\nexport default function floatToCardinal (value, options = {}) {\r\n return new N2WordsRU(options).floatToCardinal(value);\r\n}\r\n", "import { N2WordsRU } from './ru.js';\r\n\r\nclass N2WordsHE extends N2WordsRU {\r\n and;\r\n\r\n ones = { 1: '\u05D0\u05B6\u05D7\u05B8\u05D3', 2: '\u05E9\u05C1\u05B0\u05E0\u05B7\u05D9\u05B4\u05DD', 3: '\u05E9\u05C1\u05B0\u05DC\u05B9\u05E9\u05C1\u05B8\u05D4', 4: '\u05D0\u05B7\u05E8\u05B0\u05D1\u05BC\u05B8\u05E2\u05B8\u05D4', 5: '\u05D7\u05B2\u05DE\u05B4\u05E9\u05BC\u05C1\u05B8\u05D4', 6: '\u05E9\u05C1\u05B4\u05E9\u05BC\u05C1\u05B8\u05D4', 7: '\u05E9\u05C1\u05B4\u05D1\u05B0\u05E2\u05B8\u05D4', 8: '\u05E9\u05C1\u05B0\u05DE\u05D5\u05B9\u05E0\u05B8\u05D4', 9: '\u05EA\u05BC\u05B4\u05E9\u05C1\u05B0\u05E2\u05B8\u05D4' };\r\n tens = {\r\n 0: '\u05E2\u05B2\u05E9\u05C2\u05B8\u05E8\u05B8\u05D4', 2: '\u05E9\u05C1\u05B0\u05E0\u05B5\u05D9\u05DD \u05E2\u05B8\u05E9\u05C2\u05B8\u05E8'\r\n };\r\n\r\n two = \"\u05E9\u05C1\u05B0\u05E0\u05B5\u05D9\";\r\n ten = \"\u05E2\u05B8\u05E9\u05C2\u05B8\u05E8\";\r\n\r\n twenties = {\r\n 2: '\u05E2\u05B6\u05E9\u05C2\u05B0\u05E8\u05B4\u05D9\u05DD',\r\n 3: '\u05E9\u05C1\u05B0\u05DC\u05B9\u05E9\u05C1\u05B4\u05D9\u05DD',\r\n 4: '\u05D0\u05B7\u05E8\u05B0\u05D1\u05BC\u05B8\u05E2\u05B4\u05D9\u05DD',\r\n 5: '\u05D7\u05DE\u05D9\u05E9\u05D9\u05DD',\r\n 6: '\u05E9\u05E9\u05D9\u05DD',\r\n 7: '\u05E9\u05D1\u05E2\u05D9\u05DD',\r\n 8: '\u05E9\u05DE\u05D5\u05E0\u05D9\u05DD',\r\n 9: '\u05EA\u05E9\u05E2\u05D9\u05DD'\r\n };\r\n\r\n hundreds = {\r\n 1: '\u05DE\u05D0\u05D4',\r\n 2: '\u05DE\u05D0\u05EA\u05D9\u05D9\u05DD',\r\n 3: '\u05DE\u05D0\u05D5\u05EA'\r\n };\r\n\r\n thousands = {\r\n 1: '\u05D0\u05DC\u05E3',\r\n 2: '\u05D0\u05DC\u05E4\u05D9\u05D9\u05DD',\r\n 3: '\u05E9\u05DC\u05E9\u05EA \u05D0\u05DC\u05E4\u05D9\u05DD',\r\n 4: '\u05D0\u05E8\u05D1\u05E2\u05EA \u05D0\u05DC\u05E4\u05D9\u05DD',\r\n 5: '\u05D7\u05DE\u05E9\u05EA \u05D0\u05DC\u05E4\u05D9\u05DD',\r\n 6: '\u05E9\u05E9\u05EA \u05D0\u05DC\u05E4\u05D9\u05DD',\r\n 7: '\u05E9\u05D1\u05E2\u05EA \u05D0\u05DC\u05E4\u05D9\u05DD',\r\n 8: '\u05E9\u05DE\u05D5\u05E0\u05EA \u05D0\u05DC\u05E4\u05D9\u05DD',\r\n 9: '\u05EA\u05E9\u05E2\u05EA \u05D0\u05DC\u05E4\u05D9\u05DD'\r\n };\r\n\r\n constructor(options) {\r\n // TODO Confirm `negativeWord`\r\n // TODO Set `separatorWord`\r\n options = Object.assign({\r\n negativeWord: '\u05DE\u05D9\u05E0\u05D5\u05E1',\r\n //separatorWord: ,\r\n zero: '\u05D0\u05E4\u05E1',\r\n and: '\u05D5\u05B0',\r\n altAnd: '\u05D5\u05BC'\r\n }, options);\r\n\r\n super(options);\r\n\r\n this.and = options.and;\r\n }\r\n\r\n toCardinal(number) {\r\n switch (number) {\r\n case 0:\r\n case 0n:\r\n return this.zero;\r\n case 2:\r\n case 2n:\r\n return this.two;\r\n }\r\n\r\n const words = [];\r\n const chunks = this.splitByX(number.toString(), 3);\r\n let index = chunks.length;\r\n for (const x of chunks) {\r\n index = index - 1;\r\n if (x == 0) {\r\n continue;\r\n }\r\n\r\n const [n1, n2, n3] = this.getDigits(x);\r\n\r\n if (index > 0) {\r\n words.push(this.thousands[n1]);\r\n continue;\r\n }\r\n\r\n\r\n if (n3 > 0) {\r\n if (n3 <= 2) {\r\n words.push(this.hundreds[n3]);\r\n } else {\r\n words.push(this.ones[n3] + ' ' + this.hundreds[3]);\r\n }\r\n }\r\n\r\n if (n2 == 1) {\r\n words.push(n1 in this.tens ? this.tens[n1] : this.ones[n1] + \" \" + this.ten);\r\n } else if (n1 > 0) {\r\n words.push(this.ones[n1]);\r\n }\r\n\r\n if (n2 > 1) {\r\n words.push(this.twenties[n2]);\r\n }\r\n }\r\n\r\n if (words.length > 1) {\r\n words[words.length - 1] = (words[words.length - 1] == this.twenties[3] ? this.altAnd : this.and) + words[words.length - 1];\r\n }\r\n\r\n return words.join(' ');\r\n }\r\n}\r\n\r\n/**\r\n * Converts a value to cardinal (written) form.\r\n * @param {number|string|bigint} value Number to be convert.\r\n * @param {object} [options] Options for class.\r\n * @returns {string} Value in cardinal (written) format.\r\n * @throws {Error} Value cannot be invalid.\r\n */\r\nexport default function floatToCardinal (value, options = {}) {\r\n return new N2WordsHE(options).floatToCardinal(value);\r\n}\r\n"], + "mappings": "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", "names": ["_negativeWord", "_separatorWord", "_zero", "_spaceSeparator", "_wholeNumber", "AbstractLanguage", "options", "__privateAdd", "__privateSet", "__privateGet", "decimal", "words", "chars", "index", "value", "wholeNumber", "decimalNumber", "splitValue", "N2WordsRU", "AbstractLanguage", "options", "number", "words", "chunks", "index", "x", "ones", "n1", "n2", "n3", "n", "results", "l", "result", "start", "value", "forms", "form", "N2WordsHE", "N2WordsRU", "options", "number", "words", "chunks", "index", "x", "n1", "n2", "n3", "floatToCardinal", "value"] }