Skip to content

Commit f0c7815

Browse files
committed
evaluate typeof requrire.ensure/include
webpack#183
1 parent 3e9d981 commit f0c7815

File tree

3 files changed

+32
-0
lines changed

3 files changed

+32
-0
lines changed

lib/dependencies/RequireEnsurePlugin.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,14 @@
44
*/
55
var RequireEnsureItemDependency = require("./RequireEnsureItemDependency");
66
var RequireEnsureDependency = require("./RequireEnsureDependency");
7+
var ConstDependency = require("./ConstDependency");
78

89
var NullFactory = require("../NullFactory");
910

1011
var RequireEnsureDependenciesBlockParserPlugin = require("./RequireEnsureDependenciesBlockParserPlugin");
1112

13+
var BasicEvaluatedExpression = require("../BasicEvaluatedExpression");
14+
1215
function RequireEnsurePlugin() {
1316
}
1417
module.exports = RequireEnsurePlugin;
@@ -24,4 +27,13 @@ RequireEnsurePlugin.prototype.apply = function(compiler) {
2427
compilation.dependencyTemplates.set(RequireEnsureDependency, new RequireEnsureDependency.Template());
2528
});
2629
new RequireEnsureDependenciesBlockParserPlugin().apply(compiler.parser);
30+
compiler.parser.plugin("evaluate typeof require.ensure", function(expr) {
31+
return new BasicEvaluatedExpression().setString("function").setRange(expr.range);
32+
});
33+
compiler.parser.plugin("typeof require.ensure", function(expr) {
34+
var dep = new ConstDependency("'function'", expr.range);
35+
dep.loc = expr.loc;
36+
this.state.current.addDependency(dep);
37+
return true;
38+
});
2739
};

lib/dependencies/RequireIncludePlugin.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@
44
*/
55
var RequireIncludeDependency = require("./RequireIncludeDependency");
66
var RequireIncludeDependencyParserPlugin = require("./RequireIncludeDependencyParserPlugin");
7+
var ConstDependency = require("./ConstDependency");
8+
9+
var BasicEvaluatedExpression = require("../BasicEvaluatedExpression");
710

811
function RequireIncludePlugin() {
912
}
@@ -17,4 +20,13 @@ RequireIncludePlugin.prototype.apply = function(compiler) {
1720
compilation.dependencyTemplates.set(RequireIncludeDependency, new RequireIncludeDependency.Template());
1821
});
1922
new RequireIncludeDependencyParserPlugin().apply(compiler.parser);
23+
compiler.parser.plugin("evaluate typeof require.include", function(expr) {
24+
return new BasicEvaluatedExpression().setString("function").setRange(expr.range);
25+
});
26+
compiler.parser.plugin("typeof require.include", function(expr) {
27+
var dep = new ConstDependency("'function'", expr.range);
28+
dep.loc = expr.loc;
29+
this.state.current.addDependency(dep);
30+
return true;
31+
});
2032
};

test/cases/parsing/typeof/index.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,12 @@ it("should answer typeof module correctly", function() {
2020
it("should answer typeof exports correctly", function() {
2121
(typeof exports).should.be.eql("object");
2222
});
23+
it("should answer typeof require.include correctly", function() {
24+
(typeof require.include).should.be.eql("function");
25+
});
26+
it("should answer typeof require.ensure correctly", function() {
27+
(typeof require.ensure).should.be.eql("function");
28+
});
2329

2430

2531
it("should not parse filtered stuff", function() {
@@ -33,4 +39,6 @@ it("should not parse filtered stuff", function() {
3339
if(typeof module === "undefined") module = require("fail");
3440
if(typeof module != "object") module = require("fail");
3541
if(typeof exports == "undefined") exports = require("fail");
42+
if(typeof require.include !== "function") require.include("fail");
43+
if(typeof require.ensure !== "function") require.ensure(["fail"], function(){});
3644
});

0 commit comments

Comments
 (0)