summaryrefslogtreecommitdiff
path: root/cli/tools
diff options
context:
space:
mode:
authorKamil Ogórek <kamil.ogorek@gmail.com>2024-09-05 10:51:40 +0200
committerGitHub <noreply@github.com>2024-09-05 08:51:40 +0000
commit2c4d99a4586a8aa143feb8614e3b0d4de09dd190 (patch)
tree0c07ee12254da10d9710616be8cc98a32c0f35c7 /cli/tools
parent49340b96f6b3603186e03f0102b99bc4a34a1b63 (diff)
feat: include version number in all --json based outputs (#25335)
Co-authored-by: Bartek Iwańczuk <biwanczuk@gmail.com>
Diffstat (limited to 'cli/tools')
-rw-r--r--cli/tools/bench/reporters.rs4
-rw-r--r--cli/tools/doc.rs15
-rw-r--r--cli/tools/info.rs15
-rw-r--r--cli/tools/lint/mod.rs27
-rw-r--r--cli/tools/lint/reporters.rs4
5 files changed, 45 insertions, 20 deletions
diff --git a/cli/tools/bench/reporters.rs b/cli/tools/bench/reporters.rs
index 250655be7..9aabd760b 100644
--- a/cli/tools/bench/reporters.rs
+++ b/cli/tools/bench/reporters.rs
@@ -18,8 +18,11 @@ pub trait BenchReporter {
fn report_uncaught_error(&mut self, origin: &str, error: Box<JsError>);
}
+const JSON_SCHEMA_VERSION: u8 = 1;
+
#[derive(Debug, Serialize)]
struct JsonReporterOutput {
+ version: u8,
runtime: String,
cpu: String,
benches: Vec<JsonReporterBench>,
@@ -28,6 +31,7 @@ struct JsonReporterOutput {
impl Default for JsonReporterOutput {
fn default() -> Self {
Self {
+ version: JSON_SCHEMA_VERSION,
runtime: format!(
"{} {}",
version::DENO_VERSION_INFO.user_agent,
diff --git a/cli/tools/doc.rs b/cli/tools/doc.rs
index ce31c8068..0ba3b84fb 100644
--- a/cli/tools/doc.rs
+++ b/cli/tools/doc.rs
@@ -5,8 +5,7 @@ use crate::args::DocHtmlFlag;
use crate::args::DocSourceFileFlag;
use crate::args::Flags;
use crate::colors;
-use crate::display::write_json_to_stdout;
-use crate::display::write_to_stdout_ignore_sigpipe;
+use crate::display;
use crate::factory::CliFactory;
use crate::graph_util::graph_exit_lock_errors;
use crate::tsc::get_types_declaration_file_text;
@@ -17,6 +16,7 @@ use deno_config::glob::PathOrPatternSet;
use deno_core::anyhow::bail;
use deno_core::anyhow::Context;
use deno_core::error::AnyError;
+use deno_core::serde_json;
use deno_doc as doc;
use deno_doc::html::UrlResolveKind;
use deno_graph::source::NullFileSystem;
@@ -31,6 +31,8 @@ use std::collections::BTreeMap;
use std::rc::Rc;
use std::sync::Arc;
+const JSON_SCHEMA_VERSION: u8 = 1;
+
async fn generate_doc_nodes_for_builtin_types(
doc_flags: DocFlags,
parser: &dyn ModuleParser,
@@ -228,7 +230,11 @@ pub async fn doc(
doc_nodes_by_url.into_values().flatten().collect::<Vec<_>>();
if doc_flags.json {
- write_json_to_stdout(&doc_nodes)
+ let json_output = serde_json::json!({
+ "version": JSON_SCHEMA_VERSION,
+ "nodes": &doc_nodes
+ });
+ display::write_json_to_stdout(&json_output)
} else if doc_flags.lint {
// don't output docs if running with only the --lint flag
log::info!(
@@ -553,7 +559,8 @@ fn print_docs_to_stdout(
)
};
- write_to_stdout_ignore_sigpipe(details.as_bytes()).map_err(AnyError::from)
+ display::write_to_stdout_ignore_sigpipe(details.as_bytes())
+ .map_err(AnyError::from)
}
fn check_diagnostics(diagnostics: &[DocDiagnostic]) -> Result<(), AnyError> {
diff --git a/cli/tools/info.rs b/cli/tools/info.rs
index a32f9dc45..6aa044a92 100644
--- a/cli/tools/info.rs
+++ b/cli/tools/info.rs
@@ -11,7 +11,6 @@ use deno_core::anyhow::bail;
use deno_core::error::AnyError;
use deno_core::resolve_url_or_path;
use deno_core::serde_json;
-use deno_core::serde_json::json;
use deno_graph::Dependency;
use deno_graph::GraphKind;
use deno_graph::Module;
@@ -35,6 +34,8 @@ use crate::npm::CliNpmResolver;
use crate::npm::ManagedCliNpmResolver;
use crate::util::checksum;
+const JSON_SCHEMA_VERSION: u8 = 1;
+
pub async fn info(
flags: Arc<Flags>,
info_flags: InfoFlags,
@@ -79,7 +80,10 @@ pub async fn info(
}
if info_flags.json {
- let mut json_graph = json!(graph);
+ let mut json_graph = serde_json::json!(graph);
+ if let Some(output) = json_graph.as_object_mut() {
+ output.insert("version".to_string(), JSON_SCHEMA_VERSION.into());
+ }
add_npm_packages_to_json(&mut json_graph, npm_resolver.as_ref());
display::write_json_to_stdout(&json_graph)?;
} else {
@@ -121,7 +125,8 @@ fn print_cache_info(
let local_storage_dir = origin_dir.join("local_storage");
if json {
- let mut output = json!({
+ let mut json_output = serde_json::json!({
+ "version": JSON_SCHEMA_VERSION,
"denoDir": deno_dir,
"modulesCache": modules_cache,
"npmCache": npm_cache,
@@ -131,10 +136,10 @@ fn print_cache_info(
});
if location.is_some() {
- output["localStorage"] = serde_json::to_value(local_storage_dir)?;
+ json_output["localStorage"] = serde_json::to_value(local_storage_dir)?;
}
- display::write_json_to_stdout(&output)
+ display::write_json_to_stdout(&json_output)
} else {
println!("{} {}", colors::bold("DENO_DIR location:"), deno_dir);
println!(
diff --git a/cli/tools/lint/mod.rs b/cli/tools/lint/mod.rs
index 5b51b2b40..d5d174bf7 100644
--- a/cli/tools/lint/mod.rs
+++ b/cli/tools/lint/mod.rs
@@ -45,6 +45,7 @@ use crate::colors;
use crate::factory::CliFactory;
use crate::graph_util::ModuleGraphCreator;
use crate::tools::fmt::run_parallelized;
+use crate::util::display;
use crate::util::file_watcher;
use crate::util::fs::canonicalize_path;
use crate::util::path::is_script_ext;
@@ -60,6 +61,8 @@ pub use rules::collect_no_slow_type_diagnostics;
pub use rules::ConfiguredRules;
pub use rules::LintRuleProvider;
+const JSON_SCHEMA_VERSION: u8 = 1;
+
static STDIN_FILE_NAME: &str = "$deno$stdin.ts";
pub async fn lint(
@@ -440,18 +443,20 @@ pub fn print_rules_list(json: bool, maybe_rules_tags: Option<Vec<String>>) {
.rules;
if json {
- let json_rules: Vec<serde_json::Value> = lint_rules
- .iter()
- .map(|rule| {
- serde_json::json!({
- "code": rule.code(),
- "tags": rule.tags(),
- "docs": rule.docs(),
+ let json_output = serde_json::json!({
+ "version": JSON_SCHEMA_VERSION,
+ "rules": lint_rules
+ .iter()
+ .map(|rule| {
+ serde_json::json!({
+ "code": rule.code(),
+ "tags": rule.tags(),
+ "docs": rule.docs(),
+ })
})
- })
- .collect();
- let json_str = serde_json::to_string_pretty(&json_rules).unwrap();
- println!("{json_str}");
+ .collect::<Vec<serde_json::Value>>(),
+ });
+ display::write_json_to_stdout(&json_output).unwrap();
} else {
// The rules should still be printed even if `--quiet` option is enabled,
// so use `println!` here instead of `info!`.
diff --git a/cli/tools/lint/reporters.rs b/cli/tools/lint/reporters.rs
index cb00ad296..bf80be9f2 100644
--- a/cli/tools/lint/reporters.rs
+++ b/cli/tools/lint/reporters.rs
@@ -12,6 +12,8 @@ use crate::args::LintReporterKind;
use super::LintError;
+const JSON_SCHEMA_VERSION: u8 = 1;
+
pub fn create_reporter(kind: LintReporterKind) -> Box<dyn LintReporter + Send> {
match kind {
LintReporterKind::Pretty => Box::new(PrettyLintReporter::new()),
@@ -170,6 +172,7 @@ struct JsonLintDiagnostic {
#[derive(Serialize)]
struct JsonLintReporter {
+ version: u8,
diagnostics: Vec<JsonLintDiagnostic>,
errors: Vec<LintError>,
}
@@ -177,6 +180,7 @@ struct JsonLintReporter {
impl JsonLintReporter {
fn new() -> JsonLintReporter {
JsonLintReporter {
+ version: JSON_SCHEMA_VERSION,
diagnostics: Vec::new(),
errors: Vec::new(),
}