---
title: 'CLI'
description: "Alat json-eval-cli menyediakan antarmuka baris perintah (CLI) yang tangguh untuk mengevaluasi schema JSON dengan dukungan untuk:"
navigation:
  icon: 'i-ph-terminal'
seo:
  title: 'CLI'
  description: "Alat json-eval-cli menyediakan antarmuka baris perintah (CLI) yang tangguh untuk mengevaluasi schema JSON dengan dukungan untuk:"
---

## Tinjauan (Overview)

- Format schema JSON dan MessagePack
- Format data JSON dan MessagePack
- Caching ParsedSchema dan inspeksi skema
- Tolok ukur kinerja (Benchmarking)
- Perbandingan hasil dan validasi

## Dukungan Berkas Input

### Berkas Schema
- **JSON** (`.json`) - Berkas schema standar JSON
- **MessagePack** (`.bform`) - Berkas schema bentuk binari hasil kompilasi

### Berkas Data
- **JSON** (`.json`) - Berkas data standar JSON
- **MessagePack** (`.bform`) - Berkas data binari (otomatis dikonversi ke JSON saat evaluasi)

Baik berkas schema maupun data mendukung format ini secara independen silang:
```bash
# JSON schema + JSON data
./json-eval-cli schema.json -d data.json

# MessagePack schema + JSON data
./json-eval-cli schema.bform -d data.json

# JSON schema + MessagePack data
./json-eval-cli schema.json -d data.bform

# MessagePack schema + MessagePack data
./json-eval-cli schema.bform -d data.bform
```

## Opsi Utama

### Evaluasi Dasar

- **`-d, --data <FILE>`**: Data input untuk dievaluasi terhadap schema. Mendukung standar JSON (`.json`) atau binari MessagePack (`.bform`). Jika tidak dispesifikasikan, CLI akan menggunakan secara asali (default) data kosong sesuai kebutuhan schema.
- **`-o, --output <FILE>`**: Menentukan jalur (path) berkas di mana hasil akhir schema yang telah dievaluasi harus disimpan (biasanya berkas `.json`).
- **`--no-output`**: Menahan/mematikan penulisan keluaran file dan hasil teks konsol (log). Opsi ini krusial dan wajib jika mengetes kalkulasi durasi benchmark karena operasi I/O input penulisan log merusak hasil waktu kinerja.

### Performa (Performance)

- **`-p, --parsed`**: Mengaktifkan mode caching (penyimpanan sementara memori) `ParsedSchema`. Daripada memulai percontohan skema dari titik nol setiap kali, opsi CLI ini melakukan parsing lalu memproses memori sekali (reusable). Sangat disarankan dipakai karena menyimulasikan situasi kerja nyata dan memberi ukuran literasi tepat akurat.
- **`-i, --iterations <N>`**: Menjalankan evaluasi berulang kali sebanyak `N` kali. Biasa dipakai saat tes khasiat Engine Caching, pelacakan adanya kebocoran memori RAM (memory leaks), dan ukuran waktu mentah kinerja murni bebas beban pembuatan / parsing skrip ulang. Angka patokan asal (default) adalah `1`.

### Validasi

- **`-c, --compare <FILE>`**: Membandingkan hasil output eksekusi kalkulasi evaluasi dengan data berkas pembanding (expected output) guna keperluan regresi tes automatisasi QA.
- **`--compare-path <PATH>`**: *(Digunakan dengan `--compare`)* Menspesifikasikan alamat pointer field JSON spesifik yang dibandingkan guna menghilangkan data rentan fluktuatif hasil stempel waktu atau random id. Path default: `"$.$params.others"`.

## Inspeksi Parsed Schema

Fitur baru untuk memantau arsitektur internal ParsedSchema:

### Flag Inspeksi Individu

**`--print-sorted-evaluations`**
Menampilkan bundel batch rincian terurut kompilasinya agar tahu apa bisa dieksekusi paralel (bareng-bareng):
```bash
./json-eval-cli schema.json -d data.json --parsed \
  --print-sorted-evaluations
```
Bentuk Output:
- Angka banyaknya Batch yang dikesekusi
- Evaluasi per setiap lapis grup kompilasi 
- Jalur lari/order barisan eksekusinya yang runtut

**`--print-dependencies`**
Memunculkan jaring urat nadi peta grafik hubungannya per masing-masing evaluasi skema satu sama lainnya:
```bash
./json-eval-cli schema.json -d data.json --parsed \
  --print-dependencies
```
Bentuk Output:
- Ketahuan evaluasi dari data A sangat menggatung data di Path B atau bukan.
- Rukun Topologikal dan Silsilah relasinya

**`--print-tables`**
Menampilkan definisi tabel yang diekstraksi mesin dari rumusan schema aslinya:
```bash
./json-eval-cli schema.json -d data.json --parsed \
  --print-tables
```
Bentuk Output:
- Sebutan pelabelan Tabel berserta definisinya sekalian
- Barisan data baris rows, lewati skip dan instruksi kliring berdasar dari konfigurasi asalnya

**`--print-evaluations`**
Tampilkan logika yang telah selesai disusun berbarengan kode identitas relasional (Logic ID) buatannya:
```bash
./json-eval-cli schema.json -d data.json --parsed \
  --print-evaluations
```
Bentuk Output:
- Jalan path titik tuju evaluasi → Diarahkan Mapping LogicID Nomor Berapa
- Angka akumulasi ekspresi logika hasil sintesis pengembangannya

**`--print-all`**
Memborong ke semua opsi rincian info diagnostik dari CLI flag di atas sekaligus:
```bash
./json-eval-cli schema.json -d data.json --parsed \
  --print-all
```

## Contoh Penggunaan Praktis

### 1. Evaluasi Standar
```bash
cargo run --bin json-eval-cli -- schema.json -d data.json
```

### 2. Benchmark dengan ParsedSchema
```bash
cargo run --release --bin json-eval-cli -- schema.json \
  -d data.json --parsed -i 100 --no-output
```

### 3. Validasi dengan Target Perbandingan (Expected Output)
```bash
cargo run --bin json-eval-cli -- schema.json \
  -d data.json \
  -c expected.json \
  --compare-path "/$params/others"
```

### 4. Inspeksi Struktur Skema
```bash
cargo run --bin json-eval-cli -- schema.json \
  -d data.json --parsed --no-output \
  --print-sorted-evaluations \
  --print-dependencies
```

### 5. Inspeksi Penuh & Output Lengkap
```bash
cargo run --bin json-eval-cli -- schema.bform \
  --data data.bform \
  --compare expected.json \
  --compare-path "$.$params.others" \
  --parsed \
  --iterations 50 \
  --output result.json \
  --print-all
```

### 6. Pengukuran Modul Binary MessagePack
```bash
cargo run --bin json-eval-cli -- schema.bform \
  -d data.json --parsed --no-output \
  --print-sorted-evaluations
```

## Bentuk Hasil Cetakan (Output Format)

### Tampilan Cetakan Awal Biasa Standar (Standard)
```
🚀 JSON Evaluation CLI

📄 Schema: samples/zcc.json (JSON)
📊 Data: samples/zcc-data.json (JSON)
📦 Mode: ParsedSchema (parse once, reuse)
🔄 Iterations: 100

⏱️  Schema parsing: 470.561ms
.....................
⏱️  Evaluation: 85.234s
   Average per iteration: 852.34ms
⏱️  Total time: 85.704s

✅ Evaluation completed successfully!
```

### Keluaran Rincian Pemeriksaan Parsed Schema Inspection 
```
============================================================
📋 PARSED SCHEMA INFORMATION
============================================================

🔄 Sorted Evaluations:
   6 batches total

   Batch 1 (13 evaluations):
     - #/$params/others/CURR_A_VALUE
     - #/$params/others/CURR_B_VALUE
     ...

🔗 Dependencies:
   133 evaluation(s) with dependencies

   #/$params/constants/POL_DURATION depends on:
     → /illustration/insured/insage
     → /illustration/product_benefit/product/prod_package_comp
     ...

📊 Tables:
   3 table(s) defined

   #/$params/references/ZLOB_RATE:
     { ... }

⚙️  Evaluations:
   206 evaluation(s) compiled
     #/$params/constants/POL_DURATION → LogicId(0)
     ...

============================================================
```

## Kiats Terampil / Panduan (Performance Tips)

1. **Pakai Flag/Argumen `--parsed` bila memutar Loop Literasi ganda / `--iterations`**
   - Mengkaji perwujudan Parse Schema mentah 1 kali awal lalu dipilah-pakai (reusable logic compilation) berulang ratusan kali tanpa membebani. 
   - Bukti lonjakan daya saing performa mencolok gila cepatnya.

2. **Gunakan Opsi Selubung Output (`--no-output`) Saat Melakukan Benchmarking Tolok Ukur Pengetesan Jeroan**
   - Menyelubungi (skip/bypass output buffer) fase serialization yang tidak dibutuhkan.
   - Angka ukuran kecepatannya bisa dibilang otentik (murni kinerja evaluasinya tak ternoda pemindahan berkas file tulisan I/O Harddisk PC kita). 

3. **Pastikan Selalu Gunakan Rilis Build Final (`Release Build`) Sewaktu Tolok Ukur / Benchmark Pengetesan Realistis Sebenarnya**
   ```bash
   cargo build --release --bin json-eval-cli
   ./target/release/json-eval-cli schema.json -d data.json --parsed -i 1000
   ```

4. **Sistem Tipe Berkas Binari Sangatlah Kuat Dibanding Teks (MessagePack Schemas VS JSON String)**
   - Format wujud binary sudah terangkai khusus sebelumnya.
   - Paling lambat memangkas waktu Parsing (Membedah File Awal) 2 hingga 3 kali kelipatan kemajuan kilat di ranah pembukaannya ketimbang File Berkas (.json) JSON biasa. 

## Aturan Error Laporan Pesan Kegagalan Sistem (Error Handling)

Antarmuka CLI JSON-EVAL akan membabar kesalahan transparan pada layar bilamana terjadi kendala:
- Hilangnya Dokumen Data File sasaran / Alamat Folder keliru
- Salah/rusaknya struktur bentuk data Schema JSON format  
- Kehancuran (Crash / failure error runtime) mesin Evaluasi terhimpit
- Meleset dari ekspektasi Compare Validation data perbandingan.

Indikasi Lampu Indeks Error Keluar (Exit Codes):
- `0` - Mulia Lancar Tanpa Kecacatan Selesai Tuntas (Success)
- `1` - Gagal Parah Cacat Prosedur Eksekusi (Error: File terhapus/sulit dicari, Hancur lebur mesin Parse terinjak logic cacat bawaan, dll). 
  
## Baca Informasi Referensi Lain (See Also)

- [README.md](https://github.com/byrizki/jsoneval-rs) - File ReadMe Beranda Utama Repositori Github Ini
