diff --git a/packages/booter-lb3app/src/__tests__/acceptance/booter-lb3app.acceptance.ts b/packages/booter-lb3app/src/__tests__/acceptance/booter-lb3app.acceptance.ts index a9fbc36ed8e0..6563ba4fbb99 100644 --- a/packages/booter-lb3app/src/__tests__/acceptance/booter-lb3app.acceptance.ts +++ b/packages/booter-lb3app/src/__tests__/acceptance/booter-lb3app.acceptance.ts @@ -3,7 +3,7 @@ // This file is licensed under the MIT License. // License text available at https://opensource.org/licenses/MIT -import {OperationObject} from '@loopback/rest'; +import {OperationObject, OpenApiSpec} from '@loopback/rest'; import {Client, expect} from '@loopback/testlab'; import * as _ from 'lodash'; import { @@ -189,4 +189,30 @@ describe('booter-lb3app', () => { await client.get('/coffee').expect(404); }); }); + + context('using specTransformer to modify OpenAPI spec', () => { + before(async () => { + ({app, client} = await setupApplication({ + lb3app: { + path: '../fixtures/lb3app/server/server', + specTransformer: (spec: OpenApiSpec): OpenApiSpec => + _.merge(spec, { + paths: { + '/CoffeeShops': { + post: { + summary: 'just a very simple modification', + }, + }, + }, + }), + }, + })); + }); + + it('does apply the spec modification', () => { + const spec = app.restServer.getApiSpec(); + const createOp: OperationObject = spec.paths['/api/CoffeeShops'].post; + expect(createOp.summary).to.eql('just a very simple modification'); + }); + }); }); diff --git a/packages/booter-lb3app/src/lb3app.booter.ts b/packages/booter-lb3app/src/lb3app.booter.ts index ed354f2c8fa5..2d6b1c644726 100644 --- a/packages/booter-lb3app/src/lb3app.booter.ts +++ b/packages/booter-lb3app/src/lb3app.booter.ts @@ -101,7 +101,11 @@ export class Lb3AppBooter implements Booter { // swagger2openapi options }); - return result.openapi as OpenApiSpec; + let spec = result.openapi as OpenApiSpec; + if (typeof this.options.specTransformer === 'function') { + spec = this.options.specTransformer(spec); + } + return spec; } private mountFullApp(lb3App: Lb3Application, spec: OpenApiSpec) { @@ -128,6 +132,7 @@ export interface Lb3AppBooterOptions { path: string; mode: 'fullApp' | 'restRouter'; restApiRoot: string; + specTransformer?: (spec: OpenApiSpec) => OpenApiSpec; } interface Lb3Application extends ExpressApplication {