angular-docgen
Version:
A toolkit to extract information from Angular components for documentation generation.
95 lines • 3.4 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var ts = require("typescript");
var getPropertyName = function (node) {
return node.name.getText();
};
var getPropertyType = function (node) {
if (typeof node.type === "undefined")
return null;
switch (node.type.kind) {
case ts.SyntaxKind.TypeReference:
return node.type.getText();
case ts.SyntaxKind.UnionType:
var unionNode = node.type;
var types = unionNode.types;
return types.reduce(function (type, typeNode, count) {
if (ts.isLiteralTypeNode(typeNode) && ts.isStringLiteral(typeNode.literal)) {
return (type === 'string' || count === 0) ? 'string' : 'any';
}
if (ts.isLiteralTypeNode(typeNode) && ts.SyntaxKind.FirstLiteralToken === typeNode.literal.kind) {
return (type === 'number' || count === 0) ? 'number' : 'any';
}
return (type === typeNode.getText() || count === 0) ? typeNode.getText() : 'any';
}, 'string');
}
return node.type.getText();
};
var getPropertyValue = function (node, type) {
if (!node.initializer)
return null;
var value = node.initializer.getText();
if (!type)
return value.replace(/"|'/g, "");
switch (type.toLowerCase()) {
case "number": {
return parseInt(value, 10);
}
case "boolean": {
return value === "true" ? true : false;
}
default: {
return value.replace(/"|'/g, "");
}
}
};
var getPropertyDescription = function (node) {
if (!node.jsDoc)
return null;
return node.jsDoc.map(function (doc) { return doc.comment; }).join("");
};
var getPropertyOptions = function (node) {
if (typeof node.type === 'undefined')
return null;
if (ts.isUnionTypeNode(node.type)) {
var typesNode = node.type.types;
if (!typesNode.some(ts.isLiteralTypeNode))
return null;
return typesNode.map(function (node) {
if (ts.isLiteralTypeNode(node) && ts.isStringLiteral(node.literal)) {
return node.getText().replace(/"|'/g, '');
}
if (ts.isLiteralTypeNode(node) && ts.SyntaxKind.FirstLiteralToken === node.literal.kind) {
return parseInt(node.getText(), 10);
}
return node.getText().replace(/"|'/g, '');
});
}
return null;
};
exports.default = (function (node, decoratorType) {
var property = {
description: undefined,
options: undefined,
name: undefined,
type: undefined,
value: undefined
};
if (!node.decorators)
return null;
var decorators = node.decorators;
var hasDecorator = decorators.some(function (decorator) {
var expression = (decorator.expression);
return expression.expression.getText() === decoratorType;
});
if (!hasDecorator)
return null;
var type = getPropertyType(node);
property.type = type;
property.name = getPropertyName(node);
property.description = getPropertyDescription(node);
property.options = getPropertyOptions(node);
property.value = getPropertyValue(node, type);
return property;
});
//# sourceMappingURL=propertyDeclarationHandler.js.map