79 lines
2.8 KiB
JavaScript
79 lines
2.8 KiB
JavaScript
/*
|
|
MIT License http://www.opensource.org/licenses/mit-license.php
|
|
Author Tobias Koppers @sokra
|
|
*/
|
|
var AbstractPlugin = require("../AbstractPlugin");
|
|
var ConstDependency = require("./ConstDependency");
|
|
var LabeledModuleDependency = require("./LabeledModuleDependency");
|
|
var LabeledExportsDependency = require("./LabeledExportsDependency");
|
|
|
|
module.exports = AbstractPlugin.create({
|
|
"label require": function(stmt) {
|
|
if(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.expressions.forEach(function(expression) {
|
|
var param = this.evaluateExpression(stmt.body.expression);
|
|
return this.applyPluginsBailResult("label require:item", stmt, param);
|
|
}, this);
|
|
return true;
|
|
}
|
|
},
|
|
"label require:item": function(stmt, param) {
|
|
if(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) {
|
|
if(!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);
|
|
if(!this.state.module.meta.exports) this.state.module.meta.exports = [];
|
|
this.state.module.meta.exports.push(name);
|
|
return true;
|
|
} else if(stmt.body.expression.type == "SequenceExpression") {
|
|
stmt.body.expression.expressions.forEach(function(e) {
|
|
if(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;
|
|
}
|
|
};
|
|
}
|
|
});
|
|
|