{"record":{"id":"9513918fe5ccee60","repo":"swc-project/swc","slug":"unable-to-access-unknown-nodes-951391","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/pat.rs","lineNumber":41,"sourceCode":"}\n\nimpl Babelify for Pat {\n    type Output = PatOutput;\n\n    fn babelify(self, ctx: &Context) -> Self::Output {\n        match self {\n            Pat::Ident(i) => PatOutput::Id(i.babelify(ctx)),\n            Pat::Array(a) => PatOutput::Array(a.babelify(ctx)),\n            Pat::Rest(r) => PatOutput::Rest(r.babelify(ctx)),\n            Pat::Object(o) => PatOutput::Object(o.babelify(ctx)),\n            Pat::Assign(a) => PatOutput::Assign(a.babelify(ctx)),\n            Pat::Expr(e) => PatOutput::Expr(Box::alloc().init(e.babelify(ctx).into())),\n            Pat::Invalid(_) => panic!(\n                \"illegal conversion: Cannot convert {:?} to PatOutput\",\n                &self\n            ),\n            #[cfg(swc_ast_unknown)]\n            _ => panic!(\"unable to access unknown nodes\"),\n        }\n    }\n}\n\nimpl From<PatOutput> for Pattern {\n    fn from(pat: PatOutput) -> Self {\n        match pat {\n            PatOutput::Assign(a) => Pattern::Assignment(a),\n            PatOutput::Array(a) => Pattern::Array(a),\n            PatOutput::Object(o) => Pattern::Object(o),\n            _ => panic!(\"illegal conversion: Cannot convert {:?} to Pattern\", &pat),\n        }\n    }\n}\n\nimpl From<PatOutput> for ObjectPropVal {\n    fn from(pat: PatOutput) -> Self {\n        match pat {","sourceCodeStart":23,"sourceCodeEnd":59,"githubUrl":"https://github.com/swc-project/swc/blob/5176682b65416c6b5de6b47379ae1588ea3ecb3f/crates/swc_estree_compat/src/babelify/pat.rs#L23-L59","documentation":"babelify maps each SWC binding-pattern kind (Ident, Array, Rest, Object, Assign, Expr) to a PatOutput; the `_` arm exists only under the `swc_ast_unknown` cfg and panics on any pattern variant this build of swc_estree_compat does not recognize. It indicates the AST was produced by a swc_ecma_ast whose Pat enum is newer than the converter.","triggerScenarios":"Babelify a pattern node carrying an Unknown/newly added Pat variant in a build with `--cfg=swc_ast_unknown` — e.g. a plugin host converting an AST from a newer swc version, or a fork adding a pattern kind without a babelify arm.","commonSituations":"Plugin builds (cfg auto-set by plugin .cargo/config.toml), dependency drift between swc_ecma_ast and swc_estree_compat, deserializing foreign ASTs into the converter.","solutions":["Build the estree-conversion binary without `--cfg=swc_ast_unknown`","Unify swc crate versions on one swc_core release","Cross boundaries via serialization so unknown variants fail at decode","Add the missing Pat arm in pat.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 Pat nodes; build without --cfg=swc_ast_unknown\");","typeGuard":null,"tryCatchPattern":"use std::panic::{catch_unwind, AssertUnwindSafe};\n\nlet estree = catch_unwind(AssertUnwindSafe(|| program.babelify()))\n    .map_err(|p| anyhow!(\"babelify panicked: {:?}\", p))?;","preventionTips":["Exclude --cfg=swc_ast_unknown from babelify builds","Keep one swc_ecma_ast version in the dependency graph","Serialize ASTs across process boundaries instead of sharing enum values","Watch swc release notes for new pattern variants when upgrading"],"tags":["rust","swc","babelify","binding-pattern","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"}