Code coverage report for lib\ContextModule.js

Statements: 89.33% (67 / 75)      Branches: 76.92% (20 / 26)      Functions: 86.67% (13 / 15)      Lines: 93.06% (67 / 72)      Ignored: none     

All files » lib\ » ContextModule.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123        1 1 1   1 260 260 260 260 260 260 260 260 260   1   1   1 2561 2561 2561 114 2561 412 2561 2561 2561     1 1510     1 1510 1510 1510 68 1510 217 1510 1510 1510     1           1         1 170 170 170 170 170 170 530 530   170 170       1 170 150 150 670 670   530 510   150                             20                 170 98   72       1 336 1044 1044  
/*
	MIT License http://www.opensource.org/licenses/mit-license.php
	Author Tobias Koppers @sokra
*/
var Module = require("./Module");
var OriginalSource = require("webpack-core/lib/OriginalSource");
var RawSource = require("webpack-core/lib/RawSource");
 
function ContextModule(resolveDependencies, context, recursive, regExp, addon) {
	Module.call(this);
	this.resolveDependencies = resolveDependencies;
	this.context = context;
	this.recursive = recursive;
	this.regExp = regExp;
	this.addon = addon;
	this.cacheable = true;
	this.contextDependencies = [context];
	this.built = false;
}
module.exports = ContextModule;
 
ContextModule.prototype = Object.create(Module.prototype);
 
ContextModule.prototype.identifier = function() {
	var identifier = "";
	identifier += this.context + " ";
	if(!this.recursive)
		identifier += "nonrecursive ";
	if(this.addon)
		identifier += this.addon;
	Eif(this.regExp)
		identifier += this.regExp;
	return identifier.replace(/ $/, "");
};
 
function prettyRegExp(str) {
	return str.substring(1, str.length - 1);
}
 
ContextModule.prototype.readableIdentifier = function(requestShortener) {
	var identifier = "";
	identifier += requestShortener.shorten(this.context) + " ";
	if(!this.recursive)
		identifier += "nonrecursive ";
	if(this.addon)
		identifier += requestShortener.shorten(this.addon);
	Eif(this.regExp)
		identifier += prettyRegExp(this.regExp + "");
	return identifier.replace(/ $/, "");
};
 
ContextModule.prototype.needRebuild = function(fileTimestamps, contextTimestamps) {
	var ts = contextTimestamps[this.context];
	if(!ts) return true;
	return ts >= this.builtTime;
};
 
ContextModule.prototype.disconnect = function disconnect() {
	this.built = false;
	Module.prototype.disconnect.call(this);
};
 
ContextModule.prototype.build = function(options, compilation, resolver, fs, callback) {
	this.built = true;
	this.builtTime = new Date().getTime();
	var addon = this.addon;
	this.resolveDependencies(fs, this.context, this.recursive, this.regExp, function(err, dependencies) {
		Iif(err) return callback(err);
		dependencies.forEach(function(dep) {
			dep.userRequest = dep.request;
			dep.request = addon + dep.userRequest;
		});
		this.dependencies = dependencies;
		callback();
	}.bind(this));
};
 
ContextModule.prototype.source = function(dependencyTemplates, outputOptions, requestShortener) {
	if(this.dependencies.length > 0) {
		var map = {};
		this.dependencies.slice().sort(function(a,b) {
			Iif(a.userRequest === b.userRequest) return 0;
			return a.userRequest < b.userRequest ? -1 : 1;
		}).forEach(function(dep) {
			if(dep.module)
				map[dep.userRequest] = dep.module.id
		});
		var str = [
			"var map = ", JSON.stringify(map, null, "\t"), ";\n",
			"function webpackContext(req) {\n",
			"\treturn __webpack_require__(webpackContextResolve(req));\n",
			"};\n",
			"function webpackContextResolve(req) {\n",
			"\treturn map[req] || (function() { throw new Error(\"Cannot find module '\" + req + \"'.\") }());\n",
			"};\n",
			"webpackContext.keys = function webpackContextKeys() {\n",
			"\treturn Object.keys(map);\n",
			"};\n",
			"webpackContext.resolve = webpackContextResolve;\n",
			"module.exports = webpackContext;\n",
		];
	} else {
		var str = [
			"function webpackContext(req) {\n",
			"\tthrow new Error(\"Cannot find module '\" + req + \"'.\");\n",
			"}\n",
			"webpackContext.resolve = webpackContext;\n",
			"webpackContext.keys = function() { return []; };\n",
			"module.exports = webpackContext;\n"
		];
	}
	if(this.useSourceMap) {
		return new OriginalSource(str.join(""), this.identifier());
	} else {
		return new RawSource(str.join(""));
	}
};
 
ContextModule.prototype.size = function() {
	return this.dependencies.map(function(dep) {
		return dep.userRequest.length + 5;
	}).reduce(function(a, b) { return a+b; }, 160);
};