46 lines
971 B
JavaScript
46 lines
971 B
JavaScript
|
'use strict';
|
||
|
|
||
|
var _require = require('../helpers/is'),
|
||
|
isArray = _require.isArray,
|
||
|
isObject = _require.isObject,
|
||
|
isFunction = _require.isFunction;
|
||
|
|
||
|
module.exports = function takeUntil(valueOrFunction) {
|
||
|
var _this = this;
|
||
|
|
||
|
var previous = null;
|
||
|
var items = void 0;
|
||
|
|
||
|
var callback = function callback(value) {
|
||
|
return value === valueOrFunction;
|
||
|
};
|
||
|
if (isFunction(valueOrFunction)) {
|
||
|
callback = valueOrFunction;
|
||
|
}
|
||
|
|
||
|
if (isArray(this.items)) {
|
||
|
items = this.items.filter(function (item) {
|
||
|
if (previous !== false) {
|
||
|
previous = !callback(item);
|
||
|
}
|
||
|
|
||
|
return previous;
|
||
|
});
|
||
|
}
|
||
|
|
||
|
if (isObject(this.items)) {
|
||
|
items = Object.keys(this.items).reduce(function (acc, key) {
|
||
|
if (previous !== false) {
|
||
|
previous = !callback(_this.items[key]);
|
||
|
}
|
||
|
|
||
|
if (previous !== false) {
|
||
|
acc[key] = _this.items[key];
|
||
|
}
|
||
|
|
||
|
return acc;
|
||
|
}, {});
|
||
|
}
|
||
|
|
||
|
return new this.constructor(items);
|
||
|
};
|