UNPKG

ts-randomizer

Version:

A tool to create random data by type parameters

49 lines 1.76 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.createTypeParamsMap = void 0; const ts = require("typescript"); const fp_1 = require("lodash/fp"); const checker_1 = require("../../checker"); const utils_1 = require("../utils"); /** * Create type arguments map where key is type argument symbol name, value is concrete argument type * @param type Type */ const createTypeParamsMap = (type) => { const checker = (0, checker_1.getTypeChecker)(); const argumentsMap = {}; const symbol = type.getSymbol(); if (!symbol) { return argumentsMap; } const typeParameters = (0, fp_1.flatMap)(d => ts.isInterfaceDeclaration(d) || ts.isClassDeclaration(d) ? d.typeParameters : [], symbol.declarations); if ((0, utils_1.isArrayType)(type)) { const arrayTypeParam = (0, utils_1.getFirstTypeParameter)(type); if (arrayTypeParam) { return (0, exports.createTypeParamsMap)(arrayTypeParam); } } return (0, utils_1.getTypeArguments)(type).reduce((acc, item, index) => { const typeParameterItem = typeParameters[index]; if (!typeParameterItem) { return acc; } const itemSymbol = checker.getTypeAtLocation(typeParameterItem).getSymbol(); const isArray = (0, utils_1.isArrayType)(item); const type = isArray ? (0, utils_1.getFirstTypeParameter)(item) : item; if (!type) { return acc; } if (itemSymbol) { acc[itemSymbol.name] = { type, isArray, }; } return acc; }, argumentsMap); }; exports.createTypeParamsMap = createTypeParamsMap; //# sourceMappingURL=create-params-map.js.map