build method
Generates the outputs for a given BuildStep.
Implementation
@override
Future<void> build(BuildStep buildStep) async {
final inputId = buildStep.inputId;
log.info('Processing ${inputId.path}');
// Read the configuration file
final configContent = await buildStep.readAsString(inputId);
try {
// Parse configuration
final config = ConfidentialConfiguration.fromYaml(configContent);
// Platform detection and warnings
final platform = PlatformDetector.detectPlatform();
final securityInfo = PlatformDetector.getSecurityInfo(platform);
if (securityInfo.shouldShowWarnings) {
log.warning(
'Platform ${platform.name} has ${securityInfo.securityLevel.name} security level',
);
for (final warning in securityInfo.warnings.take(2)) {
log.warning('Security: $warning');
}
}
// Generate enhanced code with platform awareness
final generator = EnhancedCodeGenerator(config, options);
final generatedCode = await generator.generateWithPlatformSupport(
platform,
);
// Write output
final outputPath = _getOutputPath(inputId, options);
final outputId = AssetId(inputId.package, outputPath);
await buildStep.writeAsString(outputId, generatedCode);
// Generate additional assets if configured
await _generateAdditionalAssets(buildStep, config, options);
log.info(
'Generated obfuscated code: ${outputId.path} (${config.secrets.length} secrets)',
);
if (platform == ConfidentialPlatform.web) {
log.warning(
'Web platform detected - secrets will not be secure in JavaScript',
);
}
} catch (e) {
log.severe('Failed to generate obfuscated code: $e');
throw BuildException('Confidential code generation failed: $e');
}
}