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 |