All Downloads are FREE. Search and download functionalities are using the official Maven repository.

package.build.npm.esm.helpers.js.map Maven / Gradle / Ivy

There is a newer version: 8.40.0
Show newest version
{"version":3,"file":"helpers.js","sources":["../../../src/helpers.ts"],"sourcesContent":["import { captureException, withScope } from '@sentry/core';\nimport type { Mechanism, WrappedFunction } from '@sentry/types';\nimport {\n  GLOBAL_OBJ,\n  addExceptionMechanism,\n  addExceptionTypeValue,\n  addNonEnumerableProperty,\n  getOriginalFunction,\n  markFunctionWrapped,\n} from '@sentry/utils';\n\nexport const WINDOW = GLOBAL_OBJ as typeof GLOBAL_OBJ & Window;\n\nlet ignoreOnError: number = 0;\n\n/**\n * @hidden\n */\nexport function shouldIgnoreOnError(): boolean {\n  return ignoreOnError > 0;\n}\n\n/**\n * @hidden\n */\nexport function ignoreNextOnError(): void {\n  // onerror should trigger before setTimeout\n  ignoreOnError++;\n  setTimeout(() => {\n    ignoreOnError--;\n  });\n}\n\n/**\n * Instruments the given function and sends an event to Sentry every time the\n * function throws an exception.\n *\n * @param fn A function to wrap. It is generally safe to pass an unbound function, because the returned wrapper always\n * has a correct `this` context.\n * @returns The wrapped function.\n * @hidden\n */\nexport function wrap(\n  fn: WrappedFunction,\n  options: {\n    mechanism?: Mechanism;\n  } = {},\n  before?: WrappedFunction,\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n): any {\n  // for future readers what this does is wrap a function and then create\n  // a bi-directional wrapping between them.\n  //\n  // example: wrapped = wrap(original);\n  //  original.__sentry_wrapped__ -> wrapped\n  //  wrapped.__sentry_original__ -> original\n\n  if (typeof fn !== 'function') {\n    return fn;\n  }\n\n  try {\n    // if we're dealing with a function that was previously wrapped, return\n    // the original wrapper.\n    const wrapper = fn.__sentry_wrapped__;\n    if (wrapper) {\n      return wrapper;\n    }\n\n    // We don't wanna wrap it twice\n    if (getOriginalFunction(fn)) {\n      return fn;\n    }\n  } catch (e) {\n    // Just accessing custom props in some Selenium environments\n    // can cause a \"Permission denied\" exception (see raven-js#495).\n    // Bail on wrapping and return the function as-is (defers to window.onerror).\n    return fn;\n  }\n\n  /* eslint-disable prefer-rest-params */\n  // It is important that `sentryWrapped` is not an arrow function to preserve the context of `this`\n  const sentryWrapped: WrappedFunction = function (this: unknown): void {\n    const args = Array.prototype.slice.call(arguments);\n\n    try {\n      if (before && typeof before === 'function') {\n        before.apply(this, arguments);\n      }\n\n      // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-member-access\n      const wrappedArguments = args.map((arg: any) => wrap(arg, options));\n\n      // Attempt to invoke user-land function\n      // NOTE: If you are a Sentry user, and you are seeing this stack frame, it\n      //       means the sentry.javascript SDK caught an error invoking your application code. This\n      //       is expected behavior and NOT indicative of a bug with sentry.javascript.\n      return fn.apply(this, wrappedArguments);\n    } catch (ex) {\n      ignoreNextOnError();\n\n      withScope(scope => {\n        scope.addEventProcessor(event => {\n          if (options.mechanism) {\n            addExceptionTypeValue(event, undefined, undefined);\n            addExceptionMechanism(event, options.mechanism);\n          }\n\n          event.extra = {\n            ...event.extra,\n            arguments: args,\n          };\n\n          return event;\n        });\n\n        captureException(ex);\n      });\n\n      throw ex;\n    }\n  };\n  /* eslint-enable prefer-rest-params */\n\n  // Accessing some objects may throw\n  // ref: https://github.com/getsentry/sentry-javascript/issues/1168\n  try {\n    for (const property in fn) {\n      if (Object.prototype.hasOwnProperty.call(fn, property)) {\n        sentryWrapped[property] = fn[property];\n      }\n    }\n  } catch (_oO) {} // eslint-disable-line no-empty\n\n  // Signal that this function has been wrapped/filled already\n  // for both debugging and to prevent it to being wrapped/filled twice\n  markFunctionWrapped(sentryWrapped, fn);\n\n  addNonEnumerableProperty(fn, '__sentry_wrapped__', sentryWrapped);\n\n  // Restore original function name (not all browsers allow that)\n  try {\n    const descriptor = Object.getOwnPropertyDescriptor(sentryWrapped, 'name') as PropertyDescriptor;\n    if (descriptor.configurable) {\n      Object.defineProperty(sentryWrapped, 'name', {\n        get(): string {\n          return fn.name;\n        },\n      });\n    }\n    // eslint-disable-next-line no-empty\n  } catch (_oO) {}\n\n  return sentryWrapped;\n}\n"],"names":[],"mappings":"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"}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy