UNPKG

@lcap/nasl

Version:

NetEase Application Specific Language

236 lines 12.1 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.upgrade = void 0; const nasl = __importStar(require("@lcap/nasl")); const excludedKeySet = new Set([ 'parentNode', 'sourceMap', 'storageJSON', 'tsErrorDetail', 'NaslAnnotatedJSON', 'calledFrom', '_events', '_collectingList', '_historyList', ]); const _2_14_components_1 = require("./2.14-components"); /** * 升级要点: * - 补充前端全局变量 * - 迁移绑定事件 * - 处理 scope 后缀 * - 处理 H5 loginButton 的特殊情况 * @param json 升级前的 JSON * @returns 升级后的 JSON */ function upgrade(json) { nasl.utils.traverse((current) => { if (current.node.concept === 'App') { if (!current.node.frontendVariables) { current.node.frontendVariables = []; } } if (current.node.concept === 'View' || current.node.concept === 'ViewElement') { if (current.node.name === 'loginButton') { current.node.staticStyle = current.node.staticStyle.replace('width: 25.6vw;', ''); } if (current.node.slotScope) { // console.log(current.node.slotTarget); if (current.node.slotTarget !== 'cell' && current.node.slotTarget !== 'item' && current.node.slotTarget !== 'default' && current.node.slotTarget !== 'expand-content' && current.node.slotTarget !== 'editcell') current.node.slotScope = undefined; } const eventMap = {}; const bindEvents = current.node.bindEvents; for (let i = 0; i < bindEvents.length; i++) { const bindEvent = bindEvents[i]; const firstBindEvent = eventMap[bindEvent.name]; if (!firstBindEvent) { eventMap[bindEvent.name] = bindEvent; } if (!bindEvent.logics) { bindEvent.logics = []; } if (bindEvent.calleeName) { let argStrs = []; let args = []; if (current.node.concept === 'ViewElement') { argStrs = current.stack.filter((item) => item.tag === 'template' && item.slotScope === 'scope').map((item, index) => item.slotScope + (index || '')); if (current.node.concept === 'ViewElement') argStrs.unshift('event'); args = argStrs.map((name) => ({ concept: 'Argument', expression: { concept: 'Identifier', name, }, })); if (bindEvent.calleeNamespace) { args = []; } else { const reversedStack = [...current.stack, current.node].reverse(); const view = reversedStack.find((item) => item.concept === 'View'); // console.log(current.stack.map((item) => `${item.concept}-${item.name}`).join(',') + '\n'); if (!view) { throw new Error('找不到页面!' + reversedStack.map((item) => `${item.concept}-${item.name}`).join(',')); } const logic = view.logics.find((logic) => logic.name === bindEvent.calleeName); // if (bindEvent.calleeName === 'TaskDefList') // console.log(bindEvent, view.name, view.logics.map((item) => item.name)); if (logic) { args = args.slice(0, logic.params.length); if (args.length < logic.params.length && logic.params.length === 2 && logic.params[1].name === 'scope') { console.log('splice', logic.params[1].name); logic.params.splice(1, 1); } // checkEventType const logicParam = logic.params[0]; let shouldType = _2_14_components_1.components[current.node.tag] && _2_14_components_1.components[current.node.tag][bindEvent.name]; if (!shouldType) shouldType = _2_14_components_1.commonEvents[bindEvent.name]; if (shouldType && logicParam && logicParam.typeAnnotation && logicParam.typeAnnotation.typeName !== shouldType.typeName) { console.log(`事件类型修复:${logic.name}@${bindEvent.name} ${logicParam.typeAnnotation.typeName} -> ${shouldType.typeName}`); logicParam.typeAnnotation = Object.assign({}, shouldType); } if (view.name === 'addRoleUser' && logic.name === 'remove') { const logicParam1 = logic.params[1]; if (logicParam1?.typeAnnotation.typeArguments[0].typeName === 'LoadAddRoleUserTableViewStructure') logicParam1.typeAnnotation.typeArguments[0].typeName = 'LoadURMTableViewStructure'; } } else { // 处理登录组件没有onSuccess的logic的问题 if (current.node.tag === 'lcap-login' && bindEvent.calleeName === 'onSuccess') { view.logics.push({ concept: 'Logic', name: 'onSuccess', typeParams: null, params: [ { concept: 'Param', name: 'event', typeAnnotation: { concept: 'TypeAnnotation', name: '', typeKind: 'reference', typeNamespace: 'nasl.ui', typeName: 'BaseEvent', typeArguments: null, }, }, ], returns: [], variables: [], body: [ { concept: 'Start', name: '', label: '开始', folded: false, }, { concept: 'JSBlock', name: '', label: 'JS 代码块', folded: false, code: "location.href = '/';", }, { concept: 'End', name: '', label: '结束', folded: false, }, ], playground: [], }); } } } } bindEvent.logics.push({ concept: 'Logic', name: bindEvent.calleeName, typeParams: null, params: [], returns: [], variables: [], body: [ { concept: 'Start', label: '开始', folded: false, }, { concept: 'CallLogic', label: '调用逻辑', folded: false, calleeNamespace: bindEvent.calleeNamespace, calleeName: bindEvent.calleeName, arguments: args, }, { concept: 'End', label: '结束', folded: false, }, ], playground: [], }); } bindEvent.calleeNamespace = undefined; bindEvent.calleeName = undefined; bindEvent.arguments = []; // 合并相同 Event if (firstBindEvent) { const newLogic = bindEvent.logics[0]; if (newLogic) { const oldNames = new Set(firstBindEvent.logics.map((logic) => logic.name)); if (oldNames.has(newLogic.name)) newLogic.name = nasl.utils.unique(newLogic.name, oldNames); firstBindEvent.logics.push(newLogic); } bindEvents.splice(i, 1); i--; } } } if (current.node.concept === 'Identifier') { if (current.node.name === 'scope') { const scopeIndex = current.stack.filter((item) => item.tag === 'template' && item.slotScope === 'scope').length; // 上面是有scope的长度,从1开始,下面是下标要减1 current.node.name = scopeIndex <= 1 ? 'scope' : `scope${scopeIndex - 1}`; } } }, { node: json }, { mode: 'anyObject', depthFirst: true, excludedKeySet }); return json; } exports.upgrade = upgrade; //# sourceMappingURL=2.14.js.map