wechaty-redux
Version:
Wechaty Redux Plugin Powered By Ducks
59 lines • 3.77 kB
JavaScript
import { fromEvent as rxFromEvent, merge, } from 'rxjs';
import { map, share, } from 'rxjs/operators';
import { registerPuppet, } from './registry/mod.js';
import * as duck from './duck/mod.js';
const fromEvent = rxFromEvent;
/**
* Ducks operations need to get Puppet instance by id
* this map is used to store the Puppet instances
*/
const puppet$ = (puppetInterface, options) => {
const puppet = puppetInterface;
/**
* active/inactive state change
*/
const state = puppet.state;
const stateActive$ = fromEvent(state, 'active');
const stateInactive$ = fromEvent(state, 'inactive');
/**
* events
*/
const dong$ = fromEvent(puppet, 'dong');
const error$ = fromEvent(puppet, 'error');
const friendship$ = fromEvent(puppet, 'friendship');
const heartbeat$ = fromEvent(puppet, 'heartbeat');
const login$ = fromEvent(puppet, 'login');
const logout$ = fromEvent(puppet, 'logout');
const message$ = fromEvent(puppet, 'message');
const ready$ = fromEvent(puppet, 'ready');
const reset$ = fromEvent(puppet, 'reset');
const roomInvite$ = fromEvent(puppet, 'room-invite');
const roomJoin$ = fromEvent(puppet, 'room-join');
const roomLeave$ = fromEvent(puppet, 'room-leave');
const roomTopic$ = fromEvent(puppet, 'room-topic');
const scan$ = fromEvent(puppet, 'scan');
const start$ = fromEvent(puppet, 'start');
const stop$ = fromEvent(puppet, 'stop');
/**
* Merge everything to one stream$
*/
return merge(
/* eslint-disable func-call-spacing */
/* eslint-disable no-whitespace-before-property */
stateActive$.pipe(map(status => duck.actions.STATE_ACTIVATED_EVENT(puppet.id, status))), stateInactive$.pipe(map(status => duck.actions.STATE_INACTIVATED_EVENT(puppet.id, status))), start$.pipe(map(() => duck.actions.STARTED_EVENT(puppet.id))), stop$.pipe(map(() => duck.actions.STOPPED_EVENT(puppet.id))), dong$.pipe(map(payload => duck.actions.DONG_RECEIVED_EVENT(puppet.id, payload))), error$.pipe(map(payload => duck.actions.ERROR_RECEIVED_EVENT(puppet.id, payload))), friendship$.pipe(map(payload => duck.actions.FRIENDSHIP_RECEIVED_EVENT(puppet.id, payload))), heartbeat$.pipe(map(payload => duck.actions.HEARTBEAT_RECEIVED_EVENT(puppet.id, payload))), login$.pipe(map(payload => duck.actions.LOGIN_RECEIVED_EVENT(puppet.id, payload))), logout$.pipe(map(payload => duck.actions.LOGOUT_RECEIVED_EVENT(puppet.id, payload))), message$.pipe(map(payload => duck.actions.MESSAGE_RECEIVED_EVENT(puppet.id, payload))), ready$.pipe(map(payload => duck.actions.READY_RECEIVED_EVENT(puppet.id, payload))), reset$.pipe(map(payload => duck.actions.RESET_RECEIVED_EVENT(puppet.id, payload))), roomInvite$.pipe(map(payload => duck.actions.ROOM_INVITE_RECEIVED_EVENT(puppet.id, payload))), roomJoin$.pipe(map(payload => duck.actions.ROOM_JOIN_RECEIVED_EVENT(puppet.id, payload))), roomLeave$.pipe(map(payload => duck.actions.ROOM_LEAVE_RECEIVED_EVENT(puppet.id, payload))), roomTopic$.pipe(map(payload => duck.actions.ROOM_TOPIC_RECEIVED_EVENT(puppet.id, payload))), scan$.pipe(map(payload => duck.actions.SCAN_RECEIVED_EVENT(puppet.id, payload)))).pipe(
/**
* share() === multicast(() => new Subject()).refCount()
* @see https://itnext.io/the-magic-of-rxjs-sharing-operators-and-their-differences-3a03d699d255
*/
share(),
/**
* Save the puppet instance to the map when there's any subscription
* and automatically remove the puppet instance from the map when there's no subscription
*
* - Huan(202111): put it below the `share()`
* because we want to count the ref numbers internally
*/
registerPuppet(puppet, options));
};
export { puppet$, };
//# sourceMappingURL=puppet$.js.map