mirror of
https://github.com/bolucat/Archive.git
synced 2026-04-23 00:17:16 +08:00
185 lines
4.5 KiB
JavaScript
185 lines
4.5 KiB
JavaScript
import CONST from "./const.js";
|
|
import URI from "urijs";
|
|
|
|
function _locateServer(touch, whichServer) {
|
|
let ind = whichServer.id - 1;
|
|
let sub = whichServer.sub;
|
|
if (whichServer._type === CONST.ServerType) {
|
|
return touch.servers[ind];
|
|
} else if (whichServer._type === CONST.SubscriptionServerType) {
|
|
return touch.subscriptions[sub].servers[ind];
|
|
}
|
|
return null;
|
|
}
|
|
|
|
function locateServer(touch, whichServer) {
|
|
if (whichServer instanceof Array) {
|
|
const servers = [];
|
|
for (const w of whichServer) {
|
|
const server = _locateServer(touch, w);
|
|
if (server) {
|
|
servers.push(server);
|
|
}
|
|
}
|
|
return servers;
|
|
}
|
|
return _locateServer(touch, whichServer);
|
|
}
|
|
|
|
function handleResponse(res, that, suc, err, fail) {
|
|
if (!res.data) {
|
|
if (err && err instanceof Function) {
|
|
err.apply(that);
|
|
}
|
|
return;
|
|
}
|
|
if (res.data.code === "SUCCESS") {
|
|
suc.apply(that);
|
|
} else {
|
|
if (err && err instanceof Function) {
|
|
err.apply(that);
|
|
} else {
|
|
if (fail && fail instanceof Function) {
|
|
fail.apply(that);
|
|
} else {
|
|
that.$buefy.toast.open({
|
|
message: res.data.message,
|
|
type: "is-warning",
|
|
position: "is-top",
|
|
queue: false,
|
|
duration: 5000,
|
|
});
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/*
|
|
var myURL = parseURL('http://user:pass@abc.com:8080/dir/index.html?id=255&m=hello#top');
|
|
myURL.username; // = 'user'
|
|
myURL.password; // = 'pass'
|
|
myURL.file; // = 'index.html'
|
|
myURL.hash; // = 'top'
|
|
myURL.host; // = 'abc.com'
|
|
myURL.query; // = '?id=255&m=hello'
|
|
myURL.params; // = Object = { id: 255, m: hello }
|
|
myURL.path; // = '/dir/index.html'
|
|
myURL.segments; // = Array = ['dir', 'index.html']
|
|
myURL.port; // = '8080'
|
|
myURL.protocol; // = 'http'
|
|
myURL.source; // = 'http://user:pass@abc.com:8080/dir/index.html?id=255&m=hello#top'
|
|
*/
|
|
function parseURL(u) {
|
|
let url = u;
|
|
let protocol = "";
|
|
let fakeProto = false;
|
|
if (url.indexOf("://") === -1) {
|
|
url = "http://" + url;
|
|
} else {
|
|
protocol = url.substr(0, url.indexOf("://"));
|
|
switch (protocol) {
|
|
case "http":
|
|
case "https":
|
|
case "ws":
|
|
case "wss":
|
|
break;
|
|
default:
|
|
url = "http" + url.substr(url.indexOf("://"));
|
|
fakeProto = true;
|
|
}
|
|
}
|
|
const a = document.createElement("a");
|
|
a.href = url;
|
|
const r = {
|
|
source: u,
|
|
username: a.username,
|
|
password: a.password,
|
|
protocol: fakeProto ? protocol : a.protocol.replace(":", ""),
|
|
host: a.hostname,
|
|
port: a.port
|
|
? parseInt(a.port)
|
|
: protocol === "https" || protocol === "wss"
|
|
? 443
|
|
: 80,
|
|
query: a.search,
|
|
params: (function () {
|
|
var ret = {},
|
|
seg = a.search.replace(/^\?/, "").split("&"),
|
|
len = seg.length,
|
|
i = 0,
|
|
s;
|
|
for (; i < len; i++) {
|
|
if (!seg[i]) {
|
|
continue;
|
|
}
|
|
s = seg[i].split("=");
|
|
let key = s[0];
|
|
let val = decodeURIComponent(s[1]);
|
|
if (ret[key]) {
|
|
if (Array.isArray(ret[key])) {
|
|
ret[key].push(val);
|
|
} else {
|
|
ret[key] = [ret[key], val];
|
|
}
|
|
} else {
|
|
ret[key] = val;
|
|
}
|
|
}
|
|
return ret;
|
|
})(),
|
|
file: (a.pathname.match(/\/([^/?#]+)$/i) || [null, ""])[1],
|
|
hash: a.hash.replace("#", ""),
|
|
path: a.pathname.replace(/^([^/])/, "/$1"),
|
|
relative: (a.href.match(/tps?:\/\/[^/]+(.+)/) || [null, ""])[1],
|
|
segments: a.pathname.replace(/^\//, "").split("/"),
|
|
};
|
|
a.remove();
|
|
return r;
|
|
}
|
|
|
|
function generateURL({
|
|
username,
|
|
password,
|
|
protocol,
|
|
host,
|
|
port,
|
|
params,
|
|
hash,
|
|
path,
|
|
}) {
|
|
/**
|
|
* 所有参数设置默认值
|
|
* 避免方法检测到参数为null/undefine返回该值查询结果
|
|
* 查询结果当然不是URI类型,导致链式调用失败
|
|
*/
|
|
const uri = URI()
|
|
.protocol(protocol || "http")
|
|
.username(username || "")
|
|
.password(password || "")
|
|
.host(host || "")
|
|
.port(port || 80)
|
|
.path(path || "")
|
|
.query(params || {})
|
|
.hash(hash || "");
|
|
const res = uri.toString();
|
|
return res;
|
|
}
|
|
|
|
function toInt(s) {
|
|
if (typeof s === "string") {
|
|
return parseInt(s);
|
|
} else if (typeof s === "number") {
|
|
return parseInt(s);
|
|
} else if (typeof s === "boolean") {
|
|
return s ? 1 : 0;
|
|
}
|
|
return s;
|
|
}
|
|
|
|
function sanitizeALPN(alpn) {
|
|
if (!alpn) return "h3"; // Default to "h3" if no ALPN is provided
|
|
return alpn; // Retain the original input
|
|
}
|
|
|
|
export { locateServer, handleResponse, parseURL, generateURL, toInt, sanitizeALPN };
|