overleaf/services/project-history/app/js/HashManager.js
Antoine Clausse 7f48c67512 Add prefer-node-protocol ESLint rule (#21532)
* Add `unicorn/prefer-node-protocol`

* Fix `unicorn/prefer-node-protocol` ESLint errors

* Run `npm run format:fix`

* Add sandboxed-module sourceTransformers in mocha setups

Fix `no such file or directory, open 'node:fs'` in `sandboxed-module`

* Remove `node:` in the SandboxedModule requires

* Fix new linting errors with `node:`

GitOrigin-RevId: 68f6e31e2191fcff4cb8058dd0a6914c14f59926
2024-11-11 09:04:51 +00:00

58 lines
1.6 KiB
JavaScript

/* eslint-disable
no-undef,
no-unused-vars,
*/
// TODO: This file was created by bulk-decaffeinate.
// Fix any style issues and re-enable lint.
/*
* decaffeinate suggestions:
* DS102: Remove unnecessary code created because of implicit returns
* DS207: Consider shorter variations of null checks
* Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md
*/
import { promisify } from 'node:util'
import fs from 'node:fs'
import crypto from 'node:crypto'
import OError from '@overleaf/o-error'
import { pipeline } from 'node:stream'
export function _getBlobHashFromString(string) {
const byteLength = Buffer.byteLength(string)
const hash = crypto.createHash('sha1')
hash.setEncoding('hex')
hash.update('blob ' + byteLength + '\x00')
hash.update(string, 'utf8')
hash.end()
return hash.read()
}
export function _getBlobHash(fsPath, callback) {
return fs.stat(fsPath, function (err, stats) {
if (err != null) {
OError.tag(err, 'failed to stat file in _getBlobHash', { fsPath })
return callback(err)
}
const byteLength = stats.size
const hash = crypto.createHash('sha1')
hash.setEncoding('hex')
hash.update('blob ' + byteLength + '\x00')
pipeline(fs.createReadStream(fsPath), hash, err => {
if (err) {
callback(
OError.tag(err, 'error streaming file from disk', {
fsPath,
byteLength,
})
)
} else {
hash.end()
callback(null, hash.read(), byteLength)
}
})
})
}
export const promises = {
_getBlobHash: promisify(_getBlobHash),
}