Cannot iterate over array of router middleware

Viewed 37

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?

0 Answers
Related