rspack_binding_api 0.7.11

Rspack shared binding API
Documentation
use std::sync::{Arc, RwLock};

use rspack_fs::FileMetadata;
use rspack_paths::Utf8Path;

pub trait VirtualFileStore: Send + Sync {
  fn write_file(&mut self, path: &Utf8Path, content: Vec<u8>);

  fn get_file_content(&self, path: &Utf8Path) -> Option<&Vec<u8>>;

  fn get_file_metadata(&self, path: &Utf8Path) -> Option<FileMetadata>;

  fn read_dir(&self, path: &Utf8Path) -> Option<Vec<String>>;

  fn contains(&self, path: &Utf8Path) -> bool;
}

#[napi(js_name = "VirtualFileStore")]
pub struct JsVirtualFileStore(Arc<RwLock<dyn VirtualFileStore>>);

#[derive(Debug)]
#[napi(object, object_to_js = false)]
pub struct JsVirtualFile {
  pub path: String,
  pub content: String,
}

#[napi]
impl JsVirtualFileStore {
  pub fn new(store: Arc<RwLock<dyn VirtualFileStore>>) -> Self {
    Self(store)
  }

  #[napi]
  pub fn write_virtual_file_sync(&self, path: String, content: String) {
    if let Ok(mut store) = self.0.write() {
      store.write_file(path.as_str().into(), content.into());
    }
  }

  #[napi]
  pub fn batch_write_virtual_files_sync(&self, files: Vec<JsVirtualFile>) {
    if let Ok(mut store) = self.0.write() {
      for f in files {
        store.write_file(f.path.as_str().into(), f.content.into());
      }
    }
  }
}

mod fs;
pub use fs::VirtualFileSystem;

mod trie_store;
pub use trie_store::TrieVirtualFileStore;