@thi.ng/rstream
Version:
Reactive streams & subscription primitives for constructing dataflow graphs / pipelines
30 lines (29 loc) • 861 B
JavaScript
import { defWorker } from "./defworker.js";
import { __optsWithID } from "./idgen.js";
import { LOGGER } from "./logger.js";
import { stream } from "./stream.js";
const fromWorker = (worker, opts) => {
const _worker = defWorker(worker);
opts = __optsWithID("worker", opts);
return stream((stream2) => {
const msgListener = (e) => {
stream2.next(e.data);
};
const errListener = (e) => {
stream2.error(e.data);
};
_worker.addEventListener("message", msgListener);
_worker.addEventListener("error", errListener);
return () => {
_worker.removeEventListener("message", msgListener);
_worker.removeEventListener("error", errListener);
if (opts.terminate !== false) {
LOGGER.info("terminating worker", _worker);
_worker.terminate();
}
};
}, opts);
};
export {
fromWorker
};