Skip to content

Commit cdd56ba

Browse files
build: replace express-graphql with graphql-http and graphql-playgrou… (#1521)
* build: replace express-graphql with graphql-http and graphql-playground-middleware-express toward resolution of issue #1420 and #1508 * fix: go ahead and preempt provision of GET at /graphql by graphql-http with graphql-playground-middleware-express, rather than serving it from GET /gql-playground. This preserves functionality closer to as it was with express-graphql. * fix: whoops did not mean to modify database.json * Update backend/app.ts Co-authored-by: Cacie Prins <[email protected]> * style: do not pollute type system with one-off inline types * fix: consume rename commited on github from reviewer suggestion * style: do not pollute Query.ts either with one-off inline types * build: empty commit to clear perhaps spurious circleCI failure on firefox all specs passing on firefox locally. --------- Co-authored-by: Cacie Prins <[email protected]>
1 parent 1b451ca commit cdd56ba

File tree

7 files changed

+54
-50
lines changed

7 files changed

+54
-50
lines changed

backend/app.ts

+7-4
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import session from "express-session";
66
import bodyParser from "body-parser";
77
import cors from "cors";
88
import paginate from "express-paginate";
9-
import { graphqlHTTP } from "express-graphql";
9+
import { createHandler as graphqlHandler } from "graphql-http/lib/use/express";
1010
import { loadSchemaSync } from "@graphql-tools/load";
1111
import { GraphQLFileLoader } from "@graphql-tools/graphql-file-loader";
1212
import { addResolversToSchema } from "@graphql-tools/schema";
@@ -15,6 +15,7 @@ import auth from "./auth";
1515
import userRoutes from "./user-routes";
1616
import contactRoutes from "./contact-routes";
1717
import bankAccountRoutes from "./bankaccount-routes";
18+
import gqlPlaygroundRoutes from "./gql-playground-routes";
1819
import transactionRoutes from "./transaction-routes";
1920
import likeRoutes from "./like-routes";
2021
import commentRoutes from "./comment-routes";
@@ -97,14 +98,16 @@ if (process.env.VITE_GOOGLE) {
9798
app.use(checkGoogleJwt);
9899
}
99100

101+
app.use("/graphql", gqlPlaygroundRoutes);
100102
app.use(
101103
"/graphql",
102-
graphqlHTTP({
104+
graphqlHandler({
103105
schema: schemaWithResolvers,
104-
graphiql: true,
106+
context: async (req, _args) => {
107+
return { user: req.raw.user };
108+
},
105109
})
106110
);
107-
108111
app.use("/users", userRoutes);
109112
app.use("/contacts", contactRoutes);
110113
app.use("/bankAccounts", bankAccountRoutes);

backend/gql-playground-routes.ts

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
import express from "express";
2+
import expressPlayground from "graphql-playground-middleware-express";
3+
4+
const router = express.Router();
5+
router.get("/", expressPlayground({ endpoint: "/graphql" }));
6+
export default router;

backend/graphql/resolvers/Mutation.ts

+1-2
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,7 @@ import { createBankAccountForUser, removeBankAccountById } from "../../database"
22

33
const Mutation = {
44
createBankAccount: (obj: any, args: any, ctx: any) => {
5-
const account = createBankAccountForUser(ctx.user.id!, args);
6-
return account;
5+
return createBankAccountForUser(ctx.user.id, args);
76
},
87
deleteBankAccount: (obj: any, args: any, ctx: any) => {
98
removeBankAccountById(args.id);

backend/graphql/resolvers/Query.ts

+1-3
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,7 @@ const Query = {
44
listBankAccount(obj: any, args: any, ctx: any) {
55
/* istanbul ignore next */
66
try {
7-
const accounts = getBankAccountsByUserId(ctx.user.id!);
8-
9-
return accounts;
7+
return getBankAccountsByUserId(ctx.user.id);
108
/* istanbul ignore next */
119
} catch (err: any) {
1210
/* istanbul ignore next */

cypress/tests/api/api-bankaccounts.spec.ts

+1
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,7 @@ describe("Bank Accounts API", function () {
101101
}`,
102102
}).then((response) => {
103103
expect(response.status).to.eq(200);
104+
expect(JSON.stringify(response.body.errors || "notThere")).to.eq('"notThere"');
104105
expect(response.body.data.listBankAccount[0].userId).to.eq(userId);
105106
});
106107
});

package.json

+2-1
Original file line numberDiff line numberDiff line change
@@ -103,13 +103,14 @@
103103
"eslint-plugin-cypress": "2.15.1",
104104
"eslint-plugin-prettier": "^5.0.0",
105105
"express": "4.19.2",
106-
"express-graphql": "0.12.0",
107106
"express-jwt": "6.1.2",
108107
"express-paginate": "1.0.2",
109108
"express-session": "1.18.0",
110109
"express-validator": "6.15.0",
111110
"fuse.js": "6.5.3",
112111
"graphql": "16.8.1",
112+
"graphql-http": "^1.22.0",
113+
"graphql-playground-middleware-express": "^1.7.23",
113114
"graphql-tools": "8.2.7",
114115
"http-proxy-middleware": "0.19.1",
115116
"husky": "7.0.4",

yarn.lock

+36-40
Original file line numberDiff line numberDiff line change
@@ -4446,7 +4446,7 @@ abort-controller@^3.0.0:
44464446
dependencies:
44474447
event-target-shim "^5.0.0"
44484448

4449-
accepts@^1.3.7, accepts@~1.3.8:
4449+
accepts@~1.3.8:
44504450
version "1.3.8"
44514451
resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e"
44524452
integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==
@@ -5529,7 +5529,7 @@ combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6:
55295529
dependencies:
55305530
delayed-stream "~1.0.0"
55315531

5532-
commander@^2.20.0:
5532+
commander@^2.20.0, commander@^2.20.3:
55335533
version "2.20.3"
55345534
resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
55355535
integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==
@@ -5605,7 +5605,7 @@ [email protected], content-disposition@^0.5.4:
56055605
dependencies:
56065606
safe-buffer "5.2.1"
56075607

5608-
content-type@^1.0.4, content-type@~1.0.4, content-type@~1.0.5:
5608+
content-type@~1.0.4, content-type@~1.0.5:
56095609
version "1.0.5"
56105610
resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918"
56115611
integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==
@@ -5753,6 +5753,11 @@ cssesc@^3.0.0:
57535753
resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee"
57545754
integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==
57555755

5756+
5757+
version "0.0.10"
5758+
resolved "https://registry.yarnpkg.com/cssfilter/-/cssfilter-0.0.10.tgz#c6d2672632a2e5c83e013e6864a42ce8defd20ae"
5759+
integrity sha512-FAaLDaplstoRsDR8XGYH51znUN0UY7nMc6Z9/fvE8EXGwvJE9hu7W2vHwx1+bd6gCYnln9nLbzxFTrcO9YQDZw==
5760+
57565761
cssstyle@^3.0.0:
57575762
version "3.0.0"
57585763
resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-3.0.0.tgz#17ca9c87d26eac764bb8cfd00583cff21ce0277a"
@@ -6020,11 +6025,6 @@ [email protected], depd@^2.0.0, depd@~2.0.0:
60206025
resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df"
60216026
integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==
60226027

6023-
depd@~1.1.2:
6024-
version "1.1.2"
6025-
resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9"
6026-
integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==
6027-
60286028
dequal@^2.0.3:
60296029
version "2.0.3"
60306030
resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be"
@@ -6793,16 +6793,6 @@ exponential-backoff@^3.1.1:
67936793
resolved "https://registry.yarnpkg.com/exponential-backoff/-/exponential-backoff-3.1.1.tgz#64ac7526fe341ab18a39016cd22c787d01e00bf6"
67946794
integrity sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==
67956795

6796-
6797-
version "0.12.0"
6798-
resolved "https://registry.yarnpkg.com/express-graphql/-/express-graphql-0.12.0.tgz#58deabc309909ca2c9fe2f83f5fbe94429aa23df"
6799-
integrity sha512-DwYaJQy0amdy3pgNtiTDuGGM2BLdj+YO2SgbKoLliCfuHv3VVTt7vNG/ZqK2hRYjtYHE2t2KB705EU94mE64zg==
6800-
dependencies:
6801-
accepts "^1.3.7"
6802-
content-type "^1.0.4"
6803-
http-errors "1.8.0"
6804-
raw-body "^2.4.1"
6805-
68066796
68076797
version "6.1.2"
68086798
resolved "https://registry.yarnpkg.com/express-jwt/-/express-jwt-6.1.2.tgz#4a6cc11d1dcff6f23126dd79ec5b2b441333e78b"
@@ -7526,6 +7516,25 @@ graphemer@^1.4.0:
75267516
resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6"
75277517
integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==
75287518

7519+
graphql-http@^1.22.0:
7520+
version "1.22.0"
7521+
resolved "https://registry.yarnpkg.com/graphql-http/-/graphql-http-1.22.0.tgz#967bad279747ba5e1c9dd85b644c6b4f3dfa88f2"
7522+
integrity sha512-9RBUlGJWBFqz9LwfpmAbjJL/8j/HCNkZwPBU5+Bfmwez+1Ay43DocMNQYpIWsWqH0Ftv6PTNAh2aRnnMCBJgLw==
7523+
7524+
graphql-playground-html@^1.6.30:
7525+
version "1.6.30"
7526+
resolved "https://registry.yarnpkg.com/graphql-playground-html/-/graphql-playground-html-1.6.30.tgz#14c2a8eb7fc17bfeb1a746bbb28a11e34bf0b391"
7527+
integrity sha512-tpCujhsJMva4aqE8ULnF7/l3xw4sNRZcSHu+R00VV+W0mfp+Q20Plvcrp+5UXD+2yS6oyCXncA+zoQJQqhGCEw==
7528+
dependencies:
7529+
xss "^1.0.6"
7530+
7531+
graphql-playground-middleware-express@^1.7.23:
7532+
version "1.7.23"
7533+
resolved "https://registry.yarnpkg.com/graphql-playground-middleware-express/-/graphql-playground-middleware-express-1.7.23.tgz#95aba44d801ff3c08b2246917d2901d2e7c35d3d"
7534+
integrity sha512-M/zbTyC1rkgiQjFSgmzAv6umMHOphYLNWZp6Ye5QrD77WfGOOoSqDsVmGUczc2pDkEPEzzGB/bvBO5rdzaTRgw==
7535+
dependencies:
7536+
graphql-playground-html "^1.6.30"
7537+
75297538
graphql-tag@^2.12.3:
75307539
version "2.12.6"
75317540
resolved "https://registry.yarnpkg.com/graphql-tag/-/graphql-tag-2.12.6.tgz#d441a569c1d2537ef10ca3d1633b48725329b5f1"
@@ -7701,17 +7710,6 @@ http-cache-semantics@^4.1.1:
77017710
resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a"
77027711
integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==
77037712

7704-
7705-
version "1.8.0"
7706-
resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.8.0.tgz#75d1bbe497e1044f51e4ee9e704a62f28d336507"
7707-
integrity sha512-4I8r0C5JDhT5VkvI47QktDW75rNlGVsUf/8hzjCC/wkWI/jdTRmBb9aI7erSG82r1bjKY3F6k28WnsVxB1C73A==
7708-
dependencies:
7709-
depd "~1.1.2"
7710-
inherits "2.0.4"
7711-
setprototypeof "1.2.0"
7712-
statuses ">= 1.5.0 < 2"
7713-
toidentifier "1.0.0"
7714-
77157713
77167714
version "2.0.0"
77177715
resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3"
@@ -10647,7 +10645,7 @@ range-parser@~1.2.1:
1064710645
resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031"
1064810646
integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==
1064910647

10650-
[email protected], raw-body@^2.4.1:
10648+
1065110649
version "2.5.2"
1065210650
resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.2.tgz#99febd83b90e08975087e8f1f9419a149366b68a"
1065310651
integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==
@@ -11556,11 +11554,6 @@ [email protected]:
1155611554
resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63"
1155711555
integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==
1155811556

11559-
"statuses@>= 1.5.0 < 2":
11560-
version "1.5.0"
11561-
resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c"
11562-
integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==
11563-
1156411557
std-env@^3.3.3:
1156511558
version "3.3.3"
1156611559
resolved "https://registry.yarnpkg.com/std-env/-/std-env-3.3.3.tgz#a54f06eb245fdcfef53d56f3c0251f1d5c3d01fe"
@@ -11911,11 +11904,6 @@ to-regex@^3.0.1, to-regex@^3.0.2:
1191111904
regex-not "^1.0.2"
1191211905
safe-regex "^1.1.0"
1191311906

11914-
11915-
version "1.0.0"
11916-
resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553"
11917-
integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==
11918-
1191911907
1192011908
version "1.0.1"
1192111909
resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35"
@@ -12726,6 +12714,14 @@ xmlchars@^2.2.0:
1272612714
resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb"
1272712715
integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==
1272812716

12717+
xss@^1.0.6:
12718+
version "1.0.15"
12719+
resolved "https://registry.yarnpkg.com/xss/-/xss-1.0.15.tgz#96a0e13886f0661063028b410ed1b18670f4e59a"
12720+
integrity sha512-FVdlVVC67WOIPvfOwhoMETV72f6GbW7aOabBC3WxN/oUdoEMDyLz4OgRv5/gck2ZeNqEQu+Tb0kloovXOfpYVg==
12721+
dependencies:
12722+
commander "^2.20.3"
12723+
cssfilter "0.0.10"
12724+
1272912725
1273012726
version "4.38.3"
1273112727
resolved "https://registry.yarnpkg.com/xstate/-/xstate-4.38.3.tgz#4e15e7ad3aa0ca1eea2010548a5379966d8f1075"

0 commit comments

Comments
 (0)