wechaty-redux
Version:
Wechaty Redux Plugin Powered By Ducks
60 lines • 2.5 kB
JavaScript
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