diff --git a/README.md b/README.md index d269b1d..3845d30 100644 --- a/README.md +++ b/README.md @@ -19,7 +19,6 @@ A public GraphQL API for information about countries, continents, and languages. 3. Each `Country` has an array of `states` populated by their states/provinces, if any. - [Writing queries](#writing-queries) - - [Migration notes (pre-March 2020)](#migration-notes-pre-march-2020) - [Docs](#docs) - [Examples](#examples) - [License](#license) @@ -28,7 +27,7 @@ A public GraphQL API for information about countries, continents, and languages. ```graphql { - country(code: BR) { + country(code: "BR") { name native capital @@ -64,20 +63,6 @@ The above GraphQL query will produce the following JSON response: } ``` -### Migration notes (pre-March 2020) - -In the first version of this API, `code` arguments were treated as `String`s. Now, they are enums of valid options only. To migrate, simply remove the double quotes from your existing code arguments: - -```diff -{ -- country(code: "CA") { -+ country(code: CA) { - name - emoji - } -} -``` - ## Docs Check out [the playground](https://countries.trevorblades.com) to explore the schema and test out some queries. diff --git a/index.js b/index.js index 148fa6a..5804872 100644 --- a/index.js +++ b/index.js @@ -3,26 +3,14 @@ const {ApolloServer, gql} = require('apollo-server'); const {continents, countries, languages} = require('countries-list'); const typeDefs = gql` - enum ContinentCode { - ${Object.keys(continents)} - } - - enum CountryCode { - ${Object.keys(countries)} - } - - enum LanguageCode { - ${Object.keys(languages)} - } - type Continent { - code: ContinentCode! + code: ID! name: String! countries: [Country!]! } type Country { - code: CountryCode! + code: ID! name: String! native: String! phone: String! @@ -42,7 +30,7 @@ const typeDefs = gql` } type Language { - code: LanguageCode! + code: ID! name: String native: String rtl: Boolean! @@ -50,11 +38,11 @@ const typeDefs = gql` type Query { continents: [Continent!]! - continent(code: ContinentCode!): Continent! + continent(code: ID!): Continent countries: [Country!]! - country(code: CountryCode!): Country! + country(code: ID!): Country languages: [Language!]! - language(code: LanguageCode!): Language! + language(code: ID!): Language } `; @@ -104,10 +92,13 @@ const resolvers = { }, Query: { continent(parent, {code}) { - return { - code, - name: continents[code] - }; + const name = continents[code]; + return ( + name && { + code, + name + } + ); }, continents() { return Object.entries(continents).map(([code, name]) => ({ @@ -117,10 +108,12 @@ const resolvers = { }, country(parent, {code}) { const country = countries[code]; - return { - ...country, - code - }; + return ( + country && { + ...country, + code + } + ); }, countries() { return Object.entries(countries).map(([code, country]) => ({ @@ -130,10 +123,12 @@ const resolvers = { }, language(parent, {code}) { const language = languages[code]; - return { - ...language, - code - }; + return ( + language && { + ...language, + code + } + ); }, languages() { return Object.entries(languages).map(([code, language]) => ({