diff --git a/packages/utils/src/is.ts b/packages/utils/src/is.ts index f4aeb480f320..e17c903b7690 100644 --- a/packages/utils/src/is.ts +++ b/packages/utils/src/is.ts @@ -2,6 +2,10 @@ /* eslint-disable @typescript-eslint/explicit-module-boundary-types */ import { Primitive } from '@sentry/types'; + +// eslint-disable-next-line @typescript-eslint/unbound-method +const objectToString = Object.prototype.toString; + /** * Checks whether given value's type is one of a few Error or Error-like * {@link isError}. @@ -10,11 +14,9 @@ import { Primitive } from '@sentry/types'; * @returns A boolean representing the result. */ export function isError(wat: unknown): boolean { - switch (Object.prototype.toString.call(wat)) { + switch (objectToString.call(wat)) { case '[object Error]': - return true; case '[object Exception]': - return true; case '[object DOMException]': return true; default: @@ -22,6 +24,10 @@ export function isError(wat: unknown): boolean { } } +function isBuiltin(wat: unknown, ty: string): boolean { + return objectToString.call(wat) === `[object ${ty}]`; +} + /** * Checks whether given value's type is ErrorEvent * {@link isErrorEvent}. @@ -30,7 +36,7 @@ export function isError(wat: unknown): boolean { * @returns A boolean representing the result. */ export function isErrorEvent(wat: unknown): boolean { - return Object.prototype.toString.call(wat) === '[object ErrorEvent]'; + return isBuiltin(wat, 'ErrorEvent'); } /** @@ -41,7 +47,7 @@ export function isErrorEvent(wat: unknown): boolean { * @returns A boolean representing the result. */ export function isDOMError(wat: unknown): boolean { - return Object.prototype.toString.call(wat) === '[object DOMError]'; + return isBuiltin(wat, 'DOMError'); } /** @@ -52,7 +58,7 @@ export function isDOMError(wat: unknown): boolean { * @returns A boolean representing the result. */ export function isDOMException(wat: unknown): boolean { - return Object.prototype.toString.call(wat) === '[object DOMException]'; + return isBuiltin(wat, 'DOMException'); } /** @@ -63,7 +69,7 @@ export function isDOMException(wat: unknown): boolean { * @returns A boolean representing the result. */ export function isString(wat: unknown): boolean { - return Object.prototype.toString.call(wat) === '[object String]'; + return isBuiltin(wat, 'String'); } /** @@ -85,7 +91,7 @@ export function isPrimitive(wat: unknown): wat is Primitive { * @returns A boolean representing the result. */ export function isPlainObject(wat: unknown): wat is Record { - return Object.prototype.toString.call(wat) === '[object Object]'; + return isBuiltin(wat, 'Object'); } /** @@ -118,7 +124,7 @@ export function isElement(wat: unknown): wat is Element { * @returns A boolean representing the result. */ export function isRegExp(wat: unknown): wat is RegExp { - return Object.prototype.toString.call(wat) === '[object RegExp]'; + return isBuiltin(wat, 'RegExp'); } /** diff --git a/packages/utils/src/object.ts b/packages/utils/src/object.ts index 91c4d2709a18..bcf4f7e09449 100644 --- a/packages/utils/src/object.ts +++ b/packages/utils/src/object.ts @@ -186,12 +186,12 @@ export function normalizeToSize( * unchanged. */ function serializeValue(value: any): any { - const type = Object.prototype.toString.call(value); - // Node.js REPL notation if (typeof value === 'string') { return value; } + + const type = Object.prototype.toString.call(value); if (type === '[object Object]') { return '[Object]'; }