'use strict'; 
 | 
var globalThis = require('../internals/global-this'); 
 | 
var uncurryThis = require('../internals/function-uncurry-this'); 
 | 
var DESCRIPTORS = require('../internals/descriptors'); 
 | 
var NATIVE_ARRAY_BUFFER = require('../internals/array-buffer-basic-detection'); 
 | 
var FunctionName = require('../internals/function-name'); 
 | 
var createNonEnumerableProperty = require('../internals/create-non-enumerable-property'); 
 | 
var defineBuiltInAccessor = require('../internals/define-built-in-accessor'); 
 | 
var defineBuiltIns = require('../internals/define-built-ins'); 
 | 
var fails = require('../internals/fails'); 
 | 
var anInstance = require('../internals/an-instance'); 
 | 
var toIntegerOrInfinity = require('../internals/to-integer-or-infinity'); 
 | 
var toLength = require('../internals/to-length'); 
 | 
var toIndex = require('../internals/to-index'); 
 | 
var fround = require('../internals/math-fround'); 
 | 
var IEEE754 = require('../internals/ieee754'); 
 | 
var getPrototypeOf = require('../internals/object-get-prototype-of'); 
 | 
var setPrototypeOf = require('../internals/object-set-prototype-of'); 
 | 
var arrayFill = require('../internals/array-fill'); 
 | 
var arraySlice = require('../internals/array-slice'); 
 | 
var inheritIfRequired = require('../internals/inherit-if-required'); 
 | 
var copyConstructorProperties = require('../internals/copy-constructor-properties'); 
 | 
var setToStringTag = require('../internals/set-to-string-tag'); 
 | 
var InternalStateModule = require('../internals/internal-state'); 
 | 
  
 | 
var PROPER_FUNCTION_NAME = FunctionName.PROPER; 
 | 
var CONFIGURABLE_FUNCTION_NAME = FunctionName.CONFIGURABLE; 
 | 
var ARRAY_BUFFER = 'ArrayBuffer'; 
 | 
var DATA_VIEW = 'DataView'; 
 | 
var PROTOTYPE = 'prototype'; 
 | 
var WRONG_LENGTH = 'Wrong length'; 
 | 
var WRONG_INDEX = 'Wrong index'; 
 | 
var getInternalArrayBufferState = InternalStateModule.getterFor(ARRAY_BUFFER); 
 | 
var getInternalDataViewState = InternalStateModule.getterFor(DATA_VIEW); 
 | 
var setInternalState = InternalStateModule.set; 
 | 
var NativeArrayBuffer = globalThis[ARRAY_BUFFER]; 
 | 
var $ArrayBuffer = NativeArrayBuffer; 
 | 
var ArrayBufferPrototype = $ArrayBuffer && $ArrayBuffer[PROTOTYPE]; 
 | 
var $DataView = globalThis[DATA_VIEW]; 
 | 
var DataViewPrototype = $DataView && $DataView[PROTOTYPE]; 
 | 
var ObjectPrototype = Object.prototype; 
 | 
var Array = globalThis.Array; 
 | 
var RangeError = globalThis.RangeError; 
 | 
var fill = uncurryThis(arrayFill); 
 | 
var reverse = uncurryThis([].reverse); 
 | 
  
 | 
var packIEEE754 = IEEE754.pack; 
 | 
var unpackIEEE754 = IEEE754.unpack; 
 | 
  
 | 
var packInt8 = function (number) { 
 | 
  return [number & 0xFF]; 
 | 
}; 
 | 
  
 | 
var packInt16 = function (number) { 
 | 
  return [number & 0xFF, number >> 8 & 0xFF]; 
 | 
}; 
 | 
  
 | 
var packInt32 = function (number) { 
 | 
  return [number & 0xFF, number >> 8 & 0xFF, number >> 16 & 0xFF, number >> 24 & 0xFF]; 
 | 
}; 
 | 
  
 | 
var unpackInt32 = function (buffer) { 
 | 
  return buffer[3] << 24 | buffer[2] << 16 | buffer[1] << 8 | buffer[0]; 
 | 
}; 
 | 
  
 | 
var packFloat32 = function (number) { 
 | 
  return packIEEE754(fround(number), 23, 4); 
 | 
}; 
 | 
  
 | 
var packFloat64 = function (number) { 
 | 
  return packIEEE754(number, 52, 8); 
 | 
}; 
 | 
  
 | 
var addGetter = function (Constructor, key, getInternalState) { 
 | 
  defineBuiltInAccessor(Constructor[PROTOTYPE], key, { 
 | 
    configurable: true, 
 | 
    get: function () { 
 | 
      return getInternalState(this)[key]; 
 | 
    } 
 | 
  }); 
 | 
}; 
 | 
  
 | 
var get = function (view, count, index, isLittleEndian) { 
 | 
  var store = getInternalDataViewState(view); 
 | 
  var intIndex = toIndex(index); 
 | 
  var boolIsLittleEndian = !!isLittleEndian; 
 | 
  if (intIndex + count > store.byteLength) throw new RangeError(WRONG_INDEX); 
 | 
  var bytes = store.bytes; 
 | 
  var start = intIndex + store.byteOffset; 
 | 
  var pack = arraySlice(bytes, start, start + count); 
 | 
  return boolIsLittleEndian ? pack : reverse(pack); 
 | 
}; 
 | 
  
 | 
var set = function (view, count, index, conversion, value, isLittleEndian) { 
 | 
  var store = getInternalDataViewState(view); 
 | 
  var intIndex = toIndex(index); 
 | 
  var pack = conversion(+value); 
 | 
  var boolIsLittleEndian = !!isLittleEndian; 
 | 
  if (intIndex + count > store.byteLength) throw new RangeError(WRONG_INDEX); 
 | 
  var bytes = store.bytes; 
 | 
  var start = intIndex + store.byteOffset; 
 | 
  for (var i = 0; i < count; i++) bytes[start + i] = pack[boolIsLittleEndian ? i : count - i - 1]; 
 | 
}; 
 | 
  
 | 
if (!NATIVE_ARRAY_BUFFER) { 
 | 
  $ArrayBuffer = function ArrayBuffer(length) { 
 | 
    anInstance(this, ArrayBufferPrototype); 
 | 
    var byteLength = toIndex(length); 
 | 
    setInternalState(this, { 
 | 
      type: ARRAY_BUFFER, 
 | 
      bytes: fill(Array(byteLength), 0), 
 | 
      byteLength: byteLength 
 | 
    }); 
 | 
    if (!DESCRIPTORS) { 
 | 
      this.byteLength = byteLength; 
 | 
      this.detached = false; 
 | 
    } 
 | 
  }; 
 | 
  
 | 
  ArrayBufferPrototype = $ArrayBuffer[PROTOTYPE]; 
 | 
  
 | 
  $DataView = function DataView(buffer, byteOffset, byteLength) { 
 | 
    anInstance(this, DataViewPrototype); 
 | 
    anInstance(buffer, ArrayBufferPrototype); 
 | 
    var bufferState = getInternalArrayBufferState(buffer); 
 | 
    var bufferLength = bufferState.byteLength; 
 | 
    var offset = toIntegerOrInfinity(byteOffset); 
 | 
    if (offset < 0 || offset > bufferLength) throw new RangeError('Wrong offset'); 
 | 
    byteLength = byteLength === undefined ? bufferLength - offset : toLength(byteLength); 
 | 
    if (offset + byteLength > bufferLength) throw new RangeError(WRONG_LENGTH); 
 | 
    setInternalState(this, { 
 | 
      type: DATA_VIEW, 
 | 
      buffer: buffer, 
 | 
      byteLength: byteLength, 
 | 
      byteOffset: offset, 
 | 
      bytes: bufferState.bytes 
 | 
    }); 
 | 
    if (!DESCRIPTORS) { 
 | 
      this.buffer = buffer; 
 | 
      this.byteLength = byteLength; 
 | 
      this.byteOffset = offset; 
 | 
    } 
 | 
  }; 
 | 
  
 | 
  DataViewPrototype = $DataView[PROTOTYPE]; 
 | 
  
 | 
  if (DESCRIPTORS) { 
 | 
    addGetter($ArrayBuffer, 'byteLength', getInternalArrayBufferState); 
 | 
    addGetter($DataView, 'buffer', getInternalDataViewState); 
 | 
    addGetter($DataView, 'byteLength', getInternalDataViewState); 
 | 
    addGetter($DataView, 'byteOffset', getInternalDataViewState); 
 | 
  } 
 | 
  
 | 
  defineBuiltIns(DataViewPrototype, { 
 | 
    getInt8: function getInt8(byteOffset) { 
 | 
      return get(this, 1, byteOffset)[0] << 24 >> 24; 
 | 
    }, 
 | 
    getUint8: function getUint8(byteOffset) { 
 | 
      return get(this, 1, byteOffset)[0]; 
 | 
    }, 
 | 
    getInt16: function getInt16(byteOffset /* , littleEndian */) { 
 | 
      var bytes = get(this, 2, byteOffset, arguments.length > 1 ? arguments[1] : false); 
 | 
      return (bytes[1] << 8 | bytes[0]) << 16 >> 16; 
 | 
    }, 
 | 
    getUint16: function getUint16(byteOffset /* , littleEndian */) { 
 | 
      var bytes = get(this, 2, byteOffset, arguments.length > 1 ? arguments[1] : false); 
 | 
      return bytes[1] << 8 | bytes[0]; 
 | 
    }, 
 | 
    getInt32: function getInt32(byteOffset /* , littleEndian */) { 
 | 
      return unpackInt32(get(this, 4, byteOffset, arguments.length > 1 ? arguments[1] : false)); 
 | 
    }, 
 | 
    getUint32: function getUint32(byteOffset /* , littleEndian */) { 
 | 
      return unpackInt32(get(this, 4, byteOffset, arguments.length > 1 ? arguments[1] : false)) >>> 0; 
 | 
    }, 
 | 
    getFloat32: function getFloat32(byteOffset /* , littleEndian */) { 
 | 
      return unpackIEEE754(get(this, 4, byteOffset, arguments.length > 1 ? arguments[1] : false), 23); 
 | 
    }, 
 | 
    getFloat64: function getFloat64(byteOffset /* , littleEndian */) { 
 | 
      return unpackIEEE754(get(this, 8, byteOffset, arguments.length > 1 ? arguments[1] : false), 52); 
 | 
    }, 
 | 
    setInt8: function setInt8(byteOffset, value) { 
 | 
      set(this, 1, byteOffset, packInt8, value); 
 | 
    }, 
 | 
    setUint8: function setUint8(byteOffset, value) { 
 | 
      set(this, 1, byteOffset, packInt8, value); 
 | 
    }, 
 | 
    setInt16: function setInt16(byteOffset, value /* , littleEndian */) { 
 | 
      set(this, 2, byteOffset, packInt16, value, arguments.length > 2 ? arguments[2] : false); 
 | 
    }, 
 | 
    setUint16: function setUint16(byteOffset, value /* , littleEndian */) { 
 | 
      set(this, 2, byteOffset, packInt16, value, arguments.length > 2 ? arguments[2] : false); 
 | 
    }, 
 | 
    setInt32: function setInt32(byteOffset, value /* , littleEndian */) { 
 | 
      set(this, 4, byteOffset, packInt32, value, arguments.length > 2 ? arguments[2] : false); 
 | 
    }, 
 | 
    setUint32: function setUint32(byteOffset, value /* , littleEndian */) { 
 | 
      set(this, 4, byteOffset, packInt32, value, arguments.length > 2 ? arguments[2] : false); 
 | 
    }, 
 | 
    setFloat32: function setFloat32(byteOffset, value /* , littleEndian */) { 
 | 
      set(this, 4, byteOffset, packFloat32, value, arguments.length > 2 ? arguments[2] : false); 
 | 
    }, 
 | 
    setFloat64: function setFloat64(byteOffset, value /* , littleEndian */) { 
 | 
      set(this, 8, byteOffset, packFloat64, value, arguments.length > 2 ? arguments[2] : false); 
 | 
    } 
 | 
  }); 
 | 
} else { 
 | 
  var INCORRECT_ARRAY_BUFFER_NAME = PROPER_FUNCTION_NAME && NativeArrayBuffer.name !== ARRAY_BUFFER; 
 | 
  /* eslint-disable no-new, sonarjs/inconsistent-function-call -- required for testing */ 
 | 
  if (!fails(function () { 
 | 
    NativeArrayBuffer(1); 
 | 
  }) || !fails(function () { 
 | 
    new NativeArrayBuffer(-1); 
 | 
  }) || fails(function () { 
 | 
    new NativeArrayBuffer(); 
 | 
    new NativeArrayBuffer(1.5); 
 | 
    new NativeArrayBuffer(NaN); 
 | 
    return NativeArrayBuffer.length !== 1 || INCORRECT_ARRAY_BUFFER_NAME && !CONFIGURABLE_FUNCTION_NAME; 
 | 
  })) { 
 | 
    /* eslint-enable no-new, sonarjs/inconsistent-function-call -- required for testing */ 
 | 
    $ArrayBuffer = function ArrayBuffer(length) { 
 | 
      anInstance(this, ArrayBufferPrototype); 
 | 
      return inheritIfRequired(new NativeArrayBuffer(toIndex(length)), this, $ArrayBuffer); 
 | 
    }; 
 | 
  
 | 
    $ArrayBuffer[PROTOTYPE] = ArrayBufferPrototype; 
 | 
  
 | 
    ArrayBufferPrototype.constructor = $ArrayBuffer; 
 | 
  
 | 
    copyConstructorProperties($ArrayBuffer, NativeArrayBuffer); 
 | 
  } else if (INCORRECT_ARRAY_BUFFER_NAME && CONFIGURABLE_FUNCTION_NAME) { 
 | 
    createNonEnumerableProperty(NativeArrayBuffer, 'name', ARRAY_BUFFER); 
 | 
  } 
 | 
  
 | 
  // WebKit bug - the same parent prototype for typed arrays and data view 
 | 
  if (setPrototypeOf && getPrototypeOf(DataViewPrototype) !== ObjectPrototype) { 
 | 
    setPrototypeOf(DataViewPrototype, ObjectPrototype); 
 | 
  } 
 | 
  
 | 
  // iOS Safari 7.x bug 
 | 
  var testView = new $DataView(new $ArrayBuffer(2)); 
 | 
  var $setInt8 = uncurryThis(DataViewPrototype.setInt8); 
 | 
  testView.setInt8(0, 2147483648); 
 | 
  testView.setInt8(1, 2147483649); 
 | 
  if (testView.getInt8(0) || !testView.getInt8(1)) defineBuiltIns(DataViewPrototype, { 
 | 
    setInt8: function setInt8(byteOffset, value) { 
 | 
      $setInt8(this, byteOffset, value << 24 >> 24); 
 | 
    }, 
 | 
    setUint8: function setUint8(byteOffset, value) { 
 | 
      $setInt8(this, byteOffset, value << 24 >> 24); 
 | 
    } 
 | 
  }, { unsafe: true }); 
 | 
} 
 | 
  
 | 
setToStringTag($ArrayBuffer, ARRAY_BUFFER); 
 | 
setToStringTag($DataView, DATA_VIEW); 
 | 
  
 | 
module.exports = { 
 | 
  ArrayBuffer: $ArrayBuffer, 
 | 
  DataView: $DataView 
 | 
}; 
 |