UNPKG

@bangladeshi/bangladesh-address

Version:

A simple npm package for Bangladesh's administrative divisions, districts, upazilas, and metropolitan thanas.

62 lines (61 loc) 2.35 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.getDivisionOfDistrict = exports.isValidDistrict = exports.allDistricts = exports.districtsOf = void 0; const bd_upazila_json_1 = __importDefault(require("../json/bd-upazila.json")); const division_1 = require("../division/division"); // Pre-computed set for O(1) district validation const districtNameSet = new Set(bd_upazila_json_1.default.map((item) => item.district.toLowerCase())); // Pre-computed map for O(1) district to division lookup const districtToDivisionMap = new Map(); bd_upazila_json_1.default.forEach((item) => { districtToDivisionMap.set(item.district.toLowerCase(), item.division); }); /** * Get all districts in a given division * @param division - The division name * @returns Array of district names in the division */ const districtsOf = (division) => { const filteredDivision = (0, division_1.getDivision)(division); const districts = new Set(); filteredDivision.forEach((item) => districts.add(item.district)); return Array.from(districts); }; exports.districtsOf = districtsOf; /** * Get all districts in Bangladesh * @returns Array of all district names (64 districts) */ const allDistricts = () => { const districts = new Set(); bd_upazila_json_1.default.forEach((item) => districts.add(item.district)); return Array.from(districts); }; exports.allDistricts = allDistricts; /** * Check if a name is a valid district * @param name - The name to check * @returns true if the name is a valid district, false otherwise */ const isValidDistrict = (name) => { if (!name || typeof name !== "string") { return false; } return districtNameSet.has(name.trim().toLowerCase()); }; exports.isValidDistrict = isValidDistrict; /** * Get the division for a given district (reverse lookup) * @param district - The district name * @returns The division name if found, undefined otherwise */ const getDivisionOfDistrict = (district) => { if (!district || typeof district !== "string") { return undefined; } return districtToDivisionMap.get(district.trim().toLowerCase()); }; exports.getDivisionOfDistrict = getDivisionOfDistrict;