Popularity
3.5
Growing
Activity
0.0
Stable
400
5
19

Programming language: TypeScript
License: MIT License
Tags: Miscellaneous    
Latest version: v2.4.4

cashify alternatives and similar modules

Based on the "Miscellaneous" category.
Alternatively, view cashify alternatives based on common mentions on social networks and blogs.

Do you think we are missing an alternative of cashify or a related project?

Add another 'Miscellaneous' Module

README

Cashify ๐Ÿ’ธ

Lightweight currency conversion library, successor of money.js

Build Status Coverage Status XO code style install size minified size Mentioned in Awesome Node.js


Motivation

This package was created, because the popular money.js library:

  • is not maintained (last commit was ~5 years ago)
  • has over 20 open issues
  • does not support TypeScript
  • has implicit globals
  • does not have any unit tests
  • has floating point issues

Highlights

Install

$ npm install cashify

Usage

With constructor

const {Cashify} = require('cashify');

const rates = {
    GBP: 0.92,
    EUR: 1.00,
    USD: 1.12
};

const cashify = new Cashify({base: 'EUR', rates});

const result = cashify.convert(10, {from: 'EUR', to: 'GBP'});

console.log(result); //=> 9.2

Without constructor

Using the Cashify constructor is not required. Instead, you can just use the convert function:

const {convert} = require('cashify');

const rates = {
    GBP: 0.92,
    EUR: 1.00,
    USD: 1.12
};

const result = convert(10, {from: 'EUR', to: 'GBP', base: 'EUR', rates});

console.log(result); //=> 9.2

Parsing

Cashify supports parsing, so you can pass a string to the amount argument and the from and/or to currency will be automatically detected:

const {Cashify} = require('cashify');

const rates = {
    GBP: 0.92,
    EUR: 1.00,
    USD: 1.12
};

const cashify = new Cashify({base: 'EUR', rates});

// Basic parsing
cashify.convert('โ‚ฌ10 EUR', {to: 'GBP'});

// Full parsing
cashify.convert('10 EUR to GBP');

Alternatively, if you just want to parse a string without conversion, you can use the parse function, which returns an object with parsing results:

const {parse} = require('cashify');

parse('10 EUR to GBP'); //=> {amount: 10, from: 'EUR', to: 'GBP'}

Note: If you want to use full parsing, you need to pass a string with specific format:

10 usd to pln
12.5 GBP in EUR
3.1415 eur as chf

You can use to, in or as to separate the expression (case insensitive). Used currencies name case doesn't matter, as cashify will automatically convert them to upper case.

Integration with currency.js

currency.js is a small and lightweight library for working with currency values. It works great with cashify. In the following example we are using it to format the conversion result:

const {Cashify} = require('cashify');
const currency = require('currency.js');

const rates = {
    GBP: 0.92,
    EUR: 1.00,
    USD: 1.12
};

const cashify = new Cashify({base: 'EUR', rates});

const converted = cashify.convert(8635619, {from: 'EUR', to: 'GBP'}); // => 7944769.48

// Format the conversion result
currency(converted, {symbol: 'โ‚ฌ', formatWithSymbol: true}).format(); // => โ‚ฌ7,944,769.48

API

Cashify({base, rates})

Constructor

base

Type: string

Base currency

rates

Type: object

Object containing currency rates (for example from an API, such as Open Exchange Rates)

convert(amount, {from, to, base, rates}) with and without constructor

Returns conversion result (number)

amount

Type: number or string

Amount of money you want to convert. You can either use a number or a string. If you choose the second option, you can take advantage of parsing and not specify from and/or to argument(s).

from

Type: string

Currency from which you want to convert. You might not need to specify it if you are using parsing.

to

Type: string

Currency to which you want to convert. You might not need to specify it if you are using parsing.

base

Type: string

Base currency

rates

Type: object

Object containing currency rates (for example from an API, such as Open Exchange Rates)

parse(expression)

Returns an object, which contains parsing results:

{
    amount: number;
    from: string | undefined;
    to: string | undefined;
}
expression

Type: string

Expression you want to parse, ex. 10 usd to pln or โ‚ฌ1.23 eur

Migrating from money.js

With Cashify constructor:

- const fx = require('money');
+ const {Cashify} = require('cashify');

- fx.base = 'EUR';
- fx.rates = {
-   GBP: 0.92,
-   EUR: 1.00,
-   USD: 1.12
- };

+ const rates = {
+    GBP: 0.92,
+    EUR: 1.00,
+    USD: 1.12
+ };

+ const cashify = new Cashify({base: 'EUR', rates});

- fx.convert(10, {from: 'GBP', to: 'EUR'});
+ cashify.convert(10, {from: 'GBP', to: 'EUR'});

With convert function:

- const fx = require('money');
+ const {convert} = require('cashify');

- fx.base = 'EUR';
- fx.rates = {
-   GBP: 0.92,
-   EUR: 1.00,
-   USD: 1.12
- };

+ const rates = {
+    GBP: 0.92,
+    EUR: 1.00,
+    USD: 1.12
+ };

- fx.convert(10, {from: 'GBP', to: 'EUR'});
+ convert(10, {from: 'GBP', to: 'EUR', base: 'EUR', rates});

Floating point issues

When working with currencies, decimals only need to be precise up to the smallest cent value while avoiding common floating point errors when performing basic arithmetic.

Let's take a look at the following example:

const fx = require('money');
const {Cashify} = require('cashify');

const rates = {
    GBP: 0.92,
    USD: 1.12
};

fx.rates = rates;
fx.base = 'EUR';

const cashify = new Cashify({base: 'EUR', rates});

fx.convert(10, {from: 'EUR', to: 'GBP'}); //=> 9.200000000000001
cashify.convert(10, {from: 'EUR', to: 'GBP'}); //=> 9.2

As you can see, money.js doesn't handle currencies correctly and therefore a floating point issues are occuring. Even though there's just a minor discrepancy between the results, if you're converting large amounts, that can add up.

Cashify solves this problem the same way as currency.js - by working with integers behind the scenes. This should be okay for most reasonable values of currencies.

Related projects

  • currency.js - Lightweight javascript library for working with currency values.
  • cashify-rs - Cashify port for Rust.

License

MIT ยฉ Antoni Kepinski


*Note that all licence references and agreements mentioned in the cashify README section above are relevant to that project's source code only.