@citrineos/base
Version:
The base module for OCPP v2.0.1 including all interfaces. This module is not intended to be used directly, but rather as a dependency for other modules.
62 lines • 1.92 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.Currency = void 0;
exports.isCurrencyCode = isCurrencyCode;
exports.currencyCode = currencyCode;
exports.isCurrencyScale = isCurrencyScale;
exports.currencyScale = currencyScale;
const assertion_1 = require("../assertion/assertion");
/**
* ISO-4217 currency codes.
*/
const CURRENCY_CODES = ['USD', 'EUR', 'CAD', 'GBP'];
function isCurrencyCode(value) {
return CURRENCY_CODES.includes(value);
}
function currencyCode(value) {
(0, assertion_1.assert)(isCurrencyCode(value), `Unsupported currency code: ${value}`);
return value;
}
const CURRENCY_SCALES = [2];
function isCurrencyScale(value) {
return CURRENCY_SCALES.includes(value);
}
function currencyScale(value) {
(0, assertion_1.assert)(isCurrencyScale(value), `Unsupported currency scale: ${value}`);
return value;
}
/**
* Represents a currency with decimal precision.
*
* To add support for a currency:
* 1. Add the new currency code to the {@link CURRENCY_CODES} array.
* 2. Create a corresponding mapping in the {@link SUPPORTED_CURRENCIES} map.
*/
class Currency {
constructor(code, scale) {
this._code = currencyCode(code);
this._scale = currencyScale(scale);
}
get code() {
return this._code;
}
get scale() {
return this._scale;
}
static of(code) {
(0, assertion_1.assert)(isCurrencyCode(code), `Unsupported currency code: ${code}`);
const currency = Currency.SUPPORTED_CURRENCIES[code];
if (currency === undefined) {
throw Error(`${code} currency is not supported`);
}
return currency;
}
}
exports.Currency = Currency;
Currency.SUPPORTED_CURRENCIES = {
USD: new Currency('USD', 2),
EUR: new Currency('EUR', 2),
CAD: new Currency('CAD', 2),
GBP: new Currency('GBP', 2),
};
//# sourceMappingURL=Currency.js.map