'use strict'; 
 | 
var globalThis = require('../internals/global-this'); 
 | 
var uncurryThis = require('../internals/function-uncurry-this'); 
 | 
var uncurryThisAccessor = require('../internals/function-uncurry-this-accessor'); 
 | 
var toIndex = require('../internals/to-index'); 
 | 
var notDetached = require('../internals/array-buffer-not-detached'); 
 | 
var arrayBufferByteLength = require('../internals/array-buffer-byte-length'); 
 | 
var detachTransferable = require('../internals/detach-transferable'); 
 | 
var PROPER_STRUCTURED_CLONE_TRANSFER = require('../internals/structured-clone-proper-transfer'); 
 | 
  
 | 
var structuredClone = globalThis.structuredClone; 
 | 
var ArrayBuffer = globalThis.ArrayBuffer; 
 | 
var DataView = globalThis.DataView; 
 | 
var min = Math.min; 
 | 
var ArrayBufferPrototype = ArrayBuffer.prototype; 
 | 
var DataViewPrototype = DataView.prototype; 
 | 
var slice = uncurryThis(ArrayBufferPrototype.slice); 
 | 
var isResizable = uncurryThisAccessor(ArrayBufferPrototype, 'resizable', 'get'); 
 | 
var maxByteLength = uncurryThisAccessor(ArrayBufferPrototype, 'maxByteLength', 'get'); 
 | 
var getInt8 = uncurryThis(DataViewPrototype.getInt8); 
 | 
var setInt8 = uncurryThis(DataViewPrototype.setInt8); 
 | 
  
 | 
module.exports = (PROPER_STRUCTURED_CLONE_TRANSFER || detachTransferable) && function (arrayBuffer, newLength, preserveResizability) { 
 | 
  var byteLength = arrayBufferByteLength(arrayBuffer); 
 | 
  var newByteLength = newLength === undefined ? byteLength : toIndex(newLength); 
 | 
  var fixedLength = !isResizable || !isResizable(arrayBuffer); 
 | 
  var newBuffer; 
 | 
  notDetached(arrayBuffer); 
 | 
  if (PROPER_STRUCTURED_CLONE_TRANSFER) { 
 | 
    arrayBuffer = structuredClone(arrayBuffer, { transfer: [arrayBuffer] }); 
 | 
    if (byteLength === newByteLength && (preserveResizability || fixedLength)) return arrayBuffer; 
 | 
  } 
 | 
  if (byteLength >= newByteLength && (!preserveResizability || fixedLength)) { 
 | 
    newBuffer = slice(arrayBuffer, 0, newByteLength); 
 | 
  } else { 
 | 
    var options = preserveResizability && !fixedLength && maxByteLength ? { maxByteLength: maxByteLength(arrayBuffer) } : undefined; 
 | 
    newBuffer = new ArrayBuffer(newByteLength, options); 
 | 
    var a = new DataView(arrayBuffer); 
 | 
    var b = new DataView(newBuffer); 
 | 
    var copyLength = min(newByteLength, byteLength); 
 | 
    for (var i = 0; i < copyLength; i++) setInt8(b, i, getInt8(a, i)); 
 | 
  } 
 | 
  if (!PROPER_STRUCTURED_CLONE_TRANSFER) detachTransferable(arrayBuffer); 
 | 
  return newBuffer; 
 | 
}; 
 |