@ibnumardini/wilayah-indonesia
Version:
Wilayah Indonesia - A CLI tool to manage and transform Indonesian administrative data.
205 lines (145 loc) ⢠4.07 kB
Markdown
# Wilayah Indonesia
A CLI tool to manage and transform Indonesian administrative data from BPS (Badan Pusat Statistik) API.
## Description
This tool helps you fetch the latest Indonesian administrative division data (provinces, regencies, districts, subdistricts and postal codes) from the official BPS API and transform it into a clean, relational format suitable for applications.
## Features
- š Fetch complete Indonesian administrative data from BPS API
- š Transform raw data into structured relational format
- š Organized data structure with both raw and transformed versions
- šÆ CLI interface with simple commands
- ā” Concurrent API requests with rate limiting
## Installation
```bash
npm install -g @ibnumardini/wilayah-indonesia
```
Or run directly with npx:
```bash
npx @ibnumardini/wilayah-indonesia
```
## Usage
### Type of Transform
1. `json` (Javascript Object Notation)
2. `csv` (Comma Separated Values)
3. `sql` (Structured Query Language)
### Fetch Latest Data
Fetch the latest administrative data from BPS API:
```bash
wilayah-indonesia --fetch
# or
wilayah-indonesia -f
```
### Transform Data
Transform raw data into relational format (replace `type`):
```bash
wilayah-indonesia --transform <type>
# or
wilayah-indonesia -t <type>
```
### Fetch and Transform
You can combine both operations:
```bash
wilayah-indonesia --fetch --transform <type>
```
## Project Structure
```bash
āāā data/
ā āāā raw/ # Raw data from BPS API
ā ā āāā 1-provinces.json
ā ā āāā 2-regencies.json
ā ā āāā 3-districts.json
ā ā āāā 4-subdistricts.json
ā ā āāā 5-postcodes.json
ā āāā transformed/ # Cleaned and structured data
ā āāā json/
ā ā āāā *.json
ā āāā csv/
ā ā āāā *.csv
ā āāā sql/
ā āāā *.sql
āāā src/
ā āāā index.js # Main CLI entry point
ā āāā fetch-data.js # BPS API data fetching
ā āāā transform-data.js # Data transformation logic
ā āāā helper/
ā āāā file.js # File operations utilities
ā āāā sql.js # SQL tranformation utilities
ā āāā logger.js # Logging utilities
ā āāā string.js # String manipulation utilities
āāā package.json
```
## Data Format
### Raw Data
Raw data maintains the original structure from BPS API with fields like `kode_bps` and `nama_bps`.
### Transformed Data
The transformed data provides a cleaner structure:
**Provinces:**
```json
{
"code": "11",
"name": "Aceh"
}
```
**Regencies:**
```json
{
"code": "1101",
"name": "Simeulue",
"province_code": "11"
}
```
**Districts:**
```json
{
"code": "1101010",
"name": "Teupah Selatan",
"regency_code": "1101"
}
```
**Subdistricts:**
```json
{
"code": "1101010001",
"name": "Latiung",
"district_code": "1101010"
}
```
**Postal Codes:**
```json
{
"code": "23891",
"name": "Latiung",
"subdistrict_code": "1101010001"
}
```
## Development
### Prerequisites
- Node.js (version 14 or higher)
- pnpm (recommended) or npm
### Setup
1. Clone the repository:
```bash
git clone <repository-url>
cd wilayah-indonesia
```
2. Install dependencies:
```bash
pnpm install
```
3. Run development commands:
```bash
# Fetch data only
pnpm run fetch-data
# Transform data only
pnpm run transform-data
```
## Dependencies
- **commander**: CLI framework for building command-line tools
- **p-limit**: Concurrency control for API requests
## Data Source
This tool fetches data from the official Indonesian Bureau of Statistics (BPS) API, ensuring you get the most up-to-date administrative division information.
## License
Apache-2.0
## Author
Muhammad Fatkurozi <<fatkurozy.muhammad28@gmail.com>>
## Contributing
Contributions are welcome! Please feel free to submit a Pull Request.