UNPKG

angular-docgen

Version:

A toolkit to extract information from Angular components for documentation generation.

95 lines 3.4 kB
"use strict"; 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