use vize_carton::{CompactString, FxHashMap, String};
pub const COMPILER_MACRO_NAMES: &[&str] = &[
"defineProps",
"defineEmits",
"defineExpose",
"defineModel",
"defineOptions",
"defineSlots",
"withDefaults",
"useTemplateRef",
];
use vize_relief::BindingType;
#[derive(Debug, Default, Clone)]
pub struct BindingMetadata {
pub bindings: FxHashMap<CompactString, BindingType>,
pub is_script_setup: bool,
pub props_aliases: FxHashMap<CompactString, CompactString>,
}
impl BindingMetadata {
#[inline]
pub fn new() -> Self {
Self::default()
}
#[inline]
pub fn script_setup() -> Self {
Self {
is_script_setup: true,
..Default::default()
}
}
#[inline]
pub fn add(&mut self, name: impl AsRef<str>, binding_type: BindingType) {
self.bindings
.insert(CompactString::new(name.as_ref()), binding_type);
}
#[inline]
pub fn get(&self, name: &str) -> Option<BindingType> {
self.bindings.get(name).copied()
}
#[inline]
pub fn contains(&self, name: &str) -> bool {
self.bindings.contains_key(name)
}
#[inline]
pub fn is_ref(&self, name: &str) -> bool {
matches!(
self.get(name),
Some(BindingType::SetupRef | BindingType::SetupMaybeRef)
)
}
#[inline]
pub fn is_prop(&self, name: &str) -> bool {
matches!(
self.get(name),
Some(BindingType::Props | BindingType::PropsAliased)
)
}
#[inline]
pub fn iter(&self) -> impl Iterator<Item = (&str, BindingType)> {
self.bindings.iter().map(|(k, v)| (k.as_str(), *v))
}
}
#[derive(Debug, Clone)]
pub struct UndefinedRef {
pub name: CompactString,
pub offset: u32,
pub context: CompactString,
}
#[derive(Debug, Clone)]
pub struct UnusedTemplateVar {
pub name: CompactString,
pub offset: u32,
pub context: UnusedVarContext,
}
#[derive(Debug, Clone)]
pub enum UnusedVarContext {
VForValue,
VForKey,
VForIndex,
VSlot { slot_name: String },
}
#[derive(Debug, Clone)]
pub struct TypeExport {
pub name: CompactString,
pub kind: TypeExportKind,
pub start: u32,
pub end: u32,
pub hoisted: bool,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[repr(u8)]
pub enum TypeExportKind {
Type = 0,
Interface = 1,
}
#[derive(Debug, Clone, Copy)]
pub struct ImportStatementInfo {
pub start: u32,
pub end: u32,
}
#[derive(Debug, Clone, Copy)]
pub struct ReExportInfo {
pub start: u32,
pub end: u32,
}
#[derive(Debug, Clone)]
pub struct InvalidExport {
pub name: CompactString,
pub kind: InvalidExportKind,
pub start: u32,
pub end: u32,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[repr(u8)]
pub enum InvalidExportKind {
Const = 0,
Let = 1,
Var = 2,
Function = 3,
Class = 4,
Default = 5,
}