UNPKG

@lcap/asl

Version:

NetEase Application Specific Language

160 lines (146 loc) 5.62 kB
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));