@lcap/asl
Version:
NetEase Application Specific Language
148 lines (142 loc) • 4.8 kB
text/typescript
import { genericService } from '../../service/data';
import { utils } from '..';
import { convert2RefType } from './dataTypeUtils';
export function getGenericTypeRef(typeName: string) {
return `#/genericTypes/${typeName}`;
}
export async function getGenericList() {
let list = [];
try {
list = await genericService.getGenericClassList();
} catch (err) { }
const genericTypeList: any = [];
const genericTypemap: any = {};
if (list) {
list.forEach((item: any) => {
const tempItem = Object.assign({}, item);
utils.traverse((current) => {
if (
current.node.type === 'genericType'
|| current.node.format !== undefined
) {
convert2RefType(current.node);
}
}, {
node: tempItem,
}, {
mode: 'anyObject',
});
genericTypemap[`#/genericTypes/${tempItem.name}`] = tempItem;
const listItem = {
kind: 'genericType',
type: 'genericType',
text: `${item.name}<${(item.typeParams || []).map((param: any) => param.typeParamName).join(',')}>`,
value: `#/genericTypes/${tempItem.name}`,
typeInstantiation: {
typeName: item.name,
typeParams: (item.typeParams || []).map((param: any) => Object.assign({ typeParamValue: '' }, param)),
},
};
genericTypeList.push(listItem);
});
}
return {
genericTypeList,
genericTypemap,
};
}
export const genericTypeList = [
{
level: 'structure',
name: 'PageOf',
type: 'genericClass',
typeParams: [
{ type: 'typeParam', typeParamName: 'T' },
],
propertyList: [
{
level: 'property',
name: 'content',
type: 'genericType',
typeKey: '#/genericTypes/List',
typeInstantiation: {
typeName: 'List',
typeParams: [
{
level: 'typeParam',
typeParamName: 'V',
typeParamValue:
{
type: 'genericParam',
typeParamName: 'T',
},
},
],
},
},
{ name: 'number', type: 'integer' },
{ name: 'size', type: 'integer' },
{ name: 'totalPages', type: 'integer' },
{ name: 'totalElements', type: 'integer' },
],
},
];
export const genericTypeMap: { [name: string]: any } = {
'#/genericTypes/PageOf': {
name: 'PageOf',
type: 'genericClass',
typeParams: [
{ type: 'typeParam', typeParamName: 'T' },
],
propertyList: [
{
level: 'property',
name: 'content',
type: 'genericType',
typeKey: '#/genericTypes/List', //获取数据后要处理一下,加上typeKey字段
typeInstantiation: {
typeName: 'List',
typeParams: [
{
level: 'typeParam',
typeParamName: 'V',
typeParamValue:
{
type: 'genericParam',
typeParamName: 'T',
},
},
],
},
},
{ name: 'number', type: 'integer' },
{ name: 'size', type: 'integer' },
{ name: 'totalPages', type: 'integer' },
{ name: 'totalElements', type: 'integer' },
],
},
'#/genericTypes/ScopeOf': {
name: 'ScopeOf',
type: 'genericClass',
typeParams: [
{ type: 'typeParam', typeParamName: 'T' },
],
propertyList: [
{ name: 'item', type: 'genericParam', typeParamName: 'T' },
{ name: 'index', type: 'integer' },
{ name: 'rowIndex', type: 'integer' },
{ name: 'columnIndex', type: 'integer' },
{ name: 'value', type: 'string' },
],
},
'#/genericTypes/List': {
name: 'List',
type: 'genericClass',
typeParams: [
{ type: 'typeParam', typeParamName: 'T' },
],
propertyList: [
{ name: 'length', type: 'integer' },
],
},
};