diff --git a/lib/BasicEvaluatedExpression.js b/lib/BasicEvaluatedExpression.js index 0b82b15d5dc..defa4560539 100644 --- a/lib/BasicEvaluatedExpression.js +++ b/lib/BasicEvaluatedExpression.js @@ -55,6 +55,14 @@ class BasicEvaluatedExpression { return Object.prototype.hasOwnProperty.call(this, "quasis"); } + isTruthy() { + return this.truthy; + } + + isFalsy() { + return this.falsy; + } + asBool() { if(this.truthy) return true; else if(this.falsy) return false; diff --git a/lib/Parser.js b/lib/Parser.js index 1bfcc7c7ced..16592aefde1 100644 --- a/lib/Parser.js +++ b/lib/Parser.js @@ -242,6 +242,10 @@ class Parser extends Tapable { if(!argument) return; if(argument.isBoolean()) { return new BasicEvaluatedExpression().setBoolean(!argument.bool).setRange(expr.range); + } else if(argument.isTruthy()) { + return new BasicEvaluatedExpression().setBoolean(false).setRange(expr.range); + } else if(argument.isFalsy()) { + return new BasicEvaluatedExpression().setBoolean(true).setRange(expr.range); } else if(argument.isString()) { return new BasicEvaluatedExpression().setBoolean(!argument.string).setRange(expr.range); } else if(argument.isNumber()) { diff --git a/test/configCases/plugins/define-plugin/index.js b/test/configCases/plugins/define-plugin/index.js index bb86ef24852..1d78a3fa332 100644 --- a/test/configCases/plugins/define-plugin/index.js +++ b/test/configCases/plugins/define-plugin/index.js @@ -98,3 +98,11 @@ it("should not explode on recursive statements", function() { wurst; // <- is recursivly defined in config }).should.throw("suppe is not defined"); }); + +it("should evaluate composed expressions (issue 5100)", function() { + if(!module.hot && process.env.DEFINED_NESTED_KEY_STRING === "string") { + // ok + } else { + require("fail"); + } +})