You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
100 lines
1.6 KiB
100 lines
1.6 KiB
"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;
|
|
|