# Event-Based Stores ## deriveEventsMapped Creates a store that maintains a mapped collection of events from a repository. Useful when you want to transform events into a different data structure while maintaining reactivity. ```typescript import {Repository, NAMED_PEOPLE, type TrustedEvent} from '@welshman/util' import {deriveEventsMapped} from '@welshman/store' interface UserProfile { name: string; about: string; pubkey: string; } const repository = new Repository() const profiles = deriveEventsMapped(repository, { filters: [{kinds: [PROFILE]}], eventToItem: (event: TrustedEvent) => ({ name: event.content.name, about: event.content.about, pubkey: event.pubkey, }), itemToEvent: (profile: UserProfile) => ({ // Convert profile back to event format kind: PROFILE, pubkey: profile.pubkey, content: { name: profile.name, about: profile.about, } }), throttle: 1000, // Optional: throttle updates includeDeleted: false // Optional: exclude deleted events }) ``` ## deriveEvents Creates a store that maintains a collection of raw events from a repository. Useful when you want to work directly with events without transformation. ```typescript import {Repository} from '@welshman/util' import {deriveEvents} from '@welshman/store' const repository = new Repository() const textNotes = deriveEvents(repository, { filters: [{kinds: [NOTE], // kind 1 = text note authors: ['pubkey1', 'pubkey2']}], throttle: 500, includeDeleted: false }) // Subscribe to changes textNotes.subscribe(events => { console.log('New text notes:', events) }) ``` ## deriveEvent Creates a store that tracks a single event by its ID or address. Returns a derived store containing the event or undefined. ```typescript import {Repository} from '@welshman/util' import {deriveEvent} from '@welshman/store' const repository = new Repository() const specificEvent = deriveEvent(repository, 'event_id_or_address') // Subscribe to changes of the specific event specificEvent.subscribe(event => { if (event) { console.log('Event updated:', event) } else { console.log('Event not found') } }) ``` ## deriveIsDeleted Creates a store that tracks whether an event has been deleted. Returns a boolean store. ```typescript import {Repository} from '@welshman/util' import {deriveIsDeleted} from '@welshman/store' const repository = new Repository() const event = /* your event */ const isDeleted = deriveIsDeleted(repository, event) // Subscribe to deletion status changes isDeleted.subscribe(deleted => { console.log('Event deleted status:', deleted) }) ``` ## deriveIsDeletedByAddress Creates a store that tracks whether an event has been deleted by address. Similar to deriveIsDeleted but checks deletion by address instead of event ID. ```typescript import {Repository} from '@welshman/util' import {deriveIsDeletedByAddress} from '@welshman/store' const repository = new Repository() const event = /* your event */ const isDeletedByAddress = deriveIsDeletedByAddress(repository, event) // Subscribe to address-based deletion status changes isDeletedByAddress.subscribe(deleted => { if (deleted) { console.log('Event has been deleted by address') } }) ```