644 lines
		
	
	
		
			20 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			644 lines
		
	
	
		
			20 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| /**
 | |
|  * @license
 | |
|  * Lodash (Custom Build) <https://lodash.com/>
 | |
|  * Build: `lodash modularize exports="es" -o ./`
 | |
|  * Copyright OpenJS Foundation and other contributors <https://openjsf.org/>
 | |
|  * Released under MIT license <https://lodash.com/license>
 | |
|  * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>
 | |
|  * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
 | |
|  */
 | |
| import array from './array.js';
 | |
| import collection from './collection.js';
 | |
| import date from './date.js';
 | |
| import func from './function.js';
 | |
| import lang from './lang.js';
 | |
| import math from './math.js';
 | |
| import number from './number.js';
 | |
| import object from './object.js';
 | |
| import seq from './seq.js';
 | |
| import string from './string.js';
 | |
| import util from './util.js';
 | |
| import LazyWrapper from './_LazyWrapper.js';
 | |
| import LodashWrapper from './_LodashWrapper.js';
 | |
| import Symbol from './_Symbol.js';
 | |
| import arrayEach from './_arrayEach.js';
 | |
| import arrayPush from './_arrayPush.js';
 | |
| import baseForOwn from './_baseForOwn.js';
 | |
| import baseFunctions from './_baseFunctions.js';
 | |
| import baseInvoke from './_baseInvoke.js';
 | |
| import baseIteratee from './_baseIteratee.js';
 | |
| import baseRest from './_baseRest.js';
 | |
| import createHybrid from './_createHybrid.js';
 | |
| import identity from './identity.js';
 | |
| import isArray from './isArray.js';
 | |
| import isObject from './isObject.js';
 | |
| import keys from './keys.js';
 | |
| import last from './last.js';
 | |
| import lazyClone from './_lazyClone.js';
 | |
| import lazyReverse from './_lazyReverse.js';
 | |
| import lazyValue from './_lazyValue.js';
 | |
| import _mixin from './mixin.js';
 | |
| import negate from './negate.js';
 | |
| import realNames from './_realNames.js';
 | |
| import thru from './thru.js';
 | |
| import toInteger from './toInteger.js';
 | |
| import lodash from './wrapperLodash.js';
 | |
| 
 | |
| /** Used as the semantic version number. */
 | |
| var VERSION = '4.17.21';
 | |
| 
 | |
| /** Used to compose bitmasks for function metadata. */
 | |
| var WRAP_BIND_KEY_FLAG = 2;
 | |
| 
 | |
| /** Used to indicate the type of lazy iteratees. */
 | |
| var LAZY_FILTER_FLAG = 1,
 | |
|     LAZY_WHILE_FLAG = 3;
 | |
| 
 | |
| /** Used as references for the maximum length and index of an array. */
 | |
| var MAX_ARRAY_LENGTH = 4294967295;
 | |
| 
 | |
| /** Used for built-in method references. */
 | |
| var arrayProto = Array.prototype,
 | |
|     objectProto = Object.prototype;
 | |
| 
 | |
| /** Used to check objects for own properties. */
 | |
| var hasOwnProperty = objectProto.hasOwnProperty;
 | |
| 
 | |
| /** Built-in value references. */
 | |
| var symIterator = Symbol ? Symbol.iterator : undefined;
 | |
| 
 | |
| /* Built-in method references for those with the same name as other `lodash` methods. */
 | |
| var nativeMax = Math.max,
 | |
|     nativeMin = Math.min;
 | |
| 
 | |
| // wrap `_.mixin` so it works when provided only one argument
 | |
| var mixin = (function(func) {
 | |
|   return function(object, source, options) {
 | |
|     if (options == null) {
 | |
|       var isObj = isObject(source),
 | |
|           props = isObj && keys(source),
 | |
|           methodNames = props && props.length && baseFunctions(source, props);
 | |
| 
 | |
|       if (!(methodNames ? methodNames.length : isObj)) {
 | |
|         options = source;
 | |
|         source = object;
 | |
|         object = this;
 | |
|       }
 | |
|     }
 | |
|     return func(object, source, options);
 | |
|   };
 | |
| }(_mixin));
 | |
| 
 | |
| // Add methods that return wrapped values in chain sequences.
 | |
| lodash.after = func.after;
 | |
| lodash.ary = func.ary;
 | |
| lodash.assign = object.assign;
 | |
| lodash.assignIn = object.assignIn;
 | |
| lodash.assignInWith = object.assignInWith;
 | |
| lodash.assignWith = object.assignWith;
 | |
| lodash.at = object.at;
 | |
| lodash.before = func.before;
 | |
| lodash.bind = func.bind;
 | |
| lodash.bindAll = util.bindAll;
 | |
| lodash.bindKey = func.bindKey;
 | |
| lodash.castArray = lang.castArray;
 | |
| lodash.chain = seq.chain;
 | |
| lodash.chunk = array.chunk;
 | |
| lodash.compact = array.compact;
 | |
| lodash.concat = array.concat;
 | |
| lodash.cond = util.cond;
 | |
| lodash.conforms = util.conforms;
 | |
| lodash.constant = util.constant;
 | |
| lodash.countBy = collection.countBy;
 | |
| lodash.create = object.create;
 | |
| lodash.curry = func.curry;
 | |
| lodash.curryRight = func.curryRight;
 | |
| lodash.debounce = func.debounce;
 | |
| lodash.defaults = object.defaults;
 | |
| lodash.defaultsDeep = object.defaultsDeep;
 | |
| lodash.defer = func.defer;
 | |
| lodash.delay = func.delay;
 | |
| lodash.difference = array.difference;
 | |
| lodash.differenceBy = array.differenceBy;
 | |
| lodash.differenceWith = array.differenceWith;
 | |
| lodash.drop = array.drop;
 | |
| lodash.dropRight = array.dropRight;
 | |
| lodash.dropRightWhile = array.dropRightWhile;
 | |
| lodash.dropWhile = array.dropWhile;
 | |
| lodash.fill = array.fill;
 | |
| lodash.filter = collection.filter;
 | |
| lodash.flatMap = collection.flatMap;
 | |
| lodash.flatMapDeep = collection.flatMapDeep;
 | |
| lodash.flatMapDepth = collection.flatMapDepth;
 | |
| lodash.flatten = array.flatten;
 | |
| lodash.flattenDeep = array.flattenDeep;
 | |
| lodash.flattenDepth = array.flattenDepth;
 | |
| lodash.flip = func.flip;
 | |
| lodash.flow = util.flow;
 | |
| lodash.flowRight = util.flowRight;
 | |
| lodash.fromPairs = array.fromPairs;
 | |
| lodash.functions = object.functions;
 | |
| lodash.functionsIn = object.functionsIn;
 | |
| lodash.groupBy = collection.groupBy;
 | |
| lodash.initial = array.initial;
 | |
| lodash.intersection = array.intersection;
 | |
| lodash.intersectionBy = array.intersectionBy;
 | |
| lodash.intersectionWith = array.intersectionWith;
 | |
| lodash.invert = object.invert;
 | |
| lodash.invertBy = object.invertBy;
 | |
| lodash.invokeMap = collection.invokeMap;
 | |
| lodash.iteratee = util.iteratee;
 | |
| lodash.keyBy = collection.keyBy;
 | |
| lodash.keys = keys;
 | |
| lodash.keysIn = object.keysIn;
 | |
| lodash.map = collection.map;
 | |
| lodash.mapKeys = object.mapKeys;
 | |
| lodash.mapValues = object.mapValues;
 | |
| lodash.matches = util.matches;
 | |
| lodash.matchesProperty = util.matchesProperty;
 | |
| lodash.memoize = func.memoize;
 | |
| lodash.merge = object.merge;
 | |
| lodash.mergeWith = object.mergeWith;
 | |
| lodash.method = util.method;
 | |
| lodash.methodOf = util.methodOf;
 | |
| lodash.mixin = mixin;
 | |
| lodash.negate = negate;
 | |
| lodash.nthArg = util.nthArg;
 | |
| lodash.omit = object.omit;
 | |
| lodash.omitBy = object.omitBy;
 | |
| lodash.once = func.once;
 | |
| lodash.orderBy = collection.orderBy;
 | |
| lodash.over = util.over;
 | |
| lodash.overArgs = func.overArgs;
 | |
| lodash.overEvery = util.overEvery;
 | |
| lodash.overSome = util.overSome;
 | |
| lodash.partial = func.partial;
 | |
| lodash.partialRight = func.partialRight;
 | |
| lodash.partition = collection.partition;
 | |
| lodash.pick = object.pick;
 | |
| lodash.pickBy = object.pickBy;
 | |
| lodash.property = util.property;
 | |
| lodash.propertyOf = util.propertyOf;
 | |
| lodash.pull = array.pull;
 | |
| lodash.pullAll = array.pullAll;
 | |
| lodash.pullAllBy = array.pullAllBy;
 | |
| lodash.pullAllWith = array.pullAllWith;
 | |
| lodash.pullAt = array.pullAt;
 | |
| lodash.range = util.range;
 | |
| lodash.rangeRight = util.rangeRight;
 | |
| lodash.rearg = func.rearg;
 | |
| lodash.reject = collection.reject;
 | |
| lodash.remove = array.remove;
 | |
| lodash.rest = func.rest;
 | |
| lodash.reverse = array.reverse;
 | |
| lodash.sampleSize = collection.sampleSize;
 | |
| lodash.set = object.set;
 | |
| lodash.setWith = object.setWith;
 | |
| lodash.shuffle = collection.shuffle;
 | |
| lodash.slice = array.slice;
 | |
| lodash.sortBy = collection.sortBy;
 | |
| lodash.sortedUniq = array.sortedUniq;
 | |
| lodash.sortedUniqBy = array.sortedUniqBy;
 | |
| lodash.split = string.split;
 | |
| lodash.spread = func.spread;
 | |
| lodash.tail = array.tail;
 | |
| lodash.take = array.take;
 | |
| lodash.takeRight = array.takeRight;
 | |
| lodash.takeRightWhile = array.takeRightWhile;
 | |
| lodash.takeWhile = array.takeWhile;
 | |
| lodash.tap = seq.tap;
 | |
| lodash.throttle = func.throttle;
 | |
| lodash.thru = thru;
 | |
| lodash.toArray = lang.toArray;
 | |
| lodash.toPairs = object.toPairs;
 | |
| lodash.toPairsIn = object.toPairsIn;
 | |
| lodash.toPath = util.toPath;
 | |
| lodash.toPlainObject = lang.toPlainObject;
 | |
| lodash.transform = object.transform;
 | |
| lodash.unary = func.unary;
 | |
| lodash.union = array.union;
 | |
| lodash.unionBy = array.unionBy;
 | |
| lodash.unionWith = array.unionWith;
 | |
| lodash.uniq = array.uniq;
 | |
| lodash.uniqBy = array.uniqBy;
 | |
| lodash.uniqWith = array.uniqWith;
 | |
| lodash.unset = object.unset;
 | |
| lodash.unzip = array.unzip;
 | |
| lodash.unzipWith = array.unzipWith;
 | |
| lodash.update = object.update;
 | |
| lodash.updateWith = object.updateWith;
 | |
| lodash.values = object.values;
 | |
| lodash.valuesIn = object.valuesIn;
 | |
| lodash.without = array.without;
 | |
| lodash.words = string.words;
 | |
| lodash.wrap = func.wrap;
 | |
| lodash.xor = array.xor;
 | |
| lodash.xorBy = array.xorBy;
 | |
| lodash.xorWith = array.xorWith;
 | |
| lodash.zip = array.zip;
 | |
| lodash.zipObject = array.zipObject;
 | |
| lodash.zipObjectDeep = array.zipObjectDeep;
 | |
| lodash.zipWith = array.zipWith;
 | |
| 
 | |
| // Add aliases.
 | |
| lodash.entries = object.toPairs;
 | |
| lodash.entriesIn = object.toPairsIn;
 | |
| lodash.extend = object.assignIn;
 | |
| lodash.extendWith = object.assignInWith;
 | |
| 
 | |
| // Add methods to `lodash.prototype`.
 | |
| mixin(lodash, lodash);
 | |
| 
 | |
| // Add methods that return unwrapped values in chain sequences.
 | |
| lodash.add = math.add;
 | |
| lodash.attempt = util.attempt;
 | |
| lodash.camelCase = string.camelCase;
 | |
| lodash.capitalize = string.capitalize;
 | |
| lodash.ceil = math.ceil;
 | |
| lodash.clamp = number.clamp;
 | |
| lodash.clone = lang.clone;
 | |
| lodash.cloneDeep = lang.cloneDeep;
 | |
| lodash.cloneDeepWith = lang.cloneDeepWith;
 | |
| lodash.cloneWith = lang.cloneWith;
 | |
| lodash.conformsTo = lang.conformsTo;
 | |
| lodash.deburr = string.deburr;
 | |
| lodash.defaultTo = util.defaultTo;
 | |
| lodash.divide = math.divide;
 | |
| lodash.endsWith = string.endsWith;
 | |
| lodash.eq = lang.eq;
 | |
| lodash.escape = string.escape;
 | |
| lodash.escapeRegExp = string.escapeRegExp;
 | |
| lodash.every = collection.every;
 | |
| lodash.find = collection.find;
 | |
| lodash.findIndex = array.findIndex;
 | |
| lodash.findKey = object.findKey;
 | |
| lodash.findLast = collection.findLast;
 | |
| lodash.findLastIndex = array.findLastIndex;
 | |
| lodash.findLastKey = object.findLastKey;
 | |
| lodash.floor = math.floor;
 | |
| lodash.forEach = collection.forEach;
 | |
| lodash.forEachRight = collection.forEachRight;
 | |
| lodash.forIn = object.forIn;
 | |
| lodash.forInRight = object.forInRight;
 | |
| lodash.forOwn = object.forOwn;
 | |
| lodash.forOwnRight = object.forOwnRight;
 | |
| lodash.get = object.get;
 | |
| lodash.gt = lang.gt;
 | |
| lodash.gte = lang.gte;
 | |
| lodash.has = object.has;
 | |
| lodash.hasIn = object.hasIn;
 | |
| lodash.head = array.head;
 | |
| lodash.identity = identity;
 | |
| lodash.includes = collection.includes;
 | |
| lodash.indexOf = array.indexOf;
 | |
| lodash.inRange = number.inRange;
 | |
| lodash.invoke = object.invoke;
 | |
| lodash.isArguments = lang.isArguments;
 | |
| lodash.isArray = isArray;
 | |
| lodash.isArrayBuffer = lang.isArrayBuffer;
 | |
| lodash.isArrayLike = lang.isArrayLike;
 | |
| lodash.isArrayLikeObject = lang.isArrayLikeObject;
 | |
| lodash.isBoolean = lang.isBoolean;
 | |
| lodash.isBuffer = lang.isBuffer;
 | |
| lodash.isDate = lang.isDate;
 | |
| lodash.isElement = lang.isElement;
 | |
| lodash.isEmpty = lang.isEmpty;
 | |
| lodash.isEqual = lang.isEqual;
 | |
| lodash.isEqualWith = lang.isEqualWith;
 | |
| lodash.isError = lang.isError;
 | |
| lodash.isFinite = lang.isFinite;
 | |
| lodash.isFunction = lang.isFunction;
 | |
| lodash.isInteger = lang.isInteger;
 | |
| lodash.isLength = lang.isLength;
 | |
| lodash.isMap = lang.isMap;
 | |
| lodash.isMatch = lang.isMatch;
 | |
| lodash.isMatchWith = lang.isMatchWith;
 | |
| lodash.isNaN = lang.isNaN;
 | |
| lodash.isNative = lang.isNative;
 | |
| lodash.isNil = lang.isNil;
 | |
| lodash.isNull = lang.isNull;
 | |
| lodash.isNumber = lang.isNumber;
 | |
| lodash.isObject = isObject;
 | |
| lodash.isObjectLike = lang.isObjectLike;
 | |
| lodash.isPlainObject = lang.isPlainObject;
 | |
| lodash.isRegExp = lang.isRegExp;
 | |
| lodash.isSafeInteger = lang.isSafeInteger;
 | |
| lodash.isSet = lang.isSet;
 | |
| lodash.isString = lang.isString;
 | |
| lodash.isSymbol = lang.isSymbol;
 | |
| lodash.isTypedArray = lang.isTypedArray;
 | |
| lodash.isUndefined = lang.isUndefined;
 | |
| lodash.isWeakMap = lang.isWeakMap;
 | |
| lodash.isWeakSet = lang.isWeakSet;
 | |
| lodash.join = array.join;
 | |
| lodash.kebabCase = string.kebabCase;
 | |
| lodash.last = last;
 | |
| lodash.lastIndexOf = array.lastIndexOf;
 | |
| lodash.lowerCase = string.lowerCase;
 | |
| lodash.lowerFirst = string.lowerFirst;
 | |
| lodash.lt = lang.lt;
 | |
| lodash.lte = lang.lte;
 | |
| lodash.max = math.max;
 | |
| lodash.maxBy = math.maxBy;
 | |
| lodash.mean = math.mean;
 | |
| lodash.meanBy = math.meanBy;
 | |
| lodash.min = math.min;
 | |
| lodash.minBy = math.minBy;
 | |
| lodash.stubArray = util.stubArray;
 | |
| lodash.stubFalse = util.stubFalse;
 | |
| lodash.stubObject = util.stubObject;
 | |
| lodash.stubString = util.stubString;
 | |
| lodash.stubTrue = util.stubTrue;
 | |
| lodash.multiply = math.multiply;
 | |
| lodash.nth = array.nth;
 | |
| lodash.noop = util.noop;
 | |
| lodash.now = date.now;
 | |
| lodash.pad = string.pad;
 | |
| lodash.padEnd = string.padEnd;
 | |
| lodash.padStart = string.padStart;
 | |
| lodash.parseInt = string.parseInt;
 | |
| lodash.random = number.random;
 | |
| lodash.reduce = collection.reduce;
 | |
| lodash.reduceRight = collection.reduceRight;
 | |
| lodash.repeat = string.repeat;
 | |
| lodash.replace = string.replace;
 | |
| lodash.result = object.result;
 | |
| lodash.round = math.round;
 | |
| lodash.sample = collection.sample;
 | |
| lodash.size = collection.size;
 | |
| lodash.snakeCase = string.snakeCase;
 | |
| lodash.some = collection.some;
 | |
| lodash.sortedIndex = array.sortedIndex;
 | |
| lodash.sortedIndexBy = array.sortedIndexBy;
 | |
| lodash.sortedIndexOf = array.sortedIndexOf;
 | |
| lodash.sortedLastIndex = array.sortedLastIndex;
 | |
| lodash.sortedLastIndexBy = array.sortedLastIndexBy;
 | |
| lodash.sortedLastIndexOf = array.sortedLastIndexOf;
 | |
| lodash.startCase = string.startCase;
 | |
| lodash.startsWith = string.startsWith;
 | |
| lodash.subtract = math.subtract;
 | |
| lodash.sum = math.sum;
 | |
| lodash.sumBy = math.sumBy;
 | |
| lodash.template = string.template;
 | |
| lodash.times = util.times;
 | |
| lodash.toFinite = lang.toFinite;
 | |
| lodash.toInteger = toInteger;
 | |
| lodash.toLength = lang.toLength;
 | |
| lodash.toLower = string.toLower;
 | |
| lodash.toNumber = lang.toNumber;
 | |
| lodash.toSafeInteger = lang.toSafeInteger;
 | |
| lodash.toString = lang.toString;
 | |
| lodash.toUpper = string.toUpper;
 | |
| lodash.trim = string.trim;
 | |
| lodash.trimEnd = string.trimEnd;
 | |
| lodash.trimStart = string.trimStart;
 | |
| lodash.truncate = string.truncate;
 | |
| lodash.unescape = string.unescape;
 | |
| lodash.uniqueId = util.uniqueId;
 | |
| lodash.upperCase = string.upperCase;
 | |
| lodash.upperFirst = string.upperFirst;
 | |
| 
 | |
| // Add aliases.
 | |
| lodash.each = collection.forEach;
 | |
| lodash.eachRight = collection.forEachRight;
 | |
| lodash.first = array.head;
 | |
| 
 | |
| mixin(lodash, (function() {
 | |
|   var source = {};
 | |
|   baseForOwn(lodash, function(func, methodName) {
 | |
|     if (!hasOwnProperty.call(lodash.prototype, methodName)) {
 | |
|       source[methodName] = func;
 | |
|     }
 | |
|   });
 | |
|   return source;
 | |
| }()), { 'chain': false });
 | |
| 
 | |
| /**
 | |
|  * The semantic version number.
 | |
|  *
 | |
|  * @static
 | |
|  * @memberOf _
 | |
|  * @type {string}
 | |
|  */
 | |
| lodash.VERSION = VERSION;
 | |
| (lodash.templateSettings = string.templateSettings).imports._ = lodash;
 | |
| 
 | |
| // Assign default placeholders.
 | |
| arrayEach(['bind', 'bindKey', 'curry', 'curryRight', 'partial', 'partialRight'], function(methodName) {
 | |
|   lodash[methodName].placeholder = lodash;
 | |
| });
 | |
| 
 | |
| // Add `LazyWrapper` methods for `_.drop` and `_.take` variants.
 | |
| arrayEach(['drop', 'take'], function(methodName, index) {
 | |
|   LazyWrapper.prototype[methodName] = function(n) {
 | |
|     n = n === undefined ? 1 : nativeMax(toInteger(n), 0);
 | |
| 
 | |
|     var result = (this.__filtered__ && !index)
 | |
|       ? new LazyWrapper(this)
 | |
|       : this.clone();
 | |
| 
 | |
|     if (result.__filtered__) {
 | |
|       result.__takeCount__ = nativeMin(n, result.__takeCount__);
 | |
|     } else {
 | |
|       result.__views__.push({
 | |
|         'size': nativeMin(n, MAX_ARRAY_LENGTH),
 | |
|         'type': methodName + (result.__dir__ < 0 ? 'Right' : '')
 | |
|       });
 | |
|     }
 | |
|     return result;
 | |
|   };
 | |
| 
 | |
|   LazyWrapper.prototype[methodName + 'Right'] = function(n) {
 | |
|     return this.reverse()[methodName](n).reverse();
 | |
|   };
 | |
| });
 | |
| 
 | |
| // Add `LazyWrapper` methods that accept an `iteratee` value.
 | |
| arrayEach(['filter', 'map', 'takeWhile'], function(methodName, index) {
 | |
|   var type = index + 1,
 | |
|       isFilter = type == LAZY_FILTER_FLAG || type == LAZY_WHILE_FLAG;
 | |
| 
 | |
|   LazyWrapper.prototype[methodName] = function(iteratee) {
 | |
|     var result = this.clone();
 | |
|     result.__iteratees__.push({
 | |
|       'iteratee': baseIteratee(iteratee, 3),
 | |
|       'type': type
 | |
|     });
 | |
|     result.__filtered__ = result.__filtered__ || isFilter;
 | |
|     return result;
 | |
|   };
 | |
| });
 | |
| 
 | |
| // Add `LazyWrapper` methods for `_.head` and `_.last`.
 | |
| arrayEach(['head', 'last'], function(methodName, index) {
 | |
|   var takeName = 'take' + (index ? 'Right' : '');
 | |
| 
 | |
|   LazyWrapper.prototype[methodName] = function() {
 | |
|     return this[takeName](1).value()[0];
 | |
|   };
 | |
| });
 | |
| 
 | |
| // Add `LazyWrapper` methods for `_.initial` and `_.tail`.
 | |
| arrayEach(['initial', 'tail'], function(methodName, index) {
 | |
|   var dropName = 'drop' + (index ? '' : 'Right');
 | |
| 
 | |
|   LazyWrapper.prototype[methodName] = function() {
 | |
|     return this.__filtered__ ? new LazyWrapper(this) : this[dropName](1);
 | |
|   };
 | |
| });
 | |
| 
 | |
| LazyWrapper.prototype.compact = function() {
 | |
|   return this.filter(identity);
 | |
| };
 | |
| 
 | |
| LazyWrapper.prototype.find = function(predicate) {
 | |
|   return this.filter(predicate).head();
 | |
| };
 | |
| 
 | |
| LazyWrapper.prototype.findLast = function(predicate) {
 | |
|   return this.reverse().find(predicate);
 | |
| };
 | |
| 
 | |
| LazyWrapper.prototype.invokeMap = baseRest(function(path, args) {
 | |
|   if (typeof path == 'function') {
 | |
|     return new LazyWrapper(this);
 | |
|   }
 | |
|   return this.map(function(value) {
 | |
|     return baseInvoke(value, path, args);
 | |
|   });
 | |
| });
 | |
| 
 | |
| LazyWrapper.prototype.reject = function(predicate) {
 | |
|   return this.filter(negate(baseIteratee(predicate)));
 | |
| };
 | |
| 
 | |
| LazyWrapper.prototype.slice = function(start, end) {
 | |
|   start = toInteger(start);
 | |
| 
 | |
|   var result = this;
 | |
|   if (result.__filtered__ && (start > 0 || end < 0)) {
 | |
|     return new LazyWrapper(result);
 | |
|   }
 | |
|   if (start < 0) {
 | |
|     result = result.takeRight(-start);
 | |
|   } else if (start) {
 | |
|     result = result.drop(start);
 | |
|   }
 | |
|   if (end !== undefined) {
 | |
|     end = toInteger(end);
 | |
|     result = end < 0 ? result.dropRight(-end) : result.take(end - start);
 | |
|   }
 | |
|   return result;
 | |
| };
 | |
| 
 | |
| LazyWrapper.prototype.takeRightWhile = function(predicate) {
 | |
|   return this.reverse().takeWhile(predicate).reverse();
 | |
| };
 | |
| 
 | |
| LazyWrapper.prototype.toArray = function() {
 | |
|   return this.take(MAX_ARRAY_LENGTH);
 | |
| };
 | |
| 
 | |
| // Add `LazyWrapper` methods to `lodash.prototype`.
 | |
| baseForOwn(LazyWrapper.prototype, function(func, methodName) {
 | |
|   var checkIteratee = /^(?:filter|find|map|reject)|While$/.test(methodName),
 | |
|       isTaker = /^(?:head|last)$/.test(methodName),
 | |
|       lodashFunc = lodash[isTaker ? ('take' + (methodName == 'last' ? 'Right' : '')) : methodName],
 | |
|       retUnwrapped = isTaker || /^find/.test(methodName);
 | |
| 
 | |
|   if (!lodashFunc) {
 | |
|     return;
 | |
|   }
 | |
|   lodash.prototype[methodName] = function() {
 | |
|     var value = this.__wrapped__,
 | |
|         args = isTaker ? [1] : arguments,
 | |
|         isLazy = value instanceof LazyWrapper,
 | |
|         iteratee = args[0],
 | |
|         useLazy = isLazy || isArray(value);
 | |
| 
 | |
|     var interceptor = function(value) {
 | |
|       var result = lodashFunc.apply(lodash, arrayPush([value], args));
 | |
|       return (isTaker && chainAll) ? result[0] : result;
 | |
|     };
 | |
| 
 | |
|     if (useLazy && checkIteratee && typeof iteratee == 'function' && iteratee.length != 1) {
 | |
|       // Avoid lazy use if the iteratee has a "length" value other than `1`.
 | |
|       isLazy = useLazy = false;
 | |
|     }
 | |
|     var chainAll = this.__chain__,
 | |
|         isHybrid = !!this.__actions__.length,
 | |
|         isUnwrapped = retUnwrapped && !chainAll,
 | |
|         onlyLazy = isLazy && !isHybrid;
 | |
| 
 | |
|     if (!retUnwrapped && useLazy) {
 | |
|       value = onlyLazy ? value : new LazyWrapper(this);
 | |
|       var result = func.apply(value, args);
 | |
|       result.__actions__.push({ 'func': thru, 'args': [interceptor], 'thisArg': undefined });
 | |
|       return new LodashWrapper(result, chainAll);
 | |
|     }
 | |
|     if (isUnwrapped && onlyLazy) {
 | |
|       return func.apply(this, args);
 | |
|     }
 | |
|     result = this.thru(interceptor);
 | |
|     return isUnwrapped ? (isTaker ? result.value()[0] : result.value()) : result;
 | |
|   };
 | |
| });
 | |
| 
 | |
| // Add `Array` methods to `lodash.prototype`.
 | |
| arrayEach(['pop', 'push', 'shift', 'sort', 'splice', 'unshift'], function(methodName) {
 | |
|   var func = arrayProto[methodName],
 | |
|       chainName = /^(?:push|sort|unshift)$/.test(methodName) ? 'tap' : 'thru',
 | |
|       retUnwrapped = /^(?:pop|shift)$/.test(methodName);
 | |
| 
 | |
|   lodash.prototype[methodName] = function() {
 | |
|     var args = arguments;
 | |
|     if (retUnwrapped && !this.__chain__) {
 | |
|       var value = this.value();
 | |
|       return func.apply(isArray(value) ? value : [], args);
 | |
|     }
 | |
|     return this[chainName](function(value) {
 | |
|       return func.apply(isArray(value) ? value : [], args);
 | |
|     });
 | |
|   };
 | |
| });
 | |
| 
 | |
| // Map minified method names to their real names.
 | |
| baseForOwn(LazyWrapper.prototype, function(func, methodName) {
 | |
|   var lodashFunc = lodash[methodName];
 | |
|   if (lodashFunc) {
 | |
|     var key = lodashFunc.name + '';
 | |
|     if (!hasOwnProperty.call(realNames, key)) {
 | |
|       realNames[key] = [];
 | |
|     }
 | |
|     realNames[key].push({ 'name': methodName, 'func': lodashFunc });
 | |
|   }
 | |
| });
 | |
| 
 | |
| realNames[createHybrid(undefined, WRAP_BIND_KEY_FLAG).name] = [{
 | |
|   'name': 'wrapper',
 | |
|   'func': undefined
 | |
| }];
 | |
| 
 | |
| // Add methods to `LazyWrapper`.
 | |
| LazyWrapper.prototype.clone = lazyClone;
 | |
| LazyWrapper.prototype.reverse = lazyReverse;
 | |
| LazyWrapper.prototype.value = lazyValue;
 | |
| 
 | |
| // Add chain sequence methods to the `lodash` wrapper.
 | |
| lodash.prototype.at = seq.at;
 | |
| lodash.prototype.chain = seq.wrapperChain;
 | |
| lodash.prototype.commit = seq.commit;
 | |
| lodash.prototype.next = seq.next;
 | |
| lodash.prototype.plant = seq.plant;
 | |
| lodash.prototype.reverse = seq.reverse;
 | |
| lodash.prototype.toJSON = lodash.prototype.valueOf = lodash.prototype.value = seq.value;
 | |
| 
 | |
| // Add lazy aliases.
 | |
| lodash.prototype.first = lodash.prototype.head;
 | |
| 
 | |
| if (symIterator) {
 | |
|   lodash.prototype[symIterator] = seq.toIterator;
 | |
| }
 | |
| 
 | |
| export default lodash;
 |