From 59f78c16b14dc15c4046d2b8be0156f6b9d7835f Mon Sep 17 00:00:00 2001 From: John-David Dalton Date: Wed, 13 Mar 2013 07:56:15 -0700 Subject: [PATCH] Remove internal `each` for `modern` and `underscore` builds. Former-commit-id: d090f9d0a21f8086d9e34d1171dc046a93327bb8 --- build.js | 52 ++++++++++++++++++++++++------- dist/lodash.js | 57 +++++++++++++--------------------- dist/lodash.min.js | 58 +++++++++++++++++------------------ dist/lodash.underscore.js | 57 ++++++++++------------------------ dist/lodash.underscore.min.js | 55 ++++++++++++++++----------------- 5 files changed, 134 insertions(+), 145 deletions(-) diff --git a/build.js b/build.js index 023b67b72..5f2f76fbd 100755 --- a/build.js +++ b/build.js @@ -965,7 +965,7 @@ // remove function if (funcName == 'runInContext') { source = removeRunInContext(source, funcName); - } else if ((snippet = matchFunction(source, funcName))) { + } else if (funcName != 'each' && (snippet = matchFunction(source, funcName))) { source = source.replace(snippet, ''); } // grab the method assignments snippet @@ -1720,11 +1720,6 @@ dependencyMap.isPlainObject = _.without(dependencyMap.isPlainObject, 'isArguments'); dependencyMap.keys = _.without(dependencyMap.keys, 'isArguments'); dependencyMap.reduceRight = _.without(dependencyMap.reduceRight, 'isString'); - - if (!isMobile) { - dependencyMap.max.push('forEach'); - dependencyMap.min.push('forEach'); - } } if (isUnderscore) { dependencyMap.contains = _.without(dependencyMap.contains, 'isString'); @@ -1755,6 +1750,8 @@ dependencyMap.filter = _.without(dependencyMap.filter, 'isArray'); dependencyMap.forEach = _.without(dependencyMap.forEach, 'isArray'); dependencyMap.map = _.without(dependencyMap.map, 'isArray'); + dependencyMap.max.push('forEach'); + dependencyMap.min.push('forEach'); dependencyMap.reduce = _.without(dependencyMap.reduce, 'isArray'); } } @@ -1826,6 +1823,26 @@ if (!isMobile) { source = removeSupportNonEnumArgs(source); + // replace `_.forEach` + source = replaceFunction(source, 'forEach', [ + 'function forEach(collection, callback, thisArg) {', + ' var index = -1,', + ' length = collection ? collection.length : 0;', + '', + " if (typeof length == 'number') {", + ' callback = createCallback(callback, thisArg);', + ' while (++index < length) {', + ' if (callback(collection[index], index, collection) === false) {', + ' break;', + ' }', + ' }', + ' } else {', + ' each(collection, callback, thisArg);', + ' }', + ' return collection;', + '}', + ].join('\n')); + // replace `_.map` source = replaceFunction(source, 'map', [ 'function map(collection, callback, thisArg) {', @@ -1849,13 +1866,13 @@ ].join('\n')); // replace `isArray(collection)` checks in "Collections" methods with simpler type checks - _.each(['every', 'filter', 'forEach', 'max', 'min', 'reduce'], function(methodName) { + _.each(['every', 'filter', 'max', 'min', 'reduce', 'some'], function(methodName) { source = source.replace(matchFunction(source, methodName), function(match) { if (methodName == 'reduce') { match = match.replace(/^( *)var noaccum\b/m, '$1if (!collection) return accumulator;\n$&'); } - else if (!isUnderscore && /^(?:max|min)$/.test(methodName)) { - return match.replace(/\beach\(/, 'forEach('); + else if (/^(?:max|min)$/.test(methodName)) { + match = match.replace(/\beach\(/, 'forEach('); } return match.replace(/^(( *)if *\(.*?\bisArray\([^\)]+\).*?\) *{\n)(( *)var index[^;]+.+\n+)/m, function(snippet, statement, indent, vars) { vars = vars @@ -2377,6 +2394,17 @@ }); } } + // replace `each` references with `forEach` and `forOwn` + if ((isUnderscore || (isModern && !isMobile)) && + buildMethods.indexOf('forEach') > -1 && + (buildMethods.indexOf('forOwn') > -1 || !exposeForOwn) + ) { + source = source + .replace(matchFunction(source, 'each'), '') + .replace(/^ *lodash\._each *=.+\n/gm, '') + .replace(/\beach(?=\(collection)/g, 'forOwn') + .replace(/\beach(?=\(\[)/g, 'forEach'); + } vm.runInContext(source, context); return context._; }()); @@ -2520,7 +2548,9 @@ // remove chainability from `each` and `_.forEach` _.each(['each', 'forEach'], function(methodName) { source = source.replace(matchFunction(source, methodName), function(match) { - return match.replace(/\n *return .+?([};\s]+)$/, '$1'); + return match + .replace(/\n *return .+?([};\s]+)$/, '$1') + .replace(/\b(return) +result\b/, '$1') }); }); @@ -2683,7 +2713,7 @@ // remove all `lodash.prototype` additions source = source .replace(/(?:\s*\/\/.*)*\n( *)forOwn\(lodash, *function\(func, *methodName\)[\s\S]+?\n\1}.+/g, '') - .replace(/(?:\s*\/\/.*)*\n( *)each\(\['[\s\S]+?\n\1}.+/g, '') + .replace(/(?:\s*\/\/.*)*\n( *)(?:each|forEach)\(\['[\s\S]+?\n\1}.+/g, '') .replace(/(?:\s*\/\/.*)*\n *lodash\.prototype.+/g, ''); } // remove functions, variables, and snippets that the minifier may miss diff --git a/dist/lodash.js b/dist/lodash.js index ec3f98f22..c93f3f7a3 100644 --- a/dist/lodash.js +++ b/dist/lodash.js @@ -595,22 +595,6 @@ ); } - /** - * A function compiled to iterate `arguments` objects, arrays, objects, and - * strings consistenly across environments, executing the `callback` for each - * element in the `collection`. The `callback` is bound to `thisArg` and invoked - * with three arguments; (value, index|key, collection). Callbacks may exit - * iteration early by explicitly returning `false`. - * - * @private - * @type Function - * @param {Array|Object|String} collection The collection to iterate over. - * @param {Function} [callback=identity] The function called per iteration. - * @param {Mixed} [thisArg] The `this` binding of `callback`. - * @returns {Array|Object|String} Returns `collection`. - */ - var each = createIterator(eachIteratorOptions); - /** * Used by `template` to escape characters for inclusion in compiled * string literals. @@ -2077,7 +2061,7 @@ : indexOf(collection, target, fromIndex) ) > -1; } else { - each(collection, function(value) { + forOwn(collection, function(value) { if (++index >= fromIndex) { return !(result = value === target); } @@ -2185,7 +2169,7 @@ } } } else { - each(collection, function(value, index, collection) { + forOwn(collection, function(value, index, collection) { return (result = !!callback(value, index, collection)); }); } @@ -2247,7 +2231,7 @@ } } } else { - each(collection, function(value, index, collection) { + forOwn(collection, function(value, index, collection) { if (callback(value, index, collection)) { result.push(value); } @@ -2338,14 +2322,15 @@ var index = -1, length = collection ? collection.length : 0; - if (callback && typeof thisArg == 'undefined' && typeof length == 'number') { + if (typeof length == 'number') { + callback = createCallback(callback, thisArg); while (++index < length) { if (callback(collection[index], index, collection) === false) { break; } } } else { - each(collection, callback, thisArg); + forOwn(collection, callback, thisArg); } return collection; } @@ -2481,7 +2466,7 @@ } } else { result = []; - each(collection, function(value, key, collection) { + forOwn(collection, function(value, key, collection) { result[++index] = callback(value, key, collection); }); } @@ -2531,10 +2516,10 @@ var computed = -Infinity, result = computed; - if (!callback && isArray(collection)) { - var index = -1, - length = collection.length; + var index = -1, + length = collection ? collection.length : 0; + if (!callback && typeof length == 'number') { while (++index < length) { var value = collection[index]; if (value > result) { @@ -2600,10 +2585,10 @@ var computed = Infinity, result = computed; - if (!callback && isArray(collection)) { - var index = -1, - length = collection.length; + var index = -1, + length = collection ? collection.length : 0; + if (!callback && typeof length == 'number') { while (++index < length) { var value = collection[index]; if (value < result) { @@ -2694,7 +2679,7 @@ accumulator = callback(accumulator, collection[index], index, collection); } } else { - each(collection, function(value, index, collection) { + forOwn(collection, function(value, index, collection) { accumulator = noaccum ? (noaccum = false, value) : callback(accumulator, value, index, collection) @@ -2885,17 +2870,17 @@ var result; callback = lodash.createCallback(callback, thisArg); - if (isArray(collection)) { - var index = -1, - length = collection.length; + var index = -1, + length = collection ? collection.length : 0; + if (typeof length == 'number') { while (++index < length) { if ((result = callback(collection[index], index, collection))) { break; } } } else { - each(collection, function(value, index, collection) { + forOwn(collection, function(value, index, collection) { return !(result = callback(value, index, collection)); }); } @@ -5101,7 +5086,7 @@ lodash.prototype.valueOf = wrapperValueOf; // add `Array` functions that return unwrapped values - each(['join', 'pop', 'shift'], function(methodName) { + forEach(['join', 'pop', 'shift'], function(methodName) { var func = arrayRef[methodName]; lodash.prototype[methodName] = function() { return func.apply(this.__wrapped__, arguments); @@ -5109,7 +5094,7 @@ }); // add `Array` functions that return the wrapped value - each(['push', 'reverse', 'sort', 'unshift'], function(methodName) { + forEach(['push', 'reverse', 'sort', 'unshift'], function(methodName) { var func = arrayRef[methodName]; lodash.prototype[methodName] = function() { func.apply(this.__wrapped__, arguments); @@ -5118,7 +5103,7 @@ }); // add `Array` functions that return new wrapped values - each(['concat', 'slice', 'splice'], function(methodName) { + forEach(['concat', 'slice', 'splice'], function(methodName) { var func = arrayRef[methodName]; lodash.prototype[methodName] = function() { return new lodashWrapper(func.apply(this.__wrapped__, arguments)); diff --git a/dist/lodash.min.js b/dist/lodash.min.js index bb5c973e1..57def5734 100644 --- a/dist/lodash.min.js +++ b/dist/lodash.min.js @@ -4,39 +4,39 @@ * Build: `lodash modern -o ./dist/lodash.js` * Underscore.js 1.4.4 underscorejs.org/LICENSE */ -;(function(n){function t(o){function f(n){if(!n||Yt.call(n)!=A)return a;var t=n.valueOf,e=typeof t=="function"&&(e=Jt(t))&&Jt(e);return e?n==e||Jt(n)==e:Q(n)}function R(n){return n&&typeof n=="object"&&!ve(n)&&Lt.call(n,"__wrapped__")?n:new V(n)}function T(n,t,e){t||(t=0);var r=n.length,u=r-t>=(e||p);if(u){var a={};for(e=t-1;++e=(e||p);if(u){var a={};for(e=t-1;++et||typeof n=="undefined")return 1;if(ne?0:e);++re?0:e);++re?ue(0,u+e):e)||0,typeof u=="number"?o=-1<(ut(n)?n.indexOf(t,e):bt(n,t,e)):le(n,function(n){return++ru&&(u=o)}}else t=!t&&ut(n)?D:R.createCallback(t,e),pt(n,function(n,e,a){e=t(n,e,a),e>r&&(r=e,u=n) -});return u}function gt(n,t,e,r){if(!n)return e;var u=3>arguments.length;t=R.createCallback(t,r,4);var o=-1,i=n.length;if(typeof i=="number")for(u&&(e=n[++o]);++oarguments.length;if(typeof u!="number")var i=ge(n),u=i.length;return t=R.createCallback(t,r,4),pt(n,function(r,f,c){f=i?i[--u]:--u,e=o?(o=a,n[f]):t(e,n[f],f,c)}),e}function yt(n,t,e){var r;if(t=R.createCallback(t,e),ve(n)){e=-1; -for(var u=n.length;++ee?ue(0,u+e):e||0)-1;else if(e)return r=kt(n,t),n[r]===t?r:-1;for(;++r>>1,e(n[r])bt(c,s))&&((e||l)&&c.push(s),f.push(r))}return f}function jt(n,t){for(var e=-1,r=n?n.length:0,u={};++ee?ue(0,u+e):e)||0,typeof u=="number"?o=-1<(ut(n)?n.indexOf(t,e):dt(n,t,e)):pe(n,function(n){return++rr&&(r=e,u=n)});else for(;++au&&(u=e); +return u}function gt(n,t,e,r){if(!n)return e;var u=3>arguments.length;t=R.createCallback(t,r,4);var o=-1,i=n.length;if(typeof i=="number")for(u&&(e=n[++o]);++oarguments.length;if(typeof u!="number")var i=ve(n),u=i.length;return t=R.createCallback(t,r,4),pt(n,function(r,f,c){f=i?i[--u]:--u,e=o?(o=a,n[f]):t(e,n[f],f,c)}),e}function yt(n,t,e){var r;t=R.createCallback(t,e),e=-1; +var u=n?n.length:0;if(typeof u=="number")for(;++ee?ue(0,u+e):e||0)-1;else if(e)return r=kt(n,t),n[r]===t?r:-1;for(;++r>>1,e(n[r])dt(c,s))&&((e||l)&&c.push(s),f.push(r))}return f}function jt(n,t){for(var e=-1,r=n?n.length:0,u={};++e/g,evaluate:/<%([\s\S]+?)%>/g,interpolate:d,variable:"",imports:{_:R}};var It={a:"q,w,g",g:"var a=arguments,b=0,c=typeof g=='number'?2:a.length;while(++b":">",'"':""","'":"'"},ye=Z(he),me=P(It,{g:It.g.replace(";",";if(c>3&&typeof a[c-2]=='function'){var d=o.createCallback(a[--c-1],a[c--],2);}else if(c>2&&typeof a[c-1]=='function'){d=a[--c];}"),e:"u[i]=d?d(u[i],m[i]):m[i]"}),de=P(It);return Ft&&i&&typeof Wt=="function"&&(Ot=Ct(Wt,o)),Wt=8==oe("08")?oe:function(n,t){return oe(ut(n)?n.replace(b,""):n,t||0) -},R.after=function(n,t){return 1>n?t():function(){return 1>--n?t.apply(this,arguments):void 0}},R.assign=me,R.at=function(n){for(var t=-1,e=Gt.apply(zt,H(arguments,1)),r=e.length,u=Et(r);++tbt(f,c)){o&&f.push(c);for(var p=e;--p;)if(!(r[p]||(r[p]=T(t[p],0,100)))(c))continue n;i.push(c)}}return i},R.invert=Z,R.invoke=function(n,t){var e=H(arguments,2),r=-1,u=typeof t=="function",a=n?n.length:0,o=Et(typeof a=="number"?a:0);return pt(n,function(n){o[++r]=(u?t:n[t]).apply(n,e) -}),o},R.keys=ge,R.map=st,R.max=vt,R.memoize=function(n,t){var e={};return function(){var r=(t?t.apply(this,arguments):arguments[0])+"";return Lt.call(e,r)?e[r]:e[r]=n.apply(this,arguments)}},R.merge=at,R.min=function(n,t,e){var r=1/0,u=r;if(!t&&ve(n)){e=-1;for(var a=n.length;++ebt(a,e,1))&&(u[e]=n)}),u},R.once=function(n){var t,e;return function(){return t?e:(t=r,e=n.apply(this,arguments),n=u,e)}},R.pairs=function(n){for(var t=-1,e=ge(n),r=e.length,u=Et(r);++t/g,evaluate:/<%([\s\S]+?)%>/g,interpolate:b,variable:"",imports:{_:R}},It={a:"q,w,g",g:"var a=arguments,b=0,c=typeof g=='number'?2:a.length;while(++b":">",'"':""","'":"'"},he=Z(ge),ye=P(It,{g:It.g.replace(";",";if(c>3&&typeof a[c-2]=='function'){var d=o.createCallback(a[--c-1],a[c--],2);}else if(c>2&&typeof a[c-1]=='function'){d=a[--c];}"),e:"u[i]=d?d(u[i],m[i]):m[i]"}),me=P(It);return Ft&&i&&typeof Wt=="function"&&(Ot=Ct(Wt,o)),Wt=8==oe("08")?oe:function(n,t){return oe(ut(n)?n.replace(d,""):n,t||0) +},R.after=function(n,t){return 1>n?t():function(){return 1>--n?t.apply(this,arguments):void 0}},R.assign=ye,R.at=function(n){for(var t=-1,e=Gt.apply(zt,H(arguments,1)),r=e.length,u=Et(r);++tdt(f,c)){o&&f.push(c);for(var p=e;--p;)if(!(r[p]||(r[p]=T(t[p],0,100)))(c))continue n;i.push(c)}}return i},R.invert=Z,R.invoke=function(n,t){var e=H(arguments,2),r=-1,u=typeof t=="function",a=n?n.length:0,o=Et(typeof a=="number"?a:0);return pt(n,function(n){o[++r]=(u?t:n[t]).apply(n,e) +}),o},R.keys=ve,R.map=st,R.max=vt,R.memoize=function(n,t){var e={};return function(){var r=(t?t.apply(this,arguments):arguments[0])+"";return Lt.call(e,r)?e[r]:e[r]=n.apply(this,arguments)}},R.merge=at,R.min=function(n,t,e){var r=1/0,u=r,a=-1,o=n?n.length:0;if(t||typeof o!="number")t=!t&&ut(n)?D:R.createCallback(t,e),pt(n,function(n,e,a){e=t(n,e,a),edt(a,e,1))&&(u[e]=n)}),u},R.once=function(n){var t,e;return function(){return t?e:(t=r,e=n.apply(this,arguments),n=u,e)}},R.pairs=function(n){for(var t=-1,e=ve(n),r=e.length,u=Et(r);++te?ue(0,r+e):ae(e,r-1))+1);r--;)if(n[r]===t)return r;return-1},R.mixin=St,R.noConflict=function(){return o._=Pt,this -},R.parseInt=Wt,R.random=function(n,t){return n==u&&t==u&&(t=1),n=+n||0,t==u&&(t=n,n=0),n+Ht(ie()*((+t||0)-n+1))},R.reduce=gt,R.reduceRight=ht,R.result=function(n,t){var r=n?n[t]:e;return tt(r)?n[t]():r},R.runInContext=t,R.size=function(n){var t=n?n.length:0;return typeof t=="number"?t:ge(n).length},R.some=yt,R.sortedIndex=kt,R.template=function(n,t,u){var a=R.templateSettings;n||(n=""),u=de({},u,a);var o,i=de({},u.imports,a.imports),a=ge(i),i=ot(i),f=0,c=u.interpolate||_,l="__p+='",c=Tt((u.escape||_).source+"|"+c.source+"|"+(c===d?y:_).source+"|"+(u.evaluate||_).source+"|$","g"); +},R.parseInt=Wt,R.random=function(n,t){return n==u&&t==u&&(t=1),n=+n||0,t==u&&(t=n,n=0),n+Ht(ie()*((+t||0)-n+1))},R.reduce=gt,R.reduceRight=ht,R.result=function(n,t){var r=n?n[t]:e;return tt(r)?n[t]():r},R.runInContext=t,R.size=function(n){var t=n?n.length:0;return typeof t=="number"?t:ve(n).length},R.some=yt,R.sortedIndex=kt,R.template=function(n,t,u){var a=R.templateSettings;n||(n=""),u=me({},u,a);var o,i=me({},u.imports,a.imports),a=ve(i),i=ot(i),f=0,c=u.interpolate||_,l="__p+='",c=Tt((u.escape||_).source+"|"+c.source+"|"+(c===b?y:_).source+"|"+(u.evaluate||_).source+"|$","g"); n.replace(c,function(t,e,u,a,i,c){return u||(u=a),l+=n.slice(f,c).replace(w,M),e&&(l+="'+__e("+e+")+'"),i&&(o=r,l+="';"+i+";__p+='"),u&&(l+="'+((__t=("+u+"))==null?'':__t)+'"),f=c+t.length,t}),l+="';\n",c=u=u.variable,c||(u="obj",l="with("+u+"){"+l+"}"),l=(o?l.replace(s,""):l).replace(v,"$1").replace(g,"$1;"),l="function("+u+"){"+(c?"":u+"||("+u+"={});")+"var __t,__p='',__e=_.escape"+(o?",__j=Array.prototype.join;function print(){__p+=__j.call(arguments,'')}":";")+l+"return __p}";try{var p=Bt(a,"return "+l).apply(e,i) -}catch(h){throw h.source=l,h}return t?p(t):(p.source=l,p)},R.unescape=function(n){return n==u?"":(n+"").replace(h,J)},R.uniqueId=function(n){var t=++c;return(n==u?"":n+"")+t},R.all=ft,R.any=yt,R.detect=lt,R.foldl=gt,R.foldr=ht,R.include=it,R.inject=gt,se(R,function(n,t){R.prototype[t]||(R.prototype[t]=function(){var t=[this.__wrapped__];return Qt.apply(t,arguments),n.apply(R,t)})}),R.first=mt,R.last=function(n,t,e){if(n){var r=0,a=n.length;if(typeof t!="number"&&t!=u){var o=a;for(t=R.createCallback(t,e);o--&&t(n[o],o,n);)r++ -}else if(r=t,r==u||e)return n[a-1];return H(n,ue(0,a-r))}},R.take=mt,R.head=mt,se(R,function(n,t){R.prototype[t]||(R.prototype[t]=function(t,e){var r=n(this.__wrapped__,t,e);return t==u||e&&typeof t!="function"?r:new V(r)})}),R.VERSION="1.0.1",R.prototype.toString=function(){return this.__wrapped__+""},R.prototype.value=At,R.prototype.valueOf=At,le(["join","pop","shift"],function(n){var t=zt[n];R.prototype[n]=function(){return t.apply(this.__wrapped__,arguments)}}),le(["push","reverse","sort","unshift"],function(n){var t=zt[n]; -R.prototype[n]=function(){return t.apply(this.__wrapped__,arguments),this}}),le(["concat","slice","splice"],function(n){var t=zt[n];R.prototype[n]=function(){return new V(t.apply(this.__wrapped__,arguments))}}),R}var e,r=!0,u=null,a=!1,o=typeof exports=="object"&&exports,i=typeof module=="object"&&module&&module.exports==o&&module,f=typeof global=="object"&&global;f.global===f&&(n=f);var c=0,l={},p=30,s=/\b__p\+='';/g,v=/\b(__p\+=)''\+/g,g=/(__e\(.*?\)|\b__t\))\+'';/g,h=/&(?:amp|lt|gt|quot|#39);/g,y=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,m=/\w*$/,d=/<%=([\s\S]+?)%>/g,b=/^0+(?=.$)/,_=/($^)/,k=/[&<>"']/g,w=/['\n\r\t\u2028\u2029\\]/g,j="Array Boolean Date Function Math Number Object RegExp String _ attachEvent clearTimeout isFinite isNaN parseInt setImmediate setTimeout".split(" "),C="[object Arguments]",x="[object Array]",O="[object Boolean]",N="[object Date]",S="[object Number]",A="[object Object]",E="[object RegExp]",I="[object String]",$={"[object Function]":a}; +}catch(h){throw h.source=l,h}return t?p(t):(p.source=l,p)},R.unescape=function(n){return n==u?"":(n+"").replace(h,J)},R.uniqueId=function(n){var t=++c;return(n==u?"":n+"")+t},R.all=ft,R.any=yt,R.detect=lt,R.foldl=gt,R.foldr=ht,R.include=it,R.inject=gt,pe(R,function(n,t){R.prototype[t]||(R.prototype[t]=function(){var t=[this.__wrapped__];return Qt.apply(t,arguments),n.apply(R,t)})}),R.first=mt,R.last=function(n,t,e){if(n){var r=0,a=n.length;if(typeof t!="number"&&t!=u){var o=a;for(t=R.createCallback(t,e);o--&&t(n[o],o,n);)r++ +}else if(r=t,r==u||e)return n[a-1];return H(n,ue(0,a-r))}},R.take=mt,R.head=mt,pe(R,function(n,t){R.prototype[t]||(R.prototype[t]=function(t,e){var r=n(this.__wrapped__,t,e);return t==u||e&&typeof t!="function"?r:new V(r)})}),R.VERSION="1.0.1",R.prototype.toString=function(){return this.__wrapped__+""},R.prototype.value=At,R.prototype.valueOf=At,pt(["join","pop","shift"],function(n){var t=zt[n];R.prototype[n]=function(){return t.apply(this.__wrapped__,arguments)}}),pt(["push","reverse","sort","unshift"],function(n){var t=zt[n]; +R.prototype[n]=function(){return t.apply(this.__wrapped__,arguments),this}}),pt(["concat","slice","splice"],function(n){var t=zt[n];R.prototype[n]=function(){return new V(t.apply(this.__wrapped__,arguments))}}),R}var e,r=!0,u=null,a=!1,o=typeof exports=="object"&&exports,i=typeof module=="object"&&module&&module.exports==o&&module,f=typeof global=="object"&&global;f.global===f&&(n=f);var c=0,l={},p=30,s=/\b__p\+='';/g,v=/\b(__p\+=)''\+/g,g=/(__e\(.*?\)|\b__t\))\+'';/g,h=/&(?:amp|lt|gt|quot|#39);/g,y=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,m=/\w*$/,b=/<%=([\s\S]+?)%>/g,d=/^0+(?=.$)/,_=/($^)/,k=/[&<>"']/g,w=/['\n\r\t\u2028\u2029\\]/g,j="Array Boolean Date Function Math Number Object RegExp String _ attachEvent clearTimeout isFinite isNaN parseInt setImmediate setTimeout".split(" "),C="[object Arguments]",x="[object Array]",O="[object Boolean]",N="[object Date]",S="[object Number]",A="[object Object]",E="[object RegExp]",I="[object String]",$={"[object Function]":a}; $[C]=$[x]=$[O]=$[N]=$[S]=$[A]=$[E]=$[I]=r;var B={"boolean":a,"function":r,object:r,number:a,string:a,undefined:a},F={"\\":"\\","'":"'","\n":"n","\r":"r"," ":"t","\u2028":"u2028","\u2029":"u2029"},q=t();typeof define=="function"&&typeof define.amd=="object"&&define.amd?(n._=q,define(function(){return q})):o&&!o.nodeType?i?(i.exports=q)._=q:o._=q:n._=q})(this); \ No newline at end of file diff --git a/dist/lodash.underscore.js b/dist/lodash.underscore.js index a6a5bde3b..924e8fb4b 100644 --- a/dist/lodash.underscore.js +++ b/dist/lodash.underscore.js @@ -367,32 +367,6 @@ return bound; } - /** - * A function compiled to iterate `arguments` objects, arrays, objects, and - * strings consistenly across environments, executing the `callback` for each - * element in the `collection`. The `callback` is bound to `thisArg` and invoked - * with three arguments; (value, index|key, collection). Callbacks may exit - * iteration early by explicitly returning `false`. - * - * @private - * @type Function - * @param {Array|Object|String} collection The collection to iterate over. - * @param {Function} [callback=identity] The function called per iteration. - * @param {Mixed} [thisArg] The `this` binding of `callback`. - * @returns {Array|Object|String} Returns `collection`. - */ - var each = function (collection, callback, thisArg) { - var index, iterable = collection, result = iterable; - if (!iterable) return result; - callback = callback && typeof thisArg == 'undefined' ? callback : createCallback(callback, thisArg); - - for (index in iterable) { - if (hasOwnProperty.call(iterable, index)) { - if (callback(iterable[index], index, collection) === indicatorObject) return result; - } - } - }; - /** * Used by `template` to escape characters for inclusion in compiled * string literals. @@ -1495,7 +1469,7 @@ if (typeof length == 'number') { result = indexOf(collection, target) > -1; } else { - each(collection, function(value) { + forOwn(collection, function(value) { return (result = value === target) && indicatorObject; }); } @@ -1601,7 +1575,7 @@ } } } else { - each(collection, function(value, index, collection) { + forOwn(collection, function(value, index, collection) { return !(result = !!callback(value, index, collection)) && indicatorObject; }); } @@ -1663,7 +1637,7 @@ } } } else { - each(collection, function(value, index, collection) { + forOwn(collection, function(value, index, collection) { if (callback(value, index, collection)) { result.push(value); } @@ -1758,14 +1732,15 @@ var index = -1, length = collection ? collection.length : 0; - if (callback && typeof thisArg == 'undefined' && typeof length == 'number') { + if (typeof length == 'number') { + callback = createCallback(callback, thisArg); while (++index < length) { if (callback(collection[index], index, collection) === indicatorObject) { break; } } } else { - each(collection, callback, thisArg); + forOwn(collection, callback, thisArg); }; } @@ -1900,7 +1875,7 @@ } } else { result = []; - each(collection, function(value, key, collection) { + forOwn(collection, function(value, key, collection) { result[++index] = callback(value, key, collection); }); } @@ -1963,7 +1938,7 @@ } else { callback = createCallback(callback, thisArg); - each(collection, function(value, index, collection) { + forEach(collection, function(value, index, collection) { var current = callback(value, index, collection); if (current > computed) { computed = current; @@ -2030,7 +2005,7 @@ } else { callback = createCallback(callback, thisArg); - each(collection, function(value, index, collection) { + forEach(collection, function(value, index, collection) { var current = callback(value, index, collection); if (current < computed) { computed = current; @@ -2109,7 +2084,7 @@ accumulator = callback(accumulator, collection[index], index, collection); } } else { - each(collection, function(value, index, collection) { + forOwn(collection, function(value, index, collection) { accumulator = noaccum ? (noaccum = false, value) : callback(accumulator, value, index, collection) @@ -2300,17 +2275,17 @@ var result; callback = createCallback(callback, thisArg); - if (isArray(collection)) { - var index = -1, - length = collection.length; + var index = -1, + length = collection ? collection.length : 0; + if (typeof length == 'number') { while (++index < length) { if ((result = callback(collection[index], index, collection))) { break; } } } else { - each(collection, function(value, index, collection) { + forOwn(collection, function(value, index, collection) { return (result = callback(value, index, collection)) && indicatorObject; }); } @@ -4353,7 +4328,7 @@ lodash.prototype.value = wrapperValueOf; // add `Array` mutator functions to the wrapper - each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(methodName) { + forEach(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(methodName) { var func = arrayRef[methodName]; lodash.prototype[methodName] = function() { var value = this.__wrapped__; @@ -4369,7 +4344,7 @@ }); // add `Array` accessor functions to the wrapper - each(['concat', 'join', 'slice'], function(methodName) { + forEach(['concat', 'join', 'slice'], function(methodName) { var func = arrayRef[methodName]; lodash.prototype[methodName] = function() { var value = this.__wrapped__, diff --git a/dist/lodash.underscore.min.js b/dist/lodash.underscore.min.js index be96fef5a..e2dace723 100644 --- a/dist/lodash.underscore.min.js +++ b/dist/lodash.underscore.min.js @@ -4,31 +4,30 @@ * Build: `lodash underscore -o ./dist/lodash.underscore.js` * Underscore.js 1.4.4 underscorejs.org/LICENSE */ -;(function(n){function t(n,t){var r;if(n&&vt[typeof n])for(r in t||(t=G),n)if(wt.call(n,r)&&t(n[r],r,n)===nt)break}function r(n,t){var r;if(n&&vt[typeof n])for(r in t||(t=G),n)if(t(n[r],r,n)===nt)break}function e(n,t,r){var e;if(n)for(e in t=t&&typeof r=="undefined"?t:W(t,r),n)if(wt.call(n,e)&&t(n[e],e,n)===nt)break}function u(n){return n instanceof u?n:new c(n)}function o(n,t){var r=n.b,e=t.b;if(n=n.a,t=t.a,n!==t){if(n>t||typeof n=="undefined")return 1;if(nr?0:r);++eu&&(u=r,o=n)});else for(;++io&&(o=r);return o}function q(n,t,r,u){if(!n)return r;var o=3>arguments.length;t=W(t,u,4);var i=-1,a=n.length;if(typeof a=="number")for(o&&(r=n[++i]);++iarguments.length; -if(typeof u!="number")var i=It(n),u=i.length;return t=W(t,e,4),B(n,function(e,a,f){a=i?i[--u]:--u,r=o?(o=L,n[a]):t(r,n[a],a,f)}),r}function M(n,t,r){var u;if(t=W(t,r),$t(n)){r=-1;for(var o=n.length;++rr?Ft(0,u+r):r||0)-1;else if(r)return e=P(n,t),n[e]===t?e:-1;for(;++e>>1,r(n[e])z(a,f))&&(r&&a.push(f),i.push(e))}return i}function V(n,t){return Mt.fastBind||Et&&2"']/g,ut=/['\n\r\t\u2028\u2029\\]/g,ot="[object Arguments]",it="[object Array]",at="[object Boolean]",ft="[object Date]",ct="[object Number]",lt="[object Object]",pt="[object RegExp]",st="[object String]",vt={"boolean":L,"function":J,object:J,number:L,string:L,undefined:L},gt={"\\":"\\","'":"'","\n":"n","\r":"r"," ":"t","\u2028":"u2028","\u2029":"u2029"},ht=[],Y={},yt=n._,mt=RegExp("^"+(Y.valueOf+"").replace(/[.*+?^${}()|[\]\\]/g,"\\$&").replace(/valueOf|for [^\]]+/g,".+?")+"$"),_t=Math.ceil,dt=n.clearTimeout,bt=ht.concat,jt=Math.floor,wt=Y.hasOwnProperty,At=ht.push,xt=n.setTimeout,Ot=Y.toString,Et=mt.test(Et=p.bind)&&Et,St=mt.test(St=Array.isArray)&&St,Nt=n.isFinite,kt=n.isNaN,Bt=mt.test(Bt=Object.keys)&&Bt,Ft=Math.max,Rt=Math.min,qt=Math.random,Y=mt.test(n.attachEvent),Dt=Et&&!/\n|true/.test(Et+Y),Mt={}; -(function(){var n={0:1,length:1};Mt.argsObject=arguments.constructor==Object,Mt.fastBind=Et&&!Dt,Mt.spliceObjects=(ht.splice.call(n,0,1),!n[0])})(1),u.templateSettings={escape:/<%-([\s\S]+?)%>/g,evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,variable:""},c.prototype=u.prototype,v(arguments)||(v=function(n){return n?wt.call(n,"callee"):L});var $t=St||function(n){return Mt.argsObject&&n instanceof Array||Ot.call(n)==it},It=Bt?function(n){return w(n)?Bt(n):[]}:g,Tt={"&":"&","<":"<",">":">",'"':""","'":"'"},zt=_(Tt); -j(/x/)&&(j=function(n){return n instanceof Function||"[object Function]"==Ot.call(n)});var Ct=F;u.after=function(n,t){return 1>n?t():function(){return 1>--n?t.apply(this,arguments):void 0}},u.bind=V,u.bindAll=function(n){for(var t=bt.apply(ht,arguments),r=1z(e,o,r)&&u.push(o)}return u},u.filter=N,u.flatten=T,u.forEach=B,u.functions=m,u.groupBy=function(n,t,r){var e={};return t=W(t,r),B(n,function(n,r,u){r=t(n,r,u)+"",(wt.call(e,r)?e[r]:e[r]=[]).push(n)}),e},u.initial=function(n,t,r){if(!n)return[];var e=0,u=n.length;if(typeof t!="number"&&t!=K){var o=u;for(t=W(t,r);o--&&t(n[o],o,n);)e++}else e=t==K||r?1:t||e;return p(n,0,Rt(Ft(0,u-e),u))},u.intersection=function(n){var t=arguments,r=t.length,e=-1,u=n?n.length:0,o=[];n:for(;++ez(o,i)){for(var a=r;--a;)if(0>z(t[a],i))continue n; -o.push(i)}}return o},u.invert=_,u.invoke=function(n,t){var r=p(arguments,2),e=-1,u=typeof t=="function",o=n?n.length:0,i=Array(typeof o=="number"?o:0);return B(n,function(n){i[++e]=(u?t:n[t]).apply(n,r)}),i},u.keys=It,u.map=F,u.max=R,u.memoize=function(n,t){var r={};return function(){var e=(t?t.apply(this,arguments):arguments[0])+"";return wt.call(r,e)?r[e]:r[e]=n.apply(this,arguments)}},u.min=function(n,t,r){var u=1/0,o=u,i=-1,a=n?n.length:0;if(t||typeof a!="number")t=W(t,r),e(n,function(n,r,e){r=t(n,r,e),rz(t,r,1)&&(e[r]=n)}),e},u.once=function(n){var t,r;return function(){return t?r:(t=J,r=n.apply(this,arguments),n=K,r)}},u.pairs=function(n){for(var t=-1,r=It(n),e=r.length,u=Array(e);++tz(arguments,u,1)&&e.push(u)}return e},u.wrap=function(n,t){return function(){var r=[n];return At.apply(r,arguments),t.apply(this,r)}},u.zip=function(n){for(var t=-1,r=n?R(Ct(arguments,"length")):0,e=Array(r);++tr?Ft(0,e+r):Rt(r,e-1))+1);e--;)if(n[e]===t)return e;return-1},u.mixin=H,u.noConflict=function(){return n._=yt,this -},u.random=function(n,t){return n==K&&t==K&&(t=1),n=+n||0,t==K&&(t=n,n=0),n+jt(qt()*((+t||0)-n+1))},u.reduce=q,u.reduceRight=D,u.result=function(n,t){var r=n?n[t]:K;return j(r)?n[t]():r},u.size=function(n){var t=n?n.length:0;return typeof t=="number"?t:It(n).length},u.some=M,u.sortedIndex=P,u.template=function(n,t,r){n||(n=""),r=y({},r,u.templateSettings);var e=0,o="__p+='",i=r.variable;n.replace(RegExp((r.escape||rt).source+"|"+(r.interpolate||rt).source+"|"+(r.evaluate||rt).source+"|$","g"),function(t,r,u,i,f){return o+=n.slice(e,f).replace(ut,a),r&&(o+="'+_['escape']("+r+")+'"),i&&(o+="';"+i+";__p+='"),u&&(o+="'+((__t=("+u+"))==null?'':__t)+'"),e=f+t.length,t -}),o+="';\n",i||(i="obj",o="with("+i+"||{}){"+o+"}"),o="function("+i+"){var __t,__p='',__j=Array.prototype.join;function print(){__p+=__j.call(arguments,'')}"+o+"return __p}";try{var f=Function("_","return "+o)(u)}catch(c){throw c.source=o,c}return t?f(t):(f.source=o,f)},u.unescape=function(n){return n==K?"":(n+"").replace(tt,s)},u.uniqueId=function(n){var t=++Z+"";return n?n+t:t},u.all=S,u.any=M,u.detect=k,u.foldl=q,u.foldr=D,u.include=E,u.inject=q,u.first=I,u.last=function(n,t,r){if(n){var e=0,u=n.length; -if(typeof t!="number"&&t!=K){var o=u;for(t=W(t,r);o--&&t(n[o],o,n);)e++}else if(e=t,e==K||r)return n[u-1];return p(n,Ft(0,u-e))}},u.take=I,u.head=I,u.chain=function(n){return n=new c(n),n.__chain__=J,n},u.VERSION="1.0.1",H(u),u.prototype.chain=function(){return this.__chain__=J,this},u.prototype.value=function(){return this.__wrapped__},e("pop push reverse shift sort splice unshift".split(" "),function(n){var t=ht[n];u.prototype[n]=function(){var n=this.__wrapped__;return t.apply(n,arguments),!Mt.spliceObjects&&0===n.length&&delete n[0],this -}}),e(["concat","join","slice"],function(n){var t=ht[n];u.prototype[n]=function(){var n=t.apply(this.__wrapped__,arguments);return this.__chain__&&(n=new c(n),n.__chain__=J),n}}),Q&&!Q.nodeType?X?(X.exports=u)._=u:Q._=u:n._=u})(this); \ No newline at end of file +;(function(n){function t(n,t){var r;if(n&&st[typeof n])for(r in t||(t=W),n)if(jt.call(n,r)&&t(n[r],r,n)===Z)break}function r(n,t){var r;if(n&&st[typeof n])for(r in t||(t=W),n)if(t(n[r],r,n)===Z)break}function e(n){return n instanceof e?n:new f(n)}function u(n,t){var r=n.b,e=t.b;if(n=n.a,t=t.a,n!==t){if(n>t||typeof n=="undefined")return 1;if(nr?0:r);++ee&&(e=r,u=n) +});else for(;++ou&&(u=r);return u}function R(n,r,e,u){if(!n)return e;var o=3>arguments.length;r=V(r,u,4);var i=-1,a=n.length;if(typeof a=="number")for(o&&(e=n[++i]);++iarguments.length;if(typeof u!="number")var i=$t(n),u=i.length;return t=V(t,e,4),k(n,function(e,a,f){a=i?i[--u]:--u,r=o?(o=K,n[a]):t(r,n[a],a,f)}),r}function D(n,r,e){var u;r=V(r,e),e=-1;var o=n?n.length:0; +if(typeof o=="number")for(;++er?Bt(0,u+r):r||0)-1; +else if(r)return e=C(n,t),n[e]===t?e:-1;for(;++e>>1,r(n[e])T(a,f))&&(r&&a.push(f),i.push(e)) +}return i}function U(n,t){return Dt.fastBind||Ot&&2"']/g,et=/['\n\r\t\u2028\u2029\\]/g,ut="[object Arguments]",ot="[object Array]",it="[object Boolean]",at="[object Date]",ft="[object Number]",ct="[object Object]",lt="[object RegExp]",pt="[object String]",st={"boolean":K,"function":H,object:H,number:K,string:K,undefined:K},vt={"\\":"\\","'":"'","\n":"n","\r":"r"," ":"t","\u2028":"u2028","\u2029":"u2029"},gt=[],X={},ht=n._,yt=RegExp("^"+(X.valueOf+"").replace(/[.*+?^${}()|[\]\\]/g,"\\$&").replace(/valueOf|for [^\]]+/g,".+?")+"$"),mt=Math.ceil,_t=n.clearTimeout,bt=gt.concat,dt=Math.floor,jt=X.hasOwnProperty,wt=gt.push,At=n.setTimeout,xt=X.toString,Ot=yt.test(Ot=l.bind)&&Ot,Et=yt.test(Et=Array.isArray)&&Et,St=n.isFinite,Nt=n.isNaN,kt=yt.test(kt=Object.keys)&&kt,Bt=Math.max,Ft=Math.min,Rt=Math.random,X=yt.test(n.attachEvent),qt=Ot&&!/\n|true/.test(Ot+X),Dt={}; +(function(){var n={0:1,length:1};Dt.argsObject=arguments.constructor==Object,Dt.fastBind=Ot&&!qt,Dt.spliceObjects=(gt.splice.call(n,0,1),!n[0])})(1),e.templateSettings={escape:/<%-([\s\S]+?)%>/g,evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,variable:""},f.prototype=e.prototype,s(arguments)||(s=function(n){return n?jt.call(n,"callee"):K});var Mt=Et||function(n){return Dt.argsObject&&n instanceof Array||xt.call(n)==ot},$t=kt?function(n){return j(n)?kt(n):[]}:v,It={"&":"&","<":"<",">":">",'"':""","'":"'"},Tt=m(It); +d(/x/)&&(d=function(n){return n instanceof Function||"[object Function]"==xt.call(n)});var zt=B;e.after=function(n,t){return 1>n?t():function(){return 1>--n?t.apply(this,arguments):void 0}},e.bind=U,e.bindAll=function(n){for(var t=bt.apply(gt,arguments),r=1T(e,o,r)&&u.push(o)}return u},e.filter=S,e.flatten=I,e.forEach=k,e.functions=y,e.groupBy=function(n,t,r){var e={};return t=V(t,r),k(n,function(n,r,u){r=t(n,r,u)+"",(jt.call(e,r)?e[r]:e[r]=[]).push(n)}),e},e.initial=function(n,t,r){if(!n)return[];var e=0,u=n.length;if(typeof t!="number"&&t!=J){var o=u;for(t=V(t,r);o--&&t(n[o],o,n);)e++}else e=t==J||r?1:t||e;return l(n,0,Ft(Bt(0,u-e),u))},e.intersection=function(n){var t=arguments,r=t.length,e=-1,u=n?n.length:0,o=[];n:for(;++eT(o,i)){for(var a=r;--a;)if(0>T(t[a],i))continue n; +o.push(i)}}return o},e.invert=m,e.invoke=function(n,t){var r=l(arguments,2),e=-1,u=typeof t=="function",o=n?n.length:0,i=Array(typeof o=="number"?o:0);return k(n,function(n){i[++e]=(u?t:n[t]).apply(n,r)}),i},e.keys=$t,e.map=B,e.max=F,e.memoize=function(n,t){var r={};return function(){var e=(t?t.apply(this,arguments):arguments[0])+"";return jt.call(r,e)?r[e]:r[e]=n.apply(this,arguments)}},e.min=function(n,t,r){var e=1/0,u=e,o=-1,i=n?n.length:0;if(t||typeof i!="number")t=V(t,r),k(n,function(n,r,o){r=t(n,r,o),rT(t,r,1)&&(e[r]=n)}),e},e.once=function(n){var t,r;return function(){return t?r:(t=H,r=n.apply(this,arguments),n=J,r)}},e.pairs=function(n){for(var t=-1,r=$t(n),e=r.length,u=Array(e);++tT(arguments,u,1)&&e.push(u)}return e},e.wrap=function(n,t){return function(){var r=[n];return wt.apply(r,arguments),t.apply(this,r)}},e.zip=function(n){for(var t=-1,r=n?F(zt(arguments,"length")):0,e=Array(r);++tr?Bt(0,e+r):Ft(r,e-1))+1);e--;)if(n[e]===t)return e;return-1},e.mixin=G,e.noConflict=function(){return n._=ht,this +},e.random=function(n,t){return n==J&&t==J&&(t=1),n=+n||0,t==J&&(t=n,n=0),n+dt(Rt()*((+t||0)-n+1))},e.reduce=R,e.reduceRight=q,e.result=function(n,t){var r=n?n[t]:J;return d(r)?n[t]():r},e.size=function(n){var t=n?n.length:0;return typeof t=="number"?t:$t(n).length},e.some=D,e.sortedIndex=C,e.template=function(n,t,r){n||(n=""),r=h({},r,e.templateSettings);var u=0,o="__p+='",a=r.variable;n.replace(RegExp((r.escape||tt).source+"|"+(r.interpolate||tt).source+"|"+(r.evaluate||tt).source+"|$","g"),function(t,r,e,a,f){return o+=n.slice(u,f).replace(et,i),r&&(o+="'+_['escape']("+r+")+'"),a&&(o+="';"+a+";__p+='"),e&&(o+="'+((__t=("+e+"))==null?'':__t)+'"),u=f+t.length,t +}),o+="';\n",a||(a="obj",o="with("+a+"||{}){"+o+"}"),o="function("+a+"){var __t,__p='',__j=Array.prototype.join;function print(){__p+=__j.call(arguments,'')}"+o+"return __p}";try{var f=Function("_","return "+o)(e)}catch(c){throw c.source=o,c}return t?f(t):(f.source=o,f)},e.unescape=function(n){return n==J?"":(n+"").replace(nt,p)},e.uniqueId=function(n){var t=++Y+"";return n?n+t:t},e.all=E,e.any=D,e.detect=N,e.foldl=R,e.foldr=q,e.include=O,e.inject=R,e.first=$,e.last=function(n,t,r){if(n){var e=0,u=n.length; +if(typeof t!="number"&&t!=J){var o=u;for(t=V(t,r);o--&&t(n[o],o,n);)e++}else if(e=t,e==J||r)return n[u-1];return l(n,Bt(0,u-e))}},e.take=$,e.head=$,e.chain=function(n){return n=new f(n),n.__chain__=H,n},e.VERSION="1.0.1",G(e),e.prototype.chain=function(){return this.__chain__=H,this},e.prototype.value=function(){return this.__wrapped__},k("pop push reverse shift sort splice unshift".split(" "),function(n){var t=gt[n];e.prototype[n]=function(){var n=this.__wrapped__;return t.apply(n,arguments),!Dt.spliceObjects&&0===n.length&&delete n[0],this +}}),k(["concat","join","slice"],function(n){var t=gt[n];e.prototype[n]=function(){var n=t.apply(this.__wrapped__,arguments);return this.__chain__&&(n=new f(n),n.__chain__=H),n}}),L&&!L.nodeType?Q?(Q.exports=e)._=e:L._=e:n._=e})(this); \ No newline at end of file