Skip to main content

dox_validation 3.0.0-alpha.1 copy "dox_validation: ^3.0.0-alpha.1" to clipboard
dox_validation: ^3.0.0-alpha.1 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
0
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