mirror of
https://github.com/mountain-loop/yaak.git
synced 2026-03-17 23:13:51 +01:00
298 lines
8.6 KiB
JavaScript
298 lines
8.6 KiB
JavaScript
var j = "(?:" + [
|
|
"\\|\\|",
|
|
"\\&\\&",
|
|
";;",
|
|
"\\|\\&",
|
|
"\\<\\(",
|
|
"\\<\\<\\<",
|
|
">>",
|
|
">\\&",
|
|
"<\\&",
|
|
"[&;()|<>]"
|
|
].join("|") + ")", D = new RegExp("^" + j + "$"), q = "|&;()<> \\t", M = '"((\\\\"|[^"])*?)"', Q = "'((\\\\'|[^'])*?)'", V = /^#$/, _ = "'", G = '"', U = "$", $ = "", z = 4294967296;
|
|
for (var L = 0; L < 4; L++)
|
|
$ += (z * Math.random()).toString(16);
|
|
var J = new RegExp("^" + $);
|
|
function X(n, s) {
|
|
for (var e = s.lastIndex, t = [], c; c = s.exec(n); )
|
|
t.push(c), s.lastIndex === c.index && (s.lastIndex += 1);
|
|
return s.lastIndex = e, t;
|
|
}
|
|
function F(n, s, e) {
|
|
var t = typeof n == "function" ? n(e) : n[e];
|
|
return typeof t > "u" && e != "" ? t = "" : typeof t > "u" && (t = "$"), typeof t == "object" ? s + $ + JSON.stringify(t) + $ : s + t;
|
|
}
|
|
function K(n, s, e) {
|
|
e || (e = {});
|
|
var t = e.escape || "\\", c = "(\\" + t + `['"` + q + `]|[^\\s'"` + q + "])+", m = new RegExp([
|
|
"(" + j + ")",
|
|
// control chars
|
|
"(" + c + "|" + M + "|" + Q + ")+"
|
|
].join("|"), "g"), f = X(n, m);
|
|
if (f.length === 0)
|
|
return [];
|
|
s || (s = {});
|
|
var w = !1;
|
|
return f.map(function(r) {
|
|
var a = r[0];
|
|
if (!a || w)
|
|
return;
|
|
if (D.test(a))
|
|
return { op: a };
|
|
var x = !1, C = !1, d = "", O = !1, i;
|
|
function T() {
|
|
i += 1;
|
|
var v, p, R = a.charAt(i);
|
|
if (R === "{") {
|
|
if (i += 1, a.charAt(i) === "}")
|
|
throw new Error("Bad substitution: " + a.slice(i - 2, i + 1));
|
|
if (v = a.indexOf("}", i), v < 0)
|
|
throw new Error("Bad substitution: " + a.slice(i));
|
|
p = a.slice(i, v), i = v;
|
|
} else if (/[*@#?$!_-]/.test(R))
|
|
p = R, i += 1;
|
|
else {
|
|
var g = a.slice(i);
|
|
v = g.match(/[^\w\d_]/), v ? (p = g.slice(0, v.index), i += v.index - 1) : (p = g, i = a.length);
|
|
}
|
|
return F(s, "", p);
|
|
}
|
|
for (i = 0; i < a.length; i++) {
|
|
var u = a.charAt(i);
|
|
if (O = O || !x && (u === "*" || u === "?"), C)
|
|
d += u, C = !1;
|
|
else if (x)
|
|
u === x ? x = !1 : x == _ ? d += u : u === t ? (i += 1, u = a.charAt(i), u === G || u === t || u === U ? d += u : d += t + u) : u === U ? d += T() : d += u;
|
|
else if (u === G || u === _)
|
|
x = u;
|
|
else {
|
|
if (D.test(u))
|
|
return { op: a };
|
|
if (V.test(u)) {
|
|
w = !0;
|
|
var b = { comment: n.slice(r.index + i + 1) };
|
|
return d.length ? [d, b] : [b];
|
|
} else
|
|
u === t ? C = !0 : u === U ? d += T() : d += u;
|
|
}
|
|
}
|
|
return O ? { op: "glob", pattern: d } : d;
|
|
}).reduce(function(r, a) {
|
|
return typeof a > "u" ? r : r.concat(a);
|
|
}, []);
|
|
}
|
|
var Y = function(s, e, t) {
|
|
var c = K(s, e, t);
|
|
return typeof e != "function" ? c : c.reduce(function(m, f) {
|
|
if (typeof f == "object")
|
|
return m.concat(f);
|
|
var w = f.split(RegExp("(" + $ + ".*?" + $ + ")", "g"));
|
|
return w.length === 1 ? m.concat(w[0]) : m.concat(w.filter(Boolean).map(function(r) {
|
|
return J.test(r) ? JSON.parse(r.split($)[1]) : r;
|
|
}));
|
|
}, []);
|
|
}, Z = Y;
|
|
const ae = "curl", se = "cURL", ie = "cURL command line tool", H = ["d", "data", "data-raw", "data-urlencode", "data-binary", "data-ascii"], ee = [
|
|
["url"],
|
|
// Specify the URL explicitly
|
|
["user", "u"],
|
|
// Authentication
|
|
["digest"],
|
|
// Apply auth as digest
|
|
["header", "H"],
|
|
["cookie", "b"],
|
|
["get", "G"],
|
|
// Put the post data in the URL
|
|
["d", "data"],
|
|
// Add url encoded data
|
|
["data-raw"],
|
|
["data-urlencode"],
|
|
["data-binary"],
|
|
["data-ascii"],
|
|
["form", "F"],
|
|
// Add multipart data
|
|
["request", "X"],
|
|
// Request method
|
|
H
|
|
].flatMap((n) => n);
|
|
function oe(n) {
|
|
if (!n.match(/^\s*curl /))
|
|
return null;
|
|
const s = [], e = n.replace(/\ncurl/g, "; curl");
|
|
let t = [];
|
|
const m = Z(e).flatMap((r) => typeof r == "string" && r.startsWith("-") && !r.startsWith("--") && r.length > 2 ? [r.slice(0, 2), r.slice(2)] : r);
|
|
for (const r of m) {
|
|
if (typeof r == "string") {
|
|
r.startsWith("$") ? t.push(r.slice(1)) : t.push(r);
|
|
continue;
|
|
}
|
|
if ("comment" in r)
|
|
continue;
|
|
const { op: a } = r;
|
|
if (a === ";") {
|
|
s.push(t), t = [];
|
|
continue;
|
|
}
|
|
if (a != null && a.startsWith("$")) {
|
|
const x = a.slice(2, a.length - 1).replace(/\\'/g, "'");
|
|
t.push(x);
|
|
continue;
|
|
}
|
|
a === "glob" && t.push(r.pattern);
|
|
}
|
|
s.push(t);
|
|
const f = {
|
|
model: "workspace",
|
|
id: N("workspace"),
|
|
name: "Curl Import"
|
|
};
|
|
return {
|
|
resources: {
|
|
httpRequests: s.filter((r) => r[0] === "curl").map((r) => te(r, f.id)),
|
|
workspaces: [f]
|
|
}
|
|
};
|
|
}
|
|
function te(n, s) {
|
|
const e = {}, t = [];
|
|
for (let o = 1; o < n.length; o++) {
|
|
let l = n[o];
|
|
if (typeof l == "string" && (l = l.trim()), typeof l == "string" && l.match(/^-{1,2}[\w-]+/)) {
|
|
const E = l[0] === "-" && l[1] !== "-";
|
|
let h = l.replace(/^-{1,2}/, "");
|
|
if (!ee.includes(h))
|
|
continue;
|
|
let y;
|
|
const S = n[o + 1];
|
|
E && h.length > 1 ? (y = h.slice(1), h = h.slice(0, 1)) : typeof S == "string" && !S.startsWith("-") ? (y = S, o++) : y = !0, e[h] = e[h] || [], e[h].push(y);
|
|
} else
|
|
l && t.push(l);
|
|
}
|
|
let c, m;
|
|
const f = A(e, t[0] || "", ["url"]), [w, r] = W(f, "?");
|
|
c = (r == null ? void 0 : r.split("&").map((o) => {
|
|
const l = W(o, "=");
|
|
return { name: l[0] ?? "", value: l[1] ?? "", enabled: !0 };
|
|
})) ?? [], m = w ?? f;
|
|
const [a, x] = A(e, "", ["u", "user"]).split(/:(.*)$/), C = A(e, !1, ["digest"]), d = a ? C ? "digest" : "basic" : null, O = a ? {
|
|
username: a.trim(),
|
|
password: (x ?? "").trim()
|
|
} : {}, i = [
|
|
...e.header || [],
|
|
...e.H || []
|
|
].map((o) => {
|
|
const [l, E] = o.split(/:(.*)$/);
|
|
return E ? {
|
|
name: (l ?? "").trim(),
|
|
value: E.trim(),
|
|
enabled: !0
|
|
} : {
|
|
name: (l ?? "").trim().replace(/;$/, ""),
|
|
value: "",
|
|
enabled: !0
|
|
};
|
|
}), T = [
|
|
...e.cookie || [],
|
|
...e.b || []
|
|
].map((o) => {
|
|
const l = o.split("=", 1)[0], E = o.replace(`${l}=`, "");
|
|
return `${l}=${E}`;
|
|
}).join("; "), u = i.find((o) => o.name.toLowerCase() === "cookie");
|
|
T && u ? u.value += `; ${T}` : T && i.push({
|
|
name: "Cookie",
|
|
value: T,
|
|
enabled: !0
|
|
});
|
|
const b = ne(e), v = i.find((o) => o.name.toLowerCase() === "content-type"), p = v ? v.value.split(";")[0] : null, R = [
|
|
...e.form || [],
|
|
...e.F || []
|
|
].map((o) => {
|
|
const l = o.split("="), E = l[0] ?? "", h = l[1] ?? "", y = {
|
|
name: E,
|
|
enabled: !0
|
|
};
|
|
return h.indexOf("@") === 0 ? y.file = h.slice(1) : y.value = h, y;
|
|
});
|
|
let g = {}, I = null;
|
|
const B = A(e, !1, ["G", "get"]);
|
|
b.length > 0 && B ? c.push(...b) : b.length > 0 && (p == null || p === "application/x-www-form-urlencoded") ? (I = p ?? "application/x-www-form-urlencoded", g = {
|
|
form: b.map((o) => ({
|
|
...o,
|
|
name: decodeURIComponent(o.name || ""),
|
|
value: decodeURIComponent(o.value || "")
|
|
}))
|
|
}, i.push({
|
|
name: "Content-Type",
|
|
value: "application/x-www-form-urlencoded",
|
|
enabled: !0
|
|
})) : b.length > 0 ? (I = p === "application/json" || p === "text/xml" || p === "text/plain" ? p : "other", g = {
|
|
text: b.map(({ name: o, value: l }) => o && l ? `${o}=${l}` : o || l).join("&")
|
|
}) : R.length && (I = p ?? "multipart/form-data", g = {
|
|
form: R
|
|
}, p == null && i.push({
|
|
name: "Content-Type",
|
|
value: "multipart/form-data",
|
|
enabled: !0
|
|
}));
|
|
let P = A(e, "", ["X", "request"]).toUpperCase();
|
|
return P === "" && g && (P = "text" in g || "form" in g ? "POST" : "GET"), {
|
|
id: N("http_request"),
|
|
model: "http_request",
|
|
workspaceId: s,
|
|
name: "",
|
|
urlParameters: c,
|
|
url: m,
|
|
method: P,
|
|
headers: i,
|
|
authentication: O,
|
|
authenticationType: d,
|
|
body: g,
|
|
bodyType: I,
|
|
folderId: null,
|
|
sortPriority: 0
|
|
};
|
|
}
|
|
const ne = (n) => {
|
|
let s = [];
|
|
for (const e of H) {
|
|
const t = n[e];
|
|
if (!(!t || t.length === 0))
|
|
for (const c of t) {
|
|
if (typeof c != "string")
|
|
continue;
|
|
const [m, f] = c.split("=");
|
|
c.startsWith("@") ? s.push({
|
|
name: m ?? "",
|
|
value: "",
|
|
filePath: c.slice(1),
|
|
enabled: !0
|
|
}) : s.push({
|
|
name: m ?? "",
|
|
value: e === "data-urlencode" ? encodeURIComponent(f ?? "") : f ?? "",
|
|
enabled: !0
|
|
});
|
|
}
|
|
}
|
|
return s;
|
|
}, A = (n, s, e) => {
|
|
for (const t of e)
|
|
if (n[t] && n[t].length)
|
|
return n[t][0];
|
|
return s;
|
|
};
|
|
function W(n, s) {
|
|
const e = n.indexOf(s);
|
|
return e > -1 ? [n.slice(0, e), n.slice(e + 1)] : [n];
|
|
}
|
|
const k = {};
|
|
function N(n) {
|
|
return k[n] = (k[n] ?? -1) + 1, `GENERATE_ID::${n.toUpperCase()}_${k[n]}`;
|
|
}
|
|
export {
|
|
ie as description,
|
|
ae as id,
|
|
te as importCommand,
|
|
se as name,
|
|
oe as pluginHookImport
|
|
};
|