chore: update dependencies and lock file

This commit is contained in:
Bereket Engida
2025-03-09 14:04:47 +03:00
parent db67dc9b65
commit 58889fece5
4 changed files with 7016 additions and 2731 deletions

View File

@@ -101,7 +101,7 @@
"dotenv-cli": "^7.4.4",
"eslint-config-next": "15.0.0-canary.149",
"postcss": "^8.4.49",
"tailwindcss": "^3.4.16",
"tailwindcss": "3.4.16",
"typescript": "^5.7.2"
},
"overrides": {

View File

@@ -608,7 +608,7 @@
"oauth2-mock-server": "^7.2.0",
"pg": "^8.13.1",
"prisma": "^5.22.0",
"react": "^18.3.1",
"react": "^19.0.0",
"react-native": "~0.74.6",
"solid-js": "^1.9.3",
"tarn": "^3.0.2",
@@ -628,7 +628,7 @@
"better-call": "catalog:",
"defu": "^6.1.4",
"jose": "^5.9.6",
"kysely": "^0.27.4",
"kysely": "^0.27.6",
"nanostores": "^0.11.3",
"valibot": "1.0.0-beta.15",
"zod": "^3.24.1"

View File

@@ -7,11 +7,6 @@ type StoreKeys<T> = T extends { setKey: (k: infer K, v: any) => unknown }
? K
: never;
let emit = (snapshotRef: any, onChange: any) => (value: any) => {
snapshotRef.current = value;
onChange();
};
export interface UseStoreOptions<SomeStore> {
/**
* @default
@@ -27,21 +22,52 @@ export interface UseStoreOptions<SomeStore> {
keys?: StoreKeys<SomeStore>[];
}
/**
* Subscribe to store changes and get store's value.
*
* Can be user with store builder too.
*
* ```js
* import { useStore } from 'nanostores/react'
*
* import { router } from '../store/router'
*
* export const Layout = () => {
* let page = useStore(router)
* if (page.route === 'home') {
* return <HomePage />
* } else {
* return <Error404 />
* }
* }
* ```
*
* @param store Store instance.
* @returns Store value.
*/
export function useStore<SomeStore extends Store>(
store: SomeStore,
{ keys, deps = [store, keys] }: UseStoreOptions<SomeStore> = {},
options: UseStoreOptions<SomeStore> = {},
): StoreValue<SomeStore> {
let snapshotRef = useRef<StoreValue<SomeStore>>(store.get());
snapshotRef.current = store.get();
let subscribe = useCallback(
(onChange: any) =>
(keys?.length || 0) > 0
? listenKeys(store as any, keys as any, emit(snapshotRef, onChange))
: store.listen(emit(snapshotRef, onChange)),
deps,
);
let get = () => snapshotRef.current;
const { keys, deps = [store, keys] } = options;
return useSyncExternalStore(subscribe, get, get) as StoreValue<SomeStore>;
let subscribe = useCallback((onChange: () => void) => {
const emitChange = (value: StoreValue<SomeStore>) => {
if (snapshotRef.current === value) return;
snapshotRef.current = value;
onChange();
};
emitChange(store.value);
if (keys?.length) {
return listenKeys(store as any, keys, emitChange);
}
return store.listen(emitChange);
}, deps);
let get = () => snapshotRef.current as StoreValue<SomeStore>;
return useSyncExternalStore(subscribe, get, get);
}

9683
pnpm-lock.yaml generated

File diff suppressed because it is too large Load Diff