{"record":{"id":"9ffe21103e967a94","repo":"swc-project/swc","slug":"unable-to-access-unknown-nodes-9ffe21","errorCode":null,"errorMessage":"unable to access unknown nodes","messagePattern":"unable to access unknown nodes","errorType":"panic","errorClass":null,"httpStatus":null,"severity":"error","filePath":"crates/swc_estree_compat/src/babelify/stmt.rs","lineNumber":78,"sourceCode":"            Stmt::Switch(s) => Statement::Switch(s.babelify(ctx)),\n            Stmt::Throw(s) => Statement::Throw(s.babelify(ctx)),\n            Stmt::Try(s) => Statement::Try(s.babelify(ctx)),\n            Stmt::While(s) => Statement::While(s.babelify(ctx)),\n            Stmt::DoWhile(s) => Statement::DoWhile(s.babelify(ctx)),\n            Stmt::For(s) => Statement::For(s.babelify(ctx)),\n            Stmt::ForIn(s) => Statement::ForIn(s.babelify(ctx)),\n            Stmt::ForOf(s) => Statement::ForOf(s.babelify(ctx)),\n            Stmt::Decl(decl) => match decl {\n                Decl::Class(d) => Statement::ClassDecl(d.babelify(ctx)),\n                Decl::Fn(d) => Statement::FuncDecl(d.babelify(ctx)),\n                Decl::Var(d) => Statement::VarDecl(d.babelify(ctx)),\n                Decl::Using(d) => Statement::UsingDecl(d.babelify(ctx)),\n                Decl::TsInterface(d) => Statement::TSInterfaceDecl(d.babelify(ctx)),\n                Decl::TsTypeAlias(d) => Statement::TSTypeAliasDecl(d.babelify(ctx)),\n                Decl::TsEnum(d) => Statement::TSEnumDecl(d.babelify(ctx)),\n                Decl::TsModule(d) => Statement::TSModuleDecl(d.babelify(ctx)),\n                #[cfg(swc_ast_unknown)]\n                _ => panic!(\"unable to access unknown nodes\"),\n            },\n            Stmt::Expr(s) => Statement::Expr(s.babelify(ctx)),\n            #[cfg(swc_ast_unknown)]\n            _ => panic!(\"unable to access unknown nodes\"),\n        }\n    }\n}\n\nimpl Babelify for ExprStmt {\n    type Output = ExpressionStatement;\n\n    fn babelify(self, ctx: &Context) -> Self::Output {\n        ExpressionStatement {\n            base: ctx.base(self.span),\n            expression: Box::alloc().init(self.expr.babelify(ctx).into()),\n        }\n    }\n}","sourceCodeStart":60,"sourceCodeEnd":96,"githubUrl":"https://github.com/swc-project/swc/blob/5176682b65416c6b5de6b47379ae1588ea3ecb3f/crates/swc_estree_compat/src/babelify/stmt.rs#L60-L96","documentation":"When babelify converts `Stmt::Decl`, it maps each declaration kind (class, function, var, using, and the TS declaration forms) to a Babel statement. The `_` arm inside the Decl match is compiled only under the `swc_ast_unknown` cfg and panics on a Decl variant this build of swc_estree_compat does not recognize.","triggerScenarios":"Babelify a statement containing an Unknown/newer Decl variant — e.g. a declaration kind added by a newer swc_ecma_ast — while the binary was compiled with `--cfg=swc_ast_unknown`.","commonSituations":"Plugin builds where the cfg is auto-enabled; dependency drift between swc_ecma_ast and swc_estree_compat; forks adding declaration nodes without babelify arms.","solutions":["Build the estree host without `--cfg=swc_ast_unknown`","Align all swc crates to one swc_core release","Cross boundaries via serialization so unknown variants fail as decode errors","Add the missing Decl mapping in stmt.rs upstream"],"exampleFix":"# before\nRUSTFLAGS=\"--cfg=swc_ast_unknown\" cargo build\n\n# after\ncargo build","handlingStrategy":"validation","validationCode":"#[cfg(swc_ast_unknown)]\ncompile_error!(\"babelify panics on Unknown Decl nodes; build without --cfg=swc_ast_unknown\");","typeGuard":null,"tryCatchPattern":"use std::panic::{catch_unwind, AssertUnwindSafe};\n\ncatch_unwind(AssertUnwindSafe(|| program.babelify()))\n    .map_err(|p| anyhow!(\"babelify panicked: {:?}\", p))?;","preventionTips":["Scope --cfg=swc_ast_unknown to plugin crates, never to babelify hosts","Keep swc_ecma_ast and swc_estree_compat on one swc_core release","Serialize ASTs across version boundaries","Add fixtures for new declaration syntax on every swc upgrade"],"tags":["rust","swc","babelify","declaration","cfg-flag","version-mismatch","panic"],"backgroundTag":"unknown-ast-variant-panic","analyzedSha":"5176682b65416c6b5de6b47379ae1588ea3ecb3f","analyzedAt":"2026-08-17T16:16:52.067Z","schemaVersion":2},"datasetVersion":"2026-08-22T14:17:55.899Z"}