applyTimestampToFiles method
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;
}
}