is-file-equal-buffer
Version:
Compare file contents with buffer
57 lines (56 loc) • 1.97 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.isFileEqualBuffer = void 0;
function getFileSize(filePath, fs) {
return new Promise(function executor(resolve, reject) {
fs.stat(filePath, function stat(err, stats) {
if (err !== null) {
if (err.code === 'ENOENT') {
return resolve(-1);
}
return reject(err);
}
resolve(stats.size);
});
});
}
function isFileEqualBuffer(filePath, buffer, { fs = require('fs') } = {}) {
return getFileSize(filePath, fs).then(function fileSize(size) {
if (buffer.length !== size) {
return false;
}
return new Promise(function executor(resolve, reject) {
const stream = fs.createReadStream(filePath);
let offset = 0;
let isEqual = true;
stream.on('data', function read(data) {
if (!Buffer.isBuffer(data)) {
data = Buffer.from(data);
}
if (buffer.length >= offset + data.length &&
buffer.compare(data, 0, data.length, offset, offset + data.length) ===
0) {
offset += data.length;
}
else {
isEqual = false;
stream.close();
}
});
stream.on('error', function error(err) {
if (err.code === 'ENOENT') {
isEqual = false;
resolve(isEqual);
}
else {
reject(err);
}
});
stream.on('close', function close() {
resolve(offset === 0 && buffer.length > 0 ? false : isEqual);
});
});
});
}
exports.isFileEqualBuffer = isFileEqualBuffer;
exports.default = isFileEqualBuffer;