Skip to content

Commit d94316e

Browse files
authored
Add proper handling for query and variables of graphql body (#479)
* Add proper handling for query and variables of graphql body * add lint ignore statement * add a wrapper around convert function to catch errors
1 parent 8799e9b commit d94316e

File tree

12 files changed

+100
-67
lines changed

12 files changed

+100
-67
lines changed

codegens/csharp-restsharp/lib/parseRequest.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -48,16 +48,16 @@ function parseContentType (request) {
4848
* @returns {String} code snippet for graphql body
4949
*/
5050
function parseGraphQL (requestBody, trimFields) {
51-
let query = requestBody.graphql.query,
52-
graphqlVariables;
51+
let query = requestBody.graphql ? requestBody.graphql.query : '',
52+
graphqlVariables = requestBody.graphql ? requestBody.graphql.variables : '{}';
5353
try {
54-
graphqlVariables = JSON.parse(requestBody.graphql.variables);
54+
graphqlVariables = JSON.parse(graphqlVariables || '{}');
5555
}
5656
catch (e) {
5757
graphqlVariables = {};
5858
}
5959
return 'request.AddParameter("application/json", ' +
60-
`"${sanitize(JSON.stringify({query: query, variables: graphqlVariables}), trimFields)}",
60+
`"${sanitize(JSON.stringify({query: query || '', variables: graphqlVariables}), trimFields)}",
6161
ParameterType.RequestBody);\n`;
6262

6363
}

codegens/curl/lib/index.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -138,9 +138,10 @@ self = module.exports = {
138138
case 'raw':
139139
snippet += indent + `--data-raw ${quoteType}${sanitize(body.raw.toString(), trim, quoteType)}${quoteType}`;
140140
break;
141+
141142
case 'graphql':
142143
// eslint-disable-next-line no-case-declarations
143-
let query = body.graphql.query,
144+
let query = body.graphql ? body.graphql.query : '',
144145
graphqlVariables;
145146
try {
146147
graphqlVariables = JSON.parse(body.graphql.variables);

codegens/dart-http/lib/index.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ function parseRawBody (body, trim) {
4343
*/
4444
function parseGraphQLBody (body, trim) {
4545
var bodySnippet = '',
46-
query = body.query,
46+
query = body ? body.query : '',
4747
graphqlVariables;
4848
try {
4949
graphqlVariables = JSON.parse(body.variables);

codegens/golang/lib/index.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ function parseRawBody (body, trim) {
2525
* @param {boolean} trim trim body option
2626
*/
2727
function parseGraphQL (body, trim) {
28-
let query = body.query,
28+
let query = body ? body.query : '',
2929
graphqlVariables,
3030
bodySnippet;
3131
try {
@@ -35,7 +35,7 @@ function parseGraphQL (body, trim) {
3535
graphqlVariables = {};
3636
}
3737
bodySnippet = `payload := strings.NewReader("${sanitize(JSON.stringify({
38-
query: query,
38+
query: query || '',
3939
variables: graphqlVariables
4040
}), trim)}")`;
4141
return bodySnippet;

codegens/http/lib/util.js

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -187,18 +187,20 @@ function getBody (request, trimRequestBody) {
187187
requestBody += request.body[request.body.mode].toString();
188188
}
189189
return trimRequestBody ? requestBody.trim() : requestBody;
190+
190191
case GRAPHQL:
191192
// eslint-disable-next-line no-case-declarations
192-
let query = request.body[request.body.mode].query,
193+
let graphql = request.body[request.body.mode],
194+
query = graphql ? graphql.query : '',
193195
graphqlVariables;
194196
try {
195-
graphqlVariables = JSON.parse(request.body[request.body.mode].variables);
197+
graphqlVariables = JSON.parse(graphql ? graphql.variables : '{}');
196198
}
197199
catch (e) {
198200
graphqlVariables = {};
199201
}
200202
requestBody += JSON.stringify({
201-
query: query,
203+
query: query || '',
202204
variables: graphqlVariables
203205
});
204206
return trimRequestBody ? requestBody.trim() : requestBody;

codegens/java-okhttp/lib/parseRequest.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,8 @@ function parseBody (requestBody, indentString, trimFields) {
7474
`"${parseUrlencode(requestBody, trimFields)}");\n`;
7575
case 'raw':
7676
return 'RequestBody body = RequestBody.create(mediaType, ' +
77-
`${JSON.stringify(requestBody[requestBody.mode])});\n`;
77+
`${JSON.stringify(requestBody[requestBody.mode])});\n`;
78+
7879
case 'graphql':
7980
// eslint-disable-next-line no-case-declarations
8081
let query = requestBody[requestBody.mode].query,
@@ -87,7 +88,7 @@ function parseBody (requestBody, indentString, trimFields) {
8788
}
8889
return 'RequestBody body = RequestBody.create(mediaType, ' +
8990
`"${sanitize(JSON.stringify({
90-
query: query,
91+
query: query || '',
9192
variables: graphqlVariables
9293
}), trimFields)}");\n`;
9394
case 'formdata':

codegens/java-unirest/lib/parseRequest.js

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -88,18 +88,19 @@ function parseBody (request, indentString, trimField) {
8888
return parseFormData(request.body.toJSON(), indentString, trimField);
8989
case 'raw':
9090
return indentString + `.body(${JSON.stringify(request.body.toString())})\n`;
91+
9192
case 'graphql':
9293
// eslint-disable-next-line no-case-declarations
93-
let query = request.body.graphql.query,
94+
let query = request.body.graphql ? request.body.graphql.query : '',
9495
graphqlVariables;
9596
try {
96-
graphqlVariables = JSON.parse(request.body.graphql.variables);
97+
graphqlVariables = JSON.parse(request.body.graphql ? request.body.graphql.variables : '{}');
9798
}
9899
catch (e) {
99100
graphqlVariables = {};
100101
}
101102
return indentString + `.body("${sanitize(JSON.stringify({
102-
query: query,
103+
query: query || '',
103104
variables: graphqlVariables
104105
}), trimField)}")\n`;
105106
case 'formdata':

codegens/nodejs-axios/lib/parseRequest.js

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ function parseURLEncodedBody (body, trim, ES6_enabled, indentString) {
2525
else {
2626
bodySnippet += 'var';
2727
}
28-
bodySnippet += ` data = qs.stringify({\n${indentString}${dataArray.join(',\n'+indentString)} \n});`;
28+
bodySnippet += ` data = qs.stringify({\n${indentString}${dataArray.join(',\n' + indentString)} \n});`;
2929
return bodySnippet;
3030
}
3131

@@ -110,17 +110,17 @@ function parseRawBody (body, trim, contentType, ES6_enabled, indentString) {
110110
*/
111111
function parseGraphQL (body, trim, indentString, ES6_enabled) {
112112
var varDeclare = ES6_enabled ? 'let' : 'var';
113-
let query = body.query,
114-
graphqlVariables,
113+
let query = body ? body.query : '',
114+
graphqlVariables = body ? body.variables : '{}',
115115
bodySnippet;
116116
try {
117-
graphqlVariables = JSON.parse(body.variables);
117+
graphqlVariables = JSON.parse(graphqlVariables || '{}');
118118
}
119119
catch (e) {
120120
graphqlVariables = {};
121121
}
122122
bodySnippet = varDeclare + ' data = JSON.stringify({\n';
123-
bodySnippet += `${indentString}query: \`${query.trim()}\`,\n`;
123+
bodySnippet += `${indentString}query: \`${query ? query.trim() : ''}\`,\n`;
124124
bodySnippet += `${indentString}variables: ${JSON.stringify(graphqlVariables)}\n});\n`;
125125
return bodySnippet;
126126
}
@@ -148,7 +148,7 @@ function parseFileData (ES6_enabled) {
148148
* @param {boolean} ES6_enabled ES6 syntax option
149149
*/
150150
function parseBody (body, trim, indentString, contentType, ES6_enabled) {
151-
if (!_.isEmpty(body)) {
151+
if (body && !_.isEmpty(body)) {
152152
switch (body.mode) {
153153
case 'urlencoded':
154154
return parseURLEncodedBody(body.urlencoded, trim, ES6_enabled, indentString);

codegens/nodejs-native/lib/parseRequest.js

Lines changed: 20 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,25 @@ function generateMultipartFormData (requestbody) {
7373
return postData;
7474
}
7575

76+
/** generate graphql code snippet
77+
*
78+
* @param body GraphQL body
79+
* @param indentString string defining indentation
80+
*/
81+
function parseGraphql (body, indentString) {
82+
let query = body ? body.query : '',
83+
graphqlVariables = body ? body.variables : '{}';
84+
try {
85+
graphqlVariables = JSON.parse(graphqlVariables || '{}');
86+
}
87+
catch (e) {
88+
graphqlVariables = {};
89+
}
90+
return 'JSON.stringify({\n' +
91+
`${indentString}query: \`${query ? query.trim() : ''}\`,\n` +
92+
`${indentString}variables: ${JSON.stringify(graphqlVariables)}\n})`;
93+
}
94+
7695
/**
7796
* Parses body object based on mode of body and returns code snippet
7897
*
@@ -99,18 +118,7 @@ function parseBody (requestbody, indentString, trimBody, contentType) {
99118
}
100119
return ` ${JSON.stringify(requestbody[requestbody.mode])}`;
101120
case 'graphql':
102-
// eslint-disable-next-line no-case-declarations
103-
let query = requestbody[requestbody.mode].query,
104-
graphqlVariables;
105-
try {
106-
graphqlVariables = JSON.parse(requestbody[requestbody.mode].variables);
107-
}
108-
catch (e) {
109-
graphqlVariables = {};
110-
}
111-
return 'JSON.stringify({\n' +
112-
`${indentString}query: \`${query.trim()}\`,\n` +
113-
`${indentString}variables: ${JSON.stringify(graphqlVariables)}\n})`;
121+
return parseGraphql(requestbody[requestbody.mode], indentString);
114122
case 'formdata':
115123
return generateMultipartFormData(requestbody);
116124
case 'urlencoded':

codegens/nodejs-request/lib/parseRequest.js

Lines changed: 21 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,26 @@ function extractFormData (dataArray, indentString, trimBody) {
8484
return snippetString.join(',\n') + '\n';
8585
}
8686

87+
/** generate graphql code snippet
88+
*
89+
* @param body GraphQL body
90+
* @param indentString string defining indentation
91+
*/
92+
function parseGraphql (body, indentString) {
93+
let query = body ? body.query : '',
94+
graphqlVariables = body ? body.variables : '{}';
95+
try {
96+
graphqlVariables = JSON.parse(graphqlVariables || '{}');
97+
}
98+
catch (e) {
99+
graphqlVariables = {};
100+
}
101+
return 'body: JSON.stringify({\n' +
102+
`${indentString.repeat(2)}query: \`${query ? query.trim() : ''}\`,\n` +
103+
`${indentString.repeat(2)}variables: ${JSON.stringify(graphqlVariables)}\n` +
104+
`${indentString}})`;
105+
}
106+
87107
/**
88108
* Parses body object based on mode of body and returns code snippet
89109
*
@@ -111,19 +131,7 @@ function parseBody (requestbody, indentString, trimBody, contentType) {
111131
}
112132
return `body: '${sanitize(requestbody[requestbody.mode])}'\n`;
113133
case 'graphql':
114-
// eslint-disable-next-line no-case-declarations
115-
let query = requestbody[requestbody.mode].query,
116-
graphqlVariables;
117-
try {
118-
graphqlVariables = JSON.parse(requestbody[requestbody.mode].variables);
119-
}
120-
catch (e) {
121-
graphqlVariables = {};
122-
}
123-
return 'body: JSON.stringify({\n' +
124-
`${indentString.repeat(2)}query: \`${query.trim()}\`,\n` +
125-
`${indentString.repeat(2)}variables: ${JSON.stringify(graphqlVariables)}\n` +
126-
`${indentString}})`;
134+
return parseGraphql(requestbody[requestbody.mode], indentString);
127135
case 'formdata':
128136
return `formData: {\n${extractFormData(requestbody[requestbody.mode], indentString, trimBody)}` +
129137
indentString + '}';

0 commit comments

Comments
 (0)