Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions backend/bundle-esbuild.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,10 @@ const { build } = require('esbuild');
src: 'src/products/resource-parser.loon.js',
dest: 'dist/sub-store-parser.loon.min.js',
},
{
src: 'src/products/resource-parser.js',
dest: 'dist/sub-store-parser.min.js',
},
{
src: 'src/products/cron-sync-artifacts.js',
dest: 'dist/cron-sync-artifacts.min.js',
Expand Down
61 changes: 61 additions & 0 deletions backend/src/products/resource-parser.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
/* eslint-disable no-undef */
import { ProxyUtils } from '@/core/proxy-utils';
import { RuleUtils } from '@/core/rule-utils';
import { version } from '../../package.json';

let result = '';
let resource = typeof $resource !== 'undefined' ? $resource : '';
let resourceType = typeof $resourceType !== 'undefined' ? $resourceType : '';
let targetPlatform = typeof $targetPlatform !== 'undefined' ? $targetPlatform : '';

!(async () => {
console.log(
`
┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅
Sub-Store -- v${version}
┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅
`,
);

let arg;
if (typeof $argument != 'undefined') {
arg = Object.fromEntries(
$argument.split('&').map((item) => item.split('=')),
);
} else {
arg = {};
}

console.log(`arg: ${JSON.stringify(arg)}`);

const RESOURCE_TYPE = {
PROXY: 1,
RULE: 2,
};

if (resourceType === RESOURCE_TYPE.PROXY) {
try {
let proxies = ProxyUtils.parse(resource);
result = ProxyUtils.produce(proxies, targetPlatform, undefined, {
'include-unsupported-proxy':false,
});
} catch (e) {
console.log('解析器: 使用 resource 出现错误');
console.log(e.message ?? e);
}
} else if (resourceType === RESOURCE_TYPE.RULE) {
try {
const rules = RuleUtils.parse(resource);
result = RuleUtils.produce(rules, targetPlatform);
} catch (e) {
console.log(e.message ?? e);
}
}
})()
.catch(async (e) => {
console.log('解析器: 出现错误');
console.log(e.message ?? e);
})
.finally(() => {
$done(result || '');
});
41 changes: 22 additions & 19 deletions backend/src/vendor/open-api.js
Original file line number Diff line number Diff line change
Expand Up @@ -47,10 +47,13 @@ export class OpenAPI {
this.http = HTTP();
this.env = ENV();

const isNode = this.env.isNode && Object.values(this.env).filter((a) => a).length == 1;

if (isNode) {
const dotenv = eval(`require("dotenv")`);
dotenv.config();
}

this.node = (() => {
if (isNode) {
const fs = eval("require('fs')");
Expand Down Expand Up @@ -80,13 +83,13 @@ export class OpenAPI {
initCache() {
if (isQX)
this.cache = JSON.parse($prefs.valueForKey(this.name) || '{}');
if (isLoon || isSurge)
else if (isLoon || isSurge)
this.cache = JSON.parse($persistentStore.read(this.name) || '{}');
if (isGUIforCores)
else if (isGUIforCores)
this.cache = JSON.parse(
$Plugins.SubStoreCache.get(this.name) || '{}',
);
if (isNode) {
else if (isNode) {
// create a json for root cache
const basePath =
eval('process.env.SUB_STORE_DATA_BASE_PATH') || '.';
Expand Down Expand Up @@ -157,9 +160,9 @@ export class OpenAPI {
persistCache() {
const data = JSON.stringify(this.cache, null, 2);
if (isQX) $prefs.setValueForKey(data, this.name);
if (isLoon || isSurge) $persistentStore.write(data, this.name);
if (isGUIforCores) $Plugins.SubStoreCache.set(this.name, data);
if (isNode) {
else if (isLoon || isSurge) $persistentStore.write(data, this.name);
else if (isGUIforCores) $Plugins.SubStoreCache.set(this.name, data);
else if (isNode) {
const basePath =
eval('process.env.SUB_STORE_DATA_BASE_PATH') || '.';

Expand All @@ -185,13 +188,13 @@ export class OpenAPI {
if (isSurge || isLoon) {
return $persistentStore.write(data, key);
}
if (isQX) {
else if (isQX) {
return $prefs.setValueForKey(data, key);
}
if (isNode) {
else if (isNode) {
this.root[key] = data;
}
if (isGUIforCores) {
else if (isGUIforCores) {
return $Plugins.SubStoreCache.set(key, data);
}
} else {
Expand All @@ -207,13 +210,13 @@ export class OpenAPI {
if (isSurge || isLoon) {
return $persistentStore.read(key);
}
if (isQX) {
else if (isQX) {
return $prefs.valueForKey(key);
}
if (isNode) {
else if (isNode) {
return this.root[key];
}
if (isGUIforCores) {
else if (isGUIforCores) {
return $Plugins.SubStoreCache.get(key);
}
} else {
Expand All @@ -228,13 +231,13 @@ export class OpenAPI {
if (isSurge || isLoon) {
return $persistentStore.write(null, key);
}
if (isQX) {
else if (isQX) {
return $prefs.removeValueForKey(key);
}
if (isNode) {
else if (isNode) {
delete this.root[key];
}
if (isGUIforCores) {
else if (isGUIforCores) {
return $Plugins.SubStoreCache.remove(key);
}
} else {
Expand All @@ -249,7 +252,7 @@ export class OpenAPI {
const mediaURL = options['media-url'];

if (isQX) $notify(title, subtitle, content, options);
if (isSurge) {
else if (isSurge) {
$notification.post(
title,
subtitle,
Expand All @@ -259,7 +262,7 @@ export class OpenAPI {
},
);
}
if (isLoon) {
else if (isLoon) {
let opts = {};
if (openURL) opts['openUrl'] = openURL;
if (mediaURL) opts['mediaUrl'] = mediaURL;
Expand All @@ -269,7 +272,7 @@ export class OpenAPI {
$notification.post(title, subtitle, content, opts);
}
}
if (isNode) {
else if (isNode) {
const content_ =
content +
(openURL ? `\n点击跳转: ${openURL}` : '') +
Expand Down Expand Up @@ -335,7 +338,7 @@ export class OpenAPI {
}
}
}
if (isGUIforCores) {
else if (isGUIforCores) {
$Plugins.Notify(title, subtitle + '\n' + content);
}
}
Expand Down