Mirror: 馃帺 A tiny but capable push & pull stream library for TypeScript and Flow
at v3.2.1 759 B view raw
1open Wonka_types; 2open Wonka_helpers; 3 4type toArrayStateT('a) = { 5 values: Rebel.MutableQueue.t('a), 6 mutable talkback: (. talkbackT) => unit, 7 mutable value: option('a), 8 mutable ended: bool, 9}; 10 11let toArray = (source: sourceT('a)): array('a) => { 12 let state: toArrayStateT('a) = { 13 values: Rebel.MutableQueue.make(), 14 talkback: talkbackPlaceholder, 15 value: None, 16 ended: false, 17 }; 18 19 source((. signal) => 20 switch (signal) { 21 | Start(x) => 22 state.talkback = x; 23 x(. Pull); 24 | Push(value) => 25 Rebel.MutableQueue.add(state.values, value); 26 state.talkback(. Pull); 27 | End => state.ended = true 28 } 29 ); 30 31 if (!state.ended) { 32 state.talkback(. Close); 33 }; 34 35 Rebel.MutableQueue.toArray(state.values); 36};