morpha
Version:
A Web-IDE or Desktop-IDE creator.
48 lines (38 loc) • 1.87 kB
JavaScript
;
var _stringify = require('babel-runtime/core-js/json/stringify');
var _stringify2 = _interopRequireDefault(_stringify);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var crypto = require('crypto');
var path = require('path');
// todo 只需要支持esModule, 其他可以考虑用nodejs原生来支持
var defaultOptions = require('../../../static/babelrc.json');
var babel = require('babel-core');
var Logger = require('babel-core/lib/transformation/file/logger');
var noop = function noop() {};
Logger.prototype.debug = noop;
Logger.prototype.verbose = noop;
var babelVersionDirectory = null;
exports.shouldCompile = function (sourceCode, filePath) {
// todo 过滤规则可以考虑node_modules下
// && !sourceCode.substr(0, 400).match(/__esModule/)
return filePath.match(/\/node_modules\/morpha\//) || !filePath.match(/node_modules/);
};
exports.getCachePath = function (sourceCode) {
if (!babelVersionDirectory) {
var babelVersion = require('babel-core/package.json').version;
babelVersionDirectory = path.join('js', 'babel', createVersionAndOptionsDigest(babelVersion, defaultOptions));
}
return path.join(babelVersionDirectory, crypto.createHash('sha1').update(sourceCode, 'utf8').digest('hex') + '.js');
};
exports.compile = function (sourceCode, filePath) {
var options = { filename: filePath
/* eslint-disable guard-for-in */
};for (var key in defaultOptions) {
options[key] = defaultOptions[key];
}
/* enabled-enable eslint guard-for-in */
return babel.transform(sourceCode, options).code;
};
function createVersionAndOptionsDigest(version, options) {
return crypto.createHash('sha1').update('babel-core', 'utf8').update('\0', 'utf8').update(version, 'utf8').update('\0', 'utf8').update((0, _stringify2.default)(options), 'utf8').digest('hex');
}