summaryrefslogtreecommitdiff
path: root/std/signal/mod.ts
blob: e368edbd123d667573d1ada4cc68f3a076de888f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import { MuxAsyncIterator } from "../util/async.ts";

export function signal(
  ...signos: [number, ...number[]]
): AsyncIterable<void> & { dispose: () => void } {
  const mux = new MuxAsyncIterator<void>();

  if (signos.length < 1) {
    throw new Error(
      "No signals are given. You need to specify at least one signal to create a signal stream."
    );
  }

  const streams = signos.map(Deno.signal);

  streams.forEach(stream => {
    mux.add(stream);
  });

  // Create dispose method for the muxer of signal streams.
  const dispose = (): void => {
    streams.forEach(stream => {
      stream.dispose();
    });
  };

  return Object.assign(mux, { dispose });
}