|
5 | 5 | var ContextDependencyHelpers = exports; |
6 | 6 |
|
7 | 7 | ContextDependencyHelpers.create = function(Dep, range, param, expr, options) { |
8 | | - var dep; |
9 | | - if(param.isWrapped() && (param.prefix && param.prefix.isString() || param.postfix && param.postfix.isString())) { |
10 | | - var prefix = param.prefix && param.prefix.isString() ? param.prefix.string : ""; |
11 | | - var postfix = param.postfix && param.postfix.isString() ? param.postfix.string : ""; |
12 | | - var prefixRange = param.prefix && param.prefix.isString() ? param.prefix.range : null; |
13 | | - var valueRange = [prefixRange ? prefixRange[1] : param.range[0], param.range[1]]; |
14 | | - var idx = prefix.lastIndexOf("/"); |
15 | | - var context = "."; |
| 8 | + var dep, prefix, postfix, prefixRange, valueRange, idx, context, regExp; |
| 9 | + if(param.isTemplateString()) { |
| 10 | + prefix = param.quasis[0].string; |
| 11 | + postfix = param.quasis.length > 1 ? param.quasis[param.quasis.length - 1].string : ""; |
| 12 | + prefixRange = [param.quasis[0].range[0], param.quasis[0].range[1]]; |
| 13 | + valueRange = param.range; |
| 14 | + idx = prefix.lastIndexOf("/"); |
| 15 | + context = "."; |
16 | 16 | if(idx >= 0) { |
17 | 17 | context = prefix.substr(0, idx); |
18 | 18 | prefix = "." + prefix.substr(idx); |
19 | 19 | } |
20 | | - var regExp = new RegExp("^" + |
| 20 | + // If there are more than two quasis, maybe the generated RegExp can be more precise? |
| 21 | + regExp = new RegExp("^" + |
| 22 | + prefix.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&") + |
| 23 | + options.wrappedContextRegExp.source + |
| 24 | + postfix.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&") + "$"); |
| 25 | + dep = new Dep(context, options.wrappedContextRecursive, regExp, range, valueRange); |
| 26 | + dep.loc = expr.loc; |
| 27 | + dep.replaces = [{ |
| 28 | + range: prefixRange, |
| 29 | + value: prefix |
| 30 | + }]; |
| 31 | + dep.critical = options.wrappedContextCritical && "a part of the request of a dependency is an expression"; |
| 32 | + return dep; |
| 33 | + } else if(param.isWrapped() && (param.prefix && param.prefix.isString() || param.postfix && param.postfix.isString())) { |
| 34 | + prefix = param.prefix && param.prefix.isString() ? param.prefix.string : ""; |
| 35 | + postfix = param.postfix && param.postfix.isString() ? param.postfix.string : ""; |
| 36 | + prefixRange = param.prefix && param.prefix.isString() ? param.prefix.range : null; |
| 37 | + valueRange = [prefixRange ? prefixRange[1] : param.range[0], param.range[1]]; |
| 38 | + idx = prefix.lastIndexOf("/"); |
| 39 | + context = "."; |
| 40 | + if(idx >= 0) { |
| 41 | + context = prefix.substr(0, idx); |
| 42 | + prefix = "." + prefix.substr(idx); |
| 43 | + } |
| 44 | + regExp = new RegExp("^" + |
21 | 45 | prefix.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&") + |
22 | 46 | options.wrappedContextRegExp.source + |
23 | 47 | postfix.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&") + "$"); |
|
0 commit comments