179 lines
4.4 KiB
JavaScript
179 lines
4.4 KiB
JavaScript
"use strict";
|
|
|
|
exports.__esModule = true;
|
|
|
|
var _keys = require("babel-runtime/core-js/object/keys");
|
|
|
|
var _keys2 = _interopRequireDefault(_keys);
|
|
|
|
var _stringify = require("babel-runtime/core-js/json/stringify");
|
|
|
|
var _stringify2 = _interopRequireDefault(_stringify);
|
|
|
|
exports.default = function () {
|
|
var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
|
|
if (opts.only != null) only = _babelCore.util.arrayify(opts.only, _babelCore.util.regexify);
|
|
if (opts.ignore != null) ignore = _babelCore.util.arrayify(opts.ignore, _babelCore.util.regexify);
|
|
|
|
if (opts.extensions) hookExtensions(_babelCore.util.arrayify(opts.extensions));
|
|
|
|
if (opts.cache === false) cache = null;
|
|
|
|
delete opts.extensions;
|
|
delete opts.ignore;
|
|
delete opts.cache;
|
|
delete opts.only;
|
|
|
|
(0, _extend2.default)(transformOpts, opts);
|
|
};
|
|
|
|
var _cloneDeep = require("lodash/cloneDeep");
|
|
|
|
var _cloneDeep2 = _interopRequireDefault(_cloneDeep);
|
|
|
|
var _sourceMapSupport = require("source-map-support");
|
|
|
|
var _sourceMapSupport2 = _interopRequireDefault(_sourceMapSupport);
|
|
|
|
var _cache = require("./cache");
|
|
|
|
var registerCache = _interopRequireWildcard(_cache);
|
|
|
|
var _extend = require("lodash/extend");
|
|
|
|
var _extend2 = _interopRequireDefault(_extend);
|
|
|
|
var _babelCore = require("babel-core");
|
|
|
|
var babel = _interopRequireWildcard(_babelCore);
|
|
|
|
var _fs = require("fs");
|
|
|
|
var _fs2 = _interopRequireDefault(_fs);
|
|
|
|
var _path = require("path");
|
|
|
|
var _path2 = _interopRequireDefault(_path);
|
|
|
|
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
|
|
|
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
|
|
_sourceMapSupport2.default.install({
|
|
handleUncaughtExceptions: false,
|
|
environment: "node",
|
|
retrieveSourceMap: function retrieveSourceMap(source) {
|
|
var map = maps && maps[source];
|
|
if (map) {
|
|
return {
|
|
url: null,
|
|
map: map
|
|
};
|
|
} else {
|
|
return null;
|
|
}
|
|
}
|
|
});
|
|
|
|
registerCache.load();
|
|
var cache = registerCache.get();
|
|
|
|
var transformOpts = {};
|
|
|
|
var ignore = void 0;
|
|
var only = void 0;
|
|
|
|
var oldHandlers = {};
|
|
var maps = {};
|
|
|
|
var cwd = process.cwd();
|
|
|
|
function getRelativePath(filename) {
|
|
return _path2.default.relative(cwd, filename);
|
|
}
|
|
|
|
function mtime(filename) {
|
|
return +_fs2.default.statSync(filename).mtime;
|
|
}
|
|
|
|
function compile(filename) {
|
|
var result = void 0;
|
|
|
|
var opts = new _babelCore.OptionManager().init((0, _extend2.default)({ sourceRoot: _path2.default.dirname(filename) }, (0, _cloneDeep2.default)(transformOpts), { filename: filename }));
|
|
|
|
var cacheKey = (0, _stringify2.default)(opts) + ":" + babel.version;
|
|
|
|
var env = process.env.BABEL_ENV || process.env.NODE_ENV;
|
|
if (env) cacheKey += ":" + env;
|
|
|
|
if (cache) {
|
|
var cached = cache[cacheKey];
|
|
if (cached && cached.mtime === mtime(filename)) {
|
|
result = cached;
|
|
}
|
|
}
|
|
|
|
if (!result) {
|
|
result = babel.transformFileSync(filename, (0, _extend2.default)(opts, {
|
|
babelrc: false,
|
|
sourceMaps: "both",
|
|
ast: false
|
|
}));
|
|
}
|
|
|
|
if (cache) {
|
|
cache[cacheKey] = result;
|
|
result.mtime = mtime(filename);
|
|
}
|
|
|
|
maps[filename] = result.map;
|
|
|
|
return result.code;
|
|
}
|
|
|
|
function shouldIgnore(filename) {
|
|
if (!ignore && !only) {
|
|
return getRelativePath(filename).split(_path2.default.sep).indexOf("node_modules") >= 0;
|
|
} else {
|
|
return _babelCore.util.shouldIgnore(filename, ignore || [], only);
|
|
}
|
|
}
|
|
|
|
function loader(m, filename) {
|
|
m._compile(compile(filename), filename);
|
|
}
|
|
|
|
function registerExtension(ext) {
|
|
var old = oldHandlers[ext] || oldHandlers[".js"] || require.extensions[".js"];
|
|
|
|
require.extensions[ext] = function (m, filename) {
|
|
if (shouldIgnore(filename)) {
|
|
old(m, filename);
|
|
} else {
|
|
loader(m, filename, old);
|
|
}
|
|
};
|
|
}
|
|
|
|
function hookExtensions(_exts) {
|
|
(0, _keys2.default)(oldHandlers).forEach(function (ext) {
|
|
var old = oldHandlers[ext];
|
|
if (old === undefined) {
|
|
delete require.extensions[ext];
|
|
} else {
|
|
require.extensions[ext] = old;
|
|
}
|
|
});
|
|
|
|
oldHandlers = {};
|
|
|
|
_exts.forEach(function (ext) {
|
|
oldHandlers[ext] = require.extensions[ext];
|
|
registerExtension(ext);
|
|
});
|
|
}
|
|
|
|
hookExtensions(_babelCore.util.canCompile.EXTENSIONS);
|
|
|
|
module.exports = exports["default"]; |