@tanstack/svelte-store 0.7.7 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -4,10 +4,14 @@ export * from '@tanstack/store';
4
4
  * @private
5
5
  */
6
6
  export type NoInfer<T> = [T][T extends any ? 0 : never];
7
- export declare function useStore<TState, TSelected = NoInfer<TState>>(store: Store<TState, any>, selector?: (state: NoInfer<TState>) => TSelected): {
7
+ type EqualityFn<T> = (objA: T, objB: T) => boolean;
8
+ interface UseStoreOptions<T> {
9
+ equal?: EqualityFn<T>;
10
+ }
11
+ export declare function useStore<TState, TSelected = NoInfer<TState>>(store: Store<TState, any>, selector?: (state: NoInfer<TState>) => TSelected, options?: UseStoreOptions<TSelected>): {
8
12
  readonly current: TSelected;
9
13
  };
10
- export declare function useStore<TState, TSelected = NoInfer<TState>>(store: Derived<TState, any>, selector?: (state: NoInfer<TState>) => TSelected): {
14
+ export declare function useStore<TState, TSelected = NoInfer<TState>>(store: Derived<TState, any>, selector?: (state: NoInfer<TState>) => TSelected, options?: UseStoreOptions<TSelected>): {
11
15
  readonly current: TSelected;
12
16
  };
13
17
  export declare function shallow<T>(objA: T, objB: T): boolean;
@@ -1,10 +1,11 @@
1
1
  export * from '@tanstack/store';
2
- export function useStore(store, selector = (d) => d) {
2
+ export function useStore(store, selector = (d) => d, options = {}) {
3
+ const equal = options.equal ?? shallow;
3
4
  let slice = $state(selector(store.state));
4
5
  $effect(() => {
5
6
  const unsub = store.subscribe(() => {
6
7
  const data = selector(store.state);
7
- if (shallow(slice, data)) {
8
+ if (equal(slice, data)) {
8
9
  return;
9
10
  }
10
11
  slice = data;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tanstack/svelte-store",
3
- "version": "0.7.7",
3
+ "version": "0.9.0",
4
4
  "description": "Framework agnostic type-safe store w/ reactive framework adapters",
5
5
  "author": "Tanner Linsley",
6
6
  "license": "MIT",
@@ -37,15 +37,15 @@
37
37
  "src"
38
38
  ],
39
39
  "dependencies": {
40
- "@tanstack/store": "0.7.7"
40
+ "@tanstack/store": "0.8.0"
41
41
  },
42
42
  "devDependencies": {
43
- "@sveltejs/package": "^2.5.1",
43
+ "@sveltejs/package": "^2.5.6",
44
44
  "@sveltejs/vite-plugin-svelte": "^5.1.1",
45
- "@testing-library/svelte": "^5.2.8",
45
+ "@testing-library/svelte": "^5.2.9",
46
46
  "eslint-plugin-svelte": "^2.46.1",
47
- "svelte": "^5.38.10",
48
- "svelte-check": "^4.3.1"
47
+ "svelte": "^5.39.11",
48
+ "svelte-check": "^4.3.3"
49
49
  },
50
50
  "peerDependencies": {
51
51
  "svelte": "^5.0.0"
@@ -6,25 +6,33 @@ export * from '@tanstack/store'
6
6
  * @private
7
7
  */
8
8
  export type NoInfer<T> = [T][T extends any ? 0 : never]
9
+ type EqualityFn<T> = (objA: T, objB: T) => boolean
10
+ interface UseStoreOptions<T> {
11
+ equal?: EqualityFn<T>
12
+ }
9
13
 
10
14
  export function useStore<TState, TSelected = NoInfer<TState>>(
11
15
  store: Store<TState, any>,
12
16
  selector?: (state: NoInfer<TState>) => TSelected,
17
+ options?: UseStoreOptions<TSelected>,
13
18
  ): { readonly current: TSelected }
14
19
  export function useStore<TState, TSelected = NoInfer<TState>>(
15
20
  store: Derived<TState, any>,
16
21
  selector?: (state: NoInfer<TState>) => TSelected,
22
+ options?: UseStoreOptions<TSelected>,
17
23
  ): { readonly current: TSelected }
18
24
  export function useStore<TState, TSelected = NoInfer<TState>>(
19
25
  store: Store<TState, any> | Derived<TState, any>,
20
26
  selector: (state: NoInfer<TState>) => TSelected = (d) => d as any,
27
+ options: UseStoreOptions<TSelected> = {},
21
28
  ): { readonly current: TSelected } {
29
+ const equal = options.equal ?? shallow
22
30
  let slice = $state(selector(store.state))
23
31
 
24
32
  $effect(() => {
25
33
  const unsub = store.subscribe(() => {
26
34
  const data = selector(store.state)
27
- if (shallow(slice, data)) {
35
+ if (equal(slice, data)) {
28
36
  return
29
37
  }
30
38
  slice = data