scout_code_generator 0.0.1
scout_code_generator: ^0.0.1 copied to clipboard
Feature-based Clean Architecture code generator for Flutter/Dart. Generates models, datasource, repository, entity, and usecase with proper imports and Either<Failure, T> types.
πͺΆ Scout Code Generator #
Inspired by the Survey Corps (Attack on Titan)
Motto: "Membantu seluruh umat manusia"
Author: Widiyanto Ramadhan
Scout adalah code generator Flutter/Dart berprinsip Clean Architecture dan feature-based structure. Scout membantu membuat boilerplate Data/Domain/Usecase secara konsisten, termasuk impor otomatis, tipe pengembalian berbasis Either<Failure, T>
, serta pemetaan Response β Entity.
β¨ Fitur Utama #
-
scout init
Membuat file konfigurasiscout_config.dart
. -
scout make:feature <feature_name> "Author Name"
Menghasilkan struktur folder awal untuk sebuah feature:- Data:
model/
,datasource/
,repository/
- Domain:
entity/
,usecase/
- (Opsional) Presentation scaffolding
- Data:
-
Generator Usecase (interaktif)
Membuat lapisan berikut untuk sebuah usecase pada feature aktif:- Model:
data/model/request/*.dart
dan/ataudata/model/response/*.dart
- Datasource interface/impl:
data/datasource/
- Repository interface:
domain/repository/
- Repository implementation:
data/repository/
- Entity:
domain/entity/${snake}_entity.dart
(berdasarkan nama usecase/response) - Usecase interface & impl:
domain/usecase/
- Model:
π§ Perilaku Generator (ringkas) #
-
Imports otomatis
- Datasource mengimpor request/response model dari
../model/...
- Repository (domain) mengimpor
Either
,Failure
,entity
, dan request model (jika ada) - Repository impl (data) mengimpor datasource,
Either
,Failure
, entity, dan request model (jika ada) - Usecase interface/impl (domain) mengimpor
Either
,Failure
, entity (jika ada response), dan request model (jika ada)
- Datasource mengimpor request/response model dari
-
Tipe pengembalian
- Semua method domain (repo dan usecase) memakai
Future<Either<Failure, T>>
- Untuk list:
Future<Either<Failure, List<T>>>
- Jika tidak ada response:
Future<Either<Failure, void>>
- Semua method domain (repo dan usecase) memakai
-
Entity berbasis Response
- Nama file entity:
domain/entity/${snake}_entity.dart
(mengikuti nama usecase/response) - Class:
${Pascal}Entity
dan menyediakanfactory ${Pascal}Entity.fromResponse(${Pascal}Response response)
- Repository impl memetakan Response β Entity dengan
.fromResponse(...)
- Nama file entity:
-
Usecase
call()
- Jika ada request:
Future<Either<Failure, T>> call({required ${Pascal}Request request})
- Jika tidak ada request:
Future<Either<Failure, T>> call()
- Usecase hanya meneruskan parameter ke repository (request dibuat di Controller/BLoC)
- Jika ada request:
βοΈ Konfigurasi (scout_config.dart
) #
Contoh isi sederhana (path dapat disesuaikan):
class Config {
final String features = 'lib/src/features';
final String datasource = 'lib/src/features/features_name/data/datasource';
final String model = 'lib/src/features/features_name/data/model';
final String repository = 'lib/src/features/features_name/domain/repository';
final String entity = 'lib/src/features/features_name/domain/entity';
final String usecase = 'lib/src/features/features_name/domain/usecase';
}
Catatan: features_name
akan diganti otomatis sesuai nama feature (snake_case).
π Cara Pakai (singkat) #
- Instal di
pubspec.yaml
:
dev_dependencies:
scout_code_generator: ^0.0.1
- Inisialisasi:
scout init
- Buat feature:
scout make:feature example "Author Name"
- Buat usecase (jalankan dalam konteks feature):
scout make:usecase feature_name usecase_name "Author Name"
Generator akan menanyakan beberapa input (mis. baseUrl jika belum ada, endpoint, HTTP method, dsb.). Jika request/response diperlukan, generator akan membuat model dan menautkan impor secara otomatis.
π§© Konvensi Penamaan #
- File: snake_case, Class: PascalCase
- Folder feature:
lib/.../features/<feature_snake>/...
β FAQ singkat #
-
Request diisi di mana?
Di layer pemanggil (Controller/BLoC), lalu diteruskan keUseCase.call(...)
. -
Kenapa repository mengembalikan Entity?
Agar domain tidak tergantung pada DTO/Response data-layer. Mapping dilakukan di repository implementation.
π Lisensi #
GPL-3.0-or-later