@morkg/jabr
v1.0.0
Published
A bidirectional, strictly-typed algebraic equation solver for TypeScript.
Maintainers
Readme
Jabr
A bidirectional, strictly-typed algebraic equation solver for TypeScript.
@morkg/jabr lets you define a single mathematical relationship and automatically solve for the missing value, using pattern matching and route-based evaluation.
Why Jabr
- Bidirectional formula execution
- Type-safe inputs and return values
- Zero
anyin runtime logic - Works with partial variable input
- Built-in classic formulas for common physics and math problems
Installation
npm install @morkg/jabror
yarn add @morkg/jabrQuick Start
Define a formula by listing variable names and providing route definitions. Each route evaluates only when the required inputs are available.
import jabr from "@morkg/jabr";
const speed = jabr("v", "d", "t")(({ v, d, t }, solve) => [
solve([v, d, t], (v, d, t) => v === d / t),
solve([d, t], (d, t) => d / t),
solve([v, d], (v, d) => d / v),
solve([v, t], (v, t) => v * t),
solve(() => {
throw new Error("Insufficient variables. Provide at least two values.");
})
]);
const velocity = speed({ d: 100, t: 10 });
// 10
const distance = speed({ v: 10, t: 10 });
// 100
const valid = speed({ v: 10, d: 100, t: 10 });
// trueAPI
jabr(...variables)
Creates a formula builder for the provided variable names.
solver(routes)
The solve helper accepts one of two forms:
solve([deps], callback)— runs when alldepsare definedsolve(() => ...)— fallback route when no other route matches
Built-in Formula Library
@morkg/jabr exports a collection of ready-to-use formulas:
quadraticnewtonkineticEnergypythagorascompoundInterestuniversalGravitation
import {
quadratic,
kineticEnergy,
pythagoras,
compoundInterest,
universalGravitation
} from "@morkg/jabr";Quadratic Formula
Solves $ax^2 + bx + c = 0$.
const roots = quadratic({ a: 1, b: -5, c: 6 });
// { x1: 3, x2: 2 }Kinetic Energy
Calculates $E_k = \frac{1}{2}mv^2$.
const energy = kineticEnergy({ m: 10, v: 5 });
// 125Pythagorean Theorem
Solves $c^2 = a^2 + b^2$.
const hypotenuse = pythagoras({ a: 3, b: 4 });
// 5Compound Interest
Calculates compound growth over time.
const amount = compoundInterest({ p: 1000, r: 0.05, n: 1, t: 2 });Universal Gravitation
Solves Newton's law of gravitation.
const force = universalGravitation({ m1: 5.97e24, m2: 7.35e22, r: 3.84e8 });Notes
- This package is built for TypeScript-first workflows.
- The package exports both a default
jabrfactory and named formula helpers.
Contributing
Contributions, bug reports, and suggestions are welcome. Please open an issue or pull request at github.com/morkg/jabr.
License
MIT
