1 | import { Reporter } from "./reporter";
|
2 | import { createHtmlReporter } from "./reporters/html";
|
3 | import { createLcovFileReporter, createLcovReporter } from "./reporters/lcov";
|
4 | import { createTextFileReporter, createTextReporter } from "./reporters/text";
|
5 |
|
6 | export type ReporterFactory = (options: any) => Reporter;
|
7 |
|
8 | export class ReporterRegistry {
|
9 | private readonly registry: Map<string, ReporterFactory>;
|
10 |
|
11 | constructor() {
|
12 | this.registry = new Map();
|
13 | }
|
14 |
|
15 | public register(id: string, factory: ReporterFactory): void {
|
16 | this.registry.set(id, factory);
|
17 | }
|
18 |
|
19 | public create(id: string, options: any): Reporter {
|
20 | const factory: ReporterFactory | undefined = this.registry.get(id);
|
21 | if (factory === undefined) {
|
22 | throw new Error(`Unknown reporter ${id}, available: ${[...this.registry.keys()].join(", ")}`);
|
23 | }
|
24 | return factory(options);
|
25 | }
|
26 | }
|
27 |
|
28 | export const DEFAULT_REGISTRY: ReporterRegistry = new ReporterRegistry();
|
29 |
|
30 | DEFAULT_REGISTRY.register("text", createTextReporter);
|
31 | DEFAULT_REGISTRY.register("text-file", createTextFileReporter);
|
32 | DEFAULT_REGISTRY.register("lcov", createLcovReporter);
|
33 |
|
34 | DEFAULT_REGISTRY.register("lcovonly", createLcovFileReporter);
|
35 | DEFAULT_REGISTRY.register("lcov-file", createLcovFileReporter);
|
36 | DEFAULT_REGISTRY.register("html", createHtmlReporter);
|