Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

repo sync #22630

Merged
merged 1 commit into from
Dec 12, 2022
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 9 additions & 33 deletions components/lib/get-rest-code-samples.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import { useMainContext } from 'components/context/MainContext'
type CodeExamples = Record<string, any>
/*
Generates a curl example

For example:
curl \
-X POST \
Expand All @@ -23,11 +24,6 @@ export function getShellExample(operation: Operation, codeSample: CodeSample) {
? codeSample.response.contentType
: 'application/vnd.github+json'

const contentTypeHeader =
codeSample?.request?.contentType === 'application/octet-stream'
? '-H "Content-Type: application/octet-stream"'
: ''

let requestPath = codeSample?.request?.parameters
? parseTemplate(operation.requestPath).expand(codeSample.request.parameters)
: operation.requestPath
Expand All @@ -50,22 +46,14 @@ export function getShellExample(operation: Operation, codeSample: CodeSample) {
const CURL_CONTENT_TYPE_MAPPING: { [key: string]: string } = {
'application/x-www-form-urlencoded': '--data-urlencode',
'multipart/form-data': '--form',
'application/octet-stream': '--data-binary',
}
const contentType = codeSample.request.contentType
if (codeSample.request.contentType in CURL_CONTENT_TYPE_MAPPING) {
requestBodyParams = ''
// Most of the time the example body parameters have a name and value
// and are included in an object. But, some cases are a single value
// and the type is a string.
if (typeof codeSample.request.bodyParameters === 'object') {
const paramNames = Object.keys(codeSample.request.bodyParameters)
paramNames.forEach((elem) => {
requestBodyParams = `${requestBodyParams} ${CURL_CONTENT_TYPE_MAPPING[contentType]} "${elem}=${codeSample.request.bodyParameters[elem]}"`
})
} else {
requestBodyParams = `${CURL_CONTENT_TYPE_MAPPING[contentType]} "${codeSample.request.bodyParameters}"`
}
const paramNames = Object.keys(codeSample.request.bodyParameters)
paramNames.forEach((elem) => {
requestBodyParams = `${requestBodyParams} ${CURL_CONTENT_TYPE_MAPPING[contentType]} "${elem}=${codeSample.request.bodyParameters[elem]}"`
})
}
}

Expand All @@ -83,7 +71,6 @@ export function getShellExample(operation: Operation, codeSample: CodeSample) {
const args = [
operation.verb !== 'get' && `-X ${operation.verb.toUpperCase()}`,
`-H "Accept: ${defaultAcceptHeader}" \\\n ${authHeader}${apiVersionHeader}`,
contentTypeHeader,
`${operation.serverUrl}${requestPath}`,
requestBodyParams,
].filter(Boolean)
Expand Down Expand Up @@ -114,10 +101,7 @@ export function getGHExample(operation: Operation, codeSample: CodeSample) {
requestPath += requiredQueryParams ? `?${requiredQueryParams}` : ''

let requestBodyParams = ''
// Most of the time the example body parameters have a name and value
// and are included in an object. But, some cases are a single value
// and the type is a string.
if (typeof codeSample?.request?.bodyParameters === 'object') {
if (codeSample?.request?.bodyParameters) {
const bodyParamValues = Object.values(codeSample.request.bodyParameters)
// GitHub CLI does not support sending Objects and arrays using the -F or
// -f flags. That support may be added in the future. It is possible to
Expand All @@ -136,8 +120,6 @@ export function getGHExample(operation: Operation, codeSample: CodeSample) {
}
})
.join('\\\n ')
} else {
requestBodyParams = `-f '${codeSample.request.bodyParameters}'`
}
const args = [
operation.verb !== 'get' && `--method ${operation.verb.toUpperCase()}`,
Expand Down Expand Up @@ -165,15 +147,9 @@ export function getGHExample(operation: Operation, codeSample: CodeSample) {

*/
export function getJSExample(operation: Operation, codeSample: CodeSample) {
const parameters =
// Most of the time the example body parameters have a name and value
// and are included in an object. But, some cases are a single value
// and the type is a string.
typeof codeSample.request.bodyParameters === 'object'
? codeSample.request
? { ...codeSample.request.parameters, ...codeSample.request.bodyParameters }
: {}
: { ...codeSample.request.parameters, data: codeSample.request.bodyParameters }
const parameters = codeSample.request
? { ...codeSample.request.parameters, ...codeSample.request.bodyParameters }
: {}

let queryParameters = ''

Expand Down