Project Files
src / utils / fileHash.ts
import * as crypto from "crypto";
import * as fs from "fs";
/**
* Calculate SHA-256 hash of a file for change detection
*/
export async function calculateFileHash(filePath: string): Promise<string> {
return new Promise((resolve, reject) => {
const hash = crypto.createHash("sha256");
const stream = fs.createReadStream(filePath);
stream.on("data", (data) => hash.update(data));
stream.on("end", () => resolve(hash.digest("hex")));
stream.on("error", reject);
});
}
/**
* Get file metadata including size and modification time
*/
export async function getFileMetadata(filePath: string): Promise<{
size: number;
mtime: Date;
hash: string;
}> {
const stats = await fs.promises.stat(filePath);
const hash = await calculateFileHash(filePath);
return {
size: stats.size,
mtime: stats.mtime,
hash,
};
}