epic-geo
Version:
A simple geo information provider library.
68 lines (67 loc) • 3.37 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.EpicGeo = void 0;
const countries_1 = require("./countries");
class EpicGeo {
constructor() {
this.CustomData = {};
this.custom = (countryName, data) => {
this.CustomData[countryName] = data;
return this;
};
this.countries = () => (Object.assign(Object.assign({}, countries_1.CountriesData), this.CustomData));
this.country = (countryName) => this.countries()[countryName];
this.countryList = () => Object.keys(this.countries());
this.hasCountry = (name) => this.countryList()
.map((country) => country.toLowerCase())
.includes(name.toLowerCase());
this.states = (countryName) => {
var _a;
return countryName
? (_a = this.countries()[countryName]) === null || _a === void 0 ? void 0 : _a.states
: Object.values(this.countries())
.map((country) => country.states)
.reduce((p, c) => (Object.assign(Object.assign({}, p), c)), {});
};
this.state = (countryName, stateName) => { var _a; return (_a = this.states(countryName)) === null || _a === void 0 ? void 0 : _a[stateName]; };
this.stateList = () => Object.values(this.countries()).reduce((p, c) => [...p, ...Object.keys(c.states)], []);
this.hasState = (name, countryName) => {
var _a;
return (countryName
? Object.keys(((_a = this.country(countryName)) === null || _a === void 0 ? void 0 : _a.states) || {})
: this.stateList())
.map((state) => state.toLowerCase())
.includes(name.toLowerCase());
};
this.cities = (countryName, stateName) => {
var _a;
return countryName
? stateName
? ((_a = this.state(countryName, stateName)) === null || _a === void 0 ? void 0 : _a.cities) || []
: Object.values(this.states(countryName))
.map((state) => state.cities)
.reduce((p, c) => p.concat(c), [])
: Object.values(this.states(countryName))
.map((state) => state.cities)
.reduce((p, c) => p.concat(c), []);
};
this.cityList = () => Object.values(this.countries())
.map((country) => Object.values(country.states)
.map((state) => (state === null || state === void 0 ? void 0 : state.cities) || [])
.reduce((c, p) => c.concat(p), []))
.reduce((c, p) => c.concat(p), []);
this.hasCity = (name, countryName, stateName) => {
var _a;
return (countryName
? stateName
? ((_a = this.state(countryName, stateName)) === null || _a === void 0 ? void 0 : _a.cities) || []
: Object.values(this.states(countryName) || {})
.map((state) => state.cities)
.reduce((p, c) => p.concat(c), [])
: this.cityList())
.map((city) => city.toLowerCase())
.includes(name.toLowerCase());
};
}
}
exports.EpicGeo = EpicGeo;