UNPKG

mm-states

Version:

Myanmar states and regions including township with postalcode(mm, en)

131 lines (114 loc) 3.64 kB
import statesData from './data/states.json'; import townshipsData from './data/townships.json'; interface State { id: string; name: string; mm_name: string; capital: string; postal_code_prefix: string; type: string; area_sq_km?: number; population?: number; } interface Township { name: string; mm_name: string; postal_code: string; districts?: Township[]; } /** * Get all states/regions of Myanmar * @returns Array of State objects */ export function getAllStates(): State[] { return statesData; } /** * Get a state/region by its ID * @param id - State ID (e.g., '12' for Yangon) * @returns State object or undefined if not found */ export function getStateById(id: string): State | undefined { return statesData.find(state => state.id === id); } /** * Get townships by state/region ID * @param stateId - State ID (e.g., '09' for Mandalay) * @returns Array of Township objects */ export function getTownshipsByStateId(stateId: string): Township[] { return townshipsData[stateId as keyof typeof townshipsData] || []; } /** * Get townships by state/region name (case insensitive) * @param stateName - State name (e.g., 'yangon') * @returns Array of Township objects */ export function getTownshipsByStateName(stateName: string): Township[] { const state = statesData.find( s => s.name.toLowerCase() === stateName.toLowerCase() ); return state ? getTownshipsByStateId(state.id) : []; } /** * Search townships by name across all states (case insensitive) * @param townshipName - Partial or full township name * @returns Array of Township objects with state information */ export function searchTownships(townshipName: string): Array<{ township: Township; state: State; }> { const results: Array<{ township: Township; state: State }> = []; statesData.forEach(state => { const townships = getTownshipsByStateId(state.id); townships.forEach(township => { if ( township.name.toLowerCase().includes(townshipName.toLowerCase()) || township.mm_name.includes(townshipName) ) { results.push({ township, state }); } // Search in districts if they exist if (township.districts) { township.districts.forEach(district => { if ( district.name.toLowerCase().includes(townshipName.toLowerCase()) || district.mm_name.includes(townshipName) ) { results.push({ township: district, state }); } }); } }); }); return results; } /** * Get postal code information by code * @param postalCode - 5-digit postal code * @returns { township: Township, state: State } or undefined if not found */ export function getByPostalCode(postalCode: string): { township: Township; state: State } | undefined { if (!/^\d{5}$/.test(postalCode)) return undefined; const statePrefix = postalCode.substring(0, 2); const state = getStateById(statePrefix); if (!state) return undefined; const townships = getTownshipsByStateId(statePrefix); for (const township of townships) { if (township.postal_code === postalCode) { return { township, state }; } // Check districts if they exist if (township.districts) { for (const district of township.districts) { if (district.postal_code === postalCode) { return { township: district, state }; } } } } return undefined; } // Export types for TypeScript users export type { State, Township };