in packages/libs/oai2-to-oai3/src/converter.ts [321:440]
private async visitParameterDefinition(
parameterTarget: MappingTreeObject<oai3.Parameter>,
parameterValue: any,
sourcePointer: string,
parameterItemMembers: () => Iterable<Node>,
) {
const parameterUnchangedProperties = ["name", "in", "description", "allowEmptyValue", "required"];
for (const key of parameterUnchangedProperties) {
if (parameterValue[key] !== undefined) {
parameterTarget.__set__(key as any, { value: parameterValue[key], sourcePointer });
}
}
if (parameterValue["x-ms-skip-url-encoding"] !== undefined) {
if (parameterValue.in === "query") {
parameterTarget.__set__("allowReserved", { value: true, sourcePointer });
} else {
parameterTarget.__set__("x-ms-skip-url-encoding", {
value: parameterValue["x-ms-skip-url-encoding"],
sourcePointer,
});
}
}
/**
* List of extension properties that shouldn't just be passed through.
*/
const extensionPropertiesCustom = new Set(["x-ms-skip-url-encoding", "x-ms-original", "x-ms-enum"]);
for (const key of includeXDashKeys(parameterValue)) {
if (parameterValue[key] !== undefined && !extensionPropertiesCustom.has(key)) {
parameterTarget.__set__(key, { value: parameterValue[key], sourcePointer });
}
}
// Collection Format
if (parameterValue.type === "array") {
parameterValue.collectionFormat = parameterValue.collectionFormat || "csv";
if (
parameterValue.collectionFormat === "csv" &&
(parameterValue.in === "query" || parameterValue.in === "cookie")
) {
parameterTarget.__set__("style", { value: EncodingStyle.Form, sourcePointer });
}
if (
parameterValue.collectionFormat === "csv" &&
(parameterValue.in === "path" || parameterValue.in === "header")
) {
parameterTarget.__set__("style", { value: EncodingStyle.Simple, sourcePointer });
}
if (parameterValue.collectionFormat === "ssv") {
if (parameterValue.in === "query") {
parameterTarget.__set__("style", { value: EncodingStyle.SpaceDelimited, sourcePointer });
}
}
if (parameterValue.collectionFormat === "pipes") {
if (parameterValue.in === "query") {
parameterTarget.__set__("style", { value: EncodingStyle.PipeDelimited, sourcePointer });
}
}
if (parameterValue.collectionFormat === "multi") {
parameterTarget.__set__("style", { value: EncodingStyle.Form, sourcePointer });
parameterTarget.__set__("explode", { value: true, sourcePointer });
}
// tsv is no longer supported in OAI3, but we still need to support this.
if (parameterValue.collectionFormat === "tsv") {
parameterTarget.__set__("style", { value: EncodingStyle.TabDelimited, sourcePointer });
}
}
if (parameterTarget.schema === undefined) {
parameterTarget.__set__("schema", this.newObject(sourcePointer));
}
const schema: MappingTreeObject<oai3.Schema> = parameterTarget.schema as any;
const schemaKeys = [
"maximum",
"exclusiveMaximum",
"minimum",
"exclusiveMinimum",
"maxLength",
"minLength",
"pattern",
"maxItems",
"minItems",
"uniqueItems",
"enum",
"x-ms-enum",
"multipleOf",
"default",
"format",
];
for (const { key, childIterator, pointer: jsonPointer } of parameterItemMembers()) {
if (key === "schema") {
if (schema.items === undefined) {
schema.__set__("items", this.newObject(jsonPointer));
}
await this.visitSchema(schema.items as any, parameterValue.items, childIterator);
} else if (schemaKeys.indexOf(key) !== -1) {
schema.__set__(key as any, { value: parameterValue[key], sourcePointer });
}
}
if (parameterValue.type !== undefined) {
schema.__set__("type", { value: parameterValue.type, sourcePointer });
}
if (parameterValue.items !== undefined) {
schema?.__set__("items", this.newObject(sourcePointer));
for (const { key, childIterator } of parameterItemMembers()) {
if (key === "items") {
await this.visitSchema(schema.items as any, parameterValue.items, childIterator);
}
}
}
}