Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,10 @@ name: Publish to pub.dev
on:
push:
tags:
# Stable tags, e.g. v1.2.3
- 'v[0-9]*.[0-9]*.[0-9]*'
# Pre-release tags, e.g. v1.2.3-beta.1 / v1.2.3-rc.1
- 'v[0-9]*.[0-9]*.[0-9]*-*'

jobs:
publish:
Expand Down
59 changes: 50 additions & 9 deletions llms.txt
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
# Ack - Schema Validation Library for Dart

> A schema validation library for Dart and Flutter with a fluent API, code generation via `@AckType` and `@AckModel` annotations, and Dart 3 extension types for zero-cost type-safe wrappers over validated data. Version 1.0.0-beta.6.
> A schema validation library for Dart and Flutter with a fluent API, code generation via `@AckType` and `@AckModel` annotations, and Dart 3 extension types for zero-cost type-safe wrappers over validated data. Version 1.0.0-beta.7 (main includes next-beta updates).

## Overview

Ack (short for "acknowledge") is a schema validation library for Dart and Flutter that enables data validation with a simple, fluent API. Version 1.0.0-beta.6 focuses exclusively on schema generation and validation, using Dart 3 extension types for zero-cost type-safe wrappers over validated data.
Ack (short for "acknowledge") is a schema validation library for Dart and Flutter that enables data validation with a simple, fluent API. Version 1.0.0-beta.7 is the current published baseline, and main includes next-beta updates such as `@AckType` discriminated union extension generation.

**Repository**: https://github.com/btwld/ack
**Documentation**: https://docs.page/btwld/ack
Expand Down Expand Up @@ -545,6 +545,46 @@ animalSchema.parse(catData); // Validates against catSchema
animalSchema.parse(dogData); // Validates against dogSchema
```

### `@AckType` + `Ack.discriminated(...)` (Next Beta)

`@AckType()` now supports extension type generation for top-level
`Ack.discriminated(...)` schemas.

```dart
@AckType()
final catSchema = Ack.object({
'kind': Ack.literal('cat'),
'lives': Ack.integer(),
});

@AckType()
final dogSchema = Ack.object({
'kind': Ack.literal('dog'),
'bark': Ack.boolean(),
});

@AckType()
final petSchema = Ack.discriminated(
discriminatorKey: 'kind',
schemas: {
'cat': catSchema,
'dog': dogSchema,
},
);

// Generated:
// extension type PetType(Map<String, Object?> _data) implements Map<String, Object?> { ... }
// extension type CatType(Map<String, Object?> _data) implements PetType, Map<String, Object?> { ... }
// extension type DogType(Map<String, Object?> _data) implements PetType, Map<String, Object?> { ... }
```

Current constraints for `@AckType` discriminated bases:
- Base schema cannot be nullable.
- `schemas` must be a non-empty map literal with string keys.
- Each branch must reference a top-level, same-library `@AckType` object schema (no inline branch expressions).
- Branch discriminator literal (for example `'kind': Ack.literal('cat')`) must match the map key (`'cat'`).
- Branch schemas cannot be nullable or nested discriminated bases.

---

## Additional Properties
Expand Down Expand Up @@ -675,11 +715,11 @@ sealed class SchemaResult<T extends Object> {
```yaml
# pubspec.yaml
dependencies:
ack: ^1.0.0-beta.6
ack_annotations: ^1.0.0-beta.6
ack: ^1.0.0-beta.7
ack_annotations: ^1.0.0-beta.7

dev_dependencies:
ack_generator: ^1.0.0-beta.6
ack_generator: ^1.0.0-beta.7
build_runner: ^2.4.0
```

Expand Down Expand Up @@ -776,7 +816,7 @@ Converts Ack schemas to Firebase AI Schema format for structured output generati
```yaml
# pubspec.yaml
dependencies:
ack_firebase_ai: ^1.0.0-beta.6
ack_firebase_ai: ^1.0.0-beta.7
```

```dart
Expand Down Expand Up @@ -809,7 +849,7 @@ Converts Ack schemas to json_schema_builder format for JSON Schema Draft 2020-12
```yaml
# pubspec.yaml
dependencies:
ack_json_schema_builder: ^1.0.0-beta.6
ack_json_schema_builder: ^1.0.0-beta.7
```

```dart
Expand Down Expand Up @@ -918,7 +958,8 @@ print(user.name); // Direct typed access
| Class with constraints | `@AckModel` | Class annotation |
| Reusable schema variable | `@AckType` | Variable annotation |
| Type-safe validated data | `@AckType` | Generates extension type |
| Polymorphic/discriminated | `@AckModel` | With `discriminatedKey`/`discriminatedValue` |
| Polymorphic/discriminated from classes | `@AckModel` | With `discriminatedKey`/`discriminatedValue` |
| Typed discriminated wrappers | `@AckType` | `Ack.discriminated(...)` with `@AckType` object branches |

### Naming Conventions

Expand All @@ -928,7 +969,7 @@ print(user.name); // Direct typed access
| `final userSchema` | `@AckType` | (as-is) | `UserType` |
| `final passwordSchema` | `@AckType` | (as-is) | `PasswordType` |

**Note**: `@AckModel` on classes generates schemas only. `@AckType` on schema variables generates extension types.
**Note**: `@AckModel` on classes generates schemas only. `@AckType` on schema variables (including discriminated bases) generates extension types.

### Method Chaining Support with @AckType

Expand Down
4 changes: 2 additions & 2 deletions packages/ack_annotations/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,10 @@ Add to your `pubspec.yaml` (check [pub.dev](https://pub.dev/packages/ack_annotat

```yaml
dependencies:
ack_annotations: ^1.0.0-beta.6
ack_annotations: ^1.0.0-beta.7

dev_dependencies:
ack_generator: ^1.0.0-beta.6
ack_generator: ^1.0.0-beta.7
build_runner: ^2.4.0
```

Expand Down
4 changes: 2 additions & 2 deletions packages/ack_generator/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@

### Features

* **`@AckType` discriminated unions**: Documented current `Ack.discriminated(...)` support and current constraints.
* **`@AckType` discriminated unions**: Generate extension types for top-level `Ack.discriminated(...)` schemas with object-shaped `@AckType` branch schemas.

### Bug Fixes

* **Discriminated validation**: `@AckType` now fails generation when `Ack.discriminated(..., schemas: {})` is empty.
* **Discriminated validation**: `@AckType` now fails generation for invalid discriminated schemas (for example empty `schemas`, inline branches, nullable bases, or invalid branch references).

## 1.0.0-beta.7

Expand Down
6 changes: 3 additions & 3 deletions packages/ack_generator/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,11 +19,11 @@ Add the following dependencies to your `pubspec.yaml` (check [pub.dev](https://p

```yaml
dependencies:
ack: ^1.0.0-beta.6
ack_annotations: ^1.0.0-beta.6
ack: ^1.0.0-beta.7
ack_annotations: ^1.0.0-beta.7

dev_dependencies:
ack_generator: ^1.0.0-beta.6
ack_generator: ^1.0.0-beta.7
build_runner: ^2.4.0
```

Expand Down
Loading