UNPKG

react-tsdoc

Version:

CLI to extract information from React Typescript component files with TSDoc for documentation generation purposes

155 lines (154 loc) 6.47 kB
"use strict"; var __assign = (this && this.__assign) || function () { __assign = Object.assign || function(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; }; return __assign.apply(this, arguments); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.getTypeSignature = void 0; var ts_morph_1 = require("ts-morph"); /** * Gets type data for a param * * @node - The property signature to check the type of */ var getTypeSignature = function (node) { var _a; if (!node) return undefined; var kind = (node === null || node === void 0 ? void 0 : node.getKind()) === ts_morph_1.SyntaxKind.PropertySignature ? (_a = node.getTypeNode()) === null || _a === void 0 ? void 0 : _a.getKind() : node.getKind(); switch (kind) { case (ts_morph_1.SyntaxKind.TypeReference): // foo return { name: node.getType().getText().toString() }; case (ts_morph_1.SyntaxKind.LiteralType): // 'foobarbaz' return { name: 'literal', value: node.getType().getText().toString() }; case (ts_morph_1.SyntaxKind.StringKeyword): // string return { name: 'string' }; case (ts_morph_1.SyntaxKind.NumberKeyword): // number return { name: 'number' }; case (ts_morph_1.SyntaxKind.BooleanKeyword): // boolean return { name: 'boolean' }; case (ts_morph_1.SyntaxKind.AnyKeyword): // any return { name: 'any' }; case (ts_morph_1.SyntaxKind.VoidKeyword): // void return { name: 'void' }; case (ts_morph_1.SyntaxKind.UnionType): { // foo | bar var elements_1 = []; var typeNode_1 = node.getKind() === ts_morph_1.SyntaxKind.UnionType ? node : node.getTypeNode(); typeNode_1.getTypeNodes() .forEach(function (childNode) { return elements_1.push((0, exports.getTypeSignature)(childNode)); }); return { name: 'union', raw: node.getType().getText(), elements: elements_1 }; } case (ts_morph_1.SyntaxKind.ArrayType): { // foo[] var elements_2 = []; var typeNode_2 = node.getKind() === ts_morph_1.SyntaxKind.ArrayType ? node : node.getTypeNode(); typeNode_2.forEachChild(function (childNode) { return elements_2.push((0, exports.getTypeSignature)(childNode)); }); return { name: 'Array', raw: node.getType().getText(), elements: elements_2, }; } case (ts_morph_1.SyntaxKind.TupleType): { // [foo, bar, baz] var elements_3 = []; var typeNode_3 = node.getKind() === ts_morph_1.SyntaxKind.TupleType ? node : node.getTypeNode(); typeNode_3.forEachChild(function (childNode) { elements_3.push((0, exports.getTypeSignature)(childNode)); }); return { name: 'tuple', raw: node.getType().getText(), elements: elements_3 }; } case (ts_morph_1.SyntaxKind.FunctionType): { // (foo: string) => void var args_1 = []; var typeNode_4 = node.getKind() === ts_morph_1.SyntaxKind.FunctionType ? node : node.getTypeNode(); typeNode_4.forEachChild(function (childNode) { var _a; if (childNode.getKind() === ts_morph_1.SyntaxKind.Parameter) { args_1.push({ name: (_a = childNode.getFirstChildByKind(ts_morph_1.SyntaxKind.Identifier)) === null || _a === void 0 ? void 0 : _a.getText(), type: (0, exports.getTypeSignature)(childNode.getTypeNode()) }); } }); return { name: 'signature', type: 'function', raw: node.getType().getText(), signature: { arguments: args_1, // @ts-ignore return: (0, exports.getTypeSignature)(node.getTypeNode().getLastChild()) } }; } case (ts_morph_1.SyntaxKind.TypeLiteral): // {foo: bar} OR {[foo: string]: bar} var properties_1 = []; var typeNode = node.getKind() === ts_morph_1.SyntaxKind.TypeLiteral ? node : node.getTypeNode(); // @ts-ignore typeNode.forEachChild(function (childNode) { var _a; if (childNode.getKind() === ts_morph_1.SyntaxKind.PropertySignature) { properties_1.push({ key: (_a = childNode.getFirstChildByKind(ts_morph_1.SyntaxKind.Identifier)) === null || _a === void 0 ? void 0 : _a.getText(), value: __assign(__assign({}, (0, exports.getTypeSignature)(childNode.getLastChild())), { // @ts-ignore required: !childNode.hasQuestionToken() }) }); } if (childNode.getKind() === ts_morph_1.SyntaxKind.IndexSignature) { var parameter = childNode.getFirstChildByKind(ts_morph_1.SyntaxKind.Parameter); properties_1.push({ key: { name: parameter.getType().getText() }, value: __assign(__assign({}, (0, exports.getTypeSignature)(childNode.getLastChild())), { required: !parameter.hasQuestionToken() }) }); } }); return { name: 'signature', type: 'object', raw: node.getType().getText(), signature: { properties: properties_1 } }; default: // unknown type return { name: 'unknown' }; } }; exports.getTypeSignature = getTypeSignature;