Mirror: 馃帺 A tiny but capable push & pull stream library for TypeScript and Flow
at v3.1.0 3.1 kB view raw
1open Wonka_types; 2 3let testWithListenable = operator => { 4 let sink = ref((. _: signalT(int)) => ()); 5 let signals = [||]; 6 let source = x => { 7 sink := x; 8 x(. Start((. signal) => ignore(Js.Array.push(signal, signals)))); 9 }; 10 11 let talkback = ref((. _: talkbackT) => ()); 12 let res = [||]; 13 operator(source, (. signal) => 14 switch (signal) { 15 | Start(x) => talkback := x 16 | _ => ignore(Js.Array.push(signal, res)) 17 } 18 ); 19 20 Js.Promise.make((~resolve, ~reject as _) => { 21 sink^(. Push(1)); 22 ignore( 23 Js.Global.setTimeout( 24 () => { 25 sink^(. Push(2)); 26 ignore( 27 Js.Global.setTimeout( 28 () => { 29 sink^(. End); 30 ignore( 31 Js.Global.setTimeout(() => resolve(. (signals, res)), 0), 32 ); 33 }, 34 0, 35 ), 36 ); 37 }, 38 0, 39 ), 40 ); 41 }); 42}; 43 44let testTalkbackEnd = operator => { 45 let sink = ref((. _: signalT(int)) => ()); 46 let signals: array(talkbackT) = [||]; 47 let source = x => { 48 x(. Start((. signal) => ignore(Js.Array.push(signal, signals)))); 49 sink := x; 50 }; 51 52 let talkback = ref((. _: talkbackT) => ()); 53 let res = [||]; 54 operator(source, (. signal) => 55 switch (signal) { 56 | Start(x) => talkback := x 57 | _ => ignore(Js.Array.push(signal, res)) 58 } 59 ); 60 61 Js.Promise.make((~resolve, ~reject as _) => { 62 sink^(. Push(1)); 63 ignore( 64 Js.Global.setTimeout( 65 () => { 66 talkback^(. Close); 67 ignore(Js.Global.setTimeout(() => resolve(. (signals, res)), 0)); 68 }, 69 0, 70 ), 71 ); 72 }); 73}; 74 75let testSource = source => { 76 let talkback = ref((. _: talkbackT) => ()); 77 let res = [||]; 78 79 Js.Promise.make((~resolve, ~reject as _) => 80 source((. signal) => 81 switch (signal) { 82 | Start(x) => 83 talkback := x; 84 talkback^(. Pull); 85 | Push(_) => 86 ignore(Js.Array.push(signal, res)); 87 talkback^(. Pull); 88 | End => 89 ignore(Js.Array.push(signal, res)); 90 resolve(. res); 91 } 92 ) 93 ); 94}; 95 96type observableClassT; 97 98[@bs.module] external observableClass: observableClassT = "zen-observable"; 99[@bs.send] 100external _observableFromArray: 101 (observableClassT, array('a)) => Wonka.observableT('a) = 102 "from"; 103[@bs.send] 104external _observableFrom: 105 (observableClassT, Wonka.observableT('a)) => Wonka.observableT('a) = 106 "from"; 107[@bs.send] 108external observableForEach: 109 (Wonka.observableT('a), 'a => unit) => Js.Promise.t(unit) = 110 "forEach"; 111 112let observableFromArray = (arr: array('a)): Wonka.observableT('a) => 113 _observableFromArray(observableClass, arr); 114let observableFrom = (obs: Wonka.observableT('a)): Wonka.observableT('a) => 115 _observableFrom(observableClass, obs); 116 117[@bs.module] 118external callbagFromArray: array('a) => Wonka.callbagT('a) = 119 "callbag-from-iter"; 120 121[@bs.module] 122external callbagFromObservable: Wonka.observableT('a) => Wonka.callbagT('a) = 123 "callbag-from-obs"; 124 125[@bs.module] 126external callbagIterate: (. ('a => unit)) => (. Wonka.callbagT('a)) => unit = 127 "callbag-iterate";