Skip to content

Commit d6b690a

Browse files
Merge pull request #150 from icapps/feature/#120-bin-to-lib
#120: moved code to lib
2 parents 7dfa0c0 + 0880e5b commit d6b690a

File tree

2 files changed

+142
-132
lines changed

2 files changed

+142
-132
lines changed

bin/model_generator.dart

+2-132
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,5 @@
1-
import 'dart:async';
2-
import 'dart:io';
3-
41
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';
153

164
Future<void> main(List<String> args) async {
175
final argParser = ArgParser()
@@ -26,123 +14,5 @@ Future<void> main(List<String> args) async {
2614
print(argParser.usage);
2715
return;
2816
}
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);
14818
}

lib/main.dart

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

0 commit comments

Comments
 (0)