buildReactor method

  1. @override
FutureOr<void> buildReactor(
  1. List<SubjectDescriptor> descriptors,
  2. SubjectCodeContext code
)

Implementation

@override
FutureOr<void> buildReactor(
    List<SubjectDescriptor> descriptors, SubjectCodeContext code) {
  code.additionalImports
      .add(AliasImport.root("package:dogs_core/dogs_core.dart"));
  code.codeBuffer
      .writeln(descriptors.map((e) => "export '${e.uri}';").join("\n"));

  var converterNameArr =
      "[${descriptors.expand((e) => (e.meta["converterNames"] as List).cast<String>()).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);
}""");
  }
}