import { Subscription } from 'rxjs'; import { STORE_EVENT_BUS, StoreEvent } from './storeEvents'; import { getStateMutationMetadata, isInternalStore } from './storeMetadata'; export type StoreExtensionApi = Readonly<{ getStateMutationMetadata: typeof getStateMutationMetadata; }>; export type StoreExtension = (api: StoreExtensionApi) => { onStoreEvent?: (event: StoreEvent) => void; }; export function registerStoreExtension( extension: StoreExtension, ): Subscription { const api: StoreExtensionApi = { getStateMutationMetadata, }; const middleware = extension(api); return STORE_EVENT_BUS.subscribe((event) => { if (middleware.onStoreEvent && !isInternalStore(event.store)) { middleware.onStoreEvent(event); } }); }