{"remainingRequest":"/data/node_modules/babel-loader/lib/index.js!/data/node_modules/stacktrace-js/stacktrace.js","dependencies":[{"path":"/data/node_modules/stacktrace-js/stacktrace.js","mtime":1553611386808},{"path":"/data/.babelrc","mtime":1553611371556},{"path":"/data/node_modules/cache-loader/dist/cjs.js","mtime":1553611387012},{"path":"/data/node_modules/babel-loader/lib/index.js","mtime":1553611386992}],"contextDependencies":[],"result":["'use strict';\n\nvar _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\n(function (root, factory) {\n    'use strict';\n    // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n    /* istanbul ignore next */\n\n    if (typeof define === 'function' && define.amd) {\n        define('stacktrace', ['error-stack-parser', 'stack-generator', 'stacktrace-gps'], factory);\n    } else if ((typeof exports === 'undefined' ? 'undefined' : _typeof(exports)) === 'object') {\n        module.exports = factory(require('error-stack-parser'), require('stack-generator'), require('stacktrace-gps'));\n    } else {\n        root.StackTrace = factory(root.ErrorStackParser, root.StackGenerator, root.StackTraceGPS);\n    }\n})(undefined, function StackTrace(ErrorStackParser, StackGenerator, StackTraceGPS) {\n    var _options = {\n        filter: function filter(stackframe) {\n            // Filter out stackframes for this library by default\n            return (stackframe.functionName || '').indexOf('StackTrace$$') === -1 && (stackframe.functionName || '').indexOf('ErrorStackParser$$') === -1 && (stackframe.functionName || '').indexOf('StackTraceGPS$$') === -1 && (stackframe.functionName || '').indexOf('StackGenerator$$') === -1;\n        },\n        sourceCache: {}\n    };\n\n    var _generateError = function StackTrace$$GenerateError() {\n        try {\n            // Error must be thrown to get stack in IE\n            throw new Error();\n        } catch (err) {\n            return err;\n        }\n    };\n\n    /**\n     * Merge 2 given Objects. If a conflict occurs the second object wins.\n     * Does not do deep merges.\n     *\n     * @param {Object} first base object\n     * @param {Object} second overrides\n     * @returns {Object} merged first and second\n     * @private\n     */\n    function _merge(first, second) {\n        var target = {};\n\n        [first, second].forEach(function (obj) {\n            for (var prop in obj) {\n                if (obj.hasOwnProperty(prop)) {\n                    target[prop] = obj[prop];\n                }\n            }\n            return target;\n        });\n\n        return target;\n    }\n\n    function _isShapedLikeParsableError(err) {\n        return err.stack || err['opera#sourceloc'];\n    }\n\n    function _filtered(stackframes, filter) {\n        if (typeof filter === 'function') {\n            return stackframes.filter(filter);\n        }\n        return stackframes;\n    }\n\n    return {\n        /**\n         * Get a backtrace from invocation point.\n         *\n         * @param {Object} opts\n         * @returns {Array} of StackFrame\n         */\n        get: function StackTrace$$get(opts) {\n            var err = _generateError();\n            return _isShapedLikeParsableError(err) ? this.fromError(err, opts) : this.generateArtificially(opts);\n        },\n\n        /**\n         * Get a backtrace from invocation point.\n         * IMPORTANT: Does not handle source maps or guess function names!\n         *\n         * @param {Object} opts\n         * @returns {Array} of StackFrame\n         */\n        getSync: function StackTrace$$getSync(opts) {\n            opts = _merge(_options, opts);\n            var err = _generateError();\n            var stack = _isShapedLikeParsableError(err) ? ErrorStackParser.parse(err) : StackGenerator.backtrace(opts);\n            return _filtered(stack, opts.filter);\n        },\n\n        /**\n         * Given an error object, parse it.\n         *\n         * @param {Error} error object\n         * @param {Object} opts\n         * @returns {Promise} for Array[StackFrame}\n         */\n        fromError: function StackTrace$$fromError(error, opts) {\n            opts = _merge(_options, opts);\n            var gps = new StackTraceGPS(opts);\n            return new Promise(function (resolve) {\n                var stackframes = _filtered(ErrorStackParser.parse(error), opts.filter);\n                resolve(Promise.all(stackframes.map(function (sf) {\n                    return new Promise(function (resolve) {\n                        function resolveOriginal() {\n                            resolve(sf);\n                        }\n\n                        gps.pinpoint(sf).then(resolve, resolveOriginal)['catch'](resolveOriginal);\n                    });\n                })));\n            }.bind(this));\n        },\n\n        /**\n         * Use StackGenerator to generate a backtrace.\n         *\n         * @param {Object} opts\n         * @returns {Promise} of Array[StackFrame]\n         */\n        generateArtificially: function StackTrace$$generateArtificially(opts) {\n            opts = _merge(_options, opts);\n            var stackFrames = StackGenerator.backtrace(opts);\n            if (typeof opts.filter === 'function') {\n                stackFrames = stackFrames.filter(opts.filter);\n            }\n            return Promise.resolve(stackFrames);\n        },\n\n        /**\n         * Given a function, wrap it such that invocations trigger a callback that\n         * is called with a stack trace.\n         *\n         * @param {Function} fn to be instrumented\n         * @param {Function} callback function to call with a stack trace on invocation\n         * @param {Function} errback optional function to call with error if unable to get stack trace.\n         * @param {Object} thisArg optional context object (e.g. window)\n         */\n        instrument: function StackTrace$$instrument(fn, callback, errback, thisArg) {\n            if (typeof fn !== 'function') {\n                throw new Error('Cannot instrument non-function object');\n            } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n                // Already instrumented, return given Function\n                return fn;\n            }\n\n            var instrumented = function StackTrace$$instrumented() {\n                try {\n                    this.get().then(callback, errback)['catch'](errback);\n                    return fn.apply(thisArg || this, arguments);\n                } catch (e) {\n                    if (_isShapedLikeParsableError(e)) {\n                        this.fromError(e).then(callback, errback)['catch'](errback);\n                    }\n                    throw e;\n                }\n            }.bind(this);\n            instrumented.__stacktraceOriginalFn = fn;\n\n            return instrumented;\n        },\n\n        /**\n         * Given a function that has been instrumented,\n         * revert the function to it's original (non-instrumented) state.\n         *\n         * @param {Function} fn to de-instrument\n         */\n        deinstrument: function StackTrace$$deinstrument(fn) {\n            if (typeof fn !== 'function') {\n                throw new Error('Cannot de-instrument non-function object');\n            } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n                return fn.__stacktraceOriginalFn;\n            } else {\n                // Function not instrumented, return original\n                return fn;\n            }\n        },\n\n        /**\n         * Given an error message and Array of StackFrames, serialize and POST to given URL.\n         *\n         * @param {Array} stackframes\n         * @param {String} url\n         * @param {String} errorMsg\n         */\n        report: function StackTrace$$report(stackframes, url, errorMsg) {\n            return new Promise(function (resolve, reject) {\n                var req = new XMLHttpRequest();\n                req.onerror = reject;\n                req.onreadystatechange = function onreadystatechange() {\n                    if (req.readyState === 4) {\n                        if (req.status >= 200 && req.status < 400) {\n                            resolve(req.responseText);\n                        } else {\n                            reject(new Error('POST to ' + url + ' failed with status: ' + req.status));\n                        }\n                    }\n                };\n                req.open('post', url);\n                req.setRequestHeader('Content-Type', 'application/json');\n\n                var reportPayload = { stack: stackframes };\n                if (errorMsg !== undefined) {\n                    reportPayload.message = errorMsg;\n                }\n\n                req.send(JSON.stringify(reportPayload));\n            });\n        }\n    };\n});",{"version":3,"sources":["node_modules/stacktrace-js/stacktrace.js"],"names":["root","factory","define","amd","exports","module","require","StackTrace","ErrorStackParser","StackGenerator","StackTraceGPS","_options","filter","stackframe","functionName","indexOf","sourceCache","_generateError","StackTrace$$GenerateError","Error","err","_merge","first","second","target","forEach","obj","prop","hasOwnProperty","_isShapedLikeParsableError","stack","_filtered","stackframes","get","StackTrace$$get","opts","fromError","generateArtificially","getSync","StackTrace$$getSync","parse","backtrace","StackTrace$$fromError","error","gps","Promise","resolve","all","map","sf","resolveOriginal","pinpoint","then","bind","StackTrace$$generateArtificially","stackFrames","instrument","StackTrace$$instrument","fn","callback","errback","thisArg","__stacktraceOriginalFn","instrumented","StackTrace$$instrumented","apply","arguments","e","deinstrument","StackTrace$$deinstrument","report","StackTrace$$report","url","errorMsg","reject","req","XMLHttpRequest","onerror","onreadystatechange","readyState","status","responseText","open","setRequestHeader","reportPayload","undefined","message","send","JSON","stringify"],"mappings":";;;;AAAC,WAASA,IAAT,EAAeC,OAAf,EAAwB;AACrB;AACA;;AAEA;;AACA,QAAI,OAAOC,MAAP,KAAkB,UAAlB,IAAgCA,OAAOC,GAA3C,EAAgD;AAC5CD,eAAO,YAAP,EAAqB,CAAC,oBAAD,EAAuB,iBAAvB,EAA0C,gBAA1C,CAArB,EAAkFD,OAAlF;AACH,KAFD,MAEO,IAAI,QAAOG,OAAP,yCAAOA,OAAP,OAAmB,QAAvB,EAAiC;AACpCC,eAAOD,OAAP,GAAiBH,QAAQK,QAAQ,oBAAR,CAAR,EAAuCA,QAAQ,iBAAR,CAAvC,EAAmEA,QAAQ,gBAAR,CAAnE,CAAjB;AACH,KAFM,MAEA;AACHN,aAAKO,UAAL,GAAkBN,QAAQD,KAAKQ,gBAAb,EAA+BR,KAAKS,cAApC,EAAoDT,KAAKU,aAAzD,CAAlB;AACH;AACJ,CAZA,aAYO,SAASH,UAAT,CAAoBC,gBAApB,EAAsCC,cAAtC,EAAsDC,aAAtD,EAAqE;AACzE,QAAIC,WAAW;AACXC,gBAAQ,gBAASC,UAAT,EAAqB;AACzB;AACA,mBAAO,CAACA,WAAWC,YAAX,IAA2B,EAA5B,EAAgCC,OAAhC,CAAwC,cAAxC,MAA4D,CAAC,CAA7D,IACH,CAACF,WAAWC,YAAX,IAA2B,EAA5B,EAAgCC,OAAhC,CAAwC,oBAAxC,MAAkE,CAAC,CADhE,IAEH,CAACF,WAAWC,YAAX,IAA2B,EAA5B,EAAgCC,OAAhC,CAAwC,iBAAxC,MAA+D,CAAC,CAF7D,IAGH,CAACF,WAAWC,YAAX,IAA2B,EAA5B,EAAgCC,OAAhC,CAAwC,kBAAxC,MAAgE,CAAC,CAHrE;AAIH,SAPU;AAQXC,qBAAa;AARF,KAAf;;AAWA,QAAIC,iBAAiB,SAASC,yBAAT,GAAqC;AACtD,YAAI;AACA;AACA,kBAAM,IAAIC,KAAJ,EAAN;AACH,SAHD,CAGE,OAAOC,GAAP,EAAY;AACV,mBAAOA,GAAP;AACH;AACJ,KAPD;;AASA;;;;;;;;;AASA,aAASC,MAAT,CAAgBC,KAAhB,EAAuBC,MAAvB,EAA+B;AAC3B,YAAIC,SAAS,EAAb;;AAEA,SAACF,KAAD,EAAQC,MAAR,EAAgBE,OAAhB,CAAwB,UAASC,GAAT,EAAc;AAClC,iBAAK,IAAIC,IAAT,IAAiBD,GAAjB,EAAsB;AAClB,oBAAIA,IAAIE,cAAJ,CAAmBD,IAAnB,CAAJ,EAA8B;AAC1BH,2BAAOG,IAAP,IAAeD,IAAIC,IAAJ,CAAf;AACH;AACJ;AACD,mBAAOH,MAAP;AACH,SAPD;;AASA,eAAOA,MAAP;AACH;;AAED,aAASK,0BAAT,CAAoCT,GAApC,EAAyC;AACrC,eAAOA,IAAIU,KAAJ,IAAaV,IAAI,iBAAJ,CAApB;AACH;;AAED,aAASW,SAAT,CAAmBC,WAAnB,EAAgCpB,MAAhC,EAAwC;AACpC,YAAI,OAAOA,MAAP,KAAkB,UAAtB,EAAkC;AAC9B,mBAAOoB,YAAYpB,MAAZ,CAAmBA,MAAnB,CAAP;AACH;AACD,eAAOoB,WAAP;AACH;;AAED,WAAO;AACH;;;;;;AAMAC,aAAK,SAASC,eAAT,CAAyBC,IAAzB,EAA+B;AAChC,gBAAIf,MAAMH,gBAAV;AACA,mBAAOY,2BAA2BT,GAA3B,IAAkC,KAAKgB,SAAL,CAAehB,GAAf,EAAoBe,IAApB,CAAlC,GAA8D,KAAKE,oBAAL,CAA0BF,IAA1B,CAArE;AACH,SAVE;;AAYH;;;;;;;AAOAG,iBAAS,SAASC,mBAAT,CAA6BJ,IAA7B,EAAmC;AACxCA,mBAAOd,OAAOV,QAAP,EAAiBwB,IAAjB,CAAP;AACA,gBAAIf,MAAMH,gBAAV;AACA,gBAAIa,QAAQD,2BAA2BT,GAA3B,IAAkCZ,iBAAiBgC,KAAjB,CAAuBpB,GAAvB,CAAlC,GAAgEX,eAAegC,SAAf,CAAyBN,IAAzB,CAA5E;AACA,mBAAOJ,UAAUD,KAAV,EAAiBK,KAAKvB,MAAtB,CAAP;AACH,SAxBE;;AA0BH;;;;;;;AAOAwB,mBAAW,SAASM,qBAAT,CAA+BC,KAA/B,EAAsCR,IAAtC,EAA4C;AACnDA,mBAAOd,OAAOV,QAAP,EAAiBwB,IAAjB,CAAP;AACA,gBAAIS,MAAM,IAAIlC,aAAJ,CAAkByB,IAAlB,CAAV;AACA,mBAAO,IAAIU,OAAJ,CAAY,UAASC,OAAT,EAAkB;AACjC,oBAAId,cAAcD,UAAUvB,iBAAiBgC,KAAjB,CAAuBG,KAAvB,CAAV,EAAyCR,KAAKvB,MAA9C,CAAlB;AACAkC,wBAAQD,QAAQE,GAAR,CAAYf,YAAYgB,GAAZ,CAAgB,UAASC,EAAT,EAAa;AAC7C,2BAAO,IAAIJ,OAAJ,CAAY,UAASC,OAAT,EAAkB;AACjC,iCAASI,eAAT,GAA2B;AACvBJ,oCAAQG,EAAR;AACH;;AAEDL,4BAAIO,QAAJ,CAAaF,EAAb,EAAiBG,IAAjB,CAAsBN,OAAtB,EAA+BI,eAA/B,EAAgD,OAAhD,EAAyDA,eAAzD;AACH,qBANM,CAAP;AAOH,iBARmB,CAAZ,CAAR;AASH,aAXkB,CAWjBG,IAXiB,CAWZ,IAXY,CAAZ,CAAP;AAYH,SAhDE;;AAkDH;;;;;;AAMAhB,8BAAsB,SAASiB,gCAAT,CAA0CnB,IAA1C,EAAgD;AAClEA,mBAAOd,OAAOV,QAAP,EAAiBwB,IAAjB,CAAP;AACA,gBAAIoB,cAAc9C,eAAegC,SAAf,CAAyBN,IAAzB,CAAlB;AACA,gBAAI,OAAOA,KAAKvB,MAAZ,KAAuB,UAA3B,EAAuC;AACnC2C,8BAAcA,YAAY3C,MAAZ,CAAmBuB,KAAKvB,MAAxB,CAAd;AACH;AACD,mBAAOiC,QAAQC,OAAR,CAAgBS,WAAhB,CAAP;AACH,SA/DE;;AAiEH;;;;;;;;;AASAC,oBAAY,SAASC,sBAAT,CAAgCC,EAAhC,EAAoCC,QAApC,EAA8CC,OAA9C,EAAuDC,OAAvD,EAAgE;AACxE,gBAAI,OAAOH,EAAP,KAAc,UAAlB,EAA8B;AAC1B,sBAAM,IAAIvC,KAAJ,CAAU,uCAAV,CAAN;AACH,aAFD,MAEO,IAAI,OAAOuC,GAAGI,sBAAV,KAAqC,UAAzC,EAAqD;AACxD;AACA,uBAAOJ,EAAP;AACH;;AAED,gBAAIK,eAAe,SAASC,wBAAT,GAAoC;AACnD,oBAAI;AACA,yBAAK/B,GAAL,GAAWmB,IAAX,CAAgBO,QAAhB,EAA0BC,OAA1B,EAAmC,OAAnC,EAA4CA,OAA5C;AACA,2BAAOF,GAAGO,KAAH,CAASJ,WAAW,IAApB,EAA0BK,SAA1B,CAAP;AACH,iBAHD,CAGE,OAAOC,CAAP,EAAU;AACR,wBAAItC,2BAA2BsC,CAA3B,CAAJ,EAAmC;AAC/B,6BAAK/B,SAAL,CAAe+B,CAAf,EAAkBf,IAAlB,CAAuBO,QAAvB,EAAiCC,OAAjC,EAA0C,OAA1C,EAAmDA,OAAnD;AACH;AACD,0BAAMO,CAAN;AACH;AACJ,aAVkB,CAUjBd,IAViB,CAUZ,IAVY,CAAnB;AAWAU,yBAAaD,sBAAb,GAAsCJ,EAAtC;;AAEA,mBAAOK,YAAP;AACH,SAhGE;;AAkGH;;;;;;AAMAK,sBAAc,SAASC,wBAAT,CAAkCX,EAAlC,EAAsC;AAChD,gBAAI,OAAOA,EAAP,KAAc,UAAlB,EAA8B;AAC1B,sBAAM,IAAIvC,KAAJ,CAAU,0CAAV,CAAN;AACH,aAFD,MAEO,IAAI,OAAOuC,GAAGI,sBAAV,KAAqC,UAAzC,EAAqD;AACxD,uBAAOJ,GAAGI,sBAAV;AACH,aAFM,MAEA;AACH;AACA,uBAAOJ,EAAP;AACH;AACJ,SAjHE;;AAmHH;;;;;;;AAOAY,gBAAQ,SAASC,kBAAT,CAA4BvC,WAA5B,EAAyCwC,GAAzC,EAA8CC,QAA9C,EAAwD;AAC5D,mBAAO,IAAI5B,OAAJ,CAAY,UAASC,OAAT,EAAkB4B,MAAlB,EAA0B;AACzC,oBAAIC,MAAM,IAAIC,cAAJ,EAAV;AACAD,oBAAIE,OAAJ,GAAcH,MAAd;AACAC,oBAAIG,kBAAJ,GAAyB,SAASA,kBAAT,GAA8B;AACnD,wBAAIH,IAAII,UAAJ,KAAmB,CAAvB,EAA0B;AACtB,4BAAIJ,IAAIK,MAAJ,IAAc,GAAd,IAAqBL,IAAIK,MAAJ,GAAa,GAAtC,EAA2C;AACvClC,oCAAQ6B,IAAIM,YAAZ;AACH,yBAFD,MAEO;AACHP,mCAAO,IAAIvD,KAAJ,CAAU,aAAaqD,GAAb,GAAmB,uBAAnB,GAA6CG,IAAIK,MAA3D,CAAP;AACH;AACJ;AACJ,iBARD;AASAL,oBAAIO,IAAJ,CAAS,MAAT,EAAiBV,GAAjB;AACAG,oBAAIQ,gBAAJ,CAAqB,cAArB,EAAqC,kBAArC;;AAEA,oBAAIC,gBAAgB,EAACtD,OAAOE,WAAR,EAApB;AACA,oBAAIyC,aAAaY,SAAjB,EAA4B;AACxBD,kCAAcE,OAAd,GAAwBb,QAAxB;AACH;;AAEDE,oBAAIY,IAAJ,CAASC,KAAKC,SAAL,CAAeL,aAAf,CAAT;AACH,aArBM,CAAP;AAsBH;AAjJE,KAAP;AAmJH,CAvNA,CAAD","file":"stacktrace.js","sourceRoot":"/data","sourcesContent":["(function(root, factory) {\n    'use strict';\n    // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n    /* istanbul ignore next */\n    if (typeof define === 'function' && define.amd) {\n        define('stacktrace', ['error-stack-parser', 'stack-generator', 'stacktrace-gps'], factory);\n    } else if (typeof exports === 'object') {\n        module.exports = factory(require('error-stack-parser'), require('stack-generator'), require('stacktrace-gps'));\n    } else {\n        root.StackTrace = factory(root.ErrorStackParser, root.StackGenerator, root.StackTraceGPS);\n    }\n}(this, function StackTrace(ErrorStackParser, StackGenerator, StackTraceGPS) {\n    var _options = {\n        filter: function(stackframe) {\n            // Filter out stackframes for this library by default\n            return (stackframe.functionName || '').indexOf('StackTrace$$') === -1 &&\n                (stackframe.functionName || '').indexOf('ErrorStackParser$$') === -1 &&\n                (stackframe.functionName || '').indexOf('StackTraceGPS$$') === -1 &&\n                (stackframe.functionName || '').indexOf('StackGenerator$$') === -1;\n        },\n        sourceCache: {}\n    };\n\n    var _generateError = function StackTrace$$GenerateError() {\n        try {\n            // Error must be thrown to get stack in IE\n            throw new Error();\n        } catch (err) {\n            return err;\n        }\n    };\n\n    /**\n     * Merge 2 given Objects. If a conflict occurs the second object wins.\n     * Does not do deep merges.\n     *\n     * @param {Object} first base object\n     * @param {Object} second overrides\n     * @returns {Object} merged first and second\n     * @private\n     */\n    function _merge(first, second) {\n        var target = {};\n\n        [first, second].forEach(function(obj) {\n            for (var prop in obj) {\n                if (obj.hasOwnProperty(prop)) {\n                    target[prop] = obj[prop];\n                }\n            }\n            return target;\n        });\n\n        return target;\n    }\n\n    function _isShapedLikeParsableError(err) {\n        return err.stack || err['opera#sourceloc'];\n    }\n\n    function _filtered(stackframes, filter) {\n        if (typeof filter === 'function') {\n            return stackframes.filter(filter);\n        }\n        return stackframes;\n    }\n\n    return {\n        /**\n         * Get a backtrace from invocation point.\n         *\n         * @param {Object} opts\n         * @returns {Array} of StackFrame\n         */\n        get: function StackTrace$$get(opts) {\n            var err = _generateError();\n            return _isShapedLikeParsableError(err) ? this.fromError(err, opts) : this.generateArtificially(opts);\n        },\n\n        /**\n         * Get a backtrace from invocation point.\n         * IMPORTANT: Does not handle source maps or guess function names!\n         *\n         * @param {Object} opts\n         * @returns {Array} of StackFrame\n         */\n        getSync: function StackTrace$$getSync(opts) {\n            opts = _merge(_options, opts);\n            var err = _generateError();\n            var stack = _isShapedLikeParsableError(err) ? ErrorStackParser.parse(err) : StackGenerator.backtrace(opts);\n            return _filtered(stack, opts.filter);\n        },\n\n        /**\n         * Given an error object, parse it.\n         *\n         * @param {Error} error object\n         * @param {Object} opts\n         * @returns {Promise} for Array[StackFrame}\n         */\n        fromError: function StackTrace$$fromError(error, opts) {\n            opts = _merge(_options, opts);\n            var gps = new StackTraceGPS(opts);\n            return new Promise(function(resolve) {\n                var stackframes = _filtered(ErrorStackParser.parse(error), opts.filter);\n                resolve(Promise.all(stackframes.map(function(sf) {\n                    return new Promise(function(resolve) {\n                        function resolveOriginal() {\n                            resolve(sf);\n                        }\n\n                        gps.pinpoint(sf).then(resolve, resolveOriginal)['catch'](resolveOriginal);\n                    });\n                })));\n            }.bind(this));\n        },\n\n        /**\n         * Use StackGenerator to generate a backtrace.\n         *\n         * @param {Object} opts\n         * @returns {Promise} of Array[StackFrame]\n         */\n        generateArtificially: function StackTrace$$generateArtificially(opts) {\n            opts = _merge(_options, opts);\n            var stackFrames = StackGenerator.backtrace(opts);\n            if (typeof opts.filter === 'function') {\n                stackFrames = stackFrames.filter(opts.filter);\n            }\n            return Promise.resolve(stackFrames);\n        },\n\n        /**\n         * Given a function, wrap it such that invocations trigger a callback that\n         * is called with a stack trace.\n         *\n         * @param {Function} fn to be instrumented\n         * @param {Function} callback function to call with a stack trace on invocation\n         * @param {Function} errback optional function to call with error if unable to get stack trace.\n         * @param {Object} thisArg optional context object (e.g. window)\n         */\n        instrument: function StackTrace$$instrument(fn, callback, errback, thisArg) {\n            if (typeof fn !== 'function') {\n                throw new Error('Cannot instrument non-function object');\n            } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n                // Already instrumented, return given Function\n                return fn;\n            }\n\n            var instrumented = function StackTrace$$instrumented() {\n                try {\n                    this.get().then(callback, errback)['catch'](errback);\n                    return fn.apply(thisArg || this, arguments);\n                } catch (e) {\n                    if (_isShapedLikeParsableError(e)) {\n                        this.fromError(e).then(callback, errback)['catch'](errback);\n                    }\n                    throw e;\n                }\n            }.bind(this);\n            instrumented.__stacktraceOriginalFn = fn;\n\n            return instrumented;\n        },\n\n        /**\n         * Given a function that has been instrumented,\n         * revert the function to it's original (non-instrumented) state.\n         *\n         * @param {Function} fn to de-instrument\n         */\n        deinstrument: function StackTrace$$deinstrument(fn) {\n            if (typeof fn !== 'function') {\n                throw new Error('Cannot de-instrument non-function object');\n            } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n                return fn.__stacktraceOriginalFn;\n            } else {\n                // Function not instrumented, return original\n                return fn;\n            }\n        },\n\n        /**\n         * Given an error message and Array of StackFrames, serialize and POST to given URL.\n         *\n         * @param {Array} stackframes\n         * @param {String} url\n         * @param {String} errorMsg\n         */\n        report: function StackTrace$$report(stackframes, url, errorMsg) {\n            return new Promise(function(resolve, reject) {\n                var req = new XMLHttpRequest();\n                req.onerror = reject;\n                req.onreadystatechange = function onreadystatechange() {\n                    if (req.readyState === 4) {\n                        if (req.status >= 200 && req.status < 400) {\n                            resolve(req.responseText);\n                        } else {\n                            reject(new Error('POST to ' + url + ' failed with status: ' + req.status));\n                        }\n                    }\n                };\n                req.open('post', url);\n                req.setRequestHeader('Content-Type', 'application/json');\n\n                var reportPayload = {stack: stackframes};\n                if (errorMsg !== undefined) {\n                    reportPayload.message = errorMsg;\n                }\n\n                req.send(JSON.stringify(reportPayload));\n            });\n        }\n    };\n}));\n"]}]}