gristlabs_grist-core/app/server/lib/checksumFile.ts
Paul Fitzpatrick 5ef889addd (core) move home server into core
Summary: This moves enough server material into core to run a home server.  The data engine is not yet incorporated (though in manual testing it works when ported).

Test Plan: existing tests pass

Reviewers: dsagal

Reviewed By: dsagal

Differential Revision: https://phab.getgrist.com/D2552
2020-07-21 20:39:10 -04:00

22 lines
693 B
TypeScript

import {createHash} from 'crypto';
import * as fs from 'fs';
/**
* Computes hash of the file at the given path, using 'sha1' by default, or any algorithm
* supported by crypto.createHash().
*/
export async function checksumFile(filePath: string, algorithm: string = 'sha1'): Promise<string> {
const shaSum = createHash(algorithm);
const stream = fs.createReadStream(filePath);
try {
stream.on('data', (data) => shaSum.update(data));
await new Promise<void>((resolve, reject) => {
stream.on('end', resolve);
stream.on('error', reject);
});
return shaSum.digest('hex');
} finally {
stream.removeAllListeners(); // Isn't strictly necessary.
}
}