@@ -24,7 +24,7 @@ function redirectMode (redirect) {
2424 * @param {boolean } trim trim body option
2525 */
2626function parseURLEncodedBody ( body , trim ) {
27- var bodySnippet = 'var urlencoded = new URLSearchParams();\n' ;
27+ var bodySnippet = 'const urlencoded = new URLSearchParams();\n' ;
2828 _ . forEach ( body , function ( data ) {
2929 if ( ! data . disabled ) {
3030 bodySnippet += `urlencoded.append("${ sanitize ( data . key , trim ) } ", "${ sanitize ( data . value , trim ) } ");\n` ;
@@ -40,7 +40,7 @@ function parseURLEncodedBody (body, trim) {
4040 * @param {boolean } trim trim body option
4141 */
4242function parseFormData ( body , trim ) {
43- var bodySnippet = 'var formdata = new FormData();\n' ;
43+ var bodySnippet = 'const formdata = new FormData();\n' ;
4444 _ . forEach ( body , function ( data ) {
4545 if ( ! data . disabled ) {
4646 if ( data . type === 'file' ) {
@@ -65,7 +65,7 @@ function parseFormData (body, trim) {
6565 * @param {String } indentString Indentation string
6666 */
6767function parseRawBody ( body , trim , contentType , indentString ) {
68- var bodySnippet = 'var raw = ' ;
68+ var bodySnippet = 'const raw = ' ;
6969 // Match any application type whose underlying structure is json
7070 // For example application/vnd.api+json
7171 // All of them have +json as suffix
@@ -101,7 +101,7 @@ function parseGraphQL (body, trim, indentString) {
101101 catch ( e ) {
102102 graphqlVariables = { } ;
103103 }
104- bodySnippet = 'var graphql = JSON.stringify({\n' ;
104+ bodySnippet = 'const graphql = JSON.stringify({\n' ;
105105 bodySnippet += `${ indentString } query: "${ sanitize ( query , trim ) } ",\n` ;
106106 bodySnippet += `${ indentString } variables: ${ JSON . stringify ( graphqlVariables ) } \n})` ;
107107 return bodySnippet ;
@@ -113,7 +113,7 @@ function parseGraphQL (body, trim, indentString) {
113113 * parses binamry file data
114114 */
115115function parseFileData ( ) {
116- var bodySnippet = 'var file = "<file contents here>";\n' ;
116+ var bodySnippet = 'const file = "<file contents here>";\n' ;
117117 return bodySnippet ;
118118}
119119
@@ -154,7 +154,7 @@ function parseBody (body, trim, indentString, contentType) {
154154function parseHeaders ( headers ) {
155155 var headerSnippet = '' ;
156156 if ( ! _ . isEmpty ( headers ) ) {
157- headerSnippet = 'var myHeaders = new Headers();\n' ;
157+ headerSnippet = 'const myHeaders = new Headers();\n' ;
158158 headers = _ . reject ( headers , 'disabled' ) ;
159159 _ . forEach ( headers , function ( header ) {
160160 headerSnippet += `myHeaders.append("${ sanitize ( header . key , true ) } ", "${ sanitize ( header . value ) } ");\n` ;
@@ -209,6 +209,13 @@ function getOptions () {
209209 type : 'boolean' ,
210210 default : false ,
211211 description : 'Remove white space and additional lines that may affect the server\'s response'
212+ } ,
213+ {
214+ name : 'Use async/await' ,
215+ id : 'asyncAwaitEnabled' ,
216+ type : 'boolean' ,
217+ default : false ,
218+ description : 'Modifies code snippet to use async/await'
212219 }
213220 ] ;
214221}
@@ -238,7 +245,6 @@ function convert (request, options, callback) {
238245 headerSnippet = '' ,
239246 bodySnippet = '' ,
240247 optionsSnippet = '' ,
241- timeoutSnippet = '' ,
242248 fetchSnippet = '' ;
243249 indent = indent . repeat ( options . indentCount ) ;
244250 if ( request . body && request . body . mode === 'graphql' && ! request . headers . has ( 'Content-Type' ) ) {
@@ -294,8 +300,12 @@ function convert (request, options, callback) {
294300 body = request . body && request . body . toJSON ( ) ;
295301 bodySnippet = parseBody ( body , trim , indent , request . headers . get ( 'Content-Type' ) ) ;
296302
297- optionsSnippet = `var requestOptions = {\n${ indent } ` ;
298- optionsSnippet += `method: '${ request . method } ',\n${ indent } ` ;
303+ if ( options . requestTimeout > 0 ) {
304+ codeSnippet += 'const controller = new AbortController();\n' ;
305+ codeSnippet += `const timerId = setTimeout(() => controller.abort(), ${ options . requestTimeout } );\n` ;
306+ }
307+ optionsSnippet = `const requestOptions = {\n${ indent } ` ;
308+ optionsSnippet += `method: "${ request . method } ",\n${ indent } ` ;
299309 if ( headerSnippet !== '' ) {
300310 optionsSnippet += `headers: myHeaders,\n${ indent } ` ;
301311 codeSnippet += headerSnippet + '\n' ;
@@ -305,30 +315,39 @@ function convert (request, options, callback) {
305315 optionsSnippet += `body: ${ body . mode } ,\n${ indent } ` ;
306316 codeSnippet += bodySnippet + '\n' ;
307317 }
308- optionsSnippet += `redirect: '${ redirectMode ( options . followRedirect ) } '\n};\n` ;
318+ if ( options . requestTimeout > 0 ) {
319+ optionsSnippet += `signal: controller.signal,\n${ indent } ` ;
320+ }
321+ optionsSnippet += `redirect: "${ redirectMode ( options . followRedirect ) } "\n};\n` ;
309322
310323 codeSnippet += optionsSnippet + '\n' ;
311324
312- fetchSnippet = `fetch("${ sanitize ( request . url . toString ( ) ) } ", requestOptions)\n${ indent } ` ;
313- fetchSnippet += `.then(response => response.text())\n${ indent } ` ;
314- fetchSnippet += `.then(result => console.log(result))\n${ indent } ` ;
315- fetchSnippet += '.catch(error => console.log(\'error\', error));' ;
316-
317- if ( options . requestTimeout > 0 ) {
318- timeoutSnippet = `var promise = Promise.race([\n${ indent } ` ;
319- timeoutSnippet += `fetch('${ request . url . toString ( ) } ', requestOptions)\n${ indent } ${ indent } ` ;
320- timeoutSnippet += `.then(response => response.text()),\n${ indent } ` ;
321- timeoutSnippet += `new Promise((resolve, reject) =>\n${ indent } ${ indent } ` ;
322- timeoutSnippet += `setTimeout(() => reject(new Error('Timeout')), ${ options . requestTimeout } )\n${ indent } ` ;
323- timeoutSnippet += ')\n]);\n\n' ;
324- timeoutSnippet += 'promise.then(result => console.log(result)),\n' ;
325- timeoutSnippet += 'promise.catch(error => console.log(error));' ;
326- codeSnippet += timeoutSnippet ;
325+ if ( options . asyncAwaitEnabled ) {
326+ fetchSnippet += `try {\n${ indent } ` ;
327+ fetchSnippet += `const response = await fetch("${ sanitize ( request . url . toString ( ) ) } ", requestOptions);\n${ indent } ` ;
328+ fetchSnippet += `const result = await response.text();\n${ indent } ` ;
329+ fetchSnippet += 'console.log(result)\n' ;
330+ fetchSnippet += `} catch (error) {\n${ indent } ` ;
331+ fetchSnippet += 'console.error(error);\n' ;
332+ if ( options . requestTimeout > 0 ) {
333+ fetchSnippet += `} finally {\n${ indent } ` ;
334+ fetchSnippet += 'clearTimeout(timerId);\n' ;
335+ }
336+ fetchSnippet += '};' ;
327337 }
328338 else {
329- codeSnippet += fetchSnippet ;
339+ fetchSnippet = `fetch("${ sanitize ( request . url . toString ( ) ) } ", requestOptions)\n${ indent } ` ;
340+ fetchSnippet += `.then((response) => response.text())\n${ indent } ` ;
341+ fetchSnippet += `.then((result) => console.log(result))\n${ indent } ` ;
342+ fetchSnippet += '.catch((error) => console.error(error))' ;
343+ if ( options . requestTimeout > 0 ) {
344+ fetchSnippet += `\n${ indent } .finally(() => clearTimeout(timerId))` ;
345+ }
346+ fetchSnippet += ';' ;
330347 }
331348
349+ codeSnippet += fetchSnippet ;
350+
332351 callback ( null , codeSnippet ) ;
333352}
334353
0 commit comments