1
- import 'dart:async' ;
2
- import 'dart:io' ;
3
-
4
1
import 'package:args/args.dart' ;
5
- import 'package:model_generator/config/pubspec_config.dart' ;
6
- import 'package:model_generator/config/yml_generator_config.dart' ;
7
- import 'package:model_generator/model/model/custom_model.dart' ;
8
- import 'package:model_generator/model/model/enum_model.dart' ;
9
- import 'package:model_generator/model/model/json_converter_model.dart' ;
10
- import 'package:model_generator/model/model/object_model.dart' ;
11
- import 'package:model_generator/run_process/run_process.dart' ;
12
- import 'package:model_generator/writer/enum_model_writer.dart' ;
13
- import 'package:model_generator/writer/object_model_writer.dart' ;
14
- import 'package:path/path.dart' ;
2
+ import 'package:model_generator/main.dart' ;
15
3
16
4
Future <void > main (List <String > args) async {
17
5
final argParser = ArgParser ()
@@ -26,123 +14,5 @@ Future<void> main(List<String> args) async {
26
14
print (argParser.usage);
27
15
return ;
28
16
}
29
-
30
- final pubspecYaml = File (join (Directory .current.path, 'pubspec.yaml' ));
31
- if (! pubspecYaml.existsSync ()) {
32
- throw Exception (
33
- 'This program should be run from the root of a flutter/dart project' );
34
- }
35
- final pubspecContent = pubspecYaml.readAsStringSync ();
36
- final pubspecConfig = PubspecConfig (pubspecContent);
37
-
38
- final configPath = results['path' ] ?? pubspecConfig.configPath;
39
- String absolutePath;
40
- if (isAbsolute (configPath)) {
41
- absolutePath = configPath;
42
- } else {
43
- absolutePath = join (Directory .current.path, configPath);
44
- }
45
- final FileSystemEntity configEntity;
46
- switch (FileSystemEntity .typeSync (absolutePath)) {
47
- case FileSystemEntityType .directory:
48
- configEntity = Directory (absolutePath);
49
- break ;
50
- case FileSystemEntityType .file:
51
- default :
52
- configEntity = File (absolutePath);
53
- break ;
54
- }
55
-
56
- if (! configEntity.existsSync ()) {
57
- throw Exception (
58
- 'This program requires a config file/dir. `$configPath ` does not exist' );
59
- }
60
- final YmlGeneratorConfig modelGeneratorConfig;
61
- if (configEntity is Directory ) {
62
- modelGeneratorConfig =
63
- readConfigFilesInDirectory (pubspecConfig, configEntity, configPath);
64
- } else {
65
- final modelGeneratorContent = (configEntity as File ).readAsStringSync ();
66
- modelGeneratorConfig =
67
- YmlGeneratorConfig (pubspecConfig, modelGeneratorContent, configPath);
68
- }
69
- modelGeneratorConfig.checkIfTypesAvailable ();
70
- if (modelGeneratorConfig.models.isEmpty) {
71
- print ('No models defined in config files, skipping generation' );
72
- }
73
-
74
- writeToFiles (pubspecConfig, modelGeneratorConfig);
75
- await generateJsonGeneratedModels (useFvm: pubspecConfig.useFvm);
76
- print ('Done!!!' );
77
- }
78
-
79
- YmlGeneratorConfig readConfigFilesInDirectory (
80
- PubspecConfig config, Directory configEntity, String directoryPath) {
81
- final configFiles = configEntity
82
- .listSync (recursive: true )
83
- .whereType <File >()
84
- .where ((element) =>
85
- extension (element.path) == '.yaml' ||
86
- extension (element.path) == '.yml' );
87
- final configs = configFiles.map ((e) =>
88
- YmlGeneratorConfig (config, e.readAsStringSync (), relative (e.path)));
89
- return YmlGeneratorConfig .merge (configs, directoryPath);
90
- }
91
-
92
- void writeToFiles (
93
- PubspecConfig pubspecConfig, YmlGeneratorConfig modelGeneratorConfig) {
94
- for (final model in modelGeneratorConfig.models) {
95
- final modelDirectory = Directory (join ('lib' , model.baseDirectory));
96
- if (! modelDirectory.existsSync ()) {
97
- modelDirectory.createSync (recursive: true );
98
- }
99
- String ? content;
100
- if (model is ObjectModel ) {
101
- content = ObjectModelWriter (
102
- pubspecConfig,
103
- model,
104
- modelGeneratorConfig,
105
- ).write ();
106
- } else if (model is EnumModel ) {
107
- content = EnumModelWriter (model).write ();
108
- } else if (model is JsonConverterModel ) {
109
- continue ;
110
- } else if (model is CustomModel ) {
111
- continue ;
112
- }
113
- if (content == null ) {
114
- throw Exception (
115
- 'content is null for ${model .name }. File a bug report on github. This is not normal. https://github.com/icapps/flutter-model-generator/issues' );
116
- }
117
- File file;
118
- if (model.path == null ) {
119
- file = File (join ('lib' , model.baseDirectory, '${model .fileName }.dart' ));
120
- } else {
121
- file = File (join (
122
- 'lib' , model.baseDirectory, model.path, '${model .fileName }.dart' ));
123
- }
124
- if (! file.existsSync ()) {
125
- file.createSync (recursive: true );
126
- }
127
- file.writeAsStringSync (content);
128
- }
129
- }
130
-
131
- Future <void > generateJsonGeneratedModels ({required bool useFvm}) async {
132
- final arguments = [
133
- if (useFvm) ...[
134
- 'fvm' ,
135
- ],
136
- 'flutter' ,
137
- 'packages' ,
138
- 'pub' ,
139
- 'run' ,
140
- 'build_runner' ,
141
- 'build' ,
142
- '--delete-conflicting-outputs' ,
143
- ];
144
- await ProcessRunner .runProcessVerbose (
145
- arguments.first,
146
- arguments.skip (1 ).toList (),
147
- );
17
+ ModelGenerator .generate (results);
148
18
}
0 commit comments