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