infinite-recursion.macro
TypeScript icon, indicating that this package has built-in type declarations

0.1.0 • Public • Published

A Babel Macro that allows your functions to recurse infinitely.

Babel Macro

Problem

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));

Solution

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));

Usage

Configure Babel to use babel-pugin-macros. That's all!

infinite

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";

run

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);

Contribution

Welcome

License

MIT

Readme

Keywords

Package Sidebar

Install

npm i infinite-recursion.macro

Weekly Downloads

2

Version

0.1.0

License

MIT

Unpacked Size

12.3 kB

Total Files

10

Last publish

Collaborators

  • uhyo