indonesia-nodejs
Version:
Data Wilayah Indonesia terbaru berdasarkan Kepmendagri tahun 2025 - Provinsi, Kabupaten, Kecamatan, Desa
377 lines (278 loc) โข 11.1 kB
Markdown
<div align="center">
# ๐ฎ๐ฉ Indonesia NodeJS
[](https://www.npmjs.com/package/indonesia-nodejs)
[](https://packagephobia.com/result?p=indonesia-nodejs)
[](https://npm-stat.com/charts.html?package=indonesia-nodejs)
[](https://opensource.org/licenses/MIT)
[](https://www.typescriptlang.org/)
[](#-testing)
**๐ Data Wilayah Indonesia Terlengkap & Terbaru**
*Data terbaru 2025 sesuai Kepmendagri No. 300.2.2-2138 Tahun 2025, data daerah-daerah di Indonesia termasuk 38 provinsi, kabupaten/kota, kecamatan, dan desa/kelurahan*
**๐ Fast โข ๐ Type-Safe โข ๐ฆ Zero Dependencies โข โ
Fully Tested**
</div>
## ๐ Daftar Isi
- [โจ Fitur](#-fitur)
- [๐ฆ Instalasi](#-instalasi)
- [๐ Penggunaan](#-penggunaan)
- [Provinsi](#provinsi)
- [Kabupaten/Kota](#kabupatenkota)
- [Kecamatan](#kecamatan)
- [Desa/Kelurahan](#desakelurahan)
- [๐ Struktur Data](#-struktur-data)
- [๐งช Testing](#-testing)
- [โก Performance](#-performance)
- [๐ ๏ธ Development](#๏ธ-development)
- [๐ค Kontribusi](#-kontribusi)
- [๐ Lisensi](#-lisensi)
## โจ Fitur
### ๐ฏ **Data & Akurasi**
- โ
**Data Terlengkap**: 38 provinsi, 514 kabupaten/kota, 7.285 kecamatan, dan 83.762 desa/kelurahan
- โ
**Data Terbaru**: Berdasarkan Kepmendagri tahun 2025
- โ
**Validasi Data**: Semua data telah divalidasi dan diverifikasi
### ๐ง **Developer Experience**
- โ
**TypeScript Native**: Full type safety dengan TypeScript definitions
- โ
**Promise-based API**: Modern async/await support
- โ
**Zero Dependencies**: Tidak ada external dependencies
- โ
**Tree Shaking**: Import hanya fungsi yang dibutuhkan
### ๐ **Pencarian & Filtering**
- โ
**Pencarian Fleksibel**: Berdasarkan kode atau nama (case-insensitive)
- โ
**Relasi Hierarkis**: Navigasi mudah antar tingkat wilayah
- โ
**Fuzzy Search**: Pencarian toleran terhadap typo
### โก **Performance & Quality**
- โ
**Optimized**: Performa tinggi dengan memory usage minimal
- โ
**Fully Tested**: 100% test coverage dengan comprehensive test suite
- โ
**Production Ready**: Telah diuji dalam environment production
## ๐ฆ Instalasi
```bash
# Menggunakan npm
npm install indonesia-nodejs
# Menggunakan yarn
yarn add indonesia-nodejs
# Menggunakan bun
bun add indonesia-nodejs
# Menggunakan pnpm
pnpm add indonesia-nodejs
```
## ๐ Penggunaan
### Provinsi
```typescript
import {
getAllProvinces,
getProvinceByCode,
getProvinceByName
} from 'indonesia-nodejs';
// Mendapatkan semua provinsi
const provinces = await getAllProvinces();
// Mendapatkan provinsi berdasarkan kode
const jakarta = await getProvinceByCode(31);
// Mendapatkan provinsi berdasarkan nama (case-insensitive)
const bali = await getProvinceByName('bali');
```
### Kabupaten/Kota
```typescript
import {
getAllRegencies,
getCityByCode,
getCityByName,
getRegenciesOfProvinceCode,
getRegenciesOfProvinceName
} from 'indonesia-nodejs';
// Mendapatkan semua kabupaten/kota
const cities = await getAllRegencies();
// Mendapatkan kabupaten/kota berdasarkan kode
const bandung = await getCityByCode(3273);
// Mendapatkan kabupaten/kota berdasarkan nama
const surabaya = await getCityByName('surabaya');
// Mendapatkan semua kabupaten/kota di provinsi tertentu (berdasarkan kode)
const citiesInJakarta = await getRegenciesOfProvinceCode(31);
// Mendapatkan semua kabupaten/kota di provinsi tertentu (berdasarkan nama)
const citiesInJogja = await getRegenciesOfProvinceName('yogyakarta');
```
### Kecamatan
```typescript
import {
getAllDistricts,
getDistrictByCode,
getDistrictByName,
getDistrictsOfCityCode,
getDistrictsOfCityName
} from 'indonesia-nodejs';
// Mendapatkan semua kecamatan
const districts = await getAllDistricts();
// Mendapatkan kecamatan berdasarkan kode
const kecamatan = await getDistrictByCode(327301);
// Mendapatkan kecamatan berdasarkan nama
const cilandak = await getDistrictByName('cilandak');
// Mendapatkan semua kecamatan di kota tertentu (berdasarkan kode)
const districtsInBandung = await getDistrictsOfCityCode('3273');
// Mendapatkan semua kecamatan di kota tertentu (berdasarkan nama)
const districtsInSurabaya = await getDistrictsOfCityName('surabaya');
```
### Desa/Kelurahan
```typescript
import {
getAllVillages,
getVillageByCode,
getVillageByName,
getVillagesOfDistrictCode,
getVillagesOfDistrictName
} from 'indonesia-nodejs';
// Mendapatkan semua desa/kelurahan
const villages = await getAllVillages();
// Mendapatkan desa/kelurahan berdasarkan kode
const kelurahan = await getVillageByCode(3273011001);
// Mendapatkan desa/kelurahan berdasarkan nama
const pondokIndah = await getVillageByName('pondok indah');
// Mendapatkan semua desa/kelurahan di kecamatan tertentu (berdasarkan kode)
const villagesInDistrict = await getVillagesOfDistrictCode('327301');
// Mendapatkan semua desa/kelurahan di kecamatan tertentu (berdasarkan nama)
const villagesInCilandak = await getVillagesOfDistrictName('cilandak');
```
## ๐ Struktur Data
### Province (Provinsi)
```typescript
interface Province {
code: number; // Kode provinsi (contoh: 31)
name: string; // Nama provinsi (contoh: "DKI Jakarta")
}
```
### City (Kabupaten/Kota)
```typescript
interface City {
code: number; // Kode kabupaten/kota (contoh: 3171)
province_code: number; // Kode provinsi (contoh: 31)
name: string; // Nama kabupaten/kota (contoh: "Jakarta Pusat")
}
```
### District (Kecamatan)
```typescript
interface District {
code: number; // Kode kecamatan (contoh: 317101)
city_code: number; // Kode kabupaten/kota (contoh: 3171)
name: string; // Nama kecamatan (contoh: "Tanah Abang")
}
```
### Village (Desa/Kelurahan)
```typescript
interface Village {
code: number; // Kode desa/kelurahan (contoh: 3171011001)
district_code: number; // Kode kecamatan (contoh: 317101)
name: string; // Nama desa/kelurahan (contoh: "Gelora")
}
```
## ๐งช Testing
Library ini dilengkapi dengan comprehensive test suite yang mencakup:
### โ
**Test Coverage**
- **100% Function Coverage**: Semua fungsi telah ditest
- **Data Validation**: Validasi struktur dan integritas data
- **Performance Testing**: Monitoring memory usage dan execution time
- **Error Handling**: Test untuk berbagai skenario error
### ๐ **Menjalankan Test**
```bash
# Clone repository
git clone https://github.com/dhank77/indonesia-nodejs.git
cd indonesia-nodejs
# Install dependencies
npm install
# Jalankan test suite
cd test-project
node index.js
# Atau untuk TypeScript test
ts-node index.ts
```
### ๐ **Test Results Example**
```
๐งช Indonesia NodeJS - Comprehensive Test Suite
==============================================
โ
Province Tests: 3/3 passed
โ
City/Regency Tests: 5/5 passed
โ
District Tests: 5/5 passed
โ
Village Tests: 5/5 passed
๐ Performance Metrics:
- Total execution time: 45ms
- Memory usage: 12.5MB
- Average response time: 2.3ms
๐ All tests passed! (18/18)
```
## โก Performance
### ๐ **Benchmarks**
| Operation | Avg Time | Memory Usage |
|-----------|----------|-------------|
| getAllProvinces() | 1.2ms | 0.8MB |
| getProvinceByCode() | 0.3ms | 0.1MB |
| getAllRegencies() | 8.5ms | 2.1MB |
| getCityByCode() | 0.4ms | 0.1MB |
| getAllDistricts() | 45ms | 12MB |
| getDistrictByCode() | 0.5ms | 0.1MB |
| getAllVillages() | 180ms | 45MB |
| getVillageByCode() | 0.6ms | 0.1MB |
### ๐ฏ **Optimizations**
- **Lazy Loading**: Data dimuat hanya saat dibutuhkan
- **Memory Efficient**: Optimized data structures
- **Fast Lookups**: Indexed search untuk performa maksimal
## ๐ ๏ธ Development
### ๐ **Project Structure**
```
indonesia-nodejs/
โโโ src/ # TypeScript source files
โโโ dist/ # Compiled JavaScript files
โโโ data/ # Raw data (JSON & CSV)
โโโ types/ # TypeScript definitions
โโโ test-project/ # Comprehensive test suite
โโโ scripts/ # Build & utility scripts
```
### ๐ง **Build Process**
```bash
# Install dependencies
npm install
# Build TypeScript to JavaScript
npm run build
# Generate type definitions
npm run types
# Run tests
npm test
```
## ๐ค Kontribusi
Kontribusi sangat diterima dan dihargai! Berikut cara berkontribusi:
### ๐ **Melaporkan Bug**
1. Cek [existing issues](https://github.com/dhank77/indonesia-nodejs/issues) terlebih dahulu
2. Buat issue baru dengan template bug report
3. Sertakan informasi detail dan langkah reproduksi
### โจ **Mengusulkan Fitur**
1. Buat issue dengan label "feature request"
2. Jelaskan use case dan manfaat fitur
3. Diskusikan implementasi dengan maintainer
### ๐ง **Pull Request**
1. Fork repository
2. Buat branch untuk fitur/fix: `git checkout -b feature/nama-fitur`
3. Commit perubahan: `git commit -m 'Add: fitur baru'`
4. Push ke branch: `git push origin feature/nama-fitur`
5. Buat Pull Request
### ๐ **Guidelines**
- Ikuti coding style yang ada
- Tambahkan test untuk fitur baru
- Update dokumentasi jika diperlukan
- Pastikan semua test passing
## ๐ Lisensi
Project ini dilisensikan di bawah [MIT License](https://opensource.org/licenses/MIT).
---
## ๐ **Sumber Data**
- **Wilayah**
- Data wilayah Indonesia 2025 berasal dari [Yonatan Yusak Lestari](https://github.com/yonatanyl) bisa lihat di [repo ini](https://github.com/yonatanyl/KODE-WILAYAH-KEPMENDAGRI-2025) yang bersumber langsung dari Kepmendagri 2025.
- Data wilayah Indonesia sebelumnya (< 2025) berasal dari github/api yang saya sudah lupa untuk cantumkan jika merasa itu data anda dengan senang hati kontak saya di [linkedin](https://www.linkedin.com/in/m-hamdani-ilham-latjoro/) atau [email](mailto:d41113512@gmail.com) ataupun buat issue di repo ini.
- **Kode Pos (Cooming soon)**
> ๐จ **Rencana ke depan:** Data **kode pos** akan ditambahkan, insyaAllah, dengan sumber dari [nomor.net](https://nomor.net).
---
## ๐ Acknowledgments
- Terinspirasi dari kebutuhan developer Indonesia
- Terima kasih untuk semua [contributors](https://github.com/dhank77/indonesia-nodejs/graphs/contributors)
## ๐ Support
- ๐ง Email: [d41113512@gmail.com](mailto:d41113512@gmail.com)
- ๐ Issues: [GitHub Issues](https://github.com/dhank77/indonesia-nodejs/issues)
- ๐ฌ Discussions: [GitHub Discussions](https://github.com/dhank77/indonesia-nodejs/discussions)
---
<div align="center">
**๐ฎ๐ฉ Made with โค๏ธ for Indonesian Developers**
Dibuat oleh [M. Hamdani Ilham Latjoro](https://github.com/dhank77)
โญ **Jika project ini membantu, berikan star di GitHub!** โญ
</div>