UNPKG

wechaty-redux

Version:

Wechaty Redux Plugin Powered By Ducks

60 lines 2.5 kB
import { log } from 'wechaty-puppet'; import * as duck from '../duck/mod.js'; const wechatyRef = new Map(); const increaseWechatyReferenceInRegistry = (registry) => (wechaty) => { const counter = wechatyRef.get(wechaty.id) ?? 0; const incCounter = counter + 1; log.verbose('WechatyRedux', 'increaseWechatyReferenceInRegistry() counter: %d', incCounter); if (incCounter === 1) { log.verbose('WechatyRedux', 'increaseWechatyReferenceInRegistry() register wechaty id: %s', wechaty.id); registry.set(wechaty.id, wechaty); } wechatyRef.set(wechaty.id, incCounter); return incCounter; }; const decreaseWechatyReferenceInRegistry = (registry) => (wechaty) => { const counter = wechatyRef.get(wechaty.id) ?? 0; const decCounter = counter - 1; log.verbose('WechatyRedux', 'decreaseWechatyReferenceInRegistry() counter: %d', decCounter); wechatyRef.set(wechaty.id, decCounter); if (decCounter <= 0) { log.verbose('WechatyRedux', 'decreaseWechatyReferenceInRegistry() deregister wechaty id: %s', wechaty.id); registry.delete(wechaty.id); wechatyRef.delete(wechaty.id); } return decCounter; }; /** * Wechaty automatic registration RxJS operator * * - Creating new operators from scratch * @see https://rxjs.dev/guide/operators * */ const registerWechatyInRegistry = (registry) => (wechaty, store) => { log.verbose('WechatyRedux', 'registerWechatyInRegistry() wechaty id: %s', wechaty.id); const counter = increaseWechatyReferenceInRegistry(registry)(wechaty); /** * Emit `RegisterWechaty` action when first time subscribe to the wechaty */ if (counter === 1) { store.dispatch(duck.actions.REGISTER_WECHATY_COMMAND(wechaty.id)); } /** * Return the teardown logic. * * This will be invoked when the result errors, completes, or is unsubscribed. */ return () => { log.verbose('WechatyRedux', 'registerWechatyInRegistry() dispose wechaty id: %s', wechaty.id); const counter = decreaseWechatyReferenceInRegistry(registry)(wechaty); if (counter <= 0) { /** * Cleanup wechaty in registry with reference counter */ store.dispatch(duck.actions.DEREGISTER_WECHATY_COMMAND(wechaty.id)); } }; }; export { registerWechatyInRegistry, increaseWechatyReferenceInRegistry, decreaseWechatyReferenceInRegistry, wechatyRef, }; //# sourceMappingURL=register-wechaty.js.map