buildReactor method

  1. @override
FutureOr<void> buildReactor(
  1. List<SubjectDescriptor> descriptors,
  2. 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(false);
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);
}""");
  }
}