italian-numbers 1.2.0 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,6 +1,8 @@
1
1
  # italian-numbers
2
2
 
3
- ### Converts a number to an italian word representation and vice versa.
3
+ ## Purpose
4
+
5
+ ### Converts a number to an italian word representation and vice versa
4
6
 
5
7
  Works with positive and negative integers from **-999999999999** (meno novecentonovantanove miliardi e novecentonovantanove milioni e novecentonovantanovemilanovecentonovantanove) to **999999999999** (novecentonovantanove miliardi e novecentonovantanove milioni e novecentonovantanovemilanovecentonovantanove).
6
8
 
@@ -60,10 +62,15 @@ ordinalConverter(1, { plural: true, female: true }); // 'prime'
60
62
  ordinalConverter(70, { plural: true, female: true }); // 'settantesime'
61
63
  ordinalConverter(110, { plural: true, female: true }); // 'centodecime'
62
64
 
63
- // Number to italian word representation
65
+ // Italian word representation to number
64
66
  italianConverter('uno'); // 1
65
67
  italianConverter('novantasette'); // 97
66
68
  italianConverter('un milione tredicimila'); // 1013000
69
+ italianConverter('zeresimo'); // 0
70
+ italianConverter('prima'); // 1
71
+ italianConverter('quattrocentotredicesime'); // 413
72
+ italianConverter('infinitesimi'); // Infinity
73
+
67
74
 
68
75
  // Arabic to Roman
69
76
  romanConverter(1); // 'I'
package/dist/index.js CHANGED
@@ -460,6 +460,39 @@ var numberCalculator = (word) => {
460
460
  }
461
461
  return hundredsConverter2(word);
462
462
  };
463
+ var getNumberFromOrdinal = (ordinal) => {
464
+ let cardinal = ordinal;
465
+ cardinal = cardinal.replace(/decim\w$/, "dieci");
466
+ cardinal = cardinal.replace(/centesim\w$/, "cento");
467
+ cardinal = cardinal.replace(/^millesim\w$/, "mille");
468
+ cardinal = cardinal.replace(/millesim\w$/, "mila");
469
+ cardinal = cardinal.replace(/^milionesim\w$/, "unmilione");
470
+ cardinal = cardinal.replace(/milionesim\w$/, "milioni");
471
+ cardinal = cardinal.replace(/^miliardesim\w$/, "unmiliardo");
472
+ cardinal = cardinal.replace(/miliardesim\w$/, "miliardi");
473
+ cardinal = cardinal.replace(/ntesim\w$/, "nti");
474
+ cardinal = cardinal.replace(/unesim\w$/, "uno");
475
+ cardinal = cardinal.replace(/quattresim\w$/, "quattro");
476
+ cardinal = cardinal.replace(/ottesim\w$/, "otto");
477
+ cardinal = cardinal.replace(/duesim\w$/, "due");
478
+ cardinal = cardinal.replace(/cinquesim\w$/, "cinque");
479
+ cardinal = cardinal.replace(/settesim\w$/, "sette");
480
+ cardinal = cardinal.replace(/novesim\w$/, "nove");
481
+ cardinal = cardinal.replace(/undicesim\w$/, "undici");
482
+ cardinal = cardinal.replace(/dodicesim\w$/, "dodici");
483
+ cardinal = cardinal.replace(/tredicesim\w$/, "tredici");
484
+ cardinal = cardinal.replace(/quattordicesim\w$/, "quattordici");
485
+ cardinal = cardinal.replace(/quindicesim\w$/, "quindici");
486
+ cardinal = cardinal.replace(/sedicesim\w$/, "sedici");
487
+ cardinal = cardinal.replace(/esim\w$/, "");
488
+ cardinal = cardinal.replace(/^milione/, "unmilione");
489
+ cardinal = cardinal.replace(/^miliard/, "unmiliardo");
490
+ cardinal = cardinal.replace(/centuno/, "centouno");
491
+ cardinal = cardinal.replace(/centotto/, "centootto");
492
+ cardinal = cardinal.replace(/miliarduno/, "miliardouno");
493
+ cardinal = cardinal.replace(/miliardotto/, "miliardootto");
494
+ return cardinal;
495
+ };
463
496
  var italianConverter = (word) => {
464
497
  let escapedWord = word.toLowerCase();
465
498
  escapedWord = escapedWord.replaceAll(" e ", "");
@@ -475,6 +508,18 @@ var italianConverter = (word) => {
475
508
  if (word === "zero") {
476
509
  return 0;
477
510
  }
511
+ if (escapedWord.match(/\w*(a|o|e|i)$/)) {
512
+ const index = zeroTenOrdinals.findIndex((ord) => escapedWord.startsWith(ord.slice(0, -1)));
513
+ if (index !== -1) {
514
+ return index;
515
+ }
516
+ if (escapedWord.match(/infinitesim(a|o|e|i)$/)) {
517
+ return Infinity;
518
+ }
519
+ if (escapedWord.match(/\w*(esim|decim)(a|o|e|i)$/)) {
520
+ escapedWord = getNumberFromOrdinal(escapedWord);
521
+ }
522
+ }
478
523
  return numberCalculator(escapedWord) * multiplier;
479
524
  };
480
525
  var italianConverter_default = italianConverter;
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/constants/constants.ts","../src/functions/cardinalConverter.ts","../src/functions/ordinalConverter.ts","../src/functions/romanConverter.ts","../src/functions/arabicConverter.ts","../src/functions/italianConverter.ts"],"sourcesContent":["export { default as cardinalConverter } from './functions/cardinalConverter';\nexport { default as ordinalConverter } from './functions/ordinalConverter';\nexport { default as romanConverter } from './functions/romanConverter';\nexport { default as arabicConverter } from './functions/arabicConverter';\nexport { default as italianConverter } from './functions/italianConverter';\n","export const zeroNineteen = [\n 'zero',\n 'uno',\n 'due',\n 'tre',\n 'quattro',\n 'cinque',\n 'sei',\n 'sette',\n 'otto',\n 'nove',\n 'dieci',\n 'undici',\n 'dodici',\n 'tredici',\n 'quattordici',\n 'quindici',\n 'sedici',\n 'diciassette',\n 'diciotto',\n 'diciannove',\n];\n\nexport const zeroTenOrdinals = [\n 'zeresimo',\n 'primo',\n 'secondo',\n 'terzo',\n 'quarto',\n 'quinto',\n 'sesto',\n 'settimo',\n 'ottavo',\n 'nono',\n 'decimo',\n];\n\nexport const tens = [\n 'venti',\n 'trenta',\n 'quaranta',\n 'cinquanta',\n 'sessanta',\n 'settanta',\n 'ottanta',\n 'novanta',\n];\n\nexport const hundred = 'cento';\nexport const thousands = ['mille', 'mila'];\nexport const millions = ['un milione', ' milioni'];\nexport const billions = ['un miliardo', ' miliardi'];\n\nexport const and = ' e ';\n\nexport const romanNumerals: { [key: string]: number } = {\n I: 1,\n V: 5,\n X: 10,\n L: 50,\n C: 100,\n D: 500,\n M: 1000,\n};\n\nexport const romanUnits = [\n '',\n 'I',\n 'II',\n 'III',\n 'IV',\n 'V',\n 'VI',\n 'VII',\n 'VIII',\n 'IX',\n];\n\nexport const romanTens = [\n '',\n 'X',\n 'XX',\n 'XXX',\n 'XL',\n 'L',\n 'LX',\n 'LXX',\n 'LXXX',\n 'XC',\n];\n\nexport const romanHundreds = [\n '',\n 'C',\n 'CC',\n 'CCC',\n 'CD',\n 'D',\n 'DC',\n 'DCC',\n 'DCCC',\n 'CM',\n];\n\nexport const romanThousands = [\n '',\n 'M',\n 'MM',\n 'MMM',\n];\n\nexport const unitsDict : { [unit: string] : number } = {\n un: 1,\n uno: 1,\n due: 2,\n tre: 3,\n tré: 3,\n quattro: 4,\n cinque: 5,\n sei: 6,\n sette: 7,\n otto: 8,\n nove: 9,\n dieci: 10,\n undici: 11,\n dodici: 12,\n tredici: 13,\n quattordici: 14,\n quindici: 15,\n sedici: 16,\n diciassette: 17,\n diciotto: 18,\n diciannove: 19,\n};\n\nexport const tensDict : { [ten: string] : number } = {\n venti: 20,\n trenta: 30,\n quaranta: 40,\n cinquanta: 50,\n sessanta: 60,\n settanta: 70,\n ottanta: 80,\n novanta: 90,\n};\n","import {\n zeroNineteen,\n tens,\n hundred,\n thousands,\n millions,\n billions,\n and,\n} from '../constants/constants';\n\nconst tensConverter = (n: number): string => {\n if (n < 20) {\n return zeroNineteen[n];\n }\n\n const firstDigit = Math.floor(n / 10) - 2;\n const secondDigit = n % 10;\n const word = tens[firstDigit];\n\n if (secondDigit === 0) {\n return word;\n }\n\n if (secondDigit === 1 || secondDigit === 8) {\n return word.slice(0, word.length - 1) + zeroNineteen[secondDigit];\n }\n\n return word + zeroNineteen[secondDigit];\n};\n\nconst hundredsConverter = (n: number): string => {\n const firstDigit = Math.floor(n / 100);\n if (firstDigit === 1) {\n return hundred;\n }\n\n return zeroNineteen[firstDigit] + hundred;\n};\n\nconst wordCalculator = (n: number): string => {\n const digitsNumber = Math.log(n) * Math.LOG10E + 1 | 0;\n\n if (digitsNumber < 3) {\n return tensConverter(n);\n }\n if (digitsNumber < 4) {\n if (n % 100 === 0) {\n return hundredsConverter(n);\n }\n\n if (n % 100 > 79 && n % 100 < 90) {\n const word = hundredsConverter(n);\n return word.slice(0, word.length - 1) + wordCalculator(n % 100);\n }\n\n return hundredsConverter(n) + wordCalculator(n % 100);\n }\n // thousands\n if (digitsNumber < 7) {\n const firstDigits = Math.floor(n / 1000);\n if (firstDigits === 1) {\n if (n % 1000 === 0) {\n return thousands[0];\n }\n return thousands[0] + wordCalculator(n % 1000);\n }\n if (n % 1000 === 0) {\n return wordCalculator(firstDigits) + thousands[1];\n }\n return (\n wordCalculator(firstDigits) + thousands[1] + wordCalculator(n % 1000)\n );\n }\n // millions\n if (digitsNumber < 10) {\n const firstDigits = Math.floor(n / 1000000);\n if (firstDigits === 1) {\n if (n % 1000000 === 0) {\n return millions[0];\n }\n return millions[0] + and + wordCalculator(n % 1000000);\n }\n if (n % 1000000 === 0) {\n return wordCalculator(firstDigits) + millions[1];\n }\n return (\n wordCalculator(firstDigits) + millions[1] + and + wordCalculator(n % 1000000)\n );\n }\n // billions\n if (digitsNumber < 13) {\n const firstDigits = Math.floor(n / 1000000000);\n if (firstDigits === 1) {\n if (n % 1000000000 === 0) {\n return billions[0];\n }\n return billions[0] + and + wordCalculator(n % 1000000000);\n }\n if (n % 1000000000 === 0) {\n return wordCalculator(firstDigits) + billions[1];\n }\n return (\n wordCalculator(firstDigits) + billions[1] + and + wordCalculator(n % 1000000000)\n );\n }\n\n return 'oh my zsh';\n};\n\nconst cardinalConverter = (number: number): string => {\n if (Number.isNaN(number)) {\n throw new Error('not a number');\n }\n if (number === Infinity) {\n return 'infinito';\n }\n\n if (number > 999999999999) {\n throw new Error('greater than 999999999999');\n }\n\n let prepend = '';\n if (number < 0) {\n prepend = 'meno ';\n }\n const n = Math.abs(number);\n\n let result = prepend + wordCalculator(n);\n if (result.endsWith('tre') && result !== 'tre') {\n result = result.replace(/.$/, 'é');\n }\n\n result = result.replaceAll(/(?<=\\w+)tre\\s/g, 'tré ');\n return result;\n};\n\nexport default cardinalConverter;\n","import { zeroTenOrdinals } from '../constants/constants';\nimport cardinalConverter from './cardinalConverter';\n\ntype Options = {\n female?: boolean;\n plural?: boolean;\n}\n\nconst converter = (n: number): string => {\n if (n < 11) {\n return zeroTenOrdinals[n];\n }\n\n let word = cardinalConverter(n);\n\n word = word.replaceAll(' e ', ' ');\n word = word.replace(/([io])\\s([ou])/g, (_match, p1, p2) => {\n if (p2 === 'o') {\n return p1;\n }\n if (p2 === 'u') {\n return p2;\n }\n return '';\n });\n word = word.replaceAll(/un\\s/g, '');\n word = word.replaceAll(/ouno$/g, 'uno');\n word = word.replaceAll(/ootto$/g, 'otto');\n word = word.replaceAll(' ', '');\n\n const lastDigit = n % 10;\n\n if (n % 100 !== 13 && lastDigit === 3) {\n return `${word.replace(/.$/, 'e')}esimo`;\n }\n if (n % 100 !== 16 && lastDigit === 6) {\n return `${word}esimo`;\n }\n if (n % 100 === 10) {\n return word.replace(/dieci$/g, 'decimo');\n }\n if (word.endsWith('mila')) {\n return word.replace(/mila/, 'millesimo');\n }\n\n return `${word.replace(/.$/, '')}esimo`;\n};\n\nconst ordinalConverter = (\n number: number,\n options: Options = { female: false, plural: false },\n): string => {\n if (number < 0) {\n throw new Error('negative number not allowed');\n }\n\n const result = converter(number);\n\n const { female, plural } = options;\n\n if (female && plural) {\n return result.replace(/.$/, 'e');\n }\n\n if (female) {\n return result.replace(/.$/, 'a');\n }\n\n if (plural) {\n return result.replace(/.$/, 'i');\n }\n\n return result;\n};\n\nexport default ordinalConverter;\n","import {\n romanHundreds,\n romanTens,\n romanThousands,\n romanUnits,\n} from '../constants/constants';\n\nconst romanConverter = (number: number): string => {\n if (Number.isNaN(number)) {\n throw new Error('not a number');\n }\n if (number === Infinity) {\n return 'infinitum';\n }\n\n if (number > 3999) {\n throw new Error('greater than 3999');\n }\n\n if (number < 1) {\n throw new Error('lower than 1');\n }\n\n const unit = number % 10;\n const ten = Math.floor(number / 10) % 10;\n const hundred = Math.floor(number / 100) % 10;\n const thousand = Math.floor(number / 1000) % 10;\n\n const result = `${romanThousands[thousand]}${romanHundreds[hundred]}${romanTens[ten]}${romanUnits[unit]}`;\n return result;\n};\n\nexport default romanConverter;\n","import { romanNumerals } from '../constants/constants';\nimport romanConverter from './romanConverter';\n\nexport const arabicConverter = (romanNumber: string): number => {\n if (romanNumber === 'infinitum') {\n return Infinity;\n }\n\n const romanLetters = Object.keys(romanNumerals);\n if (Array.from(romanNumber).some((letter) => !romanLetters.includes(letter))) {\n throw new Error('invalid roman number');\n }\n\n let number = 0;\n\n for (let i = 0; i < romanNumber.length; i++) {\n let arabicNumber = romanNumerals[romanNumber.charAt(i)];\n\n if (i + 1 < romanNumber.length) {\n const nextArabicNumber = romanNumerals[romanNumber.charAt(i + 1)];\n if (arabicNumber < nextArabicNumber) {\n arabicNumber *= -1;\n }\n }\n\n number += arabicNumber;\n }\n\n let isValid: boolean;\n try {\n isValid = romanNumber === romanConverter(number);\n } catch {\n throw new Error('invalid roman number');\n }\n\n if (!isValid) {\n throw new Error('invalid roman number');\n }\n\n return number;\n};\n\nexport default arabicConverter;\n","import { unitsDict, tensDict } from '../constants/constants';\n\nconst tensConverter = (word: string): number => {\n if (unitsDict[word]) {\n return unitsDict[word];\n }\n\n const ten = Object.keys(tensDict).find((w) => word.startsWith(w.slice(0, -1)));\n if (!ten) {\n return NaN;\n }\n\n const result = tensDict[ten];\n if (word === ten) {\n return result;\n }\n\n let [, unit] = word.split(ten);\n if (!unit) {\n [, unit] = word.split(ten.slice(0, -1));\n }\n if (!unitsDict[unit]) {\n return NaN;\n }\n return result + unitsDict[unit];\n};\n\nconst hundredsConverter = (word: string): number => {\n const [hundred, ten] = word.split('cento');\n if (ten === undefined) {\n return tensConverter(hundred);\n }\n let result = -1;\n if (hundred === '') {\n result = 100;\n } else {\n if (!unitsDict[hundred]) {\n return NaN;\n }\n result = unitsDict[hundred] * 100;\n }\n if (ten !== '') {\n if (ten.startsWith('tt')) {\n result += tensConverter(`o${ten}`);\n } else {\n result += tensConverter(ten);\n }\n }\n\n return result;\n};\n\nconst numberCalculator = (word: string): number => {\n // billions\n let index = word.indexOf('miliard');\n if (index > -1) {\n const sub = word.slice(index + 8);\n let rest = 0;\n if (sub) {\n rest = numberCalculator(sub);\n }\n return hundredsConverter(word.slice(0, index)) * 1000000000 + rest;\n }\n\n // millions\n index = word.indexOf('milion');\n if (index > -1) {\n const sub = word.slice(index + 7);\n let rest = 0;\n if (sub) {\n rest = numberCalculator(sub);\n }\n return hundredsConverter(word.slice(0, index)) * 1000000 + rest;\n }\n\n // thousands\n index = word.indexOf('mila');\n if (index > -1) {\n const sub = word.slice(index + 4);\n let rest = 0;\n if (sub) {\n rest = numberCalculator(sub);\n }\n return hundredsConverter(word.slice(0, index)) * 1000 + rest;\n }\n\n index = word.indexOf('mille');\n if (index > -1) {\n const sub = word.slice(index + 5);\n if (!sub) {\n return 1000;\n }\n return 1000 + hundredsConverter(sub);\n }\n\n return hundredsConverter(word);\n};\n\nconst italianConverter = (word: string): number => {\n let escapedWord = word.toLowerCase();\n escapedWord = escapedWord.replaceAll(' e ', '');\n escapedWord = escapedWord.replaceAll(' ', '');\n\n let multiplier = 1;\n if (escapedWord.startsWith('meno')) {\n multiplier = -1;\n escapedWord = escapedWord.replace('meno', '');\n }\n\n if (word === 'infinito') {\n return Infinity;\n }\n\n if (word === 'zero') {\n return 0;\n }\n\n return numberCalculator(escapedWord) * multiplier;\n};\n\nexport default italianConverter;\n"],"mappings":"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","names":["hundred","tensConverter","hundredsConverter","hundred"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/constants/constants.ts","../src/functions/cardinalConverter.ts","../src/functions/ordinalConverter.ts","../src/functions/romanConverter.ts","../src/functions/arabicConverter.ts","../src/functions/italianConverter.ts"],"sourcesContent":["export { default as cardinalConverter } from './functions/cardinalConverter';\nexport { default as ordinalConverter } from './functions/ordinalConverter';\nexport { default as romanConverter } from './functions/romanConverter';\nexport { default as arabicConverter } from './functions/arabicConverter';\nexport { default as italianConverter } from './functions/italianConverter';\n","export const zeroNineteen = [\n 'zero',\n 'uno',\n 'due',\n 'tre',\n 'quattro',\n 'cinque',\n 'sei',\n 'sette',\n 'otto',\n 'nove',\n 'dieci',\n 'undici',\n 'dodici',\n 'tredici',\n 'quattordici',\n 'quindici',\n 'sedici',\n 'diciassette',\n 'diciotto',\n 'diciannove',\n];\n\nexport const zeroTenOrdinals = [\n 'zeresimo',\n 'primo',\n 'secondo',\n 'terzo',\n 'quarto',\n 'quinto',\n 'sesto',\n 'settimo',\n 'ottavo',\n 'nono',\n 'decimo',\n];\n\nexport const tens = [\n 'venti',\n 'trenta',\n 'quaranta',\n 'cinquanta',\n 'sessanta',\n 'settanta',\n 'ottanta',\n 'novanta',\n];\n\nexport const hundred = 'cento';\nexport const thousands = ['mille', 'mila'];\nexport const millions = ['un milione', ' milioni'];\nexport const billions = ['un miliardo', ' miliardi'];\n\nexport const and = ' e ';\n\nexport const romanNumerals: { [key: string]: number } = {\n I: 1,\n V: 5,\n X: 10,\n L: 50,\n C: 100,\n D: 500,\n M: 1000,\n};\n\nexport const romanUnits = [\n '',\n 'I',\n 'II',\n 'III',\n 'IV',\n 'V',\n 'VI',\n 'VII',\n 'VIII',\n 'IX',\n];\n\nexport const romanTens = [\n '',\n 'X',\n 'XX',\n 'XXX',\n 'XL',\n 'L',\n 'LX',\n 'LXX',\n 'LXXX',\n 'XC',\n];\n\nexport const romanHundreds = [\n '',\n 'C',\n 'CC',\n 'CCC',\n 'CD',\n 'D',\n 'DC',\n 'DCC',\n 'DCCC',\n 'CM',\n];\n\nexport const romanThousands = [\n '',\n 'M',\n 'MM',\n 'MMM',\n];\n\nexport const unitsDict : { [unit: string] : number } = {\n un: 1,\n uno: 1,\n due: 2,\n tre: 3,\n tré: 3,\n quattro: 4,\n cinque: 5,\n sei: 6,\n sette: 7,\n otto: 8,\n nove: 9,\n dieci: 10,\n undici: 11,\n dodici: 12,\n tredici: 13,\n quattordici: 14,\n quindici: 15,\n sedici: 16,\n diciassette: 17,\n diciotto: 18,\n diciannove: 19,\n};\n\nexport const tensDict : { [ten: string] : number } = {\n venti: 20,\n trenta: 30,\n quaranta: 40,\n cinquanta: 50,\n sessanta: 60,\n settanta: 70,\n ottanta: 80,\n novanta: 90,\n};\n","import {\n zeroNineteen,\n tens,\n hundred,\n thousands,\n millions,\n billions,\n and,\n} from '../constants/constants';\n\nconst tensConverter = (n: number): string => {\n if (n < 20) {\n return zeroNineteen[n];\n }\n\n const firstDigit = Math.floor(n / 10) - 2;\n const secondDigit = n % 10;\n const word = tens[firstDigit];\n\n if (secondDigit === 0) {\n return word;\n }\n\n if (secondDigit === 1 || secondDigit === 8) {\n return word.slice(0, word.length - 1) + zeroNineteen[secondDigit];\n }\n\n return word + zeroNineteen[secondDigit];\n};\n\nconst hundredsConverter = (n: number): string => {\n const firstDigit = Math.floor(n / 100);\n if (firstDigit === 1) {\n return hundred;\n }\n\n return zeroNineteen[firstDigit] + hundred;\n};\n\nconst wordCalculator = (n: number): string => {\n const digitsNumber = Math.log(n) * Math.LOG10E + 1 | 0;\n\n if (digitsNumber < 3) {\n return tensConverter(n);\n }\n if (digitsNumber < 4) {\n if (n % 100 === 0) {\n return hundredsConverter(n);\n }\n\n if (n % 100 > 79 && n % 100 < 90) {\n const word = hundredsConverter(n);\n return word.slice(0, word.length - 1) + wordCalculator(n % 100);\n }\n\n return hundredsConverter(n) + wordCalculator(n % 100);\n }\n // thousands\n if (digitsNumber < 7) {\n const firstDigits = Math.floor(n / 1000);\n if (firstDigits === 1) {\n if (n % 1000 === 0) {\n return thousands[0];\n }\n return thousands[0] + wordCalculator(n % 1000);\n }\n if (n % 1000 === 0) {\n return wordCalculator(firstDigits) + thousands[1];\n }\n return (\n wordCalculator(firstDigits) + thousands[1] + wordCalculator(n % 1000)\n );\n }\n // millions\n if (digitsNumber < 10) {\n const firstDigits = Math.floor(n / 1000000);\n if (firstDigits === 1) {\n if (n % 1000000 === 0) {\n return millions[0];\n }\n return millions[0] + and + wordCalculator(n % 1000000);\n }\n if (n % 1000000 === 0) {\n return wordCalculator(firstDigits) + millions[1];\n }\n return (\n wordCalculator(firstDigits) + millions[1] + and + wordCalculator(n % 1000000)\n );\n }\n // billions\n if (digitsNumber < 13) {\n const firstDigits = Math.floor(n / 1000000000);\n if (firstDigits === 1) {\n if (n % 1000000000 === 0) {\n return billions[0];\n }\n return billions[0] + and + wordCalculator(n % 1000000000);\n }\n if (n % 1000000000 === 0) {\n return wordCalculator(firstDigits) + billions[1];\n }\n return (\n wordCalculator(firstDigits) + billions[1] + and + wordCalculator(n % 1000000000)\n );\n }\n\n return 'oh my zsh';\n};\n\nconst cardinalConverter = (number: number): string => {\n if (Number.isNaN(number)) {\n throw new Error('not a number');\n }\n if (number === Infinity) {\n return 'infinito';\n }\n\n if (number > 999999999999) {\n throw new Error('greater than 999999999999');\n }\n\n let prepend = '';\n if (number < 0) {\n prepend = 'meno ';\n }\n const n = Math.abs(number);\n\n let result = prepend + wordCalculator(n);\n if (result.endsWith('tre') && result !== 'tre') {\n result = result.replace(/.$/, 'é');\n }\n\n result = result.replaceAll(/(?<=\\w+)tre\\s/g, 'tré ');\n return result;\n};\n\nexport default cardinalConverter;\n","import { zeroTenOrdinals } from '../constants/constants';\nimport cardinalConverter from './cardinalConverter';\n\ntype Options = {\n female?: boolean;\n plural?: boolean;\n}\n\nconst converter = (n: number): string => {\n if (n < 11) {\n return zeroTenOrdinals[n];\n }\n\n let word = cardinalConverter(n);\n\n word = word.replaceAll(' e ', ' ');\n word = word.replace(/([io])\\s([ou])/g, (_match, p1, p2) => {\n if (p2 === 'o') {\n return p1;\n }\n if (p2 === 'u') {\n return p2;\n }\n return '';\n });\n word = word.replaceAll(/un\\s/g, '');\n word = word.replaceAll(/ouno$/g, 'uno');\n word = word.replaceAll(/ootto$/g, 'otto');\n word = word.replaceAll(' ', '');\n\n const lastDigit = n % 10;\n\n if (n % 100 !== 13 && lastDigit === 3) {\n return `${word.replace(/.$/, 'e')}esimo`;\n }\n if (n % 100 !== 16 && lastDigit === 6) {\n return `${word}esimo`;\n }\n if (n % 100 === 10) {\n return word.replace(/dieci$/g, 'decimo');\n }\n if (word.endsWith('mila')) {\n return word.replace(/mila/, 'millesimo');\n }\n\n return `${word.replace(/.$/, '')}esimo`;\n};\n\nconst ordinalConverter = (\n number: number,\n options: Options = { female: false, plural: false },\n): string => {\n if (number < 0) {\n throw new Error('negative number not allowed');\n }\n\n const result = converter(number);\n\n const { female, plural } = options;\n\n if (female && plural) {\n return result.replace(/.$/, 'e');\n }\n\n if (female) {\n return result.replace(/.$/, 'a');\n }\n\n if (plural) {\n return result.replace(/.$/, 'i');\n }\n\n return result;\n};\n\nexport default ordinalConverter;\n","import {\n romanHundreds,\n romanTens,\n romanThousands,\n romanUnits,\n} from '../constants/constants';\n\nconst romanConverter = (number: number): string => {\n if (Number.isNaN(number)) {\n throw new Error('not a number');\n }\n if (number === Infinity) {\n return 'infinitum';\n }\n\n if (number > 3999) {\n throw new Error('greater than 3999');\n }\n\n if (number < 1) {\n throw new Error('lower than 1');\n }\n\n const unit = number % 10;\n const ten = Math.floor(number / 10) % 10;\n const hundred = Math.floor(number / 100) % 10;\n const thousand = Math.floor(number / 1000) % 10;\n\n const result = `${romanThousands[thousand]}${romanHundreds[hundred]}${romanTens[ten]}${romanUnits[unit]}`;\n return result;\n};\n\nexport default romanConverter;\n","import { romanNumerals } from '../constants/constants';\nimport romanConverter from './romanConverter';\n\nexport const arabicConverter = (romanNumber: string): number => {\n if (romanNumber === 'infinitum') {\n return Infinity;\n }\n\n const romanLetters = Object.keys(romanNumerals);\n if (Array.from(romanNumber).some((letter) => !romanLetters.includes(letter))) {\n throw new Error('invalid roman number');\n }\n\n let number = 0;\n\n for (let i = 0; i < romanNumber.length; i++) {\n let arabicNumber = romanNumerals[romanNumber.charAt(i)];\n\n if (i + 1 < romanNumber.length) {\n const nextArabicNumber = romanNumerals[romanNumber.charAt(i + 1)];\n if (arabicNumber < nextArabicNumber) {\n arabicNumber *= -1;\n }\n }\n\n number += arabicNumber;\n }\n\n let isValid: boolean;\n try {\n isValid = romanNumber === romanConverter(number);\n } catch {\n throw new Error('invalid roman number');\n }\n\n if (!isValid) {\n throw new Error('invalid roman number');\n }\n\n return number;\n};\n\nexport default arabicConverter;\n","import { unitsDict, tensDict, zeroTenOrdinals } from '../constants/constants';\n\nconst tensConverter = (word: string): number => {\n if (unitsDict[word]) {\n return unitsDict[word];\n }\n\n const ten = Object.keys(tensDict).find((w) => word.startsWith(w.slice(0, -1)));\n if (!ten) {\n return NaN;\n }\n\n const result = tensDict[ten];\n if (word === ten) {\n return result;\n }\n\n let [, unit] = word.split(ten);\n if (!unit) {\n [, unit] = word.split(ten.slice(0, -1));\n }\n if (!unitsDict[unit]) {\n return NaN;\n }\n return result + unitsDict[unit];\n};\n\nconst hundredsConverter = (word: string): number => {\n const [hundred, ten] = word.split('cento');\n if (ten === undefined) {\n return tensConverter(hundred);\n }\n let result = -1;\n if (hundred === '') {\n result = 100;\n } else {\n if (!unitsDict[hundred]) {\n return NaN;\n }\n result = unitsDict[hundred] * 100;\n }\n if (ten !== '') {\n if (ten.startsWith('tt')) {\n result += tensConverter(`o${ten}`);\n } else {\n result += tensConverter(ten);\n }\n }\n\n return result;\n};\n\nconst numberCalculator = (word: string): number => {\n // billions\n let index = word.indexOf('miliard');\n if (index > -1) {\n const sub = word.slice(index + 8);\n let rest = 0;\n if (sub) {\n rest = numberCalculator(sub);\n }\n return hundredsConverter(word.slice(0, index)) * 1000000000 + rest;\n }\n\n // millions\n index = word.indexOf('milion');\n if (index > -1) {\n const sub = word.slice(index + 7);\n let rest = 0;\n if (sub) {\n rest = numberCalculator(sub);\n }\n return hundredsConverter(word.slice(0, index)) * 1000000 + rest;\n }\n\n // thousands\n index = word.indexOf('mila');\n if (index > -1) {\n const sub = word.slice(index + 4);\n let rest = 0;\n if (sub) {\n rest = numberCalculator(sub);\n }\n return hundredsConverter(word.slice(0, index)) * 1000 + rest;\n }\n\n index = word.indexOf('mille');\n if (index > -1) {\n const sub = word.slice(index + 5);\n if (!sub) {\n return 1000;\n }\n return 1000 + hundredsConverter(sub);\n }\n\n return hundredsConverter(word);\n};\n\nconst getNumberFromOrdinal = (ordinal: string): string => {\n let cardinal = ordinal;\n cardinal = cardinal.replace(/decim\\w$/, 'dieci');\n cardinal = cardinal.replace(/centesim\\w$/, 'cento');\n cardinal = cardinal.replace(/^millesim\\w$/, 'mille');\n cardinal = cardinal.replace(/millesim\\w$/, 'mila');\n cardinal = cardinal.replace(/^milionesim\\w$/, 'unmilione');\n cardinal = cardinal.replace(/milionesim\\w$/, 'milioni');\n cardinal = cardinal.replace(/^miliardesim\\w$/, 'unmiliardo');\n cardinal = cardinal.replace(/miliardesim\\w$/, 'miliardi');\n cardinal = cardinal.replace(/ntesim\\w$/, 'nti');\n cardinal = cardinal.replace(/unesim\\w$/, 'uno');\n cardinal = cardinal.replace(/quattresim\\w$/, 'quattro');\n cardinal = cardinal.replace(/ottesim\\w$/, 'otto');\n cardinal = cardinal.replace(/duesim\\w$/, 'due');\n cardinal = cardinal.replace(/cinquesim\\w$/, 'cinque');\n cardinal = cardinal.replace(/settesim\\w$/, 'sette');\n cardinal = cardinal.replace(/novesim\\w$/, 'nove');\n cardinal = cardinal.replace(/undicesim\\w$/, 'undici');\n cardinal = cardinal.replace(/dodicesim\\w$/, 'dodici');\n cardinal = cardinal.replace(/tredicesim\\w$/, 'tredici');\n cardinal = cardinal.replace(/quattordicesim\\w$/, 'quattordici');\n cardinal = cardinal.replace(/quindicesim\\w$/, 'quindici');\n cardinal = cardinal.replace(/sedicesim\\w$/, 'sedici');\n cardinal = cardinal.replace(/esim\\w$/, '');\n cardinal = cardinal.replace(/^milione/, 'unmilione');\n cardinal = cardinal.replace(/^miliard/, 'unmiliardo');\n cardinal = cardinal.replace(/centuno/, 'centouno');\n cardinal = cardinal.replace(/centotto/, 'centootto');\n cardinal = cardinal.replace(/miliarduno/, 'miliardouno');\n cardinal = cardinal.replace(/miliardotto/, 'miliardootto');\n return cardinal;\n};\n\nconst italianConverter = (word: string): number => {\n let escapedWord = word.toLowerCase();\n escapedWord = escapedWord.replaceAll(' e ', '');\n escapedWord = escapedWord.replaceAll(' ', '');\n\n let multiplier = 1;\n if (escapedWord.startsWith('meno')) {\n multiplier = -1;\n escapedWord = escapedWord.replace('meno', '');\n }\n\n if (word === 'infinito') {\n return Infinity;\n }\n\n if (word === 'zero') {\n return 0;\n }\n\n if (escapedWord.match(/\\w*(a|o|e|i)$/)) {\n const index = zeroTenOrdinals.findIndex((ord) => escapedWord.startsWith(ord.slice(0, -1)));\n if (index !== -1) {\n return index;\n }\n if (escapedWord.match(/infinitesim(a|o|e|i)$/)) {\n return Infinity;\n }\n if (escapedWord.match(/\\w*(esim|decim)(a|o|e|i)$/)) {\n escapedWord = getNumberFromOrdinal(escapedWord);\n }\n }\n\n return numberCalculator(escapedWord) * multiplier;\n};\n\nexport default italianConverter;\n"],"mappings":"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","names":["hundred","tensConverter","hundredsConverter","hundred"]}
package/dist/index.mjs CHANGED
@@ -430,6 +430,39 @@ var numberCalculator = (word) => {
430
430
  }
431
431
  return hundredsConverter2(word);
432
432
  };
433
+ var getNumberFromOrdinal = (ordinal) => {
434
+ let cardinal = ordinal;
435
+ cardinal = cardinal.replace(/decim\w$/, "dieci");
436
+ cardinal = cardinal.replace(/centesim\w$/, "cento");
437
+ cardinal = cardinal.replace(/^millesim\w$/, "mille");
438
+ cardinal = cardinal.replace(/millesim\w$/, "mila");
439
+ cardinal = cardinal.replace(/^milionesim\w$/, "unmilione");
440
+ cardinal = cardinal.replace(/milionesim\w$/, "milioni");
441
+ cardinal = cardinal.replace(/^miliardesim\w$/, "unmiliardo");
442
+ cardinal = cardinal.replace(/miliardesim\w$/, "miliardi");
443
+ cardinal = cardinal.replace(/ntesim\w$/, "nti");
444
+ cardinal = cardinal.replace(/unesim\w$/, "uno");
445
+ cardinal = cardinal.replace(/quattresim\w$/, "quattro");
446
+ cardinal = cardinal.replace(/ottesim\w$/, "otto");
447
+ cardinal = cardinal.replace(/duesim\w$/, "due");
448
+ cardinal = cardinal.replace(/cinquesim\w$/, "cinque");
449
+ cardinal = cardinal.replace(/settesim\w$/, "sette");
450
+ cardinal = cardinal.replace(/novesim\w$/, "nove");
451
+ cardinal = cardinal.replace(/undicesim\w$/, "undici");
452
+ cardinal = cardinal.replace(/dodicesim\w$/, "dodici");
453
+ cardinal = cardinal.replace(/tredicesim\w$/, "tredici");
454
+ cardinal = cardinal.replace(/quattordicesim\w$/, "quattordici");
455
+ cardinal = cardinal.replace(/quindicesim\w$/, "quindici");
456
+ cardinal = cardinal.replace(/sedicesim\w$/, "sedici");
457
+ cardinal = cardinal.replace(/esim\w$/, "");
458
+ cardinal = cardinal.replace(/^milione/, "unmilione");
459
+ cardinal = cardinal.replace(/^miliard/, "unmiliardo");
460
+ cardinal = cardinal.replace(/centuno/, "centouno");
461
+ cardinal = cardinal.replace(/centotto/, "centootto");
462
+ cardinal = cardinal.replace(/miliarduno/, "miliardouno");
463
+ cardinal = cardinal.replace(/miliardotto/, "miliardootto");
464
+ return cardinal;
465
+ };
433
466
  var italianConverter = (word) => {
434
467
  let escapedWord = word.toLowerCase();
435
468
  escapedWord = escapedWord.replaceAll(" e ", "");
@@ -445,6 +478,18 @@ var italianConverter = (word) => {
445
478
  if (word === "zero") {
446
479
  return 0;
447
480
  }
481
+ if (escapedWord.match(/\w*(a|o|e|i)$/)) {
482
+ const index = zeroTenOrdinals.findIndex((ord) => escapedWord.startsWith(ord.slice(0, -1)));
483
+ if (index !== -1) {
484
+ return index;
485
+ }
486
+ if (escapedWord.match(/infinitesim(a|o|e|i)$/)) {
487
+ return Infinity;
488
+ }
489
+ if (escapedWord.match(/\w*(esim|decim)(a|o|e|i)$/)) {
490
+ escapedWord = getNumberFromOrdinal(escapedWord);
491
+ }
492
+ }
448
493
  return numberCalculator(escapedWord) * multiplier;
449
494
  };
450
495
  var italianConverter_default = italianConverter;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/constants/constants.ts","../src/functions/cardinalConverter.ts","../src/functions/ordinalConverter.ts","../src/functions/romanConverter.ts","../src/functions/arabicConverter.ts","../src/functions/italianConverter.ts"],"sourcesContent":["export const zeroNineteen = [\n 'zero',\n 'uno',\n 'due',\n 'tre',\n 'quattro',\n 'cinque',\n 'sei',\n 'sette',\n 'otto',\n 'nove',\n 'dieci',\n 'undici',\n 'dodici',\n 'tredici',\n 'quattordici',\n 'quindici',\n 'sedici',\n 'diciassette',\n 'diciotto',\n 'diciannove',\n];\n\nexport const zeroTenOrdinals = [\n 'zeresimo',\n 'primo',\n 'secondo',\n 'terzo',\n 'quarto',\n 'quinto',\n 'sesto',\n 'settimo',\n 'ottavo',\n 'nono',\n 'decimo',\n];\n\nexport const tens = [\n 'venti',\n 'trenta',\n 'quaranta',\n 'cinquanta',\n 'sessanta',\n 'settanta',\n 'ottanta',\n 'novanta',\n];\n\nexport const hundred = 'cento';\nexport const thousands = ['mille', 'mila'];\nexport const millions = ['un milione', ' milioni'];\nexport const billions = ['un miliardo', ' miliardi'];\n\nexport const and = ' e ';\n\nexport const romanNumerals: { [key: string]: number } = {\n I: 1,\n V: 5,\n X: 10,\n L: 50,\n C: 100,\n D: 500,\n M: 1000,\n};\n\nexport const romanUnits = [\n '',\n 'I',\n 'II',\n 'III',\n 'IV',\n 'V',\n 'VI',\n 'VII',\n 'VIII',\n 'IX',\n];\n\nexport const romanTens = [\n '',\n 'X',\n 'XX',\n 'XXX',\n 'XL',\n 'L',\n 'LX',\n 'LXX',\n 'LXXX',\n 'XC',\n];\n\nexport const romanHundreds = [\n '',\n 'C',\n 'CC',\n 'CCC',\n 'CD',\n 'D',\n 'DC',\n 'DCC',\n 'DCCC',\n 'CM',\n];\n\nexport const romanThousands = [\n '',\n 'M',\n 'MM',\n 'MMM',\n];\n\nexport const unitsDict : { [unit: string] : number } = {\n un: 1,\n uno: 1,\n due: 2,\n tre: 3,\n tré: 3,\n quattro: 4,\n cinque: 5,\n sei: 6,\n sette: 7,\n otto: 8,\n nove: 9,\n dieci: 10,\n undici: 11,\n dodici: 12,\n tredici: 13,\n quattordici: 14,\n quindici: 15,\n sedici: 16,\n diciassette: 17,\n diciotto: 18,\n diciannove: 19,\n};\n\nexport const tensDict : { [ten: string] : number } = {\n venti: 20,\n trenta: 30,\n quaranta: 40,\n cinquanta: 50,\n sessanta: 60,\n settanta: 70,\n ottanta: 80,\n novanta: 90,\n};\n","import {\n zeroNineteen,\n tens,\n hundred,\n thousands,\n millions,\n billions,\n and,\n} from '../constants/constants';\n\nconst tensConverter = (n: number): string => {\n if (n < 20) {\n return zeroNineteen[n];\n }\n\n const firstDigit = Math.floor(n / 10) - 2;\n const secondDigit = n % 10;\n const word = tens[firstDigit];\n\n if (secondDigit === 0) {\n return word;\n }\n\n if (secondDigit === 1 || secondDigit === 8) {\n return word.slice(0, word.length - 1) + zeroNineteen[secondDigit];\n }\n\n return word + zeroNineteen[secondDigit];\n};\n\nconst hundredsConverter = (n: number): string => {\n const firstDigit = Math.floor(n / 100);\n if (firstDigit === 1) {\n return hundred;\n }\n\n return zeroNineteen[firstDigit] + hundred;\n};\n\nconst wordCalculator = (n: number): string => {\n const digitsNumber = Math.log(n) * Math.LOG10E + 1 | 0;\n\n if (digitsNumber < 3) {\n return tensConverter(n);\n }\n if (digitsNumber < 4) {\n if (n % 100 === 0) {\n return hundredsConverter(n);\n }\n\n if (n % 100 > 79 && n % 100 < 90) {\n const word = hundredsConverter(n);\n return word.slice(0, word.length - 1) + wordCalculator(n % 100);\n }\n\n return hundredsConverter(n) + wordCalculator(n % 100);\n }\n // thousands\n if (digitsNumber < 7) {\n const firstDigits = Math.floor(n / 1000);\n if (firstDigits === 1) {\n if (n % 1000 === 0) {\n return thousands[0];\n }\n return thousands[0] + wordCalculator(n % 1000);\n }\n if (n % 1000 === 0) {\n return wordCalculator(firstDigits) + thousands[1];\n }\n return (\n wordCalculator(firstDigits) + thousands[1] + wordCalculator(n % 1000)\n );\n }\n // millions\n if (digitsNumber < 10) {\n const firstDigits = Math.floor(n / 1000000);\n if (firstDigits === 1) {\n if (n % 1000000 === 0) {\n return millions[0];\n }\n return millions[0] + and + wordCalculator(n % 1000000);\n }\n if (n % 1000000 === 0) {\n return wordCalculator(firstDigits) + millions[1];\n }\n return (\n wordCalculator(firstDigits) + millions[1] + and + wordCalculator(n % 1000000)\n );\n }\n // billions\n if (digitsNumber < 13) {\n const firstDigits = Math.floor(n / 1000000000);\n if (firstDigits === 1) {\n if (n % 1000000000 === 0) {\n return billions[0];\n }\n return billions[0] + and + wordCalculator(n % 1000000000);\n }\n if (n % 1000000000 === 0) {\n return wordCalculator(firstDigits) + billions[1];\n }\n return (\n wordCalculator(firstDigits) + billions[1] + and + wordCalculator(n % 1000000000)\n );\n }\n\n return 'oh my zsh';\n};\n\nconst cardinalConverter = (number: number): string => {\n if (Number.isNaN(number)) {\n throw new Error('not a number');\n }\n if (number === Infinity) {\n return 'infinito';\n }\n\n if (number > 999999999999) {\n throw new Error('greater than 999999999999');\n }\n\n let prepend = '';\n if (number < 0) {\n prepend = 'meno ';\n }\n const n = Math.abs(number);\n\n let result = prepend + wordCalculator(n);\n if (result.endsWith('tre') && result !== 'tre') {\n result = result.replace(/.$/, 'é');\n }\n\n result = result.replaceAll(/(?<=\\w+)tre\\s/g, 'tré ');\n return result;\n};\n\nexport default cardinalConverter;\n","import { zeroTenOrdinals } from '../constants/constants';\nimport cardinalConverter from './cardinalConverter';\n\ntype Options = {\n female?: boolean;\n plural?: boolean;\n}\n\nconst converter = (n: number): string => {\n if (n < 11) {\n return zeroTenOrdinals[n];\n }\n\n let word = cardinalConverter(n);\n\n word = word.replaceAll(' e ', ' ');\n word = word.replace(/([io])\\s([ou])/g, (_match, p1, p2) => {\n if (p2 === 'o') {\n return p1;\n }\n if (p2 === 'u') {\n return p2;\n }\n return '';\n });\n word = word.replaceAll(/un\\s/g, '');\n word = word.replaceAll(/ouno$/g, 'uno');\n word = word.replaceAll(/ootto$/g, 'otto');\n word = word.replaceAll(' ', '');\n\n const lastDigit = n % 10;\n\n if (n % 100 !== 13 && lastDigit === 3) {\n return `${word.replace(/.$/, 'e')}esimo`;\n }\n if (n % 100 !== 16 && lastDigit === 6) {\n return `${word}esimo`;\n }\n if (n % 100 === 10) {\n return word.replace(/dieci$/g, 'decimo');\n }\n if (word.endsWith('mila')) {\n return word.replace(/mila/, 'millesimo');\n }\n\n return `${word.replace(/.$/, '')}esimo`;\n};\n\nconst ordinalConverter = (\n number: number,\n options: Options = { female: false, plural: false },\n): string => {\n if (number < 0) {\n throw new Error('negative number not allowed');\n }\n\n const result = converter(number);\n\n const { female, plural } = options;\n\n if (female && plural) {\n return result.replace(/.$/, 'e');\n }\n\n if (female) {\n return result.replace(/.$/, 'a');\n }\n\n if (plural) {\n return result.replace(/.$/, 'i');\n }\n\n return result;\n};\n\nexport default ordinalConverter;\n","import {\n romanHundreds,\n romanTens,\n romanThousands,\n romanUnits,\n} from '../constants/constants';\n\nconst romanConverter = (number: number): string => {\n if (Number.isNaN(number)) {\n throw new Error('not a number');\n }\n if (number === Infinity) {\n return 'infinitum';\n }\n\n if (number > 3999) {\n throw new Error('greater than 3999');\n }\n\n if (number < 1) {\n throw new Error('lower than 1');\n }\n\n const unit = number % 10;\n const ten = Math.floor(number / 10) % 10;\n const hundred = Math.floor(number / 100) % 10;\n const thousand = Math.floor(number / 1000) % 10;\n\n const result = `${romanThousands[thousand]}${romanHundreds[hundred]}${romanTens[ten]}${romanUnits[unit]}`;\n return result;\n};\n\nexport default romanConverter;\n","import { romanNumerals } from '../constants/constants';\nimport romanConverter from './romanConverter';\n\nexport const arabicConverter = (romanNumber: string): number => {\n if (romanNumber === 'infinitum') {\n return Infinity;\n }\n\n const romanLetters = Object.keys(romanNumerals);\n if (Array.from(romanNumber).some((letter) => !romanLetters.includes(letter))) {\n throw new Error('invalid roman number');\n }\n\n let number = 0;\n\n for (let i = 0; i < romanNumber.length; i++) {\n let arabicNumber = romanNumerals[romanNumber.charAt(i)];\n\n if (i + 1 < romanNumber.length) {\n const nextArabicNumber = romanNumerals[romanNumber.charAt(i + 1)];\n if (arabicNumber < nextArabicNumber) {\n arabicNumber *= -1;\n }\n }\n\n number += arabicNumber;\n }\n\n let isValid: boolean;\n try {\n isValid = romanNumber === romanConverter(number);\n } catch {\n throw new Error('invalid roman number');\n }\n\n if (!isValid) {\n throw new Error('invalid roman number');\n }\n\n return number;\n};\n\nexport default arabicConverter;\n","import { unitsDict, tensDict } from '../constants/constants';\n\nconst tensConverter = (word: string): number => {\n if (unitsDict[word]) {\n return unitsDict[word];\n }\n\n const ten = Object.keys(tensDict).find((w) => word.startsWith(w.slice(0, -1)));\n if (!ten) {\n return NaN;\n }\n\n const result = tensDict[ten];\n if (word === ten) {\n return result;\n }\n\n let [, unit] = word.split(ten);\n if (!unit) {\n [, unit] = word.split(ten.slice(0, -1));\n }\n if (!unitsDict[unit]) {\n return NaN;\n }\n return result + unitsDict[unit];\n};\n\nconst hundredsConverter = (word: string): number => {\n const [hundred, ten] = word.split('cento');\n if (ten === undefined) {\n return tensConverter(hundred);\n }\n let result = -1;\n if (hundred === '') {\n result = 100;\n } else {\n if (!unitsDict[hundred]) {\n return NaN;\n }\n result = unitsDict[hundred] * 100;\n }\n if (ten !== '') {\n if (ten.startsWith('tt')) {\n result += tensConverter(`o${ten}`);\n } else {\n result += tensConverter(ten);\n }\n }\n\n return result;\n};\n\nconst numberCalculator = (word: string): number => {\n // billions\n let index = word.indexOf('miliard');\n if (index > -1) {\n const sub = word.slice(index + 8);\n let rest = 0;\n if (sub) {\n rest = numberCalculator(sub);\n }\n return hundredsConverter(word.slice(0, index)) * 1000000000 + rest;\n }\n\n // millions\n index = word.indexOf('milion');\n if (index > -1) {\n const sub = word.slice(index + 7);\n let rest = 0;\n if (sub) {\n rest = numberCalculator(sub);\n }\n return hundredsConverter(word.slice(0, index)) * 1000000 + rest;\n }\n\n // thousands\n index = word.indexOf('mila');\n if (index > -1) {\n const sub = word.slice(index + 4);\n let rest = 0;\n if (sub) {\n rest = numberCalculator(sub);\n }\n return hundredsConverter(word.slice(0, index)) * 1000 + rest;\n }\n\n index = word.indexOf('mille');\n if (index > -1) {\n const sub = word.slice(index + 5);\n if (!sub) {\n return 1000;\n }\n return 1000 + hundredsConverter(sub);\n }\n\n return hundredsConverter(word);\n};\n\nconst italianConverter = (word: string): number => {\n let escapedWord = word.toLowerCase();\n escapedWord = escapedWord.replaceAll(' e ', '');\n escapedWord = escapedWord.replaceAll(' ', '');\n\n let multiplier = 1;\n if (escapedWord.startsWith('meno')) {\n multiplier = -1;\n escapedWord = escapedWord.replace('meno', '');\n }\n\n if (word === 'infinito') {\n return Infinity;\n }\n\n if (word === 'zero') {\n return 0;\n }\n\n return numberCalculator(escapedWord) * multiplier;\n};\n\nexport default italianConverter;\n"],"mappings":"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","names":["hundred","tensConverter","hundredsConverter","hundred"]}
1
+ {"version":3,"sources":["../src/constants/constants.ts","../src/functions/cardinalConverter.ts","../src/functions/ordinalConverter.ts","../src/functions/romanConverter.ts","../src/functions/arabicConverter.ts","../src/functions/italianConverter.ts"],"sourcesContent":["export const zeroNineteen = [\n 'zero',\n 'uno',\n 'due',\n 'tre',\n 'quattro',\n 'cinque',\n 'sei',\n 'sette',\n 'otto',\n 'nove',\n 'dieci',\n 'undici',\n 'dodici',\n 'tredici',\n 'quattordici',\n 'quindici',\n 'sedici',\n 'diciassette',\n 'diciotto',\n 'diciannove',\n];\n\nexport const zeroTenOrdinals = [\n 'zeresimo',\n 'primo',\n 'secondo',\n 'terzo',\n 'quarto',\n 'quinto',\n 'sesto',\n 'settimo',\n 'ottavo',\n 'nono',\n 'decimo',\n];\n\nexport const tens = [\n 'venti',\n 'trenta',\n 'quaranta',\n 'cinquanta',\n 'sessanta',\n 'settanta',\n 'ottanta',\n 'novanta',\n];\n\nexport const hundred = 'cento';\nexport const thousands = ['mille', 'mila'];\nexport const millions = ['un milione', ' milioni'];\nexport const billions = ['un miliardo', ' miliardi'];\n\nexport const and = ' e ';\n\nexport const romanNumerals: { [key: string]: number } = {\n I: 1,\n V: 5,\n X: 10,\n L: 50,\n C: 100,\n D: 500,\n M: 1000,\n};\n\nexport const romanUnits = [\n '',\n 'I',\n 'II',\n 'III',\n 'IV',\n 'V',\n 'VI',\n 'VII',\n 'VIII',\n 'IX',\n];\n\nexport const romanTens = [\n '',\n 'X',\n 'XX',\n 'XXX',\n 'XL',\n 'L',\n 'LX',\n 'LXX',\n 'LXXX',\n 'XC',\n];\n\nexport const romanHundreds = [\n '',\n 'C',\n 'CC',\n 'CCC',\n 'CD',\n 'D',\n 'DC',\n 'DCC',\n 'DCCC',\n 'CM',\n];\n\nexport const romanThousands = [\n '',\n 'M',\n 'MM',\n 'MMM',\n];\n\nexport const unitsDict : { [unit: string] : number } = {\n un: 1,\n uno: 1,\n due: 2,\n tre: 3,\n tré: 3,\n quattro: 4,\n cinque: 5,\n sei: 6,\n sette: 7,\n otto: 8,\n nove: 9,\n dieci: 10,\n undici: 11,\n dodici: 12,\n tredici: 13,\n quattordici: 14,\n quindici: 15,\n sedici: 16,\n diciassette: 17,\n diciotto: 18,\n diciannove: 19,\n};\n\nexport const tensDict : { [ten: string] : number } = {\n venti: 20,\n trenta: 30,\n quaranta: 40,\n cinquanta: 50,\n sessanta: 60,\n settanta: 70,\n ottanta: 80,\n novanta: 90,\n};\n","import {\n zeroNineteen,\n tens,\n hundred,\n thousands,\n millions,\n billions,\n and,\n} from '../constants/constants';\n\nconst tensConverter = (n: number): string => {\n if (n < 20) {\n return zeroNineteen[n];\n }\n\n const firstDigit = Math.floor(n / 10) - 2;\n const secondDigit = n % 10;\n const word = tens[firstDigit];\n\n if (secondDigit === 0) {\n return word;\n }\n\n if (secondDigit === 1 || secondDigit === 8) {\n return word.slice(0, word.length - 1) + zeroNineteen[secondDigit];\n }\n\n return word + zeroNineteen[secondDigit];\n};\n\nconst hundredsConverter = (n: number): string => {\n const firstDigit = Math.floor(n / 100);\n if (firstDigit === 1) {\n return hundred;\n }\n\n return zeroNineteen[firstDigit] + hundred;\n};\n\nconst wordCalculator = (n: number): string => {\n const digitsNumber = Math.log(n) * Math.LOG10E + 1 | 0;\n\n if (digitsNumber < 3) {\n return tensConverter(n);\n }\n if (digitsNumber < 4) {\n if (n % 100 === 0) {\n return hundredsConverter(n);\n }\n\n if (n % 100 > 79 && n % 100 < 90) {\n const word = hundredsConverter(n);\n return word.slice(0, word.length - 1) + wordCalculator(n % 100);\n }\n\n return hundredsConverter(n) + wordCalculator(n % 100);\n }\n // thousands\n if (digitsNumber < 7) {\n const firstDigits = Math.floor(n / 1000);\n if (firstDigits === 1) {\n if (n % 1000 === 0) {\n return thousands[0];\n }\n return thousands[0] + wordCalculator(n % 1000);\n }\n if (n % 1000 === 0) {\n return wordCalculator(firstDigits) + thousands[1];\n }\n return (\n wordCalculator(firstDigits) + thousands[1] + wordCalculator(n % 1000)\n );\n }\n // millions\n if (digitsNumber < 10) {\n const firstDigits = Math.floor(n / 1000000);\n if (firstDigits === 1) {\n if (n % 1000000 === 0) {\n return millions[0];\n }\n return millions[0] + and + wordCalculator(n % 1000000);\n }\n if (n % 1000000 === 0) {\n return wordCalculator(firstDigits) + millions[1];\n }\n return (\n wordCalculator(firstDigits) + millions[1] + and + wordCalculator(n % 1000000)\n );\n }\n // billions\n if (digitsNumber < 13) {\n const firstDigits = Math.floor(n / 1000000000);\n if (firstDigits === 1) {\n if (n % 1000000000 === 0) {\n return billions[0];\n }\n return billions[0] + and + wordCalculator(n % 1000000000);\n }\n if (n % 1000000000 === 0) {\n return wordCalculator(firstDigits) + billions[1];\n }\n return (\n wordCalculator(firstDigits) + billions[1] + and + wordCalculator(n % 1000000000)\n );\n }\n\n return 'oh my zsh';\n};\n\nconst cardinalConverter = (number: number): string => {\n if (Number.isNaN(number)) {\n throw new Error('not a number');\n }\n if (number === Infinity) {\n return 'infinito';\n }\n\n if (number > 999999999999) {\n throw new Error('greater than 999999999999');\n }\n\n let prepend = '';\n if (number < 0) {\n prepend = 'meno ';\n }\n const n = Math.abs(number);\n\n let result = prepend + wordCalculator(n);\n if (result.endsWith('tre') && result !== 'tre') {\n result = result.replace(/.$/, 'é');\n }\n\n result = result.replaceAll(/(?<=\\w+)tre\\s/g, 'tré ');\n return result;\n};\n\nexport default cardinalConverter;\n","import { zeroTenOrdinals } from '../constants/constants';\nimport cardinalConverter from './cardinalConverter';\n\ntype Options = {\n female?: boolean;\n plural?: boolean;\n}\n\nconst converter = (n: number): string => {\n if (n < 11) {\n return zeroTenOrdinals[n];\n }\n\n let word = cardinalConverter(n);\n\n word = word.replaceAll(' e ', ' ');\n word = word.replace(/([io])\\s([ou])/g, (_match, p1, p2) => {\n if (p2 === 'o') {\n return p1;\n }\n if (p2 === 'u') {\n return p2;\n }\n return '';\n });\n word = word.replaceAll(/un\\s/g, '');\n word = word.replaceAll(/ouno$/g, 'uno');\n word = word.replaceAll(/ootto$/g, 'otto');\n word = word.replaceAll(' ', '');\n\n const lastDigit = n % 10;\n\n if (n % 100 !== 13 && lastDigit === 3) {\n return `${word.replace(/.$/, 'e')}esimo`;\n }\n if (n % 100 !== 16 && lastDigit === 6) {\n return `${word}esimo`;\n }\n if (n % 100 === 10) {\n return word.replace(/dieci$/g, 'decimo');\n }\n if (word.endsWith('mila')) {\n return word.replace(/mila/, 'millesimo');\n }\n\n return `${word.replace(/.$/, '')}esimo`;\n};\n\nconst ordinalConverter = (\n number: number,\n options: Options = { female: false, plural: false },\n): string => {\n if (number < 0) {\n throw new Error('negative number not allowed');\n }\n\n const result = converter(number);\n\n const { female, plural } = options;\n\n if (female && plural) {\n return result.replace(/.$/, 'e');\n }\n\n if (female) {\n return result.replace(/.$/, 'a');\n }\n\n if (plural) {\n return result.replace(/.$/, 'i');\n }\n\n return result;\n};\n\nexport default ordinalConverter;\n","import {\n romanHundreds,\n romanTens,\n romanThousands,\n romanUnits,\n} from '../constants/constants';\n\nconst romanConverter = (number: number): string => {\n if (Number.isNaN(number)) {\n throw new Error('not a number');\n }\n if (number === Infinity) {\n return 'infinitum';\n }\n\n if (number > 3999) {\n throw new Error('greater than 3999');\n }\n\n if (number < 1) {\n throw new Error('lower than 1');\n }\n\n const unit = number % 10;\n const ten = Math.floor(number / 10) % 10;\n const hundred = Math.floor(number / 100) % 10;\n const thousand = Math.floor(number / 1000) % 10;\n\n const result = `${romanThousands[thousand]}${romanHundreds[hundred]}${romanTens[ten]}${romanUnits[unit]}`;\n return result;\n};\n\nexport default romanConverter;\n","import { romanNumerals } from '../constants/constants';\nimport romanConverter from './romanConverter';\n\nexport const arabicConverter = (romanNumber: string): number => {\n if (romanNumber === 'infinitum') {\n return Infinity;\n }\n\n const romanLetters = Object.keys(romanNumerals);\n if (Array.from(romanNumber).some((letter) => !romanLetters.includes(letter))) {\n throw new Error('invalid roman number');\n }\n\n let number = 0;\n\n for (let i = 0; i < romanNumber.length; i++) {\n let arabicNumber = romanNumerals[romanNumber.charAt(i)];\n\n if (i + 1 < romanNumber.length) {\n const nextArabicNumber = romanNumerals[romanNumber.charAt(i + 1)];\n if (arabicNumber < nextArabicNumber) {\n arabicNumber *= -1;\n }\n }\n\n number += arabicNumber;\n }\n\n let isValid: boolean;\n try {\n isValid = romanNumber === romanConverter(number);\n } catch {\n throw new Error('invalid roman number');\n }\n\n if (!isValid) {\n throw new Error('invalid roman number');\n }\n\n return number;\n};\n\nexport default arabicConverter;\n","import { unitsDict, tensDict, zeroTenOrdinals } from '../constants/constants';\n\nconst tensConverter = (word: string): number => {\n if (unitsDict[word]) {\n return unitsDict[word];\n }\n\n const ten = Object.keys(tensDict).find((w) => word.startsWith(w.slice(0, -1)));\n if (!ten) {\n return NaN;\n }\n\n const result = tensDict[ten];\n if (word === ten) {\n return result;\n }\n\n let [, unit] = word.split(ten);\n if (!unit) {\n [, unit] = word.split(ten.slice(0, -1));\n }\n if (!unitsDict[unit]) {\n return NaN;\n }\n return result + unitsDict[unit];\n};\n\nconst hundredsConverter = (word: string): number => {\n const [hundred, ten] = word.split('cento');\n if (ten === undefined) {\n return tensConverter(hundred);\n }\n let result = -1;\n if (hundred === '') {\n result = 100;\n } else {\n if (!unitsDict[hundred]) {\n return NaN;\n }\n result = unitsDict[hundred] * 100;\n }\n if (ten !== '') {\n if (ten.startsWith('tt')) {\n result += tensConverter(`o${ten}`);\n } else {\n result += tensConverter(ten);\n }\n }\n\n return result;\n};\n\nconst numberCalculator = (word: string): number => {\n // billions\n let index = word.indexOf('miliard');\n if (index > -1) {\n const sub = word.slice(index + 8);\n let rest = 0;\n if (sub) {\n rest = numberCalculator(sub);\n }\n return hundredsConverter(word.slice(0, index)) * 1000000000 + rest;\n }\n\n // millions\n index = word.indexOf('milion');\n if (index > -1) {\n const sub = word.slice(index + 7);\n let rest = 0;\n if (sub) {\n rest = numberCalculator(sub);\n }\n return hundredsConverter(word.slice(0, index)) * 1000000 + rest;\n }\n\n // thousands\n index = word.indexOf('mila');\n if (index > -1) {\n const sub = word.slice(index + 4);\n let rest = 0;\n if (sub) {\n rest = numberCalculator(sub);\n }\n return hundredsConverter(word.slice(0, index)) * 1000 + rest;\n }\n\n index = word.indexOf('mille');\n if (index > -1) {\n const sub = word.slice(index + 5);\n if (!sub) {\n return 1000;\n }\n return 1000 + hundredsConverter(sub);\n }\n\n return hundredsConverter(word);\n};\n\nconst getNumberFromOrdinal = (ordinal: string): string => {\n let cardinal = ordinal;\n cardinal = cardinal.replace(/decim\\w$/, 'dieci');\n cardinal = cardinal.replace(/centesim\\w$/, 'cento');\n cardinal = cardinal.replace(/^millesim\\w$/, 'mille');\n cardinal = cardinal.replace(/millesim\\w$/, 'mila');\n cardinal = cardinal.replace(/^milionesim\\w$/, 'unmilione');\n cardinal = cardinal.replace(/milionesim\\w$/, 'milioni');\n cardinal = cardinal.replace(/^miliardesim\\w$/, 'unmiliardo');\n cardinal = cardinal.replace(/miliardesim\\w$/, 'miliardi');\n cardinal = cardinal.replace(/ntesim\\w$/, 'nti');\n cardinal = cardinal.replace(/unesim\\w$/, 'uno');\n cardinal = cardinal.replace(/quattresim\\w$/, 'quattro');\n cardinal = cardinal.replace(/ottesim\\w$/, 'otto');\n cardinal = cardinal.replace(/duesim\\w$/, 'due');\n cardinal = cardinal.replace(/cinquesim\\w$/, 'cinque');\n cardinal = cardinal.replace(/settesim\\w$/, 'sette');\n cardinal = cardinal.replace(/novesim\\w$/, 'nove');\n cardinal = cardinal.replace(/undicesim\\w$/, 'undici');\n cardinal = cardinal.replace(/dodicesim\\w$/, 'dodici');\n cardinal = cardinal.replace(/tredicesim\\w$/, 'tredici');\n cardinal = cardinal.replace(/quattordicesim\\w$/, 'quattordici');\n cardinal = cardinal.replace(/quindicesim\\w$/, 'quindici');\n cardinal = cardinal.replace(/sedicesim\\w$/, 'sedici');\n cardinal = cardinal.replace(/esim\\w$/, '');\n cardinal = cardinal.replace(/^milione/, 'unmilione');\n cardinal = cardinal.replace(/^miliard/, 'unmiliardo');\n cardinal = cardinal.replace(/centuno/, 'centouno');\n cardinal = cardinal.replace(/centotto/, 'centootto');\n cardinal = cardinal.replace(/miliarduno/, 'miliardouno');\n cardinal = cardinal.replace(/miliardotto/, 'miliardootto');\n return cardinal;\n};\n\nconst italianConverter = (word: string): number => {\n let escapedWord = word.toLowerCase();\n escapedWord = escapedWord.replaceAll(' e ', '');\n escapedWord = escapedWord.replaceAll(' ', '');\n\n let multiplier = 1;\n if (escapedWord.startsWith('meno')) {\n multiplier = -1;\n escapedWord = escapedWord.replace('meno', '');\n }\n\n if (word === 'infinito') {\n return Infinity;\n }\n\n if (word === 'zero') {\n return 0;\n }\n\n if (escapedWord.match(/\\w*(a|o|e|i)$/)) {\n const index = zeroTenOrdinals.findIndex((ord) => escapedWord.startsWith(ord.slice(0, -1)));\n if (index !== -1) {\n return index;\n }\n if (escapedWord.match(/infinitesim(a|o|e|i)$/)) {\n return Infinity;\n }\n if (escapedWord.match(/\\w*(esim|decim)(a|o|e|i)$/)) {\n escapedWord = getNumberFromOrdinal(escapedWord);\n }\n }\n\n return numberCalculator(escapedWord) * multiplier;\n};\n\nexport default italianConverter;\n"],"mappings":"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","names":["hundred","tensConverter","hundredsConverter","hundred"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "italian-numbers",
3
- "version": "1.2.0",
3
+ "version": "1.3.0",
4
4
  "description": "Converts a number to an italian word representation",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",