@react-rxjs/utils
Advanced tools
Comparing version
@@ -12,2 +12,2 @@ import { Observable } from "rxjs"; | ||
*/ | ||
export declare const combineKeys: <K, T>(keys$: Observable<K[] | Set<K>>, getInner$: (key: K) => Observable<T>) => Observable<MapWithChanges<K, T>>; | ||
export declare const combineKeys: <K, T>(keys$: Observable<Iterable<K>>, getInner$: (key: K) => Observable<T>) => Observable<MapWithChanges<K, T>>; |
@@ -13,3 +13,3 @@ import { GroupedObservable, Observable } from "rxjs"; | ||
*/ | ||
export declare function partitionByKey<T, K, R>(stream: Observable<T>, keySelector: (value: T) => K, streamSelector: (grouped: Observable<T>, key: K) => Observable<R>): [(key: K) => GroupedObservable<K, R>, Observable<K[]>]; | ||
export declare function partitionByKey<T, K, R>(stream: Observable<T>, keySelector: (value: T) => K, streamSelector: (grouped: Observable<T>, key: K) => Observable<R>): [(key: K) => GroupedObservable<K, R>, Observable<IterableIterator<K>>]; | ||
/** | ||
@@ -25,2 +25,2 @@ * Groups the elements from the source stream by using `keySelector`, returning | ||
*/ | ||
export declare function partitionByKey<T, K>(stream: Observable<T>, keySelector: (value: T) => K): [(key: K) => GroupedObservable<K, T>, Observable<K[]>]; | ||
export declare function partitionByKey<T, K>(stream: Observable<T>, keySelector: (value: T) => K): [(key: K) => GroupedObservable<K, T>, Observable<IterableIterator<K>>]; |
@@ -9,3 +9,2 @@ var __create = Object.create; | ||
var __export = (target, all) => { | ||
__markAsModule(target); | ||
for (var name in all) | ||
@@ -27,2 +26,3 @@ __defProp(target, name, { get: all[name], enumerable: true }); | ||
// src/index.tsx | ||
__markAsModule(exports); | ||
__export(exports, { | ||
@@ -172,3 +172,3 @@ combineKeys: () => combineKeys, | ||
groups.delete(key); | ||
subscriber.next(mapGroups(groups)); | ||
subscriber.next(groups); | ||
if (groups.size === 0 && sourceCompleted) { | ||
@@ -179,3 +179,3 @@ subscriber.complete(); | ||
subject.next(x); | ||
subscriber.next(mapGroups(groups)); | ||
subscriber.next(groups); | ||
emitted = true; | ||
@@ -198,3 +198,3 @@ }, (e) => { | ||
if (!emitted) | ||
subscriber.next(mapGroups(groups)); | ||
subscriber.next(groups); | ||
return () => { | ||
@@ -210,8 +210,5 @@ sub.unsubscribe(); | ||
(key) => getGroupedObservable(groupedObservables$, key), | ||
groupedObservables$.pipe((0, import_operators2.map)((x) => Array.from(x.keys()))) | ||
groupedObservables$.pipe((0, import_operators2.map)((m) => m.keys())) | ||
]; | ||
} | ||
function mapGroups(groups) { | ||
return new Map(Array.from(groups.entries()).map(([key, group]) => [key, group.observable])); | ||
} | ||
var getGroupedObservable = (source$, key) => { | ||
@@ -222,3 +219,3 @@ const result = new import_rxjs5.Observable((observer) => { | ||
var _a; | ||
innerSub = innerSub || ((_a = n.get(key)) == null ? void 0 : _a.subscribe(observer)); | ||
innerSub = innerSub || ((_a = n.get(key)) == null ? void 0 : _a.observable.subscribe(observer)); | ||
}, (e) => { | ||
@@ -225,0 +222,0 @@ observer.error(e); |
@@ -1,2 +0,2 @@ | ||
var H=Object.create;var O=Object.defineProperty;var J=Object.getOwnPropertyDescriptor;var Q=Object.getOwnPropertyNames;var X=Object.getPrototypeOf,Y=Object.prototype.hasOwnProperty;var g=e=>O(e,"__esModule",{value:!0});var Z=(e,s)=>{g(e);for(var r in s)O(e,r,{get:s[r],enumerable:!0})},_=(e,s,r)=>{if(s&&typeof s=="object"||typeof s=="function")for(let t of Q(s))!Y.call(e,t)&&t!=="default"&&O(e,t,{get:()=>s[t],enumerable:!(r=J(s,t))||r.enumerable});return e},i=e=>_(g(O(e!=null?H(X(e)):{},"default",e&&e.__esModule&&"default"in e?{get:()=>e.default,enumerable:!0}:{value:e,enumerable:!0})),e);Z(exports,{combineKeys:()=>h,contextBinder:()=>C,createKeyedSignal:()=>j,createListener:()=>$,createSignal:()=>K,mergeWithKey:()=>E,partitionByKey:()=>R,selfDependant:()=>D,suspend:()=>T,suspended:()=>B,switchMapSuspended:()=>U});var A=i(require("rxjs")),h=(e,s)=>new A.Observable(r=>{let t=new Map,n=new Set,o=new Map,a=!1,l=!0,m=()=>{if(!a){let p=Object.assign(new Map(o),{changes:n});n=new Set,l=!1,r.next(p)}},b=e.subscribe(p=>{a=!0;let f=new Set(p);t.forEach((c,u)=>{f.has(u)?f.delete(u):(c.unsubscribe(),t.delete(u),o.has(u)&&(n.add(u),o.delete(u)))}),f.forEach(c=>{t.set(c,s(c).subscribe(u=>{(!o.has(c)||o.get(c)!==u)&&(n.add(c),o.set(c,u),m())},u=>{r.error(u)}))}),a=!1,(n.size||l&&!f.size)&&m()},p=>{r.error(p)},()=>{r.complete()});return()=>{b.unsubscribe(),t.forEach(p=>{p.unsubscribe()})}});var x=i(require("rxjs"));function K(e=x.identity){let s=new x.Subject;return[s.asObservable(),(...r)=>s.next(e(...r))]}var w=i(require("rxjs"));function j(e,s){let r=new Map;return[t=>{let n=new w.Observable(o=>{r.has(t)||r.set(t,new Set);let a=r.get(t);return a.add(o),()=>{a.delete(o),a.size===0&&r.delete(t)}});return n.key=t,n},(...t)=>{var a;let n=s?s(...t):t.length===2?t[1]:t[0],o=e?e(n):t[0];(a=r.get(o))==null||a.forEach(l=>{l.next(n)})}]}var v=i(require("rxjs")),G=i(require("rxjs/operators")),E=(e,...s)=>(0,v.merge)(...Object.entries(e).map(([r,t])=>(0,v.from)(t).pipe((0,G.map)(n=>({type:r,payload:n})))).concat(s));var y=i(require("@react-rxjs/core")),d=i(require("rxjs")),M=i(require("rxjs/operators"));function R(e,s,r){let t=new d.Observable(n=>{let o=new Map,a=!1,l=!1,m=e.subscribe(b=>{let p=s(b);if(o.has(p))return o.get(p).source.next(b);let f=new d.Subject,c=(0,y.shareLatest)()((r||d.identity)(f,p));c.key=p;let u={source:f,observable:c,subscription:new d.Subscription};o.set(p,u),u.subscription=c.subscribe(d.noop,q=>n.error(q),()=>{o.delete(p),n.next(S(o)),o.size===0&&l&&n.complete()}),f.next(b),n.next(S(o)),a=!0},b=>{l=!0,o.size?o.forEach(p=>p.source.error(b)):n.error(b)},()=>{l=!0,o.size?o.forEach(b=>b.source.complete()):n.complete()});return a||n.next(S(o)),()=>{m.unsubscribe(),o.forEach(b=>{b.source.unsubscribe(),b.subscription.unsubscribe()})}}).pipe((0,y.shareLatest)());return[n=>ee(t,n),t.pipe((0,M.map)(n=>Array.from(n.keys())))]}function S(e){return new Map(Array.from(e.entries()).map(([s,r])=>[s,r.observable]))}var ee=(e,s)=>{let r=new d.Observable(t=>{let n,o=e.subscribe(a=>{var l;n=n||((l=a.get(s))==null?void 0:l.subscribe(t))},a=>{t.error(a)},()=>{t.complete()});return()=>{n==null||n.unsubscribe(),o.unsubscribe()}});return r.key=s,r};var P=i(require("rxjs")),V=i(require("@react-rxjs/core"));var k=i(require("rxjs")),I=e=>s=>new k.Observable(r=>{let t=!1,n=s.subscribe(o=>{t=!0,r.next(o)},o=>{r.error(o)},()=>{r.complete()});return t||r.next(e),n});var T=e=>I(V.SUSPENSE)((0,P.from)(e));var B=()=>T;var L=i(require("rxjs")),N=i(require("rxjs/operators"));var U=e=>(0,L.pipe)((0,N.switchMap)((s,r)=>T(e(s,r))));var F=i(require("rxjs")),z=i(require("rxjs/operators")),D=()=>{let e=new F.Subject;return[e.asObservable(),()=>(0,z.tap)(e)]};var W=i(require("@react-rxjs/core")),re=e=>e();function C(...e){let s=()=>e.map(re);return function(){let[r,t]=W.bind.apply(null,arguments);return[(...n)=>r(...s(),...n),t]}}function $(...e){return K(...e)} | ||
var q=Object.create;var x=Object.defineProperty;var H=Object.getOwnPropertyDescriptor;var J=Object.getOwnPropertyNames;var Q=Object.getPrototypeOf,X=Object.prototype.hasOwnProperty;var S=e=>x(e,"__esModule",{value:!0});var Y=(e,o)=>{for(var n in o)x(e,n,{get:o[n],enumerable:!0})},Z=(e,o,n)=>{if(o&&typeof o=="object"||typeof o=="function")for(let r of J(o))!X.call(e,r)&&r!=="default"&&x(e,r,{get:()=>o[r],enumerable:!(n=H(o,r))||n.enumerable});return e},p=e=>Z(S(x(e!=null?q(Q(e)):{},"default",e&&e.__esModule&&"default"in e?{get:()=>e.default,enumerable:!0}:{value:e,enumerable:!0})),e);S(exports);Y(exports,{combineKeys:()=>A,contextBinder:()=>W,createKeyedSignal:()=>j,createListener:()=>C,createSignal:()=>K,mergeWithKey:()=>G,partitionByKey:()=>k,selfDependant:()=>z,suspend:()=>T,suspended:()=>V,switchMapSuspended:()=>N});var g=p(require("rxjs")),A=(e,o)=>new g.Observable(n=>{let r=new Map,t=new Set,s=new Map,a=!1,l=!0,m=()=>{if(!a){let i=Object.assign(new Map(s),{changes:t});t=new Set,l=!1,n.next(i)}},u=e.subscribe(i=>{a=!0;let f=new Set(i);r.forEach((c,b)=>{f.has(b)?f.delete(b):(c.unsubscribe(),r.delete(b),s.has(b)&&(t.add(b),s.delete(b)))}),f.forEach(c=>{r.set(c,o(c).subscribe(b=>{(!s.has(c)||s.get(c)!==b)&&(t.add(c),s.set(c,b),m())},b=>{n.error(b)}))}),a=!1,(t.size||l&&!f.size)&&m()},i=>{n.error(i)},()=>{n.complete()});return()=>{u.unsubscribe(),r.forEach(i=>{i.unsubscribe()})}});var O=p(require("rxjs"));function K(e=O.identity){let o=new O.Subject;return[o.asObservable(),(...n)=>o.next(e(...n))]}var h=p(require("rxjs"));function j(e,o){let n=new Map;return[r=>{let t=new h.Observable(s=>{n.has(r)||n.set(r,new Set);let a=n.get(r);return a.add(s),()=>{a.delete(s),a.size===0&&n.delete(r)}});return t.key=r,t},(...r)=>{var a;let t=o?o(...r):r.length===2?r[1]:r[0],s=e?e(t):r[0];(a=n.get(s))==null||a.forEach(l=>{l.next(t)})}]}var v=p(require("rxjs")),w=p(require("rxjs/operators")),G=(e,...o)=>(0,v.merge)(...Object.entries(e).map(([n,r])=>(0,v.from)(r).pipe((0,w.map)(t=>({type:n,payload:t})))).concat(o));var y=p(require("@react-rxjs/core")),d=p(require("rxjs")),E=p(require("rxjs/operators"));function k(e,o,n){let r=new d.Observable(t=>{let s=new Map,a=!1,l=!1,m=e.subscribe(u=>{let i=o(u);if(s.has(i))return s.get(i).source.next(u);let f=new d.Subject,c=(0,y.shareLatest)()((n||d.identity)(f,i));c.key=i;let b={source:f,observable:c,subscription:new d.Subscription};s.set(i,b),b.subscription=c.subscribe(d.noop,$=>t.error($),()=>{s.delete(i),t.next(s),s.size===0&&l&&t.complete()}),f.next(u),t.next(s),a=!0},u=>{l=!0,s.size?s.forEach(i=>i.source.error(u)):t.error(u)},()=>{l=!0,s.size?s.forEach(u=>u.source.complete()):t.complete()});return a||t.next(s),()=>{m.unsubscribe(),s.forEach(u=>{u.source.unsubscribe(),u.subscription.unsubscribe()})}}).pipe((0,y.shareLatest)());return[t=>_(r,t),r.pipe((0,E.map)(t=>t.keys()))]}var _=(e,o)=>{let n=new d.Observable(r=>{let t,s=e.subscribe(a=>{var l;t=t||((l=a.get(o))==null?void 0:l.observable.subscribe(r))},a=>{r.error(a)},()=>{r.complete()});return()=>{t==null||t.unsubscribe(),s.unsubscribe()}});return n.key=o,n};var R=p(require("rxjs")),P=p(require("@react-rxjs/core"));var I=p(require("rxjs")),M=e=>o=>new I.Observable(n=>{let r=!1,t=o.subscribe(s=>{r=!0,n.next(s)},s=>{n.error(s)},()=>{n.complete()});return r||n.next(e),t});var T=e=>M(P.SUSPENSE)((0,R.from)(e));var V=()=>T;var B=p(require("rxjs")),L=p(require("rxjs/operators"));var N=e=>(0,B.pipe)((0,L.switchMap)((o,n)=>T(e(o,n))));var U=p(require("rxjs")),F=p(require("rxjs/operators")),z=()=>{let e=new U.Subject;return[e.asObservable(),()=>(0,F.tap)(e)]};var D=p(require("@react-rxjs/core")),ee=e=>e();function W(...e){let o=()=>e.map(ee);return function(){let[n,r]=D.bind.apply(null,arguments);return[(...t)=>n(...o(),...t),r]}}function C(...e){return K(...e)} | ||
//# sourceMappingURL=utils.cjs.production.min.js.map |
@@ -137,3 +137,3 @@ // src/combineKeys.ts | ||
groups.delete(key); | ||
subscriber.next(mapGroups(groups)); | ||
subscriber.next(groups); | ||
if (groups.size === 0 && sourceCompleted) { | ||
@@ -144,3 +144,3 @@ subscriber.complete(); | ||
subject.next(x); | ||
subscriber.next(mapGroups(groups)); | ||
subscriber.next(groups); | ||
emitted = true; | ||
@@ -163,3 +163,3 @@ }, (e) => { | ||
if (!emitted) | ||
subscriber.next(mapGroups(groups)); | ||
subscriber.next(groups); | ||
return () => { | ||
@@ -175,8 +175,5 @@ sub.unsubscribe(); | ||
(key) => getGroupedObservable(groupedObservables$, key), | ||
groupedObservables$.pipe(map2((x) => Array.from(x.keys()))) | ||
groupedObservables$.pipe(map2((m) => m.keys())) | ||
]; | ||
} | ||
function mapGroups(groups) { | ||
return new Map(Array.from(groups.entries()).map(([key, group]) => [key, group.observable])); | ||
} | ||
var getGroupedObservable = (source$, key) => { | ||
@@ -187,3 +184,3 @@ const result = new Observable5((observer) => { | ||
var _a; | ||
innerSub = innerSub || ((_a = n.get(key)) == null ? void 0 : _a.subscribe(observer)); | ||
innerSub = innerSub || ((_a = n.get(key)) == null ? void 0 : _a.observable.subscribe(observer)); | ||
}, (e) => { | ||
@@ -190,0 +187,0 @@ observer.error(e); |
@@ -1,280 +0,240 @@ | ||
// src/internal-utils.ts | ||
import {Observable, Subscription} from "rxjs"; | ||
import {shareLatest} from "@react-rxjs/core"; | ||
var defaultStart = (value) => (source$) => new Observable((observer) => { | ||
let emitted = false; | ||
const subscription = source$.subscribe((x) => { | ||
emitted = true; | ||
observer.next(x); | ||
}, (e) => { | ||
observer.error(e); | ||
}, () => { | ||
observer.complete(); | ||
}); | ||
if (!emitted) { | ||
observer.next(value); | ||
} | ||
return subscription; | ||
}); | ||
var collector = (enhancer2) => (source$) => new Observable((observer) => { | ||
const subscription = new Subscription(); | ||
const map3 = new Map(); | ||
let emitted = false; | ||
subscription.add(source$.subscribe((x) => { | ||
subscription.add(enhancer2(x).subscribe((v) => { | ||
map3.set(x.key, v); | ||
emitted = true; | ||
observer.next(map3); | ||
}, (e) => { | ||
observer.error(e); | ||
}, () => { | ||
map3.delete(x.key); | ||
observer.next(map3); | ||
})); | ||
}, (e) => { | ||
observer.error(e); | ||
}, () => { | ||
map3.clear(); | ||
observer.next(map3); | ||
observer.complete(); | ||
})); | ||
if (!emitted) | ||
observer.next(map3); | ||
return subscription; | ||
}).pipe(shareLatest()); | ||
import { publish, mergeMap, takeUntil, takeLast, endWith, scan, map, skipWhile, distinctUntilChanged, ignoreElements, startWith, shareReplay, switchMap, tap } from 'rxjs/operators'; | ||
import { defer, Observable, Subject, merge, from, ReplaySubject } from 'rxjs'; | ||
import { shareLatest, SUSPENSE } from '@react-rxjs/core'; | ||
// src/collectValues.ts | ||
var collectValues = () => collector((x) => x); | ||
var defaultStart = function defaultStart(value) { | ||
return function (source$) { | ||
return new Observable(function (observer) { | ||
var emitted = false; | ||
var subscription = source$.subscribe(function (x) { | ||
emitted = true; | ||
observer.next(x); | ||
}, function (e) { | ||
return observer.error(e); | ||
}, function () { | ||
return observer.complete(); | ||
}); | ||
// src/collect.ts | ||
import {noop, Observable as Observable2} from "rxjs"; | ||
var enhancer = (source) => new Observable2((observer) => { | ||
const done = () => { | ||
observer.complete(); | ||
}; | ||
observer.next(source); | ||
return source.subscribe(noop, done, done); | ||
}); | ||
var collect = () => collector(enhancer); | ||
if (!emitted) { | ||
observer.next(value); | ||
} | ||
// src/combineKeys.ts | ||
import {Observable as Observable3} from "rxjs"; | ||
var combineKeys = (keys$, getInner$) => new Observable3((observer) => { | ||
const innerSubscriptions = new Map(); | ||
const currentValue = new Map(); | ||
let updatingSource = false; | ||
const next = () => { | ||
if (!updatingSource) | ||
observer.next(new Map(currentValue)); | ||
return subscription; | ||
}); | ||
}; | ||
const subscription = keys$.subscribe((nextKeysArr) => { | ||
updatingSource = true; | ||
const nextKeys = new Set(nextKeysArr); | ||
let changes = false; | ||
innerSubscriptions.forEach((sub, key) => { | ||
if (!nextKeys.has(key)) { | ||
sub.unsubscribe(); | ||
if (currentValue.has(key)) { | ||
changes = true; | ||
currentValue.delete(key); | ||
} | ||
} else { | ||
nextKeys.delete(key); | ||
} | ||
}; | ||
var scanWithDefaultValue = function scanWithDefaultValue(accumulator, getSeed) { | ||
return function (source) { | ||
return defer(function () { | ||
var seed = getSeed(); | ||
return source.pipe(scan(accumulator, seed), defaultStart(seed)); | ||
}); | ||
nextKeys.forEach((key) => { | ||
innerSubscriptions.set(key, getInner$(key).subscribe((x) => { | ||
if (!currentValue.has(key) || currentValue.get(key) !== x) { | ||
changes = true; | ||
currentValue.set(key, x); | ||
next(); | ||
} | ||
}, (e) => { | ||
observer.error(e); | ||
}; | ||
}; | ||
var set = "s"; | ||
var del = "d"; | ||
var complete = "c"; | ||
var collector = function collector(source, enhancer) { | ||
return source.pipe(publish(function (x) { | ||
return x.pipe(mergeMap(enhancer), takeUntil(takeLast(1)(x))); | ||
}), endWith({ | ||
t: complete | ||
}), scanWithDefaultValue(function (acc, val) { | ||
if (val.t === set) { | ||
acc.set(val.k, val.v); | ||
} else if (val.t === del) { | ||
acc["delete"](val.k); | ||
} else { | ||
acc.clear(); | ||
} | ||
return acc; | ||
}, function () { | ||
return new Map(); | ||
}), shareLatest()); | ||
}; | ||
/** | ||
* A pipeable operator that collects all the GroupedObservables emitted by | ||
* the source and emits a Map with the latest values of the inner observables. | ||
*/ | ||
var collectValues = function collectValues() { | ||
return function (source$) { | ||
return collector(source$, function (inner$) { | ||
return inner$.pipe(map(function (v) { | ||
return { | ||
t: set, | ||
k: inner$.key, | ||
v: v | ||
}; | ||
}), endWith({ | ||
t: del, | ||
k: inner$.key | ||
})); | ||
}); | ||
updatingSource = false; | ||
if (changes) | ||
next(); | ||
}, (e) => { | ||
observer.error(e); | ||
}, () => { | ||
observer.complete(); | ||
}); | ||
return () => { | ||
subscription.unsubscribe(); | ||
innerSubscriptions.forEach((sub) => { | ||
sub.unsubscribe(); | ||
}); | ||
}; | ||
}); | ||
}; | ||
// src/getGroupedObservable.ts | ||
import {Observable as Observable4} from "rxjs"; | ||
var getGroupedObservable = (source$, key) => { | ||
const result = new Observable4((observer) => { | ||
let innerSub; | ||
let outterSub = source$.subscribe((n) => { | ||
innerSub = innerSub || n.get(key)?.subscribe(observer); | ||
}, (e) => { | ||
observer.error(e); | ||
}, () => { | ||
observer.complete(); | ||
}); | ||
return () => { | ||
innerSub?.unsubscribe(); | ||
outterSub.unsubscribe(); | ||
}; | ||
}); | ||
result.key = key; | ||
return result; | ||
var defaultFilter = function defaultFilter(source$) { | ||
return source$.pipe(ignoreElements(), startWith(true), endWith(false)); | ||
}; | ||
/** | ||
* A pipeable operator that collects all the GroupedObservables emitted by | ||
* the source and emits a Map with the active inner observables | ||
* | ||
* @param filter? A function that receives the inner Observable and returns an | ||
* Observable of boolean values, which indicates whether the inner observable | ||
* should be collected. | ||
*/ | ||
// src/createSignal.ts | ||
import {identity, Subject} from "rxjs"; | ||
function createSignal(mapper = identity) { | ||
const subject = new Subject(); | ||
return [subject.asObservable(), (...args) => subject.next(mapper(...args))]; | ||
} | ||
// src/createKeyedSignal.ts | ||
import {identity as identity2, Observable as Observable6} from "rxjs"; | ||
function createKeyedSignal(keySelector = identity2, mapper = identity2) { | ||
const observersMap = new Map(); | ||
return [ | ||
(key) => { | ||
const res = new Observable6((observer) => { | ||
if (!observersMap.has(key)) { | ||
observersMap.set(key, new Set()); | ||
} | ||
const set = observersMap.get(key); | ||
set.add(observer); | ||
return () => { | ||
set.delete(observer); | ||
if (set.size === 0) { | ||
observersMap.delete(key); | ||
} | ||
var collect = function collect(filter) { | ||
var enhancer = filter ? function (source$) { | ||
return filter(source$).pipe(endWith(false), skipWhile(function (x) { | ||
return !x; | ||
}), distinctUntilChanged()); | ||
} : defaultFilter; | ||
return function (source$) { | ||
return collector(source$, function (o) { | ||
return map(function (x) { | ||
return { | ||
t: x ? set : del, | ||
k: o.key, | ||
v: o | ||
}; | ||
}); | ||
res.key = key; | ||
return res; | ||
}, | ||
(...args) => { | ||
const payload = mapper(...args); | ||
observersMap.get(keySelector(payload))?.forEach((o) => { | ||
o.next(payload); | ||
}); | ||
} | ||
]; | ||
} | ||
})(enhancer(o)); | ||
}); | ||
}; | ||
}; | ||
// src/mergeWithKey.ts | ||
import {merge, from} from "rxjs"; | ||
import {map} from "rxjs/operators"; | ||
var mergeWithKey = (input, ...optionalArgs) => merge(...Object.entries(input).map(([type, stream]) => from(stream).pipe(map((payload) => ({type, payload})))).concat(optionalArgs)); | ||
var defaultMapper = function defaultMapper() {}; | ||
// src/partitionByKey.ts | ||
import {map as map2} from "rxjs/operators"; | ||
function partitionByKey(stream, keySelector, streamSelector) { | ||
const source$ = stream.pipe(split(keySelector, streamSelector), collect()); | ||
return [ | ||
(key) => getGroupedObservable(source$, key), | ||
source$.pipe(map2((x) => Array.from(x.keys()))) | ||
]; | ||
function createListener(mapper) { | ||
if (mapper === void 0) { | ||
mapper = defaultMapper; | ||
} | ||
var subject = new Subject(); | ||
return [subject.asObservable(), function () { | ||
return subject.next(mapper.apply(void 0, arguments)); | ||
}]; | ||
} | ||
// src/split.ts | ||
import { | ||
Observable as Observable8, | ||
Subject as Subject2, | ||
ReplaySubject, | ||
noop as noop2 | ||
} from "rxjs"; | ||
import {shareReplay} from "rxjs/operators"; | ||
/** | ||
* Emits the values from all the streams of the provided object, in a result | ||
* which provides the key of the stream of that emission. | ||
* | ||
* @param input object of streams | ||
*/ | ||
var mergeWithKey = function mergeWithKey(input) { | ||
for (var _len = arguments.length, optionalArgs = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { | ||
optionalArgs[_key - 1] = arguments[_key]; | ||
} | ||
return merge.apply(void 0, Object.entries(input).map(function (_ref) { | ||
var type = _ref[0], | ||
stream = _ref[1]; | ||
return from(stream).pipe(map(function (payload) { | ||
return { | ||
type: type, | ||
payload: payload | ||
}; | ||
})); | ||
}).concat(optionalArgs)); | ||
}; | ||
var emptyError = {}; | ||
function split(keySelector, streamSelector) { | ||
return (stream) => new Observable8((subscriber) => { | ||
const groups = new Map(); | ||
let error = emptyError; | ||
const sub = stream.subscribe((x) => { | ||
const key = keySelector(x); | ||
if (groups.has(key)) { | ||
return groups.get(key).next(x); | ||
} | ||
const subject = streamSelector ? new Subject2() : new ReplaySubject(1); | ||
groups.set(key, subject); | ||
const res = streamSelector ? streamSelector(subject, key).pipe(shareReplay(1)) : subject.asObservable(); | ||
res.key = key; | ||
const onFinish = () => groups.delete(key); | ||
res.subscribe(noop2, onFinish, onFinish); | ||
subject.next(x); | ||
subscriber.next(res); | ||
}, (e) => { | ||
subscriber.error(error = e); | ||
}, () => { | ||
subscriber.complete(); | ||
return function (stream) { | ||
return new Observable(function (subscriber) { | ||
var groups = new Map(); | ||
var error = emptyError; | ||
var sub = stream.subscribe(function (x) { | ||
var key = keySelector(x); | ||
if (groups.has(key)) { | ||
return groups.get(key).next(x); | ||
} | ||
var subject = streamSelector ? new Subject() : new ReplaySubject(1); | ||
groups.set(key, subject); | ||
var res = streamSelector ? streamSelector(subject, key).pipe(shareReplay(1)) : subject.asObservable(); | ||
res.key = key; | ||
var onFinish = function onFinish() { | ||
return groups["delete"](key); | ||
}; | ||
res.subscribe(undefined, onFinish, onFinish); | ||
subject.next(x); | ||
subscriber.next(res); | ||
}, function (e) { | ||
subscriber.error(error = e); | ||
}, function () { | ||
subscriber.complete(); | ||
}); | ||
return function () { | ||
sub.unsubscribe(); | ||
groups.forEach(error === emptyError ? function (g) { | ||
return g.complete(); | ||
} : function (g) { | ||
return g.error(error); | ||
}); | ||
}; | ||
}); | ||
return () => { | ||
sub.unsubscribe(); | ||
groups.forEach(error === emptyError ? (g) => g.complete() : (g) => g.error(error)); | ||
}; | ||
}); | ||
}; | ||
} | ||
// src/suspend.ts | ||
import {from as from2} from "rxjs"; | ||
import {SUSPENSE} from "@react-rxjs/core"; | ||
var suspend = (source$) => defaultStart(SUSPENSE)(from2(source$)); | ||
/** | ||
* A RxJS creation operator that prepends a SUSPENSE on the source observable. | ||
* | ||
* @param source$ Source observable | ||
*/ | ||
// src/suspended.ts | ||
var suspended = () => suspend; | ||
var suspend = function suspend(source$) { | ||
return from(source$).pipe(startWith(SUSPENSE)); | ||
}; | ||
// src/switchMapSuspended.ts | ||
import {pipe} from "rxjs"; | ||
import {switchMap} from "rxjs/operators"; | ||
var switchMapSuspended = (project) => pipe(switchMap((x, index) => suspend(project(x, index)))); | ||
/** | ||
* A RxJS pipeable operator that prepends a SUSPENSE on the source observable. | ||
*/ | ||
// src/selfDependant.ts | ||
import {Subject as Subject3} from "rxjs"; | ||
import {tap} from "rxjs/operators"; | ||
var selfDependant = () => { | ||
const mirrored$ = new Subject3(); | ||
return [ | ||
mirrored$.asObservable(), | ||
() => tap(mirrored$) | ||
]; | ||
var suspended = function suspended() { | ||
return suspend; | ||
}; | ||
// src/contextBinder.ts | ||
import {bind} from "@react-rxjs/core"; | ||
var execSelf = (fn) => fn(); | ||
function contextBinder(...args) { | ||
const useArgs = () => args.map(execSelf); | ||
return function() { | ||
const [hook, getter] = bind.apply(null, arguments); | ||
return [(...args2) => hook(...useArgs(), ...args2), getter]; | ||
/** | ||
* Same behaviour as rxjs' `switchMap`, but prepending every new event with | ||
* SUSPENSE. | ||
* | ||
* @param fn Projection function | ||
*/ | ||
var switchMapSuspended = function switchMapSuspended(project) { | ||
return function (src$) { | ||
return src$.pipe(switchMap(function (x, index) { | ||
return suspend(project(x, index)); | ||
})); | ||
}; | ||
} | ||
}; | ||
// src/createListener.ts | ||
function createListener(...args) { | ||
return createSignal(...args); | ||
} | ||
export { | ||
collect, | ||
collectValues, | ||
combineKeys, | ||
contextBinder, | ||
createKeyedSignal, | ||
createListener, | ||
createSignal, | ||
getGroupedObservable, | ||
mergeWithKey, | ||
partitionByKey, | ||
selfDependant, | ||
split, | ||
suspend, | ||
suspended, | ||
switchMapSuspended | ||
/** | ||
* A creation operator that helps at creating observables that have circular | ||
* dependencies | ||
* | ||
* @returns [1, 2] | ||
* 1. The inner subject as an Observable | ||
* 2. A pipable operator that taps into the inner Subject | ||
*/ | ||
var selfDependant = function selfDependant() { | ||
var mirrored$ = new Subject(); | ||
return [mirrored$.asObservable(), function () { | ||
return tap(mirrored$); | ||
}]; | ||
}; | ||
export { collect, collectValues, createListener, mergeWithKey, selfDependant, split, suspend, suspended, switchMapSuspended }; | ||
//# sourceMappingURL=utils.esm.js.map |
// src/internal-utils.ts | ||
import { Observable, Subscription } from "rxjs"; | ||
import { shareLatest } from "@react-rxjs/core"; | ||
import {Observable, Subscription} from "rxjs"; | ||
import {shareLatest} from "@react-rxjs/core"; | ||
var defaultStart = (value) => (source$) => new Observable((observer) => { | ||
@@ -50,3 +50,3 @@ let emitted = false; | ||
// src/collect.ts | ||
import { noop, Observable as Observable2 } from "rxjs"; | ||
import {noop, Observable as Observable2} from "rxjs"; | ||
var enhancer = (source) => new Observable2((observer) => { | ||
@@ -62,10 +62,16 @@ const done = () => { | ||
// src/combineKeys.ts | ||
import { Observable as Observable3 } from "rxjs"; | ||
import {Observable as Observable3} from "rxjs"; | ||
var combineKeys = (keys$, getInner$) => new Observable3((observer) => { | ||
const innerSubscriptions = new Map(); | ||
const changes = new Set(); | ||
const currentValue = new Map(); | ||
let updatingSource = false; | ||
const next = () => { | ||
if (!updatingSource) | ||
observer.next(new Map(currentValue)); | ||
if (!updatingSource) { | ||
const result = Object.assign(new Map(currentValue), { | ||
changes: new Set(changes) | ||
}); | ||
changes.clear(); | ||
observer.next(result); | ||
} | ||
}; | ||
@@ -75,3 +81,2 @@ const subscription = keys$.subscribe((nextKeysArr) => { | ||
const nextKeys = new Set(nextKeysArr); | ||
let changes = false; | ||
innerSubscriptions.forEach((sub, key) => { | ||
@@ -82,3 +87,3 @@ if (!nextKeys.has(key)) { | ||
if (currentValue.has(key)) { | ||
changes = true; | ||
changes.add(key); | ||
currentValue.delete(key); | ||
@@ -93,3 +98,3 @@ } | ||
if (!currentValue.has(key) || currentValue.get(key) !== x) { | ||
changes = true; | ||
changes.add(key); | ||
currentValue.set(key, x); | ||
@@ -103,3 +108,3 @@ next(); | ||
updatingSource = false; | ||
if (changes) | ||
if (changes.size) | ||
next(); | ||
@@ -120,3 +125,3 @@ }, (e) => { | ||
// src/getGroupedObservable.ts | ||
import { Observable as Observable4 } from "rxjs"; | ||
import {Observable as Observable4} from "rxjs"; | ||
var getGroupedObservable = (source$, key) => { | ||
@@ -143,3 +148,3 @@ const result = new Observable4((observer) => { | ||
// src/createSignal.ts | ||
import { identity, Subject } from "rxjs"; | ||
import {identity, Subject} from "rxjs"; | ||
function createSignal(mapper = identity) { | ||
@@ -151,3 +156,3 @@ const subject = new Subject(); | ||
// src/createKeyedSignal.ts | ||
import { Observable as Observable6 } from "rxjs"; | ||
import {Observable as Observable6} from "rxjs"; | ||
function createKeyedSignal(keySelector, mapper) { | ||
@@ -185,8 +190,8 @@ const observersMap = new Map(); | ||
// src/mergeWithKey.ts | ||
import { merge, from } from "rxjs"; | ||
import { map } from "rxjs/operators"; | ||
var mergeWithKey = (input, ...optionalArgs) => merge(...Object.entries(input).map(([type, stream]) => from(stream).pipe(map((payload) => ({ type, payload })))).concat(optionalArgs)); | ||
import {merge, from} from "rxjs"; | ||
import {map} from "rxjs/operators"; | ||
var mergeWithKey = (input, ...optionalArgs) => merge(...Object.entries(input).map(([type, stream]) => from(stream).pipe(map((payload) => ({type, payload})))).concat(optionalArgs)); | ||
// src/partitionByKey.ts | ||
import { map as map2 } from "rxjs/operators"; | ||
import {map as map2} from "rxjs/operators"; | ||
function partitionByKey(stream, keySelector, streamSelector) { | ||
@@ -207,3 +212,3 @@ const source$ = stream.pipe(split(keySelector, streamSelector), collect()); | ||
} from "rxjs"; | ||
import { shareReplay } from "rxjs/operators"; | ||
import {shareReplay} from "rxjs/operators"; | ||
var emptyError = {}; | ||
@@ -240,4 +245,4 @@ function split(keySelector, streamSelector) { | ||
// src/suspend.ts | ||
import { from as from2 } from "rxjs"; | ||
import { SUSPENSE } from "@react-rxjs/core"; | ||
import {from as from2} from "rxjs"; | ||
import {SUSPENSE} from "@react-rxjs/core"; | ||
var suspend = (source$) => defaultStart(SUSPENSE)(from2(source$)); | ||
@@ -249,9 +254,9 @@ | ||
// src/switchMapSuspended.ts | ||
import { pipe } from "rxjs"; | ||
import { switchMap } from "rxjs/operators"; | ||
import {pipe} from "rxjs"; | ||
import {switchMap} from "rxjs/operators"; | ||
var switchMapSuspended = (project) => pipe(switchMap((x, index) => suspend(project(x, index)))); | ||
// src/selfDependant.ts | ||
import { Subject as Subject3 } from "rxjs"; | ||
import { tap } from "rxjs/operators"; | ||
import {Subject as Subject3} from "rxjs"; | ||
import {tap} from "rxjs/operators"; | ||
var selfDependant = () => { | ||
@@ -266,3 +271,3 @@ const mirrored$ = new Subject3(); | ||
// src/contextBinder.ts | ||
import { bind } from "@react-rxjs/core"; | ||
import {bind} from "@react-rxjs/core"; | ||
var execSelf = (fn) => fn(); | ||
@@ -269,0 +274,0 @@ function contextBinder(...args) { |
// src/internal-utils.ts | ||
import { Observable, Subscription } from "rxjs"; | ||
import { shareLatest } from "@react-rxjs/core"; | ||
import {Observable, Subscription} from "rxjs"; | ||
import {shareLatest} from "@react-rxjs/core"; | ||
var defaultStart = (value) => (source$) => new Observable((observer) => { | ||
@@ -50,3 +50,3 @@ let emitted = false; | ||
// src/collect.ts | ||
import { noop, Observable as Observable2 } from "rxjs"; | ||
import {noop, Observable as Observable2} from "rxjs"; | ||
var enhancer = (source) => new Observable2((observer) => { | ||
@@ -62,10 +62,16 @@ const done = () => { | ||
// src/combineKeys.ts | ||
import { Observable as Observable3 } from "rxjs"; | ||
import {Observable as Observable3} from "rxjs"; | ||
var combineKeys = (keys$, getInner$) => new Observable3((observer) => { | ||
const innerSubscriptions = new Map(); | ||
const changes = new Set(); | ||
const currentValue = new Map(); | ||
let updatingSource = false; | ||
const next = () => { | ||
if (!updatingSource) | ||
observer.next(new Map(currentValue)); | ||
if (!updatingSource) { | ||
const result = Object.assign(new Map(currentValue), { | ||
changes: new Set(changes) | ||
}); | ||
changes.clear(); | ||
observer.next(result); | ||
} | ||
}; | ||
@@ -75,3 +81,2 @@ const subscription = keys$.subscribe((nextKeysArr) => { | ||
const nextKeys = new Set(nextKeysArr); | ||
let changes = false; | ||
innerSubscriptions.forEach((sub, key) => { | ||
@@ -82,3 +87,3 @@ if (!nextKeys.has(key)) { | ||
if (currentValue.has(key)) { | ||
changes = true; | ||
changes.add(key); | ||
currentValue.delete(key); | ||
@@ -93,3 +98,3 @@ } | ||
if (!currentValue.has(key) || currentValue.get(key) !== x) { | ||
changes = true; | ||
changes.add(key); | ||
currentValue.set(key, x); | ||
@@ -103,3 +108,3 @@ next(); | ||
updatingSource = false; | ||
if (changes) | ||
if (changes.size) | ||
next(); | ||
@@ -120,3 +125,3 @@ }, (e) => { | ||
// src/getGroupedObservable.ts | ||
import { Observable as Observable4 } from "rxjs"; | ||
import {Observable as Observable4} from "rxjs"; | ||
var getGroupedObservable = (source$, key) => { | ||
@@ -143,3 +148,3 @@ const result = new Observable4((observer) => { | ||
// src/createSignal.ts | ||
import { identity, Subject } from "rxjs"; | ||
import {identity, Subject} from "rxjs"; | ||
function createSignal(mapper = identity) { | ||
@@ -151,3 +156,3 @@ const subject = new Subject(); | ||
// src/createKeyedSignal.ts | ||
import { Observable as Observable6 } from "rxjs"; | ||
import {Observable as Observable6} from "rxjs"; | ||
function createKeyedSignal(keySelector, mapper) { | ||
@@ -185,8 +190,8 @@ const observersMap = new Map(); | ||
// src/mergeWithKey.ts | ||
import { merge, from } from "rxjs"; | ||
import { map } from "rxjs/operators"; | ||
var mergeWithKey = (input, ...optionalArgs) => merge(...Object.entries(input).map(([type, stream]) => from(stream).pipe(map((payload) => ({ type, payload })))).concat(optionalArgs)); | ||
import {merge, from} from "rxjs"; | ||
import {map} from "rxjs/operators"; | ||
var mergeWithKey = (input, ...optionalArgs) => merge(...Object.entries(input).map(([type, stream]) => from(stream).pipe(map((payload) => ({type, payload})))).concat(optionalArgs)); | ||
// src/partitionByKey.ts | ||
import { map as map2 } from "rxjs/operators"; | ||
import {map as map2} from "rxjs/operators"; | ||
function partitionByKey(stream, keySelector, streamSelector) { | ||
@@ -207,3 +212,3 @@ const source$ = stream.pipe(split(keySelector, streamSelector), collect()); | ||
} from "rxjs"; | ||
import { shareReplay } from "rxjs/operators"; | ||
import {shareReplay} from "rxjs/operators"; | ||
var emptyError = {}; | ||
@@ -240,4 +245,4 @@ function split(keySelector, streamSelector) { | ||
// src/suspend.ts | ||
import { from as from2 } from "rxjs"; | ||
import { SUSPENSE } from "@react-rxjs/core"; | ||
import {from as from2} from "rxjs"; | ||
import {SUSPENSE} from "@react-rxjs/core"; | ||
var suspend = (source$) => defaultStart(SUSPENSE)(from2(source$)); | ||
@@ -249,9 +254,9 @@ | ||
// src/switchMapSuspended.ts | ||
import { pipe } from "rxjs"; | ||
import { switchMap } from "rxjs/operators"; | ||
import {pipe} from "rxjs"; | ||
import {switchMap} from "rxjs/operators"; | ||
var switchMapSuspended = (project) => pipe(switchMap((x, index) => suspend(project(x, index)))); | ||
// src/selfDependant.ts | ||
import { Subject as Subject3 } from "rxjs"; | ||
import { tap } from "rxjs/operators"; | ||
import {Subject as Subject3} from "rxjs"; | ||
import {tap} from "rxjs/operators"; | ||
var selfDependant = () => { | ||
@@ -266,3 +271,3 @@ const mirrored$ = new Subject3(); | ||
// src/contextBinder.ts | ||
import { bind } from "@react-rxjs/core"; | ||
import {bind} from "@react-rxjs/core"; | ||
var execSelf = (fn) => fn(); | ||
@@ -269,0 +274,0 @@ function contextBinder(...args) { |
{ | ||
"version": "0.9.3", | ||
"version": "0.10.0-alpha.0", | ||
"repository": { | ||
@@ -56,2 +56,2 @@ "type": "git", | ||
} | ||
} | ||
} |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
New author
Supply chain riskA new npm collaborator published a version of the package for the first time. New collaborators are usually benign additions to a project, but do indicate a change to the security surface area of a package.
Found 1 instance in 1 package
217584
-14.7%38
-7.32%1797
-14.67%1
Infinity%