Skip to content

Configuration

The validasi_gen build options control which artifacts are emitted. They can be set globally in build.yaml and overridden per class via @ValidateClass.

Global options (build.yaml)

yaml
targets:
  $default:
    builders:
      validasi_gen:validasi:
        options:
          generateFields: true
          generateSchema: true
          generateValidateForm: false
          generateIndexedFields: false
OptionTypeDefaultDescription
generateFieldsbooltrueEmit sealed class XFields<V> + per-field leaf classes + validateField()
generateSchemabooltrueEmit static const ValidasiSchema<X> schema on the fields class + _XSchema implementation
generateValidateFormboolfalseEmit validateForm_X(controller) top-level function (requires validasi_ui)
generateIndexedFieldsboolfalseEmit indexedFields, reconstructItem, reconstructAll (requires validasi_ui; for field arrays)

Per-class overrides

Each @ValidateClass() parameter overrides the corresponding global option:

dart
@ValidateClass(generateFields: true, generateSchema: true)
class User {
  // ...
}

@ValidateClass(generateFields: false)
class InternalOnly {
  // No XFields hierarchy emitted — only validate()
}

Per-class settings take precedence over build.yaml.

Dart-only (no Flutter, no forms)

yaml
options:
  generateFields: true
  generateSchema: false
  generateValidateForm: false

Flutter with form management

yaml
options:
  generateFields: true
  generateSchema: true
  generateValidateForm: true

Flutter with field arrays

yaml
options:
  generateFields: true
  generateSchema: true
  generateValidateForm: true
  generateIndexedFields: true

Minimal (just validate() extension)

yaml
options:
  generateFields: false
  generateSchema: false
  generateValidateForm: false

Generated artifacts by option

@ValidateClass()
class User { ... }

generateFields: true     →  sealed class UserFields<V>
                            UserFields.name, .email, .age constants
                            extension: validateField<V>(UserFields<V>)

generateSchema: true     →  UserFields.schema (ValidasiSchema<User>)
                            class _UserSchema

generateValidateForm: true → validateForm_User(ValidasiFormController<User>)
                            (reads from controller, runs refines)

generateIndexedFields: true → UserFields.name_indexed(index)
                              UserFields.indexedFields()
                              UserFields.reconstructItem(...)
                              UserFields.reconstructAll(...)

Example: full build.yaml

yaml
targets:
  $default:
    builders:
      validasi_gen:validasi:
        options:
          generateFields: true
          generateSchema: true
          generateValidateForm: true
          generateIndexedFields: false
        generate_for:
          exclude:
            - "lib/generated/**"

The generate_for filter controls which files the builder processes. Exclude directories like lib/generated/ if you keep generated files versioned separately.

Released under the MIT License.