aboutsummaryrefslogtreecommitdiff
path: root/thirdparty/systemjs/lib/paths.js
diff options
context:
space:
mode:
authorFlorian Dold <florian.dold@gmail.com>2016-10-10 03:50:11 +0200
committerFlorian Dold <florian.dold@gmail.com>2016-10-10 03:50:11 +0200
commitde4628b3a7e7618681a76c01d00c1632a96688cf (patch)
tree49d4d97cf1c591b8567c83aa2469522f7fa57d27 /thirdparty/systemjs/lib/paths.js
parent7989859ed6520d4e8d18f48545e5998bf66e253c (diff)
parent9af485a584e47fd503ed5c62b9f6482574715f1e (diff)
Merge commit '9af485a584e47fd503ed5c62b9f6482574715f1e' as 'thirdparty/systemjs'
Diffstat (limited to 'thirdparty/systemjs/lib/paths.js')
-rw-r--r--thirdparty/systemjs/lib/paths.js42
1 files changed, 42 insertions, 0 deletions
diff --git a/thirdparty/systemjs/lib/paths.js b/thirdparty/systemjs/lib/paths.js
new file mode 100644
index 000000000..5208fe457
--- /dev/null
+++ b/thirdparty/systemjs/lib/paths.js
@@ -0,0 +1,42 @@
+function applyPaths(paths, name) {
+ // most specific (most number of slashes in path) match wins
+ var pathMatch = '', wildcard, maxWildcardPrefixLen = 0;
+
+ // check to see if we have a paths entry
+ for (var p in paths) {
+ if (paths.hasOwnProperty && !paths.hasOwnProperty(p))
+ continue;
+
+ // exact path match
+ if (p.indexOf('*') === -1) {
+ if (name == p)
+ return paths[p];
+
+ // support trailing / in paths rules
+ else if (name.substr(0, p.length - 1) == p.substr(0, p.length - 1) && (name.length < p.length || name[p.length - 1] == p[p.length - 1]) && (paths[p][paths[p].length - 1] == '/' || paths[p] == '')) {
+ return paths[p].substr(0, paths[p].length - 1) + (name.length > p.length ? (paths[p] && '/' || '') + name.substr(p.length) : '');
+ }
+ }
+ // wildcard path match
+ else {
+ var pathParts = p.split('*');
+ if (pathParts.length > 2)
+ throw new TypeError('Only one wildcard in a path is permitted');
+
+ var wildcardPrefixLen = pathParts[0].length;
+ if (wildcardPrefixLen >= maxWildcardPrefixLen &&
+ name.substr(0, pathParts[0].length) == pathParts[0] &&
+ name.substr(name.length - pathParts[1].length) == pathParts[1]) {
+ maxWildcardPrefixLen = wildcardPrefixLen;
+ pathMatch = p;
+ wildcard = name.substr(pathParts[0].length, name.length - pathParts[1].length - pathParts[0].length);
+ }
+ }
+ }
+
+ var outPath = paths[pathMatch];
+ if (typeof wildcard == 'string')
+ outPath = outPath.replace('*', wildcard);
+
+ return outPath;
+} \ No newline at end of file