@lcap/nasl
Version:
NetEase Application Specific Language
56 lines • 1.93 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.mergeNaslObj = void 0;
const nasl_concepts_1 = require("@lcap/nasl-concepts");
function getParentKeyAndParentPath(nodePath) {
const lastIndex = nodePath.lastIndexOf('.');
// 获取parentNodePath
const parentNodePath = nodePath.substring(0, lastIndex);
// 获取parentKey
const namePath = nodePath.substring(lastIndex + 1);
const parentKeyMatch = namePath.match(/([^\.\[\]]+)\[/);
const parentKey = parentKeyMatch ? parentKeyMatch[1] : null;
return {
parentKey,
parentNodePath,
};
}
/**
* 合并 Nasl 对象
* @param app
*/
function mergeNaslObj(fileNodes) {
const app = (fileNodes.find(node => node.nodePath === 'app')).nasl;
const map = {};
for (const node of fileNodes) {
map[node.nodePath] = node.nasl;
}
for (const node of fileNodes) {
const { parentNodePath, parentKey } = getParentKeyAndParentPath(node.nodePath);
if (!parentNodePath) {
continue;
}
const parentNode = map[parentNodePath] || (0, nasl_concepts_1.findNodeObjectByPath)(app, parentNodePath || '');
if (parentNode) {
const parentArray = parentNode[parentKey];
if (Array.isArray(parentArray)) {
// 检查是否已存在相同name的对象
const exists = parentArray.some(item => item.name === node.nasl.name);
if (exists) {
throw new Error(`名称 '${node.nasl.name}' 已存在,重复添加!`);
}
parentArray.push(node.nasl);
}
else {
console.error(node, 888);
}
}
else {
console.error(node, 999);
}
}
// console.log(app, 666);
return app;
}
exports.mergeNaslObj = mergeNaslObj;
//# sourceMappingURL=split.js.map