UNPKG

proxyquire-webpack-alias

Version:
107 lines (88 loc) 2.9 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.Class = exports.configure = undefined; var _path = require('path'); var _proxyquire = require('proxyquire-2/lib/proxyquire'); var _proxyquire2 = _interopRequireDefault(_proxyquire); var _getResolver = require('./getResolver'); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var settings = void 0; function nameResolver(stubs, fileName, module) { var activeDir = module ? (0, _path.dirname)(module) : ''; var requireName = fileName; if (activeDir) { requireName = fileName.charAt(0) == '.' ? (0, _path.normalize)(activeDir + '/' + fileName) : fileName; } var tryPath = function tryPath(path) { if (stubs[path]) { return { key: path, stub: stubs[path] }; } }; return tryPath(requireName) || tryPath(fileName); } function transformStubs(stubs) { var result = {}; for (var i in stubs) { var stubName = (0, _getResolver.processFile)(i, settings); result[stubName || i] = stubs[i]; } return result; } function transformName(name, enabled) { return (enabled ? (0, _getResolver.processFile)(name, settings) : name) || name; } /** * @name WebpackAliasProxyquire * @class * @augments Proxyquire * @returns {*} * @constructor */ function WebpackAliasProxyquire() { var result = _proxyquire2.default.prototype.constructor.apply(this, arguments); result.resolveNames(nameResolver); this._aliasInFileName = true; return result; } /* inherit */ var F = function F() {}; F.prototype = _proxyquire2.default.prototype; WebpackAliasProxyquire.prototype = new F(); /* overload */ WebpackAliasProxyquire.prototype.load = function (request, stubs) { if (!settings) { configure(); } return _proxyquire2.default.prototype.load.call(this, transformName(request, this._aliasInFileName), transformStubs(stubs)); }; /** * Enable you to use alias in a file names, not only in stubs */ WebpackAliasProxyquire.prototype.withAliasInFileName = function () { this._aliasInFileName = true; return this; }; /** * Enable you to use alias in a file names, not only in stubs */ WebpackAliasProxyquire.prototype.noAliasInFileName = function () { this._aliasInFileName = false; return this; }; var configure = function configure(path) { settings = (0, _getResolver.readAlises)(path); }; // delete this module from the cache to force re-require in order to allow resolving test module via parent.module delete require.cache[require.resolve(__filename)]; exports.configure = configure; exports.Class = WebpackAliasProxyquire; /** * @type {WebpackAliasProxyquire} */ var proxyquireInstance = new WebpackAliasProxyquire(module.parent); exports.default = proxyquireInstance;