worker-tls
Version:
worker-tls 提供了 动态Worker 功能 和 其它一些 Worker 场景下有用的工具集;让开发者可以像调用对象方法一样动态地调用Worker中的方法,也可以随时地往 Worker 中动态地添加函数 等等。
119 lines (118 loc) • 3.49 kB
JavaScript
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
};