Files
DefiLlama-Adapters/utils/scripts/stringTimestamp.js
2024-11-27 10:52:40 +01:00

96 lines
2.8 KiB
JavaScript

const fs = require('fs');
const path = require('path');
// Function to convert Unix timestamp to 'YYYY-MM-DD' format
function convertTimestamp(unixTimestamp) {
const date = new Date(unixTimestamp * 1000);
const year = date.getFullYear();
const month = String(date.getMonth() + 1).padStart(2, '0');
const day = String(date.getDate()).padStart(2, '0');
return `${year}-${month}-${day}`;
}
// Function to process files in the given directory
function processFiles(dir) {
if (['node_modules', 'raindex', 'helper', 'exactly'].some(name => dir.includes(name))) {
return;
}
fs.readdir(dir, (err, files) => {
if (err) {
console.error(`Error reading directory ${dir}:`, err);
return;
}
files.forEach(file => {
const filePath = path.join(dir, file);
fs.stat(filePath, (err, stats) => {
if (err) {
console.error(`Error stating file ${filePath}:`, err);
return;
}
if (stats.isFile()) {
fs.readFile(filePath, 'utf8', (err, data) => {
if (err) {
console.error(`Error reading file ${filePath}:`, err);
return;
}
const regex = /start:\s*(\d+)/g;
const newData = data.replace(regex, (match, p1) => {
if (!/^\d{10}$/.test(p1)) {
console.error(`Invalid Unix timestamp ${p1} in file ${filePath}`);
return match;
}
const year = new Date(parseInt(p1, 10) * 1000).getFullYear();
if (year < 2005 || year > 2055) {
console.error(`Year ${year} out of range for timestamp ${p1} in file ${filePath}`);
return match;
}
const newTimestamp = convertTimestamp(parseInt(p1, 10));
return `start: '${newTimestamp}'`;
});
if (newData !== data) {
fs.writeFile(filePath, newData, 'utf8', err => {
if (err) {
console.error(`Error writing file ${filePath}:`, err);
} else {
console.log(`Updated file ${filePath}`);
}
});
}
});
} else if (stats.isDirectory()) {
processFiles(filePath);
}
});
});
});
}
// Get the directory two levels up
const baseDir = path.resolve(__dirname, '../../projects');
// Process all directories two levels up
fs.readdir(baseDir, (err, dirs) => {
if (err) {
console.error(`Error reading base directory ${baseDir}:`, err);
return;
}
dirs.forEach(dir => {
const dirPath = path.join(baseDir, dir);
fs.stat(dirPath, (err, stats) => {
if (err) {
console.error(`Error stating directory ${dirPath}:`, err);
return;
}
if (stats.isDirectory()) {
processFiles(dirPath);
}
});
});
});