2015-01-13 00:45:30 +08:00
|
|
|
/*
|
|
|
|
MIT License http://www.opensource.org/licenses/mit-license.php
|
|
|
|
Author Tobias Koppers @sokra
|
|
|
|
*/
|
|
|
|
var AbstractPlugin = require("../AbstractPlugin");
|
|
|
|
var HarmonyImportDependency = require("./HarmonyImportDependency");
|
|
|
|
var HarmonyImportSpecifierDependency = require("./HarmonyImportSpecifierDependency");
|
2015-11-02 06:27:53 +08:00
|
|
|
var HarmonyAcceptImportDependency = require("./HarmonyAcceptImportDependency");
|
|
|
|
var HarmonyAcceptDependency = require("./HarmonyAcceptDependency");
|
2015-01-13 00:45:30 +08:00
|
|
|
var HarmonyModulesHelpers = require("./HarmonyModulesHelpers");
|
|
|
|
|
|
|
|
module.exports = AbstractPlugin.create({
|
|
|
|
"import": function(statement, source) {
|
|
|
|
var dep = new HarmonyImportDependency(source, HarmonyModulesHelpers.getNewModuleVar(this.state, source), statement.range);
|
|
|
|
dep.loc = statement.loc;
|
|
|
|
this.state.current.addDependency(dep);
|
2015-10-22 03:05:01 +08:00
|
|
|
this.state.lastHarmonyImport = dep;
|
2016-05-06 16:44:31 +08:00
|
|
|
this.state.module.strict = true;
|
2015-01-13 00:45:30 +08:00
|
|
|
return true;
|
|
|
|
},
|
|
|
|
"import specifier": function(statement, source, id, name) {
|
|
|
|
this.scope.definitions.length--;
|
2015-04-28 02:22:13 +08:00
|
|
|
this.scope.renames["$" + name] = "imported var";
|
2015-01-13 00:45:30 +08:00
|
|
|
if(!this.state.harmonySpecifier) this.state.harmonySpecifier = {};
|
2015-10-22 03:05:01 +08:00
|
|
|
this.state.harmonySpecifier["$" + name] = [this.state.lastHarmonyImport, HarmonyModulesHelpers.getModuleVar(this.state, source), id];
|
2015-01-13 00:45:30 +08:00
|
|
|
return true;
|
|
|
|
},
|
|
|
|
"expression imported var": function(expr) {
|
|
|
|
var name = expr.name;
|
2015-04-28 02:22:13 +08:00
|
|
|
var settings = this.state.harmonySpecifier["$" + name];
|
2015-10-22 03:05:01 +08:00
|
|
|
var dep = new HarmonyImportSpecifierDependency(settings[0], settings[1], settings[2], name, expr.range);
|
2016-06-04 21:22:47 +08:00
|
|
|
dep.shorthand = this.scope.inShorthand;
|
2015-01-13 00:45:30 +08:00
|
|
|
dep.loc = expr.loc;
|
|
|
|
this.state.current.addDependency(dep);
|
|
|
|
return true;
|
2015-11-02 06:27:53 +08:00
|
|
|
},
|
2016-02-13 17:00:47 +08:00
|
|
|
"call imported var": function(expr) {
|
2016-02-22 22:18:13 +08:00
|
|
|
var args = expr.arguments;
|
2016-05-14 20:33:04 +08:00
|
|
|
var fullExpr = expr;
|
2016-02-13 17:00:47 +08:00
|
|
|
expr = expr.callee;
|
|
|
|
var name = expr.name;
|
|
|
|
var settings = this.state.harmonySpecifier["$" + name];
|
|
|
|
var dep = new HarmonyImportSpecifierDependency(settings[0], settings[1], settings[2], name, expr.range);
|
2016-05-14 20:33:04 +08:00
|
|
|
dep.callArgs = args;
|
|
|
|
dep.call = fullExpr;
|
2016-02-13 17:00:47 +08:00
|
|
|
dep.loc = expr.loc;
|
|
|
|
this.state.current.addDependency(dep);
|
2016-02-22 22:18:13 +08:00
|
|
|
if(args)
|
|
|
|
this.walkExpressions(args);
|
2016-02-13 17:00:47 +08:00
|
|
|
return true;
|
|
|
|
},
|
2015-11-02 06:27:53 +08:00
|
|
|
"hot accept callback": function(expr, requests) {
|
|
|
|
var dependencies = requests.filter(function(request) {
|
|
|
|
return HarmonyModulesHelpers.checkModuleVar(this.state, request);
|
|
|
|
}, this).map(function(request) {
|
|
|
|
var dep = new HarmonyAcceptImportDependency(request, HarmonyModulesHelpers.getModuleVar(this.state, request), expr.range);
|
|
|
|
dep.loc = expr.loc;
|
|
|
|
this.state.current.addDependency(dep);
|
|
|
|
return dep;
|
|
|
|
}, this);
|
|
|
|
if(dependencies.length > 0) {
|
|
|
|
var dep = new HarmonyAcceptDependency(expr.range, dependencies);
|
|
|
|
dep.loc = expr.loc;
|
|
|
|
this.state.current.addDependency(dep);
|
|
|
|
}
|
2015-01-13 00:45:30 +08:00
|
|
|
}
|
|
|
|
});
|