1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
use crate::{module_decl::ModuleDecl, stmt::Stmt}; use is_macro::Is; use swc_atoms::JsWord; use swc_common::{ast_node, Span}; #[ast_node] #[derive(Eq, Hash, Is)] pub enum Program { #[tag("Module")] Module(Module), #[tag("Script")] Script(Script), } #[ast_node("Module")] #[derive(Eq, Hash)] pub struct Module { pub span: Span, pub body: Vec<ModuleItem>, #[serde(default, rename = "interpreter")] pub shebang: Option<JsWord>, } #[ast_node("Script")] #[derive(Eq, Hash)] pub struct Script { pub span: Span, pub body: Vec<Stmt>, #[serde(default, rename = "interpreter")] pub shebang: Option<JsWord>, } #[ast_node] #[derive(Eq, Hash, Is)] pub enum ModuleItem { #[tag("ImportDeclaration")] #[tag("ExportDeclaration")] #[tag("ExportNamedDeclaration")] #[tag("ExportDefaultDeclaration")] #[tag("ExportDefaultExpression")] #[tag("ExportAllDeclaration")] #[tag("TsImportEqualsDeclaration")] #[tag("TsExportAssignment")] #[tag("TsNamespaceExportDeclaration")] ModuleDecl(ModuleDecl), #[tag("*")] Stmt(Stmt), }