'use strict'; var GetIntrinsic = require('get-intrinsic'); var $ArrayBuffer = GetIntrinsic('%ArrayBuffer%'); var $DataView = GetIntrinsic('%DataView%', true); var callBound = require('call-bind/callBound'); // node <= 0.10, < 0.11.4 has a nonconfigurable own property instead of a prototype getter var $dataViewBuffer = callBound('DataView.prototype.buffer', true); var isTypedArray = require('is-typed-array'); /** @type {import('.')} */ module.exports = function isDataView(x) { if (!x || typeof x !== 'object' || !$DataView || isTypedArray(x)) { return false; } if ($dataViewBuffer) { try { $dataViewBuffer(x); return true; } catch (e) { return false; } } if ( ('getInt8' in x) && typeof x.getInt8 === 'function' && x.getInt8 === new $DataView(new $ArrayBuffer(1)).getInt8 ) { return true; } return false; };