Skip to content

Commit

Permalink
apply api middleware to routes (#163)
Browse files Browse the repository at this point in the history
  • Loading branch information
davemooreuws authored Feb 15, 2023
2 parents ecc1843 + 829564b commit 8f55c01
Showing 1 changed file with 66 additions and 21 deletions.
87 changes: 66 additions & 21 deletions src/resources/api.ts
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,11 @@ class Route<SecurityDefs extends string> {
this.api = api;
this.path = path;
const { middleware = [] } = opts;
this.middleware = Array.isArray(middleware) ? middleware : [middleware];
this.middleware = Array.isArray(middleware)
? middleware
: middleware
? [middleware]
: [];
}

async method(
Expand Down Expand Up @@ -258,7 +262,11 @@ class Api<SecurityDefs extends string> extends Base<ApiDetails> {
} = options;
// prepend / to path if its not there
this.path = path.replace(/^\/?/, '/');
this.middleware = Array.isArray(middleware) ? middleware : [middleware];
this.middleware = Array.isArray(middleware)
? middleware
: middleware
? [middleware]
: [];
this.securityDefinitions = securityDefinitions;
this.security = security;
this.routes = [];
Expand All @@ -284,7 +292,20 @@ class Api<SecurityDefs extends string> extends Base<ApiDetails> {
route(match: string, options?: RouteOpts): Route<SecurityDefs> {
// ensure path seperator is always foward slash (for windows)
const apiRoute = path.join(this.path, match).split(path.sep).join('/');
const r = new Route(this, apiRoute, options);

let routeMiddleware = [];
if (options) {
routeMiddleware = Array.isArray(options.middleware)
? options.middleware
: options.middleware
? [options.middleware]
: [];
}

const r = new Route(this, apiRoute, {
...options,
middleware: [...this.middleware, ...routeMiddleware],
});
this.routes.push(r);
return r;
}
Expand All @@ -308,9 +329,13 @@ class Api<SecurityDefs extends string> extends Base<ApiDetails> {
middleware: HttpMiddleware | HttpMiddleware[],
opts?: MethodOptions<SecurityDefs>
): Promise<void> {
const r = this.route(match);
const m = Array.isArray(middleware) ? middleware : [middleware];
return r.get(opts, ...m);
const r = this.route(match, {
middleware: this.middleware ?? [],
});
const routeMiddleware = Array.isArray(middleware)
? middleware
: [middleware];
return r.get(opts, ...routeMiddleware);
}

/**
Expand All @@ -324,9 +349,13 @@ class Api<SecurityDefs extends string> extends Base<ApiDetails> {
middleware: HttpMiddleware | HttpMiddleware[],
opts?: MethodOptions<SecurityDefs>
): Promise<void> {
const r = this.route(match);
const m = Array.isArray(middleware) ? middleware : [middleware];
return r.post(opts, ...m);
const r = this.route(match, {
middleware: this.middleware ?? [],
});
const routeMiddleware = Array.isArray(middleware)
? middleware
: [middleware];
return r.post(opts, ...(routeMiddleware ?? []));
}

/**
Expand All @@ -340,9 +369,13 @@ class Api<SecurityDefs extends string> extends Base<ApiDetails> {
middleware: HttpMiddleware | HttpMiddleware[],
opts?: MethodOptions<SecurityDefs>
): Promise<void> {
const r = this.route(match);
const m = Array.isArray(middleware) ? middleware : [middleware];
return r.put(opts, ...m);
const r = this.route(match, {
middleware: this.middleware ?? [],
});
const routeMiddleware = Array.isArray(middleware)
? middleware
: [middleware];
return r.put(opts, ...(routeMiddleware ?? []));
}

/**
Expand All @@ -356,9 +389,13 @@ class Api<SecurityDefs extends string> extends Base<ApiDetails> {
middleware: HttpMiddleware | HttpMiddleware[],
opts?: MethodOptions<SecurityDefs>
): Promise<void> {
const r = this.route(match);
const m = Array.isArray(middleware) ? middleware : [middleware];
return r.patch(opts, ...m);
const r = this.route(match, {
middleware: this.middleware ?? [],
});
const routeMiddleware = Array.isArray(middleware)
? middleware
: [middleware];
return r.patch(opts, ...(routeMiddleware ?? []));
}

/**
Expand All @@ -372,9 +409,13 @@ class Api<SecurityDefs extends string> extends Base<ApiDetails> {
middleware: HttpMiddleware | HttpMiddleware[],
opts?: MethodOptions<SecurityDefs>
): Promise<void> {
const r = this.route(match);
const m = Array.isArray(middleware) ? middleware : [middleware];
return r.delete(opts, ...m);
const r = this.route(match, {
middleware: this.middleware ?? [],
});
const routeMiddleware = Array.isArray(middleware)
? middleware
: [middleware];
return r.delete(opts, ...(routeMiddleware ?? []));
}

/**
Expand All @@ -388,9 +429,13 @@ class Api<SecurityDefs extends string> extends Base<ApiDetails> {
middleware: HttpMiddleware | HttpMiddleware[],
opts?: MethodOptions<SecurityDefs>
): Promise<void> {
const r = this.route(match);
const m = Array.isArray(middleware) ? middleware : [middleware];
return r.options(opts, ...m);
const r = this.route(match, {
middleware: this.middleware ?? [],
});
const routeMiddleware = Array.isArray(middleware)
? middleware
: [middleware];
return r.options(opts, ...(routeMiddleware ?? []));
}

/**
Expand Down

0 comments on commit 8f55c01

Please sign in to comment.