check-es3-syntax
Version:
Check if contents of a file is es3-compatible
127 lines (94 loc) • 3.94 kB
JavaScript
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.checkString = checkString;
exports.default = function () {
var files = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
var _ref5 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
savePatchToDisk = _ref5.savePatchToDisk,
directory = _ref5.directory;
var filesArray = (Array.isArray(files) ? files : [files]).map(function (filename) {
if (_fs2.default.lstatSync(filename).isDirectory()) {
return (0, _fsReaddirRecursive2.default)(filename).filter(function (file) {
return _path2.default.extname(file) === '.js';
}).map(function (file) {
return _path2.default.join(filename, file);
});
}
return filename;
});
var readFilesAsPromise = _bluebird2.default.map((0, _lodash2.default)(filesArray), function (filename) {
return _bluebird2.default.props({
content: readFile(filename, 'utf-8'),
filename: filename
});
});
return checkContent(readFilesAsPromise, savePatchToDisk, directory);
};
var _fs = require('fs');
var _fs2 = _interopRequireDefault(_fs);
var _path = require('path');
var _path2 = _interopRequireDefault(_path);
var _crypto = require('crypto');
var _crypto2 = _interopRequireDefault(_crypto);
var _bluebird = require('bluebird');
var _bluebird2 = _interopRequireDefault(_bluebird);
var _es3ify = require('es3ify');
var _es3ify2 = _interopRequireDefault(_es3ify);
var _fsReaddirRecursive = require('fs-readdir-recursive');
var _fsReaddirRecursive2 = _interopRequireDefault(_fsReaddirRecursive);
var _lodash = require('lodash.flatten');
var _lodash2 = _interopRequireDefault(_lodash);
var _diff = require('diff');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var transform = _es3ify2.default.transform;
var readFile = _bluebird2.default.promisify(_fs2.default.readFile);
var writeFile = _bluebird2.default.promisify(_fs2.default.writeFile);
var hashString = function (string) {
return _crypto2.default.createHash('md5').update(string).digest('hex');
};
function checkContent(contentPromise, savePatchToDisk, directory) {
return contentPromise.map(function (_ref) {
var content = _ref.content,
filename = _ref.filename;
var hash = hashString(content);
var es3Content = transform(content);
var es3Hash = hashString(es3Content);
return _bluebird2.default.props({
filename: filename,
content: content,
hash: hash,
es3Content: es3Content,
es3Hash: es3Hash
});
}).filter(function (_ref2) {
var hash = _ref2.hash,
es3Hash = _ref2.es3Hash;
return hash !== es3Hash;
}).map(function (_ref3) {
var filename = _ref3.filename,
content = _ref3.content,
es3Content = _ref3.es3Content;
return _bluebird2.default.props({
filename: filename,
patch: (0, _diff.createPatch)(filename, content, es3Content),
textDiff: (0, _diff.diffChars)(content, es3Content)
});
}).tap(function (arr) {
if (savePatchToDisk) return _bluebird2.default.all(arr.map(function (res) {
return writeFile(_path2.default.join(directory, _path2.default.basename(res.filename) + '.patch'), res.patch);
}));
return _bluebird2.default.resolve();
});
}
function checkString(content) {
var _ref4 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
savePatchToDisk = _ref4.savePatchToDisk,
directory = _ref4.directory,
_ref4$filename = _ref4.filename,
filename = _ref4$filename === undefined ? 'stringInput' : _ref4$filename;
return checkContent(_bluebird2.default.resolve([_bluebird2.default.props({ content: content, filename: filename })]), savePatchToDisk, directory).spread(function (res) {
return res;
}); // Unwrap the array, as it's only ever one result
}
;