functiontostring.js 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. Object.defineProperty(exports, '__esModule', { value: true });
  2. const utils = require('@sentry/utils');
  3. const exports$1 = require('../exports.js');
  4. const integration = require('../integration.js');
  5. let originalFunctionToString;
  6. const INTEGRATION_NAME = 'FunctionToString';
  7. const SETUP_CLIENTS = new WeakMap();
  8. const _functionToStringIntegration = (() => {
  9. return {
  10. name: INTEGRATION_NAME,
  11. setupOnce() {
  12. // eslint-disable-next-line @typescript-eslint/unbound-method
  13. originalFunctionToString = Function.prototype.toString;
  14. // intrinsics (like Function.prototype) might be immutable in some environments
  15. // e.g. Node with --frozen-intrinsics, XS (an embedded JavaScript engine) or SES (a JavaScript proposal)
  16. try {
  17. // eslint-disable-next-line @typescript-eslint/no-explicit-any
  18. Function.prototype.toString = function ( ...args) {
  19. const originalFunction = utils.getOriginalFunction(this);
  20. const context =
  21. SETUP_CLIENTS.has(exports$1.getClient() ) && originalFunction !== undefined ? originalFunction : this;
  22. return originalFunctionToString.apply(context, args);
  23. };
  24. } catch (e) {
  25. // ignore errors here, just don't patch this
  26. }
  27. },
  28. setup(client) {
  29. SETUP_CLIENTS.set(client, true);
  30. },
  31. };
  32. }) ;
  33. /**
  34. * Patch toString calls to return proper name for wrapped functions.
  35. *
  36. * ```js
  37. * Sentry.init({
  38. * integrations: [
  39. * functionToStringIntegration(),
  40. * ],
  41. * });
  42. * ```
  43. */
  44. const functionToStringIntegration = integration.defineIntegration(_functionToStringIntegration);
  45. /**
  46. * Patch toString calls to return proper name for wrapped functions.
  47. *
  48. * @deprecated Use `functionToStringIntegration()` instead.
  49. */
  50. // eslint-disable-next-line deprecation/deprecation
  51. const FunctionToString = integration.convertIntegrationFnToClass(
  52. INTEGRATION_NAME,
  53. functionToStringIntegration,
  54. ) ;
  55. // eslint-disable-next-line deprecation/deprecation
  56. exports.FunctionToString = FunctionToString;
  57. exports.functionToStringIntegration = functionToStringIntegration;
  58. //# sourceMappingURL=functiontostring.js.map