@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
JavaScript
;
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;