'use strict'; 
 | 
var IS_PURE = require('../internals/is-pure'); 
 | 
var $ = require('../internals/export'); 
 | 
var globalThis = require('../internals/global-this'); 
 | 
var getBuiltIn = require('../internals/get-built-in'); 
 | 
var uncurryThis = require('../internals/function-uncurry-this'); 
 | 
var fails = require('../internals/fails'); 
 | 
var uid = require('../internals/uid'); 
 | 
var isCallable = require('../internals/is-callable'); 
 | 
var isConstructor = require('../internals/is-constructor'); 
 | 
var isNullOrUndefined = require('../internals/is-null-or-undefined'); 
 | 
var isObject = require('../internals/is-object'); 
 | 
var isSymbol = require('../internals/is-symbol'); 
 | 
var iterate = require('../internals/iterate'); 
 | 
var anObject = require('../internals/an-object'); 
 | 
var classof = require('../internals/classof'); 
 | 
var hasOwn = require('../internals/has-own-property'); 
 | 
var createProperty = require('../internals/create-property'); 
 | 
var createNonEnumerableProperty = require('../internals/create-non-enumerable-property'); 
 | 
var lengthOfArrayLike = require('../internals/length-of-array-like'); 
 | 
var validateArgumentsLength = require('../internals/validate-arguments-length'); 
 | 
var getRegExpFlags = require('../internals/regexp-get-flags'); 
 | 
var MapHelpers = require('../internals/map-helpers'); 
 | 
var SetHelpers = require('../internals/set-helpers'); 
 | 
var setIterate = require('../internals/set-iterate'); 
 | 
var detachTransferable = require('../internals/detach-transferable'); 
 | 
var ERROR_STACK_INSTALLABLE = require('../internals/error-stack-installable'); 
 | 
var PROPER_STRUCTURED_CLONE_TRANSFER = require('../internals/structured-clone-proper-transfer'); 
 | 
  
 | 
var Object = globalThis.Object; 
 | 
var Array = globalThis.Array; 
 | 
var Date = globalThis.Date; 
 | 
var Error = globalThis.Error; 
 | 
var TypeError = globalThis.TypeError; 
 | 
var PerformanceMark = globalThis.PerformanceMark; 
 | 
var DOMException = getBuiltIn('DOMException'); 
 | 
var Map = MapHelpers.Map; 
 | 
var mapHas = MapHelpers.has; 
 | 
var mapGet = MapHelpers.get; 
 | 
var mapSet = MapHelpers.set; 
 | 
var Set = SetHelpers.Set; 
 | 
var setAdd = SetHelpers.add; 
 | 
var setHas = SetHelpers.has; 
 | 
var objectKeys = getBuiltIn('Object', 'keys'); 
 | 
var push = uncurryThis([].push); 
 | 
var thisBooleanValue = uncurryThis(true.valueOf); 
 | 
var thisNumberValue = uncurryThis(1.0.valueOf); 
 | 
var thisStringValue = uncurryThis(''.valueOf); 
 | 
var thisTimeValue = uncurryThis(Date.prototype.getTime); 
 | 
var PERFORMANCE_MARK = uid('structuredClone'); 
 | 
var DATA_CLONE_ERROR = 'DataCloneError'; 
 | 
var TRANSFERRING = 'Transferring'; 
 | 
  
 | 
var checkBasicSemantic = function (structuredCloneImplementation) { 
 | 
  return !fails(function () { 
 | 
    var set1 = new globalThis.Set([7]); 
 | 
    var set2 = structuredCloneImplementation(set1); 
 | 
    var number = structuredCloneImplementation(Object(7)); 
 | 
    return set2 === set1 || !set2.has(7) || !isObject(number) || +number !== 7; 
 | 
  }) && structuredCloneImplementation; 
 | 
}; 
 | 
  
 | 
var checkErrorsCloning = function (structuredCloneImplementation, $Error) { 
 | 
  return !fails(function () { 
 | 
    var error = new $Error(); 
 | 
    var test = structuredCloneImplementation({ a: error, b: error }); 
 | 
    return !(test && test.a === test.b && test.a instanceof $Error && test.a.stack === error.stack); 
 | 
  }); 
 | 
}; 
 | 
  
 | 
// https://github.com/whatwg/html/pull/5749 
 | 
var checkNewErrorsCloningSemantic = function (structuredCloneImplementation) { 
 | 
  return !fails(function () { 
 | 
    var test = structuredCloneImplementation(new globalThis.AggregateError([1], PERFORMANCE_MARK, { cause: 3 })); 
 | 
    return test.name !== 'AggregateError' || test.errors[0] !== 1 || test.message !== PERFORMANCE_MARK || test.cause !== 3; 
 | 
  }); 
 | 
}; 
 | 
  
 | 
// FF94+, Safari 15.4+, Chrome 98+, NodeJS 17.0+, Deno 1.13+ 
 | 
// FF<103 and Safari implementations can't clone errors 
 | 
// https://bugzilla.mozilla.org/show_bug.cgi?id=1556604 
 | 
// FF103 can clone errors, but `.stack` of clone is an empty string 
 | 
// https://bugzilla.mozilla.org/show_bug.cgi?id=1778762 
 | 
// FF104+ fixed it on usual errors, but not on DOMExceptions 
 | 
// https://bugzilla.mozilla.org/show_bug.cgi?id=1777321 
 | 
// Chrome <102 returns `null` if cloned object contains multiple references to one error 
 | 
// https://bugs.chromium.org/p/v8/issues/detail?id=12542 
 | 
// NodeJS implementation can't clone DOMExceptions 
 | 
// https://github.com/nodejs/node/issues/41038 
 | 
// only FF103+ supports new (html/5749) error cloning semantic 
 | 
var nativeStructuredClone = globalThis.structuredClone; 
 | 
  
 | 
var FORCED_REPLACEMENT = IS_PURE 
 | 
  || !checkErrorsCloning(nativeStructuredClone, Error) 
 | 
  || !checkErrorsCloning(nativeStructuredClone, DOMException) 
 | 
  || !checkNewErrorsCloningSemantic(nativeStructuredClone); 
 | 
  
 | 
// Chrome 82+, Safari 14.1+, Deno 1.11+ 
 | 
// Chrome 78-81 implementation swaps `.name` and `.message` of cloned `DOMException` 
 | 
// Chrome returns `null` if cloned object contains multiple references to one error 
 | 
// Safari 14.1 implementation doesn't clone some `RegExp` flags, so requires a workaround 
 | 
// Safari implementation can't clone errors 
 | 
// Deno 1.2-1.10 implementations too naive 
 | 
// NodeJS 16.0+ does not have `PerformanceMark` constructor 
 | 
// NodeJS <17.2 structured cloning implementation from `performance.mark` is too naive 
 | 
// and can't clone, for example, `RegExp` or some boxed primitives 
 | 
// https://github.com/nodejs/node/issues/40840 
 | 
// no one of those implementations supports new (html/5749) error cloning semantic 
 | 
var structuredCloneFromMark = !nativeStructuredClone && checkBasicSemantic(function (value) { 
 | 
  return new PerformanceMark(PERFORMANCE_MARK, { detail: value }).detail; 
 | 
}); 
 | 
  
 | 
var nativeRestrictedStructuredClone = checkBasicSemantic(nativeStructuredClone) || structuredCloneFromMark; 
 | 
  
 | 
var throwUncloneable = function (type) { 
 | 
  throw new DOMException('Uncloneable type: ' + type, DATA_CLONE_ERROR); 
 | 
}; 
 | 
  
 | 
var throwUnpolyfillable = function (type, action) { 
 | 
  throw new DOMException((action || 'Cloning') + ' of ' + type + ' cannot be properly polyfilled in this engine', DATA_CLONE_ERROR); 
 | 
}; 
 | 
  
 | 
var tryNativeRestrictedStructuredClone = function (value, type) { 
 | 
  if (!nativeRestrictedStructuredClone) throwUnpolyfillable(type); 
 | 
  return nativeRestrictedStructuredClone(value); 
 | 
}; 
 | 
  
 | 
var createDataTransfer = function () { 
 | 
  var dataTransfer; 
 | 
  try { 
 | 
    dataTransfer = new globalThis.DataTransfer(); 
 | 
  } catch (error) { 
 | 
    try { 
 | 
      dataTransfer = new globalThis.ClipboardEvent('').clipboardData; 
 | 
    } catch (error2) { /* empty */ } 
 | 
  } 
 | 
  return dataTransfer && dataTransfer.items && dataTransfer.files ? dataTransfer : null; 
 | 
}; 
 | 
  
 | 
var cloneBuffer = function (value, map, $type) { 
 | 
  if (mapHas(map, value)) return mapGet(map, value); 
 | 
  
 | 
  var type = $type || classof(value); 
 | 
  var clone, length, options, source, target, i; 
 | 
  
 | 
  if (type === 'SharedArrayBuffer') { 
 | 
    if (nativeRestrictedStructuredClone) clone = nativeRestrictedStructuredClone(value); 
 | 
    // SharedArrayBuffer should use shared memory, we can't polyfill it, so return the original 
 | 
    else clone = value; 
 | 
  } else { 
 | 
    var DataView = globalThis.DataView; 
 | 
  
 | 
    // `ArrayBuffer#slice` is not available in IE10 
 | 
    // `ArrayBuffer#slice` and `DataView` are not available in old FF 
 | 
    if (!DataView && !isCallable(value.slice)) throwUnpolyfillable('ArrayBuffer'); 
 | 
    // detached buffers throws in `DataView` and `.slice` 
 | 
    try { 
 | 
      if (isCallable(value.slice) && !value.resizable) { 
 | 
        clone = value.slice(0); 
 | 
      } else { 
 | 
        length = value.byteLength; 
 | 
        options = 'maxByteLength' in value ? { maxByteLength: value.maxByteLength } : undefined; 
 | 
        // eslint-disable-next-line es/no-resizable-and-growable-arraybuffers -- safe 
 | 
        clone = new ArrayBuffer(length, options); 
 | 
        source = new DataView(value); 
 | 
        target = new DataView(clone); 
 | 
        for (i = 0; i < length; i++) { 
 | 
          target.setUint8(i, source.getUint8(i)); 
 | 
        } 
 | 
      } 
 | 
    } catch (error) { 
 | 
      throw new DOMException('ArrayBuffer is detached', DATA_CLONE_ERROR); 
 | 
    } 
 | 
  } 
 | 
  
 | 
  mapSet(map, value, clone); 
 | 
  
 | 
  return clone; 
 | 
}; 
 | 
  
 | 
var cloneView = function (value, type, offset, length, map) { 
 | 
  var C = globalThis[type]; 
 | 
  // in some old engines like Safari 9, typeof C is 'object' 
 | 
  // on Uint8ClampedArray or some other constructors 
 | 
  if (!isObject(C)) throwUnpolyfillable(type); 
 | 
  return new C(cloneBuffer(value.buffer, map), offset, length); 
 | 
}; 
 | 
  
 | 
var structuredCloneInternal = function (value, map) { 
 | 
  if (isSymbol(value)) throwUncloneable('Symbol'); 
 | 
  if (!isObject(value)) return value; 
 | 
  // effectively preserves circular references 
 | 
  if (map) { 
 | 
    if (mapHas(map, value)) return mapGet(map, value); 
 | 
  } else map = new Map(); 
 | 
  
 | 
  var type = classof(value); 
 | 
  var C, name, cloned, dataTransfer, i, length, keys, key; 
 | 
  
 | 
  switch (type) { 
 | 
    case 'Array': 
 | 
      cloned = Array(lengthOfArrayLike(value)); 
 | 
      break; 
 | 
    case 'Object': 
 | 
      cloned = {}; 
 | 
      break; 
 | 
    case 'Map': 
 | 
      cloned = new Map(); 
 | 
      break; 
 | 
    case 'Set': 
 | 
      cloned = new Set(); 
 | 
      break; 
 | 
    case 'RegExp': 
 | 
      // in this block because of a Safari 14.1 bug 
 | 
      // old FF does not clone regexes passed to the constructor, so get the source and flags directly 
 | 
      cloned = new RegExp(value.source, getRegExpFlags(value)); 
 | 
      break; 
 | 
    case 'Error': 
 | 
      name = value.name; 
 | 
      switch (name) { 
 | 
        case 'AggregateError': 
 | 
          cloned = new (getBuiltIn(name))([]); 
 | 
          break; 
 | 
        case 'EvalError': 
 | 
        case 'RangeError': 
 | 
        case 'ReferenceError': 
 | 
        case 'SuppressedError': 
 | 
        case 'SyntaxError': 
 | 
        case 'TypeError': 
 | 
        case 'URIError': 
 | 
          cloned = new (getBuiltIn(name))(); 
 | 
          break; 
 | 
        case 'CompileError': 
 | 
        case 'LinkError': 
 | 
        case 'RuntimeError': 
 | 
          cloned = new (getBuiltIn('WebAssembly', name))(); 
 | 
          break; 
 | 
        default: 
 | 
          cloned = new Error(); 
 | 
      } 
 | 
      break; 
 | 
    case 'DOMException': 
 | 
      cloned = new DOMException(value.message, value.name); 
 | 
      break; 
 | 
    case 'ArrayBuffer': 
 | 
    case 'SharedArrayBuffer': 
 | 
      cloned = cloneBuffer(value, map, type); 
 | 
      break; 
 | 
    case 'DataView': 
 | 
    case 'Int8Array': 
 | 
    case 'Uint8Array': 
 | 
    case 'Uint8ClampedArray': 
 | 
    case 'Int16Array': 
 | 
    case 'Uint16Array': 
 | 
    case 'Int32Array': 
 | 
    case 'Uint32Array': 
 | 
    case 'Float16Array': 
 | 
    case 'Float32Array': 
 | 
    case 'Float64Array': 
 | 
    case 'BigInt64Array': 
 | 
    case 'BigUint64Array': 
 | 
      length = type === 'DataView' ? value.byteLength : value.length; 
 | 
      cloned = cloneView(value, type, value.byteOffset, length, map); 
 | 
      break; 
 | 
    case 'DOMQuad': 
 | 
      try { 
 | 
        cloned = new DOMQuad( 
 | 
          structuredCloneInternal(value.p1, map), 
 | 
          structuredCloneInternal(value.p2, map), 
 | 
          structuredCloneInternal(value.p3, map), 
 | 
          structuredCloneInternal(value.p4, map) 
 | 
        ); 
 | 
      } catch (error) { 
 | 
        cloned = tryNativeRestrictedStructuredClone(value, type); 
 | 
      } 
 | 
      break; 
 | 
    case 'File': 
 | 
      if (nativeRestrictedStructuredClone) try { 
 | 
        cloned = nativeRestrictedStructuredClone(value); 
 | 
        // NodeJS 20.0.0 bug, https://github.com/nodejs/node/issues/47612 
 | 
        if (classof(cloned) !== type) cloned = undefined; 
 | 
      } catch (error) { /* empty */ } 
 | 
      if (!cloned) try { 
 | 
        cloned = new File([value], value.name, value); 
 | 
      } catch (error) { /* empty */ } 
 | 
      if (!cloned) throwUnpolyfillable(type); 
 | 
      break; 
 | 
    case 'FileList': 
 | 
      dataTransfer = createDataTransfer(); 
 | 
      if (dataTransfer) { 
 | 
        for (i = 0, length = lengthOfArrayLike(value); i < length; i++) { 
 | 
          dataTransfer.items.add(structuredCloneInternal(value[i], map)); 
 | 
        } 
 | 
        cloned = dataTransfer.files; 
 | 
      } else cloned = tryNativeRestrictedStructuredClone(value, type); 
 | 
      break; 
 | 
    case 'ImageData': 
 | 
      // Safari 9 ImageData is a constructor, but typeof ImageData is 'object' 
 | 
      try { 
 | 
        cloned = new ImageData( 
 | 
          structuredCloneInternal(value.data, map), 
 | 
          value.width, 
 | 
          value.height, 
 | 
          { colorSpace: value.colorSpace } 
 | 
        ); 
 | 
      } catch (error) { 
 | 
        cloned = tryNativeRestrictedStructuredClone(value, type); 
 | 
      } break; 
 | 
    default: 
 | 
      if (nativeRestrictedStructuredClone) { 
 | 
        cloned = nativeRestrictedStructuredClone(value); 
 | 
      } else switch (type) { 
 | 
        case 'BigInt': 
 | 
          // can be a 3rd party polyfill 
 | 
          cloned = Object(value.valueOf()); 
 | 
          break; 
 | 
        case 'Boolean': 
 | 
          cloned = Object(thisBooleanValue(value)); 
 | 
          break; 
 | 
        case 'Number': 
 | 
          cloned = Object(thisNumberValue(value)); 
 | 
          break; 
 | 
        case 'String': 
 | 
          cloned = Object(thisStringValue(value)); 
 | 
          break; 
 | 
        case 'Date': 
 | 
          cloned = new Date(thisTimeValue(value)); 
 | 
          break; 
 | 
        case 'Blob': 
 | 
          try { 
 | 
            cloned = value.slice(0, value.size, value.type); 
 | 
          } catch (error) { 
 | 
            throwUnpolyfillable(type); 
 | 
          } break; 
 | 
        case 'DOMPoint': 
 | 
        case 'DOMPointReadOnly': 
 | 
          C = globalThis[type]; 
 | 
          try { 
 | 
            cloned = C.fromPoint 
 | 
              ? C.fromPoint(value) 
 | 
              : new C(value.x, value.y, value.z, value.w); 
 | 
          } catch (error) { 
 | 
            throwUnpolyfillable(type); 
 | 
          } break; 
 | 
        case 'DOMRect': 
 | 
        case 'DOMRectReadOnly': 
 | 
          C = globalThis[type]; 
 | 
          try { 
 | 
            cloned = C.fromRect 
 | 
              ? C.fromRect(value) 
 | 
              : new C(value.x, value.y, value.width, value.height); 
 | 
          } catch (error) { 
 | 
            throwUnpolyfillable(type); 
 | 
          } break; 
 | 
        case 'DOMMatrix': 
 | 
        case 'DOMMatrixReadOnly': 
 | 
          C = globalThis[type]; 
 | 
          try { 
 | 
            cloned = C.fromMatrix 
 | 
              ? C.fromMatrix(value) 
 | 
              : new C(value); 
 | 
          } catch (error) { 
 | 
            throwUnpolyfillable(type); 
 | 
          } break; 
 | 
        case 'AudioData': 
 | 
        case 'VideoFrame': 
 | 
          if (!isCallable(value.clone)) throwUnpolyfillable(type); 
 | 
          try { 
 | 
            cloned = value.clone(); 
 | 
          } catch (error) { 
 | 
            throwUncloneable(type); 
 | 
          } break; 
 | 
        case 'CropTarget': 
 | 
        case 'CryptoKey': 
 | 
        case 'FileSystemDirectoryHandle': 
 | 
        case 'FileSystemFileHandle': 
 | 
        case 'FileSystemHandle': 
 | 
        case 'GPUCompilationInfo': 
 | 
        case 'GPUCompilationMessage': 
 | 
        case 'ImageBitmap': 
 | 
        case 'RTCCertificate': 
 | 
        case 'WebAssembly.Module': 
 | 
          throwUnpolyfillable(type); 
 | 
          // break omitted 
 | 
        default: 
 | 
          throwUncloneable(type); 
 | 
      } 
 | 
  } 
 | 
  
 | 
  mapSet(map, value, cloned); 
 | 
  
 | 
  switch (type) { 
 | 
    case 'Array': 
 | 
    case 'Object': 
 | 
      keys = objectKeys(value); 
 | 
      for (i = 0, length = lengthOfArrayLike(keys); i < length; i++) { 
 | 
        key = keys[i]; 
 | 
        createProperty(cloned, key, structuredCloneInternal(value[key], map)); 
 | 
      } break; 
 | 
    case 'Map': 
 | 
      value.forEach(function (v, k) { 
 | 
        mapSet(cloned, structuredCloneInternal(k, map), structuredCloneInternal(v, map)); 
 | 
      }); 
 | 
      break; 
 | 
    case 'Set': 
 | 
      value.forEach(function (v) { 
 | 
        setAdd(cloned, structuredCloneInternal(v, map)); 
 | 
      }); 
 | 
      break; 
 | 
    case 'Error': 
 | 
      createNonEnumerableProperty(cloned, 'message', structuredCloneInternal(value.message, map)); 
 | 
      if (hasOwn(value, 'cause')) { 
 | 
        createNonEnumerableProperty(cloned, 'cause', structuredCloneInternal(value.cause, map)); 
 | 
      } 
 | 
      if (name === 'AggregateError') { 
 | 
        cloned.errors = structuredCloneInternal(value.errors, map); 
 | 
      } else if (name === 'SuppressedError') { 
 | 
        cloned.error = structuredCloneInternal(value.error, map); 
 | 
        cloned.suppressed = structuredCloneInternal(value.suppressed, map); 
 | 
      } // break omitted 
 | 
    case 'DOMException': 
 | 
      if (ERROR_STACK_INSTALLABLE) { 
 | 
        createNonEnumerableProperty(cloned, 'stack', structuredCloneInternal(value.stack, map)); 
 | 
      } 
 | 
  } 
 | 
  
 | 
  return cloned; 
 | 
}; 
 | 
  
 | 
var tryToTransfer = function (rawTransfer, map) { 
 | 
  if (!isObject(rawTransfer)) throw new TypeError('Transfer option cannot be converted to a sequence'); 
 | 
  
 | 
  var transfer = []; 
 | 
  
 | 
  iterate(rawTransfer, function (value) { 
 | 
    push(transfer, anObject(value)); 
 | 
  }); 
 | 
  
 | 
  var i = 0; 
 | 
  var length = lengthOfArrayLike(transfer); 
 | 
  var buffers = new Set(); 
 | 
  var value, type, C, transferred, canvas, context; 
 | 
  
 | 
  while (i < length) { 
 | 
    value = transfer[i++]; 
 | 
  
 | 
    type = classof(value); 
 | 
  
 | 
    if (type === 'ArrayBuffer' ? setHas(buffers, value) : mapHas(map, value)) { 
 | 
      throw new DOMException('Duplicate transferable', DATA_CLONE_ERROR); 
 | 
    } 
 | 
  
 | 
    if (type === 'ArrayBuffer') { 
 | 
      setAdd(buffers, value); 
 | 
      continue; 
 | 
    } 
 | 
  
 | 
    if (PROPER_STRUCTURED_CLONE_TRANSFER) { 
 | 
      transferred = nativeStructuredClone(value, { transfer: [value] }); 
 | 
    } else switch (type) { 
 | 
      case 'ImageBitmap': 
 | 
        C = globalThis.OffscreenCanvas; 
 | 
        if (!isConstructor(C)) throwUnpolyfillable(type, TRANSFERRING); 
 | 
        try { 
 | 
          canvas = new C(value.width, value.height); 
 | 
          context = canvas.getContext('bitmaprenderer'); 
 | 
          context.transferFromImageBitmap(value); 
 | 
          transferred = canvas.transferToImageBitmap(); 
 | 
        } catch (error) { /* empty */ } 
 | 
        break; 
 | 
      case 'AudioData': 
 | 
      case 'VideoFrame': 
 | 
        if (!isCallable(value.clone) || !isCallable(value.close)) throwUnpolyfillable(type, TRANSFERRING); 
 | 
        try { 
 | 
          transferred = value.clone(); 
 | 
          value.close(); 
 | 
        } catch (error) { /* empty */ } 
 | 
        break; 
 | 
      case 'MediaSourceHandle': 
 | 
      case 'MessagePort': 
 | 
      case 'MIDIAccess': 
 | 
      case 'OffscreenCanvas': 
 | 
      case 'ReadableStream': 
 | 
      case 'RTCDataChannel': 
 | 
      case 'TransformStream': 
 | 
      case 'WebTransportReceiveStream': 
 | 
      case 'WebTransportSendStream': 
 | 
      case 'WritableStream': 
 | 
        throwUnpolyfillable(type, TRANSFERRING); 
 | 
    } 
 | 
  
 | 
    if (transferred === undefined) throw new DOMException('This object cannot be transferred: ' + type, DATA_CLONE_ERROR); 
 | 
  
 | 
    mapSet(map, value, transferred); 
 | 
  } 
 | 
  
 | 
  return buffers; 
 | 
}; 
 | 
  
 | 
var detachBuffers = function (buffers) { 
 | 
  setIterate(buffers, function (buffer) { 
 | 
    if (PROPER_STRUCTURED_CLONE_TRANSFER) { 
 | 
      nativeRestrictedStructuredClone(buffer, { transfer: [buffer] }); 
 | 
    } else if (isCallable(buffer.transfer)) { 
 | 
      buffer.transfer(); 
 | 
    } else if (detachTransferable) { 
 | 
      detachTransferable(buffer); 
 | 
    } else { 
 | 
      throwUnpolyfillable('ArrayBuffer', TRANSFERRING); 
 | 
    } 
 | 
  }); 
 | 
}; 
 | 
  
 | 
// `structuredClone` method 
 | 
// https://html.spec.whatwg.org/multipage/structured-data.html#dom-structuredclone 
 | 
$({ global: true, enumerable: true, sham: !PROPER_STRUCTURED_CLONE_TRANSFER, forced: FORCED_REPLACEMENT }, { 
 | 
  structuredClone: function structuredClone(value /* , { transfer } */) { 
 | 
    var options = validateArgumentsLength(arguments.length, 1) > 1 && !isNullOrUndefined(arguments[1]) ? anObject(arguments[1]) : undefined; 
 | 
    var transfer = options ? options.transfer : undefined; 
 | 
    var map, buffers; 
 | 
  
 | 
    if (transfer !== undefined) { 
 | 
      map = new Map(); 
 | 
      buffers = tryToTransfer(transfer, map); 
 | 
    } 
 | 
  
 | 
    var clone = structuredCloneInternal(value, map); 
 | 
  
 | 
    // since of an issue with cloning views of transferred buffers, we a forced to detach them later 
 | 
    // https://github.com/zloirock/core-js/issues/1265 
 | 
    if (buffers) detachBuffers(buffers); 
 | 
  
 | 
    return clone; 
 | 
  } 
 | 
}); 
 |