Skip to content

Commit 04473c0

Browse files
authored
fix(compile): support workspace members importing other members (#24909)
1 parent 4fa8869 commit 04473c0

File tree

28 files changed

+171
-52
lines changed

28 files changed

+171
-52
lines changed

Cargo.lock

Lines changed: 6 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

cli/Cargo.toml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -65,17 +65,17 @@ winres.workspace = true
6565
[dependencies]
6666
deno_ast = { workspace = true, features = ["bundler", "cjs", "codegen", "proposal", "react", "sourcemap", "transforms", "typescript", "view", "visit"] }
6767
deno_cache_dir = { workspace = true }
68-
deno_config = { version = "=0.26.1", features = ["workspace", "sync"] }
68+
deno_config = { version = "=0.28.0", features = ["workspace", "sync"] }
6969
deno_core = { workspace = true, features = ["include_js_files_for_snapshotting"] }
7070
deno_doc = { version = "0.145.0", features = ["html", "syntect"] }
7171
deno_emit = "=0.44.0"
72-
deno_graph = { version = "=0.81.0" }
72+
deno_graph = { version = "=0.81.1" }
7373
deno_lint = { version = "=0.62.0", features = ["docs"] }
7474
deno_lockfile.workspace = true
7575
deno_npm = "=0.21.4"
7676
deno_package_json.workspace = true
7777
deno_runtime = { workspace = true, features = ["include_js_files_for_snapshotting"] }
78-
deno_semver = "=0.5.7"
78+
deno_semver = "=0.5.9"
7979
deno_task_shell = "=0.17.0"
8080
deno_terminal.workspace = true
8181
eszip = "=0.73.0"

cli/args/mod.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1435,7 +1435,6 @@ impl CliOptions {
14351435
self
14361436
.workspace()
14371437
.jsr_packages()
1438-
.into_iter()
14391438
.map(|pkg| config_to_deno_graph_workspace_member(&pkg.config_file))
14401439
.collect::<Result<Vec<_>, _>>()
14411440
}

cli/errors.rs

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@ fn get_diagnostic_class(_: &ParseDiagnostic) -> &'static str {
2929
fn get_module_graph_error_class(err: &ModuleGraphError) -> &'static str {
3030
use deno_graph::JsrLoadError;
3131
use deno_graph::NpmLoadError;
32-
use deno_graph::WorkspaceLoadError;
3332

3433
match err {
3534
ModuleGraphError::ResolutionError(err)
@@ -71,10 +70,6 @@ fn get_module_graph_error_class(err: &ModuleGraphError) -> &'static str {
7170
| JsrLoadError::PackageVersionNotFound(_)
7271
| JsrLoadError::UnknownExport { .. } => "NotFound",
7372
},
74-
ModuleLoadError::Workspace(err) => match err {
75-
WorkspaceLoadError::MemberInvalidExportPath { .. } => "TypeError",
76-
WorkspaceLoadError::MissingMemberExports { .. } => "NotFound",
77-
},
7873
},
7974
},
8075
}

cli/graph_util.rs

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -500,8 +500,6 @@ impl ModuleGraphBuilder {
500500
.maybe_file_watcher_reporter
501501
.as_ref()
502502
.map(|r| r.as_reporter());
503-
let workspace_members =
504-
self.options.resolve_deno_graph_workspace_members()?;
505503
let mut locker = self
506504
.lockfile
507505
.as_ref()
@@ -515,7 +513,6 @@ impl ModuleGraphBuilder {
515513
imports: maybe_imports,
516514
is_dynamic: options.is_dynamic,
517515
passthrough_jsr_specifiers: false,
518-
workspace_members: &workspace_members,
519516
executor: Default::default(),
520517
file_system: &DenoGraphFsAdapter(self.fs.as_ref()),
521518
jsr_url_provider: &CliJsrUrlProvider,

cli/lsp/config.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1518,6 +1518,7 @@ impl ConfigData {
15181518
WorkspaceResolver::new_raw(
15191519
scope.clone(),
15201520
None,
1521+
member_dir.workspace.resolver_jsr_pkgs().collect(),
15211522
member_dir.workspace.package_jsons().cloned().collect(),
15221523
pkg_json_dep_resolution,
15231524
)

cli/lsp/jsr.rs

Lines changed: 1 addition & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ use deno_semver::package::PackageNv;
2020
use deno_semver::package::PackageReq;
2121
use deno_semver::Version;
2222
use serde::Deserialize;
23-
use std::borrow::Cow;
2423
use std::collections::HashMap;
2524
use std::sync::Arc;
2625

@@ -157,7 +156,7 @@ impl JsrCacheResolver {
157156
let maybe_nv = self.req_to_nv(&req);
158157
let nv = maybe_nv.as_ref()?;
159158
let info = self.package_version_info(nv)?;
160-
let path = info.export(&normalize_export_name(req_ref.sub_path()))?;
159+
let path = info.export(&req_ref.export_name())?;
161160
if let Some(workspace_scope) = self.workspace_scope_by_name.get(&nv.name) {
162161
workspace_scope.join(path).ok()
163162
} else {
@@ -267,30 +266,6 @@ fn read_cached_url(
267266
.ok()?
268267
}
269268

270-
// TODO(nayeemrmn): This is duplicated from a private function in deno_graph
271-
// 0.65.1. Make it public or cleanup otherwise.
272-
fn normalize_export_name(sub_path: Option<&str>) -> Cow<str> {
273-
let Some(sub_path) = sub_path else {
274-
return Cow::Borrowed(".");
275-
};
276-
if sub_path.is_empty() || matches!(sub_path, "/" | ".") {
277-
Cow::Borrowed(".")
278-
} else {
279-
let sub_path = if sub_path.starts_with('/') {
280-
Cow::Owned(format!(".{}", sub_path))
281-
} else if !sub_path.starts_with("./") {
282-
Cow::Owned(format!("./{}", sub_path))
283-
} else {
284-
Cow::Borrowed(sub_path)
285-
};
286-
if let Some(prefix) = sub_path.strip_suffix('/') {
287-
Cow::Owned(prefix.to_string())
288-
} else {
289-
sub_path
290-
}
291-
}
292-
}
293-
294269
#[derive(Debug)]
295270
pub struct CliJsrSearchApi {
296271
file_fetcher: Arc<FileFetcher>,

cli/lsp/resolver.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -523,6 +523,7 @@ fn create_graph_resolver(
523523
Arc::new(ModuleSpecifier::parse("file:///").unwrap()),
524524
None,
525525
Vec::new(),
526+
Vec::new(),
526527
PackageJsonDepResolution::Disabled,
527528
))
528529
},

cli/resolver.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -535,6 +535,9 @@ impl Resolver for CliGraphResolver {
535535
MappedResolutionError::ImportMap(err) => {
536536
ResolveError::Other(err.into())
537537
}
538+
MappedResolutionError::Workspace(err) => {
539+
ResolveError::Other(err.into())
540+
}
538541
});
539542
let result = match result {
540543
Ok(resolution) => match resolution {
@@ -552,6 +555,9 @@ impl Resolver for CliGraphResolver {
552555
Ok(specifier)
553556
}
554557
}
558+
MappedResolution::WorkspaceJsrPackage { specifier, .. } => {
559+
Ok(specifier)
560+
}
555561
MappedResolution::WorkspaceNpmPackage {
556562
target_pkg_json: pkg_json,
557563
sub_path,

cli/standalone/binary.rs

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ use std::process::Command;
1919

2020
use deno_ast::ModuleSpecifier;
2121
use deno_config::workspace::PackageJsonDepResolution;
22+
use deno_config::workspace::ResolverWorkspaceJsrPackage;
2223
use deno_config::workspace::Workspace;
2324
use deno_config::workspace::WorkspaceResolver;
2425
use deno_core::anyhow::bail;
@@ -33,6 +34,7 @@ use deno_npm::NpmSystemInfo;
3334
use deno_runtime::deno_node::PackageJson;
3435
use deno_semver::npm::NpmVersionReqParseError;
3536
use deno_semver::package::PackageReq;
37+
use deno_semver::Version;
3638
use deno_semver::VersionReqSpecifierParseError;
3739
use eszip::EszipRelativeFileBaseUrl;
3840
use indexmap::IndexMap;
@@ -80,9 +82,18 @@ pub struct SerializedWorkspaceResolverImportMap {
8082
pub json: String,
8183
}
8284

85+
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
86+
pub struct SerializedResolverWorkspaceJsrPackage {
87+
pub relative_base: String,
88+
pub name: String,
89+
pub version: Option<Version>,
90+
pub exports: IndexMap<String, String>,
91+
}
92+
8393
#[derive(Deserialize, Serialize)]
8494
pub struct SerializedWorkspaceResolver {
8595
pub import_map: Option<SerializedWorkspaceResolverImportMap>,
96+
pub jsr_pkgs: Vec<SerializedResolverWorkspaceJsrPackage>,
8697
pub package_jsons: BTreeMap<String, serde_json::Value>,
8798
pub pkg_json_resolution: PackageJsonDepResolution,
8899
}
@@ -620,6 +631,16 @@ impl<'a> DenoCompileBinaryWriter<'a> {
620631
json: i.to_json(),
621632
}
622633
}),
634+
jsr_pkgs: self
635+
.workspace_resolver
636+
.jsr_packages()
637+
.map(|pkg| SerializedResolverWorkspaceJsrPackage {
638+
relative_base: root_dir_url.specifier_key(&pkg.base).into_owned(),
639+
name: pkg.name.clone(),
640+
version: pkg.version.clone(),
641+
exports: pkg.exports.clone(),
642+
})
643+
.collect(),
623644
package_jsons: self
624645
.workspace_resolver
625646
.package_jsons()

0 commit comments

Comments
 (0)