"use strict"; const Promise = require("bluebird"); const assureArray = require("assure-array"); const defaultValue = require("default-value"); module.exports = { expression: function (func) { return func(); }, syncPipe: function (value, functions) { return assureArray(functions).reduce((last, func) => { return func(last); }, value); }, asyncPipe: function (value, functions) { return Promise.reduce(assureArray(functions), (last, func) => { return func(last); }, value); }, objectFind: function (object, predicate) { return Object.entries(defaultValue(object, {})).find(([ key, value ]) => { return predicate(value, key); }); }, objectIncludes: function (object, predicate) { return Object.entries(defaultValue(object, {})).some(([ key, value ]) => { return predicate(value, key); }); }, merge: function (... objects) { if (objects.every((obj) => obj == null)) { return null; } else { /* TODO: Eventually disallow conflicting keys? */ return Object.assign({}, ... objects.filter((obj) => obj != null)); } } };