import { getOriginalFunction } from '@sentry/utils'; import { getClient } from '../exports.js'; import { convertIntegrationFnToClass, defineIntegration } from '../integration.js'; let originalFunctionToString; const INTEGRATION_NAME = 'FunctionToString'; const SETUP_CLIENTS = new WeakMap(); const _functionToStringIntegration = (() => { return { name: INTEGRATION_NAME, setupOnce() { // eslint-disable-next-line @typescript-eslint/unbound-method originalFunctionToString = Function.prototype.toString; // intrinsics (like Function.prototype) might be immutable in some environments // e.g. Node with --frozen-intrinsics, XS (an embedded JavaScript engine) or SES (a JavaScript proposal) try { // eslint-disable-next-line @typescript-eslint/no-explicit-any Function.prototype.toString = function ( ...args) { const originalFunction = getOriginalFunction(this); const context = SETUP_CLIENTS.has(getClient() ) && originalFunction !== undefined ? originalFunction : this; return originalFunctionToString.apply(context, args); }; } catch (e) { // ignore errors here, just don't patch this } }, setup(client) { SETUP_CLIENTS.set(client, true); }, }; }) ; /** * Patch toString calls to return proper name for wrapped functions. * * ```js * Sentry.init({ * integrations: [ * functionToStringIntegration(), * ], * }); * ``` */ const functionToStringIntegration = defineIntegration(_functionToStringIntegration); /** * Patch toString calls to return proper name for wrapped functions. * * @deprecated Use `functionToStringIntegration()` instead. */ // eslint-disable-next-line deprecation/deprecation const FunctionToString = convertIntegrationFnToClass( INTEGRATION_NAME, functionToStringIntegration, ) ; // eslint-disable-next-line deprecation/deprecation export { FunctionToString, functionToStringIntegration }; //# sourceMappingURL=functiontostring.js.map