diff options
Diffstat (limited to 'node_modules/webpack/lib/dependencies/ContextDependencyHelpers.js')
-rw-r--r-- | node_modules/webpack/lib/dependencies/ContextDependencyHelpers.js | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/node_modules/webpack/lib/dependencies/ContextDependencyHelpers.js b/node_modules/webpack/lib/dependencies/ContextDependencyHelpers.js new file mode 100644 index 000000000..412cee701 --- /dev/null +++ b/node_modules/webpack/lib/dependencies/ContextDependencyHelpers.js @@ -0,0 +1,71 @@ +/*
+ MIT License http://www.opensource.org/licenses/mit-license.php
+ Author Tobias Koppers @sokra
+*/
+"use strict";
+
+const ContextDependencyHelpers = exports;
+
+/**
+ * Escapes regular expression metacharacters
+ * @param {string} str String to quote
+ * @return {string} Escaped string
+ */
+function quotemeta(str) {
+ return str.replace(/[-[\]\\/{}()*+?.^$|]/g, "\\$&");
+}
+
+ContextDependencyHelpers.create = function(Dep, range, param, expr, options, chunkName) {
+ let dep;
+ let prefix;
+ let postfix;
+ let prefixRange;
+ let valueRange;
+ let idx;
+ let context;
+ let regExp;
+ if(param.isTemplateString()) {
+ prefix = param.quasis[0].string;
+ postfix = param.quasis.length > 1 ? param.quasis[param.quasis.length - 1].string : "";
+ prefixRange = [param.quasis[0].range[0], param.quasis[0].range[1]];
+ valueRange = param.range;
+ idx = prefix.lastIndexOf("/");
+ context = ".";
+ if(idx >= 0) {
+ context = prefix.substr(0, idx);
+ prefix = `.${prefix.substr(idx)}`;
+ }
+ // If there are more than two quasis, maybe the generated RegExp can be more precise?
+ regExp = new RegExp(`^${quotemeta(prefix)}${options.wrappedContextRegExp.source}${quotemeta(postfix)}$`);
+ dep = new Dep(context, options.wrappedContextRecursive, regExp, range, valueRange, chunkName);
+ dep.loc = expr.loc;
+ dep.replaces = [{
+ range: prefixRange,
+ value: prefix
+ }];
+ dep.critical = options.wrappedContextCritical && "a part of the request of a dependency is an expression";
+ return dep;
+ } else if(param.isWrapped() && (param.prefix && param.prefix.isString() || param.postfix && param.postfix.isString())) {
+ prefix = param.prefix && param.prefix.isString() ? param.prefix.string : "";
+ postfix = param.postfix && param.postfix.isString() ? param.postfix.string : "";
+ prefixRange = param.prefix && param.prefix.isString() ? param.prefix.range : null;
+ valueRange = [prefixRange ? prefixRange[1] : param.range[0], param.range[1]];
+ idx = prefix.lastIndexOf("/");
+ context = ".";
+ if(idx >= 0) {
+ context = prefix.substr(0, idx);
+ prefix = `.${prefix.substr(idx)}`;
+ }
+ regExp = new RegExp(`^${quotemeta(prefix)}${options.wrappedContextRegExp.source}${quotemeta(postfix)}$`);
+ dep = new Dep(context, options.wrappedContextRecursive, regExp, range, valueRange, chunkName);
+ dep.loc = expr.loc;
+ dep.prepend = param.prefix && param.prefix.isString() ? prefix : null;
+ dep.critical = options.wrappedContextCritical && "a part of the request of a dependency is an expression";
+ return dep;
+ } else {
+ dep = new Dep(options.exprContextRequest, options.exprContextRecursive, options.exprContextRegExp, range, param.range, chunkName);
+ dep.loc = expr.loc;
+ dep.critical = options.exprContextCritical && "the request of a dependency is an expression";
+ return dep;
+ }
+};
|