Code coverage report for lib\dependencies\LabeledModuleDependencyParserPlugin.js

Statements: 86.44% (51 / 59)      Branches: 72% (18 / 25)      Functions: 83.33% (5 / 6)      Lines: 92.31% (48 / 52)      Ignored: none     

All files » lib\dependencies\ » LabeledModuleDependencyParserPlugin.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        1 1 1   1   13 13   13 13                   13 13 13 13 13 13       43   11 21 21 21 21 21 21   11   12 12 12 12 12 12 12   20 10 10 10 10 10 10 10 10 10 30 30 30 30 30 30 30   10            
/*
	MIT License http://www.opensource.org/licenses/mit-license.php
	Author Tobias Koppers @sokra
*/
var AbstractPlugin = require("../AbstractPlugin");
var LabeledModuleDependency = require("./LabeledModuleDependency");
var LabeledExportsDependency = require("./LabeledExportsDependency");
 
module.exports = AbstractPlugin.create({
	"label require": function(stmt) {
		Iif(stmt.body.type !== "ExpressionStatement") return;
		switch(stmt.body.expression.type) {
		case "Literal":
			var param = this.evaluateExpression(stmt.body.expression);
			return this.applyPluginsBailResult("label require:item", stmt, param);
		case "SequenceExpression":
			stmt.body.expression.expressions.forEach(function(expression) {
				var param = this.evaluateExpression(expression);
				return this.applyPluginsBailResult("label require:item", stmt, param);
			}, this);
			return true;
		}
	},
	"label require:item": function(stmt, param) {
		Eif(param.isString()) {
			var dep = new LabeledModuleDependency(param.string, stmt.range);
			dep.loc = stmt.loc;
			dep.optional = !!this.scope.inTry;
			this.state.current.addDependency(dep);
			return true;
		}
	},
	"label exports": function(stmt) {
		switch(stmt.body.type) {
		case "VariableDeclaration":
			stmt.body.declarations.forEach(function(decl) {
				Iif(!decl.init) return;
				var dep = new LabeledExportsDependency(decl.id.name, decl.init.range[0]);
				dep.loc = stmt.loc;
				this.state.current.addDependency(dep);
				if(!this.state.module.meta.exports) this.state.module.meta.exports = [];
				this.state.module.meta.exports.push(decl.id.name);
			}, this);
			return true;
		case "FunctionDeclaration":
			var name = stmt.body.id.name;
			var dep = new LabeledExportsDependency(name, stmt.body.range[0]);
			dep.loc = stmt.loc;
			this.state.current.addDependency(dep);
			if(!this.state.module.meta.exports) this.state.module.meta.exports = [];
			this.state.module.meta.exports.push(name);
			return true;
		case "ExpressionStatement":
			if(stmt.body.expression.type ===  "Identifier") {
				var name = stmt.body.expression.name;
				var dep = new LabeledExportsDependency(name, stmt.body.expression.range[0]);
				dep.loc = stmt.loc;
				this.state.current.addDependency(dep);
				Iif(!this.state.module.meta.exports) this.state.module.meta.exports = [];
				this.state.module.meta.exports.push(name);
				return true;
			} else Eif(stmt.body.expression.type === "SequenceExpression") {
				stmt.body.expression.expressions.forEach(function(e) {
					Iif(e.type !== "Identifier") return;
					var name = e.name;
					var dep = new LabeledExportsDependency(name, e.range[0]);
					dep.loc = stmt.loc;
					this.state.current.addDependency(dep);
					if(!this.state.module.meta.exports) this.state.module.meta.exports = [];
					this.state.module.meta.exports.push(name);
				}, this);
				return true;
			}
		};
	}
});