zard_darto_middleware 0.0.3 copy "zard_darto_middleware: ^0.0.3" to clipboard
zard_darto_middleware: ^0.0.3 copied to clipboard

Validation middleware for Darto using Zard.

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.3

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! 🎯✨

1
likes
140
points
46
downloads

Publisher

verified publisherevandersondev.com.br

Weekly Downloads

Validation middleware for Darto using Zard.

Repository (GitHub)
View/report issues

Documentation

API reference

License

MIT (license)

Dependencies

darto_types, zard

More

Packages that depend on zard_darto_middleware