From bbff7403fbf46f9ad92240ac213df8d30ef31b64 Mon Sep 17 00:00:00 2001 From: Florian Dold Date: Thu, 20 Sep 2018 02:56:13 +0200 Subject: update packages --- .../lib/dependencies/ContextDependencyHelpers.js | 248 +++++++++++++++------ 1 file changed, 177 insertions(+), 71 deletions(-) (limited to 'node_modules/webpack/lib/dependencies/ContextDependencyHelpers.js') 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; + } +}; -- cgit v1.2.3