@lcap/asl
Version:
NetEase Application Specific Language
160 lines (146 loc) • 5.62 kB
JavaScript
const fs = require('fs');
const fileName = process.argv[2] || 'raw3.json';
const typeKey = process.argv[3] || '';
const ids = typeKey.split('/');
const serviceId = ids[1];
const structureId = ids[2];
const entityId = 'de414b47a08c427ca480368cada7c84e';
const json = JSON.parse(fs.readFileSync(fileName, 'utf8'));
const asl = require('../../out/types');
const deleteKeyIfHas = (obj, key) => {
if (obj.hasOwnProperty(key))
delete obj[key];
};
const replaceValueIfIncludes = (obj, key) => {
Object.keys(map).forEach((k) => {
const value = obj[key];
if (value && value.includes(k))
obj[key] = value.replace(k, map[k]);
});
};
const map = {
[structureId]: '<structureId>',
[entityId]: '<entityId>',
};
if (json.interfaces) {
const itface = json.interfaces[0];
itface.logic.body[1] = {
level: 'logicNode',
id: 'c548c9853be447d4b41ecf2d9c3eab77',
editable: true,
parentId: '7050e9843e344a37bedcb5cf88df1935',
logicId: '7ae480331b284d5ba633769b8109e320',
label: '调用查询组件',
folded: false,
type: 'CallQueryComponent',
logicName: 'logic1', // 前端传递,用于生成 structure,后端 ASL 不存储
serviceId: '50cb3871-5d24-44b9-a486-2c0f2b77ddbf', // 前端传递,用于生成 structure,后端 ASL 不存储
ideVersion: '1.7', // 前端传递,用于生成 structure,后端 ASL 不存储
structureRef: structureId, // 自动创建一个空的 Structure,与查询组件绑定
select: {
id: '7610022e1b094c98b997a48819737dbd',
level: 'expressionNode',
type: 'QuerySelectExpression',
editable: true,
logicId: '7ae480331b284d5ba633769b8109e320',
label: '查询组件Select子句',
folded: false,
parentId: 'c548c9853be447d4b41ecf2d9c3eab77',
parentAttr: 'select',
distinct: false, // true or false, eg: select distinct name from student
star: true, // true or false, eg: select * from student
selectElementList: [],
},
from: {
id: '078c456eedb011eba483acde48001122',
level: 'expressionNode',
type: 'QueryFromExpression',
logicId: '7ae480331b284d5ba633769b8109e320',
label: '查询组件From子句',
folded: false,
parentId: 'c548c9853be447d4b41ecf2d9c3eab77',
parentAttr: 'from',
entityRef: entityId,
asName: 'stu',
joinPartList: [],
},
limit: {
id: '5a351c59edb011ebb378acde48001122',
level: 'expressionNode',
type: 'QueryLimitExpression',
ideVersion: '1.7',
editable: true,
logicId: '7ae480331b284d5ba633769b8109e320',
label: '查询组件Limit子句',
folded: false,
parentId: 'c548c9853be447d4b41ecf2d9c3eab77',
parentAttr: 'limit',
limitElement: { // 可以是变量
id: 'cdb0d2bdedb011ebb5c0acde48001122',
level: 'expressionNode',
type: 'NumericLiteral',
ideVersion: '1.7',
editable: true,
logicId: '7ae480331b284d5ba633769b8109e320',
label: '原子项',
folded: false,
parentId: '5a351c59edb011ebb378acde48001122',
parentAttr: 'limitElement',
value: 20,
},
offsetElement: { // 可以是变量
id: 'cdb0d2bdedb011ebb5c0acde48001122',
level: 'expressionNode',
type: 'NumericLiteral',
ideVersion: '1.7',
editable: true,
logicId: '7ae480331b284d5ba633769b8109e320',
label: '原子项',
folded: false,
parentId: '5a351c59edb011ebb378acde48001122',
parentAttr: 'offsetElement',
value: 10,
},
},
};
}
asl.utils.traverse((current) => {
const node = current.node;
deleteKeyIfHas(node, 'ideVersion');
deleteKeyIfHas(node, 'editable');
deleteKeyIfHas(node, 'typeKey');
deleteKeyIfHas(node, 'createdTime');
if (node.id) {
map[node.id] = `<${node.level}Id>`;
if (node.code === 'ID_' + node.id)
node.code = 'ID_<auto>';
node.id = '<auto>';
}
if (node.playgroundId)
node.playgroundId = '<auto>';
if (node.parentId)
node.parentId = '<parentId>';
if (node.logicId)
node.logicId = '<logicId>';
if (node.elementId)
node.elementId = '<elementId>';
if (node.$ref === typeKey)
node.$ref = '<structureRef>';
if (node.level === 'interface') {
node.key = '#/<serviceId>/<auto>';
node.parameters = JSON.parse(node.parameters);
node.responses = JSON.parse(node.responses);
}
if (node.moduleType === 'microService')
node.moduleId = '<interfaceId>';
replaceValueIfIncludes(node, 'schemaRef');
replaceValueIfIncludes(node, 'code');
replaceValueIfIncludes(node, 'entityRef');
replaceValueIfIncludes(node, 'structureRef');
}, { node: json }, { mode: 'anyObject' });
if (json.interfaces) {
const itface = json.interfaces[0];
itface.parameters = JSON.stringify(itface.parameters);
itface.responses = JSON.stringify(itface.responses);
}
fs.writeFileSync(fileName.replace('raw', 'req'), JSON.stringify(json, null, 4));