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.
npm i @loopx/apispec-optimizer --save
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);
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"
}
}
}
}
}
}
Run npm test
from the root folder.
MIT