import type { PluginCapability } from '../sdk/types'; export interface RegistryEntry { pluginId: string; id?: string; [key: string]: unknown; } export declare class PluginRegistry { private entries; private listeners; private version; /** * Copy-on-write: a mutation replaces the array rather than pushing into it. * Consumers read through `useSyncExternalStore`, which bails out when the snapshot * is `Object.is`-equal, so an in-place push would notify and then be discarded. * Copying also leaves untouched extension points at their old identity, so * registering a map tool does not re-render the BIM toolbar. */ register(extensionPoint: PluginCapability | string, entry: RegistryEntry): void; getAll(extensionPoint: string): T[]; deregisterAll(pluginId: string): void; clear(): void; /** Subscribe to contribution changes. Returns the unsubscribe function. */ subscribe(listener: () => void): () => void; /** Monotonic counter, bumped on every actual change. Useful in tests and debug UI. */ getVersion(): number; private bump; } //# sourceMappingURL=registry.d.ts.map