proxyquire-webpack-alias
Version:
Proxyquire for ES5 modules
107 lines (88 loc) • 2.9 kB
JavaScript
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;
;