Skip to content

Commit b725e6e

Browse files
committed
include deps in external import map in lockfile
1 parent c6fa628 commit b725e6e

File tree

7 files changed

+76
-11
lines changed

7 files changed

+76
-11
lines changed

cli/args/deno_json.rs

+14-5
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
use std::collections::HashSet;
44

55
use deno_config::deno_json::TsConfigForEmit;
6+
use deno_core::error::AnyError;
67
use deno_core::serde_json;
78
use deno_semver::jsr::JsrDepPackageReq;
89
use deno_semver::jsr::JsrPackageReqReference;
@@ -66,10 +67,18 @@ impl<'a> deno_config::fs::DenoConfigFs for DenoConfigFsAdapter<'a> {
6667

6768
pub fn deno_json_deps(
6869
config: &deno_config::deno_json::ConfigFile,
69-
) -> HashSet<JsrDepPackageReq> {
70-
let values = imports_values(config.json.imports.as_ref())
71-
.into_iter()
72-
.chain(scope_values(config.json.scopes.as_ref()));
70+
) -> Result<HashSet<JsrDepPackageReq>, AnyError> {
71+
let import_map = config
72+
.to_import_map_value(|path| {
73+
std::fs::read_to_string(path).map_err(Into::into)
74+
})?
75+
.map(|(_, value)| value);
76+
let values =
77+
imports_values(import_map.as_ref().and_then(|m| m.get("imports")))
78+
.into_iter()
79+
.chain(scope_values(
80+
import_map.as_ref().and_then(|m| m.get("scopes")),
81+
));
7382
let mut set = values_to_set(values);
7483

7584
if let Some(serde_json::Value::Object(compiler_options)) =
@@ -104,7 +113,7 @@ pub fn deno_json_deps(
104113
}
105114
}
106115

107-
set
116+
Ok(set)
108117
}
109118

110119
fn imports_values(value: Option<&serde_json::Value>) -> Vec<&String> {

cli/args/lockfile.rs

+20-6
Original file line numberDiff line numberDiff line change
@@ -126,10 +126,13 @@ impl CliLockfile {
126126

127127
fn deno_json_deps(
128128
maybe_deno_json: Option<&ConfigFile>,
129-
) -> HashSet<JsrDepPackageReq> {
130-
maybe_deno_json
131-
.map(crate::args::deno_json::deno_json_deps)
132-
.unwrap_or_default()
129+
) -> Result<HashSet<JsrDepPackageReq>, AnyError> {
130+
Ok(
131+
maybe_deno_json
132+
.map(crate::args::deno_json::deno_json_deps)
133+
.transpose()?
134+
.unwrap_or_default(),
135+
)
133136
}
134137

135138
if flags.no_lock
@@ -171,7 +174,7 @@ impl CliLockfile {
171174
let config = deno_lockfile::WorkspaceConfig {
172175
root: WorkspaceMemberConfig {
173176
package_json_deps: pkg_json_deps(root_folder.pkg_json.as_deref()),
174-
dependencies: deno_json_deps(root_folder.deno_json.as_deref()),
177+
dependencies: deno_json_deps(root_folder.deno_json.as_deref())?,
175178
},
176179
members: workspace
177180
.config_folders()
@@ -192,7 +195,18 @@ impl CliLockfile {
192195
{
193196
let config = WorkspaceMemberConfig {
194197
package_json_deps: pkg_json_deps(folder.pkg_json.as_deref()),
195-
dependencies: deno_json_deps(folder.deno_json.as_deref()),
198+
dependencies: deno_json_deps(folder.deno_json.as_deref())
199+
.inspect_err(|err| {
200+
log::warn!(
201+
"failed to read dependencies from {}: {err}",
202+
folder
203+
.deno_json
204+
.as_ref()
205+
.map(|s| s.specifier.as_str())
206+
.unwrap_or("config file")
207+
)
208+
})
209+
.unwrap_or_default(),
196210
};
197211
if config.package_json_deps.is_empty()
198212
&& config.dependencies.is_empty()
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
{
2+
"tempDir": true,
3+
"steps": [{
4+
"args": "run -A main.ts",
5+
"output": "[WILDCARD]"
6+
}, {
7+
"args": ["eval", "console.log(Deno.readTextFileSync('deno.lock').trim())"],
8+
"output": "deno.lock.out"
9+
}]
10+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
{
2+
"importMap": "import_map.json"
3+
}

tests/specs/lockfile/external_import_map/deno.lock.out

+17
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
{
2+
"imports": {
3+
"@denotest/add": "jsr:@denotest/[email protected]"
4+
},
5+
"scopes": {
6+
"/foo/": {
7+
"@denotest/esm-basic": "npm:@denotest/[email protected]"
8+
}
9+
}
10+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
import { add } from "@denotest/add";
2+
console.log(add(1, 2));

0 commit comments

Comments
 (0)