diff --git a/src/parser/utils.ts b/src/parser/utils.ts index 19e069f4..41598846 100644 --- a/src/parser/utils.ts +++ b/src/parser/utils.ts @@ -1,37 +1,24 @@ -export function isAnyArrayBuffer(value: unknown): value is ArrayBuffer { - return ( - typeof value === 'object' && - value != null && - Symbol.toStringTag in value && - (value[Symbol.toStringTag] === 'ArrayBuffer' || - value[Symbol.toStringTag] === 'SharedArrayBuffer') - ); -} +const TypedArrayPrototypeGetSymbolToStringTag = (() => { + // eslint-disable-next-line @typescript-eslint/unbound-method -- the intention is to call this method with a bound value + const g = Object.getOwnPropertyDescriptor( + Object.getPrototypeOf(Uint8Array.prototype), + Symbol.toStringTag + )!.get!; -export function isUint8Array(value: unknown): value is Uint8Array { - return ( - typeof value === 'object' && - value != null && - Symbol.toStringTag in value && - value[Symbol.toStringTag] === 'Uint8Array' - ); -} + return (value: unknown) => g.call(value); +})(); -export function isBigInt64Array(value: unknown): value is BigInt64Array { - return ( - typeof value === 'object' && - value != null && - Symbol.toStringTag in value && - value[Symbol.toStringTag] === 'BigInt64Array' - ); +export function isUint8Array(value: unknown): value is Uint8Array { + return TypedArrayPrototypeGetSymbolToStringTag(value) === 'Uint8Array'; } -export function isBigUInt64Array(value: unknown): value is BigUint64Array { +export function isAnyArrayBuffer(value: unknown): value is ArrayBuffer { return ( typeof value === 'object' && value != null && Symbol.toStringTag in value && - value[Symbol.toStringTag] === 'BigUint64Array' + (value[Symbol.toStringTag] === 'ArrayBuffer' || + value[Symbol.toStringTag] === 'SharedArrayBuffer') ); }