Skip to content

Commit 9b95ff3

Browse files
authored
fix: attaching inline source map into module code when inspect is enabled (#356)
* stamp: attaching inline source map into module code when inspect is enabled * stamp(sb_module_loader): add dependency * chore: update `Cargo.lock`
1 parent 15407a7 commit 9b95ff3

File tree

5 files changed

+41
-6
lines changed

5 files changed

+41
-6
lines changed

Cargo.lock

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

crates/base/src/deno_runtime.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -366,6 +366,7 @@ impl DenoRuntime {
366366
eszip,
367367
maybe_arc_import_map,
368368
import_map_path,
369+
maybe_inspector.is_some(),
369370
)
370371
.await?;
371372

crates/sb_module_loader/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ deno_npm.workspace = true
2424
once_cell.workspace = true
2525
deno_tls.workspace = true
2626
monch.workspace = true
27+
base64.workspace = true
2728
sb_core = { version = "0.1.0", path = "../sb_core" }
2829
sb_node = { version = "0.1.0", path = "../node" }
2930
sb_npm = { version = "0.1.0", path = "../npm" }

crates/sb_module_loader/standalone/mod.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ pub async fn create_module_loader_for_eszip(
5757
mut eszip: eszip::EszipV2,
5858
metadata: Metadata,
5959
maybe_import_map: Option<ImportMap>,
60+
include_source_map: bool,
6061
) -> Result<RuntimeProviders, AnyError> {
6162
// let main_module = &metadata.entrypoint;
6263
let current_exe_path = std::env::current_exe().unwrap();
@@ -191,6 +192,7 @@ pub async fn create_module_loader_for_eszip(
191192
Ok(RuntimeProviders {
192193
module_loader: Rc::new(EmbeddedModuleLoader {
193194
shared: module_loader_factory.shared.clone(),
195+
include_source_map,
194196
}),
195197
npm_resolver: npm_resolver.into_npm_resolver(),
196198
vfs,
@@ -205,6 +207,7 @@ pub async fn create_module_loader_for_standalone_from_eszip_kind(
205207
eszip_payload_kind: EszipPayloadKind,
206208
maybe_import_map_arc: Option<Arc<ImportMap>>,
207209
maybe_import_map_path: Option<String>,
210+
include_source_map: bool,
208211
) -> Result<RuntimeProviders, AnyError> {
209212
let eszip = payload_to_eszip(eszip_payload_kind).await;
210213

@@ -233,6 +236,7 @@ pub async fn create_module_loader_for_standalone_from_eszip_kind(
233236
package_json_deps: None,
234237
},
235238
maybe_import_map,
239+
include_source_map,
236240
)
237241
.await
238242
}

crates/sb_module_loader/standalone/standalone_module_loader.rs

Lines changed: 34 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license.
22

33
use crate::node::node_module_loader::NpmModuleLoader;
4+
use base64::Engine;
45
use deno_ast::MediaType;
56
use deno_core::error::generic_error;
67
use deno_core::error::type_error;
@@ -28,6 +29,7 @@ pub struct SharedModuleLoaderState {
2829
#[derive(Clone)]
2930
pub struct EmbeddedModuleLoader {
3031
pub(crate) shared: Arc<SharedModuleLoaderState>,
32+
pub(crate) include_source_map: bool,
3133
}
3234

3335
impl ModuleLoader for EmbeddedModuleLoader {
@@ -101,6 +103,7 @@ impl ModuleLoader for EmbeddedModuleLoader {
101103
_is_dynamic: bool,
102104
_requested_module_type: RequestedModuleType,
103105
) -> deno_core::ModuleLoadResponse {
106+
let include_source_map = self.include_source_map;
104107
let permissions = sb_node::allow_all();
105108

106109
if original_specifier.scheme() == "data" {
@@ -155,11 +158,36 @@ impl ModuleLoader for EmbeddedModuleLoader {
155158

156159
deno_core::ModuleLoadResponse::Async(
157160
async move {
158-
let code = module.source().await.ok_or_else(|| {
159-
type_error(format!("Module not found: {}", original_specifier))
160-
})?;
161-
let code = arc_u8_to_arc_str(code)
162-
.map_err(|_| type_error("Module source is not utf-8"))?;
161+
let code = module
162+
.source()
163+
.await
164+
.ok_or_else(|| type_error(format!("Module not found: {}", original_specifier)))
165+
.and_then(|it| {
166+
arc_u8_to_arc_str(it).map_err(|_| type_error("Module source is not utf-8"))
167+
})?;
168+
169+
let source_map = module.source_map().await;
170+
let maybe_code_with_source_map = 'scope: {
171+
if !include_source_map {
172+
break 'scope code;
173+
}
174+
175+
let Some(source_map) = source_map else {
176+
break 'scope code;
177+
};
178+
179+
let mut src = code.to_string();
180+
181+
if src.ends_with('\n') {
182+
src.push('\n');
183+
}
184+
185+
src.push_str("//# sourceMappingURL=data:application/json;base64,");
186+
base64::prelude::BASE64_STANDARD.encode_string(source_map, &mut src);
187+
188+
Arc::from(src)
189+
};
190+
163191
Ok(deno_core::ModuleSource::new_with_redirect(
164192
match module.kind {
165193
eszip::ModuleKind::JavaScript => ModuleType::JavaScript,
@@ -171,7 +199,7 @@ impl ModuleLoader for EmbeddedModuleLoader {
171199
unreachable!();
172200
}
173201
},
174-
ModuleSourceCode::String(code.into()),
202+
ModuleSourceCode::String(maybe_code_with_source_map.into()),
175203
&original_specifier,
176204
&found_specifier,
177205
))

0 commit comments

Comments
 (0)