UNPKG

@platformos/pos-cli

Version:

Manage your platformOS application

187 lines 7.29 kB
Object.defineProperty(exports, "__esModule", { value: true }); var utils_1 = require("@sentry/utils"); var helpers_1 = require("../helpers"); /** Wrap timer functions and event targets to catch errors and provide better meta data */ var TryCatch = /** @class */ (function () { function TryCatch() { /** JSDoc */ this._ignoreOnError = 0; /** * @inheritDoc */ this.name = TryCatch.id; } /** JSDoc */ TryCatch.prototype._wrapTimeFunction = function (original) { return function () { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } var originalCallback = args[0]; args[0] = helpers_1.wrap(originalCallback, { mechanism: { data: { function: utils_1.getFunctionName(original) }, handled: true, type: 'instrument', }, }); return original.apply(this, args); }; }; /** JSDoc */ TryCatch.prototype._wrapRAF = function (original) { return function (callback) { return original(helpers_1.wrap(callback, { mechanism: { data: { function: 'requestAnimationFrame', handler: utils_1.getFunctionName(original), }, handled: true, type: 'instrument', }, })); }; }; /** JSDoc */ TryCatch.prototype._wrapEventTarget = function (target) { var global = utils_1.getGlobalObject(); var proto = global[target] && global[target].prototype; if (!proto || !proto.hasOwnProperty || !proto.hasOwnProperty('addEventListener')) { return; } utils_1.fill(proto, 'addEventListener', function (original) { return function (eventName, fn, options) { try { // tslint:disable-next-line:no-unbound-method strict-type-predicates if (typeof fn.handleEvent === 'function') { fn.handleEvent = helpers_1.wrap(fn.handleEvent.bind(fn), { mechanism: { data: { function: 'handleEvent', handler: utils_1.getFunctionName(fn), target: target, }, handled: true, type: 'instrument', }, }); } } catch (err) { // can sometimes get 'Permission denied to access property "handle Event' } return original.call(this, eventName, helpers_1.wrap(fn, { mechanism: { data: { function: 'addEventListener', handler: utils_1.getFunctionName(fn), target: target, }, handled: true, type: 'instrument', }, }), options); }; }); utils_1.fill(proto, 'removeEventListener', function (original) { return function (eventName, fn, options) { var callback = fn; try { callback = callback && (callback.__sentry_wrapped__ || callback); } catch (e) { // ignore, accessing __sentry_wrapped__ will throw in some Selenium environments } return original.call(this, eventName, callback, options); }; }); }; /** JSDoc */ TryCatch.prototype._wrapXHR = function (originalSend) { return function () { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } var xhr = this; // tslint:disable-line:no-this-assignment var xmlHttpRequestProps = ['onload', 'onerror', 'onprogress', 'onreadystatechange']; xmlHttpRequestProps.forEach(function (prop) { if (prop in xhr && typeof xhr[prop] === 'function') { utils_1.fill(xhr, prop, function (original) { var wrapOptions = { mechanism: { data: { function: prop, handler: utils_1.getFunctionName(original), }, handled: true, type: 'instrument', }, }; // If Instrument integration has been called before TryCatch, get the name of original function if (original.__sentry_original__) { wrapOptions.mechanism.data.handler = utils_1.getFunctionName(original.__sentry_original__); } // Otherwise wrap directly return helpers_1.wrap(original, wrapOptions); }); } }); return originalSend.apply(this, args); }; }; /** * Wrap timer functions and event targets to catch errors * and provide better metadata. */ TryCatch.prototype.setupOnce = function () { this._ignoreOnError = this._ignoreOnError; var global = utils_1.getGlobalObject(); utils_1.fill(global, 'setTimeout', this._wrapTimeFunction.bind(this)); utils_1.fill(global, 'setInterval', this._wrapTimeFunction.bind(this)); utils_1.fill(global, 'requestAnimationFrame', this._wrapRAF.bind(this)); if ('XMLHttpRequest' in global) { utils_1.fill(XMLHttpRequest.prototype, 'send', this._wrapXHR.bind(this)); } [ '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', ].forEach(this._wrapEventTarget.bind(this)); }; /** * @inheritDoc */ TryCatch.id = 'TryCatch'; return TryCatch; }()); exports.TryCatch = TryCatch; //# sourceMappingURL=trycatch.js.map