cool idea, think we could rewrite this like one of these (just to reduce nesting):

```js
if (!self.match(context.path, context.params)) return next();
fn(context, next);
if (2 > fn.length) next(); // not async arity
```

```js
if (!self.match(context.path, context.params)) return next();
2 > fn.length
  ? fn(context), next() // not async arity
  : fn(context, next);
```