zard_darto_middleware 0.0.1 copy "zard_darto_middleware: ^0.0.1" to clipboard
zard_darto_middleware: ^0.0.1 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.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! 🎯✨

1
likes
140
points
132
downloads

Publisher

verified publisherevandersondev.com.br

Weekly Downloads

Validation middleware for Darto using Zard.

Repository (GitHub)

Documentation

API reference

License

MIT (license)

Dependencies

darto, zard

More

Packages that depend on zard_darto_middleware