@loopback/rest
Version:
Expose controllers as REST endpoints and route REST API requests to controller methods
54 lines (45 loc) • 1.39 kB
text/typescript
// Copyright IBM Corp. and LoopBack contributors 2018,2020. All Rights Reserved.
// Node module: @loopback/rest
// This file is licensed under the MIT License.
// License text available at https://opensource.org/licenses/MIT
import {Context, InvocationSource} from '@loopback/core';
import {OperationObject} from '@loopback/openapi-v3';
import {OperationArgs, OperationRetval} from '../types';
import {RouteEntry} from './route-entry';
/**
* Base implementation of RouteEntry
*/
export abstract class BaseRoute implements RouteEntry {
public readonly verb: string;
/**
* Construct a new route
* @param verb - http verb
* @param path - http request path pattern
* @param spec - OpenAPI operation spec
*/
constructor(
verb: string,
public readonly path: string,
public readonly spec: OperationObject,
) {
this.verb = verb.toLowerCase();
}
abstract updateBindings(requestContext: Context): void;
abstract invokeHandler(
requestContext: Context,
args: OperationArgs,
): Promise<OperationRetval>;
describe(): string {
return `${this.verb} ${this.path}`;
}
toString() {
return `${this.constructor.name} - ${this.describe()}`;
}
}
export class RouteSource implements InvocationSource<RouteEntry> {
type = 'route';
constructor(readonly value: RouteEntry) {}
toString() {
return this.value.toString();
}
}