diff --git a/build/post-compile.js b/build/post-compile.js index e59442391..0ff394d24 100644 --- a/build/post-compile.js +++ b/build/post-compile.js @@ -2,8 +2,9 @@ ;(function() { 'use strict'; - /** The Node.js filesystem module */ - var fs = require('fs'); + /** Load Node.js modules */ + var fs = require('fs'), + vm = require('vm'); /** The minimal license/copyright template */ var licenseTemplate = [ @@ -24,9 +25,6 @@ * @returns {String} Returns the processed source. */ function postprocess(source) { - // remove copyright header - source = source.replace(/^\/\**[\s\S]+?\*\/\n/, ''); - // correct overly aggressive Closure Compiler advanced optimization source = source .replace(/(document[^&]+&&)\s*(?:\w+|!\d)/, '$1!({toString:0}+"")') @@ -37,15 +35,23 @@ '\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000"' ); - // replace vars for `false` and `true` with boolean literals - [/(\w+)\s*=\s*!1\b/, /(\w+)\s*=\s*!0\b/].forEach(function(regexp, index) { - var varName = (regexp.exec(source) || 0)[1]; - if (varName) { - source = source.replace(RegExp('([!=]==\\s*)' + varName + '\\b|\\b' + varName + '(\\s*[!=]==)', 'g'), function(match, prelude, postlude, at) { + try { + var context = vm.createContext({}); + vm.runInContext(source, context); + } catch(e) { } + + ['forEach', 'forIn', 'forOwn'].forEach(function(methodName) { + var pairs = /[!=]==\s*([a-zA-Z]+)(?!\()|([a-zA-Z]+)\s*[!=]==/.exec((context._ || {})[methodName]), + varName = pairs && (pairs[1] || pairs[2]), + value = (value = varName && RegExp('\\b' + varName + '\\s*=\\s*!([01])\\b').exec(source)) && !+value[1]; + + if (typeof value == 'boolean') { + // replace vars for `false` and `true` with boolean literals + source = source.replace(RegExp('([!=]==\\s*)' + varName + '\\b(?!\\()|\\b' + varName + '(\\s*[!=]==)', 'g'), function(match, prelude, postlude, at) { // avoid replacing local variables with the same name return RegExp('\\b' + varName + '\\s*(?:,|=[^=])').test(source.slice(at - 10, at)) ? match - : (prelude || '') + !!index + (postlude || ''); + : (prelude || '') + value + (postlude || ''); }); } }); @@ -78,6 +84,9 @@ if (!snippet) { return source; } + // remove copyright header + source = source.replace(/^\/\**[\s\S]+?\*\/\n/, ''); + // add new copyright header var version = snippet[2]; source = licenseTemplate.replace('<%= VERSION %>', version) + '\n;' + source; diff --git a/dist/lodash.compat.min.js b/dist/lodash.compat.min.js index ea31278f3..16ece43dc 100644 --- a/dist/lodash.compat.min.js +++ b/dist/lodash.compat.min.js @@ -9,12 +9,12 @@ if(s){for(;++ik;k++)e+="m='"+t.g[k]+"';if((!(p&&v[m])&&l.call(r,m))",t.i||(e+="||(!v[m]&&r[m]!==y[m])"),e+="){"+t.f+"}"; e+="}"}return(t.b||xr.nonEnumArgs)&&(e+="}"),e+=t.c+";return C",n("i,j,l,n,o,q,t,u,y,z,w,G,H,J",r+e+"}")(I,Ut,ur,et,Ar,pt,Br,a,Vt,q,kr,F,Qt,lr)}function M(n){return lt(n)?pr(n):{}}function U(n){return Pr[n]}function V(n){return"\\"+D[n]}function Q(){var n=(n=a.indexOf)==Ot?T:n;return n}function W(n){return typeof n.toString!="function"&&typeof(n+"")=="string"}function X(n){this.__wrapped__=n}function Y(){}function Z(n){return function(t,e,u,o){return typeof e!="boolean"&&null!=e&&(o=u,u=o&&o[e]===t?r:e,e=!1),null!=u&&(u=a.createCallback(u,o)),n(t,e,u,o) -}}function nt(n){var t,e;return!n||lr.call(n)!=P||(t=n.constructor,ct(t)&&!(t instanceof t))||!xr.argsClass&&et(n)||!xr.nodeClass&&W(n)?!1:xr.ownLast?(qr(n,function(n,t,r){return e=ur.call(r,t),!1}),!1):(qr(n,function(n,t){e=t}),false===r||ur.call(n,e))}function tt(n,t,r){t||(t=0),typeof r=="undefined"&&(r=n?n.length:0);var e=-1;r=r-t||0;for(var u=$t(0>r?0:r);++er?0:r);++er?yr(0,a+r):r)||0,a&&typeof a=="number"?o=-1<(pt(n)?n.indexOf(t,r):u(n,t,r)):Nr(n,function(n){return++eu&&(u=i)}}else t=!t&&pt(n)?L:a.createCallback(t,r),Nr(n,function(n,r,a){r=t(n,r,a),r>e&&(e=r,u=n)});return u}function Ct(n,t,r,e){var u=3>arguments.length;if(t=a.createCallback(t,e,4),Ar(n)){var o=-1,i=n.length;for(u&&(r=n[++o]);++or?yr(0,e+r):mr(r,e-1))+1);e--;)if(n[e]===false)return e;return-1},a.mixin=zt,a.noConflict=function(){return e._=Wt,this},a.parseInt=Hr,a.random=function(n,t){null==n&&null==t&&(t=1),n=+n||0,null==t?(t=n,n=0):t=+t||0;var r=br();return n%1||t%1?n+mr(r*(t-n+parseFloat("1e-"+((r+"").length-1))),t):n+tr(r*(t-n+1))},a.reduce=Ct,a.reduceRight=jt,a.result=function(n,t){var e=n?n[t]:r;return ct(e)?n[t]():e},a.runInContext=t,a.size=function(n){var t=n?n.length:0; -return typeof t=="number"?t:Br(n).length},a.some=wt,a.sortedIndex=St,a.template=function(n,t,e){var u=a.templateSettings;n||(n=""),e=$r({},e,u);var o,i=$r({},e.imports,u.imports),u=Br(i),i=gt(i),c=0,l=e.interpolate||_,g="__p+='",l=Ht((e.escape||_).source+"|"+l.source+"|"+(true===y?v:_).source+"|"+(e.evaluate||_).source+"|$","g");n.replace(l,function(t,r,e,u,a,i){return e||(e=u),g+=n.slice(c,i).replace(j,V),r&&(g+="'+__e("+r+")+'"),a&&(o=!0,g+="';"+a+";__p+='"),e&&(g+="'+((__t=("+e+"))==null?'':__t)+'"),c=i+t.length,t +},a.lastIndexOf=function(n,t,r){var e=n?n.length:0;for(typeof r=="number"&&(e=(0>r?yr(0,e+r):mr(r,e-1))+1);e--;)if(n[e]===t)return e;return-1},a.mixin=zt,a.noConflict=function(){return e._=Wt,this},a.parseInt=Hr,a.random=function(n,t){null==n&&null==t&&(t=1),n=+n||0,null==t?(t=n,n=0):t=+t||0;var r=br();return n%1||t%1?n+mr(r*(t-n+parseFloat("1e-"+((r+"").length-1))),t):n+tr(r*(t-n+1))},a.reduce=Ct,a.reduceRight=jt,a.result=function(n,t){var e=n?n[t]:r;return ct(e)?n[t]():e},a.runInContext=t,a.size=function(n){var t=n?n.length:0; +return typeof t=="number"?t:Br(n).length},a.some=wt,a.sortedIndex=St,a.template=function(n,t,e){var u=a.templateSettings;n||(n=""),e=$r({},e,u);var o,i=$r({},e.imports,u.imports),u=Br(i),i=gt(i),c=0,l=e.interpolate||_,g="__p+='",l=Ht((e.escape||_).source+"|"+l.source+"|"+(l===y?v:_).source+"|"+(e.evaluate||_).source+"|$","g");n.replace(l,function(t,r,e,u,a,i){return e||(e=u),g+=n.slice(c,i).replace(j,V),r&&(g+="'+__e("+r+")+'"),a&&(o=!0,g+="';"+a+";__p+='"),e&&(g+="'+((__t=("+e+"))==null?'':__t)+'"),c=i+t.length,t }),g+="';\n",l=e=e.variable,l||(e="obj",g="with("+e+"){"+g+"}"),g=(o?g.replace(f,""):g).replace(p,"$1").replace(s,"$1;"),g="function("+e+"){"+(l?"":e+"||("+e+"={});")+"var __t,__p='',__e=_.escape"+(o?",__j=Array.prototype.join;function print(){__p+=__j.call(arguments,'')}":";")+g+"return __p}";try{var h=Rt(u,"return "+g).apply(r,i)}catch(m){throw m.source=g,m}return t?h(t):(h.source=g,h)},a.unescape=function(n){return null==n?"":Jt(n).replace(g,rt)},a.uniqueId=function(n){var t=++o;return Jt(null==n?"":n)+t },a.all=ht,a.any=wt,a.detect=mt,a.foldl=Ct,a.foldr=jt,a.include=vt,a.inject=Ct,Dr(a,function(n,t){a.prototype[t]||(a.prototype[t]=function(){var t=[this.__wrapped__];return ar.apply(t,arguments),n.apply(a,t)})}),a.first=xt,a.last=function(n,t,r){if(n){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 if(e=t,null==e||r)return n[u-1];return tt(n,yr(0,u-e))}},a.take=xt,a.head=xt,Dr(a,function(n,t){a.prototype[t]||(a.prototype[t]=function(t,r){var e=n(this.__wrapped__,t,r); return null==t||r&&typeof t!="function"?e:new X(e)})}),a.VERSION="1.2.1",a.prototype.toString=function(){return Jt(this.__wrapped__)},a.prototype.value=Ft,a.prototype.valueOf=Ft,Nr(["join","pop","shift"],function(n){var t=Mt[n];a.prototype[n]=function(){return t.apply(this.__wrapped__,arguments)}}),Nr(["push","reverse","sort","unshift"],function(n){var t=Mt[n];a.prototype[n]=function(){return t.apply(this.__wrapped__,arguments),this}}),Nr(["concat","slice","splice"],function(n){var t=Mt[n];a.prototype[n]=function(){return new X(t.apply(this.__wrapped__,arguments)) diff --git a/dist/lodash.js b/dist/lodash.js index fd4c3b4c3..2cf66ece0 100644 --- a/dist/lodash.js +++ b/dist/lodash.js @@ -2059,9 +2059,9 @@ } /** - * Transforms an `object` to an new `accumulator` object which is the result + * Transforms an `object` to a new `accumulator` object which is the result * of running each of its elements through the `callback`, with each `callback` - * execution potentially mutating the `accumulator` object. The `callback`is + * execution potentially mutating the `accumulator` object. The `callback` is * bound to `thisArg` and invoked with four arguments; (accumulator, value, key, object). * Callbacks may exit iteration early by explicitly returning `false`. * diff --git a/dist/lodash.min.js b/dist/lodash.min.js index 4d677a540..f4ff99db4 100644 --- a/dist/lodash.min.js +++ b/dist/lodash.min.js @@ -26,7 +26,7 @@ je[S]=Dt,je[I]=zt,je[N]=Pt,je[A]=Kt,je[B]=Vt,je[$]=Ut,je[F]=Gt,je[R]=Ht;var we=G }return a}),Ie=tt(function(n,t,e){for(var r=-1,u=Z(),a=n?n.length:0,o=!t&&a>=s,i=[],f=o?W():e?[]:i;++rn?t():function(){return 1>--n?t.apply(this,arguments):void 0}},G.assign=U,G.at=function(n){for(var t=-1,e=ne.apply(Lt,de.call(arguments,1)),r=e.length,u=Dt(r);++t++l&&(f=n.apply(c,i)),p=ie(o,t),f}},G.defaults=M,G.defer=Ft,G.delay=function(n,t){var r=de.call(arguments,2);return ie(function(){n.apply(e,r)},t)},G.difference=Ot,G.filter=bt,G.flatten=Se,G.forEach=dt,G.forIn=K,G.forOwn=P,G.functions=ot,G.groupBy=function(n,t,e){var r={};return t=G.createCallback(t,e),dt(n,function(n,e,u){e=Ht(t(n,e,u)),(ue.call(r,e)?r[e]:r[e]=[]).push(n) +l=p=0,t&&(f=n.apply(c,i))}var i,f,c,l=0,p=u,s=r;if(e===r)var v=r,s=a;else lt(e)&&(v=e.leading,s="trailing"in e?e.trailing:s);return function(){return i=arguments,c=this,Zt(p),v&&2>++l&&(f=n.apply(c,i)),p=ie(o,t),f}},G.defaults=M,G.defer=Ft,G.delay=function(n,t){var r=de.call(arguments,2);return ie(function(){n.apply(e,r)},t)},G.difference=Ot,G.filter=bt,G.flatten=Se,G.forEach=dt,G.forIn=K,G.forOwn=P,G.functions=ot,G.groupBy=function(n,t,e){var r={};return t=G.createCallback(t,e),dt(n,function(n,e,u){e=Ht(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 rt(n,0,he(ye(0,a-r),a))},G.intersection=function(n){var t=arguments,e=t.length,r=W(),u={},a=-1,o=n?n.length:0,i=[];n:for(;++ar(o,e))&&(a[e]=n)}),a},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=xe(n),r=e.length,u=Dt(r);++te?ye(0,r+e):he(e,r-1))+1);r--;)if(n[r]===t)return r;return-1},G.mixin=Tt,G.noConflict=function(){return o._=Wt,this},G.parseInt=Ne,G.random=function(n,t){n==u&&t==u&&(t=1),n=+n||0,t==u?(t=n,n=0):t=+t||0;var e=me();return n%1||t%1?n+he(e*(t-n+parseFloat("1e-"+((e+"").length-1))),t):n+te(e*(t-n+1))},G.reduce=wt,G.reduceRight=Ct,G.result=function(n,t){var r=n?n[t]:e;return ct(r)?n[t]():r},G.runInContext=t,G.size=function(n){var t=n?n.length:0;return typeof t=="number"?t:xe(n).length },G.some=xt,G.sortedIndex=Nt,G.template=function(n,t,u){var a=G.templateSettings;n||(n=""),u=M({},u,a);var o,i=M({},u.imports,a.imports),a=xe(i),i=gt(i),f=0,c=u.interpolate||w,l="__p+='",c=Gt((u.escape||w).source+"|"+c.source+"|"+(c===d?b:w).source+"|"+(u.evaluate||w).source+"|$","g");n.replace(c,function(t,e,u,a,i,c){return u||(u=a),l+=n.slice(f,c).replace(x,Y),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(v,""):l).replace(g,"$1").replace(y,"$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}";