fromShelf static method

MiddlewareHandler fromShelf(
  1. Middleware shelfMiddleware
)

Convert a Shelf Middleware to a Rivet MiddlewareHandler

Example:

app.use(shelfMiddleware(shelf.logRequests()));

Implementation

static MiddlewareHandler fromShelf(shelf.Middleware shelfMiddleware) {
  return (RivetRequest req, next) async {
    // Create a simple Shelf request from Rivet request
    final shelfReq = shelf.Request(
      req.method,
      req.uri,
      headers: _convertHeaders(req.headers),
    );

    // Create Shelf handler from Rivet next function
    shelf.Handler shelfNext = (shelf.Request request) async {
      // Call Rivet next
      final rivetRes = await next();

      // Convert Rivet response to Shelf response
      if (rivetRes is RivetResponse) {
        return shelf.Response(
          rivetRes.statusCode,
          body: rivetRes.body,
          headers: rivetRes.headers,
        );
      }

      // Fallback
      return shelf.Response.ok('');
    };

    // Apply Shelf middleware
    final wrappedHandler = shelfMiddleware(shelfNext);
    final shelfRes = await wrappedHandler(shelfReq);

    // Convert Shelf response back to Rivet response
    final body = await shelfRes.readAsString();
    return RivetResponse(
      body,
      statusCode: shelfRes.statusCode,
      headers: shelfRes.headers,
    );
  };
}