You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

40 lines
1.0 KiB
JavaScript

"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));
}
}
};