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 takeWhile emitting two Start signals (#46)

* Fix takeWhile emitting two Start signals

* Remove ref usage from takeWhile

authored by

Phil Plückthun and committed by
GitHub
01f29fb4 7db1de17

+16 -25
+15 -22
src/wonka_operators.re
··· 902 902 }) 903 903 ); 904 904 905 + type takeWhileStateT = { 906 + mutable talkback: (. talkbackT) => unit, 907 + mutable ended: bool, 908 + }; 909 + 905 910 [@genType] 906 911 let takeWhile = (f: (. 'a) => bool): operatorT('a, 'a) => 907 912 curry(source => 908 913 curry(sink => { 909 - let ended = ref(false); 910 - let talkback = ref(talkbackPlaceholder); 914 + let state: takeWhileStateT = { 915 + talkback: talkbackPlaceholder, 916 + ended: false, 917 + }; 911 918 912 919 source((. signal) => 913 920 switch (signal) { 914 921 | Start(tb) => 915 - talkback := tb; 922 + state.talkback = tb; 916 923 sink(. signal); 917 - | End when ! ended^ => 918 - ended := true; 924 + | End when !state.ended => 925 + state.ended = true; 919 926 sink(. End); 920 927 | End => () 921 - | Push(x) when ! ended^ => 928 + | Push(x) when !state.ended => 922 929 if (!f(. x)) { 923 - ended := true; 930 + state.ended = true; 924 931 sink(. End); 925 - talkback^(. Close); 932 + state.talkback(. Close); 926 933 } else { 927 934 sink(. signal); 928 935 } 929 936 | Push(_) => () 930 937 } 931 - ); 932 - 933 - sink(. 934 - Start( 935 - (. signal) => 936 - if (! ended^) { 937 - switch (signal) { 938 - | Pull => talkback^(. Pull) 939 - | Close => 940 - ended := true; 941 - talkback^(. Close); 942 - }; 943 - }, 944 - ), 945 938 ); 946 939 }) 947 940 );
+1 -3
src/wonka_operators.test.ts
··· 916 916 passesActivePush(noop); 917 917 passesSinkClose(noop); 918 918 passesSourceEnd(noop); 919 - // TODO: passesSingleStart(noop); 919 + passesSingleStart(noop); 920 920 passesStrictEnd(noop); 921 921 passesAsyncSequence(noop); 922 922 ··· 931 931 next(1); 932 932 next(2); 933 933 934 - expect(fn).toHaveBeenCalledTimes(4); 935 934 expect(fn.mock.calls).toEqual([ 936 - [deriving.start(expect.any(Function))], 937 935 [deriving.start(expect.any(Function))], 938 936 [deriving.push(1)], 939 937 [deriving.end()],