UNPKG

@scalar/api-client

Version:

the open source API testing client

67 lines (66 loc) 1.55 kB
import { computed as g, toValue as l, watch as h, onBeforeUnmount as T } from "vue"; const p = 5 * 1e3, M = 60 * 1e3, E = () => { let t = null; const e = () => { t && (clearTimeout(t), t = null); }; return { clear: e, schedule: (a, c) => { e(), t = setTimeout(a, c); } }; }, V = (t) => { let e = t; return { reset: () => { e = t; }, backoff: () => { e = Math.min(e * 2, M); }, get: () => e }; }, k = (t) => t.flatMap(([e]) => e), D = ({ documentName: t, store: e, initialTimeout: u = p }) => { const a = g(() => { const r = l(e), o = l(t); return !r || !o ? null : r.workspace.documents[o]; }), c = E(), s = V(u), f = () => { s.reset(), c.schedule(i, s.get()); }, d = () => { s.backoff(), c.schedule(i, s.get()); }, i = async () => { const r = l(e), o = l(t), m = a.value?.["x-scalar-original-source-url"]; if (!r || !o || !m) return; const n = await r.rebaseDocument({ name: o, url: m }); n?.ok ? (await n.applyChanges(k(n.conflicts)), f()) : n?.ok === !1 && n.type === "NO_CHANGES_DETECTED" ? f() : d(); }; h( [() => a.value?.["x-scalar-original-source-url"], () => a.value?.["x-scalar-watch-mode"]], ([r, o = !1]) => { if (!l(e)) { c.clear(); return; } if (c.clear(), !r || !o) { s.reset(); return; } c.schedule(i, s.get()); }, { immediate: !0 } ), T(() => { c.clear(); }); }; export { D as useDocumentWatcher };