From 250afb10a275d80f349264252616ca3520b31fca Mon Sep 17 00:00:00 2001
From: Peng-YM <1048217874pengym@gmail.com>
Date: Thu, 3 Sep 2020 16:16:28 +0800
Subject: [PATCH] Added script filter and script opeartor
---
backend/.idea/workspace.xml | 72 +++++++------
backend/sub-store.js | 22 ++--
web/package-lock.json | 150 +++-----------------------
web/package.json | 1 +
web/src/components/ScriptFilter.vue | 100 +++++++++++++++++
web/src/components/ScriptOperator.vue | 100 +++++++++++++++++
web/src/views/SubEditor.vue | 18 +++-
web/src/views/Subscription.vue | 4 +-
8 files changed, 286 insertions(+), 181 deletions(-)
create mode 100644 web/src/components/ScriptFilter.vue
create mode 100644 web/src/components/ScriptOperator.vue
diff --git a/backend/.idea/workspace.xml b/backend/.idea/workspace.xml
index 45b388a..5de1300 100644
--- a/backend/.idea/workspace.xml
+++ b/backend/.idea/workspace.xml
@@ -20,8 +20,14 @@
+
+
+
+
+
+
@@ -98,7 +104,7 @@
-
+
@@ -118,7 +124,7 @@
-
+
@@ -129,8 +135,8 @@
-
-
+
+
@@ -141,8 +147,8 @@
-
-
+
+
@@ -153,8 +159,8 @@
-
-
+
+
@@ -165,8 +171,8 @@
-
-
+
+
@@ -177,8 +183,8 @@
-
-
+
+
@@ -189,8 +195,8 @@
-
-
+
+
@@ -201,8 +207,8 @@
-
-
+
+
@@ -213,8 +219,8 @@
-
-
+
+
@@ -225,8 +231,8 @@
-
-
+
+
@@ -237,8 +243,8 @@
-
-
+
+
@@ -249,8 +255,8 @@
-
-
+
+
@@ -261,8 +267,8 @@
-
-
+
+
@@ -273,8 +279,8 @@
-
-
+
+
@@ -285,8 +291,8 @@
-
-
+
+
@@ -297,8 +303,8 @@
-
-
+
+
@@ -309,7 +315,7 @@
-
+
diff --git a/backend/sub-store.js b/backend/sub-store.js
index 7243791..aaf307d 100644
--- a/backend/sub-store.js
+++ b/backend/sub-store.js
@@ -139,7 +139,6 @@ async function parseSub(sub, platform) {
$.write(raw, `#${key}`);
} else {
raw = cache;
- console.log(`Cache hit`);
}
} else {
// always download from url
@@ -198,16 +197,19 @@ async function parseSub(sub, platform) {
for (const item of sub.process || []) {
// process script
if (item.type.indexOf("Script") !== -1) {
- if (item.args && item.args[0].indexOf("http") !== -1) {
- // if this is remote script
- item.args[0] = await $.http
- .get(item.args[0])
+ const {mode, content} = item.args;
+ if (mode === "link") {
+ // if this is remote script, download it
+ item.args = await $.http
+ .get(content)
.then((resp) => resp.body)
.catch((err) => {
throw new Error(
- `Error when downloading remote script: ${item.args[0]}.\n Reason: ${err}`
+ `Error when downloading remote script: ${item.args.content}.\n Reason: ${err}`
);
});
+ } else {
+ item.args = content;
}
}
if (item.type.indexOf("Filter") !== -1) {
@@ -1854,6 +1856,7 @@ function ScriptOperator(script) {
return {
name: "Script Operator",
func: (proxies) => {
+ let output = proxies;
(function () {
// interface to get internal operators
const $get = (name, args) => {
@@ -1865,8 +1868,9 @@ function ScriptOperator(script) {
}
};
eval(script);
- return func(proxies);
+ output = operator(proxies);
})();
+ return output;
},
};
}
@@ -1968,6 +1972,7 @@ function ScriptFilter(script) {
return {
name: "Script Filter",
func: (proxies) => {
+ let output = FULL(proxies.length, true);
!(function () {
// interface to get internal filters
const $get = (name, args) => {
@@ -1979,8 +1984,9 @@ function ScriptFilter(script) {
}
};
eval(script);
- return func(proxies);
+ output = filter(proxies);
})();
+ return output;
},
};
}
diff --git a/web/package-lock.json b/web/package-lock.json
index c7b8485..fa50656 100644
--- a/web/package-lock.json
+++ b/web/package-lock.json
@@ -1325,12 +1325,6 @@
"@types/node": "*"
}
},
- "@types/html-minifier-terser": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-5.1.0.tgz",
- "integrity": "sha512-iYCgjm1dGPRuo12+BStjd1HiVQqhlRhWDOQigNxn023HcjnhsiFz9pc6CzJj4HwDCSQca9bxTL4PxJDbkdm3PA==",
- "dev": true
- },
"@types/http-proxy": {
"version": "1.17.4",
"resolved": "https://registry.npm.taobao.org/@types/http-proxy/download/@types/http-proxy-1.17.4.tgz?cache=0&sync_timestamp=1596839386031&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fhttp-proxy%2Fdownload%2F%40types%2Fhttp-proxy-1.17.4.tgz",
@@ -3160,16 +3154,6 @@
"integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=",
"dev": true
},
- "camel-case": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.1.tgz",
- "integrity": "sha512-7fa2WcG4fYFkclIvEmxBbTvmibwF2/agfEBc6q3lOpVu0A13ltLsA+Hr/8Hp6kp5f+G7hKi6t8lys6XxP+1K6Q==",
- "dev": true,
- "requires": {
- "pascal-case": "^3.1.1",
- "tslib": "^1.10.0"
- }
- },
"camelcase": {
"version": "6.0.0",
"resolved": "https://registry.npm.taobao.org/camelcase/download/camelcase-6.0.0.tgz?cache=0&sync_timestamp=1589682790492&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcamelcase%2Fdownload%2Fcamelcase-6.0.0.tgz",
@@ -4602,16 +4586,6 @@
"domelementtype": "1"
}
},
- "dot-case": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.3.tgz",
- "integrity": "sha512-7hwEmg6RiSQfm/GwPL4AAWXKy3YNNZA3oFv2Pdiey0mwkRCPZ9x6SZbkLcn8Ma5PYeVokzoD4Twv2n7LKp5WeA==",
- "dev": true,
- "requires": {
- "no-case": "^3.0.3",
- "tslib": "^1.10.0"
- }
- },
"dot-prop": {
"version": "5.2.0",
"resolved": "https://registry.npm.taobao.org/dot-prop/download/dot-prop-5.2.0.tgz?cache=0&sync_timestamp=1597574828045&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdot-prop%2Fdownload%2Fdot-prop-5.2.0.tgz",
@@ -6047,83 +6021,12 @@
}
}
},
- "html-minifier-terser": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz",
- "integrity": "sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg==",
- "dev": true,
- "requires": {
- "camel-case": "^4.1.1",
- "clean-css": "^4.2.3",
- "commander": "^4.1.1",
- "he": "^1.2.0",
- "param-case": "^3.0.3",
- "relateurl": "^0.2.7",
- "terser": "^4.6.3"
- },
- "dependencies": {
- "commander": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
- "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==",
- "dev": true
- }
- }
- },
"html-tags": {
"version": "3.1.0",
"resolved": "https://registry.npm.taobao.org/html-tags/download/html-tags-3.1.0.tgz",
"integrity": "sha1-e15vfmZen7QfMAB+2eDUHpf7IUA=",
"dev": true
},
- "html-webpack-inline-source-plugin": {
- "version": "0.0.10",
- "resolved": "https://registry.npmjs.org/html-webpack-inline-source-plugin/-/html-webpack-inline-source-plugin-0.0.10.tgz",
- "integrity": "sha512-0ZNU57u7283vrXSF5a4VDnVOMWiSwypKIp1z/XfXWoVHLA1r3Xmyxx5+Lz+mnthz/UvxL1OAf41w5UIF68Jngw==",
- "dev": true,
- "requires": {
- "escape-string-regexp": "^1.0.5",
- "slash": "^1.0.0",
- "source-map-url": "^0.4.0"
- },
- "dependencies": {
- "slash": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz",
- "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=",
- "dev": true
- }
- }
- },
- "html-webpack-plugin": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-4.3.0.tgz",
- "integrity": "sha512-C0fzKN8yQoVLTelcJxZfJCE+aAvQiY2VUf3UuKrR4a9k5UMWYOtpDLsaXwATbcVCnI05hUS7L9ULQHWLZhyi3w==",
- "dev": true,
- "requires": {
- "@types/html-minifier-terser": "^5.0.0",
- "@types/tapable": "^1.0.5",
- "@types/webpack": "^4.41.8",
- "html-minifier-terser": "^5.0.1",
- "loader-utils": "^1.2.3",
- "lodash": "^4.17.15",
- "pretty-error": "^2.1.1",
- "tapable": "^1.1.3",
- "util.promisify": "1.0.0"
- },
- "dependencies": {
- "util.promisify": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz",
- "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==",
- "dev": true,
- "requires": {
- "define-properties": "^1.1.2",
- "object.getownpropertydescriptors": "^2.0.3"
- }
- }
- }
- },
"htmlparser2": {
"version": "3.10.1",
"resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz",
@@ -7176,15 +7079,6 @@
"js-tokens": "^3.0.0 || ^4.0.0"
}
},
- "lower-case": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.1.tgz",
- "integrity": "sha512-LiWgfDLLb1dwbFQZsSglpRj+1ctGnayXz3Uv0/WO8n558JycT5fg6zkNcnW0G68Nn0aEldTFeEfmjCfmqry/rQ==",
- "dev": true,
- "requires": {
- "tslib": "^1.10.0"
- }
- },
"lru-cache": {
"version": "5.1.1",
"resolved": "https://registry.npm.taobao.org/lru-cache/download/lru-cache-5.1.1.tgz?cache=0&sync_timestamp=1594427582110&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flru-cache%2Fdownload%2Flru-cache-5.1.1.tgz",
@@ -7520,6 +7414,20 @@
"minimist": "^1.2.5"
}
},
+ "monaco-editor": {
+ "version": "0.19.3",
+ "resolved": "https://registry.npmjs.org/monaco-editor/-/monaco-editor-0.19.3.tgz",
+ "integrity": "sha512-2n1vJBVQF2Hhi7+r1mMeYsmlf18hjVb6E0v5SoMZyb4aeOmYPKun+CE3gYpiNA1KEvtSdaDHFBqH9d7Wd9vREg=="
+ },
+ "monaco-editor-vue": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/monaco-editor-vue/-/monaco-editor-vue-1.0.10.tgz",
+ "integrity": "sha512-FO6rioCXkonKmDZYB2WDhDNekXuNJgjxoAPfzwYX+5NTMaxRJcWl3bcUByRpL6LQQ1bTEYLZ+ZdDpoJ+la2trQ==",
+ "requires": {
+ "monaco-editor": "^0.19.3",
+ "vue": "^2.6.11"
+ }
+ },
"move-concurrently": {
"version": "1.0.1",
"resolved": "https://registry.npm.taobao.org/move-concurrently/download/move-concurrently-1.0.1.tgz",
@@ -7623,16 +7531,6 @@
"integrity": "sha1-ozeKdpbOfSI+iPybdkvX7xCJ42Y=",
"dev": true
},
- "no-case": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.3.tgz",
- "integrity": "sha512-ehY/mVQCf9BL0gKfsJBvFJen+1V//U+0HQMPrWct40ixE4jnv0bfvxDbWtAHL9EcaPEOJHVVYKoQn1TlZUB8Tw==",
- "dev": true,
- "requires": {
- "lower-case": "^2.0.1",
- "tslib": "^1.10.0"
- }
- },
"node-forge": {
"version": "0.9.0",
"resolved": "https://registry.npm.taobao.org/node-forge/download/node-forge-0.9.0.tgz",
@@ -8083,16 +7981,6 @@
"readable-stream": "^2.1.5"
}
},
- "param-case": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.3.tgz",
- "integrity": "sha512-VWBVyimc1+QrzappRs7waeN2YmoZFCGXWASRYX1/rGHtXqEcrGEIDm+jqIwFa2fRXNgQEwrxaYuIrX0WcAguTA==",
- "dev": true,
- "requires": {
- "dot-case": "^3.0.3",
- "tslib": "^1.10.0"
- }
- },
"parent-module": {
"version": "1.0.1",
"resolved": "https://registry.npm.taobao.org/parent-module/download/parent-module-1.0.1.tgz",
@@ -8156,16 +8044,6 @@
"integrity": "sha1-naGee+6NEt/wUT7Vt2lXeTvC6NQ=",
"dev": true
},
- "pascal-case": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.1.tgz",
- "integrity": "sha512-XIeHKqIrsquVTQL2crjq3NfJUxmdLasn3TYOU0VBM+UX2a6ztAWBlJQBePLGY7VHW8+2dRadeIPK5+KImwTxQA==",
- "dev": true,
- "requires": {
- "no-case": "^3.0.3",
- "tslib": "^1.10.0"
- }
- },
"pascalcase": {
"version": "0.1.1",
"resolved": "https://registry.npm.taobao.org/pascalcase/download/pascalcase-0.1.1.tgz",
diff --git a/web/package.json b/web/package.json
index 8d8c123..cdf605f 100644
--- a/web/package.json
+++ b/web/package.json
@@ -14,6 +14,7 @@
"core-js": "^3.6.5",
"lodash": "^4.17.20",
"material-design-icons-iconfont": "^5.0.1",
+ "monaco-editor-vue": "^1.0.10",
"v-clipboard": "^2.2.3",
"vue": "^2.6.11",
"vue-router": "^3.4.3",
diff --git a/web/src/components/ScriptFilter.vue b/web/src/components/ScriptFilter.vue
new file mode 100644
index 0000000..1400180
--- /dev/null
+++ b/web/src/components/ScriptFilter.vue
@@ -0,0 +1,100 @@
+
+
+
+ flag
+ 脚本过滤器
+
+
+ keyboard_arrow_up
+
+
+ keyboard_arrow_down
+
+
+ mdi-delete
+
+
+
+
+ help
+
+
+
+
+ 脚本过滤器
+
+
+ 用一段脚本过滤节点,可以提供脚本链接或者直接输入脚本。
+
+
+
+
+
+ 输入
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/web/src/components/ScriptOperator.vue b/web/src/components/ScriptOperator.vue
new file mode 100644
index 0000000..750fab7
--- /dev/null
+++ b/web/src/components/ScriptOperator.vue
@@ -0,0 +1,100 @@
+
+
+
+ flag
+ 脚本过滤器
+
+
+ keyboard_arrow_up
+
+
+ keyboard_arrow_down
+
+
+ mdi-delete
+
+
+
+
+ help
+
+
+
+
+ 脚本操作
+
+
+ 用一段脚本操作节点,可以提供脚本链接或者直接输入脚本。
+
+
+
+
+
+ 输入
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/web/src/views/SubEditor.vue b/web/src/views/SubEditor.vue
index 28804bc..a89b7f8 100644
--- a/web/src/views/SubEditor.vue
+++ b/web/src/views/SubEditor.vue
@@ -165,6 +165,8 @@ import RegexRenameOperator from "@/components/RegexRenameOperator";
import KeywordDeleteOperator from "@/components/KeywordDeleteOperator";
import RegexDeleteOperator from "@/components/RegexDeleteOperator";
import FlagOperator from "@/components/FlagOperator";
+import ScriptFilter from "@/components/ScriptFilter";
+import ScriptOperator from "@/components/ScriptOperator";
const AVAILABLE_PROCESSORS = {
"Flag Operator": {
@@ -207,6 +209,14 @@ const AVAILABLE_PROCESSORS = {
component: "RegexDeleteOperator",
name: "删除正则"
},
+ "Script Filter": {
+ component: "ScriptFilter",
+ name: "脚本过滤器"
+ },
+ "Script Operator": {
+ component: "ScriptOperator",
+ name: "脚本操作"
+ }
}
export default {
@@ -220,7 +230,9 @@ export default {
KeywordRenameOperator,
RegexRenameOperator,
KeywordDeleteOperator,
- RegexDeleteOperator
+ RegexDeleteOperator,
+ ScriptFilter,
+ ScriptOperator
},
data: function () {
return {
@@ -298,7 +310,9 @@ export default {
},
dataChanged(content) {
- this.options.process[content.idx].args = content.args;
+ const process = this.options.process[content.idx];
+ process.args = content.args;
+ this.options.process.splice(content.idx, 1, process);
},
addProcess(type) {
diff --git a/web/src/views/Subscription.vue b/web/src/views/Subscription.vue
index ebc4d8a..e020dcf 100644
--- a/web/src/views/Subscription.vue
+++ b/web/src/views/Subscription.vue
@@ -138,7 +138,7 @@
节点列表
-
+
refresh
@@ -229,7 +229,7 @@ export default {
preview(item, type = 'sub') {
if (type === 'sub') {
this.url = `${BACKEND_BASE}/download/${item.name}`;
- this.sub = [item.url];
+ this.sub = item.url;
} else {
this.url = `${BACKEND_BASE}/download/collection/${item.name}`
}