UNPKG

algeria-wilayas

Version:

A comprehensive package for handling Algerian administrative divisions

86 lines (63 loc) 2.55 kB
import { Wilaya, Daira, Commune, Language, BilingualName } from './types'; import wilayas from './data/wilayas.json'; import dairas from './data/dairas.json'; import communes from './data/communes.json'; class AlgerianWilayas { private wilayas: Wilaya[]; private dairas: Daira[]; private communes: Commune[]; constructor() { this.wilayas = wilayas; this.dairas = dairas; this.communes = communes; } getAllWilayas(): Wilaya[] { return this.wilayas; } getWilayaByCode(code: string): Wilaya | undefined { return this.wilayas.find(w => w.code === code); } getDairasByWilaya(wilayaCode: string): Daira[] { return this.dairas.filter(d => d.wilaya_code === wilayaCode); } getDairaById(dairaId: string): Daira | undefined { return this.dairas.find(d => d.id === dairaId); } getCommunesByWilaya(wilayaCode: string): Commune[] { return this.communes.filter(c => c.wilaya_code === wilayaCode); } getCommunesByDaira(dairaId: string): Commune[] { const daira = this.getDairaById(dairaId); if (!daira) return []; return this.communes.filter( c => c.daira_name_ascii === daira.name.ascii && c.wilaya_code === daira.wilaya_code ); } getWilayaName(code: string, language: Language = 'ascii'): string | undefined { const wilaya = this.getWilayaByCode(code); return wilaya?.name[language]; } getWilayaStats(wilayaCode: string) { const communes = this.getCommunesByWilaya(wilayaCode); const dairas = this.getDairasByWilaya(wilayaCode); return { totalCommunes: communes.length, totalDairas: dairas.length, communesPerDaira: dairas.map(daira => ({ daira: daira.name, communeCount: this.getCommunesByDaira(daira.id).length })) }; } /** * Convert wilaya code to formatted string (e.g., "01" -> "01", "1" -> "01") */ formatWilayaCode(code: string | number): string { return code.toString().padStart(2, '0'); } } // Export default instance export default new AlgerianWilayas(); // Export types export * from './types';