Skip to content

Commit

Permalink
Merge pull request #4 from gaffa-tape/resolve-upgrade
Browse files Browse the repository at this point in the history
improved performance of the resolve function
  • Loading branch information
KoryNunn committed Nov 29, 2013
2 parents 5a99815 + 82f76cd commit 78851e1
Showing 1 changed file with 38 additions and 40 deletions.
78 changes: 38 additions & 40 deletions paths.js
Expand Up @@ -25,12 +25,18 @@ function rawToPath(rawPath) {

var memoisePathCache = {};
function resolvePath() {
var memoiseKey = '';
var memoiseKey,
pathParts = [];

for(var argumentIndex = 0; argumentIndex < arguments.length; argumentIndex++){
memoiseKey += arguments[argumentIndex];
for(var argumentIndex = arguments.length; argumentIndex--;){
pathParts.unshift.apply(pathParts, pathToParts(arguments[argumentIndex]));
if(isPathAbsolute(arguments[argumentIndex])){
break;
}
}

memoiseKey = pathParts.join('');

if(memoisePathCache[memoiseKey]){
return memoisePathCache[memoiseKey];
}
Expand All @@ -40,47 +46,39 @@ function resolvePath() {
pathParts,
pathPart;

for(var argumentIndex = 0; argumentIndex < arguments.length; argumentIndex++){
pathParts = pathToParts(arguments[argumentIndex]);

if(!pathParts || !pathParts.length){
continue;
}

for(var pathPartIndex = 0; pathPartIndex < pathParts.length; pathPartIndex++){
pathPart = pathParts[pathPartIndex];
for(var pathPartIndex = 0; pathPartIndex < pathParts.length; pathPartIndex++){
pathPart = pathParts[pathPartIndex];

if (pathPart === currentKey) {
// Has a last removed? Add it back on.
if(lastRemoved != null){
absoluteParts.push(lastRemoved);
lastRemoved = null;
}
} else if (pathPart === rootPath) {
// Root path? Reset parts to be absolute.
absoluteParts = [''];

} else if (pathPart.slice(-bubbleCapture.length) === bubbleCapture) {
// deep bindings
if(pathPart !== bubbleCapture){
absoluteParts.push(pathPart.slice(0, -bubbleCapture.length));
if (pathPart === currentKey) {
// Has a last removed? Add it back on.
if(lastRemoved != null){
absoluteParts.push(lastRemoved);
lastRemoved = null;
}
} else if (pathPart === rootPath) {
// Root path? Reset parts to be absolute.
absoluteParts = [''];

} else if (pathPart.slice(-bubbleCapture.length) === bubbleCapture) {
// deep bindings
if(pathPart !== bubbleCapture){
absoluteParts.push(pathPart.slice(0, -bubbleCapture.length));
}
} else if (pathPart === upALevel) {
// Up a level? Remove the last item in absoluteParts
lastRemoved = absoluteParts.pop();
} else if (pathPart.slice(0,2) === upALevel) {
var argument = pathPart.slice(2);
//named
while(absoluteParts[absoluteParts.length - 1] !== argument){
if(absoluteParts.length === 0){
throw "Named path part was not found: '" + pathPart + "', in path: '" + arguments[argumentIndex] + "'.";
}
} else if (pathPart === upALevel) {
// Up a level? Remove the last item in absoluteParts
lastRemoved = absoluteParts.pop();
} else if (pathPart.slice(0,2) === upALevel) {
var argument = pathPart.slice(2);
//named
while(absoluteParts.slice(-1).pop() !== argument){
if(absoluteParts.length === 0){
throw "Named path part was not found: '" + pathPart + "', in path: '" + arguments[argumentIndex] + "'.";
}
lastRemoved = absoluteParts.pop();
}
} else {
// any following valid part? Add it to the absoluteParts.
absoluteParts.push(pathPart);
}
} else {
// any following valid part? Add it to the absoluteParts.
absoluteParts.push(pathPart);
}
}

Expand Down

0 comments on commit 78851e1

Please sign in to comment.