UNPKG

@lcap/nasl

Version:

NetEase Application Specific Language

98 lines 3.85 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getFullAnnotationData = exports.getAnnotationErrorMessage = exports.isFrontendNode = exports.moduleGraphCacheToMap = exports.createModuleGraphByAnnotation = exports.createNaslServer = exports.LogEventName = void 0; const nasl_utils_1 = require("@lcap/nasl-utils"); const nasl_language_server_core_1 = require("@lcap/nasl-language-server-core"); const server_1 = require("../../server"); const config_1 = require("../../config"); const nasl_concepts_1 = require("@lcap/nasl-concepts"); const types_1 = require("./types"); exports.LogEventName = 'Nasl Server'; /** 生成 NaslServer */ async function createNaslServer(axios, uiData, logger = nasl_utils_1.internalLogger) { const naslServer = new server_1.NaslServer({ http: axios, logger, isAnnotationMode: true, }); naslServer.semData = new nasl_concepts_1.SemanticData(); naslServer.semEnv = null; config_1.config.baseURL = axios.defaults.baseURL ?? ''; config_1.config.allNodesAPI = uiData.allNodesAPI; await naslServer.start(); uiData && await naslServer.createUiTs(uiData.needTSComponents, uiData); await logger.info(exports.LogEventName, '语言服务创建成功'); return naslServer; } exports.createNaslServer = createNaslServer; /** 全量标注生成模块图 */ function createModuleGraphByAnnotation(data) { const moduleGraph = nasl_language_server_core_1.ModuleGraph.fromNaslData(data); moduleGraph.getModules().forEach((mod) => { if (mod.name === 'app') { return; } if ('toEmbeddedDeclarationTSFile' in mod.node) { mod.updateSignature(mod.node.toEmbeddedDeclarationTSFile().code); } }); return moduleGraph.toData(); } exports.createModuleGraphByAnnotation = createModuleGraphByAnnotation; function moduleGraphCacheToMap(data) { const result = new Map(); for (const node of Object.keys(data.modules ?? [])) { result.set(node, Object.assign(data.modules[node], { node })); } return result; } exports.moduleGraphCacheToMap = moduleGraphCacheToMap; /** 是前端节点 */ function isFrontendNode(node) { return (nasl_concepts_1.asserts.isStrictView(node) || nasl_concepts_1.asserts.isStrictFrontend(node) || nasl_concepts_1.asserts.isStrictFrontendType(node) || nasl_concepts_1.asserts.isStrictBusinessComponent(node)); } exports.isFrontendNode = isFrontendNode; /** 获取错误文本 */ function getAnnotationErrorMessage(err) { const msg = { [types_1.IncrementalErrorCode.CircularModule]: '发现未处理的循环引用', [types_1.IncrementalErrorCode.Runtime]: '运行时错误', [types_1.IncrementalErrorCode.Unknown]: '未知错误', }; if (typeof err === 'number' && msg[err]) { return { code: err, message: msg[err], }; } else if (err instanceof Error) { return { code: types_1.IncrementalErrorCode.Runtime, message: (err.stack ?? err.message ?? err.toString()), }; } else { return { code: types_1.IncrementalErrorCode.Unknown, message: err, }; } } exports.getAnnotationErrorMessage = getAnnotationErrorMessage; /** 生成全量标注数据 */ function getFullAnnotationData(app, naslServer, typesMap) { /** 节点到全量标注数据映射 */ const NodeToJsonMap = new Map(); /** 全量标注数据 */ const annotationJSON = app._toJSON((source, instance) => { NodeToJsonMap.set(instance, source); return source; }); naslServer.annotationToJson(typesMap, NodeToJsonMap); return annotationJSON; } exports.getFullAnnotationData = getFullAnnotationData; //# sourceMappingURL=utils.js.map