273 lines
6.3 KiB
JavaScript
273 lines
6.3 KiB
JavaScript
/* */
|
|
"format cjs";
|
|
"use strict";
|
|
|
|
var _toolsProtectJs2 = require("./../../tools/protect.js");
|
|
|
|
var _toolsProtectJs3 = _interopRequireDefault(_toolsProtectJs2);
|
|
|
|
exports.__esModule = true;
|
|
|
|
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; } }
|
|
|
|
var _sourceMapSupport = require("source-map-support");
|
|
|
|
var _sourceMapSupport2 = _interopRequireDefault(_sourceMapSupport);
|
|
|
|
var _cache = require("./cache");
|
|
|
|
var registerCache = _interopRequireWildcard(_cache);
|
|
|
|
var _transformationFileOptionsOptionManager = require("../../transformation/file/options/option-manager");
|
|
|
|
var _transformationFileOptionsOptionManager2 = _interopRequireDefault(_transformationFileOptionsOptionManager);
|
|
|
|
var _lodashObjectExtend = require("lodash/object/extend");
|
|
|
|
var _lodashObjectExtend2 = _interopRequireDefault(_lodashObjectExtend);
|
|
|
|
var _node = require("../node");
|
|
|
|
var babel = _interopRequireWildcard(_node);
|
|
|
|
var _lodashCollectionEach = require("lodash/collection/each");
|
|
|
|
var _lodashCollectionEach2 = _interopRequireDefault(_lodashCollectionEach);
|
|
|
|
var _util = require("../../util");
|
|
|
|
var util = _interopRequireWildcard(_util);
|
|
|
|
var _fs = require("fs");
|
|
|
|
var _fs2 = _interopRequireDefault(_fs);
|
|
|
|
var _path = require("path");
|
|
|
|
var _path2 = _interopRequireDefault(_path);
|
|
|
|
_toolsProtectJs3["default"](module);
|
|
|
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
|
|
|
/**
|
|
* Install sourcemaps into node.
|
|
*/
|
|
|
|
_sourceMapSupport2["default"].install({
|
|
handleUncaughtExceptions: false,
|
|
retrieveSourceMap: function retrieveSourceMap(source) {
|
|
var map = maps && maps[source];
|
|
if (map) {
|
|
return {
|
|
url: null,
|
|
map: map
|
|
};
|
|
} else {
|
|
return null;
|
|
}
|
|
}
|
|
});
|
|
|
|
/**
|
|
* Load and setup cache.
|
|
*/
|
|
|
|
registerCache.load();
|
|
var cache = registerCache.get();
|
|
|
|
/**
|
|
* Store options.
|
|
*/
|
|
|
|
var transformOpts = {};
|
|
|
|
var ignore;
|
|
var only;
|
|
|
|
var oldHandlers = {};
|
|
var maps = {};
|
|
|
|
var cwd = process.cwd();
|
|
|
|
/**
|
|
* Get path from `filename` relative to the current working directory.
|
|
*/
|
|
|
|
var getRelativePath = function getRelativePath(filename) {
|
|
return _path2["default"].relative(cwd, filename);
|
|
};
|
|
|
|
/**
|
|
* Get last modified time for a `filename`.
|
|
*/
|
|
|
|
var mtime = function mtime(filename) {
|
|
return +_fs2["default"].statSync(filename).mtime;
|
|
};
|
|
|
|
/**
|
|
* Compile a `filename` with optional `opts`.
|
|
*/
|
|
|
|
var compile = function compile(filename) {
|
|
var opts = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];
|
|
|
|
var result;
|
|
|
|
var optsManager = new _transformationFileOptionsOptionManager2["default"]();
|
|
optsManager.mergeOptions(transformOpts);
|
|
opts = optsManager.init(opts);
|
|
|
|
var cacheKey = filename + ":" + JSON.stringify(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, _lodashObjectExtend2["default"](opts, {
|
|
sourceMap: "both",
|
|
ast: false
|
|
}));
|
|
}
|
|
|
|
if (cache) {
|
|
result.mtime = mtime(filename);
|
|
cache[cacheKey] = result;
|
|
}
|
|
|
|
maps[filename] = result.map;
|
|
|
|
return result.code;
|
|
};
|
|
|
|
/**
|
|
* Test if a `filename` should be ignored by Babel.
|
|
*/
|
|
|
|
var shouldIgnore = function shouldIgnore(filename) {
|
|
if (!ignore && !only) {
|
|
return getRelativePath(filename).split(_path2["default"].sep).indexOf("node_modules") >= 0;
|
|
} else {
|
|
return util.shouldIgnore(filename, ignore || [], only);
|
|
}
|
|
};
|
|
|
|
/**
|
|
* Monkey patch istanbul if it is running so that it works properly.
|
|
*/
|
|
|
|
var istanbulMonkey = {};
|
|
|
|
if (process.env.running_under_istanbul) {
|
|
// we need to monkey patch fs.readFileSync so we can hook into
|
|
// what istanbul gets, it's extremely dirty but it's the only way
|
|
var _readFileSync = _fs2["default"].readFileSync;
|
|
|
|
_fs2["default"].readFileSync = function (filename) {
|
|
if (istanbulMonkey[filename]) {
|
|
delete istanbulMonkey[filename];
|
|
var code = compile(filename, {
|
|
auxiliaryCommentBefore: "istanbul ignore next"
|
|
});
|
|
istanbulMonkey[filename] = true;
|
|
return code;
|
|
} else {
|
|
return _readFileSync.apply(this, arguments);
|
|
}
|
|
};
|
|
}
|
|
|
|
/**
|
|
* Replacement for the loader for istanbul.
|
|
*/
|
|
|
|
var istanbulLoader = function istanbulLoader(m, filename, old) {
|
|
istanbulMonkey[filename] = true;
|
|
old(m, filename);
|
|
};
|
|
|
|
/**
|
|
* Default loader.
|
|
*/
|
|
|
|
var normalLoader = function normalLoader(m, filename) {
|
|
m._compile(compile(filename), filename);
|
|
};
|
|
|
|
/**
|
|
* Register a loader for an extension.
|
|
*/
|
|
|
|
var registerExtension = function registerExtension(ext) {
|
|
var old = oldHandlers[ext] || oldHandlers[".js"] || require.extensions[".js"];
|
|
|
|
var loader = normalLoader;
|
|
if (process.env.running_under_istanbul) loader = istanbulLoader;
|
|
|
|
require.extensions[ext] = function (m, filename) {
|
|
if (shouldIgnore(filename)) {
|
|
old(m, filename);
|
|
} else {
|
|
loader(m, filename, old);
|
|
}
|
|
};
|
|
};
|
|
|
|
/**
|
|
* Register loader for given extensions.
|
|
*/
|
|
|
|
var hookExtensions = function hookExtensions(_exts) {
|
|
_lodashCollectionEach2["default"](oldHandlers, function (old, ext) {
|
|
if (old === undefined) {
|
|
delete require.extensions[ext];
|
|
} else {
|
|
require.extensions[ext] = old;
|
|
}
|
|
});
|
|
|
|
oldHandlers = {};
|
|
|
|
_lodashCollectionEach2["default"](_exts, function (ext) {
|
|
oldHandlers[ext] = require.extensions[ext];
|
|
registerExtension(ext);
|
|
});
|
|
};
|
|
|
|
/**
|
|
* Register loader for default extensions.
|
|
*/
|
|
|
|
hookExtensions(util.canCompile.EXTENSIONS);
|
|
|
|
/**
|
|
* Update options at runtime.
|
|
*/
|
|
|
|
exports["default"] = function () {
|
|
var opts = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];
|
|
|
|
if (opts.only != null) only = util.arrayify(opts.only, util.regexify);
|
|
if (opts.ignore != null) ignore = util.arrayify(opts.ignore, util.regexify);
|
|
|
|
if (opts.extensions) hookExtensions(util.arrayify(opts.extensions));
|
|
|
|
if (opts.cache === false) cache = null;
|
|
|
|
delete opts.extensions;
|
|
delete opts.ignore;
|
|
delete opts.cache;
|
|
delete opts.only;
|
|
|
|
_lodashObjectExtend2["default"](transformOpts, opts);
|
|
};
|
|
|
|
module.exports = exports["default"]; |