Files
swagger-ui/src/helpers/get-parameter-schema.js
ishuen 2a967e9b25 fix(parameters): allowedValues for enum and boolean types (#8231)
* Change parameter with empty map

* Change allowValues data type

Co-authored-by: Tim Lai <timothy.lai@smartbear.com>
2022-10-25 11:01:07 -07:00

93 lines
2.3 KiB
JavaScript

/**
* @prettier
*/
import Im from "immutable"
const swagger2SchemaKeys = Im.Set.of(
"type",
"format",
"items",
"default",
"maximum",
"exclusiveMaximum",
"minimum",
"exclusiveMinimum",
"maxLength",
"minLength",
"pattern",
"maxItems",
"minItems",
"uniqueItems",
"enum",
"multipleOf"
)
/**
* @typedef {Object} ParameterSchemaDescriptor
* @property {Immutable.Map} schema - the parameter schema
* @property {string|null} parameterContentMediaType - the effective media type, for `content`-based OpenAPI 3.0 Parameters, or `null` otherwise
*/
/**
* Get the effective schema value for a parameter, or an empty Immutable.Map if
* no suitable schema can be found.
*
* Supports OpenAPI 3.0 `Parameter.content` priority -- since a Parameter Object
* cannot have both `schema` and `content`, this function ignores `schema` when
* `content` is present.
*
* @param {Immutable.Map} parameter The parameter to identify a schema for
* @param {object} config
* @param {boolean} config.isOAS3 Whether the parameter is from an OpenAPI 2.0
* or OpenAPI 3.0 definition
* @return {ParameterSchemaDescriptor} Information about the parameter schema
*/
export default function getParameterSchema(parameter, { isOAS3 } = {}) {
// Return empty Map if `parameter` isn't a Map
if (!Im.Map.isMap(parameter)) {
return {
schema: Im.Map(),
parameterContentMediaType: null,
}
}
if (!isOAS3) {
// Swagger 2.0
if (parameter.get("in") === "body") {
return {
schema: parameter.get("schema", Im.Map()),
parameterContentMediaType: null,
}
} else {
return {
schema: parameter.filter((v, k) => swagger2SchemaKeys.includes(k)),
parameterContentMediaType: null,
}
}
}
// If we've reached here, the parameter is OpenAPI 3.0
if (parameter.get("content")) {
const parameterContentMediaTypes = parameter
.get("content", Im.Map({}))
.keySeq()
const parameterContentMediaType = parameterContentMediaTypes.first()
return {
schema: parameter.getIn(
["content", parameterContentMediaType, "schema"],
Im.Map()
),
parameterContentMediaType,
}
}
return {
schema: parameter.get("schema") ? parameter.get("schema", Im.Map()): Im.Map(),
parameterContentMediaType: null,
}
}