{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///webpack/bootstrap 82ef58b124dfd7b44b5a","webpack:///jackdaw.min.js","webpack:///./lib/jackdaw.js"],"names":["root","factory","exports","module","define","amd","this","__webpack_require__","JackdawError","message","name","Jackdaw","dsn","options","config","_dsnObject","_parseDsn","_globalOptions","objectMerge","project","projectId","maxBreadcrumbs","Math","max","min","_globalEndpoint","endpoint","_globalTransport","transport","defaultTransport","_isDOMError","value","Object","prototype","toString","call","_isDOMException","_logDebug","level","debug","console","log","_resetBackoff","_backoffDuration","_backoffStart","_shouldBackoff","now","_setBackoffState","request","status","retry","getResponseHeader","parseInt","e","_isRepeatData","current","_lastData","stacktrace","_isSameStacktrace","exception","_isSameException","fingerprint","Boolean","stringify","_isSameMessageEvent","_send","data","callback","transportMethod","tag","extra","_startTime","_breadcrumbs","length","breadcrumbs","values","slice","_lastEventId","event_id","uuid4","_lastCapturedException","_self","addBreadcrumb","category","type","url","onSuccess","onError","err","retObj","DSN_REGEX","match","exec","protocol","user","pass","host","port","_traceKitComputeStackTrace","ex","depth","_getLocationHref","_document","location","href","_traceKitAugmentStackTraceWithInitialElement","stackInfo","lineNo","initial","line","incomplete","func","stack","unshift","partial","_traceKitComputeStackTraceByWalkingCallerChain","parts","item","functionName","funcs","recursion","curr","caller","column","input","substring","indexOf","push","splice","result","sourceURL","fileName","lineNumber","description","submatch","element","isEval","chrome","winjs","gecko","geckoEval","chromeEval","lines","split","i","j","isNative","args","columnNumber","_prepareStackFrames","_normalizeStackFrame","frame","stackInfoUrl","normalized","filename","lineno","colno","frames","each","trimHeadFrames","in_app","_processException","fileurl","reverse","ex1","ex2","isOnlyOneTruthy","isBothUndefined","stack1","stack2","frames1","frames2","undefined","a","b","currentMessage","previousMessage","opts","_window","XMLHttpRequest","hasWithCredentialsProperty","XDomainRequest","onreadystatechange","readyState","replace","onload","onerror","open","send","isUndefined","what","c","r","random","obj","JSON","_stringifyPonyfill","t","String","n","v","json","arr","constructor","Array","obj1","obj2","key","hasOwnProperty","Date","_instanceMap","logger","platform","headers","_navigator","userAgent","referrer","sdk","version","crumb","timestamp","captureMessage","msg","captureException","error","lastException","lastData","lastEventId","_typeof","Symbol","iterator","window","global","self","document","navigator","Error"],"mappings":"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","file":"jackdaw.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Jackdaw\"] = factory();\n\telse\n\t\troot[\"Jackdaw\"] = factory();\n})(this, function() {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 82ef58b124dfd7b44b5a","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Jackdaw\"] = factory();\n\telse\n\t\troot[\"Jackdaw\"] = factory();\n})(this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\t\n\t/* global __NAMESPACE__, __PACKAGE__, __VERSION__, global, self */\n\t\n\tvar _window = typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\tvar _document = _window.document;\n\tvar _navigator = _window.navigator;\n\t\n\tif (!_window[(\"Jackdaw\")]) {\n\t _window[(\"Jackdaw\")] = Jackdaw;\n\t}\n\t\n\tfunction JackdawError(message) {\n\t this.name = 'JackdawError';\n\t this.message = message;\n\t}\n\t\n\tJackdawError.prototype = new Error();\n\tJackdawError.prototype.constructor = JackdawError;\n\t\n\tfunction Jackdaw(dsn, options) {\n\t if (this instanceof Jackdaw === false) {\n\t return new Jackdaw(dsn, options);\n\t }\n\t\n\t if (!dsn) {\n\t throw new JackdawError('All I want is a public DSN string');\n\t }\n\t\n\t var _instanceMap = Jackdaw._instanceMap = Jackdaw._instanceMap || {};\n\t\n\t if (_instanceMap[dsn]) {\n\t options && _instanceMap[dsn].config(dsn, options);\n\t return _instanceMap[dsn];\n\t } else {\n\t _instanceMap[dsn] = this;\n\t }\n\t\n\t var _self = this;\n\t var _startTime = now();\n\t var _breadcrumbs = [];\n\t var _lastEventId = null;\n\t var _lastData = null;\n\t var _lastCapturedException = null;\n\t var _backoffDuration = 0;\n\t var _backoffStart = null;\n\t var _globalEndpoint = null;\n\t var _globalOptions = {\n\t logger: 'javascript',\n\t platform: 'javascript',\n\t request: {\n\t headers: {\n\t 'User-Agent': _navigator.userAgent\n\t },\n\t url: _document.location.href,\n\t referrer: _document.referrer\n\t },\n\t sdk: {\n\t name: (\"@kakao/jackdaw-js\"),\n\t version: (\"1.0.5\")\n\t },\n\t level: 'error',\n\t maxBreadcrumbs: 100,\n\t debug: false\n\t };\n\t var _globalTransport = defaultTransport;\n\t\n\t this.config = config;\n\t this.addBreadcrumb = function (obj) {\n\t var crumb = objectMerge({\n\t timestamp: now() / 1000\n\t }, obj);\n\t\n\t _breadcrumbs.push(crumb);\n\t if (_breadcrumbs.length > _globalOptions.maxBreadcrumbs) {\n\t _breadcrumbs.splice(0, _breadcrumbs.length - _globalOptions.maxBreadcrumbs);\n\t }\n\t\n\t return this;\n\t };\n\t this.captureMessage = function (msg, options, callback) {\n\t var transport = _globalTransport;\n\t\n\t if (!msg) {\n\t throw new JackdawError('Need something to send message');\n\t }\n\t\n\t if (options && typeof options.transport === 'function') {\n\t transport = options.transport;\n\t delete options.transport;\n\t }\n\t\n\t var data = objectMerge({\n\t message: msg + ''\n\t }, options || {});\n\t\n\t _send(data, callback, transport);\n\t\n\t return this;\n\t };\n\t this.captureException = function (ex, options, callback) {\n\t var transportMethod = _globalTransport;\n\t\n\t if (!ex) {\n\t throw new JackdawError('Need something to send exception or error');\n\t }\n\t\n\t if (options && typeof options.transport === 'function') {\n\t transportMethod = options.transport;\n\t delete options.transport;\n\t }\n\t\n\t if (ex.error) {\n\t ex = ex.error;\n\t }\n\t\n\t if (_isDOMError(ex) || _isDOMException(ex)) {\n\t var name = ex.name || (_isDOMError(ex) ? 'DOMError' : 'DOMException');\n\t var message = ex.message ? name + ': ' + ex.message : name;\n\t\n\t return this.captureMessage(message, objectMerge(options, {\n\t stacktrace: true,\n\t trimHeadFrames: options.trimHeadFrames + 1\n\t }));\n\t }\n\t\n\t _lastCapturedException = ex;\n\t options = objectMerge({\n\t trimHeadFrames: 0\n\t }, options || {});\n\t\n\t options.level = options.level || 'error';\n\t\n\t var stackInfo = _traceKitComputeStackTrace(ex);\n\t var frames = _prepareStackFrames(stackInfo);\n\t var data = _processException(stackInfo.name, stackInfo.message, stackInfo.url, stackInfo.lineno, frames, options);\n\t\n\t _send(data, callback, transportMethod);\n\t\n\t return this;\n\t };\n\t this.lastException = function () {\n\t return _lastCapturedException;\n\t };\n\t this.lastData = function () {\n\t return _lastData;\n\t };\n\t this.lastEventId = function () {\n\t return _lastEventId;\n\t };\n\t\n\t config(dsn, options);\n\t\n\t /** @private */\n\t function config(dsn, options) {\n\t options = options || {};\n\t\n\t var _dsnObject = _parseDsn(dsn);\n\t\n\t _globalOptions = objectMerge(_globalOptions, {\n\t project: _dsnObject.projectId\n\t });\n\t\n\t _globalOptions = objectMerge(_globalOptions, options || {});\n\t\n\t _globalOptions.maxBreadcrumbs = Math.max(0, Math.min(_globalOptions.maxBreadcrumbs, 100));\n\t\n\t // override global endpoint\n\t _globalEndpoint = _dsnObject.endpoint;\n\t\n\t // override global transport\n\t _globalTransport = _globalOptions.transport = options.transport || defaultTransport;\n\t\n\t return this;\n\t }\n\t\n\t /** @private */\n\t function _isDOMError(value) {\n\t return Object.prototype.toString.call(value) === '[object DOMError]';\n\t }\n\t\n\t /** @private */\n\t function _isDOMException(value) {\n\t return Object.prototype.toString.call(value) === '[object DOMException]';\n\t }\n\t\n\t /** @private */\n\t function _logDebug(level, message) {\n\t if (_globalOptions.debug) {\n\t console.log(message);\n\t }\n\t }\n\t\n\t /** @private */\n\t function _resetBackoff() {\n\t _backoffDuration = 0;\n\t _backoffStart = null;\n\t }\n\t\n\t /** @private */\n\t function _shouldBackoff() {\n\t return _backoffDuration && now() - _backoffStart < _backoffDuration;\n\t }\n\t\n\t /** @private */\n\t function _setBackoffState(request) {\n\t if (_shouldBackoff()) {\n\t _logDebug('warn', 'Should back off');\n\t return;\n\t }\n\t\n\t var status = request.status;\n\t\n\t // 400 - project_id doesn't exist or some other fatal\n\t // 401 - invalid/revoked dsn\n\t // 429 - too many requests\n\t if (!(status === 400 || status === 401 || status === 429)) return;\n\t\n\t var retry;\n\t try {\n\t retry = request.getResponseHeader('Retry-After');\n\t\n\t // Retry-After is returned in seconds\n\t retry = parseInt(retry, 10) * 1000;\n\t } catch (e) {\n\t /* eslint no-empty:0 */\n\t }\n\t\n\t if (retry) {\n\t // If Sentry server returned a Retry-After value, use it\n\t _backoffDuration = retry;\n\t } else {\n\t // Otherwise, double the last backoff duration (starts at 1 sec)\n\t _backoffDuration = _backoffDuration * 2 || 1000;\n\t }\n\t _backoffStart = now();\n\t }\n\t\n\t /** @private */\n\t function _isRepeatData(current) {\n\t if (!_lastData) {\n\t return false;\n\t }\n\t\n\t if (current.stacktrace || _lastData.stacktrace) {\n\t // Stacktrace interface (i.e. from captureMessage)\n\t return _isSameStacktrace(current.stacktrace, _lastData.stacktrace);\n\t } else if (current.exception || _lastData.exception) {\n\t // Exception interface (i.e. from captureException/onerror)\n\t return _isSameException(current.exception, _lastData.exception);\n\t } else if (current.fingerprint || _lastData.fingerprint) {\n\t return Boolean(current.fingerprint && _lastData.fingerprint) && stringify(current.fingerprint) === stringify(_lastData.fingerprint);\n\t }\n\t\n\t return _isSameMessageEvent(current.message, _lastData.message);\n\t }\n\t\n\t /** @private */\n\t function _send(data, callback, transportMethod) {\n\t if (_shouldBackoff()) {\n\t callback && callback(new JackdawError('Should back off'));\n\t return;\n\t }\n\t\n\t if (_isRepeatData(data)) {\n\t _logDebug('warn', 'Jackdaw dropped repeat event: ', data);\n\t callback && callback(new JackdawError('Dropped repeat event'));\n\t return;\n\t }\n\t\n\t data = objectMerge(_globalOptions, data);\n\t data.tag = data.tag || {};\n\t data.extra = data.extra || {};\n\t data.extra['session:duration'] = now() - _startTime;\n\t\n\t if (_breadcrumbs && _breadcrumbs.length > 0) {\n\t data.breadcrumbs = {\n\t values: [].slice.call(_breadcrumbs, 0)\n\t };\n\t }\n\t\n\t _lastEventId = data.event_id = uuid4();\n\t _lastData = data;\n\t\n\t _logDebug('debug', 'Jackdaw about to send:', data);\n\t\n\t var exception = _lastCapturedException = data.exception && data.exception.values[0];\n\t\n\t _self.addBreadcrumb({\n\t category: 'sentry',\n\t message: exception ? (exception.type ? exception.type + ': ' : '') + exception.value : data.message,\n\t event_id: _lastEventId,\n\t level: data.level || 'error' // presume error unless specified\n\t });\n\t\n\t try {\n\t transportMethod({\n\t url: _globalEndpoint,\n\t data: data,\n\t onSuccess: function onSuccess() {\n\t _resetBackoff();\n\t callback && callback();\n\t },\n\t onError: function onError(err) {\n\t _logDebug('error', 'Jackdaw transport failed to send: ', err);\n\t\n\t if (err.request) {\n\t _setBackoffState(err.request);\n\t }\n\t callback && callback(err);\n\t }\n\t });\n\t } catch (err) {\n\t callback && callback(err);\n\t }\n\t }\n\t\n\t /**\n\t * derived from https://github.com/getsentry/sentry-javascript/blob/master/packages/utils/src/dsn.ts#L58-L76\n\t * @private\n\t */\n\t function _parseDsn(dsn) {\n\t var DSN_REGEX = /^(?:(\\w+):)\\/\\/(?:(\\w+)(?::(\\w+))?@)([\\w.-]+)(?::(\\d+))?\\/(.+)/;\n\t var match = DSN_REGEX.exec(dsn);\n\t var retObj;\n\t\n\t if (!match) {\n\t return '';\n\t }\n\t\n\t retObj = {\n\t protocol: match[1],\n\t user: match[2],\n\t pass: match[3] || '',\n\t host: match[4],\n\t port: match[5] || '',\n\t projectId: match[6]\n\t };\n\t retObj.endpoint = retObj.protocol + '://' + retObj.host + (retObj.port ? ':' + retObj.port : '') + '/api/' + retObj.projectId + '/store/?sentry_version=7&sentry_key=' + retObj.user + (retObj.pass ? '&sentry_secret=' + retObj.pass : '');\n\t\n\t return retObj;\n\t }\n\t\n\t /**\n\t * derived from https://github.com/getsentry/sentry-javascript/blob/master/packages/raven-js\n\t * @private\n\t */\n\t function _traceKitComputeStackTrace(ex, depth) {\n\t var stack = null;\n\t depth = depth == null ? 0 : +depth;\n\t\n\t try {\n\t stack = _traceKitComputeStackTraceFromStackProp(ex);\n\t if (stack) {\n\t return stack;\n\t }\n\t } catch (e) {}\n\t\n\t try {\n\t stack = _traceKitComputeStackTraceByWalkingCallerChain(ex, depth + 1);\n\t if (stack) {\n\t return stack;\n\t }\n\t } catch (e) {}\n\t return {\n\t name: ex.name,\n\t message: ex.message,\n\t url: _getLocationHref()\n\t };\n\t\n\t function _getLocationHref() {\n\t try {\n\t return _document.location.href;\n\t } catch (e) {}\n\t return '';\n\t }\n\t\n\t function _traceKitComputeStackTraceFromStackProp(ex) {\n\t if (typeof ex.stack === 'undefined' || !ex.stack) return;\n\t\n\t var chrome = /^\\s*at (?:(.*?) ?\\()?((?:file|https?|blob|chrome-extension|native|eval|webpack||[a-z]:|\\/).*?)(?::(\\d+))?(?::(\\d+))?\\)?\\s*$/i;\n\t var winjs = /^\\s*at (?:((?:\\[object object\\])?.+) )?\\(?((?:file|ms-appx(?:-web)|https?|webpack|blob):.*?):(\\d+)(?::(\\d+))?\\)?\\s*$/i;\n\t // NOTE: blob urls are now supposed to always have an origin, therefore it's format\n\t // which is `blob:http://url/path/with-some-uuid`, is matched by `blob.*?:\\/` as well\n\t var gecko = /^\\s*(.*?)(?:\\((.*?)\\))?(?:^|@)((?:file|https?|blob|chrome|webpack|resource|moz-extension).*?:\\/.*?|\\[native code\\]|[^@]*bundle)(?::(\\d+))?(?::(\\d+))?\\s*$/i;\n\t // Used to additionally parse URL/line/column from eval frames\n\t var geckoEval = /(\\S+) line (\\d+)(?: > eval line \\d+)* > eval/i;\n\t var chromeEval = /\\((\\S*)(?::(\\d+))(?::(\\d+))\\)/;\n\t var lines = ex.stack.split('\\n');\n\t var stack = [];\n\t var submatch;\n\t var parts;\n\t var element;\n\t var isEval;\n\t\n\t for (var i = 0, j = lines.length; i < j; ++i) {\n\t if (parts = chrome.exec(lines[i])) {\n\t var isNative = parts[2] && parts[2].indexOf('native') === 0; // start of line\n\t isEval = parts[2] && parts[2].indexOf('eval') === 0; // start of line\n\t if (isEval && (submatch = chromeEval.exec(parts[2]))) {\n\t // throw out eval line/column and use top-most line/column number\n\t parts[2] = submatch[1]; // url\n\t parts[3] = submatch[2]; // line\n\t parts[4] = submatch[3]; // column\n\t }\n\t element = {\n\t url: !isNative ? parts[2] : null,\n\t func: parts[1] || '?',\n\t args: isNative ? [parts[2]] : [],\n\t line: parts[3] ? +parts[3] : null,\n\t column: parts[4] ? +parts[4] : null\n\t };\n\t } else if (parts = winjs.exec(lines[i])) {\n\t element = {\n\t url: parts[2],\n\t func: parts[1] || '?',\n\t args: [],\n\t line: +parts[3],\n\t column: parts[4] ? +parts[4] : null\n\t };\n\t } else if (parts = gecko.exec(lines[i])) {\n\t isEval = parts[3] && parts[3].indexOf(' > eval') > -1;\n\t if (isEval && (submatch = geckoEval.exec(parts[3]))) {\n\t // throw out eval line/column and use top-most line number\n\t parts[3] = submatch[1];\n\t parts[4] = submatch[2];\n\t parts[5] = null; // no column when eval\n\t } else if (i === 0 && !parts[5] && typeof ex.columnNumber !== 'undefined') {\n\t // FireFox uses this awesome columnNumber property for its top frame\n\t // Also note, Firefox's column number is 0-based and everything else expects 1-based,\n\t // so adding 1\n\t // NOTE: this hack doesn't work if top-most frame is eval\n\t stack[0].column = ex.columnNumber + 1;\n\t }\n\t element = {\n\t url: parts[3],\n\t func: parts[1] || '?',\n\t args: parts[2] ? parts[2].split(',') : [],\n\t line: parts[4] ? +parts[4] : null,\n\t column: parts[5] ? +parts[5] : null\n\t };\n\t } else {\n\t continue;\n\t }\n\t\n\t if (!element.func && element.line) {\n\t element.func = '?';\n\t }\n\t\n\t stack.push(element);\n\t }\n\t\n\t if (!stack.length) {\n\t return null;\n\t }\n\t\n\t return {\n\t name: ex.name,\n\t message: ex.message,\n\t url: _getLocationHref(),\n\t stack: stack\n\t };\n\t }\n\t\n\t function _traceKitAugmentStackTraceWithInitialElement(stackInfo, url, lineNo, message) {\n\t var initial = {\n\t url: url,\n\t line: lineNo\n\t };\n\t\n\t if (initial.url && initial.line) {\n\t stackInfo.incomplete = false;\n\t\n\t if (!initial.func) {\n\t initial.func = '?';\n\t }\n\t\n\t if (stackInfo.stack.length > 0) {\n\t if (stackInfo.stack[0].url === initial.url) {\n\t if (stackInfo.stack[0].line === initial.line) {\n\t return false; // already in stack trace\n\t } else if (!stackInfo.stack[0].line && stackInfo.stack[0].func === initial.func) {\n\t stackInfo.stack[0].line = initial.line;\n\t return false;\n\t }\n\t }\n\t }\n\t\n\t stackInfo.stack.unshift(initial);\n\t stackInfo.partial = true;\n\t return true;\n\t } else {\n\t stackInfo.incomplete = true;\n\t }\n\t\n\t return false;\n\t }\n\t\n\t function _traceKitComputeStackTraceByWalkingCallerChain(ex, depth) {\n\t var functionName = /function\\s+([_$a-zA-Z\\xA0-\\uFFFF][_$a-zA-Z0-9\\xA0-\\uFFFF]*)?\\s*\\(/i;\n\t var stack = [];\n\t var funcs = {};\n\t var recursion = false;\n\t var parts;\n\t var item;\n\t\n\t for (var curr = _traceKitComputeStackTraceByWalkingCallerChain.caller; curr && !recursion; curr = curr.caller) {\n\t if (curr === _traceKitComputeStackTrace /* || curr === TraceKit.report */) {\n\t // console.log('skipping internal function')\n\t continue;\n\t }\n\t\n\t item = {\n\t url: null,\n\t func: '?',\n\t line: null,\n\t column: null\n\t };\n\t\n\t if (curr.name) {\n\t item.func = curr.name;\n\t } else if (parts = functionName.exec(curr.toString())) {\n\t item.func = parts[1];\n\t }\n\t\n\t if (typeof item.func === 'undefined') {\n\t try {\n\t item.func = parts.input.substring(0, parts.input.indexOf('{'));\n\t } catch (e) {}\n\t }\n\t\n\t if (funcs['' + curr]) {\n\t recursion = true;\n\t } else {\n\t funcs['' + curr] = true;\n\t }\n\t\n\t stack.push(item);\n\t }\n\t\n\t if (depth) {\n\t // console.log('depth is ' + depth)\n\t // console.log('stack is ' + stack.length)\n\t stack.splice(0, depth);\n\t }\n\t\n\t var result = {\n\t name: ex.name,\n\t message: ex.message,\n\t url: _getLocationHref(),\n\t stack: stack\n\t };\n\t _traceKitAugmentStackTraceWithInitialElement(result, ex.sourceURL || ex.fileName, ex.line || ex.lineNumber, ex.message || ex.description);\n\t return result;\n\t }\n\t }\n\t\n\t /**\n\t * @description derived from https://github.com/getsentry/sentry-javascript/blob/master/packages/raven-js\n\t * @borrows each\n\t * @private\n\t */\n\t function _prepareStackFrames(stackInfo, options) {\n\t var defaultstackTraceLimit = 50;\n\t var frames = [];\n\t if (stackInfo.stack && stackInfo.stack.length) {\n\t each(stackInfo.stack, function (i, stack) {\n\t var frame = _normalizeStackFrame(stack, stackInfo.url);\n\t if (frame) {\n\t frames.push(frame);\n\t }\n\t });\n\t // e.g. frames captured via captureMessage throw\n\t if (options && options.trimHeadFrames) {\n\t for (var j = 0; j < options.trimHeadFrames && j < frames.length; j++) {\n\t frames[j].in_app = false;\n\t }\n\t }\n\t }\n\t\n\t frames = frames.slice(0, defaultstackTraceLimit);\n\t return frames;\n\t\n\t function _normalizeStackFrame(frame, stackInfoUrl) {\n\t // normalize the frames data\n\t var normalized = {\n\t filename: frame.url,\n\t lineno: frame.line,\n\t colno: frame.column,\n\t 'function': frame.func || '?'\n\t\n\t // Case when we don't have any information about the error\n\t // E.g. throwing a string or raw object, instead of an `Error` in Firefox\n\t // Generating synthetic error doesn't add any value here\n\t //\n\t // We should probably somehow let a user know that they should fix their code\n\t };if (!frame.url) {\n\t normalized.filename = stackInfoUrl; // fallback to whole stacks url from onerror handler\n\t }\n\t\n\t return normalized;\n\t }\n\t }\n\t\n\t /**\n\t * @description derived from https://github.com/getsentry/sentry-javascript/blob/master/packages/raven-js\n\t * @borrows objectMerge\n\t * @private\n\t */\n\t function _processException(type, message, fileurl, lineno, frames, options) {\n\t var stacktrace;\n\t\n\t if (frames && frames.length) {\n\t fileurl = frames[0].filename || fileurl;\n\t // Sentry expects frames oldest to newest\n\t // and JS sends them as newest to oldest\n\t frames.reverse();\n\t stacktrace = {\n\t frames: frames\n\t };\n\t } else if (fileurl) {\n\t stacktrace = {\n\t frames: [{\n\t filename: fileurl,\n\t lineno: lineno,\n\t in_app: true\n\t }]\n\t };\n\t }\n\t\n\t var data = objectMerge({ // sentry.interfaces.Exception\n\t exception: {\n\t values: [{\n\t type: type,\n\t value: message,\n\t stacktrace: stacktrace\n\t }]\n\t }\n\t }, options);\n\t\n\t var ex = data.exception.values[0];\n\t if (ex.type == null && ex.value === '') {\n\t ex.value = 'Unrecoverable error caught';\n\t }\n\t\n\t return data;\n\t }\n\t\n\t /**\n\t * @description derived from https://github.com/getsentry/sentry-javascript/blob/master/packages/raven-js\n\t * @private\n\t */\n\t function _isSameException(ex1, ex2) {\n\t if (isOnlyOneTruthy(ex1, ex2)) {\n\t return false;\n\t }\n\t\n\t ex1 = ex1.values[0];\n\t ex2 = ex2.values[0];\n\t\n\t if (ex1.type !== ex2.type || ex1.value !== ex2.value) {\n\t return false;\n\t }\n\t\n\t // in case both stacktraces are undefined, we can't decide so default to false\n\t if (isBothUndefined(ex1.stacktrace, ex2.stacktrace)) {\n\t return false;\n\t }\n\t\n\t return _isSameStacktrace(ex1.stacktrace, ex2.stacktrace);\n\t }\n\t\n\t /**\n\t * @description derived from https://github.com/getsentry/sentry-javascript/blob/master/packages/raven-js\n\t * @private\n\t */\n\t function _isSameStacktrace(stack1, stack2) {\n\t if (isOnlyOneTruthy(stack1, stack2)) {\n\t return false;\n\t }\n\t\n\t var frames1 = stack1.frames;\n\t var frames2 = stack2.frames;\n\t\n\t // Exit early if stacktrace is malformed\n\t if (frames1 === undefined || frames2 === undefined) {\n\t return false;\n\t }\n\t\n\t // Exit early if frame count differs\n\t if (frames1.length !== frames2.length) {\n\t return false;\n\t }\n\t\n\t // Iterate through every frame; bail out if anything differs\n\t var a, b;\n\t for (var i = 0; i < frames1.length; i++) {\n\t a = frames1[i];\n\t b = frames2[i];\n\t if (a.filename !== b.filename || a.lineno !== b.lineno || a.colno !== b.colno || a['function'] !== b['function']) {\n\t return false;\n\t }\n\t }\n\t return true;\n\t }\n\t\n\t /** @private */\n\t function _isSameMessageEvent(currentMessage, previousMessage) {\n\t // If neither event has a message property, they were both exceptions, so bail out\n\t if (!currentMessage && !previousMessage) {\n\t return false;\n\t }\n\t\n\t // If only one event has a stacktrace, but not the other one, they are not the same\n\t if (currentMessage && !previousMessage || !currentMessage && previousMessage) {\n\t return false;\n\t }\n\t\n\t return currentMessage === previousMessage;\n\t }\n\t\n\t /** @private */\n\t function defaultTransport(opts) {\n\t var url = opts.url;\n\t var request = _window.XMLHttpRequest && new _window.XMLHttpRequest();\n\t\n\t if (!request) {\n\t return false;\n\t }\n\t\n\t var hasWithCredentialsProperty = 'withCredentials' in request;\n\t var hasCORS = hasWithCredentialsProperty || typeof _window.XDomainRequest !== 'undefined';\n\t\n\t if (!hasCORS) {\n\t return false;\n\t }\n\t\n\t if (hasWithCredentialsProperty) {\n\t request.onreadystatechange = function () {\n\t if (request.readyState !== 4) {} else if (request.status === 200) {\n\t opts.onSuccess && opts.onSuccess();\n\t } else if (opts.onError) {\n\t var err = new JackdawError('Transport error code: ' + request.status);\n\t err.request = request;\n\t opts.onError(err);\n\t }\n\t };\n\t } else {\n\t request = new _window.XDomainRequest();\n\t url = url.replace(/^https?:/, '');\n\t\n\t // onreadystatechange not supported by XDomainRequest\n\t if (opts.onSuccess) {\n\t request.onload = opts.onSuccess;\n\t }\n\t if (opts.onError) {\n\t request.onerror = function () {\n\t var err = new JackdawError('Transport error code: XDomainRequest');\n\t err.request = request;\n\t opts.onError(err);\n\t };\n\t }\n\t }\n\t\n\t request.open('POST', url, true);\n\t request.send(stringify(opts.data));\n\t }\n\t\n\t /** @private */\n\t function isOnlyOneTruthy(a, b) {\n\t return !!(!!a ^ !!b);\n\t }\n\t\n\t /** @private */\n\t function isBothUndefined(a, b) {\n\t return isUndefined(a) && isUndefined(b);\n\t }\n\t\n\t /** @private */\n\t function isUndefined(what) {\n\t return what === void 0;\n\t }\n\t\n\t /** @private */\n\t function uuid4() {\n\t return 'xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\n\t var r = Math.random() * 16 | 0;\n\t var v = c === 'x' ? r : r & 0x3 | 0x8;\n\t return v.toString(16);\n\t });\n\t }\n\t\n\t /** @private */\n\t function stringify(obj) {\n\t return (JSON.stringify || function _stringifyPonyfill(obj) {\n\t var t = typeof obj === 'undefined' ? 'undefined' : _typeof(obj);\n\t if (t !== 'object' || obj === null) {\n\t // simple data type\n\t if (t === 'string') obj = '\"' + obj + '\"';\n\t return String(obj);\n\t } else {\n\t // recurse array or object\n\t var n,\n\t v,\n\t json = [],\n\t arr = obj && obj.constructor === Array; // eslint-disable-line one-var\n\t\n\t for (n in obj) {\n\t v = obj[n];\n\t t = typeof v === 'undefined' ? 'undefined' : _typeof(v);\n\t\n\t if (t === 'string') v = '\"' + v + '\"';else if (t === 'object' && v !== null) v = _stringifyPonyfill(v);\n\t\n\t json.push((arr ? '' : '\"' + n + '\":') + String(v));\n\t }\n\t\n\t return (arr ? '[' : '{') + String(json) + (arr ? ']' : '}');\n\t }\n\t })(obj);\n\t }\n\t\n\t /**\n\t * @borrows each\n\t * @private\n\t */\n\t function objectMerge(obj1, obj2) {\n\t if (!obj2) {\n\t return obj1;\n\t }\n\t each(obj2, function (key, value) {\n\t obj1[key] = value;\n\t });\n\t return obj1;\n\t }\n\t\n\t /** @private */\n\t function each(obj, callback) {\n\t var i, j;\n\t if (typeof callback !== 'function') {\n\t return;\n\t }\n\t if (!obj.length) {\n\t for (i in obj) {\n\t if (Object.prototype.hasOwnProperty.call(obj, i)) {\n\t // eslint-disable-next-line no-useless-call\n\t callback.call(null, i, obj[i]);\n\t }\n\t }\n\t } else {\n\t j = obj.length;\n\t if (j) {\n\t for (i = 0; i < j; i++) {\n\t // eslint-disable-next-line no-useless-call\n\t callback.call(null, i, obj[i]);\n\t }\n\t }\n\t }\n\t }\n\t\n\t /** @private */\n\t function now() {\n\t return +new Date();\n\t }\n\t}\n\t\n\tmodule.exports = Jackdaw;\n\n/***/ }\n/******/ ])\n});\n;\n\n\n// WEBPACK FOOTER //\n// jackdaw.min.js","/* global __NAMESPACE__, __PACKAGE__, __VERSION__, global, self */\n\nvar _window =\n typeof window !== 'undefined'\n ? window\n : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {}\nvar _document = _window.document\nvar _navigator = _window.navigator\n\nif (!_window[__NAMESPACE__]) {\n _window[__NAMESPACE__] = Jackdaw\n}\n\nfunction JackdawError (message) {\n this.name = 'JackdawError'\n this.message = message\n}\n\nJackdawError.prototype = new Error()\nJackdawError.prototype.constructor = JackdawError\n\nfunction Jackdaw (dsn, options) {\n if (this instanceof Jackdaw === false) {\n return new Jackdaw(dsn, options)\n }\n\n if (!dsn) {\n throw new JackdawError('All I want is a public DSN string')\n }\n\n var _instanceMap = Jackdaw._instanceMap = Jackdaw._instanceMap || {}\n\n if (_instanceMap[dsn]) {\n options && _instanceMap[dsn].config(dsn, options)\n return _instanceMap[dsn]\n } else {\n _instanceMap[dsn] = this\n }\n\n var _self = this\n var _startTime = now()\n var _breadcrumbs = []\n var _lastEventId = null\n var _lastData = null\n var _lastCapturedException = null\n var _backoffDuration = 0\n var _backoffStart = null\n var _globalEndpoint = null\n var _globalOptions = {\n logger: 'javascript',\n platform: 'javascript',\n request: {\n headers: {\n 'User-Agent': _navigator.userAgent\n },\n url: _document.location.href,\n referrer: _document.referrer\n },\n sdk: {\n name: __PACKAGE__,\n version: __VERSION__\n },\n level: 'error',\n maxBreadcrumbs: 100,\n debug: false\n }\n var _globalTransport = defaultTransport\n\n this.config = config\n this.addBreadcrumb = function (obj) {\n var crumb = objectMerge(\n {\n timestamp: now() / 1000\n },\n obj\n )\n\n _breadcrumbs.push(crumb)\n if (_breadcrumbs.length > _globalOptions.maxBreadcrumbs) {\n _breadcrumbs.splice(0, _breadcrumbs.length - _globalOptions.maxBreadcrumbs)\n }\n\n return this\n }\n this.captureMessage = function (msg, options, callback) {\n var transport = _globalTransport\n\n if (!msg) {\n throw new JackdawError('Need something to send message')\n }\n\n if (options && typeof options.transport === 'function') {\n transport = options.transport\n delete options.transport\n }\n\n var data = objectMerge(\n {\n message: (msg + '')\n },\n options || {}\n )\n\n _send(data, callback, transport)\n\n return this\n }\n this.captureException = function (ex, options, callback) {\n var transportMethod = _globalTransport\n\n if (!ex) {\n throw new JackdawError('Need something to send exception or error')\n }\n\n if (options && typeof options.transport === 'function') {\n transportMethod = options.transport\n delete options.transport\n }\n\n if (ex.error) {\n ex = ex.error\n }\n\n if (_isDOMError(ex) || _isDOMException(ex)) {\n var name = ex.name || (_isDOMError(ex) ? 'DOMError' : 'DOMException')\n var message = ex.message ? name + ': ' + ex.message : name\n\n return this.captureMessage(\n message,\n objectMerge(options, {\n stacktrace: true,\n trimHeadFrames: options.trimHeadFrames + 1\n })\n )\n }\n\n _lastCapturedException = ex\n options = objectMerge({\n trimHeadFrames: 0\n }, options || {})\n\n options.level = options.level || 'error'\n\n var stackInfo = _traceKitComputeStackTrace(ex)\n var frames = _prepareStackFrames(stackInfo)\n var data = _processException(\n stackInfo.name,\n stackInfo.message,\n stackInfo.url,\n stackInfo.lineno,\n frames,\n options\n )\n\n _send(data, callback, transportMethod)\n\n return this\n }\n this.lastException = function () {\n return _lastCapturedException\n }\n this.lastData = function () {\n return _lastData\n }\n this.lastEventId = function () {\n return _lastEventId\n }\n\n config(dsn, options)\n\n /** @private */\n function config (dsn, options) {\n options = options || {}\n\n var _dsnObject = _parseDsn(dsn)\n\n _globalOptions = objectMerge(_globalOptions, {\n project: _dsnObject.projectId\n })\n\n _globalOptions = objectMerge(_globalOptions, options || {})\n\n _globalOptions.maxBreadcrumbs = Math.max(0, Math.min(_globalOptions.maxBreadcrumbs, 100))\n\n // override global endpoint\n _globalEndpoint = _dsnObject.endpoint\n\n // override global transport\n _globalTransport = _globalOptions.transport = options.transport || defaultTransport\n\n return this\n }\n\n /** @private */\n function _isDOMError (value) {\n return Object.prototype.toString.call(value) === '[object DOMError]'\n }\n\n /** @private */\n function _isDOMException (value) {\n return Object.prototype.toString.call(value) === '[object DOMException]'\n }\n\n /** @private */\n function _logDebug (level, message) {\n if (_globalOptions.debug) {\n console.log(message)\n }\n }\n\n /** @private */\n function _resetBackoff () {\n _backoffDuration = 0\n _backoffStart = null\n }\n\n /** @private */\n function _shouldBackoff () {\n return _backoffDuration && now() - _backoffStart < _backoffDuration\n }\n\n /** @private */\n function _setBackoffState (request) {\n if (_shouldBackoff()) {\n _logDebug('warn', 'Should back off')\n return\n }\n\n var status = request.status\n\n // 400 - project_id doesn't exist or some other fatal\n // 401 - invalid/revoked dsn\n // 429 - too many requests\n if (!(status === 400 || status === 401 || status === 429)) return\n\n var retry\n try {\n retry = request.getResponseHeader('Retry-After')\n\n // Retry-After is returned in seconds\n retry = parseInt(retry, 10) * 1000\n } catch (e) {\n /* eslint no-empty:0 */\n }\n\n if (retry) {\n // If Sentry server returned a Retry-After value, use it\n _backoffDuration = retry\n } else {\n // Otherwise, double the last backoff duration (starts at 1 sec)\n _backoffDuration = _backoffDuration * 2 || 1000\n }\n _backoffStart = now()\n }\n\n /** @private */\n function _isRepeatData (current) {\n if (!_lastData) {\n return false\n }\n\n if (current.stacktrace || _lastData.stacktrace) {\n // Stacktrace interface (i.e. from captureMessage)\n return _isSameStacktrace(current.stacktrace, _lastData.stacktrace)\n } else if (current.exception || _lastData.exception) {\n // Exception interface (i.e. from captureException/onerror)\n return _isSameException(current.exception, _lastData.exception)\n } else if (current.fingerprint || _lastData.fingerprint) {\n return Boolean(current.fingerprint && _lastData.fingerprint) && stringify(current.fingerprint) === stringify(_lastData.fingerprint)\n }\n\n return _isSameMessageEvent(current.message, _lastData.message)\n }\n\n /** @private */\n function _send (data, callback, transportMethod) {\n if (_shouldBackoff()) {\n callback && callback(new JackdawError('Should back off'))\n return\n }\n\n if (_isRepeatData(data)) {\n _logDebug('warn', 'Jackdaw dropped repeat event: ', data)\n callback && callback(new JackdawError('Dropped repeat event'))\n return\n }\n\n data = objectMerge(_globalOptions, data)\n data.tag = data.tag || {}\n data.extra = data.extra || {}\n data.extra['session:duration'] = now() - _startTime\n\n if (_breadcrumbs && _breadcrumbs.length > 0) {\n data.breadcrumbs = {\n values: [].slice.call(_breadcrumbs, 0)\n }\n }\n\n _lastEventId = data.event_id = uuid4()\n _lastData = data\n\n _logDebug('debug', 'Jackdaw about to send:', data)\n\n var exception = _lastCapturedException = data.exception && data.exception.values[0]\n\n _self.addBreadcrumb({\n category: 'sentry',\n message: exception\n ? (exception.type ? exception.type + ': ' : '') + exception.value\n : data.message,\n event_id: _lastEventId,\n level: data.level || 'error' // presume error unless specified\n })\n\n try {\n transportMethod({\n url: _globalEndpoint,\n data: data,\n onSuccess: function () {\n _resetBackoff()\n callback && callback()\n },\n onError: function (err) {\n _logDebug('error', 'Jackdaw transport failed to send: ', err)\n\n if (err.request) {\n _setBackoffState(err.request)\n }\n callback && callback(err)\n }\n })\n } catch (err) {\n callback && callback(err)\n }\n }\n\n /**\n * derived from https://github.com/getsentry/sentry-javascript/blob/master/packages/utils/src/dsn.ts#L58-L76\n * @private\n */\n function _parseDsn (dsn) {\n var DSN_REGEX = /^(?:(\\w+):)\\/\\/(?:(\\w+)(?::(\\w+))?@)([\\w.-]+)(?::(\\d+))?\\/(.+)/\n var match = DSN_REGEX.exec(dsn)\n var retObj\n\n if (!match) {\n return ''\n }\n\n retObj = {\n protocol: match[1],\n user: match[2],\n pass: match[3] || '',\n host: match[4],\n port: match[5] || '',\n projectId: match[6]\n }\n retObj.endpoint = retObj.protocol + '://' + retObj.host + (retObj.port ? ':' + retObj.port : '') + '/api/' + retObj.projectId + '/store/?sentry_version=7&sentry_key=' + retObj.user + (retObj.pass ? '&sentry_secret=' + retObj.pass : '')\n\n return retObj\n }\n\n /**\n * derived from https://github.com/getsentry/sentry-javascript/blob/master/packages/raven-js\n * @private\n */\n function _traceKitComputeStackTrace (ex, depth) {\n var stack = null\n depth = depth == null ? 0 : +depth\n\n try {\n stack = _traceKitComputeStackTraceFromStackProp(ex)\n if (stack) {\n return stack\n }\n } catch (e) {\n }\n\n try {\n stack = _traceKitComputeStackTraceByWalkingCallerChain(ex, depth + 1)\n if (stack) {\n return stack\n }\n } catch (e) {\n }\n return {\n name: ex.name,\n message: ex.message,\n url: _getLocationHref()\n }\n\n function _getLocationHref () {\n try {\n return _document.location.href\n } catch (e) {\n }\n return ''\n }\n\n function _traceKitComputeStackTraceFromStackProp (ex) {\n if (typeof ex.stack === 'undefined' || !ex.stack) return\n\n var chrome = /^\\s*at (?:(.*?) ?\\()?((?:file|https?|blob|chrome-extension|native|eval|webpack||[a-z]:|\\/).*?)(?::(\\d+))?(?::(\\d+))?\\)?\\s*$/i\n var winjs = /^\\s*at (?:((?:\\[object object\\])?.+) )?\\(?((?:file|ms-appx(?:-web)|https?|webpack|blob):.*?):(\\d+)(?::(\\d+))?\\)?\\s*$/i\n // NOTE: blob urls are now supposed to always have an origin, therefore it's format\n // which is `blob:http://url/path/with-some-uuid`, is matched by `blob.*?:\\/` as well\n var gecko = /^\\s*(.*?)(?:\\((.*?)\\))?(?:^|@)((?:file|https?|blob|chrome|webpack|resource|moz-extension).*?:\\/.*?|\\[native code\\]|[^@]*bundle)(?::(\\d+))?(?::(\\d+))?\\s*$/i\n // Used to additionally parse URL/line/column from eval frames\n var geckoEval = /(\\S+) line (\\d+)(?: > eval line \\d+)* > eval/i\n var chromeEval = /\\((\\S*)(?::(\\d+))(?::(\\d+))\\)/\n var lines = ex.stack.split('\\n')\n var stack = []\n var submatch\n var parts\n var element\n var isEval\n\n for (var i = 0, j = lines.length; i < j; ++i) {\n if ((parts = chrome.exec(lines[i]))) {\n var isNative = parts[2] && parts[2].indexOf('native') === 0 // start of line\n isEval = parts[2] && parts[2].indexOf('eval') === 0 // start of line\n if (isEval && (submatch = chromeEval.exec(parts[2]))) {\n // throw out eval line/column and use top-most line/column number\n parts[2] = submatch[1] // url\n parts[3] = submatch[2] // line\n parts[4] = submatch[3] // column\n }\n element = {\n url: !isNative ? parts[2] : null,\n func: parts[1] || '?',\n args: isNative ? [parts[2]] : [],\n line: parts[3] ? +parts[3] : null,\n column: parts[4] ? +parts[4] : null\n }\n } else if ((parts = winjs.exec(lines[i]))) {\n element = {\n url: parts[2],\n func: parts[1] || '?',\n args: [],\n line: +parts[3],\n column: parts[4] ? +parts[4] : null\n }\n } else if ((parts = gecko.exec(lines[i]))) {\n isEval = parts[3] && parts[3].indexOf(' > eval') > -1\n if (isEval && (submatch = geckoEval.exec(parts[3]))) {\n // throw out eval line/column and use top-most line number\n parts[3] = submatch[1]\n parts[4] = submatch[2]\n parts[5] = null // no column when eval\n } else if (i === 0 && !parts[5] && typeof ex.columnNumber !== 'undefined') {\n // FireFox uses this awesome columnNumber property for its top frame\n // Also note, Firefox's column number is 0-based and everything else expects 1-based,\n // so adding 1\n // NOTE: this hack doesn't work if top-most frame is eval\n stack[0].column = ex.columnNumber + 1\n }\n element = {\n url: parts[3],\n func: parts[1] || '?',\n args: parts[2] ? parts[2].split(',') : [],\n line: parts[4] ? +parts[4] : null,\n column: parts[5] ? +parts[5] : null\n }\n } else {\n continue\n }\n\n if (!element.func && element.line) {\n element.func = '?'\n }\n\n stack.push(element)\n }\n\n if (!stack.length) {\n return null\n }\n\n return {\n name: ex.name,\n message: ex.message,\n url: _getLocationHref(),\n stack: stack\n }\n }\n\n function _traceKitAugmentStackTraceWithInitialElement (stackInfo, url, lineNo, message) {\n var initial = {\n url: url,\n line: lineNo\n }\n\n if (initial.url && initial.line) {\n stackInfo.incomplete = false\n\n if (!initial.func) {\n initial.func = '?'\n }\n\n if (stackInfo.stack.length > 0) {\n if (stackInfo.stack[0].url === initial.url) {\n if (stackInfo.stack[0].line === initial.line) {\n return false // already in stack trace\n } else if (\n !stackInfo.stack[0].line &&\n stackInfo.stack[0].func === initial.func\n ) {\n stackInfo.stack[0].line = initial.line\n return false\n }\n }\n }\n\n stackInfo.stack.unshift(initial)\n stackInfo.partial = true\n return true\n } else {\n stackInfo.incomplete = true\n }\n\n return false\n }\n\n function _traceKitComputeStackTraceByWalkingCallerChain (ex, depth) {\n var functionName = /function\\s+([_$a-zA-Z\\xA0-\\uFFFF][_$a-zA-Z0-9\\xA0-\\uFFFF]*)?\\s*\\(/i\n var stack = []\n var funcs = {}\n var recursion = false\n var parts\n var item\n\n for (var curr = _traceKitComputeStackTraceByWalkingCallerChain.caller; curr && !recursion; curr = curr.caller) {\n if (curr === _traceKitComputeStackTrace/* || curr === TraceKit.report */) {\n // console.log('skipping internal function')\n continue\n }\n\n item = {\n url: null,\n func: '?',\n line: null,\n column: null\n }\n\n if (curr.name) {\n item.func = curr.name\n } else if ((parts = functionName.exec(curr.toString()))) {\n item.func = parts[1]\n }\n\n if (typeof item.func === 'undefined') {\n try {\n item.func = parts.input.substring(0, parts.input.indexOf('{'))\n } catch (e) {\n }\n }\n\n if (funcs['' + curr]) {\n recursion = true\n } else {\n funcs['' + curr] = true\n }\n\n stack.push(item)\n }\n\n if (depth) {\n // console.log('depth is ' + depth)\n // console.log('stack is ' + stack.length)\n stack.splice(0, depth)\n }\n\n var result = {\n name: ex.name,\n message: ex.message,\n url: _getLocationHref(),\n stack: stack\n }\n _traceKitAugmentStackTraceWithInitialElement(\n result,\n ex.sourceURL || ex.fileName,\n ex.line || ex.lineNumber,\n ex.message || ex.description\n )\n return result\n }\n }\n\n /**\n * @description derived from https://github.com/getsentry/sentry-javascript/blob/master/packages/raven-js\n * @borrows each\n * @private\n */\n function _prepareStackFrames (stackInfo, options) {\n var defaultstackTraceLimit = 50\n var frames = []\n if (stackInfo.stack && stackInfo.stack.length) {\n each(stackInfo.stack, function (i, stack) {\n var frame = _normalizeStackFrame(stack, stackInfo.url)\n if (frame) {\n frames.push(frame)\n }\n })\n // e.g. frames captured via captureMessage throw\n if (options && options.trimHeadFrames) {\n for (var j = 0; j < options.trimHeadFrames && j < frames.length; j++) {\n frames[j].in_app = false\n }\n }\n }\n\n frames = frames.slice(0, defaultstackTraceLimit)\n return frames\n\n function _normalizeStackFrame (frame, stackInfoUrl) {\n // normalize the frames data\n var normalized = {\n filename: frame.url,\n lineno: frame.line,\n colno: frame.column,\n 'function': frame.func || '?'\n }\n\n // Case when we don't have any information about the error\n // E.g. throwing a string or raw object, instead of an `Error` in Firefox\n // Generating synthetic error doesn't add any value here\n //\n // We should probably somehow let a user know that they should fix their code\n if (!frame.url) {\n normalized.filename = stackInfoUrl // fallback to whole stacks url from onerror handler\n }\n\n return normalized\n }\n }\n\n /**\n * @description derived from https://github.com/getsentry/sentry-javascript/blob/master/packages/raven-js\n * @borrows objectMerge\n * @private\n */\n function _processException (type, message, fileurl, lineno, frames, options) {\n var stacktrace\n\n if (frames && frames.length) {\n fileurl = frames[0].filename || fileurl\n // Sentry expects frames oldest to newest\n // and JS sends them as newest to oldest\n frames.reverse()\n stacktrace = {\n frames: frames\n }\n } else if (fileurl) {\n stacktrace = {\n frames: [\n {\n filename: fileurl,\n lineno: lineno,\n in_app: true\n }\n ]\n }\n }\n\n var data = objectMerge(\n { // sentry.interfaces.Exception\n exception: {\n values: [\n {\n type: type,\n value: message,\n stacktrace: stacktrace\n }\n ]\n }\n },\n options\n )\n\n var ex = data.exception.values[0]\n if (ex.type == null && ex.value === '') {\n ex.value = 'Unrecoverable error caught'\n }\n\n return data\n }\n\n /**\n * @description derived from https://github.com/getsentry/sentry-javascript/blob/master/packages/raven-js\n * @private\n */\n function _isSameException (ex1, ex2) {\n if (isOnlyOneTruthy(ex1, ex2)) {\n return false\n }\n\n ex1 = ex1.values[0]\n ex2 = ex2.values[0]\n\n if (ex1.type !== ex2.type || ex1.value !== ex2.value) {\n return false\n }\n\n // in case both stacktraces are undefined, we can't decide so default to false\n if (isBothUndefined(ex1.stacktrace, ex2.stacktrace)) {\n return false\n }\n\n return _isSameStacktrace(ex1.stacktrace, ex2.stacktrace)\n }\n\n /**\n * @description derived from https://github.com/getsentry/sentry-javascript/blob/master/packages/raven-js\n * @private\n */\n function _isSameStacktrace (stack1, stack2) {\n if (isOnlyOneTruthy(stack1, stack2)) {\n return false\n }\n\n var frames1 = stack1.frames\n var frames2 = stack2.frames\n\n // Exit early if stacktrace is malformed\n if (frames1 === undefined || frames2 === undefined) {\n return false\n }\n\n // Exit early if frame count differs\n if (frames1.length !== frames2.length) {\n return false\n }\n\n // Iterate through every frame; bail out if anything differs\n var a, b\n for (var i = 0; i < frames1.length; i++) {\n a = frames1[i]\n b = frames2[i]\n if (a.filename !== b.filename ||\n a.lineno !== b.lineno ||\n a.colno !== b.colno ||\n a['function'] !== b['function']) {\n return false\n }\n }\n return true\n }\n\n /** @private */\n function _isSameMessageEvent (currentMessage, previousMessage) {\n // If neither event has a message property, they were both exceptions, so bail out\n if (!currentMessage && !previousMessage) {\n return false\n }\n\n // If only one event has a stacktrace, but not the other one, they are not the same\n if ((currentMessage && !previousMessage) || (!currentMessage && previousMessage)) {\n return false\n }\n\n return currentMessage === previousMessage\n }\n\n /** @private */\n function defaultTransport (opts) {\n var url = opts.url\n var request = _window.XMLHttpRequest && new _window.XMLHttpRequest()\n\n if (!request) {\n return false\n }\n\n var hasWithCredentialsProperty = 'withCredentials' in request\n var hasCORS = hasWithCredentialsProperty || typeof _window.XDomainRequest !== 'undefined'\n\n if (!hasCORS) {\n return false\n }\n\n if (hasWithCredentialsProperty) {\n request.onreadystatechange = function () {\n if (request.readyState !== 4) {\n\n } else if (request.status === 200) {\n opts.onSuccess && opts.onSuccess()\n } else if (opts.onError) {\n var err = new JackdawError('Transport error code: ' + request.status)\n err.request = request\n opts.onError(err)\n }\n }\n } else {\n request = new _window.XDomainRequest()\n url = url.replace(/^https?:/, '')\n\n // onreadystatechange not supported by XDomainRequest\n if (opts.onSuccess) {\n request.onload = opts.onSuccess\n }\n if (opts.onError) {\n request.onerror = function () {\n var err = new JackdawError('Transport error code: XDomainRequest')\n err.request = request\n opts.onError(err)\n }\n }\n }\n\n request.open('POST', url, true)\n request.send(stringify(opts.data))\n }\n\n /** @private */\n function isOnlyOneTruthy (a, b) {\n return !!(!!a ^ !!b)\n }\n\n /** @private */\n function isBothUndefined (a, b) {\n return isUndefined(a) && isUndefined(b)\n }\n\n /** @private */\n function isUndefined (what) {\n return what === void 0\n }\n\n /** @private */\n function uuid4 () {\n return 'xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\n var r = (Math.random() * 16) | 0\n var v = c === 'x' ? r : (r & 0x3) | 0x8\n return v.toString(16)\n })\n }\n\n /** @private */\n function stringify (obj) {\n return (JSON.stringify || function _stringifyPonyfill (obj) {\n var t = typeof (obj)\n if (t !== 'object' || obj === null) {\n // simple data type\n if (t === 'string') obj = '\"' + obj + '\"'\n return String(obj)\n } else {\n // recurse array or object\n var n, v, json = [], arr = (obj && obj.constructor === Array) // eslint-disable-line one-var\n\n for (n in obj) {\n v = obj[n]\n t = typeof (v)\n\n if (t === 'string') v = '\"' + v + '\"'\n else if (t === 'object' && v !== null) v = _stringifyPonyfill(v)\n\n json.push((arr ? '' : '\"' + n + '\":') + String(v))\n }\n\n return (arr ? '[' : '{') + String(json) + (arr ? ']' : '}')\n }\n })(obj)\n }\n\n /**\n * @borrows each\n * @private\n */\n function objectMerge (obj1, obj2) {\n if (!obj2) {\n return obj1\n }\n each(obj2, function (key, value) {\n obj1[key] = value\n })\n return obj1\n }\n\n /** @private */\n function each (obj, callback) {\n var i, j\n if (typeof callback !== 'function') {\n return\n }\n if (!obj.length) {\n for (i in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, i)) {\n // eslint-disable-next-line no-useless-call\n callback.call(null, i, obj[i])\n }\n }\n } else {\n j = obj.length\n if (j) {\n for (i = 0; i < j; i++) {\n // eslint-disable-next-line no-useless-call\n callback.call(null, i, obj[i])\n }\n }\n }\n }\n\n /** @private */\n function now () {\n return +new Date()\n }\n}\n\nmodule.exports = Jackdaw\n\n\n\n// WEBPACK FOOTER //\n// ./lib/jackdaw.js"],"sourceRoot":""}