mirror of
https://git.mirrors.martin98.com/https://github.com/sub-store-org/Sub-Store.git
synced 2025-08-12 04:29:00 +08:00
feat: 脚本筛选支持节点快捷脚本. 语法与 Shadowrocket 脚本类似
``` const port = Number($server.port) return [80, 443].includes(port) ```
This commit is contained in:
parent
a1776644a0
commit
76b5dc5809
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "sub-store",
|
"name": "sub-store",
|
||||||
"version": "2.14.119",
|
"version": "2.14.120",
|
||||||
"description": "Advanced Subscription Manager for QX, Loon, Surge, Stash and ShadowRocket.",
|
"description": "Advanced Subscription Manager for QX, Loon, Surge, Stash and ShadowRocket.",
|
||||||
"main": "src/main.js",
|
"main": "src/main.js",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
@ -605,6 +605,22 @@ function ScriptFilter(script, targetPlatform, $arguments, source) {
|
|||||||
})();
|
})();
|
||||||
return output;
|
return output;
|
||||||
},
|
},
|
||||||
|
nodeFunc: async (proxies) => {
|
||||||
|
let output = FULL(proxies.length, true);
|
||||||
|
await (async function () {
|
||||||
|
const filter = createDynamicFunction(
|
||||||
|
'filter',
|
||||||
|
`async function filter(proxies = []) {
|
||||||
|
return proxies.filter(($server = {}) => {
|
||||||
|
${script}
|
||||||
|
})
|
||||||
|
}`,
|
||||||
|
$arguments,
|
||||||
|
);
|
||||||
|
output = filter(proxies, targetPlatform, { source, ...env });
|
||||||
|
})();
|
||||||
|
return output;
|
||||||
|
},
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -635,7 +651,29 @@ async function ApplyFilter(filter, objs) {
|
|||||||
} catch (err) {
|
} catch (err) {
|
||||||
// print log and skip this filter
|
// print log and skip this filter
|
||||||
$.error(`Cannot apply filter ${filter.name}\n Reason: ${err}`);
|
$.error(`Cannot apply filter ${filter.name}\n Reason: ${err}`);
|
||||||
throw new Error(`脚本过滤失败 ${err.message ?? err}`);
|
let funcErr = '';
|
||||||
|
let funcErrMsg = `${err.message ?? err}`;
|
||||||
|
if (funcErrMsg.includes('$server is not defined')) {
|
||||||
|
funcErr = '';
|
||||||
|
} else {
|
||||||
|
funcErr = `执行 function filter 失败 ${funcErrMsg}; `;
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
selected = await filter.nodeFunc(objs);
|
||||||
|
} catch (err) {
|
||||||
|
$.error(
|
||||||
|
`Cannot apply filter ${filter.name}(node script)! Reason: ${err}`,
|
||||||
|
);
|
||||||
|
let nodeErr = '';
|
||||||
|
let nodeErrMsg = `${err.message ?? err}`;
|
||||||
|
if (funcErr && nodeErrMsg === funcErrMsg) {
|
||||||
|
nodeErr = '';
|
||||||
|
funcErr = `执行失败 ${funcErrMsg}`;
|
||||||
|
} else {
|
||||||
|
nodeErr = `执行节点快捷过滤脚本 失败 ${nodeErr}`;
|
||||||
|
}
|
||||||
|
throw new Error(`脚本过滤 ${funcErr}${nodeErr}`);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return objs.filter((_, i) => selected[i]);
|
return objs.filter((_, i) => selected[i]);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user