UNPKG

opennms

Version:

Client API for the OpenNMS network monitoring platform

1 lines 23.7 kB
{"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":"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","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"]}]}