Skip to content

Commit

Permalink
support promise|async/await and callback styles
Browse files Browse the repository at this point in the history
  • Loading branch information
Carmine DiMascio committed Nov 29, 2019
1 parent 88ffb73 commit 8acc597
Showing 1 changed file with 43 additions and 21 deletions.
64 changes: 43 additions & 21 deletions src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -40,29 +40,51 @@ export class OpenApiValidator {
this.options = options;
}

public async install(app: Application): Promise<Application> {
const spec = await new OpenApiSpecLoader({
public install(
app: Application,
callback: (error: Error, app: Application) => void,
): void;
public install(app: Application): Promise<Application>;
public install(
app: Application,
callback?: (error: Error, app: Application) => void,
): Promise<Application> | void {
const useCallback = callback && typeof callback === 'function';
const p = new OpenApiSpecLoader({
apiDoc: this.options.apiSpec,
}).load();
const context = new OpenApiContext(spec, this.options.ignorePaths);

this.installPathParams(app, context);
this.installMetadataMiddleware(app, context);
this.installMultipartMiddleware(app, context);

const components = context.apiDoc.components;
if (components && components.securitySchemes) {
this.installSecurityMiddleware(app, context);
}

if (this.options.validateRequests) {
this.installRequestValidationMiddleware(app, context);
}

if (this.options.validateResponses) {
this.installResponseValidationMiddleware(app, context);
})
.load()
.then(spec => {
const context = new OpenApiContext(spec, this.options.ignorePaths);

this.installPathParams(app, context);
this.installMetadataMiddleware(app, context);
this.installMultipartMiddleware(app, context);

const components = context.apiDoc.components;
if (components && components.securitySchemes) {
this.installSecurityMiddleware(app, context);
}

if (this.options.validateRequests) {
this.installRequestValidationMiddleware(app, context);
}

if (this.options.validateResponses) {
this.installResponseValidationMiddleware(app, context);
}
if (useCallback) {
callback(undefined, app);
}
return app;
});
if (useCallback) {
p.catch(e => {
callback(e, undefined);
});
return;
}
return app;
return p;
}

private installPathParams(app: Application, context: OpenApiContext): void {
Expand Down

0 comments on commit 8acc597

Please sign in to comment.