use swc_common::{Span, DUMMY_SP};
use swc_ecma_ast::*;
use swc_ecma_visit::{VisitMut, VisitMutWith};
pub struct InterfaceExtractor {
}
impl InterfaceExtractor {
pub fn new() -> Self {
Self {}
}
}
impl VisitMut for InterfaceExtractor {
fn visit_mut_ts_interface_decl(&mut self, n: &mut TsInterfaceDecl) {
let mut parts = vec![];
let interface_name = n.id.sym.clone();
parts.push(interface_name);
for member in &n.body.body {
if let TsTypeElement::TsPropertySignature(member) = &member {
let prop_name = { match member.key.as_ref() { Expr::Ident(i) => i.sym.clone(), _ => "".into() } }.clone();
parts.push(prop_name);
}
}
return parts.join(",");
}
fn visit_mut_call_expr(&mut self, n: &mut CallExpr) {
if {
let __matched = matches!(n.callee, Expr::Ident(_));
__matched
} {
let callee_name = { let __callee = &n.callee; match __callee { Callee::Expr(e) => match e.as_ref() { Expr::Ident(i) => i.sym.clone(), _ => "".into() }, _ => "".into() } }.clone();
if (callee_name == "useState") {
return callee_name;
}
}
return "";
}
}