Skip to content

Commit c223b37

Browse files
authored
fix: Resolve conflict between "debugId" and "debug_id" (#100)
Using an alias produces an error when both fields are set. The intended behavior is to only read from "debug_id" if "debugId" is not present. We now encode this logic explicitly by deserializing both and choosing manually.
1 parent eb2f8a5 commit c223b37

File tree

5 files changed

+18
-2
lines changed

5 files changed

+18
-2
lines changed

CHANGELOG.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,12 @@
11
# Changelog
22

3+
## Unreleased
4+
5+
### Various fixes & improvements
6+
7+
- Fixed an error when deserializing sourcemaps with
8+
both `"debugId"` and `"debug_id"` keys (#100) by @loewenheim
9+
310
## 9.1.0
411

512
### Various fixes & improvements

src/decoder.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -253,7 +253,9 @@ pub fn decode_regular(rsm: RawSourceMap) -> Result<SourceMap> {
253253

254254
let mut sm = SourceMap::new(file, tokens, names, sources, source_content);
255255
sm.set_source_root(rsm.source_root);
256-
sm.set_debug_id(rsm.debug_id);
256+
// Use debug_id_old (from "debug_id" key) only if debug_id
257+
// from ( "debugId" key) is unset
258+
sm.set_debug_id(rsm.debug_id.or(rsm.debug_id_old));
257259
if let Some(ignore_list) = rsm.ignore_list {
258260
for idx in ignore_list {
259261
sm.add_to_ignore_list(idx);

src/encoder.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -179,6 +179,7 @@ impl Encodable for SourceMap {
179179
x_metro_module_paths: None,
180180
x_facebook_sources: None,
181181
debug_id: self.get_debug_id(),
182+
debug_id_old: None,
182183
}
183184
}
184185
}
@@ -213,6 +214,7 @@ impl Encodable for SourceMapIndex {
213214
x_metro_module_paths: None,
214215
x_facebook_sources: None,
215216
debug_id: None,
217+
debug_id_old: None,
216218
}
217219
}
218220
}

src/jsontypes.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,8 +54,12 @@ pub struct RawSourceMap {
5454
pub x_metro_module_paths: Option<Vec<String>>,
5555
#[serde(skip_serializing_if = "Option::is_none")]
5656
pub x_facebook_sources: FacebookSources,
57-
#[serde(skip_serializing_if = "Option::is_none", alias = "debugId")]
57+
#[serde(skip_serializing_if = "Option::is_none", rename = "debugId")]
5858
pub debug_id: Option<DebugId>,
59+
// This field only exists to be able to deserialize from "debug_id" keys
60+
// if "debugId" is unset.
61+
#[serde(skip_serializing_if = "Option::is_none", rename = "debug_id")]
62+
pub debug_id_old: Option<DebugId>,
5963
}
6064

6165
#[derive(Deserialize)]

src/types.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1340,6 +1340,7 @@ mod tests {
13401340
"sources":["coolstuff.js"],
13411341
"names":["x","alert"],
13421342
"mappings":"AAAA,GAAIA,GAAI,EACR,IAAIA,GAAK,EAAG,CACVC,MAAM",
1343+
"debug_id": "11111111-1111-1111-1111-111111111111",
13431344
"debugId":"00000000-0000-0000-0000-000000000000"
13441345
}"#;
13451346

0 commit comments

Comments
 (0)