build method

  1. @override
Future<void> build(
  1. BuildStep buildStep
)

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');
  }
}