parcel-bundler / parcel

The zero configuration build tool for the web. 📦🚀
https://parceljs.org
MIT License
43.41k stars 2.26k forks source link

Worker thread initialization via JsTransferable #9861

Closed alshdavid closed 2 months ago

alshdavid commented 2 months ago

💻 Examples

// Main thread
#[napi]
fn create_foo() -> napi::Result<JsTransferable<String>> {
  let my_string = "hello world".to_string();
  Ok(JsTransferable::new(my_string))
}
// Main thread
import napi from 'napi.node'

let my_string_ptr = napi.createFoo();
workerThread.postMessage(my_string_ptr);
// Worker thread
import napi from 'napi.node'
import { parentPort } from 'node::worker_threads'

parentPort.addEvent('message', ({ data: my_string_ptr }) => {
  napi.useFoo(my_string_ptr)
})
// Worker thread
#[napi]
fn use_foo(my_string_ptr: JsTransferable<String>) -> napi::Result<()> {
  let my_string = my_string_ptr.take()?;
  println!("{my_string}");
  Ok(())
}