indokit
Version:
Utility TypeScript untuk format & validasi data Indonesia (Rupiah, NIK, phone, slug, dsb.)
166 lines (120 loc) • 4.29 kB
Markdown
# Apa itu Indokit?
Indokit adalah library TypeScript (Support JS) untuk format & validasi data Indonesia. Definisikan fungsi yang kamu butuhkan dan gunakan dengan mudah. Kamu akan mendapat hasil yang sudah divalidasi dan type-safe!
Ini baru rilis pertama jadi masih sangat sederhana belum sempurna. Namun, sudah cukup bagus untuk kebutuhan dasar.
```typescript
import { formatRupiah, terbilang, isValidNIK } from "indokit";
// format mata uang
formatRupiah(1500000); // "Rp 1.500.000,00"
// konversi angka ke kata-kata
terbilang(1500); // "seribu lima ratus"
// validasi NIK
isValidNIK("1234567890123456"); // true
```
## Fitur
- Zero external dependencies
- Kecil: bundle core hanya ~7kb (gzipped)
- TypeScript-first dengan full type definitions
- Interface yang sederhana
- 100% test coverage
## Instalasi
```bash
pnpm add indokit
npm install indokit
yarn add indokit
```
## Penggunaan Dasar
Sebelum menggunakan, kamu perlu import fungsi yang dibutuhkan:
```typescript
import {
formatRupiah,
terbilang,
isValidNIK,
isValidPhone,
formatTanggalID,
randomString,
} from "indokit";
```
### Format Rupiah
Gunakan `formatRupiah` untuk mengkonversi angka ke format mata uang Rupiah Indonesia.
```typescript
formatRupiah(1000); // "Rp 1.000,00"
formatRupiah(1500000); // "Rp 1.500.000,00"
formatRupiah(-500000); // "-Rp 500.000,00"
formatRupiah(1000.5); // "Rp 1.000,50"
```
### Terbilang (Angka ke Kata)
Fungsi `terbilang` mengkonversi angka menjadi kata-kata dalam bahasa Indonesia.
```typescript
terbilang(1500); // "seribu lima ratus"
terbilang(-500); // "minus lima ratus"
terbilang("1000"); // "seribu" (mendukung string)
terbilang(" 123 "); // "seratus dua puluh tiga" (auto-trim)
```
### Handling Error
Ketika input tidak valid, fungsi `terbilang` akan throw `TypeError` dengan pesan yang jelas:
```typescript
try {
terbilang("abc");
} catch (err) {
console.log(err.message); // "terbilang: input tidak boleh berupa huruf"
}
try {
terbilang(1.5);
} catch (err) {
console.log(err.message); // "terbilang: input harus berupa bilangan bulat"
}
```
### Validasi NIK
Gunakan `isValidNIK` untuk memvalidasi format NIK:
```typescript
isValidNIK("1234567890123456"); // true
isValidNIK("123456789012345"); // false (kurang dari 16 digit)
isValidNIK("123456789012345a"); // false (mengandung huruf)
```
### Validasi Nomor HP
Fungsi `isValidPhone` mendukung berbagai format nomor HP Indonesia:
```typescript
isValidPhone("08123456789"); // true
isValidPhone("+628123456789"); // true
isValidPhone("628123456789"); // true
isValidPhone("07123456789"); // false (tidak dimulai dengan 8)
```
### Format Tanggal Indonesia
Konversi tanggal ke format bahasa Indonesia:
```typescript
formatTanggalID("2023-08-17"); // "17 Agustus 2023"
formatTanggalID(new Date("2023-12-25")); // "25 Desember 2023"
formatTanggalID(1692230400000); // "17 Agustus 2023"
```
### Random String
Generate string acak untuk berbagai keperluan:
```typescript
randomString(8); // "aB3xY9Zk"
randomString(16); // "mN8pQ2rS7tU4vW6x"
randomString(0); // ""
```
## Error Handling
Semua fungsi di Indokit memiliki error handling yang konsisten. Ketika terjadi error, kamu akan mendapat `TypeError` dengan pesan yang jelas:
```typescript
// Contoh berbagai error yang mungkin terjadi
terbilang(null); // TypeError: input tidak boleh null atau undefined
terbilang("123abc"); // TypeError: input tidak boleh mengandung campuran huruf dan angka
formatRupiah(NaN); // TypeError: formatRupiah: angka must be a number
randomString(-1); // TypeError: randomString: length must be a non-negative integer
```
## TypeScript Support
Indokit ditulis dalam TypeScript dan menyediakan type definitions yang lengkap:
```typescript
import { formatRupiah, terbilang } from "indokit";
// TypeScript akan otomatis mendeteksi tipe return
const rupiah: string = formatRupiah(1000);
const kata: string = terbilang(1500);
// Error akan muncul saat compile time jika tipe salah
formatRupiah("1000"); // ❌ TypeScript error
```
## License
MIT License - lihat file [LICENSE](LICENSE) untuk detail lengkap.
**Nashih Amin**
- GitHub: [@nashihamm](https://github.com/nashihamm)
- LinkedIn: [Nashih Amin](https://www.linkedin.com/in/nashihamm)
- Instagram: [@nashihamm](https://instagram.com/nashihamm)