diff --git a/docs/framework/angular/reference/functions/injectstore.md b/docs/framework/angular/reference/functions/injectstore.md index 872e05bb..2e88b148 100644 --- a/docs/framework/angular/reference/functions/injectstore.md +++ b/docs/framework/angular/reference/functions/injectstore.md @@ -16,7 +16,7 @@ function injectStore( options?): Signal ``` -Defined in: [index.ts:19](https://github.com/TanStack/store/blob/main/packages/angular-store/src/index.ts#L19) +Defined in: [index.ts:19](https://github.com/I-am-abdulazeez/store/blob/main/packages/angular-store/src/index.ts#L19) ### Type Parameters @@ -51,7 +51,7 @@ function injectStore( options?): Signal ``` -Defined in: [index.ts:24](https://github.com/TanStack/store/blob/main/packages/angular-store/src/index.ts#L24) +Defined in: [index.ts:24](https://github.com/I-am-abdulazeez/store/blob/main/packages/angular-store/src/index.ts#L24) ### Type Parameters diff --git a/docs/framework/react/reference/functions/shallow.md b/docs/framework/react/reference/functions/shallow.md index 241360d4..48bdff3b 100644 --- a/docs/framework/react/reference/functions/shallow.md +++ b/docs/framework/react/reference/functions/shallow.md @@ -11,7 +11,7 @@ title: shallow function shallow(objA, objB): boolean ``` -Defined in: [index.ts:34](https://github.com/TanStack/store/blob/main/packages/react-store/src/index.ts#L34) +Defined in: [index.ts:34](https://github.com/I-am-abdulazeez/store/blob/main/packages/react-store/src/index.ts#L34) ## Type Parameters diff --git a/docs/framework/react/reference/functions/usestore.md b/docs/framework/react/reference/functions/usestore.md index 1b1ab558..8de70410 100644 --- a/docs/framework/react/reference/functions/usestore.md +++ b/docs/framework/react/reference/functions/usestore.md @@ -13,7 +13,7 @@ title: useStore function useStore(store, selector?): TSelected ``` -Defined in: [index.ts:11](https://github.com/TanStack/store/blob/main/packages/react-store/src/index.ts#L11) +Defined in: [index.ts:11](https://github.com/I-am-abdulazeez/store/blob/main/packages/react-store/src/index.ts#L11) ### Type Parameters @@ -41,7 +41,7 @@ Defined in: [index.ts:11](https://github.com/TanStack/store/blob/main/packages/r function useStore(store, selector?): TSelected ``` -Defined in: [index.ts:15](https://github.com/TanStack/store/blob/main/packages/react-store/src/index.ts#L15) +Defined in: [index.ts:15](https://github.com/I-am-abdulazeez/store/blob/main/packages/react-store/src/index.ts#L15) ### Type Parameters diff --git a/docs/framework/solid/reference/functions/usestore.md b/docs/framework/solid/reference/functions/usestore.md index c69d28b4..b650c428 100644 --- a/docs/framework/solid/reference/functions/usestore.md +++ b/docs/framework/solid/reference/functions/usestore.md @@ -13,7 +13,7 @@ title: useStore function useStore(store, selector?): Accessor ``` -Defined in: [index.tsx:13](https://github.com/TanStack/store/blob/main/packages/solid-store/src/index.tsx#L13) +Defined in: [index.tsx:13](https://github.com/I-am-abdulazeez/store/blob/main/packages/solid-store/src/index.tsx#L13) ### Type Parameters @@ -41,7 +41,7 @@ Defined in: [index.tsx:13](https://github.com/TanStack/store/blob/main/packages/ function useStore(store, selector?): Accessor ``` -Defined in: [index.tsx:17](https://github.com/TanStack/store/blob/main/packages/solid-store/src/index.tsx#L17) +Defined in: [index.tsx:17](https://github.com/I-am-abdulazeez/store/blob/main/packages/solid-store/src/index.tsx#L17) ### Type Parameters diff --git a/docs/framework/svelte/reference/functions/shallow.md b/docs/framework/svelte/reference/functions/shallow.md index 9ceecfe7..7be5ba1b 100644 --- a/docs/framework/svelte/reference/functions/shallow.md +++ b/docs/framework/svelte/reference/functions/shallow.md @@ -11,7 +11,7 @@ title: shallow function shallow(objA, objB): boolean ``` -Defined in: [index.svelte.ts:43](https://github.com/TanStack/store/blob/main/packages/svelte-store/src/index.svelte.ts#L43) +Defined in: [index.svelte.ts:43](https://github.com/I-am-abdulazeez/store/blob/main/packages/svelte-store/src/index.svelte.ts#L43) ## Type Parameters diff --git a/docs/framework/svelte/reference/functions/usestore.md b/docs/framework/svelte/reference/functions/usestore.md index 1783b5eb..c6e78621 100644 --- a/docs/framework/svelte/reference/functions/usestore.md +++ b/docs/framework/svelte/reference/functions/usestore.md @@ -13,7 +13,7 @@ title: useStore function useStore(store, selector?): object ``` -Defined in: [index.svelte.ts:10](https://github.com/TanStack/store/blob/main/packages/svelte-store/src/index.svelte.ts#L10) +Defined in: [index.svelte.ts:10](https://github.com/I-am-abdulazeez/store/blob/main/packages/svelte-store/src/index.svelte.ts#L10) ### Type Parameters @@ -47,7 +47,7 @@ readonly current: TSelected; function useStore(store, selector?): object ``` -Defined in: [index.svelte.ts:14](https://github.com/TanStack/store/blob/main/packages/svelte-store/src/index.svelte.ts#L14) +Defined in: [index.svelte.ts:14](https://github.com/I-am-abdulazeez/store/blob/main/packages/svelte-store/src/index.svelte.ts#L14) ### Type Parameters diff --git a/docs/framework/vue/reference/functions/shallow.md b/docs/framework/vue/reference/functions/shallow.md index 11cc076d..4d2b2b93 100644 --- a/docs/framework/vue/reference/functions/shallow.md +++ b/docs/framework/vue/reference/functions/shallow.md @@ -11,7 +11,7 @@ title: shallow function shallow(objA, objB): boolean ``` -Defined in: [index.ts:47](https://github.com/TanStack/store/blob/main/packages/vue-store/src/index.ts#L47) +Defined in: [index.ts:47](https://github.com/I-am-abdulazeez/store/blob/main/packages/vue-store/src/index.ts#L47) ## Type Parameters diff --git a/docs/framework/vue/reference/functions/usestore.md b/docs/framework/vue/reference/functions/usestore.md index 59c67731..0ee1bbc0 100644 --- a/docs/framework/vue/reference/functions/usestore.md +++ b/docs/framework/vue/reference/functions/usestore.md @@ -13,7 +13,7 @@ title: useStore function useStore(store, selector?): Readonly> ``` -Defined in: [index.ts:12](https://github.com/TanStack/store/blob/main/packages/vue-store/src/index.ts#L12) +Defined in: [index.ts:12](https://github.com/I-am-abdulazeez/store/blob/main/packages/vue-store/src/index.ts#L12) ### Type Parameters @@ -41,7 +41,7 @@ Defined in: [index.ts:12](https://github.com/TanStack/store/blob/main/packages/v function useStore(store, selector?): Readonly> ``` -Defined in: [index.ts:16](https://github.com/TanStack/store/blob/main/packages/vue-store/src/index.ts#L16) +Defined in: [index.ts:16](https://github.com/I-am-abdulazeez/store/blob/main/packages/vue-store/src/index.ts#L16) ### Type Parameters diff --git a/docs/reference/classes/derived.md b/docs/reference/classes/derived.md index 21733d1d..1f8b1718 100644 --- a/docs/reference/classes/derived.md +++ b/docs/reference/classes/derived.md @@ -7,7 +7,7 @@ title: Derived # Class: Derived\ -Defined in: [derived.ts:54](https://github.com/TanStack/store/blob/main/packages/store/src/derived.ts#L54) +Defined in: [derived.ts:54](https://github.com/I-am-abdulazeez/store/blob/main/packages/store/src/derived.ts#L54) ## Type Parameters @@ -23,7 +23,7 @@ Defined in: [derived.ts:54](https://github.com/TanStack/store/blob/main/packages new Derived(options): Derived ``` -Defined in: [derived.ts:87](https://github.com/TanStack/store/blob/main/packages/store/src/derived.ts#L87) +Defined in: [derived.ts:92](https://github.com/I-am-abdulazeez/store/blob/main/packages/store/src/derived.ts#L92) #### Parameters @@ -43,7 +43,7 @@ Defined in: [derived.ts:87](https://github.com/TanStack/store/blob/main/packages lastSeenDepValues: unknown[] = []; ``` -Defined in: [derived.ts:71](https://github.com/TanStack/store/blob/main/packages/store/src/derived.ts#L71) +Defined in: [derived.ts:71](https://github.com/I-am-abdulazeez/store/blob/main/packages/store/src/derived.ts#L71) *** @@ -53,7 +53,7 @@ Defined in: [derived.ts:71](https://github.com/TanStack/store/blob/main/packages listeners: Set>; ``` -Defined in: [derived.ts:60](https://github.com/TanStack/store/blob/main/packages/store/src/derived.ts#L60) +Defined in: [derived.ts:60](https://github.com/I-am-abdulazeez/store/blob/main/packages/store/src/derived.ts#L60) *** @@ -63,7 +63,7 @@ Defined in: [derived.ts:60](https://github.com/TanStack/store/blob/main/packages options: DerivedOptions; ``` -Defined in: [derived.ts:63](https://github.com/TanStack/store/blob/main/packages/store/src/derived.ts#L63) +Defined in: [derived.ts:63](https://github.com/I-am-abdulazeez/store/blob/main/packages/store/src/derived.ts#L63) *** @@ -73,7 +73,7 @@ Defined in: [derived.ts:63](https://github.com/TanStack/store/blob/main/packages prevState: undefined | TState; ``` -Defined in: [derived.ts:62](https://github.com/TanStack/store/blob/main/packages/store/src/derived.ts#L62) +Defined in: [derived.ts:62](https://github.com/I-am-abdulazeez/store/blob/main/packages/store/src/derived.ts#L62) *** @@ -83,7 +83,7 @@ Defined in: [derived.ts:62](https://github.com/TanStack/store/blob/main/packages state: TState; ``` -Defined in: [derived.ts:61](https://github.com/TanStack/store/blob/main/packages/store/src/derived.ts#L61) +Defined in: [derived.ts:61](https://github.com/I-am-abdulazeez/store/blob/main/packages/store/src/derived.ts#L61) ## Methods @@ -93,7 +93,7 @@ Defined in: [derived.ts:61](https://github.com/TanStack/store/blob/main/packages checkIfRecalculationNeededDeeply(): void ``` -Defined in: [derived.ts:157](https://github.com/TanStack/store/blob/main/packages/store/src/derived.ts#L157) +Defined in: [derived.ts:164](https://github.com/I-am-abdulazeez/store/blob/main/packages/store/src/derived.ts#L164) #### Returns @@ -107,7 +107,7 @@ Defined in: [derived.ts:157](https://github.com/TanStack/store/blob/main/package getDepVals(): object ``` -Defined in: [derived.ts:72](https://github.com/TanStack/store/blob/main/packages/store/src/derived.ts#L72) +Defined in: [derived.ts:77](https://github.com/I-am-abdulazeez/store/blob/main/packages/store/src/derived.ts#L77) #### Returns @@ -133,13 +133,13 @@ prevVal: undefined | NonNullable; *** -### mount() +### ~~mount()~~ ```ts mount(): () => void ``` -Defined in: [derived.ts:178](https://github.com/TanStack/store/blob/main/packages/store/src/derived.ts#L178) +Defined in: [derived.ts:188](https://github.com/I-am-abdulazeez/store/blob/main/packages/store/src/derived.ts#L188) #### Returns @@ -149,6 +149,10 @@ Defined in: [derived.ts:178](https://github.com/TanStack/store/blob/main/package `void` +#### Deprecated + +Use subscribe() instead, which automatically mounts when needed + *** ### recompute() @@ -157,7 +161,7 @@ Defined in: [derived.ts:178](https://github.com/TanStack/store/blob/main/package recompute(): void ``` -Defined in: [derived.ts:145](https://github.com/TanStack/store/blob/main/packages/store/src/derived.ts#L145) +Defined in: [derived.ts:152](https://github.com/I-am-abdulazeez/store/blob/main/packages/store/src/derived.ts#L152) #### Returns @@ -171,7 +175,7 @@ Defined in: [derived.ts:145](https://github.com/TanStack/store/blob/main/package registerOnGraph(deps): void ``` -Defined in: [derived.ts:96](https://github.com/TanStack/store/blob/main/packages/store/src/derived.ts#L96) +Defined in: [derived.ts:103](https://github.com/I-am-abdulazeez/store/blob/main/packages/store/src/derived.ts#L103) #### Parameters @@ -193,7 +197,7 @@ readonly ( subscribe(listener): () => void ``` -Defined in: [derived.ts:190](https://github.com/TanStack/store/blob/main/packages/store/src/derived.ts#L190) +Defined in: [derived.ts:195](https://github.com/I-am-abdulazeez/store/blob/main/packages/store/src/derived.ts#L195) #### Parameters @@ -217,7 +221,7 @@ Defined in: [derived.ts:190](https://github.com/TanStack/store/blob/main/package unregisterFromGraph(deps): void ``` -Defined in: [derived.ts:125](https://github.com/TanStack/store/blob/main/packages/store/src/derived.ts#L125) +Defined in: [derived.ts:132](https://github.com/I-am-abdulazeez/store/blob/main/packages/store/src/derived.ts#L132) #### Parameters diff --git a/docs/reference/classes/effect.md b/docs/reference/classes/effect.md index 333ddc0b..6722d4fd 100644 --- a/docs/reference/classes/effect.md +++ b/docs/reference/classes/effect.md @@ -7,7 +7,7 @@ title: Effect # Class: Effect -Defined in: [effect.ts:17](https://github.com/TanStack/store/blob/main/packages/store/src/effect.ts#L17) +Defined in: [effect.ts:17](https://github.com/I-am-abdulazeez/store/blob/main/packages/store/src/effect.ts#L17) ## Constructors @@ -17,7 +17,7 @@ Defined in: [effect.ts:17](https://github.com/TanStack/store/blob/main/packages/ new Effect(opts): Effect ``` -Defined in: [effect.ts:23](https://github.com/TanStack/store/blob/main/packages/store/src/effect.ts#L23) +Defined in: [effect.ts:23](https://github.com/I-am-abdulazeez/store/blob/main/packages/store/src/effect.ts#L23) #### Parameters @@ -37,7 +37,7 @@ Defined in: [effect.ts:23](https://github.com/TanStack/store/blob/main/packages/ mount(): () => void ``` -Defined in: [effect.ts:39](https://github.com/TanStack/store/blob/main/packages/store/src/effect.ts#L39) +Defined in: [effect.ts:39](https://github.com/I-am-abdulazeez/store/blob/main/packages/store/src/effect.ts#L39) #### Returns diff --git a/docs/reference/classes/store.md b/docs/reference/classes/store.md index ee32ec43..2f1f934f 100644 --- a/docs/reference/classes/store.md +++ b/docs/reference/classes/store.md @@ -7,7 +7,7 @@ title: Store # Class: Store\ -Defined in: [store.ts:27](https://github.com/TanStack/store/blob/main/packages/store/src/store.ts#L27) +Defined in: [store.ts:27](https://github.com/I-am-abdulazeez/store/blob/main/packages/store/src/store.ts#L27) ## Type Parameters @@ -23,7 +23,7 @@ Defined in: [store.ts:27](https://github.com/TanStack/store/blob/main/packages/s new Store(initialState, options?): Store ``` -Defined in: [store.ts:36](https://github.com/TanStack/store/blob/main/packages/store/src/store.ts#L36) +Defined in: [store.ts:36](https://github.com/I-am-abdulazeez/store/blob/main/packages/store/src/store.ts#L36) #### Parameters @@ -47,7 +47,7 @@ Defined in: [store.ts:36](https://github.com/TanStack/store/blob/main/packages/s listeners: Set>; ``` -Defined in: [store.ts:31](https://github.com/TanStack/store/blob/main/packages/store/src/store.ts#L31) +Defined in: [store.ts:31](https://github.com/I-am-abdulazeez/store/blob/main/packages/store/src/store.ts#L31) *** @@ -57,7 +57,7 @@ Defined in: [store.ts:31](https://github.com/TanStack/store/blob/main/packages/s optional options: StoreOptions; ``` -Defined in: [store.ts:34](https://github.com/TanStack/store/blob/main/packages/store/src/store.ts#L34) +Defined in: [store.ts:34](https://github.com/I-am-abdulazeez/store/blob/main/packages/store/src/store.ts#L34) *** @@ -67,7 +67,7 @@ Defined in: [store.ts:34](https://github.com/TanStack/store/blob/main/packages/s prevState: TState; ``` -Defined in: [store.ts:33](https://github.com/TanStack/store/blob/main/packages/store/src/store.ts#L33) +Defined in: [store.ts:33](https://github.com/I-am-abdulazeez/store/blob/main/packages/store/src/store.ts#L33) *** @@ -77,7 +77,7 @@ Defined in: [store.ts:33](https://github.com/TanStack/store/blob/main/packages/s state: TState; ``` -Defined in: [store.ts:32](https://github.com/TanStack/store/blob/main/packages/store/src/store.ts#L32) +Defined in: [store.ts:32](https://github.com/I-am-abdulazeez/store/blob/main/packages/store/src/store.ts#L32) ## Methods @@ -87,7 +87,7 @@ Defined in: [store.ts:32](https://github.com/TanStack/store/blob/main/packages/s setState(updater): void ``` -Defined in: [store.ts:51](https://github.com/TanStack/store/blob/main/packages/store/src/store.ts#L51) +Defined in: [store.ts:51](https://github.com/I-am-abdulazeez/store/blob/main/packages/store/src/store.ts#L51) #### Parameters @@ -107,7 +107,7 @@ Defined in: [store.ts:51](https://github.com/TanStack/store/blob/main/packages/s subscribe(listener): () => void ``` -Defined in: [store.ts:42](https://github.com/TanStack/store/blob/main/packages/store/src/store.ts#L42) +Defined in: [store.ts:42](https://github.com/I-am-abdulazeez/store/blob/main/packages/store/src/store.ts#L42) #### Parameters diff --git a/docs/reference/functions/batch.md b/docs/reference/functions/batch.md index c2075157..5e8f6d55 100644 --- a/docs/reference/functions/batch.md +++ b/docs/reference/functions/batch.md @@ -11,7 +11,7 @@ title: batch function batch(fn): void ``` -Defined in: [scheduler.ts:140](https://github.com/TanStack/store/blob/main/packages/store/src/scheduler.ts#L140) +Defined in: [scheduler.ts:140](https://github.com/I-am-abdulazeez/store/blob/main/packages/store/src/scheduler.ts#L140) ## Parameters diff --git a/docs/reference/interfaces/derivedfnprops.md b/docs/reference/interfaces/derivedfnprops.md index 389a19e0..0486b28a 100644 --- a/docs/reference/interfaces/derivedfnprops.md +++ b/docs/reference/interfaces/derivedfnprops.md @@ -7,7 +7,7 @@ title: DerivedFnProps # Interface: DerivedFnProps\ -Defined in: [derived.ts:23](https://github.com/TanStack/store/blob/main/packages/store/src/derived.ts#L23) +Defined in: [derived.ts:23](https://github.com/I-am-abdulazeez/store/blob/main/packages/store/src/derived.ts#L23) ## Type Parameters @@ -25,7 +25,7 @@ Defined in: [derived.ts:23](https://github.com/TanStack/store/blob/main/packages currDepVals: TUnwrappedArr; ``` -Defined in: [derived.ts:35](https://github.com/TanStack/store/blob/main/packages/store/src/derived.ts#L35) +Defined in: [derived.ts:35](https://github.com/I-am-abdulazeez/store/blob/main/packages/store/src/derived.ts#L35) *** @@ -35,7 +35,7 @@ Defined in: [derived.ts:35](https://github.com/TanStack/store/blob/main/packages prevDepVals: undefined | TUnwrappedArr; ``` -Defined in: [derived.ts:34](https://github.com/TanStack/store/blob/main/packages/store/src/derived.ts#L34) +Defined in: [derived.ts:34](https://github.com/I-am-abdulazeez/store/blob/main/packages/store/src/derived.ts#L34) *** @@ -45,6 +45,6 @@ Defined in: [derived.ts:34](https://github.com/TanStack/store/blob/main/packages prevVal: unknown; ``` -Defined in: [derived.ts:33](https://github.com/TanStack/store/blob/main/packages/store/src/derived.ts#L33) +Defined in: [derived.ts:33](https://github.com/I-am-abdulazeez/store/blob/main/packages/store/src/derived.ts#L33) `undefined` if it's the first run diff --git a/docs/reference/interfaces/derivedoptions.md b/docs/reference/interfaces/derivedoptions.md index e062122e..90b7b558 100644 --- a/docs/reference/interfaces/derivedoptions.md +++ b/docs/reference/interfaces/derivedoptions.md @@ -7,7 +7,7 @@ title: DerivedOptions # Interface: DerivedOptions\ -Defined in: [derived.ts:38](https://github.com/TanStack/store/blob/main/packages/store/src/derived.ts#L38) +Defined in: [derived.ts:38](https://github.com/I-am-abdulazeez/store/blob/main/packages/store/src/derived.ts#L38) ## Type Parameters @@ -25,7 +25,7 @@ Defined in: [derived.ts:38](https://github.com/TanStack/store/blob/main/packages deps: TArr; ``` -Defined in: [derived.ts:47](https://github.com/TanStack/store/blob/main/packages/store/src/derived.ts#L47) +Defined in: [derived.ts:47](https://github.com/I-am-abdulazeez/store/blob/main/packages/store/src/derived.ts#L47) *** @@ -35,7 +35,7 @@ Defined in: [derived.ts:47](https://github.com/TanStack/store/blob/main/packages fn: (props) => TState; ``` -Defined in: [derived.ts:51](https://github.com/TanStack/store/blob/main/packages/store/src/derived.ts#L51) +Defined in: [derived.ts:51](https://github.com/I-am-abdulazeez/store/blob/main/packages/store/src/derived.ts#L51) Values of the `deps` from before and after the current invocation of `fn` @@ -57,7 +57,7 @@ Values of the `deps` from before and after the current invocation of `fn` optional onSubscribe: (listener, derived) => () => void; ``` -Defined in: [derived.ts:42](https://github.com/TanStack/store/blob/main/packages/store/src/derived.ts#L42) +Defined in: [derived.ts:42](https://github.com/I-am-abdulazeez/store/blob/main/packages/store/src/derived.ts#L42) #### Parameters @@ -85,7 +85,7 @@ Defined in: [derived.ts:42](https://github.com/TanStack/store/blob/main/packages optional onUpdate: () => void; ``` -Defined in: [derived.ts:46](https://github.com/TanStack/store/blob/main/packages/store/src/derived.ts#L46) +Defined in: [derived.ts:46](https://github.com/I-am-abdulazeez/store/blob/main/packages/store/src/derived.ts#L46) #### Returns diff --git a/docs/reference/interfaces/storeoptions.md b/docs/reference/interfaces/storeoptions.md index 81a1256d..a93df2ab 100644 --- a/docs/reference/interfaces/storeoptions.md +++ b/docs/reference/interfaces/storeoptions.md @@ -7,7 +7,7 @@ title: StoreOptions # Interface: StoreOptions\ -Defined in: [store.ts:4](https://github.com/TanStack/store/blob/main/packages/store/src/store.ts#L4) +Defined in: [store.ts:4](https://github.com/I-am-abdulazeez/store/blob/main/packages/store/src/store.ts#L4) ## Type Parameters @@ -23,7 +23,7 @@ Defined in: [store.ts:4](https://github.com/TanStack/store/blob/main/packages/st optional onSubscribe: (listener, store) => () => void; ``` -Defined in: [store.ts:17](https://github.com/TanStack/store/blob/main/packages/store/src/store.ts#L17) +Defined in: [store.ts:17](https://github.com/I-am-abdulazeez/store/blob/main/packages/store/src/store.ts#L17) Called when a listener subscribes to the store. @@ -55,7 +55,7 @@ a function to unsubscribe the listener optional onUpdate: () => void; ``` -Defined in: [store.ts:24](https://github.com/TanStack/store/blob/main/packages/store/src/store.ts#L24) +Defined in: [store.ts:24](https://github.com/I-am-abdulazeez/store/blob/main/packages/store/src/store.ts#L24) Called after the state has been updated, used to derive other state. @@ -71,7 +71,7 @@ Called after the state has been updated, used to derive other state. optional updateFn: (previous) => (updater) => TState; ``` -Defined in: [store.ts:11](https://github.com/TanStack/store/blob/main/packages/store/src/store.ts#L11) +Defined in: [store.ts:11](https://github.com/I-am-abdulazeez/store/blob/main/packages/store/src/store.ts#L11) Replace the default update function with a custom one. diff --git a/docs/reference/type-aliases/unwrapderivedorstore.md b/docs/reference/type-aliases/unwrapderivedorstore.md index 775273d1..597451b6 100644 --- a/docs/reference/type-aliases/unwrapderivedorstore.md +++ b/docs/reference/type-aliases/unwrapderivedorstore.md @@ -11,7 +11,7 @@ title: UnwrapDerivedOrStore type UnwrapDerivedOrStore = T extends Derived ? InnerD : T extends Store ? InnerS : never; ``` -Defined in: [derived.ts:5](https://github.com/TanStack/store/blob/main/packages/store/src/derived.ts#L5) +Defined in: [derived.ts:5](https://github.com/I-am-abdulazeez/store/blob/main/packages/store/src/derived.ts#L5) ## Type Parameters diff --git a/docs/reference/variables/depsthathavewrittenthistick.md b/docs/reference/variables/depsthathavewrittenthistick.md index 23e5460f..16a8a0f9 100644 --- a/docs/reference/variables/depsthathavewrittenthistick.md +++ b/docs/reference/variables/depsthathavewrittenthistick.md @@ -11,7 +11,7 @@ title: __depsThatHaveWrittenThisTick const __depsThatHaveWrittenThisTick: object; ``` -Defined in: [scheduler.ts:28](https://github.com/TanStack/store/blob/main/packages/store/src/scheduler.ts#L28) +Defined in: [scheduler.ts:28](https://github.com/I-am-abdulazeez/store/blob/main/packages/store/src/scheduler.ts#L28) ## Type declaration diff --git a/docs/reference/variables/derivedtostore.md b/docs/reference/variables/derivedtostore.md index 16ef1e6b..c317e8bb 100644 --- a/docs/reference/variables/derivedtostore.md +++ b/docs/reference/variables/derivedtostore.md @@ -11,4 +11,4 @@ title: __derivedToStore const __derivedToStore: WeakMap, Set unknown>>>; ``` -Defined in: [scheduler.ts:23](https://github.com/TanStack/store/blob/main/packages/store/src/scheduler.ts#L23) +Defined in: [scheduler.ts:23](https://github.com/I-am-abdulazeez/store/blob/main/packages/store/src/scheduler.ts#L23) diff --git a/docs/reference/variables/storetoderived.md b/docs/reference/variables/storetoderived.md index b9026ccd..38ea09f9 100644 --- a/docs/reference/variables/storetoderived.md +++ b/docs/reference/variables/storetoderived.md @@ -11,7 +11,7 @@ title: __storeToDerived const __storeToDerived: WeakMap unknown>, Set>>; ``` -Defined in: [scheduler.ts:19](https://github.com/TanStack/store/blob/main/packages/store/src/scheduler.ts#L19) +Defined in: [scheduler.ts:19](https://github.com/I-am-abdulazeez/store/blob/main/packages/store/src/scheduler.ts#L19) This is here to solve the pyramid dependency problem where: A diff --git a/packages/store/src/derived.ts b/packages/store/src/derived.ts index 07b25421..1d42d4e0 100644 --- a/packages/store/src/derived.ts +++ b/packages/store/src/derived.ts @@ -69,6 +69,11 @@ export class Derived< _subscriptions: Array<() => void> = [] lastSeenDepValues: Array = [] + + // Add a new field to track mounting state + private _isMounted = false + private _cleanupFn: (() => void) | null = null + getDepVals = () => { const prevDepVals = [] as Array const currDepVals = [] as Array @@ -91,6 +96,8 @@ export class Derived< prevVal: undefined, currDepVals: this.getDepVals().currDepVals as never, }) + + // ❌ No auto-mount here! subscribe() will handle it, because it is better to mount only when needed } registerOnGraph( @@ -175,24 +182,56 @@ export class Derived< } } + /** + * @deprecated Use subscribe() instead, which automatically mounts when needed + */ mount = () => { - this.registerOnGraph() - this.checkIfRecalculationNeededDeeply() - - return () => { - this.unregisterFromGraph() - for (const cleanup of this._subscriptions) { - cleanup() - } + if (!this._isMounted) { + this._mount() } + return this._cleanupFn || (() => {}) } subscribe = (listener: Listener) => { + // Auto-mount if this is the first listener + if (this.listeners.size === 0 && !this._isMounted) { + this._mount() + } + this.listeners.add(listener) const unsub = this.options.onSubscribe?.(listener, this) return () => { this.listeners.delete(listener) unsub?.() + + // Auto-unmount only if this was the last listener, and it wasn't manually mounted + if (this.listeners.size === 0 && this._isMounted) { + this._unmount() + } } } + + // Private mount implementation + private _mount = () => { + if (this._isMounted) return + + this.registerOnGraph() + this.checkIfRecalculationNeededDeeply() + + this._isMounted = true + this._cleanupFn = () => { + this.unregisterFromGraph() + for (const cleanup of this._subscriptions) { + cleanup() + } + this._isMounted = false + this._cleanupFn = null + } + } + + // Private unmount implementation + private _unmount = () => { + if (!this._isMounted || !this._cleanupFn) return + this._cleanupFn() + } } diff --git a/packages/store/tests/derived.test.ts b/packages/store/tests/derived.test.ts index 00a919b6..dfbe3b00 100644 --- a/packages/store/tests/derived.test.ts +++ b/packages/store/tests/derived.test.ts @@ -23,7 +23,7 @@ describe('Derived', () => { }, }) - halfCount.mount() + // halfCount.mount() const doubleCount = new Derived({ deps: [count], @@ -32,7 +32,7 @@ describe('Derived', () => { }, }) - doubleCount.mount() + // doubleCount.mount() - No longer needed const sumDoubleHalfCount = new Derived({ deps: [halfCount, doubleCount], @@ -41,7 +41,7 @@ describe('Derived', () => { }, }) - sumDoubleHalfCount.mount() + // sumDoubleHalfCount.mount() - No longer needed const halfCountFn = viFnSubscribe(halfCount) const doubleCountFn = viFnSubscribe(doubleCount) @@ -117,7 +117,7 @@ describe('Derived', () => { }, }) - doubleCount.mount() + // doubleCount.mount() - No longer needed const tripleCount = new Derived({ deps: [count, doubleCount], @@ -126,7 +126,7 @@ describe('Derived', () => { }, }) - tripleCount.mount() + // tripleCount.mount() - No longer needed const doubleCountFn = viFnSubscribe(doubleCount) const tripleCountFn = viFnSubscribe(tripleCount) @@ -150,18 +150,19 @@ describe('Derived', () => { return store.state * 2 }, }) - derived.mount() + // derived.mount() No longer needed const fn = vi.fn() derived.subscribe(fn) store.setState(() => 24) expect(fn).toBeCalledWith({ prevVal: 24, currentVal: 48 }) }) - test('derivedFn should receive old and new dep values', () => { + test('derivedFn should receive old and new dep values', async () => { const count = new Store(12) - const date = new Date() - const time = new Store(date) + const time = new Store(new Date()) + const fn = vi.fn() + const derived = new Derived({ deps: [count, time], fn: ({ prevDepVals, currDepVals }) => { @@ -169,26 +170,37 @@ describe('Derived', () => { return void 0 }, }) - derived.mount() - expect(fn).toBeCalledWith({ + + derived.subscribe(() => {}) + + // First call should be with initial values + expect(fn).toHaveBeenCalledWith({ prevDepVals: undefined, - currDepVals: [12, date], + currDepVals: [12, time.state], }) + count.setState(() => 24) - expect(fn).toBeCalledWith({ - prevDepVals: [12, date], - currDepVals: [24, date], + + // Expect function to be called with updated values + expect(fn).toHaveBeenCalledWith({ + prevDepVals: [12, time.state], + currDepVals: [24, time.state], }) }) - test('derivedFn should receive old and new dep values for similar derived values', () => { + test('derivedFn should receive old and new dep values for similar derived values', async () => { const count = new Store(12) + const halfCount = new Derived({ deps: [count], fn: () => count.state / 2, }) - halfCount.mount() + + // Ensure halfCount subscribes to count + halfCount.subscribe(() => {}) + const fn = vi.fn() + const derived = new Derived({ deps: [count, halfCount], fn: ({ prevDepVals, currDepVals }) => { @@ -196,23 +208,30 @@ describe('Derived', () => { return void 0 }, }) - derived.mount() - expect(fn).toBeCalledWith({ + + derived.subscribe(() => {}) + + // First call should be with initial values + expect(fn).toHaveBeenCalledWith({ prevDepVals: undefined, - currDepVals: [12, 6], + currDepVals: [12, 6], // halfCount = 12 / 2 = 6 }) + count.setState(() => 24) - expect(fn).toBeCalledWith({ + + // Expect function to be called with updated values + expect(fn).toHaveBeenCalledWith({ prevDepVals: [12, 6], - currDepVals: [24, 12], + currDepVals: [24, 12], // halfCount = 24 / 2 = 12 }) }) - test('derivedFn should receive the old value', () => { + test('derivedFn should receive the old value', async () => { const count = new Store(12) const date = new Date() const time = new Store(date) const fn = vi.fn() + const derived = new Derived({ deps: [count, time], fn: ({ prevVal }) => { @@ -220,47 +239,53 @@ describe('Derived', () => { return count.state }, }) - derived.mount() - expect(fn).toBeCalledWith(undefined) + + // Ensure derived subscribes and tracks changes + derived.subscribe(() => {}) + + // First call should use `undefined` + expect(fn).toHaveBeenCalledWith(undefined) + count.setState(() => 24) - expect(fn).toBeCalledWith(12) + + expect(fn).toHaveBeenCalledWith(12) }) - test('should be able to mount and unmount correctly repeatly', () => { + test('should update only when subscribed', () => { const count = new Store(12) const derived = new Derived({ deps: [count], - fn: () => { - return count.state * 2 - }, + fn: () => count.state * 2, }) - const cleanup1 = derived.mount() - cleanup1() - const cleanup2 = derived.mount() - cleanup2() - const cleanup3 = derived.mount() - cleanup3() - derived.mount() + const unsubscribe1 = derived.subscribe(() => {}) + unsubscribe1() + const unsubscribe2 = derived.subscribe(() => {}) + unsubscribe2() + + // Keep at least one active subscription + const unsubscribe3 = derived.subscribe(() => {}) count.setState(() => 24) expect(count.state).toBe(24) expect(derived.state).toBe(48) + + unsubscribe3() // Cleanup }) test('should handle calculating state before the derived state is mounted', () => { const count = new Store(12) const derived = new Derived({ deps: [count], - fn: () => { - return count.state * 2 - }, + fn: () => count.state * 2, }) count.setState(() => 24) - derived.mount() + // Force derived to update by subscribing + const unsubscribe = derived.subscribe(() => {}) + unsubscribe() expect(count.state).toBe(24) expect(derived.state).toBe(48) @@ -285,7 +310,7 @@ describe('Derived', () => { unmount2() const unmount3 = derived.mount() unmount3() - derived.mount() + // derived.mount() - No longer needed expect(count.state).toBe(24) expect(derived.state).toBe(48) @@ -297,22 +322,18 @@ describe('Derived', () => { const double = new Derived({ deps: [count], - fn: () => { - return count.state * 2 - }, + fn: () => count.state * 2, }) const halfDouble = new Derived({ deps: [double], - fn: () => { - return double.state / 2 - }, + fn: () => double.state / 2, }) - halfDouble.mount() - double.mount() - + // Force computation by subscribing + const unsubscribe = halfDouble.subscribe(() => {}) count.setState(() => 24) + unsubscribe() expect(count.state).toBe(24) expect(double.state).toBe(48) @@ -324,22 +345,18 @@ describe('Derived', () => { const double = new Derived({ deps: [count], - fn: () => { - return count.state * 2 - }, + fn: () => count.state * 2, }) const countPlusDouble = new Derived({ deps: [count, double], - fn: () => { - return count.state + double.state - }, + fn: () => count.state + double.state, }) - countPlusDouble.mount() - double.mount() - + // Subscribe to countPlusDouble to trigger the full dependency chain + const unsubscribe = countPlusDouble.subscribe(() => {}) count.setState(() => 24) + unsubscribe() expect(count.state).toBe(24) expect(double.state).toBe(48) @@ -367,8 +384,10 @@ describe('Derived', () => { }, }) - halfDouble.mount() - double.mount() + halfDouble.subscribe(() => { }) + + // halfDouble.mount() - No longer needed + // double.mount() - No longer needed expect(fn).toHaveBeenLastCalledWith(3) })