added __resourceQuery, __dir/__filename compile time constant
This commit is contained in:
parent
a0680280f3
commit
2183f05db8
|
@ -3,6 +3,7 @@
|
|||
Author Tobias Koppers @sokra
|
||||
*/
|
||||
var ConstDependency = require("./dependencies/ConstDependency");
|
||||
var BasicEvaluatedExpression = require("./BasicEvaluatedExpression");
|
||||
|
||||
var NullFactory = require("./NullFactory");
|
||||
|
||||
|
@ -22,4 +23,16 @@ ConstPlugin.prototype.apply = function(compiler) {
|
|||
return param.bool;
|
||||
}
|
||||
});
|
||||
compiler.parser.plugin("evaluate Identifier __resourceQuery", function(expr) {
|
||||
if(!this.state.module) return;
|
||||
var res = new BasicEvaluatedExpression();
|
||||
res.setString(this.state.module.splitQuery(this.state.module.resource)[1]);
|
||||
res.setRange(expr.range);
|
||||
return res;
|
||||
});
|
||||
compiler.parser.plugin("expression __resourceQuery", function(expr) {
|
||||
if(!this.state.module) return;
|
||||
this.state.current.addDependency(new ConstDependency(JSON.stringify(this.state.module.splitQuery(this.state.module.resource)[1]), expr.range));
|
||||
return true;
|
||||
});
|
||||
};
|
|
@ -10,6 +10,8 @@ function ModuleParseError(module, source, err) {
|
|||
if(typeof err.lineNumber === "number") {
|
||||
source = source.split("\n");
|
||||
this.message += "\n" + source.slice(err.lineNumber - 2, 5).join("\n");
|
||||
} else {
|
||||
this.message += "\n" + err.stack;
|
||||
}
|
||||
this.module = module;
|
||||
this.error = err;
|
||||
|
|
|
@ -6,6 +6,7 @@ var path = require("path");
|
|||
var ModuleAliasPlugin = require("enhanced-resolve/lib/ModuleAliasPlugin");
|
||||
var ModuleParserHelpers = require("./ModuleParserHelpers");
|
||||
var ConstDependency = require("./dependencies/ConstDependency");
|
||||
var BasicEvaluatedExpression = require("./BasicEvaluatedExpression");
|
||||
|
||||
function NodeStuffPlugin() {
|
||||
}
|
||||
|
@ -16,10 +17,24 @@ NodeStuffPlugin.prototype.apply = function(compiler) {
|
|||
this.state.current.addVariable("__filename", JSON.stringify("/index.js"));
|
||||
return true;
|
||||
});
|
||||
compiler.parser.plugin("evaluate Identifier __filename", function(expr) {
|
||||
if(!this.state.module) return;
|
||||
var res = new BasicEvaluatedExpression();
|
||||
res.setString(this.state.module.splitQuery(this.state.module.resource)[0]);
|
||||
res.setRange(expr.range);
|
||||
return res;
|
||||
});
|
||||
compiler.parser.plugin("expression __dirname", function(expr) {
|
||||
this.state.current.addVariable("__dirname", JSON.stringify("/"));
|
||||
return true;
|
||||
});
|
||||
compiler.parser.plugin("evaluate Identifier __dirname", function(expr) {
|
||||
if(!this.state.module) return;
|
||||
var res = new BasicEvaluatedExpression();
|
||||
res.setString(this.state.module.context);
|
||||
res.setRange(expr.range);
|
||||
return res;
|
||||
});
|
||||
compiler.parser.plugin("expression require.main", function(expr) {
|
||||
var dep = new ConstDependency("require.cache[0]", expr.range);
|
||||
dep.loc = expr.loc;
|
||||
|
|
|
@ -127,6 +127,55 @@ Parser.prototype.initializeEvaluating = function() {
|
|||
this.plugin("evaluate Identifier", function(expr) {
|
||||
return this.applyPluginsBailResult("evaluate Identifier " + expr.name, expr);
|
||||
});
|
||||
this.plugin("evaluate CallExpression", function(expr) {
|
||||
if(expr.callee.type != "MemberExpression") return;
|
||||
if(expr.callee.property.type != "Identifier") return;
|
||||
var param = this.evaluateExpression(expr.callee.object);
|
||||
if(!param) return;
|
||||
return this.applyPluginsBailResult("evaluate CallExpression ." + expr.callee.property.name, expr, param);
|
||||
});
|
||||
this.plugin("evaluate CallExpression .substr", function(expr, param) {
|
||||
if(!param.isString()) return;
|
||||
var result, str = param.string;
|
||||
switch(expr.arguments.length) {
|
||||
case 1:
|
||||
var arg1 = this.evaluateExpression(expr.arguments[0]);
|
||||
if(!arg1.isNumber()) return;
|
||||
result = str.substr(arg1.number);
|
||||
break;
|
||||
case 2:
|
||||
var arg1 = this.evaluateExpression(expr.arguments[0]);
|
||||
var arg2 = this.evaluateExpression(expr.arguments[0]);
|
||||
if(!arg1.isNumber()) return;
|
||||
if(!arg2.isNumber()) return;
|
||||
result = str.substr(arg1.number, arg2.number);
|
||||
break;
|
||||
default:
|
||||
return;
|
||||
}
|
||||
return new BasicEvaluatedExpression().setString(result).setRange(expr.range);
|
||||
});
|
||||
this.plugin("evaluate CallExpression .substring", function(expr, param) {
|
||||
if(!param.isString()) return;
|
||||
var result, str = param.string;
|
||||
switch(expr.arguments.length) {
|
||||
case 1:
|
||||
var arg1 = this.evaluateExpression(expr.arguments[0]);
|
||||
if(!arg1.isNumber()) return;
|
||||
result = str.substring(arg1.number);
|
||||
break;
|
||||
case 2:
|
||||
var arg1 = this.evaluateExpression(expr.arguments[0]);
|
||||
var arg2 = this.evaluateExpression(expr.arguments[1]);
|
||||
if(!arg1.isNumber()) return;
|
||||
if(!arg2.isNumber()) return;
|
||||
result = str.substring(arg1.number, arg2.number);
|
||||
break;
|
||||
default:
|
||||
return;
|
||||
}
|
||||
return new BasicEvaluatedExpression().setString(result).setRange(expr.range);
|
||||
});
|
||||
this.plugin("evaluate ConditionalExpression", function(expr) {
|
||||
var consequent = this.evaluateExpression(expr.consequent);
|
||||
var alternate = this.evaluateExpression(expr.alternate);
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "webpack",
|
||||
"version": "0.9.0-beta22",
|
||||
"version": "0.9.0-beta23",
|
||||
"author": "Tobias Koppers @sokra",
|
||||
"description": "Packs CommonJs/AMD Modules for the browser. Allows to split your codebase into multiple bundles, which can be loaded on demand. Support loaders to preprocess files, i.e. json, jade, coffee, css, less, ... and your custom stuff.",
|
||||
"dependencies": {
|
||||
|
|
|
@ -416,6 +416,11 @@ describe("main", function() {
|
|||
prev: "test content"
|
||||
});
|
||||
});
|
||||
|
||||
it("should evaluate __dirname and __resourceQuery", function() {
|
||||
var result = require("../resourceQuery/index?" + __dirname);
|
||||
result.should.be.eql("?resourceQuery");
|
||||
});
|
||||
});
|
||||
|
||||
describe("AMD", function() {
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
module.exports = require(__resourceQuery.substr(1) + "/../resourceQuery/returnRQ?resourceQuery");
|
|
@ -0,0 +1 @@
|
|||
module.exports = __resourceQuery;
|
Loading…
Reference in New Issue