0.2.1 • Published 4 months ago

@loopx/apispec-optimizer v0.2.1

Weekly downloads
-
License
MIT
Repository
-
Last release
4 months ago

@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

0.2.1

4 months ago

0.2.0

5 months ago

0.1.13

5 months ago

0.1.12

6 months ago

0.1.11

6 months ago

0.1.10

7 months ago

0.1.9

7 months ago

0.1.8

8 months ago

0.1.7

8 months ago

0.1.6

8 months ago

0.1.5

9 months ago

0.1.4

9 months ago

0.1.3

9 months ago

0.1.2

9 months ago

0.1.1

9 months ago

0.1.0

9 months ago