private async visitOperationBodyParameter()

in packages/libs/oai2-to-oai3/src/converter.ts [965:1063]


  private async visitOperationBodyParameter(
    targetOperation: MappingTreeObject<HttpOperation>,
    parameterValue: OpenAPI2BodyParameter | OpenAPI2FormDataParameter,
    sourcePointer: string,
    parameterItemMembers: () => Iterable<Node>,
    consumes: string[],
  ) {
    if (targetOperation.requestBody === undefined) {
      targetOperation.__set__("requestBody", this.newObject(sourcePointer));
    }

    const requestBody: MappingTreeObject<oai3.RequestBody> = targetOperation.requestBody! as any;

    copyPropertyIfNotSet(requestBody, "description", parameterValue, sourcePointer);
    if (parameterValue.in === "body") {
      copyPropertyIfNotSet(requestBody, "required", parameterValue, sourcePointer);
    }

    if (parameterValue["x-ms-client-name"]) {
      if (requestBody["x-ms-client-name"] === undefined) {
        requestBody?.__set__("x-ms-client-name", {
          value: parameterValue["x-ms-client-name"],
          sourcePointer: `${sourcePointer}/x-ms-client-name`,
        });
      }
      if (requestBody["x-ms-requestBody-name"] === undefined) {
        requestBody?.__set__("x-ms-requestBody-name", {
          value: parameterValue["x-ms-client-name"],
          sourcePointer: `${sourcePointer}/x-ms-client-name`,
        });
      }
    } else if (parameterValue.name) {
      if (requestBody["x-ms-requestBody-name"] === undefined) {
        requestBody?.__set__("x-ms-requestBody-name", {
          value: parameterValue.name,
          sourcePointer: `${sourcePointer}/name`,
        });
      }
    }

    copyPropertyIfNotSet(requestBody, "x-ms-parameter-location", parameterValue, sourcePointer);
    copyPropertyIfNotSet(requestBody, "x-ms-client-flatten", parameterValue, sourcePointer);

    if (requestBody!.content === undefined) {
      requestBody!.__set__("content", this.newObject(sourcePointer));
    }

    if (parameterValue.in === "formData") {
      let contentType = "application/x-www-form-urlencoded";
      if (consumes.length && consumes.indexOf("multipart/form-data") >= 0) {
        contentType = "multipart/form-data";
      }

      if (requestBody.content[contentType] === undefined) {
        requestBody.content.__set__(contentType, this.newObject(sourcePointer));
      }

      if (requestBody.content[contentType].schema === undefined) {
        requestBody.content[contentType].__set__("schema", this.newObject(sourcePointer));
      }
      const schema = requestBody.content[contentType].schema as MappingTreeObject<oai3.Schema>;

      this.addFormDataParameterToSchema(schema, parameterValue, sourcePointer, parameterItemMembers, contentType);
    } else if (parameterValue.in === "body") {
      const consumesTempArray = [...consumes];
      if (consumesTempArray.length === 0) {
        consumesTempArray.push("application/json");
      }

      for (const mimetype of consumesTempArray) {
        if (requestBody.content[mimetype] === undefined) {
          requestBody.content.__set__(mimetype, this.newObject(sourcePointer));
        }

        if (requestBody.content[mimetype].schema === undefined) {
          requestBody.content[mimetype].__set__("schema", this.newObject(sourcePointer));
        }

        if (parameterValue.schema !== undefined) {
          for (const { key, value, childIterator } of parameterItemMembers()) {
            if (key === "schema") {
              await this.visitSchema(requestBody.content[mimetype].schema! as any, value, childIterator);
            }
          }
        } else {
          requestBody.content[mimetype].__set__("schema", this.newObject(sourcePointer));
        }
      }

      // copy extensions in requestBody
      for (const { key, pointer: fieldPointer, value } of parameterItemMembers()) {
        if (isExtensionKey(key)) {
          if (!requestBody[key]) {
            requestBody.__set__(key, { value: value, sourcePointer: fieldPointer });
          }
        }
      }
    }
  }