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