@lcap/nasl
Version:
NetEase Application Specific Language
86 lines • 3.19 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.getAppTree = exports.updateCheckNaslCache = void 0;
const split_1 = require("./split");
const nasl_utils_1 = require("@lcap/nasl-utils");
/** 禁用模式 */
const disabled = nasl_utils_1.isNode || nasl_utils_1.isAutoTestEnv;
const getAppTreePaths = (obj, parentPath = '') => {
let paths = [];
for (let key in obj) {
if (Array.isArray(obj[key])) {
obj[key].forEach((item) => {
let newPath = parentPath ? `${parentPath}.${key}[name=${item.name}]` : `${key}[name=${item.name}]`;
paths.push(newPath);
paths = paths.concat(getAppTreePaths(item, newPath));
});
}
else if (typeof obj[key] === 'object') {
let newPath = parentPath ? `${parentPath}.${key}` : `${key}`;
paths = paths.concat(getAppTreePaths(obj[key], newPath));
}
}
return paths;
};
/**
* 取出缓存
*
* @description 只是取出缓存,并不校验缓存的有效性
*/
async function updateCheckNaslCache(allData, incrNasls) {
// 没有更新的长度就return掉
if (!incrNasls?.length) {
console.dir('检测无更新,使用 Nasl 前端缓存');
return allData;
}
// 有更新,就把更新,替换缓存
const updateData = [];
const deleteData = [];
(incrNasls || []).forEach((item) => {
const findIndex = allData.findIndex(cacheItem => item.path === cacheItem.nodePath);
if (item.type === 'delete') {
allData.splice(findIndex, 1);
deleteData.push(item.path);
}
else {
const newItem = {
nasl: item.nasl,
nodePath: item.path,
_changedTime: item.nasl._changedTime,
};
updateData.push(newItem);
if (findIndex !== -1) {
allData.splice(findIndex, 1, newItem);
}
else {
allData.unshift(newItem);
}
}
});
// 更新缓存
// 需要 await ,存储后,在进行下面的排序 和 合并 nasl ,合并 nasl 会改变对象中的值
await window?.$IndexedDBHelper.storeDataBatch(updateData);
window?.$IndexedDBHelper.storeDataRemoveBatch(deleteData);
return allData;
}
exports.updateCheckNaslCache = updateCheckNaslCache;
function getAppTree(allData, appTree) {
// 进行排序
if (appTree) {
// 因为 indexdb 拿出来的数据 都是没有顺序的,所以这里要按照 服务端返回的 nasl 的顺序来排列
// 解析 appTree 对象,获取路径的顺序
// 获取 appTree 的顺序
let paths = getAppTreePaths(appTree, 'app');
// 根据路径的顺序对 aaa 进行排序
allData.sort((a, b) => {
let indexA = paths.indexOf(a.nodePath);
let indexB = paths.indexOf(b.nodePath);
return indexA - indexB;
});
}
// 合并 nasl
const batchQueryRes = (0, split_1.mergeNaslObj)(allData);
return batchQueryRes;
}
exports.getAppTree = getAppTree;
//# sourceMappingURL=index.js.map