wechaty-redux
Version:
Wechaty Redux Plugin Powered By Ducks
89 lines • 4.02 kB
JavaScript
;
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.wechatyRef = exports.decreaseWechatyReferenceInRegistry = exports.increaseWechatyReferenceInRegistry = exports.registerWechatyInRegistry = void 0;
const wechaty_puppet_1 = require("wechaty-puppet");
const duck = __importStar(require("../duck/mod.js"));
const wechatyRef = new Map();
exports.wechatyRef = wechatyRef;
const increaseWechatyReferenceInRegistry = (registry) => (wechaty) => {
const counter = wechatyRef.get(wechaty.id) ?? 0;
const incCounter = counter + 1;
wechaty_puppet_1.log.verbose('WechatyRedux', 'increaseWechatyReferenceInRegistry() counter: %d', incCounter);
if (incCounter === 1) {
wechaty_puppet_1.log.verbose('WechatyRedux', 'increaseWechatyReferenceInRegistry() register wechaty id: %s', wechaty.id);
registry.set(wechaty.id, wechaty);
}
wechatyRef.set(wechaty.id, incCounter);
return incCounter;
};
exports.increaseWechatyReferenceInRegistry = increaseWechatyReferenceInRegistry;
const decreaseWechatyReferenceInRegistry = (registry) => (wechaty) => {
const counter = wechatyRef.get(wechaty.id) ?? 0;
const decCounter = counter - 1;
wechaty_puppet_1.log.verbose('WechatyRedux', 'decreaseWechatyReferenceInRegistry() counter: %d', decCounter);
wechatyRef.set(wechaty.id, decCounter);
if (decCounter <= 0) {
wechaty_puppet_1.log.verbose('WechatyRedux', 'decreaseWechatyReferenceInRegistry() deregister wechaty id: %s', wechaty.id);
registry.delete(wechaty.id);
wechatyRef.delete(wechaty.id);
}
return decCounter;
};
exports.decreaseWechatyReferenceInRegistry = decreaseWechatyReferenceInRegistry;
/**
* Wechaty automatic registration RxJS operator
*
* - Creating new operators from scratch
* @see https://rxjs.dev/guide/operators
*
*/
const registerWechatyInRegistry = (registry) => (wechaty, store) => {
wechaty_puppet_1.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 () => {
wechaty_puppet_1.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));
}
};
};
exports.registerWechatyInRegistry = registerWechatyInRegistry;
//# sourceMappingURL=register-wechaty.js.map