UNPKG

@lcap/nasl

Version:

NetEase Application Specific Language

47 lines 2.46 kB
"use strict"; 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