Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

docs: updating the docs of the cli #1614

Merged
merged 3 commits into from
Jan 6, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
98 changes: 98 additions & 0 deletions docs/architecture.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
---
title: 'CLI Architecture'
weight: 40
---

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.

1. **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.
2. **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.
- `new/`: Creates a new AsyncAPI file.
- **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.
- `start/`: Implements starting functionalities like launching a local server or studio.
- **Files:**
- `studio.ts`: Integrates with the AsyncAPI Studio.

- **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**

1. **Generate AsyncAPI Artifacts:**
- Use the `generate` command to create client/server code, documentation, or other artifacts based on AsyncAPI templates.

2. **Create New Projects:**
- The `new` command helps users scaffold new AsyncAPI projects with predefined templates.

3. **Validate AsyncAPI Documents:**
- The `validate` command ensures AsyncAPI documents conform to the specification.

4. **Optimize and Format Documents:**
- The `optimize` and `pretty` commands provide tools for improving document readability and performance.

5. **Compare Documents:**
- The `diff` command enables comparison between two AsyncAPI documents to track changes.

6. **Integration with AsyncAPI Studio:**
- The `start` command integrates with the AsyncAPI Studio for editing and visualizing documents.

7. **Convert Between Formats:**
- The `convert` command supports converting AsyncAPI documents between formats like YAML and JSON.

---

This structure ensures the CLI is modular, scalable, and easy to maintain. Let me know if you need further clarification or additional details!
2 changes: 1 addition & 1 deletion docs/context.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
title: 'Context concept'
weight: 50
weight: 60
---

## Overview
Expand Down
2 changes: 1 addition & 1 deletion docs/metrics_collection.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
title: 'Metrics Collection'
weight: 60
weight: 70
---

# Metrics collection guideline
Expand Down
14 changes: 10 additions & 4 deletions docs/usage.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
title: 'Usage'
weight: 40
weight: 50
---

<!--
Expand Down Expand Up @@ -315,7 +315,7 @@ Convert asyncapi documents older to newer versions or OpenAPI/postman-collection
```
USAGE
$ asyncapi convert [SPEC-FILE] -f openapi|asyncapi|postman-collection [-h] [-o <value>] [-t <value>] [-p
client|server]
client|server][--proxyHost][--proxyPort]

ARGUMENTS
SPEC-FILE spec path, url, or context-name
Expand All @@ -329,6 +329,8 @@ FLAGS
server). Note: This option is only applicable for OpenAPI to AsyncAPI conversions.
<options: client|server>
-t, --target-version=<value> [default: 3.0.0] asyncapi version to convert to
--proxyHost Name of the Proxy Host.
--proxyPort The number of Port for enabling Proxy.

DESCRIPTION
Convert asyncapi documents older to newer versions or OpenAPI/postman-collection documents to AsyncAPI
Expand Down Expand Up @@ -699,7 +701,7 @@ optimize asyncapi specification file
USAGE
$ asyncapi optimize [SPEC-FILE] [-h] [-p
remove-components|reuse-components|move-duplicates-to-components|move-all-to-components...] [-i schema...] [-o
terminal|new-file|overwrite] [--no-tty]
terminal|new-file|overwrite] [--no-tty] [--proxyHost][--proxyPort]

ARGUMENTS
SPEC-FILE spec path, url, or context-name
Expand All @@ -715,6 +717,8 @@ FLAGS
<options: remove-components|reuse-components|move-duplicates-to-components|move-all-to
-components>
--no-tty do not use an interactive terminal
--proxyHost Name of the Proxy Host.
--proxyPort The number of Port for enabling Proxy.

DESCRIPTION
optimize asyncapi specification file
Expand Down Expand Up @@ -798,7 +802,7 @@ validate asyncapi file
```
USAGE
$ asyncapi validate [SPEC-FILE] [-h] [-w] [--log-diagnostics] [--diagnostics-format
json|stylish|junit|html|text|teamcity|pretty] [--fail-severity error|warn|info|hint] [-o <value>] [--score]
json|stylish|junit|html|text|teamcity|pretty] [--fail-severity error|warn|info|hint] [-o <value>] [--score] [--proxyHost] [--proxyPort]

ARGUMENTS
SPEC-FILE spec path, url, or context-name
Expand All @@ -815,6 +819,8 @@ FLAGS
--[no-]log-diagnostics log validation diagnostics or not
--score Compute the score of the AsyncAPI document. Scoring is based on whether the
document has description, license, server and/or channels.
--proxyHost Name of the Proxy Host.
--proxyPort The number of Port for enabling Proxy.

DESCRIPTION
validate asyncapi file
Expand Down
Loading