New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

@react-rxjs/utils

Package Overview
Dependencies
Maintainers
2
Versions
27
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@react-rxjs/utils - npm Package Compare versions

Comparing version

to
0.9.6

dist/selfDependent.d.ts

3

dist/combineKeys.d.ts

@@ -0,1 +1,2 @@

import { KeyChanges } from "./partitionByKey";
import { Observable } from "rxjs";

@@ -12,2 +13,2 @@ export interface MapWithChanges<K, V> extends Map<K, V> {

*/
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> | KeyChanges<K>>, getInner$: (key: K) => Observable<T>) => Observable<MapWithChanges<K, T>>;

@@ -0,0 +0,0 @@ import { Observable } from "rxjs";

@@ -0,0 +0,0 @@ import { GroupedObservable } from "rxjs";

@@ -0,0 +0,0 @@ import { Observable } from "rxjs";

@@ -0,0 +0,0 @@ import { Observable } from "rxjs";

@@ -5,8 +5,9 @@ export { combineKeys, MapWithChanges } from "./combineKeys";

export { mergeWithKey } from "./mergeWithKey";
export { partitionByKey } from "./partitionByKey";
export { partitionByKey, KeyChanges } from "./partitionByKey";
export { toKeySet } from "./toKeySet";
export { suspend } from "./suspend";
export { suspended } from "./suspended";
export { switchMapSuspended } from "./switchMapSuspended";
export { selfDependant } from "./selfDependant";
export { selfDependent, selfDependant } from "./selfDependent";
export { contextBinder } from "./contextBinder";
export { createListener } from "./createListener";
import { Observable } from "rxjs";
export declare const defaultStart: <T, D>(value: D) => (source$: Observable<T>) => Observable<T | D>;

@@ -0,0 +0,0 @@ import { Observable, ObservableInput, SchedulerLike } from "rxjs";

import { GroupedObservable, Observable } from "rxjs";
export interface KeyChanges<K> {
type: "add" | "remove";
keys: Iterable<K>;
}
/**

@@ -11,5 +15,5 @@ * Groups the elements from the source stream by using `keySelector`, returning

* 1. A function that accepts a key and returns the stream for the group of that key.
* 2. A stream with the list of active keys
* 2. A stream of KeyChanges, an object that describes what keys have been added or deleted.
*/
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<KeyChanges<K>>];
/**

@@ -23,4 +27,4 @@ * Groups the elements from the source stream by using `keySelector`, returning

* 1. A function that accepts a key and returns the stream for the group of that key.
* 2. A stream with the list of active keys
* 2. A stream of KeyChanges, an object that describes what keys have been added or deleted.
*/
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<KeyChanges<K>>];

@@ -0,0 +0,0 @@ import { Observable, MonoTypeOperatorFunction } from "rxjs";

@@ -0,0 +0,0 @@ import { ObservableInput, Observable } from "rxjs";

@@ -0,0 +0,0 @@ import { OperatorFunction } from "rxjs";

@@ -0,0 +0,0 @@ import { ObservableInput, OperatorFunction, ObservedValueOf } from "rxjs";

@@ -5,3 +5,2 @@ var __defProp = Object.defineProperty;

var __hasOwnProp = Object.prototype.hasOwnProperty;
var __markAsModule = (target) => __defProp(target, "__esModule", { value: true });
var __export = (target, all) => {

@@ -11,15 +10,11 @@ for (var name in all)

};
var __reExport = (target, module2, copyDefault, desc) => {
if (module2 && typeof module2 === "object" || typeof module2 === "function") {
for (let key of __getOwnPropNames(module2))
if (!__hasOwnProp.call(target, key) && (copyDefault || key !== "default"))
__defProp(target, key, { get: () => module2[key], enumerable: !(desc = __getOwnPropDesc(module2, key)) || desc.enumerable });
var __copyProps = (to, from3, except, desc) => {
if (from3 && typeof from3 === "object" || typeof from3 === "function") {
for (let key of __getOwnPropNames(from3))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from3[key], enumerable: !(desc = __getOwnPropDesc(from3, key)) || desc.enumerable });
}
return target;
return to;
};
var __toCommonJS = /* @__PURE__ */ ((cache) => {
return (module2, temp) => {
return cache && cache.get(module2) || (temp = __reExport(__markAsModule({}), module2, 1), cache && cache.set(module2, temp), temp);
};
})(typeof WeakMap !== "undefined" ? /* @__PURE__ */ new WeakMap() : 0);
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);

@@ -37,6 +32,9 @@ // src/index.tsx

selfDependant: () => selfDependant,
selfDependent: () => selfDependent,
suspend: () => suspend,
suspended: () => suspended,
switchMapSuspended: () => switchMapSuspended
switchMapSuspended: () => switchMapSuspended,
toKeySet: () => toKeySet
});
module.exports = __toCommonJS(src_exports);

@@ -53,3 +51,3 @@ // src/combineKeys.ts

if (!updatingSource) {
const result = Object.assign(new Map(currentValue), {
const result = Object.assign(currentValue, {
changes

@@ -64,16 +62,33 @@ });

updatingSource = true;
const nextKeys = new Set(nextKeysArr);
innerSubscriptions.forEach((sub, key) => {
if (!nextKeys.has(key)) {
sub.unsubscribe();
innerSubscriptions.delete(key);
if (currentValue.has(key)) {
changes.add(key);
currentValue.delete(key);
const keys = new Set(inputIsKeyChanges(nextKeysArr) ? nextKeysArr.keys : nextKeysArr);
if (inputIsKeyChanges(nextKeysArr)) {
if (nextKeysArr.type === "remove") {
keys.forEach((key) => {
const sub = innerSubscriptions.get(key);
if (!sub)
return;
sub.unsubscribe();
innerSubscriptions.delete(key);
if (currentValue.has(key)) {
changes.add(key);
currentValue.delete(key);
}
});
keys.clear();
}
} else {
innerSubscriptions.forEach((sub, key) => {
if (!keys.has(key)) {
sub.unsubscribe();
innerSubscriptions.delete(key);
if (currentValue.has(key)) {
changes.add(key);
currentValue.delete(key);
}
} else {
keys.delete(key);
}
} else {
nextKeys.delete(key);
}
});
nextKeys.forEach((key) => {
});
}
keys.forEach((key) => {
innerSubscriptions.set(key, getInner$(key).subscribe((x) => {

@@ -90,3 +105,3 @@ if (!currentValue.has(key) || currentValue.get(key) !== x) {

updatingSource = false;
if (changes.size || isPristine && !nextKeys.size)
if (changes.size || isPristine && !keys.size)
next();

@@ -105,2 +120,5 @@ }, (e) => {

});
function inputIsKeyChanges(input) {
return "type" in input && "keys" in input;
}

@@ -159,11 +177,44 @@ // src/createSignal.ts

const groups = /* @__PURE__ */ new Map();
let emitted = false;
let sourceCompleted = false;
const sub = stream.subscribe((x) => {
const finalize = (type) => (...args) => {
sourceCompleted = true;
if (groups.size) {
groups.forEach((g) => g.source[type](...args));
} else {
subscriber[type](...args);
}
};
const sub2 = stream.subscribe((x) => {
const key = keySelector(x);
if (groups.has(key)) {
if (groups.has(key))
return groups.get(key).source.next(x);
}
let pendingFirstAdd = true;
const emitFirstAdd = () => {
if (pendingFirstAdd) {
pendingFirstAdd = false;
subscriber.next({
groups,
changes: {
type: "add",
keys: [key]
}
});
}
};
const subject = new import_rxjs5.Subject();
const res = (0, import_core.shareLatest)()((streamSelector || import_rxjs5.identity)(subject, key));
let pendingFirstVal = true;
const emitFirstValue = () => {
if (pendingFirstVal) {
pendingFirstVal = false;
subject.next(x);
}
};
const shared$ = (0, import_core.shareLatest)()((streamSelector || import_rxjs5.identity)(subject, key));
const res = new import_rxjs5.Observable((observer) => {
incRefcount();
const subscription = shared$.subscribe(observer);
subscription.add(decRefcount);
emitFirstValue();
return subscription;
});
res.key = key;

@@ -176,5 +227,12 @@ const innerGroup = {

groups.set(key, innerGroup);
innerGroup.subscription = res.subscribe(import_rxjs5.noop, (e) => subscriber.error(e), () => {
innerGroup.subscription = shared$.subscribe(import_rxjs5.noop, (e) => subscriber.error(e), () => {
groups.delete(key);
subscriber.next(mapGroups(groups));
emitFirstAdd();
subscriber.next({
groups,
changes: {
type: "remove",
keys: [key]
}
});
if (groups.size === 0 && sourceCompleted) {

@@ -184,24 +242,7 @@ subscriber.complete();

});
subject.next(x);
subscriber.next(mapGroups(groups));
emitted = true;
}, (e) => {
sourceCompleted = true;
if (groups.size) {
groups.forEach((g) => g.source.error(e));
} else {
subscriber.error(e);
}
}, () => {
sourceCompleted = true;
if (groups.size) {
groups.forEach((g) => g.source.complete());
} else {
subscriber.complete();
}
});
if (!emitted)
subscriber.next(mapGroups(groups));
emitFirstAdd();
emitFirstValue();
}, finalize("error"), finalize("complete"));
return () => {
sub.unsubscribe();
sub2.unsubscribe();
groups.forEach((g) => {

@@ -213,16 +254,41 @@ g.source.unsubscribe();

}).pipe((0, import_core.shareLatest)());
let refCount = 0;
let sub;
function incRefcount() {
refCount++;
if (refCount === 1) {
sub = groupedObservables$.subscribe();
}
}
function decRefcount() {
refCount--;
if (refCount === 0) {
sub == null ? void 0 : sub.unsubscribe();
}
}
return [
(key) => getGroupedObservable(groupedObservables$, key),
groupedObservables$.pipe((0, import_operators2.map)((x) => Array.from(x.keys())))
(key) => getGroupedObservable(groupedObservables$.pipe((0, import_operators2.map)(({ groups }) => groups)), key),
groupedObservables$.pipe((0, import_operators2.map)((m, i) => {
if (i === 0) {
return {
type: "add",
keys: m.groups.keys()
};
}
return m.changes;
}))
];
}
function mapGroups(groups) {
return new Map(Array.from(groups.entries()).map(([key, group]) => [key, group.observable]));
}
var getGroupedObservable = (source$, key) => {
const result = new import_rxjs5.Observable((observer) => {
let innerSub;
let outterSub = source$.subscribe((n) => {
var _a;
innerSub = innerSub || ((_a = n.get(key)) == null ? void 0 : _a.subscribe(observer));
let outerSub;
let foundSynchronously = false;
outerSub = source$.subscribe((n) => {
const innerGroup = n.get(key);
if (innerGroup && !innerSub) {
innerSub = innerGroup.observable.subscribe(observer);
outerSub == null ? void 0 : outerSub.unsubscribe();
foundSynchronously = true;
}
}, (e) => {

@@ -233,5 +299,9 @@ observer.error(e);

});
if (foundSynchronously) {
outerSub.unsubscribe();
outerSub = void 0;
}
return () => {
innerSub == null ? void 0 : innerSub.unsubscribe();
outterSub.unsubscribe();
outerSub == null ? void 0 : outerSub.unsubscribe();
};

@@ -243,9 +313,37 @@ });

// src/toKeySet.ts
var import_rxjs6 = require("rxjs");
function toKeySet() {
return (source$) => new import_rxjs6.Observable((observer) => {
const result = /* @__PURE__ */ new Set();
let pristine = true;
const subscription = source$.subscribe({
next({ type, keys }) {
const action = type === "add" ? type : "delete";
for (let k of keys) {
result[action](k);
}
observer.next(result);
pristine = false;
},
error(e) {
observer.error(e);
},
complete() {
observer.complete();
}
});
if (pristine)
observer.next(result);
return subscription;
});
}
// src/suspend.ts
var import_rxjs7 = require("rxjs");
var import_rxjs8 = require("rxjs");
var import_core2 = require("@react-rxjs/core");
// src/internal-utils.ts
var import_rxjs6 = require("rxjs");
var defaultStart = (value) => (source$) => new import_rxjs6.Observable((observer) => {
var import_rxjs7 = require("rxjs");
var defaultStart = (value) => (source$) => new import_rxjs7.Observable((observer) => {
let emitted = false;

@@ -267,3 +365,3 @@ const subscription = source$.subscribe((x) => {

// src/suspend.ts
var suspend = (source$) => defaultStart(import_core2.SUSPENSE)((0, import_rxjs7.from)(source$));
var suspend = (source$) => defaultStart(import_core2.SUSPENSE)((0, import_rxjs8.from)(source$));

@@ -274,16 +372,27 @@ // src/suspended.ts

// src/switchMapSuspended.ts
var import_rxjs8 = require("rxjs");
var import_rxjs9 = require("rxjs");
var import_operators3 = require("rxjs/operators");
var switchMapSuspended = (project) => (0, import_rxjs8.pipe)((0, import_operators3.switchMap)((x, index) => suspend(project(x, index))));
var switchMapSuspended = (project) => (0, import_rxjs9.pipe)((0, import_operators3.switchMap)((x, index) => suspend(project(x, index))));
// src/selfDependant.ts
var import_rxjs9 = require("rxjs");
// src/selfDependent.ts
var import_rxjs10 = require("rxjs");
var import_operators4 = require("rxjs/operators");
var selfDependant = () => {
const mirrored$ = new import_rxjs9.Subject();
var selfDependent = () => {
const activeSubject = new import_rxjs10.BehaviorSubject(new import_rxjs10.Subject());
return [
mirrored$.asObservable(),
() => (0, import_operators4.tap)(mirrored$)
activeSubject.pipe((0, import_operators4.switchAll)()),
() => (0, import_operators4.tap)({
next: (v) => activeSubject.value.next(v),
error: (e) => {
activeSubject.value.error(e);
activeSubject.next(new import_rxjs10.Subject());
},
complete: () => {
activeSubject.value.complete();
activeSubject.next(new import_rxjs10.Subject());
}
})
];
};
var selfDependant = selfDependent;

@@ -305,3 +414,2 @@ // src/contextBinder.ts

}
module.exports = __toCommonJS(src_exports);
//# sourceMappingURL=utils.cjs.development.js.map

@@ -1,2 +0,2 @@

var v=Object.defineProperty;var $=Object.getOwnPropertyDescriptor;var q=Object.getOwnPropertyNames;var H=Object.prototype.hasOwnProperty;var J=e=>v(e,"__esModule",{value:!0});var Q=(e,n)=>{for(var t in n)v(e,t,{get:n[t],enumerable:!0})},X=(e,n,t,o)=>{if(n&&typeof n=="object"||typeof n=="function")for(let r of q(n))!H.call(e,r)&&(t||r!=="default")&&v(e,r,{get:()=>n[r],enumerable:!(o=$(n,r))||o.enumerable});return e};var Y=(e=>(n,t)=>e&&e.get(n)||(t=X(J({}),n,1),e&&e.set(n,t),t))(typeof WeakMap!="undefined"?new WeakMap:0);var ee={};Q(ee,{combineKeys:()=>g,contextBinder:()=>D,createKeyedSignal:()=>h,createListener:()=>W,createSignal:()=>m,mergeWithKey:()=>G,partitionByKey:()=>R,selfDependant:()=>F,suspend:()=>f,suspended:()=>V,switchMapSuspended:()=>N});var x=require("rxjs"),g=(e,n)=>new x.Observable(t=>{let o=new Map,r=new Set,s=new Map,a=!1,c=!0,T=()=>{if(!a){let p=Object.assign(new Map(s),{changes:r});r=new Set,c=!1,t.next(p)}},b=e.subscribe(p=>{a=!0;let d=new Set(p);o.forEach((u,i)=>{d.has(i)?d.delete(i):(u.unsubscribe(),o.delete(i),s.has(i)&&(r.add(i),s.delete(i)))}),d.forEach(u=>{o.set(u,n(u).subscribe(i=>{(!s.has(u)||s.get(u)!==i)&&(r.add(u),s.set(u,i),T())},i=>{t.error(i)}))}),a=!1,(r.size||c&&!d.size)&&T()},p=>{t.error(p)},()=>{t.complete()});return()=>{b.unsubscribe(),o.forEach(p=>{p.unsubscribe()})}});var O=require("rxjs");function m(e=O.identity){let n=new O.Subject;return[n.asObservable(),(...t)=>n.next(e(...t))]}var A=require("rxjs");function h(e,n){let t=new Map;return[o=>{let r=new A.Observable(s=>{t.has(o)||t.set(o,new Set);let a=t.get(o);return a.add(s),()=>{a.delete(s),a.size===0&&t.delete(o)}});return r.key=o,r},(...o)=>{var a;let r=n?n(...o):o.length===2?o[1]:o[0],s=e?e(r):o[0];(a=t.get(s))==null||a.forEach(c=>{c.next(r)})}]}var K=require("rxjs"),w=require("rxjs/operators"),G=(e,...n)=>(0,K.merge)(...Object.entries(e).map(([t,o])=>(0,K.from)(o).pipe((0,w.map)(r=>({type:t,payload:r})))).concat(n));var S=require("@react-rxjs/core"),l=require("rxjs"),E=require("rxjs/operators");function R(e,n,t){let o=new l.Observable(r=>{let s=new Map,a=!1,c=!1,T=e.subscribe(b=>{let p=n(b);if(s.has(p))return s.get(p).source.next(b);let d=new l.Subject,u=(0,S.shareLatest)()((t||l.identity)(d,p));u.key=p;let i={source:d,observable:u,subscription:new l.Subscription};s.set(p,i),i.subscription=u.subscribe(l.noop,C=>r.error(C),()=>{s.delete(p),r.next(y(s)),s.size===0&&c&&r.complete()}),d.next(b),r.next(y(s)),a=!0},b=>{c=!0,s.size?s.forEach(p=>p.source.error(b)):r.error(b)},()=>{c=!0,s.size?s.forEach(b=>b.source.complete()):r.complete()});return a||r.next(y(s)),()=>{T.unsubscribe(),s.forEach(b=>{b.source.unsubscribe(),b.subscription.unsubscribe()})}}).pipe((0,S.shareLatest)());return[r=>Z(o,r),o.pipe((0,E.map)(r=>Array.from(r.keys())))]}function y(e){return new Map(Array.from(e.entries()).map(([n,t])=>[n,t.observable]))}var Z=(e,n)=>{let t=new l.Observable(o=>{let r,s=e.subscribe(a=>{var c;r=r||((c=a.get(n))==null?void 0:c.subscribe(o))},a=>{o.error(a)},()=>{o.complete()});return()=>{r==null||r.unsubscribe(),s.unsubscribe()}});return t.key=n,t};var I=require("rxjs"),P=require("@react-rxjs/core");var M=require("rxjs"),k=e=>n=>new M.Observable(t=>{let o=!1,r=n.subscribe(s=>{o=!0,t.next(s)},s=>{t.error(s)},()=>{t.complete()});return o||t.next(e),r});var f=e=>k(P.SUSPENSE)((0,I.from)(e));var V=()=>f;var j=require("rxjs"),L=require("rxjs/operators");var N=e=>(0,j.pipe)((0,L.switchMap)((n,t)=>f(e(n,t))));var U=require("rxjs"),B=require("rxjs/operators"),F=()=>{let e=new U.Subject;return[e.asObservable(),()=>(0,B.tap)(e)]};var z=require("@react-rxjs/core"),_=e=>e();function D(...e){let n=()=>e.map(_);return function(){let[t,o]=z.bind.apply(null,arguments);return[(...r)=>t(...n(),...r),o]}}function W(...e){return m(...e)}module.exports=Y(ee);
var w=Object.defineProperty;var se=Object.getOwnPropertyDescriptor;var oe=Object.getOwnPropertyNames;var ae=Object.prototype.hasOwnProperty;var ie=(e,r)=>{for(var n in r)w(e,n,{get:r[n],enumerable:!0})},pe=(e,r,n,t)=>{if(r&&typeof r=="object"||typeof r=="function")for(let s of oe(r))!ae.call(e,s)&&s!==n&&w(e,s,{get:()=>r[s],enumerable:!(t=se(r,s))||t.enumerable});return e};var ue=e=>pe(w({},"__esModule",{value:!0}),e);var le={};ie(le,{combineKeys:()=>B,contextBinder:()=>te,createKeyedSignal:()=>N,createListener:()=>ne,createSignal:()=>v,mergeWithKey:()=>D,partitionByKey:()=>z,selfDependant:()=>ee,selfDependent:()=>k,suspend:()=>T,suspended:()=>X,switchMapSuspended:()=>_,toKeySet:()=>$});module.exports=ue(le);var P=require("rxjs"),B=(e,r)=>new P.Observable(n=>{let t=new Map,s=new Set,o=new Map,p=!1,l=!0,i=()=>{if(!p){let b=Object.assign(o,{changes:s});s=new Set,l=!1,n.next(b)}},u=e.subscribe(b=>{p=!0;let K=new Set(V(b)?b.keys:b);V(b)?b.type==="remove"&&(K.forEach(c=>{let a=t.get(c);!a||(a.unsubscribe(),t.delete(c),o.has(c)&&(s.add(c),o.delete(c)))}),K.clear()):t.forEach((c,a)=>{K.has(a)?K.delete(a):(c.unsubscribe(),t.delete(a),o.has(a)&&(s.add(a),o.delete(a)))}),K.forEach(c=>{t.set(c,r(c).subscribe(a=>{(!o.has(c)||o.get(c)!==a)&&(s.add(c),o.set(c,a),i())},a=>{n.error(a)}))}),p=!1,(s.size||l&&!K.size)&&i()},b=>{n.error(b)},()=>{n.complete()});return()=>{u.unsubscribe(),t.forEach(b=>{b.unsubscribe()})}});function V(e){return"type"in e&&"keys"in e}var O=require("rxjs");function v(e=O.identity){let r=new O.Subject;return[r.asObservable(),(...n)=>r.next(e(...n))]}var L=require("rxjs");function N(e,r){let n=new Map;return[t=>{let s=new L.Observable(o=>{n.has(t)||n.set(t,new Set);let p=n.get(t);return p.add(o),()=>{p.delete(o),p.size===0&&n.delete(t)}});return s.key=t,s},(...t)=>{var p;let s=r?r(...t):t.length===2?t[1]:t[0],o=e?e(s):t[0];(p=n.get(o))==null||p.forEach(l=>{l.next(s)})}]}var S=require("rxjs"),U=require("rxjs/operators"),D=(e,...r)=>(0,S.merge)(...Object.entries(e).map(([n,t])=>(0,S.from)(t).pipe((0,U.map)(s=>({type:n,payload:s})))).concat(r));var A=require("@react-rxjs/core"),f=require("rxjs"),G=require("rxjs/operators");function z(e,r,n){let t=new f.Observable(i=>{let u=new Map,b=!1,K=a=>(...d)=>{b=!0,u.size?u.forEach(y=>y.source[a](...d)):i[a](...d)},c=e.subscribe(a=>{let d=r(a);if(u.has(d))return u.get(d).source.next(a);let y=!0,E=()=>{y&&(y=!1,i.next({groups:u,changes:{type:"add",keys:[d]}}))},g=new f.Subject,R=!0,C=()=>{R&&(R=!1,g.next(a))},M=(0,A.shareLatest)()((n||f.identity)(g,d)),I=new f.Observable(h=>{p();let j=M.subscribe(h);return j.add(l),C(),j});I.key=d;let F={source:g,observable:I,subscription:new f.Subscription};u.set(d,F),F.subscription=M.subscribe(f.noop,h=>i.error(h),()=>{u.delete(d),E(),i.next({groups:u,changes:{type:"remove",keys:[d]}}),u.size===0&&b&&i.complete()}),E(),C()},K("error"),K("complete"));return()=>{c.unsubscribe(),u.forEach(a=>{a.source.unsubscribe(),a.subscription.unsubscribe()})}}).pipe((0,A.shareLatest)()),s=0,o;function p(){s++,s===1&&(o=t.subscribe())}function l(){s--,s===0&&(o==null||o.unsubscribe())}return[i=>ce(t.pipe((0,G.map)(({groups:u})=>u)),i),t.pipe((0,G.map)((i,u)=>u===0?{type:"add",keys:i.groups.keys()}:i.changes))]}var ce=(e,r)=>{let n=new f.Observable(t=>{let s,o,p=!1;return o=e.subscribe(l=>{let i=l.get(r);i&&!s&&(s=i.observable.subscribe(t),o==null||o.unsubscribe(),p=!0)},l=>{t.error(l)},()=>{t.complete()}),p&&(o.unsubscribe(),o=void 0),()=>{s==null||s.unsubscribe(),o==null||o.unsubscribe()}});return n.key=r,n};var W=require("rxjs");function $(){return e=>new W.Observable(r=>{let n=new Set,t=!0,s=e.subscribe({next({type:o,keys:p}){let l=o==="add"?o:"delete";for(let i of p)n[l](i);r.next(n),t=!1},error(o){r.error(o)},complete(){r.complete()}});return t&&r.next(n),s})}var J=require("rxjs"),Q=require("@react-rxjs/core");var q=require("rxjs"),H=e=>r=>new q.Observable(n=>{let t=!1,s=r.subscribe(o=>{t=!0,n.next(o)},o=>{n.error(o)},()=>{n.complete()});return t||n.next(e),s});var T=e=>H(Q.SUSPENSE)((0,J.from)(e));var X=()=>T;var Y=require("rxjs"),Z=require("rxjs/operators");var _=e=>(0,Y.pipe)((0,Z.switchMap)((r,n)=>T(e(r,n))));var m=require("rxjs"),x=require("rxjs/operators"),k=()=>{let e=new m.BehaviorSubject(new m.Subject);return[e.pipe((0,x.switchAll)()),()=>(0,x.tap)({next:r=>e.value.next(r),error:r=>{e.value.error(r),e.next(new m.Subject)},complete:()=>{e.value.complete(),e.next(new m.Subject)}})]},ee=k;var re=require("@react-rxjs/core"),be=e=>e();function te(...e){let r=()=>e.map(be);return function(){let[n,t]=re.bind.apply(null,arguments);return[(...s)=>n(...r(),...s),t]}}function ne(...e){return v(...e)}
//# sourceMappingURL=utils.cjs.production.min.js.map

@@ -11,3 +11,3 @@ // src/combineKeys.ts

if (!updatingSource) {
const result = Object.assign(new Map(currentValue), {
const result = Object.assign(currentValue, {
changes

@@ -22,16 +22,33 @@ });

updatingSource = true;
const nextKeys = new Set(nextKeysArr);
innerSubscriptions.forEach((sub, key) => {
if (!nextKeys.has(key)) {
sub.unsubscribe();
innerSubscriptions.delete(key);
if (currentValue.has(key)) {
changes.add(key);
currentValue.delete(key);
const keys = new Set(inputIsKeyChanges(nextKeysArr) ? nextKeysArr.keys : nextKeysArr);
if (inputIsKeyChanges(nextKeysArr)) {
if (nextKeysArr.type === "remove") {
keys.forEach((key) => {
const sub = innerSubscriptions.get(key);
if (!sub)
return;
sub.unsubscribe();
innerSubscriptions.delete(key);
if (currentValue.has(key)) {
changes.add(key);
currentValue.delete(key);
}
});
keys.clear();
}
} else {
innerSubscriptions.forEach((sub, key) => {
if (!keys.has(key)) {
sub.unsubscribe();
innerSubscriptions.delete(key);
if (currentValue.has(key)) {
changes.add(key);
currentValue.delete(key);
}
} else {
keys.delete(key);
}
} else {
nextKeys.delete(key);
}
});
nextKeys.forEach((key) => {
});
}
keys.forEach((key) => {
innerSubscriptions.set(key, getInner$(key).subscribe((x) => {

@@ -48,3 +65,3 @@ if (!currentValue.has(key) || currentValue.get(key) !== x) {

updatingSource = false;
if (changes.size || isPristine && !nextKeys.size)
if (changes.size || isPristine && !keys.size)
next();

@@ -63,2 +80,5 @@ }, (e) => {

});
function inputIsKeyChanges(input) {
return "type" in input && "keys" in input;
}

@@ -113,7 +133,7 @@ // src/createSignal.ts

import {
identity as identity2,
noop,
Observable as Observable5,
Subject as Subject2,
Subscription as Subscription2,
identity as identity2
Subscription as Subscription2
} from "rxjs";

@@ -124,11 +144,44 @@ import { map as map2 } from "rxjs/operators";

const groups = /* @__PURE__ */ new Map();
let emitted = false;
let sourceCompleted = false;
const sub = stream.subscribe((x) => {
const finalize = (type) => (...args) => {
sourceCompleted = true;
if (groups.size) {
groups.forEach((g) => g.source[type](...args));
} else {
subscriber[type](...args);
}
};
const sub2 = stream.subscribe((x) => {
const key = keySelector(x);
if (groups.has(key)) {
if (groups.has(key))
return groups.get(key).source.next(x);
}
let pendingFirstAdd = true;
const emitFirstAdd = () => {
if (pendingFirstAdd) {
pendingFirstAdd = false;
subscriber.next({
groups,
changes: {
type: "add",
keys: [key]
}
});
}
};
const subject = new Subject2();
const res = shareLatest()((streamSelector || identity2)(subject, key));
let pendingFirstVal = true;
const emitFirstValue = () => {
if (pendingFirstVal) {
pendingFirstVal = false;
subject.next(x);
}
};
const shared$ = shareLatest()((streamSelector || identity2)(subject, key));
const res = new Observable5((observer) => {
incRefcount();
const subscription = shared$.subscribe(observer);
subscription.add(decRefcount);
emitFirstValue();
return subscription;
});
res.key = key;

@@ -141,5 +194,12 @@ const innerGroup = {

groups.set(key, innerGroup);
innerGroup.subscription = res.subscribe(noop, (e) => subscriber.error(e), () => {
innerGroup.subscription = shared$.subscribe(noop, (e) => subscriber.error(e), () => {
groups.delete(key);
subscriber.next(mapGroups(groups));
emitFirstAdd();
subscriber.next({
groups,
changes: {
type: "remove",
keys: [key]
}
});
if (groups.size === 0 && sourceCompleted) {

@@ -149,24 +209,7 @@ subscriber.complete();

});
subject.next(x);
subscriber.next(mapGroups(groups));
emitted = true;
}, (e) => {
sourceCompleted = true;
if (groups.size) {
groups.forEach((g) => g.source.error(e));
} else {
subscriber.error(e);
}
}, () => {
sourceCompleted = true;
if (groups.size) {
groups.forEach((g) => g.source.complete());
} else {
subscriber.complete();
}
});
if (!emitted)
subscriber.next(mapGroups(groups));
emitFirstAdd();
emitFirstValue();
}, finalize("error"), finalize("complete"));
return () => {
sub.unsubscribe();
sub2.unsubscribe();
groups.forEach((g) => {

@@ -178,16 +221,41 @@ g.source.unsubscribe();

}).pipe(shareLatest());
let refCount = 0;
let sub;
function incRefcount() {
refCount++;
if (refCount === 1) {
sub = groupedObservables$.subscribe();
}
}
function decRefcount() {
refCount--;
if (refCount === 0) {
sub == null ? void 0 : sub.unsubscribe();
}
}
return [
(key) => getGroupedObservable(groupedObservables$, key),
groupedObservables$.pipe(map2((x) => Array.from(x.keys())))
(key) => getGroupedObservable(groupedObservables$.pipe(map2(({ groups }) => groups)), key),
groupedObservables$.pipe(map2((m, i) => {
if (i === 0) {
return {
type: "add",
keys: m.groups.keys()
};
}
return m.changes;
}))
];
}
function mapGroups(groups) {
return new Map(Array.from(groups.entries()).map(([key, group]) => [key, group.observable]));
}
var getGroupedObservable = (source$, key) => {
const result = new Observable5((observer) => {
let innerSub;
let outterSub = source$.subscribe((n) => {
var _a;
innerSub = innerSub || ((_a = n.get(key)) == null ? void 0 : _a.subscribe(observer));
let outerSub;
let foundSynchronously = false;
outerSub = source$.subscribe((n) => {
const innerGroup = n.get(key);
if (innerGroup && !innerSub) {
innerSub = innerGroup.observable.subscribe(observer);
outerSub == null ? void 0 : outerSub.unsubscribe();
foundSynchronously = true;
}
}, (e) => {

@@ -198,5 +266,9 @@ observer.error(e);

});
if (foundSynchronously) {
outerSub.unsubscribe();
outerSub = void 0;
}
return () => {
innerSub == null ? void 0 : innerSub.unsubscribe();
outterSub.unsubscribe();
outerSub == null ? void 0 : outerSub.unsubscribe();
};

@@ -208,2 +280,30 @@ });

// src/toKeySet.ts
import { Observable as Observable6 } from "rxjs";
function toKeySet() {
return (source$) => new Observable6((observer) => {
const result = /* @__PURE__ */ new Set();
let pristine = true;
const subscription = source$.subscribe({
next({ type, keys }) {
const action = type === "add" ? type : "delete";
for (let k of keys) {
result[action](k);
}
observer.next(result);
pristine = false;
},
error(e) {
observer.error(e);
},
complete() {
observer.complete();
}
});
if (pristine)
observer.next(result);
return subscription;
});
}
// src/suspend.ts

@@ -214,4 +314,4 @@ import { from as from2 } from "rxjs";

// src/internal-utils.ts
import { Observable as Observable6 } from "rxjs";
var defaultStart = (value) => (source$) => new Observable6((observer) => {
import { Observable as Observable7 } from "rxjs";
var defaultStart = (value) => (source$) => new Observable7((observer) => {
let emitted = false;

@@ -243,12 +343,26 @@ const subscription = source$.subscribe((x) => {

// src/selfDependant.ts
import { Subject as Subject3 } from "rxjs";
import { tap } from "rxjs/operators";
var selfDependant = () => {
const mirrored$ = new Subject3();
// src/selfDependent.ts
import {
Subject as Subject3,
BehaviorSubject
} from "rxjs";
import { switchAll, tap } from "rxjs/operators";
var selfDependent = () => {
const activeSubject = new BehaviorSubject(new Subject3());
return [
mirrored$.asObservable(),
() => tap(mirrored$)
activeSubject.pipe(switchAll()),
() => tap({
next: (v) => activeSubject.value.next(v),
error: (e) => {
activeSubject.value.error(e);
activeSubject.next(new Subject3());
},
complete: () => {
activeSubject.value.complete();
activeSubject.next(new Subject3());
}
})
];
};
var selfDependant = selfDependent;

@@ -279,6 +393,8 @@ // src/contextBinder.ts

selfDependant,
selfDependent,
suspend,
suspended,
switchMapSuspended
switchMapSuspended,
toKeySet
};
//# sourceMappingURL=utils.es2017.js.map
{
"version": "0.9.5",
"version": "0.9.6",
"repository": {

@@ -16,3 +16,4 @@ "type": "git",

},
"default": "./dist/utils.es2017.js"
"default": "./dist/utils.es2017.js",
"types": "./dist/index.d.ts"
},

@@ -23,3 +24,3 @@ "./package.json": "./package.json"

"main": "./dist/index.js",
"typings": "./dist/index.d.ts",
"types": "./dist/index.d.ts",
"files": [

@@ -29,3 +30,3 @@ "dist"

"scripts": {
"build": "yarn build:ts && yarn build:esm2017 && yarn build:esm2019 && yarn build:cjs:dev && yarn build:cjs:prod",
"build": "npm run build:ts && npm run build:esm2017 && npm run build:esm2019 && npm run build:cjs:dev && npm run build:cjs:prod",
"build:esm2019": "esbuild src/index.tsx --bundle --outfile=./dist/utils.es2019.mjs --target=es2019 --external:react --external:rxjs --external:@react-rxjs/core --format=esm --sourcemap",

@@ -36,6 +37,6 @@ "build:esm2017": "esbuild src/index.tsx --bundle --outfile=./dist/utils.es2017.js --target=es2017 --external:react --external:rxjs --external:@react-rxjs/core --format=esm --sourcemap",

"build:ts": "tsc -p ./tsconfig-build.json --outDir ./dist --skipLibCheck --emitDeclarationOnly",
"test": "jest --coverage",
"test": "node --expose-gc ../../node_modules/.bin/jest --coverage --runInBand",
"lint": "prettier --check README.md \"src/**/*.{js,jsx,ts,tsx,json,md}\"",
"format": "prettier --write README.md \"src/**/*.{js,jsx,ts,tsx,json,md}\"",
"prepare": "yarn build"
"prepack": "npm run build"
},

@@ -58,4 +59,4 @@ "peerDependencies": {

"devDependencies": {
"@react-rxjs/core": "0.8.7"
"@react-rxjs/core": "0.10.5"
}
}

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