UNPKG

nano-pubsub

Version:

Zero dependency, tiny (<0.5 kb) publish/subscribe

1 lines 1.22 kB
{"version":3,"file":"index.cjs","sources":["../src/index.ts"],"sourcesContent":["/**\n * @public\n */\nexport interface Subscriber<Event> {\n (event: Event): void\n}\n/**\n * @public\n */\nexport interface PubSub<Message> {\n publish: (message: Message) => void\n subscribe: (subscriber: Subscriber<Message>) => () => void\n}\n\n/**\n * @public\n */\nexport default function createPubSub<Message = void>(): PubSub<Message> {\n const subscribers: {[id: string]: Subscriber<Message>} = Object.create(null)\n let nextId = 0\n function subscribe(subscriber: Subscriber<Message>) {\n const id = nextId++\n subscribers[id] = subscriber\n return function unsubscribe() {\n delete subscribers[id]\n }\n }\n\n function publish(event: Message) {\n for (const id in subscribers) {\n subscribers[id](event)\n }\n }\n\n return {\n publish,\n subscribe,\n }\n}\n"],"names":[],"mappings":";AAiBA,SAAwB,eAAgD;AAChE,QAAA,cAA0D,uBAAA,OAAO,IAAI;AAC3E,MAAI,SAAS;AACb,WAAS,UAAU,YAAiC;AAClD,UAAM,KAAK;AACC,WAAA,YAAA,EAAE,IAAI,YACX,WAAuB;AAC5B,aAAO,YAAY,EAAE;AAAA,IAAA;AAAA,EAEzB;AAEA,WAAS,QAAQ,OAAgB;AAC/B,eAAW,MAAM;AACH,kBAAA,EAAE,EAAE,KAAK;AAAA,EAEzB;AAEO,SAAA;AAAA,IACL;AAAA,IACA;AAAA,EAAA;AAEJ;;"}