angular-docs-cn/aio/transforms/links-package/services/getAliases.js

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