@lcap/asl
Version:
NetEase Application Specific Language
187 lines • 6.92 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.genUniqueQueryNameGroup = exports.genInterParam = exports.getFirstDisplayedProperty = exports.genVariable = exports.genGenericTypeSchema = exports.getParamFromResolver = exports.getSchemaOfStructure = exports.getStructureByName = exports.getExpression = exports.getFormatter = exports.filterProperty = void 0;
const __1 = require("../..");
const filterProperty = (key) => (property) => {
if (property.display)
return property.display[key];
else
return !['id', 'createdTime', 'updatedTime'].includes(property.name);
};
exports.filterProperty = filterProperty;
/**
* 生成格式器的代码
* 后来没有用到
* @param property 实体属性
*/
function getFormatter(property) {
const typeKey = property.typeKey;
if (typeKey === '#/basicTypes/DateTime')
return ` formatter="date('YYYY-MM-DD HH:mm:ss')"`;
else if (typeKey === '#/basicTypes/Date')
return ` formatter="date('YYYY-MM-DD')"`;
else if (typeKey === '#/basicTypes/Date')
return ` formatter="date('HH:mm:ss')"`;
else if (__1.dataTypesMap[typeKey].type === 'enum') {
return ` :formatter="$utils['Enum']('${__1.dataTypesMap[typeKey].name}')"`;
}
return '';
}
exports.getFormatter = getFormatter;
/**
* 生成表达式的代码
* @param property 实体属性
* @param expression 表达式
*/
function getExpression(property, expression) {
const typeKey = property.typeKey;
if (typeKey === '#/basicTypes/DateTime')
return `$utils['FormatDate'](${expression}, 'YYYY-MM-DD HH:mm:ss')`;
else if (typeKey === '#/basicTypes/Date')
return `$utils['FormatDate'](${expression}, 'YYYY-MM-DD')`;
else if (typeKey === '#/basicTypes/Date')
return `$utils['FormatDate'](${expression}, 'HH:mm:ss')`;
if (__1.dataTypesMap[typeKey].type === 'enum')
return `$utils['Enum']('${__1.dataTypesMap[typeKey].name}', ${expression})`;
else
return `${expression || "''"}`;
}
exports.getExpression = getExpression;
/**
* 根据数据结构名称获取数据结构实例
* @param structureName 数据结构名称
*/
function getStructureByName(structureName) {
return Object.values(__1.dataTypesMap).find((item) => item.name === structureName);
}
exports.getStructureByName = getStructureByName;
/**
* 获取数据结构的 schema
* @param structureName 数据结构名称
*/
function getSchemaOfStructure(structureName) {
const structure = Object.values(__1.dataTypesMap).find((item) => item.name === structureName);
return {
$ref: structure?.schemaRef,
typeKey: structure?.schemaRef,
};
}
exports.getSchemaOfStructure = getSchemaOfStructure;
/**
* 从 Resolver 中获取变量
* @param resolver
* @param paramName
*/
function getParamFromResolver(resolver, paramName) {
const params = resolver.interface.logic.params;
return params.find((item) => item.name === paramName);
}
exports.getParamFromResolver = getParamFromResolver;
/**
* 生成泛型 Schema
* @param {String} name 泛型名称,如 ScopeOf
* @param {*} typeParamMap {'T': {$ref:'#/**'}}
* @param {*} dataTypesMap
* @returns 泛型
*/
function genGenericTypeSchema(name, typeParamMap) {
const scopeClass = __1.dataTypesMap[`#/genericTypes/${name}`];
let schema = {};
if (scopeClass) {
schema = {
type: 'genericType',
typeKey: `#/genericTypes/${name}`,
typeInstantiation: {
typeName: name,
typeParams: scopeClass.typeParams.map((typeParam) => ({
typeParamName: typeParam.typeParamName,
typeParamValue: typeParamMap[typeParam.typeParamName],
})),
},
};
}
return __1.convert2RefType(schema);
}
exports.genGenericTypeSchema = genGenericTypeSchema;
function genVariable(name, schema, level) {
schema = typeof schema === 'object' ? schema : { $ref: schema };
return {
level,
type: 'Identifier',
name,
schema,
};
}
exports.genVariable = genVariable;
function getFirstDisplayedProperty(entity, display = 'inTable') {
let property = entity.propertyList.find((property) => property.editable);
if (!property)
property = entity.propertyList[0];
return property;
}
exports.getFirstDisplayedProperty = getFirstDisplayedProperty;
/**
* 生成接口 Param
* @param paramIdOrName 参数 id 或引用名称
* @param expression 表达式
* @param schemaChildren 数据结构
*/
function genInterParam(paramIdOrName, expression, schemaRefs = []) {
const arr = expression.split('.');
let expressionNode;
arr.forEach((name, index) => {
const currentNode = {
level: __1.LEVEL_ENUM.expressionNode,
type: 'Identifier',
name,
schemaRef: schemaRefs[index],
};
if (expressionNode) {
expressionNode = {
level: __1.LEVEL_ENUM.expressionNode,
type: 'MemberExpression',
object: expressionNode,
property: {
level: __1.LEVEL_ENUM.expressionNode,
type: 'Identifier',
name,
schemaRef: schemaRefs[index],
code: schemaRefs[index] === '' ? '' : undefined,
},
};
}
else {
expressionNode = currentNode;
}
});
expressionNode.parentAttr = 'CallInterParamValue';
return {
parentAttr: 'params',
level: __1.LEVEL_ENUM.param,
type: 'CallInterParam',
callInterParam: paramIdOrName,
callInterParamValue: expressionNode,
};
}
exports.genInterParam = genInterParam;
function capFirstLetter(word) {
if (!word)
return word;
return word[0].toUpperCase() + word.slice(1);
}
/**
* 生成数据查询唯一的命名组
* @param viewName 页面名称
* @param componentName 组件名称
* @param suffix 其它后缀,比如实体名等等
* @param defaultInView 是否在页面逻辑中用 load 简写
*/
function genUniqueQueryNameGroup(existingNameSets, viewName, componentName = '', defaultInView = true, suffix = '') {
const result = {};
result.load = __1.utils.unique(`load${defaultInView ? '' : capFirstLetter(componentName)}${suffix ? capFirstLetter(suffix) : ''}`, existingNameSets.viewLogic);
result.interface = __1.utils.unique(`load${capFirstLetter(viewName)}${componentName ? capFirstLetter(componentName) : ''}${suffix ? capFirstLetter(suffix) : ''}`, existingNameSets.interface);
result.structure = __1.utils.unique(__1.utils.firstUpperCase(result.interface + 'Structure'), existingNameSets.structure);
return result;
}
exports.genUniqueQueryNameGroup = genUniqueQueryNameGroup;
//# sourceMappingURL=utils.js.map