diff --git a/README.md b/README.md
index ccfaa3d45..eaa9a6a74 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-# lodash-es v4.0.0
+# lodash-es v4.0.1
The [lodash](https://lodash.com/) library exported as [ES](http://www.ecma-international.org/ecma-262/6.0/) modules.
@@ -7,4 +7,4 @@ Generated using [lodash-cli](https://www.npmjs.com/package/lodash-cli):
$ lodash modularize exports=es -o ./
```
-See the [package source](https://github.com/lodash/lodash/tree/4.0.0-es) for more details.
+See the [package source](https://github.com/lodash/lodash/tree/4.0.1-es) for more details.
diff --git a/assignInWith.js b/assignInWith.js
index b477a655c..94355be03 100644
--- a/assignInWith.js
+++ b/assignInWith.js
@@ -29,7 +29,7 @@ import keysIn from './keysIn';
* defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });
* // => { 'a': 1, 'b': 2 }
*/
-var assignInWith = createAssigner(function(object, source, customizer) {
+var assignInWith = createAssigner(function(object, source, srcIndex, customizer) {
copyObjectWith(source, keysIn(source), object, customizer);
});
diff --git a/assignWith.js b/assignWith.js
index 410a641c7..82470ea04 100644
--- a/assignWith.js
+++ b/assignWith.js
@@ -28,7 +28,7 @@ import keys from './keys';
* defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });
* // => { 'a': 1, 'b': 2 }
*/
-var assignWith = createAssigner(function(object, source, customizer) {
+var assignWith = createAssigner(function(object, source, srcIndex, customizer) {
copyObjectWith(source, keys(source), object, customizer);
});
diff --git a/cloneDeepWith.js b/cloneDeepWith.js
index dce45adf1..64fcbaf31 100644
--- a/cloneDeepWith.js
+++ b/cloneDeepWith.js
@@ -17,7 +17,7 @@ import baseClone from './internal/baseClone';
* }
* }
*
- * var el = _.cloneDeep(document.body, customizer);
+ * var el = _.cloneDeepWith(document.body, customizer);
*
* console.log(el === document.body);
* // => false
diff --git a/cloneWith.js b/cloneWith.js
index 628579923..9752a53f6 100644
--- a/cloneWith.js
+++ b/cloneWith.js
@@ -4,7 +4,7 @@ import baseClone from './internal/baseClone';
* This method is like `_.clone` except that it accepts `customizer` which
* is invoked to produce the cloned value. If `customizer` returns `undefined`
* cloning is handled by the method instead. The `customizer` is invoked with
- * up to five arguments; (value [, index|key, object, stack]).
+ * up to four arguments; (value [, index|key, object, stack]).
*
* @static
* @memberOf _
@@ -20,7 +20,7 @@ import baseClone from './internal/baseClone';
* }
* }
*
- * var el = _.clone(document.body, customizer);
+ * var el = _.cloneWith(document.body, customizer);
*
* console.log(el === document.body);
* // => false
diff --git a/concat.js b/concat.js
index 1cd2dab4e..777ae3c9d 100644
--- a/concat.js
+++ b/concat.js
@@ -25,8 +25,11 @@ import rest from './rest';
* // => [1]
*/
var concat = rest(function(array, values) {
+ if (!isArray(array)) {
+ array = array == null ? [] : [Object(array)];
+ }
values = baseFlatten(values);
- return arrayConcat(isArray(array) ? array : [Object(array)], values);
+ return arrayConcat(array, values);
});
export default concat;
diff --git a/cond.js b/cond.js
index 402859c90..f8e4523a7 100644
--- a/cond.js
+++ b/cond.js
@@ -23,7 +23,7 @@ var FUNC_ERROR_TEXT = 'Expected a function';
* [_.matches({ 'a': 1 }), _.constant('matches A')],
* [_.conforms({ 'b': _.isNumber }), _.constant('matches B')],
* [_.constant(true), _.constant('no match')]
- * ])
+ * ]);
*
* func({ 'a': 1, 'b': 2 });
* // => 'matches A'
diff --git a/countBy.js b/countBy.js
index 23d81a76b..b306748fc 100644
--- a/countBy.js
+++ b/countBy.js
@@ -16,7 +16,7 @@ var hasOwnProperty = objectProto.hasOwnProperty;
* @memberOf _
* @category Collection
* @param {Array|Object} collection The collection to iterate over.
- * @param {Function|Object|string} [iteratee=_.identity] The iteratee invoked per element.
+ * @param {Function|Object|string} [iteratee=_.identity] The iteratee to transform keys.
* @returns {Object} Returns the composed aggregate object.
* @example
*
diff --git a/deburr.js b/deburr.js
index 36569e4c3..696914e54 100644
--- a/deburr.js
+++ b/deburr.js
@@ -5,12 +5,16 @@ import toString from './toString';
var reLatin1 = /[\xc0-\xd6\xd8-\xde\xdf-\xf6\xf8-\xff]/g;
/** Used to compose unicode character classes. */
-var rsComboRange = '\\u0300-\\u036f\\ufe20-\\ufe23';
+var rsComboMarksRange = '\\u0300-\\u036f\\ufe20-\\ufe23',
+ rsComboSymbolsRange = '\\u20d0-\\u20f0';
/** Used to compose unicode capture groups. */
-var rsCombo = '[' + rsComboRange + ']';
+var rsCombo = '[' + rsComboMarksRange + rsComboSymbolsRange + ']';
-/** Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks). */
+/**
+ * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and
+ * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols).
+ */
var reComboMark = RegExp(rsCombo, 'g');
/**
diff --git a/extend.js b/extend.js
new file mode 100644
index 000000000..62e97fd87
--- /dev/null
+++ b/extend.js
@@ -0,0 +1 @@
+export { default } from './assignIn'
diff --git a/extendWith.js b/extendWith.js
new file mode 100644
index 000000000..bd45c9a57
--- /dev/null
+++ b/extendWith.js
@@ -0,0 +1 @@
+export { default } from './assignInWith'
diff --git a/fromPairs.js b/fromPairs.js
index 86bb0da1f..e8725e590 100644
--- a/fromPairs.js
+++ b/fromPairs.js
@@ -1,5 +1,3 @@
-import baseSet from './internal/baseSet';
-
/**
* The inverse of `_.toPairs`; this method returns an object composed
* from key-value `pairs`.
@@ -21,7 +19,7 @@ function fromPairs(pairs) {
while (++index < length) {
var pair = pairs[index];
- baseSet(result, pair[0], pair[1]);
+ result[pair[0]] = pair[1];
}
return result;
}
diff --git a/groupBy.js b/groupBy.js
index b7e03d3da..da85bb703 100644
--- a/groupBy.js
+++ b/groupBy.js
@@ -9,14 +9,14 @@ var hasOwnProperty = objectProto.hasOwnProperty;
/**
* Creates an object composed of keys generated from the results of running
* each element of `collection` through `iteratee`. The corresponding value
- * of each key is an array of the elements responsible for generating the key.
+ * of each key is an array of elements responsible for generating the key.
* The iteratee is invoked with one argument: (value).
*
* @static
* @memberOf _
* @category Collection
* @param {Array|Object} collection The collection to iterate over.
- * @param {Function|Object|string} [iteratee=_.identity] The iteratee invoked per element.
+ * @param {Function|Object|string} [iteratee=_.identity] The iteratee to transform keys.
* @returns {Object} Returns the composed aggregate object.
* @example
*
diff --git a/internal/_Symbol.js b/internal/Symbol.js
similarity index 55%
rename from internal/_Symbol.js
rename to internal/Symbol.js
index bffed6a80..7103a7cc5 100644
--- a/internal/_Symbol.js
+++ b/internal/Symbol.js
@@ -1,6 +1,6 @@
import root from './root';
/** Built-in value references. */
-var _Symbol = root.Symbol;
+var Symbol = root.Symbol;
-export default _Symbol;
+export default Symbol;
diff --git a/internal/arrayReduce.js b/internal/arrayReduce.js
index 25d17865c..15ce42904 100644
--- a/internal/arrayReduce.js
+++ b/internal/arrayReduce.js
@@ -6,14 +6,14 @@
* @param {Array} array The array to iterate over.
* @param {Function} iteratee The function invoked per iteration.
* @param {*} [accumulator] The initial value.
- * @param {boolean} [initFromArray] Specify using the first element of `array` as the initial value.
+ * @param {boolean} [initAccum] Specify using the first element of `array` as the initial value.
* @returns {*} Returns the accumulated value.
*/
-function arrayReduce(array, iteratee, accumulator, initFromArray) {
+function arrayReduce(array, iteratee, accumulator, initAccum) {
var index = -1,
length = array.length;
- if (initFromArray && length) {
+ if (initAccum && length) {
accumulator = array[++index];
}
while (++index < length) {
diff --git a/internal/arrayReduceRight.js b/internal/arrayReduceRight.js
index f7549633b..b05bff76a 100644
--- a/internal/arrayReduceRight.js
+++ b/internal/arrayReduceRight.js
@@ -6,12 +6,12 @@
* @param {Array} array The array to iterate over.
* @param {Function} iteratee The function invoked per iteration.
* @param {*} [accumulator] The initial value.
- * @param {boolean} [initFromArray] Specify using the last element of `array` as the initial value.
+ * @param {boolean} [initAccum] Specify using the last element of `array` as the initial value.
* @returns {*} Returns the accumulated value.
*/
-function arrayReduceRight(array, iteratee, accumulator, initFromArray) {
+function arrayReduceRight(array, iteratee, accumulator, initAccum) {
var length = array.length;
- if (initFromArray && length) {
+ if (initAccum && length) {
accumulator = array[--length];
}
while (length--) {
diff --git a/internal/baseFind.js b/internal/baseFind.js
index d229d8161..c59775e72 100644
--- a/internal/baseFind.js
+++ b/internal/baseFind.js
@@ -1,7 +1,7 @@
/**
* The base implementation of methods like `_.find` and `_.findKey`, without
* support for iteratee shorthands, which iterates over `collection` using
- * the provided `eachFunc`.
+ * `eachFunc`.
*
* @private
* @param {Array|Object} collection The collection to search.
diff --git a/internal/baseInvoke.js b/internal/baseInvoke.js
index ce6fc1665..c9d84ff25 100644
--- a/internal/baseInvoke.js
+++ b/internal/baseInvoke.js
@@ -8,7 +8,6 @@ import parent from './parent';
* The base implementation of `_.invoke` without support for individual
* method arguments.
*
- *
* @private
* @param {Object} object The object to query.
* @param {Array|string} path The path of the method to invoke.
diff --git a/internal/baseIsMatch.js b/internal/baseIsMatch.js
index 8b68cdcd2..86b0bc891 100644
--- a/internal/baseIsMatch.js
+++ b/internal/baseIsMatch.js
@@ -47,7 +47,10 @@ function baseIsMatch(object, source, matchData, customizer) {
var stack = new Stack,
result = customizer ? customizer(objValue, srcValue, key, object, source, stack) : undefined;
- if (!(result === undefined ? baseIsEqual(srcValue, objValue, customizer, UNORDERED_COMPARE_FLAG | PARTIAL_COMPARE_FLAG, stack) : result)) {
+ if (!(result === undefined
+ ? baseIsEqual(srcValue, objValue, customizer, UNORDERED_COMPARE_FLAG | PARTIAL_COMPARE_FLAG, stack)
+ : result
+ )) {
return false;
}
}
diff --git a/internal/baseMerge.js b/internal/baseMerge.js
index 93202a71d..1e99ca59f 100644
--- a/internal/baseMerge.js
+++ b/internal/baseMerge.js
@@ -13,10 +13,11 @@ import keysIn from '../keysIn';
* @private
* @param {Object} object The destination object.
* @param {Object} source The source object.
+ * @param {number} srcIndex The index of `source`.
* @param {Function} [customizer] The function to customize merged values.
* @param {Object} [stack] Tracks traversed source values and their merged counterparts.
*/
-function baseMerge(object, source, customizer, stack) {
+function baseMerge(object, source, srcIndex, customizer, stack) {
if (object === source) {
return;
}
@@ -28,7 +29,7 @@ function baseMerge(object, source, customizer, stack) {
}
if (isObject(srcValue)) {
stack || (stack = new Stack);
- baseMergeDeep(object, source, key, baseMerge, customizer, stack);
+ baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);
}
else {
var newValue = customizer ? customizer(object[key], srcValue, (key + ''), object, source, stack) : undefined;
diff --git a/internal/baseMergeDeep.js b/internal/baseMergeDeep.js
index 9da5de47a..76e766d6e 100644
--- a/internal/baseMergeDeep.js
+++ b/internal/baseMergeDeep.js
@@ -19,11 +19,12 @@ import toPlainObject from '../toPlainObject';
* @param {Object} object The destination object.
* @param {Object} source The source object.
* @param {string} key The key of the value to merge.
+ * @param {number} srcIndex The index of `source`.
* @param {Function} mergeFunc The function to merge values.
* @param {Function} [customizer] The function to customize assigned values.
* @param {Object} [stack] Tracks traversed source values and their merged counterparts.
*/
-function baseMergeDeep(object, source, key, mergeFunc, customizer, stack) {
+function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {
var objValue = object[key],
srcValue = source[key],
stacked = stack.get(srcValue) || stack.get(objValue);
@@ -38,24 +39,36 @@ function baseMergeDeep(object, source, key, mergeFunc, customizer, stack) {
if (isCommon) {
newValue = srcValue;
if (isArray(srcValue) || isTypedArray(srcValue)) {
- newValue = isArray(objValue)
- ? objValue
- : ((isArrayLikeObject(objValue)) ? copyArray(objValue) : baseClone(srcValue));
+ if (isArray(objValue)) {
+ newValue = srcIndex ? copyArray(objValue) : objValue;
+ }
+ else if (isArrayLikeObject(objValue)) {
+ newValue = copyArray(objValue);
+ }
+ else {
+ newValue = baseClone(srcValue);
+ }
}
else if (isPlainObject(srcValue) || isArguments(srcValue)) {
- newValue = isArguments(objValue)
- ? toPlainObject(objValue)
- : (isObject(objValue) ? objValue : baseClone(srcValue));
+ if (isArguments(objValue)) {
+ newValue = toPlainObject(objValue);
+ }
+ else if (!isObject(objValue) || (srcIndex && isFunction(objValue))) {
+ newValue = baseClone(srcValue);
+ }
+ else {
+ newValue = srcIndex ? baseClone(objValue) : objValue;
+ }
}
else {
- isCommon = isFunction(srcValue);
+ isCommon = false;
}
}
stack.set(srcValue, newValue);
if (isCommon) {
// Recursively merge objects and arrays (susceptible to call stack limits).
- mergeFunc(newValue, srcValue, customizer, stack);
+ mergeFunc(newValue, srcValue, srcIndex, customizer, stack);
}
assignMergeValue(object, key, newValue);
}
diff --git a/internal/basePickBy.js b/internal/basePickBy.js
index 24be0cfe8..3b9fe8dbc 100644
--- a/internal/basePickBy.js
+++ b/internal/basePickBy.js
@@ -11,7 +11,7 @@ import baseForIn from './baseForIn';
function basePickBy(object, predicate) {
var result = {};
baseForIn(object, function(value, key) {
- if (predicate(value)) {
+ if (predicate(value, key)) {
result[key] = value;
}
});
diff --git a/internal/baseReduce.js b/internal/baseReduce.js
index d81fc728a..3fb676aa9 100644
--- a/internal/baseReduce.js
+++ b/internal/baseReduce.js
@@ -1,20 +1,19 @@
/**
* The base implementation of `_.reduce` and `_.reduceRight`, without support
- * for iteratee shorthands, which iterates over `collection` using the provided
- * `eachFunc`.
+ * for iteratee shorthands, which iterates over `collection` using `eachFunc`.
*
* @private
* @param {Array|Object} collection The collection to iterate over.
* @param {Function} iteratee The function invoked per iteration.
* @param {*} accumulator The initial value.
- * @param {boolean} initFromCollection Specify using the first or last element of `collection` as the initial value.
+ * @param {boolean} initAccum Specify using the first or last element of `collection` as the initial value.
* @param {Function} eachFunc The function to iterate over `collection`.
* @returns {*} Returns the accumulated value.
*/
-function baseReduce(collection, iteratee, accumulator, initFromCollection, eachFunc) {
+function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) {
eachFunc(collection, function(value, index, collection) {
- accumulator = initFromCollection
- ? (initFromCollection = false, value)
+ accumulator = initAccum
+ ? (initAccum = false, value)
: iteratee(accumulator, value, index, collection);
});
return accumulator;
diff --git a/internal/cloneSymbol.js b/internal/cloneSymbol.js
index 4bc4c587a..4924db27c 100644
--- a/internal/cloneSymbol.js
+++ b/internal/cloneSymbol.js
@@ -1,8 +1,8 @@
-import _Symbol from './_Symbol';
+import Symbol from './Symbol';
/** Used to convert symbols to primitives and strings. */
-var symbolProto = _Symbol ? _Symbol.prototype : undefined,
- symbolValueOf = _Symbol ? symbolProto.valueOf : undefined;
+var symbolProto = Symbol ? Symbol.prototype : undefined,
+ symbolValueOf = Symbol ? symbolProto.valueOf : undefined;
/**
* Creates a clone of the `symbol` object.
@@ -12,7 +12,7 @@ var symbolProto = _Symbol ? _Symbol.prototype : undefined,
* @returns {Object} Returns the cloned symbol object.
*/
function cloneSymbol(symbol) {
- return _Symbol ? Object(symbolValueOf.call(symbol)) : {};
+ return Symbol ? Object(symbolValueOf.call(symbol)) : {};
}
export default cloneSymbol;
diff --git a/internal/createAssigner.js b/internal/createAssigner.js
index 0dd9da9b2..b3e62f1dc 100644
--- a/internal/createAssigner.js
+++ b/internal/createAssigner.js
@@ -24,7 +24,7 @@ function createAssigner(assigner) {
while (++index < length) {
var source = sources[index];
if (source) {
- assigner(object, source, customizer);
+ assigner(object, source, index, customizer);
}
}
return object;
diff --git a/internal/createCaseFirst.js b/internal/createCaseFirst.js
index 419286fcb..b6d203376 100644
--- a/internal/createCaseFirst.js
+++ b/internal/createCaseFirst.js
@@ -3,14 +3,15 @@ import toString from '../toString';
/** Used to compose unicode character classes. */
var rsAstralRange = '\\ud800-\\udfff',
- rsComboRange = '\\u0300-\\u036f\\ufe20-\\ufe23',
+ rsComboMarksRange = '\\u0300-\\u036f\\ufe20-\\ufe23',
+ rsComboSymbolsRange = '\\u20d0-\\u20f0',
rsVarRange = '\\ufe0e\\ufe0f';
/** Used to compose unicode capture groups. */
var rsZWJ = '\\u200d';
/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */
-var reHasComplexSymbol = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']');
+var reHasComplexSymbol = RegExp('[' + rsZWJ + rsAstralRange + rsComboMarksRange + rsComboSymbolsRange + rsVarRange + ']');
/**
* Creates a function like `_.lowerFirst`.
diff --git a/internal/createPadding.js b/internal/createPadding.js
index 5b5e1620f..f3285bcd5 100644
--- a/internal/createPadding.js
+++ b/internal/createPadding.js
@@ -5,14 +5,15 @@ import toInteger from '../toInteger';
/** Used to compose unicode character classes. */
var rsAstralRange = '\\ud800-\\udfff',
- rsComboRange = '\\u0300-\\u036f\\ufe20-\\ufe23',
+ rsComboMarksRange = '\\u0300-\\u036f\\ufe20-\\ufe23',
+ rsComboSymbolsRange = '\\u20d0-\\u20f0',
rsVarRange = '\\ufe0e\\ufe0f';
/** Used to compose unicode capture groups. */
var rsZWJ = '\\u200d';
/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */
-var reHasComplexSymbol = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']');
+var reHasComplexSymbol = RegExp('[' + rsZWJ + rsAstralRange + rsComboMarksRange + rsComboSymbolsRange + rsVarRange + ']');
/* Built-in method references for those with the same name as other `lodash` methods. */
var nativeCeil = Math.ceil;
diff --git a/internal/equalByTag.js b/internal/equalByTag.js
index 2a1355eb2..1de50e844 100644
--- a/internal/equalByTag.js
+++ b/internal/equalByTag.js
@@ -1,5 +1,5 @@
+import Symbol from './Symbol';
import Uint8Array from './Uint8Array';
-import _Symbol from './_Symbol';
import mapToArray from './mapToArray';
import setToArray from './setToArray';
@@ -21,8 +21,8 @@ var boolTag = '[object Boolean]',
var arrayBufferTag = '[object ArrayBuffer]';
/** Used to convert symbols to primitives and strings. */
-var symbolProto = _Symbol ? _Symbol.prototype : undefined,
- symbolValueOf = _Symbol ? symbolProto.valueOf : undefined;
+var symbolProto = Symbol ? Symbol.prototype : undefined,
+ symbolValueOf = Symbol ? symbolProto.valueOf : undefined;
/**
* A specialized version of `baseIsEqualDeep` for comparing objects of
@@ -80,7 +80,7 @@ function equalByTag(object, other, tag, equalFunc, customizer, bitmask) {
equalFunc(convert(object), convert(other), customizer, bitmask | UNORDERED_COMPARE_FLAG);
case symbolTag:
- return !!_Symbol && (symbolValueOf.call(object) == symbolValueOf.call(other));
+ return !!Symbol && (symbolValueOf.call(object) == symbolValueOf.call(other));
}
return false;
}
diff --git a/internal/equalObjects.js b/internal/equalObjects.js
index a98567ce8..4916ea733 100644
--- a/internal/equalObjects.js
+++ b/internal/equalObjects.js
@@ -2,8 +2,7 @@ import baseHas from './baseHas';
import keys from '../keys';
/** Used to compose bitmasks for comparison styles. */
-var UNORDERED_COMPARE_FLAG = 1,
- PARTIAL_COMPARE_FLAG = 2;
+var PARTIAL_COMPARE_FLAG = 2;
/**
* A specialized version of `baseIsEqualDeep` for objects with support for
@@ -20,7 +19,6 @@ var UNORDERED_COMPARE_FLAG = 1,
*/
function equalObjects(object, other, equalFunc, customizer, bitmask, stack) {
var isPartial = bitmask & PARTIAL_COMPARE_FLAG,
- isUnordered = bitmask & UNORDERED_COMPARE_FLAG,
objProps = keys(object),
objLength = objProps.length,
othProps = keys(other),
@@ -32,8 +30,7 @@ function equalObjects(object, other, equalFunc, customizer, bitmask, stack) {
var index = objLength;
while (index--) {
var key = objProps[index];
- if (!(isPartial ? key in other : baseHas(other, key)) ||
- !(isUnordered || key == othProps[index])) {
+ if (!(isPartial ? key in other : baseHas(other, key))) {
return false;
}
}
diff --git a/internal/getFuncName.js b/internal/getFuncName.js
index d5f56fc81..43bca34cd 100644
--- a/internal/getFuncName.js
+++ b/internal/getFuncName.js
@@ -1,5 +1,11 @@
import realNames from './realNames';
+/** Used for built-in method references. */
+var objectProto = Object.prototype;
+
+/** Used to check objects for own properties. */
+var hasOwnProperty = objectProto.hasOwnProperty;
+
/**
* Gets the name of `func`.
*
@@ -10,7 +16,7 @@ import realNames from './realNames';
function getFuncName(func) {
var result = (func.name + ''),
array = realNames[result],
- length = array ? array.length : 0;
+ length = hasOwnProperty.call(realNames, result) ? array.length : 0;
while (length--) {
var data = array[length],
diff --git a/internal/mergeDefaults.js b/internal/mergeDefaults.js
index 9b74d4ea1..c08cb64b8 100644
--- a/internal/mergeDefaults.js
+++ b/internal/mergeDefaults.js
@@ -1,4 +1,3 @@
-import baseClone from './baseClone';
import baseMerge from './baseMerge';
import isObject from '../isObject';
@@ -17,9 +16,9 @@ import isObject from '../isObject';
function mergeDefaults(objValue, srcValue, key, object, source, stack) {
if (isObject(objValue) && isObject(srcValue)) {
stack.set(srcValue, objValue);
- baseMerge(objValue, srcValue, mergeDefaults, stack);
+ baseMerge(objValue, srcValue, undefined, mergeDefaults, stack);
}
- return objValue === undefined ? baseClone(srcValue) : objValue;
+ return objValue;
}
export default mergeDefaults;
diff --git a/internal/stringSize.js b/internal/stringSize.js
index 070656b34..82337db1a 100644
--- a/internal/stringSize.js
+++ b/internal/stringSize.js
@@ -1,12 +1,14 @@
/** Used to compose unicode character classes. */
var rsAstralRange = '\\ud800-\\udfff',
- rsComboRange = '\\u0300-\\u036f\\ufe20-\\ufe23',
+ rsComboMarksRange = '\\u0300-\\u036f\\ufe20-\\ufe23',
+ rsComboSymbolsRange = '\\u20d0-\\u20f0',
rsVarRange = '\\ufe0e\\ufe0f';
/** Used to compose unicode capture groups. */
var rsAstral = '[' + rsAstralRange + ']',
- rsCombo = '[' + rsComboRange + ']',
- rsModifier = '(?:\\ud83c[\\udffb-\\udfff])',
+ rsCombo = '[' + rsComboMarksRange + rsComboSymbolsRange + ']',
+ rsFitz = '\\ud83c[\\udffb-\\udfff]',
+ rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',
rsNonAstral = '[^' + rsAstralRange + ']',
rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}',
rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]',
@@ -20,14 +22,15 @@ var reOptMod = rsModifier + '?',
rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';
/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */
-var reComplexSymbol = RegExp(rsSymbol + rsSeq, 'g');
+var reComplexSymbol = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');
/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */
-var reHasComplexSymbol = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']');
+var reHasComplexSymbol = RegExp('[' + rsZWJ + rsAstralRange + rsComboMarksRange + rsComboSymbolsRange + rsVarRange + ']');
/**
* Gets the number of symbols in `string`.
*
+ * @private
* @param {string} string The string to inspect.
* @returns {number} Returns the string size.
*/
diff --git a/internal/stringToArray.js b/internal/stringToArray.js
index 5a2c6047a..136909b3c 100644
--- a/internal/stringToArray.js
+++ b/internal/stringToArray.js
@@ -1,12 +1,14 @@
/** Used to compose unicode character classes. */
var rsAstralRange = '\\ud800-\\udfff',
- rsComboRange = '\\u0300-\\u036f\\ufe20-\\ufe23',
+ rsComboMarksRange = '\\u0300-\\u036f\\ufe20-\\ufe23',
+ rsComboSymbolsRange = '\\u20d0-\\u20f0',
rsVarRange = '\\ufe0e\\ufe0f';
/** Used to compose unicode capture groups. */
var rsAstral = '[' + rsAstralRange + ']',
- rsCombo = '[' + rsComboRange + ']',
- rsModifier = '(?:\\ud83c[\\udffb-\\udfff])',
+ rsCombo = '[' + rsComboMarksRange + rsComboSymbolsRange + ']',
+ rsFitz = '\\ud83c[\\udffb-\\udfff]',
+ rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',
rsNonAstral = '[^' + rsAstralRange + ']',
rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}',
rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]',
@@ -20,7 +22,7 @@ var reOptMod = rsModifier + '?',
rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';
/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */
-var reComplexSymbol = RegExp(rsSymbol + rsSeq, 'g');
+var reComplexSymbol = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');
/**
* Converts `string` to an array.
diff --git a/intersection.js b/intersection.js
index 61b52321f..f8c48a112 100644
--- a/intersection.js
+++ b/intersection.js
@@ -14,6 +14,7 @@ import toArrayLikeObject from './internal/toArrayLikeObject';
* @param {...Array} [arrays] The arrays to inspect.
* @returns {Array} Returns the new array of shared values.
* @example
+ *
* _.intersection([2, 1], [4, 2], [1, 2]);
* // => [2]
*/
diff --git a/isEqualWith.js b/isEqualWith.js
index f7397398e..c363ae1d1 100644
--- a/isEqualWith.js
+++ b/isEqualWith.js
@@ -3,7 +3,7 @@ import baseIsEqual from './internal/baseIsEqual';
/**
* This method is like `_.isEqual` except that it accepts `customizer` which is
* invoked to compare values. If `customizer` returns `undefined` comparisons are
- * handled by the method instead. The `customizer` is invoked with up to seven arguments:
+ * handled by the method instead. The `customizer` is invoked with up to six arguments:
* (objValue, othValue [, index|key, object, other, stack]).
*
* @static
diff --git a/isMatchWith.js b/isMatchWith.js
index 97539690d..71d7c1ff7 100644
--- a/isMatchWith.js
+++ b/isMatchWith.js
@@ -4,7 +4,7 @@ import getMatchData from './internal/getMatchData';
/**
* This method is like `_.isMatch` except that it accepts `customizer` which
* is invoked to compare values. If `customizer` returns `undefined` comparisons
- * are handled by the method instead. The `customizer` is invoked with three
+ * are handled by the method instead. The `customizer` is invoked with five
* arguments: (objValue, srcValue, index|key, object, source).
*
* @static
diff --git a/keyBy.js b/keyBy.js
index c7b18da46..6e745c1e2 100644
--- a/keyBy.js
+++ b/keyBy.js
@@ -10,7 +10,7 @@ import createAggregator from './internal/createAggregator';
* @memberOf _
* @category Collection
* @param {Array|Object} collection The collection to iterate over.
- * @param {Function|Object|string} [iteratee=_.identity] The iteratee invoked per element.
+ * @param {Function|Object|string} [iteratee=_.identity] The iteratee to transform keys.
* @returns {Object} Returns the composed aggregate object.
* @example
*
@@ -19,13 +19,13 @@ import createAggregator from './internal/createAggregator';
* { 'dir': 'right', 'code': 100 }
* ];
*
- * _.keyBy(keyData, 'dir');
- * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } }
- *
* _.keyBy(keyData, function(o) {
* return String.fromCharCode(o.code);
* });
* // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }
+ *
+ * _.keyBy(keyData, 'dir');
+ * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } }
*/
var keyBy = createAggregator(function(result, value, key) {
result[key] = value;
diff --git a/lodash.default.js b/lodash.default.js
index 819c47bf1..8f38b6988 100644
--- a/lodash.default.js
+++ b/lodash.default.js
@@ -1,6 +1,6 @@
/**
* @license
- * lodash 4.0.0 (Custom Build)
+ * lodash 4.0.1 (Custom Build)
* Build: `lodash modularize exports="es" -o ./`
* Copyright 2012-2016 The Dojo Foundation
* Based on Underscore.js 1.8.3
@@ -20,7 +20,7 @@ import string from './string';
import util from './util';
import LazyWrapper from './internal/LazyWrapper';
import LodashWrapper from './internal/LodashWrapper';
-import _Symbol from './internal/_Symbol';
+import Symbol from './internal/Symbol';
import arrayEach from './internal/arrayEach';
import arrayPush from './internal/arrayPush';
import baseForOwn from './internal/baseForOwn';
@@ -44,7 +44,7 @@ import toInteger from './toInteger';
import lodash from './wrapperLodash';
/** Used as the semantic version number. */
-var VERSION = '4.0.0';
+var VERSION = '4.0.1';
/** Used to compose bitmasks for wrapper metadata. */
var BIND_KEY_FLAG = 2;
@@ -64,7 +64,7 @@ var arrayProto = Array.prototype,
var hasOwnProperty = objectProto.hasOwnProperty;
/** Built-in value references. */
-var iteratorSymbol = typeof (iteratorSymbol = _Symbol && _Symbol.iterator) == 'symbol' ? iteratorSymbol : undefined;
+var iteratorSymbol = typeof (iteratorSymbol = Symbol && Symbol.iterator) == 'symbol' ? iteratorSymbol : undefined;
/* Built-in method references for those with the same name as other `lodash` methods. */
var nativeMax = Math.max,
@@ -231,8 +231,6 @@ lodash.zipObject = array.zipObject;
lodash.zipWith = array.zipWith;
// Add aliases.
-lodash.each = collection.forEach;
-lodash.eachRight = collection.forEachRight;
lodash.extend = object.assignIn;
lodash.extendWith = object.assignInWith;
@@ -371,6 +369,8 @@ 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() {
diff --git a/lodash.js b/lodash.js
index f65170e3b..78706c40f 100644
--- a/lodash.js
+++ b/lodash.js
@@ -1,6 +1,6 @@
/**
* @license
- * lodash 4.0.0 (Custom Build)
+ * lodash 4.0.1 (Custom Build)
* Build: `lodash modularize exports="es" -o ./`
* Copyright 2012-2016 The Dojo Foundation
* Based on Underscore.js 1.8.3
@@ -60,6 +60,8 @@ export { default as eq } from './eq';
export { default as escape } from './escape';
export { default as escapeRegExp } from './escapeRegExp';
export { default as every } from './every';
+export { default as extend } from './extend';
+export { default as extendWith } from './extendWith';
export { default as fill } from './fill';
export { default as filter } from './filter';
export { default as find } from './find';
@@ -285,6 +287,7 @@ export { default as wrapperAt } from './wrapperAt';
export { default as wrapperChain } from './wrapperChain';
export { default as wrapperCommit } from './commit';
export { default as wrapperFlatMap } from './wrapperFlatMap';
+export { default as wrapperLodash } from './wrapperLodash';
export { default as wrapperNext } from './next';
export { default as wrapperPlant } from './plant';
export { default as wrapperReverse } from './wrapperReverse';
diff --git a/map.js b/map.js
index cb5139a30..4a9a8d721 100644
--- a/map.js
+++ b/map.js
@@ -29,11 +29,11 @@ import isArray from './isArray';
* return n * n;
* }
*
- * _.map([1, 2], square);
- * // => [3, 6]
+ * _.map([4, 8], square);
+ * // => [16, 64]
*
- * _.map({ 'a': 1, 'b': 2 }, square);
- * // => [3, 6] (iteration order is not guaranteed)
+ * _.map({ 'a': 4, 'b': 8 }, square);
+ * // => [16, 64] (iteration order is not guaranteed)
*
* var users = [
* { 'user': 'barney' },
diff --git a/maxBy.js b/maxBy.js
index 08b632aa5..4a058a375 100644
--- a/maxBy.js
+++ b/maxBy.js
@@ -17,7 +17,7 @@ import gt from './gt';
*
* var objects = [{ 'n': 1 }, { 'n': 2 }];
*
- * _.maxBy(objects, function(o) { return o.a; });
+ * _.maxBy(objects, function(o) { return o.n; });
* // => { 'n': 2 }
*
* // using the `_.property` iteratee shorthand
diff --git a/merge.js b/merge.js
index 31ed9c8cc..355fccd90 100644
--- a/merge.js
+++ b/merge.js
@@ -30,8 +30,8 @@ import createAssigner from './internal/createAssigner';
* _.merge(users, ages);
* // => { 'data': [{ 'user': 'barney', 'age': 36 }, { 'user': 'fred', 'age': 40 }] }
*/
-var merge = createAssigner(function(object, source) {
- baseMerge(object, source);
+var merge = createAssigner(function(object, source, srcIndex) {
+ baseMerge(object, source, srcIndex);
});
export default merge;
diff --git a/mergeWith.js b/mergeWith.js
index d03a955e0..69a584891 100644
--- a/mergeWith.js
+++ b/mergeWith.js
@@ -36,8 +36,8 @@ import createAssigner from './internal/createAssigner';
* _.mergeWith(object, other, customizer);
* // => { 'fruits': ['apple', 'banana'], 'vegetables': ['beet', 'carrot'] }
*/
-var mergeWith = createAssigner(function(object, source, customizer) {
- baseMerge(object, source, customizer);
+var mergeWith = createAssigner(function(object, source, srcIndex, customizer) {
+ baseMerge(object, source, srcIndex, customizer);
});
export default mergeWith;
diff --git a/minBy.js b/minBy.js
index 695b573de..7e21fec56 100644
--- a/minBy.js
+++ b/minBy.js
@@ -17,7 +17,7 @@ import lt from './lt';
*
* var objects = [{ 'n': 1 }, { 'n': 2 }];
*
- * _.minBy(objects, function(o) { return o.a; });
+ * _.minBy(objects, function(o) { return o.n; });
* // => { 'n': 1 }
*
* // using the `_.property` iteratee shorthand
diff --git a/object.default.js b/object.default.js
index fcc640a14..b4c6411e6 100644
--- a/object.default.js
+++ b/object.default.js
@@ -5,6 +5,8 @@ import assignWith from './assignWith';
import create from './create';
import defaults from './defaults';
import defaultsDeep from './defaultsDeep';
+import extend from './extend';
+import extendWith from './extendWith';
import findKey from './findKey';
import findLastKey from './findLastKey';
import forIn from './forIn';
@@ -40,11 +42,12 @@ import valuesIn from './valuesIn';
export default {
assign, assignIn, assignInWith, assignWith, create,
- defaults, defaultsDeep, findKey, findLastKey, forIn,
- forInRight, forOwn, forOwnRight, functions, functionsIn,
- get, has, hasIn, invert, invoke,
- keys, keysIn, mapKeys, mapValues, merge,
- mergeWith, omit, omitBy, pick, pickBy,
- result, set, setWith, toPairs, toPairsIn,
- transform, unset, values, valuesIn
+ defaults, defaultsDeep, extend, extendWith, findKey,
+ findLastKey, forIn, forInRight, forOwn, forOwnRight,
+ functions, functionsIn, get, has, hasIn,
+ invert, invoke, keys, keysIn, mapKeys,
+ mapValues, merge, mergeWith, omit, omitBy,
+ pick, pickBy, result, set, setWith,
+ toPairs, toPairsIn, transform, unset, values,
+ valuesIn
};
diff --git a/object.js b/object.js
index a95f299e3..79bb6ef76 100644
--- a/object.js
+++ b/object.js
@@ -5,6 +5,8 @@ export { default as assignWith } from './assignWith';
export { default as create } from './create';
export { default as defaults } from './defaults';
export { default as defaultsDeep } from './defaultsDeep';
+export { default as extend } from './extend';
+export { default as extendWith } from './extendWith';
export { default as findKey } from './findKey';
export { default as findLastKey } from './findLastKey';
export { default as forIn } from './forIn';
diff --git a/omitBy.js b/omitBy.js
index f41111a7a..56179f798 100644
--- a/omitBy.js
+++ b/omitBy.js
@@ -20,9 +20,9 @@ import basePickBy from './internal/basePickBy';
* // => { 'b': '2' }
*/
function omitBy(object, predicate) {
- predicate = baseIteratee(predicate);
- return basePickBy(object, function(value) {
- return !predicate(value);
+ predicate = baseIteratee(predicate, 2);
+ return basePickBy(object, function(value, key) {
+ return !predicate(value, key);
});
}
diff --git a/package.json b/package.json
index 0376f6def..333c422dc 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "lodash-es",
- "version": "4.0.0",
+ "version": "4.0.1",
"description": "Lodash exported as ES modules.",
"homepage": "https://lodash.com/custom-builds",
"license": "MIT",
diff --git a/parseInt.js b/parseInt.js
index 793d8ece4..62363f2a2 100644
--- a/parseInt.js
+++ b/parseInt.js
@@ -15,7 +15,7 @@ var nativeParseInt = root.parseInt;
* `undefined` or `0`, a `radix` of `10` is used unless `value` is a hexadecimal,
* in which case a `radix` of `16` is used.
*
- * **Note:** This method aligns with the [ES5 implementation](https://es5.github.io/#E)
+ * **Note:** This method aligns with the [ES5 implementation](https://es5.github.io/#x15.1.2.2)
* of `parseInt`.
*
* @static
diff --git a/partition.js b/partition.js
index 732de6144..ec503d92a 100644
--- a/partition.js
+++ b/partition.js
@@ -2,9 +2,9 @@ import createAggregator from './internal/createAggregator';
/**
* Creates an array of elements split into two groups, the first of which
- * contains elements `predicate` returns truthy for, while the second of which
- * contains elements `predicate` returns falsey for. The predicate is invoked
- * with three arguments: (value, index|key, collection).
+ * contains elements `predicate` returns truthy for, the second of which
+ * contains elements `predicate` returns falsey for. The predicate is
+ * invoked with one argument: (value).
*
* @static
* @memberOf _
diff --git a/pickBy.js b/pickBy.js
index 6e8202fe6..86f7bf2c3 100644
--- a/pickBy.js
+++ b/pickBy.js
@@ -19,7 +19,7 @@ import basePickBy from './internal/basePickBy';
* // => { 'a': 1, 'c': 3 }
*/
function pickBy(object, predicate) {
- return object == null ? {} : basePickBy(object, baseIteratee(predicate));
+ return object == null ? {} : basePickBy(object, baseIteratee(predicate, 2));
}
export default pickBy;
diff --git a/pullAll.js b/pullAll.js
index d1e2bbba9..eaa1d1fdd 100644
--- a/pullAll.js
+++ b/pullAll.js
@@ -15,7 +15,7 @@ import basePullAll from './internal/basePullAll';
*
* var array = [1, 2, 3, 1, 2, 3];
*
- * _.pull(array, [2, 3]);
+ * _.pullAll(array, [2, 3]);
* console.log(array);
* // => [1, 1]
*/
diff --git a/range.js b/range.js
index a2b349943..2883bfd82 100644
--- a/range.js
+++ b/range.js
@@ -4,8 +4,7 @@ import createRange from './internal/createRange';
* Creates an array of numbers (positive and/or negative) progressing from
* `start` up to, but not including, `end`. A step of `-1` is used if a negative
* `start` is specified without an `end` or `step`. If `end` is not specified
- * it's set to `start` with `start` then set to `0`. If `end` is less than
- * `start` a zero-length range is created unless a negative `step` is specified.
+ * it's set to `start` with `start` then set to `0`.
*
* **Note:** JavaScript follows the IEEE-754 standard for resolving
* floating-point values which can produce unexpected results.
diff --git a/reduce.js b/reduce.js
index e0acf968e..578f46d9f 100644
--- a/reduce.js
+++ b/reduce.js
@@ -41,9 +41,9 @@ import isArray from './isArray';
*/
function reduce(collection, iteratee, accumulator) {
var func = isArray(collection) ? arrayReduce : baseReduce,
- initFromCollection = arguments.length < 3;
+ initAccum = arguments.length < 3;
- return func(collection, baseIteratee(iteratee, 4), accumulator, initFromCollection, baseEach);
+ return func(collection, baseIteratee(iteratee, 4), accumulator, initAccum, baseEach);
}
export default reduce;
diff --git a/reduceRight.js b/reduceRight.js
index 3a79f1770..baf846c4c 100644
--- a/reduceRight.js
+++ b/reduceRight.js
@@ -26,9 +26,9 @@ import isArray from './isArray';
*/
function reduceRight(collection, iteratee, accumulator) {
var func = isArray(collection) ? arrayReduceRight : baseReduce,
- initFromCollection = arguments.length < 3;
+ initAccum = arguments.length < 3;
- return func(collection, baseIteratee(iteratee, 4), accumulator, initFromCollection, baseEachRight);
+ return func(collection, baseIteratee(iteratee, 4), accumulator, initAccum, baseEachRight);
}
export default reduceRight;
diff --git a/reverse.js b/reverse.js
index c482b5e22..73b8678f3 100644
--- a/reverse.js
+++ b/reverse.js
@@ -11,6 +11,7 @@ var nativeReverse = arrayProto.reverse;
* **Note:** This method mutates `array` and is based on
* [`Array#reverse`](https://mdn.io/Array/reverse).
*
+ * @static
* @memberOf _
* @category Array
* @returns {Array} Returns `array`.
diff --git a/sampleSize.js b/sampleSize.js
index cdcfb322c..bf6ef1d50 100644
--- a/sampleSize.js
+++ b/sampleSize.js
@@ -4,7 +4,8 @@ import toArray from './toArray';
import toInteger from './toInteger';
/**
- * Gets `n` random elements from `collection`.
+ * Gets `n` random elements at unique keys from `collection` up to the
+ * size of `collection`.
*
* @static
* @memberOf _
@@ -14,8 +15,11 @@ import toInteger from './toInteger';
* @returns {Array} Returns the random elements.
* @example
*
- * _.sampleSize([1, 2, 3, 4], 2);
+ * _.sampleSize([1, 2, 3], 2);
* // => [3, 1]
+ *
+ * _.sampleSize([1, 2, 3], 4);
+ * // => [2, 3, 1]
*/
function sampleSize(collection, n) {
var index = -1,
diff --git a/toArray.js b/toArray.js
index 4b3edd2fa..1da77f963 100644
--- a/toArray.js
+++ b/toArray.js
@@ -1,4 +1,4 @@
-import _Symbol from './internal/_Symbol';
+import Symbol from './internal/Symbol';
import copyArray from './internal/copyArray';
import getTag from './internal/getTag';
import isArrayLike from './isArrayLike';
@@ -14,7 +14,7 @@ var mapTag = '[object Map]',
setTag = '[object Set]';
/** Built-in value references. */
-var iteratorSymbol = typeof (iteratorSymbol = _Symbol && _Symbol.iterator) == 'symbol' ? iteratorSymbol : undefined;
+var iteratorSymbol = typeof (iteratorSymbol = Symbol && Symbol.iterator) == 'symbol' ? iteratorSymbol : undefined;
/**
* Converts `value` to an array.
diff --git a/toLength.js b/toLength.js
index 82b240026..d48044f60 100644
--- a/toLength.js
+++ b/toLength.js
@@ -14,7 +14,7 @@ var MAX_ARRAY_LENGTH = 4294967295;
* @memberOf _
* @category Lang
* @param {*} value The value to convert.
- * @return {number} Returns the converted integer.
+ * @returns {number} Returns the converted integer.
* @example
*
* _.toLength(3);
diff --git a/toString.js b/toString.js
index b0ea461d1..fe0eebf68 100644
--- a/toString.js
+++ b/toString.js
@@ -1,12 +1,12 @@
-import _Symbol from './internal/_Symbol';
+import Symbol from './internal/Symbol';
import isSymbol from './isSymbol';
/** Used as references for various `Number` constants. */
var INFINITY = 1 / 0;
/** Used to convert symbols to primitives and strings. */
-var symbolProto = _Symbol ? _Symbol.prototype : undefined,
- symbolToString = _Symbol ? symbolProto.toString : undefined;
+var symbolProto = Symbol ? Symbol.prototype : undefined,
+ symbolToString = Symbol ? symbolProto.toString : undefined;
/**
* Converts `value` to a string if it's not one. An empty string is returned
@@ -37,7 +37,7 @@ function toString(value) {
return '';
}
if (isSymbol(value)) {
- return _Symbol ? symbolToString.call(value) : '';
+ return Symbol ? symbolToString.call(value) : '';
}
var result = (value + '');
return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;
diff --git a/truncate.js b/truncate.js
index 7cc181fb3..8b6e7690e 100644
--- a/truncate.js
+++ b/truncate.js
@@ -14,14 +14,15 @@ var reFlags = /\w*$/;
/** Used to compose unicode character classes. */
var rsAstralRange = '\\ud800-\\udfff',
- rsComboRange = '\\u0300-\\u036f\\ufe20-\\ufe23',
+ rsComboMarksRange = '\\u0300-\\u036f\\ufe20-\\ufe23',
+ rsComboSymbolsRange = '\\u20d0-\\u20f0',
rsVarRange = '\\ufe0e\\ufe0f';
/** Used to compose unicode capture groups. */
var rsZWJ = '\\u200d';
/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */
-var reHasComplexSymbol = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']');
+var reHasComplexSymbol = RegExp('[' + rsZWJ + rsAstralRange + rsComboMarksRange + rsComboSymbolsRange + rsVarRange + ']');
/**
* Truncates `string` if it's longer than the given maximum string length.
diff --git a/words.js b/words.js
index f7e6ad6c7..110a8e7a4 100644
--- a/words.js
+++ b/words.js
@@ -2,6 +2,8 @@ import toString from './toString';
/** Used to compose unicode character classes. */
var rsAstralRange = '\\ud800-\\udfff',
+ rsComboMarksRange = '\\u0300-\\u036f\\ufe20-\\ufe23',
+ rsComboSymbolsRange = '\\u20d0-\\u20f0',
rsDingbatRange = '\\u2700-\\u27bf',
rsLowerRange = 'a-z\\xdf-\\xf6\\xf8-\\xff',
rsMathOpRange = '\\xac\\xb1\\xd7\\xf7',
@@ -14,11 +16,13 @@ var rsAstralRange = '\\ud800-\\udfff',
/** Used to compose unicode capture groups. */
var rsBreak = '[' + rsBreakRange + ']',
+ rsCombo = '[' + rsComboMarksRange + rsComboSymbolsRange + ']',
rsDigits = '\\d+',
rsDingbat = '[' + rsDingbatRange + ']',
rsLower = '[' + rsLowerRange + ']',
rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']',
- rsModifier = '(?:\\ud83c[\\udffb-\\udfff])',
+ rsFitz = '\\ud83c[\\udffb-\\udfff]',
+ rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',
rsNonAstral = '[^' + rsAstralRange + ']',
rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}',
rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]',
@@ -42,7 +46,8 @@ var reComplexWord = RegExp([
rsUpper + '?' + rsLower + '+(?=' + [rsBreak, rsUpper, '$'].join('|') + ')',
rsUpperMisc + '+(?=' + [rsBreak, rsUpper + rsLowerMisc, '$'].join('|') + ')',
rsUpper + '?' + rsLowerMisc + '+',
- rsDigits + '(?:' + rsLowerMisc + '+)?',
+ rsUpper + '+',
+ rsDigits,
rsEmoji
].join('|'), 'g');
diff --git a/wrapperFlatMap.js b/wrapperFlatMap.js
index 0dd9eaa8d..aea6bd46b 100644
--- a/wrapperFlatMap.js
+++ b/wrapperFlatMap.js
@@ -1,7 +1,7 @@
/**
* This method is the wrapper version of `_.flatMap`.
*
- * @static
+ * @name flatMap
* @memberOf _
* @category Seq
* @param {Function|Object|string} [iteratee=_.identity] The function invoked per iteration.
diff --git a/wrapperLodash.js b/wrapperLodash.js
index 90b91678e..10784a684 100644
--- a/wrapperLodash.js
+++ b/wrapperLodash.js
@@ -52,13 +52,12 @@ var hasOwnProperty = objectProto.hasOwnProperty;
* The chainable wrapper methods are:
* `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`,
* `at`, `before`, `bind`, `bindAll`, `bindKey`, `chain`, `chunk`, `commit`,
- * `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`, `curry`,
+ * `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`, `curry`,
* `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`, `difference`,
- * `differenceBy`, `differenceWith`, `drop`, `dropRight`, `dropRightWhile`,
+ * `differenceBy`, `differenceWith`, `drop`, `dropRight`, `dropRightWhile`,
* `dropWhile`, `fill`, `filter`, `flatten`, `flattenDeep`, `flip`, `flow`,
- * `flowRight`, `forEach`, `forEachRight`, `forIn`, `forInRight`, `forOwn`,
- * `forOwnRight`, `fromPairs`, `functions`, `functionsIn`, `groupBy`, `initial`,
- * `intersection`, `intersectionBy`, `intersectionWith`, invert`, `invokeMap`,
+ * `flowRight`, `fromPairs`, `functions`, `functionsIn`, `groupBy`, `initial`,
+ * `intersection`, `intersectionBy`, `intersectionWith`, `invert`, `invokeMap`,
* `iteratee`, `keyBy`, `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`,
* `matches`, `matchesProperty`, `memoize`, `merge`, `mergeWith`, `method`,
* `methodOf`, `mixin`, `negate`, `nthArg`, `omit`, `omitBy`, `once`, `orderBy`,
@@ -77,22 +76,23 @@ var hasOwnProperty = objectProto.hasOwnProperty;
* `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`,
* `cloneDeep`, `cloneDeepWith`, `cloneWith`, `deburr`, `endsWith`, `eq`,
* `escape`, `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`,
- * `findLast`, `findLastIndex`, `findLastKey`, `floor`, `get`, `gt`, `gte`,
- * `has`, `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`,
- * `invoke`, `isArguments`, `isArray`, `isArrayLike`, `isArrayLikeObject`,
- * `isBoolean`, `isDate`, `isElement`, `isEmpty`, `isEqual`, `isEqualWith`,
- * `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`, `isMatch`,
- * `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`, `isNumber`,
- * `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`, `isSafeInteger`,
- * `isString`, `isUndefined`, `isTypedArray`, `join`, `kebabCase`, `last`,
- * `lastIndexOf`, `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`,
- * `mean`, `min`, `minBy`, `noConflict`, `noop`, `now`, `pad`, `padEnd`,
- * `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`, `repeat`,
- * `result`, `round`, `runInContext`, `sample`, `shift`, `size`, `snakeCase`,
- * `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`, `sortedLastIndexBy`,
- * `startCase`, `startsWith`, `subtract`, `sum`, sumBy`, `template`, `times`,
- * `toLower`, `toInteger`, `toLength`, `toNumber`, `toSafeInteger`, toString`,
- * `toUpper`, `trim`, `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`,
+ * `findLast`, `findLastIndex`, `findLastKey`, `floor`, `forEach`, `forEachRight`,
+ * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`,
+ * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`,
+ * `isArguments`, `isArray`, `isArrayLike`, `isArrayLikeObject`, `isBoolean`,
+ * `isDate`, `isElement`, `isEmpty`, `isEqual`, `isEqualWith`, `isError`,
+ * `isFinite`, `isFunction`, `isInteger`, `isLength`, `isMatch`, `isMatchWith`,
+ * `isNaN`, `isNative`, `isNil`, `isNull`, `isNumber`, `isObject`, `isObjectLike`,
+ * `isPlainObject`, `isRegExp`, `isSafeInteger`, `isString`, `isUndefined`,
+ * `isTypedArray`, `join`, `kebabCase`, `last`, `lastIndexOf`, `lowerCase`,
+ * `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `min`, `minBy`,
+ * `noConflict`, `noop`, `now`, `pad`, `padEnd`, `padStart`, `parseInt`,
+ * `pop`, `random`, `reduce`, `reduceRight`, `repeat`, `result`, `round`,
+ * `runInContext`, `sample`, `shift`, `size`, `snakeCase`, `some`, `sortedIndex`,
+ * `sortedIndexBy`, `sortedLastIndex`, `sortedLastIndexBy`, `startCase`,
+ * `startsWith`, `subtract`, `sum`, `sumBy`, `template`, `times`, `toLower`,
+ * `toInteger`, `toLength`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`,
+ * `trim`, `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`,
* `upperCase`, `upperFirst`, `value`, and `words`
*
* @name _
diff --git a/wrapperValue.js b/wrapperValue.js
index 47102c789..f6694d9af 100644
--- a/wrapperValue.js
+++ b/wrapperValue.js
@@ -5,7 +5,7 @@ import baseWrapperValue from './internal/baseWrapperValue';
*
* @name value
* @memberOf _
- * @alias run, toJSON, valueOf
+ * @alias toJSON, valueOf
* @category Seq
* @returns {*} Returns the resolved unwrapped value.
* @example