build method
Generates the outputs for a given BuildStep.
Implementation
@override
Future<void> build(BuildStep buildStep) async {
final inputId = buildStep.inputId;
// 1️⃣ Skip generated, part, and hidden files
final path = inputId.path;
if (path.startsWith(Constant.GENERATED_DIR_NAME)) {
return;
}
if (inputId.package.startsWith("jetleaf") || inputId.uri.toString().startsWith(KEYWORD)) {
return;
}
if (inputId.uri.toString().startsWith(DART)) {
return;
}
final skip = [
...getNonNecessaryPackages(),
"fixnum",
"graphs",
"http_multi_server",
"io",
"jetson",
"jtl",
"matcher",
"collection",
"string_scanner",
"mime",
"pool",
"pubspec_parse",
"checked_yaml",
"json_annotation",
"shelf_web_socket",
"shelf",
"http_parser",
"args",
"logging",
"source_span",
"watcher",
"boolean_selector",
"stack_trace",
"stream_transform",
"convert",
"file",
"glob",
"package_config",
"path",
"term_glyph",
"yaml",
"meta",
"async",
"typed_data",
"crypto",
"stream_channel",
"web",
"web_socket",
"web_socket_channel",
];
if (skip.any((s) => s.equals(inputId.package))) {
return;
}
if (path.endsWith('.g.dart') || path.endsWith('.freezed.dart')) {
return;
}
// 2️⃣ Try to see if this is a valid Dart library before resolving
if (!await buildStep.resolver.isLibrary(inputId)) {
return; // Skip part files and non-library units
}
final resolver = buildStep.resolver;
final lib = await resolver.libraryFor(inputId);
// 3️⃣ Skip SDK libs and analyzer internals
if (lib.isInSdk || lib.uri.toString().startsWith(DART) || lib.identifier.contains(DART)) return;
if (lib.uri.toString().startsWith(KEYWORD)) return;
if ((await buildStep.inputLibrary).firstFragment.importedLibraries.map((i) => i.uri.toString()).toList().none((im) => im.contains(KEYWORD))) {
return;
}
final reader = LibraryReader(lib);
final generator = ProxyGenerator();
final output = await generator.generate(reader, buildStep);
if (output.trim().isEmpty) return;
// Store the result in the global map
final inputPath = buildStep.inputId.path; // e.g. lib/core/config.dart
final relPath = p.withoutExtension(inputPath);
final outputPath = '${Constant.GENERATED_DIR_NAME}/${relPath.replaceFirst("lib", '${buildStep.inputId.package}_proxies')}_proxy.dart';
await writeGeneratedOutput(output, File(outputPath));
final outputId = inputId.changeExtension('.proxy.dart');
await buildStep.writeAsString(outputId, output);
}