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

universal-stores

Package Overview
Dependencies
Maintainers
1
Versions
21
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

universal-stores - npm Package Compare versions

Comparing version 1.1.4 to 2.0.0

10

dist/composition.d.ts

@@ -44,3 +44,3 @@ /**

* const source2$ = makeStore(-10);
* const derived$ = makeDerivedStore([source1$, source2$], ([v1, v2]) => v1 + v2);
* const derived$ = makeDerivedStore({v1: source1$, v2: source2$}, ({v1, v2}) => v1 + v2);
* source1$.subscribe((v) => console.log(v)); // prints 10

@@ -55,4 +55,6 @@ * source2$.subscribe((v) => console.log(v)); // prints -10

*/
export declare function makeDerivedStore<TIn extends [unknown, ...unknown[]], TOut>(readonlyStores: {
[P in keyof TIn]: ReadonlyStore<TIn[P]>;
}, map: (values: TIn) => TOut, config?: DerivedStoreConfig<TOut>): ReadonlyStore<TOut>;
export declare function makeDerivedStore<TIn extends Record<string, unknown>, TOut>(readonlyStores: {
[K in keyof TIn]: ReadonlyStore<TIn[K]>;
}, map: (value: {
[K in keyof TIn]: TIn[K];
}) => TOut, config?: DerivedStoreConfig<TOut>): ReadonlyStore<TOut>;

20

dist/index.d.ts

@@ -48,7 +48,7 @@ /**

*/
get nOfSubscriptions(): number;
nOfSubscriptions(): number;
/**
* Get the current value of the store.
* Get the current value wrapped by the store.
*/
get value(): T;
content(): T;
};

@@ -90,3 +90,3 @@ /**

* const store$ = makeStore(0);
* console.log(store$.value); // 0
* console.log(store$.content()); // 0
* store$.subscribe((v) => console.log(v));

@@ -106,3 +106,3 @@ * store$.set(10); // will trigger the above console log, printing 10

* const store$ = makeStore(0);
* console.log(store$.value); // 0
* console.log(store$.content()); // 0
* store$.subscribe((v) => console.log(v));

@@ -122,3 +122,3 @@ * store$.set(10); // will trigger the above console log, printing 10

* const store$ = makeStore(0);
* console.log(store$.value); // 0
* console.log(store$.content()); // 0
* store$.subscribe((v) => console.log(v));

@@ -142,5 +142,5 @@ * store$.set(10); // will trigger the above console log, printing 10

* });
* console.log(store$.value); // 1
* console.log(store$.content()); // 1
* store$.subscribe((v) => console.log(v)); // immediately prints 2
* console.log(store$.value); // 2
* console.log(store$.content()); // 2
* ```

@@ -179,5 +179,5 @@ * @param initialValue the initial value of the store.

* });
* console.log(store$.value); // 1
* console.log(store$.content()); // 1
* store$.subscribe((v) => console.log(v)); // immediately prints 2
* console.log(store$.value); // 2
* console.log(store$.content()); // 2
* ```

@@ -184,0 +184,0 @@ * @param initialValue the initial value of the store.

@@ -0,1 +1,17 @@

var __defProp = Object.defineProperty;
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __propIsEnum = Object.prototype.propertyIsEnumerable;
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
var __spreadValues = (a, b) => {
for (var prop in b || (b = {}))
if (__hasOwnProp.call(b, prop))
__defNormalProp(a, prop, b[prop]);
if (__getOwnPropSymbols)
for (var prop of __getOwnPropSymbols(b)) {
if (__propIsEnum.call(b, prop))
__defNormalProp(a, prop, b[prop]);
}
return a;
};
function makeSignal() {

@@ -32,3 +48,3 @@ const subscribers = [];

subscribeOnce,
get nOfSubscriptions() {
nOfSubscriptions() {
return subscribers.length;

@@ -48,25 +64,20 @@ }

*/
function makeDerivedStore(storeOrStores, map, config) {
const isArray = Array.isArray(storeOrStores);
const readonlyStores = isArray ? storeOrStores : [storeOrStores];
const deriveValues = (values) => {
if (isArray) {
return map(values);
} else {
return map(values[0]);
}
};
const derived = makeReadonlyStore(void 0, {
function makeDerivedStore(readonlyStoreOrStores, map, config) {
const hasMultipleSources = !("subscribe" in readonlyStoreOrStores);
const sources = hasMultipleSources ? readonlyStoreOrStores : { source: readonlyStoreOrStores };
const nOfSources = Object.keys(sources).length;
const deriveValues = hasMultipleSources ? (values) => map(values) : ({ source }) => map(source);
const derived$ = makeReadonlyStore(void 0, {
comparator: config == null ? void 0 : config.comparator,
start: (set) => {
let cache = new Array(readonlyStores.length);
let cache = {};
let subscriptionCounter = 0;
const subscriptions = readonlyStores.map((r, i) => r.subscribe((newValue) => {
if (subscriptionCounter < readonlyStores.length) {
cache[i] = newValue;
const subscriptions = Object.entries(sources).map(([name, store$]) => store$.subscribe((newValue) => {
if (subscriptionCounter < nOfSources) {
cache[name] = newValue;
subscriptionCounter++;
}
if (subscriptionCounter === readonlyStores.length) {
const updatedCached = [...cache];
updatedCached[i] = newValue;
if (subscriptionCounter === nOfSources) {
const updatedCached = __spreadValues({}, cache);
updatedCached[name] = newValue;
set(deriveValues(updatedCached));

@@ -84,3 +95,3 @@ cache = updatedCached;

});
return derived;
return derived$;
}

@@ -105,3 +116,3 @@ /**

const get = () => {
if (signal.nOfSubscriptions > 0) {
if (signal.nOfSubscriptions() > 0) {
return mutableValue;

@@ -122,3 +133,3 @@ }

const subscribe = (s) => {
if (signal.nOfSubscriptions === 0) {
if (signal.nOfSubscriptions() === 0) {
stopHandler = startHandler == null ? void 0 : startHandler(set);

@@ -130,3 +141,3 @@ }

unsubscribe();
if (signal.nOfSubscriptions === 0) {
if (signal.nOfSubscriptions() === 0) {
stopHandler == null ? void 0 : stopHandler();

@@ -141,25 +152,17 @@ stopHandler = void 0;

return {
get value() {
return get();
},
content: get,
set,
subscribe,
update,
get nOfSubscriptions() {
return signal.nOfSubscriptions;
}
nOfSubscriptions: signal.nOfSubscriptions
};
}
function makeReadonlyStore(initialValue, startOrConfig) {
const base$ = makeStore(initialValue, startOrConfig);
const { content, nOfSubscriptions, subscribe } = makeStore(initialValue, startOrConfig);
return {
get value() {
return base$.value;
},
subscribe: base$.subscribe,
get nOfSubscriptions() {
return base$.nOfSubscriptions;
}
content,
nOfSubscriptions,
subscribe
};
}
export { makeDerivedStore, makeReadonlyStore, makeStore };

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

(function(o,a){typeof exports=="object"&&typeof module!="undefined"?a(exports):typeof define=="function"&&define.amd?define(["exports"],a):(o=typeof globalThis!="undefined"?globalThis:o||self,a(o.universalStores={}))})(this,function(o){"use strict";function a(){const i=[];function e(t){for(const c of[...i])c(t)}function n(t){const c=i.indexOf(t);c!==-1&&i.splice(c,1)}function s(t){return i.indexOf(t)===-1&&i.push(t),()=>n(t)}function r(t){const c=s(b=>{c(),t(b)});return c}return{emit:e,subscribe:s,subscribeOnce:r,get nOfSubscriptions(){return i.length}}}/**
var T=Object.defineProperty;var j=Object.getOwnPropertySymbols;var D=Object.prototype.hasOwnProperty,R=Object.prototype.propertyIsEnumerable;var x=(e,t,r)=>t in e?T(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,M=(e,t)=>{for(var r in t||(t={}))D.call(t,r)&&x(e,r,t[r]);if(j)for(var r of j(t))R.call(t,r)&&x(e,r,t[r]);return e};(function(e,t){typeof exports=="object"&&typeof module!="undefined"?t(exports):typeof define=="function"&&define.amd?define(["exports"],t):(e=typeof globalThis!="undefined"?globalThis:e||self,t(e.universalStores={}))})(this,function(e){"use strict";function t(){const c=[];function s(u){for(const d of[...c])d(u)}function i(u){const d=c.indexOf(u);d!==-1&&c.splice(d,1)}function o(u){return c.indexOf(u)===-1&&c.push(u),()=>i(u)}function b(u){const d=o(m=>{d(),u(m)});return d}return{emit:s,subscribe:o,subscribeOnce:b,nOfSubscriptions(){return c.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 h(i,e,n){const s=Array.isArray(i),r=s?i:[i],t=b=>e(s?b:b[0]);return v(void 0,{comparator:n==null?void 0:n.comparator,start:b=>{let d=new Array(r.length),f=0;const y=r.map((l,u)=>l.subscribe(p=>{if(f<r.length&&(d[u]=p,f++),f===r.length){const m=[...d];m[u]=p,b(t(m)),d=m}}));return()=>{for(const l of y)l();f=0}}})}/**
*/function r(c,s,i){const o=!("subscribe"in c),b=o?c:{source:c},u=Object.keys(b).length,d=o?f=>s(f):({source:f})=>s(f);return y(void 0,{comparator:i==null?void 0:i.comparator,start:f=>{let p={},S=0;const a=Object.entries(b).map(([n,l])=>l.subscribe(v=>{if(S<u&&(p[n]=v,S++),S===u){const h=M({},p);h[n]=v,f(d(h)),p=h}}));return()=>{for(const n of a)n();S=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 S(i,e){var l;let n=i;const s=a();let r;const t=typeof e=="function"?e:e==null?void 0:e.start,c=(l=typeof e=="function"||e==null?void 0:e.comparator)!=null?l:(u,p)=>u===p,b=()=>{if(s.nOfSubscriptions>0)return n;let u;return f(m=>u=m)(),u},d=u=>{n!==void 0&&c(n,u)||(n=u,s.emit(n))},f=u=>{s.nOfSubscriptions===0&&(r=t==null?void 0:t(d));const p=s.subscribe(u);return u(n),()=>{p(),s.nOfSubscriptions===0&&(r==null||r(),r=void 0)}};return{get value(){return b()},set:d,subscribe:f,update:u=>{d(u(b()))},get nOfSubscriptions(){return s.nOfSubscriptions}}}function v(i,e){const n=S(i,e);return{get value(){return n.value},subscribe:n.subscribe,get nOfSubscriptions(){return n.nOfSubscriptions}}}o.makeDerivedStore=h,o.makeReadonlyStore=v,o.makeStore=S,Object.defineProperty(o,"__esModule",{value:!0}),o[Symbol.toStringTag]="Module"});
*/function k(c,s){var a;let i=c;const o=t();let b;const u=typeof s=="function"?s:s==null?void 0:s.start,d=(a=typeof s=="function"||s==null?void 0:s.comparator)!=null?a:(n,l)=>n===l,m=()=>{if(o.nOfSubscriptions()>0)return i;let n;return p(v=>n=v)(),n},f=n=>{i!==void 0&&d(i,n)||(i=n,o.emit(i))},p=n=>{o.nOfSubscriptions()===0&&(b=u==null?void 0:u(f));const l=o.subscribe(n);return n(i),()=>{l(),o.nOfSubscriptions()===0&&(b==null||b(),b=void 0)}};return{content:m,set:f,subscribe:p,update:n=>{f(n(m()))},nOfSubscriptions:o.nOfSubscriptions}}function y(c,s){const{content:i,nOfSubscriptions:o,subscribe:b}=k(c,s);return{content:i,nOfSubscriptions:o,subscribe:b}}e.makeDerivedStore=r,e.makeReadonlyStore=y,e.makeStore=k,Object.defineProperty(e,"__esModule",{value:!0}),e[Symbol.toStringTag]="Module"});

@@ -5,3 +5,3 @@ {

"description": "State management made simple",
"version": "1.1.4",
"version": "2.0.0",
"type": "module",

@@ -71,4 +71,4 @@ "types": "dist/index.d.ts",

"dependencies": {
"@cdellacqua/signals": "^4.1.1"
"@cdellacqua/signals": "^5.0.0"
}
}

@@ -16,2 +16,6 @@ # universal-stores

## Migrating to V2
Please refer to the [changelog](./CHANGELOG.md).
## Store

@@ -33,5 +37,5 @@

const store$ = makeStore(0);
console.log(store$.value); // 0
console.log(store$.content()); // 0
store$.set(1);
console.log(store$.value); // 1
console.log(store$.content()); // 1
```

@@ -51,3 +55,3 @@

const store$ = makeStore(0);
console.log(store$.value); // 0
console.log(store$.content()); // 0
const unsubscribe = store$.subscribe((v) => console.log(v)); // immediately prints 0

@@ -86,7 +90,7 @@ store$.set(1); // triggers the above subscriber, printing 1

const unsubscribe3 = store$.subscribe(subscriber); // prints 0
console.log(store$.nOfSubscriptions); // 1
console.log(store$.nOfSubscriptions()); // 1
unsubscribe3(); // will remove "subscriber"
unsubscribe2(); // won't do anything, "subscriber" has already been removed
unsubscribe1(); // won't do anything, "subscriber" has already been removed
console.log(store$.nOfSubscriptions); // 0
console.log(store$.nOfSubscriptions()); // 0
```

@@ -102,11 +106,11 @@

const subscriber = (v: number) => console.log(v);
console.log(store$.nOfSubscriptions); // 0
console.log(store$.nOfSubscriptions()); // 0
const unsubscribe1 = store$.subscribe(subscriber); // prints 0
console.log(store$.nOfSubscriptions); // 1
console.log(store$.nOfSubscriptions()); // 1
const unsubscribe2 = store$.subscribe((v) => subscriber(v)); // prints 0
console.log(store$.nOfSubscriptions); // 2
console.log(store$.nOfSubscriptions()); // 2
unsubscribe2();
console.log(store$.nOfSubscriptions); // 1
console.log(store$.nOfSubscriptions()); // 1
unsubscribe1();
console.log(store$.nOfSubscriptions); // 0
console.log(store$.nOfSubscriptions()); // 0
```

@@ -138,3 +142,3 @@

const secondWord$ = makeStore('world!');
const derived$ = makeDerivedStore([firstWord$, secondWord$], ([first, second]) => `${first} ${second}`);
const derived$ = makeDerivedStore({first: firstWord$, second: secondWord$}, ({first, second}) => `${first} ${second}`);
derived$.subscribe((v) => console.log(v)); // prints "hello world!"

@@ -174,2 +178,3 @@ firstWord$.set('hi'); // will trigger console.log, printing "hi world!"

console.log('start');
set(performance.now());
const interval = setInterval(() => {

@@ -240,2 +245,30 @@ set(performance.now());

## Adding behaviour
If you need to encapsulate behaviour in a custom store, you
can simply destructure a regular store and add your
custom methods to the already existing ones.
Example:
```ts
import {makeStore} from 'universal-stores';
function makeCounterStore(): ReadonlyStore<number> & {increment(): void} {
const {subscribe, content, update, nOfSubscriptions} = makeStore(0);
return {
subscribe,
content,
nOfSubscriptions,
increment() {
update((n) => n + 1);
},
};
}
const counter$ = makeCounterStore();
counter$.subscribe(console.log); // immediately prints 0
counter$.increment(); // will trigger the above console.log, printing 1
```
## Motivation

@@ -242,0 +275,0 @@

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc