Scopes and variables decoder/encoder for source maps (ECMA-426).
Implements the "Scopes" proposal for source maps, enabling debuggers to
reconstruct original scope trees, variable bindings, and inlined function
call sites from generated code.
Examples
use srcmap_scopes::{
decode_scopes, encode_scopes, Binding, CallSite, GeneratedRange,
OriginalScope, Position, ScopeInfo,
};
let info = ScopeInfo {
scopes: vec![Some(OriginalScope {
start: Position { line: 0, column: 0 },
end: Position { line: 5, column: 0 },
name: None,
kind: Some("global".to_string()),
is_stack_frame: false,
variables: vec!["x".to_string()],
children: vec![],
})],
ranges: vec![GeneratedRange {
start: Position { line: 0, column: 0 },
end: Position { line: 5, column: 0 },
is_stack_frame: false,
is_hidden: false,
definition: Some(0),
call_site: None,
bindings: vec![Binding::Expression("_x".to_string())],
children: vec![],
}],
};
let mut names = vec!["global".to_string(), "x".to_string(), "_x".to_string()];
let encoded = encode_scopes(&info, &mut names);
assert!(!encoded.is_empty());
let decoded = decode_scopes(&encoded, &names, 1).unwrap();
assert_eq!(decoded.scopes.len(), 1);
assert!(decoded.scopes[0].is_some());