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", "dotenv-cli": "^7.4.4",
"eslint-config-next": "15.0.0-canary.149", "eslint-config-next": "15.0.0-canary.149",
"postcss": "^8.4.49", "postcss": "^8.4.49",
"tailwindcss": "^3.4.16", "tailwindcss": "3.4.16",
"typescript": "^5.7.2" "typescript": "^5.7.2"
}, },
"overrides": { "overrides": {

View File

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

View File

@@ -7,11 +7,6 @@ type StoreKeys<T> = T extends { setKey: (k: infer K, v: any) => unknown }
? K ? K
: never; : never;
let emit = (snapshotRef: any, onChange: any) => (value: any) => {
snapshotRef.current = value;
onChange();
};
export interface UseStoreOptions<SomeStore> { export interface UseStoreOptions<SomeStore> {
/** /**
* @default * @default
@@ -27,21 +22,52 @@ export interface UseStoreOptions<SomeStore> {
keys?: StoreKeys<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>( export function useStore<SomeStore extends Store>(
store: SomeStore, store: SomeStore,
{ keys, deps = [store, keys] }: UseStoreOptions<SomeStore> = {}, options: UseStoreOptions<SomeStore> = {},
): StoreValue<SomeStore> { ): StoreValue<SomeStore> {
let snapshotRef = useRef<StoreValue<SomeStore>>(store.get()); let snapshotRef = useRef<StoreValue<SomeStore>>(store.get());
snapshotRef.current = store.get();
let subscribe = useCallback( const { keys, deps = [store, keys] } = options;
(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;
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