buildReactor method
FutureOr<void>
buildReactor(
- List<SubjectDescriptor> descriptors,
- SubjectCodeContext code
)
Implementation
@override
FutureOr<void> buildReactor(
List<SubjectDescriptor> descriptors, SubjectCodeContext code) async {
code.additionalImports
.add(AliasImport.root("package:dogs_core/dogs_core.dart"));
List<String> descriptorNames = [];
for (var descriptor in descriptors) {
var names = (descriptor.meta["converterNames"] as List).cast<String>();
for (var name in names) {
var type = await getDartType(step, descriptor.uri, name);
descriptorNames.add(code.cachedCounter.get(type));
}
code.codeBuffer.writeln("export '${descriptor.uri}';");
}
var converterNameArr = "[${descriptorNames.map((e) => "$e()").join(", ")}]";
if (!isLibrary) {
code.codeBuffer.writeln("""
Future initialiseDogs() async {
var engine = DogEngine.hasValidInstance ? DogEngine.instance : DogEngine();
engine.registerAllConverters($converterNameArr);
engine.setSingleton();
}""");
} else {
var fieldName = ReCase("$packageName converters").camelCase;
var funcName = ReCase("install $packageName converters").camelCase;
code.codeBuffer.writeln("""
final $fieldName = <DogConverter>$converterNameArr;
void $funcName() {
if (!DogEngine.hasValidInstance) {
throw Exception("No valid global DogEngine instance present");
}
DogEngine.instance.registerAllConverters($fieldName);
}""");
print("Wrote: ${code.codeBuffer}");
}
}