Socket
Socket
Sign inDemoInstall

raven-js

Package Overview
Dependencies
Maintainers
3
Versions
87
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

raven-js - npm Package Compare versions

Comparing version 2.0.5 to 2.1.0

.eslintrc

2

bower.json
{
"name": "raven-js",
"version": "2.0.5",
"version": "2.1.0",
"dependencies": {},

@@ -5,0 +5,0 @@ "main": "dist/raven.js",

# Changelog
## 2.1.0
* BUGFIX: Fixed Raven.js rejecting frames w/ blob URLs. See: https://github.com/getsentry/raven-js/issues/463
* BUGFIX: Fixed plugin files not consumable without module loader. See: https://github.com/getsentry/raven-js/issues/446
* BUGFIX: Fixed bug in console.js plugin where `level` wasn't passed. See: https://github.com/getsentry/raven-js/pull/474
* BUGFIX: Fixed broken debug logging in IE9 and below. See: https://github.com/getsentry/raven-js/pull/473
* BUGFIX: Fixed `XMLHttpRequest` wrapper not capturing all event handlers. See: https://github.com/getsentry/raven-js/issues/453
* CHANGE: `Raven.uninstall` now restores original builtin functions (e.g. setTimeout). See: https://github.com/getsentry/raven-js/issues/228
* CHANGE: `maxMessageLength` now defaults to 0 (no limit). See: https://github.com/getsentry/raven-js/pull/441
* NEW: New `stackTraceLimit` config option (default 50 in supported browsers). See: https://github.com/getsentry/raven-js/pull/419/files
* NEW: `Raven.showReportDialog` (experimental). See: https://github.com/getsentry/raven-js/pull/456
## 2.0.5
* BUGFIX: Fixed exception thrown by React Native plugin. See: https://github.com/getsentry/raven-js/issues/468
* BUGFIX: Fixed "pre-built JavaScript" warning when loading Raven.js via Webpack: https://github.com/getsentry/raven-js/issues/465
* BUGFIX: Fixed "pre-built JavaScript" warning when loading Raven.js via Webpack. See: https://github.com/getsentry/raven-js/issues/465

@@ -7,0 +18,0 @@ ## 2.0.4

@@ -1,2 +0,3 @@

!function(a){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=a();else if("function"==typeof define&&define.amd)define([],a);else{var b;b="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,b.Raven=a()}}(function(){return function a(b,c,d){function e(g,h){if(!c[g]){if(!b[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);var j=new Error("Cannot find module '"+g+"'");throw j.code="MODULE_NOT_FOUND",j}var k=c[g]={exports:{}};b[g][0].call(k.exports,function(a){var c=b[g][1][a];return e(c?c:a)},k,k.exports,a,b,c,d)}return c[g].exports}for(var f="function"==typeof require&&require,g=0;g<d.length;g++)e(d[g]);return e}({1:[function(a,b,c){"use strict";function d(a){this.name="RavenConfigError",this.message=a}d.prototype=new Error,d.prototype.constructor=d,b.exports=d},{}],2:[function(a,b,c){"use strict";function d(){return+new Date}function e(){this._hasJSON=!("object"!=typeof JSON||!JSON.stringify),this._hasDocument="undefined"!=typeof document,this._lastCapturedException=null,this._lastEventId=null,this._globalServer=null,this._globalKey=null,this._globalProject=null,this._globalContext={},this._globalOptions={logger:"javascript",ignoreErrors:[],ignoreUrls:[],whitelistUrls:[],includePaths:[],crossOrigin:"anonymous",collectWindowErrors:!0,maxMessageLength:100},this._ignoreOnError=0,this._isRavenInstalled=!1,this._originalConsole=window.console||{},this._originalConsoleMethods={},this._plugins=[],this._startTime=d();for(var a in this._originalConsole)this._originalConsoleMethods[a]=this._originalConsole[a]}var f=a("../vendor/TraceKit/tracekit"),g=a("./configError"),h=a("./utils"),i=h.isFunction,j=h.isUndefined,k=h.isError,l=h.isEmptyObject,m=h.hasKey,n=h.joinRegExp,o=h.each,p=h.objectMerge,q=h.truncate,r=h.urlencode,s=h.uuid4,t="source protocol user pass host port path".split(" "),u=/^(?:(\w+):)?\/\/(?:(\w+)(:\w+)?@)?([\w\.-]+)(?::(\d+))?(\/.*)/;e.prototype={VERSION:"2.0.5",debug:!1,TraceKit:f,config:function(a,b){var c=this;if(this._globalServer)return this._logDebug("error","Error: Raven has already been configured"),this;if(!a)return this;var d=this._parseDSN(a),e=d.path.lastIndexOf("/"),g=d.path.substr(1,e);return b&&o(b,function(a,b){"tags"==a||"extra"==a?c._globalContext[a]=b:c._globalOptions[a]=b}),this._globalOptions.ignoreErrors.push(/^Script error\.?$/),this._globalOptions.ignoreErrors.push(/^Javascript error: Script error\.? on line 0$/),this._globalOptions.ignoreErrors=n(this._globalOptions.ignoreErrors),this._globalOptions.ignoreUrls=this._globalOptions.ignoreUrls.length?n(this._globalOptions.ignoreUrls):!1,this._globalOptions.whitelistUrls=this._globalOptions.whitelistUrls.length?n(this._globalOptions.whitelistUrls):!1,this._globalOptions.includePaths=n(this._globalOptions.includePaths),this._globalKey=d.user,this._globalProject=d.path.substr(e+1),this._globalServer="//"+d.host+(d.port?":"+d.port:"")+"/"+g+"api/"+this._globalProject+"/store/",d.protocol&&(this._globalServer=d.protocol+":"+this._globalServer),this._globalOptions.fetchContext&&(f.remoteFetching=!0),this._globalOptions.linesOfContext&&(f.linesOfContext=this._globalOptions.linesOfContext),f.collectWindowErrors=!!this._globalOptions.collectWindowErrors,this},install:function(){var a=this;return this.isSetup()&&!this._isRavenInstalled&&(f.report.subscribe(function(){a._ignoreOnError||a._handleStackInfo.apply(a,arguments)}),this._wrapBuiltIns(),this._drainPlugins(),this._isRavenInstalled=!0),this},context:function(a,b,c){return i(a)&&(c=b||[],b=a,a=void 0),this.wrap(a,b).apply(this,c)},wrap:function(a,b){function c(){for(var c=[],e=arguments.length,f=!a||a&&a.deep!==!1;e--;)c[e]=f?d.wrap(a,arguments[e]):arguments[e];try{return b.apply(this,c)}catch(g){throw d._ignoreNextOnError(),d.captureException(g,a),g}}var d=this;if(j(b)&&!i(a))return a;if(i(a)&&(b=a,a=void 0),!i(b))return b;if(b.__raven__)return b;if(b.__raven_wrapper__)return b.__raven_wrapper__;for(var e in b)m(b,e)&&(c[e]=b[e]);return b.__raven_wrapper__=c,c.prototype=b.prototype,c.__raven__=!0,c.__inner__=b,c},uninstall:function(){return f.report.uninstall(),this._isRavenInstalled=!1,this},captureException:function(a,b){if(!k(a))return this.captureMessage(a,b);this._lastCapturedException=a;try{var c=f.computeStackTrace(a);this._handleStackInfo(c,b)}catch(d){if(a!==d)throw d}return this},captureMessage:function(a,b){return this._globalOptions.ignoreErrors.test&&this._globalOptions.ignoreErrors.test(a)?void 0:(this._send(p({message:a+""},b)),this)},addPlugin:function(a){var b=Array.prototype.slice.call(arguments,1);return this._plugins.push([a,b]),this._isRavenInstalled&&this._drainPlugins(),this},setUserContext:function(a){return this._globalContext.user=a,this},setExtraContext:function(a){return this._mergeContext("extra",a),this},setTagsContext:function(a){return this._mergeContext("tags",a),this},clearContext:function(){return this._globalContext={},this},getContext:function(){return JSON.parse(JSON.stringify(this._globalContext))},setRelease:function(a){return this._globalOptions.release=a,this},setDataCallback:function(a){return this._globalOptions.dataCallback=a,this},setShouldSendCallback:function(a){return this._globalOptions.shouldSendCallback=a,this},setTransport:function(a){return this._globalOptions.transport=a,this},lastException:function(){return this._lastCapturedException},lastEventId:function(){return this._lastEventId},isSetup:function(){return this._hasJSON?this._globalServer?!0:(this.ravenNotConfiguredError||this._logDebug("error","Error: Raven has not been configured."),this.ravenNotConfiguredError=!0,!1):!1},afterLoad:function(){var a=window.RavenConfig;a&&this.config(a.dsn,a.config).install()},_ignoreNextOnError:function(){var a=this;this._ignoreOnError+=1,setTimeout(function(){a._ignoreOnError-=1})},_triggerEvent:function(a,b){var c,d;if(this._hasDocument){b=b||{},a="raven"+a.substr(0,1).toUpperCase()+a.substr(1),document.createEvent?(c=document.createEvent("HTMLEvents"),c.initEvent(a,!0,!0)):(c=document.createEventObject(),c.eventType=a);for(d in b)m(b,d)&&(c[d]=b[d]);if(document.createEvent)document.dispatchEvent(c);else try{document.fireEvent("on"+c.eventType.toLowerCase(),c)}catch(e){}}},_wrapBuiltIns:function(){function a(a,b,c){var d=a[b];a[b]=c(d)}function b(a){return function(b,d){var e=[].slice.call(arguments),f=e[0];return"function"==typeof f&&(e[0]=c.wrap(f)),a.apply?a.apply(this,e):a(e[0],e[1])}}var c=this;a(window,"setTimeout",b),a(window,"setInterval",b),window.requestAnimationFrame&&a(window,"requestAnimationFrame",function(a){return function(b){return a(c.wrap(b))}}),"EventTarget Window Node ApplicationCache AudioTrackList ChannelMergerNode CryptoOperation EventSource FileReader HTMLUnknownElement IDBDatabase IDBRequest IDBTransaction KeyOperation MediaController MessagePort ModalWindow Notification SVGElementInstance Screen TextTrack TextTrackCue TextTrackList WebSocket WebSocketWorker Worker XMLHttpRequest XMLHttpRequestEventTarget XMLHttpRequestUpload".replace(/\w+/g,function(b){var d=window[b]&&window[b].prototype;d&&d.hasOwnProperty&&d.hasOwnProperty("addEventListener")&&(a(d,"addEventListener",function(a){return function(b,d,e,f){try{d&&d.handleEvent&&(d.handleEvent=c.wrap(d.handleEvent))}catch(g){}return a.call(this,b,c.wrap(d),e,f)}}),a(d,"removeEventListener",function(a){return function(b,c,d,e){return c=c&&(c.__raven_wrapper__?c.__raven_wrapper__:c),a.call(this,b,c,d,e)}}))});var d;"XMLHttpRequest"in window&&(d=XMLHttpRequest.prototype.open,XMLHttpRequest.prototype.open=function(b){var e=this;"onreadystatechange onload onerror onprogress".replace(/\w+/g,function(b){b in e&&"[object Function]"===Object.prototype.toString.call(e[b])&&a(e,b,function(a){return c.wrap(a)})}),d.apply(this,arguments)});var e,f=window.jQuery||window.$;f&&f.fn&&f.fn.ready&&(e=f.fn.ready,f.fn.ready=function(a){return e.call(this,c.wrap(a))})},_drainPlugins:function(){var a=this;o(this._plugins,function(b,c){var d=c[0],e=c[1];d.apply(a,[a].concat(e))})},_parseDSN:function(a){var b=u.exec(a),c={},d=7;try{for(;d--;)c[t[d]]=b[d]||""}catch(e){throw new g("Invalid DSN: "+a)}if(c.pass)throw new g("Do not specify your private key in the DSN!");return c},_handleStackInfo:function(a,b){var c=this,d=[];a.stack&&a.stack.length&&o(a.stack,function(a,b){var e=c._normalizeFrame(b);e&&d.push(e)}),this._triggerEvent("handle",{stackInfo:a,options:b}),this._processException(a.name,a.message,a.url,a.lineno,d,b)},_normalizeFrame:function(a){if(a.url){var b,c={filename:a.url,lineno:a.line,colno:a.column,"function":a.func||"?"},d=this._extractContextFromFrame(a);if(d){var e=["pre_context","context_line","post_context"];for(b=3;b--;)c[e[b]]=d[b]}return c.in_app=!(this._globalOptions.includePaths.test&&!this._globalOptions.includePaths.test(c.filename)||/(Raven|TraceKit)\./.test(c["function"])||/raven\.(min\.)?js$/.test(c.filename)),c}},_extractContextFromFrame:function(a){if(a.context&&this._globalOptions.fetchContext){for(var b=a.context,c=~~(b.length/2),d=b.length,e=!1;d--;)if(b[d].length>300){e=!0;break}if(e){if(j(a.column))return;return[[],b[c].substr(a.column,50),[]]}return[b.slice(0,c),b[c],b.slice(c+1)]}},_processException:function(a,b,c,d,e,f){var g,h;if((!this._globalOptions.ignoreErrors.test||!this._globalOptions.ignoreErrors.test(b))&&(b+="",b=q(b,this._globalOptions.maxMessageLength),h=a+": "+b,h=q(h,this._globalOptions.maxMessageLength),e&&e.length?(c=e[0].filename||c,e.reverse(),g={frames:e}):c&&(g={frames:[{filename:c,lineno:d,in_app:!0}]}),(!this._globalOptions.ignoreUrls.test||!this._globalOptions.ignoreUrls.test(c))&&(!this._globalOptions.whitelistUrls.test||this._globalOptions.whitelistUrls.test(c)))){var i=p({exception:{values:[{type:a,value:b,stacktrace:g}]},culprit:c,message:h},f);this._send(i)}},_trimPacket:function(a){var b=this._globalOptions.maxMessageLength;if(a.message=q(a.message,b),a.exception){var c=a.exception.values[0];c.value=q(c.value,b)}return a},_getHttpData:function(){if(this._hasDocument&&document.location&&document.location.href){var a={headers:{"User-Agent":navigator.userAgent}};return a.url=document.location.href,document.referrer&&(a.headers.Referer=document.referrer),a}},_send:function(a){var b=this,c=this._globalOptions,e={project:this._globalProject,logger:c.logger,platform:"javascript"},f=this._getHttpData();f&&(e.request=f),a=p(e,a),a.tags=p(p({},this._globalContext.tags),a.tags),a.extra=p(p({},this._globalContext.extra),a.extra),a.extra["session:duration"]=d()-this._startTime,l(a.tags)&&delete a.tags,this._globalContext.user&&(a.user=this._globalContext.user),c.release&&(a.release=c.release),c.serverName&&(a.server_name=c.serverName),c.release&&(a.release=c.release),i(c.dataCallback)&&(a=c.dataCallback(a)||a),a&&!l(a)&&(!i(c.shouldSendCallback)||c.shouldSendCallback(a))&&(this._lastEventId=a.event_id||(a.event_id=s()),a=this._trimPacket(a),this._logDebug("debug","Raven about to send:",a),this.isSetup()&&(c.transport||this._makeRequest).call(this,{url:this._globalServer,auth:{sentry_version:"7",sentry_client:"raven-js/"+this.VERSION,sentry_key:this._globalKey},data:a,options:c,onSuccess:function(){b._triggerEvent("success",{data:a,src:b._globalServer})},onError:function(){b._triggerEvent("failure",{data:a,src:b._globalServer})}}))},_makeImageRequest:function(a){a.auth.sentry_data=JSON.stringify(a.data);var b=this._newImage(),c=a.url+"?"+r(a.auth),d=a.options.crossOrigin;(d||""===d)&&(b.crossOrigin=d),b.onload=a.onSuccess,b.onerror=b.onabort=a.onError,b.src=c},_makeXhrRequest:function(a){function b(){200===c.status?a.onSuccess&&a.onSuccess():a.onError&&a.onError()}var c,d=a.url;c=new XMLHttpRequest,"withCredentials"in c?c.onreadystatechange=function(){4===c.readyState&&b()}:(c=new XDomainRequest,d=d.replace(/^https?:/,""),c.onload=b),c.open("POST",d+"?"+r(a.auth)),c.send(JSON.stringify(a.data))},_makeRequest:function(a){var b="withCredentials"in new XMLHttpRequest||"undefined"!=typeof XDomainRequest;return(b?this._makeXhrRequest:this._makeImageRequest)(a)},_newImage:function(){return document.createElement("img")},_logDebug:function(a){this._originalConsoleMethods[a]&&this.debug&&this._originalConsoleMethods[a].apply(this._originalConsole,[].slice.call(arguments,1))},_mergeContext:function(a,b){j(b)?delete this._globalContext[a]:this._globalContext[a]=p(this._globalContext[a]||{},b)}},e.prototype.setUser=e.prototype.setUserContext,e.prototype.setReleaseContext=e.prototype.setRelease,b.exports=e},{"../vendor/TraceKit/tracekit":5,"./configError":1,"./utils":4}],3:[function(a,b,c){"use strict";var d=a("./raven"),e=window.Raven,f=new d;f.noConflict=function(){return window.Raven=e,f},f.afterLoad(),b.exports=f},{"./raven":2}],4:[function(a,b,c){"use strict";function d(a){return void 0===a}function e(a){return"function"==typeof a}function f(a){return"[object String]"===q.toString.call(a)}function g(a){return"object"==typeof a&&null!==a}function h(a){for(var b in a)return!1;return!0}function i(a){return g(a)&&"[object Error]"===q.toString.call(a)||a instanceof Error}function j(a,b){var c,e;if(d(a.length))for(c in a)m(a,c)&&b.call(null,c,a[c]);else if(e=a.length)for(c=0;e>c;c++)b.call(null,c,a[c])}function k(a,b){return b?(j(b,function(b,c){a[b]=c}),a):a}function l(a,b){return a.length<=b?a:a.substr(0,b)+"…"}function m(a,b){return q.hasOwnProperty.call(a,b)}function n(a){for(var b,c=[],d=0,e=a.length;e>d;d++)b=a[d],f(b)?c.push(b.replace(/([.*+?^=!:${}()|\[\]\/\\])/g,"\\$1")):b&&b.source&&c.push(b.source);return new RegExp(c.join("|"),"i")}function o(a){var b=[];return j(a,function(a,c){b.push(encodeURIComponent(a)+"="+encodeURIComponent(c))}),b.join("&")}function p(){var a=window.crypto||window.msCrypto;if(!d(a)&&a.getRandomValues){var b=new Uint16Array(8);a.getRandomValues(b),b[3]=4095&b[3]|16384,b[4]=16383&b[4]|32768;var c=function(a){for(var b=a.toString(16);b.length<4;)b="0"+b;return b};return c(b[0])+c(b[1])+c(b[2])+c(b[3])+c(b[4])+c(b[5])+c(b[6])+c(b[7])}return"xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx".replace(/[xy]/g,function(a){var b=16*Math.random()|0,c="x"==a?b:3&b|8;return c.toString(16)})}var q=Object.prototype;b.exports={isUndefined:d,isFunction:e,isString:f,isObject:g,isEmptyObject:h,isError:i,each:j,objectMerge:k,truncate:l,hasKey:m,joinRegExp:n,urlencode:o,uuid4:p}},{}],5:[function(a,b,c){"use strict";function d(){return"undefined"==typeof document?"":document.location.href}var e=a("../../src/utils"),f=e.hasKey,g=e.isString,h=e.isUndefined,i={remoteFetching:!1,collectWindowErrors:!0,linesOfContext:7,debug:!1},j=[].slice,k="?";i.report=function(){function a(a){h(),p.push(a)}function b(a){for(var b=p.length-1;b>=0;--b)p[b]===a&&p.splice(b,1)}function c(){k(),p=[]}function e(a,b){var c=null;if(!b||i.collectWindowErrors){for(var d in p)if(f(p,d))try{p[d].apply(null,[a].concat(j.call(arguments,2)))}catch(e){c=e}if(c)throw c}}function g(a,b,c,f,g){var h=null;if(s)i.computeStackTrace.augmentStackTraceWithInitialElement(s,b,c,a),l();else if(g)h=i.computeStackTrace(g),e(h,!0);else{var j={url:b,line:c,column:f};j.func=i.computeStackTrace.guessFunctionName(j.url,j.line),j.context=i.computeStackTrace.gatherContext(j.url,j.line),h={message:a,url:d(),stack:[j]},e(h,!0)}return n?n.apply(this,arguments):!1}function h(){o||(n=window.onerror,window.onerror=g,o=!0)}function k(){o&&(window.onerror=n,o=!1,n=void 0)}function l(){var a=s,b=q;q=null,s=null,r=null,e.apply(null,[a,!1].concat(b))}function m(a,b){var c=j.call(arguments,1);if(s){if(r===a)return;l()}var d=i.computeStackTrace(a);if(s=d,r=a,q=c,window.setTimeout(function(){r===a&&l()},d.incomplete?2e3:0),b!==!1)throw a}var n,o,p=[],q=null,r=null,s=null;return m.subscribe=a,m.unsubscribe=b,m.uninstall=c,m}(),i.computeStackTrace=function(){function a(a){if(!i.remoteFetching)return"";try{var b=function(){try{return new window.XMLHttpRequest}catch(a){return new window.ActiveXObject("Microsoft.XMLHTTP")}},c=b();return c.open("GET",a,!1),c.send(""),c.responseText}catch(d){return""}}function b(b){if(!g(b))return[];if(!f(v,b)){var c="",d="";try{d=document.domain}catch(e){}-1!==b.indexOf(d)&&(c=a(b)),v[b]=c?c.split("\n"):[]}return v[b]}function c(a,c){var d,e=/function ([^(]*)\(([^)]*)\)/,f=/['"]?([0-9A-Za-z$_]+)['"]?\s*[:=]\s*(function|eval|new Function)/,g="",i=10,j=b(a);if(!j.length)return k;for(var l=0;i>l;++l)if(g=j[c-l]+g,!h(g)){if(d=f.exec(g))return d[1];if(d=e.exec(g))return d[1]}return k}function e(a,c){var d=b(a);if(!d.length)return null;var e=[],f=Math.floor(i.linesOfContext/2),g=f+i.linesOfContext%2,j=Math.max(0,c-f-1),k=Math.min(d.length,c+g-1);c-=1;for(var l=j;k>l;++l)h(d[l])||e.push(d[l]);return e.length>0?e:null}function j(a){return a.replace(/[\-\[\]{}()*+?.,\\\^$|#]/g,"\\$&")}function l(a){return j(a).replace("<","(?:<|&lt;)").replace(">","(?:>|&gt;)").replace("&","(?:&|&amp;)").replace('"','(?:"|&quot;)').replace(/\s+/g,"\\s+")}function m(a,c){for(var d,e,f=0,g=c.length;g>f;++f)if((d=b(c[f])).length&&(d=d.join("\n"),e=a.exec(d)))return{url:c[f],line:d.substring(0,e.index).split("\n").length,column:e.index-d.lastIndexOf("\n",e.index)-1};return null}function n(a,c,d){var e,f=b(c),g=new RegExp("\\b"+j(a)+"\\b");return d-=1,f&&f.length>d&&(e=g.exec(f[d]))?e.index:null}function o(a){if("undefined"!=typeof document){for(var b,c,d,e,f=[window.location.href],g=document.getElementsByTagName("script"),h=""+a,i=/^function(?:\s+([\w$]+))?\s*\(([\w\s,]*)\)\s*\{\s*(\S[\s\S]*\S)\s*\}\s*$/,k=/^function on([\w$]+)\s*\(event\)\s*\{\s*(\S[\s\S]*\S)\s*\}\s*$/,n=0;n<g.length;++n){var o=g[n];o.src&&f.push(o.src)}if(d=i.exec(h)){var p=d[1]?"\\s+"+d[1]:"",q=d[2].split(",").join("\\s*,\\s*");b=j(d[3]).replace(/;$/,";?"),c=new RegExp("function"+p+"\\s*\\(\\s*"+q+"\\s*\\)\\s*{\\s*"+b+"\\s*}")}else c=new RegExp(j(h).replace(/\s+/g,"\\s+"));if(e=m(c,f))return e;if(d=k.exec(h)){var r=d[1];if(b=l(d[2]),c=new RegExp("on"+r+"=[\\'\"]\\s*"+b+"\\s*[\\'\"]","i"),e=m(c,f[0]))return e;if(c=new RegExp(b),e=m(c,f))return e}return null}}function p(a){if(!h(a.stack)&&a.stack){for(var b,f,g=/^\s*at (.*?) ?\(?((?:(?:file|https?|chrome-extension):.*?)|<anonymous>):(\d+)(?::(\d+))?\)?\s*$/i,i=/^\s*(.*?)(?:\((.*?)\))?@((?:file|https?|chrome).*?):(\d+)(?::(\d+))?\s*$/i,j=/^\s*at (?:((?:\[object object\])?.+) )?\(?((?:ms-appx|http|https):.*?):(\d+)(?::(\d+))?\)?\s*$/i,l=a.stack.split("\n"),m=[],o=/^(.*) is undefined$/.exec(a.message),p=0,q=l.length;q>p;++p){if(b=i.exec(l[p]))f={url:b[3],func:b[1]||k,args:b[2]?b[2].split(","):"",line:+b[4],column:b[5]?+b[5]:null};else if(b=g.exec(l[p]))f={url:b[2],func:b[1]||k,line:+b[3],column:b[4]?+b[4]:null};else{if(!(b=j.exec(l[p])))continue;f={url:b[2],func:b[1]||k,line:+b[3],column:b[4]?+b[4]:null}}!f.func&&f.line&&(f.func=c(f.url,f.line)),f.line&&(f.context=e(f.url,f.line)),m.push(f)}return m.length?(m[0].line&&!m[0].column&&o?m[0].column=n(o[1],m[0].url,m[0].line):m[0].column||h(a.columnNumber)||(m[0].column=a.columnNumber+1),{name:a.name,message:a.message,url:d(),stack:m}):null}}function q(a){var b=a.stacktrace;if(!h(a.stacktrace)&&a.stacktrace){for(var f,g=/ line (\d+), column (\d+) in (?:<anonymous function: ([^>]+)>|([^\)]+))\((.*)\) in (.*):\s*$/i,i=b.split("\n"),j=[],k=0,l=i.length;l>k;k+=2)if(f=g.exec(i[k])){var m={line:+f[1],column:+f[2],func:f[3]||f[4],args:f[5]?f[5].split(","):[],url:f[6]};if(!m.func&&m.line&&(m.func=c(m.url,m.line)),m.line)try{m.context=e(m.url,m.line)}catch(n){}m.context||(m.context=[i[k+1]]),j.push(m)}return j.length?{name:a.name,message:a.message,url:d(),stack:j}:null}}function r(a){var g=a.message.split("\n");if(g.length<4)return null;var h,i,j,k,n=/^\s*Line (\d+) of linked script ((?:file|https?)\S+)(?:: in function (\S+))?\s*$/i,o=/^\s*Line (\d+) of inline#(\d+) script in ((?:file|https?)\S+)(?:: in function (\S+))?\s*$/i,p=/^\s*Line (\d+) of function script\s*$/i,q=[],r=document.getElementsByTagName("script"),s=[];for(i in r)f(r,i)&&!r[i].src&&s.push(r[i]);for(i=2,j=g.length;j>i;i+=2){var t=null;if(h=n.exec(g[i]))t={url:h[2],func:h[3],line:+h[1]};else if(h=o.exec(g[i])){t={url:h[3],func:h[4]};var u=+h[1],v=s[h[2]-1];if(v&&(k=b(t.url))){k=k.join("\n");var w=k.indexOf(v.innerText);w>=0&&(t.line=u+k.substring(0,w).split("\n").length)}}else if(h=p.exec(g[i])){var x=window.location.href.replace(/#.*$/,""),y=h[1],z=new RegExp(l(g[i+1]));k=m(z,[x]),t={url:x,line:k?k.line:y,func:""}}if(t){t.func||(t.func=c(t.url,t.line));var A=e(t.url,t.line),B=A?A[Math.floor(A.length/2)]:null;A&&B.replace(/^\s*/,"")===g[i+1].replace(/^\s*/,"")?t.context=A:t.context=[g[i+1]],q.push(t)}}return q.length?{name:a.name,message:g[0],url:d(),stack:q}:null}function s(a,b,d,f){var g={url:b,line:d};if(g.url&&g.line){a.incomplete=!1,g.func||(g.func=c(g.url,g.line)),g.context||(g.context=e(g.url,g.line));var h=/ '([^']+)' /.exec(f);if(h&&(g.column=n(h[1],g.url,g.line)),a.stack.length>0&&a.stack[0].url===g.url){if(a.stack[0].line===g.line)return!1;if(!a.stack[0].line&&a.stack[0].func===g.func)return a.stack[0].line=g.line,a.stack[0].context=g.context,!1}return a.stack.unshift(g),a.partial=!0,!0}return a.incomplete=!0,!1}function t(a,b){for(var e,f,g,h=/function\s+([_$a-zA-Z\xA0-\uFFFF][_$a-zA-Z0-9\xA0-\uFFFF]*)?\s*\(/i,j=[],l={},m=!1,p=t.caller;p&&!m;p=p.caller)if(p!==u&&p!==i.report){if(f={url:null,func:k,line:null,column:null},p.name?f.func=p.name:(e=h.exec(p.toString()))&&(f.func=e[1]),"undefined"==typeof f.func)try{f.func=e.input.substring(0,e.input.indexOf("{"))}catch(q){}if(g=o(p)){f.url=g.url,f.line=g.line,f.func===k&&(f.func=c(f.url,f.line));var r=/ '([^']+)' /.exec(a.message||a.description);r&&(f.column=n(r[1],g.url,g.line))}l[""+p]?m=!0:l[""+p]=!0,j.push(f)}b&&j.splice(0,b);var v={name:a.name,message:a.message,url:d(),stack:j};return s(v,a.sourceURL||a.fileName,a.line||a.lineNumber,a.message||a.description),v}function u(a,b){var c=null;b=null==b?0:+b;try{if(c=q(a))return c}catch(e){if(i.debug)throw e}try{if(c=p(a))return c}catch(e){if(i.debug)throw e}try{if(c=r(a))return c}catch(e){if(i.debug)throw e}try{if(c=t(a,b+1))return c}catch(e){if(i.debug)throw e}return{name:a.name,message:a.message,url:d()}}var v={};return u.augmentStackTraceWithInitialElement=s,u.computeStackTraceFromStackProp=p,u.guessFunctionName=c,u.gatherContext=e,u}(),b.exports=i},{"../../src/utils":4}]},{},[3])(3)});
//# sourceMappingURL=raven.min.map
/*! Raven.js 2.1.0 (9ca11cd) | github.com/getsentry/raven-js */
!function(a){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=a();else if("function"==typeof define&&define.amd)define([],a);else{var b;b="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,b.Raven=a()}}(function(){return function a(b,c,d){function e(g,h){if(!c[g]){if(!b[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);var j=new Error("Cannot find module '"+g+"'");throw j.code="MODULE_NOT_FOUND",j}var k=c[g]={exports:{}};b[g][0].call(k.exports,function(a){var c=b[g][1][a];return e(c?c:a)},k,k.exports,a,b,c,d)}return c[g].exports}for(var f="function"==typeof require&&require,g=0;g<d.length;g++)e(d[g]);return e}({1:[function(a,b,c){"use strict";function d(a){this.name="RavenConfigError",this.message=a}d.prototype=new Error,d.prototype.constructor=d,b.exports=d},{}],2:[function(a,b,c){"use strict";function d(){return+new Date}function e(){this._hasJSON=!("object"!=typeof JSON||!JSON.stringify),this._hasDocument="undefined"!=typeof document,this._lastCapturedException=null,this._lastEventId=null,this._globalServer=null,this._globalKey=null,this._globalProject=null,this._globalContext={},this._globalOptions={logger:"javascript",ignoreErrors:[],ignoreUrls:[],whitelistUrls:[],includePaths:[],crossOrigin:"anonymous",collectWindowErrors:!0,maxMessageLength:0,stackTraceLimit:50},this._ignoreOnError=0,this._isRavenInstalled=!1,this._originalErrorStackTraceLimit=Error.stackTraceLimit,this._originalConsole=window.console||{},this._originalConsoleMethods={},this._plugins=[],this._startTime=d(),this._wrappedBuiltIns=[];for(var a in this._originalConsole)this._originalConsoleMethods[a]=this._originalConsole[a]}var f=a("../vendor/TraceKit/tracekit"),g=a("./configError"),h=a("./utils"),i=h.isFunction,j=h.isUndefined,k=h.isError,l=h.isEmptyObject,m=h.hasKey,n=h.joinRegExp,o=h.each,p=h.objectMerge,q=h.truncate,r=h.urlencode,s=h.uuid4,t="source protocol user pass host port path".split(" "),u=/^(?:(\w+):)?\/\/(?:(\w+)(:\w+)?@)?([\w\.-]+)(?::(\d+))?(\/.*)/;e.prototype={VERSION:"2.1.0",debug:!1,TraceKit:f,config:function(a,b){var c=this;if(this._globalServer)return this._logDebug("error","Error: Raven has already been configured"),this;if(!a)return this;var d=this._parseDSN(a),e=d.path.lastIndexOf("/"),g=d.path.substr(1,e);return b&&o(b,function(a,b){"tags"===a||"extra"===a?c._globalContext[a]=b:c._globalOptions[a]=b}),this._dsn=a,this._globalOptions.ignoreErrors.push(/^Script error\.?$/),this._globalOptions.ignoreErrors.push(/^Javascript error: Script error\.? on line 0$/),this._globalOptions.ignoreErrors=n(this._globalOptions.ignoreErrors),this._globalOptions.ignoreUrls=this._globalOptions.ignoreUrls.length?n(this._globalOptions.ignoreUrls):!1,this._globalOptions.whitelistUrls=this._globalOptions.whitelistUrls.length?n(this._globalOptions.whitelistUrls):!1,this._globalOptions.includePaths=n(this._globalOptions.includePaths),this._globalKey=d.user,this._globalProject=d.path.substr(e+1),this._globalServer=this._getGlobalServer(d),this._globalEndpoint=this._globalServer+"/"+g+"api/"+this._globalProject+"/store/",this._globalOptions.fetchContext&&(f.remoteFetching=!0),this._globalOptions.linesOfContext&&(f.linesOfContext=this._globalOptions.linesOfContext),f.collectWindowErrors=!!this._globalOptions.collectWindowErrors,this},install:function(){var a=this;return this.isSetup()&&!this._isRavenInstalled&&(f.report.subscribe(function(){a._handleOnErrorStackInfo.apply(a,arguments)}),this._wrapBuiltIns(),this._drainPlugins(),this._isRavenInstalled=!0),Error.stackTraceLimit=this._globalOptions.stackTraceLimit,this},context:function(a,b,c){return i(a)&&(c=b||[],b=a,a=void 0),this.wrap(a,b).apply(this,c)},wrap:function(a,b){function c(){for(var c=[],e=arguments.length,f=!a||a&&a.deep!==!1;e--;)c[e]=f?d.wrap(a,arguments[e]):arguments[e];try{return b.apply(this,c)}catch(g){throw d._ignoreNextOnError(),d.captureException(g,a),g}}var d=this;if(j(b)&&!i(a))return a;if(i(a)&&(b=a,a=void 0),!i(b))return b;if(b.__raven__)return b;if(b.__raven_wrapper__)return b.__raven_wrapper__;for(var e in b)m(b,e)&&(c[e]=b[e]);return b.__raven_wrapper__=c,c.prototype=b.prototype,c.__raven__=!0,c.__inner__=b,c},uninstall:function(){return f.report.uninstall(),this._restoreBuiltIns(),Error.stackTraceLimit=this._originalErrorStackTraceLimit,this._isRavenInstalled=!1,this},captureException:function(a,b){if(!k(a))return this.captureMessage(a,b);this._lastCapturedException=a;try{var c=f.computeStackTrace(a);this._handleStackInfo(c,b)}catch(d){if(a!==d)throw d}return this},captureMessage:function(a,b){return this._globalOptions.ignoreErrors.test&&this._globalOptions.ignoreErrors.test(a)?void 0:(this._send(p({message:a+""},b)),this)},addPlugin:function(a){var b=Array.prototype.slice.call(arguments,1);return this._plugins.push([a,b]),this._isRavenInstalled&&this._drainPlugins(),this},setUserContext:function(a){return this._globalContext.user=a,this},setExtraContext:function(a){return this._mergeContext("extra",a),this},setTagsContext:function(a){return this._mergeContext("tags",a),this},clearContext:function(){return this._globalContext={},this},getContext:function(){return JSON.parse(JSON.stringify(this._globalContext))},setRelease:function(a){return this._globalOptions.release=a,this},setDataCallback:function(a){return this._globalOptions.dataCallback=a,this},setShouldSendCallback:function(a){return this._globalOptions.shouldSendCallback=a,this},setTransport:function(a){return this._globalOptions.transport=a,this},lastException:function(){return this._lastCapturedException},lastEventId:function(){return this._lastEventId},isSetup:function(){return this._hasJSON?this._globalServer?!0:(this.ravenNotConfiguredError||(this.ravenNotConfiguredError=!0,this._logDebug("error","Error: Raven has not been configured.")),!1):!1},afterLoad:function(){var a=window.RavenConfig;a&&this.config(a.dsn,a.config).install()},showReportDialog:function(a){if(window.document){a=a||{};var b=a.eventId||this.lastEventId();if(!b)throw new g("Missing eventId");var c=a.dsn||this._dsn;if(!c)throw new g("Missing DSN");var d=encodeURIComponent,e="";e+="?eventId="+d(b),e+="&dsn="+d(c);var f=a.user||this._globalContext.user;f&&(f.name&&(e+="&name="+d(f.name)),f.email&&(e+="&email="+d(f.email)));var h=this._getGlobalServer(this._parseDSN(c)),i=document.createElement("script");i.async=!0,i.src=h+"/api/embed/error-page/"+e,(document.head||document.body).appendChild(i)}},_ignoreNextOnError:function(){var a=this;this._ignoreOnError+=1,setTimeout(function(){a._ignoreOnError-=1})},_triggerEvent:function(a,b){var c,d;if(this._hasDocument){b=b||{},a="raven"+a.substr(0,1).toUpperCase()+a.substr(1),document.createEvent?(c=document.createEvent("HTMLEvents"),c.initEvent(a,!0,!0)):(c=document.createEventObject(),c.eventType=a);for(d in b)m(b,d)&&(c[d]=b[d]);if(document.createEvent)document.dispatchEvent(c);else try{document.fireEvent("on"+c.eventType.toLowerCase(),c)}catch(e){}}},_wrapBuiltIns:function(){function a(a,b,d,e){var f=a[b];a[b]=d(f),e||c._wrappedBuiltIns.push([a,b,f])}function b(a){return function(b,d){var e=[].slice.call(arguments),f=e[0];return i(f)&&(e[0]=c.wrap(f)),a.apply?a.apply(this,e):a(e[0],e[1])}}var c=this;a(window,"setTimeout",b),a(window,"setInterval",b),window.requestAnimationFrame&&a(window,"requestAnimationFrame",function(a){return function(b){return a(c.wrap(b))}}),"EventTarget Window Node ApplicationCache AudioTrackList ChannelMergerNode CryptoOperation EventSource FileReader HTMLUnknownElement IDBDatabase IDBRequest IDBTransaction KeyOperation MediaController MessagePort ModalWindow Notification SVGElementInstance Screen TextTrack TextTrackCue TextTrackList WebSocket WebSocketWorker Worker XMLHttpRequest XMLHttpRequestEventTarget XMLHttpRequestUpload".replace(/\w+/g,function(b){var d=window[b]&&window[b].prototype;d&&d.hasOwnProperty&&d.hasOwnProperty("addEventListener")&&(a(d,"addEventListener",function(a){return function(b,d,e,f){try{d&&d.handleEvent&&(d.handleEvent=c.wrap(d.handleEvent))}catch(g){}return a.call(this,b,c.wrap(d),e,f)}}),a(d,"removeEventListener",function(a){return function(b,c,d,e){return c=c&&(c.__raven_wrapper__?c.__raven_wrapper__:c),a.call(this,b,c,d,e)}}))}),"XMLHttpRequest"in window&&a(XMLHttpRequest.prototype,"send",function(b){return function(d){var e=this;return"onreadystatechange onload onerror onprogress".replace(/\w+/g,function(b){b in e&&"[object Function]"===Object.prototype.toString.call(e[b])&&a(e,b,function(a){return c.wrap(a)},!0)}),b.apply(this,arguments)}});var d=window.jQuery||window.$;d&&d.fn&&d.fn.ready&&a(d.fn,"ready",function(a){return function(b){return a.call(this,c.wrap(b))}})},_restoreBuiltIns:function(){for(var a;this._wrappedBuiltIns.length;){a=this._wrappedBuiltIns.shift();var b=a[0],c=a[1],d=a[2];b[c]=d}},_drainPlugins:function(){var a=this;o(this._plugins,function(b,c){var d=c[0],e=c[1];d.apply(a,[a].concat(e))})},_parseDSN:function(a){var b=u.exec(a),c={},d=7;try{for(;d--;)c[t[d]]=b[d]||""}catch(e){throw new g("Invalid DSN: "+a)}if(c.pass)throw new g("Do not specify your private key in the DSN!");return c},_getGlobalServer:function(a){var b="//"+a.host+(a.port?":"+a.port:"");return a.protocol&&(b=a.protocol+":"+b),b},_handleOnErrorStackInfo:function(){this._ignoreOnError||this._handleStackInfo.apply(this,arguments)},_handleStackInfo:function(a,b){var c=this,d=[];a.stack&&a.stack.length&&o(a.stack,function(a,b){var e=c._normalizeFrame(b);e&&d.push(e)}),this._triggerEvent("handle",{stackInfo:a,options:b}),this._processException(a.name,a.message,a.url,a.lineno,d.slice(0,this._globalOptions.stackTraceLimit),b)},_normalizeFrame:function(a){if(a.url){var b,c={filename:a.url,lineno:a.line,colno:a.column,"function":a.func||"?"},d=this._extractContextFromFrame(a);if(d){var e=["pre_context","context_line","post_context"];for(b=3;b--;)c[e[b]]=d[b]}return c.in_app=!(this._globalOptions.includePaths.test&&!this._globalOptions.includePaths.test(c.filename)||/(Raven|TraceKit)\./.test(c["function"])||/raven\.(min\.)?js$/.test(c.filename)),c}},_extractContextFromFrame:function(a){if(a.context&&this._globalOptions.fetchContext){for(var b=a.context,c=~~(b.length/2),d=b.length,e=!1;d--;)if(b[d].length>300){e=!0;break}if(e){if(j(a.column))return;return[[],b[c].substr(a.column,50),[]]}return[b.slice(0,c),b[c],b.slice(c+1)]}},_processException:function(a,b,c,d,e,f){var g,h;if((!this._globalOptions.ignoreErrors.test||!this._globalOptions.ignoreErrors.test(b))&&(b+="",b=q(b,this._globalOptions.maxMessageLength),h=a+": "+b,h=q(h,this._globalOptions.maxMessageLength),e&&e.length?(c=e[0].filename||c,e.reverse(),g={frames:e}):c&&(g={frames:[{filename:c,lineno:d,in_app:!0}]}),(!this._globalOptions.ignoreUrls.test||!this._globalOptions.ignoreUrls.test(c))&&(!this._globalOptions.whitelistUrls.test||this._globalOptions.whitelistUrls.test(c)))){var i=p({exception:{values:[{type:a,value:b,stacktrace:g}]},culprit:c,message:h},f);this._send(i)}},_trimPacket:function(a){var b=this._globalOptions.maxMessageLength;if(a.message=q(a.message,b),a.exception){var c=a.exception.values[0];c.value=q(c.value,b)}return a},_getHttpData:function(){if(this._hasDocument&&document.location&&document.location.href){var a={headers:{"User-Agent":navigator.userAgent}};return a.url=document.location.href,document.referrer&&(a.headers.Referer=document.referrer),a}},_send:function(a){var b=this,c=this._globalOptions,e={project:this._globalProject,logger:c.logger,platform:"javascript"},f=this._getHttpData();if(f&&(e.request=f),a=p(e,a),a.tags=p(p({},this._globalContext.tags),a.tags),a.extra=p(p({},this._globalContext.extra),a.extra),a.extra["session:duration"]=d()-this._startTime,l(a.tags)&&delete a.tags,this._globalContext.user&&(a.user=this._globalContext.user),c.release&&(a.release=c.release),c.serverName&&(a.server_name=c.serverName),c.release&&(a.release=c.release),i(c.dataCallback)&&(a=c.dataCallback(a)||a),a&&!l(a)&&(!i(c.shouldSendCallback)||c.shouldSendCallback(a))&&(this._lastEventId=a.event_id||(a.event_id=s()),a=this._trimPacket(a),this._logDebug("debug","Raven about to send:",a),this.isSetup())){var g=this._globalEndpoint;(c.transport||this._makeRequest).call(this,{url:g,auth:{sentry_version:"7",sentry_client:"raven-js/"+this.VERSION,sentry_key:this._globalKey},data:a,options:c,onSuccess:function(){b._triggerEvent("success",{data:a,src:g})},onError:function(){b._triggerEvent("failure",{data:a,src:g})}})}},_makeImageRequest:function(a){a.auth.sentry_data=JSON.stringify(a.data);var b=this._newImage(),c=a.url+"?"+r(a.auth),d=a.options.crossOrigin;(d||""===d)&&(b.crossOrigin=d),b.onload=a.onSuccess,b.onerror=b.onabort=a.onError,b.src=c},_makeXhrRequest:function(a){function b(){200===c.status?a.onSuccess&&a.onSuccess():a.onError&&a.onError()}var c,d=a.url;c=new XMLHttpRequest,"withCredentials"in c?c.onreadystatechange=function(){4===c.readyState&&b()}:(c=new XDomainRequest,d=d.replace(/^https?:/,""),c.onload=b),c.open("POST",d+"?"+r(a.auth)),c.send(JSON.stringify(a.data))},_makeRequest:function(a){var b="withCredentials"in new XMLHttpRequest||"undefined"!=typeof XDomainRequest;return(b?this._makeXhrRequest:this._makeImageRequest)(a)},_newImage:function(){return document.createElement("img")},_logDebug:function(a){this._originalConsoleMethods[a]&&this.debug&&Function.prototype.apply.call(this._originalConsoleMethods[a],this._originalConsole,[].slice.call(arguments,1))},_mergeContext:function(a,b){j(b)?delete this._globalContext[a]:this._globalContext[a]=p(this._globalContext[a]||{},b)}},e.prototype.setUser=e.prototype.setUserContext,e.prototype.setReleaseContext=e.prototype.setRelease,b.exports=e},{"../vendor/TraceKit/tracekit":5,"./configError":1,"./utils":4}],3:[function(a,b,c){"use strict";var d=a("./raven"),e=window.Raven,f=new d;f.noConflict=function(){return window.Raven=e,f},f.afterLoad(),b.exports=f},{"./raven":2}],4:[function(a,b,c){"use strict";function d(a){return void 0===a}function e(a){return"function"==typeof a}function f(a){return"[object String]"===q.toString.call(a)}function g(a){return"object"==typeof a&&null!==a}function h(a){for(var b in a)return!1;return!0}function i(a){return g(a)&&"[object Error]"===q.toString.call(a)||a instanceof Error}function j(a,b){var c,e;if(d(a.length))for(c in a)m(a,c)&&b.call(null,c,a[c]);else if(e=a.length)for(c=0;e>c;c++)b.call(null,c,a[c])}function k(a,b){return b?(j(b,function(b,c){a[b]=c}),a):a}function l(a,b){return!b||a.length<=b?a:a.substr(0,b)+"…"}function m(a,b){return q.hasOwnProperty.call(a,b)}function n(a){for(var b,c=[],d=0,e=a.length;e>d;d++)b=a[d],f(b)?c.push(b.replace(/([.*+?^=!:${}()|\[\]\/\\])/g,"\\$1")):b&&b.source&&c.push(b.source);return new RegExp(c.join("|"),"i")}function o(a){var b=[];return j(a,function(a,c){b.push(encodeURIComponent(a)+"="+encodeURIComponent(c))}),b.join("&")}function p(){var a=window.crypto||window.msCrypto;if(!d(a)&&a.getRandomValues){var b=new Uint16Array(8);a.getRandomValues(b),b[3]=4095&b[3]|16384,b[4]=16383&b[4]|32768;var c=function(a){for(var b=a.toString(16);b.length<4;)b="0"+b;return b};return c(b[0])+c(b[1])+c(b[2])+c(b[3])+c(b[4])+c(b[5])+c(b[6])+c(b[7])}return"xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx".replace(/[xy]/g,function(a){var b=16*Math.random()|0,c="x"===a?b:3&b|8;return c.toString(16)})}var q=Object.prototype;b.exports={isUndefined:d,isFunction:e,isString:f,isObject:g,isEmptyObject:h,isError:i,each:j,objectMerge:k,truncate:l,hasKey:m,joinRegExp:n,urlencode:o,uuid4:p}},{}],5:[function(a,b,c){"use strict";function d(){return"undefined"==typeof document?"":document.location.href}var e=a("../../src/utils"),f=e.hasKey,g=e.isString,h=e.isUndefined,i={remoteFetching:!1,collectWindowErrors:!0,linesOfContext:7,debug:!1},j=[].slice,k="?";i.report=function(){function a(a){h(),p.push(a)}function b(a){for(var b=p.length-1;b>=0;--b)p[b]===a&&p.splice(b,1)}function c(){k(),p=[]}function e(a,b){var c=null;if(!b||i.collectWindowErrors){for(var d in p)if(f(p,d))try{p[d].apply(null,[a].concat(j.call(arguments,2)))}catch(e){c=e}if(c)throw c}}function g(a,b,c,f,g){var h=null;if(s)i.computeStackTrace.augmentStackTraceWithInitialElement(s,b,c,a),l();else if(g)h=i.computeStackTrace(g),e(h,!0);else{var j={url:b,line:c,column:f};j.func=i.computeStackTrace.guessFunctionName(j.url,j.line),j.context=i.computeStackTrace.gatherContext(j.url,j.line),h={message:a,url:d(),stack:[j]},e(h,!0)}return n?n.apply(this,arguments):!1}function h(){o||(n=window.onerror,window.onerror=g,o=!0)}function k(){o&&(window.onerror=n,o=!1,n=void 0)}function l(){var a=s,b=q;q=null,s=null,r=null,e.apply(null,[a,!1].concat(b))}function m(a,b){var c=j.call(arguments,1);if(s){if(r===a)return;l()}var d=i.computeStackTrace(a);if(s=d,r=a,q=c,window.setTimeout(function(){r===a&&l()},d.incomplete?2e3:0),b!==!1)throw a}var n,o,p=[],q=null,r=null,s=null;return m.subscribe=a,m.unsubscribe=b,m.uninstall=c,m}(),i.computeStackTrace=function(){function a(a){if(!i.remoteFetching)return"";try{var b=function(){try{return new window.XMLHttpRequest}catch(a){return new window.ActiveXObject("Microsoft.XMLHTTP")}},c=b();return c.open("GET",a,!1),c.send(""),c.responseText}catch(d){return""}}function b(b){if(!g(b))return[];if(!f(v,b)){var c="",d="";try{d=document.domain}catch(e){}-1!==b.indexOf(d)&&(c=a(b)),v[b]=c?c.split("\n"):[]}return v[b]}function c(a,c){var d,e=/function ([^(]*)\(([^)]*)\)/,f=/['"]?([0-9A-Za-z$_]+)['"]?\s*[:=]\s*(function|eval|new Function)/,g="",i=10,j=b(a);if(!j.length)return k;for(var l=0;i>l;++l)if(g=j[c-l]+g,!h(g)){if(d=f.exec(g))return d[1];if(d=e.exec(g))return d[1]}return k}function e(a,c){var d=b(a);if(!d.length)return null;var e=[],f=Math.floor(i.linesOfContext/2),g=f+i.linesOfContext%2,j=Math.max(0,c-f-1),k=Math.min(d.length,c+g-1);c-=1;for(var l=j;k>l;++l)h(d[l])||e.push(d[l]);return e.length>0?e:null}function j(a){return a.replace(/[\-\[\]{}()*+?.,\\\^$|#]/g,"\\$&")}function l(a){return j(a).replace("<","(?:<|&lt;)").replace(">","(?:>|&gt;)").replace("&","(?:&|&amp;)").replace('"','(?:"|&quot;)').replace(/\s+/g,"\\s+")}function m(a,c){for(var d,e,f=0,g=c.length;g>f;++f)if((d=b(c[f])).length&&(d=d.join("\n"),e=a.exec(d)))return{url:c[f],line:d.substring(0,e.index).split("\n").length,column:e.index-d.lastIndexOf("\n",e.index)-1};return null}function n(a,c,d){var e,f=b(c),g=new RegExp("\\b"+j(a)+"\\b");return d-=1,f&&f.length>d&&(e=g.exec(f[d]))?e.index:null}function o(a){if("undefined"!=typeof document){for(var b,c,d,e,f=[window.location.href],g=document.getElementsByTagName("script"),h=""+a,i=/^function(?:\s+([\w$]+))?\s*\(([\w\s,]*)\)\s*\{\s*(\S[\s\S]*\S)\s*\}\s*$/,k=/^function on([\w$]+)\s*\(event\)\s*\{\s*(\S[\s\S]*\S)\s*\}\s*$/,n=0;n<g.length;++n){var o=g[n];o.src&&f.push(o.src)}if(d=i.exec(h)){var p=d[1]?"\\s+"+d[1]:"",q=d[2].split(",").join("\\s*,\\s*");b=j(d[3]).replace(/;$/,";?"),c=new RegExp("function"+p+"\\s*\\(\\s*"+q+"\\s*\\)\\s*{\\s*"+b+"\\s*}")}else c=new RegExp(j(h).replace(/\s+/g,"\\s+"));if(e=m(c,f))return e;if(d=k.exec(h)){var r=d[1];if(b=l(d[2]),c=new RegExp("on"+r+"=[\\'\"]\\s*"+b+"\\s*[\\'\"]","i"),e=m(c,f[0]))return e;if(c=new RegExp(b),e=m(c,f))return e}return null}}function p(a){if(!h(a.stack)&&a.stack){for(var b,f,g=/^\s*at (.*?) ?\(((?:file|https?|blob|chrome-extension|native|eval|<anonymous>).*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i,i=/^\s*(.*?)(?:\((.*?)\))?(?:^|@)((?:file|https?|blob|chrome|\[).*?)(?::(\d+))?(?::(\d+))?\s*$/i,j=/^\s*at (?:((?:\[object object\])?.+) )?\(?((?:ms-appx|https?|blob):.*?):(\d+)(?::(\d+))?\)?\s*$/i,l=a.stack.split("\n"),m=[],o=/^(.*) is undefined$/.exec(a.message),p=0,q=l.length;q>p;++p){if(b=g.exec(l[p])){var r=b[2]&&-1!==b[2].indexOf("native");f={url:r?null:b[2],func:b[1]||k,args:r?[b[2]]:[],line:b[3]?+b[3]:null,column:b[4]?+b[4]:null}}else if(b=j.exec(l[p]))f={url:b[2],func:b[1]||k,args:[],line:+b[3],column:b[4]?+b[4]:null};else{if(!(b=i.exec(l[p])))continue;f={url:b[3],func:b[1]||k,args:b[2]?b[2].split(","):[],line:b[4]?+b[4]:null,column:b[5]?+b[5]:null}}!f.func&&f.line&&(f.func=c(f.url,f.line)),f.line&&(f.context=e(f.url,f.line)),m.push(f)}return m.length?(m[0].line&&!m[0].column&&o?m[0].column=n(o[1],m[0].url,m[0].line):m[0].column||h(a.columnNumber)||(m[0].column=a.columnNumber+1),{name:a.name,message:a.message,url:d(),stack:m}):null}}function q(a){var b=a.stacktrace;if(!h(a.stacktrace)&&a.stacktrace){for(var f,g=/ line (\d+).*script (?:in )?(\S+)(?:: in function (\S+))?$/i,i=/ line (\d+), column (\d+)\s*(?:in (?:<anonymous function: ([^>]+)>|([^\)]+))\((.*)\))? in (.*):\s*$/i,j=b.split("\n"),k=[],l=0;l<j.length;l+=2){var m=null;if((f=g.exec(j[l]))?m={url:f[2],line:+f[1],column:null,func:f[3],args:[]}:(f=i.exec(j[l]))&&(m={url:f[6],line:+f[1],column:+f[2],func:f[3]||f[4],args:f[5]?f[5].split(","):[]}),m){if(!m.func&&m.line&&(m.func=c(m.url,m.line)),m.line)try{m.context=e(m.url,m.line)}catch(n){}m.context||(m.context=[j[l+1]]),k.push(m)}}return k.length?{name:a.name,message:a.message,url:d(),stack:k}:null}}function r(a){var g=a.message.split("\n");if(g.length<4)return null;var h,i=/^\s*Line (\d+) of linked script ((?:file|https?|blob)\S+)(?:: in function (\S+))?\s*$/i,j=/^\s*Line (\d+) of inline#(\d+) script in ((?:file|https?|blob)\S+)(?:: in function (\S+))?\s*$/i,k=/^\s*Line (\d+) of function script\s*$/i,n=[],o=document.getElementsByTagName("script"),p=[];for(var q in o)f(o,q)&&!o[q].src&&p.push(o[q]);for(var r=2;r<g.length;r+=2){var s=null;if(h=i.exec(g[r]))s={url:h[2],func:h[3],args:[],line:+h[1],column:null};else if(h=j.exec(g[r])){s={url:h[3],func:h[4],args:[],line:+h[1],column:null};var t=+h[1],u=p[h[2]-1];if(u){var v=b(s.url);if(v){v=v.join("\n");var w=v.indexOf(u.innerText);w>=0&&(s.line=t+v.substring(0,w).split("\n").length)}}}else if(h=k.exec(g[r])){var x=window.location.href.replace(/#.*$/,""),y=new RegExp(l(g[r+1])),z=m(y,[x]);s={url:x,func:"",args:[],line:z?z.line:h[1],column:null}}if(s){s.func||(s.func=c(s.url,s.line));var A=e(s.url,s.line),B=A?A[Math.floor(A.length/2)]:null;A&&B.replace(/^\s*/,"")===g[r+1].replace(/^\s*/,"")?s.context=A:s.context=[g[r+1]],n.push(s)}}return n.length?{name:a.name,message:g[0],url:d(),stack:n}:null}function s(a,b,d,f){var g={url:b,line:d};if(g.url&&g.line){a.incomplete=!1,g.func||(g.func=c(g.url,g.line)),g.context||(g.context=e(g.url,g.line));var h=/ '([^']+)' /.exec(f);if(h&&(g.column=n(h[1],g.url,g.line)),a.stack.length>0&&a.stack[0].url===g.url){if(a.stack[0].line===g.line)return!1;if(!a.stack[0].line&&a.stack[0].func===g.func)return a.stack[0].line=g.line,a.stack[0].context=g.context,!1}return a.stack.unshift(g),a.partial=!0,!0}return a.incomplete=!0,!1}function t(a,b){for(var e,f,g,h=/function\s+([_$a-zA-Z\xA0-\uFFFF][_$a-zA-Z0-9\xA0-\uFFFF]*)?\s*\(/i,j=[],l={},m=!1,p=t.caller;p&&!m;p=p.caller)if(p!==u&&p!==i.report){if(f={url:null,func:k,line:null,column:null},p.name?f.func=p.name:(e=h.exec(p.toString()))&&(f.func=e[1]),"undefined"==typeof f.func)try{f.func=e.input.substring(0,e.input.indexOf("{"))}catch(q){}if(g=o(p)){f.url=g.url,f.line=g.line,f.func===k&&(f.func=c(f.url,f.line));var r=/ '([^']+)' /.exec(a.message||a.description);r&&(f.column=n(r[1],g.url,g.line))}l[""+p]?m=!0:l[""+p]=!0,j.push(f)}b&&j.splice(0,b);var v={name:a.name,message:a.message,url:d(),stack:j};return s(v,a.sourceURL||a.fileName,a.line||a.lineNumber,a.message||a.description),v}function u(a,b){var c=null;b=null==b?0:+b;try{if(c=q(a))return c}catch(e){if(i.debug)throw e}try{if(c=p(a))return c}catch(e){if(i.debug)throw e}try{if(c=r(a))return c}catch(e){if(i.debug)throw e}try{if(c=t(a,b+1))return c}catch(e){if(i.debug)throw e}return{name:a.name,message:a.message,url:d()}}var v={};return u.augmentStackTraceWithInitialElement=s,u.computeStackTraceFromStackProp=p,u.guessFunctionName=c,u.gatherContext=e,u}(),b.exports=i},{"../../src/utils":4}]},{},[3])(3)});
//# sourceMappingURL=raven.min.js.map
{
"@dist/raven.js": {
"hashes": {
"sha256": "VoWG5FjRcWv0Zpefd2xHF3HfVviDN+c9iGJsNDDUPDs=",
"sha512": "kVByPWaa0uYOKn/v797k7YGPrEAKmqH0nsMCMv5ssiE1e+AmrjCzDcMWEUER/53sYoGqynGj+ReRzGd+kWlCHQ=="
"sha256": "CCTMmoqRyMome21evusgcQTqtn4S6dh2IYXy/9iXC5w=",
"sha512": "MV0+GMYq1nnf7Ur8v6wRJM7JTbk1lS+1U/e7RaZZA4+8BY+Ft2JvNUnLzi7UZli+lBFhsBEwdevuL5Qms7J9jw=="
},
"type": null,
"integrity": "sha256-VoWG5FjRcWv0Zpefd2xHF3HfVviDN+c9iGJsNDDUPDs= sha512-kVByPWaa0uYOKn/v797k7YGPrEAKmqH0nsMCMv5ssiE1e+AmrjCzDcMWEUER/53sYoGqynGj+ReRzGd+kWlCHQ==",
"integrity": "sha256-CCTMmoqRyMome21evusgcQTqtn4S6dh2IYXy/9iXC5w= sha512-MV0+GMYq1nnf7Ur8v6wRJM7JTbk1lS+1U/e7RaZZA4+8BY+Ft2JvNUnLzi7UZli+lBFhsBEwdevuL5Qms7J9jw==",
"path": "dist/raven.js"

@@ -13,9 +13,9 @@ },

"hashes": {
"sha256": "DBVw7D0VtUxKOHCgay6isJm54nkEVL5v36xp7RVg06c=",
"sha512": "EDIenuweiUZDMoQRxmw8huGReOChxTiTTBwZd0T6Mb/uh9fc4o8BdeF77BOZidawGJGtRPc28sP4zgk8SHhFbw=="
"sha256": "65Ulhun150ZZFP+ifmeWjzFGRy4X+TWYNaYJ44f3TTk=",
"sha512": "wSTFPL8615g/+7ge4NVK1tHB1butUtCMhpLxknSXFrVukUf5YyO+NWRRSZAMDdBw2UXVoHODwoTK9cf4pDYRPQ=="
},
"type": null,
"integrity": "sha256-DBVw7D0VtUxKOHCgay6isJm54nkEVL5v36xp7RVg06c= sha512-EDIenuweiUZDMoQRxmw8huGReOChxTiTTBwZd0T6Mb/uh9fc4o8BdeF77BOZidawGJGtRPc28sP4zgk8SHhFbw==",
"integrity": "sha256-65Ulhun150ZZFP+ifmeWjzFGRy4X+TWYNaYJ44f3TTk= sha512-wSTFPL8615g/+7ge4NVK1tHB1butUtCMhpLxknSXFrVukUf5YyO+NWRRSZAMDdBw2UXVoHODwoTK9cf4pDYRPQ==",
"path": "dist/raven.min.js"
}
}

@@ -43,1 +43,38 @@ function foo() {

}
function showDialog() {
broken();
Raven.showReportDialog();
}
function blobExample() {
var xhr = new XMLHttpRequest();
xhr.open('GET', 'stack.js');
xhr.onreadystatechange = function () {
if (xhr.readyState === 4) {
var blob = new Blob([xhr.responseText], {type: 'application/javascript'});
var url = URL.createObjectURL(blob);
var script = document.createElement('script');
script.src = url;
document.head.appendChild(script);
}
};
xhr.send();
}
function a() { b(); }
function b() { c(); }
function c() { d(); }
function d() { e(); }
function e() { f(); }
function f() { g(); }
function g() { h(); }
function h() { i(); }
function i() { j(); }
function j() { k(); }
function k() { l(); }
function l() { m(); }
function m() { n(); }
function n() { o(); }
function o() { throw new Error('dang'); }

@@ -1,10 +0,9 @@

var proxyquire = require('proxyquireify');
var versionify = require('browserify-versionify');
'use strict';
module.exports = function(grunt) {
"use strict";
var _ = require('lodash');
var path = require('path');
var through = require('through2');
var proxyquire = require('proxyquireify');
var versionify = require('browserify-versionify');
var derequire = require('derequire/plugin');

@@ -19,8 +18,8 @@

plugins = _.map(plugins ? plugins.split(',') : [], function (plugin) {
var path = 'plugins/' + plugin + '.js';
var p = 'plugins/' + plugin + '.js';
if(!grunt.file.exists(path))
if(!grunt.file.exists(p))
throw new Error("Plugin '" + plugin + "' not found in plugins directory.");
return path;
return p;
});

@@ -74,3 +73,21 @@

var pluginCombinations = combine(grunt.file.expand('plugins/*.js'));
var plugins = grunt.file.expand('plugins/*.js');
var cleanedPlugins = plugins.filter(function (plugin) {
var pluginName = path.basename(plugin, '.js');
return excludedPlugins.indexOf(pluginName) === -1;
});
var pluginSingleFiles = cleanedPlugins.map(function (plugin) {
var filename = path.basename(plugin);
var file = {};
file.src = plugin;
file.dest = path.join('build', 'plugins', filename);
return file;
});
var pluginCombinations = combine(plugins);
var pluginConcatFiles = _.reduce(pluginCombinations, function (dict, comb) {

@@ -88,58 +105,78 @@ var key = _.map(comb, function (plugin) {

var gruntConfig = {
pkg: grunt.file.readJSON('package.json'),
aws: grunt.file.exists('aws.json') ? grunt.file.readJSON('aws.json'): {},
clean: ['build'],
browserify: {
options: {
var browserifyConfig = {
options: {
banner: grunt.file.read('template/_copyright.js'),
browserifyOptions: {
banner: grunt.file.read('template/_copyright.js'),
standalone: 'Raven' // umd
},
transform: [versionify],
standalone: 'Raven' // umd
},
transform: [ versionify ],
plugin: [ derequire ]
},
core: {
src: 'src/singleton.js',
dest: 'build/raven.js'
},
plugins: {
files: pluginConcatFiles,
},
core: {
src: 'src/singleton.js',
dest: 'build/raven.js'
},
'plugins-combined': {
files: pluginConcatFiles,
options: {
transform: [
[ versionify ],
[ new AddPluginBrowserifyTransformer() ]
]
}
},
test: {
src: 'test/**/*.test.js',
transform: [
[ versionify ],
[ new AddPluginBrowserifyTransformer() ]
]
}
},
test: {
src: 'test/**/*.test.js',
dest: 'build/raven.test.js',
options: {
browserifyOptions: {
debug: true // source maps
},
plugin: [proxyquire.plugin]
browserifyOptions: {
debug: true // source maps
},
plugin: [proxyquire.plugin]
}
}
};
// Create a dedicated entry in browserify config for
// each individual plugin (each needs a unique `standalone`
// config)
var browserifyPluginTaskNames = [];
pluginSingleFiles.forEach(function (item) {
var name = item.src
.replace(/.*\//, '') // everything before slash
.replace('.js', ''); // extension
var capsName = name.charAt(0).toUpperCase() + name.slice(1);
var config = {
src: item.src,
dest: item.dest,
options: {
browserifyOptions: {
// e.g. Raven.Plugins.Angular
standalone: 'Raven.Plugins.' + capsName
}
}
},
};
browserifyConfig[name] = config;
browserifyPluginTaskNames.push('browserify:' + name);
});
var gruntConfig = {
pkg: grunt.file.readJSON('package.json'),
aws: grunt.file.exists('aws.json') ? grunt.file.readJSON('aws.json'): {},
clean: ['build'],
browserify: browserifyConfig,
uglify: {
options: {
sourceMap: function (dest) {
return path.join(path.dirname(dest),
path.basename(dest, '.js')) +
'.map';
},
sourceMappingURL: function (dest) {
return path.basename(dest, '.js') + '.map';
},
preserveComments: 'some',
sourceMap: true,
// Only preserve comments that start with (!)
preserveComments: /^!/,
compress: {
dead_code: true,
global_defs: {
"TEST": false
'TEST': false
}

@@ -155,13 +192,6 @@ }

fixSourceMaps: {
all: ['build/**/*.map']
eslint: {
target: ['Gruntfile.js', 'src/**/*.js', 'plugins/**/*.js']
},
jshint: {
options: {
jshintrc: '.jshintrc'
},
all: ['Gruntfile.js', 'src/**/*.js', 'plugins/**/*.js']
},
mocha: {

@@ -171,7 +201,7 @@ options: {

ignoreLeaks: true,
grep: grunt.option('grep')
grep: grunt.option('grep')
},
log: true,
log: true,
reporter: 'Dot',
run: true
run: true
},

@@ -190,3 +220,3 @@ unit: {

options: {
npm: false,
npm: false,
commitMessage: 'Release <%= version %>'

@@ -240,3 +270,3 @@ }

expand: true,
flatten: true,
flatten: false,
cwd: 'build/',

@@ -287,29 +317,5 @@ src: '**',

grunt.registerMultiTask('fixSourceMaps', function () {
this.files.forEach(function (f) {
var result;
var sources = f.src.filter(function (filepath) {
if (!grunt.file.exists(filepath)) {
grunt.log.warn('Source file "' + filepath + '" not found.');
return false;
} else {
return true;
}
}).forEach(function (filepath) {
var base = path.dirname(filepath);
var sMap = grunt.file.readJSON(filepath);
sMap.file = path.relative(base, sMap.file);
sMap.sources = _.map(sMap.sources, path.relative.bind(path, base));
grunt.file.write(filepath, JSON.stringify(sMap));
// Print a success message.
grunt.log.writeln('File "' + filepath + '" fixed.');
});
});
});
// Grunt contrib tasks
grunt.loadNpmTasks('grunt-contrib-uglify');
grunt.loadNpmTasks('grunt-contrib-clean');
grunt.loadNpmTasks('grunt-contrib-jshint');
grunt.loadNpmTasks('grunt-contrib-connect');

@@ -325,15 +331,16 @@ grunt.loadNpmTasks('grunt-contrib-copy');

grunt.loadNpmTasks('grunt-sri');
grunt.loadNpmTasks('grunt-eslint');
// Build tasks
grunt.registerTask('_prep', ['clean', 'gitinfo', 'version']);
grunt.registerTask('browserify.core', ['_prep', 'browserify:core']);
grunt.registerTask('browserify.plugins', ['_prep', 'browserify:plugins']);
grunt.registerTask('browserify.core', ['_prep', 'browserify:core'].concat(browserifyPluginTaskNames));
grunt.registerTask('browserify.plugins-combined', ['_prep', 'browserify:plugins-combined']);
grunt.registerTask('build.test', ['_prep', 'browserify:test']);
grunt.registerTask('build.core', ['browserify.core', 'uglify', 'fixSourceMaps', 'sri:dist']);
grunt.registerTask('build.all', ['browserify.plugins', 'uglify', 'fixSourceMaps', 'sri:dist', 'sri:build']);
grunt.registerTask('build', ['build.all']);
grunt.registerTask('build.core', ['browserify.core', 'uglify', 'sri:dist']);
grunt.registerTask('build.plugins-combined', ['browserify.plugins-combined', 'uglify', 'sri:dist', 'sri:build']);
grunt.registerTask('build', ['build.plugins-combined']);
grunt.registerTask('dist', ['build.core', 'copy:dist']);
// Test task
grunt.registerTask('test', ['jshint', 'browserify.core', 'browserify:test', 'mocha']);
grunt.registerTask('test', ['eslint', 'browserify.core', 'browserify:test', 'mocha']);

@@ -344,4 +351,4 @@ // Webserver tasks

grunt.registerTask('publish', ['test', 'build.all', 's3']);
grunt.registerTask('publish', ['test', 'build', 's3']);
grunt.registerTask('default', ['test']);
};
{
"name": "raven-js",
"version": "2.0.5",
"version": "2.1.0",
"license": "BSD-2-Clause",

@@ -21,17 +21,20 @@ "homepage": "https://getsentry.com",

"grunt-browserify": "^4.0.1",
"grunt-cli": "~0.1.9",
"grunt-contrib-clean": "~0.4.0",
"grunt-contrib-concat": "~0.3.0",
"grunt-contrib-connect": "~0.5.0",
"grunt-contrib-copy": "~0.4.1",
"grunt-contrib-jshint": "~0.6.3",
"grunt-contrib-uglify": "~0.2.2",
"grunt-gitinfo": "~0.1.1",
"grunt-mocha": "~0.4.1",
"grunt-release": "~0.6.0",
"grunt-s3": "~0.2.0-alpha.3",
"grunt-cli": "^0.1.13",
"grunt-contrib-clean": "^0.7.0",
"grunt-contrib-concat": "^0.5.1",
"grunt-contrib-connect": "^0.11.2",
"grunt-contrib-copy": "^0.8.2",
"grunt-contrib-jshint": "^0.11.3",
"grunt-contrib-uglify": "^0.11.0",
"grunt-eslint": "^17.3.1",
"grunt-gitinfo": "^0.1.7",
"grunt-mocha": "^0.4.15",
"grunt-release": "^0.13.0",
"grunt-s3": "0.2.0-alpha.3",
"grunt-sri": "mattrobenolt/grunt-sri#pretty",
"lodash": "~2.4.0",
"proxyquireify": "^3.0.0",
"sinon": "~1.7.3",
"jquery": "^2.1.4",
"lodash": "^3.10.1",
"mocha": "^1.21.5",
"proxyquireify": "^3.0.1",
"sinon": "1.7.3",
"through2": "^2.0.0"

@@ -38,0 +41,0 @@ },

@@ -12,3 +12,2 @@ /**

function angularPlugin(Raven, angular) {
/*jshint validthis:true*/
angular = angular || window.angular;

@@ -29,5 +28,5 @@

function exceptionHandler(Raven, $delegate) {
function exceptionHandler(R, $delegate) {
return function (ex, cause) {
Raven.captureException(ex, {
R.captureException(ex, {
extra: { cause: cause }

@@ -34,0 +33,0 @@ });

@@ -16,11 +16,11 @@ /**

var logForGivenLevel = function(level) {
var originalConsoleLevel = console[level];
var logForGivenLevel = function(l) {
var originalConsoleLevel = console[l];
// warning level is the only level that doesn't map up
// correctly with what Sentry expects.
if (level === 'warn') level = 'warning';
if (l === 'warn') l = 'warning';
return function () {
var args = [].slice.call(arguments);
Raven.captureMessage('' + args[0], {level: level, logger: 'console', extra: { 'arguments': args }});
Raven.captureMessage('' + args.join(' '), {level: l, logger: 'console', extra: { 'arguments': args }});

@@ -31,5 +31,7 @@ // this fails for some browsers. :(

// See: https://stackoverflow.com/questions/5472938/does-ie9-support-console-log-and-is-it-a-real-function#answer-5473193
Function.prototype.bind
.call(originalConsoleLevel, originalConsole)
.apply(originalConsole, args);
Function.prototype.apply.call(
originalConsoleLevel,
originalConsole,
args
);
}

@@ -36,0 +38,0 @@ };

@@ -9,3 +9,2 @@ /**

function emberPlugin(Raven, Ember) {
/*jshint validthis:true*/
Ember = Ember || window.Ember;

@@ -12,0 +11,0 @@

# Raven.js [![Build Status](https://travis-ci.org/getsentry/raven-js.svg?branch=master)](https://travis-ci.org/getsentry/raven-js)
Raven.js is a tiny standalone JavaScript client for [Sentry](https://getsentry.com/).
Raven.js is the official browser JavaScript client for [Sentry](https://getsentry.com/).

@@ -5,0 +5,0 @@ **Raven.js v2.0 requires Sentry v8.0.0 or later.**

@@ -48,6 +48,8 @@ /*global XDomainRequest:false*/

collectWindowErrors: true,
maxMessageLength: 100
maxMessageLength: 0,
stackTraceLimit: 50
};
this._ignoreOnError = 0;
this._isRavenInstalled = false;
this._originalErrorStackTraceLimit = Error.stackTraceLimit;
// capture references to window.console *and* all its methods first

@@ -59,4 +61,5 @@ // before the console plugin has a chance to monkey patch

this._startTime = now();
this._wrappedBuiltIns = [];
for (var method in this._originalConsole) {
for (var method in this._originalConsole) { // eslint-disable-line guard-for-in
this._originalConsoleMethods[method] = this._originalConsole[method];

@@ -77,3 +80,3 @@ }

// See: https://github.com/getsentry/raven-js/issues/465
VERSION: '2.0.5',
VERSION: '2.1.0',

@@ -108,3 +111,3 @@ debug: false,

// tags and extra are special and need to be put into context
if (key == 'tags' || key == 'extra') {
if (key === 'tags' || key === 'extra') {
self._globalContext[key] = value;

@@ -117,2 +120,4 @@ } else {

this._dsn = dsn;
// "Script error." is hard coded into browsers for errors that it can't read.

@@ -132,10 +137,6 @@ // this is the result of a script being pulled in from an external domain and CORS.

// assemble the endpoint from the uri pieces
this._globalServer = '//' + uri.host +
(uri.port ? ':' + uri.port : '') +
'/' + path + 'api/' + this._globalProject + '/store/';
this._globalServer = this._getGlobalServer(uri);
if (uri.protocol) {
this._globalServer = uri.protocol + ':' + this._globalServer;
}
this._globalEndpoint = this._globalServer +
'/' + path + 'api/' + this._globalProject + '/store/';

@@ -168,6 +169,3 @@ if (this._globalOptions.fetchContext) {

TraceKit.report.subscribe(function () {
// maintain 'self'
if (!self._ignoreOnError) {
self._handleStackInfo.apply(self, arguments);
}
self._handleOnErrorStackInfo.apply(self, arguments);
});

@@ -182,2 +180,3 @@ this._wrapBuiltIns();

Error.stackTraceLimit = this._globalOptions.stackTraceLimit;
return this;

@@ -251,3 +250,2 @@ },

try {
/*jshint -W040*/
return func.apply(this, args);

@@ -286,2 +284,6 @@ } catch(e) {

TraceKit.report.uninstall();
this._restoreBuiltIns();
Error.stackTraceLimit = this._originalErrorStackTraceLimit;
this._isRavenInstalled = false;

@@ -496,5 +498,6 @@

if (!this._globalServer) {
if (!this.ravenNotConfiguredError)
if (!this.ravenNotConfiguredError) {
this.ravenNotConfiguredError = true;
this._logDebug('error', 'Error: Raven has not been configured.');
this.ravenNotConfiguredError = true;
}
return false;

@@ -515,2 +518,37 @@ }

showReportDialog: function (options) {
if (!window.document) // doesn't work without a document (React native)
return;
options = options || {};
var lastEventId = options.eventId || this.lastEventId();
if (!lastEventId) {
throw new RavenConfigError('Missing eventId');
}
var dsn = options.dsn || this._dsn;
if (!dsn) {
throw new RavenConfigError('Missing DSN');
}
var encode = encodeURIComponent;
var qs = '';
qs += '?eventId=' + encode(lastEventId);
qs += '&dsn=' + encode(dsn);
var user = options.user || this._globalContext.user;
if (user) {
if (user.name) qs += '&name=' + encode(user.name);
if (user.email) qs += '&email=' + encode(user.email);
}
var globalServer = this._getGlobalServer(this._parseDSN(dsn));
var script = document.createElement('script');
script.async = true;
script.src = globalServer + '/api/embed/error-page/' + qs;
(document.head || document.body).appendChild(script);
},
/**** Private functions ****/

@@ -557,3 +595,5 @@ _ignoreNextOnError: function () {

document.fireEvent('on' + evt.eventType.toLowerCase(), evt);
} catch(e) {}
} catch(e) {
// Do nothing
}
}

@@ -568,5 +608,8 @@ },

function fill(obj, name, replacement) {
function fill(obj, name, replacement, noUndo) {
var orig = obj[name];
obj[name] = replacement(orig);
if (!noUndo) {
self._wrappedBuiltIns.push([obj, name, orig]);
}
}

@@ -579,3 +622,3 @@

var originalCallback = args[0];
if (typeof (originalCallback) === 'function') {
if (isFunction(originalCallback)) {
args[0] = self.wrap(originalCallback);

@@ -616,3 +659,5 @@ }

}
} catch (err) {} // can sometimes get 'Permission denied to access property "handle Event'
} catch (err) {
// can sometimes get 'Permission denied to access property "handle Event'
}
return orig.call(this, evt, self.wrap(fn), capture, secure);

@@ -630,28 +675,42 @@ };

var origOpen;
if ('XMLHttpRequest' in window) {
origOpen = XMLHttpRequest.prototype.open;
XMLHttpRequest.prototype.open = function (data) { // preserve arity
var xhr = this;
'onreadystatechange onload onerror onprogress'.replace(/\w+/g, function (prop) {
if (prop in xhr && Object.prototype.toString.call(xhr[prop]) === '[object Function]') {
fill(xhr, prop, function (orig) {
return self.wrap(orig);
});
}
});
origOpen.apply(this, arguments);
};
fill(XMLHttpRequest.prototype, 'send', function(origSend) {
return function (data) { // preserve arity
var xhr = this;
'onreadystatechange onload onerror onprogress'.replace(/\w+/g, function (prop) {
if (prop in xhr && Object.prototype.toString.call(xhr[prop]) === '[object Function]') {
fill(xhr, prop, function (orig) {
return self.wrap(orig);
}, true /* noUndo */); // don't track filled methods on XHR instances
}
});
return origSend.apply(this, arguments);
};
});
}
var $ = window.jQuery || window.$;
var origReady;
if ($ && $.fn && $.fn.ready) {
origReady = $.fn.ready;
$.fn.ready = function ravenjQueryReadyWrapper(fn) {
return origReady.call(this, self.wrap(fn));
};
fill($.fn, 'ready', function (orig) {
return function (fn) {
return orig.call(this, self.wrap(fn));
};
});
}
},
_restoreBuiltIns: function () {
// restore any wrapped builtins
var builtin;
while (this._wrappedBuiltIns.length) {
builtin = this._wrappedBuiltIns.shift();
var obj = builtin[0],
name = builtin[1],
orig = builtin[2];
obj[name] = orig;
}
},
_drainPlugins: function() {

@@ -685,2 +744,20 @@ var self = this;

_getGlobalServer: function(uri) {
// assemble the endpoint from the uri pieces
var globalServer = '//' + uri.host +
(uri.port ? ':' + uri.port : '');
if (uri.protocol) {
globalServer = uri.protocol + ':' + globalServer;
}
return globalServer;
},
_handleOnErrorStackInfo: function() {
// if we are intentionally ignoring errors via onerror, bail out
if (!this._ignoreOnError) {
this._handleStackInfo.apply(this, arguments);
}
},
_handleStackInfo: function(stackInfo, options) {

@@ -709,3 +786,3 @@ var self = this;

stackInfo.lineno,
frames,
frames.slice(0, this._globalOptions.stackTraceLimit),
options

@@ -734,5 +811,5 @@ );

// first we check the global includePaths list.
(!!this._globalOptions.includePaths.test && !this._globalOptions.includePaths.test(normalized.filename)) ||
!!this._globalOptions.includePaths.test && !this._globalOptions.includePaths.test(normalized.filename) ||
// Now we check for fun, if the function name is Raven or TraceKit
/(Raven|TraceKit)\./.test(normalized['function']) ||
/(Raven|TraceKit)\./.test(normalized.function) ||
// finally, we do a last ditch effort and check for raven.min.js

@@ -785,3 +862,3 @@ /raven\.(min\.)?js$/.test(normalized.filename)

_processException: function(type, message, fileurl, lineno, frames, options) {
var stacktrace, i, fullMessage;
var stacktrace, fullMessage;

@@ -932,4 +1009,5 @@ if (!!this._globalOptions.ignoreErrors.test && this._globalOptions.ignoreErrors.test(message)) return;

var url = this._globalEndpoint;
(globalOptions.transport || this._makeRequest).call(this, {
url: this._globalServer,
url: url,
auth: {

@@ -945,3 +1023,3 @@ sentry_version: '7',

data: data,
src: self._globalServer
src: url
});

@@ -952,3 +1030,3 @@ },

data: data,
src: self._globalServer
src: url
});

@@ -1030,3 +1108,8 @@ }

if (this._originalConsoleMethods[level] && this.debug) {
this._originalConsoleMethods[level].apply(this._originalConsole, [].slice.call(arguments, 1));
// In IE<10 console methods do not have their own 'apply' method
Function.prototype.apply.call(
this._originalConsoleMethods[level],
this._originalConsole,
[].slice.call(arguments, 1)
);
}

@@ -1033,0 +1116,0 @@ },

@@ -22,3 +22,3 @@ 'use strict';

function isEmptyObject(what) {
for (var k in what) return false;
for (var _ in what) return false; // eslint-disable-line guard-for-in, no-unused-vars
return true;

@@ -65,3 +65,3 @@ }

function truncate(str, max) {
return str.length <= max ? str : str.substr(0, max) + '\u2026';
return !max || str.length <= max ? str : str.substr(0, max) + '\u2026';
}

@@ -92,3 +92,3 @@

// Taken from: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions
sources.push(pattern.replace(/([.*+?^=!:${}()|\[\]\/\\])/g, "\\$1"));
sources.push(pattern.replace(/([.*+?^=!:${}()|\[\]\/\\])/g, '\\$1'));
} else if (pattern && pattern.source) {

@@ -132,4 +132,4 @@ // If it's a regexp already, we want to extract the source

return (pad(arr[0]) + pad(arr[1]) + pad(arr[2]) + pad(arr[3]) + pad(arr[4]) +
pad(arr[5]) + pad(arr[6]) + pad(arr[7]));
return pad(arr[0]) + pad(arr[1]) + pad(arr[2]) + pad(arr[3]) + pad(arr[4]) +
pad(arr[5]) + pad(arr[6]) + pad(arr[7]);
} else {

@@ -139,3 +139,3 @@ // http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/2117523#2117523

var r = Math.random()*16|0,
v = c == 'x' ? r : (r&0x3|0x8);
v = c === 'x' ? r : r&0x3|0x8;
return v.toString(16);

@@ -142,0 +142,0 @@ });

@@ -10,5 +10,5 @@ /*global assert*/

}
}
};
// use setTimeout so stack trace doesn't go all the way back to mocha test runner
iframe.contentWindow.eval('origSetTimeout(' + execute.toString() + ');');
iframe.contentWindow.eval('window.originalBuiltIns.setTimeout.call(window, ' + execute.toString() + ');');
}

@@ -47,3 +47,3 @@

function () {
var ravenData = iframe.contentWindow.ravenData;
var ravenData = iframe.contentWindow.ravenData[0];
assert.equal(ravenData.message, 'Hello');

@@ -67,3 +67,3 @@ }

function () {
var ravenData = iframe.contentWindow.ravenData;
var ravenData = iframe.contentWindow.ravenData[0];
assert.isAbove(ravenData.exception.values[0].stacktrace.frames.length, 1);

@@ -74,3 +74,61 @@ }

});
describe('native', function () {
describe('window.onerror', function () {
it('should catch syntax errors', function (done) {
var iframe = this.iframe;
iframeExecute(iframe, done,
function () {
setTimeout(done);
eval('foo{};');
},
function () {
var ravenData = iframe.contentWindow.ravenData[0];
assert.isTrue(/SyntaxError/.test(ravenData.message)); // full message differs per-browser
assert.equal(ravenData.exception.values[0].stacktrace.frames.length, 1); // just one frame
}
);
});
it('should NOT catch an exception already caught via Raven.wrap', function (done) {
var iframe = this.iframe;
iframeExecute(iframe, done,
function () {
setTimeout(done);
Raven.wrap(function () {
foo();
})();
},
function () {
var ravenData = iframe.contentWindow.ravenData;
assert.equal(ravenData.length, 1); // one caught error
}
);
});
it('should catch an exception already caught [but rethrown] via Raven.captureException', function (done) {
// unlike Raven.wrap which ALWAYS re-throws, we don't know if the user will
// re-throw an exception passed to Raven.captureException, and so we cannot
// automatically suppress the next error caught through window.onerror
var iframe = this.iframe;
iframeExecute(iframe, done,
function () {
setTimeout(done);
try {
foo();
} catch (e) {
Raven.captureException(e);
throw e; // intentionally re-throw
}
},
function () {
var ravenData = iframe.contentWindow.ravenData;
assert.equal(ravenData.length, 2);
}
);
});
});
describe('wrapped built-ins', function () {
it('should capture exceptions from event listeners', function (done) {

@@ -99,3 +157,3 @@ var iframe = this.iframe;

function () {
var ravenData = iframe.contentWindow.ravenData;
var ravenData = iframe.contentWindow.ravenData[0];
assert.isAbove(ravenData.exception.values[0].stacktrace.frames.length, 2);

@@ -129,3 +187,3 @@ }

function () {
var ravenData = iframe.contentWindow.ravenData;
var ravenData = iframe.contentWindow.ravenData[0];
assert.equal(ravenData, null); // should never trigger error

@@ -147,3 +205,3 @@ }

function () {
var ravenData = iframe.contentWindow.ravenData;
var ravenData = iframe.contentWindow.ravenData[0];
assert.isAbove(ravenData.exception.values[0].stacktrace.frames.length, 2);

@@ -166,3 +224,3 @@ }

function () {
var ravenData = iframe.contentWindow.ravenData;
var ravenData = iframe.contentWindow.ravenData[0];
assert.isAbove(ravenData.exception.values[0].stacktrace.frames.length, 2);

@@ -186,3 +244,3 @@ }

function () {
var ravenData = iframe.contentWindow.ravenData;
var ravenData = iframe.contentWindow.ravenData[0];
assert.isAbove(ravenData.exception.values[0].stacktrace.frames.length, 2);

@@ -198,12 +256,20 @@ }

function () {
setTimeout(done);
var xhr = new XMLHttpRequest();
// intentionally assign event handlers *after* XMLHttpRequest.prototype.open,
// since this is what jQuery does
// https://github.com/jquery/jquery/blob/master/src/ajax/xhr.js#L37
xhr.open('GET', 'example.json')
xhr.onreadystatechange = function () {
setTimeout(done);
// replace onreadystatechange with no-op so exception doesn't
// fire more than once as XHR changes loading state
xhr.onreadystatechange = function () {};
foo();
}
xhr.open('GET', 'example.json');
};
xhr.send();
},
function () {
var ravenData = iframe.contentWindow.ravenData;
var ravenData = iframe.contentWindow.ravenData[0];
// # of frames alter significantly between chrome/firefox & safari

@@ -214,3 +280,75 @@ assert.isAbove(ravenData.exception.values[0].stacktrace.frames.length, 2);

});
it('should capture exceptions from $.fn.ready (jQuery)', function (done) {
var iframe = this.iframe;
iframeExecute(iframe, done,
function () {
setTimeout(done);
$(function () {
foo();
});
},
function () {
var ravenData = iframe.contentWindow.ravenData[0];
// # of frames alter significantly between chrome/firefox & safari
assert.isAbove(ravenData.exception.values[0].stacktrace.frames.length, 2);
}
);
});
});
describe('uninstall', function () {
it('should restore original built-ins', function (done) {
var iframe = this.iframe;
iframeExecute(iframe, done,
function () {
setTimeout(done);
Raven.uninstall();
window.isRestored = {
setTimeout: originalBuiltIns.setTimeout === setTimeout,
setInterval: originalBuiltIns.setInterval === setInterval,
requestAnimationFrame: originalBuiltIns.requestAnimationFrame === requestAnimationFrame,
xhrProtoOpen: originalBuiltIns.xhrProtoOpen === XMLHttpRequest.prototype.open,
headAddEventListener: originalBuiltIns.headAddEventListener === document.body.addEventListener,
headRemoveEventListener: originalBuiltIns.headRemoveEventListener === document.body.removeEventListener
};
},
function () {
var isRestored = iframe.contentWindow.isRestored;
assert.isTrue(isRestored.setTimeout);
assert.isTrue(isRestored.setInterval);
assert.isTrue(isRestored.requestAnimationFrame);
assert.isTrue(isRestored.xhrProtoOpen);
assert.isTrue(isRestored.headAddEventListener);
assert.isTrue(isRestored.headRemoveEventListener);
}
);
});
it('should not restore XMLHttpRequest instance methods', function (done) {
var iframe = this.iframe;
iframeExecute(iframe, done,
function () {
setTimeout(done);
var xhr = new XMLHttpRequest();
var origOnReadyStateChange = xhr.onreadystatechange = function () {};
xhr.open('GET', '/foo/');
xhr.abort();
Raven.uninstall();
window.isOnReadyStateChangeRestored = xhr.onready === origOnReadyStateChange;
},
function () {
assert.isFalse(iframe.contentWindow.isOnReadyStateChangeRestored);
}
);
});
});
});

@@ -89,2 +89,3 @@ /*jshint mocha:true*/

assert.equal(truncate('lol', 3), 'lol');
assert.equal(truncate(new Array(1000).join('f'), 0), new Array(1000).join('f'));
});

@@ -91,0 +92,0 @@ });

@@ -1,2 +0,1 @@

/*jshint mocha:true*/
/*global Mocha, assert*/

@@ -14,8 +13,8 @@ 'use strict';

" Error: \n" +
" at new <anonymous> (http://example.com/js/test.js:63)\n" + // stack[0]
" at namedFunc0 (http://example.com/js/script.js:10)\n" + // stack[1]
" at http://example.com/js/test.js:65\n" + // stack[2]
" at namedFunc2 (http://example.com/js/script.js:20)\n" + // stack[3]
" at http://example.com/js/test.js:67\n" + // stack[4]
" at namedFunc4 (http://example.com/js/script.js:100001)"; // stack[5]
" at new <anonymous> (http://example.com/js/test.js:63:1)\n" + // stack[0]
" at namedFunc0 (http://example.com/js/script.js:10:2)\n" + // stack[1]
" at http://example.com/js/test.js:65:10\n" + // stack[2]
" at namedFunc2 (http://example.com/js/script.js:20:5)\n" + // stack[3]
" at http://example.com/js/test.js:67:5\n" + // stack[4]
" at namedFunc4 (http://example.com/js/script.js:100001:10002)"; // stack[5]
var mock_err = { stack: stack_str };

@@ -27,8 +26,57 @@ var trace = TraceKit.computeStackTrace.computeStackTraceFromStackProp(mock_err);

assert.equal(trace.stack[0].func, 'new <anonymous>');
assert.equal(trace.stack[0].url, 'http://example.com/js/test.js');
assert.equal(trace.stack[0].line, 63);
assert.equal(trace.stack[0].column, 1);
assert.equal(trace.stack[1].func, 'namedFunc0');
assert.equal(trace.stack[1].url, 'http://example.com/js/script.js');
assert.equal(trace.stack[1].line, 10);
assert.equal(trace.stack[1].column, 2);
assert.equal(trace.stack[2].func, '?');
assert.equal(trace.stack[2].url, 'http://example.com/js/test.js');
assert.equal(trace.stack[2].line, 65);
assert.equal(trace.stack[2].column, 10);
assert.equal(trace.stack[3].func, 'namedFunc2');
assert.equal(trace.stack[3].url, 'http://example.com/js/script.js');
assert.equal(trace.stack[3].line, 20);
assert.equal(trace.stack[3].column, 5);
assert.equal(trace.stack[4].func, '?');
assert.equal(trace.stack[4].url, 'http://example.com/js/test.js');
assert.equal(trace.stack[4].line, 67);
assert.equal(trace.stack[4].column, 5);
assert.equal(trace.stack[5].func, 'namedFunc4');
assert.equal(trace.stack[5].url, 'http://example.com/js/script.js');
assert.equal(trace.stack[5].line, 100001);
assert.equal(trace.stack[5].column, 10002);
});
it('should handle eval/anonymous strings in Chrome 46', function () {
var stack_str = "" +
"ReferenceError: baz is not defined\n" +
" at bar (http://example.com/js/test.js:19:7)\n" +
" at foo (http://example.com/js/test.js:23:7)\n" +
" at eval (eval at <anonymous> (http://example.com/js/test.js:26:5), <anonymous>:1:26)\n";
var mock_err = { stack: stack_str };
var trace = TraceKit.computeStackTrace.computeStackTraceFromStackProp(mock_err);
assert.equal(trace.stack[0].func, 'bar');
assert.equal(trace.stack[0].url, 'http://example.com/js/test.js');
assert.equal(trace.stack[0].line, 19);
assert.equal(trace.stack[0].column, 7);
assert.equal(trace.stack[1].func, 'foo');
assert.equal(trace.stack[1].url, 'http://example.com/js/test.js');
assert.equal(trace.stack[1].line, 23);
assert.equal(trace.stack[1].column, 7);
assert.equal(trace.stack[2].func, 'eval');
// TODO: fix nested evals
assert.equal(trace.stack[2].url, 'eval at <anonymous> (http://example.com/js/test.js:26:5), <anonymous>');
assert.equal(trace.stack[2].line, 1); // second set of line/column numbers used
assert.equal(trace.stack[2].column, 26);
});
});

@@ -35,0 +83,0 @@

@@ -618,5 +618,5 @@ 'use strict';

var chrome = /^\s*at (.*?) ?\(?((?:(?:file|https?|chrome-extension):.*?)|<anonymous>):(\d+)(?::(\d+))?\)?\s*$/i,
gecko = /^\s*(.*?)(?:\((.*?)\))?@((?:file|https?|chrome).*?):(\d+)(?::(\d+))?\s*$/i,
winjs = /^\s*at (?:((?:\[object object\])?.+) )?\(?((?:ms-appx|http|https):.*?):(\d+)(?::(\d+))?\)?\s*$/i,
var chrome = /^\s*at (.*?) ?\(((?:file|https?|blob|chrome-extension|native|eval|<anonymous>).*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i,
gecko = /^\s*(.*?)(?:\((.*?)\))?(?:^|@)((?:file|https?|blob|chrome|\[).*?)(?::(\d+))?(?::(\d+))?\s*$/i,
winjs = /^\s*at (?:((?:\[object object\])?.+) )?\(?((?:ms-appx|https?|blob):.*?):(\d+)(?::(\d+))?\)?\s*$/i,
lines = ex.stack.split('\n'),

@@ -629,23 +629,26 @@ stack = [],

for (var i = 0, j = lines.length; i < j; ++i) {
if ((parts = gecko.exec(lines[i]))) {
if ((parts = chrome.exec(lines[i]))) {
var isNative = parts[2] && parts[2].indexOf('native') !== -1;
element = {
'url': parts[3],
'url': !isNative ? parts[2] : null,
'func': parts[1] || UNKNOWN_FUNCTION,
'args': parts[2] ? parts[2].split(',') : '',
'line': +parts[4],
'column': parts[5] ? +parts[5] : null
'args': isNative ? [parts[2]] : [],
'line': parts[3] ? +parts[3] : null,
'column': parts[4] ? +parts[4] : null
};
} else if ((parts = chrome.exec(lines[i]))) {
} else if ( parts = winjs.exec(lines[i]) ) {
element = {
'url': parts[2],
'func': parts[1] || UNKNOWN_FUNCTION,
'args': [],
'line': +parts[3],
'column': parts[4] ? +parts[4] : null
};
} else if ((parts = winjs.exec(lines[i]))) {
} else if ((parts = gecko.exec(lines[i]))) {
element = {
'url': parts[2],
'url': parts[3],
'func': parts[1] || UNKNOWN_FUNCTION,
'line': +parts[3],
'column': parts[4] ? +parts[4] : null
'args': parts[2] ? parts[2].split(',') : [],
'line': parts[4] ? +parts[4] : null,
'column': parts[5] ? +parts[5] : null
};

@@ -701,17 +704,29 @@ } else {

var testRE = / line (\d+), column (\d+) in (?:<anonymous function: ([^>]+)>|([^\)]+))\((.*)\) in (.*):\s*$/i,
lines = stacktrace.split('\n'),
stack = [],
parts;
var opera10Regex = / line (\d+).*script (?:in )?(\S+)(?:: in function (\S+))?$/i,
opera11Regex = / line (\d+), column (\d+)\s*(?:in (?:<anonymous function: ([^>]+)>|([^\)]+))\((.*)\))? in (.*):\s*$/i,
lines = stacktrace.split('\n'),
stack = [],
parts;
for (var i = 0, j = lines.length; i < j; i += 2) {
if ((parts = testRE.exec(lines[i]))) {
var element = {
for (var line = 0; line < lines.length; line += 2) {
var element = null;
if ((parts = opera10Regex.exec(lines[line]))) {
element = {
'url': parts[2],
'line': +parts[1],
'column': null,
'func': parts[3],
'args':[]
};
} else if ((parts = opera11Regex.exec(lines[line]))) {
element = {
'url': parts[6],
'line': +parts[1],
'column': +parts[2],
'func': parts[3] || parts[4],
'args': parts[5] ? parts[5].split(',') : [],
'url': parts[6]
'args': parts[5] ? parts[5].split(',') : []
};
}
if (element) {
if (!element.func && element.line) {

@@ -727,3 +742,3 @@ element.func = guessFunctionName(element.url, element.line);

if (!element.context) {
element.context = [lines[i + 1]];
element.context = [lines[line + 1]];
}

@@ -776,4 +791,4 @@

var lineRE1 = /^\s*Line (\d+) of linked script ((?:file|https?)\S+)(?:: in function (\S+))?\s*$/i,
lineRE2 = /^\s*Line (\d+) of inline#(\d+) script in ((?:file|https?)\S+)(?:: in function (\S+))?\s*$/i,
var lineRE1 = /^\s*Line (\d+) of linked script ((?:file|https?|blob)\S+)(?:: in function (\S+))?\s*$/i,
lineRE2 = /^\s*Line (\d+) of inline#(\d+) script in ((?:file|https?|blob)\S+)(?:: in function (\S+))?\s*$/i,
lineRE3 = /^\s*Line (\d+) of function script\s*$/i,

@@ -783,25 +798,27 @@ stack = [],

inlineScriptBlocks = [],
parts,
i,
len,
source;
parts;
for (i in scripts) {
if (hasKey(scripts, i) && !scripts[i].src) {
inlineScriptBlocks.push(scripts[i]);
for (var s in scripts) {
if (hasKey(scripts, s) && !scripts[s].src) {
inlineScriptBlocks.push(scripts[s]);
}
}
for (i = 2, len = lines.length; i < len; i += 2) {
for (var line = 2; line < lines.length; line += 2) {
var item = null;
if ((parts = lineRE1.exec(lines[i]))) {
if ((parts = lineRE1.exec(lines[line]))) {
item = {
'url': parts[2],
'func': parts[3],
'line': +parts[1]
'args': [],
'line': +parts[1],
'column': null
};
} else if ((parts = lineRE2.exec(lines[i]))) {
} else if ((parts = lineRE2.exec(lines[line]))) {
item = {
'url': parts[3],
'func': parts[4]
'func': parts[4],
'args': [],
'line': +parts[1],
'column': null // TODO: Check to see if inline#1 (+parts[2]) points to the script number or column number.
};

@@ -811,3 +828,3 @@ var relativeLine = (+parts[1]); // relative to the start of the <SCRIPT> block

if (script) {
source = getSource(item.url);
var source = getSource(item.url);
if (source) {

@@ -821,11 +838,12 @@ source = source.join('\n');

}
} else if ((parts = lineRE3.exec(lines[i]))) {
var url = window.location.href.replace(/#.*$/, ''),
line = parts[1];
var re = new RegExp(escapeCodeAsRegExpForMatchingInsideHTML(lines[i + 1]));
source = findSourceInUrls(re, [url]);
} else if ((parts = lineRE3.exec(lines[line]))) {
var url = window.location.href.replace(/#.*$/, '');
var re = new RegExp(escapeCodeAsRegExpForMatchingInsideHTML(lines[line + 1]));
var src = findSourceInUrls(re, [url]);
item = {
'url': url,
'line': source ? source.line : line,
'func': ''
'func': '',
'args': [],
'line': src ? src.line : parts[1],
'column': null
};

@@ -840,7 +858,7 @@ }

var midline = (context ? context[Math.floor(context.length / 2)] : null);
if (context && midline.replace(/^\s*/, '') === lines[i + 1].replace(/^\s*/, '')) {
if (context && midline.replace(/^\s*/, '') === lines[line + 1].replace(/^\s*/, '')) {
item.context = context;
} else {
// if (context) alert("Context mismatch. Correct midline:\n" + lines[i+1] + "\n\nMidline:\n" + midline + "\n\nContext:\n" + context.join("\n") + "\n\nURL:\n" + item.url);
item.context = [lines[i + 1]];
item.context = [lines[line + 1]];
}

@@ -850,2 +868,3 @@ stack.push(item);

}
if (!stack.length) {

@@ -852,0 +871,0 @@ return null; // could not parse multiline exception message as Opera stack trace

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is too big to display

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc