@lcap/nasl
Version:
NetEase Application Specific Language
98 lines • 3.85 kB
JavaScript
;
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