Skip to content

Commit 87c43fe

Browse files
committed
feat: mihomo 预处理器支持 proxies 为空的情况, 若 proxies 不合法, 多判断一下 proxy-groups 是否为数组
1 parent 4e17a36 commit 87c43fe

3 files changed

Lines changed: 39 additions & 3 deletions

File tree

backend/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "sub-store",
3-
"version": "2.36.3",
3+
"version": "2.36.4",
44
"description": "Advanced Subscription Manager for QX, Loon, Surge, Stash and Shadowrocket.",
55
"main": "src/main.js",
66
"packageManager": "pnpm@11.0.9",

backend/src/core/proxy-utils/preprocessors/index.js

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,10 @@ function Clash() {
111111
const test = function (raw) {
112112
if (!/proxies/.test(raw)) return false;
113113
const content = safeLoad(raw);
114-
return content.proxies && Array.isArray(content.proxies);
114+
return (
115+
Array.isArray(content.proxies) ||
116+
Array.isArray(content['proxy-groups'])
117+
);
115118
};
116119
const parse = function (raw, includeProxies) {
117120
// Clash YAML format
@@ -121,7 +124,7 @@ function Clash() {
121124
const { proxies } = safeLoad(afterReplace);
122125
return (
123126
(includeProxies ? 'proxies:\n' : '') +
124-
proxies
127+
(Array.isArray(proxies) ? proxies : [])
125128
.map((p) => {
126129
return `${includeProxies ? ' - ' : ''}${JSON.stringify(
127130
p,

backend/src/test/proxy-preprocessors/preprocessors.spec.js

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,39 @@ describe('Proxy preprocessors', function () {
114114
});
115115

116116
describe('Clash preprocessor', function () {
117+
it('accepts an empty proxies field', function () {
118+
const processor = getPreprocessor('Clash Pre-processor');
119+
const raw = `proxies:
120+
121+
proxy-groups:
122+
- name: Select
123+
type: select
124+
proxies:
125+
- DIRECT
126+
`;
127+
128+
expect(processor.test(raw)).to.equal(true);
129+
expect(processor.parse(raw)).to.equal('');
130+
expect(processor.parse(raw, true)).to.equal('proxies:\n');
131+
});
132+
133+
it('accepts a proxy groups array when proxies is invalid', function () {
134+
const processor = getPreprocessor('Clash Pre-processor');
135+
const raw = `proxies: invalid
136+
proxy-groups:
137+
- test
138+
`;
139+
140+
expect(processor.test(raw)).to.equal(true);
141+
expect(processor.parse(raw)).to.equal('');
142+
expect(
143+
processor.test('proxies: invalid\nproxy-groups: {}'),
144+
).to.equal(false);
145+
expect(processor.test('proxies: invalid\nrules: []')).to.equal(
146+
false,
147+
);
148+
});
149+
117150
it('converts clash yaml proxies into json lines', function () {
118151
const processor = getPreprocessor('Clash Pre-processor');
119152
const raw = `proxies:

0 commit comments

Comments
 (0)