zone.js
Version:
Zones for JavaScript
1 lines • 3.05 kB
JavaScript
!function(r,t){"object"==typeof exports&&"undefined"!=typeof module?t():"function"==typeof define&&define.amd?define(t):t()}(this,function(){"use strict";Zone.__load_patch("Error",function(r,t,e){function n(){var r=this,t=o.apply(this,arguments),i=t.originalStack=t.stack;if(n[f]&&i){for(var s=i.split("\n"),k=e.currentZoneFrame(),p=0;s[p]!==a&&s[p]!==c&&p<s.length;)p++;for(;p<s.length&&k;p++){var l=s[p];if(l.trim())switch(u[l]){case 0:s.splice(p,1),p--;break;case 1:k=k.parent?k.parent:null,s.splice(p,1),p--;break;default:s[p]+=" ["+k.zone.name+"]"}}try{t.stack=t.zoneAwareStack=s.join("\n")}catch(d){}}return this instanceof o&&this.constructor!=o?(Object.keys(t).concat("stack","message").forEach(function(e){var n=t[e];if(void 0!==n)try{r[e]=n}catch(a){}}),this):t}var a,c,i=e.symbol("blacklistedStackFrames"),o=r[e.symbol("Error")]=r.Error,u={};r.Error=n;var f="stackRewrite";n.prototype=o.prototype,n[i]=u,n[f]=!1;var s=["stackTraceLimit","captureStackTrace","prepareStackTrace"],k=Object.keys(o);k&&k.forEach(function(r){0===s.filter(function(t){return t===r}).length&&Object.defineProperty(n,r,{get:function(){return o[r]},set:function(t){o[r]=t}})}),o.hasOwnProperty("stackTraceLimit")&&(o.stackTraceLimit=Math.max(o.stackTraceLimit,15),Object.defineProperty(n,"stackTraceLimit",{get:function(){return o.stackTraceLimit},set:function(r){return o.stackTraceLimit=r}})),o.hasOwnProperty("captureStackTrace")&&Object.defineProperty(n,"captureStackTrace",{value:function(r,t){o.captureStackTrace(r,t)}});var p="zoneCaptureStackTrace";Object.defineProperty(n,"prepareStackTrace",{get:function(){return o.prepareStackTrace},set:function(r){return r&&"function"==typeof r?o.prepareStackTrace=function(t,e){if(e)for(var n=0;n<e.length;n++){var a=e[n];if(a.getFunctionName()===p){e.splice(n,1);break}}return r.apply(this,[t,e])}:o.prepareStackTrace=r}});var l="ZoneAwareError",d="Error.",T="",h="runGuarded",v="runTask",m="run",y="(",S="@",b=t.current.fork({name:"detect",onHandleError:function(r,t,e,i){if(i.originalStack&&Error===n)for(var o=i.originalStack.split(/\n/),s=!1,k=!1,p=!1;o.length;){var b=o.shift();if(/:\d+:\d+/.test(b)){var E=b.split(y)[0].split(S)[0],g=1;if(E.indexOf(l)!==-1&&(a=b,c=b.replace(d,T),u[c]=0),E.indexOf(h)!==-1?k=!0:E.indexOf(v)!==-1?p=!0:E.indexOf(m)!==-1?s=!0:g=0,u[b]=g,s&&k&&p){n[f]=!0;break}}}return!1}}),E=b.fork({name:"child",onScheduleTask:function(r,t,e,n){return r.scheduleTask(e,n)},onInvokeTask:function(r,t,e,n,a,c){return r.invokeTask(e,n,a,c)},onCancelTask:function(r,t,e,n){return r.cancelTask(e,n)},onInvoke:function(r,t,e,n,a,c,i){return r.invoke(e,n,a,c,i)}}),g=Error.stackTraceLimit;Error.stackTraceLimit=100,E.run(function(){E.runGuarded(function(){var r=function(r,t,e){};E.scheduleEventTask(i,function(){E.scheduleMacroTask(i,function(){E.scheduleMicroTask(i,function(){throw new n(n,o)},null,function(t){t._transitionTo=r,t.invoke()})},null,function(t){t._transitionTo=r,t.invoke()},function(){})},null,function(t){t._transitionTo=r,t.invoke()},function(){})})}),Error.stackTraceLimit=g})});