angel_validate 3.0.0-alpha
angel_validate: ^3.0.0-alpha copied to clipboard
Strongly-typed form handlers and validators for the Angel framework.
validate #
Strongly-typed form handlers and validators for Angel.
Validation library based on the matcher library, with Angel support.
Why re-invent the wheel, when you can use the same validators you already
use for tests?
For convenience's sake, this library also exports matcher.
Field #
The basic unit is the Field class, which is a type-safe way to read
values from a RequestContext. Here is a simple example of using a
TextField instance to read a value from the URL query parameters:
app.get('/hello', (req, res) async {
var nameField = TextField('name');
var name = await nameField.getValue(req, query: true); // String
return 'Hello, $name!';
});
There are several included field types:
TextFieldBoolFieldNumFieldDoubleFieldIntFieldDateTimeFieldFileFieldImageField
Forms #
The Form class lets you combine Field instances, and decode
request bodies into Map<String, dynamic>. Unrecognized fields are
stripped out of the body, so a Form is effectively a whitelist.
var todoForm = Form(fields: [
TextField('text'),
BoolField('is_complete'),
]);
// Validate a request body, and deserialize it immediately.
var todo = await todoForm.deserialize(req, TodoSerializer.fromMap);
// Same as above, but with a Codec<Todo, Map> (i.e. via `angel_serialize`).
var todo = await todoForm.decode(req, todoSerializer);
// Lower-level functionality, typically not called directly.
// Use it if you want to handle validation errors directly, without
// throwing exceptions.
@serializable
class _Todo {
String text;
bool isComplete;
}
Form Rendering #
TODO: Docs about this
Bundled Matchers #
This library includes some Matchers for common validations,
including:
isAlphaDash: Asserts that aStringis alphanumeric, but also lets it contain dashes or underscores.isAlphaNum: Asserts that aStringis alphanumeric.isBool: Asserts that a value either equalstrueorfalse.isEmail: Asserts that aStringcomplies to the RFC 5322 e-mail standard.isInt: Asserts that a value is anint.isNum: Asserts that a value is anum.isString: Asserts that a value is aString.isNonEmptyString: Asserts that a value is a non-emptyString.isUrl: Asserts that aStringis an HTTPS or HTTP URL.
The remaining functionality is
effectively implemented by the matcher package.