reactor-core-ts
Version:
The Reactive-Streams based implementation of Reactor-Core
2 lines • 15.6 kB
JavaScript
;var k=Object.defineProperty;var O=Object.getOwnPropertyDescriptor;var A=Object.getOwnPropertyNames;var C=Object.prototype.hasOwnProperty;var g=(n,e)=>{for(var r in e)k(n,r,{get:e[r],enumerable:!0})},I=(n,e,r,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of A(e))!C.call(n,s)&&s!==r&&k(n,s,{get:()=>e[s],enumerable:!(i=O(e,s))||i.enumerable});return n};var W=n=>I(k({},"__esModule",{value:!0}),n);var B={};g(B,{Flux:()=>T,ManySink:()=>p,Mono:()=>h,OneSink:()=>c,ReplayAllSink:()=>R,ReplayLatestSink:()=>f,ReplayLimitSink:()=>M,Schedulers:()=>j,Sinks:()=>_,subject:()=>N});module.exports=W(B);var v=class{constructor(e){this.backpressure=[];this.requested=0;this.subscription=e.subscribe({onNext:r=>{this.backpressure.push({emit:"next",data:r}),this.flush()},onError:r=>{this.backpressure.push({emit:"error",data:r}),this.flush()},onComplete:()=>{this.subscription.unsubscribe(),this.backpressure.push({emit:"complete"}),this.flush()}}),this.subscription.request(Number.MAX_SAFE_INTEGER)}subscribe(e){if(this.subscriber!=null)throw new Error("Backpressure unicast publisher is not accepting new subscribers");return this.subscriber=e,{request:r=>{this.requested+=r,this.flush()},unsubscribe:()=>{this.backpressure=[],this.subscription.unsubscribe()}}}emit(e){switch(e.emit){case"next":{try{this.subscriber?.onNext(e.data)}catch(r){this.subscriber?.onError(r)}break}case"error":{this.subscriber?.onError(e.data);break}case"complete":this.subscriber?.onComplete()}}flush(){for(;this.requested>0&&this.backpressure.length>0;)this.requested--,this.emit(this.backpressure.shift());this.subscriber!=null&&this.backpressure[0]?.emit=="complete"&&this.emit(this.backpressure.shift())}};var S=class{constructor(){this.subscribers=new Set;this.completed=!1}subscribe(e){let r={subscriber:e,data:[],requested:0};return this.subscribers.add(r),{request:i=>{r.requested+=i,this.flush(r)},unsubscribe:()=>{r.data=[],this.subscribers.delete(r)}}}next(e){this.validateEmit();for(let r of this.subscribers)r.data.push({emit:"next",data:e}),this.flush(r)}error(e){this.validateEmit();for(let r of this.subscribers)r.data.push({emit:"error",data:e}),this.flush(r)}complete(){if(!this.completed){this.completed=!0;for(let e of this.subscribers)e.data.push({emit:"complete"}),this.flush(e);this.subscribers.clear()}}emit(e,r){switch(e.emit){case"next":{try{r.onNext(e.data)}catch(i){r.onError(i)}break}case"error":{r.onError(e.data);break}case"complete":r.onComplete()}}validateEmit(){if(this.completed)throw new Error("The completed sink is not accepting new emits.")}flush(e){let r=e.data;for(;e.requested>0&&r.length>0;)e.requested--,this.emit(r.shift(),e.subscriber);r.length>0&&r[0].emit=="complete"&&(e.requested++,this.flush(e))}};var c=class extends S{subscribe(e){if(this.subscribers.size>0)throw new Error("Only one subscriber is allowed for OneSink.");return super.subscribe(e)}next(e){super.next(e),this.complete()}error(e){super.error(e),this.complete()}};var p=class extends S{};var d=class extends p{constructor(){super(...arguments);this.buffer=[]}next(r){super.next(r),this.store("next",r)}error(r){super.error(r),this.store("error",r)}complete(){super.complete(),this.store("complete")}subscribe(r){let i=this.buffer.length;if(i==0)return super.subscribe(r);let s=new p,u=s.subscribe(r);for(let o of this.buffer)s[o.emit](o.data);let t=super.subscribe({onNext:o=>{s.next(o)},onError:o=>{s.error(o)},onComplete:()=>{s.complete()}});return{request(o){u.request(o),i=i-o,i<0&&(t.request(i*-1),i=0)},unsubscribe(){u.unsubscribe(),t.unsubscribe()}}}store(r,i){this.buffer.push({emit:r,data:i})}};var R=class extends d{};var f=class extends d{constructor(r){super();this.limit=r;if(r<1)throw new Error("LatestSink: limit must be > 0")}store(r,i){super.store(r,i),this.buffer.length>this.limit&&this.buffer.shift()}};var M=class extends d{constructor(r){super();this.limit=r;if(r<1)throw new Error("LimitSink: limit must be > 0")}store(r,i){this.buffer.length<this.limit&&super.store(r,i)}};var _={one:()=>new c,many:()=>({multicast:()=>new p,replay:()=>({all:()=>new R,latest:n=>new f(n),limit:n=>new M(n)})})};var x=class{constructor(e){this.publisher=e;this.unsubscribeOnComplete=!0}subscribe({onNext:e=s=>{},onError:r=s=>{},onComplete:i=()=>{}}={}){let s=this.publisher.subscribe({onNext:e,onError:r,onComplete:()=>{i(),this.unsubscribeOnComplete&&s.unsubscribe()}});return this.onSubscribe?.(s),s}canEmitMany(){return!(Reflect.construct(Reflect.getPrototypeOf(this).constructor,[null]).createSink()instanceof c)}pipe(e,r,i,s){let u=Reflect.construct(s||Reflect.getPrototypeOf(this).constructor,[null]).createSink(),t=!(u instanceof c),o=new class extends v{subscribe(l){try{e(a=>{t&&a==null?r?.(1):u.next(a)},a=>{u.error(a),r?.(1)},()=>u.complete())}catch(a){u.error(a)}let m=super.subscribe(l);return{request(a){m.request(a),r?.(a)},unsubscribe(){m.unsubscribe(),i?.()}}}}(u);return this.wrap(o,s)}map(e){let r;return this.pipe((i,s,u)=>r=this.subscribe({onNext:t=>i(e(t)),onError:s,onComplete:u}),i=>r?.request(i),()=>r?.unsubscribe())}mapNotNull(e){return this.map(e).filter(r=>r!=null)}flatMap(e){let r=[],i=[];return this.pipe((s,u,t)=>{let o=this.subscribe({onNext:b=>{i.push(new Promise(l=>{let m;r.push(m=e(b).subscribe({onNext:a=>{s(a)},onError:u,onComplete:()=>{this.canEmitMany()&&o.request(1),l()}})),m.request(Number.MAX_SAFE_INTEGER)}))},onError:u,onComplete:()=>{Promise.all(i).then(t)}});return r.push(o),o},s=>r[0]?.request(s),()=>r.forEach(s=>s.unsubscribe()))}filter(e){let r;return this.pipe((i,s,u)=>r=this.subscribe({onNext:t=>e(t)?i(t):this.canEmitMany()?i(null):u(),onError:s,onComplete:u}),i=>r?.request(i+1),()=>r?.unsubscribe())}filterWhen(e){let r,i=0;return this.pipe((s,u,t)=>r=this.subscribe({onNext:o=>e(o).subscribe({onNext:b=>b?s(o):this.canEmitMany()?s(null):t(),onError:u,onComplete:()=>this.canEmitMany()?()=>{}:t}).request(i),onError:u,onComplete:t}),s=>r?.request(i=s+1),()=>r?.unsubscribe())}cast(){return this}switchIfEmpty(e){let r,i=0;return this.pipe((s,u,t)=>{let o=!1;r=this.subscribe({onNext(b){o=!0,s(b)},onError(b){o=!0,u(b)},onComplete:()=>o?t():e.subscribe({onNext:s,onError:u,onComplete:t}).request(i)})},s=>r?.request(i=s),()=>r?.unsubscribe())}onErrorReturn(e){let r,i=0;return this.pipe((s,u,t)=>r=this.subscribe({onNext:s,onError:()=>e.subscribe({onNext:s,onError:u,onComplete:t}).request(i),onComplete:t}),s=>r?.request(i=s),()=>r?.unsubscribe())}onErrorContinue(e){let r;return this.pipe((i,s,u)=>r=this.subscribe({onNext:i,onError:t=>e(t)?this.canEmitMany()?i(null):u():s(t),onComplete:u}),i=>r?.request(i+1),()=>r?.unsubscribe())}doFirst(e){let r;return this.pipe((i,s,u)=>{e(),r=this.subscribe({onNext:i,onError:s,onComplete:u})},i=>r?.request(i),()=>r?.unsubscribe())}doOnNext(e){let r;return this.pipe((i,s,u)=>r=this.subscribe({onNext:t=>{e(t),i(t)},onError:s,onComplete:u}),i=>r?.request(i),()=>r?.unsubscribe())}doOnError(e){let r;return this.pipe((i,s,u)=>r=this.subscribe({onNext:i,onError:t=>{e(t),s(t)},onComplete:u}),i=>r?.request(i),()=>r?.unsubscribe())}doFinally(e){let r,i=!1;return this.pipe((s,u,t)=>r=this.subscribe({onNext:s,onError:u,onComplete:t}),s=>r?.request(s),()=>{r?.unsubscribe(),i||(i=!0,e())})}doOnSubscribe(e){let r,i=this.onSubscribe;return this.onSubscribe=s=>{i?.(s),e(s)},this.pipe((s,u,t)=>r=this.subscribe({onNext:s,onError:u,onComplete:t}),s=>r?.request(s),()=>r?.unsubscribe())}publishOn(e){let r;return this.pipe((i,s,u)=>r=this.subscribe({onNext:t=>e.schedule(()=>i(t)),onError:t=>e.schedule(()=>s(t)),onComplete:()=>e.schedule(()=>u())}),i=>r?.request(i),()=>r?.unsubscribe())}subscribeOn(e){let r;return this.pipe((i,s,u)=>r=new Promise(t=>e.schedule(()=>t(this.subscribe({onNext:i,onError:s,onComplete:u})))),i=>r?.then(s=>s.request(i)),()=>r?.then(i=>i.unsubscribe()))}wrap(e,r){this.unsubscribeOnComplete=!1,r==null&&(r=Reflect.getPrototypeOf(this).constructor);let i=Reflect.construct(r,[e]);return i.unsubscribeOnComplete=!0,this.onSubscribe!=null&&(i.onSubscribe=this.onSubscribe,this.onSubscribe=void 0),i}};function y(n,e){return new class extends v{subscribe(i){let s=e(n),u=super.subscribe(i),t=typeof s?.request=="function";return{request(o){u.request(o),!t||s?.request(o)},unsubscribe(){u.unsubscribe(),!t||s?.unsubscribe()}}}}(n)}function N(n){let e=n,r=new f(1);return r.next(n),{next(i){r.next(e=i)},update(i){this.next(i(e))},get(){return e},subscribe({onNext:i=t=>{},onError:s=t=>{},onComplete:u=()=>{}}={}){return T.from(r).distinctUntilChanged().subscribe({onNext:i,onError:s,onComplete:u})}}}var P=class{schedule(e){Promise.resolve().then(e)}};var E=class{constructor(e){this.delay=e}schedule(e){let r=setTimeout(e,this.delay);return{cancel:()=>clearTimeout(r)}}};var T=class n extends x{constructor(e){super(e)}static generate(e){return new n(y(new p,e))}static from(e){return n.generate(r=>e.subscribe({onNext(i){r.next(i)},onError(i){r.error(i)},onComplete(){r.complete()}}))}static fromIterable(e){return n.generate(r=>{for(let i of e)r.next(i);r.complete()})}static range(e,r){return n.generate(i=>{let s=e;for(let u=0;u<r;u++)i.next(s++);i.complete()})}static empty(){return n.generate(e=>{e.complete()})}static defer(e){return n.generate(r=>e().subscribe({onNext(i){r.next(i)},onError(i){r.error(i)},onComplete(){r.complete()}}))}first(){let e;return this.pipe((r,i,s)=>{e=this.subscribe({onNext:r,onError:i,onComplete:s})},r=>e?.request(1),()=>e?.unsubscribe(),h)}last(){let e;return this.pipe((r,i,s)=>{let u,t;e=this.subscribe({onNext(o){t=void 0,u=o},onError(o){u=void 0,t=o},onComplete(){u!=null?r(u):t!=null?i(t):s()}})},r=>e?.request(Number.MAX_SAFE_INTEGER),()=>e?.unsubscribe(),h)}count(){return this.collect().map(e=>e.length)}hasElements(){return this.count().map(e=>e>0)}collect(e=!1){let r;return this.pipe((i,s,u)=>{let t=[];r=this.subscribe({onNext(o){t.push(o)},onError(o){s(o)},onComplete(){i(t)}}),e&&new P().schedule(()=>{try{i(t)}catch{}r.unsubscribe()})},i=>r?.request(Number.MAX_SAFE_INTEGER),()=>r?.unsubscribe(),h)}indexed(){let e;return this.pipe((r,i,s)=>{let u=0;e=this.subscribe({onNext(t){r([u++,t])},onError:i,onComplete:s})},r=>e?.request(r),()=>e?.unsubscribe())}skip(e){return this.indexed().filter(r=>r[0]>=e).map(r=>r[1])}skipWhile(e){let r;return this.pipe((i,s,u)=>{let t=!0;r=this.subscribe({onNext(o){!t||!e(o)?(t=!1,i(o)):i(null)},onError:s,onComplete:u})},i=>r?.request(i+1),()=>r?.unsubscribe())}skipUntil(e){let r;return this.pipe((i,s,u)=>{let t=!1,o=this.subscribe({onNext:l=>{i(t?l:null)},onError:s,onComplete:u}),b=e.subscribe({onNext(l){t=!0},onError:s,onComplete(){}});r={request(l){o.request(l),b.request(l)},unsubscribe(){o.unsubscribe(),b.unsubscribe()}}},i=>r?.request(i+1),()=>r?.unsubscribe())}distinct(){let e;return this.pipe((r,i,s)=>{let u=new Set;e=this.subscribe({onNext:t=>{u.has(t)?r(null):(u.add(t),r(t))},onError:i,onComplete:s})},r=>e?.request(r+1),()=>e?.unsubscribe())}distinctUntilChanged(e=(r,i)=>r!=i){let r;return this.pipe((i,s,u)=>{let t=null;r=this.subscribe({onNext(o){t==null||e(t,o)?i(t=o):i(null)},onError(o){s(o)},onComplete(){u()}})},i=>r?.request(i+1),()=>r?.unsubscribe())}delayElements(e){let r;return this.pipe((i,s,u)=>{let t=Promise.resolve(),o=b=>{t=t.then(()=>new Promise(l=>{new E(e).schedule(()=>{b(),l()})}))};r=this.subscribe({onNext(b){o(()=>i(b))},onError(b){o(()=>s(b))},onComplete(){o(()=>u())}})},i=>r?.request(i),()=>r?.unsubscribe())}concatWith(e){let r;return this.pipe((i,s,u)=>{let t,o=this.subscribe({onNext(b){i(b)},onError(b){s(b)},onComplete(){t=e.subscribe({onNext:i,onError:s,onComplete:u})}});r={request(b){o.request(b),t?.request(b)},unsubscribe(){o.unsubscribe(),t?.unsubscribe()}}},i=>r?.request(i),()=>r?.unsubscribe())}mergeWith(e){let r;return this.pipe((i,s,u)=>{let t=2,o={onNext:i,onError:s,onComplete(){--t<=0&&u()}},b=this.subscribe(o),l=e.subscribe(o);r={request(m){b.request(m),l.request(m)},unsubscribe(){b.unsubscribe(),l.unsubscribe()}}},i=>r?.request(i),()=>r?.unsubscribe())}reduce(e){return this.collect().map(r=>r.reduce(e))}reduceWith(e,r){let i;return this.pipe((s,u,t)=>{let o=e();i=this.subscribe({onNext(b){o=r(o,b)},onError:u,onComplete(){s(o)}})},s=>i?.request(Number.MAX_SAFE_INTEGER),()=>i?.unsubscribe(),h)}then(){let e;return this.pipe((r,i,s)=>{e=this.subscribe({onNext(u){},onError:i,onComplete:s})},r=>e?.request(Number.MAX_SAFE_INTEGER),()=>e?.unsubscribe(),h)}thenEmpty(e){return this.collect().flatMap(r=>e).flatMap(r=>h.empty())}pipe(e,r,i,s){return super.pipe(e,r,i,s)}map(e){return super.map(e)}mapNotNull(e){return super.mapNotNull(e)}flatMap(e){return super.flatMap(e)}filter(e){return super.filter(e)}filterWhen(e){return super.filterWhen(e)}cast(){return super.cast()}switchIfEmpty(e){return super.switchIfEmpty(e)}onErrorReturn(e){return super.onErrorReturn(e)}onErrorContinue(e){return super.onErrorContinue(e)}doFirst(e){return super.doFirst(e)}doOnNext(e){return super.doOnNext(e)}doOnError(e){return super.doOnError(e)}doFinally(e){return super.doFinally(e)}doOnSubscribe(e){return super.doOnSubscribe(e)}publishOn(e){return super.publishOn(e)}subscribeOn(e){return super.subscribeOn(e)}createSink(){return new p}};var h=class n extends x{constructor(e){super(e)}static generate(e){return new n(y(new c,e))}static from(e){return n.generate(r=>{let i=e.subscribe({onNext(s){r.next(s),i.unsubscribe()},onError(s){r.error(s),i.unsubscribe()},onComplete(){r.complete(),i.unsubscribe()}});return i})}static just(e){return n.generate(r=>r.next(e))}static justOrEmpty(e){return e==null?n.empty():n.just(e)}static empty(){return n.generate(e=>e.complete())}static error(e){return n.generate(r=>r.error(e))}static fromPromise(e){return n.generate(r=>e.then(i=>r.next(i)).catch(i=>r.error(i)))}static defer(e){return n.generate(r=>e().subscribe({onNext(i){r.next(i)},onError(i){r.error(i)},onComplete(){r.complete()}}))}flatMapMany(e){let r,i;return this.pipe((s,u,t)=>{r=this.subscribe({onNext:o=>{i=e(o).subscribe({onNext:s,onError:u,onComplete:t})},onError:u,onComplete:()=>{i==null&&t()}})},s=>{r?.request(s),i?.request(s)},()=>{r?.unsubscribe(),i?.unsubscribe()},T)}zipWith(e){return this.flatMap(r=>e.map(i=>[r,i]))}zipWhen(e){return this.flatMap(r=>e(r).map(i=>[r,i]))}hasElement(){return this.onErrorContinue(e=>!0).map(e=>!0).switchIfEmpty(n.defer(()=>n.just(!1)))}toPromise(){return new Promise((e,r)=>{let i=null;this.subscribe({onNext:s=>i=s,onError:r,onComplete:()=>e(i)}).request(1)})}pipe(e,r,i,s){return super.pipe(e,r,i,s)}map(e){return super.map(e)}mapNotNull(e){return super.mapNotNull(e)}flatMap(e){return super.flatMap(e)}filter(e){return super.filter(e)}filterWhen(e){return super.filterWhen(e)}cast(){return super.cast()}switchIfEmpty(e){return super.switchIfEmpty(e)}onErrorReturn(e){return super.onErrorReturn(e)}onErrorContinue(e){return super.onErrorContinue(e)}doFirst(e){return super.doFirst(e)}doOnNext(e){return super.doOnNext(e)}doOnError(e){return super.doOnError(e)}doFinally(e){return super.doFinally(e)}doOnSubscribe(e){return super.doOnSubscribe(e)}publishOn(e){return super.publishOn(e)}subscribeOn(e){return super.subscribeOn(e)}createSink(){return new c}};var q=class{schedule(e){e()}};var F=class{schedule(e){setTimeout(e,0)}};var w=class{constructor(e){this.interval=e}schedule(e){let r=setInterval(e,this.interval);return{cancel:()=>clearInterval(r)}}};var j={immediate:()=>new q,micro:()=>new P,macro:()=>new F,delay:n=>new E(n),interval:n=>new w(n)};0&&(module.exports={Flux,ManySink,Mono,OneSink,ReplayAllSink,ReplayLatestSink,ReplayLimitSink,Schedulers,Sinks,subject});
//# sourceMappingURL=index.js.map