The AsyncAPI CLI uses oclif (Open CLI Framework) as its core framework, which enables developers to build powerful and scalable command-line applications.
Structure of the AsyncAPI CLI: The CLI is primarily divided into two components: commands and the core part.
- Command Component: The commands include all the necessary functionalities that help developers interact with features like creating new AsyncAPI projects, validating AsyncAPI files, formatting AsyncAPI files, and more.
 - Core Component: The core part of the CLI contains various utilities that facilitate the efficient creation of new commands.
 
Detailed Explanation of Key Directories in the CLI
src/commands/
- 
Purpose: Implements the CLI commands available to the user.
 - 
Subdirectories:
config/: Stores configuration-related files for commands.generate/: Generates typed models or other artifacts like clients, applications, or documentation using AsyncAPI Generator templates.- Files:
fromTemplate.ts: Contains logic for generating files using templates.models.ts: Defines the models used during generation.
 
- Files:
 new/: Create a new AsyncAPI project, specification files, or templates for clients and applications.- Files:
file.ts: Handles file creation logic.glee.ts: Related to Glee, a tool for event-driven microservices.template.ts: Manages templates for new projects.
 
- Files:
 start/: Implements starting functionalities like launching a local server or studio.- Files:
studio.ts: Integrates with the AsyncAPI Studio.
 
- Files:
 
 - 
Standalone Files:
bundle.ts: Bundles one or multiple AsyncAPI documents and their references together.convert.ts: Converts AsyncAPI documents from older to newer versions or transforms OpenAPI/Postman-collection documents into AsyncAPI.diff.ts: Compares two AsyncAPI documents.format.ts: Converts AsyncAPI documents from any format to YAML, YML, or JSON.optimize.ts: Optimizes AsyncAPI documents for performance.pretty.ts: Beautifies the AsyncAPI spec file (indentation, styling) in place or outputs the formatted spec to a new file.validate.ts: Validates AsyncAPI documents for correctness.
 
src/core/
- 
Purpose: Provides foundational components and utilities for the CLI.
 - 
Subdirectories:
errors/: Centralized error definitions.flags/: Defines CLI flags and their behavior.hooks/: Event hooks used for customization.models/: Core data models used across the application.utils/: Utility functions for common operations.
 - 
Standalone Files:
base.ts: Base class or logic for CLI commands.global.d.ts: Global TypeScript definitions.globals.ts: Stores global variables and configurations.parser.ts: Parses AsyncAPI documents.
 
test/
- Purpose: Implements the test suite for the CLI.
 - Subdirectories:
fixtures/: Contains mock data or files for testing.hooks/: Tests related to hooks.integration/: Integration tests to verify end-to-end functionality.system/: System-level tests.unit/: Unit tests for individual modules or functions.
 
Use Cases
- 
Generate AsyncAPI Artifacts:
- Use the 
generatecommand to create client/server code, documentation, or other artifacts based on AsyncAPI templates. 
 - Use the 
 - 
Create New Projects:
- The 
newcommand helps users scaffold new AsyncAPI projects with predefined templates. 
 - The 
 - 
Validate AsyncAPI Documents:
- The 
validatecommand ensures AsyncAPI documents conform to the specification. 
 - The 
 - 
Optimize and Format Documents:
- The 
optimizeandprettycommands provide tools for improving document readability and performance. 
 - The 
 - 
Compare Documents:
- The 
diffcommand enables comparison between two AsyncAPI documents to track changes. 
 - The 
 - 
Integration with AsyncAPI Studio:
- The 
startcommand integrates with the AsyncAPI Studio for editing and visualizing documents. 
 - The 
 - 
Convert Between Formats:
- The 
convertcommand supports converting AsyncAPI documents between formats like YAML and JSON. 
 - The 
 
This structure ensures the CLI is modular, scalable, and easy to maintain. Let me know if you need further clarification or additional details!