Skip to main content

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

Schema validation for Dart, like Zod. Typed parse results, JSON Schema export, Standard Schema interface and Laravel style string rules.

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);

  ObjectSchema legacy = v.fromRules(<String, String>{
    'email': 'required|email|max:255',
    'age': 'nullable|integer|min:18',
  });
  print(legacy.safeParse(<String, dynamic>{'email': 'x'}).errors);

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

Publisher

verified publisherdartondox.dev

Weekly Downloads

Schema validation for Dart, like Zod. Typed parse results, JSON Schema export, Standard Schema interface and Laravel style string rules.

Homepage
Repository (GitHub)
View/report issues

License

unknown (license)

More

Packages that depend on dox_validation