From 5841e62c664a3f51b01e44ddc56f9f59bbd51d64 Mon Sep 17 00:00:00 2001 From: John-David Dalton Date: Sat, 11 May 2013 00:59:48 -0700 Subject: [PATCH] Add `_.chain` alias of `_`. [closes #267] Former-commit-id: 580e4346444096c7fa77cfc5cf2c68b6cf891fcf --- build.js | 26 +++++++++++++++++++++----- dist/lodash.compat.js | 13 +++++++++---- dist/lodash.compat.min.js | 4 ++-- dist/lodash.js | 13 +++++++++---- dist/lodash.min.js | 12 ++++++------ dist/lodash.underscore.js | 4 ++-- dist/lodash.underscore.min.js | 8 ++++---- lodash.js | 2 ++ test/test-build.js | 2 +- 9 files changed, 56 insertions(+), 28 deletions(-) diff --git a/build.js b/build.js index fba4d6c24..4a7670f85 100755 --- a/build.js +++ b/build.js @@ -180,7 +180,6 @@ 'zipObject': [], // method used by the `backbone` and `underscore` builds - 'chain': ['value'], 'findWhere': ['find'] }; @@ -202,7 +201,7 @@ var allMethods = _.without(_.keys(dependencyMap)); /** List of Lo-Dash methods */ - var lodashMethods = _.without(allMethods, 'chain', 'findWhere'); + var lodashMethods = _.without(allMethods, 'findWhere'); /** List of Backbone's Lo-Dash dependencies */ var backboneDependencies = [ @@ -280,7 +279,9 @@ ]; /** List of Underscore methods */ - var underscoreMethods = _.without.apply(_, [allMethods].concat(lodashOnlyMethods)); + var underscoreMethods = _.without + .apply(_, [allMethods].concat(lodashOnlyMethods)) + .concat('chain'); /** List of ways to export the `lodash` function */ var exportsAll = [ @@ -366,9 +367,9 @@ ].join('\n' + indent)); }); - // add `lodash.chain` assignment + // replace `lodash.chain` assignment source = source.replace(getMethodAssignments(source), function(match) { - return match.replace(/^(?: *\/\*[^*]*\*+(?:[^\/][^*]*\*+)*\/\n)?( *)lodash\.VERSION *=/m, '$1lodash.chain = chain;\n\n$&'); + return match.replace(/^( *lodash\.chain *= *).+/m, '$1chain;'); }); // add `lodash.prototype.chain` assignment @@ -1803,6 +1804,7 @@ } }); + dependencyMap.chain = ['value']; dependencyMap.findWhere = ['where']; dependencyMap.reduceRight = _.without(dependencyMap.reduceRight, 'isString'); dependencyMap.value = _.without(dependencyMap.value, 'isArray'); @@ -2357,6 +2359,20 @@ '}' ].join('\n')); } + // replace `_.memoize` + if (!useLodashMethod('memoize')) { + source = replaceFunction(source, 'memoize', [ + 'function memoize(func, resolver) {', + ' var cache = {};', + ' return function() {', + ' var key = keyPrefix + (resolver ? resolver.apply(this, arguments) : arguments[0]);', + ' return hasOwnProperty.call(cache, key)', + ' ? cache[key]', + ' : (cache[key] = func.apply(this, arguments));', + ' };', + '}' + ].join('\n')); + } // replace `_.omit` if (!useLodashMethod('omit')) { source = replaceFunction(source, 'omit', [ diff --git a/dist/lodash.compat.js b/dist/lodash.compat.js index 19d8499ce..e69857bde 100644 --- a/dist/lodash.compat.js +++ b/dist/lodash.compat.js @@ -281,6 +281,7 @@ * * @name _ * @constructor + * @alias chain * @category Chaining * @param {Mixed} value The value to wrap in a `lodash` instance. * @returns {Object} Returns a `lodash` instance. @@ -4598,13 +4599,16 @@ * }); */ function memoize(func, resolver) { - var cache = {}; - return function() { - var key = keyPrefix + (resolver ? resolver.apply(this, arguments) : arguments[0]); + function memoized() { + var cache = memoized.cache, + key = keyPrefix + (resolver ? resolver.apply(this, arguments) : arguments[0]); + return hasOwnProperty.call(cache, key) ? cache[key] : (cache[key] = func.apply(this, arguments)); - }; + } + memoized.cache = {}; + return memoized; } /** @@ -5355,6 +5359,7 @@ lodash.zipObject = zipObject; // add aliases + lodash.chain = lodash; lodash.collect = map; lodash.drop = rest; lodash.each = forEach; diff --git a/dist/lodash.compat.min.js b/dist/lodash.compat.min.js index 8c3f13415..b0f684efe 100644 --- a/dist/lodash.compat.min.js +++ b/dist/lodash.compat.min.js @@ -31,12 +31,12 @@ n[u]=St(n[u],n)}return n},a.bindKey=function(n,t){return L(n,t,yr.call(arguments var e=typeof n;if("function"!=e){if("object"!=e)return function(t){return t[n]};var u=Er(n);return function(t){for(var r=u.length,e=!1;r--&&(e=rt(t[u[r]],n[u[r]],i)););return e}}return typeof t!="undefined"?1===r?function(r){return n.call(t,r)}:2===r?function(r,e){return n.call(t,r,e)}:4===r?function(r,e,u,a){return n.call(t,r,e,u,a)}:function(r,e,u){return n.call(t,r,e,u)}:n},a.debounce=function(n,t,r){function e(){var t=c&&(!l||1++f&&(a=n.apply(o,u)),i=ur(e,t),a}},a.defaults=Pr,a.defer=At,a.delay=function(n,t){var e=yr.call(arguments,2);return ur(function(){n.apply(r,e)},t)},a.difference=bt,a.filter=pt,a.flatten=wt,a.forEach=vt,a.forIn=Br,a.forOwn=Nr,a.functions=nt,a.groupBy=function(n,t,r){var e={};return t=a.createCallback(t,r),vt(n,function(n,r,u){r=Lt(t(n,r,u)),(tr.call(e,r)?e[r]:e[r]=[]).push(n)}),e },a.initial=function(n,t,r){if(!n)return[];var e=0,u=n.length;if(typeof t!="number"&&null!=t){var o=u;for(t=a.createCallback(t,r);o--&&t(n[o],o,n);)e++}else e=null==t||r?1:t||e;return W(n,0,sr(pr(0,u-e),u))},a.intersection=function(n){var t=arguments,r=t.length,e={0:{}},u=-1,a=n?n.length:0,o=a>=c,i=[],l=i;n:for(;++uCt(l,p)){o&&l.push(p);for(var v=r;--v;)if(!(e[v]||(e[v]=R(t[v])))(p))continue n;i.push(p)}}return i},a.invert=tt,a.invoke=function(n,t){var r=yr.call(arguments,2),e=-1,u=typeof t=="function",a=n?n.length:0,o=Nt(typeof a=="number"?a:0); -return vt(n,function(n){o[++e]=(u?t:n[t]).apply(n,r)}),o},a.keys=Er,a.map=gt,a.max=yt,a.memoize=function(n,t){var r={};return function(){var e=f+(t?t.apply(this,arguments):arguments[0]);return tr.call(r,e)?r[e]:r[e]=n.apply(this,arguments)}},a.merge=it,a.min=function(n,t,r){var e=1/0,u=e;if(!t&&kr(n)){r=-1;for(var o=n.length;++rCt(o,r))&&(u[r]=n)}),u},a.once=function(n){var t,r;return function(){return t?r:(t=!0,r=n.apply(this,arguments),n=null,r)}},a.pairs=function(n){for(var t=-1,r=Er(n),e=r.length,u=Nt(e);++tr?pr(0,e+r):sr(r,e-1))+1);e--;)if(n[e]===t)return e;return-1},a.mixin=Pt,a.noConflict=function(){return e._=Vt,this},a.parseInt=qr,a.random=function(n,t){return null==n&&null==t&&(t=1),n=+n||0,null==t&&(t=n,n=0),n+Zt(gr()*((+t||0)-n+1)) },a.reduce=ht,a.reduceRight=mt,a.result=function(n,t){var e=n?n[t]:r;return et(e)?n[t]():e},a.runInContext=t,a.size=function(n){var t=n?n.length:0;return typeof t=="number"?t:Er(n).length},a.some=dt,a.sortedIndex=kt,a.template=function(n,t,e){var u=a.templateSettings;n||(n=""),e=Pr({},e,u);var o,i=Pr({},e.imports,u.imports),u=Er(i),i=ft(i),f=0,c=e.interpolate||b,v="__p+='",c=Kt((e.escape||b).source+"|"+c.source+"|"+(c===h?g:b).source+"|"+(e.evaluate||b).source+"|$","g");n.replace(c,function(t,r,e,u,a,i){return e||(e=u),v+=n.slice(f,i).replace(w,H),r&&(v+="'+__e("+r+")+'"),a&&(o=!0,v+="';"+a+";__p+='"),e&&(v+="'+((__t=("+e+"))==null?'':__t)+'"),f=i+t.length,t diff --git a/dist/lodash.js b/dist/lodash.js index dd308ddb3..7e7cf20f5 100644 --- a/dist/lodash.js +++ b/dist/lodash.js @@ -256,6 +256,7 @@ * * @name _ * @constructor + * @alias chain * @category Chaining * @param {Mixed} value The value to wrap in a `lodash` instance. * @returns {Object} Returns a `lodash` instance. @@ -4299,13 +4300,16 @@ * }); */ function memoize(func, resolver) { - var cache = {}; - return function() { - var key = keyPrefix + (resolver ? resolver.apply(this, arguments) : arguments[0]); + function memoized() { + var cache = memoized.cache, + key = keyPrefix + (resolver ? resolver.apply(this, arguments) : arguments[0]); + return hasOwnProperty.call(cache, key) ? cache[key] : (cache[key] = func.apply(this, arguments)); - }; + } + memoized.cache = {}; + return memoized; } /** @@ -5056,6 +5060,7 @@ lodash.zipObject = zipObject; // add aliases + lodash.chain = lodash; lodash.collect = map; lodash.drop = rest; lodash.each = forEach; diff --git a/dist/lodash.min.js b/dist/lodash.min.js index c62cc0d35..15236eca0 100644 --- a/dist/lodash.min.js +++ b/dist/lodash.min.js @@ -27,12 +27,12 @@ de[E]=Dt,de[I]=zt,de[N]=Pt,de[S]=Kt,de[A]=Mt,de[B]=Gt,de[$]=Vt,de[F]=Ht,de[R]=Jt u&&r.push(u)}return r},G.compose=function(){var n=arguments;return function(){for(var t=arguments,e=n.length;e--;)t=[n[e].apply(this,t)];return t[0]}},G.countBy=function(n,t,e){var r={};return t=G.createCallback(t,e),bt(n,function(n,e,u){e=Jt(t(n,e,u)),ue.call(r,e)?r[e]++:r[e]=1}),r},G.createCallback=function(n,t,e){if(n==u)return Rt;var r=typeof n;if("function"!=r){if("object"!=r)return function(t){return t[n]};var o=we(n);return function(t){for(var e=o.length,r=a;e--&&(r=ot(t[o[e]],n[o[e]],l)););return r }}return typeof t!="undefined"?1===e?function(e){return n.call(t,e)}:2===e?function(e,r){return n.call(t,e,r)}:4===e?function(e,r,u,a){return n.call(t,e,r,u,a)}:function(e,r,u){return n.call(t,e,r,u)}:n},G.debounce=function(n,t,e){function u(){var t=p&&(!s||1++l&&(i=n.apply(f,o)),c=ie(u,t),i}},G.defaults=M,G.defer=Ft,G.delay=function(n,t){var r=me.call(arguments,2); return ie(function(){n.apply(e,r)},t)},G.difference=Ct,G.filter=yt,G.flatten=Ot,G.forEach=bt,G.forIn=K,G.forOwn=P,G.functions=ut,G.groupBy=function(n,t,e){var r={};return t=G.createCallback(t,e),bt(n,function(n,e,u){e=Jt(t(n,e,u)),(ue.call(r,e)?r[e]:r[e]=[]).push(n)}),r},G.initial=function(n,t,e){if(!n)return[];var r=0,a=n.length;if(typeof t!="number"&&t!=u){var o=a;for(t=G.createCallback(t,e);o--&&t(n[o],o,n);)r++}else r=t==u||e?1:t||r;return tt(n,0,ye(ge(0,a-r),a))},G.intersection=function(n){var t=arguments,e=t.length,r={0:{}},u=-1,a=n?n.length:0,o=a>=s,i=[],f=i; -n:for(;++uEt(f,c)){o&&f.push(c);for(var v=e;--v;)if(!(r[v]||(r[v]=H(t[v])))(c))continue n;i.push(c)}}return i},G.invert=at,G.invoke=function(n,t){var e=me.call(arguments,2),r=-1,u=typeof t=="function",a=n?n.length:0,o=Dt(typeof a=="number"?a:0);return bt(n,function(n){o[++r]=(u?t:n[t]).apply(n,e)}),o},G.keys=we,G.map=mt,G.max=dt,G.memoize=function(n,t){var e={};return function(){var r=p+(t?t.apply(this,arguments):arguments[0]); -return ue.call(e,r)?e[r]:e[r]=n.apply(this,arguments)}},G.merge=pt,G.min=function(n,t,e){var r=1/0,u=r;if(!t&&ke(n)){e=-1;for(var a=n.length;++eEt(a,e))&&(u[e]=n)}),u},G.once=function(n){var t,e;return function(){return t?e:(t=r,e=n.apply(this,arguments),n=u,e) -}},G.pairs=function(n){for(var t=-1,e=we(n),r=e.length,u=Dt(r);++tEt(f,c)){o&&f.push(c);for(var v=e;--v;)if(!(r[v]||(r[v]=H(t[v])))(c))continue n;i.push(c)}}return i},G.invert=at,G.invoke=function(n,t){var e=me.call(arguments,2),r=-1,u=typeof t=="function",a=n?n.length:0,o=Dt(typeof a=="number"?a:0);return bt(n,function(n){o[++r]=(u?t:n[t]).apply(n,e)}),o},G.keys=we,G.map=mt,G.max=dt,G.memoize=function(n,t){function e(){var r=e.cache,u=p+(t?t.apply(this,arguments):arguments[0]); +return ue.call(r,u)?r[u]:r[u]=n.apply(this,arguments)}return e.cache={},e},G.merge=pt,G.min=function(n,t,e){var r=1/0,u=r;if(!t&&ke(n)){e=-1;for(var a=n.length;++eEt(a,e))&&(u[e]=n)}),u},G.once=function(n){var t,e; +return function(){return t?e:(t=r,e=n.apply(this,arguments),n=u,e)}},G.pairs=function(n){for(var t=-1,e=we(n),r=e.length,u=Dt(r);++te?ge(0,r+e):ye(e,r-1))+1);r--;)if(n[r]===t)return r;return-1},G.mixin=Tt,G.noConflict=function(){return o._=Xt,this},G.parseInt=zt,G.random=function(n,t){return n==u&&t==u&&(t=1),n=+n||0,t==u&&(t=n,n=0),n+ee(be()*((+t||0)-n+1))},G.reduce=kt,G.reduceRight=wt,G.result=function(n,t){var r=n?n[t]:e;return it(r)?n[t]():r},G.runInContext=t,G.size=function(n){var t=n?n.length:0; diff --git a/dist/lodash.underscore.js b/dist/lodash.underscore.js index c02b05a29..ff142d17a 100644 --- a/dist/lodash.underscore.js +++ b/dist/lodash.underscore.js @@ -182,6 +182,7 @@ * * @name _ * @constructor + * @alias chain * @category Chaining * @param {Mixed} value The value to wrap in a `lodash` instance. * @returns {Object} Returns a `lodash` instance. @@ -4275,6 +4276,7 @@ lodash.zip = zip; // add aliases + lodash.chain = chain; lodash.collect = map; lodash.drop = rest; lodash.each = forEach; @@ -4348,8 +4350,6 @@ /*--------------------------------------------------------------------------*/ - lodash.chain = chain; - /** * The semantic version number. * diff --git a/dist/lodash.underscore.min.js b/dist/lodash.underscore.min.js index 458a1eb1c..51f464eb6 100644 --- a/dist/lodash.underscore.min.js +++ b/dist/lodash.underscore.min.js @@ -26,10 +26,10 @@ return mt.call(r,e)?r[e]:r[e]=n.apply(this,arguments)}},t.min=function(n,t,r){va u[t]=[o,n[o]]}return u},t.partial=function(n){return e(n,Bt.call(arguments,1))},t.pick=function(n){for(var t=-1,r=ht.apply(ct,Bt.call(arguments,1)),e=r.length,u={};++tr?0:r);++tr?Et(0,e+r):St(r,e-1))+1);e--;)if(n[e]===t)return e;return-1},t.mixin=V,t.noConflict=function(){return n._=pt,this},t.random=function(n,t){return null==n&&null==t&&(t=1),n=+n||0,null==t&&(t=n,n=0),n+yt(Nt()*((+t||0)-n+1))},t.reduce=B,t.reduceRight=k,t.result=function(n,t){var r=n?n[t]:null;return y(r)?n[t]():r},t.size=function(n){var t=n?n.length:0;return typeof t=="number"?t:Rt(n).length},t.some=q,t.sortedIndex=I,t.template=function(n,r,e){n||(n=""),e=p({},e,t.templateSettings); var o=0,i="__p+='",a=e.variable;n.replace(RegExp((e.escape||X).source+"|"+(e.interpolate||X).source+"|"+(e.evaluate||X).source+"|$","g"),function(t,r,e,a,f){return i+=n.slice(o,f).replace(Z,u),r&&(i+="'+_['escape']("+r+")+'"),a&&(i+="';"+a+";__p+='"),e&&(i+="'+((__t=("+e+"))==null?'':__t)+'"),o=f+t.length,t}),i+="';\n",a||(a="obj",i="with("+a+"||{}){"+i+"}"),i="function("+a+"){var __t,__p='',__j=Array.prototype.join;function print(){__p+=__j.call(arguments,'')}"+i+"return __p}";try{var f=Function("_","return "+i)(t) -}catch(l){throw l.source=i,l}return r?f(r):(f.source=i,f)},t.unescape=function(n){return null==n?"":(n+"").replace(Q,f)},t.uniqueId=function(n){var t=++J+"";return n?n+t:t},t.all=w,t.any=q,t.detect=x,t.foldl=B,t.foldr=k,t.include=j,t.inject=B,t.first=D,t.last=function(n,t,r){if(n){var e=0,u=n.length;if(typeof t!="number"&&null!=t){var o=u;for(t=P(t,r);o--&&t(n[o],o,n);)e++}else if(e=t,null==e||r)return n[u-1];return Bt.call(n,Et(0,u-e))}},t.take=D,t.head=D,t.chain=function(n){return n=new i(n),n.__chain__=!0,n -},t.VERSION="1.2.1",V(t),t.prototype.chain=function(){return this.__chain__=!0,this},t.prototype.value=function(){return this.__wrapped__},O("pop push reverse shift sort splice unshift".split(" "),function(n){var r=ct[n];t.prototype[n]=function(){var n=this.__wrapped__;return r.apply(n,arguments),!qt.spliceObjects&&0===n.length&&delete n[0],this}}),O(["concat","join","slice"],function(n){var r=ct[n];t.prototype[n]=function(){var n=r.apply(this.__wrapped__,arguments);return this.__chain__&&(n=new i(n),n.__chain__=!0),n -}}),typeof define=="function"&&typeof define.amd=="object"&&define.amd?(n._=t, define(function(){return t})):W&&!W.nodeType?G?(G.exports=t)._=t:W._=t:n._=t})(this); \ No newline at end of file +}catch(l){throw l.source=i,l}return r?f(r):(f.source=i,f)},t.unescape=function(n){return null==n?"":(n+"").replace(Q,f)},t.uniqueId=function(n){var t=++J+"";return n?n+t:t},t.all=w,t.any=q,t.detect=x,t.foldl=B,t.foldr=k,t.include=j,t.inject=B,t.first=D,t.last=function(n,t,r){if(n){var e=0,u=n.length;if(typeof t!="number"&&null!=t){var o=u;for(t=P(t,r);o--&&t(n[o],o,n);)e++}else if(e=t,null==e||r)return n[u-1];return Bt.call(n,Et(0,u-e))}},t.take=D,t.head=D,t.VERSION="1.2.1",V(t),t.prototype.chain=function(){return this.__chain__=!0,this +},t.prototype.value=function(){return this.__wrapped__},O("pop push reverse shift sort splice unshift".split(" "),function(n){var r=ct[n];t.prototype[n]=function(){var n=this.__wrapped__;return r.apply(n,arguments),!qt.spliceObjects&&0===n.length&&delete n[0],this}}),O(["concat","join","slice"],function(n){var r=ct[n];t.prototype[n]=function(){var n=r.apply(this.__wrapped__,arguments);return this.__chain__&&(n=new i(n),n.__chain__=!0),n}}),typeof define=="function"&&typeof define.amd=="object"&&define.amd?(n._=t, define(function(){return t +})):W&&!W.nodeType?G?(G.exports=t)._=t:W._=t:n._=t})(this); \ No newline at end of file diff --git a/lodash.js b/lodash.js index ad117f5c5..1329b3945 100644 --- a/lodash.js +++ b/lodash.js @@ -280,6 +280,7 @@ * * @name _ * @constructor + * @alias chain * @category Chaining * @param {Mixed} value The value to wrap in a `lodash` instance. * @returns {Object} Returns a `lodash` instance. @@ -5375,6 +5376,7 @@ lodash.zipObject = zipObject; // add aliases + lodash.chain = lodash; lodash.collect = map; lodash.drop = rest; lodash.each = forEach; diff --git a/test/test-build.js b/test/test-build.js index a39496bc0..4764ac5ed 100644 --- a/test/test-build.js +++ b/test/test-build.js @@ -95,7 +95,7 @@ }); /** List of all methods */ - var allMethods = lodashMethods.concat('chain', 'findWhere'); + var allMethods = lodashMethods.concat('findWhere'); /** List of "Arrays" category methods */ var arraysMethods = [