A Babel Macro that allows your functions to recurse infinitely.
In typical environments like V8, number of recursion is limited to tens of thousands.
function sum(upTo) {
return upTo <= 0 ? 0 : upTo + sum(upTo - 1);
}
// RangeError: Maximum call stack size exceeded
console.log(sum(1e6));With the infinite macro, your function supports infinite number of recursion.
import { infinite } from "infinite-recursion.macro";
const sum = infinite(function sum(upTo) {
return upTo <= 0 ? 0 : upTo + sum(upTo - 1);
});
// 500000500000
console.log(sum(1e6));Configure Babel to use babel-pugin-macros. That's all!
The infinite macro supports the form of infinite(function func(...args) { ... }). Any other form of expressions will result in a compile-time or runtime error.
If you are a fan of default exports, the infinite macro can also be obtained as a default export:
import infinite from "infinite-recursion.macro";The rec macro is an inline version of the infinite macro. It receives a recursive function as the first argument and the arguments to it as the rest of the arguments. Usage:
import { run } from "infinite-recursion.macro";
const sumTo1e6 = run(function sum(upTo) {
return upTo <= 0 ? 0 : upTo + sum(upTo - 1);
}, 1e6);Welcome
MIT