@lcap/nasl
Version:
NetEase Application Specific Language
69 lines • 3.22 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, 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