| /* |
| MIT License http://www.opensource.org/licenses/mit-license.php |
| Author Tobias Koppers @sokra |
| */ |
| "use strict"; |
| const Dependency = require("../Dependency"); |
| const CriticalDependencyWarning = require("./CriticalDependencyWarning"); |
| |
| const regExpToString = r => (r ? r + "" : ""); |
| |
| class ContextDependency extends Dependency { |
| // options: { request, recursive, regExp, include, exclude, mode, chunkName, groupOptions } |
| constructor(options) { |
| super(); |
| this.options = options; |
| this.userRequest = this.options.request; |
| /** @type {false | string} */ |
| this.critical = false; |
| this.hadGlobalOrStickyRegExp = false; |
| if (this.options.regExp.global || this.options.regExp.sticky) { |
| this.options.regExp = null; |
| this.hadGlobalOrStickyRegExp = true; |
| } |
| } |
| |
| getResourceIdentifier() { |
| return ( |
| `context${this.options.request} ${this.options.recursive} ` + |
| `${regExpToString(this.options.regExp)} ${regExpToString( |
| this.options.include |
| )} ${regExpToString(this.options.exclude)} ` + |
| `${this.options.mode} ${this.options.chunkName} ` + |
| `${JSON.stringify(this.options.groupOptions)}` |
| ); |
| } |
| |
| 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; |
| } |
| } |
| |
| // TODO remove in webpack 5 |
| Object.defineProperty(ContextDependency.prototype, "async", { |
| configurable: false, |
| get() { |
| throw new Error( |
| "ContextDependency.async was removed. Use ContextDependency.options.mode instead." |
| ); |
| }, |
| set() { |
| throw new Error( |
| "ContextDependency.async was removed. Pass options.mode to constructor instead" |
| ); |
| } |
| }); |
| |
| module.exports = ContextDependency; |