Update deps and rewrite resolvers to not compute everything and put it in context

This commit is contained in:
Trevor Blades
2019-07-22 01:16:09 -07:00
parent 77360d3649
commit 7e68c39351
4 changed files with 459 additions and 484 deletions

View File

@@ -1,14 +1,6 @@
import resolvers from './resolvers'; import resolvers from './resolvers';
import typeDefs from './schema'; import typeDefs from './schema';
import {ApolloServer} from 'apollo-server'; import {ApolloServer} from 'apollo-server';
import {continents, countries, languages} from 'countries-list';
function toArray(object) {
return Object.keys(object).map(code => ({
...object[code],
code
}));
}
const server = new ApolloServer({ const server = new ApolloServer({
typeDefs, typeDefs,
@@ -17,14 +9,6 @@ const server = new ApolloServer({
playground: true, playground: true,
engine: { engine: {
apiKey: process.env.ENGINE_API_KEY apiKey: process.env.ENGINE_API_KEY
},
context: {
continents: Object.entries(continents).map(([code, name]) => ({
code,
name
})),
countries: toArray(countries),
languages: toArray(languages)
} }
}); });

845
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -8,10 +8,10 @@
"start": "nodemon -r dotenv/config -r esm index.js" "start": "nodemon -r dotenv/config -r esm index.js"
}, },
"dependencies": { "dependencies": {
"apollo-server": "^2.1.0", "apollo-server": "^2.7.0",
"countries-list": "^2.3.2", "countries-list": "^2.4.3",
"esm": "^3.0.84", "esm": "^3.2.25",
"graphql": "^14.0.2" "graphql": "^14.4.2"
}, },
"devDependencies": { "devDependencies": {
"@trevorblades/eslint-config": "^6.18.0", "@trevorblades/eslint-config": "^6.18.0",

View File

@@ -1,25 +1,67 @@
function byCode(code) { import {continents, countries, languages} from 'countries-list';
return item => item.code === code;
}
export default { export default {
Country: { Country: {
continent: (country, args, {continents}) => continent({continent}) {
continents.find(continent => continent.code === country.continent), return {
languages: (country, args, {languages}) => code: continent,
languages.filter(language => country.languages.includes(language.code)) name: continents[continent]
};
},
languages(parent) {
return parent.languages.map(code => {
const language = languages[code];
return {
...language,
code
};
});
}
}, },
Continent: { Continent: {
countries: (continent, args, {countries}) => countries(parent) {
countries.filter(country => country.continent === continent.code) return Object.entries(countries)
.filter(entry => entry[1].continent === parent.code)
.map(([code, country]) => ({
...country,
code
}));
}
}, },
Query: { Query: {
continent: (parent, args, {continents}) => continent(parent, {code}) {
continents.find(byCode(args.code)), return {
continents: (parent, args, {continents}) => continents, code,
country: (parent, args, {countries}) => countries.find(byCode(args.code)), name: continents[code]
countries: (parent, args, {countries}) => countries, };
language: (parent, args, {languages}) => languages.find(byCode(args.code)), },
languages: (parent, args, {languages}) => languages continents() {
return Object.entries(continents).map(([code, name]) => ({
code,
name
}));
},
country(parent, {code}) {
return countries[code];
},
countries() {
return Object.entries(countries).map(([code, country]) => ({
...country,
code
}));
},
language(parent, {code}) {
const language = languages[code];
return {
...language,
code
};
},
languages() {
return Object.entries(languages).map(([code, language]) => ({
...language,
code
}));
}
} }
}; };