universal-stores
Advanced tools
Comparing version 2.2.0 to 2.3.0
@@ -11,6 +11,4 @@ /** | ||
*/ | ||
/** A generic subscriber. Used in {@link Store} */ | ||
export declare type Subscriber<T> = (current: T) => void; | ||
/** A function that's used to unsubscribe a subscriber from a store. Used in {@link Store} */ | ||
export declare type Unsubscribe = () => void; | ||
import { Subscriber, Unsubscribe } from '@cdellacqua/signals'; | ||
export * from '@cdellacqua/signals'; | ||
/** A generic setter function. Used in {@link Store} */ | ||
@@ -17,0 +15,0 @@ export declare type Setter<T> = (newValue: T) => void; |
@@ -17,2 +17,80 @@ var __defProp = Object.defineProperty; | ||
}; | ||
function deriveSignal(signal$, transform) { | ||
const base$ = makeSignal(); | ||
const emitTransformed = (data) => { | ||
base$.emit(transform(data)); | ||
}; | ||
const handleUnsubscribe = () => { | ||
if (unsubscribeOriginal && base$.nOfSubscriptions() === 0) { | ||
unsubscribeOriginal(); | ||
unsubscribeOriginal = null; | ||
} | ||
}; | ||
let unsubscribeOriginal = null; | ||
return { | ||
nOfSubscriptions: base$.nOfSubscriptions, | ||
subscribe: (s) => { | ||
const unsubscribe = base$.subscribe(s); | ||
if (!unsubscribeOriginal) { | ||
unsubscribeOriginal = signal$.subscribe(emitTransformed); | ||
} | ||
return () => { | ||
unsubscribe(); | ||
handleUnsubscribe(); | ||
}; | ||
}, | ||
subscribeOnce: (s) => { | ||
const unsubscribe = base$.subscribeOnce((v) => { | ||
s(v); | ||
handleUnsubscribe(); | ||
}); | ||
if (!unsubscribeOriginal) { | ||
unsubscribeOriginal = signal$.subscribe(emitTransformed); | ||
} | ||
return () => { | ||
unsubscribe(); | ||
handleUnsubscribe(); | ||
}; | ||
} | ||
}; | ||
} | ||
function coalesceSignals(signals$) { | ||
const base$ = makeSignal(); | ||
const emit = (data) => { | ||
base$.emit(data); | ||
}; | ||
const handleUnsubscribe = () => { | ||
if (unsubscribeOriginals && base$.nOfSubscriptions() === 0) { | ||
unsubscribeOriginals.forEach((unsub) => unsub()); | ||
unsubscribeOriginals = null; | ||
} | ||
}; | ||
let unsubscribeOriginals = null; | ||
return { | ||
nOfSubscriptions: base$.nOfSubscriptions, | ||
subscribe: (s) => { | ||
const unsubscribe = base$.subscribe(s); | ||
if (!unsubscribeOriginals) { | ||
unsubscribeOriginals = signals$.map((signal$) => signal$.subscribe(emit)); | ||
} | ||
return () => { | ||
unsubscribe(); | ||
handleUnsubscribe(); | ||
}; | ||
}, | ||
subscribeOnce: (s) => { | ||
const unsubscribe = base$.subscribeOnce((v) => { | ||
s(v); | ||
handleUnsubscribe(); | ||
}); | ||
if (!unsubscribeOriginals) { | ||
unsubscribeOriginals = signals$.map((signal$) => signal$.subscribe(emit)); | ||
} | ||
return () => { | ||
unsubscribe(); | ||
handleUnsubscribe(); | ||
}; | ||
} | ||
}; | ||
} | ||
function makeSignal() { | ||
@@ -187,2 +265,2 @@ const subscribers = []; | ||
} | ||
export { makeDerivedStore, makeReadonlyStore, makeStore }; | ||
export { coalesceSignals, deriveSignal, makeDerivedStore, makeReadonlyStore, makeSignal, makeStore }; |
@@ -1,2 +0,2 @@ | ||
var T=Object.defineProperty;var j=Object.getOwnPropertySymbols;var D=Object.prototype.hasOwnProperty,M=Object.prototype.propertyIsEnumerable;var x=(c,u,r)=>u in c?T(c,u,{enumerable:!0,configurable:!0,writable:!0,value:r}):c[u]=r,y=(c,u)=>{for(var r in u||(u={}))D.call(u,r)&&x(c,r,u[r]);if(j)for(var r of j(u))M.call(u,r)&&x(c,r,u[r]);return c};(function(c,u){typeof exports=="object"&&typeof module!="undefined"?u(exports):typeof define=="function"&&define.amd?define(["exports"],u):(c=typeof globalThis!="undefined"?globalThis:c||self,u(c.universalStores={}))})(this,function(c){"use strict";function u(){const n=[];function s(e){for(const m of[...n])m(e)}function b(e){const m=n.indexOf(e);m!==-1&&n.splice(m,1)}function t(e){return n.indexOf(e)===-1&&n.push(e),()=>b(e)}function f(e){const m=t(p=>{m(),e(p)});return m}return{emit:s,subscribe:t,subscribeOnce:f,nOfSubscriptions(){return n.length}}}/** | ||
var D=Object.defineProperty;var A=Object.getOwnPropertySymbols;var M=Object.prototype.hasOwnProperty,R=Object.prototype.propertyIsEnumerable;var j=(r,f,l)=>f in r?D(r,f,{enumerable:!0,configurable:!0,writable:!0,value:l}):r[f]=l,y=(r,f)=>{for(var l in f||(f={}))M.call(f,l)&&j(r,l,f[l]);if(A)for(var l of A(f))R.call(f,l)&&j(r,l,f[l]);return r};(function(r,f){typeof exports=="object"&&typeof module!="undefined"?f(exports):typeof define=="function"&&define.amd?define(["exports"],f):(r=typeof globalThis!="undefined"?globalThis:r||self,f(r.universalStores={}))})(this,function(r){"use strict";function f(s,e){const c=v(),u=b=>{c.emit(e(b))},i=()=>{n&&c.nOfSubscriptions()===0&&(n(),n=null)};let n=null;return{nOfSubscriptions:c.nOfSubscriptions,subscribe:b=>{const t=c.subscribe(b);return n||(n=s.subscribe(u)),()=>{t(),i()}},subscribeOnce:b=>{const t=c.subscribeOnce(p=>{b(p),i()});return n||(n=s.subscribe(u)),()=>{t(),i()}}}}function l(s){const e=v(),c=n=>{e.emit(n)},u=()=>{i&&e.nOfSubscriptions()===0&&(i.forEach(n=>n()),i=null)};let i=null;return{nOfSubscriptions:e.nOfSubscriptions,subscribe:n=>{const b=e.subscribe(n);return i||(i=s.map(t=>t.subscribe(c))),()=>{b(),u()}},subscribeOnce:n=>{const b=e.subscribeOnce(t=>{n(t),u()});return i||(i=s.map(t=>t.subscribe(c))),()=>{b(),u()}}}}function v(){const s=[];function e(n){for(const b of[...s])b(n)}function c(n){const b=s.indexOf(n);b!==-1&&s.splice(b,1)}function u(n){return s.indexOf(n)===-1&&s.push(n),()=>c(n)}function i(n){const b=u(t=>{b(),n(t)});return b}return{emit:e,subscribe:u,subscribeOnce:i,nOfSubscriptions(){return s.length}}}/** | ||
* @license | ||
@@ -10,3 +10,3 @@ * Copyright (c) 2016-22 [these people](https://github.com/sveltejs/svelte/graphs/contributors) | ||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
*/function r(n,s,b){const t=Array.isArray(n),f=!t&&"subscribe"in n&&"nOfSubscriptions"in n&&"content"in n,e=f?1:t?n.length:Object.keys(n).length;return A(void 0,{comparator:b==null?void 0:b.comparator,start:e===0?p=>{p(s(t?[]:{}))}:f?p=>n.subscribe(o=>p(s(o))):t?p=>{let d=new Array(n.length),o=0;const a=n.map((h,i)=>h.subscribe(l=>{if(o<e&&(d[i]=l,o++),o===e){const v=[...d];v[i]=l,p(s(v)),d=v}}));return()=>{for(const h of a)h();o=0}}:p=>{let d={},o=0;const a=Object.entries(n).map(([h,i])=>i.subscribe(l=>{if(o<e&&(d[h]=l,o++),o===e){const v=y({},d);v[h]=l,p(s(v)),d=v}}));return()=>{for(const h of a)h();o=0}}})}/** | ||
*/function T(s,e,c){const u=Array.isArray(s),i=!u&&"subscribe"in s&&"nOfSubscriptions"in s&&"content"in s,n=i?1:u?s.length:Object.keys(s).length;return O(void 0,{comparator:c==null?void 0:c.comparator,start:n===0?t=>{t(e(u?[]:{}))}:i?t=>s.subscribe(d=>t(e(d))):u?t=>{let p=new Array(s.length),d=0;const S=s.map((a,o)=>a.subscribe(m=>{if(d<n&&(p[o]=m,d++),d===n){const h=[...p];h[o]=m,t(e(h)),p=h}}));return()=>{for(const a of S)a();d=0}}:t=>{let p={},d=0;const S=Object.entries(s).map(([a,o])=>o.subscribe(m=>{if(d<n&&(p[a]=m,d++),d===n){const h=y({},p);h[a]=m,t(e(h)),p=h}}));return()=>{for(const a of S)a();d=0}}})}/** | ||
* @license | ||
@@ -20,2 +20,2 @@ * Copyright (c) 2016-22 [these people](https://github.com/sveltejs/svelte/graphs/contributors) | ||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
*/function k(n,s){var h;let b=n;const t=u();let f;const e=typeof s=="function"?s:s==null?void 0:s.start,m=(h=typeof s=="function"||s==null?void 0:s.comparator)!=null?h:(i,l)=>i===l,p=()=>{if(t.nOfSubscriptions()>0)return b;let i;return o(v=>i=v)(),i},d=i=>{b!==void 0&&m(b,i)||(b=i,t.emit(b))},o=i=>{t.nOfSubscriptions()===0&&(f=e==null?void 0:e(d));const l=t.subscribe(i);return i(b),()=>{l(),t.nOfSubscriptions()===0&&(f==null||f(),f=void 0)}};return{content:p,set:d,subscribe:o,update:i=>{d(i(p()))},nOfSubscriptions:t.nOfSubscriptions}}function A(n,s){const{content:b,nOfSubscriptions:t,subscribe:f}=k(n,s);return{content:b,nOfSubscriptions:t,subscribe:f}}c.makeDerivedStore=r,c.makeReadonlyStore=A,c.makeStore=k,Object.defineProperty(c,"__esModule",{value:!0}),c[Symbol.toStringTag]="Module"}); | ||
*/function k(s,e){var a;let c=s;const u=v();let i;const n=typeof e=="function"?e:e==null?void 0:e.start,b=(a=typeof e=="function"||e==null?void 0:e.comparator)!=null?a:(o,m)=>o===m,t=()=>{if(u.nOfSubscriptions()>0)return c;let o;return d(h=>o=h)(),o},p=o=>{c!==void 0&&b(c,o)||(c=o,u.emit(c))},d=o=>{u.nOfSubscriptions()===0&&(i=n==null?void 0:n(p));const m=u.subscribe(o);return o(c),()=>{m(),u.nOfSubscriptions()===0&&(i==null||i(),i=void 0)}};return{content:t,set:p,subscribe:d,update:o=>{p(o(t()))},nOfSubscriptions:u.nOfSubscriptions}}function O(s,e){const{content:c,nOfSubscriptions:u,subscribe:i}=k(s,e);return{content:c,nOfSubscriptions:u,subscribe:i}}r.coalesceSignals=l,r.deriveSignal=f,r.makeDerivedStore=T,r.makeReadonlyStore=O,r.makeSignal=v,r.makeStore=k,Object.defineProperty(r,"__esModule",{value:!0}),r[Symbol.toStringTag]="Module"}); |
@@ -5,3 +5,3 @@ { | ||
"description": "State management made simple", | ||
"version": "2.2.0", | ||
"version": "2.3.0", | ||
"type": "module", | ||
@@ -26,6 +26,7 @@ "types": "dist/index.d.ts", | ||
"files": [ | ||
"dist/**/*" | ||
"dist" | ||
], | ||
"exports": { | ||
".": { | ||
"types": "./dist/index.d.ts", | ||
"import": "./dist/index.es.js", | ||
@@ -55,2 +56,3 @@ "require": "./dist/index.cjs" | ||
"@typescript-eslint/eslint-plugin": "^5.4.0", | ||
"@typescript-eslint/parser": "^5.51.0", | ||
"c8": "^7.11.3", | ||
@@ -57,0 +59,0 @@ "chai": "^4.3.4", |
Sorry, the diff of this file is not supported yet
47258
603
20