/* */ "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"];