UNPKG

countryjs

Version:

A utility library for returning country data, ISO info and states/provinces within them.

91 lines (89 loc) 2.86 kB
// Copyright (c) 2015, Trent Oswald <trentoswald@therebelrobot.com // // Permission to use, copy, modify, and/or distribute this software for any purpose // with or without fee is hereby granted, provided that the above copyright notice // and this permission notice appear in all copies. // // THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH // REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND // FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, // OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, // DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS // ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. var _ = require('lodash') var _countryList = require('../data')() var normalizeName = function (name) { return _.deburr(name) .toLowerCase() .replace(/-/g, ' ') .replace(/(\.|\b(the|and|of|de|des|du|di|del|y|da|und|die) \b)/g, '') .trim() } var findIndex = _.transform(_countryList, function (index, country, key) { var addToIndex = function (name) { if (name) { index[normalizeName(name)] = key } } addToIndex(country.name) _.forEach(country.altSpellings, addToIndex) _.forEach(country.translations, addToIndex) }) var Country = function () { var _returnCountry = function (country, type) { if (type === 'name') { var key = findIndex[normalizeName(country)] return _countryList[key] } else if (type === 'ISO3') { return _.find(_countryList, function (thiscountry) { return thiscountry.ISO.alpha3 === country }) } else { return _.find(_countryList, function (thiscountry) { return thiscountry.ISO.alpha2 === country }) } } this.all = function () { return _countryList } var methods = { info: null, name: 'name', states: 'provinces', provinces: 'provinces', altSpellings: 'altSpellings', area: 'area', borders: 'borders', callingCodes: 'callingCodes', capital: 'capital', currencies: 'currencies', demonym: 'demonym', flag: 'flag', geoJSON: 'geoJSON', ISOcodes: 'ISO', languages: 'languages', latlng: 'latlng', nativeName: 'nativeName', population: 'population', region: 'region', subregion: 'subregion', timezones: 'timezones', tld: 'tld', translations: 'translations', wiki: 'wiki' } _.forEach(methods, function (property, method) { this[method] = function (country, type) { var _returnData = _returnCountry(country, type) if (_returnData) { if (property) { return _returnData[property] } return _returnData } } }.bind(this)) return this } module.exports = new Country()