UNPKG

worker-tls

Version:

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

2 lines (1 loc) 2.76 kB
"use strict";const u=require("type-tls");function f(){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 p=[globalThis.Worker,globalThis.SharedWorker,globalThis.ServiceWorker].filter(e=>e),b=["Worker","SharedWorker","ServiceWorker"];function k(e){if(p.some(s=>e instanceof s))return!0;const r=u.getTypeNameOf(e);return b.includes(r)}var g=(e=>(e.Ing="进行中",e.End="结束",e))(g||{});function d(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:"结束"}:{data:n,state:"结束"}}function T(e){const t=u.getTypeOf(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}=T(e)?e:{data:e},o={...t,...s};if(r instanceof ReadableStream){const n=new WritableStream({write:function(a,i){return l(a,{...o,state:"进行中"})},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:"结束"})}):c(r,{state:"结束",...o})}function c(e,t){const{port:r,...s}=t,{transfer:o,targetOrigin:n,...a}=T(e)?{...s,...e}:{...s,data:e};a.state==null&&(a.state="结束");const i={transfer:o,targetOrigin:n};return(r??globalThis).postMessage(a,i)}function W(e){const t=e.data,r=e.currentTarget;if(t){const s=d(t);l(s,{execId:t.id,port:r})}}function y(e,t){const r=h(e,t);return t=t??r.name,globalThis[t]=r,!0}function m(e){return delete globalThis[e]}function M(e){switch(f()){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)}}exports.MessageState=g;exports.execCMD=d;exports.getCurrentWorkerType=f;exports.isWorkerInst=k;exports.listenMessage=M;exports.messageListener=W;exports.removeCMD=m;exports.sendMessage=l;exports.setCMD=y;