You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

48 lines
1.2 KiB

'use strict';
const fs = require('fs');
const readChunk = require('read-chunk');
const istextorbinary = require('istextorbinary');
const dateFormat = require('dateformat');
const prettyBytes = require('pretty-bytes');
const Table = require('cli-table');
exports.isBinary = (existingFilePath, newFileContents) => {
const existingHeader = readChunk.sync(existingFilePath, 0, 512);
return (
istextorbinary.isBinarySync(existingFilePath, existingHeader) ||
(newFileContents && istextorbinary.isBinarySync(existingFilePath, newFileContents))
);
};
exports.diff = (existingFilePath, newFileContents) => {
const existingStat = fs.statSync(existingFilePath);
const table = new Table({
head: ['', 'Existing', 'Replacement', 'Diff']
});
let sizeDiff;
if (!newFileContents) {
newFileContents = Buffer.from([]);
}
if (existingStat.size > newFileContents.length) {
sizeDiff = '-';
} else {
sizeDiff = '+';
}
sizeDiff += prettyBytes(Math.abs(existingStat.size - newFileContents.length));
table.push(
[
'Size',
prettyBytes(existingStat.size),
prettyBytes(newFileContents.length),
sizeDiff
],
['Last modified', dateFormat(existingStat.mtime), '', '']
);
return table.toString();
};