From d1799806d28a98e51fefa1b91ff6c14fcae8a318 Mon Sep 17 00:00:00 2001 From: Trevor Blades Date: Thu, 26 Mar 2020 15:01:13 -0700 Subject: [PATCH 01/15] Use enums for country/continent/language codes --- index.js | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/index.js b/index.js index 515755b..b6ca58c 100644 --- a/index.js +++ b/index.js @@ -3,14 +3,26 @@ 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: String + code: ContinentCode name: String countries: [Country] } type Country { - code: String + code: CountryCode name: String native: String phone: String @@ -29,7 +41,7 @@ const typeDefs = gql` } type Language { - code: String + code: LanguageCode name: String native: String rtl: Int @@ -37,11 +49,11 @@ const typeDefs = gql` type Query { continents: [Continent] - continent(code: String!): Continent + continent(code: ContinentCode!): Continent countries: [Country] - country(code: String!): Country + country(code: CountryCode!): Country languages: [Language] - language(code: String!): Language + language(code: LanguageCode!): Language } `; From 21204d43e515a8decb22bf0794952627b450bc35 Mon Sep 17 00:00:00 2001 From: Trevor Blades Date: Thu, 26 Mar 2020 15:01:31 -0700 Subject: [PATCH 02/15] Cast language RTL value as boolean --- index.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/index.js b/index.js index b6ca58c..1f507c5 100644 --- a/index.js +++ b/index.js @@ -44,7 +44,7 @@ const typeDefs = gql` code: LanguageCode name: String native: String - rtl: Int + rtl: Boolean } type Query { @@ -96,6 +96,11 @@ const resolvers = { })); } }, + Language: { + rtl(language) { + return Boolean(language.rtl); + } + }, Query: { continent(parent, {code}) { return { From 5334de6e79bd7873af9777f77e75a653c45ab06b Mon Sep 17 00:00:00 2001 From: Trevor Blades Date: Thu, 26 Mar 2020 15:12:31 -0700 Subject: [PATCH 03/15] Remove apollo integration --- .gitignore | 1 - apollo.config.js | 5 ----- package.json | 4 ++-- 3 files changed, 2 insertions(+), 8 deletions(-) delete mode 100644 apollo.config.js diff --git a/.gitignore b/.gitignore index 37d7e73..3c3629e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1 @@ node_modules -.env diff --git a/apollo.config.js b/apollo.config.js deleted file mode 100644 index c2e2a4d..0000000 --- a/apollo.config.js +++ /dev/null @@ -1,5 +0,0 @@ -module.exports = { - endpoint: { - url: `http://localhost:${process.env.PORT}` - } -}; diff --git a/package.json b/package.json index df2dcd8..8e1ede2 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "scripts": { - "start": "nodemon -r dotenv/config index.js", - "pretest": "eslint index.js apollo.config.js", + "start": "nodemon index.js", + "pretest": "eslint index.js", "test": "echo \"Error: no test specified\" && exit" }, "eslintConfig": { From c38a4696582ffe7a22eace4131e52009e9376e56 Mon Sep 17 00:00:00 2001 From: Trevor Blades Date: Thu, 26 Mar 2020 22:27:15 -0700 Subject: [PATCH 04/15] Indicate all non-null fields --- index.js | 48 ++++++++++++++++++++++++------------------------ 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/index.js b/index.js index 1f507c5..723969d 100644 --- a/index.js +++ b/index.js @@ -16,44 +16,44 @@ const typeDefs = gql` } type Continent { - code: ContinentCode - name: String - countries: [Country] + code: ContinentCode! + name: String! + countries: [Country!]! } type Country { - code: CountryCode - name: String - native: String - phone: String - continent: Continent - currency: String - languages: [Language] - emoji: String - emojiU: String - states: [State] + code: CountryCode! + name: String! + native: String! + phone: String! + continent: Continent! + currency: String! + languages: [Language!]! + emoji: String! + emojiU: String! + states: [State!]! } type State { code: String - name: String - country: Country + name: String! + country: Country! } type Language { - code: LanguageCode + code: LanguageCode! name: String native: String - rtl: Boolean + rtl: Boolean! } type Query { - continents: [Continent] - continent(code: ContinentCode!): Continent - countries: [Country] - country(code: CountryCode!): Country - languages: [Language] - language(code: LanguageCode!): Language + continents: [Continent!]! + continent(code: ContinentCode!): Continent! + countries: [Country!]! + country(code: CountryCode!): Country! + languages: [Language!]! + language(code: LanguageCode!): Language! } `; @@ -153,6 +153,6 @@ const server = new ApolloServer({ } }); -server.listen({port: process.env.PORT}).then(({url}) => { +server.listen({port: process.env.PORT || 4000}).then(({url}) => { console.log(`🚀 Server ready at ${url}`); }); From 0dbcfb53855336dd77d6c1ddfae88bb8de757e8e Mon Sep 17 00:00:00 2001 From: Trevor Blades Date: Thu, 26 Mar 2020 23:04:50 -0700 Subject: [PATCH 05/15] Update readme --- README.md | 16 ++++++++++++---- logo.png | Bin 0 -> 9472 bytes 2 files changed, 12 insertions(+), 4 deletions(-) create mode 100644 logo.png diff --git a/README.md b/README.md index 0608aaf..85595a5 100644 --- a/README.md +++ b/README.md @@ -1,21 +1,27 @@ -globe +

+ globe +

-# Countries GraphQL API +

Countries GraphQL API

+ +
[![Build Status](https://github.com/trevorblades/countries/workflows/Node%20CI/badge.svg)](https://github.com/trevorblades/countries/actions) [![Contributor Covenant](https://img.shields.io/badge/Contributor%20Covenant-v2.0%20adopted-ff69b4.svg)](CODE_OF_CONDUCT.md) +
+ A public GraphQL API for information about countries, continents, and languages. This project uses [Countries List](https://annexare.github.io/Countries/) and [`provinces`](https://github.com/substack/provinces) as data sources, so the schema follows the shape of that data, with a few exceptions: 1. The codes used to key the objects in the original data are available as a `code` property on each item returned from the API. -2. The `continent` and `languages` properties are now objects and arrays of objects, respectively. +2. The `country.continent` and `country.languages` are now objects and arrays of objects, respectively. 3. Each `Country` has an array of `states` populated by their states/provinces, if any. ## Writing queries ```graphql { - country(code: "BR") { + country(code: BR) { name native emoji @@ -49,6 +55,8 @@ The above GraphQL query will produce the following JSON response: } ``` +## Docs + Check out [the playground](https://countries.trevorblades.com) to explore the schema and test out some queries. ## Examples diff --git a/logo.png b/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..ae2b801299c692e6d8070443a8b86610a7883d4d GIT binary patch literal 9472 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 Date: Thu, 26 Mar 2020 23:10:22 -0700 Subject: [PATCH 06/15] Add twitter button --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 85595a5..d35e78e 100644 --- a/README.md +++ b/README.md @@ -8,6 +8,7 @@ [![Build Status](https://github.com/trevorblades/countries/workflows/Node%20CI/badge.svg)](https://github.com/trevorblades/countries/actions) [![Contributor Covenant](https://img.shields.io/badge/Contributor%20Covenant-v2.0%20adopted-ff69b4.svg)](CODE_OF_CONDUCT.md) +[![Twitter Follow](https://img.shields.io/twitter/follow/trevorblades?style=social)](https://twitter.com/trevorblades) From 0d927b1b58979f3d778107259be58b299d486676 Mon Sep 17 00:00:00 2001 From: Trevor Blades Date: Thu, 26 Mar 2020 23:16:32 -0700 Subject: [PATCH 07/15] Make the logo smaller --- logo.png | Bin 9472 -> 6687 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/logo.png b/logo.png index ae2b801299c692e6d8070443a8b86610a7883d4d..0899cb1359fe0f74f0ffb4d54c771f394434edc5 100644 GIT binary patch delta 6684 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 Date: Thu, 26 Mar 2020 23:18:10 -0700 Subject: [PATCH 08/15] Logo@2x --- README.md | 2 +- logo.png | Bin 6687 -> 16140 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index d35e78e..8e4238f 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@

- globe + globe

Countries GraphQL API

diff --git a/logo.png b/logo.png index 0899cb1359fe0f74f0ffb4d54c771f394434edc5..a5b6c630a517815ab092e4f2c162417c07d253dd 100644 GIT binary patch literal 16140 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 A`Tzg` delta 6685 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 From b34b5e68d18667eb008a6a0807bcd0bc1fb2a60d Mon Sep 17 00:00:00 2001 From: Trevor Blades Date: Thu, 26 Mar 2020 23:39:50 -0700 Subject: [PATCH 09/15] Add table of contents and migration notesgi --- README.md | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/README.md b/README.md index 8e4238f..0982e99 100644 --- a/README.md +++ b/README.md @@ -18,6 +18,12 @@ A public GraphQL API for information about countries, continents, and languages. 2. The `country.continent` and `country.languages` are now objects and arrays of objects, respectively. 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) + ## Writing queries ```graphql @@ -56,6 +62,20 @@ 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. From 2a488a175c4790766651f95758f77622cfe90aef Mon Sep 17 00:00:00 2001 From: Trevor Blades Date: Thu, 26 Mar 2020 23:43:45 -0700 Subject: [PATCH 10/15] Reorder readme sections --- README.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 0982e99..fa27ab6 100644 --- a/README.md +++ b/README.md @@ -18,12 +18,16 @@ A public GraphQL API for information about countries, continents, and languages. 2. The `country.continent` and `country.languages` are now objects and arrays of objects, respectively. 3. Each `Country` has an array of `states` populated by their states/provinces, if any. +- [Docs](#docs) - [Writing queries](#writing-queries) - [Migration notes (pre-March 2020)](#migration-notes-pre-march-2020) -- [Docs](#docs) - [Examples](#examples) - [License](#license) +## Docs + +Check out [the playground](https://countries.trevorblades.com) to explore the schema and test out some queries. + ## Writing queries ```graphql @@ -76,10 +80,6 @@ In the first version of this API, `code` arguments were treated as `String`s. No } ``` -## Docs - -Check out [the playground](https://countries.trevorblades.com) to explore the schema and test out some queries. - ## Examples - [React](./examples/react) From 5d37a26c0896260b24ba3b6eca0630193b10c1e4 Mon Sep 17 00:00:00 2001 From: Trevor Blades Date: Fri, 27 Mar 2020 00:29:34 -0700 Subject: [PATCH 11/15] Reorder again --- README.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index fa27ab6..0982e99 100644 --- a/README.md +++ b/README.md @@ -18,16 +18,12 @@ A public GraphQL API for information about countries, continents, and languages. 2. The `country.continent` and `country.languages` are now objects and arrays of objects, respectively. 3. Each `Country` has an array of `states` populated by their states/provinces, if any. -- [Docs](#docs) - [Writing queries](#writing-queries) - [Migration notes (pre-March 2020)](#migration-notes-pre-march-2020) +- [Docs](#docs) - [Examples](#examples) - [License](#license) -## Docs - -Check out [the playground](https://countries.trevorblades.com) to explore the schema and test out some queries. - ## Writing queries ```graphql @@ -80,6 +76,10 @@ In the first version of this API, `code` arguments were treated as `String`s. No } ``` +## Docs + +Check out [the playground](https://countries.trevorblades.com) to explore the schema and test out some queries. + ## Examples - [React](./examples/react) From ce144cb5ee1146c1ec0ffae0b9535bb2812bcecd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Kav=C3=ADk?= Date: Fri, 27 Mar 2020 08:40:10 +0100 Subject: [PATCH 12/15] feat: Country.capital --- README.md | 2 ++ index.js | 1 + 2 files changed, 3 insertions(+) diff --git a/README.md b/README.md index 0982e99..8b56b6c 100644 --- a/README.md +++ b/README.md @@ -31,6 +31,7 @@ A public GraphQL API for information about countries, continents, and languages. country(code: BR) { name native + capital emoji currency languages { @@ -49,6 +50,7 @@ The above GraphQL query will produce the following JSON response: "country": { "name": "Brazil", "native": "Brasil", + "capital": "Brasília", "emoji": "🇧🇷", "currency": "BRL", "languages": [ diff --git a/index.js b/index.js index 723969d..148fa6a 100644 --- a/index.js +++ b/index.js @@ -27,6 +27,7 @@ const typeDefs = gql` native: String! phone: String! continent: Continent! + capital: String! currency: String! languages: [Language!]! emoji: String! From aa5ac9c092652ecf9c196934067591c8c46b1b1c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Kav=C3=ADk?= Date: Fri, 27 Mar 2020 08:41:41 +0100 Subject: [PATCH 13/15] docs(readme): Seed example --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 8b56b6c..d269b1d 100644 --- a/README.md +++ b/README.md @@ -89,6 +89,7 @@ Check out [the playground](https://countries.trevorblades.com) to explore the sc - [ReasonML](https://medium.com/@idkjs/reasonml-and-graphql-without-graphql-part-1-192c2e9e349c) - [Country quiz app](https://github.com/byrichardpowell/Country-Quiz) (React, TypeScript) - [Python](./examples/python) +- [Seed](https://github.com/seed-rs/seed/tree/master/examples/graphql) ## License From 9e83568a16e937e26caf2ab6dc1c859f4e22ab88 Mon Sep 17 00:00:00 2001 From: Trevor Blades Date: Fri, 27 Mar 2020 09:10:43 -0700 Subject: [PATCH 14/15] Change code to ID --- README.md | 17 +---------------- index.js | 55 +++++++++++++++++++++++++------------------------------ 2 files changed, 26 insertions(+), 46 deletions(-) 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]) => ({ From 2818787e612088c0856928e50779dac8dbd3ae9c Mon Sep 17 00:00:00 2001 From: Trevor Blades Date: Fri, 27 Mar 2020 09:21:58 -0700 Subject: [PATCH 15/15] Remove TOC --- README.md | 5 ----- 1 file changed, 5 deletions(-) diff --git a/README.md b/README.md index 3845d30..e9d1792 100644 --- a/README.md +++ b/README.md @@ -18,11 +18,6 @@ A public GraphQL API for information about countries, continents, and languages. 2. The `country.continent` and `country.languages` are now objects and arrays of objects, respectively. 3. Each `Country` has an array of `states` populated by their states/provinces, if any. -- [Writing queries](#writing-queries) -- [Docs](#docs) -- [Examples](#examples) -- [License](#license) - ## Writing queries ```graphql