@scalar/api-client
Version:
the open source API testing client
213 lines (212 loc) • 7.84 kB
JavaScript
import { getResolvedRef as d } from "@scalar/workspace-store/helpers/get-resolved-ref";
import { getExampleFromSchema as p } from "../get-example-from-schema.js";
import { getExampleValue as h } from "./get-example-value.js";
const A = (e) => (e ?? []).map((o) => d(o)), g = (e) => {
if (e.in === "header")
return { style: "simple", explode: "explode" in e && e.explode !== void 0 ? e.explode : !1 };
if (e.in === "cookie")
return { style: "form", explode: "explode" in e && e.explode !== void 0 ? e.explode : !0 };
const o = {
path: "simple",
query: "form",
header: "simple",
cookie: "form"
}[e.in], t = "style" in e && e.style ? e.style : o, $ = "explode" in e && e.explode !== void 0 ? e.explode : t === "form";
return { style: t, explode: $ };
}, S = (e, o, t) => {
const $ = h(e, o, t);
if ($ !== void 0)
return $;
if ("schema" in e && e.schema) {
const f = e.in === "path" ? { emptyString: `{${e.name}}` } : {};
return p(d(e.schema), f);
}
}, w = ({
harRequest: e,
parameters: o,
example: t,
contentType: $
}) => {
const f = [...e.headers], i = [...e.queryString];
let r = e.url;
const u = A(o);
for (const s of u) {
if (!s.in || !s.name)
continue;
const n = S(s, t, $);
if (n === void 0)
continue;
const { style: b, explode: v } = g(s);
switch (s.in) {
case "path": {
r = k(r, s, n, b, v);
break;
}
case "query": {
switch (b) {
case "form": {
if (v)
if (Array.isArray(n))
for (const l of n)
i.push({ name: s.name, value: String(l) });
else if (typeof n == "object" && n !== null)
for (const [l, c] of Object.entries(n))
i.push({ name: l, value: String(c) });
else
i.push({ name: s.name, value: String(n) });
else if (Array.isArray(n))
i.push({ name: s.name, value: n.join(",") });
else if (typeof n == "object" && n !== null) {
const l = Object.entries(n).map(([c, y]) => `${c},${y}`).join(",");
i.push({ name: s.name, value: l });
} else
i.push({ name: s.name, value: String(n) });
break;
}
case "spaceDelimited": {
if (Array.isArray(n))
i.push({ name: s.name, value: n.join(" ") });
else if (typeof n == "object" && n !== null) {
const l = Object.entries(n).map(([c, y]) => `${c} ${y}`).join(" ");
i.push({ name: s.name, value: l });
}
break;
}
case "pipeDelimited": {
if (Array.isArray(n))
i.push({ name: s.name, value: n.join("|") });
else if (typeof n == "object" && n !== null) {
const l = Object.entries(n).flat().join("|");
i.push({ name: s.name, value: l });
}
break;
}
case "deepObject": {
if (v && typeof n == "object" && n !== null)
for (const [l, c] of Object.entries(n))
i.push({ name: `${s.name}[${l}]`, value: String(c) });
break;
}
// Default to form style
default:
i.push({ name: s.name, value: String(n) });
}
break;
}
case "header":
if (v)
if (Array.isArray(n))
for (const l of n)
f.push({ name: s.name, value: String(l) });
else if (typeof n == "object" && n !== null) {
const l = Object.entries(n).map(([c, y]) => `${c}=${y}`).join(",");
f.push({ name: s.name, value: l });
} else
f.push({ name: s.name, value: String(n) });
else if (Array.isArray(n))
f.push({ name: s.name, value: n.join(",") });
else if (typeof n == "object" && n !== null) {
const l = Object.entries(n).map(([c, y]) => `${c},${y}`).join(",");
f.push({ name: s.name, value: l });
} else
f.push({ name: s.name, value: String(n) });
break;
case "cookie":
if (v)
if (Array.isArray(n))
for (const l of n)
e.cookies.push({ name: s.name, value: l === null ? "null" : String(l) });
else if (typeof n == "object" && n !== null)
for (const [l, c] of Object.entries(n))
e.cookies.push({ name: l, value: c === null ? "null" : String(c) });
else
e.cookies.push({ name: s.name, value: n === null ? "null" : String(n) });
else if (Array.isArray(n)) {
const l = n.map((c) => c === null ? "null" : String(c)).join(",");
e.cookies.push({ name: s.name, value: l });
} else if (typeof n == "object" && n !== null) {
const l = (y) => {
const a = [];
for (const [m, j] of Object.entries(y))
typeof j == "object" && j !== null && !Array.isArray(j) ? a.push(m, ...l(j)) : a.push(m, j === null ? "null" : String(j));
return a;
}, c = l(n).join(",");
e.cookies.push({ name: s.name, value: c });
} else
e.cookies.push({ name: s.name, value: n === null ? "null" : String(n) });
break;
}
}
return {
url: r,
headers: f,
queryString: i,
cookies: e.cookies
};
}, k = (e, o, t, $, f) => {
switch ($) {
case "matrix": {
if (f) {
if (Array.isArray(t)) {
const i = t.map((r) => `${o.name}=${r}`).join(";");
return e.replace(`{;${o.name}}`, `;${i}`);
}
if (typeof t == "object" && t !== null) {
const i = Object.entries(t).map(([r, u]) => `${r}=${u}`).join(";");
return e.replace(`{;${o.name}}`, `;${i}`);
}
return e.replace(`{;${o.name}}`, `;${o.name}=${t}`);
}
if (Array.isArray(t))
return e.replace(`{;${o.name}}`, `;${o.name}=${t.join(",")}`);
if (typeof t == "object" && t !== null) {
const i = Object.entries(t).map(([r, u]) => `${r},${u}`).join(",");
return e.replace(`{;${o.name}}`, `;${o.name}=${i}`);
}
return e.replace(`{;${o.name}}`, `;${o.name}=${t}`);
}
case "label": {
if (f) {
if (Array.isArray(t))
return e.replace(`{.${o.name}}`, `.${t.join(".")}`);
if (typeof t == "object" && t !== null) {
const i = Object.entries(t).map(([r, u]) => `${r}=${u}`).join(".");
return e.replace(`{.${o.name}}`, `.${i}`);
}
return e.replace(`{.${o.name}}`, `.${t}`);
}
if (Array.isArray(t))
return e.replace(`{.${o.name}}`, `.${t.join(",")}`);
if (typeof t == "object" && t !== null) {
const i = Object.entries(t).map(([r, u]) => `${r},${u}`).join(",");
return e.replace(`{.${o.name}}`, `.${i}`);
}
return e.replace(`{.${o.name}}`, `.${t}`);
}
case "simple": {
if (f) {
if (Array.isArray(t))
return e.replace(`{${o.name}}`, t.join(","));
if (typeof t == "object" && t !== null) {
const i = Object.entries(t).map(([r, u]) => `${r}=${u}`).join(",");
return e.replace(`{${o.name}}`, i);
}
return e.replace(`{${o.name}}`, String(t));
}
if (Array.isArray(t))
return e.replace(`{${o.name}}`, t.join(","));
if (typeof t == "object" && t !== null) {
const i = Object.entries(t).map(([r, u]) => `${r},${u}`).join(",");
return e.replace(`{${o.name}}`, i);
}
return e.replace(`{${o.name}}`, String(t));
}
// Default to simple style
default:
return e.replace(`{${o.name}}`, String(t));
}
};
export {
A as deReferenceParams,
w as processParameters
};