masamune_model_firebase_data_connect_builder 3.2.3 copy "masamune_model_firebase_data_connect_builder: ^3.2.3" to clipboard
masamune_model_firebase_data_connect_builder: ^3.2.3 copied to clipboard

Builder package to automatically generate GraphQL code for Firebase Data Connect.

Masamune logo

Masamune Model FirebaseDataConnect

Follow on GitHub Follow on X Follow on YouTube Maintained with Melos

GitHub Sponsor


[GitHub] | [YouTube] | [Packages] | [X] | [LinkedIn] | [mathru.net]


Masamune Model Firebase Data Connect Builder #

Overview #

masamune_model_firebase_data_connect_builder is a code generator that creates GraphQL schemas, queries, mutations, and adapters for Firebase Data Connect from your annotated Masamune models.

Package Roles:

  • masamune_model_firebase_data_connect_annotation - Provides annotations
  • masamune_model_firebase_data_connect_builder (this package) - Generates code
  • masamune_model_firebase_data_connect - Runtime adapter implementation

Usage #

Installation #

Add as a development dependency:

flutter pub add masamune_model_firebase_data_connect
flutter pub add masamune_model_firebase_data_connect_annotation
flutter pub add --dev masamune_model_firebase_data_connect_builder
flutter pub add --dev build_runner

Annotate Your Models #

Add @firebaseDataConnect and permission settings to your Masamune models:

import 'package:freezed_annotation/freezed_annotation.dart';
import 'package:masamune/masamune.dart';
import 'package:masamune_model_firebase_data_connect_annotation/masamune_model_firebase_data_connect_annotation.dart';

part 'user.m.dart';
part 'user.g.dart';
part 'user.freezed.dart';
part 'user.dataconnect.dart';  // Generated by this builder

@freezed
@formValue
@immutable
@firebaseDataConnect  // Enable Data Connect generation
@CollectionModelPath(
  'user',
  permission: [
    AllowReadModelPermissionQuery.allUsers(),   // All users can read
    AllowWriteModelPermissionQuery.allUsers(),  // All users can write
  ],
)
class UserModel with _$UserModel {
  const factory UserModel({
    required String name,
    @Default('') String email,
    @Default(ModelTimestamp.now()) ModelTimestamp createdAt,
  }) = _UserModel;

  const UserModel._();

  factory UserModel.fromJson(Map<String, Object?> json) => _$UserModelFromJson(json);

  static const document = _$UserModelDocumentQuery();
  static const collection = _$UserModelCollectionQuery();
}

Run the Generator #

Execute the code generator:

katana code generate

Generated Files #

The builder creates the following files in firebase/dataconnect/:

GraphQL Schema (schema.gql):

type User @table {
  id: String!
  name: String!
  email: String!
  createdAt: Timestamp!
}

Queries (queries.gql):

query getUserById($id: String!) @auth(level: USER) {
  user(id: $id) {
    id
    name
    email
    createdAt
  }
}

query listUsers @auth(level: USER) {
  users {
    id
    name
    email
  }
}

Mutations (mutations.gql):

mutation createUser($id: String!, $name: String!, $email: String!) @auth(level: USER) {
  user_insert(data: {
    id: $id
    name: $name
    email: $email
  })
}

Connector Configuration (connector.yaml):

connectorId: default
generate:
  dartSdk:
    outputDir: ../lib/generated

Adapter (user.dataconnect.dart):

part of 'user.dart';

mixin _$UserModelFirebaseDataConnectAdapter 
    on FirebaseDataConnectModelAdapterBase {
  // Generated adapter implementation
}

Deploy to Firebase #

Deploy the generated files to Firebase Data Connect:

# Deploy schema and queries
firebase deploy --only dataconnect

# Or use Firebase CLI
firebase dataconnect:deploy

Configuration #

Customize generation in build.yaml:

targets:
  $default:
    builders:
      masamune_model_firebase_data_connect_builder:
        options:
          output_directory: "firebase/dataconnect"
          connector_id: "my-connector"

Tips #

  • Run katana code generate after any model changes
  • Review generated GraphQL files before deploying
  • Use @FirebaseDataConnectAdapter for custom configuration
  • Test queries with Firebase Data Connect Studio
  • Keep schema files in version control

GitHub Sponsors #

Sponsors are always welcome. Thank you for your support!

https://github.com/sponsors/mathrunet