From 9d5113827f6e7df614ebc3339d858f92951cc968 Mon Sep 17 00:00:00 2001 From: Tobias Koppers Date: Sun, 10 May 2015 13:11:45 +0200 Subject: [PATCH] fixed #627 --- .../CommonJsRequireDependencyParserPlugin.js | 13 ++++++++++--- test/cases/parsing/issue-627/dir/test.js | 4 ++++ test/cases/parsing/issue-627/index.js | 3 +++ test/cases/parsing/issue-627/warnings.js | 3 +++ 4 files changed, 20 insertions(+), 3 deletions(-) create mode 100644 test/cases/parsing/issue-627/dir/test.js create mode 100644 test/cases/parsing/issue-627/index.js create mode 100644 test/cases/parsing/issue-627/warnings.js diff --git a/lib/dependencies/CommonJsRequireDependencyParserPlugin.js b/lib/dependencies/CommonJsRequireDependencyParserPlugin.js index bf9f4d6be..dc259adb0 100644 --- a/lib/dependencies/CommonJsRequireDependencyParserPlugin.js +++ b/lib/dependencies/CommonJsRequireDependencyParserPlugin.js @@ -37,15 +37,22 @@ CommonJsRequireDependencyParserPlugin.prototype.apply = function(parser) { var localModule; var param = this.evaluateExpression(expr.arguments[0]); if(param.isConditional()) { + var isExpression = false; + var prevLength = this.state.current.dependencies.length; this.state.current.addDependency(new RequireHeaderDependency(expr.callee.range)); param.options.forEach(function(param) { var result = this.applyPluginsBailResult("call require:commonjs:item", expr, param); if(result === undefined) { - throw new Error("Cannot convert options with mixed known and unknown stuff"); + isExpression = true; } }, this); - return true; - } else if(param.isString() && (localModule = LocalModulesHelpers.getLocalModule(this.state, param.string))) { + if(isExpression) { + this.state.current.dependencies.length = prevLength; + } else { + return true; + } + } + if(param.isString() && (localModule = LocalModulesHelpers.getLocalModule(this.state, param.string))) { var dep = new LocalModuleDependency(localModule, expr.range); dep.loc = expr.loc; this.state.current.addDependency(dep); diff --git a/test/cases/parsing/issue-627/dir/test.js b/test/cases/parsing/issue-627/dir/test.js new file mode 100644 index 000000000..a71df3536 --- /dev/null +++ b/test/cases/parsing/issue-627/dir/test.js @@ -0,0 +1,4 @@ +(function() { + var expr1 = "a", expr2 = "b"; + require(Math.random() < 0.5 ? expr1 : expr2); +}).should.throw(); diff --git a/test/cases/parsing/issue-627/index.js b/test/cases/parsing/issue-627/index.js new file mode 100644 index 000000000..7d33b8c38 --- /dev/null +++ b/test/cases/parsing/issue-627/index.js @@ -0,0 +1,3 @@ +it("should compile expr in ?: operator", function() { + require("./dir/test"); +}); diff --git a/test/cases/parsing/issue-627/warnings.js b/test/cases/parsing/issue-627/warnings.js new file mode 100644 index 000000000..3b6a13f5e --- /dev/null +++ b/test/cases/parsing/issue-627/warnings.js @@ -0,0 +1,3 @@ +module.exports = [ + [/Critical dependencies/] +];