| 'use strict'; |
| |
| const { |
| codes: { ERR_MISSING_ARGS }, |
| } = require('internal/errors'); |
| |
| const { |
| MessageChannel, |
| receiveMessageOnPort, |
| } = require('internal/worker/io'); |
| |
| let channel; |
| function structuredClone(value, options = undefined) { |
| if (arguments.length === 0) { |
| throw new ERR_MISSING_ARGS('value'); |
| } |
| |
| // TODO: Improve this with a more efficient solution that avoids |
| // instantiating a MessageChannel |
| channel ??= new MessageChannel(); |
| channel.port1.unref(); |
| channel.port2.unref(); |
| channel.port1.postMessage(value, options?.transfer); |
| return receiveMessageOnPort(channel.port2).message; |
| } |
| |
| module.exports = { |
| structuredClone, |
| }; |