diff --git a/cli/graph_util.rs b/cli/graph_util.rs
index 0d35482057..1653052e5a 100644
--- a/cli/graph_util.rs
+++ b/cli/graph_util.rs
@@ -144,6 +144,7 @@ pub fn graph_valid(
pub fn graph_lock_or_exit(graph: &ModuleGraph, lockfile: &mut Lockfile) {
for module in graph.modules() {
let source = match module {
+ Module::Esm(module) if module.media_type.is_declaration() => continue, // skip declaration files
Module::Esm(module) => &module.source,
Module::Json(module) => &module.source,
Module::Node(_) | Module::Npm(_) | Module::External(_) => continue,
diff --git a/cli/tests/integration/run_tests.rs b/cli/tests/integration/run_tests.rs
index b4171e4a22..41711e678a 100644
--- a/cli/tests/integration/run_tests.rs
+++ b/cli/tests/integration/run_tests.rs
@@ -805,10 +805,9 @@ itest!(private_field_presence_no_check {
output: "run/private_field_presence.ts.out",
});
-// TODO(bartlomieju): remove --unstable once Deno.Command is stabilized
itest!(lock_write_fetch {
args:
- "run --quiet --allow-read --allow-write --allow-env --allow-run --unstable run/lock_write_fetch/main.ts",
+ "run --quiet --allow-read --allow-write --allow-env --allow-run run/lock_write_fetch/main.ts",
output: "run/lock_write_fetch/main.out",
http_server: true,
exit_code: 0,
@@ -856,10 +855,10 @@ itest!(config_file_lock_path {
});
itest!(lock_flag_overrides_config_file_lock_path {
- args: "run --lock=run/lock_check_ok2.json --config=run/config_file_lock_path.json run/019_media_types.ts",
- output: "run/019_media_types.ts.out",
- http_server: true,
- });
+ args: "run --lock=run/lock_check_ok2.json --config=run/config_file_lock_path.json run/019_media_types.ts",
+ output: "run/019_media_types.ts.out",
+ http_server: true,
+});
itest!(lock_v2_check_ok {
args:
@@ -901,6 +900,25 @@ itest!(lock_only_http_and_https {
http_server: true,
});
+#[test]
+fn lock_no_declaration_files() {
+ let context = TestContextBuilder::new()
+ .use_temp_cwd()
+ .use_http_server()
+ .build();
+ let output = context
+ .new_command()
+ .args("cache --lock --lock-write $TESTDATA/lockfile/no_dts/main.ts")
+ .run();
+ output.assert_matches_file("lockfile/no_dts/main.cache.out");
+ let lockfile = context.temp_dir().path().join("deno.lock");
+ lockfile.assert_matches_file(
+ context
+ .testdata_path()
+ .join("lockfile/no_dts/deno.lock.out"),
+ );
+}
+
itest!(mts_dmts_mjs {
args: "run subdir/import.mts",
output: "run/mts_dmts_mjs.out",
diff --git a/cli/tests/testdata/lockfile/no_dts/deno.lock.out b/cli/tests/testdata/lockfile/no_dts/deno.lock.out
new file mode 100644
index 0000000000..9bf784113b
--- /dev/null
+++ b/cli/tests/testdata/lockfile/no_dts/deno.lock.out
@@ -0,0 +1,6 @@
+{
+ "version": "2",
+ "remote": {
+ "http://localhost:4545/lockfile/no_dts/mod.js": "3f576f37a301d298c3032eb1835240bd83f3762db26fc1d358c5d67088d6ffc8"
+ }
+}
diff --git a/cli/tests/testdata/lockfile/no_dts/main.cache.out b/cli/tests/testdata/lockfile/no_dts/main.cache.out
new file mode 100644
index 0000000000..ee8ad33ab7
--- /dev/null
+++ b/cli/tests/testdata/lockfile/no_dts/main.cache.out
@@ -0,0 +1,2 @@
+Download http://localhost:4545/lockfile/no_dts/mod.js
+Download http://localhost:4545/lockfile/no_dts/mod.d.ts
diff --git a/cli/tests/testdata/lockfile/no_dts/main.ts b/cli/tests/testdata/lockfile/no_dts/main.ts
new file mode 100644
index 0000000000..7596e1e1a8
--- /dev/null
+++ b/cli/tests/testdata/lockfile/no_dts/main.ts
@@ -0,0 +1,3 @@
+import { test } from "http://localhost:4545/lockfile/no_dts/mod.js";
+
+console.log(test());
diff --git a/cli/tests/testdata/lockfile/no_dts/mod.d.ts b/cli/tests/testdata/lockfile/no_dts/mod.d.ts
new file mode 100644
index 0000000000..7d3fae61c9
--- /dev/null
+++ b/cli/tests/testdata/lockfile/no_dts/mod.d.ts
@@ -0,0 +1 @@
+export declare function test(): number;
diff --git a/cli/tests/testdata/lockfile/no_dts/mod.js b/cli/tests/testdata/lockfile/no_dts/mod.js
new file mode 100644
index 0000000000..8ac948700e
--- /dev/null
+++ b/cli/tests/testdata/lockfile/no_dts/mod.js
@@ -0,0 +1,4 @@
+///
+export function test() {
+ return 5;
+}
diff --git a/test_util/src/assertions.rs b/test_util/src/assertions.rs
index 29066ded08..239e0e99c0 100644
--- a/test_util/src/assertions.rs
+++ b/test_util/src/assertions.rs
@@ -49,3 +49,14 @@ macro_rules! assert_not_contains {
}
}
}
+
+#[track_caller]
+pub fn assert_wildcard_match(actual: &str, expected: &str) {
+ if !expected.contains("[WILDCARD]") {
+ pretty_assertions::assert_eq!(actual, expected);
+ } else if !crate::wildcard_match(expected, actual) {
+ println!("OUTPUT START\n{actual}\nOUTPUT END");
+ println!("EXPECTED START\n{expected}\nEXPECTED END");
+ panic!("pattern match failed");
+ }
+}
diff --git a/test_util/src/builders.rs b/test_util/src/builders.rs
index 324d30e944..48c001a7e9 100644
--- a/test_util/src/builders.rs
+++ b/test_util/src/builders.rs
@@ -12,8 +12,8 @@ use std::process::Stdio;
use std::rc::Rc;
use os_pipe::pipe;
-use pretty_assertions::assert_eq;
+use crate::assertions::assert_wildcard_match;
use crate::deno_exe_path;
use crate::env_vars_for_npm_tests_no_sync_download;
use crate::fs::PathRef;
@@ -23,7 +23,6 @@ use crate::new_deno_dir;
use crate::pty::Pty;
use crate::strip_ansi_codes;
use crate::testdata_path;
-use crate::wildcard_match;
use crate::HttpServerGuard;
use crate::TempDir;
@@ -660,14 +659,7 @@ impl TestCommandOutput {
actual: &str,
expected: impl AsRef,
) -> &Self {
- let expected = expected.as_ref();
- if !expected.contains("[WILDCARD]") {
- assert_eq!(actual, expected);
- } else if !wildcard_match(expected, actual) {
- println!("OUTPUT START\n{actual}\nOUTPUT END");
- println!("EXPECTED START\n{expected}\nEXPECTED END");
- panic!("pattern match failed");
- }
+ assert_wildcard_match(actual, expected.as_ref());
self
}
@@ -679,10 +671,7 @@ impl TestCommandOutput {
) -> &Self {
let output_path = self.testdata_dir().join(file_path);
println!("output path {}", output_path);
- let expected_text =
- std::fs::read_to_string(&output_path).unwrap_or_else(|err| {
- panic!("failed loading {}\n\n{err:#}", output_path)
- });
+ let expected_text = output_path.read_to_string();
self.inner_assert_matches_text(actual, expected_text)
}
}
diff --git a/test_util/src/fs.rs b/test_util/src/fs.rs
index 12750ffa47..f9443c9c53 100644
--- a/test_util/src/fs.rs
+++ b/test_util/src/fs.rs
@@ -11,6 +11,8 @@ use std::sync::Arc;
use anyhow::Context;
use lsp_types::Url;
+use crate::assertions::assert_wildcard_match;
+
/// Represents a path on the file system, which can be used
/// to perform specific actions.
#[derive(Clone, Debug, Default, PartialEq, Eq)]
@@ -105,7 +107,7 @@ impl PathRef {
pub fn read_to_string_if_exists(&self) -> Result {
fs::read_to_string(self)
- .with_context(|| format!("Could not find file: {}", self))
+ .with_context(|| format!("Could not read file: {}", self))
}
pub fn rename(&self, to: impl AsRef) {
@@ -195,6 +197,19 @@ impl PathRef {
Command::new("chmod").arg("555").arg(self).output().unwrap();
}
}
+
+ pub fn assert_matches_file(&self, wildcard_file: impl AsRef) -> &Self {
+ let wildcard_file = PathRef::new(wildcard_file);
+ println!("output path {}", wildcard_file);
+ let expected_text = wildcard_file.read_to_string();
+ self.assert_matches_text(&expected_text)
+ }
+
+ pub fn assert_matches_text(&self, wildcard_text: impl AsRef) -> &Self {
+ let actual = self.read_to_string();
+ assert_wildcard_match(&actual, wildcard_text.as_ref());
+ self
+ }
}
#[cfg(not(windows))]