diff --git a/.babelrc b/.babelrc new file mode 100644 index 0000000..644dde9 --- /dev/null +++ b/.babelrc @@ -0,0 +1,4 @@ +{ + "presets": ["@babel/preset-env"], + "plugins": ["@babel/plugin-proposal-class-properties"] +} diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 0000000..ab4ee61 --- /dev/null +++ b/.eslintignore @@ -0,0 +1,3 @@ +templates/**/* +dist/ +test/ diff --git a/.eslintrc b/.eslintrc new file mode 100644 index 0000000..c7f7762 --- /dev/null +++ b/.eslintrc @@ -0,0 +1,22 @@ +{ + "extends": [ + "airbnb-base" + ], + "parser": "babel-eslint", + "parserOptions": { + "ecmaVersion": 6, + "sourceType": "module", + "ecmaFeatures": { + "modules": true, + "experimentalObjectRestSpread": true + } + }, + "env": { + "browser": true + }, + "rules": { + "no-restricted-properties": "off", + "import/prefer-default-export": "off", + "no-underscore-dangle": "off" + } +} diff --git a/.gitignore b/.gitignore index 5a9069c..717633b 100644 --- a/.gitignore +++ b/.gitignore @@ -29,6 +29,7 @@ build/Release # https://www.npmjs.org/doc/misc/npm-faq.html#should-i-check-my-node_modules-folder-into-git node_modules +.idea lcov .tern-port .DS_Store diff --git a/.travis.yml b/.travis.yml index 87ef5d3..c55ea39 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,11 +3,6 @@ node_js: - 'node' - '8' - '6' - - '5' - - '4' - - '0.12' - - '0.11' - - '0.10' after_script: - npm i coveralls - ./node_modules/coveralls/bin/coveralls.js < lcov diff --git a/Gruntfile.js b/Gruntfile.js deleted file mode 100644 index 4c96ba5..0000000 --- a/Gruntfile.js +++ /dev/null @@ -1,38 +0,0 @@ -'use strict'; - -module.exports = function (grunt) { - grunt.initConfig({ - clean: { - dist: [ - 'dist' - ] - }, - browserify: { - dist: { - files: { - 'dist/written-number.js': 'lib/index.js' - } - }, - options: { - browserifyOptions: {'standalone': 'writtenNumber'} - } - }, - uglify: { - dist: { - files: { - 'dist/written-number.min.js': 'dist/written-number.js' - } - } - } - }); - - grunt.loadNpmTasks('grunt-contrib-clean'); - grunt.loadNpmTasks('grunt-contrib-uglify'); - grunt.loadNpmTasks('grunt-browserify'); - - grunt.registerTask('dist', [ - 'clean:dist', - 'browserify:dist', - 'uglify:dist' - ]); -}; diff --git a/README.md b/README.md index 66b62ff..4310e98 100644 --- a/README.md +++ b/README.md @@ -23,48 +23,43 @@ bower install written-number ## Usage ```javascript -var writtenNumber = require('written-number'); -writtenNumber(1234); // => 'one thousand two hundred and thirty-four' - -writtenNumber.defaults.lang = 'es'; -writtenNumber(4758); // => 'cuatro mil setecientos cincuenta y ocho' - -writtenNumber(1234, {lang: 'fr'}); // => 'mille deux cent trente-quatre' -writtenNumber(1234, {lang: 'es'}); // => 'mil doscientos treinta y cuatro' -writtenNumber(1234, {lang: 'az'}); // => 'min iki yüz otuz dörd' -writtenNumber(1234, {lang: 'pt'}); // => 'mil duzentos e trinta e quatro' -writtenNumber(1234, {lang: 'ar'}); // => 'ألف ومائتان وأربعة وثلاثون' -writtenNumber(1234, {lang: 'eo'}); // => 'mil ducent tridek kvar' -writtenNumber(1234, {lang: 'vi'}); // => 'một ngàn hai trăm và ba mươi bốn' -writtenNumber(1234, {lang: 'uk'}); // => 'одна тисяча двісті тридцять чотири' -writtenNumber(1234, {lang: 'id'}); // => 'seribu dua ratus tiga puluh empat' +import {WrittenNumber} from 'written-number'; +import { + EN, + Es + } from 'written-number/i18n'; + +const Converter = new WrittenNumber({language: EN}); +Converter.convert(1234); // => 'one thousand two hundred and thirty-four' + +Converter.setOptions({language: Es}); +Converter.convert(4758); // => 'cuatro mil setecientos cincuenta y ocho' ``` ## Options - `noAnd` - Defaults to `false`. Determines whether to use a separator. The separator is internationalized. -- `lang` - Could be `string` or `object`. Defaults to `'en'`. Determines which - language to use. An i18n configuration object may be passed to support - external language definitions. +- `language` - Could be `object`. No default values provided, you need +to pass one of languages from 'written-number/i18n' or define your own language file. Currently supported languages are: | Language | `lang` | |---------|--------| -| English | `en` | -| Portuguese (Brazil) | `pt` | -| Portuguese (Portugal) | `ptPT` | -| Spanish | `es` | -| French | `fr` | -| Esperanto | `eo` | -| Vietnamese | `vi` | -| Arabic | `ar` | -| Azerbaijan | `az` | -| Turkish | `tr` | -| English (Indian) | `enIndian` | -| Ukrainian | `uk` | -| Indonesian | `id` | -| Russian | `ru` | +| English | `En` | +| Portuguese (Brazil) | `Pt` | +| Portuguese (Portugal) | `PtPT` | +| Spanish | `Es` | +| French | `Fr` | +| Esperanto | `Eo` | +| Vietnamese | `Vi` | +| Arabic | `Ar` | +| Azerbaijan | `Az` | +| Turkish | `Tr` | +| English (Indian) | `EnIndian` | +| Ukrainian | `Uk` | +| Indonesian | `Id` | +| Russian | `Ru` | ## Contributing diff --git a/bower.json b/bower.json index ec275f2..ccaab71 100644 --- a/bower.json +++ b/bower.json @@ -3,7 +3,7 @@ "description": "Convert numbers to words - their written form", "homepage": "https://yamadapc.github.io/js-written-number", "main": "./dist/written-number.js", - "version": "0.11.0", + "version": "1.0.1-beta", "keywords": [ "numbers", "words", diff --git a/dist/i18n/ar.json b/dist/i18n/ar.json new file mode 100644 index 0000000..5495aa3 --- /dev/null +++ b/dist/i18n/ar.json @@ -0,0 +1,147 @@ +{ + "useLongScale": false, + "baseSeparator": "", + "unitSeparator": "", + "allSeparator": "و", + "base": { + "0": "صفر", + "1": "واحد", + "2": "اثنان", + "3": "ثلاثة", + "4": "أربعة", + "5": "خمسة", + "6": "ستة", + "7": "سبعة", + "8": "ثمانية", + "9": "تسعة", + + "10": "عشرة", + "11": "أحد عشر", + "12": "إثنا عشر", + "13": "ثلاثة عشر", + "14": "أربعة عشر", + "15": "خمسة عشر", + "16": "ستة عشر", + "17": "سبعة عشر", + "18": "ثمانية عشر", + "19": "تسعة عشر", + + "20": "عشرون", + "21": "واحد وعشرون", + "22": "اثنان وعشرون", + "23": "ثلاثة وعشرون", + "24": "أربعة وعشرون", + "25": "خمسة وعشرون", + "26": "ستة وعشرون", + "27": "سبعة وعشرون", + "28": "ثمانية وعشرون", + "29": "تسعة وعشرون", + + "30": "ثلاثون", + "31": "واحد وثلاثون", + "32": "اثنان وثلاثون", + "33": "ثلاثة وثلاثون", + "34": "أربعة وثلاثون", + "35": "خمسة وثلاثون", + "36": "ستة وثلاثون", + "37": "سبعة وثلاثون", + "38": "ثمانية وثلاثون", + "39": "تسعة وثلاثون", + + "40": "أربعون", + "41": "واحد وأربعون", + "42": "اثنان وأربعون", + "43": "ثلاثة وأربعون", + "44": "أربعة وأربعون", + "45": "خمسة وأربعون", + "46": "ستة وأربعون", + "47": "سبعة وأربعون", + "48": "ثمانية وأربعون", + "49": "تسعة وأربعون", + + "50": "خمسون", + "51": "واحد وخمسون", + "52": "اثنان وخمسون", + "53": "ثلاثة وخمسون", + "54": "أربعة وخمسون", + "55": "خمسة وخمسون", + "56": "ستة وخمسون", + "57": "سبعة وخمسون", + "58": "ثمانية وخمسون", + "59": "تسعة وخمسون", + + "60": "ستون", + "61": "واحد وستون", + "62": "اثنان وستون", + "63": "ثلاثة وستون", + "64": "أربعة وستون", + "65": "خمسة وستون", + "66": "ستة وستون", + "67": "سبعة وستون", + "68": "ثمانية وستون", + "69": "تسعة وستون", + + "70": "سبعون", + "71": "واحد وسبعون", + "72": "اثنان وسبعون", + "73": "ثلاثة وسبعون", + "74": "أربعة وسبعون", + "75": "خمسة وسبعون", + "76": "ستة وسبعون", + "77": "سبعة وسبعون", + "78": "ثمانية وسبعون", + "79": "تسعة وسبعون", + + "80": "ثمانون", + "81": "واحد وثمانون", + "82": "اثنان وثمانون", + "83": "ثلاثة وثمانون", + "84": "أربعة وثمانون", + "85": "خمسة وثمانون", + "86": "ستة وثمانون", + "87": "سبعة وثمانون", + "88": "ثمانية وثمانون", + "89": "تسعة وثمانون", + + "90": "تسعون", + "91": "واحد وتسعون", + "92": "اثنان وتسعون", + "93": "ثلاثة وتسعون", + "94": "أربعة وتسعون", + "95": "خمسة وتسعون", + "96": "ستة وتسعون", + "97": "سبعة وتسعون", + "98": "ثمانية وتسعون", + "99": "تسعة وتسعون", + + "200": "مائتان", + "300": "ثلاثمائة", + "400": "أربعمائة", + "500": "خمسمائة", + "600": "ستمائة", + "700": "سبعمائة", + "800": "ثمانمائة", + "900": "تسعمائة" + }, + "units" : [ + {"singular":"مائة", "useBaseInstead": true, "useBaseException": [1]}, + {"singular":"ألف", "dual":"ألفان", "plural":"آلاف", "restrictedPlural": true, "avoidPrefixException": [1, 2]}, + {"singular":"مليون", "dual":"مليونان", "plural":"ملايين", "restrictedPlural": true, "avoidPrefixException": [1, 2]}, + {"singular":"مليار", "dual":"ملياران", "plural":"ملايير", "restrictedPlural": true, "avoidPrefixException": [1, 2]}, + + {"singular":"تريليون", "avoidPrefixException": [1]}, + {"singular":"كوادريليون", "avoidPrefixException": [1]}, + {"singular":"كوينتليون", "avoidPrefixException": [1]}, + {"singular":"سكستليون", "avoidPrefixException": [1]}, + {"singular":"سبتيلليون", "avoidPrefixException": [1]}, + {"singular":"أوكتيليون", "avoidPrefixException": [1]}, + {"singular":"نونيلليون", "avoidPrefixException": [1]}, + {"singular":"دشيليون", "avoidPrefixException": [1]}, + {"singular":"أوندشيلليون", "avoidPrefixException": [1]}, + {"singular":"دودشيليون", "avoidPrefixException": [1]}, + {"singular":"تريدشيليون", "avoidPrefixException": [1]}, + {"singular":"كواتوردشيليون", "avoidPrefixException": [1]}, + {"singular":"كويندشيليون" , "avoidPrefixException": [1]} + ], + "unitExceptions": {} +} \ No newline at end of file diff --git a/dist/i18n/az.json b/dist/i18n/az.json new file mode 100644 index 0000000..9247b0a --- /dev/null +++ b/dist/i18n/az.json @@ -0,0 +1,52 @@ +{ + "useLongScale": false, + "baseSeparator": " ", + "unitSeparator": "", + "base": { + "0": "sıfır", + "1": "bir", + "2": "iki", + "3": "üç", + "4": "dörd", + "5": "beş", + "6": "altı", + "7": "yeddi", + "8": "səkkiz", + "9": "doqquz", + "10": "on", + "20": "iyirmi", + "30": "otuz", + "40": "qırx", + "50": "əlli", + "60": "altmış", + "70": "yetmiş", + "80": "səksən", + "90": "doxsan" + }, + "units" : [ + { + "singular": "yüz", + "avoidPrefixException": [1] + }, + { + "singular": "min", + "avoidPrefixException": [1] + }, + "milyon", + "milyard", + "trilyon", + "kvadrilyon", + "kentilyon", + "sekstilyon", + "septilyon", + "oktilyon", + "nonilyon", + "desilyon", + "andesilyon", + "dodesilyon", + "tredesilyon", + "katordesilyon", + "kendesilyon" + ], + "unitExceptions": [] + } \ No newline at end of file diff --git a/dist/i18n/en-indian.json b/dist/i18n/en-indian.json new file mode 100644 index 0000000..841abad --- /dev/null +++ b/dist/i18n/en-indian.json @@ -0,0 +1,42 @@ +{ + "useLongScale": false, + "baseSeparator": "-", + "unitSeparator": "and ", + "base": { + "0": "zero", + "1": "one", + "2": "two", + "3": "three", + "4": "four", + "5": "five", + "6": "six", + "7": "seven", + "8": "eight", + "9": "nine", + "10": "ten", + "11": "eleven", + "12": "twelve", + "13": "thirteen", + "14": "fourteen", + "15": "fifteen", + "16": "sixteen", + "17": "seventeen", + "18": "eighteen", + "19": "nineteen", + "20": "twenty", + "30": "thirty", + "40": "forty", + "50": "fifty", + "60": "sixty", + "70": "seventy", + "80": "eighty", + "90": "ninety" + }, + "units" : { + "2": "hundred", + "3": "thousand", + "5": "lakh", + "7": "crore" + }, + "unitExceptions": [] +} \ No newline at end of file diff --git a/dist/i18n/en.json b/dist/i18n/en.json new file mode 100644 index 0000000..810011f --- /dev/null +++ b/dist/i18n/en.json @@ -0,0 +1,55 @@ +{ + "useLongScale": false, + "baseSeparator": "-", + "unitSeparator": "and ", + "base": { + "0": "zero", + "1": "one", + "2": "two", + "3": "three", + "4": "four", + "5": "five", + "6": "six", + "7": "seven", + "8": "eight", + "9": "nine", + "10": "ten", + "11": "eleven", + "12": "twelve", + "13": "thirteen", + "14": "fourteen", + "15": "fifteen", + "16": "sixteen", + "17": "seventeen", + "18": "eighteen", + "19": "nineteen", + "20": "twenty", + "30": "thirty", + "40": "forty", + "50": "fifty", + "60": "sixty", + "70": "seventy", + "80": "eighty", + "90": "ninety" + }, + "units" : [ + "hundred", + "thousand", + "million", + "billion", + "trillion", + "quadrillion", + "quintillion", + "sextillion", + "septillion", + "octillion", + "nonillion", + "decillion", + "undecillion", + "duodecillion", + "tredecillion", + "quattuordecillion", + "quindecillion" + ], + "unitExceptions": [] +} \ No newline at end of file diff --git a/dist/i18n/eo.json b/dist/i18n/eo.json new file mode 100644 index 0000000..40b5083 --- /dev/null +++ b/dist/i18n/eo.json @@ -0,0 +1,61 @@ +{ + "useLongScale": false, + "baseSeparator": " ", + "unitSeparator": "", + "base": { + "0": "nulo", + "1": "unu", + "2": "du", + "3": "tri", + "4": "kvar", + "5": "kvin", + "6": "ses", + "7": "sep", + "8": "ok", + "9": "naŭ", + "10": "dek", + "20": "dudek", + "30": "tridek", + "40": "kvardek", + "50": "kvindek", + "60": "sesdek", + "70": "sepdek", + "80": "okdek", + "90": "naŭdek", + "100": "cent", + "200": "ducent", + "300": "tricent", + "400": "kvarcent", + "500": "kvincent", + "600": "sescent", + "700": "sepcent", + "800": "okcent", + "900": "naŭcent" + }, + "units" : [ + { + "useBaseInstead": true, + "useBaseException": [] + }, + { + "singular": "mil", + "avoidPrefixException": [1] + }, + { + "singular": "miliono", + "plural": "milionoj", + "avoidPrefixException": [1] + }, + { + "singular": "miliardo", + "plural": "miliardoj", + "avoidPrefixException": [1] + }, + { + "singular": "biliono", + "plural": "bilionoj", + "avoidPrefixException": [1] + } + ], + "unitExceptions": [] +} diff --git a/dist/i18n/es.json b/dist/i18n/es.json new file mode 100644 index 0000000..53fe05f --- /dev/null +++ b/dist/i18n/es.json @@ -0,0 +1,142 @@ +{ + "useLongScale": true, + "baseSeparator": " y ", + "unitSeparator": "", + "base": { + "0": "cero", + "1": "uno", + "2": "dos", + "3": "tres", + "4": "cuatro", + "5": "cinco", + "6": "seis", + "7": "siete", + "8": "ocho", + "9": "nueve", + "10": "diez", + "11": "once", + "12": "doce", + "13": "trece", + "14": "catorce", + "15": "quince", + "16": "dieciséis", + "17": "diecisiete", + "18": "dieciocho", + "19": "diecinueve", + "20": "veinte", + "21": "veintiuno", + "22": "veintidós", + "23": "veintitrés", + "24": "veinticuatro", + "25": "veinticinco", + "26": "veintiséis", + "27": "veintisiete", + "28": "veintiocho", + "29": "veintinueve", + "30": "treinta", + "40": "cuarenta", + "50": "cincuenta", + "60": "sesenta", + "70": "setenta", + "80": "ochenta", + "90": "noventa", + "100": "cien", + "200": "doscientos", + "300": "trescientos", + "400": "cuatrocientos", + "500": "quinientos", + "600": "seiscientos", + "700": "setecientos", + "800": "ochocientos", + "900": "novecientos", + "1000": "mil" + }, + "unitExceptions": { + "1000000": "un millón", + "1000000000000": "un billón", + "1000000000000000000": "un trillón", + "1000000000000000000000000": "un cuatrillones", + "1000000000000000000000000000000": "un quintillón", + "1000000000000000000000000000000000000": "un sextillón", + "1000000000000000000000000000000000000000000": "un septillón", + "1000000000000000000000000000000000000000000000000": "un octillón", + "1000000000000000000000000000000000000000000000000000000": "un nonillón", + "1000000000000000000000000000000000000000000000000000000000000": "un decillón", + "1000000000000000000000000000000000000000000000000000000000000000000": "un undecillón", + "1000000000000000000000000000000000000000000000000000000000000000000000000": "un duodecillón", + "1000000000000000000000000000000000000000000000000000000000000000000000000000000": "un tredecillón", + "1000000000000000000000000000000000000000000000000000000000000000000000000000000000000": "un cuatordecillón", + "1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000": "un quindecillón" + }, + "units" : [ + { + "singular": "ciento", + "useBaseInstead": true, + "useBaseException": [1] + }, + { + "singular": "mil", + "avoidPrefixException": [1] + }, + { + "singular": "millón", + "plural": "millones" + }, + { + "singular": "billón", + "plural": "billones" + }, + { + "singular": "trillón", + "plural": "trillones" + }, + { + "singular": "cuatrillón", + "plural": "cuatrillones" + }, + { + "singular": "quintillón", + "plural": "quintillones" + }, + { + "singular": "sextillón", + "plural": "sextillones" + }, + { + "singular": "septillón", + "plural": "septillones" + }, + { + "singular": "octillón", + "plural": "octillones" + }, + { + "singular": "nonillón", + "plural": "nonillones" + }, + { + "singular": "decillón", + "plural": "decillones" + }, + { + "singular": "undecillón", + "plural": "undecillones" + }, + { + "singular": "duodecillón", + "plural": "duodecillones" + }, + { + "singular": "tredecillón", + "plural": "tredecillones" + }, + { + "singular": "cuatrodecillón", + "plural": "cuatrodecillones" + }, + { + "singular": "quindecillón", + "plural": "quindecillones" + } + ] +} diff --git a/dist/i18n/fr.json b/dist/i18n/fr.json new file mode 100644 index 0000000..936d79e --- /dev/null +++ b/dist/i18n/fr.json @@ -0,0 +1,133 @@ +{ + "useLongScale": false, + "baseSeparator": "-", + "unitSeparator": "", + "base": { + "0": "zéro", + "1": "un", + "2": "deux", + "3": "trois", + "4": "quatre", + "5": "cinq", + "6": "six", + "7": "sept", + "8": "huit", + "9": "neuf", + "10": "dix", + "11": "onze", + "12": "douze", + "13": "treize", + "14": "quatorze", + "15": "quinze", + "16": "seize", + "17": "dix-sept", + "18": "dix-huit", + "19": "dix-neuf", + "20": "vingt", + "30": "trente", + "40": "quarante", + "50": "cinquante", + "60": "soixante", + "70": "soixante-dix", + "80": "quatre-vingt", + "90": "quatre-vingt-dix" + }, + "units" : [ + { + "singular": "cent", + "plural": "cents", + "avoidInNumberPlural": true, + "avoidPrefixException": [1] + }, + { + "singular": "mille", + "avoidPrefixException": [1] + }, + { + "singular": "million", + "plural": "millions" + }, + { + "singular": "milliard", + "plural": "milliards" + }, + { + "singular": "billion", + "plural": "billions" + }, + { + "singular": "billiard", + "plural": "billiards" + }, + { + "singular": "trillion", + "plural": "trillions" + }, + { + "singular": "trilliard", + "plural": "trilliards" + }, + { + "singular": "quadrillion", + "plural": "quadrillions" + }, + { + "singular": "quadrilliard", + "plural": "quadrilliards" + }, + { + "singular": "quintillion", + "plural": "quintillions" + }, + { + "singular": "quintilliard", + "plural": "quintilliards" + }, + { + "singular": "sextillion", + "plural": "sextillions" + }, + { + "singular": "sextilliard", + "plural": "sextilliards" + }, + { + "singular": "septillion", + "plural": "septillions" + }, + { + "singular": "septilliard", + "plural": "septilliards" + }, + { + "singular": "octillion", + "plural": "octillions" + } + ], + "unitExceptions": { + "21": "vingt et un", + "31": "trente et un", + "41": "quarante et un", + "51": "cinquante et un", + "61": "soixante et un", + "71": "soixante et onze", + "72": "soixante-douze", + "73": "soixante-treize", + "74": "soixante-quatorze", + "75": "soixante-quinze", + "76": "soixante-seize", + "77": "soixante-dix-sept", + "78": "soixante-dix-huit", + "79": "soixante-dix-neuf", + "80": "quatre-vingts", + "91": "quatre-vingt-onze", + "92": "quatre-vingt-douze", + "93": "quatre-vingt-treize", + "94": "quatre-vingt-quatorze", + "95": "quatre-vingt-quinze", + "96": "quatre-vingt-seize", + "97": "quatre-vingt-dix-sept", + "98": "quatre-vingt-dix-huit", + "99": "quatre-vingt-dix-neuf" + } +} diff --git a/dist/i18n/hu.json b/dist/i18n/hu.json new file mode 100644 index 0000000..b85e9bf --- /dev/null +++ b/dist/i18n/hu.json @@ -0,0 +1,124 @@ +{ + "useLongScale": true, + "baseSeparator": "", + "unitSeparator": "és ", + "base": { + "0": "nulla", + "1": "egy", + "2": "kettő", + "3": "három", + "4": "négy", + "5": "öt", + "6": "hat", + "7": "hét", + "8": "nyolc", + "9": "kilenc", + "10": "tíz", + "11": "tizenegy", + "12": "tizenkettő", + "13": "tizenhárom", + "14": "tizennégy", + "15": "tizenöt", + "16": "tizenhat", + "17": "tizenhét", + "18": "tizennyolc", + "19": "tizenkilenc", + "20": "húsz", + "21": "huszonegy", + "22": "huszonkettő", + "23": "huszonhárom", + "24": "huszonnégy", + "25": "huszonöt", + "26": "huszonhat", + "27": "huszonhét", + "28": "huszonnyolc", + "29": "huszonkilenc", + "30": "harminc", + "40": "negyven", + "50": "ötven", + "60": "hatvan", + "70": "hetven", + "80": "nyolcvan", + "90": "kilencven", + "100": "száz", + "200": "kétszáz", + "300": "háromszáz", + "400": "négyszáz", + "500": "ötszáz", + "600": "hatszáz", + "700": "hétszáz", + "800": "nyolcszáz", + "900": "kilencszáz", + "1000": "ezer" + }, + "unitExceptions": { + "1": "egy" + }, + "units" : [ + { + "singular": "száz", + "useBaseInstead": true, + "useBaseException": [1] + }, + { + "singular": "ezer", + "avoidPrefixException": [1] + }, + { + "singular": "millió", + "avoidPrefixException": [1] + }, + { + "singular": "milliárd", + "avoidPrefixException": [1] + }, + { + "singular": "-billió", + "avoidPrefixException": [1] + }, + { + "singular": "billiárd", + "avoidPrefixException": [1] + }, + { + "singular": "trillió", + "avoidPrefixException": [1] + }, + { + "singular": "trilliárd", + "avoidPrefixException": [1] + }, + { + "singular": "kvadrillió", + "avoidPrefixException": [1] + }, + { + "singular": "kvadrilliárd", + "avoidPrefixException": [1] + }, + { + "singular": "kvintillió", + "avoidPrefixException": [1] + }, + { + "singular": "kvintilliárd", + "avoidPrefixException": [1] + }, + { + "singular": "szextillió", + "avoidPrefixException": [1] + }, + { + "singular": "szeptillió", + "avoidPrefixException": [1] + }, + { + "singular": "oktillió", + "avoidPrefixException": [1] + }, + { + "singular": "nonillió", + "avoidPrefixException": [1] + } + ] +} diff --git a/dist/i18n/id.json b/dist/i18n/id.json new file mode 100644 index 0000000..a34ab0a --- /dev/null +++ b/dist/i18n/id.json @@ -0,0 +1,52 @@ +{ + "useLongScale": false, + "baseSeparator": " ", + "unitSeparator": "", + "base": { + "0": "nol", + "1": "satu", + "2": "dua", + "3": "tiga", + "4": "empat", + "5": "lima", + "6": "enam", + "7": "tujuh", + "8": "delapan", + "9": "sembilan", + "10": "sepuluh", + "11": "sebelas", + "12": "dua belas", + "13": "tiga belas", + "14": "empat belas", + "15": "lima belas", + "16": "enam belas", + "17": "tujuh belas", + "18": "delapan belas", + "19": "sembilan belas", + "20": "dua puluh", + "30": "tiga puluh", + "40": "empat puluh", + "50": "lima puluh", + "60": "enam puluh", + "70": "tujuh puluh", + "80": "delapan puluh", + "90": "sembilan puluh" + }, + "units" : [ + { + "singular": "seratus", + "plural": "ratus", + "avoidPrefixException": [1] + }, + { + "singular": "seribu", + "plural": "ribu", + "avoidPrefixException": [1] + }, + "juta", + "miliar", + "triliun", + "kuadiliun" + ], + "unitExceptions": [] +} diff --git a/dist/i18n/index.js b/dist/i18n/index.js new file mode 100644 index 0000000..410e898 --- /dev/null +++ b/dist/i18n/index.js @@ -0,0 +1,35 @@ +import Ar from './ar.json'; +import Az from './az.json'; +import En from './en.json'; +import EnIndian from './en-indian.json'; +import Eo from './eo.json'; +import Es from './es.json'; +import Fr from './fr.json'; +import Hu from './hu.json'; +import Id from './id.json'; +import It from './it.json'; +import Pt from './pt.json'; +import PtPt from './pt-PT.json'; +import Ru from './ru.json'; +import Tr from './tr.json'; +import Uk from './uk.json'; +import Vi from './vi.json'; + +export { + Ar, + Az, + En, + EnIndian, + Eo, + Es, + Fr, + Hu, + Id, + It, + Pt, + PtPt, + Ru, + Tr, + Uk, + Vi, +}; diff --git a/dist/i18n/it.json b/dist/i18n/it.json new file mode 100644 index 0000000..cf10bc2 --- /dev/null +++ b/dist/i18n/it.json @@ -0,0 +1,123 @@ +{ + "useLongScale": false, + "baseSeparator": "", + "unitSeparator": "", + "generalSeparator": "", + "wordSeparator": "", + "base": { + "0": "zero", + "1": "uno", + "2": "due", + "3": "tre", + "4": "quattro", + "5": "cinque", + "6": "sei", + "7": "sette", + "8": "otto", + "9": "nove", + "10": "dieci", + "11": "undici", + "12": "dodici", + "13": "tredici", + "14": "quattordici", + "15": "quindici", + "16": "sedici", + "17": "diciassette", + "18": "diciotto", + "19": "diciannove", + "20": "venti", + "21": "ventuno", + "23": "ventitré", + "28": "ventotto", + "30": "trenta", + "31": "trentuno", + "33": "trentatré", + "38": "trentotto", + "40": "quaranta", + "41": "quarantuno", + "43": "quaranta­tré", + "48": "quarantotto", + "50": "cinquanta", + "51": "cinquantuno", + "53": "cinquantatré", + "58": "cinquantotto", + "60": "sessanta", + "61": "sessantuno", + "63": "sessanta­tré", + "68": "sessantotto", + "70": "settanta", + "71": "settantuno", + "73": "settantatré", + "78": "settantotto", + "80": "ottanta", + "81": "ottantuno", + "83": "ottantatré", + "88": "ottantotto", + "90": "novanta", + "91": "novantuno", + "93": "novantatré", + "98": "novantotto", + "100": "cento", + "101": "centuno", + "108": "centootto", + "180": "centottanta", + "201": "duecentuno", + "301": "tre­cent­uno", + "401": "quattro­cent­uno", + "501": "cinque­cent­uno", + "601": "sei­cent­uno", + "701": "sette­cent­uno", + "801": "otto­cent­uno", + "901": "nove­cent­uno" + }, + "unitExceptions": { + "1": "un" + }, + "units": [ + { + "singular": "cento", + "avoidPrefixException": [ + 1 + ] + }, + { + "singular": "mille", + "plural": "mila", + "avoidPrefixException": [ + 1 + ] + }, + { + "singular": "milione", + "plural": "milioni" + }, + { + "singular": "miliardo", + "plural": "miliardi" + }, + { + "singular": "bilione", + "plural": "bilioni" + }, + { + "singular": "biliardo", + "plural": "biliardi" + }, + { + "singular": "trilione", + "plural": "trilioni" + }, + { + "singular": "triliardo", + "plural": "triliardi" + }, + { + "singular": "quadrilione", + "plural": "quadrilioni" + }, + { + "singular": "quadriliardo", + "plural": "quadriliardi" + } + ] +} diff --git a/dist/i18n/pt-PT.json b/dist/i18n/pt-PT.json new file mode 100644 index 0000000..11640f2 --- /dev/null +++ b/dist/i18n/pt-PT.json @@ -0,0 +1,105 @@ +{ + "useLongScale": true, + "baseSeparator": " e ", + "unitSeparator": "e ", + "andWhenTrailing": true, + "base": { + "0": "zero", + "1": "um", + "2": "dois", + "3": "três", + "4": "quatro", + "5": "cinco", + "6": "seis", + "7": "sete", + "8": "oito", + "9": "nove", + "10": "dez", + "11": "onze", + "12": "doze", + "13": "treze", + "14": "catorze", + "15": "quinze", + "16": "dezasseis", + "17": "dezassete", + "18": "dezoito", + "19": "dezanove", + "20": "vinte", + "30": "trinta", + "40": "quarenta", + "50": "cinquenta", + "60": "sessenta", + "70": "setenta", + "80": "oitenta", + "90": "noventa", + "100": "cem", + "200": "duzentos", + "300": "trezentos", + "400": "quatrocentos", + "500": "quinhentos", + "600": "seiscentos", + "700": "setecentos", + "800": "oitocentos", + "900": "novecentos", + "1000": "mil" + }, + "unitExceptions": { + "1": "um" + }, + "units" : [ + { + "singular": "cento", + "useBaseInstead": true, + "useBaseException": [ + 1 + ], + "useBaseExceptionWhenNoTrailingNumbers": true, + "andException": true + }, + { + "singular": "mil", + "avoidPrefixException": [1], + "andException": true + }, + { + "singular": "milhão", + "plural": "milhões" + }, + { + "singular": "bilião", + "plural": "biliões" + }, + { + "singular": "trilião", + "plural": "triliões" + }, + { + "singular": "quadrilião", + "plural": "quadriliões" + }, + { + "singular": "quintilião", + "plural": "quintiliões" + }, + { + "singular": "sextilião", + "plural": "sextiliões" + }, + { + "singular": "septilião", + "plural": "septiliões" + }, + { + "singular": "octilião", + "plural": "octiliões" + }, + { + "singular": "nonilião", + "plural": "noniliões" + }, + { + "singular": "decilião", + "plural": "deciliões" + } + ] +} diff --git a/dist/i18n/pt.json b/dist/i18n/pt.json new file mode 100644 index 0000000..8babd98 --- /dev/null +++ b/dist/i18n/pt.json @@ -0,0 +1,117 @@ +{ + "useLongScale": false, + "baseSeparator": " e ", + "unitSeparator": "e ", + "andWhenTrailing": true, + "base": { + "0": "zero", + "1": "um", + "2": "dois", + "3": "três", + "4": "quatro", + "5": "cinco", + "6": "seis", + "7": "sete", + "8": "oito", + "9": "nove", + "10": "dez", + "11": "onze", + "12": "doze", + "13": "treze", + "14": "catorze", + "15": "quinze", + "16": "dezesseis", + "17": "dezessete", + "18": "dezoito", + "19": "dezenove", + "20": "vinte", + "30": "trinta", + "40": "quarenta", + "50": "cinquenta", + "60": "sessenta", + "70": "setenta", + "80": "oitenta", + "90": "noventa", + "100": "cem", + "200": "duzentos", + "300": "trezentos", + "400": "quatrocentos", + "500": "quinhentos", + "600": "seiscentos", + "700": "setecentos", + "800": "oitocentos", + "900": "novecentos", + "1000": "mil" + }, + "unitExceptions": { + "1": "um" + }, + "units" : [ + { + "singular": "cento", + "useBaseInstead": true, + "useBaseException": [ + 1 + ], + "useBaseExceptionWhenNoTrailingNumbers": true, + "andException": true + }, + { + "singular": "mil", + "avoidPrefixException": [1], + "andException": true + }, + { + "singular": "milhão", + "plural": "milhões" + }, + { + "singular": "bilhão", + "plural": "bilhões" + }, + { + "singular": "trilhão", + "plural": "trilhões" + }, + { + "singular": "quadrilhão", + "plural": "quadrilhão" + }, + { + "singular": "quintilhão", + "plural": "quintilhões" + }, + { + "singular": "sextilhão", + "plural": "sextilhões" + }, + { + "singular": "septilhão", + "plural": "septilhões" + }, + { + "singular": "octilhão", + "plural": "octilhões" + }, + { + "singular": "nonilhão", + "plural": "nonilhões" + }, + { + "singular": "decilhão", + "plural": "decilhões" + }, + { + "singular": "undecilhão", + "plural": "undecilhões" + }, + { + "singular": "doudecilhão", + "plural": "doudecilhões" + }, + { + "singular": "tredecilhão", + "plural": "tredecilhões" + } + ] +} diff --git a/dist/i18n/ru.json b/dist/i18n/ru.json new file mode 100644 index 0000000..cb16390 --- /dev/null +++ b/dist/i18n/ru.json @@ -0,0 +1,186 @@ +{ + "useLongScale": false, + "baseSeparator": " ", + "unitSeparator": "", + "base": { + "0": "ноль", + "1": "один", + "2": "два", + "3": "три", + "4": "четыре", + "5": "пять", + "6": "шесть", + "7": "семь", + "8": "восемь", + "9": "девять", + "10": "десять", + "11": "одинадцать", + "12": "двенадцать", + "13": "тринадцать", + "14": "четырнадцать", + "15": "пятнадцать", + "16": "шестнадцать", + "17": "семнадцать", + "18": "восемнадцать", + "19": "девятнадцать", + "20": "двадцать", + "30": "тридцать", + "40": "сорок", + "50": "пятьдесят", + "60": "шестьдесят", + "70": "семьдесят", + "80": "восемьдесят", + "90": "девяносто", + "100": "сто", + "200": "двести", + "300": "триста", + "400": "четыреста", + "500": "пятьсот", + "600": "шестьсот", + "700": "семьсот", + "800": "восемьсот", + "900": "девятьсот" + }, + "alternativeBase": { + "feminine": { + "1": "одна", + "2": "две" + } + }, + "units": [ + { + "useBaseInstead": true, + "useBaseException": [] + }, + { + "singular": "тысяча", + "few": "тысячи", + "plural": "тысяч", + "useAlternativeBase": "feminine", + "useSingularEnding": true, + "useFewEnding": true, + "avoidEndingRules": [11, 12, 13, 14, 111, 112, 113, 114, 211, 212, 213, 214, 311, 312, 313, 314, 411, 412, 413, 414, 511, 512, 513, 514, 611, 612, 613, 614, 711, 712, 713, 714, 811, 812, 813, 814, 911, 912, 913, 914] + }, + { + "singular": "миллион", + "few": "миллиона", + "plural": "миллионов", + "useSingularEnding": true, + "useFewEnding": true, + "avoidEndingRules": [11, 12, 13, 14, 111, 112, 113, 114, 211, 212, 213, 214, 311, 312, 313, 314, 411, 412, 413, 414, 511, 512, 513, 514, 611, 612, 613, 614, 711, 712, 713, 714, 811, 812, 813, 814, 911, 912, 913, 914] + }, + { + "singular": "миллиард", + "few": "миллиарда", + "plural": "миллиардов", + "useSingularEnding": true, + "useFewEnding": true, + "avoidEndingRules": [11, 12, 13, 14, 111, 112, 113, 114, 211, 212, 213, 214, 311, 312, 313, 314, 411, 412, 413, 414, 511, 512, 513, 514, 611, 612, 613, 614, 711, 712, 713, 714, 811, 812, 813, 814, 911, 912, 913, 914] + }, + { + "singular": "триллион", + "few": "триллиона", + "plural": "триллионов", + "useSingularEnding": true, + "useFewEnding": true, + "avoidEndingRules": [11, 12, 13, 14, 111, 112, 113, 114, 211, 212, 213, 214, 311, 312, 313, 314, 411, 412, 413, 414, 511, 512, 513, 514, 611, 612, 613, 614, 711, 712, 713, 714, 811, 812, 813, 814, 911, 912, 913, 914] + }, + { + "singular": "квадрильон", + "few": "квадриллион", + "plural": "квадрилон", + "useSingularEnding": true, + "useFewEnding": true, + "avoidEndingRules": [11, 12, 13, 14, 111, 112, 113, 114, 211, 212, 213, 214, 311, 312, 313, 314, 411, 412, 413, 414, 511, 512, 513, 514, 611, 612, 613, 614, 711, 712, 713, 714, 811, 812, 813, 814, 911, 912, 913, 914] + }, + { + "singular": "квинтиллион", + "few": "квинтиллиона", + "plural": "квинтильонов", + "useSingularEnding": true, + "useFewEnding": true, + "avoidEndingRules": [11, 12, 13, 14, 111, 112, 113, 114, 211, 212, 213, 214, 311, 312, 313, 314, 411, 412, 413, 414, 511, 512, 513, 514, 611, 612, 613, 614, 711, 712, 713, 714, 811, 812, 813, 814, 911, 912, 913, 914] + }, + { + "singular": "секстиллионов", + "few": "секстильона", + "plural": "секстиллионов", + "useSingularEnding": true, + "useFewEnding": true, + "avoidEndingRules": [11, 12, 13, 14, 111, 112, 113, 114, 211, 212, 213, 214, 311, 312, 313, 314, 411, 412, 413, 414, 511, 512, 513, 514, 611, 612, 613, 614, 711, 712, 713, 714, 811, 812, 813, 814, 911, 912, 913, 914] + }, + { + "singular": "септиллион", + "few": "септиллиона", + "plural": "септиллионов", + "useSingularEnding": true, + "useFewEnding": true, + "avoidEndingRules": [11, 12, 13, 14, 111, 112, 113, 114, 211, 212, 213, 214, 311, 312, 313, 314, 411, 412, 413, 414, 511, 512, 513, 514, 611, 612, 613, 614, 711, 712, 713, 714, 811, 812, 813, 814, 911, 912, 913, 914] + }, + { + "singular": "октиллион", + "few": "октиллиона", + "plural": "октиллионов", + "useSingularEnding": true, + "useFewEnding": true, + "avoidEndingRules": [11, 12, 13, 14, 111, 112, 113, 114, 211, 212, 213, 214, 311, 312, 313, 314, 411, 412, 413, 414, 511, 512, 513, 514, 611, 612, 613, 614, 711, 712, 713, 714, 811, 812, 813, 814, 911, 912, 913, 914] + }, + { + "singular": "нониллион", + "few": "нониллиона", + "plural": "нониллионов", + "useSingularEnding": true, + "useFewEnding": true, + "avoidEndingRules": [11, 12, 13, 14, 111, 112, 113, 114, 211, 212, 213, 214, 311, 312, 313, 314, 411, 412, 413, 414, 511, 512, 513, 514, 611, 612, 613, 614, 711, 712, 713, 714, 811, 812, 813, 814, 911, 912, 913, 914] + }, + { + "singular": "дециллион", + "few": "дециллиона", + "plural": "дециллионов", + "useSingularEnding": true, + "useFewEnding": true, + "avoidEndingRules": [11, 12, 13, 14, 111, 112, 113, 114, 211, 212, 213, 214, 311, 312, 313, 314, 411, 412, 413, 414, 511, 512, 513, 514, 611, 612, 613, 614, 711, 712, 713, 714, 811, 812, 813, 814, 911, 912, 913, 914] + }, + { + "singular": "ундециллион", + "few": "ундециллиона", + "plural": "ундециллионив", + "useSingularEnding": true, + "useFewEnding": true, + "avoidEndingRules": [11, 12, 13, 14, 111, 112, 113, 114, 211, 212, 213, 214, 311, 312, 313, 314, 411, 412, 413, 414, 511, 512, 513, 514, 611, 612, 613, 614, 711, 712, 713, 714, 811, 812, 813, 814, 911, 912, 913, 914] + }, + { + "singular": "дуодециллион", + "few": "дуодециллиона", + "plural": "дуодециллионив", + "useSingularEnding": true, + "useFewEnding": true, + "avoidEndingRules": [11, 12, 13, 14, 111, 112, 113, 114, 211, 212, 213, 214, 311, 312, 313, 314, 411, 412, 413, 414, 511, 512, 513, 514, 611, 612, 613, 614, 711, 712, 713, 714, 811, 812, 813, 814, 911, 912, 913, 914] + }, + { + "singular": "тредециллион", + "few": "тредециллиона", + "plural": "тредециллионив", + "useSingularEnding": true, + "useFewEnding": true, + "avoidEndingRules": [11, 12, 13, 14, 111, 112, 113, 114, 211, 212, 213, 214, 311, 312, 313, 314, 411, 412, 413, 414, 511, 512, 513, 514, 611, 612, 613, 614, 711, 712, 713, 714, 811, 812, 813, 814, 911, 912, 913, 914] + }, + { + "singular": "кватуордециллион", + "few": "кватуордециллиона", + "plural": "кватуордециллионив", + "useSingularEnding": true, + "useFewEnding": true, + "avoidEndingRules": [11, 12, 13, 14, 111, 112, 113, 114, 211, 212, 213, 214, 311, 312, 313, 314, 411, 412, 413, 414, 511, 512, 513, 514, 611, 612, 613, 614, 711, 712, 713, 714, 811, 812, 813, 814, 911, 912, 913, 914] + }, + { + "singular": "квиндециллион", + "few": "квиндециллиона", + "plural": "квиндециллионив", + "useSingularEnding": true, + "useFewEnding": true, + "avoidEndingRules": [11, 12, 13, 14, 111, 112, 113, 114, 211, 212, 213, 214, 311, 312, 313, 314, 411, 412, 413, 414, 511, 512, 513, 514, 611, 612, 613, 614, 711, 712, 713, 714, 811, 812, 813, 814, 911, 912, 913, 914] + } + ], + "unitExceptions": [] +} \ No newline at end of file diff --git a/dist/i18n/tr.json b/dist/i18n/tr.json new file mode 100644 index 0000000..1605789 --- /dev/null +++ b/dist/i18n/tr.json @@ -0,0 +1,52 @@ +{ + "useLongScale": false, + "baseSeparator": " ", + "unitSeparator": "", + "base": { + "0": "sıfır", + "1": "bir", + "2": "iki", + "3": "üç", + "4": "dört", + "5": "beş", + "6": "altı", + "7": "yedi", + "8": "sekiz", + "9": "dokuz", + "10": "on", + "20": "yirmi", + "30": "otuz", + "40": "kırk", + "50": "elli", + "60": "altmış", + "70": "yetmiş", + "80": "seksen", + "90": "doksan" + }, + "units" : [ + { + "singular": "yüz", + "avoidPrefixException": [1] + }, + { + "singular": "bin", + "avoidPrefixException": [1] + }, + "milyon", + "milyar", + "trilyon", + "katrilyon", + "kentilyon", + "sekstilyon", + "septilyon", + "oktilyon", + "nonilyon", + "desilyon", + "andesilyon", + "dodesilyon", + "tredesilyon", + "katordesilyon", + "kendesilyon" + ], + "unitExceptions": [] +} \ No newline at end of file diff --git a/dist/i18n/uk.json b/dist/i18n/uk.json new file mode 100644 index 0000000..8557dcc --- /dev/null +++ b/dist/i18n/uk.json @@ -0,0 +1,186 @@ +{ + "useLongScale": false, + "baseSeparator": " ", + "unitSeparator": "", + "base": { + "0": "нуль", + "1": "один", + "2": "два", + "3": "три", + "4": "чотири", + "5": "п’ять", + "6": "шість", + "7": "сім", + "8": "вісім", + "9": "дев’ять", + "10": "десять", + "11": "одинадцять", + "12": "дванадцять", + "13": "тринадцять", + "14": "чотирнадцять", + "15": "п’ятнадцять", + "16": "шістнадцять", + "17": "сімнадцять", + "18": "вісімнадцять", + "19": "дев’ятнадцять", + "20": "двадцять", + "30": "тридцять", + "40": "сорок", + "50": "п’ятдесят", + "60": "шістдесят", + "70": "сімдесят", + "80": "вісімдесят", + "90": "дев’яносто", + "100": "сто", + "200": "двісті", + "300": "триста", + "400": "чотириста", + "500": "п’ятсот", + "600": "шістсот", + "700": "сімсот", + "800": "вісімсот", + "900": "дев’ятсот" + }, + "alternativeBase": { + "feminine": { + "1": "одна", + "2": "дві" + } + }, + "units" : [ + { + "useBaseInstead": true, + "useBaseException": [] + }, + { + "singular": "тисяча", + "few": "тисячі", + "plural": "тисяч", + "useAlternativeBase": "feminine", + "useSingularEnding": true, + "useFewEnding": true, + "avoidEndingRules": [11, 12, 13, 14, 111, 112, 113, 114, 211, 212, 213, 214, 311, 312, 313, 314, 411, 412, 413, 414, 511, 512, 513, 514, 611, 612, 613, 614, 711, 712, 713, 714, 811, 812, 813, 814, 911, 912, 913, 914] + }, + { + "singular": "мільйон", + "few": "мільйони", + "plural": "мільйонів", + "useSingularEnding": true, + "useFewEnding": true, + "avoidEndingRules": [11, 12, 13, 14, 111, 112, 113, 114, 211, 212, 213, 214, 311, 312, 313, 314, 411, 412, 413, 414, 511, 512, 513, 514, 611, 612, 613, 614, 711, 712, 713, 714, 811, 812, 813, 814, 911, 912, 913, 914] + }, + { + "singular": "мільярд", + "few": "мільярди", + "plural": "мільярдів", + "useSingularEnding": true, + "useFewEnding": true, + "avoidEndingRules": [11, 12, 13, 14, 111, 112, 113, 114, 211, 212, 213, 214, 311, 312, 313, 314, 411, 412, 413, 414, 511, 512, 513, 514, 611, 612, 613, 614, 711, 712, 713, 714, 811, 812, 813, 814, 911, 912, 913, 914] + }, + { + "singular": "трильйон", + "few": "трильйони", + "plural": "трильйонів", + "useSingularEnding": true, + "useFewEnding": true, + "avoidEndingRules": [11, 12, 13, 14, 111, 112, 113, 114, 211, 212, 213, 214, 311, 312, 313, 314, 411, 412, 413, 414, 511, 512, 513, 514, 611, 612, 613, 614, 711, 712, 713, 714, 811, 812, 813, 814, 911, 912, 913, 914] + }, + { + "singular": "квадрильйон", + "few": "квадрильйони", + "plural": "квадрильйонів", + "useSingularEnding": true, + "useFewEnding": true, + "avoidEndingRules": [11, 12, 13, 14, 111, 112, 113, 114, 211, 212, 213, 214, 311, 312, 313, 314, 411, 412, 413, 414, 511, 512, 513, 514, 611, 612, 613, 614, 711, 712, 713, 714, 811, 812, 813, 814, 911, 912, 913, 914] + }, + { + "singular": "квінтильйон", + "few": "квінтильйони", + "plural": "квінтильйонів", + "useSingularEnding": true, + "useFewEnding": true, + "avoidEndingRules": [11, 12, 13, 14, 111, 112, 113, 114, 211, 212, 213, 214, 311, 312, 313, 314, 411, 412, 413, 414, 511, 512, 513, 514, 611, 612, 613, 614, 711, 712, 713, 714, 811, 812, 813, 814, 911, 912, 913, 914] + }, + { + "singular": "секстильйон", + "few": "секстильйони", + "plural": "секстильйонів", + "useSingularEnding": true, + "useFewEnding": true, + "avoidEndingRules": [11, 12, 13, 14, 111, 112, 113, 114, 211, 212, 213, 214, 311, 312, 313, 314, 411, 412, 413, 414, 511, 512, 513, 514, 611, 612, 613, 614, 711, 712, 713, 714, 811, 812, 813, 814, 911, 912, 913, 914] + }, + { + "singular": "септілліон", + "few": "септілліони", + "plural": "септілліонів", + "useSingularEnding": true, + "useFewEnding": true, + "avoidEndingRules": [11, 12, 13, 14, 111, 112, 113, 114, 211, 212, 213, 214, 311, 312, 313, 314, 411, 412, 413, 414, 511, 512, 513, 514, 611, 612, 613, 614, 711, 712, 713, 714, 811, 812, 813, 814, 911, 912, 913, 914] + }, + { + "singular": "октілліон", + "few": "октілліони", + "plural": "октілліонів", + "useSingularEnding": true, + "useFewEnding": true, + "avoidEndingRules": [11, 12, 13, 14, 111, 112, 113, 114, 211, 212, 213, 214, 311, 312, 313, 314, 411, 412, 413, 414, 511, 512, 513, 514, 611, 612, 613, 614, 711, 712, 713, 714, 811, 812, 813, 814, 911, 912, 913, 914] + }, + { + "singular": "нонілліон", + "few": "нонілліони", + "plural": "нонілліонів", + "useSingularEnding": true, + "useFewEnding": true, + "avoidEndingRules": [11, 12, 13, 14, 111, 112, 113, 114, 211, 212, 213, 214, 311, 312, 313, 314, 411, 412, 413, 414, 511, 512, 513, 514, 611, 612, 613, 614, 711, 712, 713, 714, 811, 812, 813, 814, 911, 912, 913, 914] + }, + { + "singular": "децілліон", + "few": "децілліони", + "plural": "децілліонів", + "useSingularEnding": true, + "useFewEnding": true, + "avoidEndingRules": [11, 12, 13, 14, 111, 112, 113, 114, 211, 212, 213, 214, 311, 312, 313, 314, 411, 412, 413, 414, 511, 512, 513, 514, 611, 612, 613, 614, 711, 712, 713, 714, 811, 812, 813, 814, 911, 912, 913, 914] + }, + { + "singular": "ундецілліон", + "few": "ундецілліони", + "plural": "ундецілліонів", + "useSingularEnding": true, + "useFewEnding": true, + "avoidEndingRules": [11, 12, 13, 14, 111, 112, 113, 114, 211, 212, 213, 214, 311, 312, 313, 314, 411, 412, 413, 414, 511, 512, 513, 514, 611, 612, 613, 614, 711, 712, 713, 714, 811, 812, 813, 814, 911, 912, 913, 914] + }, + { + "singular": "дуодецілліон", + "few": "дуодецілліони", + "plural": "дуодецілліонів", + "useSingularEnding": true, + "useFewEnding": true, + "avoidEndingRules": [11, 12, 13, 14, 111, 112, 113, 114, 211, 212, 213, 214, 311, 312, 313, 314, 411, 412, 413, 414, 511, 512, 513, 514, 611, 612, 613, 614, 711, 712, 713, 714, 811, 812, 813, 814, 911, 912, 913, 914] + }, + { + "singular": "тредецілліон", + "few": "тредецілліони", + "plural": "тредецілліонів", + "useSingularEnding": true, + "useFewEnding": true, + "avoidEndingRules": [11, 12, 13, 14, 111, 112, 113, 114, 211, 212, 213, 214, 311, 312, 313, 314, 411, 412, 413, 414, 511, 512, 513, 514, 611, 612, 613, 614, 711, 712, 713, 714, 811, 812, 813, 814, 911, 912, 913, 914] + }, + { + "singular": "кватуордецілліон", + "few": "кватуордецілліони", + "plural": "кватуордецілліонів", + "useSingularEnding": true, + "useFewEnding": true, + "avoidEndingRules": [11, 12, 13, 14, 111, 112, 113, 114, 211, 212, 213, 214, 311, 312, 313, 314, 411, 412, 413, 414, 511, 512, 513, 514, 611, 612, 613, 614, 711, 712, 713, 714, 811, 812, 813, 814, 911, 912, 913, 914] + }, + { + "singular": "квіндецілліон", + "few": "квіндецілліони", + "plural": "квіндецілліонів", + "useSingularEnding": true, + "useFewEnding": true, + "avoidEndingRules": [11, 12, 13, 14, 111, 112, 113, 114, 211, 212, 213, 214, 311, 312, 313, 314, 411, 412, 413, 414, 511, 512, 513, 514, 611, 612, 613, 614, 711, 712, 713, 714, 811, 812, 813, 814, 911, 912, 913, 914] + } + ], + "unitExceptions": [] +} diff --git a/dist/i18n/vi.json b/dist/i18n/vi.json new file mode 100644 index 0000000..ea74315 --- /dev/null +++ b/dist/i18n/vi.json @@ -0,0 +1,50 @@ +{ + "useLongScale": false, + "baseSeparator": " ", + "unitSeparator": "và ", + "base": { + "0": "không", + "1": "một", + "2": "hai", + "3": "ba", + "4": "bốn", + "5": "năm", + "6": "sáu", + "7": "bảy", + "8": "tám", + "9": "chín", + "10": "mười", + "15": "mười lăm", + "20": "hai mươi", + "21": "hai mươi mốt", + "25": "hai mươi lăm", + "30": "ba mươi", + "31": "ba mươi mốt", + "40": "bốn mươi", + "41": "bốn mươi mốt", + "45": "bốn mươi lăm", + "50": "năm mươi", + "51": "năm mươi mốt", + "55": "năm mươi lăm", + "60": "sáu mươi", + "61": "sáu mươi mốt", + "65": "sáu mươi lăm", + "70": "bảy mươi", + "71": "bảy mươi mốt", + "75": "bảy mươi lăm", + "80": "tám mươi", + "81": "tám mươi mốt", + "85": "tám mươi lăm", + "90": "chín mươi", + "91": "chín mươi mốt", + "95": "chín mươi lăm" + }, + "units" : [ + "trăm", + "ngàn", + "triệu", + "tỷ", + "nghìn tỷ" + ], + "unitExceptions": [] +} \ No newline at end of file diff --git a/dist/index.js b/dist/index.js new file mode 100644 index 0000000..706eb00 --- /dev/null +++ b/dist/index.js @@ -0,0 +1,114 @@ +module.exports = +/******/ (function(modules) { // webpackBootstrap +/******/ // The module cache +/******/ var installedModules = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) { +/******/ return installedModules[moduleId].exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ i: moduleId, +/******/ l: false, +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); +/******/ +/******/ // Flag the module as loaded +/******/ module.l = true; +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = modules; +/******/ +/******/ // expose the module cache +/******/ __webpack_require__.c = installedModules; +/******/ +/******/ // define getter function for harmony exports +/******/ __webpack_require__.d = function(exports, name, getter) { +/******/ if(!__webpack_require__.o(exports, name)) { +/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); +/******/ } +/******/ }; +/******/ +/******/ // define __esModule on exports +/******/ __webpack_require__.r = function(exports) { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ +/******/ // create a fake namespace object +/******/ // mode & 1: value is a module id, require it +/******/ // mode & 2: merge all properties of value into the ns +/******/ // mode & 4: return value when already ns object +/******/ // mode & 8|1: behave like require +/******/ __webpack_require__.t = function(value, mode) { +/******/ if(mode & 1) value = __webpack_require__(value); +/******/ if(mode & 8) return value; +/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; +/******/ var ns = Object.create(null); +/******/ __webpack_require__.r(ns); +/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); +/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); +/******/ return ns; +/******/ }; +/******/ +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = function(module) { +/******/ var getter = module && module.__esModule ? +/******/ function getDefault() { return module['default']; } : +/******/ function getModuleExports() { return module; }; +/******/ __webpack_require__.d(getter, 'a', getter); +/******/ return getter; +/******/ }; +/******/ +/******/ // Object.prototype.hasOwnProperty.call +/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; +/******/ +/******/ // __webpack_public_path__ +/******/ __webpack_require__.p = ""; +/******/ +/******/ +/******/ // Load entry module and return exports +/******/ return __webpack_require__(__webpack_require__.s = "./lib/index.js"); +/******/ }) +/************************************************************************/ +/******/ ({ + +/***/ "./lib/index.js": +/*!**********************!*\ + !*** ./lib/index.js ***! + \**********************/ +/*! exports provided: WrittenNumber */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"WrittenNumber\", function() { return WrittenNumber; });\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utils */ \"./lib/utils.js\");\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(source, true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance\"); }\n\nfunction _iterableToArray(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \"[object Arguments]\") return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n\nvar shortScale = Object(_utils__WEBPACK_IMPORTED_MODULE_0__[\"generateShortScale\"])();\nvar longScale = Object(_utils__WEBPACK_IMPORTED_MODULE_0__[\"generateLongScale\"])();\nvar defaultParams = {\n noAnd: false,\n alternativeBase: null\n};\nvar WrittenNumber = function WrittenNumber() {\n var _this = this;\n\n var _options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n _classCallCheck(this, WrittenNumber);\n\n _defineProperty(this, \"setOptions\", function (options) {\n if (!options) throw new Error('WrittenNumber: you need to pass options of you want to change it');\n _this.options = Object(_utils__WEBPACK_IMPORTED_MODULE_0__[\"mergeFields\"])(options, defaultParams);\n });\n\n _defineProperty(this, \"convert\", function (number) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _this.options;\n var n = Math.round(+number);\n\n if (n < 0 || Number.isNaN(n)) {\n return '';\n }\n\n var language = options.language,\n noAnd = options.noAnd;\n\n var _this$_getUnitsAndSca = _this._getUnitsAndScale(),\n scale = _this$_getUnitsAndSca.scale,\n units = _this$_getUnitsAndSca.units;\n\n var baseCardinals = language.base;\n var alternativeBaseCardinals = options.alternativeBase ? language.alternativeBase[options.alternativeBase] : {};\n if (language.unitExceptions[n]) return language.unitExceptions[n];\n if (alternativeBaseCardinals[n]) return alternativeBaseCardinals[n];\n if (baseCardinals[n]) return baseCardinals[n];\n\n if (n < 100) {\n return _this.__handleSmallerThan100({\n number: number,\n language: language,\n baseCardinals: baseCardinals,\n alternativeBaseCardinals: alternativeBaseCardinals\n });\n }\n\n var m = n % 100;\n var ret = [];\n\n if (m) {\n if (noAnd && !(language.andException && language.andException[10])) {\n ret.push(_this.convert(m));\n } else {\n ret.push(language.unitSeparator + _this.convert(m));\n }\n }\n\n var firstSignificant;\n\n for (var i = 0, len = units.length; i < len; i += 1) {\n var r = Math.floor(n / scale[i]);\n var divideBy = void 0;\n if (i === len - 1) divideBy = 1000000;else divideBy = scale[i + 1] / scale[i];\n r %= divideBy;\n var unit = units[i]; // eslint-disable-next-line no-continue\n\n if (!r) continue;\n firstSignificant = scale[i];\n\n if (unit.useBaseInstead) {\n var shouldUseBaseException = unit.useBaseException.indexOf(r) > -1 && (unit.useBaseExceptionWhenNoTrailingNumbers ? i === 0 && ret.length : true);\n\n if (!shouldUseBaseException) {\n ret.push(alternativeBaseCardinals[r * scale[i]] || baseCardinals[r * scale[i]]);\n } else {\n ret.push(r > 1 && unit.plural ? unit.plural : unit.singular);\n } // eslint-disable-next-line no-continue\n\n\n continue;\n }\n\n var str = _this.__getStr({\n unit: unit,\n r: r,\n m: m\n });\n\n if (unit.avoidPrefixException && unit.avoidPrefixException.indexOf(r) > -1) {\n ret.push(str); // eslint-disable-next-line no-continue\n\n continue;\n }\n\n var exception = language.unitExceptions[r];\n\n var num = exception || _this.convert(r, Object(_utils__WEBPACK_IMPORTED_MODULE_0__[\"mergeFields\"])({\n // Languages with and exceptions need to set `noAnd` to false\n noAnd: !(language.andException && language.andException[r] || unit.andException) && true,\n alternativeBase: unit.useAlternativeBase\n }, _this.options));\n\n n -= r * scale[i];\n ret.push(\"\".concat(num, \" \").concat(str));\n }\n\n var firstSignificantN = firstSignificant * Math.floor(n / firstSignificant);\n var rest = n - firstSignificantN;\n\n if (language.andWhenTrailing && firstSignificant && rest > 0 && ret[0].indexOf(language.unitSeparator) !== 0) {\n ret = [ret[0], language.unitSeparator.replace(/\\s+$/, '')].concat(ret.slice(1));\n } // Languages that have separators for all cardinals.\n\n\n if (language.allSeparator) {\n for (var _i = 0; _i < ret.length - 1; _i += 1) {\n ret[_i] = language.allSeparator + ret[_i];\n }\n }\n\n return ret.reverse().join(' ');\n });\n\n _defineProperty(this, \"__getStr\", function (_ref) {\n var unit = _ref.unit,\n r = _ref.r,\n m = _ref.m;\n\n if (typeof unit === 'string') {\n return unit;\n }\n\n if (r === 1 || unit.useSingularEnding && r % 10 === 1 && (!unit.avoidEndingRules || unit.avoidEndingRules.indexOf(r) < 0)) {\n return unit.singular;\n }\n\n if (unit.few && (r > 1 && r < 5 || unit.useFewEnding && r % 10 > 1 && r % 10 < 5 && (!unit.avoidEndingRules || unit.avoidEndingRules.indexOf(r) < 0))) {\n return unit.few;\n }\n\n var str = unit.plural && (!unit.avoidInNumberPlural || !m) ? unit.plural : unit.singular; // Languages with dual\n\n str = r === 2 && unit.dual ? unit.dual : str; // \"restrictedPlural\" : use plural only for 3 to 10\n\n return r > 10 && unit.restrictedPlural ? unit.singular : str;\n });\n\n _defineProperty(this, \"_getUnitsAndScale\", function () {\n var _this$options$languag = _this.options.language,\n units = _this$options$languag.units,\n useLongScale = _this$options$languag.useLongScale;\n\n if (!(units instanceof Array)) {\n return Object.keys(units).reduce(function (acc, key) {\n return {\n scale: [].concat(_toConsumableArray(acc.scale), [Math.pow(10, parseInt(key, 10))]),\n units: [].concat(_toConsumableArray(acc.units), [units[key]])\n };\n }, {\n scale: [],\n units: []\n });\n }\n\n var scale = useLongScale ? longScale : shortScale;\n return {\n units: units,\n scale: scale\n };\n });\n\n _defineProperty(this, \"__handleSmallerThan100\", function (_ref2) {\n var number = _ref2.number,\n language = _ref2.language,\n baseCardinals = _ref2.baseCardinals,\n alternativeBaseCardinals = _ref2.alternativeBaseCardinals;\n var dec = Math.floor(number / 10) * 10;\n var unit = number - dec;\n\n if (unit) {\n return alternativeBaseCardinals[dec] || baseCardinals[dec] + language.baseSeparator + _this.convert(unit);\n }\n\n return alternativeBaseCardinals[dec] || baseCardinals[dec];\n });\n\n if (!_options.language) throw new Error('WrittenNumber: you need to pass your language object');\n this.options = _objectSpread({}, defaultParams, {}, _options);\n}\n/**\n * setOptions to WrittenNumber\n *\n * @param {Object} [options] An object representation of the options\n * @error {String} options wasn't passed\n */\n;\n\n//# sourceURL=webpack://written-number/./lib/index.js?"); + +/***/ }), + +/***/ "./lib/utils.js": +/*!**********************!*\ + !*** ./lib/utils.js ***! + \**********************/ +/*! exports provided: mergeFields, generateShortScale, generateLongScale */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"mergeFields\", function() { return mergeFields; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"generateShortScale\", function() { return generateShortScale; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"generateLongScale\", function() { return generateLongScale; });\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(source, true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n/**\n * Merges a set of default keys with a target object\n * (Like _.defaults, but will also extend onto null/undefined)\n *\n * @param {Object} [target] The object to extend\n * @param {Object} defs The object to default to\n * @return {Object} extendedTarget\n */\nfunction mergeFields(target, defs) {\n var targetObj = {};\n if (target) targetObj = target;\n return Object.keys(defs).reduce(function (acc, key) {\n return _objectSpread({}, acc, _defineProperty({}, key, targetObj[key] || defs[key]));\n }, {});\n}\nfunction generateShortScale() {\n var base = [100];\n\n for (var i = 1; i <= 16; i += 1) {\n // eslint-disable-next-line no-restricted-properties\n base.push(Math.pow(10, i * 3));\n }\n\n return base;\n}\nfunction generateLongScale() {\n var base = [100, 1000];\n\n for (var i = 1; i <= 15; i += 1) {\n // eslint-disable-next-line no-restricted-properties\n base.push(Math.pow(10, i * 6));\n }\n\n return base;\n}\n\n//# sourceURL=webpack://written-number/./lib/utils.js?"); + +/***/ }) + +/******/ }); \ No newline at end of file diff --git a/dist/written-number.js b/dist/written-number.js deleted file mode 100644 index e11bf5f..0000000 --- a/dist/written-number.js +++ /dev/null @@ -1,1903 +0,0 @@ -(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.writtenNumber = f()}})(function(){var define,module,exports;return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i -1 && - (unit.useBaseExceptionWhenNoTrailingNumbers - ? i === 0 && ret.length - : true); - if (!shouldUseBaseException) { - ret.push(alternativeBaseCardinals[r * scale[i]] || baseCardinals[r * scale[i]]); - } else { - ret.push(r > 1 && unit.plural ? unit.plural : unit.singular); - } - continue; - } - - var str; - if (typeof unit === "string") { - str = unit; - } else if (r === 1 || unit.useSingularEnding && r % 10 === 1 - && (!unit.avoidEndingRules || unit.avoidEndingRules.indexOf(r) < 0)) { - str = unit.singular; - } else if (unit.few && (r > 1 && r < 5 || unit.useFewEnding && r % 10 > 1 && r % 10 < 5 - && (!unit.avoidEndingRules || unit.avoidEndingRules.indexOf(r) < 0))) { - str = unit.few; - } else { - str = unit.plural && (!unit.avoidInNumberPlural || !m) - ? unit.plural - : unit.singular; - - // Languages with dual - str = (r === 2 && unit.dual) ? unit.dual : str; - - // "restrictedPlural" : use plural only for 3 to 10 - str = (r > 10 && unit.restrictedPlural) ? unit.singular : str; - } - - if ( - unit.avoidPrefixException && - unit.avoidPrefixException.indexOf(r) > -1 - ) { - ret.push(str); - continue; - } - - var exception = language.unitExceptions[r]; - var number = - exception || - writtenNumber( - r, - util.defaults( - { - // Languages with and exceptions need to set `noAnd` to false - noAnd: !((language.andException && language.andException[r]) || - unit.andException) && true, - alternativeBase: unit.useAlternativeBase - }, - options - ) - ); - n -= r * scale[i]; - ret.push(number + " " + str); - } - - var firstSignificantN = firstSignificant * Math.floor(n / firstSignificant); - var rest = n - firstSignificantN; - - if ( - language.andWhenTrailing && - firstSignificant && - 0 < rest && - ret[0].indexOf(language.unitSeparator) !== 0 - ) { - ret = [ret[0], language.unitSeparator.replace(/\s+$/, "")].concat( - ret.slice(1) - ); - } - - // Languages that have separators for all cardinals. - if (language.allSeparator) { - for (var j = 0; j < ret.length-1; j++) { - ret[j] = language.allSeparator + ret[j]; - } - } - var result = ret.reverse().join(" "); - return result; -} - -function handleSmallerThan100(n, language, unit, baseCardinals, alternativeBaseCardinals, options) { - var dec = Math.floor(n / 10) * 10; - unit = n - dec; - if (unit) { - return ( - alternativeBaseCardinals[dec] || baseCardinals[dec] + language.baseSeparator + writtenNumber(unit, options) - ); - } - return alternativeBaseCardinals[dec] || baseCardinals[dec]; -} - -},{"./i18n/ar.json":1,"./i18n/az.json":2,"./i18n/en-indian.json":3,"./i18n/en.json":4,"./i18n/eo.json":5,"./i18n/es.json":6,"./i18n/fr.json":7,"./i18n/hu.json":8,"./i18n/id.json":9,"./i18n/it.json":10,"./i18n/pt-PT.json":11,"./i18n/pt.json":12,"./i18n/ru.json":13,"./i18n/tr.json":14,"./i18n/uk.json":15,"./i18n/vi.json":16,"./util":18}],18:[function(require,module,exports){ -"use strict"; -/** - * Merges a set of default keys with a target object - * (Like _.defaults, but will also extend onto null/undefined) - * - * @param {Object} [target] The object to extend - * @param {Object} defaults The object to default to - * @return {Object} extendedTarget - */ - -function defaults(target, defs) { - if (target == null) target = {}; - var ret = {}; - var keys = Object.keys(defs); - for (var i = 0, len = keys.length; i < len; i++) { - var key = keys[i]; - ret[key] = target[key] || defs[key]; - } - return ret; -} -exports.defaults = defaults; - -},{}]},{},[17])(17) -}); diff --git a/dist/written-number.min.js b/dist/written-number.min.js deleted file mode 100644 index a1ab930..0000000 --- a/dist/written-number.min.js +++ /dev/null @@ -1 +0,0 @@ -!function(a){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=a();else if("function"==typeof define&&define.amd)define([],a);else{var b;b="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,b.writtenNumber=a()}}(function(){return function(){function a(b,c,d){function e(g,h){if(!c[g]){if(!b[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);var j=new Error("Cannot find module '"+g+"'");throw j.code="MODULE_NOT_FOUND",j}var k=c[g]={exports:{}};b[g][0].call(k.exports,function(a){return e(b[g][1][a]||a)},k,k.exports,a,b,c,d)}return c[g].exports}for(var f="function"==typeof require&&require,g=0;g-1&&(!j.useBaseExceptionWhenNoTrailingNumbers||0===o&&s.length);x?s.push(w>1&&j.plural?j.plural:j.singular):s.push(q[w*l[o]]||p[w*l[o]])}else{var y;if("string"==typeof j?y=j:1===w||j.useSingularEnding&&w%10==1&&(!j.avoidEndingRules||j.avoidEndingRules.indexOf(w)<0)?y=j.singular:j.few&&(w>1&&w<5||j.useFewEnding&&w%10>1&&w%10<5&&(!j.avoidEndingRules||j.avoidEndingRules.indexOf(w)<0))?y=j.few:(y=!j.plural||j.avoidInNumberPlural&&r?j.singular:j.plural,y=2===w&&j.dual?j.dual:y,y=w>10&&j.restrictedPlural?j.singular:y),j.avoidPrefixException&&j.avoidPrefixException.indexOf(w)>-1)s.push(y);else{var z=c.unitExceptions[w],A=z||d(w,f.defaults({noAnd:!(c.andException&&c.andException[w]||j.andException),alternativeBase:j.useAlternativeBase},b));a-=w*l[o],s.push(A+" "+y)}}}var B=t*Math.floor(a/t),C=a-B;if(c.andWhenTrailing&&t&&0 -1 + && (unit.useBaseExceptionWhenNoTrailingNumbers + ? i === 0 && ret.length + : true); + if (!shouldUseBaseException) { + ret.push(alternativeBaseCardinals[r * scale[i]] || baseCardinals[r * scale[i]]); + } else { + ret.push(r > 1 && unit.plural ? unit.plural : unit.singular); + } + // eslint-disable-next-line no-continue + continue; + } - if (!r) continue; - firstSignificant = scale[i]; + const str = this.__getStr({ unit, r, m }); - if (unit.useBaseInstead) { - var shouldUseBaseException = - unit.useBaseException.indexOf(r) > -1 && - (unit.useBaseExceptionWhenNoTrailingNumbers - ? i === 0 && ret.length - : true); - if (!shouldUseBaseException) { - ret.push(alternativeBaseCardinals[r * scale[i]] || baseCardinals[r * scale[i]]); - } else { - ret.push(r > 1 && unit.plural ? unit.plural : unit.singular); + if ( + unit.avoidPrefixException + && unit.avoidPrefixException.indexOf(r) > -1 + ) { + ret.push(str); + // eslint-disable-next-line no-continue + continue; } - continue; - } - var str; - if (typeof unit === "string") { - str = unit; - } else if (r === 1 || unit.useSingularEnding && r % 10 === 1 - && (!unit.avoidEndingRules || unit.avoidEndingRules.indexOf(r) < 0)) { - str = unit.singular; - } else if (unit.few && (r > 1 && r < 5 || unit.useFewEnding && r % 10 > 1 && r % 10 < 5 - && (!unit.avoidEndingRules || unit.avoidEndingRules.indexOf(r) < 0))) { - str = unit.few; - } else { - str = unit.plural && (!unit.avoidInNumberPlural || !m) - ? unit.plural - : unit.singular; - - // Languages with dual - str = (r === 2 && unit.dual) ? unit.dual : str; - - // "restrictedPlural" : use plural only for 3 to 10 - str = (r > 10 && unit.restrictedPlural) ? unit.singular : str; + const exception = language.unitExceptions[r]; + const num = exception + || this.convert( + r, + mergeFields( + { + // Languages with and exceptions need to set `noAnd` to false + noAnd: !((language.andException && language.andException[r]) + || unit.andException) && true, + alternativeBase: unit.useAlternativeBase, + }, + this.options, + ), + ); + n -= r * scale[i]; + ret.push(`${num} ${str}`); } + const firstSignificantN = firstSignificant * Math.floor(n / firstSignificant); + const rest = n - firstSignificantN; + if ( - unit.avoidPrefixException && - unit.avoidPrefixException.indexOf(r) > -1 + language.andWhenTrailing + && firstSignificant + && rest > 0 + && ret[0].indexOf(language.unitSeparator) !== 0 ) { - ret.push(str); - continue; + ret = [ret[0], language.unitSeparator.replace(/\s+$/, '')].concat( + ret.slice(1), + ); } - var exception = language.unitExceptions[r]; - var number = - exception || - writtenNumber( - r, - util.defaults( - { - // Languages with and exceptions need to set `noAnd` to false - noAnd: !((language.andException && language.andException[r]) || - unit.andException) && true, - alternativeBase: unit.useAlternativeBase - }, - options - ) - ); - n -= r * scale[i]; - ret.push(number + " " + str); + // Languages that have separators for all cardinals. + if (language.allSeparator) { + for (let i = 0; i < ret.length - 1; i += 1) { + ret[i] = language.allSeparator + ret[i]; + } + } + return ret.reverse().join(' '); } - var firstSignificantN = firstSignificant * Math.floor(n / firstSignificant); - var rest = n - firstSignificantN; - - if ( - language.andWhenTrailing && - firstSignificant && - 0 < rest && - ret[0].indexOf(language.unitSeparator) !== 0 - ) { - ret = [ret[0], language.unitSeparator.replace(/\s+$/, "")].concat( - ret.slice(1) - ); + __getStr({ unit, r, m }) { + if (typeof unit === 'string') { + return unit; + } + if (r === 1 || (unit.useSingularEnding && r % 10 === 1 + && (!unit.avoidEndingRules || unit.avoidEndingRules.indexOf(r) < 0))) { + return unit.singular; + } + if (unit.few && ((r > 1 && r < 5) || (unit.useFewEnding && r % 10 > 1 && r % 10 < 5 + && (!unit.avoidEndingRules || unit.avoidEndingRules.indexOf(r) < 0)))) { + return unit.few; + } + let str = unit.plural && (!unit.avoidInNumberPlural || !m) + ? unit.plural + : unit.singular; + + // Languages with dual + str = (r === 2 && unit.dual) ? unit.dual : str; + + // "restrictedPlural" : use plural only for 3 to 10 + return (r > 10 && unit.restrictedPlural) ? unit.singular : str; } - - // Languages that have separators for all cardinals. - if (language.allSeparator) { - for (var j = 0; j < ret.length-1; j++) { - ret[j] = language.allSeparator + ret[j]; + + __getUnitsAndScale() { + const { language: { units, useLongScale } } = this.options; + if (!(units instanceof Array)) { + return Object.keys(units).reduce((acc, key) => ({ + scale: [...acc.scale, Math.pow(10, parseInt(key, 10))], + units: [...acc.units, units[key]], + }), { scale: [], units: [] }); } + + const scale = useLongScale ? longScale : shortScale; + return { units, scale }; } - var result = ret.reverse().join(" "); - return result; -} -function handleSmallerThan100(n, language, unit, baseCardinals, alternativeBaseCardinals, options) { - var dec = Math.floor(n / 10) * 10; - unit = n - dec; - if (unit) { - return ( - alternativeBaseCardinals[dec] || baseCardinals[dec] + language.baseSeparator + writtenNumber(unit, options) - ); + __handleSmallerThan100({ + number, language, baseCardinals, alternativeBaseCardinals, + }) { + const dec = Math.floor(number / 10) * 10; + const unit = number - dec; + if (unit) { + return ( + alternativeBaseCardinals[dec] + || (baseCardinals[dec] + language.baseSeparator + this.convert(unit)) + ); + } + return alternativeBaseCardinals[dec] || baseCardinals[dec]; } - return alternativeBaseCardinals[dec] || baseCardinals[dec]; } diff --git a/lib/util.js b/lib/util.js deleted file mode 100644 index 01e14fb..0000000 --- a/lib/util.js +++ /dev/null @@ -1,21 +0,0 @@ -"use strict"; -/** - * Merges a set of default keys with a target object - * (Like _.defaults, but will also extend onto null/undefined) - * - * @param {Object} [target] The object to extend - * @param {Object} defaults The object to default to - * @return {Object} extendedTarget - */ - -function defaults(target, defs) { - if (target == null) target = {}; - var ret = {}; - var keys = Object.keys(defs); - for (var i = 0, len = keys.length; i < len; i++) { - var key = keys[i]; - ret[key] = target[key] || defs[key]; - } - return ret; -} -exports.defaults = defaults; diff --git a/lib/utils.js b/lib/utils.js new file mode 100644 index 0000000..6bffad7 --- /dev/null +++ b/lib/utils.js @@ -0,0 +1,38 @@ + + +/** + * Merges a set of default keys with a target object + * (Like _.defaults, but will also extend onto null/undefined) + * + * @param {Object} [target] The object to extend + * @param {Object} defs The object to default to + * @return {Object} extendedTarget + */ + +export function mergeFields(target, defs) { + let targetObj = {}; + if (target) targetObj = target; + return Object.keys(defs).reduce((acc, key) => ({ + ...acc, + [key]: targetObj[key] || defs[key], + }), {}); +} + +export function generateShortScale() { + const base = [100]; + for (let i = 1; i <= 16; i += 1) { + // eslint-disable-next-line no-restricted-properties + base.push(Math.pow(10, i * 3)); + } + return base; +} + +export function generateLongScale() { + const base = [100, 1000]; + for (let i = 1; i <= 15; i += 1) { + // eslint-disable-next-line no-restricted-properties + base.push(Math.pow(10, i * 6)); + } + + return base; +} diff --git a/package.json b/package.json index e2d2597..a832dd2 100644 --- a/package.json +++ b/package.json @@ -1,10 +1,13 @@ { "name": "written-number", - "version": "0.11.0", + "version": "1.0.1-beta", "description": "Convert numbers to words - their written form.", "main": "lib/index.js", "scripts": { - "test": " mocha --require blanket -R mocha-spec-cov-alt" + "build": "webpack --display-error-details", + "lint": "eslint ./", + "lint:fix": "npm run lint -- --fix", + "test": "nyc mocha --compilers js:@babel/register -R mocha-spec-cov-alt" }, "keywords": [ "written", @@ -24,30 +27,23 @@ "url": "https://github.com/yamadapc/js-written-number" }, "devDependencies": { - "blanket": "1.1.7", - "grunt": "^1.0.3", - "grunt-browserify": "^5.3.0", - "grunt-cli": "^1.2.0", - "grunt-contrib-clean": "^1.1.0", - "grunt-contrib-uglify": "^2.3.0", + "@babel/core": "^7.5.5", + "@babel/plugin-proposal-class-properties": "^7.5.5", + "@babel/preset-env": "^7.5.5", + "@babel/register": "^7.5.5", + "babel-eslint": "^10.0.2", + "babel-loader": "^8.0.6", + "clean-webpack-plugin": "^3.0.0", + "copy-webpack-plugin": "^5.0.3", + "eslint": "^6.0.1", + "eslint-config-airbnb-base": "^13.2.0", + "eslint-plugin-import": "^2.18.2", "mocha": "^3.5.3", "mocha-spec-cov-alt": "^1.1.1", "mversion": "^1.10.0", - "should": "^11.2.1" - }, - "config": { - "blanket": { - "data-cover-never": [ - "node_modules" - ], - "pattern": [ - "lib" - ], - "spec-cov": { - "threshold": 80, - "localThreshold": 80, - "lcovOutput": "lcov" - } - } + "nyc": "^14.1.1", + "should": "^11.2.1", + "webpack": "^4.36.1", + "webpack-cli": "^3.3.6" } } diff --git a/test/index.test.js b/test/index.test.js index 3175a1e..271e464 100644 --- a/test/index.test.js +++ b/test/index.test.js @@ -1,985 +1,923 @@ -"use strict" /* global describe, it, before */; -var should = require("should"); -var writtenNumber = require(".."); - -describe("written-number", function () { - - describe("writtenNumber(n, { lang: 'zzz', ... })", function () { - before(function () { - writtenNumber.defaults.lang = ""; - }); - - it("gets exposed", function () { - should.exist(writtenNumber); - writtenNumber.should.be.instanceof(Function); - }); - - it("defaults to english on wrong language", function () { - writtenNumber(1, { lang: 'zzz' }).should.equal("one"); +import should from 'should'; +import { WrittenNumber } from '../lib'; +import { + Ar, + Az, + En, + EnIndian, + Es, + Fr, + Id, + It, + Pt, + PtPt, + Ru, + Tr, + Uk, +} from '../lib/i18n'; + +describe('written-number', () => { + describe('writtenNumber initialization and setOptions', () => { + it("throw an error if user didn't pass a language in constructor", () => { + (() => new WrittenNumber()).should.throw('WrittenNumber: you need to pass your language object'); + }); + + it("throw an error if user didn't pass new options for setOptions", () => { + const Converter = new WrittenNumber({ language: En }); + (() => Converter.setOptions()).should.throw('WrittenNumber: you need to pass options of you want to change it'); + }); + + it("setOptions: if user passed options change it in class", () => { + const Converter = new WrittenNumber({ language: En }); + should.deepEqual(Converter.options, { + noAnd: false, + alternativeBase: null, + language: En, + }); + Converter.setOptions({language: Es, noAnd: true, }); + should.deepEqual(Converter.options, { + alternativeBase: null, + language: Es, + noAnd: true, + }); }); }); - describe("writtenNumber(n, { lang: 'en', ... })", function () { - before(function () { - writtenNumber.defaults.lang = "en"; - }); - - it("gets exposed", function () { - should.exist(writtenNumber); - writtenNumber.should.be.instanceof(Function); - }); + describe("writtenNumber: 'En' language", () => { + const Converter = new WrittenNumber({ language: En }); - it("negative numbers return \"\"", function () { - writtenNumber(-3).should.equal(""); - writtenNumber(-5).should.equal(""); + it('negative numbers return ""', () => { + Converter.convert(-3).should.equal(''); + Converter.convert(-5).should.equal(''); }); - it("doesn't blow up weirdly with invalid input", function () { - writtenNumber("asdfasdfasdf").should.equal(""); - writtenNumber("0.as").should.equal(""); - writtenNumber("0.123").should.equal("zero"); - writtenNumber("0.8").should.equal("one"); - writtenNumber("2.8").should.equal("three"); - writtenNumber("asdf.8").should.equal(""); - writtenNumber("120391938123..").should.equal(""); - writtenNumber("1000000000.123").should.equal("one billion"); - writtenNumber("1/3").should.equal(""); - writtenNumber(1 / 3).should.equal("zero"); - writtenNumber("1/2").should.equal(""); - writtenNumber("1.123/2").should.equal(""); + it("doesn't blow up weirdly with invalid input", () => { + Converter.convert('asdfasdfasdf').should.equal(''); + Converter.convert('0.as').should.equal(''); + Converter.convert('0.123').should.equal('zero'); + Converter.convert('0.8').should.equal('one'); + Converter.convert('2.8').should.equal('three'); + Converter.convert('asdf.8').should.equal(''); + Converter.convert('120391938123..').should.equal(''); + Converter.convert('1000000000.123').should.equal('one billion'); + Converter.convert('1/3').should.equal(''); + Converter.convert(1 / 3).should.equal('zero'); + Converter.convert('1/2').should.equal(''); + Converter.convert('1.123/2').should.equal(''); }); - it("correctly converts numbers < 10", function () { - writtenNumber(1000000000).should.equal("one billion"); - writtenNumber(3).should.equal("three"); - writtenNumber(8).should.equal("eight"); + it('correctly converts numbers < 10', () => { + Converter.convert(1000000000).should.equal('one billion'); + Converter.convert(3).should.equal('three'); + Converter.convert(8).should.equal('eight'); }); - it("correctly converts numbers < 20", function () { - writtenNumber(13).should.equal("thirteen"); - writtenNumber(19).should.equal("nineteen"); + it('correctly converts numbers < 20', () => { + Converter.convert(13).should.equal('thirteen'); + Converter.convert(19).should.equal('nineteen'); }); - it("correctly converts numbers < 100", function () { - writtenNumber(20).should.equal("twenty"); - writtenNumber(25).should.equal("twenty-five"); - writtenNumber(88).should.equal("eighty-eight"); - writtenNumber(73).should.equal("seventy-three"); + it('correctly converts numbers < 100', () => { + Converter.convert(20).should.equal('twenty'); + Converter.convert(25).should.equal('twenty-five'); + Converter.convert(88).should.equal('eighty-eight'); + Converter.convert(73).should.equal('seventy-three'); }); - it("correctly converts numbers < 1000", function () { - writtenNumber(200).should.equal("two hundred"); - writtenNumber(242).should.equal("two hundred and forty-two"); - writtenNumber(1234).should.equal( - "one thousand two hundred and thirty-four" + it('correctly converts numbers < 1000', () => { + Converter.convert(200).should.equal('two hundred'); + Converter.convert(242).should.equal('two hundred and forty-two'); + Converter.convert(1234).should.equal( + 'one thousand two hundred and thirty-four', ); - writtenNumber(4323).should.equal( - "four thousand three hundred and twenty-three" + Converter.convert(4323).should.equal( + 'four thousand three hundred and twenty-three', ); }); - it("correctly converts numbers > 1000", function () { - writtenNumber(4323000).should.equal( - "four million three hundred twenty-three thousand" + it('correctly converts numbers > 1000', () => { + Converter.convert(4323000).should.equal( + 'four million three hundred twenty-three thousand', ); - writtenNumber(4323055).should.equal( - "four million three hundred twenty-three thousand and fifty-five" + Converter.convert(4323055).should.equal( + 'four million three hundred twenty-three thousand and fifty-five', ); - writtenNumber(1570025).should.equal( - "one million five hundred seventy thousand and twenty-five" + Converter.convert(1570025).should.equal( + 'one million five hundred seventy thousand and twenty-five', ); }); - it("correctly converts numbers > 1 000 000 000", function () { - writtenNumber(1000000000).should.equal("one billion"); - writtenNumber(2580000000).should.equal( - "two billion five hundred eighty million" + it('correctly converts numbers > 1 000 000 000', () => { + Converter.convert(1000000000).should.equal('one billion'); + Converter.convert(2580000000).should.equal( + 'two billion five hundred eighty million', ); - writtenNumber(1000000000000).should.equal("one trillion"); - writtenNumber(3627000000000).should.equal( - "three trillion six hundred twenty-seven billion" + Converter.convert(1000000000000).should.equal('one trillion'); + Converter.convert(3627000000000).should.equal( + 'three trillion six hundred twenty-seven billion', ); }); }); - describe("writtenNumber(n, { lang: 'es', ... })", function () { - before(function () { - writtenNumber.defaults.lang = "es"; - }); - - it("gets exposed", function () { - should.exist(writtenNumber); - writtenNumber.should.be.instanceof(Function); - }); + describe("writtenNumber: 'Es' language", () => { + const Converter = new WrittenNumber({ language: Es }); - it("correctly converts numbers < 10", function () { - writtenNumber(1).should.equal("uno"); - writtenNumber(3).should.equal("tres"); - writtenNumber(8).should.equal("ocho"); + it('correctly converts numbers < 10', () => { + Converter.convert(1).should.equal('uno'); + Converter.convert(3).should.equal('tres'); + Converter.convert(8).should.equal('ocho'); }); - it("correctly converts numbers < 20", function () { - writtenNumber(13).should.equal("trece"); - writtenNumber(16).should.equal("dieciséis"); - writtenNumber(19).should.equal("diecinueve"); + it('correctly converts numbers < 20', () => { + Converter.convert(13).should.equal('trece'); + Converter.convert(16).should.equal('dieciséis'); + Converter.convert(19).should.equal('diecinueve'); }); - it("correctly converts numbers < 100", function () { - writtenNumber(20).should.equal("veinte"); - writtenNumber(25).should.equal("veinticinco"); - writtenNumber(88).should.equal("ochenta y ocho"); - writtenNumber(73).should.equal("setenta y tres"); + it('correctly converts numbers < 100', () => { + Converter.convert(20).should.equal('veinte'); + Converter.convert(25).should.equal('veinticinco'); + Converter.convert(88).should.equal('ochenta y ocho'); + Converter.convert(73).should.equal('setenta y tres'); }); - it("correctly converts numbers < 1000", function () { - writtenNumber(144).should.equal("ciento cuarenta y cuatro"); - writtenNumber(200).should.equal("doscientos"); - writtenNumber(1234).should.equal("mil doscientos treinta y cuatro"); - writtenNumber(4323).should.equal("cuatro mil trescientos veintitrés"); - writtenNumber(242).should.equal("doscientos cuarenta y dos"); + it('correctly converts numbers < 1000', () => { + Converter.convert(144).should.equal('ciento cuarenta y cuatro'); + Converter.convert(200).should.equal('doscientos'); + Converter.convert(1234).should.equal('mil doscientos treinta y cuatro'); + Converter.convert(4323).should.equal('cuatro mil trescientos veintitrés'); + Converter.convert(242).should.equal('doscientos cuarenta y dos'); }); - it("correctly converts numbers > 1000", function () { - writtenNumber(4323000).should.equal( - "cuatro millones trescientos veintitrés mil" + it('correctly converts numbers > 1000', () => { + Converter.convert(4323000).should.equal( + 'cuatro millones trescientos veintitrés mil', ); - writtenNumber(4323055).should.equal( - "cuatro millones trescientos veintitrés mil cincuenta y cinco" + Converter.convert(4323055).should.equal( + 'cuatro millones trescientos veintitrés mil cincuenta y cinco', ); - writtenNumber(1570025).should.equal( - "uno millón quinientos setenta mil veinticinco" + Converter.convert(1570025).should.equal( + 'uno millón quinientos setenta mil veinticinco', ); }); - it("correctly converts numbers > 1 000 000 000", function () { - writtenNumber(1000000000).should.equal("mil millones"); - writtenNumber(2580000000).should.equal( - "dos mil quinientos ochenta millones" + it('correctly converts numbers > 1 000 000 000', () => { + Converter.convert(1000000000).should.equal('mil millones'); + Converter.convert(2580000000).should.equal( + 'dos mil quinientos ochenta millones', ); - writtenNumber(1000000000000).should.equal("un billón"); - writtenNumber(3627000000000).should.equal( - "tres billones seiscientos veintisiete mil millones" + Converter.convert(1000000000000).should.equal('un billón'); + Converter.convert(3627000000000).should.equal( + 'tres billones seiscientos veintisiete mil millones', ); }); }); - describe("writtenNumber(n, { lang: 'pt', ... })", function () { - before(function () { - writtenNumber.defaults.lang = "pt"; - }); - - it("gets exposed", function () { - should.exist(writtenNumber); - writtenNumber.should.be.instanceof(Function); - }); + describe("writtenNumber: 'Pt' language", () => { + const Converter = new WrittenNumber({ language: Pt }); - it("correctly converts numbers < 10", function () { - writtenNumber(3).should.equal("três"); - writtenNumber(8).should.equal("oito"); + it('correctly converts numbers < 10', () => { + Converter.convert(3).should.equal('três'); + Converter.convert(8).should.equal('oito'); }); - it("correctly converts numbers < 20", function () { - writtenNumber(13).should.equal("treze"); - writtenNumber(19).should.equal("dezenove"); + it('correctly converts numbers < 20', () => { + Converter.convert(13).should.equal('treze'); + Converter.convert(19).should.equal('dezenove'); }); - it("correctly converts numbers < 100", function () { - writtenNumber(20).should.equal("vinte"); - writtenNumber(25).should.equal("vinte e cinco"); - writtenNumber(88).should.equal("oitenta e oito"); - writtenNumber(73).should.equal("setenta e três"); + it('correctly converts numbers < 100', () => { + Converter.convert(20).should.equal('vinte'); + Converter.convert(25).should.equal('vinte e cinco'); + Converter.convert(88).should.equal('oitenta e oito'); + Converter.convert(73).should.equal('setenta e três'); }); - it("correctly converts numbers < 1000", function () { - writtenNumber(144).should.equal("cento e quarenta e quatro"); - writtenNumber(200).should.equal("duzentos"); - writtenNumber(1234).should.equal("mil duzentos e trinta e quatro"); - writtenNumber(4323).should.equal("quatro mil trezentos e vinte e três"); - writtenNumber(242).should.equal("duzentos e quarenta e dois"); + it('correctly converts numbers < 1000', () => { + Converter.convert(144).should.equal('cento e quarenta e quatro'); + Converter.convert(200).should.equal('duzentos'); + Converter.convert(1234).should.equal('mil duzentos e trinta e quatro'); + Converter.convert(4323).should.equal('quatro mil trezentos e vinte e três'); + Converter.convert(242).should.equal('duzentos e quarenta e dois'); }); - it("correctly converts numbers > 1000", function () { - writtenNumber(4323000).should.equal( - "quatro milhões trezentos e vinte e três mil" + it('correctly converts numbers > 1000', () => { + Converter.convert(4323000).should.equal( + 'quatro milhões trezentos e vinte e três mil', ); - writtenNumber(4323055).should.equal( - "quatro milhões trezentos e vinte e três mil e cinquenta e cinco" + Converter.convert(4323055).should.equal( + 'quatro milhões trezentos e vinte e três mil e cinquenta e cinco', ); - writtenNumber(1570025).should.equal( - "um milhão quinhentos e setenta mil e vinte e cinco" + Converter.convert(1570025).should.equal( + 'um milhão quinhentos e setenta mil e vinte e cinco', ); }); - it("works for 14101 (https://github.com/yamadapc/js-written-number/issues/38)", function () { - writtenNumber(14101).should.equal("catorze mil cento e um"); + it('works for 14101 (https://github.com/yamadapc/js-written-number/issues/38)', () => { + Converter.convert(14101).should.equal('catorze mil cento e um'); }); - it("works for 14201 (https://github.com/yamadapc/js-written-number/issues/38)", function () { - writtenNumber(14201).should.equal("catorze mil duzentos e um"); + it('works for 14201 (https://github.com/yamadapc/js-written-number/issues/38)', () => { + Converter.convert(14201).should.equal('catorze mil duzentos e um'); }); - it("works for 1001000 (https://github.com/yamadapc/js-written-number/issues/38)", function () { - writtenNumber(1001000).should.equal("um milhão e mil"); + it('works for 1001000 (https://github.com/yamadapc/js-written-number/issues/38)', () => { + Converter.convert(1001000).should.equal('um milhão e mil'); }); - it("works for 1001200 (https://github.com/yamadapc/js-written-number/issues/38)", function () { - writtenNumber(1001200).should.equal("um milhão mil e duzentos"); + it('works for 1001200 (https://github.com/yamadapc/js-written-number/issues/38)', () => { + Converter.convert(1001200).should.equal('um milhão mil e duzentos'); }); - it("works for 14200 (https://github.com/yamadapc/js-written-number/issues/38)", function () { - writtenNumber(14200).should.equal("catorze mil e duzentos"); + it('works for 14200 (https://github.com/yamadapc/js-written-number/issues/38)', () => { + Converter.convert(14200).should.equal('catorze mil e duzentos'); }); - it("works for 14100 (https://github.com/yamadapc/js-written-number/issues/38)", function () { - writtenNumber(14100).should.equal("catorze mil e cem"); + it('works for 14100 (https://github.com/yamadapc/js-written-number/issues/38)', () => { + Converter.convert(14100).should.equal('catorze mil e cem'); }); - it("correctly converts numbers > 1 000 000 000", function () { - writtenNumber(1000000000).should.equal("um bilhão"); - writtenNumber(2580000000).should.equal( - "dois bilhões quinhentos e oitenta milhões" + it('correctly converts numbers > 1 000 000 000', () => { + Converter.convert(1000000000).should.equal('um bilhão'); + Converter.convert(2580000000).should.equal( + 'dois bilhões quinhentos e oitenta milhões', ); - writtenNumber(1000000000000000).should.equal("um quadrilhão"); - writtenNumber(3627000000000).should.equal( - "três trilhões seiscentos e vinte e sete bilhões" + Converter.convert(1000000000000000).should.equal('um quadrilhão'); + Converter.convert(3627000000000).should.equal( + 'três trilhões seiscentos e vinte e sete bilhões', ); }); }); - describe("writtenNumber(n, { lang: 'ptPT', ... })", function () { - before(function () { - writtenNumber.defaults.lang = "ptPT"; - }); + describe("writtenNumber: 'ptPT' language", () => { + const Converter = new WrittenNumber({ language: PtPt }); - it("gets exposed", function () { - should.exist(writtenNumber); - writtenNumber.should.be.instanceof(Function); + it('correctly converts numbers < 10', () => { + Converter.convert(3).should.equal('três'); + Converter.convert(8).should.equal('oito'); }); - it("correctly converts numbers < 10", function () { - writtenNumber(3).should.equal("três"); - writtenNumber(8).should.equal("oito"); + it('correctly converts numbers < 20', () => { + Converter.convert(13).should.equal('treze'); + Converter.convert(19).should.equal('dezanove'); }); - it("correctly converts numbers < 20", function () { - writtenNumber(13).should.equal("treze"); - writtenNumber(19).should.equal("dezanove"); + it('correctly converts numbers < 100', () => { + Converter.convert(20).should.equal('vinte'); + Converter.convert(25).should.equal('vinte e cinco'); + Converter.convert(88).should.equal('oitenta e oito'); + Converter.convert(73).should.equal('setenta e três'); }); - it("correctly converts numbers < 100", function () { - writtenNumber(20).should.equal("vinte"); - writtenNumber(25).should.equal("vinte e cinco"); - writtenNumber(88).should.equal("oitenta e oito"); - writtenNumber(73).should.equal("setenta e três"); + it('correctly converts numbers < 1000', () => { + Converter.convert(144).should.equal('cento e quarenta e quatro'); + Converter.convert(200).should.equal('duzentos'); + Converter.convert(1234).should.equal('mil duzentos e trinta e quatro'); + Converter.convert(4323).should.equal('quatro mil trezentos e vinte e três'); + Converter.convert(242).should.equal('duzentos e quarenta e dois'); }); - it("correctly converts numbers < 1000", function () { - writtenNumber(144).should.equal("cento e quarenta e quatro"); - writtenNumber(200).should.equal("duzentos"); - writtenNumber(1234).should.equal("mil duzentos e trinta e quatro"); - writtenNumber(4323).should.equal("quatro mil trezentos e vinte e três"); - writtenNumber(242).should.equal("duzentos e quarenta e dois"); - }); - - it("correctly converts numbers > 1000", function () { - writtenNumber(4323000).should.equal( - "quatro milhões trezentos e vinte e três mil" + it('correctly converts numbers > 1000', () => { + Converter.convert(4323000).should.equal( + 'quatro milhões trezentos e vinte e três mil', ); - writtenNumber(4323055).should.equal( - "quatro milhões trezentos e vinte e três mil e cinquenta e cinco" + Converter.convert(4323055).should.equal( + 'quatro milhões trezentos e vinte e três mil e cinquenta e cinco', ); - writtenNumber(1570025).should.equal( - "um milhão quinhentos e setenta mil e vinte e cinco" + Converter.convert(1570025).should.equal( + 'um milhão quinhentos e setenta mil e vinte e cinco', ); }); - it("works for 14101 (https://github.com/yamadapc/js-written-number/issues/38)", function () { - writtenNumber(14101).should.equal("catorze mil cento e um"); + it('works for 14101 (https://github.com/yamadapc/js-written-number/issues/38)', () => { + Converter.convert(14101).should.equal('catorze mil cento e um'); }); - it("works for 14201 (https://github.com/yamadapc/js-written-number/issues/38)", function () { - writtenNumber(14201).should.equal("catorze mil duzentos e um"); + it('works for 14201 (https://github.com/yamadapc/js-written-number/issues/38)', () => { + Converter.convert(14201).should.equal('catorze mil duzentos e um'); }); - it("works for 1001000 (https://github.com/yamadapc/js-written-number/issues/38)", function () { - writtenNumber(1001000).should.equal("um milhão e mil"); + it('works for 1001000 (https://github.com/yamadapc/js-written-number/issues/38)', () => { + Converter.convert(1001000).should.equal('um milhão e mil'); }); - it("works for 1001200 (https://github.com/yamadapc/js-written-number/issues/38)", function () { - writtenNumber(1001200).should.equal("um milhão mil e duzentos"); + it('works for 1001200 (https://github.com/yamadapc/js-written-number/issues/38)', () => { + Converter.convert(1001200).should.equal('um milhão mil e duzentos'); }); - it("works for 14200 (https://github.com/yamadapc/js-written-number/issues/38)", function () { - writtenNumber(14200).should.equal("catorze mil e duzentos"); + it('works for 14200 (https://github.com/yamadapc/js-written-number/issues/38)', () => { + Converter.convert(14200).should.equal('catorze mil e duzentos'); }); - it("works for 14100 (https://github.com/yamadapc/js-written-number/issues/38)", function () { - writtenNumber(14100).should.equal("catorze mil e cem"); + it('works for 14100 (https://github.com/yamadapc/js-written-number/issues/38)', () => { + Converter.convert(14100).should.equal('catorze mil e cem'); }); - it("correctly converts numbers > 1 000 000 000", function () { - writtenNumber(1000000000).should.equal("mil milhões"); - writtenNumber(2580000000).should.equal( - "dois mil quinhentos e oitenta milhões" + it('correctly converts numbers > 1 000 000 000', () => { + Converter.convert(1000000000).should.equal('mil milhões'); + Converter.convert(2580000000).should.equal( + 'dois mil quinhentos e oitenta milhões', ); - writtenNumber(1000000000000000).should.equal("mil biliões"); - writtenNumber(3627000000000).should.equal( - "três biliões seiscentos e vinte e sete mil milhões" + Converter.convert(1000000000000000).should.equal('mil biliões'); + Converter.convert(3627000000000).should.equal( + 'três biliões seiscentos e vinte e sete mil milhões', ); }); }); - describe("writtenNumber(n, { lang: 'fr', ... })", function () { - before(function () { - writtenNumber.defaults.lang = "fr"; - }); + describe("writtenNumber: 'Fr' language", () => { + const Converter = new WrittenNumber({ language: Fr }); - it("gets exposed", function () { - should.exist(writtenNumber); - writtenNumber.should.be.instanceof(Function); + it('correctly converts numbers < 10', () => { + Converter.convert(0).should.equal('zéro'); + Converter.convert(3).should.equal('trois'); + Converter.convert(8).should.equal('huit'); }); - it("correctly converts numbers < 10", function () { - writtenNumber(0).should.equal("zéro"); - writtenNumber(3).should.equal("trois"); - writtenNumber(8).should.equal("huit"); + it('correctly converts numbers < 20', () => { + Converter.convert(13).should.equal('treize'); + Converter.convert(19).should.equal('dix-neuf'); }); - it("correctly converts numbers < 20", function () { - writtenNumber(13).should.equal("treize"); - writtenNumber(19).should.equal("dix-neuf"); + it('correctly converts numbers < 100', () => { + Converter.convert(20).should.equal('vingt'); + Converter.convert(25).should.equal('vingt-cinq'); + Converter.convert(73).should.equal('soixante-treize'); + Converter.convert(80).should.equal('quatre-vingts'); + Converter.convert(88).should.equal('quatre-vingt-huit'); + Converter.convert(90).should.equal('quatre-vingt-dix'); + Converter.convert(91).should.equal('quatre-vingt-onze'); }); - it("correctly converts numbers < 100", function () { - writtenNumber(20).should.equal("vingt"); - writtenNumber(25).should.equal("vingt-cinq"); - writtenNumber(73).should.equal("soixante-treize"); - writtenNumber(80).should.equal("quatre-vingts"); - writtenNumber(88).should.equal("quatre-vingt-huit"); - writtenNumber(90).should.equal("quatre-vingt-dix"); - writtenNumber(91).should.equal("quatre-vingt-onze"); + it('correctly converts numbers < 1000', () => { + Converter.convert(100).should.equal('cent'); + Converter.convert(110).should.equal('cent dix'); + Converter.convert(200).should.equal('deux cents'); + Converter.convert(242).should.equal('deux cent quarante-deux'); }); - it("correctly converts numbers < 1000", function () { - writtenNumber(100).should.equal("cent"); - writtenNumber(110).should.equal("cent dix"); - writtenNumber(200).should.equal("deux cents"); - writtenNumber(242).should.equal("deux cent quarante-deux"); - }); - - it("correctly converts numbers > 1000", function () { - writtenNumber(1234).should.equal("mille deux cent trente-quatre"); - writtenNumber(4000).should.equal("quatre mille"); - writtenNumber(4323).should.equal("quatre mille trois cent vingt-trois"); - writtenNumber(1000000).should.equal("un million"); - writtenNumber(2000000).should.equal("deux millions"); - writtenNumber(2000001).should.equal("deux millions un"); - writtenNumber(4323000).should.equal( - "quatre millions trois cent vingt-trois mille" + it('correctly converts numbers > 1000', () => { + Converter.convert(1234).should.equal('mille deux cent trente-quatre'); + Converter.convert(4000).should.equal('quatre mille'); + Converter.convert(4323).should.equal('quatre mille trois cent vingt-trois'); + Converter.convert(1000000).should.equal('un million'); + Converter.convert(2000000).should.equal('deux millions'); + Converter.convert(2000001).should.equal('deux millions un'); + Converter.convert(4323000).should.equal( + 'quatre millions trois cent vingt-trois mille', ); - writtenNumber(4323055).should.equal( - "quatre millions trois cent vingt-trois mille cinquante-cinq" + Converter.convert(4323055).should.equal( + 'quatre millions trois cent vingt-trois mille cinquante-cinq', ); - writtenNumber(1570025).should.equal( - "un million cinq cent soixante-dix mille vingt-cinq" + Converter.convert(1570025).should.equal( + 'un million cinq cent soixante-dix mille vingt-cinq', ); }); - it("correctly converts numbers > 1 000 000 000", function () { - writtenNumber(1000000000).should.equal("un milliard"); - writtenNumber(2580000000).should.equal( - "deux milliards cinq cent quatre-vingts millions" + it('correctly converts numbers > 1 000 000 000', () => { + Converter.convert(1000000000).should.equal('un milliard'); + Converter.convert(2580000000).should.equal( + 'deux milliards cinq cent quatre-vingts millions', ); - writtenNumber(1000000000000).should.equal("un billion"); - writtenNumber(3627000000000).should.equal( - "trois billions six cent vingt-sept milliards" + Converter.convert(1000000000000).should.equal('un billion'); + Converter.convert(3627000000000).should.equal( + 'trois billions six cent vingt-sept milliards', ); }); }); - describe("writtenNumber(n, { lang: 'it', ... })", function () { - before(function () { - writtenNumber.defaults.lang = "it"; - }); + describe("writtenNumber: 'It' language", () => { + const Converter = new WrittenNumber({ language: It }); - it("gets exposed", function () { - should.exist(writtenNumber); - writtenNumber.should.be.instanceof(Function); + it('correctly converts numbers < 10', () => { + Converter.convert(3).should.equal('tre'); + Converter.convert(8).should.equal('otto'); }); - it("correctly converts numbers < 10", function () { - writtenNumber(3).should.equal("tre"); - writtenNumber(8).should.equal("otto"); + it('correctly converts numbers < 20', () => { + Converter.convert(13).should.equal('tredici'); + Converter.convert(19).should.equal('diciannove'); }); - it("correctly converts numbers < 20", function () { - writtenNumber(13).should.equal("tredici"); - writtenNumber(19).should.equal("diciannove"); + it('correctly converts numbers < 100', () => { + Converter.convert(20).should.equal('venti'); + Converter.convert(23).should.equal('ventitré'); + Converter.convert(73).should.equal('settantatré'); + Converter.convert(80).should.equal('ottanta'); + Converter.convert(88).should.equal('ottantotto'); + Converter.convert(90).should.equal('novanta'); + Converter.convert(91).should.equal('novantuno'); }); - it("correctly converts numbers < 100", function () { - writtenNumber(20).should.equal("venti"); - writtenNumber(23).should.equal("ventitré"); - writtenNumber(73).should.equal("settantatré"); - writtenNumber(80).should.equal("ottanta"); - writtenNumber(88).should.equal("ottantotto"); - writtenNumber(90).should.equal("novanta"); - writtenNumber(91).should.equal("novantuno"); + it('correctly converts numbers < 1000', () => { + Converter.convert(100).should.equal('cento'); + Converter.convert(101).should.equal('centuno'); + Converter.convert(201).should.equal('duecentuno'); + Converter.convert(242).should.equal('due cento quarantadue'); }); - it("correctly converts numbers < 1000", function () { - writtenNumber(100).should.equal("cento"); - writtenNumber(101).should.equal("centuno"); - writtenNumber(201).should.equal("duecentuno"); - writtenNumber(242).should.equal("due cento quarantadue"); - }); - - it("correctly converts numbers > 1000", function () { - writtenNumber(1234).should.equal("mille due cento trentaquattro"); - writtenNumber(4000).should.equal("quattro mila"); - writtenNumber(4323).should.equal("quattro mila tre cento ventitré"); - writtenNumber(1000000).should.equal("un milione"); - writtenNumber(2000000).should.equal("due milioni"); - writtenNumber(2000001).should.equal("due milioni un"); - writtenNumber(4323000).should.equal( - "quattro milioni tre cento ventitré mila" + it('correctly converts numbers > 1000', () => { + Converter.convert(1234).should.equal('mille due cento trentaquattro'); + Converter.convert(4000).should.equal('quattro mila'); + Converter.convert(4323).should.equal('quattro mila tre cento ventitré'); + Converter.convert(1000000).should.equal('un milione'); + Converter.convert(2000000).should.equal('due milioni'); + Converter.convert(2000001).should.equal('due milioni un'); + Converter.convert(4323000).should.equal( + 'quattro milioni tre cento ventitré mila', ); - writtenNumber(4323055).should.equal( - "quattro milioni tre cento ventitré mila cinquantacinque" + Converter.convert(4323055).should.equal( + 'quattro milioni tre cento ventitré mila cinquantacinque', ); - writtenNumber(1570025).should.equal( - "un milione cinque cento settanta mila venticinque" + Converter.convert(1570025).should.equal( + 'un milione cinque cento settanta mila venticinque', ); }); - it("correctly converts numbers > 1 000 000 000", function () { - writtenNumber(1000000000).should.equal("un miliardo"); - writtenNumber(2580000000).should.equal( - "due miliardi cinque cento ottanta milioni" + it('correctly converts numbers > 1 000 000 000', () => { + Converter.convert(1000000000).should.equal('un miliardo'); + Converter.convert(2580000000).should.equal( + 'due miliardi cinque cento ottanta milioni', ); - writtenNumber(1000000000000).should.equal("un bilione"); - writtenNumber(3627000000000).should.equal( - "tre bilioni sei cento ventisette miliardi" + Converter.convert(1000000000000).should.equal('un bilione'); + Converter.convert(3627000000000).should.equal( + 'tre bilioni sei cento ventisette miliardi', ); }); }); - describe("writtenNumber(n, { lang: 'enIndian', ... })", function () { - before(function () { - writtenNumber.defaults.lang = "enIndian"; - }); - - it("gets exposed", function () { - should.exist(writtenNumber); - writtenNumber.should.be.instanceof(Function); - }); + describe("writtenNumber: 'EnIndian' language", () => { + const Converter = new WrittenNumber({ language: EnIndian }); - it("doesn't blow up weirdly with invalid input", function () { - writtenNumber("asdfasdfasdf").should.equal(""); - writtenNumber("0.as").should.equal(""); - writtenNumber("0.123").should.equal("zero"); - writtenNumber("0.8").should.equal("one"); - writtenNumber("2.8").should.equal("three"); - writtenNumber("asdf.8").should.equal(""); - writtenNumber("120391938123..").should.equal(""); - writtenNumber(1000000000).should.equal("one hundred crore"); - writtenNumber("1/3").should.equal(""); - writtenNumber(1 / 3).should.equal("zero"); - writtenNumber("1/2").should.equal(""); - writtenNumber("1.123/2").should.equal(""); + it("doesn't blow up weirdly with invalid input", () => { + Converter.convert('asdfasdfasdf').should.equal(''); + Converter.convert('0.as').should.equal(''); + Converter.convert('0.123').should.equal('zero'); + Converter.convert('0.8').should.equal('one'); + Converter.convert('2.8').should.equal('three'); + Converter.convert('asdf.8').should.equal(''); + Converter.convert('120391938123..').should.equal(''); + Converter.convert(1000000000).should.equal('one hundred crore'); + Converter.convert('1/3').should.equal(''); + Converter.convert(1 / 3).should.equal('zero'); + Converter.convert('1/2').should.equal(''); + Converter.convert('1.123/2').should.equal(''); }); - it("correctly converts numbers < 10", function () { - writtenNumber(1000000000).should.equal("one hundred crore"); - writtenNumber(3).should.equal("three"); - writtenNumber(8).should.equal("eight"); + it('correctly converts numbers < 10', () => { + Converter.convert(1000000000).should.equal('one hundred crore'); + Converter.convert(3).should.equal('three'); + Converter.convert(8).should.equal('eight'); }); - it("correctly converts numbers < 20", function () { - writtenNumber(13).should.equal("thirteen"); - writtenNumber(19).should.equal("nineteen"); + it('correctly converts numbers < 20', () => { + Converter.convert(13).should.equal('thirteen'); + Converter.convert(19).should.equal('nineteen'); }); - it("correctly converts numbers < 100", function () { - writtenNumber(20).should.equal("twenty"); - writtenNumber(25).should.equal("twenty-five"); - writtenNumber(88).should.equal("eighty-eight"); - writtenNumber(73).should.equal("seventy-three"); + it('correctly converts numbers < 100', () => { + Converter.convert(20).should.equal('twenty'); + Converter.convert(25).should.equal('twenty-five'); + Converter.convert(88).should.equal('eighty-eight'); + Converter.convert(73).should.equal('seventy-three'); }); - it("correctly converts numbers < 1000", function () { - writtenNumber(200).should.equal("two hundred"); - writtenNumber(242).should.equal("two hundred and forty-two"); - writtenNumber(1234).should.equal( - "one thousand two hundred and thirty-four" + it('correctly converts numbers < 1000', () => { + Converter.convert(200).should.equal('two hundred'); + Converter.convert(242).should.equal('two hundred and forty-two'); + Converter.convert(1234).should.equal( + 'one thousand two hundred and thirty-four', ); - writtenNumber(4323).should.equal( - "four thousand three hundred and twenty-three" + Converter.convert(4323).should.equal( + 'four thousand three hundred and twenty-three', ); }); - it("correctly converts numbers > 1000", function () { - writtenNumber(4323000).should.equal( - "forty-three lakh twenty-three thousand" + it('correctly converts numbers > 1000', () => { + Converter.convert(4323000).should.equal( + 'forty-three lakh twenty-three thousand', ); - writtenNumber(4323055).should.equal( - "forty-three lakh twenty-three thousand and fifty-five" + Converter.convert(4323055).should.equal( + 'forty-three lakh twenty-three thousand and fifty-five', ); - writtenNumber(1570025).should.equal( - "fifteen lakh seventy thousand and twenty-five" + Converter.convert(1570025).should.equal( + 'fifteen lakh seventy thousand and twenty-five', ); }); - it("correctly converts numbers > 1 000 000 000", function () { - writtenNumber(1000000000).should.equal("one hundred crore"); - writtenNumber(2580000000).should.equal("two hundred fifty-eight crore"); - writtenNumber(1000000000000).should.equal("one lakh crore"); - writtenNumber(3627000000000).should.equal( - "three lakh sixty-two thousand seven hundred crore" + it('correctly converts numbers > 1 000 000 000', () => { + Converter.convert(1000000000).should.equal('one hundred crore'); + Converter.convert(2580000000).should.equal('two hundred fifty-eight crore'); + Converter.convert(1000000000000).should.equal('one lakh crore'); + Converter.convert(3627000000000).should.equal( + 'three lakh sixty-two thousand seven hundred crore', ); }); }); - describe("writtenNumber(n, { lang: 'tr', ... })", function () { - before(function () { - writtenNumber.defaults.lang = "tr"; - }); + describe("writtenNumber: 'Tr' language", () => { + const Converter = new WrittenNumber({ language: Tr }); - it("gets exposed", function () { - should.exist(writtenNumber); - writtenNumber.should.be.instanceof(Function); + it("doesn't blow up weirdly with invalid input", () => { + Converter.convert('asdfasdfasdf').should.equal(''); + Converter.convert('0.as').should.equal(''); + Converter.convert('0.123').should.equal('sıfır'); + Converter.convert('0.8').should.equal('bir'); + Converter.convert('2.8').should.equal('üç'); + Converter.convert('asdf.8').should.equal(''); + Converter.convert('120391938123..').should.equal(''); + Converter.convert('1/3').should.equal(''); + Converter.convert(1 / 3).should.equal('sıfır'); + Converter.convert('1/2').should.equal(''); + Converter.convert('1.123/2').should.equal(''); }); - it("doesn't blow up weirdly with invalid input", function () { - writtenNumber("asdfasdfasdf").should.equal(""); - writtenNumber("0.as").should.equal(""); - writtenNumber("0.123").should.equal("sıfır"); - writtenNumber("0.8").should.equal("bir"); - writtenNumber("2.8").should.equal("üç"); - writtenNumber("asdf.8").should.equal(""); - writtenNumber("120391938123..").should.equal(""); - writtenNumber("1/3").should.equal(""); - writtenNumber(1 / 3).should.equal("sıfır"); - writtenNumber("1/2").should.equal(""); - writtenNumber("1.123/2").should.equal(""); + it('correctly converts numbers < 10', () => { + Converter.convert(0).should.equal('sıfır'); + Converter.convert(3).should.equal('üç'); + Converter.convert(6).should.equal('altı'); }); - it("correctly converts numbers < 10", function () { - writtenNumber(0).should.equal("sıfır"); - writtenNumber(3).should.equal("üç"); - writtenNumber(6).should.equal("altı"); + it('correctly converts numbers < 20', () => { + Converter.convert(13).should.equal('on üç'); + Converter.convert(19).should.equal('on dokuz'); }); - it("correctly converts numbers < 20", function () { - writtenNumber(13).should.equal("on üç"); - writtenNumber(19).should.equal("on dokuz"); + it('correctly converts numbers < 100', () => { + Converter.convert(20).should.equal('yirmi'); + Converter.convert(25).should.equal('yirmi beş'); + Converter.convert(40).should.equal('kırk'); + Converter.convert(88).should.equal('seksen sekiz'); + Converter.convert(73).should.equal('yetmiş üç'); }); - it("correctly converts numbers < 100", function () { - writtenNumber(20).should.equal("yirmi"); - writtenNumber(25).should.equal("yirmi beş"); - writtenNumber(40).should.equal("kırk"); - writtenNumber(88).should.equal("seksen sekiz"); - writtenNumber(73).should.equal("yetmiş üç"); - }); - - it("correctly converts numbers < 10000", function () { - writtenNumber(200).should.equal("iki yüz"); - writtenNumber(242).should.equal("iki yüz kırk iki"); - writtenNumber(1234).should.equal( - "bin iki yüz otuz dört" + it('correctly converts numbers < 10000', () => { + Converter.convert(200).should.equal('iki yüz'); + Converter.convert(242).should.equal('iki yüz kırk iki'); + Converter.convert(1234).should.equal( + 'bin iki yüz otuz dört', ); - writtenNumber(4323).should.equal( - "dört bin üç yüz yirmi üç" + Converter.convert(4323).should.equal( + 'dört bin üç yüz yirmi üç', ); }); - it("correctly converts numbers > 10000", function () { - writtenNumber(4323000).should.equal( - "dört milyon üç yüz yirmi üç bin" + it('correctly converts numbers > 10000', () => { + Converter.convert(4323000).should.equal( + 'dört milyon üç yüz yirmi üç bin', ); - writtenNumber(4323055).should.equal( - "dört milyon üç yüz yirmi üç bin elli beş" + Converter.convert(4323055).should.equal( + 'dört milyon üç yüz yirmi üç bin elli beş', ); - writtenNumber(1570025).should.equal( - "bir milyon beş yüz yetmiş bin yirmi beş" + Converter.convert(1570025).should.equal( + 'bir milyon beş yüz yetmiş bin yirmi beş', ); }); - it("correctly converts numbers > 1 000 000 000", function () { - writtenNumber(1000000000).should.equal("bir milyar"); - writtenNumber(2580000000).should.equal( - "iki milyar beş yüz seksen milyon" + it('correctly converts numbers > 1 000 000 000', () => { + Converter.convert(1000000000).should.equal('bir milyar'); + Converter.convert(2580000000).should.equal( + 'iki milyar beş yüz seksen milyon', ); - writtenNumber(1000000000000).should.equal("bir trilyon"); - writtenNumber(3627000000000).should.equal( - "üç trilyon altı yüz yirmi yedi milyar" + Converter.convert(1000000000000).should.equal('bir trilyon'); + Converter.convert(3627000000000).should.equal( + 'üç trilyon altı yüz yirmi yedi milyar', ); }); }); - describe("writtenNumber(n, { lang: 'az', ... })", function () { - before(function () { - writtenNumber.defaults.lang = "az"; - }); - - it("gets exposed", function () { - should.exist(writtenNumber); - writtenNumber.should.be.instanceof(Function); - }); + describe("writtenNumber: 'Az' language", () => { + const Converter = new WrittenNumber({ language: Az }); - it("doesn't blow up weirdly with invalid input", function () { - writtenNumber("asdfasdfasdf").should.equal(""); - writtenNumber("0.as").should.equal(""); - writtenNumber("0.123").should.equal("sıfır"); - writtenNumber("0.8").should.equal("bir"); - writtenNumber("2.8").should.equal("üç"); - writtenNumber("asdf.8").should.equal(""); - writtenNumber("120391938123..").should.equal(""); - writtenNumber("1/3").should.equal(""); - writtenNumber(1 / 3).should.equal("sıfır"); - writtenNumber("1/2").should.equal(""); - writtenNumber("1.123/2").should.equal(""); + it("doesn't blow up weirdly with invalid input", () => { + Converter.convert('asdfasdfasdf').should.equal(''); + Converter.convert('0.as').should.equal(''); + Converter.convert('0.123').should.equal('sıfır'); + Converter.convert('0.8').should.equal('bir'); + Converter.convert('2.8').should.equal('üç'); + Converter.convert('asdf.8').should.equal(''); + Converter.convert('120391938123..').should.equal(''); + Converter.convert('1/3').should.equal(''); + Converter.convert(1 / 3).should.equal('sıfır'); + Converter.convert('1/2').should.equal(''); + Converter.convert('1.123/2').should.equal(''); }); - it("correctly converts numbers < 10", function () { - writtenNumber(0).should.equal("sıfır"); - writtenNumber(3).should.equal("üç"); - writtenNumber(6).should.equal("altı"); + it('correctly converts numbers < 10', () => { + Converter.convert(0).should.equal('sıfır'); + Converter.convert(3).should.equal('üç'); + Converter.convert(6).should.equal('altı'); }); - it("correctly converts numbers < 20", function () { - writtenNumber(13).should.equal("on üç"); - writtenNumber(19).should.equal("on doqquz"); + it('correctly converts numbers < 20', () => { + Converter.convert(13).should.equal('on üç'); + Converter.convert(19).should.equal('on doqquz'); }); - it("correctly converts numbers < 100", function () { - writtenNumber(20).should.equal("iyirmi"); - writtenNumber(25).should.equal("iyirmi beş"); - writtenNumber(40).should.equal("qırx"); - writtenNumber(88).should.equal("səksən səkkiz"); - writtenNumber(73).should.equal("yetmiş üç"); + it('correctly converts numbers < 100', () => { + Converter.convert(20).should.equal('iyirmi'); + Converter.convert(25).should.equal('iyirmi beş'); + Converter.convert(40).should.equal('qırx'); + Converter.convert(88).should.equal('səksən səkkiz'); + Converter.convert(73).should.equal('yetmiş üç'); }); - it("correctly converts numbers < 10000", function () { - writtenNumber(200).should.equal("iki yüz"); - writtenNumber(242).should.equal("iki yüz qırx iki"); - writtenNumber(1234).should.equal( - "min iki yüz otuz dörd" + it('correctly converts numbers < 10000', () => { + Converter.convert(200).should.equal('iki yüz'); + Converter.convert(242).should.equal('iki yüz qırx iki'); + Converter.convert(1234).should.equal( + 'min iki yüz otuz dörd', ); - writtenNumber(4323).should.equal( - "dörd min üç yüz iyirmi üç" + Converter.convert(4323).should.equal( + 'dörd min üç yüz iyirmi üç', ); }); - it("correctly converts numbers > 10000", function () { - writtenNumber(4323000).should.equal( - "dörd milyon üç yüz iyirmi üç min" + it('correctly converts numbers > 10000', () => { + Converter.convert(4323000).should.equal( + 'dörd milyon üç yüz iyirmi üç min', ); - writtenNumber(4323055).should.equal( - "dörd milyon üç yüz iyirmi üç min əlli beş" + Converter.convert(4323055).should.equal( + 'dörd milyon üç yüz iyirmi üç min əlli beş', ); - writtenNumber(1570025).should.equal( - "bir milyon beş yüz yetmiş min iyirmi beş" + Converter.convert(1570025).should.equal( + 'bir milyon beş yüz yetmiş min iyirmi beş', ); }); - it("correctly converts numbers > 1 000 000 000", function () { - writtenNumber(1000000000).should.equal("bir milyard"); - writtenNumber(2580000000).should.equal( - "iki milyard beş yüz səksən milyon" + it('correctly converts numbers > 1 000 000 000', () => { + Converter.convert(1000000000).should.equal('bir milyard'); + Converter.convert(2580000000).should.equal( + 'iki milyard beş yüz səksən milyon', ); - writtenNumber(1000000000000).should.equal("bir trilyon"); - writtenNumber(3627000000000).should.equal( - "üç trilyon altı yüz iyirmi yeddi milyard" + Converter.convert(1000000000000).should.equal('bir trilyon'); + Converter.convert(3627000000000).should.equal( + 'üç trilyon altı yüz iyirmi yeddi milyard', ); }); }); - describe("writtenNumber(n, { lang: 'uk', ... })", function () { - before(function () { - writtenNumber.defaults.lang = "uk"; - }); + describe("writtenNumber: 'Uk' language", () => { + const Converter = new WrittenNumber({ language: Uk }); - it("gets exposed", function () { - should.exist(writtenNumber); - writtenNumber.should.be.instanceof(Function); - }); - it("correctly converts numbers < 10", function () { - writtenNumber(0).should.equal("нуль"); - writtenNumber(1).should.equal("один"); - writtenNumber(2).should.equal("два"); - writtenNumber(3).should.equal("три"); - writtenNumber(9).should.equal("дев’ять"); + it('correctly converts numbers < 10', () => { + Converter.convert(0).should.equal('нуль'); + Converter.convert(1).should.equal('один'); + Converter.convert(2).should.equal('два'); + Converter.convert(3).should.equal('три'); + Converter.convert(9).should.equal('дев’ять'); }); - it("correctly converts numbers < 20", function () { - writtenNumber(11).should.equal("одинадцять"); - writtenNumber(13).should.equal("тринадцять"); - writtenNumber(19).should.equal("дев’ятнадцять"); + it('correctly converts numbers < 20', () => { + Converter.convert(11).should.equal('одинадцять'); + Converter.convert(13).should.equal('тринадцять'); + Converter.convert(19).should.equal('дев’ятнадцять'); }); - it("correctly converts numbers < 100", function () { - writtenNumber(20).should.equal("двадцять"); - writtenNumber(21).should.equal("двадцять один"); - writtenNumber(25).should.equal("двадцять п’ять"); - writtenNumber(73).should.equal("сімдесят три"); - writtenNumber(80).should.equal("вісімдесят"); - writtenNumber(88).should.equal("вісімдесят вісім"); + it('correctly converts numbers < 100', () => { + Converter.convert(20).should.equal('двадцять'); + Converter.convert(21).should.equal('двадцять один'); + Converter.convert(25).should.equal('двадцять п’ять'); + Converter.convert(73).should.equal('сімдесят три'); + Converter.convert(80).should.equal('вісімдесят'); + Converter.convert(88).should.equal('вісімдесят вісім'); }); - it("correctly converts numbers < 1000", function () { - writtenNumber(100).should.equal("сто"); - writtenNumber(101).should.equal("сто один"); - writtenNumber(110).should.equal("сто десять"); - writtenNumber(111).should.equal("сто одинадцять"); - writtenNumber(146).should.equal("сто сорок шість"); - writtenNumber(200).should.equal("двісті"); - writtenNumber(242).should.equal("двісті сорок два"); + it('correctly converts numbers < 1000', () => { + Converter.convert(100).should.equal('сто'); + Converter.convert(101).should.equal('сто один'); + Converter.convert(110).should.equal('сто десять'); + Converter.convert(111).should.equal('сто одинадцять'); + Converter.convert(146).should.equal('сто сорок шість'); + Converter.convert(200).should.equal('двісті'); + Converter.convert(242).should.equal('двісті сорок два'); }); - it("correctly converts numbers > 1000", function () { - writtenNumber(1000).should.equal("одна тисяча"); - writtenNumber(2000).should.equal("дві тисячі"); - writtenNumber(3000).should.equal("три тисячі"); - writtenNumber(4000).should.equal("чотири тисячі"); - writtenNumber(5000).should.equal("п’ять тисяч"); - writtenNumber(1234).should.equal("одна тисяча двісті тридцять чотири"); - writtenNumber(4323).should.equal("чотири тисячі триста двадцять три"); - writtenNumber(1000000).should.equal("один мільйон"); - writtenNumber(2000000).should.equal("два мільйони"); - writtenNumber(2000001).should.equal("два мільйони один"); - writtenNumber(5000000).should.equal("п’ять мільйонів"); - writtenNumber(21000000).should.equal( - "двадцять один мільйон" + it('correctly converts numbers > 1000', () => { + Converter.convert(1000).should.equal('одна тисяча'); + Converter.convert(2000).should.equal('дві тисячі'); + Converter.convert(3000).should.equal('три тисячі'); + Converter.convert(4000).should.equal('чотири тисячі'); + Converter.convert(5000).should.equal('п’ять тисяч'); + Converter.convert(1234).should.equal('одна тисяча двісті тридцять чотири'); + Converter.convert(4323).should.equal('чотири тисячі триста двадцять три'); + Converter.convert(1000000).should.equal('один мільйон'); + Converter.convert(2000000).should.equal('два мільйони'); + Converter.convert(2000001).should.equal('два мільйони один'); + Converter.convert(5000000).should.equal('п’ять мільйонів'); + Converter.convert(21000000).should.equal( + 'двадцять один мільйон', ); - writtenNumber(111000000).should.equal( - "сто одинадцять мільйонів" + Converter.convert(111000000).should.equal( + 'сто одинадцять мільйонів', ); - writtenNumber(214567891).should.equal( - "двісті чотирнадцять мільйонів п’ятсот шістдесят сім тисяч вісімсот дев’яносто один" + Converter.convert(214567891).should.equal( + 'двісті чотирнадцять мільйонів п’ятсот шістдесят сім тисяч вісімсот дев’яносто один', ); }); - it("correctly converts numbers > 1 000 000 000", function () { - writtenNumber(1000000000).should.equal("один мільярд"); - writtenNumber(2580000000).should.equal( - "два мільярди п’ятсот вісімдесят мільйонів" + it('correctly converts numbers > 1 000 000 000', () => { + Converter.convert(1000000000).should.equal('один мільярд'); + Converter.convert(2580000000).should.equal( + 'два мільярди п’ятсот вісімдесят мільйонів', ); - writtenNumber(1000000000000).should.equal("один трильйон"); - writtenNumber(3627000000000).should.equal( - "три трильйони шістсот двадцять сім мільярдів" + Converter.convert(1000000000000).should.equal('один трильйон'); + Converter.convert(3627000000000).should.equal( + 'три трильйони шістсот двадцять сім мільярдів', ); }); }); - describe("writtenNumber(n, { lang: 'ar', ... })", function () { - before(function () { - writtenNumber.defaults.lang = "ar"; - }); - - it("gets exposed", function () { - should.exist(writtenNumber); - writtenNumber.should.be.instanceof(Function); - }); + describe("writtenNumber: 'Ar' language", () => { + const Converter = new WrittenNumber({ language: Ar }); - it("doesn't blow up weirdly with invalid input", function () { - writtenNumber("asdfasdfasdf").should.equal(""); - writtenNumber("0.as").should.equal(""); - writtenNumber("0.123").should.equal("صفر"); - writtenNumber("0.8").should.equal("واحد"); - writtenNumber("2.8").should.equal("ثلاثة"); - writtenNumber("asdf.8").should.equal(""); - writtenNumber("120391938123..").should.equal(""); - writtenNumber("1/3").should.equal(""); - writtenNumber(1 / 3).should.equal("صفر"); - writtenNumber("1/2").should.equal(""); - writtenNumber("1.123/2").should.equal(""); + it("doesn't blow up weirdly with invalid input", () => { + Converter.convert('asdfasdfasdf').should.equal(''); + Converter.convert('0.as').should.equal(''); + Converter.convert('0.123').should.equal('صفر'); + Converter.convert('0.8').should.equal('واحد'); + Converter.convert('2.8').should.equal('ثلاثة'); + Converter.convert('asdf.8').should.equal(''); + Converter.convert('120391938123..').should.equal(''); + Converter.convert('1/3').should.equal(''); + Converter.convert(1 / 3).should.equal('صفر'); + Converter.convert('1/2').should.equal(''); + Converter.convert('1.123/2').should.equal(''); }); - it("correctly converts numbers < 10", function () { - writtenNumber(0).should.equal("صفر"); - writtenNumber(3).should.equal("ثلاثة"); - writtenNumber(6).should.equal("ستة"); + it('correctly converts numbers < 10', () => { + Converter.convert(0).should.equal('صفر'); + Converter.convert(3).should.equal('ثلاثة'); + Converter.convert(6).should.equal('ستة'); }); - it("correctly converts numbers < 20", function () { - writtenNumber(11).should.equal("أحد عشر"); - writtenNumber(13).should.equal("ثلاثة عشر"); - writtenNumber(19).should.equal("تسعة عشر"); + it('correctly converts numbers < 20', () => { + Converter.convert(11).should.equal('أحد عشر'); + Converter.convert(13).should.equal('ثلاثة عشر'); + Converter.convert(19).should.equal('تسعة عشر'); }); - it("correctly converts numbers < 100", function () { - writtenNumber(20).should.equal("عشرون"); - writtenNumber(25).should.equal("خمسة وعشرون"); - writtenNumber(40).should.equal("أربعون"); - writtenNumber(88).should.equal("ثمانية وثمانون"); - writtenNumber(73).should.equal("ثلاثة وسبعون"); - writtenNumber(99).should.equal("تسعة وتسعون"); + it('correctly converts numbers < 100', () => { + Converter.convert(20).should.equal('عشرون'); + Converter.convert(25).should.equal('خمسة وعشرون'); + Converter.convert(40).should.equal('أربعون'); + Converter.convert(88).should.equal('ثمانية وثمانون'); + Converter.convert(73).should.equal('ثلاثة وسبعون'); + Converter.convert(99).should.equal('تسعة وتسعون'); }); - it("correctly converts numbers < 10000", function () { - writtenNumber(200).should.equal("مائتان"); - writtenNumber(310).should.equal("ثلاثمائة وعشرة"); - writtenNumber(242).should.equal("مائتان واثنان وأربعون"); - writtenNumber(1234).should.equal("ألف ومائتان وأربعة وثلاثون"); - writtenNumber(3000).should.equal("ثلاثة آلاف"); - writtenNumber(4323).should.equal("أربعة آلاف وثلاثمائة وثلاثة وعشرون"); + it('correctly converts numbers < 10000', () => { + Converter.convert(200).should.equal('مائتان'); + Converter.convert(310).should.equal('ثلاثمائة وعشرة'); + Converter.convert(242).should.equal('مائتان واثنان وأربعون'); + Converter.convert(1234).should.equal('ألف ومائتان وأربعة وثلاثون'); + Converter.convert(3000).should.equal('ثلاثة آلاف'); + Converter.convert(4323).should.equal('أربعة آلاف وثلاثمائة وثلاثة وعشرون'); }); - it("correctly converts numbers > 10000", function () { - writtenNumber(10000).should.equal("عشرة آلاف"); - writtenNumber(11000).should.equal("أحد عشر ألف"); - writtenNumber(4323000).should.equal("أربعة ملايين وثلاثمائة وثلاثة وعشرون ألف"); - writtenNumber(4323055).should.equal("أربعة ملايين وثلاثمائة وثلاثة وعشرون ألف وخمسة وخمسون"); - writtenNumber(1570025).should.equal("مليون وخمسمائة وسبعون ألف وخمسة وعشرون"); + it('correctly converts numbers > 10000', () => { + Converter.convert(10000).should.equal('عشرة آلاف'); + Converter.convert(11000).should.equal('أحد عشر ألف'); + Converter.convert(4323000).should.equal('أربعة ملايين وثلاثمائة وثلاثة وعشرون ألف'); + Converter.convert(4323055).should.equal('أربعة ملايين وثلاثمائة وثلاثة وعشرون ألف وخمسة وخمسون'); + Converter.convert(1570025).should.equal('مليون وخمسمائة وسبعون ألف وخمسة وعشرون'); }); - it("correctly converts numbers > 1 000 000 000", function () { - writtenNumber(1000000000).should.equal("مليار"); - writtenNumber(2580000000).should.equal("ملياران وخمسمائة وثمانون مليون"); - writtenNumber(1000000000000).should.equal("تريليون"); - writtenNumber(3627000000000).should.equal("ثلاثة تريليون وستمائة وسبعة وعشرون مليار"); + it('correctly converts numbers > 1 000 000 000', () => { + Converter.convert(1000000000).should.equal('مليار'); + Converter.convert(2580000000).should.equal('ملياران وخمسمائة وثمانون مليون'); + Converter.convert(1000000000000).should.equal('تريليون'); + Converter.convert(3627000000000).should.equal('ثلاثة تريليون وستمائة وسبعة وعشرون مليار'); }); }); - describe("writtenNumber(n, { lang: 'id', ... })", function () { - before(function () { - writtenNumber.defaults.lang = "id"; - }); + describe("writtenNumber: 'Id' language", () => { + const Converter = new WrittenNumber({ language: Id }); - it("correctly converts numbers < 10", function () { - writtenNumber(1).should.equal("satu"); - writtenNumber(3).should.equal("tiga"); - writtenNumber(8).should.equal("delapan"); + it('correctly converts numbers < 10', () => { + Converter.convert(1).should.equal('satu'); + Converter.convert(3).should.equal('tiga'); + Converter.convert(8).should.equal('delapan'); }); - it("correctly converts numbers < 20", function () { - writtenNumber(11).should.equal("sebelas"); - writtenNumber(13).should.equal("tiga belas"); - writtenNumber(19).should.equal("sembilan belas"); + it('correctly converts numbers < 20', () => { + Converter.convert(11).should.equal('sebelas'); + Converter.convert(13).should.equal('tiga belas'); + Converter.convert(19).should.equal('sembilan belas'); }); - it("correctly converts numbers < 100", function () { - writtenNumber(20).should.equal("dua puluh"); - writtenNumber(25).should.equal("dua puluh lima"); - writtenNumber(88).should.equal("delapan puluh delapan"); - writtenNumber(73).should.equal("tujuh puluh tiga"); + it('correctly converts numbers < 100', () => { + Converter.convert(20).should.equal('dua puluh'); + Converter.convert(25).should.equal('dua puluh lima'); + Converter.convert(88).should.equal('delapan puluh delapan'); + Converter.convert(73).should.equal('tujuh puluh tiga'); }); - it("correctly converts numbers < 1000", function () { - writtenNumber(144).should.equal("seratus empat puluh empat"); - writtenNumber(200).should.equal("dua ratus"); - writtenNumber(242).should.equal("dua ratus empat puluh dua"); + it('correctly converts numbers < 1000', () => { + Converter.convert(144).should.equal('seratus empat puluh empat'); + Converter.convert(200).should.equal('dua ratus'); + Converter.convert(242).should.equal('dua ratus empat puluh dua'); }); - it("correctly converts numbers > 1000", function () { - writtenNumber(1111).should.equal("seribu seratus sebelas"); - writtenNumber(1234).should.equal("seribu dua ratus tiga puluh empat"); - writtenNumber(111234).should.equal( - "seratus sebelas ribu dua ratus tiga puluh empat" + it('correctly converts numbers > 1000', () => { + Converter.convert(1111).should.equal('seribu seratus sebelas'); + Converter.convert(1234).should.equal('seribu dua ratus tiga puluh empat'); + Converter.convert(111234).should.equal( + 'seratus sebelas ribu dua ratus tiga puluh empat', ); - writtenNumber(432055).should.equal( - "empat ratus tiga puluh dua ribu lima puluh lima" + Converter.convert(432055).should.equal( + 'empat ratus tiga puluh dua ribu lima puluh lima', ); - writtenNumber(1111234).should.equal( - "satu juta seratus sebelas ribu dua ratus tiga puluh empat" + Converter.convert(1111234).should.equal( + 'satu juta seratus sebelas ribu dua ratus tiga puluh empat', ); - }); - it("correctly converts numbers > 1 000 000 000", function () { - writtenNumber(1000000000).should.equal("satu miliar"); - writtenNumber(2580000000).should.equal( - "dua miliar lima ratus delapan puluh juta" + it('correctly converts numbers > 1 000 000 000', () => { + Converter.convert(1000000000).should.equal('satu miliar'); + Converter.convert(2580000000).should.equal( + 'dua miliar lima ratus delapan puluh juta', ); - writtenNumber(1000000000000).should.equal("satu triliun"); - writtenNumber(3627000000000).should.equal( - "tiga triliun enam ratus dua puluh tujuh miliar" + Converter.convert(1000000000000).should.equal('satu triliun'); + Converter.convert(3627000000000).should.equal( + 'tiga triliun enam ratus dua puluh tujuh miliar', ); }); }); - describe("writtenNumber(n, { lang: 'ru', ... })", function () { - before(function () { - writtenNumber.defaults.lang = "ru"; - }); - - it("gets exposed", function () { - should.exist(writtenNumber); - writtenNumber.should.be.instanceof(Function); - }); + describe("writtenNumber: 'Ru' language", () => { + const Converter = new WrittenNumber({ language: Ru }); - it("negative numbers return \"\"", function () { - writtenNumber(-3).should.equal(""); - writtenNumber(-5).should.equal(""); + it('negative numbers return ""', () => { + Converter.convert(-3).should.equal(''); + Converter.convert(-5).should.equal(''); }); - it("doesn't blow up weirdly with invalid input", function () { - writtenNumber("asdfasdfasdf").should.equal(""); - writtenNumber("0.as").should.equal(""); - writtenNumber("0.123").should.equal("ноль"); - writtenNumber("0.8").should.equal("один"); - writtenNumber("2.8").should.equal("три"); - writtenNumber("asdf.8").should.equal(""); - writtenNumber("120391938123..").should.equal(""); - writtenNumber("1000000000.123").should.equal("один миллиард"); - writtenNumber("1/3").should.equal(""); - writtenNumber(1 / 3).should.equal("ноль"); - writtenNumber("1/2").should.equal(""); - writtenNumber("1.123/2").should.equal(""); + it("doesn't blow up weirdly with invalid input", () => { + Converter.convert('asdfasdfasdf').should.equal(''); + Converter.convert('0.as').should.equal(''); + Converter.convert('0.123').should.equal('ноль'); + Converter.convert('0.8').should.equal('один'); + Converter.convert('2.8').should.equal('три'); + Converter.convert('asdf.8').should.equal(''); + Converter.convert('120391938123..').should.equal(''); + Converter.convert('1000000000.123').should.equal('один миллиард'); + Converter.convert('1/3').should.equal(''); + Converter.convert(1 / 3).should.equal('ноль'); + Converter.convert('1/2').should.equal(''); + Converter.convert('1.123/2').should.equal(''); }); - it("correctly converts numbers < 10", function () { - writtenNumber(1000000000).should.equal("один миллиард"); - writtenNumber(3).should.equal("три"); - writtenNumber(8).should.equal("восемь"); + it('correctly converts numbers < 10', () => { + Converter.convert(1000000000).should.equal('один миллиард'); + Converter.convert(3).should.equal('три'); + Converter.convert(8).should.equal('восемь'); }); - it("correctly converts numbers < 20", function () { - writtenNumber(13).should.equal("тринадцать"); - writtenNumber(19).should.equal("девятнадцать"); + it('correctly converts numbers < 20', () => { + Converter.convert(13).should.equal('тринадцать'); + Converter.convert(19).should.equal('девятнадцать'); }); - it("correctly converts numbers < 100", function () { - writtenNumber(20).should.equal("двадцать"); - writtenNumber(25).should.equal("двадцать пять"); - writtenNumber(88).should.equal("восемьдесят восемь"); - writtenNumber(73).should.equal("семьдесят три"); + it('correctly converts numbers < 100', () => { + Converter.convert(20).should.equal('двадцать'); + Converter.convert(25).should.equal('двадцать пять'); + Converter.convert(88).should.equal('восемьдесят восемь'); + Converter.convert(73).should.equal('семьдесят три'); }); - it("correctly converts numbers < 1000", function () { - writtenNumber(200).should.equal("двести"); - writtenNumber(242).should.equal("двести сорок два"); - writtenNumber(1234).should.equal( - "одна тысяча двести тридцать четыре" + it('correctly converts numbers < 1000', () => { + Converter.convert(200).should.equal('двести'); + Converter.convert(242).should.equal('двести сорок два'); + Converter.convert(1234).should.equal( + 'одна тысяча двести тридцать четыре', ); - writtenNumber(4323).should.equal( - "четыре тысячи триста двадцать три" + Converter.convert(4323).should.equal( + 'четыре тысячи триста двадцать три', ); }); - it("correctly converts numbers > 1000", function () { - writtenNumber(4323000).should.equal( - "четыре миллиона триста двадцать три тысячи" + it('correctly converts numbers > 1000', () => { + Converter.convert(4323000).should.equal( + 'четыре миллиона триста двадцать три тысячи', ); - writtenNumber(4323055).should.equal( - "четыре миллиона триста двадцать три тысячи пятьдесят пять" + Converter.convert(4323055).should.equal( + 'четыре миллиона триста двадцать три тысячи пятьдесят пять', ); - writtenNumber(1570025).should.equal( - "один миллион пятьсот семьдесят тысяч двадцать пять" + Converter.convert(1570025).should.equal( + 'один миллион пятьсот семьдесят тысяч двадцать пять', ); }); - it("correctly converts numbers > 1 000 000 000", function () { - writtenNumber(1000000000).should.equal("один миллиард"); - writtenNumber(2580000000).should.equal( - "два миллиарда пятьсот восемьдесят миллионов" + it('correctly converts numbers > 1 000 000 000', () => { + Converter.convert(1000000000).should.equal('один миллиард'); + Converter.convert(2580000000).should.equal( + 'два миллиарда пятьсот восемьдесят миллионов', ); - writtenNumber(1000000000000).should.equal("один триллион"); - writtenNumber(3627000000000).should.equal( - "три триллиона шестьсот двадцать семь миллиардов" + Converter.convert(1000000000000).should.equal('один триллион'); + Converter.convert(3627000000000).should.equal( + 'три триллиона шестьсот двадцать семь миллиардов', ); }); }); -}); \ No newline at end of file +}); diff --git a/test/util.test.js b/test/util.test.js deleted file mode 100644 index d2cc66a..0000000 --- a/test/util.test.js +++ /dev/null @@ -1,26 +0,0 @@ -"use strict" /* global describe, it */; -var util = require("../lib/util"); -var should = require("should"); - -describe("util", function() { - describe(".defaults(target, defaults)", function() { - it("gets exposed", function() { - should.exist(util.defaults); - }); - - it("extends into the empty object", function() { - util - .defaults({}, { something: "here" }) - .should.eql({ something: "here" }); - }); - - it("extends into null", function() { - util - .defaults(null, { something: "here" }) - .should.eql({ something: "here" }); - util - .defaults(undefined, { something: "here" }) - .should.eql({ something: "here" }); - }); - }); -}); diff --git a/test/utils.test.js b/test/utils.test.js new file mode 100644 index 0000000..4516df9 --- /dev/null +++ b/test/utils.test.js @@ -0,0 +1,17 @@ +import { mergeFields } from '../lib/utils'; + +describe('utils', () => { + describe('.mergeFields(target, defaults)', () => { + it('extends into the empty object', () => { + mergeFields({}, { something: 'here' }) + .should.eql({ something: 'here' }); + }); + + it('extends into null', () => { + mergeFields(null, { something: 'here' }) + .should.eql({ something: 'here' }); + mergeFields(undefined, { something: 'here' }) + .should.eql({ something: 'here' }); + }); + }); +}); diff --git a/webpack.config.js b/webpack.config.js new file mode 100644 index 0000000..53caf8e --- /dev/null +++ b/webpack.config.js @@ -0,0 +1,41 @@ +const path = require('path'); +const { CleanWebpackPlugin } = require('clean-webpack-plugin'); +const CopyPlugin = require('copy-webpack-plugin'); + +const pkg = require('./package.json'); + +const libPath = path.resolve(__dirname, 'lib'); +const distPath = path.resolve(__dirname, 'dist'); + +module.exports = (options = {}) => ({ + mode: 'development', + entry: { + index: path.resolve(libPath, 'index.js'), + }, + target: 'web', + output: { + path: options.outputPath || distPath, + filename: '[name].js', + libraryTarget: 'commonjs2', + library: pkg.name, + }, + resolve: { + extensions: ['.js', '.json'], + }, + module: { + rules: [{ + test: /\.(js)$/, + include: libPath, + loader: 'babel-loader', + query: { + cacheDirectory: true, + }, + }], + }, + plugins: [ + new CleanWebpackPlugin(), + new CopyPlugin([ + { from: path.resolve(libPath, 'i18n'), to: 'i18n' }, + ]), + ], +});