writeAll method

Future<void> writeAll()

Writes formatted contracts and generated build files into the file system

Implementation

Future<void> writeAll() async {
  final contractsPath = p.join(
    p.relative(config.output.path),
    '${config.name}.dart',
  );

  await config.output.create(recursive: true);
  await File(contractsPath).writeAsString(
    DartFormatter().format(await toCode()),
  );

  final packageGraph = await PackageGraph.forThisPackage();
  final js = jsonSerializable(BuilderOptions.empty);
  final f = AssetId(packageGraph.root.name, contractsPath);

  final env = IOEnvironment(packageGraph);
  final writer = MemoryAssetWriter();

  final res = AnalyzerResolvers();

  await runBuilder(js, [f], env.reader, writer, res);

  final jsonSerializablePathOld = p.join(
    p.relative(config.output.path),
    '${config.name}.json_serializable.g.part',
  );
  final jsonSerializablePath = p.join(
    config.output.path,
    '${config.name}.g.dart',
  );
  final generated = writer.assets[AssetId(
    packageGraph.root.name,
    jsonSerializablePathOld,
  )];
  await File(jsonSerializablePath).writeAsString(
    '''
// GENERATED CODE - DO NOT MODIFY BY HAND

part of '${config.name}.dart';

${utf8.decode(generated ?? [])}''',
  );
}