js_cli 0.0.4+2 js_cli: ^0.0.4+2 copied to clipboard
This project is one CLI for integrate Flutter and Dart with Clean Architecture
JS Arch CLI #
Code generator to facilitate development #
Get Start:
dart pub global activate js_cli
Commands: #
# Generate Feature
js_cli g layer complete /lib/src/features/home
Result
# Generate Entity
js_cli g entity /lib/src/features/home Home
Result
// home.entitiy.dart
class HomeEntity {
HomeEntity();
}
# Generate UseCase
js_cli g usecase /lib/src/features/home GetHomeCards
Result
//get_home_cards.usecase.dart
abstract class GetHomeCardsUsecase {
Future<void> call();
}
//get_home_cards_imp.usecase.dart
import 'get_home_cards_usecase.dart';
class GetHomeCardsImpUsecase implements GetHomeCardsUsecase {
@override
Future<void> call() {
// TODO: implement call
throw UnimplementedError();
}
}
# Generate Repository
js_cli g repository /lib/src/features/home GetHomeCards
Result
// domain/repositories/get_home_cards.repository.dart
abstract class GetHomeCardsRepository {
Future<void> call();
}
// data/repositories/get_home_cards_imp.repository.dart
import '../../domain/repositories/get_home_cards_repository.dart';
class GetHomeCardsImpRepository implements GetHomeCardsRepository {
@override
Future<void> call() {
// TODO: implement call
throw UnimplementedError();
}
}
# Generate Dto
js_cli g dto /lib/src/features/home Home
Result
// home_dto.dart
import '../../domain/models/entities/home_entity.dart';
class HomeDto extends HomeEntity {
HomeDto() : super();
}
# Generate Error
js_cli g error /lib/src/core/errors Generic
Result
// generic.error.dart
class GenericError implements Exception {
final String _message;
final Exception innerException;
GenericError(String message, this.innerException) : _message = message;
String get message => _message;
}
$ js_cli g layer complete ./teste/features/dashboard
################### Clean Arch CLI ###################
generating complete layer....
COMPLETE layer created
$ js_cli g entity ./teste/features/dashboard Viewer
################### Clean Arch CLI ###################
generating usecase Viewer....
Viewer created
$ js_cli g usecase ./teste/features/dashboard getViewer
################### Clean Arch CLI ###################
generating usecase getViewer....
getViewer created
$ js_cli g repository ./teste/features/dashboard getViewer
################### Clean Arch CLI ###################
generating repository getViewer....
getViewer created
$ js_cli g dto ./teste/features/dashboard Viewer
################### Clean Arch CLI ###################
generating dto Viewer....
ViewerDto created
Reserved words #
Reserved words can be used in the templet files that are generated in .js_cli/templete the reserved words must be used inside mustaches {{}}
example {{name}}
, can also be used in reserved words an extension, example {{name.pascalCase}}
whose extension will format the word as needed, you can check the lists below for all reserved words and extensions
Reserved words can be edited in my_project\.js_cli\configs.json
reserved words | default |
---|---|
name | input input by the terminal, this value is the last parameter of the expression to generate the templates |
path | input input via terminal, path where the new file will be generated |
module | input input by the terminal, name of the module that will generate the new files |
fileExtension | dart |
repositoryPathInterface | domain/repositories |
repositoryNameFileInterface | {{name.snakeCase}}_repository |
repositoryPath | data/repositories |
repositoryNameFile | {{name.snakeCase}}_imp_repository |
repositoryNameClassInterface | {{name.pascalCase}}Repository |
repositoryNameClass | {{name.pascalCase}}ImpRepository |
datasourcePathInterface | data/datasources |
datasourceNameFileInterface | {{name.snakeCase}}_datasource |
datasourcePath | external/datasources |
datasourceNameFile | {{name.snakeCase}}_imp_datasource |
datasourceNameClassInterface | {{name.pascalCase}}Datasource |
datasourceNameClass | {{name.pascalCase}}ImpDatasource |
usecasePathInterface | domain/usecases |
usecaseNameFileInterface | {{name.snakeCase}}_usecase |
usecasePath | domain/usecases |
usecaseNameFile | {{name.snakeCase}}_imp_usecase |
usecaseNameClassInterface | {{name.pascalCase}}Usecase |
usecaseNameClass | {{name.pascalCase}}ImpUsecase |
pagePath | presentation/ui/pages/{{name.snakeCase}} |
pageNameFile | {{name.snakeCase}}_page |
pageNameClass | {{name.pascalCase}}Page |
controllerPath | presentation/ui/pages/{{name.snakeCase}} |
controllerNameFile | {{name.snakeCase}}_controller |
controllerNameClass | {{name.pascalCase}}Controller |
Extensions #
extension | Exemple |
---|---|
camelCase | testeCase |
constantCase | TESTE_CASE |
sentenceCase | Teste case |
snakeCase | teste_case |
dotCase | teste.case |
paramCase | teste-case |
pathCase | teste/case |
pascalCase | TesteCase |
headerCase | Teste-Case |
titleCase | Teste Case |
Replace #
in .js_cli/templete a {{term}}_replace_trigger.json file is generated where from your annotation it can apply a replace to any input expression, for example:
[
{
"pathFile": "{{path}}\\{{module}}_module.dart",
"from": "//imports",
"to": "//imports\nimport '{{controllerPath}}/{{controllerNameFile}}.dart';"
},
{
"pathFile": "{{path}}\\{{module}}_module.dart",
"from": "//Dependence",
"to": "//Dependence\nfinal {{controllerNameClass.camelCase}} = {{controllerNameClass.pascalCase}};"
}
]
where will generate a variable from the expression