mirror of
https://github.com/denoland/deno.git
synced 2024-11-21 15:04:11 -05:00
refactor: move deno json functionality to args module (#22710)
This commit is contained in:
parent
c38f59f657
commit
942dcbad84
5 changed files with 53 additions and 51 deletions
51
cli/args/deno_json.rs
Normal file
51
cli/args/deno_json.rs
Normal file
|
@ -0,0 +1,51 @@
|
||||||
|
// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
|
||||||
|
|
||||||
|
use std::collections::HashSet;
|
||||||
|
|
||||||
|
use deno_core::serde_json;
|
||||||
|
use deno_semver::jsr::JsrDepPackageReq;
|
||||||
|
use deno_semver::jsr::JsrPackageReqReference;
|
||||||
|
use deno_semver::npm::NpmPackageReqReference;
|
||||||
|
|
||||||
|
pub fn deno_json_deps(
|
||||||
|
config: &deno_config::ConfigFile,
|
||||||
|
) -> HashSet<JsrDepPackageReq> {
|
||||||
|
let values = imports_values(config.json.imports.as_ref())
|
||||||
|
.into_iter()
|
||||||
|
.chain(scope_values(config.json.scopes.as_ref()));
|
||||||
|
values_to_set(values)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn imports_values(value: Option<&serde_json::Value>) -> Vec<&String> {
|
||||||
|
let Some(obj) = value.and_then(|v| v.as_object()) else {
|
||||||
|
return Vec::new();
|
||||||
|
};
|
||||||
|
let mut items = Vec::with_capacity(obj.len());
|
||||||
|
for value in obj.values() {
|
||||||
|
if let serde_json::Value::String(value) = value {
|
||||||
|
items.push(value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
items
|
||||||
|
}
|
||||||
|
|
||||||
|
fn scope_values(value: Option<&serde_json::Value>) -> Vec<&String> {
|
||||||
|
let Some(obj) = value.and_then(|v| v.as_object()) else {
|
||||||
|
return Vec::new();
|
||||||
|
};
|
||||||
|
obj.values().flat_map(|v| imports_values(Some(v))).collect()
|
||||||
|
}
|
||||||
|
|
||||||
|
fn values_to_set<'a>(
|
||||||
|
values: impl Iterator<Item = &'a String>,
|
||||||
|
) -> HashSet<JsrDepPackageReq> {
|
||||||
|
let mut entries = HashSet::new();
|
||||||
|
for value in values {
|
||||||
|
if let Ok(req_ref) = JsrPackageReqReference::from_str(value) {
|
||||||
|
entries.insert(JsrDepPackageReq::jsr(req_ref.into_inner().req));
|
||||||
|
} else if let Ok(req_ref) = NpmPackageReqReference::from_str(value) {
|
||||||
|
entries.insert(JsrDepPackageReq::npm(req_ref.into_inner().req));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
entries
|
||||||
|
}
|
|
@ -1,5 +1,6 @@
|
||||||
// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
|
// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
|
||||||
|
|
||||||
|
pub mod deno_json;
|
||||||
mod flags;
|
mod flags;
|
||||||
mod flags_net;
|
mod flags_net;
|
||||||
mod import_map;
|
mod import_map;
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
|
// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
|
||||||
|
|
||||||
|
use crate::args::deno_json::deno_json_deps;
|
||||||
use crate::args::CliOptions;
|
use crate::args::CliOptions;
|
||||||
use crate::args::DenoSubcommand;
|
use crate::args::DenoSubcommand;
|
||||||
use crate::args::Flags;
|
use crate::args::Flags;
|
||||||
|
@ -44,7 +45,6 @@ use crate::resolver::SloppyImportsResolver;
|
||||||
use crate::standalone::DenoCompileBinaryWriter;
|
use crate::standalone::DenoCompileBinaryWriter;
|
||||||
use crate::tools::check::TypeChecker;
|
use crate::tools::check::TypeChecker;
|
||||||
use crate::tools::coverage::CoverageCollector;
|
use crate::tools::coverage::CoverageCollector;
|
||||||
use crate::tools::registry::deno_json_deps;
|
|
||||||
use crate::tools::run::hmr::HmrRunner;
|
use crate::tools::run::hmr::HmrRunner;
|
||||||
use crate::util::file_watcher::WatcherCommunicator;
|
use crate::util::file_watcher::WatcherCommunicator;
|
||||||
use crate::util::fs::canonicalize_path_maybe_not_exists;
|
use crate::util::fs::canonicalize_path_maybe_not_exists;
|
||||||
|
|
|
@ -59,7 +59,6 @@ use auth::get_auth_method;
|
||||||
use auth::AuthMethod;
|
use auth::AuthMethod;
|
||||||
pub use pm::add;
|
pub use pm::add;
|
||||||
use publish_order::PublishOrderGraph;
|
use publish_order::PublishOrderGraph;
|
||||||
pub use unfurl::deno_json_deps;
|
|
||||||
use unfurl::SpecifierUnfurler;
|
use unfurl::SpecifierUnfurler;
|
||||||
|
|
||||||
use super::check::TypeChecker;
|
use super::check::TypeChecker;
|
||||||
|
|
|
@ -1,67 +1,18 @@
|
||||||
// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
|
// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
|
||||||
|
|
||||||
use std::collections::HashSet;
|
|
||||||
|
|
||||||
use deno_ast::ParsedSource;
|
use deno_ast::ParsedSource;
|
||||||
use deno_ast::SourceRange;
|
use deno_ast::SourceRange;
|
||||||
use deno_ast::SourceTextInfo;
|
use deno_ast::SourceTextInfo;
|
||||||
use deno_core::serde_json;
|
|
||||||
use deno_core::ModuleSpecifier;
|
use deno_core::ModuleSpecifier;
|
||||||
use deno_graph::DefaultModuleAnalyzer;
|
use deno_graph::DefaultModuleAnalyzer;
|
||||||
use deno_graph::DependencyDescriptor;
|
use deno_graph::DependencyDescriptor;
|
||||||
use deno_graph::DynamicTemplatePart;
|
use deno_graph::DynamicTemplatePart;
|
||||||
use deno_graph::TypeScriptReference;
|
use deno_graph::TypeScriptReference;
|
||||||
use deno_runtime::deno_node::is_builtin_node_module;
|
use deno_runtime::deno_node::is_builtin_node_module;
|
||||||
use deno_semver::jsr::JsrDepPackageReq;
|
|
||||||
use deno_semver::jsr::JsrPackageReqReference;
|
|
||||||
use deno_semver::npm::NpmPackageReqReference;
|
|
||||||
|
|
||||||
use crate::resolver::MappedSpecifierResolver;
|
use crate::resolver::MappedSpecifierResolver;
|
||||||
use crate::resolver::SloppyImportsResolver;
|
use crate::resolver::SloppyImportsResolver;
|
||||||
|
|
||||||
pub fn deno_json_deps(
|
|
||||||
config: &deno_config::ConfigFile,
|
|
||||||
) -> HashSet<JsrDepPackageReq> {
|
|
||||||
let values = imports_values(config.json.imports.as_ref())
|
|
||||||
.into_iter()
|
|
||||||
.chain(scope_values(config.json.scopes.as_ref()));
|
|
||||||
values_to_set(values)
|
|
||||||
}
|
|
||||||
|
|
||||||
fn imports_values(value: Option<&serde_json::Value>) -> Vec<&String> {
|
|
||||||
let Some(obj) = value.and_then(|v| v.as_object()) else {
|
|
||||||
return Vec::new();
|
|
||||||
};
|
|
||||||
let mut items = Vec::with_capacity(obj.len());
|
|
||||||
for value in obj.values() {
|
|
||||||
if let serde_json::Value::String(value) = value {
|
|
||||||
items.push(value);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
items
|
|
||||||
}
|
|
||||||
|
|
||||||
fn scope_values(value: Option<&serde_json::Value>) -> Vec<&String> {
|
|
||||||
let Some(obj) = value.and_then(|v| v.as_object()) else {
|
|
||||||
return Vec::new();
|
|
||||||
};
|
|
||||||
obj.values().flat_map(|v| imports_values(Some(v))).collect()
|
|
||||||
}
|
|
||||||
|
|
||||||
fn values_to_set<'a>(
|
|
||||||
values: impl Iterator<Item = &'a String>,
|
|
||||||
) -> HashSet<JsrDepPackageReq> {
|
|
||||||
let mut entries = HashSet::new();
|
|
||||||
for value in values {
|
|
||||||
if let Ok(req_ref) = JsrPackageReqReference::from_str(value) {
|
|
||||||
entries.insert(JsrDepPackageReq::jsr(req_ref.into_inner().req));
|
|
||||||
} else if let Ok(req_ref) = NpmPackageReqReference::from_str(value) {
|
|
||||||
entries.insert(JsrDepPackageReq::npm(req_ref.into_inner().req));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
entries
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Debug, Clone)]
|
#[derive(Debug, Clone)]
|
||||||
pub enum SpecifierUnfurlerDiagnostic {
|
pub enum SpecifierUnfurlerDiagnostic {
|
||||||
UnanalyzableDynamicImport {
|
UnanalyzableDynamicImport {
|
||||||
|
|
Loading…
Reference in a new issue