nsgm-cli
Version:
A CLI tool to run Next/Style-components and Graphql/Mysql fullstack project
93 lines (92 loc) • 2.54 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.BaseGenerator = void 0;
/**
* 基础生成器抽象类
* 定义所有代码生成器的通用接口
*/
class BaseGenerator {
constructor(controller, action, fields) {
this.controller = controller;
this.action = action;
this.fields = fields;
}
/**
* 获取首字母大写的控制器名
*/
getCapitalizedController() {
return this.controller.charAt(0).toUpperCase() + this.controller.slice(1);
}
/**
* 获取首字母大写的动作名
*/
getCapitalizedAction() {
return this.action.charAt(0).toUpperCase() + this.action.slice(1);
}
/**
* 获取显示字段
*/
getDisplayFields() {
return this.fields.filter((f) => f.showInList && !f.isSystemField);
}
/**
* 获取表单字段
*/
getFormFields() {
return this.fields.filter((f) => f.showInForm && !f.isPrimaryKey && !f.isSystemField);
}
/**
* 获取可搜索字段
*/
getSearchableFields() {
return this.fields.filter((f) => f.searchable);
}
/**
* 获取非系统字段
*/
getNonSystemFields() {
return this.fields.filter((f) => !f.isSystemField);
}
/**
* 将字段类型转换为GraphQL类型
*/
getGraphQLType(fieldType) {
switch (fieldType) {
case 'integer':
return 'Int';
case 'decimal':
return 'Float';
case 'boolean':
return 'Boolean';
default:
return 'String';
}
}
/**
* 将字段类型转换为SQL类型
*/
getSQLType(field) {
switch (field.type) {
case 'varchar':
return `varchar(${field.length || 255})`;
case 'text':
return 'text';
case 'integer':
return 'integer';
case 'decimal':
const [precision, scale] = (field.length || '10,2').toString().split(',');
return `decimal(${precision || 10},${scale || 2})`;
case 'boolean':
return 'boolean';
case 'date':
return 'date';
case 'datetime':
return 'datetime';
case 'timestamp':
return 'TIMESTAMP(3)';
default:
return 'varchar(255)';
}
}
}
exports.BaseGenerator = BaseGenerator;