diff --git a/.travis.yml b/.travis.yml index 02d7b7c53..ad70bb394 100644 --- a/.travis.yml +++ b/.travis.yml @@ -51,9 +51,11 @@ script: - "[ $SAUCE_LABS == true ] || [ $ISTANBUL == true ] || cd ./test" - "[ $SAUCE_LABS == true ] || [ $ISTANBUL == true ] || $BIN $OPTION ./test.js ../lodash.js" - "[ $SAUCE_LABS == true ] || [ $ISTANBUL == true ] || [ $TRAVIS_SECURE_ENV_VARS == false ] || $BIN $OPTION ./test.js ../lodash.min.js" - - "[ $SAUCE_LABS == false ] || $BIN ./test/saucelabs.js name=\"lodash tests\" runner=\"test/index.html?build=../lodash.js&noglobals=true\" tags=\"development\"" - - "[ $SAUCE_LABS == false ] || $BIN ./test/saucelabs.js name=\"lodash tests\" runner=\"test/index.html?build=../lodash.min.js&noglobals=true\" tags=\"production\"" - - "[ $SAUCE_LABS == false ] || $BIN ./test/saucelabs.js name=\"backbone tests\" runner=\"test/backbone.html?build=../lodash.js\" tags=\"development,backbone\"" - - "[ $SAUCE_LABS == false ] || $BIN ./test/saucelabs.js name=\"backbone tests\" runner=\"test/backbone.html?build=../lodash.min.js\" tags=\"production,backbone\"" - - "[ $SAUCE_LABS == false ] || $BIN ./test/saucelabs.js name=\"underscore tests\" runner=\"test/underscore.html?build=../lodash.js\" tags=\"development,underscore\"" - - "[ $SAUCE_LABS == false ] || $BIN ./test/saucelabs.js name=\"underscore tests\" runner=\"test/underscore.html?build=../lodash.min.js\" tags=\"production,underscore\"" + - "[ $SAUCE_LABS == false ] || $BIN ./test/saucelabs.js name=\"lodash tests\" runner=\"test/index.html?build=../lodash.js&noglobals=true\" tags=\"development\"" + - "[ $SAUCE_LABS == false ] || $BIN ./test/saucelabs.js name=\"lodash tests\" runner=\"test/index.html?build=../lodash.min.js&noglobals=true\" tags=\"production\"" + - "[ $SAUCE_LABS == false ] || $BIN ./test/saucelabs.js name=\"underscore tests\" runner=\"test/underscore.html?build=../lodash.js\" tags=\"development,underscore\"" + - "[ $SAUCE_LABS == false ] || $BIN ./test/saucelabs.js name=\"underscore tests\" runner=\"test/underscore.html?build=../lodash.min.js\" tags=\"production,underscore\"" + - "[ $SAUCE_LABS == false ] || $BIN ./test/saucelabs.js name=\"backbone tests\" runner=\"test/backbone.html?build=../lodash.js\" tags=\"development,backbone\"" + - "[ $SAUCE_LABS == false ] || $BIN ./test/saucelabs.js name=\"backbone tests\" runner=\"test/backbone.html?build=../lodash.min.js\" tags=\"production,backbone\"" + - "[ $SAUCE_LABS == false ] || $BIN ./test/saucelabs.js name=\"backbone tests\" runner=\"test/backbone.html?build=../dist/lodash.core.js\" tags=\"development,backbone\"" + - "[ $SAUCE_LABS == false ] || $BIN ./test/saucelabs.js name=\"backbone tests\" runner=\"test/backbone.html?build=../dist/lodash.core.min.js\" tags=\"production,backbone\"" diff --git a/dist/lodash.core.js b/dist/lodash.core.js index de651bcbc..de170519a 100644 --- a/dist/lodash.core.js +++ b/dist/lodash.core.js @@ -477,9 +477,9 @@ * `replace` and `split` * * The wrapper methods that support shortcut fusion are: - * `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`, `findLast`, - * `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`, `tail`, - * `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray` + * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`, + * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`, + * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray` * * The chainable wrapper methods are: * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, @@ -830,9 +830,10 @@ // Assume cyclic values are equal. // For more information on detecting circular references see https://es5.github.io/#JO. stack || (stack = []); - var stacked = result(find(stack, function(entry) { + var stacked = find(stack, function(entry) { return entry[0] === object; - }), 1); + }); + stacked = stacked && stacked[1]; if (stacked) { return stacked == other; } @@ -954,7 +955,7 @@ */ function basePick(object, props) { object = Object(object); - return baseReduce(props, function(result, key) { + return reduce(props, function(result, key) { if (key in object) { result[key] = object[key]; } @@ -1046,7 +1047,7 @@ */ function baseWrapperValue(value, actions) { var result = value; - return baseReduce(actions, function(result, action) { + return reduce(actions, function(result, action) { return action.func.apply(action.thisArg, arrayPush([result], action.args)); }, result); } @@ -1218,6 +1219,7 @@ var arrValue = array[index], othValue = other[index]; + var result; if (result !== undefined) { if (result) { continue; @@ -1316,6 +1318,7 @@ var objValue = object[key], othValue = other[key]; + var result; // Recursively compare objects (susceptible to call stack limits). if (!(result === undefined ? (objValue === othValue || equalFunc(objValue, othValue, customizer, bitmask, stack)) @@ -1353,20 +1356,18 @@ var getLength = baseProperty('length'); /** - * Initializes an array of property names based on `object`. If `object` is - * an array, `arguments` object, or `string` its index keys are returned, - * otherwise an empty array is returned. + * Creates an array of index keys for `object` values of arrays, + * `arguments` objects, and strings, otherwise `null` is returned. * * @private * @param {Object} object The object to query. - * @returns {Array} Returns the initialized array of property names. + * @returns {Array|null} Returns index keys, else `null`. */ - function initKeys(object) { - var length = object ? object.length : 0; - length = (length && isLength(length) && - (isArray(object) || isString(object) || isArguments(object)) && length) || 0; - - return baseTimes(length, String); + function indexKeys(object) { + var length = object ? object.length : undefined; + return (isLength(length) && (isArray(object) || isString(object) || isArguments(object))) + ? baseTimes(length, String) + : null; } /** @@ -3271,13 +3272,14 @@ if (!(isProto || isArrayLike(object))) { return baseKeys(object); } - var result = initKeys(object), - length = result.length, - skipIndexes = !!length; + var indexes = indexKeys(object), + skipIndexes = !!indexes, + result = indexes || [], + length = result.length; for (var key in object) { if (hasOwnProperty.call(object, key) && - !(skipIndexes && isIndex(key, length)) && + !(skipIndexes && (key == 'length' || isIndex(key, length))) && !(isProto && key == 'constructor')) { result.push(key); } @@ -3312,13 +3314,14 @@ isProto = isPrototype(object), props = baseKeysIn(object), propsLength = props.length, - result = initKeys(object), - length = result.length, - skipIndexes = !!length; + indexes = indexKeys(object), + skipIndexes = !!indexes, + result = indexes || [], + length = result.length; while (++index < propsLength) { var key = props[index]; - if (!(skipIndexes && isIndex(key, length)) && + if (!(skipIndexes && (key == 'length' || isIndex(key, length))) && !(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) { result.push(key); } @@ -3793,10 +3796,10 @@ lodash.VERSION = VERSION; // Add `Array` and `String` methods to `lodash.prototype`. - baseEach(['join', 'pop', 'push', 'replace', 'reverse', 'shift', 'sort', 'splice', 'split', 'unshift'], function(methodName) { + baseEach(['pop', 'join', 'reverse', 'push', 'replace', 'shift', 'sort', 'splice', 'split', 'unshift'], function(methodName) { var func = (/^(?:replace|split)$/.test(methodName) ? stringProto : arrayProto)[methodName], chainName = /^(?:push|sort|unshift)$/.test(methodName) ? 'tap' : 'thru', - retUnwrapped = /^(?:join|pop|replace|shift)$/.test(methodName); + retUnwrapped = /^(?:pop|join|replace|shift)$/.test(methodName); lodash.prototype[methodName] = function() { var args = arguments; diff --git a/dist/lodash.core.min.js b/dist/lodash.core.min.js index 6429fb3e3..1942f21f0 100644 --- a/dist/lodash.core.min.js +++ b/dist/lodash.core.min.js @@ -4,27 +4,27 @@ * Build: `lodash core -o dist/lodash.core.js exports="amd,global"` */ ;(function(){function n(n,t){for(var r=-1,e=t.length,u=n.length;++r-1&&0==n%1&&(null==t?9007199254740991:t)>n}function l(n){if(W(n)&&!Mn(n)){if(n instanceof p)return n;if(dn.call(n,"__wrapped__")){var t=new p(n.__wrapped__,n.__chain__);return t.__actions__=Rn(n.__actions__), -t}}return new p(n)}function p(n,t){this.__wrapped__=n,this.__actions__=[],this.__chain__=!!t}function s(n,t,r){return n===cn||n===jn[r]?t:n}function h(n,t,r){if(typeof n!="function")throw new TypeError("Expected a function");return setTimeout(function(){n.apply(cn,r)},t)}function v(n,t){var r=true;return Bn(n,function(n,e,u){return r=!!t(n,e,u)}),r}function y(n,t){var r=[];return Bn(n,function(n,e,u){t(n,e,u)&&r.push(n)}),r}function _(t,r,e,u){u||(u=[]);for(var o=-1,i=t.length;++ot&&(t=-t>u?0:u+t),r=r===cn||r>u?u:Pn(r),0>r&&(r+=u),u=t>r?0:r-t>>>0,t>>>=0,r=Array(u);++e1?r[u-1]:cn,o=typeof o=="function"?(u--,o):cn;for(t=Object(t);++ef))return false;for(;++i=n&&(t=cn),r}}function P(n){var t;if(typeof n!="function")throw new TypeError("Expected a function");return t=kn(t===cn?n.length-1:Pn(t),0),function(){for(var r=arguments,e=-1,u=kn(r.length-t,0),o=Array(u);++et}function V(n){return W(n)&&H(n)&&dn.call(n,"callee")&&(!Nn.call(n,"callee")||"[object Arguments]"==On.call(n))}function H(n){ -return null!=n&&!(typeof n=="function"&&K(n))&&L(In(n))}function K(n){return n=Q(n)?On.call(n):"","[object Function]"==n||"[object GeneratorFunction]"==n}function L(n){return typeof n=="number"&&n>-1&&0==n%1&&9007199254740991>=n}function Q(n){var t=typeof n;return!!n&&("object"==t||"function"==t)}function W(n){return!!n&&typeof n=="object"}function X(n){return typeof n=="number"||W(n)&&"[object Number]"==On.call(n)}function Y(n){return typeof n=="string"||!Mn(n)&&W(n)&&"[object String]"==On.call(n)} -function Z(n,t){return t>n}function nn(n){var t=q(n);if(!t&&!H(n))return Tn(Object(n));var r,e=$(n),u=e.length,o=!!u;for(r in n)!dn.call(n,r)||o&&a(r,u)||t&&"constructor"==r||e.push(r);return e}function tn(n){for(var t=-1,r=q(n),e=w(n),u=e.length,o=$(n),i=o.length,c=!!i;++t"'`]/g,an=RegExp(fn.source),ln=/^(?:0|[1-9]\d*)$/,pn={"&":"&","<":"<", -">":">",'"':""","'":"'","`":"`"},sn={"function":true,object:true},hn=sn[typeof module]&&module&&!module.nodeType?module:null,vn=o(sn[typeof self]&&self),yn=o(sn[typeof window]&&window),_n=o(sn[typeof this]&&this),gn=o((sn[typeof exports]&&exports&&!exports.nodeType?exports:null)&&hn&&typeof global=="object"&&global)||yn!==(_n&&_n.window)&&yn||vn||_n||Function("return this")(),bn=Array.prototype,jn=Object.prototype,mn=String.prototype,dn=jn.hasOwnProperty,wn=0,On=jn.toString,En=gn._,xn=gn.f,An=xn?xn.g:cn,Nn=jn.propertyIsEnumerable,Sn=gn.isFinite,Tn=Object.keys,kn=Math.max,Fn=function(){ -function n(){}return function(t){if(Q(t)){n.prototype=t;var r=new n;n.prototype=cn}return r||{}}}(),Bn=function(n,t){return function(r,e){if(null==r)return r;if(!H(r))return n(r,e);for(var u=r.length,o=t?u:-1,i=Object(r);(t?o--:++oe&&!c||!i||u&&!f&&a||o&&a){r=1;break n}if(e>r&&!u||!a||c&&!o&&i||f&&i){r=-1;break n}}r=0}return r||n.b-t.b}),A("c"))},l.tap=function(n,t){return t(n),n},l.thru=function(n,t){return t(n)},l.toArray=function(n){return H(n)?n.length?Rn(n):[]:en(n)},l.values=en,l.each=G,l.extend=Hn,on(l,l),l.clone=function(n){if(Q(n))if(Mn(n))n=Rn(n);else{var t=nn(n);n=i(n,t,void 0); -}return n},l.escape=function(n){return(n=null==n?"":n+"")&&an.test(n)?n.replace(fn,c):n},l.every=function(n,t,r){return t=r?cn:t,v(n,d(t))},l.find=C,l.forEach=G,l.has=function(n,t){return null!=n&&dn.call(n,t)},l.head=z,l.identity=un,l.indexOf=function(n,t,r){var e=n?n.length:0;r=typeof r=="number"?0>r?kn(e+r,0):r:0,r=(r||0)-1;for(var u=t===t;++rarguments.length,Bn)},l.result=rn,l.size=J,l.some=function(n,t,r){return t=r?cn:t,S(n,d(t))},l.uniqueId=function(n){var t=++wn;return(null==n?"":n+"")+t},l.first=z,on(l,function(){var n={};return g(l,function(t,r){dn.call(l.prototype,r)||(n[r]=t); -}),n}(),{chain:false}),l.VERSION="4.0.0-pre",Bn("join pop push replace reverse shift sort splice split unshift".split(" "),function(n){var t=(/^(?:replace|split)$/.test(n)?mn:bn)[n],r=/^(?:push|sort|unshift)$/.test(n)?"tap":"thru",e=/^(?:join|pop|replace|shift)$/.test(n);l.prototype[n]=function(){var n=arguments;return e&&!this.__chain__?t.apply(this.value(),n):this[r](function(r){return t.apply(r,n)})}}),l.prototype.run=l.prototype.toJSON=l.prototype.valueOf=l.prototype.value=function(){return T(this.__wrapped__,this.__actions__); -},(yn||vn||{})._=l,typeof define=="function"&&typeof define.amd=="object"&&define.amd? define(function(){return l}):gn._=l}).call(this); \ No newline at end of file +for(var u=-1,o=t.length;++u-1&&0==n%1&&(null==t?9007199254740991:t)>n}function l(n){if(X(n)&&!Mn(n)){if(n instanceof p)return n;if(mn.call(n,"__wrapped__")){var t=new p(n.__wrapped__,n.__chain__);return t.__actions__=Rn(n.__actions__), +t}}return new p(n)}function p(n,t){this.__wrapped__=n,this.__actions__=[],this.__chain__=!!t}function s(n,t,r){return n===cn||n===jn[r]?t:n}function h(n,t,r){if(typeof n!="function")throw new TypeError("Expected a function");return setTimeout(function(){n.apply(cn,r)},t)}function v(n,t){var r=true;return Bn(n,function(n,e,u){return r=!!t(n,e,u)}),r}function y(n,t){var r=[];return Bn(n,function(n,e,u){t(n,e,u)&&r.push(n)}),r}function _(t,r,e,u){u||(u=[]);for(var o=-1,i=t.length;++ot&&(t=-t>u?0:u+t),r=r===cn||r>u?u:Pn(r),0>r&&(r+=u),u=t>r?0:r-t>>>0,t>>>=0,r=Array(u);++e1?r[u-1]:cn,o=typeof o=="function"?(u--,o):cn;for(t=Object(t);++ef))return false;for(;++iarguments.length,Bn)}function M(n){return null==n?0:(n=K(n)?n:tn(n),n.length)}function P(n,t){var r;if(typeof t!="function")throw new TypeError("Expected a function"); +return n=Pn(n),function(){return 0<--n&&(r=t.apply(this,arguments)),1>=n&&(t=cn),r}}function U(n){var t;if(typeof n!="function")throw new TypeError("Expected a function");return t=kn(t===cn?n.length-1:Pn(t),0),function(){for(var r=arguments,e=-1,u=kn(r.length-t,0),o=Array(u);++et}function H(n){return X(n)&&K(n)&&mn.call(n,"callee")&&(!Nn.call(n,"callee")||"[object Arguments]"==On.call(n)); +}function K(n){return null!=n&&!(typeof n=="function"&&L(n))&&Q(In(n))}function L(n){return n=W(n)?On.call(n):"","[object Function]"==n||"[object GeneratorFunction]"==n}function Q(n){return typeof n=="number"&&n>-1&&0==n%1&&9007199254740991>=n}function W(n){var t=typeof n;return!!n&&("object"==t||"function"==t)}function X(n){return!!n&&typeof n=="object"}function Y(n){return typeof n=="number"||X(n)&&"[object Number]"==On.call(n)}function Z(n){return typeof n=="string"||!Mn(n)&&X(n)&&"[object String]"==On.call(n); +}function nn(n,t){return t>n}function tn(n){var t=q(n);if(!t&&!K(n))return Tn(Object(n));var r,e=$(n),u=!!e,e=e||[],o=e.length;for(r in n)!mn.call(n,r)||u&&("length"==r||a(r,o))||t&&"constructor"==r||e.push(r);return e}function rn(n){for(var t=-1,r=q(n),e=w(n),u=e.length,o=$(n),i=!!o,o=o||[],c=o.length;++t"'`]/g,an=RegExp(fn.source),ln=/^(?:0|[1-9]\d*)$/,pn={"&":"&","<":"<",">":">",'"':""", +"'":"'","`":"`"},sn={"function":true,object:true},hn=sn[typeof module]&&module&&!module.nodeType?module:null,vn=o(sn[typeof self]&&self),yn=o(sn[typeof window]&&window),_n=o(sn[typeof this]&&this),gn=o((sn[typeof exports]&&exports&&!exports.nodeType?exports:null)&&hn&&typeof global=="object"&&global)||yn!==(_n&&_n.window)&&yn||vn||_n||Function("return this")(),bn=Array.prototype,jn=Object.prototype,dn=String.prototype,mn=jn.hasOwnProperty,wn=0,On=jn.toString,En=gn._,xn=gn.f,An=xn?xn.g:cn,Nn=jn.propertyIsEnumerable,Sn=gn.isFinite,Tn=Object.keys,kn=Math.max,Fn=function(){ +function n(){}return function(t){if(W(t)){n.prototype=t;var r=new n;n.prototype=cn}return r||{}}}(),Bn=function(n,t){return function(r,e){if(null==r)return r;if(!K(r))return n(r,e);for(var u=r.length,o=t?u:-1,i=Object(r);(t?o--:++oe&&!c||!i||u&&!f&&a||o&&a){r=1;break n}if(e>r&&!u||!a||c&&!o&&i||f&&i){r=-1;break n}}r=0}return r||n.b-t.b}),A("c"))},l.tap=function(n,t){return t(n),n},l.thru=function(n,t){return t(n)},l.toArray=function(n){return K(n)?n.length?Rn(n):[]:en(n)},l.values=en,l.each=G,l.extend=Hn,on(l,l),l.clone=function(n){if(W(n))if(Mn(n))n=Rn(n);else{var t=tn(n);n=i(n,t,void 0); +}return n},l.escape=function(n){return(n=null==n?"":n+"")&&an.test(n)?n.replace(fn,c):n},l.every=function(n,t,r){return t=r?cn:t,v(n,m(t))},l.find=C,l.forEach=G,l.has=function(n,t){return null!=n&&mn.call(n,t)},l.head=z,l.identity=un,l.indexOf=function(n,t,r){var e=n?n.length:0;r=typeof r=="number"?0>r?kn(e+r,0):r:0,r=(r||0)-1;for(var u=t===t;++r