├── .gitignore
├── data
├── index.json
└── index_backup.json
├── default-data.js
├── examples
├── links
│ └── index.md
├── mutations
│ ├── checkoutCreate.js
│ ├── checkoutLineItemsAdd.js
│ ├── checkoutLineItemsRemove.js
│ └── checkoutLineItemsUpdate.js
└── queries
│ ├── hello.js
│ ├── node.js
│ ├── productByHandle.js
│ └── products.js
├── index.js
├── package-lock.json
├── package.json
└── readme.md
/.gitignore:
--------------------------------------------------------------------------------
1 | /node_modules
2 |
--------------------------------------------------------------------------------
/data/index.json:
--------------------------------------------------------------------------------
1 | {
2 | "checkout": {},
3 | "products": [
4 | {
5 | "__typename": "Product",
6 | "id": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0LzY4NjQ5NTQyNjE2OTE=",
7 | "handle": "cool-hat",
8 | "title": "Cool Hat",
9 | "vendor": "EincodeTest",
10 | "description": "The Next.js beanie has arrived! This embroidered beauty has a snug fit that ensures you're going to feel cozy and warm whatever you're doing. • 60% cotton, 40% acrylic• Breathable cotton blend• Form-fitting shape• One size fits most",
11 | "descriptionHtml": "\n
The Next.js beanie has arrived! This embroidered beauty has a snug fit that ensures you're going to feel cozy and warm whatever you're doing.
\n• 60% cotton, 40% acrylic
• Breathable cotton blend
• Form-fitting shape
• One size fits most
\n",
12 | "priceRange": {
13 | "minVariantPrice": {
14 | "amount": "20.0",
15 | "currencyCode": "EUR"
16 | }
17 | },
18 | "options": [
19 | {
20 | "id": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0T3B0aW9uLzg3ODkwMjY3OTk4MDM=",
21 | "name": "Size",
22 | "values": [
23 | "s",
24 | "l",
25 | "m"
26 | ]
27 | },
28 | {
29 | "id": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0T3B0aW9uLzg3ODkwODQxNzY1NzE=",
30 | "name": "Color",
31 | "values": [
32 | "#000000",
33 | "#ffffff"
34 | ]
35 | }
36 | ],
37 | "variants": [
38 | {
39 | "id": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0VmFyaWFudC80MDQxNDM2NjMzNTE2Mw==",
40 | "productId": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0LzY4NjQ5NTQyNjE2OTE=",
41 | "title": "s / #000000",
42 | "sku": "",
43 | "selectedOptions": [
44 | {
45 | "name": "Size",
46 | "value": "s"
47 | },
48 | {
49 | "name": "Color",
50 | "value": "#000000"
51 | }
52 | ],
53 | "priceV2": {
54 | "amount": "20.0",
55 | "currencyCode": "EUR"
56 | },
57 | "compareAtPriceV2": {
58 | "amount": "30.0",
59 | "currencyCode": "EUR"
60 | },
61 | "image": {
62 | "originalSrc": "Hat-front-black__72990.1603748583.png",
63 | "altText": "",
64 | "width": 2048,
65 | "height": 2048
66 | }
67 | },
68 | {
69 | "id": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0VmFyaWFudC80MDQxNDM2NjM2NzkzMQ==",
70 | "productId": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0LzY4NjQ5NTQyNjE2OTE=",
71 | "title": "s / #ffffff",
72 | "sku": "",
73 | "selectedOptions": [
74 | {
75 | "name": "Size",
76 | "value": "s"
77 | },
78 | {
79 | "name": "Color",
80 | "value": "#ffffff"
81 | }
82 | ],
83 | "priceV2": {
84 | "amount": "20.0",
85 | "currencyCode": "EUR"
86 | },
87 | "compareAtPriceV2": {
88 | "amount": "30.0",
89 | "currencyCode": "EUR"
90 | },
91 | "image": {
92 | "originalSrc": "Hat-front-black__72990.1603748583.png",
93 | "altText": "",
94 | "width": 2048,
95 | "height": 2048
96 | }
97 | },
98 | {
99 | "id": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0VmFyaWFudC80MDQxNDM2NjQzMzQ2Nw==",
100 | "productId": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0LzY4NjQ5NTQyNjE2OTE=",
101 | "title": "l / #000000",
102 | "sku": "",
103 | "selectedOptions": [
104 | {
105 | "name": "Size",
106 | "value": "l"
107 | },
108 | {
109 | "name": "Color",
110 | "value": "#000000"
111 | }
112 | ],
113 | "priceV2": {
114 | "amount": "20.0",
115 | "currencyCode": "EUR"
116 | },
117 | "compareAtPriceV2": {
118 | "amount": "30.0",
119 | "currencyCode": "EUR"
120 | },
121 | "image": {
122 | "originalSrc": "Hat-front-black__72990.1603748583.png",
123 | "altText": "",
124 | "width": 2048,
125 | "height": 2048
126 | }
127 | },
128 | {
129 | "id": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0VmFyaWFudC80MDQxNDM2NjQ2NjIzNQ==",
130 | "productId": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0LzY4NjQ5NTQyNjE2OTE=",
131 | "title": "l / #ffffff",
132 | "sku": "",
133 | "selectedOptions": [
134 | {
135 | "name": "Size",
136 | "value": "l"
137 | },
138 | {
139 | "name": "Color",
140 | "value": "#ffffff"
141 | }
142 | ],
143 | "priceV2": {
144 | "amount": "20.0",
145 | "currencyCode": "EUR"
146 | },
147 | "compareAtPriceV2": {
148 | "amount": "30.0",
149 | "currencyCode": "EUR"
150 | },
151 | "image": {
152 | "originalSrc": "Hat-front-black__72990.1603748583.png",
153 | "altText": "",
154 | "width": 2048,
155 | "height": 2048
156 | }
157 | },
158 | {
159 | "id": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0VmFyaWFudC80MDQxNDM2NjQ5OTAwMw==",
160 | "productId": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0LzY4NjQ5NTQyNjE2OTE=",
161 | "title": "m / #000000",
162 | "sku": "",
163 | "selectedOptions": [
164 | {
165 | "name": "Size",
166 | "value": "m"
167 | },
168 | {
169 | "name": "Color",
170 | "value": "#000000"
171 | }
172 | ],
173 | "priceV2": {
174 | "amount": "20.0",
175 | "currencyCode": "EUR"
176 | },
177 | "compareAtPriceV2": {
178 | "amount": "30.0",
179 | "currencyCode": "EUR"
180 | },
181 | "image": {
182 | "originalSrc": "Hat-front-black__72990.1603748583.png",
183 | "altText": "",
184 | "width": 2048,
185 | "height": 2048
186 | }
187 | },
188 | {
189 | "id": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0VmFyaWFudC80MDQxNDM2NjU2NDUzOQ==",
190 | "productId": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0LzY4NjQ5NTQyNjE2OTE=",
191 | "title": "m / #ffffff",
192 | "sku": "",
193 | "selectedOptions": [
194 | {
195 | "name": "Size",
196 | "value": "m"
197 | },
198 | {
199 | "name": "Color",
200 | "value": "#ffffff"
201 | }
202 | ],
203 | "priceV2": {
204 | "amount": "20.0",
205 | "currencyCode": "EUR"
206 | },
207 | "compareAtPriceV2": {
208 | "amount": "30.0",
209 | "currencyCode": "EUR"
210 | },
211 | "image": {
212 | "originalSrc": "Hat-front-black__72990.1603748583.png",
213 | "altText": "",
214 | "width": 2048,
215 | "height": 2048
216 | }
217 | }
218 | ],
219 | "images": [
220 | {
221 | "originalSrc": "Hat-front-black__72990.1603748583.png",
222 | "altText": "",
223 | "width": 2048,
224 | "height": 2048
225 | },
226 | {
227 | "originalSrc": "Hat-back-black__57260.1602591509.png",
228 | "altText": "",
229 | "width": 2048,
230 | "height": 2048
231 | },
232 | {
233 | "originalSrc": "Hat-left-black__51142.1602591510.png",
234 | "altText": "",
235 | "width": 2048,
236 | "height": 2048
237 | },
238 | {
239 | "originalSrc": "Hat-front-white__31525.1602591510.png",
240 | "altText": "",
241 | "width": 2048,
242 | "height": 2048
243 | }
244 | ]
245 | },
246 | {
247 | "__typename": "Product",
248 | "id": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0LzY4NjUyNzg0MzU1MTU=",
249 | "handle": "lightweight-jacket",
250 | "title": "Lightweight Jacket",
251 | "vendor": "EincodeTest",
252 | "description": "Add a little zing to your winter wardrobe with this vibrant Winter-breaker Jacket. With a brushed fleece inside, and a relaxed unisex fit, this jacket is just the stuff of the dreams, so be quick to grab yourself one!Long sleeve ripstop jacket colorblocked in black. Rough pattern in obsidian black and brown printed throughout. Printed graphic in white throughout. Logo-woven webbing trim in white and black throughout. Bungee-style drawstring at hood featuring rubberized logo hardware. Zip closure at front. Rubberized logo appliqué at chest. Welt pockets and textile logo patch in orange at waist. Elasticized cuffs. Partially lined. Black hardware.",
253 | "descriptionHtml": "Add a little zing to your winter wardrobe with this vibrant Winter-breaker Jacket. With a brushed fleece inside, and a relaxed unisex fit, this jacket is just the stuff of the dreams, so be quick to grab yourself one!
Long sleeve ripstop jacket colorblocked in black. Rough pattern in obsidian black and brown printed throughout. Printed graphic in white throughout. Logo-woven webbing trim in white and black throughout. Bungee-style drawstring at hood featuring rubberized logo hardware. Zip closure at front. Rubberized logo appliqué at chest. Welt pockets and textile logo patch in orange at waist. Elasticized cuffs. Partially lined. Black hardware.",
254 | "priceRange": {
255 | "minVariantPrice": {
256 | "amount": "100.0",
257 | "currencyCode": "EUR"
258 | },
259 | "maxVariantPrice": {
260 | "amount": "100.0",
261 | "currencyCode": "EUR"
262 | }
263 | },
264 | "options": [
265 | {
266 | "id": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0T3B0aW9uLzg3ODk0NTgxNTc3NTU=",
267 | "name": "Size",
268 | "values": [
269 | "l",
270 | "m",
271 | "s"
272 | ]
273 | },
274 | {
275 | "id": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0T3B0aW9uLzg3ODk0NTgxOTA1MjM=",
276 | "name": "Color",
277 | "values": [
278 | "#000000",
279 | "#ffffff"
280 | ]
281 | }
282 | ],
283 | "variants": [
284 | {
285 | "id": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0VmFyaWFudC80MDQxNjM2MjQzMDY1MQ==",
286 | "productId": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0LzY4NjUyNzg0MzU1MTU=",
287 | "title": "l / #000000",
288 | "sku": "",
289 | "selectedOptions": [
290 | {
291 | "name": "Size",
292 | "value": "l"
293 | },
294 | {
295 | "name": "Color",
296 | "value": "#000000"
297 | }
298 | ],
299 | "priceV2": {
300 | "amount": "100.0",
301 | "currencyCode": "EUR"
302 | },
303 | "compareAtPriceV2": {
304 | "amount": "70.0",
305 | "currencyCode": "EUR"
306 | },
307 | "image": {
308 | "originalSrc": "Men-Jacket-Front-Black__15466.1603283963.png",
309 | "altText": "",
310 | "width": 2048,
311 | "height": 2048
312 | }
313 | },
314 | {
315 | "id": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0VmFyaWFudC80MDQxNjM2MjQ2MzQxOQ==",
316 | "productId": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0LzY4NjUyNzg0MzU1MTU=",
317 | "title": "l / #ffffff",
318 | "sku": "",
319 | "selectedOptions": [
320 | {
321 | "name": "Size",
322 | "value": "l"
323 | },
324 | {
325 | "name": "Color",
326 | "value": "#ffffff"
327 | }
328 | ],
329 | "priceV2": {
330 | "amount": "100.0",
331 | "currencyCode": "EUR"
332 | },
333 | "compareAtPriceV2": {
334 | "amount": "70.0",
335 | "currencyCode": "EUR"
336 | }
337 | },
338 | {
339 | "id": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0VmFyaWFudC80MDQxNjM2MjQ5NjE4Nw==",
340 | "productId": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0LzY4NjUyNzg0MzU1MTU=",
341 | "title": "m / #000000",
342 | "sku": "",
343 | "selectedOptions": [
344 | {
345 | "name": "Size",
346 | "value": "m"
347 | },
348 | {
349 | "name": "Color",
350 | "value": "#000000"
351 | }
352 | ],
353 | "priceV2": {
354 | "amount": "100.0",
355 | "currencyCode": "EUR"
356 | },
357 | "compareAtPriceV2": {
358 | "amount": "70.0",
359 | "currencyCode": "EUR"
360 | },
361 | "image": {
362 | "originalSrc": "Men-Jacket-Front-Black__15466.1603283963.png",
363 | "altText": "",
364 | "width": 2048,
365 | "height": 2048
366 | }
367 | },
368 | {
369 | "id": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0VmFyaWFudC80MDQxNjM2MjUyODk1NQ==",
370 | "productId": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0LzY4NjUyNzg0MzU1MTU=",
371 | "title": "m / #ffffff",
372 | "sku": "",
373 | "selectedOptions": [
374 | {
375 | "name": "Size",
376 | "value": "m"
377 | },
378 | {
379 | "name": "Color",
380 | "value": "#ffffff"
381 | }
382 | ],
383 | "priceV2": {
384 | "amount": "100.0",
385 | "currencyCode": "EUR"
386 | },
387 | "compareAtPriceV2": {
388 | "amount": "70.0",
389 | "currencyCode": "EUR"
390 | },
391 | "image": {
392 | "originalSrc": "Men-Jacket-Front-Black__15466.1603283963.png",
393 | "altText": "",
394 | "width": 2048,
395 | "height": 2048
396 | }
397 | },
398 | {
399 | "id": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0VmFyaWFudC80MDQxNjM2MjU2MTcyMw==",
400 | "productId": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0LzY4NjUyNzg0MzU1MTU=",
401 | "title": "s / #000000",
402 | "sku": "",
403 | "selectedOptions": [
404 | {
405 | "name": "Size",
406 | "value": "s"
407 | },
408 | {
409 | "name": "Color",
410 | "value": "#000000"
411 | }
412 | ],
413 | "priceV2": {
414 | "amount": "100.0",
415 | "currencyCode": "EUR"
416 | },
417 | "compareAtPriceV2": {
418 | "amount": "70.0",
419 | "currencyCode": "EUR"
420 | },
421 | "image": {
422 | "originalSrc": "Men-Jacket-Front-Black__15466.1603283963.png",
423 | "altText": "",
424 | "width": 2048,
425 | "height": 2048
426 | }
427 | },
428 | {
429 | "id": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0VmFyaWFudC80MDQxNjM2MjU5NDQ5MQ==",
430 | "productId": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0LzY4NjUyNzg0MzU1MTU=",
431 | "title": "s / #ffffff",
432 | "sku": "",
433 | "selectedOptions": [
434 | {
435 | "name": "Size",
436 | "value": "s"
437 | },
438 | {
439 | "name": "Color",
440 | "value": "#ffffff"
441 | }
442 | ],
443 | "priceV2": {
444 | "amount": "100.0",
445 | "currencyCode": "EUR"
446 | },
447 | "compareAtPriceV2": {
448 | "amount": "70.0",
449 | "currencyCode": "EUR"
450 | },
451 | "image": {
452 | "originalSrc": "Men-Jacket-Front-Black__15466.1603283963.png",
453 | "altText": "",
454 | "width": 2048,
455 | "height": 2048
456 | }
457 | }
458 | ],
459 | "images": [
460 | {
461 | "originalSrc": "Men-Jacket-Front-Black__15466.1603283963.png",
462 | "altText": "",
463 | "width": 2048,
464 | "height": 2048
465 | },
466 | {
467 | "originalSrc": "Men-Jacket-Side-Black__68202.1603283961.png",
468 | "altText": "",
469 | "width": 2048,
470 | "height": 2048
471 | },
472 | {
473 | "originalSrc": "Men-Jacket-Back-Black__33864.1603283963.png",
474 | "altText": "",
475 | "width": 2048,
476 | "height": 2048
477 | },
478 | {
479 | "originalSrc": "Men-Jacket-Front-White__95300.1603283963.png",
480 | "altText": "",
481 | "width": 2048,
482 | "height": 2048
483 | },
484 | {
485 | "originalSrc": "Men-Jacket-Side-White__91924.1603283962.png",
486 | "altText": "",
487 | "width": 2048,
488 | "height": 2048
489 | },
490 | {
491 | "originalSrc": "Men-Jacket-Back-White__02866.1603283963.png",
492 | "altText": "",
493 | "width": 2048,
494 | "height": 2048
495 | }
496 | ]
497 | },
498 | {
499 | "__typename": "Product",
500 | "id": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0LzY4NjUyNzk2ODA2OTk=",
501 | "handle": "t-shirt",
502 | "title": "T-Shirt",
503 | "vendor": "EincodeTest",
504 | "description": "This t-shirt is a must-have in your wardrobe, combining the timeless fit of a classic tee with an intricate embroidered detail that brings the shirt to a whole new level. It's soft and durable, so be prepared to have a new favorite t-shirt!",
505 | "descriptionHtml": "This t-shirt is a must-have in your wardrobe, combining the timeless fit of a classic tee with an intricate embroidered detail that brings the shirt to a whole new level. It's soft and durable, so be prepared to have a new favorite t-shirt!
",
506 | "priceRange": {
507 | "minVariantPrice": {
508 | "amount": "50.0",
509 | "currencyCode": "EUR"
510 | },
511 | "maxVariantPrice": {
512 | "amount": "50.0",
513 | "currencyCode": "EUR"
514 | }
515 | },
516 | "options": [
517 | {
518 | "id": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0T3B0aW9uLzg3ODk0NjAxNTY2MDM=",
519 | "name": "Size",
520 | "values": [
521 | "m",
522 | "s"
523 | ]
524 | },
525 | {
526 | "id": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0T3B0aW9uLzg3ODk0NjAxODkzNzE=",
527 | "name": "Color",
528 | "values": [
529 | "#000000"
530 | ]
531 | }
532 | ],
533 | "variants": [
534 | {
535 | "id": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0VmFyaWFudC80MDQxNjM4NTE3MTY0Mw==",
536 | "productId": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0LzY4NjUyNzk2ODA2OTk=",
537 | "title": "m / #000000",
538 | "sku": "",
539 | "selectedOptions": [
540 | {
541 | "name": "Size",
542 | "value": "m"
543 | },
544 | {
545 | "name": "Color",
546 | "value": "#000000"
547 | }
548 | ],
549 | "priceV2": {
550 | "amount": "50.0",
551 | "currencyCode": "EUR"
552 | },
553 | "compareAtPriceV2": {
554 | "amount": "30.0",
555 | "currencyCode": "EUR"
556 | },
557 | "image": {
558 | "originalSrc": "Men-TShirt-Black-Front__70046.1603748348.png",
559 | "altText": "",
560 | "width": 2048,
561 | "height": 2048
562 | }
563 | },
564 | {
565 | "id": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0VmFyaWFudC80MDQxNjM4NTIwNDQxMQ==",
566 | "productId": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0LzY4NjUyNzk2ODA2OTk=",
567 | "title": "s / #000000",
568 | "sku": "",
569 | "selectedOptions": [
570 | {
571 | "name": "Size",
572 | "value": "s"
573 | },
574 | {
575 | "name": "Color",
576 | "value": "#000000"
577 | }
578 | ],
579 | "priceV2": {
580 | "amount": "50.0",
581 | "currencyCode": "EUR"
582 | },
583 | "compareAtPriceV2": {
584 | "amount": "30.0",
585 | "currencyCode": "EUR"
586 | }
587 | }
588 | ],
589 | "images": [
590 | {
591 | "originalSrc": "Men-TShirt-Black-Front__70046.1603748348.png",
592 | "altText": "",
593 | "width": 2048,
594 | "height": 2048
595 | },
596 | {
597 | "originalSrc": "Men-TShirt-Black-Left-Side__72119.1603284781.png",
598 | "altText": "",
599 | "width": 2048,
600 | "height": 2048
601 | },
602 | {
603 | "originalSrc": "Men-TShirt-Black-Back__57266.1603748348.png",
604 | "altText": "",
605 | "width": 2048,
606 | "height": 2048
607 | },
608 | {
609 | "originalSrc": "Men-TShirt-White-Front__99616.1603284781.png",
610 | "altText": "",
611 | "width": 2048,
612 | "height": 2048
613 | },
614 | {
615 | "originalSrc": "Men-TShirt-White-Left-Side__69000.1603284781.png",
616 | "altText": "",
617 | "width": 2048,
618 | "height": 2048
619 | },
620 | {
621 | "originalSrc": "Men-TShirt-White-Back__33450.1603284781.png",
622 | "altText": "",
623 | "width": 2048,
624 | "height": 2048
625 | }
626 | ]
627 | }
628 | ]
629 | }
630 |
--------------------------------------------------------------------------------
/data/index_backup.json:
--------------------------------------------------------------------------------
1 | {
2 | "checkout": {
3 | "__typename": "Checkout",
4 | "id": "test_id_checkout",
5 | "webUrl": "test_webUrl",
6 | "subtotalPriceV2": {
7 | "amount": "0.0",
8 | "currencyCode": "EUR"
9 | },
10 | "totalTaxV2": {
11 | "amount": "0.0",
12 | "currencyCode": "EUR"
13 | },
14 | "totalPriceV2": {
15 | "amount": "0.0",
16 | "currencyCode": "EUR"
17 | },
18 | "completedAt": null,
19 | "createdAt": "2021-06-02T22:32:40Z",
20 | "taxesIncluded": true,
21 | "lineItems": []
22 | },
23 | "products": [
24 | {
25 | "__typename": "Product",
26 | "id": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0LzY4NjQ5NTQyNjE2OTE=",
27 | "handle": "cool-hat",
28 | "title": "Cool Hat",
29 | "vendor": "EincodeTest",
30 | "description": "The Next.js beanie has arrived! This embroidered beauty has a snug fit that ensures you're going to feel cozy and warm whatever you're doing. • 60% cotton, 40% acrylic• Breathable cotton blend• Form-fitting shape• One size fits most",
31 | "descriptionHtml": "\nThe Next.js beanie has arrived! This embroidered beauty has a snug fit that ensures you're going to feel cozy and warm whatever you're doing.
\n• 60% cotton, 40% acrylic
• Breathable cotton blend
• Form-fitting shape
• One size fits most
\n",
32 | "priceRange": {
33 | "minVariantPrice": {
34 | "amount": "20.0",
35 | "currencyCode": "EUR"
36 | }
37 | },
38 | "options": [
39 | {
40 | "id": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0T3B0aW9uLzg3ODkwMjY3OTk4MDM=",
41 | "name": "Size",
42 | "values": [
43 | "s",
44 | "l",
45 | "m"
46 | ]
47 | },
48 | {
49 | "id": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0T3B0aW9uLzg3ODkwODQxNzY1NzE=",
50 | "name": "Color",
51 | "values": [
52 | "#000000",
53 | "#ffffff"
54 | ]
55 | }
56 | ],
57 | "variants": [
58 | {
59 | "id": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0VmFyaWFudC80MDQxNDM2NjMzNTE2Mw==",
60 | "productId": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0LzY4NjQ5NTQyNjE2OTE=",
61 | "title": "s / #000000",
62 | "sku": "",
63 | "selectedOptions": [
64 | {
65 | "name": "Size",
66 | "value": "s"
67 | },
68 | {
69 | "name": "Color",
70 | "value": "#000000"
71 | }
72 | ],
73 | "priceV2": {
74 | "amount": "20.0",
75 | "currencyCode": "EUR"
76 | },
77 | "compareAtPriceV2": {
78 | "amount": "30.0",
79 | "currencyCode": "EUR"
80 | }
81 | },
82 | {
83 | "id": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0VmFyaWFudC80MDQxNDM2NjM2NzkzMQ==",
84 | "productId": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0LzY4NjQ5NTQyNjE2OTE=",
85 | "title": "s / #ffffff",
86 | "sku": "",
87 | "selectedOptions": [
88 | {
89 | "name": "Size",
90 | "value": "s"
91 | },
92 | {
93 | "name": "Color",
94 | "value": "#ffffff"
95 | }
96 | ],
97 | "priceV2": {
98 | "amount": "20.0",
99 | "currencyCode": "EUR"
100 | },
101 | "compareAtPriceV2": {
102 | "amount": "30.0",
103 | "currencyCode": "EUR"
104 | }
105 | },
106 | {
107 | "id": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0VmFyaWFudC80MDQxNDM2NjQzMzQ2Nw==",
108 | "productId": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0LzY4NjQ5NTQyNjE2OTE=",
109 | "title": "l / #000000",
110 | "sku": "",
111 | "selectedOptions": [
112 | {
113 | "name": "Size",
114 | "value": "l"
115 | },
116 | {
117 | "name": "Color",
118 | "value": "#000000"
119 | }
120 | ],
121 | "priceV2": {
122 | "amount": "20.0",
123 | "currencyCode": "EUR"
124 | },
125 | "compareAtPriceV2": {
126 | "amount": "30.0",
127 | "currencyCode": "EUR"
128 | }
129 | },
130 | {
131 | "id": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0VmFyaWFudC80MDQxNDM2NjQ2NjIzNQ==",
132 | "productId": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0LzY4NjQ5NTQyNjE2OTE=",
133 | "title": "l / #ffffff",
134 | "sku": "",
135 | "selectedOptions": [
136 | {
137 | "name": "Size",
138 | "value": "l"
139 | },
140 | {
141 | "name": "Color",
142 | "value": "#ffffff"
143 | }
144 | ],
145 | "priceV2": {
146 | "amount": "20.0",
147 | "currencyCode": "EUR"
148 | },
149 | "compareAtPriceV2": {
150 | "amount": "30.0",
151 | "currencyCode": "EUR"
152 | }
153 | },
154 | {
155 | "id": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0VmFyaWFudC80MDQxNDM2NjQ5OTAwMw==",
156 | "productId": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0LzY4NjQ5NTQyNjE2OTE=",
157 | "title": "m / #000000",
158 | "sku": "",
159 | "selectedOptions": [
160 | {
161 | "name": "Size",
162 | "value": "m"
163 | },
164 | {
165 | "name": "Color",
166 | "value": "#000000"
167 | }
168 | ],
169 | "priceV2": {
170 | "amount": "20.0",
171 | "currencyCode": "EUR"
172 | },
173 | "compareAtPriceV2": {
174 | "amount": "30.0",
175 | "currencyCode": "EUR"
176 | }
177 | },
178 | {
179 | "id": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0VmFyaWFudC80MDQxNDM2NjU2NDUzOQ==",
180 | "productId": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0LzY4NjQ5NTQyNjE2OTE=",
181 | "title": "m / #ffffff",
182 | "sku": "",
183 | "selectedOptions": [
184 | {
185 | "name": "Size",
186 | "value": "m"
187 | },
188 | {
189 | "name": "Color",
190 | "value": "#ffffff"
191 | }
192 | ],
193 | "priceV2": {
194 | "amount": "20.0",
195 | "currencyCode": "EUR"
196 | },
197 | "compareAtPriceV2": {
198 | "amount": "30.0",
199 | "currencyCode": "EUR"
200 | }
201 | }
202 | ],
203 | "images": [
204 | {
205 | "originalSrc": "Hat-front-black__72990.1603748583.png",
206 | "altText": "",
207 | "width": 2048,
208 | "height": 2048
209 | },
210 | {
211 | "originalSrc": "Hat-back-black__57260.1602591509.png",
212 | "altText": "",
213 | "width": 2048,
214 | "height": 2048
215 | },
216 | {
217 | "originalSrc": "Hat-left-black__51142.1602591510.png",
218 | "altText": "",
219 | "width": 2048,
220 | "height": 2048
221 | },
222 | {
223 | "originalSrc": "Hat-front-white__31525.1602591510.png",
224 | "altText": "",
225 | "width": 2048,
226 | "height": 2048
227 | },
228 | {
229 | "originalSrc": "Hat-left-white__29807.1602591510.png",
230 | "altText": "",
231 | "width": 2048,
232 | "height": 2048
233 | },
234 | {
235 | "originalSrc": "Hat-back-white__92043.1603748583.png",
236 | "altText": "",
237 | "width": 2048,
238 | "height": 2048
239 | }
240 | ]
241 | },
242 | {
243 | "__typename": "Product",
244 | "id": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0LzY4NjUyNzg0MzU1MTU=",
245 | "handle": "lightweight-jacket",
246 | "title": "Lightweight Jacket",
247 | "vendor": "EincodeTest",
248 | "description": "Add a little zing to your winter wardrobe with this vibrant Winter-breaker Jacket. With a brushed fleece inside, and a relaxed unisex fit, this jacket is just the stuff of the dreams, so be quick to grab yourself one!Long sleeve ripstop jacket colorblocked in black. Rough pattern in obsidian black and brown printed throughout. Printed graphic in white throughout. Logo-woven webbing trim in white and black throughout. Bungee-style drawstring at hood featuring rubberized logo hardware. Zip closure at front. Rubberized logo appliqué at chest. Welt pockets and textile logo patch in orange at waist. Elasticized cuffs. Partially lined. Black hardware.",
249 | "descriptionHtml": "Add a little zing to your winter wardrobe with this vibrant Winter-breaker Jacket. With a brushed fleece inside, and a relaxed unisex fit, this jacket is just the stuff of the dreams, so be quick to grab yourself one!
Long sleeve ripstop jacket colorblocked in black. Rough pattern in obsidian black and brown printed throughout. Printed graphic in white throughout. Logo-woven webbing trim in white and black throughout. Bungee-style drawstring at hood featuring rubberized logo hardware. Zip closure at front. Rubberized logo appliqué at chest. Welt pockets and textile logo patch in orange at waist. Elasticized cuffs. Partially lined. Black hardware.",
250 | "priceRange": {
251 | "minVariantPrice": {
252 | "amount": "100.0",
253 | "currencyCode": "EUR"
254 | },
255 | "maxVariantPrice": {
256 | "amount": "100.0",
257 | "currencyCode": "EUR"
258 | }
259 | },
260 | "options": [
261 | {
262 | "id": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0T3B0aW9uLzg3ODk0NTgxNTc3NTU=",
263 | "name": "Size",
264 | "values": [
265 | "l",
266 | "m",
267 | "s"
268 | ]
269 | },
270 | {
271 | "id": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0T3B0aW9uLzg3ODk0NTgxOTA1MjM=",
272 | "name": "Color",
273 | "values": [
274 | "#000000",
275 | "#ffffff"
276 | ]
277 | }
278 | ],
279 | "variants": [
280 | {
281 | "id": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0VmFyaWFudC80MDQxNjM2MjQzMDY1MQ==",
282 | "productId": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0LzY4NjUyNzg0MzU1MTU=",
283 | "title": "l / #000000",
284 | "sku": "",
285 | "selectedOptions": [
286 | {
287 | "name": "Size",
288 | "value": "l"
289 | },
290 | {
291 | "name": "Color",
292 | "value": "#000000"
293 | }
294 | ],
295 | "priceV2": {
296 | "amount": "100.0",
297 | "currencyCode": "EUR"
298 | },
299 | "compareAtPriceV2": {
300 | "amount": "70.0",
301 | "currencyCode": "EUR"
302 | }
303 | },
304 | {
305 | "id": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0VmFyaWFudC80MDQxNjM2MjQ2MzQxOQ==",
306 | "productId": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0LzY4NjUyNzg0MzU1MTU=",
307 | "title": "l / #ffffff",
308 | "sku": "",
309 | "selectedOptions": [
310 | {
311 | "name": "Size",
312 | "value": "l"
313 | },
314 | {
315 | "name": "Color",
316 | "value": "#ffffff"
317 | }
318 | ],
319 | "priceV2": {
320 | "amount": "100.0",
321 | "currencyCode": "EUR"
322 | },
323 | "compareAtPriceV2": {
324 | "amount": "70.0",
325 | "currencyCode": "EUR"
326 | }
327 | },
328 | {
329 | "id": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0VmFyaWFudC80MDQxNjM2MjQ5NjE4Nw==",
330 | "productId": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0LzY4NjUyNzg0MzU1MTU=",
331 | "title": "m / #000000",
332 | "sku": "",
333 | "selectedOptions": [
334 | {
335 | "name": "Size",
336 | "value": "m"
337 | },
338 | {
339 | "name": "Color",
340 | "value": "#000000"
341 | }
342 | ],
343 | "priceV2": {
344 | "amount": "100.0",
345 | "currencyCode": "EUR"
346 | },
347 | "compareAtPriceV2": {
348 | "amount": "70.0",
349 | "currencyCode": "EUR"
350 | }
351 | },
352 | {
353 | "id": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0VmFyaWFudC80MDQxNjM2MjUyODk1NQ==",
354 | "productId": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0LzY4NjUyNzg0MzU1MTU=",
355 | "title": "m / #ffffff",
356 | "sku": "",
357 | "selectedOptions": [
358 | {
359 | "name": "Size",
360 | "value": "m"
361 | },
362 | {
363 | "name": "Color",
364 | "value": "#ffffff"
365 | }
366 | ],
367 | "priceV2": {
368 | "amount": "100.0",
369 | "currencyCode": "EUR"
370 | },
371 | "compareAtPriceV2": {
372 | "amount": "70.0",
373 | "currencyCode": "EUR"
374 | }
375 | },
376 | {
377 | "id": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0VmFyaWFudC80MDQxNjM2MjU2MTcyMw==",
378 | "productId": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0LzY4NjUyNzg0MzU1MTU=",
379 | "title": "s / #000000",
380 | "sku": "",
381 | "selectedOptions": [
382 | {
383 | "name": "Size",
384 | "value": "s"
385 | },
386 | {
387 | "name": "Color",
388 | "value": "#000000"
389 | }
390 | ],
391 | "priceV2": {
392 | "amount": "100.0",
393 | "currencyCode": "EUR"
394 | },
395 | "compareAtPriceV2": {
396 | "amount": "70.0",
397 | "currencyCode": "EUR"
398 | }
399 | },
400 | {
401 | "id": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0VmFyaWFudC80MDQxNjM2MjU5NDQ5MQ==",
402 | "productId": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0LzY4NjUyNzg0MzU1MTU=",
403 | "title": "s / #ffffff",
404 | "sku": "",
405 | "selectedOptions": [
406 | {
407 | "name": "Size",
408 | "value": "s"
409 | },
410 | {
411 | "name": "Color",
412 | "value": "#ffffff"
413 | }
414 | ],
415 | "priceV2": {
416 | "amount": "100.0",
417 | "currencyCode": "EUR"
418 | },
419 | "compareAtPriceV2": {
420 | "amount": "70.0",
421 | "currencyCode": "EUR"
422 | }
423 | }
424 | ],
425 | "images": [
426 | {
427 | "originalSrc": "Men-Jacket-Front-Black__15466.1603283963.png",
428 | "altText": "",
429 | "width": 2048,
430 | "height": 2048
431 | },
432 | {
433 | "originalSrc": "Men-Jacket-Side-Black__68202.1603283961.png",
434 | "altText": "",
435 | "width": 2048,
436 | "height": 2048
437 | },
438 | {
439 | "originalSrc": "Men-Jacket-Back-Black__33864.1603283963.png",
440 | "altText": "",
441 | "width": 2048,
442 | "height": 2048
443 | },
444 | {
445 | "originalSrc": "Men-Jacket-Front-White__95300.1603283963.png",
446 | "altText": "",
447 | "width": 2048,
448 | "height": 2048
449 | },
450 | {
451 | "originalSrc": "Men-Jacket-Side-White__91924.1603283962.png",
452 | "altText": "",
453 | "width": 2048,
454 | "height": 2048
455 | },
456 | {
457 | "originalSrc": "Men-Jacket-Back-White__02866.1603283963.png",
458 | "altText": "",
459 | "width": 2048,
460 | "height": 2048
461 | }
462 | ]
463 | },
464 | {
465 | "__typename": "Product",
466 | "id": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0LzY4NjUyNzk2ODA2OTk=",
467 | "handle": "t-shirt",
468 | "title": "T-Shirt",
469 | "vendor": "EincodeTest",
470 | "description": "This t-shirt is a must-have in your wardrobe, combining the timeless fit of a classic tee with an intricate embroidered detail that brings the shirt to a whole new level. It's soft and durable, so be prepared to have a new favorite t-shirt!",
471 | "descriptionHtml": "This t-shirt is a must-have in your wardrobe, combining the timeless fit of a classic tee with an intricate embroidered detail that brings the shirt to a whole new level. It's soft and durable, so be prepared to have a new favorite t-shirt!
",
472 | "priceRange": {
473 | "minVariantPrice": {
474 | "amount": "50.0",
475 | "currencyCode": "EUR"
476 | },
477 | "maxVariantPrice": {
478 | "amount": "50.0",
479 | "currencyCode": "EUR"
480 | }
481 | },
482 | "options": [
483 | {
484 | "id": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0T3B0aW9uLzg3ODk0NjAxNTY2MDM=",
485 | "name": "Size",
486 | "values": [
487 | "m",
488 | "s"
489 | ]
490 | },
491 | {
492 | "id": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0T3B0aW9uLzg3ODk0NjAxODkzNzE=",
493 | "name": "Color",
494 | "values": [
495 | "#000000"
496 | ]
497 | }
498 | ],
499 | "variants": [
500 | {
501 | "id": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0VmFyaWFudC80MDQxNjM4NTE3MTY0Mw==",
502 | "productId": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0LzY4NjUyNzk2ODA2OTk=",
503 | "title": "m / #000000",
504 | "sku": "",
505 | "selectedOptions": [
506 | {
507 | "name": "Size",
508 | "value": "m"
509 | },
510 | {
511 | "name": "Color",
512 | "value": "#000000"
513 | }
514 | ],
515 | "priceV2": {
516 | "amount": "50.0",
517 | "currencyCode": "EUR"
518 | },
519 | "compareAtPriceV2": {
520 | "amount": "30.0",
521 | "currencyCode": "EUR"
522 | }
523 | },
524 | {
525 | "id": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0VmFyaWFudC80MDQxNjM4NTIwNDQxMQ==",
526 | "productId": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0LzY4NjUyNzk2ODA2OTk=",
527 | "title": "s / #000000",
528 | "sku": "",
529 | "selectedOptions": [
530 | {
531 | "name": "Size",
532 | "value": "s"
533 | },
534 | {
535 | "name": "Color",
536 | "value": "#000000"
537 | }
538 | ],
539 | "priceV2": {
540 | "amount": "50.0",
541 | "currencyCode": "EUR"
542 | },
543 | "compareAtPriceV2": {
544 | "amount": "30.0",
545 | "currencyCode": "EUR"
546 | }
547 | }
548 | ],
549 | "images": [
550 | {
551 | "originalSrc": "Men-TShirt-Black-Front__70046.1603748348.png",
552 | "altText": "",
553 | "width": 2048,
554 | "height": 2048
555 | },
556 | {
557 | "originalSrc": "Men-TShirt-Black-Left-Side__72119.1603284781.png",
558 | "altText": "",
559 | "width": 2048,
560 | "height": 2048
561 | },
562 | {
563 | "originalSrc": "Men-TShirt-Black-Back__57266.1603748348.png",
564 | "altText": "",
565 | "width": 2048,
566 | "height": 2048
567 | },
568 | {
569 | "originalSrc": "Men-TShirt-White-Front__99616.1603284781.png",
570 | "altText": "",
571 | "width": 2048,
572 | "height": 2048
573 | },
574 | {
575 | "originalSrc": "Men-TShirt-White-Left-Side__69000.1603284781.png",
576 | "altText": "",
577 | "width": 2048,
578 | "height": 2048
579 | },
580 | {
581 | "originalSrc": "Men-TShirt-White-Back__33450.1603284781.png",
582 | "altText": "",
583 | "width": 2048,
584 | "height": 2048
585 | }
586 | ]
587 | }
588 | ]
589 | }
590 |
--------------------------------------------------------------------------------
/default-data.js:
--------------------------------------------------------------------------------
1 |
2 | exports.DEF_CHECKOUT = {
3 | "id": "test_id_checkout",
4 | "__typename": "Checkout",
5 | "webUrl": "test_webUrl",
6 | "subtotalPriceV2": {
7 | "amount": "0.0",
8 | "currencyCode": "EUR"
9 | },
10 | "totalTaxV2": {
11 | "amount": "0.0",
12 | "currencyCode": "EUR"
13 | },
14 | "totalPriceV2": {
15 | "amount": "0.0",
16 | "currencyCode": "EUR"
17 | },
18 | "completedAt": null,
19 | "createdAt": "2021-06-02T22:32:40Z",
20 | "taxesIncluded": true,
21 | "lineItems": []
22 | }
23 |
--------------------------------------------------------------------------------
/examples/links/index.md:
--------------------------------------------------------------------------------
1 | [Shopify GraphQL Storefront](https://shopify.dev/docs/storefront-api/reference)
2 |
3 | [Api Explorer](https://shopify.dev/graphiql/storefront-graphiql)
4 |
--------------------------------------------------------------------------------
/examples/mutations/checkoutCreate.js:
--------------------------------------------------------------------------------
1 | `
2 | mutation {
3 | checkoutCreate {
4 | checkoutUserErrors {
5 | field
6 | message
7 | }
8 | checkout {
9 | id
10 | webUrl
11 | subtotalPriceV2{
12 | amount
13 | currencyCode
14 | }
15 | totalTaxV2 {
16 | amount
17 | currencyCode
18 | }
19 | totalPriceV2 {
20 | amount
21 | currencyCode
22 | }
23 | completedAt
24 | createdAt
25 | taxesIncluded
26 | lineItems(first: 250) {
27 | pageInfo {
28 | hasNextPage
29 | hasPreviousPage
30 | }
31 | edges {
32 | node {
33 | id
34 | title
35 | variant {
36 | id
37 | sku
38 | title
39 | image {
40 | originalSrc
41 | altText
42 | width
43 | height
44 | }
45 | priceV2{
46 | amount
47 | currencyCode
48 | }
49 | compareAtPriceV2{
50 | amount
51 | currencyCode
52 | }
53 | product {
54 | handle
55 | }
56 | }
57 | quantity
58 | }
59 | }
60 | }
61 | }
62 | }
63 | }
64 | `
65 |
--------------------------------------------------------------------------------
/examples/mutations/checkoutLineItemsAdd.js:
--------------------------------------------------------------------------------
1 | `
2 | mutation(
3 | $checkoutId: ID = "123",
4 | $lineItems: [CheckoutLineItemInput] = [{quantity: 1, variantId: "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0VmFyaWFudC80MDQxNDM2NjMzNTE2Mw=="}]) {
5 | checkoutLineItemsAdd(checkoutId: $checkoutId, lineItems: $lineItems) {
6 | checkoutUserErrors {
7 | field
8 | message
9 | }
10 | checkout {
11 | id
12 | webUrl
13 | subtotalPriceV2{
14 | amount
15 | currencyCode
16 | }
17 | totalTaxV2 {
18 | amount
19 | currencyCode
20 | }
21 | totalPriceV2 {
22 | amount
23 | currencyCode
24 | }
25 | completedAt
26 | createdAt
27 | taxesIncluded
28 | lineItems(first: 250) {
29 | pageInfo {
30 | hasNextPage
31 | hasPreviousPage
32 | }
33 | edges {
34 | node {
35 | id
36 | title
37 | variant {
38 | id
39 | sku
40 | title
41 | image {
42 | originalSrc
43 | altText
44 | width
45 | height
46 | }
47 | priceV2{
48 | amount
49 | currencyCode
50 | }
51 | compareAtPriceV2{
52 | amount
53 | currencyCode
54 | }
55 | product {
56 | handle
57 | }
58 | }
59 | quantity
60 | }
61 | }
62 | }
63 | }
64 | }
65 | }
66 | `
67 |
--------------------------------------------------------------------------------
/examples/mutations/checkoutLineItemsRemove.js:
--------------------------------------------------------------------------------
1 | `
2 | mutation(
3 | $checkoutId: ID = "123",
4 | $lineItemIds: [ID] = ["Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0VmFyaWFudC80MDQxNDM2NjMzNTE2Mw==__LI"]) {
5 | checkoutLineItemsRemove(checkoutId: $checkoutId, lineItemIds: $lineItemIds) {
6 | checkoutUserErrors {
7 | field
8 | message
9 | }
10 | checkout {
11 | id
12 | webUrl
13 | subtotalPriceV2 {
14 | amount
15 | currencyCode
16 | }
17 | totalTaxV2 {
18 | amount
19 | currencyCode
20 | }
21 | totalPriceV2 {
22 | amount
23 | currencyCode
24 | }
25 | completedAt
26 | createdAt
27 | taxesIncluded
28 | lineItems(first: 250) {
29 | pageInfo {
30 | hasNextPage
31 | hasPreviousPage
32 | }
33 | edges {
34 | node {
35 | id
36 | title
37 | variant {
38 | id
39 | sku
40 | title
41 | image {
42 | originalSrc
43 | altText
44 | width
45 | height
46 | }
47 | priceV2{
48 | amount
49 | currencyCode
50 | }
51 | compareAtPriceV2{
52 | amount
53 | currencyCode
54 | }
55 | product {
56 | handle
57 | }
58 | }
59 | quantity
60 | }
61 | }
62 | }
63 | }
64 | }
65 | }
66 | `
67 |
--------------------------------------------------------------------------------
/examples/mutations/checkoutLineItemsUpdate.js:
--------------------------------------------------------------------------------
1 | `
2 | mutation(
3 | $checkoutId: ID = "123",
4 | $lineItems: [CheckoutLineItemUpdateInput] = [{quantity: 3, id: "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0VmFyaWFudC80MDQxNDM2NjMzNTE2Mw==__LI"}]) {
5 | checkoutLineItemsUpdate(checkoutId: $checkoutId, lineItems: $lineItems) {
6 | checkoutUserErrors {
7 | field
8 | message
9 | }
10 | checkout {
11 | id
12 | webUrl
13 | subtotalPriceV2{
14 | amount
15 | currencyCode
16 | }
17 | totalTaxV2 {
18 | amount
19 | currencyCode
20 | }
21 | totalPriceV2 {
22 | amount
23 | currencyCode
24 | }
25 | completedAt
26 | createdAt
27 | taxesIncluded
28 | lineItems(first: 250) {
29 | pageInfo {
30 | hasNextPage
31 | hasPreviousPage
32 | }
33 | edges {
34 | node {
35 | id
36 | title
37 | variant {
38 | id
39 | sku
40 | title
41 | image {
42 | originalSrc
43 | altText
44 | width
45 | height
46 | }
47 | priceV2{
48 | amount
49 | currencyCode
50 | }
51 | compareAtPriceV2{
52 | amount
53 | currencyCode
54 | }
55 | product {
56 | handle
57 | }
58 | }
59 | quantity
60 | }
61 | }
62 | }
63 | }
64 | }
65 | }
66 | `
67 |
--------------------------------------------------------------------------------
/examples/queries/hello.js:
--------------------------------------------------------------------------------
1 | `query { hello }`
2 |
--------------------------------------------------------------------------------
/examples/queries/node.js:
--------------------------------------------------------------------------------
1 | `
2 | query($checkoutId: ID = "test_id_checkout"){
3 | node(id: $checkoutId) {
4 | ... on Checkout {
5 | id
6 | webUrl
7 | subtotalPriceV2{
8 | amount
9 | currencyCode
10 | }
11 | totalTaxV2 {
12 | amount
13 | currencyCode
14 | }
15 | totalPriceV2 {
16 | amount
17 | currencyCode
18 | }
19 | completedAt
20 | createdAt
21 | taxesIncluded
22 | lineItems(first: 250) {
23 | pageInfo {
24 | hasNextPage
25 | hasPreviousPage
26 | }
27 | edges {
28 | node {
29 | id
30 | title
31 | variant {
32 | id
33 | sku
34 | title
35 | image {
36 | originalSrc
37 | altText
38 | width
39 | height
40 | }
41 | priceV2{
42 | amount
43 | currencyCode
44 | }
45 | compareAtPriceV2{
46 | amount
47 | currencyCode
48 | }
49 | product {
50 | handle
51 | }
52 | }
53 | quantity
54 | }
55 | }
56 | }
57 | }
58 | }
59 | }
60 | `
61 |
--------------------------------------------------------------------------------
/examples/queries/productByHandle.js:
--------------------------------------------------------------------------------
1 | `
2 | query productByHandle {
3 | productByHandle(handle: "cool-hat") {
4 | id
5 | handle
6 | title
7 | vendor
8 | description
9 | descriptionHtml
10 | options {
11 | id
12 | name
13 | values
14 | }
15 | priceRange {
16 | minVariantPrice {
17 | amount
18 | currencyCode
19 | }
20 | maxVariantPrice {
21 | amount
22 | currencyCode
23 | }
24 | }
25 | variants(first: 250) {
26 | pageInfo {
27 | hasNextPage
28 | hasPreviousPage
29 | }
30 | edges {
31 | node {
32 | id
33 | title
34 | sku
35 | selectedOptions {
36 | name
37 | value
38 | }
39 | priceV2 {
40 | amount
41 | currencyCode
42 | }
43 | compareAtPriceV2 {
44 | amount
45 | currencyCode
46 | }
47 | }
48 | }
49 | }
50 | images(first: 250) {
51 | pageInfo {
52 | hasNextPage
53 | hasPreviousPage
54 | }
55 | edges {
56 | node {
57 | originalSrc
58 | altText
59 | width
60 | height
61 | }
62 | }
63 | }
64 | }
65 | }
66 | `
67 |
--------------------------------------------------------------------------------
/examples/queries/products.js:
--------------------------------------------------------------------------------
1 | `
2 | query getAllProducts($first: Int = 250) {
3 | products(first: $first) {
4 | pageInfo {
5 | hasNextPage
6 | hasPreviousPage
7 | }
8 | edges {
9 | node {
10 | id
11 | title
12 | vendor
13 | handle
14 | description
15 | priceRange {
16 | minVariantPrice {
17 | amount
18 | currencyCode
19 | }
20 | }
21 | images(first: 1) {
22 | pageInfo {
23 | hasNextPage
24 | hasPreviousPage
25 | }
26 | edges {
27 | node {
28 | originalSrc
29 | altText
30 | width
31 | height
32 | }
33 | }
34 | }
35 | }
36 | }
37 | }
38 | }
39 | `
40 |
--------------------------------------------------------------------------------
/index.js:
--------------------------------------------------------------------------------
1 | const express = require('express')
2 | const { ApolloServer, gql } = require('apollo-server-express')
3 | const { DEF_CHECKOUT } = require("./default-data")
4 |
5 | const fs = require('fs'),
6 | path = require('path'),
7 | filePath = path.join(__dirname, "data", 'index.json');
8 |
9 | const convertNodeToCursor = (node, field = "id") => {
10 | return Buffer.from(node[field], 'binary').toString('base64')
11 | }
12 |
13 | const convertCursorToNodeId = (cursor, field = "id") => {
14 | return Buffer.from(cursor[field], 'base64').toString('binary')
15 | }
16 |
17 | // Get Custom Data From JSON -> getData("products")
18 | const getData = (type) => {
19 | return new Promise((res, rej) => {
20 | fs.readFile(filePath, {encoding: 'utf-8'}, function(err, sData){
21 | if (err) {
22 | return rej("Cannot read the file!")
23 | }
24 |
25 | const data = JSON.parse(sData)
26 | return res(data)
27 | })
28 | })
29 | }
30 |
31 | const saveData = (data) => {
32 | const stringifiedData = JSON.stringify(data, null, 2)
33 | return new Promise((res, rej) => {
34 | fs.writeFile(filePath, stringifiedData, function(err){
35 | if (err) {
36 | return rej("Cannot read the file!")
37 | }
38 |
39 | return res("Data Saved!")
40 | })
41 | })
42 | }
43 |
44 | const getTotalPrice = (lineItems) => {
45 | return lineItems.reduce((acc, li) => {
46 | return acc + Number(li.variant.priceV2.amount) * li.quantity
47 | }, 0)
48 | }
49 |
50 | const getAllProducts = (args) => {
51 | let { first = 30, afterCursor } = args
52 | let afterIndex = 0
53 | return new Promise((res, rej) => {
54 | fs.readFile(filePath, {encoding: 'utf-8'}, function(err, sData){
55 | if (!err) {
56 | const data = JSON.parse(sData)["products"]
57 |
58 | if (typeof afterCursor === 'string') {
59 | /* Extracting nodeId from afterCursor */
60 | let nodeId = convertCursorToNodeId(afterCursor)
61 | /* Finding the index of nodeId */
62 | let nodeIndex = data.findIndex(d => d.id === nodeId)
63 | if (nodeIndex >= 0) {
64 | afterIndex = nodeIndex + 1 // 1 is added to exclude the afterIndex node and include items after it
65 | }
66 | }
67 |
68 | const slicedData = data.slice(afterIndex, afterIndex + first)
69 | const edges = slicedData.map (node => {
70 | return {
71 | node,
72 | cursor: convertNodeToCursor(node)
73 | }
74 | })
75 |
76 | let startCursor, endCursor = null
77 | if (edges.length > 0) {
78 | startCursor = convertNodeToCursor(edges[0].node)
79 | endCursor = convertNodeToCursor(edges[edges.length - 1].node)
80 | }
81 | let hasNextPage = data.length > afterIndex + first
82 | let hasPreviousPage = afterIndex > 0
83 |
84 | res({
85 | totalCount: data.length,
86 | edges,
87 | pageInfo: {
88 | startCursor,
89 | endCursor,
90 | hasNextPage,
91 | hasPreviousPage
92 | }
93 | })
94 | } else {
95 | rej("File Error!")
96 | }
97 | });
98 | })
99 | }
100 |
101 | const typeDefs = gql`
102 | type PageInfo {
103 | startCursor: String
104 | endCursor: String
105 | hasNextPage: Boolean
106 | hasPreviousPage: Boolean
107 | }
108 |
109 | type MoneyV2 {
110 | amount: Int
111 | currencyCode: String
112 | }
113 |
114 | type PriceRange {
115 | value: Int
116 | minVariantPrice: MoneyV2
117 | maxVariantPrice: MoneyV2
118 | }
119 |
120 | type ImageEdge {
121 | cursor: String!
122 | node: Image
123 | }
124 |
125 | type ImageConnection {
126 | pageInfo: PageInfo!
127 | edges: [ImageEdge]
128 | }
129 |
130 | type Image {
131 | pageInfo: PageInfo!
132 | originalSrc: String
133 | altText: String
134 | height: Int
135 | width: Int
136 | }
137 |
138 | type Option {
139 | id: ID
140 | name: String
141 | values: [String]
142 | }
143 |
144 | type SelectedOption {
145 | name: String
146 | value: String
147 | }
148 |
149 | type Variant {
150 | id: ID
151 | title: String
152 | sku: String
153 | selectedOptions: [SelectedOption]
154 | priceV2: MoneyV2
155 | compareAtPriceV2: MoneyV2
156 | image: Image
157 | product: Product
158 | }
159 |
160 | type VariantEdge {
161 | cursor: String!
162 | node: Variant
163 | }
164 |
165 | type VariantConnection {
166 | pageInfo: PageInfo!
167 | edges: [VariantEdge]
168 | }
169 |
170 | type Value {
171 | label: String
172 | isDefaul: Boolean
173 | hexColors: [String]
174 | }
175 |
176 | type ProductOption {
177 | entityId: Int
178 | displayName: String
179 | values: [Value]
180 | }
181 |
182 | interface Node {
183 | id: ID!
184 | }
185 |
186 | type ProductConnection {
187 | pageInfo: PageInfo!
188 | edges: [ProductEdge]
189 | }
190 |
191 | type ProductEdge {
192 | cursor: String!
193 | node: Product
194 | }
195 |
196 | type Product implements Node {
197 | id: ID!
198 | title: String
199 | handle: String
200 | description: String
201 | descriptionHtml: String
202 | vendor: String
203 | priceRange: PriceRange
204 | options: [Option]
205 | images(first: Int): ImageConnection
206 | variants(first: Int): VariantConnection
207 | }
208 |
209 | type CheckoutUserError {
210 | field: String
211 | message: String
212 | }
213 |
214 | type LineItem implements Node {
215 | id: ID!
216 | quantity: Int
217 | title: String
218 | unityPrice: MoneyV2
219 | variant: Variant
220 | product: Product
221 | }
222 |
223 | type LineItemEdge {
224 | cursor: String!
225 | node: LineItem
226 | }
227 |
228 | type LineItemConnection {
229 | pageInfo: PageInfo!
230 | edges: [LineItemEdge]
231 | }
232 |
233 | type Checkout implements Node {
234 | id: ID!
235 | webUrl: String
236 | subtotalPriceV2: MoneyV2
237 | totalTaxV2: MoneyV2
238 | totalPriceV2: MoneyV2
239 | completedAt: String
240 | createdAt: String
241 | taxesIncluded: Boolean
242 | lineItems(first: Int): LineItemConnection
243 | }
244 |
245 | type CheckoutResponse {
246 | checkoutUserErrors: [CheckoutUserError]
247 | checkout: Checkout
248 | }
249 |
250 | type Query {
251 | products(first: Int): ProductConnection
252 | productByHandle(handle: String): Product
253 | hello: String
254 | node(id: ID!): Node
255 | }
256 |
257 | input CheckoutLineItemInput {
258 | variantId: ID
259 | quantity: Int
260 | }
261 |
262 | input CheckoutLineItemUpdateInput {
263 | id: ID
264 | variantId: ID
265 | quantity: Int
266 | }
267 |
268 | input CheckoutCreateInput {
269 | id: ID
270 | }
271 |
272 | type Mutation {
273 | checkoutCreate(input: CheckoutCreateInput): CheckoutResponse
274 | checkoutLineItemsAdd(checkoutId: ID, lineItems: [CheckoutLineItemInput]): CheckoutResponse
275 | checkoutLineItemsUpdate(checkoutId: ID, lineItems: [CheckoutLineItemUpdateInput]): CheckoutResponse
276 | checkoutLineItemsRemove(checkoutId: ID, lineItemIds: [ID]): CheckoutResponse
277 | }
278 | `;
279 |
280 | const resolvers = {
281 | Node: {
282 | __resolveType (obj, ctx, info) {
283 | return obj.__typename; // GraphQLError is thrown
284 | }
285 | },
286 | Checkout: {
287 | lineItems: (parent, args, context, info) => {
288 | const edges = parent.lineItems.map (node => ({
289 | node,
290 | cursor: convertNodeToCursor(node, "id")
291 | }))
292 |
293 | return {
294 | edges,
295 | pageInfo: {
296 | startCursor: null,
297 | endCursor: null,
298 | hasNextPage: false,
299 | hasPreviousPage: false
300 | }
301 | }
302 | }
303 | },
304 | Product: {
305 | images: (parent, args, context, info) => {
306 | const edges = parent.images.map (node => ({
307 | node,
308 | cursor: convertNodeToCursor(node, "originalSrc")
309 | }))
310 |
311 | return {
312 | edges,
313 | pageInfo: {
314 | startCursor: null,
315 | endCursor: null,
316 | hasNextPage: false,
317 | hasPreviousPage: false
318 | }
319 | }
320 | },
321 | variants: (parent, args, context, info) => {
322 | const edges = parent.variants.map (node => {
323 |
324 | node.product = {}
325 | node.product.handle = parent.handle
326 | node.image = parent.images[0]
327 |
328 | return {
329 | node,
330 | cursor: convertNodeToCursor(node, "id")
331 | }
332 | })
333 |
334 | return {
335 | edges,
336 | pageInfo: {
337 | startCursor: null,
338 | endCursor: null,
339 | hasNextPage: false,
340 | hasPreviousPage: false
341 | }
342 | }
343 | }
344 | },
345 | Mutation: {
346 | checkoutLineItemsRemove: async (_, { checkoutId, lineItemIds }) => {
347 | const data = await getData()
348 | const { checkout } = data
349 |
350 | lineItemIds.forEach(liId => {
351 | const liIndex = checkout.lineItems.findIndex(sli => {
352 | return sli.id === liId
353 | })
354 | checkout.lineItems.splice(liIndex, 1)
355 | })
356 |
357 | checkout.totalPriceV2.amount = getTotalPrice(checkout.lineItems) || 0;
358 | checkout.subtotalPriceV2.amount = getTotalPrice(checkout.lineItems) || 0;
359 |
360 | await saveData({...data, checkout})
361 |
362 | return {
363 | checkout,
364 | checkoutUserErrors: []
365 | }
366 | },
367 | checkoutLineItemsUpdate: async (_, { checkoutId, lineItems }) => {
368 | const data = await getData()
369 | const { checkout } = data
370 | const storedLineItems = checkout.lineItems
371 |
372 | lineItems.forEach(li => {
373 | const liIndex = checkout.lineItems.findIndex(sli => {
374 | return sli.id === li.id
375 | })
376 | storedLineItems[liIndex].quantity = li.quantity
377 | if (storedLineItems[liIndex].quantity === 0) {
378 | checkout.lineItems.splice(liIndex, 1)
379 | }
380 | })
381 |
382 | checkout.totalPriceV2.amount = getTotalPrice(checkout.lineItems) || 0;;
383 | checkout.subtotalPriceV2.amount = getTotalPrice(checkout.lineItems) || 0;
384 |
385 | await saveData({...data, checkout})
386 |
387 | return {
388 | checkout,
389 | checkoutUserErrors: []
390 | }
391 | },
392 | checkoutLineItemsAdd: async (_, { checkoutId, lineItems }) => {
393 | const data = await getData()
394 | const { checkout } = data
395 |
396 | if (!checkout) {
397 | throw new Error("Checkout is not created!")
398 | }
399 |
400 | function findVariantsProduct(products, variantId) {
401 | const product = products.filter(p => {
402 | return p.variants.find(v => v.id === variantId)
403 | })[0] || null
404 |
405 | return product
406 | }
407 |
408 | if (checkout.lineItems && checkout.lineItems.length > 0) {
409 | checkout.lineItems.forEach((chLi, index) => {
410 | const existingLiIndex = lineItems.findIndex(li => li.variantId === chLi.variantId)
411 |
412 | if (existingLiIndex >= 0) {
413 | checkout.lineItems[index].quantity++
414 | lineItems.splice(existingLiIndex, 1)
415 | }
416 | })
417 | }
418 |
419 | lineItems.forEach(li => {
420 | const product = findVariantsProduct(data["products"], li.variantId)
421 | li.id = li.variantId + "__LI"
422 | li.title = product.title
423 | li.variant = product.variants.find(v => {
424 | return v.id === li.variantId
425 | })
426 | li.variant.image = product.images[0]
427 | li.product = product
428 | })
429 |
430 | checkout.lineItems = [...checkout.lineItems, ...lineItems]
431 | checkout.totalPriceV2.amount =getTotalPrice(checkout.lineItems) || 0;
432 | checkout.subtotalPriceV2.amount = getTotalPrice(checkout.lineItems) || 0;
433 | await saveData({
434 | ...data,
435 | checkout
436 | })
437 |
438 | return {
439 | checkout,
440 | checkoutUserErrors: []
441 | }
442 | },
443 | checkoutCreate: async () => {
444 | const data = await getData()
445 | const { checkout } = data
446 |
447 | if (!checkout.id) {
448 | await saveData({
449 | ...data,
450 | checkout: DEF_CHECKOUT
451 | })
452 | }
453 | return {
454 | checkout: !checkout.id ? DEF_CHECKOUT : checkout,
455 | checkoutUserErrors: []
456 | }
457 | }
458 | },
459 | Query: {
460 | node: async (_, { id }) => {
461 | const data = await getData()
462 | let foundNode = null;
463 |
464 | Object.keys(data).forEach(dataType => {
465 | const entity = data[dataType]
466 | if (foundNode) { return; }
467 | if (Array.isArray(entity)) {
468 | foundNode = entity.find(e => e.id === id)
469 | } else if (entity.id === id) {
470 | foundNode = entity
471 | }
472 | })
473 |
474 | return foundNode
475 | },
476 | hello: () => {
477 | return 'Hello world!';
478 | },
479 | productByHandle: async (parent, args, ...rest) => {
480 | let { handle } = args
481 | const products = await getAllProducts(args)
482 |
483 | const product = products.edges.find(e => e.node.handle === handle)?.node
484 | return product || null
485 | },
486 | products: (parent, args, context, info) => {
487 | return getAllProducts(args)
488 | }
489 | },
490 | };
491 |
492 | const server = new ApolloServer({ typeDefs, resolvers })
493 | server.start()
494 |
495 | const app = express();
496 | server.applyMiddleware({ app });
497 |
498 |
499 | app.listen(4000, () => {
500 | console.log(`🚀 Server ready at http://localhost:4000${server.graphqlPath}`)
501 | })
502 |
--------------------------------------------------------------------------------
/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "server",
3 | "version": "1.0.0",
4 | "lockfileVersion": 1,
5 | "requires": true,
6 | "dependencies": {
7 | "@apollo/protobufjs": {
8 | "version": "1.2.2",
9 | "resolved": "https://registry.npmjs.org/@apollo/protobufjs/-/protobufjs-1.2.2.tgz",
10 | "integrity": "sha512-vF+zxhPiLtkwxONs6YanSt1EpwpGilThpneExUN5K3tCymuxNnVq2yojTvnpRjv2QfsEIt/n7ozPIIzBLwGIDQ==",
11 | "requires": {
12 | "@protobufjs/aspromise": "^1.1.2",
13 | "@protobufjs/base64": "^1.1.2",
14 | "@protobufjs/codegen": "^2.0.4",
15 | "@protobufjs/eventemitter": "^1.1.0",
16 | "@protobufjs/fetch": "^1.1.0",
17 | "@protobufjs/float": "^1.0.2",
18 | "@protobufjs/inquire": "^1.1.0",
19 | "@protobufjs/path": "^1.1.2",
20 | "@protobufjs/pool": "^1.1.0",
21 | "@protobufjs/utf8": "^1.1.0",
22 | "@types/long": "^4.0.0",
23 | "@types/node": "^10.1.0",
24 | "long": "^4.0.0"
25 | },
26 | "dependencies": {
27 | "@types/node": {
28 | "version": "10.17.60",
29 | "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz",
30 | "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw=="
31 | }
32 | }
33 | },
34 | "@apollographql/apollo-tools": {
35 | "version": "0.5.1",
36 | "resolved": "https://registry.npmjs.org/@apollographql/apollo-tools/-/apollo-tools-0.5.1.tgz",
37 | "integrity": "sha512-ZII+/xUFfb9ezDU2gad114+zScxVFMVlZ91f8fGApMzlS1kkqoyLnC4AJaQ1Ya/X+b63I20B4Gd+eCL8QuB4sA=="
38 | },
39 | "@apollographql/graphql-playground-html": {
40 | "version": "1.6.27",
41 | "resolved": "https://registry.npmjs.org/@apollographql/graphql-playground-html/-/graphql-playground-html-1.6.27.tgz",
42 | "integrity": "sha512-tea2LweZvn6y6xFV11K0KC8ETjmm52mQrW+ezgB2O/aTQf8JGyFmMcRPFgUaQZeHbWdm8iisDC6EjOKsXu0nfw==",
43 | "requires": {
44 | "xss": "^1.0.8"
45 | }
46 | },
47 | "@apollographql/graphql-upload-8-fork": {
48 | "version": "8.1.3",
49 | "resolved": "https://registry.npmjs.org/@apollographql/graphql-upload-8-fork/-/graphql-upload-8-fork-8.1.3.tgz",
50 | "integrity": "sha512-ssOPUT7euLqDXcdVv3Qs4LoL4BPtfermW1IOouaqEmj36TpHYDmYDIbKoSQxikd9vtMumFnP87OybH7sC9fJ6g==",
51 | "requires": {
52 | "@types/express": "*",
53 | "@types/fs-capacitor": "*",
54 | "@types/koa": "*",
55 | "busboy": "^0.3.1",
56 | "fs-capacitor": "^2.0.4",
57 | "http-errors": "^1.7.3",
58 | "object-path": "^0.11.4"
59 | }
60 | },
61 | "@josephg/resolvable": {
62 | "version": "1.0.1",
63 | "resolved": "https://registry.npmjs.org/@josephg/resolvable/-/resolvable-1.0.1.tgz",
64 | "integrity": "sha512-CtzORUwWTTOTqfVtHaKRJ0I1kNQd1bpn3sUh8I3nJDVY+5/M/Oe1DnEWzPQvqq/xPIIkzzzIP7mfCoAjFRvDhg=="
65 | },
66 | "@protobufjs/aspromise": {
67 | "version": "1.1.2",
68 | "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz",
69 | "integrity": "sha1-m4sMxmPWaafY9vXQiToU00jzD78="
70 | },
71 | "@protobufjs/base64": {
72 | "version": "1.1.2",
73 | "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz",
74 | "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg=="
75 | },
76 | "@protobufjs/codegen": {
77 | "version": "2.0.4",
78 | "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz",
79 | "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg=="
80 | },
81 | "@protobufjs/eventemitter": {
82 | "version": "1.1.0",
83 | "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz",
84 | "integrity": "sha1-NVy8mLr61ZePntCV85diHx0Ga3A="
85 | },
86 | "@protobufjs/fetch": {
87 | "version": "1.1.0",
88 | "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz",
89 | "integrity": "sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU=",
90 | "requires": {
91 | "@protobufjs/aspromise": "^1.1.1",
92 | "@protobufjs/inquire": "^1.1.0"
93 | }
94 | },
95 | "@protobufjs/float": {
96 | "version": "1.0.2",
97 | "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz",
98 | "integrity": "sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E="
99 | },
100 | "@protobufjs/inquire": {
101 | "version": "1.1.0",
102 | "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz",
103 | "integrity": "sha1-/yAOPnzyQp4tyvwRQIKOjMY48Ik="
104 | },
105 | "@protobufjs/path": {
106 | "version": "1.1.2",
107 | "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz",
108 | "integrity": "sha1-bMKyDFya1q0NzP0hynZz2Nf79o0="
109 | },
110 | "@protobufjs/pool": {
111 | "version": "1.1.0",
112 | "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz",
113 | "integrity": "sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q="
114 | },
115 | "@protobufjs/utf8": {
116 | "version": "1.1.0",
117 | "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz",
118 | "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA="
119 | },
120 | "@types/accepts": {
121 | "version": "1.3.5",
122 | "resolved": "https://registry.npmjs.org/@types/accepts/-/accepts-1.3.5.tgz",
123 | "integrity": "sha512-jOdnI/3qTpHABjM5cx1Hc0sKsPoYCp+DP/GJRGtDlPd7fiV9oXGGIcjW/ZOxLIvjGz8MA+uMZI9metHlgqbgwQ==",
124 | "requires": {
125 | "@types/node": "*"
126 | }
127 | },
128 | "@types/body-parser": {
129 | "version": "1.19.0",
130 | "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.0.tgz",
131 | "integrity": "sha512-W98JrE0j2K78swW4ukqMleo8R7h/pFETjM2DQ90MF6XK2i4LO4W3gQ71Lt4w3bfm2EvVSyWHplECvB5sK22yFQ==",
132 | "requires": {
133 | "@types/connect": "*",
134 | "@types/node": "*"
135 | }
136 | },
137 | "@types/connect": {
138 | "version": "3.4.34",
139 | "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.34.tgz",
140 | "integrity": "sha512-ePPA/JuI+X0vb+gSWlPKOY0NdNAie/rPUqX2GUPpbZwiKTkSPhjXWuee47E4MtE54QVzGCQMQkAL6JhV2E1+cQ==",
141 | "requires": {
142 | "@types/node": "*"
143 | }
144 | },
145 | "@types/content-disposition": {
146 | "version": "0.5.3",
147 | "resolved": "https://registry.npmjs.org/@types/content-disposition/-/content-disposition-0.5.3.tgz",
148 | "integrity": "sha512-P1bffQfhD3O4LW0ioENXUhZ9OIa0Zn+P7M+pWgkCKaT53wVLSq0mrKksCID/FGHpFhRSxRGhgrQmfhRuzwtKdg=="
149 | },
150 | "@types/cookies": {
151 | "version": "0.7.6",
152 | "resolved": "https://registry.npmjs.org/@types/cookies/-/cookies-0.7.6.tgz",
153 | "integrity": "sha512-FK4U5Qyn7/Sc5ih233OuHO0qAkOpEcD/eG6584yEiLKizTFRny86qHLe/rej3HFQrkBuUjF4whFliAdODbVN/w==",
154 | "requires": {
155 | "@types/connect": "*",
156 | "@types/express": "*",
157 | "@types/keygrip": "*",
158 | "@types/node": "*"
159 | }
160 | },
161 | "@types/cors": {
162 | "version": "2.8.10",
163 | "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.10.tgz",
164 | "integrity": "sha512-C7srjHiVG3Ey1nR6d511dtDkCEjxuN9W1HWAEjGq8kpcwmNM6JJkpC0xvabM7BXTG2wDq8Eu33iH9aQKa7IvLQ=="
165 | },
166 | "@types/express": {
167 | "version": "4.17.11",
168 | "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.11.tgz",
169 | "integrity": "sha512-no+R6rW60JEc59977wIxreQVsIEOAYwgCqldrA/vkpCnbD7MqTefO97lmoBe4WE0F156bC4uLSP1XHDOySnChg==",
170 | "requires": {
171 | "@types/body-parser": "*",
172 | "@types/express-serve-static-core": "^4.17.18",
173 | "@types/qs": "*",
174 | "@types/serve-static": "*"
175 | }
176 | },
177 | "@types/express-serve-static-core": {
178 | "version": "4.17.19",
179 | "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.19.tgz",
180 | "integrity": "sha512-DJOSHzX7pCiSElWaGR8kCprwibCB/3yW6vcT8VG3P0SJjnv19gnWG/AZMfM60Xj/YJIp/YCaDHyvzsFVeniARA==",
181 | "requires": {
182 | "@types/node": "*",
183 | "@types/qs": "*",
184 | "@types/range-parser": "*"
185 | }
186 | },
187 | "@types/fs-capacitor": {
188 | "version": "2.0.0",
189 | "resolved": "https://registry.npmjs.org/@types/fs-capacitor/-/fs-capacitor-2.0.0.tgz",
190 | "integrity": "sha512-FKVPOCFbhCvZxpVAMhdBdTfVfXUpsh15wFHgqOKxh9N9vzWZVuWCSijZ5T4U34XYNnuj2oduh6xcs1i+LPI+BQ==",
191 | "requires": {
192 | "@types/node": "*"
193 | }
194 | },
195 | "@types/http-assert": {
196 | "version": "1.5.1",
197 | "resolved": "https://registry.npmjs.org/@types/http-assert/-/http-assert-1.5.1.tgz",
198 | "integrity": "sha512-PGAK759pxyfXE78NbKxyfRcWYA/KwW17X290cNev/qAsn9eQIxkH4shoNBafH37wewhDG/0p1cHPbK6+SzZjWQ=="
199 | },
200 | "@types/http-errors": {
201 | "version": "1.8.0",
202 | "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-1.8.0.tgz",
203 | "integrity": "sha512-2aoSC4UUbHDj2uCsCxcG/vRMXey/m17bC7UwitVm5hn22nI8O8Y9iDpA76Orc+DWkQ4zZrOKEshCqR/jSuXAHA=="
204 | },
205 | "@types/keygrip": {
206 | "version": "1.0.2",
207 | "resolved": "https://registry.npmjs.org/@types/keygrip/-/keygrip-1.0.2.tgz",
208 | "integrity": "sha512-GJhpTepz2udxGexqos8wgaBx4I/zWIDPh/KOGEwAqtuGDkOUJu5eFvwmdBX4AmB8Odsr+9pHCQqiAqDL/yKMKw=="
209 | },
210 | "@types/koa": {
211 | "version": "2.13.3",
212 | "resolved": "https://registry.npmjs.org/@types/koa/-/koa-2.13.3.tgz",
213 | "integrity": "sha512-TaujBV+Dhe/FvmSMZJtCFBms+bqQacgUebk/M2C2tq8iGmHE/DDf4DcW2Hc7NqusVZmy5xzrWOjtdPKNP+fTfw==",
214 | "requires": {
215 | "@types/accepts": "*",
216 | "@types/content-disposition": "*",
217 | "@types/cookies": "*",
218 | "@types/http-assert": "*",
219 | "@types/http-errors": "*",
220 | "@types/keygrip": "*",
221 | "@types/koa-compose": "*",
222 | "@types/node": "*"
223 | }
224 | },
225 | "@types/koa-compose": {
226 | "version": "3.2.5",
227 | "resolved": "https://registry.npmjs.org/@types/koa-compose/-/koa-compose-3.2.5.tgz",
228 | "integrity": "sha512-B8nG/OoE1ORZqCkBVsup/AKcvjdgoHnfi4pZMn5UwAPCbhk/96xyv284eBYW8JlQbQ7zDmnpFr68I/40mFoIBQ==",
229 | "requires": {
230 | "@types/koa": "*"
231 | }
232 | },
233 | "@types/long": {
234 | "version": "4.0.1",
235 | "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.1.tgz",
236 | "integrity": "sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w=="
237 | },
238 | "@types/mime": {
239 | "version": "1.3.2",
240 | "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz",
241 | "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw=="
242 | },
243 | "@types/node": {
244 | "version": "15.12.1",
245 | "resolved": "https://registry.npmjs.org/@types/node/-/node-15.12.1.tgz",
246 | "integrity": "sha512-zyxJM8I1c9q5sRMtVF+zdd13Jt6RU4r4qfhTd7lQubyThvLfx6yYekWSQjGCGV2Tkecgxnlpl/DNlb6Hg+dmEw=="
247 | },
248 | "@types/qs": {
249 | "version": "6.9.6",
250 | "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.6.tgz",
251 | "integrity": "sha512-0/HnwIfW4ki2D8L8c9GVcG5I72s9jP5GSLVF0VIXDW00kmIpA6O33G7a8n59Tmh7Nz0WUC3rSb7PTY/sdW2JzA=="
252 | },
253 | "@types/range-parser": {
254 | "version": "1.2.3",
255 | "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.3.tgz",
256 | "integrity": "sha512-ewFXqrQHlFsgc09MK5jP5iR7vumV/BYayNC6PgJO2LPe8vrnNFyjQjSppfEngITi0qvfKtzFvgKymGheFM9UOA=="
257 | },
258 | "@types/serve-static": {
259 | "version": "1.13.9",
260 | "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.9.tgz",
261 | "integrity": "sha512-ZFqF6qa48XsPdjXV5Gsz0Zqmux2PerNd3a/ktL45mHpa19cuMi/cL8tcxdAx497yRh+QtYPuofjT9oWw9P7nkA==",
262 | "requires": {
263 | "@types/mime": "^1",
264 | "@types/node": "*"
265 | }
266 | },
267 | "@types/ws": {
268 | "version": "7.4.4",
269 | "resolved": "https://registry.npmjs.org/@types/ws/-/ws-7.4.4.tgz",
270 | "integrity": "sha512-d/7W23JAXPodQNbOZNXvl2K+bqAQrCMwlh/nuQsPSQk6Fq0opHoPrUw43aHsvSbIiQPr8Of2hkFbnz1XBFVyZQ==",
271 | "requires": {
272 | "@types/node": "*"
273 | }
274 | },
275 | "@wry/equality": {
276 | "version": "0.1.11",
277 | "resolved": "https://registry.npmjs.org/@wry/equality/-/equality-0.1.11.tgz",
278 | "integrity": "sha512-mwEVBDUVODlsQQ5dfuLUS5/Tf7jqUKyhKYHmVi4fPB6bDMOfWvUPJmKgS1Z7Za/sOI3vzWt4+O7yCiL/70MogA==",
279 | "requires": {
280 | "tslib": "^1.9.3"
281 | },
282 | "dependencies": {
283 | "tslib": {
284 | "version": "1.14.1",
285 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
286 | "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
287 | }
288 | }
289 | },
290 | "accepts": {
291 | "version": "1.3.7",
292 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz",
293 | "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==",
294 | "requires": {
295 | "mime-types": "~2.1.24",
296 | "negotiator": "0.6.2"
297 | }
298 | },
299 | "apollo-cache-control": {
300 | "version": "0.14.0",
301 | "resolved": "https://registry.npmjs.org/apollo-cache-control/-/apollo-cache-control-0.14.0.tgz",
302 | "integrity": "sha512-qN4BCq90egQrgNnTRMUHikLZZAprf3gbm8rC5Vwmc6ZdLolQ7bFsa769Hqi6Tq/lS31KLsXBLTOsRbfPHph12w==",
303 | "requires": {
304 | "apollo-server-env": "^3.1.0",
305 | "apollo-server-plugin-base": "^0.13.0"
306 | }
307 | },
308 | "apollo-datasource": {
309 | "version": "0.9.0",
310 | "resolved": "https://registry.npmjs.org/apollo-datasource/-/apollo-datasource-0.9.0.tgz",
311 | "integrity": "sha512-y8H99NExU1Sk4TvcaUxTdzfq2SZo6uSj5dyh75XSQvbpH6gdAXIW9MaBcvlNC7n0cVPsidHmOcHOWxJ/pTXGjA==",
312 | "requires": {
313 | "apollo-server-caching": "^0.7.0",
314 | "apollo-server-env": "^3.1.0"
315 | }
316 | },
317 | "apollo-graphql": {
318 | "version": "0.9.3",
319 | "resolved": "https://registry.npmjs.org/apollo-graphql/-/apollo-graphql-0.9.3.tgz",
320 | "integrity": "sha512-rcAl2E841Iko4kSzj4Pt3PRBitmyq1MvoEmpl04TQSpGnoVgl1E/ZXuLBYxMTSnEAm7umn2IsoY+c6Ll9U/10A==",
321 | "requires": {
322 | "core-js-pure": "^3.10.2",
323 | "lodash.sortby": "^4.7.0",
324 | "sha.js": "^2.4.11"
325 | }
326 | },
327 | "apollo-link": {
328 | "version": "1.2.14",
329 | "resolved": "https://registry.npmjs.org/apollo-link/-/apollo-link-1.2.14.tgz",
330 | "integrity": "sha512-p67CMEFP7kOG1JZ0ZkYZwRDa369w5PIjtMjvrQd/HnIV8FRsHRqLqK+oAZQnFa1DDdZtOtHTi+aMIW6EatC2jg==",
331 | "requires": {
332 | "apollo-utilities": "^1.3.0",
333 | "ts-invariant": "^0.4.0",
334 | "tslib": "^1.9.3",
335 | "zen-observable-ts": "^0.8.21"
336 | },
337 | "dependencies": {
338 | "tslib": {
339 | "version": "1.14.1",
340 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
341 | "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
342 | }
343 | }
344 | },
345 | "apollo-reporting-protobuf": {
346 | "version": "0.8.0",
347 | "resolved": "https://registry.npmjs.org/apollo-reporting-protobuf/-/apollo-reporting-protobuf-0.8.0.tgz",
348 | "integrity": "sha512-B3XmnkH6Y458iV6OsA7AhfwvTgeZnFq9nPVjbxmLKnvfkEl8hYADtz724uPa0WeBiD7DSFcnLtqg9yGmCkBohg==",
349 | "requires": {
350 | "@apollo/protobufjs": "1.2.2"
351 | }
352 | },
353 | "apollo-server-caching": {
354 | "version": "0.7.0",
355 | "resolved": "https://registry.npmjs.org/apollo-server-caching/-/apollo-server-caching-0.7.0.tgz",
356 | "integrity": "sha512-MsVCuf/2FxuTFVhGLK13B+TZH9tBd2qkyoXKKILIiGcZ5CDUEBO14vIV63aNkMkS1xxvK2U4wBcuuNj/VH2Mkw==",
357 | "requires": {
358 | "lru-cache": "^6.0.0"
359 | }
360 | },
361 | "apollo-server-core": {
362 | "version": "2.25.0",
363 | "resolved": "https://registry.npmjs.org/apollo-server-core/-/apollo-server-core-2.25.0.tgz",
364 | "integrity": "sha512-LqDmY+R5dcb6zj/RgM7P8NnURV2XdQFIF4rY7g80hD9mc2WSCKHF6eH+lHG0sFPW7f8iBr+lJ4LyETuWEVF0hg==",
365 | "requires": {
366 | "@apollographql/apollo-tools": "^0.5.0",
367 | "@apollographql/graphql-playground-html": "1.6.27",
368 | "@apollographql/graphql-upload-8-fork": "^8.1.3",
369 | "@josephg/resolvable": "^1.0.0",
370 | "@types/ws": "^7.0.0",
371 | "apollo-cache-control": "^0.14.0",
372 | "apollo-datasource": "^0.9.0",
373 | "apollo-graphql": "^0.9.0",
374 | "apollo-reporting-protobuf": "^0.8.0",
375 | "apollo-server-caching": "^0.7.0",
376 | "apollo-server-env": "^3.1.0",
377 | "apollo-server-errors": "^2.5.0",
378 | "apollo-server-plugin-base": "^0.13.0",
379 | "apollo-server-types": "^0.9.0",
380 | "apollo-tracing": "^0.15.0",
381 | "async-retry": "^1.2.1",
382 | "fast-json-stable-stringify": "^2.0.0",
383 | "graphql-extensions": "^0.15.0",
384 | "graphql-tag": "^2.11.0",
385 | "graphql-tools": "^4.0.8",
386 | "loglevel": "^1.6.7",
387 | "lru-cache": "^6.0.0",
388 | "sha.js": "^2.4.11",
389 | "subscriptions-transport-ws": "^0.9.11",
390 | "uuid": "^8.0.0",
391 | "ws": "^6.0.0"
392 | }
393 | },
394 | "apollo-server-env": {
395 | "version": "3.1.0",
396 | "resolved": "https://registry.npmjs.org/apollo-server-env/-/apollo-server-env-3.1.0.tgz",
397 | "integrity": "sha512-iGdZgEOAuVop3vb0F2J3+kaBVi4caMoxefHosxmgzAbbSpvWehB8Y1QiSyyMeouYC38XNVk5wnZl+jdGSsWsIQ==",
398 | "requires": {
399 | "node-fetch": "^2.6.1",
400 | "util.promisify": "^1.0.0"
401 | }
402 | },
403 | "apollo-server-errors": {
404 | "version": "2.5.0",
405 | "resolved": "https://registry.npmjs.org/apollo-server-errors/-/apollo-server-errors-2.5.0.tgz",
406 | "integrity": "sha512-lO5oTjgiC3vlVg2RKr3RiXIIQ5pGXBFxYGGUkKDhTud3jMIhs+gel8L8zsEjKaKxkjHhCQAA/bcEfYiKkGQIvA=="
407 | },
408 | "apollo-server-express": {
409 | "version": "2.25.0",
410 | "resolved": "https://registry.npmjs.org/apollo-server-express/-/apollo-server-express-2.25.0.tgz",
411 | "integrity": "sha512-FCTisD+VB1LCcTjjhKvQZ/dkly83KVlioFMgcPjW1X/kzCznRT3aQoVn9bQHlzQr7NnpwFseb4Rhd2KKD4wKEA==",
412 | "requires": {
413 | "@apollographql/graphql-playground-html": "1.6.27",
414 | "@types/accepts": "^1.3.5",
415 | "@types/body-parser": "1.19.0",
416 | "@types/cors": "2.8.10",
417 | "@types/express": "4.17.11",
418 | "@types/express-serve-static-core": "4.17.19",
419 | "accepts": "^1.3.5",
420 | "apollo-server-core": "^2.25.0",
421 | "apollo-server-types": "^0.9.0",
422 | "body-parser": "^1.18.3",
423 | "cors": "^2.8.5",
424 | "express": "^4.17.1",
425 | "graphql-subscriptions": "^1.0.0",
426 | "graphql-tools": "^4.0.8",
427 | "parseurl": "^1.3.2",
428 | "subscriptions-transport-ws": "^0.9.16",
429 | "type-is": "^1.6.16"
430 | }
431 | },
432 | "apollo-server-plugin-base": {
433 | "version": "0.13.0",
434 | "resolved": "https://registry.npmjs.org/apollo-server-plugin-base/-/apollo-server-plugin-base-0.13.0.tgz",
435 | "integrity": "sha512-L3TMmq2YE6BU6I4Tmgygmd0W55L+6XfD9137k+cWEBFu50vRY4Re+d+fL5WuPkk5xSPKd/PIaqzidu5V/zz8Kg==",
436 | "requires": {
437 | "apollo-server-types": "^0.9.0"
438 | }
439 | },
440 | "apollo-server-types": {
441 | "version": "0.9.0",
442 | "resolved": "https://registry.npmjs.org/apollo-server-types/-/apollo-server-types-0.9.0.tgz",
443 | "integrity": "sha512-qk9tg4Imwpk732JJHBkhW0jzfG0nFsLqK2DY6UhvJf7jLnRePYsPxWfPiNkxni27pLE2tiNlCwoDFSeWqpZyBg==",
444 | "requires": {
445 | "apollo-reporting-protobuf": "^0.8.0",
446 | "apollo-server-caching": "^0.7.0",
447 | "apollo-server-env": "^3.1.0"
448 | }
449 | },
450 | "apollo-tracing": {
451 | "version": "0.15.0",
452 | "resolved": "https://registry.npmjs.org/apollo-tracing/-/apollo-tracing-0.15.0.tgz",
453 | "integrity": "sha512-UP0fztFvaZPHDhIB/J+qGuy6hWO4If069MGC98qVs0I8FICIGu4/8ykpX3X3K6RtaQ56EDAWKykCxFv4ScxMeA==",
454 | "requires": {
455 | "apollo-server-env": "^3.1.0",
456 | "apollo-server-plugin-base": "^0.13.0"
457 | }
458 | },
459 | "apollo-utilities": {
460 | "version": "1.3.4",
461 | "resolved": "https://registry.npmjs.org/apollo-utilities/-/apollo-utilities-1.3.4.tgz",
462 | "integrity": "sha512-pk2hiWrCXMAy2fRPwEyhvka+mqwzeP60Jr1tRYi5xru+3ko94HI9o6lK0CT33/w4RDlxWchmdhDCrvdr+pHCig==",
463 | "requires": {
464 | "@wry/equality": "^0.1.2",
465 | "fast-json-stable-stringify": "^2.0.0",
466 | "ts-invariant": "^0.4.0",
467 | "tslib": "^1.10.0"
468 | },
469 | "dependencies": {
470 | "tslib": {
471 | "version": "1.14.1",
472 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
473 | "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
474 | }
475 | }
476 | },
477 | "array-flatten": {
478 | "version": "1.1.1",
479 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
480 | "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
481 | },
482 | "async-limiter": {
483 | "version": "1.0.1",
484 | "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz",
485 | "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ=="
486 | },
487 | "async-retry": {
488 | "version": "1.3.1",
489 | "resolved": "https://registry.npmjs.org/async-retry/-/async-retry-1.3.1.tgz",
490 | "integrity": "sha512-aiieFW/7h3hY0Bq5d+ktDBejxuwR78vRu9hDUdR8rNhSaQ29VzPL4AoIRG7D/c7tdenwOcKvgPM6tIxB3cB6HA==",
491 | "requires": {
492 | "retry": "0.12.0"
493 | }
494 | },
495 | "backo2": {
496 | "version": "1.0.2",
497 | "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz",
498 | "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc="
499 | },
500 | "body-parser": {
501 | "version": "1.19.0",
502 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz",
503 | "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==",
504 | "requires": {
505 | "bytes": "3.1.0",
506 | "content-type": "~1.0.4",
507 | "debug": "2.6.9",
508 | "depd": "~1.1.2",
509 | "http-errors": "1.7.2",
510 | "iconv-lite": "0.4.24",
511 | "on-finished": "~2.3.0",
512 | "qs": "6.7.0",
513 | "raw-body": "2.4.0",
514 | "type-is": "~1.6.17"
515 | },
516 | "dependencies": {
517 | "http-errors": {
518 | "version": "1.7.2",
519 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz",
520 | "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==",
521 | "requires": {
522 | "depd": "~1.1.2",
523 | "inherits": "2.0.3",
524 | "setprototypeof": "1.1.1",
525 | "statuses": ">= 1.5.0 < 2",
526 | "toidentifier": "1.0.0"
527 | }
528 | },
529 | "inherits": {
530 | "version": "2.0.3",
531 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
532 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
533 | },
534 | "setprototypeof": {
535 | "version": "1.1.1",
536 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
537 | "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw=="
538 | }
539 | }
540 | },
541 | "busboy": {
542 | "version": "0.3.1",
543 | "resolved": "https://registry.npmjs.org/busboy/-/busboy-0.3.1.tgz",
544 | "integrity": "sha512-y7tTxhGKXcyBxRKAni+awqx8uqaJKrSFSNFSeRG5CsWNdmy2BIK+6VGWEW7TZnIO/533mtMEA4rOevQV815YJw==",
545 | "requires": {
546 | "dicer": "0.3.0"
547 | }
548 | },
549 | "bytes": {
550 | "version": "3.1.0",
551 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
552 | "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg=="
553 | },
554 | "call-bind": {
555 | "version": "1.0.2",
556 | "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
557 | "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
558 | "requires": {
559 | "function-bind": "^1.1.1",
560 | "get-intrinsic": "^1.0.2"
561 | }
562 | },
563 | "commander": {
564 | "version": "2.20.3",
565 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
566 | "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="
567 | },
568 | "content-disposition": {
569 | "version": "0.5.3",
570 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz",
571 | "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==",
572 | "requires": {
573 | "safe-buffer": "5.1.2"
574 | },
575 | "dependencies": {
576 | "safe-buffer": {
577 | "version": "5.1.2",
578 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
579 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
580 | }
581 | }
582 | },
583 | "content-type": {
584 | "version": "1.0.4",
585 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
586 | "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA=="
587 | },
588 | "cookie": {
589 | "version": "0.4.0",
590 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz",
591 | "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg=="
592 | },
593 | "cookie-signature": {
594 | "version": "1.0.6",
595 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
596 | "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
597 | },
598 | "core-js-pure": {
599 | "version": "3.14.0",
600 | "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.14.0.tgz",
601 | "integrity": "sha512-YVh+LN2FgNU0odThzm61BsdkwrbrchumFq3oztnE9vTKC4KS2fvnPmcx8t6jnqAyOTCTF4ZSiuK8Qhh7SNcL4g=="
602 | },
603 | "cors": {
604 | "version": "2.8.5",
605 | "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz",
606 | "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==",
607 | "requires": {
608 | "object-assign": "^4",
609 | "vary": "^1"
610 | }
611 | },
612 | "cssfilter": {
613 | "version": "0.0.10",
614 | "resolved": "https://registry.npmjs.org/cssfilter/-/cssfilter-0.0.10.tgz",
615 | "integrity": "sha1-xtJnJjKi5cg+AT5oZKQs6N79IK4="
616 | },
617 | "debug": {
618 | "version": "2.6.9",
619 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
620 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
621 | "requires": {
622 | "ms": "2.0.0"
623 | }
624 | },
625 | "define-properties": {
626 | "version": "1.1.3",
627 | "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
628 | "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
629 | "requires": {
630 | "object-keys": "^1.0.12"
631 | }
632 | },
633 | "depd": {
634 | "version": "1.1.2",
635 | "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
636 | "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
637 | },
638 | "deprecated-decorator": {
639 | "version": "0.1.6",
640 | "resolved": "https://registry.npmjs.org/deprecated-decorator/-/deprecated-decorator-0.1.6.tgz",
641 | "integrity": "sha1-AJZjF7ehL+kvPMgx91g68ym4bDc="
642 | },
643 | "destroy": {
644 | "version": "1.0.4",
645 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
646 | "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
647 | },
648 | "dicer": {
649 | "version": "0.3.0",
650 | "resolved": "https://registry.npmjs.org/dicer/-/dicer-0.3.0.tgz",
651 | "integrity": "sha512-MdceRRWqltEG2dZqO769g27N/3PXfcKl04VhYnBlo2YhH7zPi88VebsjTKclaOyiuMaGU72hTfw3VkUitGcVCA==",
652 | "requires": {
653 | "streamsearch": "0.1.2"
654 | }
655 | },
656 | "ee-first": {
657 | "version": "1.1.1",
658 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
659 | "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
660 | },
661 | "encodeurl": {
662 | "version": "1.0.2",
663 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
664 | "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k="
665 | },
666 | "es-abstract": {
667 | "version": "1.18.3",
668 | "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.3.tgz",
669 | "integrity": "sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw==",
670 | "requires": {
671 | "call-bind": "^1.0.2",
672 | "es-to-primitive": "^1.2.1",
673 | "function-bind": "^1.1.1",
674 | "get-intrinsic": "^1.1.1",
675 | "has": "^1.0.3",
676 | "has-symbols": "^1.0.2",
677 | "is-callable": "^1.2.3",
678 | "is-negative-zero": "^2.0.1",
679 | "is-regex": "^1.1.3",
680 | "is-string": "^1.0.6",
681 | "object-inspect": "^1.10.3",
682 | "object-keys": "^1.1.1",
683 | "object.assign": "^4.1.2",
684 | "string.prototype.trimend": "^1.0.4",
685 | "string.prototype.trimstart": "^1.0.4",
686 | "unbox-primitive": "^1.0.1"
687 | }
688 | },
689 | "es-to-primitive": {
690 | "version": "1.2.1",
691 | "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
692 | "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
693 | "requires": {
694 | "is-callable": "^1.1.4",
695 | "is-date-object": "^1.0.1",
696 | "is-symbol": "^1.0.2"
697 | }
698 | },
699 | "escape-html": {
700 | "version": "1.0.3",
701 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
702 | "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
703 | },
704 | "etag": {
705 | "version": "1.8.1",
706 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
707 | "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc="
708 | },
709 | "eventemitter3": {
710 | "version": "3.1.2",
711 | "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.2.tgz",
712 | "integrity": "sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q=="
713 | },
714 | "express": {
715 | "version": "4.17.1",
716 | "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz",
717 | "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==",
718 | "requires": {
719 | "accepts": "~1.3.7",
720 | "array-flatten": "1.1.1",
721 | "body-parser": "1.19.0",
722 | "content-disposition": "0.5.3",
723 | "content-type": "~1.0.4",
724 | "cookie": "0.4.0",
725 | "cookie-signature": "1.0.6",
726 | "debug": "2.6.9",
727 | "depd": "~1.1.2",
728 | "encodeurl": "~1.0.2",
729 | "escape-html": "~1.0.3",
730 | "etag": "~1.8.1",
731 | "finalhandler": "~1.1.2",
732 | "fresh": "0.5.2",
733 | "merge-descriptors": "1.0.1",
734 | "methods": "~1.1.2",
735 | "on-finished": "~2.3.0",
736 | "parseurl": "~1.3.3",
737 | "path-to-regexp": "0.1.7",
738 | "proxy-addr": "~2.0.5",
739 | "qs": "6.7.0",
740 | "range-parser": "~1.2.1",
741 | "safe-buffer": "5.1.2",
742 | "send": "0.17.1",
743 | "serve-static": "1.14.1",
744 | "setprototypeof": "1.1.1",
745 | "statuses": "~1.5.0",
746 | "type-is": "~1.6.18",
747 | "utils-merge": "1.0.1",
748 | "vary": "~1.1.2"
749 | },
750 | "dependencies": {
751 | "safe-buffer": {
752 | "version": "5.1.2",
753 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
754 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
755 | },
756 | "setprototypeof": {
757 | "version": "1.1.1",
758 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
759 | "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw=="
760 | }
761 | }
762 | },
763 | "express-graphql": {
764 | "version": "0.12.0",
765 | "resolved": "https://registry.npmjs.org/express-graphql/-/express-graphql-0.12.0.tgz",
766 | "integrity": "sha512-DwYaJQy0amdy3pgNtiTDuGGM2BLdj+YO2SgbKoLliCfuHv3VVTt7vNG/ZqK2hRYjtYHE2t2KB705EU94mE64zg==",
767 | "requires": {
768 | "accepts": "^1.3.7",
769 | "content-type": "^1.0.4",
770 | "http-errors": "1.8.0",
771 | "raw-body": "^2.4.1"
772 | },
773 | "dependencies": {
774 | "raw-body": {
775 | "version": "2.4.1",
776 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.1.tgz",
777 | "integrity": "sha512-9WmIKF6mkvA0SLmA2Knm9+qj89e+j1zqgyn8aXGd7+nAduPoqgI9lO57SAZNn/Byzo5P7JhXTyg9PzaJbH73bA==",
778 | "requires": {
779 | "bytes": "3.1.0",
780 | "http-errors": "1.7.3",
781 | "iconv-lite": "0.4.24",
782 | "unpipe": "1.0.0"
783 | },
784 | "dependencies": {
785 | "http-errors": {
786 | "version": "1.7.3",
787 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz",
788 | "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==",
789 | "requires": {
790 | "depd": "~1.1.2",
791 | "inherits": "2.0.4",
792 | "setprototypeof": "1.1.1",
793 | "statuses": ">= 1.5.0 < 2",
794 | "toidentifier": "1.0.0"
795 | }
796 | }
797 | }
798 | },
799 | "setprototypeof": {
800 | "version": "1.1.1",
801 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
802 | "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw=="
803 | }
804 | }
805 | },
806 | "fast-json-stable-stringify": {
807 | "version": "2.1.0",
808 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
809 | "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="
810 | },
811 | "finalhandler": {
812 | "version": "1.1.2",
813 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz",
814 | "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==",
815 | "requires": {
816 | "debug": "2.6.9",
817 | "encodeurl": "~1.0.2",
818 | "escape-html": "~1.0.3",
819 | "on-finished": "~2.3.0",
820 | "parseurl": "~1.3.3",
821 | "statuses": "~1.5.0",
822 | "unpipe": "~1.0.0"
823 | }
824 | },
825 | "for-each": {
826 | "version": "0.3.3",
827 | "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz",
828 | "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==",
829 | "requires": {
830 | "is-callable": "^1.1.3"
831 | }
832 | },
833 | "forwarded": {
834 | "version": "0.2.0",
835 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
836 | "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow=="
837 | },
838 | "fresh": {
839 | "version": "0.5.2",
840 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
841 | "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac="
842 | },
843 | "fs-capacitor": {
844 | "version": "2.0.4",
845 | "resolved": "https://registry.npmjs.org/fs-capacitor/-/fs-capacitor-2.0.4.tgz",
846 | "integrity": "sha512-8S4f4WsCryNw2mJJchi46YgB6CR5Ze+4L1h8ewl9tEpL4SJ3ZO+c/bS4BWhB8bK+O3TMqhuZarTitd0S0eh2pA=="
847 | },
848 | "function-bind": {
849 | "version": "1.1.1",
850 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
851 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
852 | },
853 | "get-intrinsic": {
854 | "version": "1.1.1",
855 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz",
856 | "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==",
857 | "requires": {
858 | "function-bind": "^1.1.1",
859 | "has": "^1.0.3",
860 | "has-symbols": "^1.0.1"
861 | }
862 | },
863 | "graphql": {
864 | "version": "15.5.0",
865 | "resolved": "https://registry.npmjs.org/graphql/-/graphql-15.5.0.tgz",
866 | "integrity": "sha512-OmaM7y0kaK31NKG31q4YbD2beNYa6jBBKtMFT6gLYJljHLJr42IqJ8KX08u3Li/0ifzTU5HjmoOOrwa5BRLeDA=="
867 | },
868 | "graphql-extensions": {
869 | "version": "0.15.0",
870 | "resolved": "https://registry.npmjs.org/graphql-extensions/-/graphql-extensions-0.15.0.tgz",
871 | "integrity": "sha512-bVddVO8YFJPwuACn+3pgmrEg6I8iBuYLuwvxiE+lcQQ7POotVZxm2rgGw0PvVYmWWf3DT7nTVDZ5ROh/ALp8mA==",
872 | "requires": {
873 | "@apollographql/apollo-tools": "^0.5.0",
874 | "apollo-server-env": "^3.1.0",
875 | "apollo-server-types": "^0.9.0"
876 | }
877 | },
878 | "graphql-subscriptions": {
879 | "version": "1.2.1",
880 | "resolved": "https://registry.npmjs.org/graphql-subscriptions/-/graphql-subscriptions-1.2.1.tgz",
881 | "integrity": "sha512-95yD/tKi24q8xYa7Q9rhQN16AYj5wPbrb8tmHGM3WRc9EBmWrG/0kkMl+tQG8wcEuE9ibR4zyOM31p5Sdr2v4g==",
882 | "requires": {
883 | "iterall": "^1.3.0"
884 | }
885 | },
886 | "graphql-tag": {
887 | "version": "2.12.4",
888 | "resolved": "https://registry.npmjs.org/graphql-tag/-/graphql-tag-2.12.4.tgz",
889 | "integrity": "sha512-VV1U4O+9x99EkNpNmCUV5RZwq6MnK4+pGbRYWG+lA/m3uo7TSqJF81OkcOP148gFP6fzdl7JWYBrwWVTS9jXww==",
890 | "requires": {
891 | "tslib": "^2.1.0"
892 | }
893 | },
894 | "graphql-tools": {
895 | "version": "4.0.8",
896 | "resolved": "https://registry.npmjs.org/graphql-tools/-/graphql-tools-4.0.8.tgz",
897 | "integrity": "sha512-MW+ioleBrwhRjalKjYaLQbr+920pHBgy9vM/n47sswtns8+96sRn5M/G+J1eu7IMeKWiN/9p6tmwCHU7552VJg==",
898 | "requires": {
899 | "apollo-link": "^1.2.14",
900 | "apollo-utilities": "^1.0.1",
901 | "deprecated-decorator": "^0.1.6",
902 | "iterall": "^1.1.3",
903 | "uuid": "^3.1.0"
904 | },
905 | "dependencies": {
906 | "uuid": {
907 | "version": "3.4.0",
908 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
909 | "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A=="
910 | }
911 | }
912 | },
913 | "has": {
914 | "version": "1.0.3",
915 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
916 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
917 | "requires": {
918 | "function-bind": "^1.1.1"
919 | }
920 | },
921 | "has-bigints": {
922 | "version": "1.0.1",
923 | "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz",
924 | "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA=="
925 | },
926 | "has-symbols": {
927 | "version": "1.0.2",
928 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz",
929 | "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw=="
930 | },
931 | "http-errors": {
932 | "version": "1.8.0",
933 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.0.tgz",
934 | "integrity": "sha512-4I8r0C5JDhT5VkvI47QktDW75rNlGVsUf/8hzjCC/wkWI/jdTRmBb9aI7erSG82r1bjKY3F6k28WnsVxB1C73A==",
935 | "requires": {
936 | "depd": "~1.1.2",
937 | "inherits": "2.0.4",
938 | "setprototypeof": "1.2.0",
939 | "statuses": ">= 1.5.0 < 2",
940 | "toidentifier": "1.0.0"
941 | }
942 | },
943 | "iconv-lite": {
944 | "version": "0.4.24",
945 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
946 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
947 | "requires": {
948 | "safer-buffer": ">= 2.1.2 < 3"
949 | }
950 | },
951 | "inherits": {
952 | "version": "2.0.4",
953 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
954 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
955 | },
956 | "ipaddr.js": {
957 | "version": "1.9.1",
958 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
959 | "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g=="
960 | },
961 | "is-bigint": {
962 | "version": "1.0.2",
963 | "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.2.tgz",
964 | "integrity": "sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA=="
965 | },
966 | "is-boolean-object": {
967 | "version": "1.1.1",
968 | "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.1.tgz",
969 | "integrity": "sha512-bXdQWkECBUIAcCkeH1unwJLIpZYaa5VvuygSyS/c2lf719mTKZDU5UdDRlpd01UjADgmW8RfqaP+mRaVPdr/Ng==",
970 | "requires": {
971 | "call-bind": "^1.0.2"
972 | }
973 | },
974 | "is-callable": {
975 | "version": "1.2.3",
976 | "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz",
977 | "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ=="
978 | },
979 | "is-date-object": {
980 | "version": "1.0.4",
981 | "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.4.tgz",
982 | "integrity": "sha512-/b4ZVsG7Z5XVtIxs/h9W8nvfLgSAyKYdtGWQLbqy6jA1icmgjf8WCoTKgeS4wy5tYaPePouzFMANbnj94c2Z+A=="
983 | },
984 | "is-negative-zero": {
985 | "version": "2.0.1",
986 | "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz",
987 | "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w=="
988 | },
989 | "is-number-object": {
990 | "version": "1.0.5",
991 | "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.5.tgz",
992 | "integrity": "sha512-RU0lI/n95pMoUKu9v1BZP5MBcZuNSVJkMkAG2dJqC4z2GlkGUNeH68SuHuBKBD/XFe+LHZ+f9BKkLET60Niedw=="
993 | },
994 | "is-regex": {
995 | "version": "1.1.3",
996 | "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.3.tgz",
997 | "integrity": "sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==",
998 | "requires": {
999 | "call-bind": "^1.0.2",
1000 | "has-symbols": "^1.0.2"
1001 | }
1002 | },
1003 | "is-string": {
1004 | "version": "1.0.6",
1005 | "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz",
1006 | "integrity": "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w=="
1007 | },
1008 | "is-symbol": {
1009 | "version": "1.0.4",
1010 | "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz",
1011 | "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==",
1012 | "requires": {
1013 | "has-symbols": "^1.0.2"
1014 | }
1015 | },
1016 | "iterall": {
1017 | "version": "1.3.0",
1018 | "resolved": "https://registry.npmjs.org/iterall/-/iterall-1.3.0.tgz",
1019 | "integrity": "sha512-QZ9qOMdF+QLHxy1QIpUHUU1D5pS2CG2P69LF6L6CPjPYA/XMOmKV3PZpawHoAjHNyB0swdVTRxdYT4tbBbxqwg=="
1020 | },
1021 | "lodash.sortby": {
1022 | "version": "4.7.0",
1023 | "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz",
1024 | "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg="
1025 | },
1026 | "loglevel": {
1027 | "version": "1.7.1",
1028 | "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.7.1.tgz",
1029 | "integrity": "sha512-Hesni4s5UkWkwCGJMQGAh71PaLUmKFM60dHvq0zi/vDhhrzuk+4GgNbTXJ12YYQJn6ZKBDNIjYcuQGKudvqrIw=="
1030 | },
1031 | "long": {
1032 | "version": "4.0.0",
1033 | "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz",
1034 | "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA=="
1035 | },
1036 | "lru-cache": {
1037 | "version": "6.0.0",
1038 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
1039 | "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
1040 | "requires": {
1041 | "yallist": "^4.0.0"
1042 | }
1043 | },
1044 | "media-typer": {
1045 | "version": "0.3.0",
1046 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
1047 | "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g="
1048 | },
1049 | "merge-descriptors": {
1050 | "version": "1.0.1",
1051 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
1052 | "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E="
1053 | },
1054 | "methods": {
1055 | "version": "1.1.2",
1056 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
1057 | "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4="
1058 | },
1059 | "mime": {
1060 | "version": "1.6.0",
1061 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
1062 | "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="
1063 | },
1064 | "mime-db": {
1065 | "version": "1.48.0",
1066 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.48.0.tgz",
1067 | "integrity": "sha512-FM3QwxV+TnZYQ2aRqhlKBMHxk10lTbMt3bBkMAp54ddrNeVSfcQYOOKuGuy3Ddrm38I04If834fOUSq1yzslJQ=="
1068 | },
1069 | "mime-types": {
1070 | "version": "2.1.31",
1071 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.31.tgz",
1072 | "integrity": "sha512-XGZnNzm3QvgKxa8dpzyhFTHmpP3l5YNusmne07VUOXxou9CqUqYa/HBy124RqtVh/O2pECas/MOcsDgpilPOPg==",
1073 | "requires": {
1074 | "mime-db": "1.48.0"
1075 | }
1076 | },
1077 | "ms": {
1078 | "version": "2.0.0",
1079 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
1080 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
1081 | },
1082 | "negotiator": {
1083 | "version": "0.6.2",
1084 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
1085 | "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw=="
1086 | },
1087 | "node-fetch": {
1088 | "version": "2.6.1",
1089 | "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz",
1090 | "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw=="
1091 | },
1092 | "object-assign": {
1093 | "version": "4.1.1",
1094 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
1095 | "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
1096 | },
1097 | "object-inspect": {
1098 | "version": "1.10.3",
1099 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.3.tgz",
1100 | "integrity": "sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw=="
1101 | },
1102 | "object-keys": {
1103 | "version": "1.1.1",
1104 | "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
1105 | "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA=="
1106 | },
1107 | "object-path": {
1108 | "version": "0.11.5",
1109 | "resolved": "https://registry.npmjs.org/object-path/-/object-path-0.11.5.tgz",
1110 | "integrity": "sha512-jgSbThcoR/s+XumvGMTMf81QVBmah+/Q7K7YduKeKVWL7N111unR2d6pZZarSk6kY/caeNxUDyxOvMWyzoU2eg=="
1111 | },
1112 | "object.assign": {
1113 | "version": "4.1.2",
1114 | "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz",
1115 | "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==",
1116 | "requires": {
1117 | "call-bind": "^1.0.0",
1118 | "define-properties": "^1.1.3",
1119 | "has-symbols": "^1.0.1",
1120 | "object-keys": "^1.1.1"
1121 | }
1122 | },
1123 | "object.getownpropertydescriptors": {
1124 | "version": "2.1.2",
1125 | "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.2.tgz",
1126 | "integrity": "sha512-WtxeKSzfBjlzL+F9b7M7hewDzMwy+C8NRssHd1YrNlzHzIDrXcXiNOMrezdAEM4UXixgV+vvnyBeN7Rygl2ttQ==",
1127 | "requires": {
1128 | "call-bind": "^1.0.2",
1129 | "define-properties": "^1.1.3",
1130 | "es-abstract": "^1.18.0-next.2"
1131 | }
1132 | },
1133 | "on-finished": {
1134 | "version": "2.3.0",
1135 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
1136 | "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
1137 | "requires": {
1138 | "ee-first": "1.1.1"
1139 | }
1140 | },
1141 | "parseurl": {
1142 | "version": "1.3.3",
1143 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
1144 | "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="
1145 | },
1146 | "path-to-regexp": {
1147 | "version": "0.1.7",
1148 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
1149 | "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w="
1150 | },
1151 | "proxy-addr": {
1152 | "version": "2.0.7",
1153 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
1154 | "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
1155 | "requires": {
1156 | "forwarded": "0.2.0",
1157 | "ipaddr.js": "1.9.1"
1158 | }
1159 | },
1160 | "qs": {
1161 | "version": "6.7.0",
1162 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
1163 | "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ=="
1164 | },
1165 | "range-parser": {
1166 | "version": "1.2.1",
1167 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
1168 | "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="
1169 | },
1170 | "raw-body": {
1171 | "version": "2.4.0",
1172 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz",
1173 | "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==",
1174 | "requires": {
1175 | "bytes": "3.1.0",
1176 | "http-errors": "1.7.2",
1177 | "iconv-lite": "0.4.24",
1178 | "unpipe": "1.0.0"
1179 | },
1180 | "dependencies": {
1181 | "http-errors": {
1182 | "version": "1.7.2",
1183 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz",
1184 | "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==",
1185 | "requires": {
1186 | "depd": "~1.1.2",
1187 | "inherits": "2.0.3",
1188 | "setprototypeof": "1.1.1",
1189 | "statuses": ">= 1.5.0 < 2",
1190 | "toidentifier": "1.0.0"
1191 | }
1192 | },
1193 | "inherits": {
1194 | "version": "2.0.3",
1195 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
1196 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
1197 | },
1198 | "setprototypeof": {
1199 | "version": "1.1.1",
1200 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
1201 | "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw=="
1202 | }
1203 | }
1204 | },
1205 | "retry": {
1206 | "version": "0.12.0",
1207 | "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz",
1208 | "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs="
1209 | },
1210 | "safe-buffer": {
1211 | "version": "5.2.1",
1212 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
1213 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="
1214 | },
1215 | "safer-buffer": {
1216 | "version": "2.1.2",
1217 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
1218 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
1219 | },
1220 | "send": {
1221 | "version": "0.17.1",
1222 | "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz",
1223 | "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==",
1224 | "requires": {
1225 | "debug": "2.6.9",
1226 | "depd": "~1.1.2",
1227 | "destroy": "~1.0.4",
1228 | "encodeurl": "~1.0.2",
1229 | "escape-html": "~1.0.3",
1230 | "etag": "~1.8.1",
1231 | "fresh": "0.5.2",
1232 | "http-errors": "~1.7.2",
1233 | "mime": "1.6.0",
1234 | "ms": "2.1.1",
1235 | "on-finished": "~2.3.0",
1236 | "range-parser": "~1.2.1",
1237 | "statuses": "~1.5.0"
1238 | },
1239 | "dependencies": {
1240 | "http-errors": {
1241 | "version": "1.7.3",
1242 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz",
1243 | "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==",
1244 | "requires": {
1245 | "depd": "~1.1.2",
1246 | "inherits": "2.0.4",
1247 | "setprototypeof": "1.1.1",
1248 | "statuses": ">= 1.5.0 < 2",
1249 | "toidentifier": "1.0.0"
1250 | }
1251 | },
1252 | "ms": {
1253 | "version": "2.1.1",
1254 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
1255 | "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg=="
1256 | },
1257 | "setprototypeof": {
1258 | "version": "1.1.1",
1259 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
1260 | "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw=="
1261 | }
1262 | }
1263 | },
1264 | "serve-static": {
1265 | "version": "1.14.1",
1266 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz",
1267 | "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==",
1268 | "requires": {
1269 | "encodeurl": "~1.0.2",
1270 | "escape-html": "~1.0.3",
1271 | "parseurl": "~1.3.3",
1272 | "send": "0.17.1"
1273 | }
1274 | },
1275 | "setprototypeof": {
1276 | "version": "1.2.0",
1277 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
1278 | "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="
1279 | },
1280 | "sha.js": {
1281 | "version": "2.4.11",
1282 | "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz",
1283 | "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==",
1284 | "requires": {
1285 | "inherits": "^2.0.1",
1286 | "safe-buffer": "^5.0.1"
1287 | }
1288 | },
1289 | "statuses": {
1290 | "version": "1.5.0",
1291 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
1292 | "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow="
1293 | },
1294 | "streamsearch": {
1295 | "version": "0.1.2",
1296 | "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-0.1.2.tgz",
1297 | "integrity": "sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo="
1298 | },
1299 | "string.prototype.trimend": {
1300 | "version": "1.0.4",
1301 | "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz",
1302 | "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==",
1303 | "requires": {
1304 | "call-bind": "^1.0.2",
1305 | "define-properties": "^1.1.3"
1306 | }
1307 | },
1308 | "string.prototype.trimstart": {
1309 | "version": "1.0.4",
1310 | "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz",
1311 | "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==",
1312 | "requires": {
1313 | "call-bind": "^1.0.2",
1314 | "define-properties": "^1.1.3"
1315 | }
1316 | },
1317 | "subscriptions-transport-ws": {
1318 | "version": "0.9.18",
1319 | "resolved": "https://registry.npmjs.org/subscriptions-transport-ws/-/subscriptions-transport-ws-0.9.18.tgz",
1320 | "integrity": "sha512-tztzcBTNoEbuErsVQpTN2xUNN/efAZXyCyL5m3x4t6SKrEiTL2N8SaKWBFWM4u56pL79ULif3zjyeq+oV+nOaA==",
1321 | "requires": {
1322 | "backo2": "^1.0.2",
1323 | "eventemitter3": "^3.1.0",
1324 | "iterall": "^1.2.1",
1325 | "symbol-observable": "^1.0.4",
1326 | "ws": "^5.2.0"
1327 | },
1328 | "dependencies": {
1329 | "ws": {
1330 | "version": "5.2.2",
1331 | "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.2.tgz",
1332 | "integrity": "sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==",
1333 | "requires": {
1334 | "async-limiter": "~1.0.0"
1335 | }
1336 | }
1337 | }
1338 | },
1339 | "symbol-observable": {
1340 | "version": "1.2.0",
1341 | "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz",
1342 | "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ=="
1343 | },
1344 | "toidentifier": {
1345 | "version": "1.0.0",
1346 | "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
1347 | "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw=="
1348 | },
1349 | "ts-invariant": {
1350 | "version": "0.4.4",
1351 | "resolved": "https://registry.npmjs.org/ts-invariant/-/ts-invariant-0.4.4.tgz",
1352 | "integrity": "sha512-uEtWkFM/sdZvRNNDL3Ehu4WVpwaulhwQszV8mrtcdeE8nN00BV9mAmQ88RkrBhFgl9gMgvjJLAQcZbnPXI9mlA==",
1353 | "requires": {
1354 | "tslib": "^1.9.3"
1355 | },
1356 | "dependencies": {
1357 | "tslib": {
1358 | "version": "1.14.1",
1359 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
1360 | "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
1361 | }
1362 | }
1363 | },
1364 | "tslib": {
1365 | "version": "2.2.0",
1366 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.2.0.tgz",
1367 | "integrity": "sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w=="
1368 | },
1369 | "type-is": {
1370 | "version": "1.6.18",
1371 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
1372 | "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
1373 | "requires": {
1374 | "media-typer": "0.3.0",
1375 | "mime-types": "~2.1.24"
1376 | }
1377 | },
1378 | "unbox-primitive": {
1379 | "version": "1.0.1",
1380 | "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz",
1381 | "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==",
1382 | "requires": {
1383 | "function-bind": "^1.1.1",
1384 | "has-bigints": "^1.0.1",
1385 | "has-symbols": "^1.0.2",
1386 | "which-boxed-primitive": "^1.0.2"
1387 | }
1388 | },
1389 | "unpipe": {
1390 | "version": "1.0.0",
1391 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
1392 | "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw="
1393 | },
1394 | "util.promisify": {
1395 | "version": "1.1.1",
1396 | "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.1.1.tgz",
1397 | "integrity": "sha512-/s3UsZUrIfa6xDhr7zZhnE9SLQ5RIXyYfiVnMMyMDzOc8WhWN4Nbh36H842OyurKbCDAesZOJaVyvmSl6fhGQw==",
1398 | "requires": {
1399 | "call-bind": "^1.0.0",
1400 | "define-properties": "^1.1.3",
1401 | "for-each": "^0.3.3",
1402 | "has-symbols": "^1.0.1",
1403 | "object.getownpropertydescriptors": "^2.1.1"
1404 | }
1405 | },
1406 | "utils-merge": {
1407 | "version": "1.0.1",
1408 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
1409 | "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM="
1410 | },
1411 | "uuid": {
1412 | "version": "8.3.2",
1413 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
1414 | "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg=="
1415 | },
1416 | "vary": {
1417 | "version": "1.1.2",
1418 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
1419 | "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw="
1420 | },
1421 | "which-boxed-primitive": {
1422 | "version": "1.0.2",
1423 | "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz",
1424 | "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==",
1425 | "requires": {
1426 | "is-bigint": "^1.0.1",
1427 | "is-boolean-object": "^1.1.0",
1428 | "is-number-object": "^1.0.4",
1429 | "is-string": "^1.0.5",
1430 | "is-symbol": "^1.0.3"
1431 | }
1432 | },
1433 | "ws": {
1434 | "version": "6.2.2",
1435 | "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz",
1436 | "integrity": "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==",
1437 | "requires": {
1438 | "async-limiter": "~1.0.0"
1439 | }
1440 | },
1441 | "xss": {
1442 | "version": "1.0.9",
1443 | "resolved": "https://registry.npmjs.org/xss/-/xss-1.0.9.tgz",
1444 | "integrity": "sha512-2t7FahYnGJys6DpHLhajusId7R0Pm2yTmuL0GV9+mV0ZlaLSnb2toBmppATfg5sWIhZQGlsTLoecSzya+l4EAQ==",
1445 | "requires": {
1446 | "commander": "^2.20.3",
1447 | "cssfilter": "0.0.10"
1448 | }
1449 | },
1450 | "yallist": {
1451 | "version": "4.0.0",
1452 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
1453 | "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
1454 | },
1455 | "zen-observable": {
1456 | "version": "0.8.15",
1457 | "resolved": "https://registry.npmjs.org/zen-observable/-/zen-observable-0.8.15.tgz",
1458 | "integrity": "sha512-PQ2PC7R9rslx84ndNBZB/Dkv8V8fZEpk83RLgXtYd0fwUgEjseMn1Dgajh2x6S8QbZAFa9p2qVCEuYZNgve0dQ=="
1459 | },
1460 | "zen-observable-ts": {
1461 | "version": "0.8.21",
1462 | "resolved": "https://registry.npmjs.org/zen-observable-ts/-/zen-observable-ts-0.8.21.tgz",
1463 | "integrity": "sha512-Yj3yXweRc8LdRMrCC8nIc4kkjWecPAUVh0TI0OUrWXx6aX790vLcDlWca6I4vsyCGH3LpWxq0dJRcMOFoVqmeg==",
1464 | "requires": {
1465 | "tslib": "^1.9.3",
1466 | "zen-observable": "^0.8.0"
1467 | },
1468 | "dependencies": {
1469 | "tslib": {
1470 | "version": "1.14.1",
1471 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
1472 | "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
1473 | }
1474 | }
1475 | }
1476 | }
1477 | }
1478 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "server",
3 | "version": "1.0.0",
4 | "description": "",
5 | "main": "index.js",
6 | "scripts": {
7 | "test": "echo \"Error: no test specified\" && exit 1",
8 | "start": "node index.js"
9 | },
10 | "author": "",
11 | "license": "ISC",
12 | "dependencies": {
13 | "apollo-server-express": "^2.24.0",
14 | "express": "^4.17.1",
15 | "express-graphql": "^0.12.0",
16 | "graphql": "^15.5.0"
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/readme.md:
--------------------------------------------------------------------------------
1 | 1. ```npm install```
2 | 2. ```npm start```
3 | 3. go to ```localhost:4000/graphql``` to testout queries
4 |
--------------------------------------------------------------------------------