@sentry/browser
Version:
Official Sentry SDK for browsers
108 lines (104 loc) • 2.85 kB
JavaScript
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
const browser = require('@sentry/core/browser');
const WINDOW = browser.GLOBAL_OBJ;
let ignoreOnError = 0;
function shouldIgnoreOnError() {
return ignoreOnError > 0;
}
function ignoreNextOnError() {
ignoreOnError++;
setTimeout(() => {
ignoreOnError--;
});
}
function wrap(fn, options = {}) {
function isFunction(fn2) {
return typeof fn2 === "function";
}
if (!isFunction(fn)) {
return fn;
}
try {
const wrapper = fn.__sentry_wrapped__;
if (wrapper) {
if (typeof wrapper === "function") {
return wrapper;
} else {
return fn;
}
}
if (browser.getOriginalFunction(fn)) {
return fn;
}
} catch {
return fn;
}
const sentryWrapped = function(...args) {
browser.GLOBAL_OBJ._sentryWrappedDepth = (browser.GLOBAL_OBJ._sentryWrappedDepth || 0) + 1;
try {
const wrappedArguments = args.map((arg) => wrap(arg, options));
return fn.apply(this, wrappedArguments);
} catch (ex) {
ignoreNextOnError();
browser.withScope((scope) => {
scope.addEventProcessor((event) => {
if (options.mechanism) {
browser.addExceptionTypeValue(event, void 0, void 0);
browser.addExceptionMechanism(event, options.mechanism);
}
event.extra = {
...event.extra,
arguments: args
};
return event;
});
browser.captureException(ex);
});
throw ex;
} finally {
browser.GLOBAL_OBJ._sentryWrappedDepth = (browser.GLOBAL_OBJ._sentryWrappedDepth || 0) - 1;
}
};
try {
for (const property in fn) {
if (Object.prototype.hasOwnProperty.call(fn, property)) {
sentryWrapped[property] = fn[property];
}
}
} catch {
}
browser.markFunctionWrapped(sentryWrapped, fn);
browser.addNonEnumerableProperty(fn, "__sentry_wrapped__", sentryWrapped);
try {
const descriptor = Object.getOwnPropertyDescriptor(sentryWrapped, "name");
if (descriptor.configurable) {
Object.defineProperty(sentryWrapped, "name", {
get() {
return fn.name;
}
});
}
} catch {
}
return sentryWrapped;
}
function getHttpRequestData() {
const url = browser.getLocationHref();
const { referrer } = WINDOW.document || {};
const { userAgent } = WINDOW.navigator || {};
const headers = {
...referrer && { Referer: referrer },
...userAgent && { "User-Agent": userAgent }
};
const request = {
url,
headers
};
return request;
}
exports.WINDOW = WINDOW;
exports.getHttpRequestData = getHttpRequestData;
exports.ignoreNextOnError = ignoreNextOnError;
exports.shouldIgnoreOnError = shouldIgnoreOnError;
exports.wrap = wrap;
//# sourceMappingURL=helpers.js.map