Skip to content

The Ridiculous Application of Reduce

License

Notifications You must be signed in to change notification settings

vanillaes/absurdum

Repository files navigation

Absurdum Logo


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.

GitHub Release NPM Release Bundlephobia Latest Status Release Status

Discord

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