ts-randomizer
Version:
A tool to create random data by type parameters
75 lines • 3.16 kB
JavaScript
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
;