applyTimestampToFiles method

Future<bool> applyTimestampToFiles(
  1. String timestamp
)

Apply timestamp to JavaScript files and update references Note: Always uses milliseconds format

Implementation

Future<bool> applyTimestampToFiles(String timestamp) async {
  _logger.printStep('🕒 Applying cache busting...');

  final buildWebPath = path.join(config.buildDir, config.webDir);
  final webDir = Directory(buildWebPath);

  if (!webDir.existsSync()) {
    _logger.printError('Build web directory not found: $buildWebPath');
    return false;
  }

  // Change to build/web directory
  final originalDir = Directory.current;
  Directory.current = webDir;

  try {
    // Find all JavaScript files to rename
    final renamedFiles = <String, String>{};
    var filesRenamed = 0;

    // Scan for actual JavaScript files
    final jsFilesToRename = await _findJavaScriptFiles();

    if (jsFilesToRename.isEmpty) {
      _logger.printWarning('No JavaScript files found to rename');
      return true;
    }

    for (final fileName in jsFilesToRename) {
      final file = File(fileName);
      if (file.existsSync()) {
        final newName = _generateTimestampedName(fileName, timestamp);
        await file.rename(newName);
        renamedFiles[fileName] = newName;
        if (config.verbose) {
          _logger.printSuccess('Renamed: $fileName → $newName');
        }
        filesRenamed++;
      }
    }

    // Update file references
    await _updateFileReferences(renamedFiles);

    // Verify updates only in verbose mode
    if (config.verbose) {
      await _verifyUpdates(renamedFiles);
    }

    _logger.printSuccess('Cache busting applied ($filesRenamed files)');
    return true;
  } finally {
    // Return to original directory
    Directory.current = originalDir;
  }
}