@@ -8,7 +8,6 @@ import { useMainContext } from 'components/context/MainContext'
8
8
type CodeExamples = Record < string , any >
9
9
/*
10
10
Generates a curl example
11
-
12
11
For example:
13
12
curl \
14
13
-X POST \
@@ -24,6 +23,11 @@ export function getShellExample(operation: Operation, codeSample: CodeSample) {
24
23
? codeSample . response . contentType
25
24
: 'application/vnd.github+json'
26
25
26
+ const contentTypeHeader =
27
+ codeSample ?. request ?. contentType === 'application/octet-stream'
28
+ ? '-H "Content-Type: application/octet-stream"'
29
+ : ''
30
+
27
31
let requestPath = codeSample ?. request ?. parameters
28
32
? parseTemplate ( operation . requestPath ) . expand ( codeSample . request . parameters )
29
33
: operation . requestPath
@@ -46,14 +50,22 @@ export function getShellExample(operation: Operation, codeSample: CodeSample) {
46
50
const CURL_CONTENT_TYPE_MAPPING : { [ key : string ] : string } = {
47
51
'application/x-www-form-urlencoded' : '--data-urlencode' ,
48
52
'multipart/form-data' : '--form' ,
53
+ 'application/octet-stream' : '--data-binary' ,
49
54
}
50
55
const contentType = codeSample . request . contentType
51
56
if ( codeSample . request . contentType in CURL_CONTENT_TYPE_MAPPING ) {
52
57
requestBodyParams = ''
53
- const paramNames = Object . keys ( codeSample . request . bodyParameters )
54
- paramNames . forEach ( ( elem ) => {
55
- requestBodyParams = `${ requestBodyParams } ${ CURL_CONTENT_TYPE_MAPPING [ contentType ] } "${ elem } =${ codeSample . request . bodyParameters [ elem ] } "`
56
- } )
58
+ // Most of the time the example body parameters have a name and value
59
+ // and are included in an object. But, some cases are a single value
60
+ // and the type is a string.
61
+ if ( typeof codeSample . request . bodyParameters === 'object' ) {
62
+ const paramNames = Object . keys ( codeSample . request . bodyParameters )
63
+ paramNames . forEach ( ( elem ) => {
64
+ requestBodyParams = `${ requestBodyParams } ${ CURL_CONTENT_TYPE_MAPPING [ contentType ] } "${ elem } =${ codeSample . request . bodyParameters [ elem ] } "`
65
+ } )
66
+ } else {
67
+ requestBodyParams = `${ CURL_CONTENT_TYPE_MAPPING [ contentType ] } "${ codeSample . request . bodyParameters } "`
68
+ }
57
69
}
58
70
}
59
71
@@ -71,6 +83,7 @@ export function getShellExample(operation: Operation, codeSample: CodeSample) {
71
83
const args = [
72
84
operation . verb !== 'get' && `-X ${ operation . verb . toUpperCase ( ) } ` ,
73
85
`-H "Accept: ${ defaultAcceptHeader } " \\\n ${ authHeader } ${ apiVersionHeader } ` ,
86
+ contentTypeHeader ,
74
87
`${ operation . serverUrl } ${ requestPath } ` ,
75
88
requestBodyParams ,
76
89
] . filter ( Boolean )
@@ -101,7 +114,10 @@ export function getGHExample(operation: Operation, codeSample: CodeSample) {
101
114
requestPath += requiredQueryParams ? `?${ requiredQueryParams } ` : ''
102
115
103
116
let requestBodyParams = ''
104
- if ( codeSample ?. request ?. bodyParameters ) {
117
+ // Most of the time the example body parameters have a name and value
118
+ // and are included in an object. But, some cases are a single value
119
+ // and the type is a string.
120
+ if ( typeof codeSample ?. request ?. bodyParameters === 'object' ) {
105
121
const bodyParamValues = Object . values ( codeSample . request . bodyParameters )
106
122
// GitHub CLI does not support sending Objects and arrays using the -F or
107
123
// -f flags. That support may be added in the future. It is possible to
@@ -120,6 +136,8 @@ export function getGHExample(operation: Operation, codeSample: CodeSample) {
120
136
}
121
137
} )
122
138
. join ( '\\\n ' )
139
+ } else {
140
+ requestBodyParams = `-f '${ codeSample . request . bodyParameters } '`
123
141
}
124
142
const args = [
125
143
operation . verb !== 'get' && `--method ${ operation . verb . toUpperCase ( ) } ` ,
@@ -147,9 +165,15 @@ export function getGHExample(operation: Operation, codeSample: CodeSample) {
147
165
148
166
*/
149
167
export function getJSExample ( operation : Operation , codeSample : CodeSample ) {
150
- const parameters = codeSample . request
151
- ? { ...codeSample . request . parameters , ...codeSample . request . bodyParameters }
152
- : { }
168
+ const parameters =
169
+ // Most of the time the example body parameters have a name and value
170
+ // and are included in an object. But, some cases are a single value
171
+ // and the type is a string.
172
+ typeof codeSample . request . bodyParameters === 'object'
173
+ ? codeSample . request
174
+ ? { ...codeSample . request . parameters , ...codeSample . request . bodyParameters }
175
+ : { }
176
+ : { ...codeSample . request . parameters , data : codeSample . request . bodyParameters }
153
177
154
178
let queryParameters = ''
155
179
0 commit comments