summaryrefslogtreecommitdiff
path: root/cli/tools/registry/mod.rs
diff options
context:
space:
mode:
authorDavid Sherret <dsherret@users.noreply.github.com>2024-03-21 14:42:23 -0700
committerGitHub <noreply@github.com>2024-03-21 21:42:23 +0000
commitf96f167dc8cc733b43d67801f568b2d546bc2fb9 (patch)
tree5647b96beaa94da10bf73a29a55bdf7ed2018a62 /cli/tools/registry/mod.rs
parentffbcad3800ef086bad791c1c640b62fd72d60172 (diff)
feat(unstable/publish): error when a package's module is excluded from publishing (#22948)
Closes #22657
Diffstat (limited to 'cli/tools/registry/mod.rs')
-rw-r--r--cli/tools/registry/mod.rs32
1 files changed, 32 insertions, 0 deletions
diff --git a/cli/tools/registry/mod.rs b/cli/tools/registry/mod.rs
index cb3428b60..e323c6c79 100644
--- a/cli/tools/registry/mod.rs
+++ b/cli/tools/registry/mod.rs
@@ -9,6 +9,8 @@ use std::sync::Arc;
use base64::prelude::BASE64_STANDARD;
use base64::Engine;
+use deno_ast::ModuleSpecifier;
+use deno_config::glob::FilePatterns;
use deno_config::ConfigFile;
use deno_config::WorkspaceMemberConfig;
use deno_core::anyhow::bail;
@@ -151,6 +153,14 @@ async fn prepare_publish(
sloppy_imports_resolver.as_ref(),
bare_node_builtins,
);
+ let root_specifier =
+ ModuleSpecifier::from_directory_path(&dir_path).unwrap();
+ collect_excluded_module_diagnostics(
+ &root_specifier,
+ &graph,
+ file_patterns.as_ref(),
+ &diagnostics_collector,
+ );
tar::create_gzipped_tarball(
&dir_path,
&cli_options,
@@ -192,6 +202,28 @@ async fn prepare_publish(
}))
}
+fn collect_excluded_module_diagnostics(
+ root: &ModuleSpecifier,
+ graph: &deno_graph::ModuleGraph,
+ file_patterns: Option<&FilePatterns>,
+ diagnostics_collector: &PublishDiagnosticsCollector,
+) {
+ let Some(file_patterns) = file_patterns else {
+ return;
+ };
+ let specifiers = graph
+ .specifiers()
+ .map(|(s, _)| s)
+ .filter(|s| s.as_str().starts_with(root.as_str()));
+ for specifier in specifiers {
+ if !file_patterns.matches_specifier(specifier) {
+ diagnostics_collector.push(PublishDiagnostic::ExcludedModule {
+ specifier: specifier.clone(),
+ });
+ }
+ }
+}
+
#[derive(Serialize)]
#[serde(tag = "permission")]
pub enum Permission<'s> {