UNPKG

@lcap/nasl

Version:

NetEase Application Specific Language

69 lines 3.22 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, parseState) { const entity = new utils_1.naslTypes.Entity(); parseState.nodeName = 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, parseState)); } }); return entity; } exports.transform2Entity = transform2Entity; const SYSTEM_PROPERTIES = new Set(['id', 'createdTime', 'updatedTime', 'createdBy', 'updatedBy']); const HIDDEN_PROPERTIES = new Set(['id', 'createdBy', 'updatedBy']); const PROPERTY_LABELS = new Map([ ['id', '主键'], ['createdTime', '创建时间'], ['updatedTime', '更新时间'], ['createdBy', '创建者'], ['updatedBy', '更新者'], ]); const DEFAULT_HIDDEN_DISPLAY = { inDetail: false, inFilter: false, inForm: false, inTable: false, }; function transform2EntityProperty(node, parseState) { const property = new utils_1.naslTypes.EntityProperty(); property.columnName = property.name = node.key.name; property.label = (0, utils_1.fetchFromComments)(node.leadingComments || node?.key?.leadingComments); property.typeAnnotation = (0, transform2TypeAnnotation_1.transform2TypeAnnotation)(node.typeAnnotation.typeAnnotation, parseState) || undefined; if (property.name === 'id') property.primaryKey = true; const { name } = property; if (!SYSTEM_PROPERTIES.has(name)) { property.generationRule = 'manual'; } else if (!property.label) { property.label = PROPERTY_LABELS.get(name) ?? ''; } if (HIDDEN_PROPERTIES.has(name)) { property.display = { ...DEFAULT_HIDDEN_DISPLAY }; } 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