jao_generator 0.2.1 copy "jao_generator: ^0.2.1" to clipboard
jao_generator: ^0.2.1 copied to clipboard

Code generator for jao ORM. Generates typed field accessors and model metadata.

JAO Generator #

Code generator for JAO ORM. Generates typed field accessors, model metadata, and serialization methods.

pub package License: MIT

Installation #

dependencies:
  jao: ^0.2.0

dev_dependencies:
  build_runner: ^2.4.0
  jao_generator: ^0.2.0

Usage #

1. Define a Model #

import 'package:jao/jao.dart';

part 'user.g.dart';

@Model()
class User {
  @AutoField()
  late int id;

  @CharField(maxLength: 100)
  late String name;

  @EmailField()
  late String email;

  @DateTimeField(autoNowAdd: true)
  late DateTime createdAt;
}

2. Run the Generator #

dart run build_runner build

Or watch for changes:

dart run build_runner watch

Generated Code #

For a User model, the generator creates:

Field Class (User$) #

class User$ implements ModelFields<User> {
  const User$();

  final id = const IntFieldRef('id');
  final name = const StringFieldRef('name');
  final email = const StringFieldRef('email');
  final createdAt = const DateTimeFieldRef('created_at');
}

Companion Class (Users) #

class Users {
  static const $ = User$();
  static Manager<User> get objects => ...;

  static const tableName = 'user';
  static const pkField = 'id';

  static User fromRow(Map<String, dynamic> row) => ...;
  static Map<String, dynamic> toRow(User model) => ...;

  static final schema = ModelSchema(...);
}

Build Optimization #

For large projects, limit which files are scanned by adding a build.yaml:

targets:
  $default:
    builders:
      jao_generator|jao:
        generate_for:
          include:
            - lib/models/**

Model Options #

Custom Table Name #

@Model(tableName: 'app_users')
class User {
  // ...
}

Auto Timestamps #

@Model()
class Post {
  @AutoField()
  late int id;

  @DateTimeField(autoNowAdd: true)  // Set on create
  late DateTime createdAt;

  @DateTimeField(autoNow: true)     // Set on every update
  late DateTime updatedAt;
}

Supported Field Types #

Annotation Generated FieldRef
@AutoField() IntFieldRef
@BigAutoField() IntFieldRef
@CharField() StringFieldRef
@TextField() StringFieldRef
@IntegerField() IntFieldRef
@BooleanField() BoolFieldRef
@FloatField() DoubleFieldRef
@DateTimeField() DateTimeFieldRef
@DurationField() DurationFieldRef

Troubleshooting #

Generated file not found #

Run the generator:

dart run build_runner build --delete-conflicting-outputs

Slow builds #

Add generate_for filter in build.yaml to only scan model directories.

Conflicting outputs #

dart run build_runner clean
dart run build_runner build
  • jao - Core ORM package
  • jao_cli - CLI tools for migrations

License #

MIT License - see LICENSE for details.

0
likes
140
points
206
downloads

Publisher

unverified uploader

Weekly Downloads

Code generator for jao ORM. Generates typed field accessors and model metadata.

Homepage
Repository (GitHub)
View/report issues

Documentation

API reference

License

MIT (license)

Dependencies

analyzer, build, jao, source_gen

More

Packages that depend on jao_generator