Skip to content

calc_wrap

Enhanced version of calc with currying support and flexible argument order.

Key Differences from calc

Featurecalccalc_wrap
Error handlingthrowsreturns '-' by default
Currying
Argument orderfixedflexible
Pre-configuration

Usage Patterns

Direct Call

javascript
import { calc_wrap } from "a-calc";

calc_wrap("1 + 2"); // '3'
calc_wrap("a + b", { a: 1, b: 2 }); // '3'

Expression First (Currying)

javascript
const addAB = calc_wrap("a + b");
addAB({ a: 1, b: 2 }); // '3'
addAB({ a: 10, b: 20 }); // '30'

const calcPrice = calc_wrap("price * qty | =2,");
calcPrice({ price: 99.9, qty: 1 }); // '99.90'
calcPrice({ price: 99.9, qty: 2 }); // '199.80'

Data First (Currying)

javascript
const withData = calc_wrap({ a: 10, b: 20 });
withData("a + b"); // '30'
withData("a * b"); // '200'
withData("a - b"); // '-10'

Pre-configuration

javascript
const calcMoney = calc_wrap({
  _fmt: "=2,",
  _unit: true,
  _error: "-",
});

calcMoney("100$ + 50$"); // '150.00$'

Real-World Examples

Table Data Processing

javascript
const data = [
  { price: 10, qty: 2 },
  { price: 20, qty: 3 },
  { price: 15, qty: 1 },
];

const calcTotal = calc_wrap("price * qty | =2");
data.map((item) => calcTotal(item));
// ['20.00', '60.00', '15.00']

Reusable Business Logic

javascript
const calcDiscount = calc_wrap("original * (1 - rate) | ~5=2");
const calcTax = calc_wrap("amount * taxRate | ~5=2");

const discounted = calcDiscount({ original: 100, rate: 0.2 }); // '80.00'
const tax = calcTax({ amount: 80, taxRate: 0.1 }); // '8.00'

Released under the MIT License