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