/** * Base Registry * * Generic base class for all FlowDrop registries. Provides the shared * mechanics: Map storage, subscribe/notify, onClear callbacks, and size tracking. * * Subclasses define their own `register()` method with domain-appropriate * signatures, using `this.items` and `this.notifyListeners()` directly. * * @example * ```typescript * class MyRegistry extends BaseRegistry { * register(item: MyItem, overwrite = false): void { * if (this.items.has(item.id) && !overwrite) { * throw new Error(`Already registered: ${item.id}`); * } * this.items.set(item.id, item); * this.notifyListeners(); * } * } * ``` */ export declare class BaseRegistry { /** Internal storage map */ protected items: Map; /** Change listeners */ private listeners; /** Callbacks invoked when the registry is cleared (for resetting flags) */ private clearCallbacks; /** * Unregister an item by key. * * @param key - The key to remove * @returns true if the key was found and removed, false otherwise */ unregister(key: K): boolean; /** * Get an item by key. * * @param key - The key to look up * @returns The item if found, undefined otherwise */ get(key: K): V | undefined; /** * Check if a key is registered. * * @param key - The key to check * @returns true if the key is registered */ has(key: K): boolean; /** * Get all registered keys. * * @returns Array of registered keys */ getKeys(): K[]; /** * Get all registered values. * * @returns Array of all registered items */ getAll(): V[]; /** * Subscribe to registry changes. * Called whenever items are registered, unregistered, or cleared. * * @param listener - Callback to invoke on changes * @returns Unsubscribe function */ subscribe(listener: () => void): () => void; /** * Register a callback invoked when the registry is cleared. * Useful for resetting module-level registration flags in tests. * * @param callback - Function to call on clear * @returns Unsubscribe function */ onClear(callback: () => void): () => void; /** * Clear all registrations. * Invokes onClear callbacks first, then notifies listeners. */ clear(): void; /** * Get the count of registered items. */ get size(): number; /** * Notify all change listeners. */ protected notifyListeners(): void; }