aquavox/src/lib/server/dirHash.ts
eternal-flame-AD 63c65e8b7d
fs robustness patch
Signed-off-by: eternal-flame-AD <yume@yumechi.jp>
2024-07-24 12:26:40 -05:00

36 lines
1.0 KiB
TypeScript

import * as fs from 'fs';
import * as path from 'path';
import * as crypto from 'crypto';
// Function to get hash for a given directory
export function getDirectoryHash(dir: string): string {
const fileDetails: string[] = [];
// Recursive function to traverse the directory
function traverseDirectory(currentDir: string): void {
const files = fs.readdirSync(currentDir);
files.forEach(file => {
const filePath = path.join(currentDir, file);
const stats = fs.lstatSync(filePath);
if (stats.isDirectory()) {
traverseDirectory(filePath);
} else {
// Collect file path and last modification time
fileDetails.push(`${filePath}:${stats.mtimeMs}`);
}
});
}
traverseDirectory(dir);
// Sort file details to ensure consistent hash
fileDetails.sort();
// Create hash from file details
const hash = crypto.createHash('sha256');
hash.update(fileDetails.join('\x00'));
return hash.digest('hex');
}