71 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			71 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 
 | |
| function parseCodeName(codeName) {
 | |
|   var parts = [];
 | |
|   var currentPart;
 | |
| 
 | |
|   codeName.split('.').forEach(function(part) {
 | |
|     var subParts = part.split(':');
 | |
| 
 | |
|     var name = subParts.pop();
 | |
|     var modifier = subParts.pop();
 | |
| 
 | |
|     if (!modifier && currentPart) {
 | |
|       currentPart.name += '.' + name;
 | |
|     } else {
 | |
|       currentPart = {name: name, modifier: modifier};
 | |
|       parts.push(currentPart);
 | |
|     }
 | |
|   });
 | |
|   return parts;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * @dgService getAliases
 | |
|  * @description
 | |
|  * Get a list of all the aliases that can be made from the doc
 | |
|  * @param  {Object} doc A doc from which to extract aliases
 | |
|  * @return {Array}      A collection of aliases
 | |
|  */
 | |
| module.exports = function getAliases() {
 | |
| 
 | |
|   return function(doc) {
 | |
| 
 | |
|     var codeNameParts = parseCodeName(doc.id);
 | |
| 
 | |
|     var methodName;
 | |
|     var aliases = [];
 | |
|     // Add the last part to the list of aliases
 | |
|     var part = codeNameParts.pop();
 | |
| 
 | |
|     // If the name contains a # then it is a member and that should be included in the aliases
 | |
|     if (part.name.indexOf('#') !== -1) {
 | |
|       methodName = part.name.split('#')[1];
 | |
|     }
 | |
|     // Add the part name and modifier, if provided
 | |
|     aliases.push(part.name);
 | |
|     if (part.modifier) {
 | |
|       aliases.push(part.modifier + ':' + part.name);
 | |
|     }
 | |
| 
 | |
|     // Continue popping off the parts of the codeName and work forward collecting up each alias
 | |
|     aliases = codeNameParts.reduceRight(function(aliases, part) {
 | |
| 
 | |
|       // Add this part to each of the aliases we have so far
 | |
|       aliases.forEach(function(name) {
 | |
|         // Add the part name and modifier, if provided
 | |
|         aliases.push(part.name + '.' + name);
 | |
|         if (part.modifier) {
 | |
|           aliases.push(part.modifier + ':' + part.name + '.' + name);
 | |
|         }
 | |
|       });
 | |
| 
 | |
|       return aliases;
 | |
|     }, aliases);
 | |
| 
 | |
|     if (methodName) {
 | |
|       aliases.push(methodName);
 | |
|     }
 | |
| 
 | |
|     return aliases;
 | |
|   };
 | |
| }; |