diff options
Diffstat (limited to 'node_modules/webpack/lib/dependencies/ContextDependencyHelpers.js')
-rw-r--r-- | node_modules/webpack/lib/dependencies/ContextDependencyHelpers.js | 248 |
1 files changed, 177 insertions, 71 deletions
diff --git a/node_modules/webpack/lib/dependencies/ContextDependencyHelpers.js b/node_modules/webpack/lib/dependencies/ContextDependencyHelpers.js index 412cee701..2dabc3345 100644 --- a/node_modules/webpack/lib/dependencies/ContextDependencyHelpers.js +++ b/node_modules/webpack/lib/dependencies/ContextDependencyHelpers.js @@ -1,71 +1,177 @@ -/*
- 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;
- }
-};
+/* + 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 + * @returns {string} Escaped string + */ +const quotemeta = str => { + return str.replace(/[-[\]\\/{}()*+?.^$|]/g, "\\$&"); +}; + +const splitContextFromPrefix = prefix => { + const idx = prefix.lastIndexOf("/"); + let context = "."; + if (idx >= 0) { + context = prefix.substr(0, idx); + prefix = `.${prefix.substr(idx)}`; + } + return { + context, + prefix + }; +}; + +const splitQueryFromPostfix = postfix => { + const idx = postfix.indexOf("?"); + let query = ""; + if (idx >= 0) { + query = postfix.substr(idx); + postfix = postfix.substr(0, idx); + } + return { + postfix, + query + }; +}; + +ContextDependencyHelpers.create = ( + Dep, + range, + param, + expr, + options, + contextOptions +) => { + if (param.isTemplateString()) { + let prefixRaw = param.quasis[0].string; + let postfixRaw = + param.quasis.length > 1 + ? param.quasis[param.quasis.length - 1].string + : ""; + const prefixRange = [param.quasis[0].range[0], param.quasis[0].range[1]]; + const postfixRange = + param.quasis.length > 1 + ? param.quasis[param.quasis.length - 1].range + : ""; + const valueRange = param.range; + const { context, prefix } = splitContextFromPrefix(prefixRaw); + const { postfix, query } = splitQueryFromPostfix(postfixRaw); + // If there are more than two quasis, maybe the generated RegExp can be more precise? + const regExp = new RegExp( + `^${quotemeta(prefix)}${options.wrappedContextRegExp.source}${quotemeta( + postfix + )}$` + ); + const dep = new Dep( + Object.assign( + { + request: context + query, + recursive: options.wrappedContextRecursive, + regExp, + mode: "sync" + }, + contextOptions + ), + range, + valueRange + ); + dep.loc = expr.loc; + const replaces = []; + if (prefixRange && prefix !== prefixRaw) { + replaces.push({ + range: prefixRange, + value: prefix + }); + } + if (postfixRange && postfix !== postfixRaw) { + replaces.push({ + range: postfixRange, + value: postfix + }); + } + dep.replaces = replaces; + 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())) + ) { + let prefixRaw = + param.prefix && param.prefix.isString() ? param.prefix.string : ""; + let postfixRaw = + param.postfix && param.postfix.isString() ? param.postfix.string : ""; + const prefixRange = + param.prefix && param.prefix.isString() ? param.prefix.range : null; + const postfixRange = + param.postfix && param.postfix.isString() ? param.postfix.range : null; + const valueRange = param.range; + const { context, prefix } = splitContextFromPrefix(prefixRaw); + const { postfix, query } = splitQueryFromPostfix(postfixRaw); + const regExp = new RegExp( + `^${quotemeta(prefix)}${options.wrappedContextRegExp.source}${quotemeta( + postfix + )}$` + ); + const dep = new Dep( + Object.assign( + { + request: context + query, + recursive: options.wrappedContextRecursive, + regExp, + mode: "sync" + }, + contextOptions + ), + range, + valueRange + ); + dep.loc = expr.loc; + const replaces = []; + if (prefixRange && prefix !== prefixRaw) { + replaces.push({ + range: prefixRange, + value: JSON.stringify(prefix) + }); + } + if (postfixRange && postfix !== postfixRaw) { + replaces.push({ + range: postfixRange, + value: JSON.stringify(postfix) + }); + } + dep.replaces = replaces; + dep.critical = + options.wrappedContextCritical && + "a part of the request of a dependency is an expression"; + return dep; + } else { + const dep = new Dep( + Object.assign( + { + request: options.exprContextRequest, + recursive: options.exprContextRecursive, + regExp: options.exprContextRegExp, + mode: "sync" + }, + contextOptions + ), + range, + param.range + ); + dep.loc = expr.loc; + dep.critical = + options.exprContextCritical && + "the request of a dependency is an expression"; + return dep; + } +}; |