Zard Darto Middleware


Validation middleware for Darto using Zard. Inspired by the zod-express-middleware package from the Node.js ecosystem, bringing a similar validation experience to Dart/Flutter servers.


Support 💖

If you find Zard Darto Middleware useful, please consider supporting its development 🌟Buy Me a Coffee.🌟 Your support helps us improve the package and make it even better!




📦 Installation

Add to your pubspec.yaml:

dependencies:
  zard_darto_middleware: ^0.0.1

or via terminal:

dart pub add zard_darto_middleware

🚀 Basic Usage

Import the packages:

import 'package:darto/darto.dart';
import 'package:zard/zard.dart';
import 'package:zard_darto_middleware/zard_darto_middleware.dart';

Create your schemas:

final userBodySchema = z.map({
  'name': z.string().min(3),
  'email': z.string().email(),
  'age': z.int().min(18),
});

final userQuerySchema = z.map({'ref': z.string().optional()});

final userParamSchema = z.map({'id': z.string().uuid()});

Use the middleware:

app.post(
  '/users/:id',
  validateRequest(
    body: userBodySchema,
    query: userQuerySchema,
    params: userParamSchema,
  ),
  (Request req, Response res) {
    final body = req.$body; // Acccess validated body
    final query = req.$query; // Access validated query
    final params = req.$params; // Access validated params

    return res.json({
      'message': 'Validation passed',
      'body': body,
      'query': query,
      'params': params,
    });
  },
);

📖 Available Methods

validateRequest

Validates body, query, and params at once.

validateRequest({
  ZardSchema? body,
  ZardSchema? query,
  ZardSchema? params,
})
  • If validation fails, it automatically responds with a 400 error.

validateRequestBody

Validates only the request body.

validateRequestBody(ZardSchema schema)

validateRequestQuery

Validates only the request query parameters.

validateRequestQuery(ZardSchema schema)

validateRequestParams

Validates only the request params (e.g., /users/:id).

validateRequestParams(ZardSchema schema)

sendError

You can manually validate and send errors using:

final result = schema.safeParse(req.body);
if (!result.success) {
  return sendError('Body', result.error, res);
}
  • The first argument is the type ('Body', 'Query', 'Params').
  • The second argument is the error from Zard.
  • The third argument is the response by reference.

🔥 Accessing Validated Data

After validation, you can access strictly-typed and validated data via:

  • req.$body
  • req.$query
  • req.$params

📚 Full Example

void main() {
  final app = Darto();

  final userBodySchema = z.map({
    'name': z.string().min(3),
    'email': z.string().email(),
    'age': z.int().min(18),
  });

  final userQuerySchema = z.map({'ref': z.string().optional()});

  final userParamSchema = z.map({'id': z.string().uuid()});

  app.post(
    '/users/:id',
    validateRequest(
      body: userBodySchema,
      query: userQuerySchema,
      params: userParamSchema,
    ),
    (Request req, Response res) {
      final body = req.$body; // Access validated body
      final query = req.$query; // Access validated query
      final params = req.$params; // Access validated params

      res.json({
        'message': 'Validation passed',
        'body': body,
        'query': query,
        'params': params,
      });
    },
  );

  app.get('/users/:id', validateRequestParams(userParamSchema), (
    Request req,
    Response res,
  ) {
    final id = req.$params['id']; // Access validated params
    res.json({'message': 'Validation passed', 'params': id});
  });

  app.listen(3000);
}

✨ Notes

  • If validation fails, errors are automatically formatted and returned.
  • Error messages are generated by Zard.
  • Fully aligned with Darto's minimalistic philosophy.

Contribution

Contributions are welcome! Feel free to open issues and pull requests on the GitHub repository..


License

This project is licensed under the MIT License. See the LICENSE file for more details.


Made with ❤️ for Dart/Flutter developers! 🎯✨

Libraries

zard_darto_middleware
Support for doing something awesome.