7c9d9480d9f028d36ed6b095c2a7bfede0a6dbce29c5ae8f76f78816f6e03c45f2f963777d0e0de47c94b8003030ade9001b1f5cd5803de1bba6828bd295bf 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  1. "use strict";
  2. exports.__esModule = true;
  3. var _keys = require("babel-runtime/core-js/object/keys");
  4. var _keys2 = _interopRequireDefault(_keys);
  5. var _stringify = require("babel-runtime/core-js/json/stringify");
  6. var _stringify2 = _interopRequireDefault(_stringify);
  7. exports.default = function () {
  8. var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
  9. if (opts.only != null) only = _babelCore.util.arrayify(opts.only, _babelCore.util.regexify);
  10. if (opts.ignore != null) ignore = _babelCore.util.arrayify(opts.ignore, _babelCore.util.regexify);
  11. if (opts.extensions) hookExtensions(_babelCore.util.arrayify(opts.extensions));
  12. if (opts.cache === false) cache = null;
  13. delete opts.extensions;
  14. delete opts.ignore;
  15. delete opts.cache;
  16. delete opts.only;
  17. (0, _extend2.default)(transformOpts, opts);
  18. };
  19. var _cloneDeep = require("lodash/cloneDeep");
  20. var _cloneDeep2 = _interopRequireDefault(_cloneDeep);
  21. var _sourceMapSupport = require("source-map-support");
  22. var _sourceMapSupport2 = _interopRequireDefault(_sourceMapSupport);
  23. var _cache = require("./cache");
  24. var registerCache = _interopRequireWildcard(_cache);
  25. var _extend = require("lodash/extend");
  26. var _extend2 = _interopRequireDefault(_extend);
  27. var _babelCore = require("babel-core");
  28. var babel = _interopRequireWildcard(_babelCore);
  29. var _fs = require("fs");
  30. var _fs2 = _interopRequireDefault(_fs);
  31. var _path = require("path");
  32. var _path2 = _interopRequireDefault(_path);
  33. 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; } }
  34. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  35. _sourceMapSupport2.default.install({
  36. handleUncaughtExceptions: false,
  37. environment: "node",
  38. retrieveSourceMap: function retrieveSourceMap(source) {
  39. var map = maps && maps[source];
  40. if (map) {
  41. return {
  42. url: null,
  43. map: map
  44. };
  45. } else {
  46. return null;
  47. }
  48. }
  49. });
  50. registerCache.load();
  51. var cache = registerCache.get();
  52. var transformOpts = {};
  53. var ignore = void 0;
  54. var only = void 0;
  55. var oldHandlers = {};
  56. var maps = {};
  57. var cwd = process.cwd();
  58. function getRelativePath(filename) {
  59. return _path2.default.relative(cwd, filename);
  60. }
  61. function mtime(filename) {
  62. return +_fs2.default.statSync(filename).mtime;
  63. }
  64. function compile(filename) {
  65. var result = void 0;
  66. var opts = new _babelCore.OptionManager().init((0, _extend2.default)({ sourceRoot: _path2.default.dirname(filename) }, (0, _cloneDeep2.default)(transformOpts), { filename: filename }));
  67. var cacheKey = (0, _stringify2.default)(opts) + ":" + babel.version;
  68. var env = process.env.BABEL_ENV || process.env.NODE_ENV;
  69. if (env) cacheKey += ":" + env;
  70. if (cache) {
  71. var cached = cache[cacheKey];
  72. if (cached && cached.mtime === mtime(filename)) {
  73. result = cached;
  74. }
  75. }
  76. if (!result) {
  77. result = babel.transformFileSync(filename, (0, _extend2.default)(opts, {
  78. babelrc: false,
  79. sourceMaps: "both",
  80. ast: false
  81. }));
  82. }
  83. if (cache) {
  84. cache[cacheKey] = result;
  85. result.mtime = mtime(filename);
  86. }
  87. maps[filename] = result.map;
  88. return result.code;
  89. }
  90. function shouldIgnore(filename) {
  91. if (!ignore && !only) {
  92. return getRelativePath(filename).split(_path2.default.sep).indexOf("node_modules") >= 0;
  93. } else {
  94. return _babelCore.util.shouldIgnore(filename, ignore || [], only);
  95. }
  96. }
  97. function loader(m, filename) {
  98. m._compile(compile(filename), filename);
  99. }
  100. function registerExtension(ext) {
  101. var old = oldHandlers[ext] || oldHandlers[".js"] || require.extensions[".js"];
  102. require.extensions[ext] = function (m, filename) {
  103. if (shouldIgnore(filename)) {
  104. old(m, filename);
  105. } else {
  106. loader(m, filename, old);
  107. }
  108. };
  109. }
  110. function hookExtensions(_exts) {
  111. (0, _keys2.default)(oldHandlers).forEach(function (ext) {
  112. var old = oldHandlers[ext];
  113. if (old === undefined) {
  114. delete require.extensions[ext];
  115. } else {
  116. require.extensions[ext] = old;
  117. }
  118. });
  119. oldHandlers = {};
  120. _exts.forEach(function (ext) {
  121. oldHandlers[ext] = require.extensions[ext];
  122. registerExtension(ext);
  123. });
  124. }
  125. hookExtensions(_babelCore.util.canCompile.EXTENSIONS);
  126. module.exports = exports["default"];