UNPKG

is-file-equal-buffer

Version:

Compare file contents with buffer

57 lines (56 loc) 1.97 kB
"use strict"; 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;