| "use strict"; |
| |
| function isDirectoryIndex(resource, options) |
| { |
| var verdict = false; |
| |
| options.directoryIndexes.every( function(index) |
| { |
| if (index === resource) |
| { |
| verdict = true; |
| return false; |
| } |
| |
| return true; |
| }); |
| |
| return verdict; |
| } |
| |
| |
| |
| function parsePath(urlObj, options) |
| { |
| var path = urlObj.path.absolute.string; |
| |
| if (path) |
| { |
| var lastSlash = path.lastIndexOf("/"); |
| |
| if (lastSlash > -1) |
| { |
| if (++lastSlash < path.length) |
| { |
| var resource = path.substr(lastSlash); |
| |
| if (resource!=="." && resource!=="..") |
| { |
| urlObj.resource = resource; |
| path = path.substr(0, lastSlash); |
| } |
| else |
| { |
| path += "/"; |
| } |
| } |
| |
| urlObj.path.absolute.string = path; |
| urlObj.path.absolute.array = splitPath(path); |
| } |
| else if (path==="." || path==="..") |
| { |
| // "..?var", "..#anchor", etc ... not "..index.html" |
| path += "/"; |
| |
| urlObj.path.absolute.string = path; |
| urlObj.path.absolute.array = splitPath(path); |
| } |
| else |
| { |
| // Resource-only |
| urlObj.resource = path; |
| urlObj.path.absolute.string = null; |
| } |
| |
| urlObj.extra.resourceIsIndex = isDirectoryIndex(urlObj.resource, options); |
| } |
| // Else: query/hash-only or empty |
| } |
| |
| |
| |
| function splitPath(path) |
| { |
| // TWEAK :: condition only for speed optimization |
| if (path !== "/") |
| { |
| var cleaned = []; |
| |
| path.split("/").forEach( function(dir) |
| { |
| // Cleanup -- splitting "/dir/" becomes ["","dir",""] |
| if (dir !== "") |
| { |
| cleaned.push(dir); |
| } |
| }); |
| |
| return cleaned; |
| } |
| else |
| { |
| // Faster to skip the above block and just create an array |
| return []; |
| } |
| } |
| |
| |
| |
| module.exports = parsePath; |