From 91e1232112421438ce73b9361896f9b58c84fb3e Mon Sep 17 00:00:00 2001 From: Maze Winther Date: Tue, 14 Apr 2026 23:34:57 +0200 Subject: feat: transcription diagnostics --- apps/web/src/core/managers/diagnostics-manager.ts | 38 +++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 apps/web/src/core/managers/diagnostics-manager.ts (limited to 'apps/web/src/core/managers') diff --git a/apps/web/src/core/managers/diagnostics-manager.ts b/apps/web/src/core/managers/diagnostics-manager.ts new file mode 100644 index 00000000..d022a350 --- /dev/null +++ b/apps/web/src/core/managers/diagnostics-manager.ts @@ -0,0 +1,38 @@ +import type { EditorCore } from "@/core"; +import type { DiagnosticDefinition } from "@/lib/diagnostics/types"; + +interface DiagnosticRegistration extends DiagnosticDefinition { + check: (editor: EditorCore) => boolean; +} + +export class DiagnosticsManager { + private readonly registrations: DiagnosticRegistration[] = []; + private readonly listeners = new Set<() => void>(); + + constructor(private editor: EditorCore) {} + + register(registration: DiagnosticRegistration): void { + this.registrations.push(registration); + this.notify(); + } + + getActive(options?: { scope?: string }): ReadonlyArray { + const candidates = + options?.scope !== undefined + ? this.registrations.filter((r) => r.scope === options.scope) + : this.registrations; + + return candidates.filter((r) => r.check(this.editor)); + } + + subscribe(listener: () => void): () => void { + this.listeners.add(listener); + return () => this.listeners.delete(listener); + } + + notify(): void { + this.listeners.forEach((listener) => { + listener(); + }); + } +} -- cgit v1.3.1