UNPKG

morpha

Version:

A Web-IDE or Desktop-IDE creator.

48 lines (38 loc) 1.87 kB
'use strict'; 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'); }