MCPcopy Index your code
hub / github.com/Moli-X/Resources / SCP2QX

Function SCP2QX

Script/Parser.js:957–1053  ·  view source on GitHub ↗
(subs)

Source from the content-addressed store, hash-verified

955
956//script&rewrite 转换成 Quantumult X
957function 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()

Callers 1

SGMD2QXFunction · 0.85

Calls 4

$notifyFunction · 0.70
pushMethod · 0.45
indexOfMethod · 0.45
logMethod · 0.45

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…