@scalar/api-client
Version:
the open source API testing client
106 lines (105 loc) • 2.35 kB
JavaScript
import { resolve as i } from "@scalar/import";
import { redirectToProxy as f, fetchWithProxyFallback as d } from "@scalar/oas-utils/helpers";
import { reactive as h } from "vue";
import { isUrl as m } from "../../../libs/isUrl.js";
function v() {
const n = h({
state: "idle",
content: null,
url: null,
input: null,
error: null
});
function u() {
Object.assign(n, {
state: "idle",
content: null,
url: null,
input: null,
error: null
});
}
async function s(e, r) {
if (!e)
return {
state: "idle",
content: null,
url: null,
input: e,
error: null
};
try {
const t = await i(e, {
fetch: (c) => fetch(r ? f(r, c) : c, {
cache: "no-cache"
})
});
if (typeof t == "object" && t !== null)
return {
state: "idle",
content: JSON.stringify(t, null, 2),
url: null,
error: null
};
if (t === void 0)
return {
state: "idle",
content: null,
url: null,
input: e,
error: `Could not find an OpenAPI document in ${e}`
};
if (!m(t))
return {
state: "idle",
content: null,
url: null,
input: e,
error: "Oops, we got invalid content for the given URL."
};
const o = t, l = await d(o, {
proxyUrl: r,
cache: "no-cache"
});
return l.ok ? {
state: "idle",
content: await l.text(),
url: o,
error: null
} : {
state: "idle",
content: null,
url: null,
input: e,
error: `Couldn't fetch ${o}, got error ${[l.status, l.statusText].join(" ").trim()}.`
};
} catch (t) {
return console.error("[prefetchDocument]", t), {
state: "idle",
content: null,
url: null,
input: e,
error: t.message
};
}
}
async function a(e, r) {
Object.assign(n, {
state: "loading",
content: null,
url: null,
input: e,
error: null
});
const t = await s(e, r);
return Object.assign(n, t), t;
}
return {
prefetchResult: n,
prefetchUrl: a,
resetPrefetchResult: u
};
}
export {
v as useUrlPrefetcher
};