From 4815600e85e03d8180f3e15fd081c3bcbefd49c0 Mon Sep 17 00:00:00 2001 From: John-David Dalton Date: Sun, 27 Jan 2013 11:23:02 -0800 Subject: [PATCH] Continue dependency map tweaking, and simplify how `_.isArguments` is handled in the `underscore` build. Former-commit-id: 568887e067d6463f102b3b866195f3a173fc6d4f --- build.js | 56 +++++++++++++++++++--------------------- lodash.underscore.js | 15 ++++++----- lodash.underscore.min.js | 54 +++++++++++++++++++------------------- 3 files changed, 62 insertions(+), 63 deletions(-) diff --git a/build.js b/build.js index d380bd73e..bbda82fd7 100755 --- a/build.js +++ b/build.js @@ -1367,6 +1367,12 @@ var buildMethods = !isTemplate && (function() { var result; + var includeMethods = options.reduce(function(accumulator, value) { + return /include/.test(value) + ? _.union(accumulator, optionToMethodsArray(source, value)) + : accumulator; + }, []); + var minusMethods = options.reduce(function(accumulator, value) { return /exclude|minus/.test(value) ? _.union(accumulator, optionToMethodsArray(source, value)) @@ -1379,21 +1385,16 @@ : accumulator; }, []); - // add method names explicitly - options.some(function(value) { - return /include/.test(value) && - (result = getDependencies(optionToMethodsArray(source, value))); - }); - - // include Lo-Dash's methods if explicitly requested + // set flags to include Lo-Dash's methods if explicitly requested if (isUnderscore) { - if (result) { - exposeAssign = result.indexOf('assign') > -1; - exposeForIn = result.indexOf('forIn') > -1; - exposeForOwn = result.indexOf('forOwn') > -1; - exposeIsPlainObject = result.indexOf('isPlainObject') > -1; - } - useUnderscoreClone = plusMethods.indexOf('clone') < 0; + var methods = _.without.apply(_, [_.union(includeMethods, plusMethods)].concat(minusMethods)); + exposeAssign = methods.indexOf('assign') > -1; + exposeForIn = methods.indexOf('forIn') > -1; + exposeForOwn = methods.indexOf('forOwn') > -1; + exposeIsPlainObject = methods.indexOf('isPlainObject') > -1; + + methods = _.without.apply(_, [plusMethods].concat(minusMethods)); + useUnderscoreClone = methods.indexOf('clone') < 0; } // update dependencies if (isMobile) { @@ -1403,11 +1404,11 @@ dependencyMap.contains = _.without(dependencyMap.contains, 'isString'); dependencyMap.countBy = _.without(dependencyMap.countBy, 'isEqual', 'keys'); dependencyMap.every = _.without(dependencyMap.every, 'isEqual', 'keys'); - dependencyMap.filter = _.without(dependencyMap.filter, 'isEqual', 'keys'); + dependencyMap.filter = _.without(dependencyMap.filter, 'isEqual'); dependencyMap.find = _.without(dependencyMap.find, 'isEqual', 'keys'); dependencyMap.groupBy = _.without(dependencyMap.groupBy, 'isEqual', 'keys'); dependencyMap.isEqual = _.without(dependencyMap.isEqual, 'forIn', 'isArguments'); - dependencyMap.isEmpty = ['isArray', 'isString']; + dependencyMap.isEmpty = ['isArray', 'isString']; dependencyMap.map = _.without(dependencyMap.map, 'isEqual', 'keys'); dependencyMap.max = _.without(dependencyMap.max, 'isEqual', 'isString', 'keys'); dependencyMap.min = _.without(dependencyMap.min, 'isEqual', 'isString', 'keys'); @@ -1424,6 +1425,11 @@ dependencyMap.clone = _.without(dependencyMap.clone, 'forEach', 'forOwn'); } } + + // add method names explicitly + if (includeMethods.length) { + result = getDependencies(includeMethods); + } // add method names required by Backbone and Underscore builds if (isBackbone && !result) { result = getDependencies(backboneDependencies); @@ -1445,7 +1451,7 @@ result = _.union(result, getDependencies(plusMethods)); } if (minusMethods.length) { - result = _.without.apply(_, [result].concat(minusMethods, getDependants(result))); + result = _.without.apply(_, [result].concat(minusMethods, getDependants(minusMethods))); } return result; }()); @@ -1922,18 +1928,10 @@ source = source.replace(snippet, modified); }()); - // replace `isArguments` and its fallback - (function() { - var snippet = matchFunction(source, 'isArguments').trimRight(); - snippet = snippet.replace(/function isArguments/, 'lodash.isArguments = function'); - - source = removeFunction(source, 'isArguments'); - source = source.replace(getIsArgumentsFallback(source), function(match) { - return snippet + '\n' + match - .replace(/isArguments/g, 'lodash.$&') - .replace(/noArgsClass/g, '!lodash.isArguments(arguments)'); - }); - }()); + // replace `noArgsClass` in the `_.isArguments` fallback + source = source.replace(getIsArgumentsFallback(source), function(match) { + return match.replace(/noArgsClass/g, '!isArguments(arguments)'); + }); // remove chainability from `each` and `_.forEach` _.each(['each', 'forEach'], function(methodName) { diff --git a/lodash.underscore.js b/lodash.underscore.js index 2a8d5dac5..a1c3ccc85 100644 --- a/lodash.underscore.js +++ b/lodash.underscore.js @@ -453,13 +453,13 @@ // create the function factory var factory = Function( - 'createCallback, hasOwnProperty, isArray, isString, ' + + 'createCallback, hasOwnProperty, isArguments, isArray, isString, ' + 'objectTypes, nativeKeys, propertyIsEnumerable', 'return function(' + args + ') {\n' + (data) + '\n}' ); // return the compiled function return factory( - createCallback, hasOwnProperty, isArray, isString, + createCallback, hasOwnProperty, isArguments, isArray, isString, objectTypes, nativeKeys, propertyIsEnumerable ); } @@ -581,6 +581,7 @@ } /*--------------------------------------------------------------------------*/ + /** * Checks if `value` is an `arguments` object. * @@ -597,13 +598,12 @@ * _.isArguments([1, 2, 3]); * // => false */ - lodash.isArguments = function(value) { + function isArguments(value) { return toString.call(value) == argsClass; } - // fallback for browsers that can't detect `arguments` objects by [[Class]] - if (!lodash.isArguments(arguments)) { - lodash.isArguments = function(value) { + if (!isArguments(arguments)) { + isArguments = function(value) { return value ? hasOwnProperty.call(value, 'callee') : false; }; } @@ -852,7 +852,7 @@ * // => false */ function clone(value) { - return value && objectTypes[typeof value] + return isObject(value) ? (isArray(value) ? slice(value) : assign({}, value)) : value } @@ -3873,6 +3873,7 @@ lodash.has = has; lodash.identity = identity; lodash.indexOf = indexOf; + lodash.isArguments = isArguments; lodash.isArray = isArray; lodash.isBoolean = isBoolean; lodash.isDate = isDate; diff --git a/lodash.underscore.min.js b/lodash.underscore.min.js index 7add88f33..401206184 100644 --- a/lodash.underscore.min.js +++ b/lodash.underscore.min.js @@ -4,30 +4,30 @@ * Build: `lodash underscore -m -o ./lodash.underscore.min.js` * Underscore.js 1.4.3 underscorejs.org/LICENSE */ -;(function(n,t){function r(n,t){var r;if(n&&St[typeof n])for(r in t||(t=P),n)if(t(n[r],r,n)===W)break}function e(n,t,r){if(n){t=t&&typeof r=="undefined"?t:i(t,r);var e=n.length;if(r=-1,typeof e=="number")for(;++rt||typeof n=="undefined")return 1;if(nr?0:r);++eo&&(o=f)}}else t=i(t,r),e(n,function(n,r,e){r=t(n,r,e),r>u&&(u=r,o=n)});return o}function F(n,t){return k(n,t+"")}function R(n,t,r,u){var o=3>arguments.length;if(t=i(t,u,W),Nt(n)){var a=-1,f=n.length;for(o&&(r=n[++a]);++aarguments.length; -if(typeof u!="number")var a=Ft(n),u=a.length;return t=i(t,e,W),S(n,function(e,i,f){i=a?a[--u]:--u,r=o?(o=H,n[i]):t(r,n[i],i,f)}),r}function q(n,t,r){var u;if(t=i(t,r),Nt(n)){r=-1;for(var o=n.length;++rr?gt(0,u+r):r||0)-1;else if(r)return e=I(n,t),n[e]===t?e:-1;for(;++e>>1,r(n[e])M(f,c))&&(r&&f.push(c),a.push(e))}return a}function C(n,t){var r;if(xt||ct&&2"']/g,rt=/['\n\r\t\u2028\u2029\\]/g,et=Math.ceil,ut=L.concat,ot=Math.floor,it=K.hasOwnProperty,at=L.push,ft=K.toString,ct=Z.test(ct=l.bind)&&ct,lt=Z.test(lt=Array.isArray)&<,pt=n.isFinite,st=n.isNaN,vt=Z.test(vt=Object.keys)&&vt,gt=Math.max,ht=Math.min,yt=Math.random,mt="[object Array]",_t="[object Boolean]",dt="[object Date]",bt="[object Number]",jt="[object Object]",wt="[object RegExp]",At="[object String]",K=!!n.attachEvent,K=ct&&!/\n|true/.test(ct+K),xt=ct&&!K,Et=(Et={0:1,length:1},L.splice.call(Et,0,1),Et[0]),Ot=arguments.constructor==Object,St={"boolean":H,"function":V,object:V,number:H,string:H,undefined:H},kt={"\\":"\\","'":"'","\n":"n","\r":"r"," ":"t","\u2028":"u2028","\u2029":"u2029"}; -u.templateSettings={escape:/<%-([\s\S]+?)%>/g,evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,variable:""},u.isArguments=function(n){return"[object Arguments]"==ft.call(n)},u.isArguments(arguments)||(u.isArguments=function(n){return n?it.call(n,"callee"):H});var Nt=lt||function(n){return Ot&&n instanceof Array||ft.call(n)==mt},Ft=vt?function(n){return d(n)?vt(n):[]}:s,Rt={"&":"&","<":"<",">":">",'"':""","'":"'"},Tt=y(Rt);_(/x/)&&(_=function(n){return n instanceof Function||"[object Function]"==ft.call(n) -}),u.after=function(n,t){return 1>n?t():function(){return 1>--n?t.apply(this,arguments):void 0}},u.bind=C,u.bindAll=function(n){for(var t=ut.apply(L,arguments),r=1M(e,o,r)&&u.push(o)}return u},u.filter=E,u.flatten=D,u.forEach=S,u.functions=h,u.groupBy=function(n,t,r){var e={};return t=i(t,r),S(n,function(n,r,u){r=t(n,r,u)+"",(it.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=="function"){var o=u;for(t=i(t,r);o--&&t(n[o],o,n);)e++}else e=t==G||r?1:t||e;return l(n,0,ht(gt(0,u-e),u))},u.intersection=function(n){var t=arguments,r=t.length,e=-1,u=n?n.length:0,o=[];n:for(;++eM(o,i)){for(var a=r;--a;)if(0>M(t[a],i))continue n; -o.push(i)}}return o},u.invert=y,u.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 S(n,function(n){i[++e]=(u?t:n[t]).apply(n,r)}),i},u.keys=Ft,u.map=k,u.max=N,u.memoize=function(n,t){var r={};return function(){var e=(t?t.apply(this,arguments):arguments[0])+"";return it.call(r,e)?r[e]:r[e]=n.apply(this,arguments)}},u.min=function(n,t,r){var u=1/0,o=u;if(!t&&Nt(n)){r=-1;for(var a=n.length;++rM(t,r,1)&&(e[r]=n)}),e},u.once=function(n){var t,r;return function(){return t?r:(t=V,r=n.apply(this,arguments),n=G,r)}},u.pairs=function(n){for(var t=-1,r=Ft(n),e=r.length,u=Array(e);++tM(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?N(F(arguments,"length")):0,e=Array(r);++tr?gt(0,e+r):ht(r,e-1))+1);e--;)if(n[e]===t)return e;return-1},u.mixin=U,u.noConflict=function(){return n._=X,this},u.random=function(n,t){return n==G&&t==G&&(t=1),n=+n||0,t==G&&(t=n,n=0),n+ot(yt()*((+t||0)-n+1)) -},u.reduce=R,u.reduceRight=T,u.result=function(n,t){var r=n?n[t]:G;return _(r)?n[t]():r},u.size=function(n){var t=n?n.length:0;return typeof t=="number"?t:Ft(n).length},u.some=q,u.sortedIndex=I,u.template=function(n,t,r){n||(n=""),r=g({},r,u.templateSettings);var e=0,o="__p+='",i=r.variable;n.replace(RegExp((r.escape||nt).source+"|"+(r.interpolate||nt).source+"|"+(r.evaluate||nt).source+"|$","g"),function(t,r,u,i,f){return o+=n.slice(e,f).replace(rt,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==G?"":(n+"").replace(Y,p)},u.uniqueId=function(n){var t=++Q+"";return n?n+t:t},u.all=x,u.any=q,u.detect=O,u.foldl=R,u.foldr=T,u.include=A,u.inject=R,u.first=B,u.last=function(n,t,r){if(n){var e=0,u=n.length; -if(typeof t=="function"){var o=u;for(t=i(t,r);o--&&t(n[o],o,n);)e++}else if(e=t,e==G||r)return n[u-1];return l(n,gt(0,u-e))}},u.take=B,u.head=B,u.chain=function(n){return n=new u(n),n.__chain__=V,n},u.VERSION="1.0.0-rc.3",U(u),u.prototype.chain=function(){return this.__chain__=V,this},u.prototype.value=function(){return this.__wrapped__},e("pop push reverse shift sort splice unshift".split(" "),function(n){var t=L[n];u.prototype[n]=function(){var n=this.__wrapped__;return t.apply(n,arguments),Et&&0===n.length&&delete n[0],this -}}),e(["concat","join","slice"],function(n){var t=L[n];u.prototype[n]=function(){var n=t.apply(this.__wrapped__,arguments);return this.__chain__&&(n=new u(n),n.__chain__=V),n}}),J?typeof module=="object"&&module&&module.exports==J?(module.exports=u)._=u:J._=u:n._=u})(this); \ No newline at end of file +;(function(n,t){function r(n,t){var r;if(n&&Nt[typeof n])for(r in t||(t=U),n)if(t(n[r],r,n)===X)break}function e(n,t,r){if(n){t=t&&typeof r=="undefined"?t:i(t,r);var e=n.length;if(r=-1,typeof e=="number")for(;++rt||typeof n=="undefined")return 1;if(nr?0:r);++eo&&(o=f)}}else t=i(t,r),e(n,function(n,r,e){r=t(n,r,e),r>u&&(u=r,o=n)});return o}function R(n,t){return N(n,t+"")}function T(n,t,r,u){var o=3>arguments.length;if(t=i(t,u,X),Rt(n)){var a=-1,f=n.length;for(o&&(r=n[++a]);++aarguments.length; +if(typeof u!="number")var a=Tt(n),u=a.length;return t=i(t,e,X),k(n,function(e,i,f){i=a?a[--u]:--u,r=o?(o=J,n[i]):t(r,n[i],i,f)}),r}function B(n,t,r){var u;if(t=i(t,r),Rt(n)){r=-1;for(var o=n.length;++rr?ht(0,u+r):r||0)-1;else if(r)return e=z(n,t),n[e]===t?e:-1;for(;++e>>1,r(n[e])$(f,c))&&(r&&f.push(c),a.push(e))}return a}function P(n,t){var r;if(Ot||lt&&2"']/g,et=/['\n\r\t\u2028\u2029\\]/g,ut=Math.ceil,ot=Q.concat,it=Math.floor,at=L.hasOwnProperty,ft=Q.push,ct=L.toString,lt=nt.test(lt=l.bind)&<,pt=nt.test(pt=Array.isArray)&&pt,st=n.isFinite,vt=n.isNaN,gt=nt.test(gt=Object.keys)&>,ht=Math.max,yt=Math.min,_t=Math.random,mt="[object Arguments]",dt="[object Array]",bt="[object Boolean]",jt="[object Date]",wt="[object Number]",xt="[object Object]",At="[object RegExp]",Et="[object String]",L=!!n.attachEvent,L=lt&&!/\n|true/.test(lt+L),Ot=lt&&!L,St=(St={0:1,length:1},Q.splice.call(St,0,1),St[0]),kt=arguments.constructor==Object,Nt={"boolean":J,"function":G,object:G,number:J,string:J,undefined:J},Ft={"\\":"\\","'":"'","\n":"n","\r":"r"," ":"t","\u2028":"u2028","\u2029":"u2029"}; +u.templateSettings={escape:/<%-([\s\S]+?)%>/g,evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,variable:""},s(arguments)||(s=function(n){return n?at.call(n,"callee"):J});var Rt=pt||function(n){return kt&&n instanceof Array||ct.call(n)==dt},Tt=gt?function(n){return b(n)?gt(n):[]}:v,qt={"&":"&","<":"<",">":">",'"':""","'":"'"},Bt=_(qt);d(/x/)&&(d=function(n){return n instanceof Function||"[object Function]"==ct.call(n)}),u.after=function(n,t){return 1>n?t():function(){return 1>--n?t.apply(this,arguments):void 0 +}},u.bind=P,u.bindAll=function(n){for(var t=ot.apply(Q,arguments),r=1$(e,o,r)&&u.push(o)}return u},u.filter=O,u.flatten=M,u.forEach=k,u.functions=y,u.groupBy=function(n,t,r){var e={}; +return t=i(t,r),k(n,function(n,r,u){r=t(n,r,u)+"",(at.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=="function"){var o=u;for(t=i(t,r);o--&&t(n[o],o,n);)e++}else e=t==H||r?1:t||e;return l(n,0,yt(ht(0,u-e),u))},u.intersection=function(n){var t=arguments,r=t.length,e=-1,u=n?n.length:0,o=[];n:for(;++e$(o,i)){for(var a=r;--a;)if(0>$(t[a],i))continue n;o.push(i)}}return o},u.invert=_,u.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},u.keys=Tt,u.map=N,u.max=F,u.memoize=function(n,t){var r={};return function(){var e=(t?t.apply(this,arguments):arguments[0])+"";return at.call(r,e)?r[e]:r[e]=n.apply(this,arguments)}},u.min=function(n,t,r){var u=1/0,o=u;if(!t&&Rt(n)){r=-1;for(var a=n.length;++r$(t,r,1)&&(e[r]=n)}),e},u.once=function(n){var t,r;return function(){return t?r:(t=G,r=n.apply(this,arguments),n=H,r)}},u.pairs=function(n){for(var t=-1,r=Tt(n),e=r.length,u=Array(e);++t$(arguments,u,1)&&e.push(u)}return e},u.wrap=function(n,t){return function(){var r=[n];return ft.apply(r,arguments),t.apply(this,r)}},u.zip=function(n){for(var t=-1,r=n?F(R(arguments,"length")):0,e=Array(r);++tr?ht(0,e+r):yt(r,e-1))+1);e--;)if(n[e]===t)return e;return-1},u.mixin=V,u.noConflict=function(){return n._=Y,this},u.random=function(n,t){return n==H&&t==H&&(t=1),n=+n||0,t==H&&(t=n,n=0),n+it(_t()*((+t||0)-n+1))},u.reduce=T,u.reduceRight=q,u.result=function(n,t){var r=n?n[t]:H; +return d(r)?n[t]():r},u.size=function(n){var t=n?n.length:0;return typeof t=="number"?t:Tt(n).length},u.some=B,u.sortedIndex=z,u.template=function(n,t,r){n||(n=""),r=h({},r,u.templateSettings);var e=0,o="__p+='",i=r.variable;n.replace(RegExp((r.escape||tt).source+"|"+(r.interpolate||tt).source+"|"+(r.evaluate||tt).source+"|$","g"),function(t,r,u,i,f){return o+=n.slice(e,f).replace(et,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==H?"":(n+"").replace(Z,p)},u.uniqueId=function(n){var t=++W+"";return n?n+t:t},u.all=E,u.any=B,u.detect=S,u.foldl=T,u.foldr=q,u.include=A,u.inject=T,u.first=D,u.last=function(n,t,r){if(n){var e=0,u=n.length; +if(typeof t=="function"){var o=u;for(t=i(t,r);o--&&t(n[o],o,n);)e++}else if(e=t,e==H||r)return n[u-1];return l(n,ht(0,u-e))}},u.take=D,u.head=D,u.chain=function(n){return n=new u(n),n.__chain__=G,n},u.VERSION="1.0.0-rc.3",V(u),u.prototype.chain=function(){return this.__chain__=G,this},u.prototype.value=function(){return this.__wrapped__},e("pop push reverse shift sort splice unshift".split(" "),function(n){var t=Q[n];u.prototype[n]=function(){var n=this.__wrapped__;return t.apply(n,arguments),St&&0===n.length&&delete n[0],this +}}),e(["concat","join","slice"],function(n){var t=Q[n];u.prototype[n]=function(){var n=t.apply(this.__wrapped__,arguments);return this.__chain__&&(n=new u(n),n.__chain__=G),n}}),K?typeof module=="object"&&module&&module.exports==K?(module.exports=u)._=u:K._=u:n._=u})(this); \ No newline at end of file