npm package: @kazedevid/jawa-script
Description: Library Node.js untuk mengubah syntax JavaScript menjadi bahasa Jawa
Author: KazeDevID
Latest version: 1.0.0

# Jawa Script 🇮🇩

Library Node.js untuk mengubah syntax JavaScript menjadi bahasa Jawa. Belajar programming sambil melestarikan budaya!

## 📦 Instalasi

```bash
npm install @kazedevid/jawa-script
```

## 🚀 Penggunaan Dasar

```javascript
const JawaScript = require('@kazedevid/jawa-script');

// Inisialisasi
const translator = new JawaScript();

// Contoh konversi
const jsCode = `
function greet(name) {
    console.log("Hello " + name);
    if (name === "Budi") {
        return true;
    }
    return false;
}
`;

const jawaCode = translator.translate(jsCode);
console.log(jawaCode);
```

**Output:**
```javascript
fungsi salam(jeneng) {
    cetak.log("Hello " + jeneng);
    yen (jeneng === "Budi") {
        bali benar;
    }
    bali salah;
}
```

## 📚 API Reference

### `new JawaScript(options)`

Membuat instance baru dari JawaScript translator.

**Options:**
- `customKeywords` (Object): Kata kunci kustom tambahan
- `preserveComments` (Boolean): Mempertahankan komentar (default: true)

```javascript
const translator = new JawaScript({
    customKeywords: {
        'array': 'larik',
        'object': 'objek'
    },
    preserveComments: true
});
```

### `translate(code)`

Mengubah kode JavaScript menjadi bahasa Jawa.

**Parameter:**
- `code` (String): Kode JavaScript yang akan diterjemahkan

**Return:** String - Kode dalam bahasa Jawa

### `addCustomKeyword(jsKeyword, jawaKeyword)`

Menambah kata kunci kustom.

```javascript
translator.addCustomKeyword('fetch', 'jupuk');
translator.addCustomKeyword('async', 'ora_langsung');
```

### `exportToFile(translatedCode, filename)`

Menyimpan hasil terjemahan ke file.

```javascript
translator.exportToFile(jawaCode, 'output.jawa.js');
```

### `getAvailableKeywords()`

Mendapatkan daftar semua kata kunci yang tersedia.

```javascript
const keywords = translator.getAvailableKeywords();
console.log(keywords);
```

## 🔤 Kata Kunci yang Didukung

### Fungsi Built-in
| JavaScript | Bahasa Jawa | Keterangan |
|------------|-------------|------------|
| `console.log` | `cetak.log` | Menampilkan output |
| `console.error` | `cetak.salah` | Menampilkan error |
| `parseInt` | `angkaInt` | Konversi ke integer |
| `parseFloat` | `angkaFloat` | Konversi ke float |
| `JSON.parse` | `JSON.urai` | Parse JSON |
| `JSON.stringify` | `JSON.gabung` | Stringify JSON |

### Kata Kunci Kontrol
| JavaScript | Bahasa Jawa | Keterangan |
|------------|-------------|------------|
| `function` | `fungsi` | Deklarasi fungsi |
| `if` | `yen` | Kondisi if |
| `else` | `liyane` | Kondisi else |
| `for` | `kanggo` | Loop for |
| `while` | `nalika` | Loop while |
| `return` | `bali` | Return statement |
| `break` | `mandheg` | Break statement |
| `continue` | `terus` | Continue statement |

### Tipe Data & Variabel
| JavaScript | Bahasa Jawa | Keterangan |
|------------|-------------|------------|
| `var` | `ganti` | Variable declaration |
| `let` | `ayo` | Let declaration |
| `const` | `tetep` | Constant declaration |
| `true` | `benar` | Boolean true |
| `false` | `salah` | Boolean false |
| `null` | `kosong` | Null value |
| `undefined` | `ora_didefinisi` | Undefined value |

### ES6+ Features
| JavaScript | Bahasa Jawa | Keterangan |
|------------|-------------|------------|
| `arrow function =>` | `panah =>` | Arrow function |
| `async` | `ora_langsung` | Async function |
| `await` | `ngenteni` | Await keyword |
| `import` | `lebokno` | Import statement |
| `export` | `metu` | Export statement |
| `class` | `kelas` | Class declaration |

## 🌟 Contoh Lengkap

```javascript
const JawaScript = require('@kazedevid/jawa-script');

// Kode JavaScript asli
const originalCode = `
class Calculator {
    constructor() {
        this.result = 0;
    }
    
    add(number) {
        this.result += number;
        return this;
    }
    
    subtract(number) {
        this.result -= number;
        return this;
    }
    
    getResult() {
        return this.result;
    }
}

const calc = new Calculator();
const result = calc.add(10).subtract(5).getResult();
console.log("Hasil:", result);
`;

// Terjemahkan
const translator = new JawaScript();
const jawaCode = translator.translate(originalCode);

// Simpan ke file
translator.exportToFile(jawaCode, 'kalkulator.jawa.js');

console.log('Terjemahan berhasil disimpan!');
```

**Output (kalkulator.jawa.js):**
```javascript
kelas Kalkulator {
    konstruktor() {
        iki.asil = 0;
    }
    
    tambah(angka) {
        iki.asil += angka;
        bali iki;
    }
    
    kurang(angka) {
        iki.asil -= angka;
        bali iki;
    }
    
    jupukAsil() {
        bali iki.asil;
    }
}

tetep calc = anyar Kalkulator();
tetep asil = calc.tambah(10).kurang(5).jupukAsil();
cetak.log("Asil:", asil);
```

## 🎯 Use Cases

1. **Edukasi Programming**: Membantu pemula belajar JavaScript dengan bahasa yang familiar
2. **Pelestarian Budaya**: Mengenalkan bahasa Jawa dalam konteks teknologi modern
3. **Code Review**: Membuat kode lebih mudah dipahami untuk developer lokal
4. **Dokumentasi**: Menulis dokumentasi teknis dalam bahasa Jawa

## 🤝 Berkontribusi

Kami sangat senang menerima kontribusi! Berikut cara berkontribusi:

1. Fork repository ini
2. Buat branch feature (`git checkout -b feature/kata-kunci-baru`)
3. Commit perubahan (`git commit -am 'Tambah kata kunci baru'`)
4. Push ke branch (`git push origin feature/kata-kunci-baru`)
5. Buat Pull Request

### Menambah Kata Kunci Baru

Edit file `src/keywords.js` untuk menambah kata kunci baru:

```javascript
// Tambahkan di object yang sesuai
builtInFunctions: {
    'setTimeout': 'setWaktu',
    'setInterval': 'setInterval'
}
```

## 📝 Roadmap

- [ ] Support untuk TypeScript
- [ ] Plugin untuk VS Code
- [ ] Web-based translator
- [ ] Support bahasa daerah lainnya
- [ ] Integration dengan bundler populer

## 🐛 Bug Reports

Jika menemukan bug, silakan buat issue di [GitHub Issues](https://github.com/KazeDevID/jawa-script/issues) dengan:

1. Deskripsi bug
2. Kode yang bermasalah
3. Expected vs actual behavior
4. Environment info (Node version, OS)

## 📄 Lisensi

MIT License - lihat file [LICENSE](LICENSE) untuk detail lengkap.

## 🙏 Acknowledgments

- Terinspirasi dari kearifan lokal bahasa Jawa
- Terima kasih kepada komunitas JavaScript Indonesia
- Special thanks untuk semua kontributor

---

**Dibuat dengan ❤️ untuk melestarikan budaya sambil belajar teknologi**