UNPKG

1.33 kBPlain TextView Raw
1import { Reporter } from "./reporter";
2import { createHtmlReporter } from "./reporters/html";
3import { createLcovFileReporter, createLcovReporter } from "./reporters/lcov";
4import { createTextFileReporter, createTextReporter } from "./reporters/text";
5
6export type ReporterFactory = (options: any) => Reporter;
7
8export 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
28export const DEFAULT_REGISTRY: ReporterRegistry = new ReporterRegistry();
29
30DEFAULT_REGISTRY.register("text", createTextReporter);
31DEFAULT_REGISTRY.register("text-file", createTextFileReporter);
32DEFAULT_REGISTRY.register("lcov", createLcovReporter);
33// TODO: Deprecate `lcovonly`
34DEFAULT_REGISTRY.register("lcovonly", createLcovFileReporter);
35DEFAULT_REGISTRY.register("lcov-file", createLcovFileReporter);
36DEFAULT_REGISTRY.register("html", createHtmlReporter);