worker.ts 635 B

1234567891011121314151617181920
  1. const ch2: Record<string, string> = {};
  2. export default <T>(c: string, id: number, msg: unknown, transfer: ArrayBuffer[], cb: (err: Error, msg: T) => void) => {
  3. const w = new Worker(ch2[id] ||= URL.createObjectURL(
  4. new Blob([
  5. c + ';addEventListener("error",function(e){e=e.error;postMessage({$e$:[e.message,e.code,e.stack]})})'
  6. ], { type: 'text/javascript' })
  7. ));
  8. w.onmessage = e => {
  9. const d = e.data, ed = d.$e$;
  10. if (ed) {
  11. const err = new Error(ed[0]);
  12. err['code'] = ed[1];
  13. err.stack = ed[2];
  14. cb(err, null);
  15. } else cb(null, d);
  16. }
  17. w.postMessage(msg, transfer);
  18. return w;
  19. }