reactjrx 1.138.0 → 1.140.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.
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../src/lib/utils/react/useRefOnce.ts","../src/lib/utils/react/useConstant.ts","../src/lib/binding/useLiveBehaviorSubject.ts","../src/lib/utils/arrayEqual.ts","../src/lib/utils/isPromiseLike.ts","../src/lib/utils/isServer.ts","../src/lib/utils/operators/retryBackoff.ts","../src/lib/utils/react/useEffectOnce.ts","../src/lib/utils/react/useUnmount.ts","../src/lib/utils/react/useLiveRef.ts","../src/lib/binding/useObserve/store.ts","../src/lib/binding/useObserve/useObserve.ts","../src/lib/binding/useObserve/useStore.ts","../src/lib/utils/makeObservable.ts","../src/lib/binding/useSubscribe/useSubscribe.ts","../src/lib/queries/QueryClientProvider$.tsx","../src/lib/queries/useMutation$.ts","../src/lib/queries/useConcatMutation$.ts","../src/lib/queries/useSwitchMutation$.ts","../src/lib/state/constants.ts","../src/lib/state/persistence/adapters/createLocalStorageAdapter.ts","../src/lib/state/Signal.ts","../src/lib/state/SignalContext.ts","../src/lib/state/react/SignalContextProvider.tsx","../src/lib/utils/shallowEqual.ts","../src/lib/state/persistence/constants.ts","../src/lib/state/persistence/helpers.ts","../src/lib/state/persistence/persistSignals.ts","../src/lib/state/react/usePersistSignals.tsx","../src/lib/state/react/useSignalReference.ts","../src/lib/state/react/useSetSignal.ts","../src/lib/state/react/useSignalValue.ts","../src/lib/state/persistence/adapters/createLocalforageAdapter.ts","../src/lib/utils/isDefined.ts","../src/lib/utils/react/useDebounced.ts","../src/lib/utils/react/useMemoCompare.ts","../src/lib/utils/react/useMount.ts","../src/lib/binding/useObservableState.ts","../src/lib/queries/useQuery$.ts","../src/lib/state/react/useSignal.ts","../src/lib/state/react/useSignalState.ts","../src/lib/binding/useSubscribeEffect.ts"],"sourcesContent":["import { useRef } from \"react\"\n\nconst UNSET_SYMBOL = Symbol(\"UNSET\")\n\nexport const useRefOnce = <T>(fn: () => T) => {\n const ref = useRef<T | typeof UNSET_SYMBOL>(UNSET_SYMBOL)\n\n if (ref.current === UNSET_SYMBOL) {\n ref.current = fn()\n }\n\n return ref as { current: T }\n}\n","import { useRefOnce } from \"./useRefOnce\"\n\nexport const useConstant = <T>(fn: () => T) => {\n const ref = useRefOnce(fn)\n\n return ref.current\n}\n","import { useEffect } from \"react\"\nimport { BehaviorSubject } from \"rxjs\"\nimport { useConstant } from \"../utils/react/useConstant\"\n\nexport const useLiveBehaviorSubject = <S>(state: S) => {\n const subject = useConstant(() => new BehaviorSubject(state))\n\n useEffect(() => {\n subject.next(state)\n }, [state, subject])\n\n return subject\n}\n","// biome-ignore lint/suspicious/noExplicitAny: TODO\nexport const arrayEqual = <A extends any[], B extends any[]>(a: A, b: B) =>\n a.length === b.length && a.every((v, i) => v === b[i])\n","// biome-ignore lint/suspicious/noExplicitAny: TODO\nexport function isPromiseLike<T>(value: T): value is T & Promise<any> {\n return (\n value instanceof Promise ||\n (value &&\n typeof value === \"object\" &&\n \"then\" in value &&\n typeof value.then === \"function\" &&\n \"catch\" in value &&\n value.catch === \"function\")\n )\n}\n","export const isServer = typeof window === \"undefined\" || \"Deno\" in window\n","import { defer, merge, type Observable, of, throwError, timer } from \"rxjs\"\nimport {\n catchError,\n concatMap,\n first,\n mergeMap,\n retryWhen,\n tap,\n} from \"rxjs/operators\"\n\nexport interface RetryBackoffConfig<T, TError> {\n // Initial interval. It will eventually go as high as maxInterval.\n initialInterval?: number\n // Maximum delay between retries.\n maxInterval?: number\n // When set to `true` every successful emission will reset the delay and the\n // error count.\n resetOnSuccess?: boolean\n retry?: (attempt: number, error: TError) => boolean\n retryAfterDelay?: (attempt: number, error: TError) => boolean\n // Can be used to delay the retry (outside of backoff process)\n // for example if you want to pause retry due to connectivity issue\n // biome-ignore lint/suspicious/noExplicitAny: TODO\n retryAfter?: () => Observable<any>\n retryDelay?: number | ((attempt: number, error: TError) => number)\n // Conditional retry.\n // shouldRetry?: (attempt: number, error: any) => Observable<boolean>\n backoffDelay?: (iteration: number, initialInterval: number) => number\n // biome-ignore lint/suspicious/noExplicitAny: TODO\n caughtError?: (attempt: number, error: any) => undefined | Observable<T>\n // biome-ignore lint/suspicious/noExplicitAny: TODO\n catchError?: (attempt: number, error: any) => Observable<T>\n}\n\n/** Calculates the actual delay which can be limited by maxInterval */\nexport function getDelay(backoffDelay: number, maxInterval: number) {\n return Math.min(backoffDelay, maxInterval)\n}\n\n/** Exponential backoff delay */\nexport function exponentialBackoffDelay(\n iteration: number,\n initialInterval: number,\n) {\n return 2 ** iteration * initialInterval\n}\n\n/**\n * Returns an Observable that mirrors the source Observable with the exception\n * of an error. If the source Observable calls error, rather than propagating\n * the error call this method will resubscribe to the source Observable with\n * exponentially increasing interval and up to a maximum of count\n * re-subscriptions (if provided). Retrying can be cancelled at any point if\n * shouldRetry returns false.\n */\nexport function retryBackoff<T, TError>(config: RetryBackoffConfig<T, TError>) {\n const {\n retry,\n retryDelay,\n retryAfterDelay,\n retryAfter = () => of(true),\n } = config\n\n const maxRetries =\n typeof retry !== \"function\"\n ? retry === false\n ? 0\n : retry === true\n ? Number.POSITIVE_INFINITY\n : (retry ?? Number.POSITIVE_INFINITY)\n : Number.POSITIVE_INFINITY\n\n const shouldRetry =\n typeof retry === \"function\"\n ? // ? (attempt: number, error: TError) => of(retry(attempt, error))\n retry\n : () => true\n\n const initialInterval = typeof retryDelay === \"number\" ? retryDelay : 100\n\n const normalizedConfig = {\n shouldRetry,\n ...config,\n }\n\n const {\n maxInterval = Number.POSITIVE_INFINITY,\n resetOnSuccess = false,\n backoffDelay = exponentialBackoffDelay,\n } = normalizedConfig\n\n return <T>(source: Observable<T>) =>\n defer(() => {\n let caughtErrors = 0\n\n const shouldRetryFn = (attempt: number, error: TError) =>\n attempt < maxRetries ? shouldRetry(attempt, error) : false\n\n return source.pipe(\n catchError<T, Observable<T>>((error) => {\n caughtErrors++\n\n if (!shouldRetryFn(caughtErrors - 1, error)) throw error\n\n const caughtErrorResult$ = config.caughtError?.(caughtErrors, error)\n\n if (!caughtErrorResult$) throw error\n\n return caughtErrorResult$.pipe(\n mergeMap((source) =>\n merge(\n of(source) as unknown as Observable<T>,\n throwError(() => error),\n ),\n ),\n )\n }),\n retryWhen<T>((errors) => {\n return errors.pipe(\n concatMap((error) => {\n const attempt = caughtErrors - 1\n\n return retryAfter().pipe(\n first(),\n mergeMap(() =>\n shouldRetryFn(attempt, error)\n ? timer(\n getDelay(\n backoffDelay(attempt, initialInterval),\n maxInterval,\n ),\n ).pipe(\n mergeMap((timer) => {\n if (\n retryAfterDelay &&\n !retryAfterDelay(attempt, error)\n )\n return throwError(() => error)\n\n return of(timer)\n }),\n )\n : throwError(() => error),\n ),\n )\n }),\n )\n }),\n catchError((e) => {\n if (config.catchError) {\n return config.catchError(caughtErrors, e)\n }\n\n throw e\n }),\n tap(() => {\n if (resetOnSuccess) {\n caughtErrors = 0\n }\n }),\n )\n })\n}\n","import { type EffectCallback, useEffect } from \"react\"\n\nexport const useEffectOnce = (effect: EffectCallback) => {\n // biome-ignore lint/correctness/useExhaustiveDependencies: we want to run the effect only once\n useEffect(effect, [])\n}\n","import { useRef } from \"react\"\nimport { useEffectOnce } from \"./useEffectOnce\"\n\n// biome-ignore lint/suspicious/noExplicitAny: Expected any\nexport const useUnmount = (fn: () => any): void => {\n const fnRef = useRef(fn)\n\n // update the ref each render so if it change the newest callback will be invoked\n fnRef.current = fn\n\n useEffectOnce(() => () => fnRef.current())\n}\n","import { useMemo, useRef } from \"react\"\n\nexport const useLiveRef = <T>(value: T) => {\n const ref = useRef(value)\n\n /**\n * We don't update the value on render because of potential\n * bug related to react concurrency mode.\n * We don't update the value in a useEffect because effects run after\n * render and we could maybe? have situation where the ref\n * is being called after render but before effect?\n * I am not sure of that one.\n *\n * `useMemo` is a good compromise since it runs during render but before\n * repaint. It prevents the concurrency mode issue.\n */\n useMemo(() => {\n ref.current = value\n }, [value])\n\n return ref\n}\n","import {\n BehaviorSubject,\n distinctUntilChanged,\n NEVER,\n type Observable,\n type Subscription,\n share,\n tap,\n} from \"rxjs\"\n\nexport type State<T, DefaultValue, Error = unknown> = {\n data: T | DefaultValue\n status: \"pending\" | \"success\" | \"error\"\n observableState: \"complete\" | \"error\" | \"live\"\n error: Error | undefined\n}\n\nexport interface ObservableStoreOptions<T, DefaultValue> {\n defaultValue: DefaultValue\n compareFn: ((a: T, b: T) => boolean) | undefined\n}\n\nexport class ObservableStore<T, DefaultValue, Error = unknown> {\n state: State<T, DefaultValue, Error>\n source$: Observable<T | undefined>\n sub: Subscription\n\n constructor({\n source$: miscSource$,\n defaultValue,\n compareFn,\n }: {\n source$: Observable<T> | (() => Observable<T> | undefined)\n } & ObservableStoreOptions<T, DefaultValue>) {\n const source$ =\n typeof miscSource$ === \"function\" ? miscSource$() : miscSource$\n\n const hasNoDefinedSource = source$ === undefined\n\n this.state = {\n data: source$ instanceof BehaviorSubject ? source$.value : defaultValue,\n status: hasNoDefinedSource ? \"success\" : \"pending\",\n observableState: hasNoDefinedSource ? \"complete\" : \"live\",\n error: undefined,\n }\n\n this.source$ = (source$ ?? NEVER).pipe(\n distinctUntilChanged(compareFn),\n tap({\n complete: () => {\n this.state = {\n ...this.state,\n status: \"success\",\n observableState: \"complete\",\n }\n },\n error: (error) => {\n this.state = {\n ...this.state,\n observableState: \"error\",\n status: \"error\",\n error,\n }\n },\n next: (data) => {\n this.state = { ...this.state, data }\n },\n }),\n share(),\n )\n\n /**\n * @important This eager subscription will optimistically update the state.\n * Any observable that is non async (behavior, of(x), etc) will have in fact their state completed\n * by the first render cycle.\n * Although we only correctly type sync state for `BehaviorSubject` we can in fact get the value in sync\n * for more than them.\n * Technically the whole pipe chain runs \"synchronously\".\n *\n * This is not a guarantee, just that in best case scenario there will be only one render.\n */\n this.sub = this.source$.subscribe()\n }\n\n subscribe = (next: () => void) => {\n // in some case the observable is already complete by the time we subscribe to it.\n if (this.state.observableState === \"complete\") {\n return () => {}\n }\n\n const sub = this.source$.subscribe({\n complete: next,\n error: next,\n next: next,\n })\n\n return () => {\n sub.unsubscribe()\n }\n }\n\n getSnapshot = () => {\n return this.state\n }\n}\n","import { type DependencyList, useSyncExternalStore } from \"react\"\nimport type { BehaviorSubject, Observable } from \"rxjs\"\nimport type { UseObserveResult } from \"./types\"\nimport { useStore } from \"./useStore\"\n\nexport type { UseObserveOptions, UseObserveResult } from \"./types\"\n\ninterface Option<T, R = undefined> {\n defaultValue: R\n compareFn?: (a: T, b: T) => boolean\n}\n\nexport function useObserve<T>(\n source: BehaviorSubject<T>,\n): UseObserveResult<T, T>\n\nexport function useObserve<T>(\n source: BehaviorSubject<T>,\n options: Omit<Option<T>, \"defaultValue\">,\n): UseObserveResult<T, T>\n\nexport function useObserve<T>(\n source: Observable<T>,\n): UseObserveResult<T, undefined>\n\nexport function useObserve<T>(\n source: () => Observable<T>,\n deps: DependencyList,\n): UseObserveResult<T, undefined>\n\nexport function useObserve<T>(\n source: () => Observable<T> | undefined,\n deps: DependencyList,\n): UseObserveResult<T, undefined>\n\nexport function useObserve<T, DefaultValue>(\n source: Observable<T>,\n options: Option<T, DefaultValue>,\n): UseObserveResult<T, DefaultValue>\n\nexport function useObserve<T, DefaultValue>(\n source: () => Observable<T>,\n options: Option<T, DefaultValue>,\n deps: DependencyList,\n): UseObserveResult<T, DefaultValue>\n\nexport function useObserve<T, DefaultValue = T>(\n source$: Observable<T> | (() => Observable<T> | undefined),\n optionsOrDeps?: Partial<Option<DefaultValue>> | DependencyList,\n maybeDeps?: DependencyList,\n): UseObserveResult<T, DefaultValue | undefined> {\n const options =\n optionsOrDeps != null && !Array.isArray(optionsOrDeps)\n ? (optionsOrDeps as Partial<Option<T, DefaultValue>>)\n : ({\n defaultValue: undefined,\n compareFn: undefined,\n } satisfies Partial<Option<T, DefaultValue>>)\n const deps =\n !maybeDeps && Array.isArray(optionsOrDeps)\n ? optionsOrDeps\n : typeof source$ === \"function\"\n ? (maybeDeps ?? [])\n : [source$]\n\n const store = useStore<T, DefaultValue | undefined>(source$, options, deps)\n\n const result = useSyncExternalStore(\n store.subscribe,\n store.getSnapshot,\n store.getSnapshot,\n )\n\n return result\n}\n","import { type DependencyList, useEffect, useRef } from \"react\"\nimport type { Observable } from \"rxjs\"\nimport { arrayEqual, useLiveRef } from \"../../utils\"\nimport { ObservableStore } from \"./store\"\nimport type { UseObserveOptions } from \"./types\"\n\ntype StoreReference<T, DefaultValue> = {\n deps: DependencyList\n store: ObservableStore<T, DefaultValue | undefined>\n}\n\n/**\n * Mechanism to initialize / retrieve an existing observable store.\n *\n * - We cannot use `useMemo` because it is theoretically not stable. We need stability,\n * not performance optimization.\n * - Using `useState` would make the API not sync (or optimistically return the wrong value).\n * We want the returned value of a render cycle to be derived from the given arguments. `useState`\n * would force us to update the store asynchronously in a useEffect. Losing at least one render cycle.\n * - We are left with using refs to hold the latest references. We use comparison with given deps as well.\n * We are re-creating store during render cycles which is normally not recommended.\n * However this is \"okay\" since it is to be used inside a useSyncExternalStore and not directly in a render.\n */\nexport const useStore = <T, DefaultValue>(\n source$: Observable<T> | (() => Observable<T> | undefined),\n options: UseObserveOptions<T, DefaultValue>,\n deps: DependencyList,\n): ObservableStore<T, DefaultValue | undefined> => {\n const optionsRef = useLiveRef(options)\n const storeRef = useRef<StoreReference<T, DefaultValue> | undefined>(\n undefined,\n )\n\n if (!storeRef.current || !arrayEqual([...deps], [...storeRef.current.deps])) {\n storeRef.current = {\n deps,\n store: new ObservableStore({\n source$,\n defaultValue: optionsRef.current.defaultValue,\n compareFn: (a, b) => optionsRef.current?.compareFn?.(a, b) ?? a === b,\n }),\n }\n }\n\n const store = storeRef.current.store\n\n useEffect(\n () => () => {\n store.sub.unsubscribe()\n },\n [store],\n )\n\n return store\n}\n","import { defer, from, isObservable, type Observable, of } from \"rxjs\"\nimport { isPromiseLike } from \"./isPromiseLike\"\n\ntype FnReturnToObservable<T> =\n T extends Observable<infer ObservedData>\n ? ObservedData\n : T extends Promise<infer ThenData>\n ? ThenData\n : T\n\nexport function makeObservable<Data>(\n fn: Observable<Data>,\n): () => Observable<Data>\n\nexport function makeObservable<Data>(fn: Promise<Data>): () => Observable<Data>\n\nexport function makeObservable<Data>(\n fn: Promise<Data> | Observable<Data>,\n): () => Observable<Data>\n\nexport function makeObservable<Data>(\n fn: () => Promise<Data> | Observable<Data>,\n): () => Observable<Data>\n\n/**\n * Generic factory\n */\nexport function makeObservable<Data>(\n fn: () => Promise<Data> | Observable<Data> | Data,\n): () => Observable<Data>\n\n/**\n * Generic factory\n */\nexport function makeObservable<Data, Params>(\n fn: (params: Params) => Data,\n): (params: Params) => Observable<FnReturnToObservable<Data>>\n\n/**\n * Generic factory OR Observable\n */\nexport function makeObservable<Data, Return>(\n fn: Observable<Data> | (() => Return),\n): () => Observable<Data | FnReturnToObservable<Return>>\n\nexport function makeObservable<Data>(fn: Data): () => Observable<Data>\n\n/**\n * Convert the input into an observable.\n *\n * - Observable: return the same observable\n * - Promise: return an observable from the promise\n * - Data: return an observable from the data\n * - Function: Execute the function and return an observable from the result\n */\nexport function makeObservable<Data, Params>(\n something:\n | ((params: Params) => Observable<Data>)\n | Promise<Data>\n | Observable<Data>\n | ((params: Params) => Promise<Data>)\n | ((params: Params) => Data)\n | Data,\n): (params: Params) => Observable<Data> {\n if (isObservable(something)) return () => something\n\n if (isPromiseLike(something)) return () => from(something)\n\n if (typeof something !== \"function\") return () => of(something)\n\n const somethingAsFunction = something as\n | ((params: Params) => Observable<Data>)\n | ((params: Params) => Promise<Data>)\n | ((params: Params) => Data)\n\n return (params: Params) =>\n defer(() => {\n const result = somethingAsFunction(params)\n\n if (isPromiseLike(result)) {\n return from(result)\n }\n\n if (isObservable(result)) {\n return result\n }\n\n return of(result)\n })\n}\n","import { useEffect } from \"react\"\nimport { makeObservable } from \"../../utils/makeObservable\"\nimport type { SubscribeSource } from \"./types\"\n\nexport function useSubscribe<T>(source: SubscribeSource<T>) {\n useEffect(() => {\n const sub = makeObservable(source)().subscribe()\n\n return () => {\n sub.unsubscribe()\n }\n }, [source])\n}\n","import {\n hashKey,\n type QueryClient,\n type QueryKey,\n useQueryClient,\n} from \"@tanstack/react-query\"\nimport { createContext, memo, useContext, useEffect, useState } from \"react\"\nimport {\n fromEvent,\n type Observable,\n type Subscription,\n share,\n takeUntil,\n} from \"rxjs\"\n\ntype CacheEntry = {\n queryKey: QueryKey\n query$: Observable<unknown>\n signal: AbortSignal\n sub: Subscription | undefined\n isCompleted: boolean\n lastData: { value: unknown } | undefined\n}\n\nexport class QueryClient$ {\n public readonly queryMap: Map<string, CacheEntry> = new Map()\n\n constructor(public readonly queryClient: QueryClient) {}\n\n getQuery(queryHash: string) {\n return this.queryMap.get(queryHash)\n }\n\n setQuery(\n queryKey: QueryKey,\n query$: Observable<unknown>,\n signal: AbortSignal,\n ) {\n const queryHash = hashKey(queryKey)\n\n const sharedQuery$ = query$.pipe(\n takeUntil(fromEvent(signal, \"abort\")),\n share(),\n )\n\n const cacheEntry: CacheEntry = {\n queryKey,\n query$: sharedQuery$,\n signal,\n sub: undefined,\n isCompleted: false,\n lastData: undefined,\n }\n\n this.queryMap.set(queryHash, cacheEntry)\n\n const sub = sharedQuery$.subscribe({\n next: (data) => {\n const entry = this.queryMap.get(queryHash)\n\n if (entry) {\n entry.lastData = { value: data }\n }\n },\n complete: () => {\n if (this.queryMap.get(queryHash) === cacheEntry) {\n this.deleteQuery(queryHash)\n }\n },\n })\n\n cacheEntry.sub = sub\n\n return cacheEntry\n }\n\n deleteQuery(\n queryHash: string,\n { cancelQuery = false }: { cancelQuery?: boolean } = {},\n ) {\n const entry = this.queryMap.get(queryHash)\n\n if (!entry) return\n\n entry.isCompleted = true\n\n this.queryMap.delete(queryHash)\n\n if (entry.sub) {\n entry.sub.unsubscribe()\n entry.sub = undefined\n }\n\n /**\n * Only cancel queries whose stream already emitted at least once.\n * Those are \"live\" streams stuck in the take(1) refetch loop and\n * need an explicit cancel so the pending queryFnAsync promise\n * settles. One-shot observables (used like promises) that haven't\n * resolved yet should keep react-query's default behavior: stay\n * pending and resolve naturally even after unmount.\n *\n * Skipped on natural completion (cancelQuery=false) because the\n * in-flight queryFnAsync promise is about to resolve with the\n * final value — cancelling it would reject it prematurely.\n */\n if (cancelQuery && !entry.signal.aborted && entry.lastData !== undefined) {\n this.queryClient?.cancelQueries({\n queryKey: entry.queryKey,\n exact: true,\n })\n }\n }\n\n destroy() {\n this.queryMap.forEach((_, key) => {\n this.deleteQuery(key, { cancelQuery: true })\n })\n }\n}\n\nexport const Context = createContext<QueryClient$ | undefined>(undefined)\n\n/**\n * Must render **inside** TanStack `QueryClientProvider` (or equivalent).\n * Subscribes to that client's query cache so when a query is removed\n * (including via `queryClient.clear()`), matching `useQuery$` observable\n * entries are dropped.\n */\nexport const QueryClientProvider$ = memo(function QueryClientProvider$({\n children,\n client: _client,\n}: {\n children: React.ReactNode\n client?: QueryClient$\n}) {\n const queryClient = useQueryClient()\n const [client] = useState(() => _client ?? new QueryClient$(queryClient))\n\n useEffect(\n function subscribeToQueryCache() {\n return queryClient.getQueryCache().subscribe((event) => {\n const activeObservers = event.query.getObserversCount()\n\n /**\n * When all observers unmount we need to delete the query from the cache\n * because if the query contains a stream, it will continue. Nothing stops it.\n * However this is only valid when there is no more observers.\n */\n if (event.type === \"observerRemoved\" && activeObservers === 0) {\n client.deleteQuery(event.query.queryHash, { cancelQuery: true })\n }\n })\n },\n [queryClient, client],\n )\n\n useEffect(() => {\n return () => {\n client.destroy()\n }\n }, [client])\n\n return <Context.Provider value={client}>{children}</Context.Provider>\n})\n\nexport const useQueryClient$ = () => {\n const client = useContext(Context)\n\n if (!client) {\n throw new Error(\n \"useReactJrxQueryClient must be used within a ReactJrxQueryProvider\",\n )\n }\n\n return client\n}\n","import {\n type DefaultError,\n type QueryClient,\n type UseMutationOptions,\n type UseMutationResult,\n useMutation,\n} from \"@tanstack/react-query\"\nimport { useEffect } from \"react\"\nimport { BehaviorSubject, type Observable, take } from \"rxjs\"\nimport { useConstant } from \"../utils/react/useConstant\"\n\nexport type UseMutation$Options<\n TData = unknown,\n TError = DefaultError,\n TVariables = void,\n TOnMutateResult = unknown,\n> = Omit<\n UseMutationOptions<TData, TError, TVariables, TOnMutateResult>,\n \"mutationFn\"\n> & {\n mutationFn: ((variables: TVariables) => Observable<TData>) | Observable<TData>\n}\n\nexport function useMutation$<\n TData = unknown,\n TError = DefaultError,\n TVariables = void,\n TOnMutateResult = unknown,\n>(\n options: UseMutation$Options<TData, TError, TVariables, TOnMutateResult>,\n queryClient?: QueryClient,\n) {\n const stateSubject = useConstant(\n () =>\n new BehaviorSubject<\n Pick<\n UseMutationResult<TData, TError, TVariables, TOnMutateResult>,\n \"status\" | \"isPending\" | \"isError\" | \"isSuccess\" | \"isIdle\"\n >\n >({\n status: \"idle\",\n isPending: false,\n isError: false,\n isSuccess: false,\n isIdle: true,\n }),\n )\n\n const result = useMutation<TData, TError, TVariables, TOnMutateResult>(\n {\n ...options,\n mutationFn: (variables: TVariables) => {\n let lastData: { value: TData } | undefined\n\n return new Promise<TData>((resolve, reject) => {\n const source =\n typeof options.mutationFn === \"function\"\n ? options.mutationFn(variables)\n : options.mutationFn\n\n source.pipe(take(1)).subscribe({\n next: (data) => {\n lastData = { value: data }\n },\n error: (error) => {\n reject(error)\n },\n complete: () => {\n if (lastData === undefined)\n return reject(new Error(\"Stream completed without any data\"))\n\n resolve(lastData.value)\n },\n })\n })\n },\n },\n queryClient,\n )\n\n const { status, isPending, isError, isSuccess, isIdle } = result\n\n useEffect(() => {\n stateSubject.next({\n status,\n isPending,\n isError,\n isSuccess,\n isIdle,\n })\n }, [status, isPending, isError, isSuccess, isIdle, stateSubject])\n\n return { ...result, state$: stateSubject }\n}\n","import {\n type DefaultError,\n type MutationKey,\n type QueryClient,\n useQueryClient,\n} from \"@tanstack/react-query\"\nimport { useCallback } from \"react\"\nimport {\n BehaviorSubject,\n filter,\n first,\n noop,\n type Subject,\n switchMap,\n} from \"rxjs\"\nimport { type UseMutation$Options, useMutation$ } from \"./useMutation$\"\n\nexport function useContactMutation$<\n TData = unknown,\n TError = DefaultError,\n TVariables = void,\n TContext = unknown,\n>(\n {\n onMutate,\n ...options\n }: UseMutation$Options<TData | null, TError, TVariables, TContext> & {\n mutationKey: MutationKey\n },\n queryClient?: QueryClient,\n) {\n const client = useQueryClient(queryClient)\n type TDataOrNull = TData | null\n const mutationKey = options.mutationKey\n\n const { mutateAsync, ...rest } = useMutation$<\n TDataOrNull,\n TError,\n { variables: TVariables; ready$: Subject<boolean> },\n TContext\n >(\n {\n ...options,\n onMutate: onMutate\n ? ({ variables }, ...rest) => onMutate(variables, ...rest)\n : undefined,\n onSuccess(data, { variables }, ...rest) {\n return options.onSuccess?.(data, variables, ...rest)\n },\n onError(error, { variables }, ...rest) {\n return options.onError?.(error, variables, ...rest)\n },\n onSettled(data, error, { variables }, ...rest) {\n return options.onSettled?.(data, error, variables, ...rest)\n },\n mutationFn: ({ ready$, variables }) => {\n const source =\n typeof options.mutationFn === \"function\"\n ? options.mutationFn(variables)\n : options.mutationFn\n\n return ready$.pipe(\n filter((isReady) => isReady),\n first(),\n switchMap(() => source),\n )\n },\n },\n queryClient,\n )\n\n const mutateAsyncConcat = useCallback(\n async (variables: TVariables) => {\n const mutations = client.getMutationCache().findAll({\n mutationKey,\n exact: true,\n })\n\n const subject = new BehaviorSubject(false)\n\n const result = mutateAsync({ variables, ready$: subject })\n\n await Promise.all(\n mutations.map((mutation) => mutation.continue().catch(noop)),\n )\n\n subject.next(true)\n\n return await result.finally(() => {\n subject.complete()\n })\n },\n [mutateAsync, client, mutationKey],\n )\n\n const mutateConcat = useCallback(\n (variables: TVariables) => {\n mutateAsyncConcat(variables).catch(noop)\n },\n [mutateAsyncConcat],\n )\n\n return { ...rest, mutate: mutateConcat, mutateAsync: mutateAsyncConcat }\n}\n","import type { DefaultError, QueryClient } from \"@tanstack/react-query\"\nimport { useCallback } from \"react\"\nimport {\n defaultIfEmpty,\n first,\n fromEvent,\n ignoreElements,\n merge,\n tap,\n} from \"rxjs\"\nimport { useRefOnce } from \"../utils\"\nimport { type UseMutation$Options, useMutation$ } from \"./useMutation$\"\n\nexport class SwitchMutationCancelError extends Error {\n constructor(message = \"Mutation canceled\") {\n super(message)\n this.name = \"SwitchMutationCancelError\"\n }\n}\n\nexport function useSwitchMutation$<\n TData = unknown,\n TError = DefaultError,\n TVariables = void,\n TOnMutateResult = unknown,\n>(\n {\n mutationFn,\n onMutate,\n onError,\n onSettled,\n ...options\n }: UseMutation$Options<TData | null, TError, TVariables, TOnMutateResult>,\n queryClient?: QueryClient,\n) {\n const previousMutationCancelRef = useRefOnce(() => new AbortController())\n type TDataOrNull = TData | null\n\n const { mutate, mutateAsync, ...rest } = useMutation$<\n TDataOrNull,\n TError,\n { variables: TVariables; abort: AbortSignal },\n TOnMutateResult\n >(\n {\n ...options,\n mutationFn: useCallback(\n ({\n variables,\n abort,\n }: {\n variables: TVariables\n abort: AbortSignal\n }) => {\n if (abort.aborted) {\n throw new SwitchMutationCancelError()\n }\n\n const source =\n typeof mutationFn === \"function\"\n ? mutationFn(variables)\n : mutationFn\n\n return merge(\n source,\n fromEvent(abort, \"abort\").pipe(\n tap(() => {\n throw new SwitchMutationCancelError()\n }),\n ignoreElements(),\n ),\n ).pipe(first(), defaultIfEmpty(null))\n },\n [mutationFn],\n ),\n onMutate: onMutate\n ? ({ variables }, ...rest) => {\n return onMutate(variables, ...rest)\n }\n : undefined,\n onSuccess: (data, { variables }, ...rest) => {\n return options.onSuccess?.(data, variables, ...rest)\n },\n onError: (error, { variables }, ...rest) => {\n return onError?.(error, variables, ...rest)\n },\n onSettled: (data, error, { variables }, ...rest) => {\n return onSettled?.(data, error, variables, ...rest)\n },\n },\n queryClient,\n )\n\n const mutateSwitch = useCallback(\n (variables: TVariables) => {\n previousMutationCancelRef.current.abort()\n previousMutationCancelRef.current = new AbortController()\n\n return mutate({\n variables,\n abort: previousMutationCancelRef.current.signal,\n })\n },\n [mutate, previousMutationCancelRef],\n )\n\n const mutateAsyncSwitch = useCallback(\n (variables: TVariables) => {\n previousMutationCancelRef.current.abort()\n previousMutationCancelRef.current = new AbortController()\n\n return mutateAsync({\n variables,\n abort: previousMutationCancelRef.current.signal,\n })\n },\n [mutateAsync, previousMutationCancelRef],\n )\n\n return { ...rest, mutate: mutateSwitch, mutateAsync: mutateAsyncSwitch }\n}\n","export const SIGNAL_RESET = Symbol(\"SIGNAL_RESET\")\n","import type { Adapter } from \"./Adapter\"\n\nconst normalizeStore = (store: unknown) => {\n if (!store || typeof store !== \"object\") {\n return undefined\n }\n\n return store\n}\n\n/**\n * Create an adapter which use one unique store entry to store all\n * state. When using many signals it can help with maintenance to keep things\n * tidy.\n */\nconst createSharedStoreAdapter = ({\n adapter,\n key,\n}: {\n adapter: Adapter\n key: string\n}): Adapter => ({\n clear: async () => {\n return await adapter.removeItem(key)\n },\n\n removeItem: async (keyToDelete) => {\n const unsafeStore = await adapter.getItem(key)\n const { [keyToDelete]: toRemove, ...rest } =\n // biome-ignore lint/suspicious/noExplicitAny: TODO\n normalizeStore(unsafeStore) ?? ({} as any)\n\n await adapter.setItem(key, rest)\n },\n\n getItem: async (itemKey: string) => {\n const unsafeStore = await adapter.getItem(key)\n const store = normalizeStore(unsafeStore) ?? {}\n\n if (itemKey in store) {\n return store[itemKey as keyof typeof store]\n }\n\n return undefined\n },\n\n setItem: async (itemKey: string, value: unknown) => {\n const unsafeStore = await adapter.getItem(key)\n const store = normalizeStore(unsafeStore) ?? {}\n\n await adapter.setItem(key, { ...store, [itemKey]: value })\n },\n})\n\nexport const createLocalStorageAdapter = ({\n key,\n}: {\n key?: string\n} = {}): Adapter => {\n if (key) {\n return createSharedStoreAdapter({\n adapter: createLocalStorageAdapter(),\n key,\n })\n }\n\n return {\n clear: async () => {\n localStorage.clear()\n },\n\n removeItem: async (key) => {\n localStorage.removeItem(key)\n },\n\n getItem: async (key) => {\n const serializedValue = localStorage.getItem(key)\n\n if (!serializedValue) return undefined\n\n return JSON.parse(serializedValue)\n },\n\n setItem: async (key, value) => {\n localStorage.setItem(key, JSON.stringify(value))\n },\n }\n}\n","import { BehaviorSubject } from \"rxjs\"\nimport { SIGNAL_RESET } from \"./constants\"\n\n/**\n * Distributive helper to validate the shape of the updater function\n * and prevent covariance. Distributes over both T and U so union state\n * types work (updater can return any member of the union).\n */\n// biome-ignore lint/suspicious/noExplicitAny: distributive conditional over U and T for union support\ntype ValidateShape<T, U> = U extends any\n ? // biome-ignore lint/suspicious/noExplicitAny: distributive over T\n T extends any\n ? U extends T\n ? U extends object\n ? { [K in keyof U]: K extends keyof T ? T[K] : never }\n : U\n : never\n : never\n : never\n\n// biome-ignore lint/suspicious/noExplicitAny: TODO\nexport type SignalValue<T extends Signal<any, any>> = T[\"value\"]\n\nexport type SignalWithKey<T> = Signal<T> & {\n key: string\n}\n\nexport class Signal<\n T,\n K extends string | undefined = undefined,\n> extends BehaviorSubject<T> {\n constructor(\n public config: {\n default: T\n key: K\n },\n ) {\n super(config.default)\n }\n\n update = <U>(\n valueOrUpdater:\n | ((prev: T) => U & ValidateShape<T, U>)\n // biome-ignore lint/complexity/noBannedTypes: TODO\n | (T extends Function ? never : T)\n | typeof SIGNAL_RESET,\n ): void => {\n if (valueOrUpdater === SIGNAL_RESET) {\n super.next(this.config.default)\n } else if (typeof valueOrUpdater === \"function\") {\n const updater = valueOrUpdater as (prev: T) => T\n\n super.next(updater(this.value))\n } else {\n super.next(valueOrUpdater as T)\n }\n }\n\n /**\n * @deprecated Use `next` instead\n */\n setValue = this.update.bind(this)\n\n /**\n * @deprecated Use `this` instead\n */\n get subject() {\n return this\n }\n\n get key() {\n return this.config.key\n }\n}\n\nexport class VirtualSignal<T> {\n constructor(public config: { default: T }) {}\n}\n// biome-ignore lint/complexity/noBannedTypes: TODO\nexport function signal(config: {}): Signal<undefined, undefined>\n\nexport function signal<T = undefined, K extends string = string>(config: {\n key: K\n}): Signal<T | undefined, K>\n\nexport function signal<T, K extends string = string>(config: {\n key: K\n default: T\n}): Signal<T, K>\n\nexport function signal<T>(config: {\n key?: undefined\n}): Signal<T | undefined, undefined>\n\nexport function signal<T>(config: {\n key?: undefined\n default: T\n}): Signal<T, undefined>\n\nexport function signal<K extends string>(config: {\n key: K\n default?: undefined\n}): Signal<undefined, K>\n\nexport function signal<T, K extends string | undefined = undefined>(\n config: { default?: T; key?: K } = {},\n) {\n return new Signal({\n key: undefined,\n ...config,\n default: config.default ?? undefined,\n })\n}\n\nexport function virtualSignal<T>(config: {\n default: T\n key?: string\n}): VirtualSignal<T> {\n return new VirtualSignal(config)\n}\n","import { BehaviorSubject } from \"rxjs\"\nimport { Signal, type VirtualSignal } from \"./Signal\"\n\nexport class SignalContext {\n /**\n * items only get added as they are created. The only time we should cleanup\n * are on context destroy. This is to ensure later re-use of virtual signals\n * return the same persisted state.\n */\n // biome-ignore lint/suspicious/noExplicitAny: TODO\n signals = new BehaviorSubject(new Map<VirtualSignal<unknown>, Signal<any>>())\n\n public isDestroyed = false\n\n getOrCreateSignal<T>(virtualSignal: VirtualSignal<T>): Signal<T> {\n const existingSignal = this.signals.value.get(virtualSignal)\n\n if (existingSignal) {\n return existingSignal as Signal<T>\n }\n\n const newSignal = new Signal<T>({ ...virtualSignal.config, key: undefined })\n\n this.signals.value.set(virtualSignal, newSignal)\n this.signals.next(this.signals.value)\n\n return newSignal\n }\n\n destroy() {\n this.signals.value.forEach((signal) => {\n signal.complete()\n })\n this.signals.value.clear()\n this.signals.complete()\n this.isDestroyed = true\n }\n}\n","import { createContext, memo, useContext, useEffect, useState } from \"react\"\nimport { useRefOnce } from \"../../utils/react/useRefOnce\"\nimport type { VirtualSignal } from \"../Signal\"\nimport { SignalContext } from \"../SignalContext\"\n\nexport type SignalContextType = SignalContext\n\nexport const SignalReactContext = createContext<SignalContextType>(\n new SignalContext(),\n)\n\nexport const SignalContextProvider = memo(\n ({ children }: { children: React.ReactNode }) => {\n const signalContextRef = useRefOnce<SignalContextType>(\n () => new SignalContext(),\n )\n const signalContext = signalContextRef.current\n const [isDestroyed, setIsDestroyed] = useState(false)\n\n if (isDestroyed) {\n signalContextRef.current = new SignalContext()\n setIsDestroyed(false)\n }\n\n const value = signalContext\n\n useEffect(() => {\n return () => {\n signalContextRef.current?.destroy()\n // force re-render\n setIsDestroyed(true)\n }\n }, [signalContextRef])\n\n return (\n <SignalReactContext.Provider value={value}>\n {children}\n </SignalReactContext.Provider>\n )\n },\n)\n\nexport const useSignalContext = () => {\n const value = useContext(SignalReactContext)\n\n return value\n}\n\nexport const useMakeOrRetrieveSignal = (\n virtualSignal?: VirtualSignal<unknown>,\n) => {\n const signalContext = useSignalContext()\n\n const signal = virtualSignal\n ? signalContext.getOrCreateSignal(virtualSignal)\n : undefined\n\n return signal\n}\n","export function isShallowEqual<A, B>(objA: A, objB: B): boolean {\n // Check if both objects are null or undefined\n if (objA === null || objA === undefined || objB === undefined) {\n // biome-ignore lint/suspicious/noExplicitAny: TODO\n return (objA as any) === (objB as any)\n }\n\n // Check if both objects are primitives\n if (typeof objA !== \"object\" || typeof objB !== \"object\") {\n // biome-ignore lint/suspicious/noExplicitAny: TODO\n return (objA as any) === (objB as any)\n }\n\n // Check if both objects have the same prototype\n if (objA.constructor !== objB?.constructor) {\n return false\n }\n\n // Check if both objects have the same keys\n const keysA = Object.keys(objA) as Array<keyof A>\n const keysB = Object.keys(objB) as Array<keyof A>\n\n if (keysA.length !== keysB.length) {\n return false\n }\n\n // Check if the values of the keys are equal\n for (const key of keysA) {\n // biome-ignore lint/suspicious/noPrototypeBuiltins: TODO\n // biome-ignore lint/suspicious/noExplicitAny: TODO\n if (!objB.hasOwnProperty(key) || objA[key] !== (objB as any)[key]) {\n return false\n }\n }\n\n // If all checks pass, the objects are considered shallowly equal\n return true\n}\n","export const IDENTIFIER_PERSISTENCE_KEY = \"__reactjrx\"\n","import { catchError, from, of, switchMap } from \"rxjs\"\nimport type { Adapter } from \"./adapters/Adapter\"\nimport { IDENTIFIER_PERSISTENCE_KEY } from \"./constants\"\nimport type { PersistenceEntry, SignalPersistenceConfig } from \"./types\"\n\nexport const getNormalizedPersistanceValue = (unknownValue: unknown) => {\n if (\n typeof unknownValue === \"object\" &&\n unknownValue !== null &&\n IDENTIFIER_PERSISTENCE_KEY in unknownValue &&\n unknownValue[IDENTIFIER_PERSISTENCE_KEY] === IDENTIFIER_PERSISTENCE_KEY\n ) {\n return unknownValue as PersistenceEntry\n }\n\n return undefined\n}\n\nexport const persistValue = ({\n adapter,\n config,\n}: {\n adapter: Adapter\n // biome-ignore lint/suspicious/noExplicitAny: TODO\n config: SignalPersistenceConfig<any>\n}) => {\n const { signal, version } = config\n const state = signal.getValue()\n\n const value = {\n value: state,\n [IDENTIFIER_PERSISTENCE_KEY]: IDENTIFIER_PERSISTENCE_KEY,\n migrationVersion: version,\n } satisfies PersistenceEntry\n\n if (process.env.NODE_ENV === \"development\") {\n console.log(\n \"[reactjrx][state][persistance]:\",\n \"Persist value\",\n value,\n `for signal ${signal.config.key}`,\n )\n }\n\n return from(adapter.setItem(signal.config.key, value)).pipe(\n catchError((e) => {\n console.error(e)\n\n return of(null)\n }),\n )\n}\n\nexport function hydrateValueToSignal({\n adapter,\n config,\n}: {\n adapter: Adapter\n // biome-ignore lint/suspicious/noExplicitAny: TODO\n config: SignalPersistenceConfig<any>\n}) {\n const { hydrate = ({ value }) => value, signal, version } = config\n\n return from(adapter.getItem(signal.config.key)).pipe(\n switchMap((value) => {\n const normalizedValue = getNormalizedPersistanceValue(value)\n\n if (!normalizedValue) return of(value)\n\n const storedVersionIsInvalid =\n typeof normalizedValue.migrationVersion !== \"number\"\n\n const signalVersionIsSuperior =\n normalizedValue.migrationVersion !== undefined &&\n version > normalizedValue.migrationVersion\n\n if (\n storedVersionIsInvalid ||\n signalVersionIsSuperior ||\n normalizedValue.value === undefined\n ) {\n return of(value)\n }\n\n const correctVersionValue = normalizedValue.value\n\n if (process.env.NODE_ENV === \"development\") {\n console.log(\n \"[reactjrx][state][persistance]:\",\n \"Hydrate value\",\n normalizedValue,\n `for signal ${signal.config.key}`,\n )\n }\n\n signal.setValue(hydrate({ value: correctVersionValue, version }))\n\n return of(value)\n }),\n )\n}\n","import {\n asyncScheduler,\n catchError,\n EMPTY,\n from,\n map,\n merge,\n of,\n share,\n switchMap,\n tap,\n throttleTime,\n zip,\n} from \"rxjs\"\nimport type { Signal } from \"../Signal\"\nimport type { Adapter } from \"./adapters/Adapter\"\nimport { hydrateValueToSignal, persistValue } from \"./helpers\"\nimport type { SignalPersistenceConfig } from \"./types\"\n\nexport function persistSignals({\n entries = [],\n onHydrated,\n adapter,\n}: {\n // biome-ignore lint/suspicious/noExplicitAny: TODO\n entries: Array<SignalPersistenceConfig<Signal<any, string>>>\n /**\n * Triggered after first successful hydrate\n */\n onHydrated?: () => void\n /**\n * Requires a stable instance otherwise the hydration\n * process will start again. This is useful when you\n * need to change adapter during runtime.\n */\n adapter: Adapter\n}) {\n const signalsHydrated$ =\n entries.length === 0\n ? of([])\n : zip(\n ...entries.map((config) =>\n hydrateValueToSignal({\n adapter,\n config,\n }),\n ),\n )\n\n const isHydrated$ = signalsHydrated$.pipe(\n tap(onHydrated),\n catchError((error) => {\n console.error(\"Unable to hydrate\", error)\n\n return EMPTY\n }),\n share(),\n )\n\n /**\n * Start persisting to the current adapter\n * as soon as signals are hydrated. Will stop\n * whenever hydration process starts again\n */\n const persisted$ = isHydrated$.pipe(\n switchMap(() =>\n merge(\n ...entries.map((config) =>\n config.signal.pipe(\n throttleTime(500, asyncScheduler, {\n trailing: true,\n }),\n switchMap(() =>\n from(\n persistValue({\n adapter,\n config,\n }),\n ),\n ),\n ),\n ),\n ),\n ),\n )\n\n return merge(\n isHydrated$.pipe(\n map(() => ({\n type: \"hydrated\" as const,\n })),\n ),\n persisted$.pipe(\n map(() => ({\n type: \"persisted\" as const,\n })),\n ),\n )\n}\n","import { concatMap, merge, of, scan, switchMap } from \"rxjs\"\nimport { useLiveBehaviorSubject } from \"../../binding/useLiveBehaviorSubject\"\nimport { useObserve } from \"../../binding/useObserve/useObserve\"\nimport { useLiveRef } from \"../../utils/react/useLiveRef\"\nimport { isShallowEqual } from \"../../utils/shallowEqual\"\nimport type { Adapter } from \"../persistence/adapters/Adapter\"\nimport { persistSignals } from \"../persistence/persistSignals\"\nimport type { SignalPersistenceConfig } from \"../persistence/types\"\n\n/**\n * Make sure to pass stable reference of entries and adapter if you don't\n * intentionally want to start over the process.\n *\n * `isHydrated` will be `true` after the first successful hydration. This value\n * will be reset as soon as the adapter reference changes.\n */\nexport function usePersistSignals({\n entries = [],\n onHydrated,\n adapter,\n}: {\n /**\n * Passing a new list of entries will start over the process\n * once the current one is finished. Use a stable reference to avoid\n * infinite loop.\n */\n\n // biome-ignore lint/suspicious/noExplicitAny: TODO\n entries?: Array<SignalPersistenceConfig<any>>\n /**\n * Triggered after first successful hydrate\n */\n onHydrated?: () => void\n /**\n * Passing a new adapter reference will start over the process\n * once the current one is finished. Use a stable reference to avoid\n * infinite loop.\n */\n adapter?: Adapter\n}): { isHydrated: boolean } {\n const onHydratedRef = useLiveRef(onHydrated)\n const adapterSubject = useLiveBehaviorSubject(adapter)\n const entriesSubject = useLiveBehaviorSubject(entries)\n\n const result = useObserve(\n () => {\n const persistence$ = adapterSubject.pipe(\n switchMap((adapter) => {\n if (!adapter) return of({ type: \"reset\" })\n\n return merge(\n of({ type: \"reset\" }),\n entriesSubject.pipe(\n concatMap((entries) =>\n persistSignals({\n adapter,\n entries,\n onHydrated: () => {\n onHydratedRef.current?.()\n },\n }),\n ),\n ),\n )\n }),\n )\n\n return persistence$.pipe(\n scan(\n (acc, event) => {\n if (event.type === \"reset\") return { isHydrated: false }\n if (event.type === \"hydrated\") return { isHydrated: true }\n\n return acc\n },\n { isHydrated: false as boolean },\n ),\n )\n },\n { defaultValue: { isHydrated: false }, compareFn: isShallowEqual },\n [adapterSubject, entriesSubject],\n )\n\n return result.data\n}\n","import { type Signal, VirtualSignal } from \"../Signal\"\nimport {\n useMakeOrRetrieveSignal,\n useSignalContext,\n} from \"./SignalContextProvider\"\n\nexport function useSignalReference<T>(\n signal: Signal<T> | VirtualSignal<T>,\n): Signal<T> {\n const signalContext = useSignalContext()\n\n if (signal instanceof VirtualSignal && !signalContext) {\n throw new Error(\n \"useSignalValue must be used within a SignalContextProvider\",\n )\n }\n\n return (useMakeOrRetrieveSignal(\n signal instanceof VirtualSignal ? signal : undefined,\n ) ?? signal) as Signal<T>\n}\n","import type { Signal, VirtualSignal } from \"../Signal\"\nimport { useSignalReference } from \"./useSignalReference\"\n\nexport function useSetSignal<T>(signal: Signal<T>): Signal<T>[\"update\"]\nexport function useSetSignal<T>(signal: VirtualSignal<T>): Signal<T>[\"update\"]\nexport function useSetSignal<T>(signal: Signal<T> | VirtualSignal<T>) {\n const finalSignal = useSignalReference(signal)\n\n return finalSignal.update\n}\n","import { useCallback, useRef, useSyncExternalStore } from \"react\"\nimport { skip } from \"rxjs\"\nimport type { Signal, VirtualSignal } from \"../Signal\"\nimport { useSignalReference } from \"./useSignalReference\"\n\nexport type EqualityFn<T> = (a: T, b: T) => boolean\n\nconst defaultEqualityFn: EqualityFn<unknown> = Object.is\n\n/**\n * Subscribe to a signal's current value, with optional projection and equality.\n *\n * - On every render the returned value is `selector(signal.value)` (or\n * `signal.value` when no selector is provided), recomputed only when the\n * signal value, the selector identity, or the signal itself has changed.\n * - The component re-renders whenever the signal emits a value that the\n * `equalityFn` considers different from the previous one.\n * - The hook caches its last result. When the new selector output is\n * considered equal to the previous one (per `equalityFn`), the previous\n * reference is returned, so downstream `useEffect`/`useMemo` dependencies\n * stay stable.\n *\n * @param signal The signal (or `VirtualSignal` resolved through context) to read.\n * @param selector Optional projection of the signal value.\n * @param equalityFn Optional equality function. Defaults to `Object.is`.\n * Pass `isShallowEqual` (or any custom comparator) to opt into reference\n * stability for derived objects.\n */\nexport function useSignalValue<T>(signal: VirtualSignal<T>): T\n\nexport function useSignalValue<T, SelectValue>(\n signal: VirtualSignal<T>,\n selector: (value: T) => SelectValue,\n equalityFn?: EqualityFn<SelectValue>,\n): SelectValue\n\nexport function useSignalValue<T>(signal: Signal<T>): T\n\nexport function useSignalValue<T, SelectValue>(\n signal: Signal<T>,\n selector: (value: T) => SelectValue,\n equalityFn?: EqualityFn<SelectValue>,\n): SelectValue\n\nexport function useSignalValue(\n signal: Signal<unknown> | VirtualSignal<unknown>,\n selector?: (value: unknown) => unknown,\n equalityFn: EqualityFn<unknown> = defaultEqualityFn,\n) {\n const finalSignal = useSignalReference(signal)\n const cacheRef = useRef<{\n hasValue: boolean\n signal: Signal<unknown> | undefined\n selector: ((value: unknown) => unknown) | undefined\n sourceValue: unknown\n value: unknown\n }>({\n hasValue: false,\n signal: undefined,\n selector: undefined,\n sourceValue: undefined,\n value: undefined,\n })\n\n const subscribe = useCallback(\n (onChange: () => void) => {\n /**\n * `Signal` is a `BehaviorSubject` and synchronously emits its current\n * value to new subscribers. `useSyncExternalStore`'s subscribe contract,\n * however, expects `onChange` to fire only on *changes* — the initial\n * value is read separately via `getSnapshot`. Skipping the first\n * emission keeps the contract clean and avoids a redundant\n * post-subscribe snapshot read by React.\n */\n const sub = finalSignal.pipe(skip(1)).subscribe(() => {\n onChange()\n })\n\n return () => {\n sub.unsubscribe()\n }\n },\n [finalSignal],\n )\n\n const getSnapshot = () => {\n const cached = cacheRef.current\n const sourceValue = finalSignal.value\n\n /**\n * Fast path: nothing relevant changed since last call, so we can skip\n * running the selector entirely and return the previously computed value.\n */\n if (\n cached.hasValue &&\n cached.signal === finalSignal &&\n cached.selector === selector &&\n cached.sourceValue === sourceValue\n ) {\n return cached.value\n }\n\n const next = selector ? selector(sourceValue) : sourceValue\n\n /**\n * Reference-stability path: selector ran (because something changed) but\n * its output is considered equal (per `equalityFn`) to the previous one,\n * so we keep the previous reference to avoid spurious re-renders\n * downstream. With the default `Object.is` this rarely kicks in; when the\n * caller opts into a structural comparator (e.g. `isShallowEqual`) this\n * provides referential stability for derived objects.\n */\n if (\n cached.hasValue &&\n cached.signal === finalSignal &&\n equalityFn(cached.value, next)\n ) {\n cacheRef.current = {\n hasValue: true,\n signal: finalSignal,\n selector,\n sourceValue,\n value: cached.value,\n }\n\n return cached.value\n }\n\n cacheRef.current = {\n hasValue: true,\n signal: finalSignal,\n selector,\n sourceValue,\n value: next,\n }\n\n return next\n }\n\n return useSyncExternalStore(subscribe, getSnapshot, getSnapshot)\n}\n","import type { Adapter } from \"./Adapter\"\n\nexport const createLocalforageAdapter = (forage: {\n getItem: (key: string) => Promise<string | null>\n setItem: (key: string, value: string) => Promise<string>\n}): Adapter => ({\n getItem: async (key: string) => {\n const serializedValue = await forage.getItem(key)\n\n if (!serializedValue) return undefined\n\n return JSON.parse(serializedValue)\n },\n\n setItem: async (key: string, value: unknown) => {\n await forage.setItem(key, JSON.stringify(value))\n },\n\n removeItem: async (_: string) => {},\n\n clear: async () => {},\n})\n","export function isDefined<T>(\n arg: T | null | undefined,\n): arg is T extends null | undefined ? never : T {\n return arg !== null && arg !== undefined\n}\n","import { useCallback, useRef } from \"react\"\nimport { useUnmount } from \"./useUnmount\"\n\n/**\n * @param func Function to be debounced\n * @param wait time in ms to debounce function, default to 300\n * @returns the debounced callback function\n */\nexport const useDebounced = <T>(\n func: ((arg: T) => void) | (() => void),\n wait: number,\n options: {\n cancelOnUnmount?: boolean\n } = {},\n) => {\n const { cancelOnUnmount = false } = options\n const timeout = useRef<ReturnType<typeof setTimeout> | null>(null)\n\n const callback = useCallback(\n (arg: T) => {\n timeout.current !== null && clearTimeout(timeout.current)\n timeout.current = setTimeout(() => func(arg), wait)\n },\n [func, wait],\n )\n\n useUnmount(() => {\n if (cancelOnUnmount) {\n timeout.current && clearTimeout(timeout.current)\n }\n })\n\n return callback\n}\n","import { useMemo, useRef } from \"react\"\n\nexport const useMemoCompare = <T>(\n value: T,\n compare: (a: T, b: T) => boolean,\n) => {\n const lastValue = useRef<{ value: T }>({ value })\n\n return useMemo(() => {\n if (compare(value, lastValue.current.value)) {\n return lastValue.current.value\n }\n\n lastValue.current = { value }\n\n return value\n }, [value, compare])\n}\n","import { useEffectOnce } from \"./useEffectOnce\"\n\nexport const useMount = (fn: () => void) => {\n useEffectOnce(() => {\n fn()\n })\n}\n","import { type Dispatch, type SetStateAction, useCallback } from \"react\"\nimport { BehaviorSubject } from \"rxjs\"\nimport { useConstant } from \"../utils/react/useConstant\"\n\nexport const useObservableState = <T>(\n defaultValue: T,\n): [T, Dispatch<SetStateAction<T>>, BehaviorSubject<T>] => {\n const subject = useConstant(() => new BehaviorSubject(defaultValue))\n\n const setState = useCallback(\n (valueOrUpdater: SetStateAction<T>) => {\n const getNewValue = (valueOrUpdater: SetStateAction<T>) => {\n if (typeof valueOrUpdater === \"function\") {\n const updaterFn = valueOrUpdater as (prev: T) => T\n return updaterFn(subject.getValue())\n }\n\n return valueOrUpdater\n }\n\n const newValue = getNewValue(valueOrUpdater)\n\n if (newValue === subject.getValue()) {\n return\n }\n\n subject.next(newValue)\n },\n [subject],\n )\n\n const value = subject.getValue()\n\n return [value, setState, subject]\n}\n","import {\n CancelledError,\n type DefaultError,\n hashKey,\n type QueryClient,\n type QueryFunctionContext,\n type QueryKey,\n skipToken,\n type UseQueryOptions,\n useQuery,\n useQueryClient,\n} from \"@tanstack/react-query\"\nimport { defer, delay, type Observable, take } from \"rxjs\"\nimport { useQueryClient$ } from \"./QueryClientProvider$\"\n\nexport function useQuery$<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n>(\n {\n queryFn,\n ...options\n }: Omit<\n UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n \"queryFn\"\n > & {\n queryFn:\n | ((context: QueryFunctionContext<TQueryKey>) => Observable<TQueryFnData>)\n | typeof skipToken\n | Observable<TQueryFnData>\n },\n queryClient?: QueryClient,\n) {\n const _queryClient = useQueryClient(queryClient)\n const queryClient$ = useQueryClient$()\n\n const queryFnAsync = (context: QueryFunctionContext<TQueryKey>) => {\n if (queryFn === skipToken) {\n throw new Error(\"useQuery$: queryFnAsync called with skipToken\")\n }\n\n return new Promise<TQueryFnData>((resolve, reject) => {\n const getSource = () =>\n defer(() =>\n typeof queryFn === \"function\" ? queryFn(context) : queryFn,\n )\n\n const queryHash = hashKey(context.queryKey)\n\n const queryAlreadyInCache = queryClient$.getQuery(queryHash)\n\n const queryCacheEntry =\n queryAlreadyInCache ??\n queryClient$.setQuery(context.queryKey, getSource(), context.signal)\n\n const refetchIfNeeded = () => {\n if (queryCacheEntry?.isCompleted === false) {\n setTimeout(() => {\n /**\n * Re-check at firing time: the entry may have been torn down\n * (deleteQuery) between scheduling and execution. This happens\n * when the component unmounts right after a synchronous resolve,\n * because both refetchIfNeeded and the deferred deleteQuery use\n * setTimeout(fn, 0) and their execution order is\n * non-deterministic. Without this guard the stale callback\n * would trigger queryFnAsync on a defunct entry, creating an\n * orphaned take(1) subscriber that later resolves with\n * accumulated old data.\n */\n if (queryCacheEntry?.isCompleted) return\n\n _queryClient?.refetchQueries({\n queryKey: context.queryKey,\n exact: true,\n })\n })\n }\n }\n\n // if the observable returns results synchronously\n if (!queryAlreadyInCache && queryCacheEntry.lastData !== undefined) {\n resolve(queryCacheEntry.lastData.value as TQueryFnData)\n\n refetchIfNeeded()\n\n return\n }\n\n const query$ = queryCacheEntry.query$\n\n query$\n .pipe(\n take(1),\n /**\n * If several values are emitted during this delay, we will only\n * keep the last value. This is unfortunate but it's the best we can do\n * for now.\n */\n delay(1),\n )\n .subscribe({\n error: (error) => {\n return reject(error)\n },\n complete: () => {\n if (queryCacheEntry?.lastData === undefined) {\n if (queryCacheEntry.signal.aborted) {\n // query naturally cancelled by external factors.\n return reject(new CancelledError())\n }\n\n console.warn(\n `cancelled due to stream completing without data for query ${queryHash}`,\n )\n\n /**\n * A stream that completes without data is considered cancelled.\n * This is the expected behavior if someone for example adds a takeUntil().\n * This also allow the query to be retried automatically instead of\n * resolving as success with `undefined` (which is no-op for react-query)\n * or erroring with arbitrary value.\n */\n return reject(new CancelledError())\n }\n\n resolve(queryCacheEntry.lastData.value as TQueryFnData)\n\n refetchIfNeeded()\n },\n })\n })\n }\n\n const result = useQuery<TQueryFnData, TError, TData, TQueryKey>(\n {\n ...options,\n queryFn: queryFn === skipToken ? skipToken : queryFnAsync,\n },\n queryClient,\n )\n\n return result\n}\n","import type { Signal, VirtualSignal } from \"../Signal\"\nimport { useSetSignal } from \"./useSetSignal\"\nimport { useSignalReference } from \"./useSignalReference\"\nimport { useSignalValue } from \"./useSignalValue\"\n\nexport function useSignal<T>(\n signal: VirtualSignal<T>,\n): [T, Signal<T>[\"update\"], Signal<T>]\n\nexport function useSignal<T>(\n signal: Signal<T>,\n): [T, Signal<T>[\"update\"], Signal<T>]\n\nexport function useSignal<T>(\n signal: Signal<T>,\n): [T | undefined, Signal<T>[\"update\"], Signal<T>]\n\nexport function useSignal<T>(signal: Signal<T> | VirtualSignal<T>) {\n const finalSignal = useSignalReference(signal)\n const value = useSignalValue(signal)\n const setValue = useSetSignal(signal)\n\n return [value, setValue, finalSignal] as const\n}\n","import { useConstant } from \"../../utils\"\nimport type { Signal } from \"../Signal\"\nimport { useSignalValue } from \"./useSignalValue\"\n\n// biome-ignore lint/suspicious/noExplicitAny: TODO\nexport const useSignalState = <S extends Signal<any, any>>(\n fn: () => S,\n): [S[\"value\"], S] => {\n const signal = useConstant(fn)\n const value = useSignalValue(signal)\n\n return [value, signal] as const\n}\n","import { useCallback } from \"react\"\nimport { of, retry, tap, throwError } from \"rxjs\"\nimport { makeObservable } from \"../utils/makeObservable\"\nimport { useLiveRef } from \"../utils/react/useLiveRef\"\nimport type { SubscribeSource } from \"./useSubscribe/types\"\nimport { useSubscribe } from \"./useSubscribe/useSubscribe\"\n\ninterface Option {\n retryOnError?: boolean\n onError?: (error: unknown) => void\n}\n\nexport function useSubscribeEffect<T>(\n source: SubscribeSource<T>,\n options?: Option,\n) {\n const optionsRef = useLiveRef(options)\n\n const enhancerMakeObservable = useCallback(() => {\n const source$ = makeObservable(source)()\n\n return source$.pipe(\n tap({\n error: (error) => {\n optionsRef.current?.onError?.(error)\n },\n }),\n retry({\n delay: (error) =>\n optionsRef.current?.retryOnError ? of(0) : throwError(() => error),\n }),\n )\n }, [source, optionsRef])\n\n useSubscribe(enhancerMakeObservable)\n}\n"],"names":["UNSET_SYMBOL","useRefOnce","fn","ref","useRef","current","useConstant","useLiveBehaviorSubject","state","$","_c","t0","BehaviorSubject","subject","t1","t2","next","useEffect","arrayEqual","a","b","length","every","v","i","isPromiseLike","value","Promise","then","catch","isServer","window","getDelay","backoffDelay","maxInterval","Math","min","exponentialBackoffDelay","iteration","initialInterval","useEffectOnce","effect","Symbol","for","useUnmount","fnRef","useLiveRef","useMemo","ObservableStore","source$","sub","constructor","miscSource$","defaultValue","compareFn","hasNoDefinedSource","undefined","this","data","status","observableState","error","NEVER","pipe","distinctUntilChanged","tap","complete","share","subscribe","unsubscribe","getSnapshot","useObserve","optionsOrDeps","maybeDeps","Array","isArray","options","store","deps","optionsRef","storeRef","useStore","useSyncExternalStore","makeObservable","something","isObservable","from","of","somethingAsFunction","params","defer","result","useSubscribe","source","QueryClient$","queryClient","queryMap","Map","getQuery","queryHash","get","setQuery","queryKey","query$","signal","hashKey","sharedQuery$","takeUntil","fromEvent","cacheEntry","isCompleted","lastData","set","entry","deleteQuery","cancelQuery","delete","aborted","cancelQueries","exact","destroy","forEach","_","key","Context","createContext","QueryClientProvider$","memo","children","client","_client","useQueryClient","useState","t3","t4","t5","t6","getQueryCache","event","activeObservers","query","getObserversCount","type","Provider","useQueryClient$","useContext","Error","useMutation$","stateSubject","_temp","variables","resolve","reject","mutationFn","take","useMutation","isPending","isError","isSuccess","isIdle","state$","_temp2","mutation","continue","noop","isReady","SwitchMutationCancelError","message","super","name","AbortController","SIGNAL_RESET","normalizeStore","createLocalStorageAdapter","createSharedStoreAdapter","adapter","clear","async","removeItem","keyToDelete","unsafeStore","getItem","toRemove","rest","setItem","itemKey","localStorage","serializedValue","JSON","parse","stringify","Signal","config","default","update","valueOrUpdater","updater","setValue","bind","VirtualSignal","SignalContext","signals","isDestroyed","getOrCreateSignal","virtualSignal","existingSignal","newSignal","SignalReactContext","SignalContextProvider","signalContextRef","signalContext","setIsDestroyed","jsx","useSignalContext","useMakeOrRetrieveSignal","isShallowEqual","objA","objB","keysA","Object","keys","keysB","hasOwnProperty","IDENTIFIER_PERSISTENCE_KEY","hydrateValueToSignal","hydrate","version","switchMap","normalizedValue","getNormalizedPersistanceValue","unknownValue","storedVersionIsInvalid","migrationVersion","signalVersionIsSuperior","correctVersionValue","process","env","NODE_ENV","console","log","persistSignals","entries","onHydrated","isHydrated$","zip","map","catchError","EMPTY","persisted$","merge","throttleTime","asyncScheduler","trailing","persistValue","getValue","e","acc","isHydrated","useSignalReference","useSetSignal","defaultEqualityFn","is","useSignalValue","selector","equalityFn","finalSignal","hasValue","sourceValue","cacheRef","onChange","skip","cached","forage","arg","retry","retryDelay","retryAfterDelay","retryAfter","maxRetries","Number","POSITIVE_INFINITY","shouldRetry","normalizedConfig","resetOnSuccess","caughtErrors","shouldRetryFn","attempt","caughtErrorResult$","caughtError","mergeMap","throwError","retryWhen","errors","concatMap","first","timer","onMutate","mutationKey","t9","t10","ready$","variables_3","filter","onSuccess","variables_0","rest_0","onError","variables_1","rest_1","onSettled","data_0","error_0","t7","t8","variables_2","rest_2","mutateAsync","rest_3","variables_4","mutations","getMutationCache","findAll","all","finally","mutateAsyncConcat","variables_5","mutateConcat","mutate","useDebounced","func","wait","cancelOnUnmount","timeout","clearTimeout","setTimeout","callback","compare","lastValue","newValue","valueOrUpdater_0","getNewValue","setState","onHydratedRef","adapterSubject","entriesSubject","adapter_0","scan","queryFn","_queryClient","queryClient$","context","skipToken","queryAlreadyInCache","queryCacheEntry","refetchIfNeeded","refetchQueries","delay","warn","CancelledError","queryFnAsync","useQuery","retryOnError","previousMutationCancelRef","abort","ignoreElements","defaultIfEmpty","mutateSwitch","mutateAsyncSwitch","t11"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","names":["useRef","UNSET_SYMBOL","Symbol","useRefOnce","fn","T","ref","current","useRefOnce","useConstant","fn","T","ref","current","useEffect","BehaviorSubject","useConstant","useLiveBehaviorSubject","state","$","_c","t0","subject","t1","t2","next","Dispatch","SetStateAction","useCallback","BehaviorSubject","useConstant","useObservableState","defaultValue","$","_c","t0","subject","t1","valueOrUpdater","getNewValue","valueOrUpdater_0","updaterFn","prev","T","getValue","newValue","next","setState","t2","value","t3","arrayEqual","a","A","b","B","length","every","v","i","isDefined","arg","T","undefined","isPromiseLike","value","T","Promise","then","catch","isServer","window","defer","merge","Observable","of","throwError","timer","catchError","concatMap","first","mergeMap","retryWhen","tap","RetryBackoffConfig","initialInterval","maxInterval","resetOnSuccess","retry","attempt","error","TError","retryAfterDelay","retryAfter","retryDelay","backoffDelay","iteration","caughtError","T","getDelay","Math","min","exponentialBackoffDelay","retryBackoff","config","maxRetries","Number","POSITIVE_INFINITY","shouldRetry","normalizedConfig","source","caughtErrors","shouldRetryFn","pipe","caughtErrorResult$","errors","e","EffectCallback","useEffect","useEffectOnce","effect","$","_c","t0","Symbol","for","useRef","useEffectOnce","useUnmount","fn","fnRef","current","useCallback","useRef","useUnmount","useDebounced","func","wait","t0","$","_c","t1","undefined","options","cancelOnUnmount","t2","timeout","t3","arg","current","clearTimeout","setTimeout","callback","t4","useMemo","useRef","useLiveRef","value","T","ref","current","useMemo","useRef","useMemoCompare","value","T","compare","a","b","lastValue","current","useEffectOnce","useMount","fn","$","_c","t0","BehaviorSubject","distinctUntilChanged","NEVER","Observable","Subscription","share","tap","State","data","T","DefaultValue","status","observableState","error","Error","ObservableStoreOptions","defaultValue","compareFn","a","b","ObservableStore","state","source$","sub","constructor","miscSource$","hasNoDefinedSource","undefined","value","pipe","complete","next","subscribe","unsubscribe","getSnapshot","DependencyList","useEffect","useRef","Observable","arrayEqual","useLiveRef","ObservableStore","UseObserveOptions","StoreReference","deps","store","T","DefaultValue","useStore","source$","options","optionsRef","storeRef","undefined","current","defaultValue","compareFn","a","b","sub","unsubscribe","DependencyList","useSyncExternalStore","BehaviorSubject","Observable","UseObserveResult","useStore","UseObserveOptions","Option","defaultValue","R","compareFn","a","T","b","useObserve","source","options","Omit","deps","DefaultValue","source$","optionsOrDeps","maybeDeps","$","_c","t0","Array","isArray","Partial","undefined","t1","store","result","subscribe","getSnapshot","defer","from","isObservable","Observable","of","isPromiseLike","FnReturnToObservable","T","ObservedData","Promise","ThenData","makeObservable","fn","Data","params","Params","Return","something","somethingAsFunction","result","useEffect","makeObservable","SubscribeSource","useSubscribe","source","$","_c","t0","t1","sub","subscribe","unsubscribe","useCallback","of","retry","tap","throwError","makeObservable","useLiveRef","SubscribeSource","useSubscribe","Option","retryOnError","onError","error","useSubscribeEffect","source","options","$","_c","optionsRef","t0","source$","pipe","current","delay","error_0","enhancerMakeObservable","hashKey","QueryClient","QueryKey","useQueryClient","createContext","memo","useContext","useEffect","useState","fromEvent","Observable","Subscription","share","takeUntil","CacheEntry","queryKey","query$","signal","AbortSignal","sub","isCompleted","lastData","value","QueryClient$","queryMap","Map","constructor","queryClient","getQuery","queryHash","get","setQuery","sharedQuery$","pipe","cacheEntry","undefined","set","subscribe","next","data","entry","complete","deleteQuery","cancelQuery","delete","unsubscribe","aborted","cancelQueries","exact","destroy","forEach","_","key","Context","QueryClientProvider$","t0","$","_c","children","client","_client","t1","t2","t3","subscribeToQueryCache","getQueryCache","event","activeObservers","query","getObserversCount","type","t4","t5","t6","useQueryClient$","Error","DefaultError","QueryClient","UseMutationOptions","UseMutationResult","useMutation","useEffect","BehaviorSubject","Observable","take","useConstant","UseMutation$Options","Omit","TData","TError","TVariables","TOnMutateResult","mutationFn","variables","useMutation$","options","queryClient","$","_c","stateSubject","_temp","t0","lastData","Promise","resolve","reject","source","pipe","subscribe","next","data","error","complete","undefined","Error","value","t1","result","status","isPending","isError","isSuccess","isIdle","t2","t3","t4","state$","DefaultError","MutationKey","QueryClient","useQueryClient","useCallback","BehaviorSubject","filter","first","noop","Subject","switchMap","UseMutation$Options","useMutation$","useConcatMutation$","t0","queryClient","$","_c","onMutate","options","client","mutationKey","t1","t2","t3","variables","rest","undefined","t9","t10","ready$","variables_3","source","mutationFn","pipe","_temp","onSuccess","data","t4","variables_0","rest_0","onError","error","t5","t6","variables_1","rest_1","onSettled","data_0","error_0","t7","t8","variables_2","rest_2","mutateAsync","rest_3","variables_4","mutations","getMutationCache","findAll","exact","subject","result","Promise","all","map","_temp2","next","finally","complete","mutateAsyncConcat","variables_5","catch","mutateConcat","mutate","mutation","continue","isReady","CancelledError","hashKey","QueryClient","QueryFunctionContext","QueryKey","skipToken","defer","delay","Observable","take","QueryClient$","ObservableQueryFn","context","TQueryKey","TQueryFnData","createObservableQueryFn","queryClient$","queryClient","queryFn","undefined","Promise","resolve","reject","getSource","queryHash","queryKey","queryAlreadyInCache","getQuery","queryCacheEntry","setQuery","signal","refetchIfNeeded","isCompleted","setTimeout","refetchQueries","exact","lastData","value","query$","pipe","subscribe","error","complete","aborted","console","warn","DefaultError","QueriesPlaceholderDataFunction","QueryClient","QueryKey","UseQueryOptions","UseQueryResult","useQueries","useQueryClient","createObservableQueryFn","ObservableQueryFn","useQueryClient$","MAXIMUM_DEPTH","UseQuery$OptionsForUseQueries","TQueryFnData","Omit","TError","TData","TQueryKey","queryFn","placeholderData","GetUseQuery$Options","T","select","data","GetUseQuery$Result","QueriesOptions$","Array","ReadonlyArray","TDepth","TResults","Head","Tails","QueriesResults$","K","useQueries$","t0","queryClient","$","_c","options","queries","_queryClient","queryClient$","t1","t2","t3","query","map","transformedQueries","Parameters","TCombinedResult","combine","result","t4","subscribed","DefaultError","QueryClient","QueryKey","UseQueryOptions","useQuery","useQueryClient","createObservableQueryFn","ObservableQueryFn","useQueryClient$","useQuery$","t0","queryClient","$","_c","options","queryFn","_queryClient","queryClient$","t1","t2","result","DefaultError","QueryClient","useCallback","defaultIfEmpty","first","fromEvent","ignoreElements","merge","tap","useRefOnce","UseMutation$Options","useMutation$","SwitchMutationCancelError","Error","constructor","message","name","useSwitchMutation$","t0","queryClient","$","_c","mutationFn","onError","onMutate","onSettled","options","previousMutationCancelRef","_temp","t1","t2","variables","abort","aborted","source","pipe","_temp2","t3","t4","t5","variables_0","rest","undefined","data","t6","variables_1","rest_0","onSuccess","error","t7","variables_2","rest_1","data_0","error_0","t8","variables_3","rest_2","mutate","mutateAsync","rest_3","t9","variables_4","current","AbortController","signal","mutateSwitch","t10","variables_5","mutateAsyncSwitch","t11","SIGNAL_RESET","Symbol","Adapter","createLocalforageAdapter","forage","getItem","key","Promise","setItem","value","serializedValue","undefined","JSON","parse","stringify","removeItem","_","clear","Adapter","normalizeStore","store","undefined","createSharedStoreAdapter","adapter","key","clear","removeItem","keyToDelete","unsafeStore","getItem","toRemove","rest","setItem","itemKey","value","createLocalStorageAdapter","localStorage","serializedValue","JSON","parse","stringify","BehaviorSubject","SIGNAL_RESET","ValidateShape","U","T","K","SignalValue","Signal","SignalWithKey","key","constructor","config","default","update","valueOrUpdater","prev","Function","next","updater","value","setValue","bind","subject","VirtualSignal","signal","undefined","virtualSignal","BehaviorSubject","Signal","VirtualSignal","SignalContext","signals","Map","isDestroyed","getOrCreateSignal","virtualSignal","T","existingSignal","value","get","newSignal","config","key","undefined","set","next","destroy","forEach","signal","complete","clear","createContext","memo","useContext","useEffect","useState","useRefOnce","VirtualSignal","SignalContext","SignalContextType","SignalReactContext","SignalContextProvider","children","React","ReactNode","signalContextRef","signalContext","current","isDestroyed","setIsDestroyed","value","destroy","useSignalContext","useMakeOrRetrieveSignal","virtualSignal","$","_c","t0","getOrCreateSignal","undefined","signal","isShallowEqual","objA","A","objB","B","undefined","constructor","keysA","Object","keys","Array","keysB","length","key","hasOwnProperty","IDENTIFIER_PERSISTENCE_KEY","catchError","from","of","switchMap","Adapter","IDENTIFIER_PERSISTENCE_KEY","PersistenceEntry","SignalPersistenceConfig","getNormalizedPersistanceValue","unknownValue","undefined","persistValue","adapter","config","signal","version","state","getValue","value","migrationVersion","process","env","NODE_ENV","console","log","key","setItem","pipe","e","error","hydrateValueToSignal","hydrate","getItem","normalizedValue","storedVersionIsInvalid","signalVersionIsSuperior","correctVersionValue","setValue","asyncScheduler","catchError","EMPTY","from","map","merge","of","share","switchMap","tap","throttleTime","zip","Signal","Adapter","hydrateValueToSignal","persistValue","SignalPersistenceConfig","persistSignals","entries","onHydrated","adapter","Array","signalsHydrated$","length","config","isHydrated$","pipe","error","console","persisted$","signal","trailing","type","const","concatMap","merge","of","scan","switchMap","useLiveBehaviorSubject","useObserve","useLiveRef","isShallowEqual","Adapter","persistSignals","SignalPersistenceConfig","usePersistSignals","t0","$","_c","entries","t1","onHydrated","adapter","t2","undefined","onHydratedRef","adapterSubject","entriesSubject","t3","persistence$","pipe","adapter_0","type","entries_0","current","_temp","isHydrated","t4","Symbol","for","defaultValue","compareFn","t5","result","data","acc","event","Signal","VirtualSignal","useMakeOrRetrieveSignal","useSignalContext","useSignalReference","signal","signalContext","Error","undefined","T","Signal","VirtualSignal","useSignalReference","useSetSignal","signal","T","finalSignal","update","useCallback","useRef","useSyncExternalStore","skip","Signal","VirtualSignal","useSignalReference","EqualityFn","a","T","b","defaultEqualityFn","Object","is","useSignalValue","signal","selector","value","SelectValue","equalityFn","t0","$","_c","undefined","finalSignal","t1","Symbol","for","hasValue","sourceValue","cacheRef","t2","onChange","sub","pipe","subscribe","unsubscribe","t3","cached","current","next","getSnapshot","Signal","VirtualSignal","useSetSignal","useSignalReference","useSignalValue","useSignal","signal","T","$","_c","finalSignal","value","setValue","t0","const","useConstant","Signal","useSignalValue","useSignalState","fn","$","_c","signal","value","t0","const"],"sources":["../src/lib/utils/react/useRefOnce.ts","../src/lib/utils/react/useConstant.ts","../src/lib/binding/useLiveBehaviorSubject.ts","../src/lib/binding/useObservableState.ts","../src/lib/utils/arrayEqual.ts","../src/lib/utils/isDefined.ts","../src/lib/utils/isPromiseLike.ts","../src/lib/utils/isServer.ts","../src/lib/utils/operators/retryBackoff.ts","../src/lib/utils/react/useEffectOnce.ts","../src/lib/utils/react/useUnmount.ts","../src/lib/utils/react/useDebounced.ts","../src/lib/utils/react/useLiveRef.ts","../src/lib/utils/react/useMemoCompare.ts","../src/lib/utils/react/useMount.ts","../src/lib/binding/useObserve/store.ts","../src/lib/binding/useObserve/useStore.ts","../src/lib/binding/useObserve/useObserve.ts","../src/lib/utils/makeObservable.ts","../src/lib/binding/useSubscribe/useSubscribe.ts","../src/lib/binding/useSubscribeEffect.ts","../src/lib/queries/QueryClientProvider$.tsx","../src/lib/queries/useMutation$.ts","../src/lib/queries/useConcatMutation$.ts","../src/lib/queries/createObservableQueryFn.ts","../src/lib/queries/useQueries$.ts","../src/lib/queries/useQuery$.ts","../src/lib/queries/useSwitchMutation$.ts","../src/lib/state/constants.ts","../src/lib/state/persistence/adapters/createLocalforageAdapter.ts","../src/lib/state/persistence/adapters/createLocalStorageAdapter.ts","../src/lib/state/Signal.ts","../src/lib/state/SignalContext.ts","../src/lib/state/react/SignalContextProvider.tsx","../src/lib/utils/shallowEqual.ts","../src/lib/state/persistence/constants.ts","../src/lib/state/persistence/helpers.ts","../src/lib/state/persistence/persistSignals.ts","../src/lib/state/react/usePersistSignals.tsx","../src/lib/state/react/useSignalReference.ts","../src/lib/state/react/useSetSignal.ts","../src/lib/state/react/useSignalValue.ts","../src/lib/state/react/useSignal.ts","../src/lib/state/react/useSignalState.ts"],"sourcesContent":["import { useRef } from \"react\"\n\nconst UNSET_SYMBOL = Symbol(\"UNSET\")\n\nexport const useRefOnce = <T>(fn: () => T) => {\n const ref = useRef<T | typeof UNSET_SYMBOL>(UNSET_SYMBOL)\n\n if (ref.current === UNSET_SYMBOL) {\n ref.current = fn()\n }\n\n return ref as { current: T }\n}\n","import { useRefOnce } from \"./useRefOnce\"\n\nexport const useConstant = <T>(fn: () => T) => {\n const ref = useRefOnce(fn)\n\n return ref.current\n}\n","import { useEffect } from \"react\"\nimport { BehaviorSubject } from \"rxjs\"\nimport { useConstant } from \"../utils/react/useConstant\"\n\nexport const useLiveBehaviorSubject = <S>(state: S) => {\n const subject = useConstant(() => new BehaviorSubject(state))\n\n useEffect(() => {\n subject.next(state)\n }, [state, subject])\n\n return subject\n}\n","import { type Dispatch, type SetStateAction, useCallback } from \"react\"\nimport { BehaviorSubject } from \"rxjs\"\nimport { useConstant } from \"../utils/react/useConstant\"\n\nexport const useObservableState = <T>(\n defaultValue: T,\n): [T, Dispatch<SetStateAction<T>>, BehaviorSubject<T>] => {\n const subject = useConstant(() => new BehaviorSubject(defaultValue))\n\n const setState = useCallback(\n (valueOrUpdater: SetStateAction<T>) => {\n const getNewValue = (valueOrUpdater: SetStateAction<T>) => {\n if (typeof valueOrUpdater === \"function\") {\n const updaterFn = valueOrUpdater as (prev: T) => T\n return updaterFn(subject.getValue())\n }\n\n return valueOrUpdater\n }\n\n const newValue = getNewValue(valueOrUpdater)\n\n if (newValue === subject.getValue()) {\n return\n }\n\n subject.next(newValue)\n },\n [subject],\n )\n\n const value = subject.getValue()\n\n return [value, setState, subject]\n}\n","// biome-ignore lint/suspicious/noExplicitAny: TODO\nexport const arrayEqual = <A extends any[], B extends any[]>(a: A, b: B) =>\n a.length === b.length && a.every((v, i) => v === b[i])\n","export function isDefined<T>(\n arg: T | null | undefined,\n): arg is T extends null | undefined ? never : T {\n return arg !== null && arg !== undefined\n}\n","// biome-ignore lint/suspicious/noExplicitAny: TODO\nexport function isPromiseLike<T>(value: T): value is T & Promise<any> {\n return (\n value instanceof Promise ||\n (value &&\n typeof value === \"object\" &&\n \"then\" in value &&\n typeof value.then === \"function\" &&\n \"catch\" in value &&\n value.catch === \"function\")\n )\n}\n","export const isServer = typeof window === \"undefined\" || \"Deno\" in window\n","import { defer, merge, type Observable, of, throwError, timer } from \"rxjs\"\nimport {\n catchError,\n concatMap,\n first,\n mergeMap,\n retryWhen,\n tap,\n} from \"rxjs/operators\"\n\nexport interface RetryBackoffConfig<T, TError> {\n // Initial interval. It will eventually go as high as maxInterval.\n initialInterval?: number\n // Maximum delay between retries.\n maxInterval?: number\n // When set to `true` every successful emission will reset the delay and the\n // error count.\n resetOnSuccess?: boolean\n retry?: (attempt: number, error: TError) => boolean\n retryAfterDelay?: (attempt: number, error: TError) => boolean\n // Can be used to delay the retry (outside of backoff process)\n // for example if you want to pause retry due to connectivity issue\n // biome-ignore lint/suspicious/noExplicitAny: TODO\n retryAfter?: () => Observable<any>\n retryDelay?: number | ((attempt: number, error: TError) => number)\n // Conditional retry.\n // shouldRetry?: (attempt: number, error: any) => Observable<boolean>\n backoffDelay?: (iteration: number, initialInterval: number) => number\n // biome-ignore lint/suspicious/noExplicitAny: TODO\n caughtError?: (attempt: number, error: any) => undefined | Observable<T>\n // biome-ignore lint/suspicious/noExplicitAny: TODO\n catchError?: (attempt: number, error: any) => Observable<T>\n}\n\n/** Calculates the actual delay which can be limited by maxInterval */\nexport function getDelay(backoffDelay: number, maxInterval: number) {\n return Math.min(backoffDelay, maxInterval)\n}\n\n/** Exponential backoff delay */\nexport function exponentialBackoffDelay(\n iteration: number,\n initialInterval: number,\n) {\n return 2 ** iteration * initialInterval\n}\n\n/**\n * Returns an Observable that mirrors the source Observable with the exception\n * of an error. If the source Observable calls error, rather than propagating\n * the error call this method will resubscribe to the source Observable with\n * exponentially increasing interval and up to a maximum of count\n * re-subscriptions (if provided). Retrying can be cancelled at any point if\n * shouldRetry returns false.\n */\nexport function retryBackoff<T, TError>(config: RetryBackoffConfig<T, TError>) {\n const {\n retry,\n retryDelay,\n retryAfterDelay,\n retryAfter = () => of(true),\n } = config\n\n const maxRetries =\n typeof retry !== \"function\"\n ? retry === false\n ? 0\n : retry === true\n ? Number.POSITIVE_INFINITY\n : (retry ?? Number.POSITIVE_INFINITY)\n : Number.POSITIVE_INFINITY\n\n const shouldRetry =\n typeof retry === \"function\"\n ? // ? (attempt: number, error: TError) => of(retry(attempt, error))\n retry\n : () => true\n\n const initialInterval = typeof retryDelay === \"number\" ? retryDelay : 100\n\n const normalizedConfig = {\n shouldRetry,\n ...config,\n }\n\n const {\n maxInterval = Number.POSITIVE_INFINITY,\n resetOnSuccess = false,\n backoffDelay = exponentialBackoffDelay,\n } = normalizedConfig\n\n return <T>(source: Observable<T>) =>\n defer(() => {\n let caughtErrors = 0\n\n const shouldRetryFn = (attempt: number, error: TError) =>\n attempt < maxRetries ? shouldRetry(attempt, error) : false\n\n return source.pipe(\n catchError<T, Observable<T>>((error) => {\n caughtErrors++\n\n if (!shouldRetryFn(caughtErrors - 1, error)) throw error\n\n const caughtErrorResult$ = config.caughtError?.(caughtErrors, error)\n\n if (!caughtErrorResult$) throw error\n\n return caughtErrorResult$.pipe(\n mergeMap((source) =>\n merge(\n of(source) as unknown as Observable<T>,\n throwError(() => error),\n ),\n ),\n )\n }),\n retryWhen<T>((errors) => {\n return errors.pipe(\n concatMap((error) => {\n const attempt = caughtErrors - 1\n\n return retryAfter().pipe(\n first(),\n mergeMap(() =>\n shouldRetryFn(attempt, error)\n ? timer(\n getDelay(\n backoffDelay(attempt, initialInterval),\n maxInterval,\n ),\n ).pipe(\n mergeMap((timer) => {\n if (\n retryAfterDelay &&\n !retryAfterDelay(attempt, error)\n )\n return throwError(() => error)\n\n return of(timer)\n }),\n )\n : throwError(() => error),\n ),\n )\n }),\n )\n }),\n catchError((e) => {\n if (config.catchError) {\n return config.catchError(caughtErrors, e)\n }\n\n throw e\n }),\n tap(() => {\n if (resetOnSuccess) {\n caughtErrors = 0\n }\n }),\n )\n })\n}\n","import { type EffectCallback, useEffect } from \"react\"\n\nexport const useEffectOnce = (effect: EffectCallback) => {\n // biome-ignore lint/correctness/useExhaustiveDependencies: we want to run the effect only once\n useEffect(effect, [])\n}\n","import { useRef } from \"react\"\nimport { useEffectOnce } from \"./useEffectOnce\"\n\n// biome-ignore lint/suspicious/noExplicitAny: Expected any\nexport const useUnmount = (fn: () => any): void => {\n const fnRef = useRef(fn)\n\n // update the ref each render so if it change the newest callback will be invoked\n fnRef.current = fn\n\n useEffectOnce(() => () => fnRef.current())\n}\n","import { useCallback, useRef } from \"react\"\nimport { useUnmount } from \"./useUnmount\"\n\n/**\n * @param func Function to be debounced\n * @param wait time in ms to debounce function, default to 300\n * @returns the debounced callback function\n */\nexport const useDebounced = <T>(\n func: ((arg: T) => void) | (() => void),\n wait: number,\n options: {\n cancelOnUnmount?: boolean\n } = {},\n) => {\n const { cancelOnUnmount = false } = options\n const timeout = useRef<ReturnType<typeof setTimeout> | null>(null)\n\n const callback = useCallback(\n (arg: T) => {\n timeout.current !== null && clearTimeout(timeout.current)\n timeout.current = setTimeout(() => func(arg), wait)\n },\n [func, wait],\n )\n\n useUnmount(() => {\n if (cancelOnUnmount) {\n timeout.current && clearTimeout(timeout.current)\n }\n })\n\n return callback\n}\n","import { useMemo, useRef } from \"react\"\n\nexport const useLiveRef = <T>(value: T) => {\n const ref = useRef(value)\n\n /**\n * We don't update the value on render because of potential\n * bug related to react concurrency mode.\n * We don't update the value in a useEffect because effects run after\n * render and we could maybe? have situation where the ref\n * is being called after render but before effect?\n * I am not sure of that one.\n *\n * `useMemo` is a good compromise since it runs during render but before\n * repaint. It prevents the concurrency mode issue.\n */\n useMemo(() => {\n ref.current = value\n }, [value])\n\n return ref\n}\n","import { useMemo, useRef } from \"react\"\n\nexport const useMemoCompare = <T>(\n value: T,\n compare: (a: T, b: T) => boolean,\n) => {\n const lastValue = useRef<{ value: T }>({ value })\n\n return useMemo(() => {\n if (compare(value, lastValue.current.value)) {\n return lastValue.current.value\n }\n\n lastValue.current = { value }\n\n return value\n }, [value, compare])\n}\n","import { useEffectOnce } from \"./useEffectOnce\"\n\nexport const useMount = (fn: () => void) => {\n useEffectOnce(() => {\n fn()\n })\n}\n","import {\n BehaviorSubject,\n distinctUntilChanged,\n NEVER,\n type Observable,\n type Subscription,\n share,\n tap,\n} from \"rxjs\"\n\nexport type State<T, DefaultValue, Error = unknown> = {\n data: T | DefaultValue\n status: \"pending\" | \"success\" | \"error\"\n observableState: \"complete\" | \"error\" | \"live\"\n error: Error | undefined\n}\n\nexport interface ObservableStoreOptions<T, DefaultValue> {\n defaultValue: DefaultValue\n compareFn: ((a: T, b: T) => boolean) | undefined\n}\n\nexport class ObservableStore<T, DefaultValue, Error = unknown> {\n state: State<T, DefaultValue, Error>\n source$: Observable<T | undefined>\n sub: Subscription\n\n constructor({\n source$: miscSource$,\n defaultValue,\n compareFn,\n }: {\n source$: Observable<T> | (() => Observable<T> | undefined)\n } & ObservableStoreOptions<T, DefaultValue>) {\n const source$ =\n typeof miscSource$ === \"function\" ? miscSource$() : miscSource$\n\n const hasNoDefinedSource = source$ === undefined\n\n this.state = {\n data: source$ instanceof BehaviorSubject ? source$.value : defaultValue,\n status: hasNoDefinedSource ? \"success\" : \"pending\",\n observableState: hasNoDefinedSource ? \"complete\" : \"live\",\n error: undefined,\n }\n\n this.source$ = (source$ ?? NEVER).pipe(\n distinctUntilChanged(compareFn),\n tap({\n complete: () => {\n this.state = {\n ...this.state,\n status: \"success\",\n observableState: \"complete\",\n }\n },\n error: (error) => {\n this.state = {\n ...this.state,\n observableState: \"error\",\n status: \"error\",\n error,\n }\n },\n next: (data) => {\n this.state = { ...this.state, data }\n },\n }),\n share(),\n )\n\n /**\n * @important This eager subscription will optimistically update the state.\n * Any observable that is non async (behavior, of(x), etc) will have in fact their state completed\n * by the first render cycle.\n * Although we only correctly type sync state for `BehaviorSubject` we can in fact get the value in sync\n * for more than them.\n * Technically the whole pipe chain runs \"synchronously\".\n *\n * This is not a guarantee, just that in best case scenario there will be only one render.\n */\n this.sub = this.source$.subscribe()\n }\n\n subscribe = (next: () => void) => {\n // in some case the observable is already complete by the time we subscribe to it.\n if (this.state.observableState === \"complete\") {\n return () => {}\n }\n\n const sub = this.source$.subscribe({\n complete: next,\n error: next,\n next: next,\n })\n\n return () => {\n sub.unsubscribe()\n }\n }\n\n getSnapshot = () => {\n return this.state\n }\n}\n","import { type DependencyList, useEffect, useRef } from \"react\"\nimport type { Observable } from \"rxjs\"\nimport { arrayEqual, useLiveRef } from \"../../utils\"\nimport { ObservableStore } from \"./store\"\nimport type { UseObserveOptions } from \"./types\"\n\ntype StoreReference<T, DefaultValue> = {\n deps: DependencyList\n store: ObservableStore<T, DefaultValue | undefined>\n}\n\n/**\n * Mechanism to initialize / retrieve an existing observable store.\n *\n * - We cannot use `useMemo` because it is theoretically not stable. We need stability,\n * not performance optimization.\n * - Using `useState` would make the API not sync (or optimistically return the wrong value).\n * We want the returned value of a render cycle to be derived from the given arguments. `useState`\n * would force us to update the store asynchronously in a useEffect. Losing at least one render cycle.\n * - We are left with using refs to hold the latest references. We use comparison with given deps as well.\n * We are re-creating store during render cycles which is normally not recommended.\n * However this is \"okay\" since it is to be used inside a useSyncExternalStore and not directly in a render.\n */\nexport const useStore = <T, DefaultValue>(\n source$: Observable<T> | (() => Observable<T> | undefined),\n options: UseObserveOptions<T, DefaultValue>,\n deps: DependencyList,\n): ObservableStore<T, DefaultValue | undefined> => {\n const optionsRef = useLiveRef(options)\n const storeRef = useRef<StoreReference<T, DefaultValue> | undefined>(\n undefined,\n )\n\n if (!storeRef.current || !arrayEqual([...deps], [...storeRef.current.deps])) {\n storeRef.current = {\n deps,\n store: new ObservableStore({\n source$,\n defaultValue: optionsRef.current.defaultValue,\n compareFn: (a, b) => optionsRef.current?.compareFn?.(a, b) ?? a === b,\n }),\n }\n }\n\n const store = storeRef.current.store\n\n useEffect(\n () => () => {\n store.sub.unsubscribe()\n },\n [store],\n )\n\n return store\n}\n","import { type DependencyList, useSyncExternalStore } from \"react\"\nimport type { BehaviorSubject, Observable } from \"rxjs\"\nimport type { UseObserveResult } from \"./types\"\nimport { useStore } from \"./useStore\"\n\nexport type { UseObserveOptions, UseObserveResult } from \"./types\"\n\ninterface Option<T, R = undefined> {\n defaultValue: R\n compareFn?: (a: T, b: T) => boolean\n}\n\nexport function useObserve<T>(\n source: BehaviorSubject<T>,\n): UseObserveResult<T, T>\n\nexport function useObserve<T>(\n source: BehaviorSubject<T>,\n options: Omit<Option<T>, \"defaultValue\">,\n): UseObserveResult<T, T>\n\nexport function useObserve<T>(\n source: Observable<T>,\n): UseObserveResult<T, undefined>\n\nexport function useObserve<T>(\n source: () => Observable<T>,\n deps: DependencyList,\n): UseObserveResult<T, undefined>\n\nexport function useObserve<T>(\n source: () => Observable<T> | undefined,\n deps: DependencyList,\n): UseObserveResult<T, undefined>\n\nexport function useObserve<T, DefaultValue>(\n source: Observable<T>,\n options: Option<T, DefaultValue>,\n): UseObserveResult<T, DefaultValue>\n\nexport function useObserve<T, DefaultValue>(\n source: () => Observable<T>,\n options: Option<T, DefaultValue>,\n deps: DependencyList,\n): UseObserveResult<T, DefaultValue>\n\nexport function useObserve<T, DefaultValue = T>(\n source$: Observable<T> | (() => Observable<T> | undefined),\n optionsOrDeps?: Partial<Option<DefaultValue>> | DependencyList,\n maybeDeps?: DependencyList,\n): UseObserveResult<T, DefaultValue | undefined> {\n const options =\n optionsOrDeps != null && !Array.isArray(optionsOrDeps)\n ? (optionsOrDeps as Partial<Option<T, DefaultValue>>)\n : ({\n defaultValue: undefined,\n compareFn: undefined,\n } satisfies Partial<Option<T, DefaultValue>>)\n const deps =\n !maybeDeps && Array.isArray(optionsOrDeps)\n ? optionsOrDeps\n : typeof source$ === \"function\"\n ? (maybeDeps ?? [])\n : [source$]\n\n const store = useStore<T, DefaultValue | undefined>(source$, options, deps)\n\n const result = useSyncExternalStore(\n store.subscribe,\n store.getSnapshot,\n store.getSnapshot,\n )\n\n return result\n}\n","import { defer, from, isObservable, type Observable, of } from \"rxjs\"\nimport { isPromiseLike } from \"./isPromiseLike\"\n\ntype FnReturnToObservable<T> =\n T extends Observable<infer ObservedData>\n ? ObservedData\n : T extends Promise<infer ThenData>\n ? ThenData\n : T\n\nexport function makeObservable<Data>(\n fn: Observable<Data>,\n): () => Observable<Data>\n\nexport function makeObservable<Data>(fn: Promise<Data>): () => Observable<Data>\n\nexport function makeObservable<Data>(\n fn: Promise<Data> | Observable<Data>,\n): () => Observable<Data>\n\nexport function makeObservable<Data>(\n fn: () => Promise<Data> | Observable<Data>,\n): () => Observable<Data>\n\n/**\n * Generic factory\n */\nexport function makeObservable<Data>(\n fn: () => Promise<Data> | Observable<Data> | Data,\n): () => Observable<Data>\n\n/**\n * Generic factory\n */\nexport function makeObservable<Data, Params>(\n fn: (params: Params) => Data,\n): (params: Params) => Observable<FnReturnToObservable<Data>>\n\n/**\n * Generic factory OR Observable\n */\nexport function makeObservable<Data, Return>(\n fn: Observable<Data> | (() => Return),\n): () => Observable<Data | FnReturnToObservable<Return>>\n\nexport function makeObservable<Data>(fn: Data): () => Observable<Data>\n\n/**\n * Convert the input into an observable.\n *\n * - Observable: return the same observable\n * - Promise: return an observable from the promise\n * - Data: return an observable from the data\n * - Function: Execute the function and return an observable from the result\n */\nexport function makeObservable<Data, Params>(\n something:\n | ((params: Params) => Observable<Data>)\n | Promise<Data>\n | Observable<Data>\n | ((params: Params) => Promise<Data>)\n | ((params: Params) => Data)\n | Data,\n): (params: Params) => Observable<Data> {\n if (isObservable(something)) return () => something\n\n if (isPromiseLike(something)) return () => from(something)\n\n if (typeof something !== \"function\") return () => of(something)\n\n const somethingAsFunction = something as\n | ((params: Params) => Observable<Data>)\n | ((params: Params) => Promise<Data>)\n | ((params: Params) => Data)\n\n return (params: Params) =>\n defer(() => {\n const result = somethingAsFunction(params)\n\n if (isPromiseLike(result)) {\n return from(result)\n }\n\n if (isObservable(result)) {\n return result\n }\n\n return of(result)\n })\n}\n","import { useEffect } from \"react\"\nimport { makeObservable } from \"../../utils/makeObservable\"\nimport type { SubscribeSource } from \"./types\"\n\nexport function useSubscribe<T>(source: SubscribeSource<T>) {\n useEffect(() => {\n const sub = makeObservable(source)().subscribe()\n\n return () => {\n sub.unsubscribe()\n }\n }, [source])\n}\n","import { useCallback } from \"react\"\nimport { of, retry, tap, throwError } from \"rxjs\"\nimport { makeObservable } from \"../utils/makeObservable\"\nimport { useLiveRef } from \"../utils/react/useLiveRef\"\nimport type { SubscribeSource } from \"./useSubscribe/types\"\nimport { useSubscribe } from \"./useSubscribe/useSubscribe\"\n\ninterface Option {\n retryOnError?: boolean\n onError?: (error: unknown) => void\n}\n\nexport function useSubscribeEffect<T>(\n source: SubscribeSource<T>,\n options?: Option,\n) {\n const optionsRef = useLiveRef(options)\n\n const enhancerMakeObservable = useCallback(() => {\n const source$ = makeObservable(source)()\n\n return source$.pipe(\n tap({\n error: (error) => {\n optionsRef.current?.onError?.(error)\n },\n }),\n retry({\n delay: (error) =>\n optionsRef.current?.retryOnError ? of(0) : throwError(() => error),\n }),\n )\n }, [source, optionsRef])\n\n useSubscribe(enhancerMakeObservable)\n}\n","import {\n hashKey,\n type QueryClient,\n type QueryKey,\n useQueryClient,\n} from \"@tanstack/react-query\"\nimport { createContext, memo, useContext, useEffect, useState } from \"react\"\nimport {\n fromEvent,\n type Observable,\n type Subscription,\n share,\n takeUntil,\n} from \"rxjs\"\n\ntype CacheEntry = {\n queryKey: QueryKey\n query$: Observable<unknown>\n signal: AbortSignal\n sub: Subscription | undefined\n isCompleted: boolean\n lastData: { value: unknown } | undefined\n}\n\nexport class QueryClient$ {\n public readonly queryMap: Map<string, CacheEntry> = new Map()\n\n constructor(public readonly queryClient: QueryClient) {}\n\n getQuery(queryHash: string) {\n return this.queryMap.get(queryHash)\n }\n\n setQuery(\n queryKey: QueryKey,\n query$: Observable<unknown>,\n signal: AbortSignal,\n ) {\n const queryHash = hashKey(queryKey)\n\n const sharedQuery$ = query$.pipe(\n takeUntil(fromEvent(signal, \"abort\")),\n share(),\n )\n\n const cacheEntry: CacheEntry = {\n queryKey,\n query$: sharedQuery$,\n signal,\n sub: undefined,\n isCompleted: false,\n lastData: undefined,\n }\n\n this.queryMap.set(queryHash, cacheEntry)\n\n const sub = sharedQuery$.subscribe({\n next: (data) => {\n const entry = this.queryMap.get(queryHash)\n\n if (entry) {\n entry.lastData = { value: data }\n }\n },\n complete: () => {\n if (this.queryMap.get(queryHash) === cacheEntry) {\n this.deleteQuery(queryHash)\n }\n },\n })\n\n cacheEntry.sub = sub\n\n return cacheEntry\n }\n\n deleteQuery(\n queryHash: string,\n { cancelQuery = false }: { cancelQuery?: boolean } = {},\n ) {\n const entry = this.queryMap.get(queryHash)\n\n if (!entry) return\n\n entry.isCompleted = true\n\n this.queryMap.delete(queryHash)\n\n if (entry.sub) {\n entry.sub.unsubscribe()\n entry.sub = undefined\n }\n\n /**\n * Only cancel queries whose stream already emitted at least once.\n * Those are \"live\" streams stuck in the take(1) refetch loop and\n * need an explicit cancel so the pending queryFnAsync promise\n * settles. One-shot observables (used like promises) that haven't\n * resolved yet should keep react-query's default behavior: stay\n * pending and resolve naturally even after unmount.\n *\n * Skipped on natural completion (cancelQuery=false) because the\n * in-flight queryFnAsync promise is about to resolve with the\n * final value — cancelling it would reject it prematurely.\n */\n if (cancelQuery && !entry.signal.aborted && entry.lastData !== undefined) {\n this.queryClient?.cancelQueries({\n queryKey: entry.queryKey,\n exact: true,\n })\n }\n }\n\n destroy() {\n this.queryMap.forEach((_, key) => {\n this.deleteQuery(key, { cancelQuery: true })\n })\n }\n}\n\nexport const Context = createContext<QueryClient$ | undefined>(undefined)\n\n/**\n * Must render **inside** TanStack `QueryClientProvider` (or equivalent).\n * Subscribes to that client's query cache so when a query is removed\n * (including via `queryClient.clear()`), matching `useQuery$` observable\n * entries are dropped.\n */\nexport const QueryClientProvider$ = memo(function QueryClientProvider$({\n children,\n client: _client,\n}: {\n children: React.ReactNode\n client?: QueryClient$\n}) {\n const queryClient = useQueryClient()\n const [client] = useState(() => _client ?? new QueryClient$(queryClient))\n\n useEffect(\n function subscribeToQueryCache() {\n return queryClient.getQueryCache().subscribe((event) => {\n const activeObservers = event.query.getObserversCount()\n\n /**\n * When all observers unmount we need to delete the query from the cache\n * because if the query contains a stream, it will continue. Nothing stops it.\n * However this is only valid when there is no more observers.\n */\n if (event.type === \"observerRemoved\" && activeObservers === 0) {\n client.deleteQuery(event.query.queryHash, { cancelQuery: true })\n }\n })\n },\n [queryClient, client],\n )\n\n useEffect(() => {\n return () => {\n client.destroy()\n }\n }, [client])\n\n return <Context.Provider value={client}>{children}</Context.Provider>\n})\n\nexport const useQueryClient$ = () => {\n const client = useContext(Context)\n\n if (!client) {\n throw new Error(\n \"useReactJrxQueryClient must be used within a ReactJrxQueryProvider\",\n )\n }\n\n return client\n}\n","import {\n type DefaultError,\n type QueryClient,\n type UseMutationOptions,\n type UseMutationResult,\n useMutation,\n} from \"@tanstack/react-query\"\nimport { useEffect } from \"react\"\nimport { BehaviorSubject, type Observable, take } from \"rxjs\"\nimport { useConstant } from \"../utils/react/useConstant\"\n\nexport type UseMutation$Options<\n TData = unknown,\n TError = DefaultError,\n TVariables = void,\n TOnMutateResult = unknown,\n> = Omit<\n UseMutationOptions<TData, TError, TVariables, TOnMutateResult>,\n \"mutationFn\"\n> & {\n mutationFn: ((variables: TVariables) => Observable<TData>) | Observable<TData>\n}\n\nexport function useMutation$<\n TData = unknown,\n TError = DefaultError,\n TVariables = void,\n TOnMutateResult = unknown,\n>(\n options: UseMutation$Options<TData, TError, TVariables, TOnMutateResult>,\n queryClient?: QueryClient,\n) {\n const stateSubject = useConstant(\n () =>\n new BehaviorSubject<\n Pick<\n UseMutationResult<TData, TError, TVariables, TOnMutateResult>,\n \"status\" | \"isPending\" | \"isError\" | \"isSuccess\" | \"isIdle\"\n >\n >({\n status: \"idle\",\n isPending: false,\n isError: false,\n isSuccess: false,\n isIdle: true,\n }),\n )\n\n const result = useMutation<TData, TError, TVariables, TOnMutateResult>(\n {\n ...options,\n mutationFn: (variables: TVariables) => {\n let lastData: { value: TData } | undefined\n\n return new Promise<TData>((resolve, reject) => {\n const source =\n typeof options.mutationFn === \"function\"\n ? options.mutationFn(variables)\n : options.mutationFn\n\n source.pipe(take(1)).subscribe({\n next: (data) => {\n lastData = { value: data }\n },\n error: (error) => {\n reject(error)\n },\n complete: () => {\n if (lastData === undefined)\n return reject(new Error(\"Stream completed without any data\"))\n\n resolve(lastData.value)\n },\n })\n })\n },\n },\n queryClient,\n )\n\n const { status, isPending, isError, isSuccess, isIdle } = result\n\n useEffect(() => {\n stateSubject.next({\n status,\n isPending,\n isError,\n isSuccess,\n isIdle,\n })\n }, [status, isPending, isError, isSuccess, isIdle, stateSubject])\n\n return { ...result, state$: stateSubject }\n}\n","import {\n type DefaultError,\n type MutationKey,\n type QueryClient,\n useQueryClient,\n} from \"@tanstack/react-query\"\nimport { useCallback } from \"react\"\nimport {\n BehaviorSubject,\n filter,\n first,\n noop,\n type Subject,\n switchMap,\n} from \"rxjs\"\nimport { type UseMutation$Options, useMutation$ } from \"./useMutation$\"\n\nexport function useConcatMutation$<\n TData = unknown,\n TError = DefaultError,\n TVariables = void,\n TContext = unknown,\n>(\n {\n onMutate,\n ...options\n }: UseMutation$Options<TData | null, TError, TVariables, TContext> & {\n mutationKey: MutationKey\n },\n queryClient?: QueryClient,\n) {\n const client = useQueryClient(queryClient)\n type TDataOrNull = TData | null\n const mutationKey = options.mutationKey\n\n const { mutateAsync, ...rest } = useMutation$<\n TDataOrNull,\n TError,\n { variables: TVariables; ready$: Subject<boolean> },\n TContext\n >(\n {\n ...options,\n onMutate: onMutate\n ? ({ variables }, ...rest) => onMutate(variables, ...rest)\n : undefined,\n onSuccess(data, { variables }, ...rest) {\n return options.onSuccess?.(data, variables, ...rest)\n },\n onError(error, { variables }, ...rest) {\n return options.onError?.(error, variables, ...rest)\n },\n onSettled(data, error, { variables }, ...rest) {\n return options.onSettled?.(data, error, variables, ...rest)\n },\n mutationFn: ({ ready$, variables }) => {\n const source =\n typeof options.mutationFn === \"function\"\n ? options.mutationFn(variables)\n : options.mutationFn\n\n return ready$.pipe(\n filter((isReady) => isReady),\n first(),\n switchMap(() => source),\n )\n },\n },\n queryClient,\n )\n\n const mutateAsyncConcat = useCallback(\n async (variables: TVariables) => {\n const mutations = client.getMutationCache().findAll({\n mutationKey,\n exact: true,\n })\n\n const subject = new BehaviorSubject(false)\n\n const result = mutateAsync({ variables, ready$: subject })\n\n await Promise.all(\n mutations.map((mutation) => mutation.continue().catch(noop)),\n )\n\n subject.next(true)\n\n return await result.finally(() => {\n subject.complete()\n })\n },\n [mutateAsync, client, mutationKey],\n )\n\n const mutateConcat = useCallback(\n (variables: TVariables) => {\n mutateAsyncConcat(variables).catch(noop)\n },\n [mutateAsyncConcat],\n )\n\n return { ...rest, mutate: mutateConcat, mutateAsync: mutateAsyncConcat }\n}\n","import {\n CancelledError,\n hashKey,\n type QueryClient,\n type QueryFunctionContext,\n type QueryKey,\n skipToken,\n} from \"@tanstack/react-query\"\nimport { defer, delay, type Observable, take } from \"rxjs\"\nimport type { QueryClient$ } from \"./QueryClientProvider$\"\n\nexport type ObservableQueryFn<\n TQueryFnData = unknown,\n TQueryKey extends QueryKey = QueryKey,\n> =\n | ((context: QueryFunctionContext<TQueryKey>) => Observable<TQueryFnData>)\n | typeof skipToken\n | Observable<TQueryFnData>\n\n/**\n * Bridges an Observable-based `queryFn` to the Promise-based `queryFn`\n * expected by TanStack Query. Shared by `useQuery$` and `useQueries$` so\n * both rely on the exact same subscription, caching and cancellation logic.\n */\nexport function createObservableQueryFn<\n TQueryFnData = unknown,\n TQueryKey extends QueryKey = QueryKey,\n>(\n queryClient$: QueryClient$,\n queryClient: QueryClient | undefined,\n queryFn: ObservableQueryFn<TQueryFnData, TQueryKey> | undefined,\n) {\n if (queryFn === skipToken || queryFn === undefined) {\n return queryFn\n }\n\n return (context: QueryFunctionContext<TQueryKey>) => {\n return new Promise<TQueryFnData>((resolve, reject) => {\n const getSource = () =>\n defer(() =>\n typeof queryFn === \"function\" ? queryFn(context) : queryFn,\n )\n\n const queryHash = hashKey(context.queryKey)\n\n const queryAlreadyInCache = queryClient$.getQuery(queryHash)\n\n const queryCacheEntry =\n queryAlreadyInCache ??\n queryClient$.setQuery(context.queryKey, getSource(), context.signal)\n\n const refetchIfNeeded = () => {\n if (queryCacheEntry?.isCompleted === false) {\n setTimeout(() => {\n /**\n * Re-check at firing time: the entry may have been torn down\n * (deleteQuery) between scheduling and execution. This happens\n * when the component unmounts right after a synchronous resolve,\n * because both refetchIfNeeded and the deferred deleteQuery use\n * setTimeout(fn, 0) and their execution order is\n * non-deterministic. Without this guard the stale callback\n * would trigger queryFnAsync on a defunct entry, creating an\n * orphaned take(1) subscriber that later resolves with\n * accumulated old data.\n */\n if (queryCacheEntry?.isCompleted) return\n\n queryClient?.refetchQueries({\n queryKey: context.queryKey,\n exact: true,\n })\n })\n }\n }\n\n // if the observable returns results synchronously\n if (!queryAlreadyInCache && queryCacheEntry.lastData !== undefined) {\n resolve(queryCacheEntry.lastData.value as TQueryFnData)\n\n refetchIfNeeded()\n\n return\n }\n\n const query$ = queryCacheEntry.query$\n\n query$\n .pipe(\n take(1),\n /**\n * If several values are emitted during this delay, we will only\n * keep the last value. This is unfortunate but it's the best we can do\n * for now.\n */\n delay(1),\n )\n .subscribe({\n error: (error) => {\n return reject(error)\n },\n complete: () => {\n if (queryCacheEntry?.lastData === undefined) {\n if (queryCacheEntry.signal.aborted) {\n // query naturally cancelled by external factors.\n return reject(new CancelledError())\n }\n\n console.warn(\n `cancelled due to stream completing without data for query ${queryHash}`,\n )\n\n /**\n * A stream that completes without data is considered cancelled.\n * This is the expected behavior if someone for example adds a takeUntil().\n * This also allow the query to be retried automatically instead of\n * resolving as success with `undefined` (which is no-op for react-query)\n * or erroring with arbitrary value.\n */\n return reject(new CancelledError())\n }\n\n resolve(queryCacheEntry.lastData.value as TQueryFnData)\n\n refetchIfNeeded()\n },\n })\n })\n }\n}\n","import {\n type DefaultError,\n type QueriesPlaceholderDataFunction,\n type QueryClient,\n type QueryKey,\n type UseQueryOptions,\n type UseQueryResult,\n useQueries,\n useQueryClient,\n} from \"@tanstack/react-query\"\nimport {\n createObservableQueryFn,\n type ObservableQueryFn,\n} from \"./createObservableQueryFn\"\nimport { useQueryClient$ } from \"./QueryClientProvider$\"\n\ntype MAXIMUM_DEPTH = 20\n\ntype UseQuery$OptionsForUseQueries<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n> = Omit<\n UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n \"queryFn\" | \"placeholderData\"\n> & {\n queryFn?: ObservableQueryFn<TQueryFnData, TQueryKey>\n placeholderData?: TQueryFnData | QueriesPlaceholderDataFunction<TQueryFnData>\n}\n\ntype GetUseQuery$Options<T> = T extends {\n queryFn?: ObservableQueryFn<infer TQueryFnData, infer TQueryKey>\n // biome-ignore lint/suspicious/noExplicitAny: select can narrow from any source shape\n select?: (data: any) => infer TData\n}\n ? UseQuery$OptionsForUseQueries<\n TQueryFnData,\n DefaultError,\n unknown extends TData ? TQueryFnData : TData,\n TQueryKey extends QueryKey ? TQueryKey : QueryKey\n >\n : UseQuery$OptionsForUseQueries\n\ntype GetUseQuery$Result<T> = T extends {\n // biome-ignore lint/suspicious/noExplicitAny: queryFnData is inferred from the source shape\n queryFn?: ObservableQueryFn<infer TQueryFnData, any>\n // biome-ignore lint/suspicious/noExplicitAny: select can narrow from any source shape\n select?: (data: any) => infer TData\n}\n ? UseQueryResult<unknown extends TData ? TQueryFnData : TData, DefaultError>\n : UseQueryResult\n\n/**\n * Mirrors TanStack's `QueriesOptions`, but each query takes an Observable-based\n * `queryFn` (see {@link ObservableQueryFn}) instead of a Promise-based one. The\n * recursion preserves per-element tuple inference at the call site.\n */\nexport type QueriesOptions$<\n // biome-ignore lint/suspicious/noExplicitAny: mirrors TanStack's QueriesOptions constraint\n T extends Array<any>,\n // biome-ignore lint/suspicious/noExplicitAny: mirrors TanStack's QueriesOptions constraint\n TResults extends Array<any> = [],\n TDepth extends ReadonlyArray<number> = [],\n> = TDepth[\"length\"] extends MAXIMUM_DEPTH\n ? Array<UseQuery$OptionsForUseQueries>\n : T extends []\n ? []\n : T extends [infer Head]\n ? [...TResults, GetUseQuery$Options<Head>]\n : T extends [infer Head, ...infer Tails]\n ? QueriesOptions$<\n [...Tails],\n [...TResults, GetUseQuery$Options<Head>],\n [...TDepth, 1]\n >\n : ReadonlyArray<unknown> extends T\n ? T\n : Array<UseQuery$OptionsForUseQueries>\n\n/**\n * Mirrors TanStack's `QueriesResults`, mapping each Observable-based query\n * option to its `UseQueryResult`.\n */\nexport type QueriesResults$<\n // biome-ignore lint/suspicious/noExplicitAny: mirrors TanStack's QueriesResults constraint\n T extends Array<any>,\n // biome-ignore lint/suspicious/noExplicitAny: mirrors TanStack's QueriesResults constraint\n TResults extends Array<any> = [],\n TDepth extends ReadonlyArray<number> = [],\n> = TDepth[\"length\"] extends MAXIMUM_DEPTH\n ? Array<UseQueryResult>\n : T extends []\n ? []\n : T extends [infer Head]\n ? [...TResults, GetUseQuery$Result<Head>]\n : T extends [infer Head, ...infer Tails]\n ? QueriesResults$<\n [...Tails],\n [...TResults, GetUseQuery$Result<Head>],\n [...TDepth, 1]\n >\n : { [K in keyof T]: GetUseQuery$Result<T[K]> }\n\nexport function useQueries$<\n // biome-ignore lint/suspicious/noExplicitAny: mirrors TanStack's useQueries constraint\n T extends Array<any>,\n TCombinedResult = QueriesResults$<T>,\n>(\n {\n queries,\n ...options\n }: {\n queries: readonly [...QueriesOptions$<T>]\n combine?: (result: QueriesResults$<T>) => TCombinedResult\n subscribed?: boolean\n },\n queryClient?: QueryClient,\n): TCombinedResult {\n const _queryClient = useQueryClient(queryClient)\n const queryClient$ = useQueryClient$()\n\n const transformedQueries = queries.map(({ queryFn, ...query }) => ({\n ...query,\n queryFn: createObservableQueryFn(queryClient$, _queryClient, queryFn),\n }))\n\n return useQueries(\n {\n /**\n * The Observable `queryFn` has been bridged to a Promise `queryFn`, so\n * `transformedQueries` matches TanStack's expected shape at runtime, but\n * the mapped tuple type is widened by `Array.prototype.map` and can't be\n * re-narrowed without the cast.\n */\n queries: transformedQueries as Parameters<\n typeof useQueries<T, TCombinedResult>\n >[0][\"queries\"],\n combine: options.combine as\n | ((result: unknown) => TCombinedResult)\n | undefined,\n subscribed: options.subscribed,\n },\n queryClient,\n )\n}\n","import {\n type DefaultError,\n type QueryClient,\n type QueryKey,\n type UseQueryOptions,\n useQuery,\n useQueryClient,\n} from \"@tanstack/react-query\"\nimport {\n createObservableQueryFn,\n type ObservableQueryFn,\n} from \"./createObservableQueryFn\"\nimport { useQueryClient$ } from \"./QueryClientProvider$\"\n\nexport function useQuery$<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n>(\n {\n queryFn,\n ...options\n }: Omit<\n UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n \"queryFn\"\n > & {\n queryFn: ObservableQueryFn<TQueryFnData, TQueryKey>\n },\n queryClient?: QueryClient,\n) {\n const _queryClient = useQueryClient(queryClient)\n const queryClient$ = useQueryClient$()\n\n const result = useQuery<TQueryFnData, TError, TData, TQueryKey>(\n {\n ...options,\n queryFn: createObservableQueryFn(queryClient$, _queryClient, queryFn),\n },\n queryClient,\n )\n\n return result\n}\n","import type { DefaultError, QueryClient } from \"@tanstack/react-query\"\nimport { useCallback } from \"react\"\nimport {\n defaultIfEmpty,\n first,\n fromEvent,\n ignoreElements,\n merge,\n tap,\n} from \"rxjs\"\nimport { useRefOnce } from \"../utils\"\nimport { type UseMutation$Options, useMutation$ } from \"./useMutation$\"\n\nexport class SwitchMutationCancelError extends Error {\n constructor(message = \"Mutation canceled\") {\n super(message)\n this.name = \"SwitchMutationCancelError\"\n }\n}\n\nexport function useSwitchMutation$<\n TData = unknown,\n TError = DefaultError,\n TVariables = void,\n TOnMutateResult = unknown,\n>(\n {\n mutationFn,\n onMutate,\n onError,\n onSettled,\n ...options\n }: UseMutation$Options<TData | null, TError, TVariables, TOnMutateResult>,\n queryClient?: QueryClient,\n) {\n const previousMutationCancelRef = useRefOnce(() => new AbortController())\n type TDataOrNull = TData | null\n\n const { mutate, mutateAsync, ...rest } = useMutation$<\n TDataOrNull,\n TError,\n { variables: TVariables; abort: AbortSignal },\n TOnMutateResult\n >(\n {\n ...options,\n mutationFn: useCallback(\n ({\n variables,\n abort,\n }: {\n variables: TVariables\n abort: AbortSignal\n }) => {\n if (abort.aborted) {\n throw new SwitchMutationCancelError()\n }\n\n const source =\n typeof mutationFn === \"function\"\n ? mutationFn(variables)\n : mutationFn\n\n return merge(\n source,\n fromEvent(abort, \"abort\").pipe(\n tap(() => {\n throw new SwitchMutationCancelError()\n }),\n ignoreElements(),\n ),\n ).pipe(first(), defaultIfEmpty(null))\n },\n [mutationFn],\n ),\n onMutate: onMutate\n ? ({ variables }, ...rest) => {\n return onMutate(variables, ...rest)\n }\n : undefined,\n onSuccess: (data, { variables }, ...rest) => {\n return options.onSuccess?.(data, variables, ...rest)\n },\n onError: (error, { variables }, ...rest) => {\n return onError?.(error, variables, ...rest)\n },\n onSettled: (data, error, { variables }, ...rest) => {\n return onSettled?.(data, error, variables, ...rest)\n },\n },\n queryClient,\n )\n\n const mutateSwitch = useCallback(\n (variables: TVariables) => {\n previousMutationCancelRef.current.abort()\n previousMutationCancelRef.current = new AbortController()\n\n return mutate({\n variables,\n abort: previousMutationCancelRef.current.signal,\n })\n },\n [mutate, previousMutationCancelRef],\n )\n\n const mutateAsyncSwitch = useCallback(\n (variables: TVariables) => {\n previousMutationCancelRef.current.abort()\n previousMutationCancelRef.current = new AbortController()\n\n return mutateAsync({\n variables,\n abort: previousMutationCancelRef.current.signal,\n })\n },\n [mutateAsync, previousMutationCancelRef],\n )\n\n return { ...rest, mutate: mutateSwitch, mutateAsync: mutateAsyncSwitch }\n}\n","export const SIGNAL_RESET = Symbol(\"SIGNAL_RESET\")\n","import type { Adapter } from \"./Adapter\"\n\nexport const createLocalforageAdapter = (forage: {\n getItem: (key: string) => Promise<string | null>\n setItem: (key: string, value: string) => Promise<string>\n}): Adapter => ({\n getItem: async (key: string) => {\n const serializedValue = await forage.getItem(key)\n\n if (!serializedValue) return undefined\n\n return JSON.parse(serializedValue)\n },\n\n setItem: async (key: string, value: unknown) => {\n await forage.setItem(key, JSON.stringify(value))\n },\n\n removeItem: async (_: string) => {},\n\n clear: async () => {},\n})\n","import type { Adapter } from \"./Adapter\"\n\nconst normalizeStore = (store: unknown) => {\n if (!store || typeof store !== \"object\") {\n return undefined\n }\n\n return store\n}\n\n/**\n * Create an adapter which use one unique store entry to store all\n * state. When using many signals it can help with maintenance to keep things\n * tidy.\n */\nconst createSharedStoreAdapter = ({\n adapter,\n key,\n}: {\n adapter: Adapter\n key: string\n}): Adapter => ({\n clear: async () => {\n return await adapter.removeItem(key)\n },\n\n removeItem: async (keyToDelete) => {\n const unsafeStore = await adapter.getItem(key)\n const { [keyToDelete]: toRemove, ...rest } =\n // biome-ignore lint/suspicious/noExplicitAny: TODO\n normalizeStore(unsafeStore) ?? ({} as any)\n\n await adapter.setItem(key, rest)\n },\n\n getItem: async (itemKey: string) => {\n const unsafeStore = await adapter.getItem(key)\n const store = normalizeStore(unsafeStore) ?? {}\n\n if (itemKey in store) {\n return store[itemKey as keyof typeof store]\n }\n\n return undefined\n },\n\n setItem: async (itemKey: string, value: unknown) => {\n const unsafeStore = await adapter.getItem(key)\n const store = normalizeStore(unsafeStore) ?? {}\n\n await adapter.setItem(key, { ...store, [itemKey]: value })\n },\n})\n\nexport const createLocalStorageAdapter = ({\n key,\n}: {\n key?: string\n} = {}): Adapter => {\n if (key) {\n return createSharedStoreAdapter({\n adapter: createLocalStorageAdapter(),\n key,\n })\n }\n\n return {\n clear: async () => {\n localStorage.clear()\n },\n\n removeItem: async (key) => {\n localStorage.removeItem(key)\n },\n\n getItem: async (key) => {\n const serializedValue = localStorage.getItem(key)\n\n if (!serializedValue) return undefined\n\n return JSON.parse(serializedValue)\n },\n\n setItem: async (key, value) => {\n localStorage.setItem(key, JSON.stringify(value))\n },\n }\n}\n","import { BehaviorSubject } from \"rxjs\"\nimport { SIGNAL_RESET } from \"./constants\"\n\n/**\n * Distributive helper to validate the shape of the updater function\n * and prevent covariance. Distributes over both T and U so union state\n * types work (updater can return any member of the union).\n */\n// biome-ignore lint/suspicious/noExplicitAny: distributive conditional over U and T for union support\ntype ValidateShape<T, U> = U extends any\n ? // biome-ignore lint/suspicious/noExplicitAny: distributive over T\n T extends any\n ? U extends T\n ? U extends object\n ? { [K in keyof U]: K extends keyof T ? T[K] : never }\n : U\n : never\n : never\n : never\n\n// biome-ignore lint/suspicious/noExplicitAny: TODO\nexport type SignalValue<T extends Signal<any, any>> = T[\"value\"]\n\nexport type SignalWithKey<T> = Signal<T> & {\n key: string\n}\n\nexport class Signal<\n T,\n K extends string | undefined = undefined,\n> extends BehaviorSubject<T> {\n constructor(\n public config: {\n default: T\n key: K\n },\n ) {\n super(config.default)\n }\n\n update = <U>(\n valueOrUpdater:\n | ((prev: T) => U & ValidateShape<T, U>)\n // biome-ignore lint/complexity/noBannedTypes: TODO\n | (T extends Function ? never : T)\n | typeof SIGNAL_RESET,\n ): void => {\n if (valueOrUpdater === SIGNAL_RESET) {\n super.next(this.config.default)\n } else if (typeof valueOrUpdater === \"function\") {\n const updater = valueOrUpdater as (prev: T) => T\n\n super.next(updater(this.value))\n } else {\n super.next(valueOrUpdater as T)\n }\n }\n\n /**\n * @deprecated Use `next` instead\n */\n setValue = this.update.bind(this)\n\n /**\n * @deprecated Use `this` instead\n */\n get subject() {\n return this\n }\n\n get key() {\n return this.config.key\n }\n}\n\nexport class VirtualSignal<T> {\n constructor(public config: { default: T }) {}\n}\n// biome-ignore lint/complexity/noBannedTypes: TODO\nexport function signal(config: {}): Signal<undefined, undefined>\n\nexport function signal<T = undefined, K extends string = string>(config: {\n key: K\n}): Signal<T | undefined, K>\n\nexport function signal<T, K extends string = string>(config: {\n key: K\n default: T\n}): Signal<T, K>\n\nexport function signal<T>(config: {\n key?: undefined\n}): Signal<T | undefined, undefined>\n\nexport function signal<T>(config: {\n key?: undefined\n default: T\n}): Signal<T, undefined>\n\nexport function signal<K extends string>(config: {\n key: K\n default?: undefined\n}): Signal<undefined, K>\n\nexport function signal<T, K extends string | undefined = undefined>(\n config: { default?: T; key?: K } = {},\n) {\n return new Signal({\n key: undefined,\n ...config,\n default: config.default ?? undefined,\n })\n}\n\nexport function virtualSignal<T>(config: {\n default: T\n key?: string\n}): VirtualSignal<T> {\n return new VirtualSignal(config)\n}\n","import { BehaviorSubject } from \"rxjs\"\nimport { Signal, type VirtualSignal } from \"./Signal\"\n\nexport class SignalContext {\n /**\n * items only get added as they are created. The only time we should cleanup\n * are on context destroy. This is to ensure later re-use of virtual signals\n * return the same persisted state.\n */\n // biome-ignore lint/suspicious/noExplicitAny: TODO\n signals = new BehaviorSubject(new Map<VirtualSignal<unknown>, Signal<any>>())\n\n public isDestroyed = false\n\n getOrCreateSignal<T>(virtualSignal: VirtualSignal<T>): Signal<T> {\n const existingSignal = this.signals.value.get(virtualSignal)\n\n if (existingSignal) {\n return existingSignal as Signal<T>\n }\n\n const newSignal = new Signal<T>({ ...virtualSignal.config, key: undefined })\n\n this.signals.value.set(virtualSignal, newSignal)\n this.signals.next(this.signals.value)\n\n return newSignal\n }\n\n destroy() {\n this.signals.value.forEach((signal) => {\n signal.complete()\n })\n this.signals.value.clear()\n this.signals.complete()\n this.isDestroyed = true\n }\n}\n","import { createContext, memo, useContext, useEffect, useState } from \"react\"\nimport { useRefOnce } from \"../../utils/react/useRefOnce\"\nimport type { VirtualSignal } from \"../Signal\"\nimport { SignalContext } from \"../SignalContext\"\n\nexport type SignalContextType = SignalContext\n\nexport const SignalReactContext = createContext<SignalContextType>(\n new SignalContext(),\n)\n\nexport const SignalContextProvider = memo(\n ({ children }: { children: React.ReactNode }) => {\n const signalContextRef = useRefOnce<SignalContextType>(\n () => new SignalContext(),\n )\n const signalContext = signalContextRef.current\n const [isDestroyed, setIsDestroyed] = useState(false)\n\n if (isDestroyed) {\n signalContextRef.current = new SignalContext()\n setIsDestroyed(false)\n }\n\n const value = signalContext\n\n useEffect(() => {\n return () => {\n signalContextRef.current?.destroy()\n // force re-render\n setIsDestroyed(true)\n }\n }, [signalContextRef])\n\n return (\n <SignalReactContext.Provider value={value}>\n {children}\n </SignalReactContext.Provider>\n )\n },\n)\n\nexport const useSignalContext = () => {\n const value = useContext(SignalReactContext)\n\n return value\n}\n\nexport const useMakeOrRetrieveSignal = (\n virtualSignal?: VirtualSignal<unknown>,\n) => {\n const signalContext = useSignalContext()\n\n const signal = virtualSignal\n ? signalContext.getOrCreateSignal(virtualSignal)\n : undefined\n\n return signal\n}\n","export function isShallowEqual<A, B>(objA: A, objB: B): boolean {\n // Check if both objects are null or undefined\n if (objA === null || objA === undefined || objB === undefined) {\n // biome-ignore lint/suspicious/noExplicitAny: TODO\n return (objA as any) === (objB as any)\n }\n\n // Check if both objects are primitives\n if (typeof objA !== \"object\" || typeof objB !== \"object\") {\n // biome-ignore lint/suspicious/noExplicitAny: TODO\n return (objA as any) === (objB as any)\n }\n\n // Check if both objects have the same prototype\n if (objA.constructor !== objB?.constructor) {\n return false\n }\n\n // Check if both objects have the same keys\n const keysA = Object.keys(objA) as Array<keyof A>\n const keysB = Object.keys(objB) as Array<keyof A>\n\n if (keysA.length !== keysB.length) {\n return false\n }\n\n // Check if the values of the keys are equal\n for (const key of keysA) {\n // biome-ignore lint/suspicious/noPrototypeBuiltins: TODO\n // biome-ignore lint/suspicious/noExplicitAny: TODO\n if (!objB.hasOwnProperty(key) || objA[key] !== (objB as any)[key]) {\n return false\n }\n }\n\n // If all checks pass, the objects are considered shallowly equal\n return true\n}\n","export const IDENTIFIER_PERSISTENCE_KEY = \"__reactjrx\"\n","import { catchError, from, of, switchMap } from \"rxjs\"\nimport type { Adapter } from \"./adapters/Adapter\"\nimport { IDENTIFIER_PERSISTENCE_KEY } from \"./constants\"\nimport type { PersistenceEntry, SignalPersistenceConfig } from \"./types\"\n\nexport const getNormalizedPersistanceValue = (unknownValue: unknown) => {\n if (\n typeof unknownValue === \"object\" &&\n unknownValue !== null &&\n IDENTIFIER_PERSISTENCE_KEY in unknownValue &&\n unknownValue[IDENTIFIER_PERSISTENCE_KEY] === IDENTIFIER_PERSISTENCE_KEY\n ) {\n return unknownValue as PersistenceEntry\n }\n\n return undefined\n}\n\nexport const persistValue = ({\n adapter,\n config,\n}: {\n adapter: Adapter\n // biome-ignore lint/suspicious/noExplicitAny: TODO\n config: SignalPersistenceConfig<any>\n}) => {\n const { signal, version } = config\n const state = signal.getValue()\n\n const value = {\n value: state,\n [IDENTIFIER_PERSISTENCE_KEY]: IDENTIFIER_PERSISTENCE_KEY,\n migrationVersion: version,\n } satisfies PersistenceEntry\n\n if (process.env.NODE_ENV === \"development\") {\n console.log(\n \"[reactjrx][state][persistance]:\",\n \"Persist value\",\n value,\n `for signal ${signal.config.key}`,\n )\n }\n\n return from(adapter.setItem(signal.config.key, value)).pipe(\n catchError((e) => {\n console.error(e)\n\n return of(null)\n }),\n )\n}\n\nexport function hydrateValueToSignal({\n adapter,\n config,\n}: {\n adapter: Adapter\n // biome-ignore lint/suspicious/noExplicitAny: TODO\n config: SignalPersistenceConfig<any>\n}) {\n const { hydrate = ({ value }) => value, signal, version } = config\n\n return from(adapter.getItem(signal.config.key)).pipe(\n switchMap((value) => {\n const normalizedValue = getNormalizedPersistanceValue(value)\n\n if (!normalizedValue) return of(value)\n\n const storedVersionIsInvalid =\n typeof normalizedValue.migrationVersion !== \"number\"\n\n const signalVersionIsSuperior =\n normalizedValue.migrationVersion !== undefined &&\n version > normalizedValue.migrationVersion\n\n if (\n storedVersionIsInvalid ||\n signalVersionIsSuperior ||\n normalizedValue.value === undefined\n ) {\n return of(value)\n }\n\n const correctVersionValue = normalizedValue.value\n\n if (process.env.NODE_ENV === \"development\") {\n console.log(\n \"[reactjrx][state][persistance]:\",\n \"Hydrate value\",\n normalizedValue,\n `for signal ${signal.config.key}`,\n )\n }\n\n signal.setValue(hydrate({ value: correctVersionValue, version }))\n\n return of(value)\n }),\n )\n}\n","import {\n asyncScheduler,\n catchError,\n EMPTY,\n from,\n map,\n merge,\n of,\n share,\n switchMap,\n tap,\n throttleTime,\n zip,\n} from \"rxjs\"\nimport type { Signal } from \"../Signal\"\nimport type { Adapter } from \"./adapters/Adapter\"\nimport { hydrateValueToSignal, persistValue } from \"./helpers\"\nimport type { SignalPersistenceConfig } from \"./types\"\n\nexport function persistSignals({\n entries = [],\n onHydrated,\n adapter,\n}: {\n // biome-ignore lint/suspicious/noExplicitAny: TODO\n entries: Array<SignalPersistenceConfig<Signal<any, string>>>\n /**\n * Triggered after first successful hydrate\n */\n onHydrated?: () => void\n /**\n * Requires a stable instance otherwise the hydration\n * process will start again. This is useful when you\n * need to change adapter during runtime.\n */\n adapter: Adapter\n}) {\n const signalsHydrated$ =\n entries.length === 0\n ? of([])\n : zip(\n ...entries.map((config) =>\n hydrateValueToSignal({\n adapter,\n config,\n }),\n ),\n )\n\n const isHydrated$ = signalsHydrated$.pipe(\n tap(onHydrated),\n catchError((error) => {\n console.error(\"Unable to hydrate\", error)\n\n return EMPTY\n }),\n share(),\n )\n\n /**\n * Start persisting to the current adapter\n * as soon as signals are hydrated. Will stop\n * whenever hydration process starts again\n */\n const persisted$ = isHydrated$.pipe(\n switchMap(() =>\n merge(\n ...entries.map((config) =>\n config.signal.pipe(\n throttleTime(500, asyncScheduler, {\n trailing: true,\n }),\n switchMap(() =>\n from(\n persistValue({\n adapter,\n config,\n }),\n ),\n ),\n ),\n ),\n ),\n ),\n )\n\n return merge(\n isHydrated$.pipe(\n map(() => ({\n type: \"hydrated\" as const,\n })),\n ),\n persisted$.pipe(\n map(() => ({\n type: \"persisted\" as const,\n })),\n ),\n )\n}\n","import { concatMap, merge, of, scan, switchMap } from \"rxjs\"\nimport { useLiveBehaviorSubject } from \"../../binding/useLiveBehaviorSubject\"\nimport { useObserve } from \"../../binding/useObserve/useObserve\"\nimport { useLiveRef } from \"../../utils/react/useLiveRef\"\nimport { isShallowEqual } from \"../../utils/shallowEqual\"\nimport type { Adapter } from \"../persistence/adapters/Adapter\"\nimport { persistSignals } from \"../persistence/persistSignals\"\nimport type { SignalPersistenceConfig } from \"../persistence/types\"\n\n/**\n * Make sure to pass stable reference of entries and adapter if you don't\n * intentionally want to start over the process.\n *\n * `isHydrated` will be `true` after the first successful hydration. This value\n * will be reset as soon as the adapter reference changes.\n */\nexport function usePersistSignals({\n entries = [],\n onHydrated,\n adapter,\n}: {\n /**\n * Passing a new list of entries will start over the process\n * once the current one is finished. Use a stable reference to avoid\n * infinite loop.\n */\n\n // biome-ignore lint/suspicious/noExplicitAny: TODO\n entries?: Array<SignalPersistenceConfig<any>>\n /**\n * Triggered after first successful hydrate\n */\n onHydrated?: () => void\n /**\n * Passing a new adapter reference will start over the process\n * once the current one is finished. Use a stable reference to avoid\n * infinite loop.\n */\n adapter?: Adapter\n}): { isHydrated: boolean } {\n const onHydratedRef = useLiveRef(onHydrated)\n const adapterSubject = useLiveBehaviorSubject(adapter)\n const entriesSubject = useLiveBehaviorSubject(entries)\n\n const result = useObserve(\n () => {\n const persistence$ = adapterSubject.pipe(\n switchMap((adapter) => {\n if (!adapter) return of({ type: \"reset\" })\n\n return merge(\n of({ type: \"reset\" }),\n entriesSubject.pipe(\n concatMap((entries) =>\n persistSignals({\n adapter,\n entries,\n onHydrated: () => {\n onHydratedRef.current?.()\n },\n }),\n ),\n ),\n )\n }),\n )\n\n return persistence$.pipe(\n scan(\n (acc, event) => {\n if (event.type === \"reset\") return { isHydrated: false }\n if (event.type === \"hydrated\") return { isHydrated: true }\n\n return acc\n },\n { isHydrated: false as boolean },\n ),\n )\n },\n { defaultValue: { isHydrated: false }, compareFn: isShallowEqual },\n [adapterSubject, entriesSubject],\n )\n\n return result.data\n}\n","import { type Signal, VirtualSignal } from \"../Signal\"\nimport {\n useMakeOrRetrieveSignal,\n useSignalContext,\n} from \"./SignalContextProvider\"\n\nexport function useSignalReference<T>(\n signal: Signal<T> | VirtualSignal<T>,\n): Signal<T> {\n const signalContext = useSignalContext()\n\n if (signal instanceof VirtualSignal && !signalContext) {\n throw new Error(\n \"useSignalValue must be used within a SignalContextProvider\",\n )\n }\n\n return (useMakeOrRetrieveSignal(\n signal instanceof VirtualSignal ? signal : undefined,\n ) ?? signal) as Signal<T>\n}\n","import type { Signal, VirtualSignal } from \"../Signal\"\nimport { useSignalReference } from \"./useSignalReference\"\n\nexport function useSetSignal<T>(signal: Signal<T>): Signal<T>[\"update\"]\nexport function useSetSignal<T>(signal: VirtualSignal<T>): Signal<T>[\"update\"]\nexport function useSetSignal<T>(signal: Signal<T> | VirtualSignal<T>) {\n const finalSignal = useSignalReference(signal)\n\n return finalSignal.update\n}\n","import { useCallback, useRef, useSyncExternalStore } from \"react\"\nimport { skip } from \"rxjs\"\nimport type { Signal, VirtualSignal } from \"../Signal\"\nimport { useSignalReference } from \"./useSignalReference\"\n\nexport type EqualityFn<T> = (a: T, b: T) => boolean\n\nconst defaultEqualityFn: EqualityFn<unknown> = Object.is\n\n/**\n * Subscribe to a signal's current value, with optional projection and equality.\n *\n * - On every render the returned value is `selector(signal.value)` (or\n * `signal.value` when no selector is provided), recomputed only when the\n * signal value, the selector identity, or the signal itself has changed.\n * - The component re-renders whenever the signal emits a value that the\n * `equalityFn` considers different from the previous one.\n * - The hook caches its last result. When the new selector output is\n * considered equal to the previous one (per `equalityFn`), the previous\n * reference is returned, so downstream `useEffect`/`useMemo` dependencies\n * stay stable.\n *\n * @param signal The signal (or `VirtualSignal` resolved through context) to read.\n * @param selector Optional projection of the signal value.\n * @param equalityFn Optional equality function. Defaults to `Object.is`.\n * Pass `isShallowEqual` (or any custom comparator) to opt into reference\n * stability for derived objects.\n */\nexport function useSignalValue<T>(signal: VirtualSignal<T>): T\n\nexport function useSignalValue<T, SelectValue>(\n signal: VirtualSignal<T>,\n selector: (value: T) => SelectValue,\n equalityFn?: EqualityFn<SelectValue>,\n): SelectValue\n\nexport function useSignalValue<T>(signal: Signal<T>): T\n\nexport function useSignalValue<T, SelectValue>(\n signal: Signal<T>,\n selector: (value: T) => SelectValue,\n equalityFn?: EqualityFn<SelectValue>,\n): SelectValue\n\nexport function useSignalValue(\n signal: Signal<unknown> | VirtualSignal<unknown>,\n selector?: (value: unknown) => unknown,\n equalityFn: EqualityFn<unknown> = defaultEqualityFn,\n) {\n const finalSignal = useSignalReference(signal)\n const cacheRef = useRef<{\n hasValue: boolean\n signal: Signal<unknown> | undefined\n selector: ((value: unknown) => unknown) | undefined\n sourceValue: unknown\n value: unknown\n }>({\n hasValue: false,\n signal: undefined,\n selector: undefined,\n sourceValue: undefined,\n value: undefined,\n })\n\n const subscribe = useCallback(\n (onChange: () => void) => {\n /**\n * `Signal` is a `BehaviorSubject` and synchronously emits its current\n * value to new subscribers. `useSyncExternalStore`'s subscribe contract,\n * however, expects `onChange` to fire only on *changes* — the initial\n * value is read separately via `getSnapshot`. Skipping the first\n * emission keeps the contract clean and avoids a redundant\n * post-subscribe snapshot read by React.\n */\n const sub = finalSignal.pipe(skip(1)).subscribe(() => {\n onChange()\n })\n\n return () => {\n sub.unsubscribe()\n }\n },\n [finalSignal],\n )\n\n const getSnapshot = () => {\n const cached = cacheRef.current\n const sourceValue = finalSignal.value\n\n /**\n * Fast path: nothing relevant changed since last call, so we can skip\n * running the selector entirely and return the previously computed value.\n */\n if (\n cached.hasValue &&\n cached.signal === finalSignal &&\n cached.selector === selector &&\n cached.sourceValue === sourceValue\n ) {\n return cached.value\n }\n\n const next = selector ? selector(sourceValue) : sourceValue\n\n /**\n * Reference-stability path: selector ran (because something changed) but\n * its output is considered equal (per `equalityFn`) to the previous one,\n * so we keep the previous reference to avoid spurious re-renders\n * downstream. With the default `Object.is` this rarely kicks in; when the\n * caller opts into a structural comparator (e.g. `isShallowEqual`) this\n * provides referential stability for derived objects.\n */\n if (\n cached.hasValue &&\n cached.signal === finalSignal &&\n equalityFn(cached.value, next)\n ) {\n cacheRef.current = {\n hasValue: true,\n signal: finalSignal,\n selector,\n sourceValue,\n value: cached.value,\n }\n\n return cached.value\n }\n\n cacheRef.current = {\n hasValue: true,\n signal: finalSignal,\n selector,\n sourceValue,\n value: next,\n }\n\n return next\n }\n\n return useSyncExternalStore(subscribe, getSnapshot, getSnapshot)\n}\n","import type { Signal, VirtualSignal } from \"../Signal\"\nimport { useSetSignal } from \"./useSetSignal\"\nimport { useSignalReference } from \"./useSignalReference\"\nimport { useSignalValue } from \"./useSignalValue\"\n\nexport function useSignal<T>(\n signal: VirtualSignal<T>,\n): [T, Signal<T>[\"update\"], Signal<T>]\n\nexport function useSignal<T>(\n signal: Signal<T>,\n): [T, Signal<T>[\"update\"], Signal<T>]\n\nexport function useSignal<T>(\n signal: Signal<T>,\n): [T | undefined, Signal<T>[\"update\"], Signal<T>]\n\nexport function useSignal<T>(signal: Signal<T> | VirtualSignal<T>) {\n const finalSignal = useSignalReference(signal)\n const value = useSignalValue(signal)\n const setValue = useSetSignal(signal)\n\n return [value, setValue, finalSignal] as const\n}\n","import { useConstant } from \"../../utils\"\nimport type { Signal } from \"../Signal\"\nimport { useSignalValue } from \"./useSignalValue\"\n\n// biome-ignore lint/suspicious/noExplicitAny: TODO\nexport const useSignalState = <S extends Signal<any, any>>(\n fn: () => S,\n): [S[\"value\"], S] => {\n const signal = useConstant(fn)\n const value = useSignalValue(signal)\n\n return [value, signal] as const\n}\n"],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -6,6 +6,7 @@ export * from './lib/binding/useSubscribeEffect';
6
6
  export * from './lib/queries/QueryClientProvider$';
7
7
  export * from './lib/queries/useConcatMutation$';
8
8
  export * from './lib/queries/useMutation$';
9
+ export * from './lib/queries/useQueries$';
9
10
  export * from './lib/queries/useQuery$';
10
11
  export * from './lib/queries/useSwitchMutation$';
11
12
  export * from './lib/state/constants';