rolldown_swc_utils 0.0.1

rolldown_swc_utils
Documentation
use swc_core::ecma::{ast, atoms::JsWord};

pub trait ModuleExportNameExt {
  fn expect_ident(&self) -> &ast::Ident;
}

impl ModuleExportNameExt for ast::ModuleExportName {
  fn expect_ident(&self) -> &ast::Ident {
    match self {
      ast::ModuleExportName::Ident(ident) => ident,
      _ => panic!("Expected ident, but got {self:#?}"),
    }
  }
}

pub trait ImportNamedSpecifierExt {
  fn imported_name(&self) -> &JsWord;

  fn imported_as_ident(&self) -> &ast::Ident;
}

impl ImportNamedSpecifierExt for ast::ImportNamedSpecifier {
  fn imported_name(&self) -> &JsWord {
    match &self.imported {
      Some(imported) => &imported.expect_ident().sym,
      None => &self.local.sym,
    }
  }

  fn imported_as_ident(&self) -> &ast::Ident {
    &self.local
  }
}

pub trait ExportNamedSpecifierExt {
  fn local_ident(&self) -> &ast::Ident;
  fn exported_as_name(&self) -> &JsWord;
}

impl ExportNamedSpecifierExt for ast::ExportNamedSpecifier {
  fn local_ident(&self) -> &ast::Ident {
    self.orig.expect_ident()
  }

  fn exported_as_name(&self) -> &JsWord {
    match &self.exported {
      Some(exported) => &exported.expect_ident().sym,
      None => &self.orig.expect_ident().sym,
    }
  }
}