UNPKG

ts-randomizer

Version:

A tool to create random data by type parameters

42 lines 1.87 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.transformer = void 0; const ts = require("typescript"); const fp_1 = require("lodash/fp"); const node_1 = require("./type-description-generate/node"); const checker_1 = require("./checker"); const TARGET_CALLERS = ['create', 'createMany', 'build']; const TARGET_CLASS_NAME = 'Randomizer'; /** * Typescript transformer factory * @param program Program */ const transformer = (program) => context => file => { (0, checker_1.setTypeChecker)(program.getTypeChecker()); return ts.visitNode(file, visitNode(context, program.getTypeChecker())); }; exports.transformer = transformer; const isTargetExpression = (target) => ts.isPropertyAccessExpression(target.expression) && ts.isIdentifier(target.expression.expression) && TARGET_CALLERS.includes(target.expression.name.text) && target.expression.expression.text === TARGET_CLASS_NAME; /** * Typescript AST Node visitor * @param context Transformation context * @param checker Type checker */ const visitNode = (context, checker) => node => { node = ts.visitEachChild(node, visitNode(context, checker), context); if (!ts.isCallExpression(node) || !isTargetExpression(node) || !node.typeArguments) { return node; } const [typeArgument] = node.typeArguments; const typeTemplate = (0, node_1.generateNodeDescription)(typeArgument); const template = (0, fp_1.isArray)(typeTemplate) ? ts.factory.createArrayLiteralExpression(typeTemplate.map(property => ts.factory.createRegularExpressionLiteral(JSON.stringify(property)))) : ts.factory.createRegularExpressionLiteral(JSON.stringify(typeTemplate)); return ts.factory.updateCallExpression(node, node.expression, node.typeArguments, [template, ...node.arguments]); }; //# sourceMappingURL=transformer.js.map