summaryrefslogtreecommitdiff
path: root/src/worker.ts
diff options
context:
space:
mode:
authorFlorian Dold <florian@dold.me>2021-08-20 13:31:03 +0200
committerFlorian Dold <florian@dold.me>2021-08-20 13:31:03 +0200
commit859a8734c87d5e5081d7b0aa02cb538a7c801eac (patch)
treed2e9163479eb56ec382c842d62ce39fe30d450a4 /src/worker.ts
downloadnode-vendor-859a8734c87d5e5081d7b0aa02cb538a7c801eac.tar.gz
node-vendor-859a8734c87d5e5081d7b0aa02cb538a7c801eac.tar.bz2
node-vendor-859a8734c87d5e5081d7b0aa02cb538a7c801eac.zip
Squashed 'fflate/' content from commit b786929
git-subtree-dir: fflate git-subtree-split: b786929a368521e9cfcdcf7490a8e77485d5a253
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