@lcap/asl
Version:
NetEase Application Specific Language
69 lines (60 loc) • 2.27 kB
text/typescript
import { Schema } from '..';
import { basicTypeMap, basicTypeList } from './basicTypes';
import { systemTypeList, systemTypeMap } from './systemTypes';
import { getGenericList } from './genericTypes';
import { cloneDeep } from 'lodash';
export const dataTypeList: Array<{
title: string,
children: Array<{ kind: string, text: string, value: string }>
}>
= [
{ title: '基础类型', children: basicTypeList },
{ title: '自定义类型', children: [] },
{ title: '平台类型', children: systemTypeList },
];
export const dataTypesMap: { [name: string]: Schema } = {
...basicTypeMap,
...systemTypeMap,
};
export function updateDataTypeList() {
dataTypeList[1].children = Object.keys(dataTypesMap)
.filter((key) => !key.includes('#/basicTypes') && !key.includes('#/systemTypes') && !key.includes('#/genericTypes'))
.map((key) => {
const dataType = dataTypesMap[key];
return { kind: (dataType as any).level, text: dataType.name, value: key };
});
}
export function properties2PropertyList(definition: any) {
if (!definition)
return definition;
definition = cloneDeep(definition);
if (definition.properties) {
const propertyList: any[] = definition.propertyList = [];
Object.values(definition.properties).forEach((item) => {
propertyList.push(properties2PropertyList(item));
});
}
if (definition.items) {
definition.items = properties2PropertyList(definition.items);
}
return definition;
}
export async function updateGenericTypeList() {
const datatypes = await getGenericList();
dataTypeList[2].children = datatypes.genericTypeList.concat(dataTypeList[2].children);
Object.assign(dataTypesMap, datatypes.genericTypemap);
}
export function findDataTypeDescription(schema: Schema) {
let i = 0;
while (i < dataTypeList.length) {
const dlist = dataTypeList[i];
const finded = dlist.children.find((type) => type.value === schema.typeKey);
if (finded) {
return finded;
}
i++;
}
}
export function isBasicType(schema: Schema) {
return !!dataTypeList[0].children.find((type) => type.value === schema.typeKey);
}