Initial commit
This commit is contained in:
42
node_modules/currency.js/dist/currency.d.ts
generated
vendored
Normal file
42
node_modules/currency.js/dist/currency.d.ts
generated
vendored
Normal file
@@ -0,0 +1,42 @@
|
||||
declare module 'currency.js' {
|
||||
namespace currency {
|
||||
type Any = number | string | currency;
|
||||
type Format = (currency?: currency, opts?: Options) => string;
|
||||
interface Constructor {
|
||||
(value: currency.Any, opts?: currency.Options): currency,
|
||||
new(value: currency.Any, opts?: currency.Options): currency
|
||||
}
|
||||
interface Options {
|
||||
symbol?: string,
|
||||
separator?: string,
|
||||
decimal?: string,
|
||||
errorOnInvalid?: boolean,
|
||||
precision?: number,
|
||||
increment?: number,
|
||||
useVedic?: boolean,
|
||||
pattern?: string,
|
||||
negativePattern?: string,
|
||||
format?: currency.Format,
|
||||
fromCents?: boolean
|
||||
}
|
||||
}
|
||||
|
||||
interface currency {
|
||||
add(number: currency.Any): currency;
|
||||
subtract(number: currency.Any): currency;
|
||||
multiply(number: currency.Any): currency;
|
||||
divide(number: currency.Any): currency;
|
||||
distribute(count: number): Array<currency>;
|
||||
dollars(): number;
|
||||
cents(): number;
|
||||
format(opts?: currency.Options | currency.Format): string;
|
||||
toString(): string;
|
||||
toJSON(): number;
|
||||
readonly intValue: number;
|
||||
readonly value: number;
|
||||
}
|
||||
|
||||
const currency: currency.Constructor;
|
||||
|
||||
export = currency;
|
||||
}
|
||||
254
node_modules/currency.js/dist/currency.es.js
generated
vendored
Normal file
254
node_modules/currency.js/dist/currency.es.js
generated
vendored
Normal file
@@ -0,0 +1,254 @@
|
||||
/*!
|
||||
* currency.js - v2.0.4
|
||||
* http://scurker.github.io/currency.js
|
||||
*
|
||||
* Copyright (c) 2021 Jason Wilson
|
||||
* Released under MIT license
|
||||
*/
|
||||
|
||||
var defaults = {
|
||||
symbol: '$',
|
||||
separator: ',',
|
||||
decimal: '.',
|
||||
errorOnInvalid: false,
|
||||
precision: 2,
|
||||
pattern: '!#',
|
||||
negativePattern: '-!#',
|
||||
format: format,
|
||||
fromCents: false
|
||||
};
|
||||
|
||||
var round = function round(v) {
|
||||
return Math.round(v);
|
||||
};
|
||||
|
||||
var pow = function pow(p) {
|
||||
return Math.pow(10, p);
|
||||
};
|
||||
|
||||
var rounding = function rounding(value, increment) {
|
||||
return round(value / increment) * increment;
|
||||
};
|
||||
|
||||
var groupRegex = /(\d)(?=(\d{3})+\b)/g;
|
||||
var vedicRegex = /(\d)(?=(\d\d)+\d\b)/g;
|
||||
/**
|
||||
* Create a new instance of currency.js
|
||||
* @param {number|string|currency} value
|
||||
* @param {object} [opts]
|
||||
*/
|
||||
|
||||
function currency(value, opts) {
|
||||
var that = this;
|
||||
|
||||
if (!(that instanceof currency)) {
|
||||
return new currency(value, opts);
|
||||
}
|
||||
|
||||
var settings = Object.assign({}, defaults, opts),
|
||||
precision = pow(settings.precision),
|
||||
v = parse(value, settings);
|
||||
that.intValue = v;
|
||||
that.value = v / precision; // Set default incremental value
|
||||
|
||||
settings.increment = settings.increment || 1 / precision; // Support vedic numbering systems
|
||||
// see: https://en.wikipedia.org/wiki/Indian_numbering_system
|
||||
|
||||
if (settings.useVedic) {
|
||||
settings.groups = vedicRegex;
|
||||
} else {
|
||||
settings.groups = groupRegex;
|
||||
} // Intended for internal usage only - subject to change
|
||||
|
||||
|
||||
this.s = settings;
|
||||
this.p = precision;
|
||||
}
|
||||
|
||||
function parse(value, opts) {
|
||||
var useRounding = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
|
||||
var v = 0,
|
||||
decimal = opts.decimal,
|
||||
errorOnInvalid = opts.errorOnInvalid,
|
||||
decimals = opts.precision,
|
||||
fromCents = opts.fromCents,
|
||||
precision = pow(decimals),
|
||||
isNumber = typeof value === 'number',
|
||||
isCurrency = value instanceof currency;
|
||||
|
||||
if (isCurrency && fromCents) {
|
||||
return value.intValue;
|
||||
}
|
||||
|
||||
if (isNumber || isCurrency) {
|
||||
v = isCurrency ? value.value : value;
|
||||
} else if (typeof value === 'string') {
|
||||
var regex = new RegExp('[^-\\d' + decimal + ']', 'g'),
|
||||
decimalString = new RegExp('\\' + decimal, 'g');
|
||||
v = value.replace(/\((.*)\)/, '-$1') // allow negative e.g. (1.99)
|
||||
.replace(regex, '') // replace any non numeric values
|
||||
.replace(decimalString, '.'); // convert any decimal values
|
||||
|
||||
v = v || 0;
|
||||
} else {
|
||||
if (errorOnInvalid) {
|
||||
throw Error('Invalid Input');
|
||||
}
|
||||
|
||||
v = 0;
|
||||
}
|
||||
|
||||
if (!fromCents) {
|
||||
v *= precision; // scale number to integer value
|
||||
|
||||
v = v.toFixed(4); // Handle additional decimal for proper rounding.
|
||||
}
|
||||
|
||||
return useRounding ? round(v) : v;
|
||||
}
|
||||
/**
|
||||
* Formats a currency object
|
||||
* @param currency
|
||||
* @param {object} [opts]
|
||||
*/
|
||||
|
||||
|
||||
function format(currency, settings) {
|
||||
var pattern = settings.pattern,
|
||||
negativePattern = settings.negativePattern,
|
||||
symbol = settings.symbol,
|
||||
separator = settings.separator,
|
||||
decimal = settings.decimal,
|
||||
groups = settings.groups,
|
||||
split = ('' + currency).replace(/^-/, '').split('.'),
|
||||
dollars = split[0],
|
||||
cents = split[1];
|
||||
return (currency.value >= 0 ? pattern : negativePattern).replace('!', symbol).replace('#', dollars.replace(groups, '$1' + separator) + (cents ? decimal + cents : ''));
|
||||
}
|
||||
|
||||
currency.prototype = {
|
||||
/**
|
||||
* Adds values together.
|
||||
* @param {number} number
|
||||
* @returns {currency}
|
||||
*/
|
||||
add: function add(number) {
|
||||
var intValue = this.intValue,
|
||||
_settings = this.s,
|
||||
_precision = this.p;
|
||||
return currency((intValue += parse(number, _settings)) / (_settings.fromCents ? 1 : _precision), _settings);
|
||||
},
|
||||
|
||||
/**
|
||||
* Subtracts value.
|
||||
* @param {number} number
|
||||
* @returns {currency}
|
||||
*/
|
||||
subtract: function subtract(number) {
|
||||
var intValue = this.intValue,
|
||||
_settings = this.s,
|
||||
_precision = this.p;
|
||||
return currency((intValue -= parse(number, _settings)) / (_settings.fromCents ? 1 : _precision), _settings);
|
||||
},
|
||||
|
||||
/**
|
||||
* Multiplies values.
|
||||
* @param {number} number
|
||||
* @returns {currency}
|
||||
*/
|
||||
multiply: function multiply(number) {
|
||||
var intValue = this.intValue,
|
||||
_settings = this.s;
|
||||
return currency((intValue *= number) / (_settings.fromCents ? 1 : pow(_settings.precision)), _settings);
|
||||
},
|
||||
|
||||
/**
|
||||
* Divides value.
|
||||
* @param {number} number
|
||||
* @returns {currency}
|
||||
*/
|
||||
divide: function divide(number) {
|
||||
var intValue = this.intValue,
|
||||
_settings = this.s;
|
||||
return currency(intValue /= parse(number, _settings, false), _settings);
|
||||
},
|
||||
|
||||
/**
|
||||
* Takes the currency amount and distributes the values evenly. Any extra pennies
|
||||
* left over from the distribution will be stacked onto the first set of entries.
|
||||
* @param {number} count
|
||||
* @returns {array}
|
||||
*/
|
||||
distribute: function distribute(count) {
|
||||
var intValue = this.intValue,
|
||||
_precision = this.p,
|
||||
_settings = this.s,
|
||||
distribution = [],
|
||||
split = Math[intValue >= 0 ? 'floor' : 'ceil'](intValue / count),
|
||||
pennies = Math.abs(intValue - split * count),
|
||||
precision = _settings.fromCents ? 1 : _precision;
|
||||
|
||||
for (; count !== 0; count--) {
|
||||
var item = currency(split / precision, _settings); // Add any left over pennies
|
||||
|
||||
pennies-- > 0 && (item = item[intValue >= 0 ? 'add' : 'subtract'](1 / precision));
|
||||
distribution.push(item);
|
||||
}
|
||||
|
||||
return distribution;
|
||||
},
|
||||
|
||||
/**
|
||||
* Returns the dollar value.
|
||||
* @returns {number}
|
||||
*/
|
||||
dollars: function dollars() {
|
||||
return ~~this.value;
|
||||
},
|
||||
|
||||
/**
|
||||
* Returns the cent value.
|
||||
* @returns {number}
|
||||
*/
|
||||
cents: function cents() {
|
||||
var intValue = this.intValue,
|
||||
_precision = this.p;
|
||||
return ~~(intValue % _precision);
|
||||
},
|
||||
|
||||
/**
|
||||
* Formats the value as a string according to the formatting settings.
|
||||
* @param {boolean} useSymbol - format with currency symbol
|
||||
* @returns {string}
|
||||
*/
|
||||
format: function format(options) {
|
||||
var _settings = this.s;
|
||||
|
||||
if (typeof options === 'function') {
|
||||
return options(this, _settings);
|
||||
}
|
||||
|
||||
return _settings.format(this, Object.assign({}, _settings, options));
|
||||
},
|
||||
|
||||
/**
|
||||
* Formats the value as a string according to the formatting settings.
|
||||
* @returns {string}
|
||||
*/
|
||||
toString: function toString() {
|
||||
var intValue = this.intValue,
|
||||
_precision = this.p,
|
||||
_settings = this.s;
|
||||
return rounding(intValue / _precision, _settings.increment).toFixed(_settings.precision);
|
||||
},
|
||||
|
||||
/**
|
||||
* Value for JSON serialization.
|
||||
* @returns {float}
|
||||
*/
|
||||
toJSON: function toJSON() {
|
||||
return this.value;
|
||||
}
|
||||
};
|
||||
|
||||
export default currency;
|
||||
256
node_modules/currency.js/dist/currency.js
generated
vendored
Normal file
256
node_modules/currency.js/dist/currency.js
generated
vendored
Normal file
@@ -0,0 +1,256 @@
|
||||
/*!
|
||||
* currency.js - v2.0.4
|
||||
* http://scurker.github.io/currency.js
|
||||
*
|
||||
* Copyright (c) 2021 Jason Wilson
|
||||
* Released under MIT license
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
|
||||
var defaults = {
|
||||
symbol: '$',
|
||||
separator: ',',
|
||||
decimal: '.',
|
||||
errorOnInvalid: false,
|
||||
precision: 2,
|
||||
pattern: '!#',
|
||||
negativePattern: '-!#',
|
||||
format: format,
|
||||
fromCents: false
|
||||
};
|
||||
|
||||
var round = function round(v) {
|
||||
return Math.round(v);
|
||||
};
|
||||
|
||||
var pow = function pow(p) {
|
||||
return Math.pow(10, p);
|
||||
};
|
||||
|
||||
var rounding = function rounding(value, increment) {
|
||||
return round(value / increment) * increment;
|
||||
};
|
||||
|
||||
var groupRegex = /(\d)(?=(\d{3})+\b)/g;
|
||||
var vedicRegex = /(\d)(?=(\d\d)+\d\b)/g;
|
||||
/**
|
||||
* Create a new instance of currency.js
|
||||
* @param {number|string|currency} value
|
||||
* @param {object} [opts]
|
||||
*/
|
||||
|
||||
function currency(value, opts) {
|
||||
var that = this;
|
||||
|
||||
if (!(that instanceof currency)) {
|
||||
return new currency(value, opts);
|
||||
}
|
||||
|
||||
var settings = Object.assign({}, defaults, opts),
|
||||
precision = pow(settings.precision),
|
||||
v = parse(value, settings);
|
||||
that.intValue = v;
|
||||
that.value = v / precision; // Set default incremental value
|
||||
|
||||
settings.increment = settings.increment || 1 / precision; // Support vedic numbering systems
|
||||
// see: https://en.wikipedia.org/wiki/Indian_numbering_system
|
||||
|
||||
if (settings.useVedic) {
|
||||
settings.groups = vedicRegex;
|
||||
} else {
|
||||
settings.groups = groupRegex;
|
||||
} // Intended for internal usage only - subject to change
|
||||
|
||||
|
||||
this.s = settings;
|
||||
this.p = precision;
|
||||
}
|
||||
|
||||
function parse(value, opts) {
|
||||
var useRounding = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
|
||||
var v = 0,
|
||||
decimal = opts.decimal,
|
||||
errorOnInvalid = opts.errorOnInvalid,
|
||||
decimals = opts.precision,
|
||||
fromCents = opts.fromCents,
|
||||
precision = pow(decimals),
|
||||
isNumber = typeof value === 'number',
|
||||
isCurrency = value instanceof currency;
|
||||
|
||||
if (isCurrency && fromCents) {
|
||||
return value.intValue;
|
||||
}
|
||||
|
||||
if (isNumber || isCurrency) {
|
||||
v = isCurrency ? value.value : value;
|
||||
} else if (typeof value === 'string') {
|
||||
var regex = new RegExp('[^-\\d' + decimal + ']', 'g'),
|
||||
decimalString = new RegExp('\\' + decimal, 'g');
|
||||
v = value.replace(/\((.*)\)/, '-$1') // allow negative e.g. (1.99)
|
||||
.replace(regex, '') // replace any non numeric values
|
||||
.replace(decimalString, '.'); // convert any decimal values
|
||||
|
||||
v = v || 0;
|
||||
} else {
|
||||
if (errorOnInvalid) {
|
||||
throw Error('Invalid Input');
|
||||
}
|
||||
|
||||
v = 0;
|
||||
}
|
||||
|
||||
if (!fromCents) {
|
||||
v *= precision; // scale number to integer value
|
||||
|
||||
v = v.toFixed(4); // Handle additional decimal for proper rounding.
|
||||
}
|
||||
|
||||
return useRounding ? round(v) : v;
|
||||
}
|
||||
/**
|
||||
* Formats a currency object
|
||||
* @param currency
|
||||
* @param {object} [opts]
|
||||
*/
|
||||
|
||||
|
||||
function format(currency, settings) {
|
||||
var pattern = settings.pattern,
|
||||
negativePattern = settings.negativePattern,
|
||||
symbol = settings.symbol,
|
||||
separator = settings.separator,
|
||||
decimal = settings.decimal,
|
||||
groups = settings.groups,
|
||||
split = ('' + currency).replace(/^-/, '').split('.'),
|
||||
dollars = split[0],
|
||||
cents = split[1];
|
||||
return (currency.value >= 0 ? pattern : negativePattern).replace('!', symbol).replace('#', dollars.replace(groups, '$1' + separator) + (cents ? decimal + cents : ''));
|
||||
}
|
||||
|
||||
currency.prototype = {
|
||||
/**
|
||||
* Adds values together.
|
||||
* @param {number} number
|
||||
* @returns {currency}
|
||||
*/
|
||||
add: function add(number) {
|
||||
var intValue = this.intValue,
|
||||
_settings = this.s,
|
||||
_precision = this.p;
|
||||
return currency((intValue += parse(number, _settings)) / (_settings.fromCents ? 1 : _precision), _settings);
|
||||
},
|
||||
|
||||
/**
|
||||
* Subtracts value.
|
||||
* @param {number} number
|
||||
* @returns {currency}
|
||||
*/
|
||||
subtract: function subtract(number) {
|
||||
var intValue = this.intValue,
|
||||
_settings = this.s,
|
||||
_precision = this.p;
|
||||
return currency((intValue -= parse(number, _settings)) / (_settings.fromCents ? 1 : _precision), _settings);
|
||||
},
|
||||
|
||||
/**
|
||||
* Multiplies values.
|
||||
* @param {number} number
|
||||
* @returns {currency}
|
||||
*/
|
||||
multiply: function multiply(number) {
|
||||
var intValue = this.intValue,
|
||||
_settings = this.s;
|
||||
return currency((intValue *= number) / (_settings.fromCents ? 1 : pow(_settings.precision)), _settings);
|
||||
},
|
||||
|
||||
/**
|
||||
* Divides value.
|
||||
* @param {number} number
|
||||
* @returns {currency}
|
||||
*/
|
||||
divide: function divide(number) {
|
||||
var intValue = this.intValue,
|
||||
_settings = this.s;
|
||||
return currency(intValue /= parse(number, _settings, false), _settings);
|
||||
},
|
||||
|
||||
/**
|
||||
* Takes the currency amount and distributes the values evenly. Any extra pennies
|
||||
* left over from the distribution will be stacked onto the first set of entries.
|
||||
* @param {number} count
|
||||
* @returns {array}
|
||||
*/
|
||||
distribute: function distribute(count) {
|
||||
var intValue = this.intValue,
|
||||
_precision = this.p,
|
||||
_settings = this.s,
|
||||
distribution = [],
|
||||
split = Math[intValue >= 0 ? 'floor' : 'ceil'](intValue / count),
|
||||
pennies = Math.abs(intValue - split * count),
|
||||
precision = _settings.fromCents ? 1 : _precision;
|
||||
|
||||
for (; count !== 0; count--) {
|
||||
var item = currency(split / precision, _settings); // Add any left over pennies
|
||||
|
||||
pennies-- > 0 && (item = item[intValue >= 0 ? 'add' : 'subtract'](1 / precision));
|
||||
distribution.push(item);
|
||||
}
|
||||
|
||||
return distribution;
|
||||
},
|
||||
|
||||
/**
|
||||
* Returns the dollar value.
|
||||
* @returns {number}
|
||||
*/
|
||||
dollars: function dollars() {
|
||||
return ~~this.value;
|
||||
},
|
||||
|
||||
/**
|
||||
* Returns the cent value.
|
||||
* @returns {number}
|
||||
*/
|
||||
cents: function cents() {
|
||||
var intValue = this.intValue,
|
||||
_precision = this.p;
|
||||
return ~~(intValue % _precision);
|
||||
},
|
||||
|
||||
/**
|
||||
* Formats the value as a string according to the formatting settings.
|
||||
* @param {boolean} useSymbol - format with currency symbol
|
||||
* @returns {string}
|
||||
*/
|
||||
format: function format(options) {
|
||||
var _settings = this.s;
|
||||
|
||||
if (typeof options === 'function') {
|
||||
return options(this, _settings);
|
||||
}
|
||||
|
||||
return _settings.format(this, Object.assign({}, _settings, options));
|
||||
},
|
||||
|
||||
/**
|
||||
* Formats the value as a string according to the formatting settings.
|
||||
* @returns {string}
|
||||
*/
|
||||
toString: function toString() {
|
||||
var intValue = this.intValue,
|
||||
_precision = this.p,
|
||||
_settings = this.s;
|
||||
return rounding(intValue / _precision, _settings.increment).toFixed(_settings.precision);
|
||||
},
|
||||
|
||||
/**
|
||||
* Value for JSON serialization.
|
||||
* @returns {float}
|
||||
*/
|
||||
toJSON: function toJSON() {
|
||||
return this.value;
|
||||
}
|
||||
};
|
||||
|
||||
module.exports = currency;
|
||||
37
node_modules/currency.js/dist/currency.js.flow
generated
vendored
Normal file
37
node_modules/currency.js/dist/currency.js.flow
generated
vendored
Normal file
@@ -0,0 +1,37 @@
|
||||
// @flow
|
||||
declare type $currency$any = number | string | currency;
|
||||
|
||||
declare type formatFunction = (currency: currency, options: $currency$opts) => string;
|
||||
|
||||
declare type $currency$opts = {
|
||||
symbol?: string,
|
||||
separator?: string,
|
||||
decimal?: string,
|
||||
errorOnInvalid?: boolean,
|
||||
precision?: number,
|
||||
increment?: number,
|
||||
useVedic?: boolean,
|
||||
pattern?: string,
|
||||
negativePattern?: string,
|
||||
format?: formatFunction,
|
||||
fromCents?: boolean
|
||||
}
|
||||
|
||||
declare class currency {
|
||||
static (value: $currency$any, opts?: $currency$opts): currency,
|
||||
constructor(value: $currency$any, opts?: $currency$opts): currency,
|
||||
add(number: $currency$any): currency;
|
||||
subtract(number: $currency$any): currency;
|
||||
multiply(number: $currency$any): currency;
|
||||
divide(number: $currency$any): currency;
|
||||
distribute(count: number): Array<currency>;
|
||||
dollars(): number;
|
||||
cents(): number;
|
||||
format(options?: $currency$opts | formatFunction): string;
|
||||
toString(): string;
|
||||
toJSON(): number;
|
||||
+intValue: number;
|
||||
+value: number;
|
||||
}
|
||||
|
||||
declare module.exports: typeof currency;
|
||||
12
node_modules/currency.js/dist/currency.min.js
generated
vendored
Normal file
12
node_modules/currency.js/dist/currency.min.js
generated
vendored
Normal file
@@ -0,0 +1,12 @@
|
||||
/*
|
||||
currency.js - v2.0.4
|
||||
http://scurker.github.io/currency.js
|
||||
|
||||
Copyright (c) 2021 Jason Wilson
|
||||
Released under MIT license
|
||||
*/
|
||||
(function(e,g){"object"===typeof exports&&"undefined"!==typeof module?module.exports=g():"function"===typeof define&&define.amd?define(g):(e=e||self,e.currency=g())})(this,function(){function e(b,a){if(!(this instanceof e))return new e(b,a);a=Object.assign({},m,a);var d=Math.pow(10,a.precision);this.intValue=b=g(b,a);this.value=b/d;a.increment=a.increment||1/d;a.groups=a.useVedic?n:p;this.s=a;this.p=d}function g(b,a){var d=2<arguments.length&&void 0!==arguments[2]?arguments[2]:!0;var c=a.decimal;
|
||||
var h=a.errorOnInvalid,k=a.fromCents,l=Math.pow(10,a.precision),f=b instanceof e;if(f&&k)return b.intValue;if("number"===typeof b||f)c=f?b.value:b;else if("string"===typeof b)h=new RegExp("[^-\\d"+c+"]","g"),c=new RegExp("\\"+c,"g"),c=(c=b.replace(/\((.*)\)/,"-$1").replace(h,"").replace(c,"."))||0;else{if(h)throw Error("Invalid Input");c=0}k||(c=(c*l).toFixed(4));return d?Math.round(c):c}var m={symbol:"$",separator:",",decimal:".",errorOnInvalid:!1,precision:2,pattern:"!#",negativePattern:"-!#",format:function(b,
|
||||
a){var d=a.pattern,c=a.negativePattern,h=a.symbol,k=a.separator,l=a.decimal;a=a.groups;var f=(""+b).replace(/^-/,"").split("."),q=f[0];f=f[1];return(0<=b.value?d:c).replace("!",h).replace("#",q.replace(a,"$1"+k)+(f?l+f:""))},fromCents:!1},p=/(\d)(?=(\d{3})+\b)/g,n=/(\d)(?=(\d\d)+\d\b)/g;e.prototype={add:function(b){var a=this.s,d=this.p;return e((this.intValue+g(b,a))/(a.fromCents?1:d),a)},subtract:function(b){var a=this.s,d=this.p;return e((this.intValue-g(b,a))/(a.fromCents?1:d),a)},multiply:function(b){var a=
|
||||
this.s;return e(this.intValue*b/(a.fromCents?1:Math.pow(10,a.precision)),a)},divide:function(b){var a=this.s;return e(this.intValue/g(b,a,!1),a)},distribute:function(b){var a=this.intValue,d=this.p,c=this.s,h=[],k=Math[0<=a?"floor":"ceil"](a/b),l=Math.abs(a-k*b);for(d=c.fromCents?1:d;0!==b;b--){var f=e(k/d,c);0<l--&&(f=f[0<=a?"add":"subtract"](1/d));h.push(f)}return h},dollars:function(){return~~this.value},cents:function(){return~~(this.intValue%this.p)},format:function(b){var a=this.s;return"function"===
|
||||
typeof b?b(this,a):a.format(this,Object.assign({},a,b))},toString:function(){var b=this.s,a=b.increment;return(Math.round(this.intValue/this.p/a)*a).toFixed(b.precision)},toJSON:function(){return this.value}};return e});
|
||||
262
node_modules/currency.js/dist/currency.umd.js
generated
vendored
Normal file
262
node_modules/currency.js/dist/currency.umd.js
generated
vendored
Normal file
@@ -0,0 +1,262 @@
|
||||
/*!
|
||||
* currency.js - v2.0.4
|
||||
* http://scurker.github.io/currency.js
|
||||
*
|
||||
* Copyright (c) 2021 Jason Wilson
|
||||
* Released under MIT license
|
||||
*/
|
||||
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
||||
typeof define === 'function' && define.amd ? define(factory) :
|
||||
(global = global || self, global.currency = factory());
|
||||
}(this, (function () { 'use strict';
|
||||
|
||||
var defaults = {
|
||||
symbol: '$',
|
||||
separator: ',',
|
||||
decimal: '.',
|
||||
errorOnInvalid: false,
|
||||
precision: 2,
|
||||
pattern: '!#',
|
||||
negativePattern: '-!#',
|
||||
format: format,
|
||||
fromCents: false
|
||||
};
|
||||
|
||||
var round = function round(v) {
|
||||
return Math.round(v);
|
||||
};
|
||||
|
||||
var pow = function pow(p) {
|
||||
return Math.pow(10, p);
|
||||
};
|
||||
|
||||
var rounding = function rounding(value, increment) {
|
||||
return round(value / increment) * increment;
|
||||
};
|
||||
|
||||
var groupRegex = /(\d)(?=(\d{3})+\b)/g;
|
||||
var vedicRegex = /(\d)(?=(\d\d)+\d\b)/g;
|
||||
/**
|
||||
* Create a new instance of currency.js
|
||||
* @param {number|string|currency} value
|
||||
* @param {object} [opts]
|
||||
*/
|
||||
|
||||
function currency(value, opts) {
|
||||
var that = this;
|
||||
|
||||
if (!(that instanceof currency)) {
|
||||
return new currency(value, opts);
|
||||
}
|
||||
|
||||
var settings = Object.assign({}, defaults, opts),
|
||||
precision = pow(settings.precision),
|
||||
v = parse(value, settings);
|
||||
that.intValue = v;
|
||||
that.value = v / precision; // Set default incremental value
|
||||
|
||||
settings.increment = settings.increment || 1 / precision; // Support vedic numbering systems
|
||||
// see: https://en.wikipedia.org/wiki/Indian_numbering_system
|
||||
|
||||
if (settings.useVedic) {
|
||||
settings.groups = vedicRegex;
|
||||
} else {
|
||||
settings.groups = groupRegex;
|
||||
} // Intended for internal usage only - subject to change
|
||||
|
||||
|
||||
this.s = settings;
|
||||
this.p = precision;
|
||||
}
|
||||
|
||||
function parse(value, opts) {
|
||||
var useRounding = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
|
||||
var v = 0,
|
||||
decimal = opts.decimal,
|
||||
errorOnInvalid = opts.errorOnInvalid,
|
||||
decimals = opts.precision,
|
||||
fromCents = opts.fromCents,
|
||||
precision = pow(decimals),
|
||||
isNumber = typeof value === 'number',
|
||||
isCurrency = value instanceof currency;
|
||||
|
||||
if (isCurrency && fromCents) {
|
||||
return value.intValue;
|
||||
}
|
||||
|
||||
if (isNumber || isCurrency) {
|
||||
v = isCurrency ? value.value : value;
|
||||
} else if (typeof value === 'string') {
|
||||
var regex = new RegExp('[^-\\d' + decimal + ']', 'g'),
|
||||
decimalString = new RegExp('\\' + decimal, 'g');
|
||||
v = value.replace(/\((.*)\)/, '-$1') // allow negative e.g. (1.99)
|
||||
.replace(regex, '') // replace any non numeric values
|
||||
.replace(decimalString, '.'); // convert any decimal values
|
||||
|
||||
v = v || 0;
|
||||
} else {
|
||||
if (errorOnInvalid) {
|
||||
throw Error('Invalid Input');
|
||||
}
|
||||
|
||||
v = 0;
|
||||
}
|
||||
|
||||
if (!fromCents) {
|
||||
v *= precision; // scale number to integer value
|
||||
|
||||
v = v.toFixed(4); // Handle additional decimal for proper rounding.
|
||||
}
|
||||
|
||||
return useRounding ? round(v) : v;
|
||||
}
|
||||
/**
|
||||
* Formats a currency object
|
||||
* @param currency
|
||||
* @param {object} [opts]
|
||||
*/
|
||||
|
||||
|
||||
function format(currency, settings) {
|
||||
var pattern = settings.pattern,
|
||||
negativePattern = settings.negativePattern,
|
||||
symbol = settings.symbol,
|
||||
separator = settings.separator,
|
||||
decimal = settings.decimal,
|
||||
groups = settings.groups,
|
||||
split = ('' + currency).replace(/^-/, '').split('.'),
|
||||
dollars = split[0],
|
||||
cents = split[1];
|
||||
return (currency.value >= 0 ? pattern : negativePattern).replace('!', symbol).replace('#', dollars.replace(groups, '$1' + separator) + (cents ? decimal + cents : ''));
|
||||
}
|
||||
|
||||
currency.prototype = {
|
||||
/**
|
||||
* Adds values together.
|
||||
* @param {number} number
|
||||
* @returns {currency}
|
||||
*/
|
||||
add: function add(number) {
|
||||
var intValue = this.intValue,
|
||||
_settings = this.s,
|
||||
_precision = this.p;
|
||||
return currency((intValue += parse(number, _settings)) / (_settings.fromCents ? 1 : _precision), _settings);
|
||||
},
|
||||
|
||||
/**
|
||||
* Subtracts value.
|
||||
* @param {number} number
|
||||
* @returns {currency}
|
||||
*/
|
||||
subtract: function subtract(number) {
|
||||
var intValue = this.intValue,
|
||||
_settings = this.s,
|
||||
_precision = this.p;
|
||||
return currency((intValue -= parse(number, _settings)) / (_settings.fromCents ? 1 : _precision), _settings);
|
||||
},
|
||||
|
||||
/**
|
||||
* Multiplies values.
|
||||
* @param {number} number
|
||||
* @returns {currency}
|
||||
*/
|
||||
multiply: function multiply(number) {
|
||||
var intValue = this.intValue,
|
||||
_settings = this.s;
|
||||
return currency((intValue *= number) / (_settings.fromCents ? 1 : pow(_settings.precision)), _settings);
|
||||
},
|
||||
|
||||
/**
|
||||
* Divides value.
|
||||
* @param {number} number
|
||||
* @returns {currency}
|
||||
*/
|
||||
divide: function divide(number) {
|
||||
var intValue = this.intValue,
|
||||
_settings = this.s;
|
||||
return currency(intValue /= parse(number, _settings, false), _settings);
|
||||
},
|
||||
|
||||
/**
|
||||
* Takes the currency amount and distributes the values evenly. Any extra pennies
|
||||
* left over from the distribution will be stacked onto the first set of entries.
|
||||
* @param {number} count
|
||||
* @returns {array}
|
||||
*/
|
||||
distribute: function distribute(count) {
|
||||
var intValue = this.intValue,
|
||||
_precision = this.p,
|
||||
_settings = this.s,
|
||||
distribution = [],
|
||||
split = Math[intValue >= 0 ? 'floor' : 'ceil'](intValue / count),
|
||||
pennies = Math.abs(intValue - split * count),
|
||||
precision = _settings.fromCents ? 1 : _precision;
|
||||
|
||||
for (; count !== 0; count--) {
|
||||
var item = currency(split / precision, _settings); // Add any left over pennies
|
||||
|
||||
pennies-- > 0 && (item = item[intValue >= 0 ? 'add' : 'subtract'](1 / precision));
|
||||
distribution.push(item);
|
||||
}
|
||||
|
||||
return distribution;
|
||||
},
|
||||
|
||||
/**
|
||||
* Returns the dollar value.
|
||||
* @returns {number}
|
||||
*/
|
||||
dollars: function dollars() {
|
||||
return ~~this.value;
|
||||
},
|
||||
|
||||
/**
|
||||
* Returns the cent value.
|
||||
* @returns {number}
|
||||
*/
|
||||
cents: function cents() {
|
||||
var intValue = this.intValue,
|
||||
_precision = this.p;
|
||||
return ~~(intValue % _precision);
|
||||
},
|
||||
|
||||
/**
|
||||
* Formats the value as a string according to the formatting settings.
|
||||
* @param {boolean} useSymbol - format with currency symbol
|
||||
* @returns {string}
|
||||
*/
|
||||
format: function format(options) {
|
||||
var _settings = this.s;
|
||||
|
||||
if (typeof options === 'function') {
|
||||
return options(this, _settings);
|
||||
}
|
||||
|
||||
return _settings.format(this, Object.assign({}, _settings, options));
|
||||
},
|
||||
|
||||
/**
|
||||
* Formats the value as a string according to the formatting settings.
|
||||
* @returns {string}
|
||||
*/
|
||||
toString: function toString() {
|
||||
var intValue = this.intValue,
|
||||
_precision = this.p,
|
||||
_settings = this.s;
|
||||
return rounding(intValue / _precision, _settings.increment).toFixed(_settings.precision);
|
||||
},
|
||||
|
||||
/**
|
||||
* Value for JSON serialization.
|
||||
* @returns {float}
|
||||
*/
|
||||
toJSON: function toJSON() {
|
||||
return this.value;
|
||||
}
|
||||
};
|
||||
|
||||
return currency;
|
||||
|
||||
})));
|
||||
21
node_modules/currency.js/license
generated
vendored
Normal file
21
node_modules/currency.js/license
generated
vendored
Normal file
@@ -0,0 +1,21 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2018 Jason Wilson
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
129
node_modules/currency.js/package.json
generated
vendored
Normal file
129
node_modules/currency.js/package.json
generated
vendored
Normal file
@@ -0,0 +1,129 @@
|
||||
{
|
||||
"_args": [
|
||||
[
|
||||
"currency.js@2.0.4",
|
||||
"C:\\Users\\dredgy\\RiderProjects\\DredgePos\\DredgePos"
|
||||
]
|
||||
],
|
||||
"_from": "currency.js@2.0.4",
|
||||
"_id": "currency.js@2.0.4",
|
||||
"_inBundle": false,
|
||||
"_integrity": "sha512-6/OplJYgJ0RUlli74d93HJ/OsKVBi8lB1+Z6eJYS1YZzBuIp4qKKHpJ7ad+GvTlWmLR/hLJOWTykN5Nm8NJ7+w==",
|
||||
"_location": "/currency.js",
|
||||
"_phantomChildren": {},
|
||||
"_requested": {
|
||||
"type": "version",
|
||||
"registry": true,
|
||||
"raw": "currency.js@2.0.4",
|
||||
"name": "currency.js",
|
||||
"escapedName": "currency.js",
|
||||
"rawSpec": "2.0.4",
|
||||
"saveSpec": null,
|
||||
"fetchSpec": "2.0.4"
|
||||
},
|
||||
"_requiredBy": [
|
||||
"/"
|
||||
],
|
||||
"_resolved": "https://registry.npmjs.org/currency.js/-/currency.js-2.0.4.tgz",
|
||||
"_spec": "2.0.4",
|
||||
"_where": "C:\\Users\\dredgy\\RiderProjects\\DredgePos\\DredgePos",
|
||||
"author": {
|
||||
"name": "Jason Wilson"
|
||||
},
|
||||
"browser": "dist/currency.min.js",
|
||||
"bugs": {
|
||||
"url": "https://github.com/scurker/currency.js/issues"
|
||||
},
|
||||
"description": "A small, lightweight javascript library for working with currency values.",
|
||||
"devDependencies": {
|
||||
"@babel/cli": "^7.10.4",
|
||||
"@babel/core": "^7.10.4",
|
||||
"@babel/node": "^7.10.4",
|
||||
"@babel/preset-env": "^7.10.4",
|
||||
"@babel/preset-flow": "^7.10.4",
|
||||
"@babel/register": "^7.5.5",
|
||||
"@scurker/eslint-config": "^1.1.5",
|
||||
"ava": "^2.2.0",
|
||||
"cheerio": "^1.0.0-rc",
|
||||
"eslint": "^7.4.0",
|
||||
"flow-bin": "^0.151.0",
|
||||
"google-closure-compiler-js": "^20200719.0.0",
|
||||
"gzip-size": "^6.0.0",
|
||||
"handlebars": "^4.7.6",
|
||||
"highlight.js": "^10.0.0",
|
||||
"html-minifier": "^4.0.0",
|
||||
"matchdep": "^2.0.0",
|
||||
"metalsmith": "^2.3.0",
|
||||
"metalsmith-ignore": "^1.0.0",
|
||||
"metalsmith-markdown": "^1.3.0",
|
||||
"minimatch": "^3.0.4",
|
||||
"npm-run-all": "^4.1.5",
|
||||
"nyc": "^15.1.0",
|
||||
"pretty-bytes": "^5.3.0",
|
||||
"rollup": "^2.21.0",
|
||||
"rollup-plugin-babel": "^4.4.0",
|
||||
"sinon": "^10.0.0",
|
||||
"typescript": "^4.0.2"
|
||||
},
|
||||
"directories": {
|
||||
"test": "test"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=4"
|
||||
},
|
||||
"files": [
|
||||
"dist"
|
||||
],
|
||||
"homepage": "http://scurker.github.io/currency.js",
|
||||
"js:next": "dist/currency.es.js",
|
||||
"keywords": [
|
||||
"currency",
|
||||
"money",
|
||||
"utilities",
|
||||
"accounting",
|
||||
"format",
|
||||
"number",
|
||||
"parse",
|
||||
"precision",
|
||||
"decimal"
|
||||
],
|
||||
"license": "MIT",
|
||||
"main": "dist/currency.js",
|
||||
"module": "dist/currency.es.js",
|
||||
"name": "currency.js",
|
||||
"nyc": {
|
||||
"include": [
|
||||
"dist/**/*.js"
|
||||
]
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git://github.com/scurker/currency.js.git"
|
||||
},
|
||||
"scripts": {
|
||||
"build": "npm-run-all clean transpile copy-typescript-definition copy-flow-definition",
|
||||
"build:docs": "npm-run-all clean:docs compile:docs minify:docs",
|
||||
"clean": "rm -rf dist/*",
|
||||
"clean:docs": "rm -rf docs/build",
|
||||
"compile:docs": "npx babel-node --presets=@babel/preset-env ./docs/src/build-docs.js",
|
||||
"copy-flow-definition": "cp -f src/currency.js.flow dist",
|
||||
"copy-typescript-definition": "cp -f src/currency.d.ts dist",
|
||||
"coverage": "BABEL_ENV=test nyc ava ./test/test.js",
|
||||
"coverage:report": "nyc report --reporter=text-lcov > lcov.info",
|
||||
"lint": "eslint .",
|
||||
"minify:docs": "html-minifier --input-dir ./docs/build --output-dir ./docs/build --file-ext html --collapse-whitespace --decode-entities --minify-css --minify-js",
|
||||
"prepare": "npm run build",
|
||||
"pretest:flow": "npm run copy-flow-definition",
|
||||
"pretest:js": "npm run transpile:es",
|
||||
"pretest:typescript": "npm run copy-typescript-definition",
|
||||
"test": "npm-run-all test:typescript test:flow test:js",
|
||||
"test:flow": "flow",
|
||||
"test:js": "BABEL_ENV=test ava ./test/test.js",
|
||||
"test:typescript": "tsc -p ./test --noEmit",
|
||||
"transpile": "npm-run-all transpile:*",
|
||||
"transpile:es": "rollup -c ./config/rollup.config.js",
|
||||
"transpile:umd": "rollup -c ./config/rollup.umd.js"
|
||||
},
|
||||
"typings": "./dist/currency.d.ts",
|
||||
"version": "2.0.4"
|
||||
}
|
||||
179
node_modules/currency.js/readme.md
generated
vendored
Normal file
179
node_modules/currency.js/readme.md
generated
vendored
Normal file
@@ -0,0 +1,179 @@
|
||||
<div align="center" markdown="1">
|
||||
|
||||

|
||||
|
||||
# currency.js
|
||||
|
||||
[](https://github.com/scurker/currency.js/actions/workflows/ci.yml)
|
||||
[](https://coveralls.io/github/scurker/currency.js?branch=master)
|
||||
[](https://www.npmjs.com/package/currency.js)
|
||||
[](https://unpkg.com/currency.js/dist/currency.min.js)
|
||||
|
||||
</div>
|
||||
|
||||
*currency.js* is a lightweight ~1kb javascript library for working with currency values. It was built to work around floating point issues in javascript. This [talk by Bartek Szopka](http://www.youtube.com/watch?v=MqHDDtVYJRI) explains in detail why javascript has floating point issues.
|
||||
|
||||
currency.js works with values as integers behind the scenes, resolving some of the most basic precision problems.
|
||||
|
||||
```javascript
|
||||
2.51 + .01; // 2.5199999999999996
|
||||
currency(2.51).add(.01); // 2.52
|
||||
|
||||
2.52 - .01; // 2.5100000000000002
|
||||
currency(2.52).subtract(.01); // 2.51
|
||||
```
|
||||
|
||||
This should work for most *reasonable* values of currencies. As long as your currency values are less than 2<sup>53</sup> (in cents) or 90,071,992,547,409.91 you should be okay.
|
||||
|
||||
### Features
|
||||
|
||||
* *0 dependencies!*
|
||||
* Immutable
|
||||
* Flexible formatting options
|
||||
* Handles *any* type of currency input, strings, numbers, or another currency instance
|
||||
|
||||
### Installation
|
||||
|
||||
With [npm](https://www.npmjs.com/):
|
||||
|
||||
```sh
|
||||
npm install --save currency.js
|
||||
```
|
||||
|
||||
With [yarn](https://yarnpkg.com):
|
||||
|
||||
```sh
|
||||
yarn add currency.js
|
||||
```
|
||||
|
||||
Via cdn:
|
||||
|
||||
```html
|
||||
<script src="https://unpkg.com/currency.js@~2.0.0/dist/currency.min.js"></script>
|
||||
```
|
||||
|
||||
Need the latest cutting edge? All commits on master are tagged with `next` on npm:
|
||||
|
||||
```sh
|
||||
npm install --save currency.js@next
|
||||
```
|
||||
|
||||
### Usage
|
||||
|
||||
Currency will accept numbers, strings, or the currency object itself as values.
|
||||
|
||||
```javascript
|
||||
currency(123); // 123.00
|
||||
currency(1.23); // 1.23
|
||||
currency("1.23") // 1.23
|
||||
currency("$12.30") // 12.30
|
||||
|
||||
var value = currency("123.45");
|
||||
currency(value); // 123.45
|
||||
```
|
||||
|
||||
Currency accepts decimal values (i.e. `1.23`) with a default precision of 2, but can accept a minor currency unit (e.g. cents in a dollar). This will respect the precision option when parsing.
|
||||
|
||||
```javascript
|
||||
currency(123, { fromCents: true }); // 1.23
|
||||
currency('123', { fromCents: true }); // 1.23
|
||||
currency(123, { fromCents: true, precision: 0 }); // 123
|
||||
currency(123, { fromCents: true, precision: 3 }); // 0.123
|
||||
```
|
||||
|
||||
There's various arithmetic methods that help take the guesswork out of trying to resolve floating point problems.
|
||||
|
||||
```javascript
|
||||
currency(123.50).add(0.23); // 123.73
|
||||
currency(5.00).subtract(0.50); // 4.50
|
||||
currency(45.25).multiply(3); // 135.75
|
||||
currency(1.12).distribute(5); // [0.23, 0.23, 0.22, 0.22, 0.22]
|
||||
```
|
||||
|
||||
There's even a built in formatter that will automatically place comma delimiters in the right place.
|
||||
|
||||
```javascript
|
||||
currency("2,573,693.75").add("100,275.50").format(); // "$2,673,969.25"
|
||||
currency("1,237.72").subtract(300).format(); // "$937.72"
|
||||
```
|
||||
|
||||
You can also change the format, localizing the decimal and/or delimiter to your locale.
|
||||
|
||||
```javascript
|
||||
var euro = value => currency(value, { symbol: "€", separator: ".", decimal: "," });
|
||||
euro("2.573.693,75").add("100.275,50").format(); // "€2.673.969,25"
|
||||
euro("1.237,72").subtract(300).format(); // "€937,72"
|
||||
```
|
||||
|
||||
### Options
|
||||
|
||||
*currency.js* comes with its own set of default options conforming to USD. You can customize these according to your locale.
|
||||
|
||||
`symbol` *default*: `$`<br/>
|
||||
Currency symbol included when calling `currency.format()`.
|
||||
|
||||
`separator` *default*: `,`<br/>
|
||||
Separator dividing the number groups when calling `currency.format()`.
|
||||
|
||||
`decimal` *default*: `.`<br/>
|
||||
Decimal used when calling `currency.format()`.
|
||||
|
||||
`precision` *default*: `2`<br/>
|
||||
Number of decimal places to store as cents.
|
||||
|
||||
`pattern` *default*: `!#`<br/>
|
||||
Allows you to customize the format pattern using `!` as replacement for the currency symbol and `#` as replacement for the currency amount.
|
||||
|
||||
`negativePattern` *default*: `-!#`<br/>
|
||||
Allows you to customize the negative format pattern using `!` as replacement for the currency symbol and `#` as replacement for the currency amount.
|
||||
|
||||
`format` *default* `null`
|
||||
Allows you to customize the format of the currency when calling `currency.format()`. `format` passes in the `currency` object as well as the `options` object to the function and expects a string to be returned. Use this when the provided formatting options do not meet your needs.
|
||||
|
||||
`errorOnInvalid` *default*: `false`<br/>
|
||||
If an invalid value such as `null` or `undefined` is passed in, will throw an error.
|
||||
|
||||
`increment` *default*: `null`<br/>
|
||||
When implementing a currency that implements rounding, setting the increment value will allow you to set the closest increment to round the display value to. `currency(1.48, { increment: .05 }); // => 1.50`
|
||||
|
||||
`useVedic` *default*: `false`<br/>
|
||||
Formats number groupings using the Indian Numbering System, i.e. `10,00,000.00`
|
||||
|
||||
`fromCents` *default*: `false`<br/>
|
||||
Parse the amount value as a minor currency unit (e.g. cents in a dollar) instead of dollars.
|
||||
|
||||
> View more examples and full documentation at [https://currency.js.org](https://currency.js.org).
|
||||
|
||||
### Internationalization Examples
|
||||
|
||||
```js
|
||||
currency(1.23, { separator: " ", decimal: ",", symbol: "€" });
|
||||
```
|
||||
|
||||
If you need to work with multiple currency values, the easiest way is to setup factory functions with your required currency settings.
|
||||
|
||||
```js
|
||||
const USD = value => currency(value, { symbol: "$", precision: 2 });
|
||||
const JPY = value => currency(value, { symbol: "¥", precision: 0 });
|
||||
const GAS = value => currency(value, { precision: 3 });
|
||||
|
||||
USD(1234.56).format(); // "$1,234.56"
|
||||
JPY(1234.56).format(); // "¥1,235"
|
||||
GAS(1234.56).format(); // "$1,234.560"
|
||||
```
|
||||
|
||||
## Add-ons
|
||||
|
||||
* [babel-plugin-transform-currency-operators](https://github.com/scurker/babel-plugin-transform-currency-operators): An experimental babel plugin for transforming currency operations `currency(1.23) + 4.56` to `currency(1.23).add(4.56)`.
|
||||
|
||||
## Other Libraries
|
||||
|
||||
Maybe currency.js isn't the right fit for your needs. Check out some of these other fine libraries:
|
||||
|
||||
* [accounting.js](https://github.com/openexchangerates/accounting.js)
|
||||
* [dinero.js](https://github.com/sarahdayan/dinero.js)
|
||||
* [walletjs](https://github.com/dleitee/walletjs)
|
||||
|
||||
## License
|
||||
|
||||
[MIT](/license)
|
||||
Reference in New Issue
Block a user