renderStationAssetRegistryLibrary function
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);
}