UNPKG

worker-tls

Version:

worker-tls 提供了 动态Worker 功能 和 其它一些 Worker 场景下有用的工具集;让开发者可以像调用对象方法一样动态地调用Worker中的方法,也可以随时地往 Worker 中动态地添加函数 等等。

119 lines (118 loc) 3.49 kB
import { getTypeNameOf as f, getTypeOf as g } from "type-tls"; function d() { const e = globalThis.currentWorkerType; if (e) return e; let t = globalThis.SharedWorkerGlobalScope; return typeof t == "function" && globalThis instanceof t ? globalThis.currentWorkerType = "SharedWorker" : (t = globalThis.DedicatedWorkerGlobalScope, typeof t == "function" && globalThis instanceof t ? globalThis.currentWorkerType = "DedicatedWorker" : (t = globalThis.Window, typeof t == "function" && globalThis instanceof t ? globalThis.currentWorkerType = "Window" : globalThis.currentWorkerType = "unknown")); } function h(e, t, r) { const s = /(^\s*(async\s+)?function\s*(\s|\*)\s*)[A-Za-z_$]+[\w$]*(\s*\()/, o = /^[A-Za-z_$]+[\w$]*$/, n = s.test(e), a = t && o.test(t); if (n && a && (e = e.replace(s, `$1${t}$4`)), !n && a) var i = `var ${t} = ${e} ; return ${t}`; else i = `return (${e})`; return new Function(i)(); } const T = [globalThis.Worker, globalThis.SharedWorker, globalThis.ServiceWorker].filter((e) => e), p = ["Worker", "SharedWorker", "ServiceWorker"]; function m(e) { if (T.some((s) => e instanceof s)) return !0; const r = f(e); return p.includes(r); } var b = /* @__PURE__ */ ((e) => (e.Ing = "进行中", e.End = "结束", e))(b || {}); function k(e) { const { name: t, args: r, this: s } = e, o = s ?? globalThis, n = globalThis[t]; return typeof n == "function" ? n.apply(o, r) : r || s ? { error: "函数不存在", state: "结束" /* End */ } : { data: n, state: "结束" /* End */ }; } function u(e) { const t = g(e); if (t === "object" || t === Object) { const { transfer: r, targetOrigin: s } = e; return "data" in e || "error" in e || Array.isArray(r) || typeof s == "string"; } return !1; } function l(e, t) { const { data: r, ...s } = u(e) ? e : { data: e }, o = { ...t, ...s }; if (r instanceof ReadableStream) { const n = new WritableStream({ write: function(a, i) { return l(a, { ...o, state: "进行中" /* Ing */ }); }, close: function(a) { c(void 0, { state: "结束", ...o }); }, abort: function(a) { c(void 0, { state: "结束", ...o, error: a }); } }); return r.pipeTo(n); } return r instanceof Promise ? r.then(function(n) { l(n, { state: "结束", ...o }); }, function(n) { c(void 0, { ...o, error: n, state: "结束" /* End */ }); }) : c(r, { state: "结束", ...o }); } function c(e, t) { const { port: r, ...s } = t, { transfer: o, targetOrigin: n, ...a } = u(e) ? { ...s, ...e } : { ...s, data: e }; a.state == null && (a.state = "结束"); const i = { transfer: o, targetOrigin: n }; return (r ?? globalThis).postMessage(a, i); } function $(e) { const t = e.data, r = e.currentTarget; if (t) { const s = k(t); l(s, { execId: t.id, port: r }); } } function v(e, t) { const r = h(e, t); return t = t ?? r.name, globalThis[t] = r, !0; } function w(e) { return delete globalThis[e]; } function M(e) { switch (d()) { case "SharedWorker": { globalThis.addEventListener("connect", function(t) { for (const r of t.ports) r.addEventListener("message", e), r.start(); }); break; } default: globalThis.addEventListener("message", e); } } export { b as M, v as a, k as e, d as g, m as i, M as l, $ as m, w as r, l as s };