110 lines
7.1 KiB
Markdown
110 lines
7.1 KiB
Markdown
# Architecture Diagram
|
|
|
|
```ascii
|
|
|
|
┌─────────────────────────────────────────────────────────────────┐
|
|
│ User's Browser │
|
|
│ ┌───────────────────────────────────────────────────────────┐ │
|
|
│ │ index.html │ │
|
|
│ │ ┌────────────┐ ┌─────────────┐ ┌──────────────────┐ │ │
|
|
│ │ │ Header │ │ Arguments │ │ Help Preview │ │ │
|
|
│ │ │ Input │ │ Grid │ │ (Real-time) │ │ │
|
|
│ │ └────────────┘ └─────────────┘ └──────────────────┘ │ │
|
|
│ │ ↓ │ │
|
|
│ │ [ Generate BASH Button ] │ │
|
|
│ │ ↓ │ │
|
|
│ │ ┌──────────────────┐ │ │
|
|
│ │ │ Generated Script │ │ │
|
|
│ │ │ (code view) │ │ │
|
|
│ │ └──────────────────┘ │ │
|
|
│ └───────────────────────────────────────────────────────────┘ │
|
|
│ ↕ HTTP/JSON │
|
|
└─────────────────────────────────────────────────────────────────┘
|
|
↓
|
|
┌─────────────────────────────────────────────────────────────────┐
|
|
│ Go HTTP Server (Single Binary) │
|
|
│ ┌───────────────────────────────────────────────────────────┐ │
|
|
│ │ Embedded Assets │ │
|
|
│ │ ┌──────────┐ ┌──────────┐ ┌────────────────────────┐ │ │
|
|
│ │ │ HTML │ │ CSS │ │ JavaScript │ │ │
|
|
│ │ │ template │ │ styles │ │ app logic │ │ │
|
|
│ │ └──────────┘ └──────────┘ └────────────────────────┘ │ │
|
|
│ └───────────────────────────────────────────────────────────┘ │
|
|
│ │
|
|
│ ┌───────────────────────────────────────────────────────────┐ │
|
|
│ │ HTTP Handlers │ │
|
|
│ │ │ │
|
|
│ │ GET / → Serve index.html │ │
|
|
│ │ GET /static/* → Serve CSS/JS from embed.FS │ │
|
|
│ │ POST /generate → Generate bash script │ │
|
|
│ │ │ │
|
|
│ └───────────────────────────────────────────────────────────┘ │
|
|
│ ↓ │
|
|
│ ┌───────────────────────────────────────────────────────────┐ │
|
|
│ │ Bash Script Generator │ │
|
|
│ │ │ │
|
|
│ │ • Parse argument definitions (JSON) │ │
|
|
│ │ • Detect flag vs value arguments │ │
|
|
│ │ • Generate usage() function │ │
|
|
│ │ • Generate case statements │ │
|
|
│ │ • Format help output │ │
|
|
│ │ • Return complete bash script │ │
|
|
│ │ │ │
|
|
│ └───────────────────────────────────────────────────────────┘ │
|
|
└─────────────────────────────────────────────────────────────────┘
|
|
↓
|
|
[Complete Bash Script]
|
|
|
|
|
|
Data Flow:
|
|
──────────
|
|
|
|
1. User Input → JavaScript collects form data
|
|
2. JavaScript → POST JSON to /generate endpoint
|
|
3. Go Server → Parses JSON into Argument structs
|
|
4. Generator → Builds bash script string
|
|
5. Response → Returns complete script as text/plain
|
|
6. JavaScript → Displays in code block
|
|
7. User → Copies to clipboard
|
|
|
|
|
|
Key Design Decisions:
|
|
────────────────────
|
|
|
|
├─ Embedded Assets
|
|
│ └─ Single binary deployment, no file dependencies
|
|
│
|
|
├─ Separate Frontend Files
|
|
│ └─ Clean separation: HTML, CSS, JS in own files
|
|
│
|
|
├─ Smart Argument Detection
|
|
│ └─ Keywords (VALUE, FILE, PATH) determine parsing logic
|
|
│
|
|
├─ Real-time Preview
|
|
│ └─ JavaScript updates help output on every keystroke
|
|
│
|
|
└─ Stateless Server
|
|
└─ No session management, pure request/response
|
|
|
|
|
|
Component Sizes:
|
|
───────────────
|
|
|
|
Binary (stripped): 6.4 MB
|
|
├─ Go runtime: ~4.0 MB
|
|
├─ Server code: ~1.0 MB
|
|
└─ Embedded: ~1.4 MB
|
|
├─ HTML: ~2 KB
|
|
├─ CSS: ~5 KB
|
|
└─ JS: ~5 KB
|
|
|
|
|
|
Performance Profile:
|
|
──────────────────
|
|
|
|
Startup Time: < 10ms
|
|
Memory (RSS): ~10 MB
|
|
Request Latency: < 10ms (average)
|
|
Concurrent Users: 1000+ (Go stdlib HTTP server)
|
|
```
|