renderStationAssetRegistryLibrary function

String renderStationAssetRegistryLibrary(
  1. Iterable<ResolvedGridAssetPack> packages
)

Renders a Flutter-registrant-style library from packages.

Implementation

String renderStationAssetRegistryLibrary(
  Iterable<ResolvedGridAssetPack> packages,
) {
  final ordered = <ResolvedGridAssetPack>[...packages]
    ..sort((a, b) => a.name.compareTo(b.name));
  for (final package in ordered) {
    if (package.definition.package != package.name) {
      throw StationAssetRegistryException(
        'resolved package "${package.name}" contributes definition '
        '"${package.definition.package}"',
      );
    }
  }
  final _ = GridAssetRegistry(<GridAssetPackDefinition>[
    for (final package in ordered) package.definition,
  ]);

  final buffer = StringBuffer()
    ..writeln('// $kStationAssetRegistryGeneratedMarker — do not edit.')
    ..writeln(
      '// Sources: .dart_tool/package_config.json, pubspec.lock, and each',
    )
    ..writeln('// participating package\'s top-level `grid:` block.')
    ..writeln(
      '// Regenerate: dart run tool/generate_station_asset_registry.dart',
    )
    ..writeln()
    ..writeln('// Transitive imports are intentional: this is resolved output.')
    ..writeln('// ignore_for_file: depend_on_referenced_packages')
    ..writeln()
    ..writeln('library;')
    ..writeln()
    ..writeln("import 'package:grid_sdk/grid_sdk.dart';");
  for (final package in ordered) {
    buffer.writeln(
      "import '${package.publicLibraryUri}' as ${_packAlias(package.name)};",
    );
  }
  buffer
    ..writeln()
    ..writeln('/// The complete asset registry generated for this station.')
    ..writeln('abstract final class GeneratedGridAssetRegistrant {')
    ..writeln('  /// Every pack in the resolved station closure.')
    ..writeln('  ///')
    ..writeln('  /// Built, not `const`: the SDK factory validates duplicate')
    ..writeln(
      '  /// logical and artifact identity before exposing the registry.',
    )
    ..writeln('  static final GridAssetRegistry registry = GridAssetRegistry(')
    ..writeln('    <GridAssetPackDefinition>[');
  for (final package in ordered) {
    buffer.writeln(
      '      ${_packAlias(package.name)}.GridAssetsPack.definition,',
    );
  }
  buffer
    ..writeln('    ],')
    ..writeln('  );')
    ..writeln('}');
  return DartFormatter(
    languageVersion: DartFormatter.latestLanguageVersion,
  ).format(buffer.toString(), uri: kGeneratedStationAssetRegistryPath);
}