'use strict'; 
 | 
var globalThis = require('../internals/global-this'); 
 | 
var getBuiltInNodeModule = require('../internals/get-built-in-node-module'); 
 | 
var PROPER_STRUCTURED_CLONE_TRANSFER = require('../internals/structured-clone-proper-transfer'); 
 | 
  
 | 
var structuredClone = globalThis.structuredClone; 
 | 
var $ArrayBuffer = globalThis.ArrayBuffer; 
 | 
var $MessageChannel = globalThis.MessageChannel; 
 | 
var detach = false; 
 | 
var WorkerThreads, channel, buffer, $detach; 
 | 
  
 | 
if (PROPER_STRUCTURED_CLONE_TRANSFER) { 
 | 
  detach = function (transferable) { 
 | 
    structuredClone(transferable, { transfer: [transferable] }); 
 | 
  }; 
 | 
} else if ($ArrayBuffer) try { 
 | 
  if (!$MessageChannel) { 
 | 
    WorkerThreads = getBuiltInNodeModule('worker_threads'); 
 | 
    if (WorkerThreads) $MessageChannel = WorkerThreads.MessageChannel; 
 | 
  } 
 | 
  
 | 
  if ($MessageChannel) { 
 | 
    channel = new $MessageChannel(); 
 | 
    buffer = new $ArrayBuffer(2); 
 | 
  
 | 
    $detach = function (transferable) { 
 | 
      channel.port1.postMessage(null, [transferable]); 
 | 
    }; 
 | 
  
 | 
    if (buffer.byteLength === 2) { 
 | 
      $detach(buffer); 
 | 
      if (buffer.byteLength === 0) detach = $detach; 
 | 
    } 
 | 
  } 
 | 
} catch (error) { /* empty */ } 
 | 
  
 | 
module.exports = detach; 
 |