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.
		
		
		
		
			
				
					101 lines
				
				1.6 KiB
			
		
		
			
		
	
	
					101 lines
				
				1.6 KiB
			| 
								 
											4 years ago
										 
									 | 
							
								"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;
							 |