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.
|
|
"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;
|