summaryrefslogtreecommitdiff
path: root/cli/tools
diff options
context:
space:
mode:
Diffstat (limited to 'cli/tools')
-rw-r--r--cli/tools/bundle.rs2
-rw-r--r--cli/tools/check.rs6
-rw-r--r--cli/tools/coverage/mod.rs23
-rw-r--r--cli/tools/fmt.rs19
-rw-r--r--cli/tools/info.rs10
-rw-r--r--cli/tools/registry/graph.rs8
-rw-r--r--cli/tools/registry/publish_order.rs2
-rw-r--r--cli/tools/repl/mod.rs6
-rw-r--r--cli/tools/run/mod.rs32
-rw-r--r--cli/tools/test/mod.rs14
-rw-r--r--cli/tools/vendor/build.rs22
-rw-r--r--cli/tools/vendor/import_map.rs11
-rw-r--r--cli/tools/vendor/mappings.rs4
-rw-r--r--cli/tools/vendor/test.rs12
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(())
}