UNPKG

1.34 kBPlain TextView Raw
1import merge2 from "merge2";
2import { Reporter, ReportOptions, StreamReporter, VinylReporter } from "../reporter";
3
4export class CompoundReporter implements Reporter {
5 private readonly streamReporters: ReadonlyArray<StreamReporter>;
6 private readonly vinylReporters: ReadonlyArray<VinylReporter>;
7
8 constructor(reporters: ReadonlyArray<Reporter>) {
9 const streamReporters: StreamReporter[] = [];
10 const vinylReporters: VinylReporter[] = [];
11 for (const reporter of reporters) {
12 if (reporter.reportStream !== undefined) {
13 streamReporters.push(reporter as StreamReporter);
14 }
15 if (reporter.reportVinyl !== undefined) {
16 vinylReporters.push(reporter as VinylReporter);
17 }
18 }
19 this.streamReporters = streamReporters;
20 this.vinylReporters = vinylReporters;
21 }
22
23 public reportStream(options: ReportOptions): NodeJS.ReadableStream {
24 const streams: NodeJS.ReadableStream[] = [];
25 for (const reporter of this.streamReporters) {
26 streams.push(reporter.reportStream(options));
27 }
28 return merge2(streams);
29 }
30
31 public reportVinyl(options: ReportOptions): NodeJS.ReadableStream {
32 const streams: NodeJS.ReadableStream[] = [];
33 for (const reporter of this.vinylReporters) {
34 streams.push(reporter.reportVinyl(options));
35 }
36 return merge2(streams);
37 }
38}