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