UNPKG

@nostr-dev-kit/ndk-svelte

Version:

This package provides convenience functionalities to make usage of NDK with Svelte nicer.

64 lines (63 loc) 2.06 kB
// src/index.svelte.ts import NDK from "@nostr-dev-kit/ndk"; import { onDestroy } from "svelte"; var NDKSvelte = class extends NDK { /** * Subscribes to NDK events and returns a reactive list of events. * Automatically cleans up the subscription when no longer needed. */ $subscribe = (filters, opts, klass) => { const eventList = $state([]); const eventMap = /* @__PURE__ */ new Map(); const processEvent = (event) => { let e = event; if (klass) { const convertedEvent = klass.from(event); if (!convertedEvent) return; e = convertedEvent; e.relay = event.relay; } const dedupKey = e.deduplicationKey(); if (eventMap.has(dedupKey)) { const existingEvent = eventMap.get(dedupKey); if (existingEvent.created_at >= e.created_at) return; } const isDeleted = e.isParamReplaceable() && e.hasTag("deleted"); eventMap.set(dedupKey, e); if (isDeleted && opts?.skipDeleted !== false) { const index = eventList.findIndex((event2) => event2.deduplicationKey() === dedupKey); if (index !== -1) { eventList.splice(index, 1); } return; } const pos = eventList.findIndex((event2) => event2.created_at < e.created_at); eventList.splice(pos, 0, e); }; const subscription = this.subscribe( Array.isArray(filters) ? filters : [filters], opts, // opts already contains relaySet if it was passed // opts?.relaySet, // Removed: Passed via opts false // autoStart = false ); subscription.on("event", (event, relay) => { processEvent(event); if (opts?.onEvent) opts.onEvent(event, relay); }); subscription.on("eose", () => { if (opts?.onEose) opts.onEose(); }); subscription.start(); onDestroy(() => { subscription.stop(); }); eventList.unsubscribe = () => subscription.stop(); return eventList; }; }; var index_svelte_default = NDKSvelte; export { index_svelte_default as default };