Skip to content

Commit e01e6e8

Browse files
eokoneyoAlan-Cha
authored andcommitted
start on implementation to handle processing of uploaded file we receive
Signed-off-by: Eyo O. Eyo <[email protected]> Signed-off-by: Eyo Okon Eyo <[email protected]>
1 parent 9a96022 commit e01e6e8

File tree

3 files changed

+162
-0
lines changed

3 files changed

+162
-0
lines changed

packages/openapi-to-graphql/package.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,7 @@
8484
"cross-fetch": "^3.1.4",
8585
"debug": "^4.2.0",
8686
"deep-equal": "^2.0.5",
87+
"form-data": "^4.0.0",
8788
"form-urlencoded": "^6.0.4",
8889
"graphql-scalars": "^1.10.0",
8990
"graphql-subscriptions": "^1.1.0",
@@ -103,6 +104,7 @@
103104
"devDependencies": {
104105
"@types/deep-equal": "^1.0.1",
105106
"@types/graphql": "^14.0.3",
107+
"@types/graphql-upload": "^8.0.7",
106108
"@types/jest": "^26.0.14",
107109
"@types/node": "^16.3.3",
108110
"@types/url-join": "^4.0.1",

packages/openapi-to-graphql/src/resolver_builder.ts

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import { SubscriptionContext } from './types/graphql'
1515
import { PreprocessingData } from './types/preprocessing_data'
1616
import { RequestOptions } from './types/options'
1717
import crossFetch from 'cross-fetch'
18+
import { FileUpload } from 'graphql-upload'
1819

1920
// Imports:
2021
import * as Oas3Tools from './oas_3_tools'
@@ -24,6 +25,7 @@ import { GraphQLError, GraphQLFieldResolver } from 'graphql'
2425
import formurlencoded from 'form-urlencoded'
2526
import { PubSub } from 'graphql-subscriptions'
2627
import urljoin from 'url-join'
28+
import FormData from 'form-data'
2729

2830
const pubsub = new PubSub()
2931

@@ -554,6 +556,7 @@ export function getResolver<TSource, TContext, TArgs>({
554556
* GraphQL produces sanitized payload names, so we have to sanitize before
555557
* lookup here
556558
*/
559+
let form
557560
resolveData.usedPayload = undefined
558561
if (typeof payloadName === 'string') {
559562
// The option genericPayloadArgName will change the payload name to "requestBody"
@@ -572,6 +575,18 @@ export function getResolver<TSource, TContext, TArgs>({
572575
rawPayload = formurlencoded(
573576
Oas3Tools.desanitizeObjectKeys(args[sanePayloadName], data.saneMap)
574577
)
578+
} else if (operation.payloadContentType === 'multipart/form-data') {
579+
form = new FormData()
580+
581+
Object.entries(args[sanePayloadName]).forEach(([key, value]) => {
582+
// if (typeof value === 'object' && (value as Partial<FileUpload>).createReadStream) {
583+
// form.append(key, (value as FileUpload).createReadStream())
584+
// }
585+
586+
form.append(key, value)
587+
})
588+
589+
rawPayload = form
575590
} else {
576591
// Payload is not an object
577592
rawPayload = args[sanePayloadName]
@@ -598,6 +613,10 @@ export function getResolver<TSource, TContext, TArgs>({
598613
if (typeof headers === 'object') {
599614
Object.assign(options.headers, headers)
600615
}
616+
617+
if (form) {
618+
Object.assign(options.headers, form.getHeaders())
619+
}
601620
}
602621

603622
// Query string:

packages/openapi-to-graphql/yarn.lock

Lines changed: 141 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -550,6 +550,13 @@
550550
resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82"
551551
integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==
552552

553+
"@types/accepts@*":
554+
version "1.3.5"
555+
resolved "https://registry.yarnpkg.com/@types/accepts/-/accepts-1.3.5.tgz#c34bec115cfc746e04fe5a059df4ce7e7b391575"
556+
integrity sha512-jOdnI/3qTpHABjM5cx1Hc0sKsPoYCp+DP/GJRGtDlPd7fiV9oXGGIcjW/ZOxLIvjGz8MA+uMZI9metHlgqbgwQ==
557+
dependencies:
558+
"@types/node" "*"
559+
553560
"@types/babel__core@^7.0.0", "@types/babel__core@^7.1.14":
554561
version "7.1.15"
555562
resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.15.tgz#2ccfb1ad55a02c83f8e0ad327cbc332f55eb1024"
@@ -583,18 +590,84 @@
583590
dependencies:
584591
"@babel/types" "^7.3.0"
585592

593+
"@types/body-parser@*":
594+
version "1.19.2"
595+
resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.2.tgz#aea2059e28b7658639081347ac4fab3de166e6f0"
596+
integrity sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==
597+
dependencies:
598+
"@types/connect" "*"
599+
"@types/node" "*"
600+
601+
"@types/connect@*":
602+
version "3.4.35"
603+
resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.35.tgz#5fcf6ae445e4021d1fc2219a4873cc73a3bb2ad1"
604+
integrity sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==
605+
dependencies:
606+
"@types/node" "*"
607+
608+
"@types/content-disposition@*":
609+
version "0.5.4"
610+
resolved "https://registry.yarnpkg.com/@types/content-disposition/-/content-disposition-0.5.4.tgz#de48cf01c79c9f1560bcfd8ae43217ab028657f8"
611+
integrity sha512-0mPF08jn9zYI0n0Q/Pnz7C4kThdSt+6LD4amsrYDDpgBfrVWa3TcCOxKX1zkGgYniGagRv8heN2cbh+CAn+uuQ==
612+
613+
"@types/cookies@*":
614+
version "0.7.7"
615+
resolved "https://registry.yarnpkg.com/@types/cookies/-/cookies-0.7.7.tgz#7a92453d1d16389c05a5301eef566f34946cfd81"
616+
integrity sha512-h7BcvPUogWbKCzBR2lY4oqaZbO3jXZksexYJVFvkrFeLgbZjQkU4x8pRq6eg2MHXQhY0McQdqmmsxRWlVAHooA==
617+
dependencies:
618+
"@types/connect" "*"
619+
"@types/express" "*"
620+
"@types/keygrip" "*"
621+
"@types/node" "*"
622+
586623
"@types/deep-equal@^1.0.1":
587624
version "1.0.1"
588625
resolved "https://registry.yarnpkg.com/@types/deep-equal/-/deep-equal-1.0.1.tgz#71cfabb247c22bcc16d536111f50c0ed12476b03"
589626
integrity sha512-mMUu4nWHLBlHtxXY17Fg6+ucS/MnndyOWyOe7MmwkoMYxvfQU2ajtRaEvqSUv+aVkMqH/C0NCI8UoVfRNQ10yg==
590627

628+
"@types/express-serve-static-core@^4.17.18":
629+
version "4.17.26"
630+
resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.26.tgz#5d9a8eeecb9d5f9d7fc1d85f541512a84638ae88"
631+
integrity sha512-zeu3tpouA043RHxW0gzRxwCHchMgftE8GArRsvYT0ByDMbn19olQHx5jLue0LxWY6iYtXb7rXmuVtSkhy9YZvQ==
632+
dependencies:
633+
"@types/node" "*"
634+
"@types/qs" "*"
635+
"@types/range-parser" "*"
636+
637+
"@types/express@*":
638+
version "4.17.13"
639+
resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.13.tgz#a76e2995728999bab51a33fabce1d705a3709034"
640+
integrity sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==
641+
dependencies:
642+
"@types/body-parser" "*"
643+
"@types/express-serve-static-core" "^4.17.18"
644+
"@types/qs" "*"
645+
"@types/serve-static" "*"
646+
647+
"@types/fs-capacitor@*":
648+
version "2.0.0"
649+
resolved "https://registry.yarnpkg.com/@types/fs-capacitor/-/fs-capacitor-2.0.0.tgz#17113e25817f584f58100fb7a08eed288b81956e"
650+
integrity sha512-FKVPOCFbhCvZxpVAMhdBdTfVfXUpsh15wFHgqOKxh9N9vzWZVuWCSijZ5T4U34XYNnuj2oduh6xcs1i+LPI+BQ==
651+
dependencies:
652+
"@types/node" "*"
653+
591654
"@types/graceful-fs@^4.1.2":
592655
version "4.1.5"
593656
resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.5.tgz#21ffba0d98da4350db64891f92a9e5db3cdb4e15"
594657
integrity sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==
595658
dependencies:
596659
"@types/node" "*"
597660

661+
"@types/graphql-upload@^8.0.7":
662+
version "8.0.7"
663+
resolved "https://registry.yarnpkg.com/@types/graphql-upload/-/graphql-upload-8.0.7.tgz#71dd5d4a8d9ddb598df91298d6e98a943061b255"
664+
integrity sha512-uXhInuUY/W6n9a+PdCt9vcZ7z2m+NzByBJFvvDM+46pljqEwXXnIAjsEI1Dka2FKRTGthetm/imN//RhtEEYSA==
665+
dependencies:
666+
"@types/express" "*"
667+
"@types/fs-capacitor" "*"
668+
"@types/koa" "*"
669+
graphql "^15.3.0"
670+
598671
"@types/graphql@^0.9.1":
599672
version "0.9.4"
600673
resolved "https://registry.yarnpkg.com/@types/graphql/-/graphql-0.9.4.tgz#cdeb6bcbef9b6c584374b81aa7f48ecf3da404fa"
@@ -607,6 +680,16 @@
607680
dependencies:
608681
graphql "*"
609682

683+
"@types/http-assert@*":
684+
version "1.5.3"
685+
resolved "https://registry.yarnpkg.com/@types/http-assert/-/http-assert-1.5.3.tgz#ef8e3d1a8d46c387f04ab0f2e8ab8cb0c5078661"
686+
integrity sha512-FyAOrDuQmBi8/or3ns4rwPno7/9tJTijVW6aQQjK02+kOQ8zmoNg2XJtAuQhvQcy1ASJq38wirX5//9J1EqoUA==
687+
688+
"@types/http-errors@*":
689+
version "1.8.1"
690+
resolved "https://registry.yarnpkg.com/@types/http-errors/-/http-errors-1.8.1.tgz#e81ad28a60bee0328c6d2384e029aec626f1ae67"
691+
integrity sha512-e+2rjEwK6KDaNOm5Aa9wNGgyS9oSZU/4pfSMMPYNOfjvFI0WVXm29+ITRFr6aKDvvKo7uU1jV68MW4ScsfDi7Q==
692+
610693
"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1":
611694
version "2.0.3"
612695
resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz#4ba8ddb720221f432e443bd5f9117fd22cfd4762"
@@ -634,6 +717,37 @@
634717
jest-diff "^26.0.0"
635718
pretty-format "^26.0.0"
636719

720+
"@types/keygrip@*":
721+
version "1.0.2"
722+
resolved "https://registry.yarnpkg.com/@types/keygrip/-/keygrip-1.0.2.tgz#513abfd256d7ad0bf1ee1873606317b33b1b2a72"
723+
integrity sha512-GJhpTepz2udxGexqos8wgaBx4I/zWIDPh/KOGEwAqtuGDkOUJu5eFvwmdBX4AmB8Odsr+9pHCQqiAqDL/yKMKw==
724+
725+
"@types/koa-compose@*":
726+
version "3.2.5"
727+
resolved "https://registry.yarnpkg.com/@types/koa-compose/-/koa-compose-3.2.5.tgz#85eb2e80ac50be95f37ccf8c407c09bbe3468e9d"
728+
integrity sha512-B8nG/OoE1ORZqCkBVsup/AKcvjdgoHnfi4pZMn5UwAPCbhk/96xyv284eBYW8JlQbQ7zDmnpFr68I/40mFoIBQ==
729+
dependencies:
730+
"@types/koa" "*"
731+
732+
"@types/koa@*":
733+
version "2.13.4"
734+
resolved "https://registry.yarnpkg.com/@types/koa/-/koa-2.13.4.tgz#10620b3f24a8027ef5cbae88b393d1b31205726b"
735+
integrity sha512-dfHYMfU+z/vKtQB7NUrthdAEiSvnLebvBjwHtfFmpZmB7em2N3WVQdHgnFq+xvyVgxW5jKDmjWfLD3lw4g4uTw==
736+
dependencies:
737+
"@types/accepts" "*"
738+
"@types/content-disposition" "*"
739+
"@types/cookies" "*"
740+
"@types/http-assert" "*"
741+
"@types/http-errors" "*"
742+
"@types/keygrip" "*"
743+
"@types/koa-compose" "*"
744+
"@types/node" "*"
745+
746+
"@types/mime@^1":
747+
version "1.3.2"
748+
resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.2.tgz#93e25bf9ee75fe0fd80b594bc4feb0e862111b5a"
749+
integrity sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==
750+
637751
"@types/minimatch@^3.0.3":
638752
version "3.0.5"
639753
resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.5.tgz#1001cc5e6a3704b83c236027e77f2f58ea010f40"
@@ -654,6 +768,24 @@
654768
resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.3.2.tgz#fc8c2825e4ed2142473b4a81064e6e081463d1b3"
655769
integrity sha512-eI5Yrz3Qv4KPUa/nSIAi0h+qX0XyewOliug5F2QAtuRg6Kjg6jfmxe1GIwoIRhZspD1A0RP8ANrPwvEXXtRFog==
656770

771+
"@types/qs@*":
772+
version "6.9.7"
773+
resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb"
774+
integrity sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==
775+
776+
"@types/range-parser@*":
777+
version "1.2.4"
778+
resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.4.tgz#cd667bcfdd025213aafb7ca5915a932590acdcdc"
779+
integrity sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==
780+
781+
"@types/serve-static@*":
782+
version "1.13.10"
783+
resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.13.10.tgz#f5e0ce8797d2d7cc5ebeda48a52c96c4fa47a8d9"
784+
integrity sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ==
785+
dependencies:
786+
"@types/mime" "^1"
787+
"@types/node" "*"
788+
657789
"@types/stack-utils@^2.0.0":
658790
version "2.0.1"
659791
resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.1.tgz#20f18294f797f2209b5f65c8e3b5c8e8261d127c"
@@ -2356,6 +2488,15 @@ form-data@^3.0.0:
23562488
combined-stream "^1.0.8"
23572489
mime-types "^2.1.12"
23582490

2491+
form-data@^4.0.0:
2492+
version "4.0.0"
2493+
resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452"
2494+
integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==
2495+
dependencies:
2496+
asynckit "^0.4.0"
2497+
combined-stream "^1.0.8"
2498+
mime-types "^2.1.12"
2499+
23592500
form-urlencoded@^6.0.4:
23602501
version "6.0.4"
23612502
resolved "https://registry.yarnpkg.com/form-urlencoded/-/form-urlencoded-6.0.4.tgz#62305ea704bb86e1c8b946d1aae5a34e02b6634f"

0 commit comments

Comments
 (0)