Skip to content

Commit 705fa80

Browse files
authored
chore: using oxc sourcemap (#13)
* chore: using oxc sourcemap * chore: update * chore: update
1 parent 24e7c7e commit 705fa80

File tree

5 files changed

+51
-44
lines changed

5 files changed

+51
-44
lines changed

Cargo.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,11 @@ index_vec = { version = "0.1.3" }
1212
rustc-hash = { version = "1.1.0" }
1313
# regex = "1.10.2"
1414
once_cell = "1.18.0"
15-
sourcemap = { version = "7.1.1", optional = true }
15+
oxc = { version = "0.12.5", features = ["sourcemap"] }
1616

1717
[features]
1818
# Enable source map functionality
19-
source_map = ["sourcemap"]
19+
source_map = ["oxc/sourcemap"]
2020

2121
[dev-dependencies]
2222
glob = "0.3.1"

examples/source_map.rs

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,11 @@ fn main() {
1515

1616
let sm = s.source_map(SourceMapOptions {
1717
include_content: true,
18+
..Default::default()
1819
});
1920

20-
std::fs::write("./demo.map.json", {
21-
let mut buf = vec![];
22-
sm.to_writer(&mut buf).unwrap();
23-
String::from_utf8(buf).unwrap()
24-
}).unwrap();
21+
std::fs::write("./demo.map.json", sm.to_json_string().unwrap())
22+
.unwrap();
2523
std::fs::write("./demo.jsx", s.to_string()).unwrap();
2624

2725
println!("{:#?}", s.to_string());

src/magic_string/source_map.rs

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,27 @@
1-
use crate::{
2-
locator::Locator,
3-
MagicString,
4-
sourcemap_builder::SourcemapBuilder,
5-
};
1+
use std::sync::Arc;
62

7-
#[derive(Debug, Default)]
3+
use crate::{locator::Locator, sourcemap_builder::SourcemapBuilder, MagicString};
4+
5+
#[derive(Debug)]
86
pub struct SourceMapOptions {
97
pub include_content: bool,
8+
pub source: Arc<str>,
9+
}
10+
11+
impl Default for SourceMapOptions {
12+
fn default() -> Self {
13+
Self {
14+
include_content: false,
15+
source: "".into(),
16+
}
17+
}
1018
}
1119

1220
impl<'s> MagicString<'s> {
13-
pub fn source_map(&self, opts: SourceMapOptions) -> sourcemap::SourceMap {
21+
pub fn source_map(&self, opts: SourceMapOptions) -> oxc::sourcemap::SourceMap {
1422
let mut source_builder = SourcemapBuilder::new();
1523

16-
source_builder.set_source("");
17-
if opts.include_content {
18-
source_builder.set_source_contents(&self.source);
19-
}
24+
source_builder.set_source_and_content(&opts.source, &self.source);
2025

2126
let locator = Locator::new(&self.source);
2227

src/sourcemap_builder.rs

Lines changed: 24 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@ pub struct SourcemapBuilder {
44
generated_code_line: TextSize,
55
/// `generated_code_column` is calculated based on utf-16.
66
generated_code_column: TextSize,
7-
source_id: u32,
8-
source_map_builder: sourcemap::SourceMapBuilder,
7+
source_id: u32,
8+
source_map_builder: oxc::sourcemap::SourceMapBuilder,
99
}
1010

1111
impl SourcemapBuilder {
@@ -14,34 +14,37 @@ impl SourcemapBuilder {
1414
generated_code_line: 0,
1515
generated_code_column: 0,
1616
source_id: 0,
17-
source_map_builder: sourcemap::SourceMapBuilder::new(None),
17+
source_map_builder: oxc::sourcemap::SourceMapBuilder::default(),
1818
}
1919
}
2020

21-
pub fn into_source_map(self) -> sourcemap::SourceMap {
21+
pub fn into_source_map(self) -> oxc::sourcemap::SourceMap {
2222
self.source_map_builder.into_sourcemap()
2323
}
2424

25-
pub fn set_source(&mut self, source: &str) {
26-
self.source_id = self.source_map_builder.add_source(source);
27-
}
28-
29-
pub fn set_source_contents(&mut self, content: &str) {
30-
self.source_map_builder.set_source_contents(self.source_id, Some(content));
25+
pub fn set_source_and_content(&mut self, id: &str, content: &str) {
26+
self.source_id = self.source_map_builder.set_source_and_content(id, content);
3127
}
3228

3329
pub fn add_chunk(
3430
&mut self,
3531
chunk: &Chunk,
3632
locator: &Locator,
3733
source: &str,
38-
name: Option<&str>
34+
name: Option<&str>,
3935
) {
4036
let name_id = name.map(|name| self.source_map_builder.add_name(name));
4137
let mut loc = locator.locate(chunk.start());
4238
if let Some(edited_content) = &chunk.edited_content {
4339
if !edited_content.is_empty() {
44-
self.source_map_builder.add_raw(self.generated_code_line, self.generated_code_column, loc.line, loc.column, Some(self.source_id), name_id);
40+
self.source_map_builder.add_token(
41+
self.generated_code_line,
42+
self.generated_code_column,
43+
loc.line,
44+
loc.column,
45+
Some(self.source_id),
46+
name_id,
47+
);
4548
}
4649
self.advance(edited_content);
4750
} else {
@@ -57,7 +60,14 @@ impl SourcemapBuilder {
5760
_ => {
5861
if new_line {
5962
new_line = false;
60-
self.source_map_builder.add_raw(self.generated_code_line, self.generated_code_column, loc.line, loc.column, Some(self.source_id), name_id);
63+
self.source_map_builder.add_token(
64+
self.generated_code_line,
65+
self.generated_code_column,
66+
loc.line,
67+
loc.column,
68+
Some(self.source_id),
69+
name_id,
70+
);
6171
}
6272

6373
let char_utf16_len = char.len_utf16() as u32;
@@ -89,4 +99,4 @@ impl SourcemapBuilder {
8999
self.generated_code_line += 1;
90100
self.generated_code_column = 0;
91101
}
92-
}
102+
}

tests/magic_string_source_map.rs

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -19,27 +19,21 @@ fn basic() {
1919

2020
let sm = s.source_map(SourceMapOptions {
2121
include_content: true,
22+
..Default::default()
2223
});
2324

2425
assert_eq!(
25-
{
26-
let mut buf = vec![];
27-
sm.to_writer(&mut buf).unwrap();
28-
String::from_utf8(buf).unwrap()
29-
},
30-
"{\"version\":3,\"sources\":[\"\"],\"sourcesContent\":[\"<div>\\n hello, world\\n</div>\"],\"names\":[\"d\",\"v\",\"div\"],\"mappings\":\"AAAA,CAACA,CAAC,CAACC,CAAC;AACJ;AACA,EAAEC,EAAG\"}"
26+
sm.to_json_string().unwrap(),
27+
"{\"version\":3,\"names\":[\"d\",\"v\",\"div\"],\"sources\":[\"\"],\"sourcesContent\":[\"<div>\\n hello, world\\n</div>\"],\"mappings\":\"AAAA,CAACA,CAAC,CAACC,CAAC;AACJ;AACA,EAAEC,EAAG\"}"
3128
);
3229

3330
s.prepend("import React from 'react';\n");
3431
let sm = s.source_map(SourceMapOptions {
3532
include_content: true,
33+
..Default::default()
3634
});
3735
assert_eq!(
38-
{
39-
let mut buf = vec![];
40-
sm.to_writer(&mut buf).unwrap();
41-
String::from_utf8(buf).unwrap()
42-
},
43-
"{\"version\":3,\"sources\":[\"\"],\"sourcesContent\":[\"<div>\\n hello, world\\n</div>\"],\"names\":[\"d\",\"v\",\"div\"],\"mappings\":\";AAAA,CAACA,CAAC,CAACC,CAAC;AACJ;AACA,EAAEC,EAAG\"}"
36+
sm.to_json_string().unwrap(),
37+
"{\"version\":3,\"names\":[\"d\",\"v\",\"div\"],\"sources\":[\"\"],\"sourcesContent\":[\"<div>\\n hello, world\\n</div>\"],\"mappings\":\";AAAA,CAACA,CAAC,CAACC,CAAC;AACJ;AACA,EAAEC,EAAG\"}"
4438
);
4539
}

0 commit comments

Comments
 (0)