Source: remove-paths-with-servers.js

/**
 * @copyright Copyright 2019 Kevin Locke <kevin@kevinlocke.name>
 * @license MIT
 * @module "openapi-transformers/remove-paths-with-servers.js"
 */

import OpenApiTransformerBase from 'openapi-transformer-base';

/**
 * Transformer to remove Path Item Objects which have servers (and therefore
 * can't be represented in OpenAPI 2).
 */
export default class RemovePathsWithServersTransformer
  extends OpenApiTransformerBase {
  // eslint-disable-next-line class-methods-use-this
  transformPaths(paths) {
    return Object.keys(paths)
      .reduce((newPaths, path) => {
        const pathItem = paths[path];
        if (!pathItem.servers) {
          newPaths[path] = pathItem;
        }
        return newPaths;
      }, Object.create(Object.getPrototypeOf(paths)));
  }

  // Optimization: Only transform paths
  transformOpenApi(spec) {
    return {
      ...spec,
      paths: this.transformPaths(spec.paths),
    };
  }
}