@loopx/apispec-optimizer
TypeScript icon, indicating that this package has built-in type declarations

0.2.1 • Public • Published

@loopx/apispec-optimizer

An OpenAPI specification optimizer designed for LoopBack 4 applications, which removes the Controller suffix from controller and tag names, and the prefix ...Controller. from operationId.

Installation

npm i @loopx/apispec-optimizer --save

Usage

The component should be loaded in the constructor of your custom Application class.

Start by importing the component class:

import {ApiSpecOptimizerComponent} from '@loopx/apispec-optimizer';

In the constructor, add the component to your application:

this.component(ApiSpecOptimizerComponent);

This component provides a configuration for customizing the controller name and operationId of the OpenAPI spec.

import {CONTROLLER_NAME_KEY} from '@loopx/apispec-optimizer';

const apiSpecOptimizerOptions: ApiSpecOptimizerOptions = {
  customizeControllerName: (name, op, spec) => name + 'Api',
  customizeOperationId: (name, op, spec) => op[CONTROLLER_NAME_KEY] + '.' + name,
};
app.configure(ApiSpecOptimizerBindings.API_SPEC_OPTIMIZER).to(apiSpecOptimizerOptions);

Optimization example

The OpenAPI spec generated by LoopBack applications is like:

{
  "openapi": "3.0.0",
  "info": {
    "title": "LoopBack Application",
    "version": "1.0.0"
  },
  "servers": [
    {
      "url": "/"
    }
  ],
  "paths": {
    "/test": {
      "get": {
        "x-controller-name": "TestController",
        "tags": ["TestController"],
        "operationId": "TestController.test",
        "responses": {
          "200": {
            "description": "test"
          }
        }
      }
    }
  }
}

After optimization with the configuration blow.

import {CONTROLLER_NAME_KEY} from '@loopx/apispec-optimizer';

const apiSpecOptimizerOptions: ApiSpecOptimizerOptions = {
  customizeControllerName: (name, op, spec) => name + 'Api',
  customizeOperationId: (name, op, spec) => op[CONTROLLER_NAME_KEY] + '.' + name,
};
app.configure(ApiSpecOptimizerBindings.API_SPEC_OPTIMIZER).to(apiSpecOptimizerOptions);

The OpenAPI spec is like:

{
  "openapi": "3.0.0",
  "info": {
    "title": "LoopBack Application",
    "version": "1.0.0"
  },
  "servers": [
    {
      "url": "/"
    }
  ],
  "paths": {
    "/test": {
      "get": {
        "x-controller-name": "TestApi",
        "tags": ["TestApi"],
        "operationId": "TestApi.test",
        "responses": {
          "200": {
            "description": "test"
          }
        }
      }
    }
  }
}

Tests

Run npm test from the root folder.

License

MIT

Readme

Keywords

none

Package Sidebar

Install

npm i @loopx/apispec-optimizer

Weekly Downloads

0

Version

0.2.1

License

MIT

Unpacked Size

21.9 kB

Total Files

24

Last publish

Collaborators

  • towyuan