diff --git a/lib/dependencies/AMDRequireContextDependency.js b/lib/dependencies/AMDRequireContextDependency.js index cf7254968..dfe4c8f82 100644 --- a/lib/dependencies/AMDRequireContextDependency.js +++ b/lib/dependencies/AMDRequireContextDependency.js @@ -5,7 +5,6 @@ "use strict"; const ContextDependency = require("./ContextDependency"); -const CriticalDependencyWarning = require("./CriticalDependencyWarning"); class AMDRequireContextDependency extends ContextDependency { constructor(request, recursive, regExp, range, valueRange) { super(request, recursive, regExp); @@ -16,14 +15,6 @@ class AMDRequireContextDependency extends ContextDependency { get type() { return "amd require context"; } - - getWarnings() { - if(this.critical) { - return [ - new CriticalDependencyWarning(this.critical) - ]; - } - } } AMDRequireContextDependency.Template = require("./ContextDependencyTemplateAsRequireCall"); module.exports = AMDRequireContextDependency; diff --git a/lib/dependencies/CommonJsRequireContextDependency.js b/lib/dependencies/CommonJsRequireContextDependency.js index 338cbf049..40e8c06fc 100644 --- a/lib/dependencies/CommonJsRequireContextDependency.js +++ b/lib/dependencies/CommonJsRequireContextDependency.js @@ -4,7 +4,6 @@ */ "use strict"; const ContextDependency = require("./ContextDependency"); -const CriticalDependencyWarning = require("./CriticalDependencyWarning"); const ContextDependencyTemplateAsRequireCall = require("./ContextDependencyTemplateAsRequireCall"); class CommonJsRequireContextDependency extends ContextDependency { @@ -18,15 +17,6 @@ class CommonJsRequireContextDependency extends ContextDependency { return "cjs require context"; } - getWarnings() { - if(!this.critical) { - return; - } - - return [ - new CriticalDependencyWarning(this.critical) - ]; - } } CommonJsRequireContextDependency.Template = ContextDependencyTemplateAsRequireCall; diff --git a/lib/dependencies/ContextDependency.js b/lib/dependencies/ContextDependency.js index ff90d92a4..21fad952f 100644 --- a/lib/dependencies/ContextDependency.js +++ b/lib/dependencies/ContextDependency.js @@ -4,6 +4,7 @@ */ "use strict"; const Dependency = require("../Dependency"); +const CriticalDependencyWarning = require("./CriticalDependencyWarning"); class ContextDependency extends Dependency { constructor(request, recursive, regExp) { @@ -13,6 +14,13 @@ class ContextDependency extends Dependency { this.recursive = recursive; this.regExp = regExp; this.async = false; + + this.hadGlobalOrStickyRegExp = false; + if(this.regExp.global || this.regExp.sticky) { + this.regExp = null; + this.hadGlobalOrStickyRegExp = true; + } + } isEqualResource(other) { @@ -24,6 +32,18 @@ class ContextDependency extends Dependency { this.regExp === other.regExp && this.async === other.async; } + + getWarnings() { + let warnings = super.getWarnings() || []; + if(this.critical) { + warnings.push(new CriticalDependencyWarning(this.critical)); + } + if(this.hadGlobalOrStickyRegExp) { + warnings.push(new CriticalDependencyWarning("Contexts can't use RegExps with the 'g' or 'y' flags.")); + } + return warnings; + } + } module.exports = ContextDependency; diff --git a/lib/dependencies/ImportContextDependency.js b/lib/dependencies/ImportContextDependency.js index def999a9e..0a3c6feda 100644 --- a/lib/dependencies/ImportContextDependency.js +++ b/lib/dependencies/ImportContextDependency.js @@ -4,7 +4,6 @@ */ "use strict"; const ContextDependency = require("./ContextDependency"); -const CriticalDependencyWarning = require("./CriticalDependencyWarning"); const ContextDependencyTemplateAsRequireCall = require("./ContextDependencyTemplateAsRequireCall"); class ImportContextDependency extends ContextDependency { @@ -19,15 +18,6 @@ class ImportContextDependency extends ContextDependency { return "import() context"; } - getWarnings() { - if(!this.critical) { - return; - } - - return [ - new CriticalDependencyWarning(this.critical) - ]; - } } ImportContextDependency.Template = ContextDependencyTemplateAsRequireCall; diff --git a/lib/dependencies/RequireResolveContextDependency.js b/lib/dependencies/RequireResolveContextDependency.js index bbf5c587e..3a278809c 100644 --- a/lib/dependencies/RequireResolveContextDependency.js +++ b/lib/dependencies/RequireResolveContextDependency.js @@ -4,7 +4,6 @@ */ "use strict"; const ContextDependency = require("./ContextDependency"); -const CriticalDependencyWarning = require("./CriticalDependencyWarning"); const ContextDependencyTemplateAsId = require("./ContextDependencyTemplateAsId"); class RequireResolveContextDependency extends ContextDependency { @@ -18,15 +17,6 @@ class RequireResolveContextDependency extends ContextDependency { return "amd require context"; } - getWarnings() { - if(!this.critical) { - return; - } - - return [ - new CriticalDependencyWarning(this.critical) - ]; - } } RequireResolveContextDependency.Template = ContextDependencyTemplateAsId; diff --git a/test/cases/context/issue-5750/folder/a b/test/cases/context/issue-5750/folder/a new file mode 100644 index 000000000..e69de29bb diff --git a/test/cases/context/issue-5750/index.js b/test/cases/context/issue-5750/index.js new file mode 100644 index 000000000..09b525ab0 --- /dev/null +++ b/test/cases/context/issue-5750/index.js @@ -0,0 +1,4 @@ +it("should not use regexps with the g flag", function() { + require.context("./folder", true, /a/).keys().length.should.be.eql(1); + require.context("./folder", true, /a/g).keys().length.should.be.eql(0); +}); diff --git a/test/cases/context/issue-5750/warnings.js b/test/cases/context/issue-5750/warnings.js new file mode 100644 index 000000000..62587ab93 --- /dev/null +++ b/test/cases/context/issue-5750/warnings.js @@ -0,0 +1,3 @@ +module.exports = [ + [/Critical dependency: Contexts can't use RegExps with the 'g' or 'y' flags/], +];