absurdum
absurdum copied to clipboard
The Ridiculous Application of Reduce
Absurdum is a Javascript utility library built with a focus on providing idempotent side-effect free functions and clear/readable modular source for tree shaking.
Features
- Explores the flexibility of Reduce
- Abstraction Free -> tree-shake friendly
- Functional -> all operators are side-effect free
- Polyfills -> includes operator polyfills for older browsers
- Isomorphic -> works consistently across all JS runtimes
- Typescript -> typings are provided for all operators
- Intellisense -> supports code completions + inline documentation
- Well Tested -> includes 600+ tests covering every aspect
Imports
This package works isomorphically in browsers and server-side JavaScript runtimes
Browsers
Import directly from the local path or a CDN
Top-level operator namespaces (ie [arrays, objects, strings]) can be imported from the index
<script type="module">
import { arrays, objects, strings } from 'path/to/absurdum/index.js'
</script>
The minified version can be imported from
<script type="module">
import { arrays, objects, strings } from 'path/to/absurdum/index.min.js'
</script>
Node
Install the package
npm install @vanillaes/absurdum
Top-level operator namespaces are provided
import { arrays, objects, strings } from '@vanillaes/absurdum';
Individual operators can also be imported from their parent namespaces
import { chunk, find } from '@vanillaes/absurdum/arrays';
import { assign, invert } from '@vanillaes/absurdum/objects';
import { camelCase, repeat } from '@vanillaes/absurdum/strings';
Note: Webpack's tree-shaking algorithm doesn't work with multi-layered exports. To optimize bundle size, prefer individual operator imports.
Usage
Import an operator and feed it some inputs
const input = ['a', 'b', 'c', 'd'];
const output = reverse(input);
console.log(output);
// > ['d', 'c', 'b', 'a']
Tip: For VSCode users. Input type-checking, intellisense, and inline documentation are all supported.
API Documentation
Arrays
| Operator | Lodash | Polyfills |
|---|---|---|
| chunk | _.chunk | |
| compact | _.compact | |
| difference | _.difference | |
| drop | _.drop | |
| dropRight | _.dropRight | |
| fill | _.fill | Array.prototype.fill |
| filter | _.filter | |
| find | _.find | Array.prototype.find |
| findIndex | _.findIndex | Array.prototype.findIndex |
| findLastIndex | _.findLastIndex | |
| flat | _.flatten | Array.prototype.flat |
| frequency | ||
| intersection | _.intersection | |
| map | _.map | |
| pull | _.pull | |
| take | _.take | |
| takeRight | _.takeRight | |
| union | _.union | |
| unique | _.uniq | |
| unzip | _.unzip | |
| without | _.without | |
| xor | _.xor | |
| zip | _.zip |
Objects
| Operator | Lodash | Polyfills |
|---|---|---|
| assign | _.assign | Object.assign |
| at | _.at | |
| defaults | _.defaults | |
| defaultsDeep | _.defaultsDeep | |
| entries | _.toPairs | Object.entries |
| filter | _.filter | |
| findKey | _.findKey | |
| findLastKey | _.findLastKey | |
| forIn | _.forIn | |
| fromEntries | _.fromPairs | Object.fromEntries |
| get | _.get | |
| has | _.has | |
| invert | _.invert | |
| mapKeys | _.mapKeys | |
| mapValues | _.mapValues | |
| merge | _.merge | |
| pick | _.pick | |
| result | _.result | |
| transform | _.transform | |
| values | _.values | Object.values |
Strings
| Operator | Lodash | Polyfills |
|---|---|---|
| camelCase | _.camelCase | |
| chomp | ||
| deburr | _.deburr | |
| endsWith | _.endsWith | String.prototype.endsWith |
| includes | String.prototype.includes | |
| kebabCase | _.kebabCase | |
| pad | _.pad | |
| padEnd | _.padEnd | String.prototype.padEnd |
| padStart | _.padStart | String.prototype.padStart |
| pascalCase | _.startCase | |
| repeat | _.repeat | String.prototype.repeat |
| reverse | ||
| snakeCase | _.snakeCase | |
| startsWith | _.startsWith | String.prototype.startsWith |
| trimEnd | _.trimEnd | String.prototype.trimEnd |
| trimStart | _.trimStart | String.prototype.trimStart |
| truncate | _.truncate | |
| words | _.words |