build method
Generate fileMap from files under importPath.
Loads .json
and .yaml
files and skips others.
Implementation
@override
@mustCallSuper
FutureOr<void> build([final BuildStep? buildStep]) async {
await super.build(buildStep);
if (models.isEmpty) {
} else if (buildStep != null && buildStep.allowedOutputs.length == 1) {
await buildStep.writeAsString(
buildStep.allowedOutputs.single,
buildStep.trackStage('Generate $_exportPath.', () => generate(models)),
encoding: exportEncoding,
);
} else if (_isDirectoryExport) {
final Map<String, Iterable<ClassModel>> files =
<String, Iterable<ClassModel>>{};
for (final ClassModel model in models) {
final List<String> parts =
(model.reference.isEmpty ? model.name : model.reference).split('.');
final String filename =
parts.length >= 2 ? parts.elementAt(parts.length - 2) : parts.last;
final String path = joinAll(<String>[
...split(_exportPath),
if (parts.length >= 2) ...parts.sublist(0, parts.length - 2),
'$filename$_suffix'
]);
files[path] = <ClassModel>[...?files[path], model];
}
if (buildStep != null) {
for (final AssetId output in buildStep.allowedOutputs) {
final Iterable<ClassModel>? models =
files[joinAll(split(output.path).sublist(1))];
if (models != null) {
await buildStep.writeAsString(
output,
buildStep.trackStage(
'Generate ${output.path}.',
() => generate(models),
),
encoding: exportEncoding,
);
}
}
} else {
for (final String path in files.keys) {
final File file = File(path);
await file.parent.create(recursive: true);
await file.writeAsString(
generate(files[path]!),
encoding: exportEncoding,
mode: FileMode.writeOnly,
flush: true,
);
}
}
} else {
final File file = File(_exportPath);
await file.parent.create(recursive: true);
await file.writeAsString(
generate(models),
encoding: exportEncoding,
mode: FileMode.writeOnly,
flush: true,
);
}
}