Skip to main content

dox_validation 3.0.0-alpha.5 copy "dox_validation: ^3.0.0-alpha.5" to clipboard
dox_validation: ^3.0.0-alpha.5 copied to clipboard

Typed input for Dart. DTO classes with generated checks, fluent schemas like Zod, JSON Schema export and the Standard Schema interface.

example/example.dart

import 'package:dox_validation/dox_validation.dart';

/// A reusable rule: text must be a URL slug.
class SlugRule extends Rule<String> {
  SlugRule({super.message});

  @override
  String get name {
    return 'slug';
  }

  @override
  String get defaultMessage {
    return 'The {field} must be a slug';
  }

  @override
  bool check(String value, RuleContext context) {
    return RegExp(r'^[a-z0-9-]+$').hasMatch(value);
  }
}

/// Adds `.slug()` to every string schema.
extension SlugMethods on StringSchema {
  StringSchema slug({String? message}) {
    return use(SlugRule(message: message));
  }
}

void main() {
  ObjectSchema createPost = v.object(<String, Schema<Object?>>{
    'title': v.string().trim().min(3).max(100).describe('Post title'),
    'slug': v.string().slug(),
    'views': v.coerce.int().nonNegative().defaultTo(0),
    'tags': v.list(v.string()).max(5).optional(),
    'status': v.enumOf<String>(<String>['draft', 'published']),
  });

  ParseResult<Map<String, dynamic>> ok = createPost.safeParse(<String, dynamic>{
    'title': '  Hello Dox  ',
    'slug': 'hello-dox',
    'views': '12',
    'status': 'draft',
  });
  print(ok.value);

  ParseResult<Map<String, dynamic>> bad = createPost.safeParse(
    <String, dynamic>{'title': 'Hi', 'slug': 'Hello Dox', 'status': 'archived'},
  );
  print(bad.errors);

  print(createPost.toJsonSchema());
}
0
likes
160
points
0
downloads

Documentation

API reference

Publisher

verified publisherdartondox.dev

Weekly Downloads

Typed input for Dart. DTO classes with generated checks, fluent schemas like Zod, JSON Schema export and the Standard Schema interface.

Homepage
Repository (GitHub)
View/report issues

License

MIT (license)

More

Packages that depend on dox_validation