builder library

Eskema Builder API

High-level fluent API for assembling complex validation pipelines and schemas in a readable, strongly-typed, incremental fashion. The builder pattern lets you express shape, normalization, and constraints in a left-to-right chain.

Entrypoints

  • b() or builder() — create a new root builder (see RootBuilder).
  • $b, $builder — pre-built root builder singletons (stateless, safe to reuse).
  • Type-specific helpers: $string(), $int(), $double(), $number(), $bool(), $map(), $list() — shortcut for $b.string(), etc.

Usage

  • Choose a type: .string(), .int_(), .map(), .list(), etc.
  • Chain transformers (e.g. .trim(), .toIntStrict()) and constraints (e.g. .lengthMin(2), .email(), .gt(0)).
  • For maps/lists, use .schema({...}) and .each(...) to nest.
  • Call .build() to get a reusable validator.

Example

final userValidator = $map().schema({
  'id': $string().trim().toIntStrict().gt(0).build(),
  'email': $string().trim().toLowerCase().email().build(),
  'age': $string().toIntStrict().gte(18).optional().build(),
}).build();

final result = userValidator.validate({
  'id': '42',
  'email': 'someone@example.com',
  'age': '21',
});
if (result.isValid) {
  print('Valid user');
} else {
  print(result.detailed());
}

Features

  • Type-specific builder classes: StringBuilder, IntBuilder, MapBuilder, etc.
  • Transformers: .trim(), .toIntStrict(), .toLowerCase(), .toDateTime(), etc.
  • Constraints: .lengthMin(), .email(), .gt(), .oneOf([...]), etc.
  • Structure: .map().schema({...}), .list().each(...), .optional(), .nullable()
  • Custom: add your own via .add(...) or .wrap(...) or extension methods.
  • Message override: .error('msg') or > 'msg' after build.
  • Operator sugar: &, |, > for AND, OR, message override.

Extensibility

  • Add custom transformers or constraints via extension methods on builder classes.
  • Compose with functional validators and combinators.

Performance

  • Validators are built once and reused.
  • Zero-arg cached validators available as $isString, $isEmail, etc.

See exported files for low-level implementation details.

Classes

BaseBuilder<B extends BaseBuilder<B, T>, T>
Base functionality shared by all typed builders.
BoolBuilder
Builder for boolean validations with boolean-specific methods.
Chain
Internal accumulator for a builder chain.
CustomPivot
Represents a custom pivot for extensibility.
DateTimeBuilder
Builder for DateTime validations with date/time-specific methods.
DoubleBuilder
Builder for double validations, inherits from NumberBuilder.
GenericBuilder<T>
Generic builder that supports all validation methods.
IntBuilder
Builder for integer validations, inherits from NumberBuilder.
IterableBuilder<T>
Builder for iterable validations with length and iteration methods.
JsonDecodedBuilder
Builder for JSON-decoded data with both map and iterable methods.
ListBuilder<T>
Builder for list validations, inherits from IterableBuilder.
MapBuilder<T, K>
Builder for map validations with map-specific methods.
NumberBuilder
Builder for number validations with numeric comparison methods.
RootBuilder
Root builder that provides entry points for different data types.
SetBuilder<T>
Builder for set validations, inherits from IterableBuilder.
StringBuilder
Builder for string validations with string-specific methods.

Enums

CoercionKind
Kind of coercion applied to the chain (single pivot allowed).

Mixins

BoolMixin<B extends BaseBuilder<B, T>, T>
Mixin providing boolean-specific validation methods.
ComparisonMixin<B extends BaseBuilder<B, T>, T>
Mixin providing comparison validation methods.
ContainsMixin<B extends BaseBuilder<B, T>, T>
Mixin providing contains validation methods.
DateTimeMixin<B extends BaseBuilder<B, T>, T>
Mixin providing DateTime-specific validation methods.
EmptyMixin<B extends BaseBuilder<B, T>, T>
Mixin providing empty validation methods.
IterableMixin<B extends BaseBuilder<B, T>, T>
Mixin providing iterable-specific validation methods.
JsonMixin<B extends BaseBuilder<B, T>, T>
Mixin providing JSON-specific validation methods.
LengthMixin<B extends BaseBuilder<B, T>, T>
Mixin providing length validation methods.
MapMixin<B extends BaseBuilder<B, T>, T>
Mixin providing map-specific validation methods.
NumberMixin<B extends BaseBuilder<B, T>, T>
Mixin providing number-specific validation methods.
StringMixin<B extends BaseBuilder<B, T>, T>
Mixin providing string-specific validation methods.
TransformerMixin<B extends BaseBuilder<B, T>, T>
Mixin providing type transformation methods for builders.

Properties

$b RootBuilder
Pre-built builder instance. See builder.
getter/setter pair
$builder RootBuilder
Pre-built builder instance. See builder.
getter/setter pair

Functions

$bool({String? message}) BoolBuilder
$double({String? message}) DoubleBuilder
$int({String? message}) IntBuilder
$iterable<T>({String? message}) IterableBuilder<T>
$list<T>({String? message}) ListBuilder<T>
$map<K, V>({String? message}) MapBuilder<K, V>
$number({String? message}) NumberBuilder
$set<T>({String? message}) SetBuilder<T>
$string({String? message}) StringBuilder
Type specific builders
b() RootBuilder
Create a new builder instance. See builder.
builder() RootBuilder
Create a new builder instance. See builder.