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