Mirror: 🎩 A tiny but capable push & pull stream library for TypeScript and Flow
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

Fix passesSinkClose for delay operator (#48)

This fixes the delay operator by removing an unnecessary
End event being sent when Close is received.
It also fixes a potential duplicate End signal and renames
`gotEndSignal` to `ended`.

authored by

Phil Plückthun and committed by
GitHub
dcbdaf50 1bdbaccc

+13 -19
+12 -18
src/web/wonkaJs.re
··· 71 71 type delayStateT = { 72 72 mutable talkback: (. talkbackT) => unit, 73 73 mutable active: int, 74 - mutable gotEndSignal: bool, 74 + mutable ended: bool, 75 75 }; 76 76 77 77 [@genType] ··· 81 81 let state: delayStateT = { 82 82 talkback: Wonka_helpers.talkbackPlaceholder, 83 83 active: 0, 84 - gotEndSignal: false, 84 + ended: false, 85 85 }; 86 86 87 87 source((. signal) => 88 88 switch (signal) { 89 89 | Start(tb) => state.talkback = tb 90 - | _ when !state.gotEndSignal => 90 + | _ when !state.ended => 91 91 state.active = state.active + 1; 92 92 ignore( 93 93 Js.Global.setTimeout( 94 - () => { 95 - if (state.gotEndSignal && state.active === 0) { 96 - sink(. End); 97 - } else { 94 + () => 95 + if (!state.ended || state.active !== 0) { 98 96 state.active = state.active - 1; 99 - }; 100 - 101 - sink(. signal); 102 - }, 97 + sink(. signal); 98 + }, 103 99 wait, 104 100 ), 105 101 ); ··· 111 107 Start( 112 108 (. signal) => 113 109 switch (signal) { 114 - | Close => 115 - state.gotEndSignal = true; 116 - if (state.active === 0) { 117 - sink(. End); 118 - }; 119 - | _ when !state.gotEndSignal => state.talkback(. signal) 120 - | _ => () 110 + | Close when !state.ended => 111 + state.ended = true; 112 + state.talkback(. Close); 113 + | Pull when !state.ended => state.talkback(. Pull) 114 + | Pull => () 121 115 }, 122 116 ), 123 117 );
+1 -1
src/wonka_operators.test.ts
··· 456 456 const noop = web.delay(0); 457 457 passesPassivePull(noop); 458 458 passesActivePush(noop); 459 - // TODO: passesSinkClose(noop); 459 + passesSinkClose(noop); 460 460 passesSourceEnd(noop); 461 461 passesSingleStart(noop); 462 462 passesAsyncSequence(noop);