1.0.1 • Published 2 years ago

2belt v1.0.1

Weekly downloads
Last release
2 years ago


A library of higher order functions that is immutable, minimalist and versatile

Under construction

This module is still under internal development. We are working on:

  • firming up the API
  • tree shaking
  • usable in all browsers

Available functions

  • filter(obj, fn(val, key))
  • reject(obj, fn(val, key))
  • map(obj, fn(val, key))
  • remap(obj, fn(val, key))
  • shuffle(arr)
  • sortBy(arr, key, desc?)
  • toPairs(obj)
  • fromPairs(arr)
  • groupBy(arr, keyFn, valFn)

How to use

Let's try to make it compatible with both CommonJS and ES6 module systems, with the following emphasis:

  • Default is CommonJS
  • CommonJS allows cherry pick
  • We'll keep it this way for 2belt foreverish, so users are not screwed by breaking changes

Possible usage patterns are:

const { filter, reject } = require('2belt');
const filter = require('2belt/filter');
const belt = require('2belt');

import * as belt from '2belt/es';
import { filter, reject } from '2belt/es';

If we ever decide to use module names like Enum, List etc, it would become

const { Enum, List } = require('2belt');
const { filter, reject } = require('2belt/Enum');
const Enum = require('2belt/Enum');
const filter = require('2belt/Enum/filter');

import { Enum, List } from '2belt/es';

Likelihood of using module names

For a standard library, making the user import each function individually is somewhat inconvenient. For example, if there are only 4 modules total, the user can always just import those 4 modules and be done, like in Elixir. The downside of housing the functions under modules is that the user has to search through the different modules for a function. Also it is somewhat convenient to have functions that work across different object types.


  • let's stay with no module name for now
  • if the number of functions grow, we should move into modules because
    • there would be too many functions for users to import individually
    • it would be harder to remember without organization
  • unless we decide we want user to do import * as belt from '2belt/es';

2 years ago


2 years ago


6 years ago


6 years ago


6 years ago


6 years ago


6 years ago


6 years ago