| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162 |
- 'use strict';
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- var _keys = require('babel-runtime/core-js/object/keys');
- var _keys2 = _interopRequireDefault(_keys);
- var _getIterator2 = require('babel-runtime/core-js/get-iterator');
- var _getIterator3 = _interopRequireDefault(_getIterator2);
- exports.default = registerRequireHook;
- var _module = require('module');
- var _module2 = _interopRequireDefault(_module);
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- // the module in which the require() call originated
- var requireCaller = void 0;
- // all custom registered resolvers
- /* eslint-disable no-underscore-dangle */
- // see https://github.com/nodejs/node/blob/master/lib/module.js
- // $FlowFixMe
- var pathResolvers = [];
- // keep original Module._resolveFilename
- var originalResolveFilename = _module2.default._resolveFilename;
- // override Module._resolveFilename
- _module2.default._resolveFilename = function _resolveFilename() {
- for (var _len = arguments.length, parameters = Array(_len), _key = 0; _key < _len; _key++) {
- parameters[_key] = arguments[_key];
- }
- var parent = parameters[1];
- // store require() caller (the module in which this require() call originated)
- requireCaller = parent;
- return originalResolveFilename.apply(this, parameters);
- };
- // keep original Module._findPath
- var originalFindPath = _module2.default._findPath;
- // override Module._findPath
- _module2.default._findPath = function _findPath() {
- for (var _len2 = arguments.length, parameters = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
- parameters[_key2] = arguments[_key2];
- }
- var request = parameters[0];
- // try to resolve the path with custom resolvers
- var _iteratorNormalCompletion = true;
- var _didIteratorError = false;
- var _iteratorError = undefined;
- try {
- for (var _iterator = (0, _getIterator3.default)(pathResolvers), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
- var resolve = _step.value;
- var resolved = resolve(request, requireCaller);
- if (typeof resolved !== 'undefined') {
- return resolved;
- }
- }
- // and when none found try to resolve path with original resolver
- } catch (err) {
- _didIteratorError = true;
- _iteratorError = err;
- } finally {
- try {
- if (!_iteratorNormalCompletion && _iterator.return) {
- _iterator.return();
- }
- } finally {
- if (_didIteratorError) {
- throw _iteratorError;
- }
- }
- }
- var filename = originalFindPath.apply(this, parameters);
- if (filename !== false) {
- return filename;
- }
- return false;
- };
- function registerRequireHook(dotExt, resolve) {
- // cache source code after resolving to avoid another access to the fs
- var sourceCache = {};
- // store all files that were affected by this hook
- var affectedFiles = {};
- var resolvePath = function resolvePath(path, parent) {
- // get CommonJS module source code for this require() call
- var _resolve = resolve(path, parent),
- resolvedPath = _resolve.path,
- source = _resolve.source;
- // if no CommonJS module source code returned - skip this require() hook
- if (resolvedPath == null) {
- return undefined;
- }
- // flush require() cache
- delete require.cache[resolvedPath];
- // put the CommonJS module source code into the hash
- sourceCache[resolvedPath] = source;
- // return the path to be require()d in order to get the CommonJS module source code
- return resolvedPath;
- };
- var resolveSource = function resolveSource(path) {
- var source = sourceCache[path];
- delete sourceCache[path];
- return source;
- };
- pathResolvers.push(resolvePath);
- // keep original extension loader
- var originalLoader = _module2.default._extensions[dotExt];
- // override extension loader
- _module2.default._extensions[dotExt] = function (module, filename) {
- var source = resolveSource(filename);
- if (typeof source === 'undefined') {
- // load the file with the original loader
- (originalLoader || _module2.default._extensions['.js'])(module, filename);
- return;
- }
- affectedFiles[filename] = true;
- // compile javascript module from its source
- module._compile(source, filename);
- };
- return function unmout() {
- pathResolvers = pathResolvers.filter(function (r) {
- return r !== resolvePath;
- });
- _module2.default._extensions[dotExt] = originalLoader;
- (0, _keys2.default)(affectedFiles).forEach(function (path) {
- delete require.cache[path];
- delete sourceCache[path];
- delete affectedFiles[path];
- });
- };
- }
|