/*
|
|
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;
|