1 | import merge2 from "merge2";
|
2 | import { Reporter, ReportOptions, StreamReporter, VinylReporter } from "../reporter";
|
3 |
|
4 | export 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 | }
|