Skip to content

choiruladamm/indo-dev-utils

Repository files navigation

@indodev/toolkit

CI npm version TypeScript License: MIT

TypeScript utilities for Indonesian data. Handles Rupiah formatting, terbilang, NIK validation, phone normalization, date formatting, and text rules that generic libraries don't cover.

Install

npm install @indodev/toolkit

Highlights

Currency — Smart Rupiah Formatting

import {
  formatRupiah,
  formatCompact,
  toWords,
  formatAccounting,
} from '@indodev/toolkit/currency';

formatRupiah(1500000); // 'Rp 1.500.000'
formatCompact(1500000); // 'Rp 1,5 juta'
formatCompact(1000000); // 'Rp 1 juta'  ← NO "1,0 juta"
toWords(1500000); // 'satu juta lima ratus ribu rupiah'
formatAccounting(-500000); // '(Rp 500.000)'

Text — Indonesian-Specific Rules

import {
  toTitleCase,
  expandAbbreviation,
  toFormal,
  isAlay,
  slugify,
} from '@indodev/toolkit/text';

toTitleCase('pt bank central asia'); // 'PT Bank Central Asia'
expandAbbreviation('Jl. Sudirman'); // 'Jalan Sudirman'
expandAbbreviation('Dr. Joko, S.H.'); // 'Doktor Joko, Sarjana Hukum'
toFormal('gw lg makan deh'); // 'saya sedang makan'
isAlay('aqU sAyAnG kMu'); // true
slugify('Pria & Wanita'); // 'pria-dan-wanita'

DateTime — Indonesian Locale

import {
  formatDate,
  parseDate,
  toRelativeTime,
  getAge,
  isWorkingDay,
} from '@indodev/toolkit/datetime';

formatDate(new Date('2026-01-02'), 'long'); // '2 Januari 2026'
parseDate('02-01-2026'); // Date(2026, 0, 2)
toRelativeTime(Date.now() - 3600000); // '1 jam yang lalu'
getAge('1990-06-15'); // { years: 35, months: 9, ... }
isWorkingDay(new Date('2026-01-01')); // false (Tahun Baru)

More Modules

Validate and parse Indonesian identity documents:

import { validateNIK, parseNIK } from '@indodev/toolkit/nik';
import { validateNPWP, formatNPWP } from '@indodev/toolkit/npwp';
import { formatPhoneNumber, maskPhoneNumber } from '@indodev/toolkit/phone';

validateNIK('3201234567890123'); // true
parseNIK('3201234567890123').province.name; // 'Jawa Barat'

validateNPWP('012345678901234'); // true
formatPhoneNumber('081234567890', 'international'); // '+62 812-3456-7890'
maskPhoneNumber('081234567890'); // '0812****7890'

All Modules

Module Description
Currency Format Rupiah, terbilang, split amounts, percentages
Text Title case, slugs, abbreviations, case conversion, masking
DateTime Indonesian date formatting, relative time, age calculation
NIK Validate, parse, and mask Indonesian National Identity Numbers
NPWP Validate and format Tax Identification Numbers
Phone Format, validate, and detect mobile operators
Email Validate emails with disposable domain detection
Plate Validate license plates with region detection
VIN Validate Vehicle Identification Numbers (ISO 3779)

Full docs, examples, and API reference at toolkit.adamm.cloud

MIT