summaryrefslogtreecommitdiff
path: root/src/worker.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/worker.ts')
-rw-r--r--src/worker.ts20
1 files changed, 20 insertions, 0 deletions
diff --git a/src/worker.ts b/src/worker.ts
new file mode 100644
index 0000000..c7e143d
--- /dev/null
+++ b/src/worker.ts
@@ -0,0 +1,20 @@
+const ch2: Record<string, string> = {};
+
+export default <T>(c: string, id: number, msg: unknown, transfer: ArrayBuffer[], cb: (err: Error, msg: T) => void) => {
+ const w = new Worker(ch2[id] ||= URL.createObjectURL(
+ new Blob([
+ c + ';addEventListener("error",function(e){e=e.error;postMessage({$e$:[e.message,e.code,e.stack]})})'
+ ], { type: 'text/javascript' })
+ ));
+ w.onmessage = e => {
+ const d = e.data, ed = d.$e$;
+ if (ed) {
+ const err = new Error(ed[0]);
+ err['code'] = ed[1];
+ err.stack = ed[2];
+ cb(err, null);
+ } else cb(null, d);
+ }
+ w.postMessage(msg, transfer);
+ return w;
+} \ No newline at end of file