fix(swagger-ui): fix configuration bug (#988)
* fix(swagger-ui): Handle undefined options and improve rendering logic for non-RENDER_TYPE_MAP edge cases * test(option-renderer): Add tests for filtering and handling invalid properties * fix(swagger-ui): Handle undefined options and improve rendering logic --------- Co-authored-by: Younis-Ahmed <23105954+jonaahmed@users.noreply.github.com>pull/991/head
parent
e0880ca4a9
commit
708aa3510c
|
@ -0,0 +1,6 @@
|
|||
---
|
||||
'@hono/swagger-ui': patch
|
||||
---
|
||||
|
||||
- fix(swagger-ui): Handle undefined options and improve rendering logic for non-RENDER_TYPE_MAP edge cases
|
||||
- test(option-renderer): Add tests for filtering and handling invalid properties
|
|
@ -127,23 +127,28 @@ export const renderSwaggerUIOptions = (options: DistSwaggerUIOptions) => {
|
|||
const optionsStrings = Object.entries(options)
|
||||
.map(([k, v]) => {
|
||||
const key = k as keyof typeof RENDER_TYPE_MAP
|
||||
if (RENDER_TYPE_MAP[key] === RENDER_TYPE.STRING) {
|
||||
return `${key}: '${v}'`
|
||||
|
||||
if (!RENDER_TYPE_MAP[key] || v === undefined) {
|
||||
return ''
|
||||
}
|
||||
if (RENDER_TYPE_MAP[key] === RENDER_TYPE.STRING_ARRAY) {
|
||||
if (!Array.isArray(v)) {
|
||||
|
||||
switch (RENDER_TYPE_MAP[key]) {
|
||||
case RENDER_TYPE.STRING:
|
||||
return `${key}: '${v}'`
|
||||
case RENDER_TYPE.STRING_ARRAY:
|
||||
if (!Array.isArray(v)) {
|
||||
return ''
|
||||
}
|
||||
return `${key}: [${v.map((ve) => `${ve}`).join(',')}]`
|
||||
case RENDER_TYPE.JSON_STRING:
|
||||
return `${key}: ${JSON.stringify(v)}`
|
||||
case RENDER_TYPE.RAW:
|
||||
return `${key}: ${v}`
|
||||
default:
|
||||
return ''
|
||||
}
|
||||
return `${key}: [${v.map((ve) => `${ve}`).join(',')}]`
|
||||
}
|
||||
if (RENDER_TYPE_MAP[key] === RENDER_TYPE.JSON_STRING) {
|
||||
return `${key}: ${JSON.stringify(v)}`
|
||||
}
|
||||
if (RENDER_TYPE_MAP[key] === RENDER_TYPE.RAW) {
|
||||
return `${key}: ${v}`
|
||||
}
|
||||
return ''
|
||||
})
|
||||
.filter(item => item !== '')
|
||||
.join(',')
|
||||
|
||||
return optionsStrings
|
||||
|
|
|
@ -187,6 +187,31 @@ describe('SwaggerUIOption Rendering', () => {
|
|||
{ parameterMacro: '(parameter) => parameter', url: baseUrl },
|
||||
`parameterMacro: (parameter) => parameter,url: '${baseUrl}'`,
|
||||
],
|
||||
[
|
||||
'filters out properties not in RENDER_TYPE_MAP',
|
||||
{ url: baseUrl, title: 'My API', customProperty: 'value' } as DistSwaggerUIOptions & { title: string },
|
||||
`url: '${baseUrl}'`
|
||||
],
|
||||
[
|
||||
'filters out undefined values',
|
||||
{ url: baseUrl, layout: undefined },
|
||||
`url: '${baseUrl}'`
|
||||
],
|
||||
[
|
||||
'handles multiple invalid properties gracefully',
|
||||
{
|
||||
url: baseUrl,
|
||||
title: 'My API', // Not in RENDER_TYPE_MAP but used in HTML <title>
|
||||
presets: null as unknown, // Invalid type
|
||||
withCredentials: true
|
||||
} as DistSwaggerUIOptions & { title: string },
|
||||
`url: '${baseUrl}',withCredentials: true`
|
||||
],
|
||||
[
|
||||
'handles empty input gracefully',
|
||||
{ url: '' },
|
||||
`url: ''`
|
||||
]
|
||||
]
|
||||
|
||||
it.each(commonTests)('renders correctly with %s', (_, input, expected) => {
|
||||
|
|
Loading…
Reference in New Issue