@tanstack/svelte-store 0.7.7 → 0.8.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.
- package/dist/index.svelte.d.ts +6 -2
- package/dist/index.svelte.js +3 -2
- package/package.json +5 -5
- package/src/index.svelte.ts +9 -1
package/dist/index.svelte.d.ts
CHANGED
|
@@ -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
|
-
|
|
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;
|
package/dist/index.svelte.js
CHANGED
|
@@ -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 (
|
|
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.
|
|
3
|
+
"version": "0.8.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.
|
|
40
|
+
"@tanstack/store": "0.8.0"
|
|
41
41
|
},
|
|
42
42
|
"devDependencies": {
|
|
43
|
-
"@sveltejs/package": "^2.5.
|
|
43
|
+
"@sveltejs/package": "^2.5.4",
|
|
44
44
|
"@sveltejs/vite-plugin-svelte": "^5.1.1",
|
|
45
45
|
"@testing-library/svelte": "^5.2.8",
|
|
46
46
|
"eslint-plugin-svelte": "^2.46.1",
|
|
47
|
-
"svelte": "^5.
|
|
48
|
-
"svelte-check": "^4.3.
|
|
47
|
+
"svelte": "^5.39.9",
|
|
48
|
+
"svelte-check": "^4.3.2"
|
|
49
49
|
},
|
|
50
50
|
"peerDependencies": {
|
|
51
51
|
"svelte": "^5.0.0"
|
package/src/index.svelte.ts
CHANGED
|
@@ -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 (
|
|
35
|
+
if (equal(slice, data)) {
|
|
28
36
|
return
|
|
29
37
|
}
|
|
30
38
|
slice = data
|