2belt
v1.0.1
Published
Useful utility functions with strong FP support
Downloads
15
Readme
2belt
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.
Decision:
- 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';