1 /** |
1 /** |
2 * @license |
2 * @license |
3 * Lodash <https://lodash.com/> |
3 * Lodash <https://lodash.com/> |
4 * Copyright JS Foundation and other contributors <https://js.foundation/> |
4 * Copyright OpenJS Foundation and other contributors <https://openjsf.org/> |
5 * Released under MIT license <https://lodash.com/license> |
5 * Released under MIT license <https://lodash.com/license> |
6 * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE> |
6 * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE> |
7 * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors |
7 * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors |
8 */ |
8 */ |
9 ;(function() { |
9 ;(function() { |
10 |
10 |
11 /** Used as a safe reference for `undefined` in pre-ES5 environments. */ |
11 /** Used as a safe reference for `undefined` in pre-ES5 environments. */ |
12 var undefined; |
12 var undefined; |
13 |
13 |
14 /** Used as the semantic version number. */ |
14 /** Used as the semantic version number. */ |
15 var VERSION = '4.17.11'; |
15 var VERSION = '4.17.19'; |
16 |
16 |
17 /** Used as the size to enable large array optimizations. */ |
17 /** Used as the size to enable large array optimizations. */ |
18 var LARGE_ARRAY_SIZE = 200; |
18 var LARGE_ARRAY_SIZE = 200; |
19 |
19 |
20 /** Error message constants. */ |
20 /** Error message constants. */ |
2669 |
2669 |
2670 if (isSet(value)) { |
2670 if (isSet(value)) { |
2671 value.forEach(function(subValue) { |
2671 value.forEach(function(subValue) { |
2672 result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack)); |
2672 result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack)); |
2673 }); |
2673 }); |
2674 |
2674 } else if (isMap(value)) { |
2675 return result; |
|
2676 } |
|
2677 |
|
2678 if (isMap(value)) { |
|
2679 value.forEach(function(subValue, key) { |
2675 value.forEach(function(subValue, key) { |
2680 result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack)); |
2676 result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack)); |
2681 }); |
2677 }); |
2682 |
|
2683 return result; |
|
2684 } |
2678 } |
2685 |
2679 |
2686 var keysFunc = isFull |
2680 var keysFunc = isFull |
2687 ? (isFlat ? getAllKeysIn : getAllKeys) |
2681 ? (isFlat ? getAllKeysIn : getAllKeys) |
2688 : (isFlat ? keysIn : keys); |
2682 : (isFlat ? keysIn : keys); |
3602 function baseMerge(object, source, srcIndex, customizer, stack) { |
3596 function baseMerge(object, source, srcIndex, customizer, stack) { |
3603 if (object === source) { |
3597 if (object === source) { |
3604 return; |
3598 return; |
3605 } |
3599 } |
3606 baseFor(source, function(srcValue, key) { |
3600 baseFor(source, function(srcValue, key) { |
|
3601 stack || (stack = new Stack); |
3607 if (isObject(srcValue)) { |
3602 if (isObject(srcValue)) { |
3608 stack || (stack = new Stack); |
|
3609 baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack); |
3603 baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack); |
3610 } |
3604 } |
3611 else { |
3605 else { |
3612 var newValue = customizer |
3606 var newValue = customizer |
3613 ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack) |
3607 ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack) |
3723 * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by. |
3717 * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by. |
3724 * @param {string[]} orders The sort orders of `iteratees`. |
3718 * @param {string[]} orders The sort orders of `iteratees`. |
3725 * @returns {Array} Returns the new sorted array. |
3719 * @returns {Array} Returns the new sorted array. |
3726 */ |
3720 */ |
3727 function baseOrderBy(collection, iteratees, orders) { |
3721 function baseOrderBy(collection, iteratees, orders) { |
|
3722 if (iteratees.length) { |
|
3723 iteratees = arrayMap(iteratees, function(iteratee) { |
|
3724 if (isArray(iteratee)) { |
|
3725 return function(value) { |
|
3726 return baseGet(value, iteratee.length === 1 ? iteratee[0] : iteratee); |
|
3727 } |
|
3728 } |
|
3729 return iteratee; |
|
3730 }); |
|
3731 } else { |
|
3732 iteratees = [identity]; |
|
3733 } |
|
3734 |
3728 var index = -1; |
3735 var index = -1; |
3729 iteratees = arrayMap(iteratees.length ? iteratees : [identity], baseUnary(getIteratee())); |
3736 iteratees = arrayMap(iteratees, baseUnary(getIteratee())); |
3730 |
3737 |
3731 var result = baseMap(collection, function(value, key, collection) { |
3738 var result = baseMap(collection, function(value, key, collection) { |
3732 var criteria = arrayMap(iteratees, function(iteratee) { |
3739 var criteria = arrayMap(iteratees, function(iteratee) { |
3733 return iteratee(value); |
3740 return iteratee(value); |
3734 }); |
3741 }); |
3981 |
3988 |
3982 while (nested != null && ++index < length) { |
3989 while (nested != null && ++index < length) { |
3983 var key = toKey(path[index]), |
3990 var key = toKey(path[index]), |
3984 newValue = value; |
3991 newValue = value; |
3985 |
3992 |
|
3993 if (key === '__proto__' || key === 'constructor' || key === 'prototype') { |
|
3994 return object; |
|
3995 } |
|
3996 |
3986 if (index != lastIndex) { |
3997 if (index != lastIndex) { |
3987 var objValue = nested[key]; |
3998 var objValue = nested[key]; |
3988 newValue = customizer ? customizer(objValue, key, nested) : undefined; |
3999 newValue = customizer ? customizer(objValue, key, nested) : undefined; |
3989 if (newValue === undefined) { |
4000 if (newValue === undefined) { |
3990 newValue = isObject(objValue) |
4001 newValue = isObject(objValue) |
4133 * @param {boolean} [retHighest] Specify returning the highest qualified index. |
4144 * @param {boolean} [retHighest] Specify returning the highest qualified index. |
4134 * @returns {number} Returns the index at which `value` should be inserted |
4145 * @returns {number} Returns the index at which `value` should be inserted |
4135 * into `array`. |
4146 * into `array`. |
4136 */ |
4147 */ |
4137 function baseSortedIndexBy(array, value, iteratee, retHighest) { |
4148 function baseSortedIndexBy(array, value, iteratee, retHighest) { |
|
4149 var low = 0, |
|
4150 high = array == null ? 0 : array.length; |
|
4151 if (high === 0) { |
|
4152 return 0; |
|
4153 } |
|
4154 |
4138 value = iteratee(value); |
4155 value = iteratee(value); |
4139 |
4156 var valIsNaN = value !== value, |
4140 var low = 0, |
|
4141 high = array == null ? 0 : array.length, |
|
4142 valIsNaN = value !== value, |
|
4143 valIsNull = value === null, |
4157 valIsNull = value === null, |
4144 valIsSymbol = isSymbol(value), |
4158 valIsSymbol = isSymbol(value), |
4145 valIsUndefined = value === undefined; |
4159 valIsUndefined = value === undefined; |
4146 |
4160 |
4147 while (low < high) { |
4161 while (low < high) { |
5420 function createRound(methodName) { |
5434 function createRound(methodName) { |
5421 var func = Math[methodName]; |
5435 var func = Math[methodName]; |
5422 return function(number, precision) { |
5436 return function(number, precision) { |
5423 number = toNumber(number); |
5437 number = toNumber(number); |
5424 precision = precision == null ? 0 : nativeMin(toInteger(precision), 292); |
5438 precision = precision == null ? 0 : nativeMin(toInteger(precision), 292); |
5425 if (precision) { |
5439 if (precision && nativeIsFinite(number)) { |
5426 // Shift with exponential notation to avoid floating-point issues. |
5440 // Shift with exponential notation to avoid floating-point issues. |
5427 // See [MDN](https://mdn.io/round#Examples) for more details. |
5441 // See [MDN](https://mdn.io/round#Examples) for more details. |
5428 var pair = (toString(number) + 'e').split('e'), |
5442 var pair = (toString(number) + 'e').split('e'), |
5429 value = func(pair[0] + 'e' + (+pair[1] + precision)); |
5443 value = func(pair[0] + 'e' + (+pair[1] + precision)); |
5430 |
5444 |
5622 othLength = other.length; |
5636 othLength = other.length; |
5623 |
5637 |
5624 if (arrLength != othLength && !(isPartial && othLength > arrLength)) { |
5638 if (arrLength != othLength && !(isPartial && othLength > arrLength)) { |
5625 return false; |
5639 return false; |
5626 } |
5640 } |
5627 // Assume cyclic values are equal. |
5641 // Check that cyclic values are equal. |
5628 var stacked = stack.get(array); |
5642 var arrStacked = stack.get(array); |
5629 if (stacked && stack.get(other)) { |
5643 var othStacked = stack.get(other); |
5630 return stacked == other; |
5644 if (arrStacked && othStacked) { |
|
5645 return arrStacked == other && othStacked == array; |
5631 } |
5646 } |
5632 var index = -1, |
5647 var index = -1, |
5633 result = true, |
5648 result = true, |
5634 seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined; |
5649 seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined; |
5635 |
5650 |
5787 var key = objProps[index]; |
5802 var key = objProps[index]; |
5788 if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) { |
5803 if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) { |
5789 return false; |
5804 return false; |
5790 } |
5805 } |
5791 } |
5806 } |
5792 // Assume cyclic values are equal. |
5807 // Check that cyclic values are equal. |
5793 var stacked = stack.get(object); |
5808 var objStacked = stack.get(object); |
5794 if (stacked && stack.get(other)) { |
5809 var othStacked = stack.get(other); |
5795 return stacked == other; |
5810 if (objStacked && othStacked) { |
|
5811 return objStacked == other && othStacked == object; |
5796 } |
5812 } |
5797 var result = true; |
5813 var result = true; |
5798 stack.set(object, other); |
5814 stack.set(object, other); |
5799 stack.set(other, object); |
5815 stack.set(other, object); |
5800 |
5816 |
6603 } |
6619 } |
6604 return array; |
6620 return array; |
6605 } |
6621 } |
6606 |
6622 |
6607 /** |
6623 /** |
6608 * Gets the value at `key`, unless `key` is "__proto__". |
6624 * Gets the value at `key`, unless `key` is "__proto__" or "constructor". |
6609 * |
6625 * |
6610 * @private |
6626 * @private |
6611 * @param {Object} object The object to query. |
6627 * @param {Object} object The object to query. |
6612 * @param {string} key The key of the property to get. |
6628 * @param {string} key The key of the property to get. |
6613 * @returns {*} Returns the property value. |
6629 * @returns {*} Returns the property value. |
6614 */ |
6630 */ |
6615 function safeGet(object, key) { |
6631 function safeGet(object, key) { |
|
6632 if (key === 'constructor' && typeof object[key] === 'function') { |
|
6633 return; |
|
6634 } |
|
6635 |
6616 if (key == '__proto__') { |
6636 if (key == '__proto__') { |
6617 return; |
6637 return; |
6618 } |
6638 } |
6619 |
6639 |
6620 return object[key]; |
6640 return object[key]; |
9167 * // => objects for ['fred'] |
9187 * // => objects for ['fred'] |
9168 * |
9188 * |
9169 * // The `_.property` iteratee shorthand. |
9189 * // The `_.property` iteratee shorthand. |
9170 * _.filter(users, 'active'); |
9190 * _.filter(users, 'active'); |
9171 * // => objects for ['barney'] |
9191 * // => objects for ['barney'] |
|
9192 * |
|
9193 * // Combining several predicates using `_.overEvery` or `_.overSome`. |
|
9194 * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]])); |
|
9195 * // => objects for ['fred', 'barney'] |
9172 */ |
9196 */ |
9173 function filter(collection, predicate) { |
9197 function filter(collection, predicate) { |
9174 var func = isArray(collection) ? arrayFilter : baseFilter; |
9198 var func = isArray(collection) ? arrayFilter : baseFilter; |
9175 return func(collection, getIteratee(predicate, 3)); |
9199 return func(collection, getIteratee(predicate, 3)); |
9176 } |
9200 } |
9916 * @example |
9940 * @example |
9917 * |
9941 * |
9918 * var users = [ |
9942 * var users = [ |
9919 * { 'user': 'fred', 'age': 48 }, |
9943 * { 'user': 'fred', 'age': 48 }, |
9920 * { 'user': 'barney', 'age': 36 }, |
9944 * { 'user': 'barney', 'age': 36 }, |
9921 * { 'user': 'fred', 'age': 40 }, |
9945 * { 'user': 'fred', 'age': 30 }, |
9922 * { 'user': 'barney', 'age': 34 } |
9946 * { 'user': 'barney', 'age': 34 } |
9923 * ]; |
9947 * ]; |
9924 * |
9948 * |
9925 * _.sortBy(users, [function(o) { return o.user; }]); |
9949 * _.sortBy(users, [function(o) { return o.user; }]); |
9926 * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]] |
9950 * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]] |
9927 * |
9951 * |
9928 * _.sortBy(users, ['user', 'age']); |
9952 * _.sortBy(users, ['user', 'age']); |
9929 * // => objects for [['barney', 34], ['barney', 36], ['fred', 40], ['fred', 48]] |
9953 * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]] |
9930 */ |
9954 */ |
9931 var sortBy = baseRest(function(collection, iteratees) { |
9955 var sortBy = baseRest(function(collection, iteratees) { |
9932 if (collection == null) { |
9956 if (collection == null) { |
9933 return []; |
9957 return []; |
9934 } |
9958 } |
10411 if (timerId === undefined) { |
10435 if (timerId === undefined) { |
10412 return leadingEdge(lastCallTime); |
10436 return leadingEdge(lastCallTime); |
10413 } |
10437 } |
10414 if (maxing) { |
10438 if (maxing) { |
10415 // Handle invocations in a tight loop. |
10439 // Handle invocations in a tight loop. |
|
10440 clearTimeout(timerId); |
10416 timerId = setTimeout(timerExpired, wait); |
10441 timerId = setTimeout(timerExpired, wait); |
10417 return invokeFunc(lastCallTime); |
10442 return invokeFunc(lastCallTime); |
10418 } |
10443 } |
10419 } |
10444 } |
10420 if (timerId === undefined) { |
10445 if (timerId === undefined) { |
14797 (interpolate === reInterpolate ? reEsTemplate : reNoMatch).source + '|' + |
14822 (interpolate === reInterpolate ? reEsTemplate : reNoMatch).source + '|' + |
14798 (options.evaluate || reNoMatch).source + '|$' |
14823 (options.evaluate || reNoMatch).source + '|$' |
14799 , 'g'); |
14824 , 'g'); |
14800 |
14825 |
14801 // Use a sourceURL for easier debugging. |
14826 // Use a sourceURL for easier debugging. |
|
14827 // The sourceURL gets injected into the source that's eval-ed, so be careful |
|
14828 // to normalize all kinds of whitespace, so e.g. newlines (and unicode versions of it) can't sneak in |
|
14829 // and escape the comment, thus injecting code that gets evaled. |
14802 var sourceURL = '//# sourceURL=' + |
14830 var sourceURL = '//# sourceURL=' + |
14803 ('sourceURL' in options |
14831 (hasOwnProperty.call(options, 'sourceURL') |
14804 ? options.sourceURL |
14832 ? (options.sourceURL + '').replace(/\s/g, ' ') |
14805 : ('lodash.templateSources[' + (++templateCounter) + ']') |
14833 : ('lodash.templateSources[' + (++templateCounter) + ']') |
14806 ) + '\n'; |
14834 ) + '\n'; |
14807 |
14835 |
14808 string.replace(reDelimiters, function(match, escapeValue, interpolateValue, esTemplateValue, evaluateValue, offset) { |
14836 string.replace(reDelimiters, function(match, escapeValue, interpolateValue, esTemplateValue, evaluateValue, offset) { |
14809 interpolateValue || (interpolateValue = esTemplateValue); |
14837 interpolateValue || (interpolateValue = esTemplateValue); |
14832 |
14860 |
14833 source += "';\n"; |
14861 source += "';\n"; |
14834 |
14862 |
14835 // If `variable` is not specified wrap a with-statement around the generated |
14863 // If `variable` is not specified wrap a with-statement around the generated |
14836 // code to add the data object to the top of the scope chain. |
14864 // code to add the data object to the top of the scope chain. |
14837 var variable = options.variable; |
14865 var variable = hasOwnProperty.call(options, 'variable') && options.variable; |
14838 if (!variable) { |
14866 if (!variable) { |
14839 source = 'with (obj) {\n' + source + '\n}\n'; |
14867 source = 'with (obj) {\n' + source + '\n}\n'; |
14840 } |
14868 } |
14841 // Cleanup code by stripping empty strings. |
14869 // Cleanup code by stripping empty strings. |
14842 source = (isEvaluating ? source.replace(reEmptyStringLeading, '') : source) |
14870 source = (isEvaluating ? source.replace(reEmptyStringLeading, '') : source) |
15538 * |
15566 * |
15539 * Partial comparisons will match empty array and empty object `source` |
15567 * Partial comparisons will match empty array and empty object `source` |
15540 * values against any array or object value, respectively. See `_.isEqual` |
15568 * values against any array or object value, respectively. See `_.isEqual` |
15541 * for a list of supported value comparisons. |
15569 * for a list of supported value comparisons. |
15542 * |
15570 * |
|
15571 * **Note:** Multiple values can be checked by combining several matchers |
|
15572 * using `_.overSome` |
|
15573 * |
15543 * @static |
15574 * @static |
15544 * @memberOf _ |
15575 * @memberOf _ |
15545 * @since 3.0.0 |
15576 * @since 3.0.0 |
15546 * @category Util |
15577 * @category Util |
15547 * @param {Object} source The object of property values to match. |
15578 * @param {Object} source The object of property values to match. |
15553 * { 'a': 4, 'b': 5, 'c': 6 } |
15584 * { 'a': 4, 'b': 5, 'c': 6 } |
15554 * ]; |
15585 * ]; |
15555 * |
15586 * |
15556 * _.filter(objects, _.matches({ 'a': 4, 'c': 6 })); |
15587 * _.filter(objects, _.matches({ 'a': 4, 'c': 6 })); |
15557 * // => [{ 'a': 4, 'b': 5, 'c': 6 }] |
15588 * // => [{ 'a': 4, 'b': 5, 'c': 6 }] |
|
15589 * |
|
15590 * // Checking for several possible values |
|
15591 * _.filter(users, _.overSome([_.matches({ 'a': 1 }), _.matches({ 'a': 4 })])); |
|
15592 * // => [{ 'a': 1, 'b': 2, 'c': 3 }, { 'a': 4, 'b': 5, 'c': 6 }] |
15558 */ |
15593 */ |
15559 function matches(source) { |
15594 function matches(source) { |
15560 return baseMatches(baseClone(source, CLONE_DEEP_FLAG)); |
15595 return baseMatches(baseClone(source, CLONE_DEEP_FLAG)); |
15561 } |
15596 } |
15562 |
15597 |
15566 * object value is equivalent, else `false`. |
15601 * object value is equivalent, else `false`. |
15567 * |
15602 * |
15568 * **Note:** Partial comparisons will match empty array and empty object |
15603 * **Note:** Partial comparisons will match empty array and empty object |
15569 * `srcValue` values against any array or object value, respectively. See |
15604 * `srcValue` values against any array or object value, respectively. See |
15570 * `_.isEqual` for a list of supported value comparisons. |
15605 * `_.isEqual` for a list of supported value comparisons. |
|
15606 * |
|
15607 * **Note:** Multiple values can be checked by combining several matchers |
|
15608 * using `_.overSome` |
15571 * |
15609 * |
15572 * @static |
15610 * @static |
15573 * @memberOf _ |
15611 * @memberOf _ |
15574 * @since 3.2.0 |
15612 * @since 3.2.0 |
15575 * @category Util |
15613 * @category Util |
15583 * { 'a': 4, 'b': 5, 'c': 6 } |
15621 * { 'a': 4, 'b': 5, 'c': 6 } |
15584 * ]; |
15622 * ]; |
15585 * |
15623 * |
15586 * _.find(objects, _.matchesProperty('a', 4)); |
15624 * _.find(objects, _.matchesProperty('a', 4)); |
15587 * // => { 'a': 4, 'b': 5, 'c': 6 } |
15625 * // => { 'a': 4, 'b': 5, 'c': 6 } |
|
15626 * |
|
15627 * // Checking for several possible values |
|
15628 * _.filter(users, _.overSome([_.matchesProperty('a', 1), _.matchesProperty('a', 4)])); |
|
15629 * // => [{ 'a': 1, 'b': 2, 'c': 3 }, { 'a': 4, 'b': 5, 'c': 6 }] |
15588 */ |
15630 */ |
15589 function matchesProperty(path, srcValue) { |
15631 function matchesProperty(path, srcValue) { |
15590 return baseMatchesProperty(path, baseClone(srcValue, CLONE_DEEP_FLAG)); |
15632 return baseMatchesProperty(path, baseClone(srcValue, CLONE_DEEP_FLAG)); |
15591 } |
15633 } |
15592 |
15634 |
15806 |
15848 |
15807 /** |
15849 /** |
15808 * Creates a function that checks if **all** of the `predicates` return |
15850 * Creates a function that checks if **all** of the `predicates` return |
15809 * truthy when invoked with the arguments it receives. |
15851 * truthy when invoked with the arguments it receives. |
15810 * |
15852 * |
|
15853 * Following shorthands are possible for providing predicates. |
|
15854 * Pass an `Object` and it will be used as an parameter for `_.matches` to create the predicate. |
|
15855 * Pass an `Array` of parameters for `_.matchesProperty` and the predicate will be created using them. |
|
15856 * |
15811 * @static |
15857 * @static |
15812 * @memberOf _ |
15858 * @memberOf _ |
15813 * @since 4.0.0 |
15859 * @since 4.0.0 |
15814 * @category Util |
15860 * @category Util |
15815 * @param {...(Function|Function[])} [predicates=[_.identity]] |
15861 * @param {...(Function|Function[])} [predicates=[_.identity]] |
15832 |
15878 |
15833 /** |
15879 /** |
15834 * Creates a function that checks if **any** of the `predicates` return |
15880 * Creates a function that checks if **any** of the `predicates` return |
15835 * truthy when invoked with the arguments it receives. |
15881 * truthy when invoked with the arguments it receives. |
15836 * |
15882 * |
|
15883 * Following shorthands are possible for providing predicates. |
|
15884 * Pass an `Object` and it will be used as an parameter for `_.matches` to create the predicate. |
|
15885 * Pass an `Array` of parameters for `_.matchesProperty` and the predicate will be created using them. |
|
15886 * |
15837 * @static |
15887 * @static |
15838 * @memberOf _ |
15888 * @memberOf _ |
15839 * @since 4.0.0 |
15889 * @since 4.0.0 |
15840 * @category Util |
15890 * @category Util |
15841 * @param {...(Function|Function[])} [predicates=[_.identity]] |
15891 * @param {...(Function|Function[])} [predicates=[_.identity]] |
17037 |
17090 |
17038 // Map minified method names to their real names. |
17091 // Map minified method names to their real names. |
17039 baseForOwn(LazyWrapper.prototype, function(func, methodName) { |
17092 baseForOwn(LazyWrapper.prototype, function(func, methodName) { |
17040 var lodashFunc = lodash[methodName]; |
17093 var lodashFunc = lodash[methodName]; |
17041 if (lodashFunc) { |
17094 if (lodashFunc) { |
17042 var key = (lodashFunc.name + ''), |
17095 var key = lodashFunc.name + ''; |
17043 names = realNames[key] || (realNames[key] = []); |
17096 if (!hasOwnProperty.call(realNames, key)) { |
17044 |
17097 realNames[key] = []; |
17045 names.push({ 'name': methodName, 'func': lodashFunc }); |
17098 } |
|
17099 realNames[key].push({ 'name': methodName, 'func': lodashFunc }); |
17046 } |
17100 } |
17047 }); |
17101 }); |
17048 |
17102 |
17049 realNames[createHybrid(undefined, WRAP_BIND_KEY_FLAG).name] = [{ |
17103 realNames[createHybrid(undefined, WRAP_BIND_KEY_FLAG).name] = [{ |
17050 'name': 'wrapper', |
17104 'name': 'wrapper', |