diff options
Diffstat (limited to 'cli/tools')
-rw-r--r-- | cli/tools/bundle.rs | 2 | ||||
-rw-r--r-- | cli/tools/check.rs | 6 | ||||
-rw-r--r-- | cli/tools/coverage/mod.rs | 23 | ||||
-rw-r--r-- | cli/tools/fmt.rs | 19 | ||||
-rw-r--r-- | cli/tools/info.rs | 10 | ||||
-rw-r--r-- | cli/tools/registry/graph.rs | 8 | ||||
-rw-r--r-- | cli/tools/registry/publish_order.rs | 2 | ||||
-rw-r--r-- | cli/tools/repl/mod.rs | 6 | ||||
-rw-r--r-- | cli/tools/run/mod.rs | 32 | ||||
-rw-r--r-- | cli/tools/test/mod.rs | 14 | ||||
-rw-r--r-- | cli/tools/vendor/build.rs | 22 | ||||
-rw-r--r-- | cli/tools/vendor/import_map.rs | 11 | ||||
-rw-r--r-- | cli/tools/vendor/mappings.rs | 4 | ||||
-rw-r--r-- | cli/tools/vendor/test.rs | 12 |
14 files changed, 80 insertions, 91 deletions
diff --git a/cli/tools/bundle.rs b/cli/tools/bundle.rs index 0e54e59f6..33ec78fc9 100644 --- a/cli/tools/bundle.rs +++ b/cli/tools/bundle.rs @@ -73,7 +73,7 @@ async fn bundle_action( .specifiers() .filter_map(|(_, r)| { r.ok().and_then(|module| match module { - Module::Esm(m) => m.specifier.to_file_path().ok(), + Module::Js(m) => m.specifier.to_file_path().ok(), Module::Json(m) => m.specifier.to_file_path().ok(), // nothing to watch Module::Node(_) | Module::Npm(_) | Module::External(_) => None, diff --git a/cli/tools/check.rs b/cli/tools/check.rs index 7ce9c578c..90a1d0299 100644 --- a/cli/tools/check.rs +++ b/cli/tools/check.rs @@ -243,7 +243,7 @@ fn get_check_hash( // this iterator of modules is already deterministic, so no need to sort it for module in graph.modules() { match module { - Module::Esm(module) => { + Module::Js(module) => { let ts_check = has_ts_check(module.media_type, &module.source); if ts_check { has_file_to_type_check = true; @@ -329,7 +329,7 @@ fn get_tsc_roots( check_js: bool, ) -> Option<(ModuleSpecifier, MediaType)> { match module { - Module::Esm(module) => match module.media_type { + Module::Js(module) => match module.media_type { MediaType::TypeScript | MediaType::Tsx | MediaType::Mts @@ -404,7 +404,7 @@ fn get_tsc_roots( if let Some(entry) = maybe_get_check_entry(module, check_js) { result.push(entry); } - if let Some(module) = module.esm() { + if let Some(module) = module.js() { let deps = module.dependencies_prefer_fast_check(); for dep in deps.values() { // walk both the code and type dependencies diff --git a/cli/tools/coverage/mod.rs b/cli/tools/coverage/mod.rs index 30d35878b..16c955576 100644 --- a/cli/tools/coverage/mod.rs +++ b/cli/tools/coverage/mod.rs @@ -530,24 +530,24 @@ pub async fn cover_files( Before generating coverage report, run `deno test --coverage` to ensure consistent state.", module_specifier ) - })?; + })?.into_text_decoded()?; - // Check if file was transpiled let original_source = file.source.clone(); - let transpiled_code: ModuleCodeString = match file.media_type { + // Check if file was transpiled + let transpiled_code = match file.media_type { MediaType::JavaScript | MediaType::Unknown | MediaType::Cjs | MediaType::Mjs - | MediaType::Json => file.source.clone().into(), - MediaType::Dts | MediaType::Dmts | MediaType::Dcts => Default::default(), + | MediaType::Json => None, + MediaType::Dts | MediaType::Dmts | MediaType::Dcts => Some(String::new()), MediaType::TypeScript | MediaType::Jsx | MediaType::Mts | MediaType::Cts | MediaType::Tsx => { - match emitter.maybe_cached_emit(&file.specifier, &file.source) { - Some(code) => code.into(), + Some(match emitter.maybe_cached_emit(&file.specifier, &file.source) { + Some(code) => code, None => { return Err(anyhow!( "Missing transpiled source code for: \"{}\". @@ -555,17 +555,20 @@ pub async fn cover_files( file.specifier, )) } - } + }) } MediaType::Wasm | MediaType::TsBuildInfo | MediaType::SourceMap => { unreachable!() } }; + let runtime_code: ModuleCodeString = transpiled_code + .map(|c| c.into()) + .unwrap_or_else(|| original_source.clone().into()); - let source_map = source_map_from_code(&transpiled_code); + let source_map = source_map_from_code(&runtime_code); let coverage_report = generate_coverage_report( &script_coverage, - transpiled_code.as_str().to_owned(), + runtime_code.as_str().to_owned(), &source_map, &out_mode, ); diff --git a/cli/tools/fmt.rs b/cli/tools/fmt.rs index ad35615a0..86fc9700e 100644 --- a/cli/tools/fmt.rs +++ b/cli/tools/fmt.rs @@ -20,7 +20,6 @@ use crate::util::file_watcher; use crate::util::fs::canonicalize_path; use crate::util::fs::FileCollector; use crate::util::path::get_extension; -use crate::util::text_encoding; use deno_ast::ParsedSource; use deno_config::glob::FilePatterns; use deno_core::anyhow::anyhow; @@ -607,28 +606,24 @@ struct FileContents { fn read_file_contents(file_path: &Path) -> Result<FileContents, AnyError> { let file_bytes = fs::read(file_path) .with_context(|| format!("Error reading {}", file_path.display()))?; - let charset = text_encoding::detect_charset(&file_bytes); - let file_text = text_encoding::convert_to_utf8(&file_bytes, charset) - .map_err(|_| { + let had_bom = file_bytes.starts_with(&[0xEF, 0xBB, 0xBF]); + // will have the BOM stripped + let text = deno_graph::source::decode_owned_file_source(file_bytes) + .with_context(|| { anyhow!("{} is not a valid UTF-8 file", file_path.display()) })?; - let had_bom = file_text.starts_with(text_encoding::BOM_CHAR); - let text = if had_bom { - text_encoding::strip_bom(&file_text).to_string() - } else { - file_text.to_string() - }; Ok(FileContents { text, had_bom }) } fn write_file_contents( file_path: &Path, - file_contents: FileContents, + mut file_contents: FileContents, ) -> Result<(), AnyError> { let file_text = if file_contents.had_bom { // add back the BOM - format!("{}{}", text_encoding::BOM_CHAR, file_contents.text) + file_contents.text.insert(0, '\u{FEFF}'); + file_contents.text } else { file_contents.text }; diff --git a/cli/tools/info.rs b/cli/tools/info.rs index 2234c783d..a9d6a8c59 100644 --- a/cli/tools/info.rs +++ b/cli/tools/info.rs @@ -434,7 +434,7 @@ impl<'a> GraphDisplayContext<'a> { match self.graph.try_get(&root_specifier) { Ok(Some(root)) => { let maybe_cache_info = match root { - Module::Esm(module) => module.maybe_cache_info.as_ref(), + Module::Js(module) => module.maybe_cache_info.as_ref(), Module::Json(module) => module.maybe_cache_info.as_ref(), Module::Node(_) | Module::Npm(_) | Module::External(_) => None, }; @@ -464,7 +464,7 @@ impl<'a> GraphDisplayContext<'a> { )?; } } - if let Some(module) = root.esm() { + if let Some(module) = root.js() { writeln!(writer, "{} {}", colors::bold("type:"), module.media_type)?; } let total_modules_size = self @@ -472,7 +472,7 @@ impl<'a> GraphDisplayContext<'a> { .modules() .map(|m| { let size = match m { - Module::Esm(module) => module.size(), + Module::Js(module) => module.size(), Module::Json(module) => module.size(), Module::Node(_) | Module::Npm(_) | Module::External(_) => 0, }; @@ -571,7 +571,7 @@ impl<'a> GraphDisplayContext<'a> { self.npm_info.package_sizes.get(&package.id).copied() } Specifier(_) => match module { - Module::Esm(module) => Some(module.size() as u64), + Module::Js(module) => Some(module.size() as u64), Module::Json(module) => Some(module.size() as u64), Module::Node(_) | Module::Npm(_) | Module::External(_) => None, }, @@ -587,7 +587,7 @@ impl<'a> GraphDisplayContext<'a> { tree_node.children.extend(self.build_npm_deps(package)); } Specifier(_) => { - if let Some(module) = module.esm() { + if let Some(module) = module.js() { if let Some(types_dep) = &module.maybe_types_dependency { if let Some(child) = self.build_resolved_info(&types_dep.dependency, true) diff --git a/cli/tools/registry/graph.rs b/cli/tools/registry/graph.rs index 2a3b4cc17..0bee5fe8a 100644 --- a/cli/tools/registry/graph.rs +++ b/cli/tools/registry/graph.rs @@ -122,7 +122,7 @@ pub fn collect_invalid_external_imports( let ModuleEntryRef::Module(module) = entry else { continue; }; - let Some(module) = module.esm() else { + let Some(module) = module.js() else { continue; }; @@ -158,10 +158,10 @@ pub fn collect_fast_check_type_graph_diagnostics( let Ok(Some(module)) = graph.try_get_prefer_types(&specifier) else { continue; }; - let Some(esm_module) = module.esm() else { + let Some(es_module) = module.js() else { continue; }; - if let Some(diagnostic) = esm_module.fast_check_diagnostic() { + if let Some(diagnostic) = es_module.fast_check_diagnostic() { for diagnostic in diagnostic.flatten_multiple() { if !seen_diagnostics.insert(diagnostic.message_with_range_for_test()) { @@ -179,7 +179,7 @@ pub fn collect_fast_check_type_graph_diagnostics( } // analyze the next dependencies - for dep in esm_module.dependencies_prefer_fast_check().values() { + for dep in es_module.dependencies_prefer_fast_check().values() { let Some(specifier) = graph.resolve_dependency_from_dep(dep, true) else { continue; diff --git a/cli/tools/registry/publish_order.rs b/cli/tools/registry/publish_order.rs index 4071c42ca..bb423b2b5 100644 --- a/cli/tools/registry/publish_order.rs +++ b/cli/tools/registry/publish_order.rs @@ -139,7 +139,7 @@ fn build_pkg_deps( let mut pending = VecDeque::new(); pending.extend(root.exports.clone()); while let Some(specifier) = pending.pop_front() { - let Some(module) = graph.get(&specifier).and_then(|m| m.esm()) else { + let Some(module) = graph.get(&specifier).and_then(|m| m.js()) else { continue; }; let mut dep_specifiers = diff --git a/cli/tools/repl/mod.rs b/cli/tools/repl/mod.rs index f1fef6d54..e40c6362a 100644 --- a/cli/tools/repl/mod.rs +++ b/cli/tools/repl/mod.rs @@ -1,5 +1,7 @@ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +use std::sync::Arc; + use crate::args::CliOptions; use crate::args::Flags; use crate::args::ReplFlags; @@ -140,7 +142,7 @@ async fn read_eval_file( cli_options: &CliOptions, file_fetcher: &FileFetcher, eval_file: &str, -) -> Result<String, AnyError> { +) -> Result<Arc<str>, AnyError> { let specifier = deno_core::resolve_url_or_path(eval_file, cli_options.initial_cwd())?; @@ -148,7 +150,7 @@ async fn read_eval_file( .fetch(&specifier, PermissionsContainer::allow_all()) .await?; - Ok((*file.source).to_string()) + Ok(file.into_text_decoded()?.source) } pub async fn run(flags: Flags, repl_flags: ReplFlags) -> Result<i32, AnyError> { diff --git a/cli/tools/run/mod.rs b/cli/tools/run/mod.rs index 05fd2ba36..ffb26f2eb 100644 --- a/cli/tools/run/mod.rs +++ b/cli/tools/run/mod.rs @@ -2,7 +2,6 @@ use std::io::Read; -use deno_ast::MediaType; use deno_core::error::AnyError; use deno_runtime::permissions::Permissions; use deno_runtime::permissions::PermissionsContainer; @@ -90,17 +89,13 @@ pub async fn run_from_stdin(flags: Flags) -> Result<i32, AnyError> { )?); let mut source = Vec::new(); std::io::stdin().read_to_end(&mut source)?; - // Create a dummy source file. - let source_file = File { - maybe_types: None, - media_type: MediaType::TypeScript, - source: String::from_utf8(source)?.into(), + // Save a fake file into file fetcher cache + // to allow module access by TS compiler + file_fetcher.insert_cached(File { specifier: main_module.clone(), maybe_headers: None, - }; - // Save our fake file into file fetcher cache - // to allow module access by TS compiler - file_fetcher.insert_cached(source_file); + source: source.into(), + }); let mut worker = worker_factory .create_main_worker(main_module, permissions) @@ -175,20 +170,15 @@ pub async fn eval_command( format!("console.log({})", eval_flags.code) } else { eval_flags.code - } - .into_bytes(); - - let file = File { - maybe_types: None, - media_type: MediaType::Unknown, - source: String::from_utf8(source_code)?.into(), - specifier: main_module.clone(), - maybe_headers: None, }; - // Save our fake file into file fetcher cache + // Save a fake file into file fetcher cache // to allow module access by TS compiler. - file_fetcher.insert_cached(file); + file_fetcher.insert_cached(File { + specifier: main_module.clone(), + maybe_headers: None, + source: source_code.into_bytes().into(), + }); let permissions = PermissionsContainer::new(Permissions::from_options( &cli_options.permissions_options(), diff --git a/cli/tools/test/mod.rs b/cli/tools/test/mod.rs index d1dc76028..7a5d633ec 100644 --- a/cli/tools/test/mod.rs +++ b/cli/tools/test/mod.rs @@ -685,11 +685,9 @@ fn extract_files_from_regex_blocks( .unwrap_or(file_specifier); Some(File { - maybe_types: None, - media_type: file_media_type, - source: file_source.into(), specifier: file_specifier, maybe_headers: None, + source: file_source.into_bytes().into(), }) }) .collect(); @@ -769,7 +767,10 @@ async fn fetch_inline_files( let mut files = Vec::new(); for specifier in specifiers { let fetch_permissions = PermissionsContainer::allow_all(); - let file = file_fetcher.fetch(&specifier, fetch_permissions).await?; + let file = file_fetcher + .fetch(&specifier, fetch_permissions) + .await? + .into_text_decoded()?; let inline_files = if file.media_type == MediaType::Unknown { extract_files_from_fenced_blocks( @@ -1177,9 +1178,8 @@ async fn fetch_specifiers_with_test_mode( .fetch(specifier, PermissionsContainer::allow_all()) .await?; - if file.media_type == MediaType::Unknown - || file.media_type == MediaType::Dts - { + let (media_type, _) = file.resolve_media_type_and_charset(); + if matches!(media_type, MediaType::Unknown | MediaType::Dts) { *mode = TestMode::Documentation } } diff --git a/cli/tools/vendor/build.rs b/cli/tools/vendor/build.rs index e2728aa46..1646a9959 100644 --- a/cli/tools/vendor/build.rs +++ b/cli/tools/vendor/build.rs @@ -12,7 +12,7 @@ use deno_core::error::AnyError; use deno_core::futures::future::LocalBoxFuture; use deno_core::parking_lot::Mutex; use deno_graph::source::ResolutionMode; -use deno_graph::EsmModule; +use deno_graph::JsModule; use deno_graph::Module; use deno_graph::ModuleGraph; use deno_runtime::deno_fs; @@ -36,7 +36,7 @@ use super::specifiers::is_remote_specifier; pub trait VendorEnvironment { fn cwd(&self) -> Result<PathBuf, AnyError>; fn create_dir_all(&self, dir_path: &Path) -> Result<(), AnyError>; - fn write_file(&self, file_path: &Path, text: &str) -> Result<(), AnyError>; + fn write_file(&self, file_path: &Path, bytes: &[u8]) -> Result<(), AnyError>; fn path_exists(&self, path: &Path) -> bool; } @@ -51,8 +51,8 @@ impl VendorEnvironment for RealVendorEnvironment { Ok(std::fs::create_dir_all(dir_path)?) } - fn write_file(&self, file_path: &Path, text: &str) -> Result<(), AnyError> { - std::fs::write(file_path, text) + fn write_file(&self, file_path: &Path, bytes: &[u8]) -> Result<(), AnyError> { + std::fs::write(file_path, bytes) .with_context(|| format!("Failed writing {}", file_path.display())) } @@ -159,7 +159,7 @@ pub async fn build< // write out all the files for module in &remote_modules { let source = match module { - Module::Esm(module) => &module.source, + Module::Js(module) => &module.source, Module::Json(module) => &module.source, Module::Node(_) | Module::Npm(_) | Module::External(_) => continue, }; @@ -169,17 +169,17 @@ pub async fn build< .unwrap_or_else(|| mappings.local_path(specifier)); environment.create_dir_all(local_path.parent().unwrap())?; - environment.write_file(&local_path, source)?; + environment.write_file(&local_path, source.as_bytes())?; } // write out the proxies for (specifier, proxied_module) in mappings.proxied_modules() { let proxy_path = mappings.local_path(specifier); - let module = graph.get(specifier).unwrap().esm().unwrap(); + let module = graph.get(specifier).unwrap().js().unwrap(); let text = build_proxy_module_source(module, proxied_module, parsed_source_cache)?; - environment.write_file(&proxy_path, &text)?; + environment.write_file(&proxy_path, text.as_bytes())?; } // create the import map if necessary @@ -195,7 +195,7 @@ pub async fn build< resolver, parsed_source_cache, })?; - environment.write_file(&import_map_path, &import_map_text)?; + environment.write_file(&import_map_path, import_map_text.as_bytes())?; } Ok(BuildOutput { @@ -242,7 +242,7 @@ fn validate_original_import_map( } fn build_proxy_module_source( - module: &EsmModule, + module: &JsModule, proxied_module: &ProxiedModule, parsed_source_cache: &ParsedSourceCache, ) -> Result<String, AnyError> { @@ -269,7 +269,7 @@ fn build_proxy_module_source( // add a default export if one exists in the module let parsed_source = - parsed_source_cache.get_parsed_source_from_esm_module(module)?; + parsed_source_cache.get_parsed_source_from_js_module(module)?; if has_default_export(&parsed_source) { writeln!(text, "export {{ default }} from \"{relative_specifier}\";") .unwrap(); diff --git a/cli/tools/vendor/import_map.rs b/cli/tools/vendor/import_map.rs index c985dfb5f..7f627f35e 100644 --- a/cli/tools/vendor/import_map.rs +++ b/cli/tools/vendor/import_map.rs @@ -240,7 +240,7 @@ fn visit_modules( ) -> Result<(), AnyError> { for module in modules { let module = match module { - Module::Esm(module) => module, + Module::Js(module) => module, // skip visiting Json modules as they are leaves Module::Json(_) | Module::Npm(_) @@ -249,9 +249,8 @@ fn visit_modules( }; let parsed_source = - parsed_source_cache.get_parsed_source_from_esm_module(module)?; + parsed_source_cache.get_parsed_source_from_js_module(module)?; let text_info = parsed_source.text_info().clone(); - let source_text = &module.source; for dep in module.dependencies.values() { visit_resolution( @@ -261,7 +260,7 @@ fn visit_modules( &module.specifier, mappings, &text_info, - source_text, + &module.source, ); visit_resolution( &dep.maybe_type, @@ -270,7 +269,7 @@ fn visit_modules( &module.specifier, mappings, &text_info, - source_text, + &module.source, ); } @@ -282,7 +281,7 @@ fn visit_modules( &module.specifier, mappings, &text_info, - source_text, + &module.source, ); } } diff --git a/cli/tools/vendor/mappings.rs b/cli/tools/vendor/mappings.rs index 00d5055f7..6d2722b89 100644 --- a/cli/tools/vendor/mappings.rs +++ b/cli/tools/vendor/mappings.rs @@ -55,7 +55,7 @@ impl Mappings { for specifier in specifiers { let module = graph.get(&specifier).unwrap(); let media_type = match module { - Module::Esm(module) => module.media_type, + Module::Js(module) => module.media_type, Module::Json(_) => MediaType::Json, Module::Node(_) | Module::Npm(_) | Module::External(_) => continue, }; @@ -81,7 +81,7 @@ impl Mappings { // resolve all the "proxy" paths to use for when an x-typescript-types header is specified for module in remote_modules { - if let Some(module) = module.esm() { + if let Some(module) = module.js() { if let Some(resolved) = &module .maybe_types_dependency .as_ref() diff --git a/cli/tools/vendor/test.rs b/cli/tools/vendor/test.rs index bf6579d23..7910dcf22 100644 --- a/cli/tools/vendor/test.rs +++ b/cli/tools/vendor/test.rs @@ -122,7 +122,7 @@ impl Loader for TestLoader { let result = self.files.get(specifier).map(|result| match result { Ok(result) => Ok(LoadResponse::Module { specifier: specifier.clone(), - content: result.0.clone().into(), + content: result.0.clone().into_bytes().into(), maybe_headers: result.1.clone(), }), Err(err) => Err(err), @@ -160,15 +160,15 @@ impl VendorEnvironment for TestVendorEnvironment { Ok(()) } - fn write_file(&self, file_path: &Path, text: &str) -> Result<(), AnyError> { + fn write_file(&self, file_path: &Path, text: &[u8]) -> Result<(), AnyError> { let parent = file_path.parent().unwrap(); if !self.directories.borrow().contains(parent) { bail!("Directory not found: {}", parent.display()); } - self - .files - .borrow_mut() - .insert(file_path.to_path_buf(), text.to_string()); + self.files.borrow_mut().insert( + file_path.to_path_buf(), + String::from_utf8(text.to_vec()).unwrap(), + ); Ok(()) } |