From 8e8fe5bbb5b4fe20269672cebcfc0339515e22b8 Mon Sep 17 00:00:00 2001 From: David Acosta Date: Mon, 7 Oct 2019 12:51:41 -0500 Subject: [PATCH] Updated definitions for dinero.js 1.6 (#38198) * Updated definitions for dinero.js 1.6 * Use ReadonlArray to improve compatibility. * Corrected TypeScript version. --- types/dinero.js/dinero.js-tests.ts | 68 +++++---- types/dinero.js/index.d.ts | 221 +++++++++++++++++++++++++++-- 2 files changed, 245 insertions(+), 44 deletions(-) diff --git a/types/dinero.js/dinero.js-tests.ts b/types/dinero.js/dinero.js-tests.ts index 803184c3db..9840fb2754 100644 --- a/types/dinero.js/dinero.js-tests.ts +++ b/types/dinero.js/dinero.js-tests.ts @@ -1,21 +1,30 @@ -import Dinero = require("dinero.js"); +import Dinero = require('dinero.js'); +// Defaults +Dinero.defaultAmount = 100; +Dinero.defaultCurrency = 'USD'; +Dinero.defaultPrecision = 2; +// Globals +Dinero.globalLocale = 'en-US'; +Dinero.globalFormat = '0,0 dollar'; +Dinero.globalRoundingMode = 'HALF_UP'; +Dinero.globalFormatRoundingMode = '0,0 dollar'; Dinero.globalExchangeRatesApi = { - endpoint: "https://yourexchangerates.api/latest?base={{from}}", - propertyPath: "data.rates.{{to}}", - headers: { - "user-key": "xxxxxxxxx", - }, + endpoint: 'https://yourexchangerates.api/latest?base={{from}}', + propertyPath: 'data.rates.{{to}}', + headers: { + 'user-key': 'xxxxxxxxx', + }, }; Dinero.globalExchangeRatesApi = { - endpoint: "https://yourexchangerates.api/latest?base={{from}}", - propertyPath: "data.rates.{{to}}", - roundingMode: "HALF_UP", + endpoint: 'https://yourexchangerates.api/latest?base={{from}}', + propertyPath: 'data.rates.{{to}}', + roundingMode: 'HALF_UP', }; Dinero(); Dinero({ amount: 1 }); -Dinero({ currency: "USD" }); +Dinero({ currency: 'USD' }); Dinero({ precision: 2 }); let number: number; @@ -28,26 +37,27 @@ let dineroObject: Dinero.DineroObject; number = dinero.getAmount(); string = dinero.getCurrency(); -string = dinero.setLocale("fr-FR").getLocale(); +string = dinero.setLocale('fr-FR').getLocale(); number = dinero.convertPrecision(4).getPrecision(); +number = dinero.convertPrecision(4, 'HALF_DOWN').getPrecision(); dinero = dinero.add(Dinero({ amount: 104545, precision: 4 })); dinero = dinero.subtract(Dinero({ amount: 104545, precision: 4 })); dinero = dinero.multiply(2.00125); -dinero = dinero.multiply(2.00125, "HALF_UP"); +dinero = dinero.multiply(2.00125, 'HALF_UP'); dinero = dinero.divide(2); -dinero = dinero.divide(2, "HALF_UP"); +dinero = dinero.divide(2, 'HALF_UP'); dinero = dinero.percentage(50); dineroArr = dinero.allocate([50, 50]); -dinero.convert("EUR").then(d => (dinero = d)); -dinero.convert("XBT", { - endpoint: "https://yourexchangerates.api/latest?base={{from}}", - propertyPath: "data.rates.{{to}}", - headers: { - "user-key": "xxxxxxxxx", - }, - roundingMode: "HALF_UP", +dinero.convert('EUR').then(d => (dinero = d)); +dinero.convert('XBT', { + endpoint: 'https://yourexchangerates.api/latest?base={{from}}', + propertyPath: 'data.rates.{{to}}', + headers: { + 'user-key': 'xxxxxxxxx', + }, + roundingMode: 'HALF_UP', }); -boolean = dinero.equalsTo(Dinero({ amount: 500, currency: "EUR" })); +boolean = dinero.equalsTo(Dinero({ amount: 500, currency: 'EUR' })); boolean = dinero.lessThan(Dinero({ amount: 800 })); boolean = dinero.lessThanOrEqual(Dinero({ amount: 800 })); boolean = dinero.greaterThan(Dinero({ amount: 800 })); @@ -57,15 +67,15 @@ boolean = dinero.isPositive(); boolean = dinero.isNegative(); boolean = dinero.hasSubUnits(); boolean = dinero.hasCents(); -boolean = dinero.hasSameCurrency(Dinero({ amount: 1000, currency: "EUR" })); -boolean = dinero.hasSameAmount(Dinero({ amount: 1000, currency: "EUR" })); -string = dinero.toFormat("0,0 dollar"); -string = dinero.toFormat("0,0 dollar", "HALF_EVEN"); +boolean = dinero.hasSameCurrency(Dinero({ amount: 1000, currency: 'EUR' })); +boolean = dinero.hasSameAmount(Dinero({ amount: 1000, currency: 'EUR' })); +string = dinero.toFormat('0,0 dollar'); +string = dinero.toFormat('0,0 dollar', 'HALF_EVEN'); number = dinero.toUnit(); number = dinero.toRoundedUnit(1); -number = dinero.toRoundedUnit(1, "HALF_EVEN"); +number = dinero.toRoundedUnit(1, 'HALF_EVEN'); dineroObject = dinero.toObject(); dineroArr = Dinero.normalizePrecision([ - Dinero({ amount: 100, precision: 2 }), - Dinero({ amount: 1000, precision: 3 }), + Dinero({ amount: 100, precision: 2 }), + Dinero({ amount: 1000, precision: 3 }), ]); diff --git a/types/dinero.js/index.d.ts b/types/dinero.js/index.d.ts index 547cb4ef44..174abfbd28 100644 --- a/types/dinero.js/index.d.ts +++ b/types/dinero.js/index.d.ts @@ -1,6 +1,7 @@ -// Type definitions for dinero.js 1.4 +// Type definitions for dinero.js 1.6 // Project: https://sarahdayan.github.io/dinero.js // Definitions by: BendingBender +// David Acosta // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped // TypeScript Version: 2.1 @@ -11,15 +12,19 @@ export = DineroFactory; declare function DineroFactory(options?: Dinero.Options): DineroFactory.Dinero; declare namespace DineroFactory { - let globalExchangeRatesApi: ExchangeRatesApiOptions; - let globalFormat: string; + let defaultAmount: number; + let defaultCurrency: Currency; + let defaultPrecision: number; let globalLocale: string; - let globalRoundingMode: string; - function normalizePrecision(objects: Dinero[]): Dinero[]; + let globalFormat: string; + let globalRoundingMode: RoundingMode; + let globalFormatRoundingMode: string; + let globalExchangeRatesApi: ExchangeRatesApiOptions; + function normalizePrecision(objects: ReadonlyArray): Dinero[]; interface Options { amount?: number; - currency?: string; + currency?: Currency; precision?: number; } @@ -29,13 +34,13 @@ declare namespace DineroFactory { getLocale(): string; setLocale(newLocale: string): Dinero; getPrecision(): number; - convertPrecision(newPrecision: number): Dinero; + convertPrecision(newPrecision: number, roundingMode?: RoundingMode): Dinero; add(addend: Dinero): Dinero; subtract(subtrahend: Dinero): Dinero; multiply(multiplier: number, roundingMode?: RoundingMode): Dinero; divide(divisor: number, roundingMode?: RoundingMode): Dinero; percentage(percentage: number): Dinero; - allocate(ratios: number[]): Dinero[]; + allocate(ratios: ReadonlyArray): Dinero[]; convert(currency: string, options?: ExchangeRatesApiOptions): Promise; equalsTo(comparator: Dinero): boolean; lessThan(comparator: Dinero): boolean; @@ -59,12 +64,12 @@ declare namespace DineroFactory { } type RoundingMode = - | "HALF_ODD" - | "HALF_EVEN" - | "HALF_UP" - | "HALF_DOWN" - | "HALF_TOWARDS_ZERO" - | "HALF_AWAY_FROM_ZERO"; + | 'HALF_ODD' + | 'HALF_EVEN' + | 'HALF_UP' + | 'HALF_DOWN' + | 'HALF_TOWARDS_ZERO' + | 'HALF_AWAY_FROM_ZERO'; interface ExchangeRatesApiOptions { endpoint: string; @@ -75,7 +80,193 @@ declare namespace DineroFactory { interface DineroObject { amount: number; - currency: string; + currency: Currency; precision: number; } + + /** + * ISO 4217 CURRENCY CODES as specified in the documentation + * Taken from https://www.iso.org/iso-4217-currency-codes.html + * sorted and parsed + */ + type Currency = + | 'AED' + | 'AFN' + | 'ALL' + | 'AMD' + | 'ANG' + | 'AOA' + | 'ARS' + | 'AUD' + | 'AWG' + | 'AZN' + | 'BAM' + | 'BBD' + | 'BDT' + | 'BGN' + | 'BHD' + | 'BIF' + | 'BMD' + | 'BND' + | 'BOB' + | 'BOV' + | 'BRL' + | 'BSD' + | 'BTN' + | 'BWP' + | 'BYN' + | 'BZD' + | 'CAD' + | 'CDF' + | 'CHE' + | 'CHF' + | 'CHW' + | 'CLF' + | 'CLP' + | 'CNY' + | 'COP' + | 'COU' + | 'CRC' + | 'CUC' + | 'CUP' + | 'CVE' + | 'CZK' + | 'DJF' + | 'DKK' + | 'DOP' + | 'DZD' + | 'EGP' + | 'ERN' + | 'ETB' + | 'EUR' + | 'FJD' + | 'FKP' + | 'GBP' + | 'GEL' + | 'GHS' + | 'GIP' + | 'GMD' + | 'GNF' + | 'GTQ' + | 'GYD' + | 'HKD' + | 'HNL' + | 'HRK' + | 'HTG' + | 'HUF' + | 'IDR' + | 'ILS' + | 'INR' + | 'IQD' + | 'IRR' + | 'ISK' + | 'JMD' + | 'JOD' + | 'JPY' + | 'KES' + | 'KGS' + | 'KHR' + | 'KMF' + | 'KPW' + | 'KRW' + | 'KWD' + | 'KYD' + | 'KZT' + | 'LAK' + | 'LBP' + | 'LKR' + | 'LRD' + | 'LSL' + | 'LYD' + | 'MAD' + | 'MDL' + | 'MGA' + | 'MKD' + | 'MMK' + | 'MNT' + | 'MOP' + | 'MRU' + | 'MUR' + | 'MVR' + | 'MWK' + | 'MXN' + | 'MXV' + | 'MYR' + | 'MZN' + | 'NAD' + | 'NGN' + | 'NIO' + | 'NOK' + | 'NPR' + | 'NZD' + | 'OMR' + | 'PAB' + | 'PEN' + | 'PGK' + | 'PHP' + | 'PKR' + | 'PLN' + | 'PYG' + | 'QAR' + | 'RON' + | 'RSD' + | 'RUB' + | 'RWF' + | 'SAR' + | 'SBD' + | 'SCR' + | 'SDG' + | 'SEK' + | 'SGD' + | 'SHP' + | 'SLL' + | 'SOS' + | 'SRD' + | 'SSP' + | 'STN' + | 'SVC' + | 'SYP' + | 'SZL' + | 'THB' + | 'TJS' + | 'TMT' + | 'TND' + | 'TOP' + | 'TRY' + | 'TTD' + | 'TWD' + | 'TZS' + | 'UAH' + | 'UGX' + | 'USD' + | 'USN' + | 'UYI' + | 'UYU' + | 'UYW' + | 'UZS' + | 'VES' + | 'VND' + | 'VUV' + | 'WST' + | 'XAF' + | 'XAG' + | 'XAU' + | 'XBA' + | 'XBB' + | 'XBC' + | 'XBD' + | 'XCD' + | 'XDR' + | 'XOF' + | 'XPD' + | 'XPF' + | 'XPT' + | 'XSU' + | 'XTS' + | 'XUA' + | 'XXX' + | 'YER' + | 'ZAR' + | 'ZMW' + | 'ZWL'; }