/futil-js

F(unctional) util(ities). Resistance is futile.

Primary LanguageJavaScriptMIT LicenseMIT

futil

Greenkeeper badge npm version dependencies Code Climate Codacy Badge Coverage Status

A collection of F(unctional) Util(ities). Resistance is futile.

Mostly, these are generic utilities that could conceivably be part of a library like lodash/fp, but for some reason or other are not.

Version History/Changelog

See our changelog

Installing

npm i -S futil-js

This package require lodash/fp, so make sure that's available in your app.

API

Function

maybeCall

(fn, a, b) -> fn(a, b) Calls a function with the passed in arguments if it's a function

overNone

([f, g]) -> !f(x) && !g(x) Combinator that returns a function which will pass if none of the functions pass

Collection

flowMap

...fns:functions -> map:function Runs a map function that runs a flow of the functions passed in to this method

Lodash Conversions

These are conversions of lodash fp methods

Ins (Rearg False)

getIn, includesIn, pickIn lodash/fp is great, but sometimes the curry order isn't exactly what you want. These methods provide alternative orderings that are sometimes more convenient. The idea of In methods is to name them by convention, so when ever you need a method that actually takes the collection first (e.g. a get where the data is static but the field is dynamic), you can just add In to the end (such as getIn which takes the object first)

Ons (Immutable False)

extendOn, defaultsOn lodash/fp likes to keep things pure, but sometimes JS can get pretty dirty. These methods are alternatives for working with data that--for whatever the use case is--needs to be mutable Any methods that interact with mutable data will use the On convention (as it is some action occuring On some data)

Array

compactJoin

join:string -> data:array -> result:string Joins an array after compacting

dotJoin

data:array -> result:string Compacts and joins an array with '.'

repeated

data:array -> result:array Returns an array of elements the are repeated in the array

Object

singleObject

(k, v) -> {k: v} Creates an object with a key and value

singleObjectE

(v, k) -> {k: v} Flipped version of singleObject

chunkObject

({a, b}) -> [{a}, {b}] Breaks an object into an array of objects with one key each

compactObject

Remove properties with falsey values: ({ a: 1, b: null, c: false }) -> {a:1}

isEmptyObject

Check if it's a {}

isNotEmptyObject

Check if it's not a {}

stripEmptyObjects

{ a:1, b:{}, c:2 } -> {a:1, c:2} Omit properties whose values are empty objects (TODO remame to omitEmptyObjects)

compareDeep

Checks if an object's property is equal to a value

matchesSignature

Returns true if object keys are only elements from signature list (but does not require all signature keys to be present)

pickInto

TODO

renameProperty

from:string -> to:string: -> target:object -> result:object Rename a property on an object renameProperty('a', 'b', {a:1}) -> {b:1)

unwind

{ x:['a','b'], y:1 } -> [{ x:'a', y:1 }, { x:'b', y:1 }] Just like mongo's $unwind

flattenObject

{ a: { b: { c: 1 } } } => { 'a.b.c' : 1 } Flatten an object with the paths for keys

String

parens

'asdf' -> '(asdf)' Wraps a string in parenthesis

Misc

testRegex

regex -> string -> bool Just like rambda test, creates a function to test a regex on a string

Math

greaterThanOne

number -> bool Returns true if number is greater than one