From b1c9d24e31419114f6901880b6d554e417c75e8d Mon Sep 17 00:00:00 2001 From: Luke Hagar Date: Wed, 1 Oct 2025 23:24:27 +0000 Subject: [PATCH] Enhance CLI and logger functionality for improved user experience - Updated CLI to set log level to "INFO" when verbose mode is enabled. - Added suggestions for recursive validation when references are found but no endpoints are present. - Changed default log level in Logger from "INFO" to "WARN" for better log management. - Improved summary analysis to validate HTTP methods and operation properties more effectively. --- src/cli.ts | 25 +++++++++++++++++++++++++ src/logger.ts | 2 +- src/summary-analyzer.ts | 16 +++++++++++++++- 3 files changed, 41 insertions(+), 2 deletions(-) diff --git a/src/cli.ts b/src/cli.ts index f58dc32..064e22b 100755 --- a/src/cli.ts +++ b/src/cli.ts @@ -50,6 +50,12 @@ program log.setVerbose(options.verbose); log.setShowProgress(!options.noProgress); log.setUseColors(!options.noColors); + if (options.verbose) { + log.setLevel("INFO"); + } + if (options.verbose) { + log.setLevel("INFO"); + } try { const validationOptions: ValidationOptions = { strict: options.strict, @@ -181,6 +187,19 @@ program console.log( ` Warnings: ${summary.validationResults.warnings}` ); + + // Suggest recursive validation if references are found but endpoints are 0 + if ( + summary.referenceAnalysis.totalReferences > 0 && + summary.endpoints === 0 + ) { + console.log( + "\n💡 Tip: This specification contains references that may not be fully analyzed." + ); + console.log( + " Use --recursive flag to validate all referenced schemas and get complete endpoint counts." + ); + } } catch (error) { // Fallback to basic info if summary generation fails console.log(`Version: ${validationResult.version}`); @@ -278,6 +297,9 @@ program log.setVerbose(options.verbose); log.setShowProgress(!options.noProgress); log.setUseColors(!options.noColors); + if (options.verbose) { + log.setLevel("INFO"); + } try { const parsed = await parse(source); @@ -413,6 +435,9 @@ program log.setVerbose(options.verbose); log.setShowProgress(!options.noProgress); log.setUseColors(!options.noColors); + if (options.verbose) { + log.setLevel("INFO"); + } try { const validationOptions: ValidationOptions = { diff --git a/src/logger.ts b/src/logger.ts index 17b6ffa..833bdbe 100644 --- a/src/logger.ts +++ b/src/logger.ts @@ -54,7 +54,7 @@ export class Logger { constructor(config: Partial = {}) { this.config = { - level: "INFO", + level: "WARN", verbose: false, showTimestamps: true, showProgress: true, diff --git a/src/summary-analyzer.ts b/src/summary-analyzer.ts index 2c421b2..2f19ec8 100644 --- a/src/summary-analyzer.ts +++ b/src/summary-analyzer.ts @@ -139,10 +139,24 @@ export const analyzeSpecification = ( for (const [path, pathItem] of Object.entries(spec.paths)) { if (typeof pathItem === "object" && pathItem !== null) { for (const [method, operation] of Object.entries(pathItem)) { + // Check if this is a valid HTTP method and has operation properties if ( typeof operation === "object" && operation !== null && - "responses" in operation + [ + "get", + "post", + "put", + "delete", + "patch", + "head", + "options", + "trace", + ].includes(method.toLowerCase()) && + ("responses" in operation || + "operationId" in operation || + "summary" in operation || + "description" in operation) ) { endpointCount++; methods.add(method.toUpperCase());