I have a method (bottom of the post) that dynamically generates my api routes but since upgrading Deno's Oak framework to the latest version, I've been getting the following error:
error: Uncaught TypeError: undefined is not iterable (cannot read property Symbol(Symbol.iterator))
...group.middleware as [],
^
First, here are my types:
import { RouterContext, RouterMiddleware } from "oak";
export type RouteGroup = {
group: {
prefix: string;
middleware: RouterMiddleware<string>[];
};
routes: Route[];
};
type Route = {
method:
| "all"
| "delete"
| "get"
| "head"
| "options"
| "patch"
| "post"
| "put";
path: string;
middleware: RouterMiddleware<string>[];
handler: (ctx: RouterContext<string>) => Promise<void>;
};
I had to update my middleware property for the latest version of oak:
//before
RouterMiddleware[]
// after
RouterMiddleware<string>[]
Here is the method:
private generateRoutes(routeGroups: RouteGroup[]): void {
routeGroups.forEach(({ group, routes }) => {
routes.forEach(({ method, path, middleware, handler }) => {
(this.router[method] as OakRouter["all"])(
group.prefix + path,
...group.middleware as [],
...middleware as [],
handler,
);
});
});
}
I cannot figure out why the middleware property is now being treated as undefined. How do I turn it back into an iterable?