Files
countries/index.js
2018-10-11 13:52:04 -04:00

70 lines
1.4 KiB
JavaScript

import {ApolloServer, gql} from 'apollo-server';
import {continents, countries, languages} from 'countries-list';
function toArray(object) {
return Object.keys(object).map(code => ({
...object[code],
code
}));
}
const data = {
continents: Object.entries(continents).map(([code, name]) => ({code, name})),
countries: toArray(countries),
languages: toArray(languages)
};
const typeDefs = gql`
type Continent {
code: String
name: String
}
type Country {
code: String
name: String
native: String
phone: String
continent: Continent
currency: String
languages: [Language]
emoji: String
emojiU: String
}
type Language {
code: String
name: String
native: String
rtl: Int
}
type Query {
continents: [Continent]
countries: [Country]
languages: [Language]
}
`;
const resolvers = {
Country: {
continent: country =>
data.continents.find(continent => continent.code === country.continent),
languages: country =>
data.languages.filter(language =>
country.languages.includes(language.code)
)
},
Query: {
continents: () => data.continents,
countries: () => data.countries,
languages: () => data.languages
}
};
const server = new ApolloServer({typeDefs, resolvers});
server.listen({port: process.env.PORT}).then(({url}) => {
console.log(`🚀 Server ready at ${url}`);
});