Dechainer is a Node.js library written in TypeScript containing versatile utilities designed to aid development in the functional programming paradigm.
npm i dechainerContrived examples demonstrating how to import functions and types from this library.
import { identity } from 'dechainer'
const example = identity('a string')
// example === 'a string'import type { IdentityCallback } from 'dechainer'
import { identity } from 'dechainer'
const stringIdentity: IdentityCallback<string> = (param: string): string =>
identity(param),
example: string = stringIdentity('a string')
// example === 'a string'Partial documentation of functions available in this library.
Delay code execution by a specified duration.
delayableis a callback function with an optionaldurationparameter (e.g.:(duration) => console.log(duration)).durationis the time in milliseconds that should elapse beforedelayableis called.
await delay({ delayable, duration })Parameters can be provided in any order.
await delay(delayable, duration)
// or
await delay(duration, delayable)Parameters can be provided in any order.
await delay(delayable)(duration)
// or
await delay(duration)(delayable)Race asynchronous code execution against a specified timeout.
contenderis an asynchronous function that resolves only if the elapsed time is less than thetimeoutduration.timeoutis the time in milliseconds that should elapse before aRangeErroris thrown.
await race({ contender, timeout })Parameters can be provided in any order.
await race(contender, timeout)
// or
await race(timeout, contender)Parameters can be provided in any order.
await race(contender)(timeout)
// or
await race(timeout)(contender)Counter with optional (im-)persistent internal state and respective tradeoffs. Multiple unique counters of both types may exist without overlapping state.
Persistent counter that is purely functional and side effect free with a smaller, simpler interface. Resetting is achieved by declaring a new variable. Return value(s) should be stored to be practical.
const { decrement, increment, state } = counter({ impersistent: false })
// state === 0
// increment().state === 1Methods returned by calling counter({ impersistent: false }), each returning a new persistent counter:
decrementdecreases the current value by1.incrementincreases the current value by1.
Properties returned by calling counter({ impersistent: false }):
stateis a number representing the counter's current value.
Impersistent counter that provides many methods that mutate its internal state. However, it only needs to be declared once. State is unique to each counter and not shared globally.
const { count, decrement, increment, reset } = counter({ impersistent: true })
// count() === 0
// increment()
// count() === 1Methods returned by calling counter({ impersistent: true }):
countreturns the counter's current number value.decrementis a side effect that decreases the internal value by1.incrementis a side effect that increases the internal value by1.resetis a side effect that sets the internal value to0.