UNPKG

@statewalker/webrun-devtools

Version:

DevTools Extension for the StateWalker WebRun framework

438 lines (437 loc) • 13.2 kB
//#region node_modules/.pnpm/@statewalker+utils@0.4.2/node_modules/@statewalker/utils/src/iterate.js async function* e(e, t = []) { let n, r, i = async (e, n, i) => { let a = { error: e, value: n, done: i }; return a.promise = new Promise((e) => a.notify = e), await t.push(a), r && r(), r = null, a.promise; }, a = (e) => i(void 0, e, !1), o = () => i(void 0, void 0, !0), s = (e) => i(e, void 0, !0), c = e(Object.assign([ a, o, s ], { next: a, complete: o, error: s })), l; try { for (;;) if (l = await t.shift(), l) try { if (l.error) throw l.error; if (l.done) break; yield l.value; } finally { l.notify(!0); } else await (n = r ? n : new Promise((e) => r = e)); } finally { for (r && r(), i = () => !1, typeof c == "function" && await c(); l = await t.shift();) l.notify(!1); } } //#endregion //#region node_modules/.pnpm/@statewalker+utils@0.4.2/node_modules/@statewalker/utils/src/newRegistry.js function t(e = console.error) { let t = 0, n = {}, r = (r) => { let i = t++; return n[i] = Object.assign(function(t) { try { return delete n[i], !t && r && r(); } catch (t) { e(t); } }, { action: r }); }, i = (e) => Object.values(n).forEach((t) => t.action === e && t(!0)), a = () => Object.values(n).forEach((e) => e()); return Object.assign([ r, a, i ], { register: r, clear: a, unregister: i }); } //#endregion //#region node_modules/.pnpm/@statewalker+getset@0.2.6/node_modules/@statewalker/getset/src/toPath.js function n(e) { return e ? typeof e == "string" ? e.split(".") : e : []; } //#endregion //#region node_modules/.pnpm/@statewalker+getset@0.2.6/node_modules/@statewalker/getset/src/set.js function r(e = {}, t, r) { if (t = n(t), t.length === 0) return r; let i = a(e); for (let e = 0, n = i; e < t.length; e++) { let i = t[e]; n = n[i] = e < t.length - 1 ? a(n[i]) : r; } return i; function a(e) { return typeof e == "object" && e ? Array.isArray(e) ? [...e] : Object.assign({}, e) : {}; } } //#endregion //#region node_modules/.pnpm/@statewalker+webrun-http@0.1.0/node_modules/@statewalker/webrun-http/src/readable-streams.js function i(e) { return new ReadableStream({ type: "bytes", async pull(t) { let n = !1; try { for (; !n;) { let n = await e.next(); if (!n || n.done) break; t.enqueue(await n.value); } } catch (e) { n = !0, t.error(e); } finally { !n && t.close(); } } }); } async function* a(e) { let t = await e.getReader(), n, r; for (; ({done: n, value: r} = await t.read()) && !n;) yield await r; } //#endregion //#region node_modules/.pnpm/@statewalker+webrun-http@0.1.0/node_modules/@statewalker/webrun-http/src/http-stubs.js function o(e) { return async (t) => { t = await t; let n = [ "url", "method", "mode", "credentials", "cache", "redirect", "referrer", "referrerPolicy", "integrity", "keepalive" ], r = [...t.headers].map(([e, t]) => [e, t]), o = n.reduce((e, n) => { let r = t[n]; return r !== void 0 && (e[n] = r), e; }, { headers: r }), s = await e({ options: o, content: t.body ? a(t.body) : [] }), c = null, l = {}; if (!s) l = { status: 404, statusText: "Error 404: Not Found" }; else { l = s.options; let e = s.content; o.method !== "HEAD" && o.method !== "OPTIONS" ? c = i(e) : e && e.return && e.return(); } return new Response(c, l); }; } //#endregion //#region node_modules/.pnpm/@statewalker+webrun-http@0.1.0/node_modules/@statewalker/webrun-http/src/http-send-recieve.js async function* s(e) { let { options: t, content: n } = await e; yield new TextEncoder().encode(JSON.stringify(t)), yield* n; } async function c(e) { e = await e; let { done: t, value: n } = await e.next(), r = {}; if (!t && n) { let e = new TextDecoder().decode(n); r = JSON.parse(e); } return { options: r, content: e }; } function l(e) { return async function(t) { return await o(async (t) => await c(e(s(t))))(t); }; } //#endregion //#region node_modules/.pnpm/@statewalker+webrun-ports@0.4.0_eslint@10.12.0/node_modules/@statewalker/webrun-ports/src/errors.js function u(e) { return Object.assign({ message: e, stack: e.stack }, e); } function d(e) { return typeof e == "string" && (e = { message: e }), Object.assign(Error(e.message), e); } //#endregion //#region node_modules/.pnpm/@statewalker+webrun-ports@0.4.0_eslint@10.12.0/node_modules/@statewalker/webrun-ports/src/callPort.js async function f(e, t, { timeout: n = 1e3, channelName: r = "", log: i = () => {}, newCallId: a = () => `call-${Date.now()}-${String(Math.random()).substring(2)}` } = {}) { let o = a(); i && i("[callPort]", { channelName: r, callId: o, params: t }); let s, c, l = new Promise((t, i) => { s = setTimeout(() => i(/* @__PURE__ */ Error(`Call timeout. CallId: "${o}".`)), n), c = (e) => { e.data && e.data.channelName === r && e.data.callId === o && (e.data.type === "response:error" ? i(d(e.data.error)) : e.data.type === "response:result" && t(e.data.result)); }, e.addEventListener("message", c); }); return l.finally(() => clearTimeout(s)), l.finally(() => e.removeEventListener("message", c)), e.postMessage({ type: "request", channelName: r, callId: o, params: t }), l; } //#endregion //#region node_modules/.pnpm/@statewalker+webrun-ports@0.4.0_eslint@10.12.0/node_modules/@statewalker/webrun-ports/src/recieveIterator.js async function* p(t) { let n, r = t(async ({ done: e = !0, value: t, error: r } = {}) => { r ? await n.error(r) : e ? await n.complete() : await n.next(t); }); yield* e((e) => (n = e, r)); } //#endregion //#region node_modules/.pnpm/@statewalker+webrun-ports@0.4.0_eslint@10.12.0/node_modules/@statewalker/webrun-ports/src/listenPort.js function m(e, t, { channelName: n = "", log: r = () => {} } = {}) { let i = async function(i) { if (!i.data || i.data.channelName !== n || i.data.type !== "request") return; let { callId: a, params: o } = i.data; r && r("[listenPort]", { channelName: n, callId: a, params: o }); let s, c, l; try { s = await t(o), l = "response:result"; } catch (e) { c = u(e), l = "response:error"; } e.postMessage({ callId: a, channelName: n, type: l, result: s, error: c }); }; return e.addEventListener("message", i), () => e.removeEventListener("message", i); } //#endregion //#region node_modules/.pnpm/@statewalker+webrun-ports@0.4.0_eslint@10.12.0/node_modules/@statewalker/webrun-ports/src/recieve.js async function* h(e, t = {}) { let n, r = m(e, async ({ done: e, value: t, error: r }) => { await n({ done: e, value: t, error: r }); }, t); try { for (;;) yield p((e) => n = e); } finally { r && await r(); } } //#endregion //#region node_modules/.pnpm/@statewalker+webrun-ports@0.4.0_eslint@10.12.0/node_modules/@statewalker/webrun-ports/src/sendIterator.js async function g(e, t) { let n; try { for await (let n of t) await e({ done: !1, value: n }); } catch (e) { n = e; } finally { await e({ done: !0, error: n }); } } //#endregion //#region node_modules/.pnpm/@statewalker+webrun-ports@0.4.0_eslint@10.12.0/node_modules/@statewalker/webrun-ports/src/send.js async function _(e, t, n = {}) { await g(async ({ done: t, value: r, error: i }) => { await f(e, { done: t, value: r, error: i }, n); }, t); } //#endregion //#region node_modules/.pnpm/@statewalker+webrun-ports@0.4.0_eslint@10.12.0/node_modules/@statewalker/webrun-ports/src/ioSend.js async function* v(e, t, n) { for await (let r of h(e, n)) { let i = _(e, t, n); try { yield* r; } finally { await i; } break; } } //#endregion //#region src/libs/serd.js async function* y(e, t) { for await (let n of t) yield e(n); } async function* b(e) { yield* y(w, e); } async function* x(e) { yield* y(T, e); } var S = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/", C = typeof Uint8Array > "u" ? [] : /* @__PURE__ */ new Uint8Array(256); for (let e = 0; e < 64; e++) C[S.charCodeAt(e)] = e; function w(e) { let t = new Uint8Array(e), n, r = t.length, i = ""; for (n = 0; n < r; n += 3) i += S[t[n] >> 2], i += S[(t[n] & 3) << 4 | t[n + 1] >> 4], i += S[(t[n + 1] & 15) << 2 | t[n + 2] >> 6], i += S[t[n + 2] & 63]; return r % 3 == 2 ? i = i.substring(0, i.length - 1) + "=" : r % 3 == 1 && (i = i.substring(0, i.length - 2) + "=="), i; } function T(e) { let t = e.length * .75, n = e.length, r, i = 0, a, o, s, c; e[e.length - 1] === "=" && (t--, e[e.length - 2] === "=" && t--); let l = new ArrayBuffer(t), u = new Uint8Array(l); for (r = 0; r < n; r += 4) a = C[e.charCodeAt(r)], o = C[e.charCodeAt(r + 1)], s = C[e.charCodeAt(r + 2)], c = C[e.charCodeAt(r + 3)], u[i++] = a << 2 | o >> 4, u[i++] = (o & 15) << 4 | s >> 2, u[i++] = (s & 3) << 6 | c & 63; return u; } //#endregion //#region src/api-client/newId.js function E(e = "id-") { return `${e}${Date.now()}-${String(Math.random()).substring(2)}`; } //#endregion //#region src/api-client/initApi.js async function D(e, { apiKey: n, callTimeout: i = 3e5, closeTimeout: a = 5e3 }) { let [o, s] = t(), c = {}, u = {}; o(() => { for (let { listener: e, removeListener: t } of Object.values(u)) typeof t == "function" && t(e); u = {}; }); let d; async function p() { return d ||= f(e, { method: "init", args: [{ apiKey: n, listeners: Object.entries(u).map(([e, { listenerMethodName: t }]) => [e, t]) }] }, { timeout: i }), d; } async function h(t, ...n) { return await p(), await f(e, { method: t, args: n }, { timeout: i }); } o(m(e, async ({ method: e, args: t } = {}) => { if (e === "notifyListener") { let [e, ...n] = t, { listener: r } = u[e] || {}; if (r) return await r(...n); } else if (e === "reset") d = null, await p(); else throw Error(`Unknown method "${e}"}`); })); let { methods: g } = await p(); for (let t of g) { let n = t.split("."), i; if (t === "http.fetch") i = async (n, ...r) => { n instanceof Request || (n = new Request(n, ...r)); let i = `channel-${Date.now()}-${String(Math.random()).substring(2)}`; return h(t, n.url, { channelName: i }), await l((t) => x(v(e, b(t), { channelName: i })))(n); }; else if (t.match(/\.on[A-Z]/)) { async function e(e) { let n = e.__id; return delete e.__id, delete u[n], await h("removeListener", n, t); } async function n(n, ...r) { let i = E("listener-"); return n.__id = i, u[i] = { listener: n, removeListener: e, listenerMethodName: t }, await h("addListener", i, t, ...r); } i = async (t) => (await n(t), o(() => e(t))), i.addListener = n, i.removeListener = e; } else i = async (...e) => await h(t, ...e); c = r(c, n, i); } return c.close = async () => { s(), await h("done"), setTimeout(() => e.close(), a); }, c; } //#endregion //#region package.json var O = "0.1.6", k = .1; //#endregion //#region src/api-client/openPortToExtension.js function A(e) { if (e.protocolVersion !== .1) { let t = ["Incompatible version of the WebRun DevTools browser extension protocol."]; return e.protocolVersion ? (t.push(`The expected extension protocol version is ${e.protocolVersion}.`), e.extensionVersion && (t.push(`Try to use the client library version ${e.extensionVersion}.`), t.push(`For example: https://unpkg.com/@statewalker/webrun-devtools@${e.extensionVersion}.`))) : (t.push("Try to use the client library version 0.0.12."), t.push("For example: https://unpkg.com/@statewalker/webrun-devtools@0.0.12.")), Error(t.join("\n")); } } async function j({ apiKey: e, timeout: t = 5e3 }) { await new Promise((e) => { let t = () => setTimeout(e, 10); document.readyState === "complete" ? t() : document.addEventListener("DOMContentLoaded", t); }); let n, r, i = new Promise((i, a) => { n = setTimeout(() => a(/* @__PURE__ */ Error("Connection timeout. Please check that the WebRun DevTools browser extension is active.")), t); let o = !1, s = E("call-"); function c() { o || window.postMessage({ type: "connection-request", apiKey: e, callId: s, protocolVersion: k, clientApiVersion: O }, "*"); } r = (e) => { if (e.source !== window) return; let { data: t, ports: n } = e; try { if (t?.type === "extension-ready") c(); else if (t?.callId === s) { if (o = !0, t?.type === "connection-error") a(Error(t.message)); else if (t.type === "connection-response") { let e = A(t); e ? a(e) : i(n[0]); } } } catch (e) { a(e), n[0] && n[0].close(); } }, window.addEventListener("message", r), c(); }); i.finally(() => clearTimeout(n)), i.finally(() => r && window.removeEventListener("message", r)); let a = await i; return a.start(), a; } //#endregion //#region src/api-client/connectPageToExtension.js async function M({ apiKey: e, timeout: t = 5e3, callTimeout: n = 3e5, closeTimeout: r = 5e3 }) { return await D(await j({ apiKey: e, timeout: t }), { apiKey: e, callTimeout: n, closeTimeout: r }); } //#endregion //#region src/api-client/index.js var N = M; //#endregion export { M as connectPageToExtension, N as default, D as initApi, t as newRegistry, j as openPortToExtension };