UNPKG

@scalar/api-client

Version:

the open source API testing client

213 lines (212 loc) 7.84 kB
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 };