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