* Register a provider * * @param provider - Provider to register * @returns Unregister function
(provider: MentionProvider)
| 41 | * @returns Unregister function |
| 42 | */ |
| 43 | register(provider: MentionProvider): () => void { |
| 44 | if (this.providers.has(provider.id)) { |
| 45 | console.warn( |
| 46 | `[MentionRegistry] Provider "${provider.id}" already registered, replacing` |
| 47 | ) |
| 48 | // Deactivate existing provider |
| 49 | const existing = this.providers.get(provider.id) |
| 50 | existing?.deactivate?.() |
| 51 | } |
| 52 | |
| 53 | this.providers.set(provider.id, provider) |
| 54 | |
| 55 | // Activate provider asynchronously |
| 56 | if (provider.activate) { |
| 57 | const activationPromise = provider.activate().catch((error) => { |
| 58 | console.error( |
| 59 | `[MentionRegistry] Failed to activate provider "${provider.id}":`, |
| 60 | error |
| 61 | ) |
| 62 | }) |
| 63 | this.activationPromises.set(provider.id, activationPromise) |
| 64 | } |
| 65 | |
| 66 | this.notifyListeners() |
| 67 | |
| 68 | // Return unregister function |
| 69 | return () => this.unregister(provider.id) |
| 70 | } |
| 71 | |
| 72 | /** |
| 73 | * Register multiple providers at once |
no test coverage detected