algeria-wilayas
Version:
A comprehensive package for handling Algerian administrative divisions
86 lines (63 loc) • 2.55 kB
text/typescript
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';