rspack_binding_api 0.101.5

Rspack shared binding API
Documentation
use napi_derive::napi;
use rspack_plugin_extract_css::plugin::{CssExtractOptions, InsertType};
use rustc_hash::FxHashMap as HashMap;

use crate::filename::JsFilename;

#[napi(object, object_to_js = false)]
pub struct RawCssExtractPluginOption {
  pub filename: JsFilename,
  pub chunk_filename: JsFilename,
  pub ignore_order: bool,
  pub insert: Option<String>,
  pub attributes: HashMap<String, String>,
  pub link_type: Option<String>,
  pub runtime: bool,
  pub pathinfo: bool,
  pub enforce_relative: bool,
}

impl From<RawCssExtractPluginOption> for CssExtractOptions {
  fn from(value: RawCssExtractPluginOption) -> Self {
    Self {
      filename: value.filename.into(),
      chunk_filename: value.chunk_filename.into(),
      ignore_order: value.ignore_order,
      insert: value.insert.map_or(InsertType::Default, |insert| {
        if insert.starts_with("function") || insert.starts_with('(') {
          InsertType::Fn(insert)
        } else {
          InsertType::Selector(insert)
        }
      }),
      attributes: value.attributes.into_iter().collect(),
      link_type: value.link_type,
      runtime: value.runtime,
      pathinfo: value.pathinfo,
      enforce_relative: value.enforce_relative,
    }
  }
}