UNPKG

check-es3-syntax

Version:

Check if contents of a file is es3-compatible

127 lines (94 loc) 3.94 kB
'use strict'; 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 }