diff options
Diffstat (limited to 'cli')
-rw-r--r-- | cli/emit.rs | 7 | ||||
-rw-r--r-- | cli/lsp/tsc.rs | 4 | ||||
-rw-r--r-- | cli/module_loader.rs | 17 | ||||
-rw-r--r-- | cli/standalone.rs | 10 | ||||
-rw-r--r-- | cli/tools/coverage/mod.rs | 24 | ||||
-rw-r--r-- | cli/tsc/mod.rs | 4 | ||||
-rw-r--r-- | cli/util/text_encoding.rs | 36 | ||||
-rw-r--r-- | cli/worker.rs | 36 |
8 files changed, 75 insertions, 63 deletions
diff --git a/cli/emit.rs b/cli/emit.rs index d322fe38e..f69f70cc7 100644 --- a/cli/emit.rs +++ b/cli/emit.rs @@ -5,6 +5,7 @@ use crate::cache::FastInsecureHasher; use crate::cache::ParsedSourceCache; use deno_core::error::AnyError; +use deno_core::ModuleCode; use deno_core::ModuleSpecifier; use deno_graph::MediaType; use std::sync::Arc; @@ -27,11 +28,11 @@ pub fn emit_parsed_source( source: &Arc<str>, emit_options: &deno_ast::EmitOptions, emit_config_hash: u64, -) -> Result<String, AnyError> { +) -> Result<ModuleCode, AnyError> { let source_hash = get_source_hash(source, emit_config_hash); if let Some(emit_code) = emit_cache.get_emit_code(specifier, source_hash) { - Ok(emit_code) + Ok(emit_code.into()) } else { // this will use a cached version if it exists let parsed_source = parsed_source_cache.get_or_parse_module( @@ -42,6 +43,6 @@ pub fn emit_parsed_source( let transpiled_source = parsed_source.transpile(emit_options)?; debug_assert!(transpiled_source.source_map.is_none()); emit_cache.set_emit_code(specifier, source_hash, &transpiled_source.text); - Ok(transpiled_source.text) + Ok(transpiled_source.text.into()) } } diff --git a/cli/lsp/tsc.rs b/cli/lsp/tsc.rs index c8d8103b9..fedaae588 100644 --- a/cli/lsp/tsc.rs +++ b/cli/lsp/tsc.rs @@ -2854,7 +2854,7 @@ fn start(runtime: &mut JsRuntime, debug: bool) -> Result<(), AnyError> { let init_config = json!({ "debug": debug }); let init_src = format!("globalThis.serverInit({init_config});"); - runtime.execute_script(&located_script_name!(), &init_src)?; + runtime.execute_script(located_script_name!(), init_src)?; Ok(()) } @@ -3442,7 +3442,7 @@ pub fn request( }; let mark = performance.mark("request", Some(request_params.clone())); let request_src = format!("globalThis.serverRequest({request_params});"); - runtime.execute_script(&located_script_name!(), &request_src)?; + runtime.execute_script(located_script_name!(), request_src)?; let op_state = runtime.op_state(); let mut op_state = op_state.borrow_mut(); diff --git a/cli/module_loader.rs b/cli/module_loader.rs index c5224a8b9..7f6101d80 100644 --- a/cli/module_loader.rs +++ b/cli/module_loader.rs @@ -14,6 +14,7 @@ use deno_core::error::AnyError; use deno_core::futures::future::FutureExt; use deno_core::futures::Future; use deno_core::resolve_url; +use deno_core::ModuleCode; use deno_core::ModuleLoader; use deno_core::ModuleSource; use deno_core::ModuleSpecifier; @@ -30,7 +31,7 @@ use std::rc::Rc; use std::str; struct ModuleCodeSource { - pub code: String, + pub code: ModuleCode, pub found_url: ModuleSpecifier, pub media_type: MediaType, } @@ -91,7 +92,7 @@ impl CliModuleLoader { specifier, .. })) => Ok(ModuleCodeSource { - code: source.to_string(), + code: source.into(), found_url: specifier.clone(), media_type: *media_type, }), @@ -101,13 +102,15 @@ impl CliModuleLoader { specifier, .. })) => { - let code = match media_type { + let code: ModuleCode = match media_type { MediaType::JavaScript | MediaType::Unknown | MediaType::Cjs | MediaType::Mjs - | MediaType::Json => source.to_string(), - MediaType::Dts | MediaType::Dcts | MediaType::Dmts => "".to_string(), + | MediaType::Json => source.into(), + MediaType::Dts | MediaType::Dcts | MediaType::Dmts => { + Default::default() + } MediaType::TypeScript | MediaType::Mts | MediaType::Cts @@ -191,7 +194,7 @@ impl CliModuleLoader { )? }; ModuleCodeSource { - code, + code: code.into(), found_url: specifier.clone(), media_type: MediaType::from_specifier(specifier), } @@ -208,7 +211,7 @@ impl CliModuleLoader { code_without_source_map(code_source.code) }; Ok(ModuleSource { - code: code.into_bytes().into_boxed_slice(), + code, module_url_specified: specifier.to_string(), module_url_found: code_source.found_url.to_string(), module_type: match code_source.media_type { diff --git a/cli/standalone.rs b/cli/standalone.rs index 8f74d50a8..254cb9de5 100644 --- a/cli/standalone.rs +++ b/cli/standalone.rs @@ -178,7 +178,7 @@ impl ModuleLoader for EmbeddedModuleLoader { async move { if let Some((source, _)) = is_data_uri { return Ok(deno_core::ModuleSource { - code: source.into_bytes().into_boxed_slice(), + code: source.into(), module_type: deno_core::ModuleType::JavaScript, module_url_specified: module_specifier.to_string(), module_url_found: module_specifier.to_string(), @@ -192,7 +192,7 @@ impl ModuleLoader for EmbeddedModuleLoader { .to_owned(); Ok(deno_core::ModuleSource { - code: code.into_bytes().into_boxed_slice(), + code: code.into(), module_type: match module.kind { eszip::ModuleKind::JavaScript => deno_core::ModuleType::JavaScript, eszip::ModuleKind::Json => deno_core::ModuleType::Json, @@ -384,16 +384,16 @@ pub async fn run( options, ); worker.execute_main_module(main_module).await?; - worker.dispatch_load_event(&located_script_name!())?; + worker.dispatch_load_event(located_script_name!())?; loop { worker.run_event_loop(false).await?; - if !worker.dispatch_beforeunload_event(&located_script_name!())? { + if !worker.dispatch_beforeunload_event(located_script_name!())? { break; } } - worker.dispatch_unload_event(&located_script_name!())?; + worker.dispatch_unload_event(located_script_name!())?; std::process::exit(0); } diff --git a/cli/tools/coverage/mod.rs b/cli/tools/coverage/mod.rs index eaa087171..9fead6e37 100644 --- a/cli/tools/coverage/mod.rs +++ b/cli/tools/coverage/mod.rs @@ -20,6 +20,7 @@ use deno_core::serde_json; use deno_core::sourcemap::SourceMap; use deno_core::url::Url; use deno_core::LocalInspectorSession; +use deno_core::ModuleCode; use regex::Regex; use std::fs; use std::fs::File; @@ -170,16 +171,16 @@ struct CoverageReport { fn generate_coverage_report( script_coverage: &ScriptCoverage, - script_source: &str, + script_source: String, maybe_source_map: &Option<Vec<u8>>, output: &Option<PathBuf>, ) -> CoverageReport { let maybe_source_map = maybe_source_map .as_ref() .map(|source_map| SourceMap::from_slice(source_map).unwrap()); - let text_lines = TextLines::new(script_source); + let text_lines = TextLines::new(&script_source); - let comment_ranges = deno_ast::lex(script_source, MediaType::JavaScript) + let comment_ranges = deno_ast::lex(&script_source, MediaType::JavaScript) .into_iter() .filter(|item| { matches!(item.inner, deno_ast::TokenOrComment::Comment { .. }) @@ -680,14 +681,14 @@ pub async fn cover_files( })?; // Check if file was transpiled - let original_source = &file.source; - let transpiled_code = match file.media_type { + let original_source = file.source.clone(); + let transpiled_code: ModuleCode = match file.media_type { MediaType::JavaScript | MediaType::Unknown | MediaType::Cjs | MediaType::Mjs - | MediaType::Json => file.source.as_ref().to_string(), - MediaType::Dts | MediaType::Dmts | MediaType::Dcts => "".to_string(), + | MediaType::Json => file.source.into(), + MediaType::Dts | MediaType::Dmts | MediaType::Dcts => Default::default(), MediaType::TypeScript | MediaType::Jsx | MediaType::Mts @@ -695,7 +696,7 @@ pub async fn cover_files( | MediaType::Tsx => { let source_hash = get_source_hash(&file.source, ps.emit_options_hash); match ps.emit_cache.get_emit_code(&file.specifier, source_hash) { - Some(code) => code, + Some(code) => code.into(), None => { return Err(anyhow!( "Missing transpiled source code for: \"{}\". @@ -710,15 +711,16 @@ pub async fn cover_files( } }; + let source_map = source_map_from_code(&transpiled_code); let coverage_report = generate_coverage_report( &script_coverage, - &transpiled_code, - &source_map_from_code(&transpiled_code), + transpiled_code.take_as_string(), + &source_map, &out_mode, ); if !coverage_report.found_lines.is_empty() { - reporter.report(&coverage_report, original_source)?; + reporter.report(&coverage_report, &original_source)?; } } diff --git a/cli/tsc/mod.rs b/cli/tsc/mod.rs index 2f2015542..791aa6409 100644 --- a/cli/tsc/mod.rs +++ b/cli/tsc/mod.rs @@ -824,9 +824,9 @@ pub fn exec(request: Request) -> Result<Response, AnyError> { }); runtime - .execute_script(&located_script_name!(), startup_source) + .execute_script(located_script_name!(), startup_source) .context("Could not properly start the compiler runtime.")?; - runtime.execute_script(&located_script_name!(), &exec_source)?; + runtime.execute_script(located_script_name!(), exec_source)?; let op_state = runtime.op_state(); let mut op_state = op_state.borrow_mut(); diff --git a/cli/util/text_encoding.rs b/cli/util/text_encoding.rs index 87067e909..0111ec82f 100644 --- a/cli/util/text_encoding.rs +++ b/cli/util/text_encoding.rs @@ -1,5 +1,6 @@ // Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. +use deno_core::ModuleCode; use encoding_rs::*; use std::borrow::Cow; use std::io::Error; @@ -53,11 +54,12 @@ pub fn strip_bom(text: &str) -> &str { } } -static SOURCE_MAP_PREFIX: &str = - "//# sourceMappingURL=data:application/json;base64,"; +static SOURCE_MAP_PREFIX: &[u8] = + b"//# sourceMappingURL=data:application/json;base64,"; -pub fn source_map_from_code(code: &str) -> Option<Vec<u8>> { - let last_line = code.rsplit(|u| u == '\n').next()?; +pub fn source_map_from_code(code: &ModuleCode) -> Option<Vec<u8>> { + let bytes = code.as_bytes(); + let last_line = bytes.rsplit(|u| *u == b'\n').next()?; if last_line.starts_with(SOURCE_MAP_PREFIX) { let input = last_line.split_at(SOURCE_MAP_PREFIX.len()).1; let decoded_map = base64::decode(input) @@ -68,17 +70,18 @@ pub fn source_map_from_code(code: &str) -> Option<Vec<u8>> { } } -pub fn code_without_source_map(mut code: String) -> String { - if let Some(last_line_index) = code.rfind('\n') { - if code[last_line_index + 1..].starts_with(SOURCE_MAP_PREFIX) { - code.truncate(last_line_index + 1); - code - } else { - code +/// Truncate the source code before the source map. +pub fn code_without_source_map(mut code: ModuleCode) -> ModuleCode { + let bytes = code.as_bytes(); + for i in (0..bytes.len()).rev() { + if bytes[i] == b'\n' { + if bytes[i + 1..].starts_with(SOURCE_MAP_PREFIX) { + code.truncate(i + 1); + } + return code; } - } else { - code } + code } #[cfg(test)] @@ -155,8 +158,11 @@ mod tests { "\n", ); - fn run_test(input: &str, output: &str) { - assert_eq!(code_without_source_map(input.to_string()), output); + fn run_test(input: &'static str, output: &'static str) { + assert_eq!( + code_without_source_map(input.into()).take_as_string(), + output + ); } } } diff --git a/cli/worker.rs b/cli/worker.rs index c505516a0..a0168a1f3 100644 --- a/cli/worker.rs +++ b/cli/worker.rs @@ -78,7 +78,7 @@ impl CliMainWorker { self.execute_main_module_possibly_with_npm().await?; } - self.worker.dispatch_load_event(&located_script_name!())?; + self.worker.dispatch_load_event(located_script_name!())?; loop { self @@ -87,13 +87,13 @@ impl CliMainWorker { .await?; if !self .worker - .dispatch_beforeunload_event(&located_script_name!())? + .dispatch_beforeunload_event(located_script_name!())? { break; } } - self.worker.dispatch_unload_event(&located_script_name!())?; + self.worker.dispatch_unload_event(located_script_name!())?; if let Some(coverage_collector) = maybe_coverage_collector.as_mut() { self @@ -129,7 +129,7 @@ impl CliMainWorker { self .inner .worker - .dispatch_load_event(&located_script_name!())?; + .dispatch_load_event(located_script_name!())?; self.pending_unload = true; let result = loop { @@ -140,7 +140,7 @@ impl CliMainWorker { match self .inner .worker - .dispatch_beforeunload_event(&located_script_name!()) + .dispatch_beforeunload_event(located_script_name!()) { Ok(default_prevented) if default_prevented => {} // continue loop Ok(_) => break Ok(()), @@ -154,7 +154,7 @@ impl CliMainWorker { self .inner .worker - .dispatch_unload_event(&located_script_name!())?; + .dispatch_unload_event(located_script_name!())?; Ok(()) } @@ -166,7 +166,7 @@ impl CliMainWorker { let _ = self .inner .worker - .dispatch_unload_event(&located_script_name!()); + .dispatch_unload_event(located_script_name!()); } } } @@ -185,7 +185,7 @@ impl CliMainWorker { // failures. if self.ps.options.trace_ops() { self.worker.js_runtime.execute_script( - &located_script_name!(), + located_script_name!(), "Deno[Deno.internal].core.enableOpCallTracing();", )?; } @@ -200,19 +200,19 @@ impl CliMainWorker { self.execute_side_module_possibly_with_npm().await?; } - self.worker.dispatch_load_event(&located_script_name!())?; + self.worker.dispatch_load_event(located_script_name!())?; self.run_tests(&self.ps.options.shuffle_tests()).await?; loop { if !self .worker - .dispatch_beforeunload_event(&located_script_name!())? + .dispatch_beforeunload_event(located_script_name!())? { break; } self.worker.run_event_loop(false).await?; } - self.worker.dispatch_unload_event(&located_script_name!())?; + self.worker.dispatch_unload_event(located_script_name!())?; if let Some(coverage_collector) = maybe_coverage_collector.as_mut() { self @@ -230,7 +230,7 @@ impl CliMainWorker { self.enable_test(); self.worker.execute_script( - &located_script_name!(), + located_script_name!(), "Deno[Deno.internal].core.enableOpCallTracing();", )?; @@ -239,18 +239,18 @@ impl CliMainWorker { self.execute_side_module_possibly_with_npm().await?; } - self.worker.dispatch_load_event(&located_script_name!())?; + self.worker.dispatch_load_event(located_script_name!())?; self.run_tests(&None).await?; loop { if !self .worker - .dispatch_beforeunload_event(&located_script_name!())? + .dispatch_beforeunload_event(located_script_name!())? { break; } self.worker.run_event_loop(false).await?; } - self.worker.dispatch_unload_event(&located_script_name!())?; + self.worker.dispatch_unload_event(located_script_name!())?; Ok(()) } @@ -260,18 +260,18 @@ impl CliMainWorker { // We execute the module module as a side module so that import.meta.main is not set. self.execute_side_module_possibly_with_npm().await?; - self.worker.dispatch_load_event(&located_script_name!())?; + self.worker.dispatch_load_event(located_script_name!())?; self.run_benchmarks().await?; loop { if !self .worker - .dispatch_beforeunload_event(&located_script_name!())? + .dispatch_beforeunload_event(located_script_name!())? { break; } self.worker.run_event_loop(false).await?; } - self.worker.dispatch_unload_event(&located_script_name!())?; + self.worker.dispatch_unload_event(located_script_name!())?; Ok(()) } |