Skip to content
This repository was archived by the owner on Oct 2, 2019. It is now read-only.

Commit 49b8f71

Browse files
committed
closes #229 : Generate schema typings
1 parent 3ffdc2b commit 49b8f71

File tree

8 files changed

+171
-29
lines changed

8 files changed

+171
-29
lines changed

README.md

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,8 @@ Batteries included :raised_hands:
2222
- [GraphQL Models and Connectors architecture](https://dev-blog.apollodata.com/how-to-build-graphql-servers-87587591ded5) implementation
2323
- CORS middleware
2424
- [12 Factor Configuration](https://12factor.net/config) with `.env`
25-
- Configurable logging
26-
- powered by `winston`
25+
- Configurable logging
26+
- powered by `winston`
2727
- Supercharged Development Mode
2828
- Incremental TypeScript builds
2929
- Automatic server restart on changes
@@ -56,6 +56,11 @@ or
5656
- Docker: `$ docker-compose up --build`
5757

5858
Attention windows users: when `Docker for Windows` is not an option, install `yarn` and run `$ yarn && yarn docker-mount` beforehand.
59+
## Regenerate GraphQL schema TypeScript types
60+
61+
- npm: `$ npm run g2t`
62+
- yarn: `$ yarn g2t`
63+
5964
## Test
6065

6166
> single test run
@@ -109,12 +114,13 @@ In Docker:
109114
- [apollo-server](https://github.com/apollographql/apollo-server)
110115
- [graphql-voyager](https://apis.guru/graphql-voyager)
111116
- [graphql-playground](https://github.com/graphcool/graphql-playground)
117+
- [graphql-to-typescript](https://github.com/3VLINC/graphql-to-typescript)
112118

113119
- Jest
114120
- [Documentation](https://facebook.github.io/jest/docs/en/getting-started.html)
115121

116122
- winston
117123
- [GitHub](https://github.com/winstonjs/winston)
118-
124+
119125
- Docker
120126
- [Home Page](https://www.docker.com)

package.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,8 @@
1717
"clean:graphql": "rimraf build/**/*.{gql,graphql,graphqls}",
1818
"copy:graphql": "cpx \"src/**/*.{gql,graphql,graphqls}\" build",
1919
"copy:graphql:watch": "chokidar \"./src/**/*.{gql,graphql,graphqls}\" -c \"npm run clean:graphql && npm run copy:graphql && touch src/server.ts\"",
20-
"docker-mount": "docker-share mount -t"
20+
"docker-mount": "docker-share mount -t",
21+
"g2t": "graphql-to-typescript src/graphql/*.graphqls src/graphql/types/index.ts "
2122
},
2223
"engines": {
2324
"node": ">= 8.1.4"
@@ -54,6 +55,7 @@
5455
"chokidar-cli": "1.2.0",
5556
"cpx": "1.5.0",
5657
"docker-share": "0.0.4",
58+
"graphql-to-typescript": "0.1.2",
5759
"jest": "22.3.0",
5860
"jest-junit": "3.6.0",
5961
"nock": "9.1.6",

src/connectors/joke.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
import { createClient } from 'flashheart';
22
import logger from '../logger';
3-
import { Joke, JokeCategoryValues } from '../graphql/types/jokes';
3+
import { JokeCategoryEnum } from '../graphql/types';
44

55
const http = createClient({ logger });
66

7-
const getRandomJokeByCategory = async (category: JokeCategoryValues): Promise<any> => {
7+
const getRandomJokeByCategory = async (category: JokeCategoryEnum): Promise<any> => {
88
const uri = `${process.env.JOKE_SERVICE_URL}/jokes/random${category ? `?limitTo=[${category.toLowerCase()}]` : ''}`;
99

1010
const { value } = await http.getAsync(uri);

src/graphql/models/jokes.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import * as jokes from '../../connectors/joke';
2-
import { Joke, JokeCategoryValues } from '../../graphql/types/jokes';
2+
import { JokeCategoryEnum, Joke } from '../types';
33

4-
const byCategory = async (category: JokeCategoryValues): Promise<Joke> => {
4+
const byCategory = async (category: JokeCategoryEnum): Promise<Joke> => {
55
const randomJokeResponse = await jokes.getRandomJokeByCategory(category);
66
return {
77
...randomJokeResponse,

src/graphql/resolvers/jokes.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
import { byCategory } from '../models/jokes';
2-
import { Joke, JokeCategory } from '../types/jokes';
2+
import { ByCategoryJokesArgs, Joke } from '../types';
33

44
const resolvers = {
55
Query: {
66
jokes: () => ({}),
77
},
88
Jokes: {
9-
byCategory: (_, { category }: JokeCategory): Promise<Joke> => byCategory(category),
9+
byCategory: (_, { category }: ByCategoryJokesArgs): Promise<Joke> => byCategory(category!),
1010
},
1111
};
1212

src/graphql/types/index.ts

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
/* tslint:disable */
2+
3+
export interface Query {
4+
jokes: Jokes | null;
5+
}
6+
7+
export interface Jokes {
8+
byCategory: Joke | null;
9+
}
10+
11+
export interface ByCategoryJokesArgs {
12+
category: JokeCategoryEnum | null;
13+
}
14+
15+
export type JokeCategoryEnum = "NERDY" | "EXPLICIT";
16+
17+
export interface Joke {
18+
id: string;
19+
text: string;
20+
categories: Array<JokeCategoryEnum> | null;
21+
}

src/graphql/types/jokes.ts

Lines changed: 0 additions & 16 deletions
This file was deleted.

yarn.lock

Lines changed: 132 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,10 @@
103103
version "0.12.4"
104104
resolved "https://registry.yarnpkg.com/@types/graphql/-/graphql-0.12.4.tgz#d43bb55d45c6de0178bbd11dd59d04fd42138d94"
105105

106+
"@types/graphql@^0.8.5":
107+
version "0.8.6"
108+
resolved "https://registry.yarnpkg.com/@types/graphql/-/graphql-0.8.6.tgz#b34fb880493ba835b0c067024ee70130d6f9bb68"
109+
106110
"@types/http-assert@*":
107111
version "1.2.2"
108112
resolved "https://registry.yarnpkg.com/@types/http-assert/-/http-assert-1.2.2.tgz#17dfe5a82184a8898935d96fe2eaedd37d22d9a4"
@@ -671,6 +675,13 @@ callsites@^2.0.0:
671675
version "2.0.0"
672676
resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50"
673677

678+
camel-case@^3.0.0:
679+
version "3.0.0"
680+
resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-3.0.0.tgz#ca3c3688a4e9cf3a4cda777dc4dcbc713249cf73"
681+
dependencies:
682+
no-case "^2.2.0"
683+
upper-case "^1.1.1"
684+
674685
camelcase@^1.0.2:
675686
version "1.2.1"
676687
resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39"
@@ -862,10 +873,20 @@ combined-stream@1.0.6, combined-stream@^1.0.5, combined-stream@~1.0.5:
862873
dependencies:
863874
delayed-stream "~1.0.0"
864875

876+
commander@^2.10.0:
877+
version "2.15.1"
878+
resolved "https://registry.yarnpkg.com/commander/-/commander-2.15.1.tgz#df46e867d0fc2aec66a34662b406a9ccafff5b0f"
879+
865880
commander@^2.9.0:
866881
version "2.14.1"
867882
resolved "https://registry.yarnpkg.com/commander/-/commander-2.14.1.tgz#2235123e37af8ca3c65df45b026dbd357b01b9aa"
868883

884+
common-tags@^1.4.0:
885+
version "1.7.2"
886+
resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.7.2.tgz#24d9768c63d253a56ecff93845b44b4df1d52771"
887+
dependencies:
888+
babel-runtime "^6.26.0"
889+
869890
commonmark@^0.28.1:
870891
version "0.28.1"
871892
resolved "https://registry.yarnpkg.com/commonmark/-/commonmark-0.28.1.tgz#06eab8d52338b839fa1a2d75af0085eed1b1beae"
@@ -1181,6 +1202,10 @@ es-to-primitive@^1.1.1:
11811202
is-date-object "^1.0.1"
11821203
is-symbol "^1.0.1"
11831204

1205+
es6-promise@^3.2.1:
1206+
version "3.3.1"
1207+
resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-3.3.1.tgz#a08cdde84ccdbf34d027a1451bc91d4bcd28a613"
1208+
11841209
escape-html@~1.0.1:
11851210
version "1.0.3"
11861211
resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988"
@@ -1566,6 +1591,19 @@ graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6:
15661591
version "4.1.11"
15671592
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658"
15681593

1594+
graphql-code-generator@^0.5.1:
1595+
version "0.5.5"
1596+
resolved "https://registry.yarnpkg.com/graphql-code-generator/-/graphql-code-generator-0.5.5.tgz#ad2a3ab2ffae56faf0290f0317dd515213f598e5"
1597+
dependencies:
1598+
camel-case "^3.0.0"
1599+
commander "^2.10.0"
1600+
common-tags "^1.4.0"
1601+
glob "^7.1.2"
1602+
handlebars "^4.0.10"
1603+
mkdirp "^0.5.1"
1604+
pascal-case "^2.0.1"
1605+
request "^2.81.0"
1606+
15691607
graphql-config@1.1.7:
15701608
version "1.1.7"
15711609
resolved "https://registry.yarnpkg.com/graphql-config/-/graphql-config-1.1.7.tgz#546c443d3ad877ceb8e13f40fbc8937af0d35dbe"
@@ -1609,6 +1647,23 @@ graphql-request@^1.3.6, graphql-request@^1.4.0:
16091647
dependencies:
16101648
cross-fetch "1.1.1"
16111649

1650+
graphql-subscriptions@^0.3.1:
1651+
version "0.3.1"
1652+
resolved "https://registry.yarnpkg.com/graphql-subscriptions/-/graphql-subscriptions-0.3.1.tgz#0cedc2d507420cf26cf414080b079f05402f0303"
1653+
dependencies:
1654+
es6-promise "^3.2.1"
1655+
1656+
graphql-to-typescript@0.1.2:
1657+
version "0.1.2"
1658+
resolved "https://registry.yarnpkg.com/graphql-to-typescript/-/graphql-to-typescript-0.1.2.tgz#a5a3ba625216c7408f13e5c62724f9973f42909b"
1659+
dependencies:
1660+
chalk "^1.1.3"
1661+
commander "^2.9.0"
1662+
graphql "^0.9.1"
1663+
graphql-code-generator "^0.5.1"
1664+
graphql-subscriptions "^0.3.1"
1665+
graphql-tools "^0.10.1"
1666+
16121667
graphql-tools@2.21.0:
16131668
version "2.21.0"
16141669
resolved "https://registry.yarnpkg.com/graphql-tools/-/graphql-tools-2.21.0.tgz#c0d0fbda6f40a87c8d267a2989ade2ae8b9a288e"
@@ -1619,6 +1674,16 @@ graphql-tools@2.21.0:
16191674
iterall "^1.1.3"
16201675
uuid "^3.1.0"
16211676

1677+
graphql-tools@^0.10.1:
1678+
version "0.10.1"
1679+
resolved "https://registry.yarnpkg.com/graphql-tools/-/graphql-tools-0.10.1.tgz#274aa338d50b1c0b3ed6936eafd8ed3a19ed1828"
1680+
dependencies:
1681+
deprecated-decorator "^0.1.6"
1682+
lodash "^4.3.0"
1683+
uuid "^3.0.1"
1684+
optionalDependencies:
1685+
"@types/graphql" "^0.8.5"
1686+
16221687
graphql-voyager@1.0.0-rc.11:
16231688
version "1.0.0-rc.11"
16241689
resolved "https://registry.yarnpkg.com/graphql-voyager/-/graphql-voyager-1.0.0-rc.11.tgz#5cc348e507062d4ef8540cead25dc2cec04ef933"
@@ -1650,11 +1715,17 @@ graphql@^0.12.3:
16501715
dependencies:
16511716
iterall "1.1.3"
16521717

1718+
graphql@^0.9.1:
1719+
version "0.9.6"
1720+
resolved "https://registry.yarnpkg.com/graphql/-/graphql-0.9.6.tgz#514421e9d225c29dfc8fd305459abae58815ef2c"
1721+
dependencies:
1722+
iterall "^1.0.0"
1723+
16531724
growly@^1.3.0:
16541725
version "1.3.0"
16551726
resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081"
16561727

1657-
handlebars@^4.0.3:
1728+
handlebars@^4.0.10, handlebars@^4.0.3:
16581729
version "4.0.11"
16591730
resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.11.tgz#630a35dfe0294bc281edae6ffc5d329fc7982dcc"
16601731
dependencies:
@@ -2109,6 +2180,10 @@ iterall@1.1.3:
21092180
version "1.1.3"
21102181
resolved "https://registry.yarnpkg.com/iterall/-/iterall-1.1.3.tgz#1cbbff96204056dde6656e2ed2e2226d0e6d72c9"
21112182

2183+
iterall@^1.0.0:
2184+
version "1.2.2"
2185+
resolved "https://registry.yarnpkg.com/iterall/-/iterall-1.2.2.tgz#92d70deb8028e0c39ff3164fdbf4d8b088130cd7"
2186+
21122187
iterall@^1.1.3, iterall@^1.2.0:
21132188
version "1.2.0"
21142189
resolved "https://registry.yarnpkg.com/iterall/-/iterall-1.2.0.tgz#434e9f41f0b99911ab9c3d49d95f0e079176a2a2"
@@ -2638,7 +2713,7 @@ lodash.sortby@^4.7.0:
26382713
version "4.7.0"
26392714
resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438"
26402715

2641-
lodash@4.17.5, lodash@^4.0.0, lodash@^4.13.1, lodash@^4.14.0, lodash@^4.17.2, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.2.0, lodash@^4.2.1, lodash@^4.5.1, lodash@~4.17.2:
2716+
lodash@4.17.5, lodash@^4.0.0, lodash@^4.13.1, lodash@^4.14.0, lodash@^4.17.2, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.2.0, lodash@^4.2.1, lodash@^4.3.0, lodash@^4.5.1, lodash@~4.17.2:
26422717
version "4.17.5"
26432718
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.5.tgz#99a92d65c0272debe8c96b6057bc8fbfa3bed511"
26442719

@@ -2663,6 +2738,10 @@ loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.3.1:
26632738
dependencies:
26642739
js-tokens "^3.0.0"
26652740

2741+
lower-case@^1.1.1:
2742+
version "1.1.4"
2743+
resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-1.1.4.tgz#9a2cabd1b9e8e0ae993a4bf7d5875c39c42e8eac"
2744+
26662745
lru-cache@^4.0.1:
26672746
version "4.1.1"
26682747
resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.1.tgz#622e32e82488b49279114a4f9ecf45e7cd6bba55"
@@ -2800,6 +2879,12 @@ negotiator@0.6.1:
28002879
version "0.6.1"
28012880
resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9"
28022881

2882+
no-case@^2.2.0:
2883+
version "2.3.2"
2884+
resolved "https://registry.yarnpkg.com/no-case/-/no-case-2.3.2.tgz#60b813396be39b3f1288a4c1ed5d1e7d28b464ac"
2885+
dependencies:
2886+
lower-case "^1.1.1"
2887+
28032888
nock@9.1.6:
28042889
version "9.1.6"
28052890
resolved "https://registry.yarnpkg.com/nock/-/nock-9.1.6.tgz#16395af4c45b0fd84d1a4a9668154e16fa6624db"
@@ -3060,6 +3145,13 @@ parseurl@^1.3.0:
30603145
version "1.3.2"
30613146
resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3"
30623147

3148+
pascal-case@^2.0.1:
3149+
version "2.0.1"
3150+
resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-2.0.1.tgz#2d578d3455f660da65eca18ef95b4e0de912761e"
3151+
dependencies:
3152+
camel-case "^3.0.0"
3153+
upper-case-first "^1.1.0"
3154+
30633155
path-exists@^2.0.0:
30643156
version "2.1.0"
30653157
resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b"
@@ -3465,6 +3557,33 @@ request@2.81.0:
34653557
tunnel-agent "^0.6.0"
34663558
uuid "^3.0.0"
34673559

3560+
request@^2.81.0:
3561+
version "2.85.0"
3562+
resolved "https://registry.yarnpkg.com/request/-/request-2.85.0.tgz#5a03615a47c61420b3eb99b7dba204f83603e1fa"
3563+
dependencies:
3564+
aws-sign2 "~0.7.0"
3565+
aws4 "^1.6.0"
3566+
caseless "~0.12.0"
3567+
combined-stream "~1.0.5"
3568+
extend "~3.0.1"
3569+
forever-agent "~0.6.1"
3570+
form-data "~2.3.1"
3571+
har-validator "~5.0.3"
3572+
hawk "~6.0.2"
3573+
http-signature "~1.2.0"
3574+
is-typedarray "~1.0.0"
3575+
isstream "~0.1.2"
3576+
json-stringify-safe "~5.0.1"
3577+
mime-types "~2.1.17"
3578+
oauth-sign "~0.8.2"
3579+
performance-now "^2.1.0"
3580+
qs "~6.5.1"
3581+
safe-buffer "^5.1.1"
3582+
stringstream "~0.0.5"
3583+
tough-cookie "~2.3.3"
3584+
tunnel-agent "^0.6.0"
3585+
uuid "^3.1.0"
3586+
34683587
request@^2.83.0:
34693588
version "2.83.0"
34703589
resolved "https://registry.yarnpkg.com/request/-/request-2.83.0.tgz#ca0b65da02ed62935887808e6f510381034e3356"
@@ -4082,6 +4201,16 @@ unpipe@1.0.0:
40824201
version "1.0.0"
40834202
resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"
40844203

4204+
upper-case-first@^1.1.0:
4205+
version "1.1.2"
4206+
resolved "https://registry.yarnpkg.com/upper-case-first/-/upper-case-first-1.1.2.tgz#5d79bedcff14419518fd2edb0a0507c9b6859115"
4207+
dependencies:
4208+
upper-case "^1.1.1"
4209+
4210+
upper-case@^1.1.1:
4211+
version "1.1.3"
4212+
resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-1.1.3.tgz#f6b4501c2ec4cdd26ba78be7222961de77621598"
4213+
40854214
urijs@^1.19.0:
40864215
version "1.19.1"
40874216
resolved "https://registry.yarnpkg.com/urijs/-/urijs-1.19.1.tgz#5b0ff530c0cbde8386f6342235ba5ca6e995d25a"
@@ -4097,7 +4226,7 @@ util.promisify@^1.0.0:
40974226
define-properties "^1.1.2"
40984227
object.getownpropertydescriptors "^2.0.3"
40994228

4100-
uuid@^3.0.0, uuid@^3.1.0:
4229+
uuid@^3.0.0, uuid@^3.0.1, uuid@^3.1.0:
41014230
version "3.2.1"
41024231
resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.2.1.tgz#12c528bb9d58d0b9265d9a2f6f0fe8be17ff1f14"
41034232

0 commit comments

Comments
 (0)