UNPKG

@scalar/api-client

Version:

the open source API testing client

98 lines (97 loc) 2.86 kB
import { requestSchema as E, createExampleFromRequest as S } from "@scalar/oas-utils/entities/spec"; import { schemaModel as y } from "@scalar/oas-utils/helpers"; import { LS_KEYS as F } from "@scalar/helpers/object/local-storage"; import { iterateTitle as T } from "@scalar/helpers/string/iterate-title"; import { mutationFactory as A } from "@scalar/object-utils/mutator-record"; import { reactive as R } from "vue"; function C(m) { const i = R({}), o = A(i, R({}), m && F.REQUEST); return { requests: i, requestMutators: o }; } function L({ requestExamples: m, requestExampleMutators: i, requestMutators: o, collectionMutators: c, collections: s, tags: d, tagMutators: p }, q) { return { addRequest: (r, u) => { const e = y(r, E, !1); if (!e) return console.error("INVALID REQUEST DATA", r); const t = s[u], h = S( e, T( (e.summary ?? "Example") + " #1", (a) => e.examples.some((l) => a === m[l]?.name) ) ); return e.examples.push(h.uid), o.add(e), i.add(h), t && c.edit(u, "requests", [...t.requests, e.uid]), e.tags?.length ? e.tags.forEach((a) => { const l = t?.tags.find((x) => d[x]?.name === a); l && d[l] ? p.edit(l, "children", [...d[l].children, e.uid]) : q({ name: a, children: [e.uid] }, u); }) : t && c.edit(u, "children", [...t.children, e.uid]), e; }, deleteRequest: (r, u) => { const e = s[u]; r.examples.forEach((t) => i.delete(t)), e && (c.edit( u, "requests", e.requests.filter((t) => t !== r.uid) ), c.edit( u, "children", e.children.filter((t) => t !== r.uid) ), r.tags?.forEach((t) => { const h = e.tags.find((a) => d[a]?.name === t); h && p.edit(h, "children", d[h]?.children.filter((a) => a !== r.uid) || []); })), o.delete(r.uid); }, findRequestParents: D({ collections: s, tags: d }) }; } function D({ collections: m, tags: i }) { function o(c) { const s = Object.values(m).find((n) => n.requests?.includes(c.uid)); if (!s) return []; const d = Object.keys(i).reduce( (n, f) => (n[f] = [], n), { [s?.uid]: [] } ); function p(n, f) { f.forEach((r) => d[r]?.push(...n.children)), n.children.forEach((r) => { i[r] && p(i[r], [...f, r]); }); } p(s, [s.uid]); const q = /* @__PURE__ */ new Set(); return Object.entries(d).forEach(([n, f]) => { f.includes(c.uid) && q.add(n); }), [...q]; } return o; } function Q() { return { request: E.parse({ method: "get", parameters: [], path: "", summary: "My First Request", examples: [] }) }; } export { Q as createInitialRequest, C as createStoreRequests, L as extendedRequestDataFactory, D as findRequestParentsFactory };