Skip to content
This repository was archived by the owner on Jun 13, 2025. It is now read-only.

Commit 453cab8

Browse files
authored
feat: add workspace jsr pkg resolution (#99)
1 parent 04cf218 commit 453cab8

File tree

4 files changed

+227
-80
lines changed

4 files changed

+227
-80
lines changed

Cargo.lock

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

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ serde_json = "1.0.85"
2727
url = { version = "2.3.1" }
2828
import_map = { version = "0.20.0", features = ["ext"], optional = true }
2929
thiserror = "1.0.61"
30-
deno_semver = { version = "0.5.7", optional = true }
30+
deno_semver = { version = "0.5.8", optional = true }
3131
deno_package_json = { version = "0.1.1", optional = true }
3232

3333
[dev-dependencies]

src/workspace/mod.rs

Lines changed: 35 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ use deno_package_json::PackageJsonRc;
1717
use deno_semver::package::PackageNv;
1818
use deno_semver::package::PackageReq;
1919
use deno_semver::RangeSetOrTag;
20+
use deno_semver::Version;
2021
use deno_semver::VersionReq;
2122
use discovery::discover_workspace_config_files;
2223
use discovery::ConfigFileDiscovery;
@@ -59,6 +60,7 @@ pub use resolver::CreateResolverOptions;
5960
pub use resolver::MappedResolution;
6061
pub use resolver::MappedResolutionError;
6162
pub use resolver::PackageJsonDepResolution;
63+
pub use resolver::ResolverWorkspaceJsrPackage;
6264
pub use resolver::SpecifiedImportMap;
6365
pub use resolver::WorkspaceResolvePkgJsonFolderError;
6466
pub use resolver::WorkspaceResolvePkgJsonFolderErrorKind;
@@ -384,27 +386,46 @@ impl Workspace {
384386
.filter_map(|f| f.deno_json.as_ref())
385387
}
386388

389+
pub fn resolver_jsr_pkgs(
390+
&self,
391+
) -> impl Iterator<Item = ResolverWorkspaceJsrPackage> + '_ {
392+
self.deno_jsons().filter_map(|config_file| {
393+
let name = config_file.json.name.as_ref()?;
394+
let version = config_file
395+
.json
396+
.version
397+
.as_ref()
398+
.and_then(|v| Version::parse_standard(v).ok());
399+
let exports_config = config_file.to_exports_config().ok()?;
400+
Some(ResolverWorkspaceJsrPackage {
401+
base: Url::from_directory_path(config_file.dir_path()).unwrap(),
402+
name: name.to_string(),
403+
version,
404+
exports: exports_config.into_map(),
405+
})
406+
})
407+
}
408+
387409
pub fn package_jsons(&self) -> impl Iterator<Item = &PackageJsonRc> {
388410
self
389411
.config_folders
390412
.values()
391413
.filter_map(|f| f.pkg_json.as_ref())
392414
}
393415

394-
pub fn jsr_packages(self: &WorkspaceRc) -> Vec<JsrPackageConfig> {
395-
self
396-
.deno_jsons()
397-
.filter_map(|c| {
398-
if !c.is_package() {
399-
return None;
400-
}
401-
Some(JsrPackageConfig {
402-
member_dir: self.resolve_member_dir(&c.specifier),
403-
name: c.json.name.clone()?,
404-
config_file: c.clone(),
405-
})
416+
pub fn jsr_packages<'a>(
417+
self: &'a WorkspaceRc,
418+
) -> impl Iterator<Item = JsrPackageConfig> + 'a {
419+
self.deno_jsons().filter_map(|c| {
420+
if !c.is_package() {
421+
return None;
422+
}
423+
Some(JsrPackageConfig {
424+
member_dir: self.resolve_member_dir(&c.specifier),
425+
name: c.json.name.clone()?,
426+
config_file: c.clone(),
406427
})
407-
.collect()
428+
})
408429
}
409430

410431
pub fn npm_packages(self: &WorkspaceRc) -> Vec<NpmPackageConfig> {
@@ -1163,7 +1184,7 @@ impl WorkspaceDirectory {
11631184
}
11641185
}
11651186
if self.dir_url == self.workspace.root_dir {
1166-
self.workspace.jsr_packages()
1187+
self.workspace.jsr_packages().collect()
11671188
} else {
11681189
// nothing to publish
11691190
Vec::new()

0 commit comments

Comments
 (0)