Files
bettergi-scripts-list/repo/js/LinneaMining/utils/routes.js
躁动的氨气 ffe9d777c6 feat: 莉奈娅挖矿一条龙 (#3174)
* feat: 莉奈娅挖矿一条龙

* feat: 更新版本号

* fix: 修复一些问题

* feat: 清理路线

* feat: 添加选择
2026-05-01 21:30:13 +08:00

78 lines
2.2 KiB
JavaScript

/**
* 递归读取指定文件夹下的所有 JSON 文件
*
* @param {string} folderPath - 要扫描的文件夹路径
* @returns {string[]} 所有 JSON 文件的完整路径数组
*/
function readRouteFiles(folderPath) {
const files = [];
const entries = file.ReadPathSync(folderPath);
for (const entry of entries) {
if (file.IsFolder(entry)) {
files.push(...readRouteFiles(entry));
} else if (entry.endsWith(".json")) {
files.push(entry);
}
}
return files;
}
/**
* 获取 paths 目录下所有路线文件路径
*
* @returns {string[]} 所有路线文件的完整路径数组,读取失败返回空数组
*/
function getRoutes() {
try {
return readRouteFiles("paths");
} catch (err) {
log.error("获取路线文件时出错:", err);
return [];
}
}
/**
* 根据 tags 过滤路线,路线的所有 tag 都在排除列表中时才跳过
*
* @param {string[]} routePaths - 路线文件路径数组
* @param {string[]} excludedTags - 要排除的 tag 名称数组
* @returns {string[]} 过滤后的路线文件路径数组
*/
function filterByTags(routePaths, excludedTags) {
if (!excludedTags || excludedTags.length === 0) return routePaths;
return routePaths.filter(routePath => {
try {
const raw = file.readTextSync(routePath);
const data = JSON.parse(raw);
const tags = data.info?.tags;
if (!tags || tags.length === 0) return true;
return tags.some(tag => !excludedTags.includes(tag));
} catch {
return true;
}
});
}
/**
* 根据地区目录名过滤路线
*
* @param {string[]} routePaths - 路线文件路径数组
* @param {string[]} excludedRegions - 要排除的地区名称数组
* @returns {string[]} 过滤后的路线文件路径数组
*/
function filterByRegion(routePaths, excludedRegions) {
if (!excludedRegions || excludedRegions.length === 0) return routePaths;
return routePaths.filter(routePath => {
const parts = routePath.replace(/\\/g, '/').split('/');
const regionIdx = parts.indexOf("paths") + 1;
if (regionIdx >= parts.length) return true;
return !excludedRegions.includes(parts[regionIdx]);
});
}
export { getRoutes, filterByTags, filterByRegion };