@lcap/nasl
Version:
NetEase Application Specific Language
47 lines • 2.46 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.transform2Entity = void 0;
const utils_1 = require("./utils");
const transform2TypeAnnotation_1 = require("./transform2TypeAnnotation");
const utils_2 = require("../../utils");
function transform2Entity(node) {
const entity = new utils_1.naslTypes.Entity();
entity.name = node.id.name;
entity.tableName = `${node.id.name}_${(0, utils_2.uuidv4)().replace(/-/g, '').substring(0, 6)}`;
entity.description = (0, utils_1.fetchFromComments)(node.leadingComments);
entity.properties = [];
node.body.body.forEach((node) => {
if (node.type === 'ClassProperty') {
entity.properties.push(transform2EntityProperty(node));
}
});
return entity;
}
exports.transform2Entity = transform2Entity;
function transform2EntityProperty(node) {
const property = new utils_1.naslTypes.EntityProperty();
property.columnName = property.name = node.key.name;
property.label = (0, utils_1.fetchFromComments)(node.leadingComments);
property.typeAnnotation = (0, transform2TypeAnnotation_1.transform2TypeAnnotation)(node.typeAnnotation.typeAnnotation);
if (property.name === 'id')
property.primaryKey = true;
if (!['id', 'createdTime', 'updatedTime', 'createdBy', 'updatedBy'].includes(property.name)) {
property.generationRule = 'manual';
}
const decoratorsExpression = node.decorators?.[0]?.expression;
if (decoratorsExpression?.type === 'CallExpression' && decoratorsExpression?.callee?.name === 'EntityRelation') {
const decoratorsNode = decoratorsExpression?.typeParameters;
if (decoratorsNode?.params && decoratorsNode.params[0].type === 'TSIndexedAccessType') {
const releationNode = decoratorsNode.params[0];
const relationProperty = (0, utils_1.generate)(releationNode?.indexType).code || '';
const relationEntity = (0, utils_1.generate)(releationNode?.objectType?.typeName?.right).code || '';
const relationNamespace = (0, utils_1.generate)(releationNode?.objectType?.typeName?.left).code || '';
property.relationNamespace = relationNamespace;
property.relationEntity = relationEntity;
property.relationProperty = relationProperty.replace(/[']/g, '');
property.deleteRule = 'protect';
}
}
return property;
}
//# sourceMappingURL=transform2Entity.js.map