Mirror: 馃帺 A tiny but capable push & pull stream library for TypeScript and Flow
1open Wonka_types; 2 3type delayStateT = { 4 mutable talkback: (. talkbackT) => unit, 5 mutable active: int, 6 mutable gotEndSignal: bool, 7}; 8 9let delay = wait => 10 curry(source => 11 curry(sink => { 12 let state: delayStateT = { 13 talkback: Wonka_helpers.talkbackPlaceholder, 14 active: 0, 15 gotEndSignal: false, 16 }; 17 18 source((. signal) => 19 switch (signal) { 20 | Start(tb) => state.talkback = tb 21 | _ when !state.gotEndSignal => 22 state.active = state.active + 1; 23 ignore( 24 Js.Global.setTimeout( 25 () => { 26 if (state.gotEndSignal && state.active === 0) { 27 sink(. End); 28 } else { 29 state.active = state.active - 1; 30 }; 31 32 sink(. signal); 33 }, 34 wait, 35 ), 36 ); 37 | _ => () 38 } 39 ); 40 41 sink(. 42 Start( 43 (. signal) => 44 switch (signal) { 45 | Close => 46 state.gotEndSignal = true; 47 if (state.active === 0) { 48 sink(. End); 49 }; 50 | _ when !state.gotEndSignal => state.talkback(. signal) 51 | _ => () 52 }, 53 ), 54 ); 55 }) 56 );