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