| 955 | |
| 956 | //script&rewrite 转换成 Quantumult X |
| 957 | function SCP2QX(subs) { |
| 958 | var nrw = [] |
| 959 | var rw = "" |
| 960 | var RewriteK = [" url 302", " url 307", " url reject", " url script", " url req", " url res", " url echo", " url-and-header 302", " url-and-header 307", " url-and-header reject", " url-and-header script", " url-and-header req", " url-and-header res", " url-and-header echo"] // quantumult X 类型 rewrite |
| 961 | subs = subs.split("\n").map(x => x.trim().replace(/\s+/g," ")) |
| 962 | //$notify("Script","",subs) |
| 963 | for (var i = 0; i < subs.length; i++) { |
| 964 | try { |
| 965 | //$notify(i,"",subs[i]) |
| 966 | subs[i] = subs[i].replace("^http","http") // 去掉 ^ , 以方便去重 |
| 967 | if (subs[i].slice(0, 8) == "hostname") { |
| 968 | hn = subs[i].replace(/\%.*\%/g, "").replace(/\:\d*/g,"") |
| 969 | nrw.push(hn) |
| 970 | } |
| 971 | var SC = ["type=", ".js", "pattern=", "script-path="] |
| 972 | var NoteK = ["//", "#", ";"]; //排除注释项 |
| 973 | const sccheck = (item) => subs[i].indexOf(item) != -1 |
| 974 | const notecheck = (item) => subs[i].indexOf(item) == 0 |
| 975 | const RewriteCheck = (item) => subs[i].indexOf(item) != -1 ; // quanx 重写判定 |
| 976 | if (!NoteK.some(notecheck) && !RewriteK.some(RewriteCheck)){ |
| 977 | if (SC.every(sccheck)) { // surge js 新格式 |
| 978 | ptn = subs[i].replace(/\s/gi,"").split("pattern=")[1].split(",")[0] |
| 979 | js = subs[i].replace(/\s/gi,"").split("script-path=")[1].split(",")[0] |
| 980 | type = subs[i].replace(/\s/gi,"").split("type=")[1].split(",")[0].trim() |
| 981 | subsi = subs[i].replace(/ /g,"").replace(/\=true/g,"=1") |
| 982 | if (type == "http-response" && subsi.indexOf("requires-body=1") != -1) { |
| 983 | type = "script-response-body " |
| 984 | } else if (type == "http-response" && subsi.indexOf("requires-body=1") == -1) { |
| 985 | type = "script-response-header " |
| 986 | } else if (type == "http-request" && subsi.indexOf("requires-body=1") != -1) { |
| 987 | type = "script-request-body " |
| 988 | } else if (type == "http-request" && subsi.indexOf("requires-body=1") == -1) { |
| 989 | type = "script-request-header " |
| 990 | } else {type = "" } |
| 991 | if (type != "") { |
| 992 | rw = ptn + " url " + type + js |
| 993 | nrw.push(rw) |
| 994 | } |
| 995 | } else if (/\s30(7|2)$/.test(subs[i])) { //rewrite 302&307 复写(Surge) |
| 996 | //tpe = subs[i].indexOf(" 302") != -1? "302":"307" |
| 997 | //$notify("307/2",subs[i]) |
| 998 | rw = subs[i].split(" ")[0] + " url " + subs[i].split(" ")[2] + " " + subs[i].split(" ")[1].trim() |
| 999 | //if(rw.indexOf("307")!=-1) {$notify("XX",subs[i],rw.split(" "))} |
| 1000 | nrw.push(rw) |
| 1001 | } else if (/\s\-\s30(2|7)\s/.test(subs[i])) { //rewrite 302&307 复写(Shadowrocket) |
| 1002 | //xx - 302 $1$2$3 |
| 1003 | rw = subs[i].replace(" - "," url ") |
| 1004 | nrw.push(rw) |
| 1005 | } else if(subs[i].split(" ")[2] == "header") { // rewrite header 类型 |
| 1006 | var pget = subs[i].split(" ")[0].split(".com")[1] |
| 1007 | var pgetn = subs[i].split(" ")[1].split(".com")[1] |
| 1008 | rw = subs[i].split(" ")[0] + " url 302 " + subs[i].split(" ")[1] |
| 1009 | //rw = subs[i].split(" ")[0] + " url request-header ^GET " + pget +"(.+\\r\\n)Host:.+(\\r\\n) request-header GET " + pgetn + "$1Host: " + subs[i].split(" ")[1].split("://")[1].split(".com")[0] + ".com$2" |
| 1010 | nrw.push(rw) |
| 1011 | } else if(subs[i].split(" ")[1] == "header-replace") { // rewrite header-replace 类型 |
| 1012 | console.log(subs[i]) |
| 1013 | var pget = subs[i].split("header-replace")[1].split(":")[0].trim() |
| 1014 | var pgetn = subs[i].split("header-replace")[1].trim() |