UNPKG

sg-areas

Version:

Find regions, areas and subzones in Singapore

90 lines 3.37 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.getNearest = exports.getSubzones = exports.getAreas = exports.administrativeLocations = void 0; const geolib_1 = require("geolib"); const data = __importStar(require("./data")); const interfaces_1 = require("./interfaces"); exports.administrativeLocations = { Region: interfaces_1.Region, Area: interfaces_1.Area, Subzone: interfaces_1.Subzone }; const getAreas = (regions) => { if (regions && regions.length > 0) { return Object.keys(data.areas.default) .filter((id) => regions.includes(data.areas.default[id].region)) .reduce((obj, id) => { obj[id] = data.areas.default[id]; return obj; }, {}); } return data.areas.default; }; exports.getAreas = getAreas; const getSubzones = (areas) => { if (areas && areas.length > 0) { return Object.keys(data.subzones.default) .filter((id) => areas.includes(data.subzones.default[id].area)) .reduce((obj, id) => { obj[id] = data.subzones.default[id]; return obj; }, {}); } return data.subzones.default; }; exports.getSubzones = getSubzones; const getNearest = (origin, options = { closest: 1 }) => { if (options.closest <= 0) return { areas: {}, subzones: {} }; const areas = data.areas.default; const subzones = data.subzones.default; const areaResults = {}; const subzoneResults = {}; const temp = []; const appendDistance = (locations) => { Object.keys(locations).forEach((id) => { const loc = locations[id]; if (loc.coordinates) { const distance = geolib_1.getDistance(origin, loc.coordinates, 1); temp.push(Object.assign(Object.assign({ id }, loc), { distance })); } }); }; const sortSliceFormat = (locationResults) => { return temp .sort((a, b) => { return a.distance < b.distance ? -1 : 1; }) .slice(0, options.closest) .forEach((obj) => { const id = obj.id; delete obj.id; locationResults[id] = obj; }); }; appendDistance(areas); sortSliceFormat(areaResults); appendDistance(subzones); sortSliceFormat(subzoneResults); return { areas: areaResults, subzones: subzoneResults, }; }; exports.getNearest = getNearest; //# sourceMappingURL=index.js.map