UNPKG

ts-randomizer

Version:

A tool to create random data by type parameters

75 lines 3.16 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getPropertyDescription = void 0; const ts = require("typescript"); const node_1 = require("./node"); const types_1 = require("../../types"); const create_description_1 = require("./utils/create-description"); const checker_1 = require("../checker"); const utils_1 = require("./utils"); /** * Generate description for array type argument * @param node Node * @param symbol Node symbol * @param typeArgumentsMap Node type arguments relations map */ const generateArrayTypeArgumentDescription = (node, symbol, typeArgumentsMap = {}) => { const checker = (0, checker_1.getTypeChecker)(); const type = checker.getTypeAtLocation(node); const isArrayNode = (0, utils_1.isArrayType)(type); const isTypeArray = type.symbol ? typeArgumentsMap[type.symbol.name] && typeArgumentsMap[type.symbol.name].isArray : false; const isArray = isArrayNode || isTypeArray; if (!isArray) { return; } const argumentType = isArrayNode ? (0, utils_1.getFirstTypeParameter)(type) : typeArgumentsMap[type.symbol.name].type; return { key: symbol.getName(), flag: isArray ? types_1.DescriptionFlag.Array : null, description: (0, create_description_1.createDescription)(symbol.getName(), argumentType || typeArgumentsMap[type.symbol.name].type, typeArgumentsMap), }; }; const getPropertyDescription = (node, typeArgumentsMap = {}) => { const checker = (0, checker_1.getTypeChecker)(); const symbol = checker.getSymbolAtLocation(node.name); if (!symbol || !node.type) { return types_1.PropertyType.Null; } // Return description with type node description if (ts.isTypeReferenceNode(node.type)) { const type = checker.getTypeAtLocation(node); return (generateArrayTypeArgumentDescription(node, symbol, typeArgumentsMap) || { key: symbol.getName(), flag: ts.isArrayTypeNode(node.type) ? types_1.DescriptionFlag.Array : null, description: (0, create_description_1.createDescription)(symbol.getName(), type, typeArgumentsMap), }); } // Return description for node if its name is array if (ts.isArrayTypeNode(node.type)) { const type = checker.getTypeAtLocation(node.type.elementType); if (ts.isArrayTypeNode(node.type.elementType)) { return { key: symbol.getName(), flag: types_1.DescriptionFlag.Array, description: (0, node_1.generateNodeDescription)(node.type, typeArgumentsMap), }; } return { key: symbol.getName(), flag: types_1.DescriptionFlag.Array, description: (0, create_description_1.createDescription)(symbol.getName(), type, typeArgumentsMap), }; } // Return basic type description return { key: symbol.getName(), description: (0, utils_1.getPropertyNameBySyntaxKind)(node), }; }; exports.getPropertyDescription = getPropertyDescription; //# sourceMappingURL=property-signature-declaration.js.map