File tree Expand file tree Collapse file tree 4 files changed +32
-3
lines changed
Expand file tree Collapse file tree 4 files changed +32
-3
lines changed Original file line number Diff line number Diff line change @@ -7,15 +7,15 @@ var ModuleParserHelpers = exports;
77ModuleParserHelpers . addParsedVariable = function ( parser , name , expression ) {
88 if ( ! parser . state . current . addVariable ) return false ;
99 var deps = [ ] ;
10- parser . parse ( expression , { current : {
10+ parser . parse ( expression , {
1111 current : {
1212 addDependency : function ( dep ) {
1313 dep . userRequest = name ;
1414 deps . push ( dep ) ;
1515 }
1616 } ,
17- module : this . state . module
18- } } ) ;
17+ module : parser . state . module
18+ } ) ;
1919 parser . state . current . addVariable ( name , expression , deps ) ;
2020 return true ;
2121} ;
Original file line number Diff line number Diff line change @@ -112,6 +112,16 @@ Parser.prototype.initializeEvaluating = function() {
112112 this . plugin ( "evaluate UnaryExpression" , function ( expr ) {
113113 if ( expr . operator == "typeof" && expr . argument . type == "Identifier" ) {
114114 return this . applyPluginsBailResult ( "evaluate typeof " + expr . argument . name , expr ) ;
115+ } else if ( expr . operator == "!" ) {
116+ var argument = this . evaluateExpression ( expr . argument ) ;
117+ if ( ! argument ) return ;
118+ if ( argument . isBoolean ( ) ) {
119+ return new BasicEvaluatedExpression ( ) . setBoolean ( ! argument . bool ) . setRange ( expr . range ) ;
120+ } else if ( argument . isString ( ) ) {
121+ return new BasicEvaluatedExpression ( ) . setBoolean ( ! argument . string ) . setRange ( expr . range ) ;
122+ } else if ( argument . isNumber ( ) ) {
123+ return new BasicEvaluatedExpression ( ) . setBoolean ( ! argument . number ) . setRange ( expr . range ) ;
124+ }
115125 }
116126 } ) ;
117127 this . plugin ( "evaluate Identifier" , function ( expr ) {
Original file line number Diff line number Diff line change @@ -38,6 +38,12 @@ CommonJsPlugin.prototype.apply = function(compiler) {
3838 compiler . parser . plugin ( "evaluate typeof require" , function ( expr ) {
3939 return new BasicEvaluatedExpression ( ) . setString ( "function" ) . setRange ( expr . range ) ;
4040 } ) ;
41+ compiler . parser . plugin ( "evaluate typeof module" , function ( expr ) {
42+ return new BasicEvaluatedExpression ( ) . setString ( "object" ) . setRange ( expr . range ) ;
43+ } ) ;
44+ compiler . parser . plugin ( "evaluate typeof exports" , function ( expr ) {
45+ return new BasicEvaluatedExpression ( ) . setString ( "object" ) . setRange ( expr . range ) ;
46+ } ) ;
4147 compiler . parser . apply (
4248 new CommonJsRequireDependencyParserPlugin ( ) ,
4349 new RequireResolveDependencyParserPlugin ( )
Original file line number Diff line number Diff line change @@ -207,6 +207,19 @@ describe("main", function() {
207207 it ( "should not create a context for typeof require" , function ( ) {
208208 require ( "../folder/typeof" ) . should . be . eql ( "function" ) ;
209209 } ) ;
210+
211+ it ( "should not parse filtered stuff" , function ( ) {
212+ if ( typeof require != "function" ) require ( "fail" ) ;
213+ if ( typeof require !== "function" ) require ( "fail" ) ;
214+ if ( ! ( typeof require == "function" ) ) require ( "fail" ) ;
215+ if ( ! ( typeof require === "function" ) ) require ( "fail" ) ;
216+ if ( typeof require == "undefined" ) require = require ( "fail" ) ;
217+ if ( typeof require === "undefined" ) require = require ( "fail" ) ;
218+ if ( typeof module == "undefined" ) module = require ( "fail" ) ;
219+ if ( typeof module === "undefined" ) module = require ( "fail" ) ;
220+ if ( typeof module != "object" ) module = require ( "fail" ) ;
221+ if ( typeof exports == "undefined" ) exports = require ( "fail" ) ;
222+ } ) ;
210223 } ) ;
211224
212225 describe ( "polyfilling" , function ( ) {
You can’t perform that action at this time.
0 commit comments