cm
callbag-merge
npm i callbag-merge
cm

callbag-merge

👜 Callbag factory that merges data from multiple callbag sources

by André Staltz

3.2.2 (see all)License:MITTypeScript:Built-In
npm i callbag-merge
Readme

'use strict';

/**

  • callbag-merge

  • Callbag factory that merges data from multiple callbag sources. Works well
  • with listenable sources, and while it may work for some pullable sources,
  • it is only designed for listenable sources.
  • npm install callbag-merge
  • Example:
  • const interval = require('callbag-interval');
    
  • const forEach = require('callbag-for-each');
    
  • const merge = require('callbag-merge');
    
  • const source = merge(interval(100), interval(350));
    
  • forEach(x => console.log(x))(source); // 0
    
  •                                       // 1
    
  •                                       // 2
    
  •                                       // 0
    
  •                                       // 3
    
  •                                       // 4
    
  •                                       // 5
    
  •                                       // ...
    
    */

function merge(...sources) { return (start, sink) => { if (start !== 0) return; const n = sources.length; const sourceTalkbacks = new Array(n); let startCount = 0; let endCount = 0; let ended = false; const talkback = (t, d) => { if (t === 2) ended = true; for (let i = 0; i < n; i++) sourceTalkbacks[i] && sourceTalkbacks[i](t, d); }; for (let i = 0; i < n; i++) { if (ended) return; sources[i](0, (t, d) => { if (t === 0) { sourceTalkbacks[i] = d; if (++startCount === 1) sink(0, talkback); } else if (t === 2 && d) { ended = true; for (let j = 0; j < n; j++) { if (j !== i) sourceTalkbacks[j] && sourceTalkbacksj; } sink(2, d); } else if (t === 2) { sourceTalkbacks[i] = void 0; if (++endCount === n) sink(2); } else sink(t, d); }); } }; }

module.exports = merge;

Downloads/wk

3.2K

GitHub Stars

7

LAST COMMIT

3yrs ago

MAINTAINERS

1

CONTRIBUTORS

6

OPEN ISSUES

0

OPEN PRs

0
VersionTagPublished
3.2.2
latest
3yrs ago
No alternatives found
No tutorials found
Add a tutorial

Rate & Review

100
No reviews found
Be the first to rate