All files subscribe.js

100% Statements 8/8
100% Branches 0/0
100% Functions 5/5
100% Lines 8/8
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31                      4x     3x 3x     4x 4x     28x 10x     4x        
// @flow
 
export type Subscribe = (cb: Function) => Subscription;
 
export type Subscription = {
    cb: Function,
    unsubscribe: Function
}
 
export function factory(subscriptions: Array<Subscription>) {
    function subscribe(cb: Function) {
        const subscription: Subscription = {
            cb,
            unsubscribe: () => {
                const index = subscriptions.indexOf(subscription);
                subscriptions.splice(index, 1)
            }
        };
        subscriptions.push(subscription);
        return subscription
    }
    function callSubscriptions() {
        subscriptions.forEach(sub => {
            sub.cb.apply(null, arguments)
        })
    }
    return {
        subscribe,
        callSubscriptions
    }
}