execute static method

Future<void> execute(
  1. List<Middleware> middlewares,
  2. Request request,
  3. ResponseContract response,
  4. FutureOr<void> finalHandler(
    1. Request,
    2. ResponseContract
    ),
)

Executes a list of middleware in order, followed by a final handler.

This static method avoids creating a MiddlewarePipeline instance and copying lists for every request, significantly reducing object allocation.

Implementation

static Future<void> execute(
  List<Middleware> middlewares,
  Request request,
  ResponseContract response,
  FutureOr<void> Function(Request, ResponseContract) finalHandler,
) async {
  var index = 0;

  Future<void> next() async {
    if (index < middlewares.length) {
      final middleware = middlewares[index++];
      try {
        await middleware.handler(request, response, next);
      } catch (e) {
        rethrow;
      }
    } else {
      // End of middleware chain, execute final handler
      await finalHandler(request, response);
    }
  }

  await next();
}