import { RequestOptions, RequestMiddleware, ResponseMiddleware, Middlewares, MiddleWired, Compile } from './types'; import { compile } from './utils'; export class Endpoint implements MiddleWired { readonly compilePath: ReturnType; readonly middlewares: Middlewares = { request: [], response: [], }; constructor(public readonly path: string, public readonly options: RequestOptions = {}) { this.compilePath = compile(path); } request(middleware: RequestMiddleware) { this.middlewares.request.push(middleware); return this; } response(middleware: ResponseMiddleware) { this.middlewares.response.push(middleware); return this; } } export default (path: string, options?: RequestOptions) => { return new Endpoint(path, options); };