reactjrx 1.115.0 → 1.115.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs.map +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +68 -68
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../src/lib/utils/isPromiseLike.ts","../src/lib/utils/makeObservable.ts","../src/lib/utils/react/useLiveRef.ts","../src/lib/binding/useObserve.ts","../src/lib/binding/useSubscribe.ts","../src/lib/utils/react/useConstant.ts","../src/lib/binding/useSubject.ts","../src/lib/binding/useObservableCallback.ts","../src/lib/binding/useBehaviorSubject.ts","../src/lib/binding/useObservableState.ts","../src/lib/binding/useLiveBehaviorSubject.ts","../src/lib/binding/useSubscribeEffect.ts","../src/lib/state/constants.ts","../src/lib/state/signal.ts","../src/lib/state/react/useSignalValue.ts","../src/lib/state/react/useSignal.ts","../src/lib/state/persistance/adapters/createLocalforageAdapter.ts","../src/lib/state/persistance/adapters/createLocalStorageAdapter.ts","../src/lib/utils/shallowEqual.ts","../src/lib/state/persistance/constants.ts","../src/lib/state/persistance/helpers.ts","../src/lib/state/persistance/persistSignals.ts","../src/lib/state/react/usePersistSignals.tsx","../src/lib/utils/react/useUnmountObservable.ts","../src/lib/utils/react/useEffectOnce.ts","../src/lib/utils/react/useMount.ts","../src/lib/utils/operators/retryBackoff.ts","../src/lib/utils/isDefined.ts","../src/lib/utils/arrayEqual.ts","../src/lib/utils/isServer.ts","../src/lib/queries/QueryClientProvider$.tsx","../src/lib/queries/useQuery$.ts","../src/lib/queries/useMutation$.ts","../src/lib/queries/useSwitchMutation$.ts","../src/lib/queries/useConcatMutation$.ts"],"sourcesContent":["// biome-ignore lint/suspicious/noExplicitAny: <explanation>\nexport function isPromiseLike<T>(value: T): value is T & Promise<any> {\n\treturn (\n\t\tvalue instanceof Promise ||\n\t\t(value &&\n\t\t\ttypeof value === \"object\" &&\n\t\t\t\"then\" in value &&\n\t\t\ttypeof value.then === \"function\" &&\n\t\t\t\"catch\" in value &&\n\t\t\tvalue.catch === \"function\")\n\t);\n}\n","import { type Observable, defer, from, isObservable, of } from \"rxjs\";\nimport { isPromiseLike } from \"./isPromiseLike\";\n\ntype FnReturnToObservable<T> = T extends Observable<infer ObservedData>\n\t? ObservedData\n\t: T extends Promise<infer ThenData>\n\t\t? ThenData\n\t\t: T;\n\nexport function makeObservable<Data>(\n\tfn: Observable<Data>,\n): () => Observable<Data>;\n\nexport function makeObservable<Data>(fn: Promise<Data>): () => Observable<Data>;\n\nexport function makeObservable<Data>(\n\tfn: Promise<Data> | Observable<Data>,\n): () => Observable<Data>;\n\nexport function makeObservable<Data>(\n\tfn: () => Promise<Data> | Observable<Data>,\n): () => Observable<Data>;\n\n/**\n * Generic factory\n */\nexport function makeObservable<Data>(\n\tfn: () => Promise<Data> | Observable<Data> | Data,\n): () => Observable<Data>;\n\n/**\n * Generic factory\n */\nexport function makeObservable<Data, Params>(\n\tfn: (params: Params) => Data,\n): (params: Params) => Observable<FnReturnToObservable<Data>>;\n\n/**\n * Generic factory OR Observable\n */\nexport function makeObservable<Data, Return>(\n\tfn: 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\tsomething:\n\t\t| ((params: Params) => Observable<Data>)\n\t\t| Promise<Data>\n\t\t| Observable<Data>\n\t\t| ((params: Params) => Promise<Data>)\n\t\t| ((params: Params) => Data)\n\t\t| Data,\n): (params: Params) => Observable<Data> {\n\tif (isObservable(something)) return () => something;\n\n\tif (isPromiseLike(something)) return () => from(something);\n\n\tif (typeof something !== \"function\") return () => of(something);\n\n\tconst somethingAsFunction = something as\n\t\t| ((params: Params) => Observable<Data>)\n\t\t| ((params: Params) => Promise<Data>)\n\t\t| ((params: Params) => Data);\n\n\treturn (params: Params) =>\n\t\tdefer(() => {\n\t\t\tconst result = somethingAsFunction(params);\n\n\t\t\tif (isPromiseLike(result)) {\n\t\t\t\treturn from(result);\n\t\t\t}\n\n\t\t\tif (isObservable(result)) {\n\t\t\t\treturn result;\n\t\t\t}\n\n\t\t\treturn of(result);\n\t\t});\n}\n","import { useMemo, useRef } from \"react\";\n\nexport const useLiveRef = <T>(value: T) => {\n\tconst ref = useRef(value);\n\n\t/**\n\t * We don't update the value on render because of potential\n\t * bug related to react concurrency mode.\n\t * We don't update the value in a useEffect because effects run after\n\t * render and we could maybe? have situation where the ref\n\t * is being called after render but before effect?\n\t * I am not sure of that one.\n\t *\n\t * `useMemo` is a good compromise since it runs during render but before\n\t * repaint. It prevents the concurrency mode issue.\n\t */\n\tuseMemo(() => {\n\t\tref.current = value;\n\t}, [value]);\n\n\treturn ref;\n};\n","import {\n\ttype DependencyList,\n\tuseCallback,\n\tuseRef,\n\tuseSyncExternalStore,\n} from \"react\";\nimport {\n\ttype BehaviorSubject,\n\tEMPTY,\n\ttype Observable,\n\tcatchError,\n\tdistinctUntilChanged,\n\tidentity,\n\tstartWith,\n\ttap,\n} from \"rxjs\";\nimport { makeObservable } from \"../utils/makeObservable\";\nimport { useLiveRef } from \"../utils/react/useLiveRef\";\n\ninterface Option<R = undefined> {\n\tdefaultValue: R;\n\tunsubscribeOnUnmount?: boolean;\n\tcompareFn?: (a: R, b: R) => boolean;\n}\n\nexport function useObserve<T>(source: BehaviorSubject<T>): T;\n\nexport function useObserve<T>(source: Observable<T>): T | undefined;\n\nexport function useObserve<T>(\n\tsource: () => Observable<T>,\n\tdeps: DependencyList,\n): T | undefined;\n\nexport function useObserve<T>(\n\tsource: () => Observable<T> | undefined,\n\tdeps: DependencyList,\n): T | undefined;\n\nexport function useObserve<T>(source: Observable<T>, options: Option<T>): T;\n\nexport function useObserve<T>(\n\tsource: () => Observable<T>,\n\toptions: Option<T>,\n\tdeps: DependencyList,\n): T;\n\nexport function useObserve<T>(\n\tsource$: Observable<T> | (() => Observable<T> | undefined),\n\toptionsOrDeps?: Option<T> | DependencyList,\n\tmaybeDeps?: DependencyList,\n): T {\n\tconst options =\n\t\toptionsOrDeps != null && !Array.isArray(optionsOrDeps)\n\t\t\t? (optionsOrDeps as Option<T>)\n\t\t\t: ({\n\t\t\t\t\tdefaultValue: undefined,\n\t\t\t\t\tunsubscribeOnUnmount: true,\n\t\t\t\t\tcompareFn: undefined,\n\t\t\t\t} satisfies Option<undefined>);\n\tconst deps =\n\t\t!maybeDeps && Array.isArray(optionsOrDeps)\n\t\t\t? optionsOrDeps\n\t\t\t: typeof source$ === \"function\"\n\t\t\t\t? (maybeDeps ?? [])\n\t\t\t\t: [source$];\n\tconst valueRef = useRef(\n\t\t\"getValue\" in source$ && typeof source$.getValue === \"function\"\n\t\t\t? source$.getValue()\n\t\t\t: options.defaultValue,\n\t);\n\tconst sourceRef = useLiveRef(source$);\n\tconst optionsRef = useLiveRef(options);\n\n\tconst getSnapshot = useCallback(() => {\n\t\treturn valueRef.current;\n\t}, []);\n\n\t// biome-ignore lint/correctness/useExhaustiveDependencies: <explanation>\n\tconst subscribe = useCallback(\n\t\t(next: () => void) => {\n\t\t\tconst source = sourceRef.current;\n\n\t\t\tconst sub = makeObservable(source)()\n\t\t\t\t.pipe(\n\t\t\t\t\toptionsRef.current.defaultValue\n\t\t\t\t\t\t? startWith(optionsRef.current.defaultValue)\n\t\t\t\t\t\t: identity,\n\t\t\t\t\t/**\n\t\t\t\t\t * @important there is already a Object.is comparison in place from react\n\t\t\t\t\t * so we only add a custom compareFn if provided\n\t\t\t\t\t */\n\t\t\t\t\tdistinctUntilChanged((a, b) => {\n\t\t\t\t\t\tif (optionsRef.current.compareFn) {\n\t\t\t\t\t\t\tif (a === undefined || b === undefined) return false;\n\n\t\t\t\t\t\t\treturn optionsRef.current.compareFn(a, b);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}),\n\t\t\t\t\ttap((value) => {\n\t\t\t\t\t\tvalueRef.current = value;\n\t\t\t\t\t}),\n\t\t\t\t\tcatchError((error) => {\n\t\t\t\t\t\tconsole.error(error);\n\n\t\t\t\t\t\treturn EMPTY;\n\t\t\t\t\t}),\n\t\t\t\t)\n\t\t\t\t.subscribe(next);\n\n\t\t\treturn () => {\n\t\t\t\tif (optionsRef.current.unsubscribeOnUnmount === false) return;\n\n\t\t\t\tsub.unsubscribe();\n\t\t\t};\n\t\t},\n\t\t[...deps],\n\t);\n\n\tconst result = useSyncExternalStore(subscribe, getSnapshot, getSnapshot);\n\n\treturn result as T;\n}\n","import { type DependencyList, useEffect } from \"react\";\nimport { EMPTY, catchError } from \"rxjs\";\nimport { makeObservable } from \"../utils/makeObservable\";\nimport { useLiveRef } from \"../utils/react/useLiveRef\";\nimport type { SubscribeSource } from \"./types\";\n\nexport function useSubscribe<T>(\n\tsource: SubscribeSource<T> | (() => T),\n\tdeps: DependencyList = [],\n) {\n\tconst sourceRef = useLiveRef(source);\n\n\tuseEffect(() => {\n\t\tconst sub = makeObservable(sourceRef.current)()\n\t\t\t.pipe(\n\t\t\t\tcatchError((error) => {\n\t\t\t\t\tconsole.error(error);\n\n\t\t\t\t\treturn EMPTY;\n\t\t\t\t}),\n\t\t\t)\n\t\t\t.subscribe();\n\n\t\treturn () => {\n\t\t\tsub.unsubscribe();\n\t\t};\n\t}, [...deps, sourceRef]);\n}\n","import { useEffect, useRef } from \"react\";\n\nexport const useConstant = <T>(fn: () => T) => {\n\tconst ref = useRef<T>(undefined);\n\n\tif (!ref.current) {\n\t\tref.current = fn();\n\t}\n\n\tuseEffect(() => {\n\t\t/**\n\t\t * Because strict mode keep reference to the same ref when the component\n\t\t * is re-mounted we force a rewrite here to prevent weird behavior.\n\t\t * I don't know why react does that since it is I believe technically\n\t\t * wrong. useRef should persist across re-render, not re-mount.\n\t\t *\n\t\t * @important\n\t\t * The downside is that during dev the factory will be called again every\n\t\t * mount.\n\t\t */\n\t\tif (process.env.NODE_ENV === \"development\") {\n\t\t\t// ref.current = fn();\n\t\t}\n\t}, []);\n\n\treturn ref as { current: T };\n};\n","import { useEffect, useRef } from \"react\";\nimport { Subject } from \"rxjs\";\nimport { useConstant } from \"../utils/react/useConstant\";\nimport { useLiveRef } from \"../utils/react/useLiveRef\";\n\n/**\n * @see\n * useBehaviorSubject\n */\nexport const useSubject = <S>({\n\tonBeforeComplete,\n\tcompleteOnUnmount = true,\n}: { onBeforeComplete?: () => void; completeOnUnmount?: boolean } = {}) => {\n\tconst subject = useConstant(() => new Subject<S>());\n\tconst completed = useRef(false);\n\tconst onBeforeCompleteRef = useLiveRef(onBeforeComplete);\n\tconst completeOnUnmountRef = useLiveRef(completeOnUnmount);\n\n\tuseEffect(() => {\n\t\tif (completed.current) {\n\t\t\tsubject.current = new Subject<S>();\n\t\t\tcompleted.current = false;\n\t\t}\n\n\t\treturn () => {\n\t\t\t/**\n\t\t\t * @important\n\t\t\t * In case we don't want to complete we still want to\n\t\t\t * flag it in order to be replaced with new subject on remount.\n\t\t\t */\n\t\t\tif (!completeOnUnmountRef.current) {\n\t\t\t\tcompleted.current = true;\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!completed.current) {\n\t\t\t\tif (onBeforeCompleteRef.current != null) onBeforeCompleteRef.current();\n\t\t\t\tsubject.current.complete();\n\t\t\t\tcompleted.current = true;\n\t\t\t}\n\t\t};\n\t}, [completeOnUnmountRef, onBeforeCompleteRef, subject]);\n\n\treturn subject;\n};\n","import { useCallback } from \"react\";\nimport type { Observable } from \"rxjs\";\nimport { useSubject } from \"./useSubject\";\n\n/**\n * This creates an event handler and an observable that represents calls to that handler.\n */\nexport const useObservableCallback = <T = void>(): readonly [\n\tObservable<T>,\n\t(arg: T) => void,\n] => {\n\tconst subject = useSubject<T>();\n\n\t// biome-ignore lint/correctness/useExhaustiveDependencies: <explanation>\n\tconst trigger = useCallback((arg: T) => {\n\t\tsubject.current.next(arg);\n\t}, []);\n\n\treturn [subject.current, trigger] as const;\n};\n","import { useEffect, useRef } from \"react\";\nimport { BehaviorSubject } from \"rxjs\";\nimport { useConstant } from \"../utils/react/useConstant\";\n\n/**\n * @important\n * Because of React 18 and its strict mode\n * - concurrency means that effect can run more than once without committing\n * - state & ref can be reused across remount\n *\n * This means that using regular useRef for subject and calling a complete() on\n * unmount will not have the desired effects. Next effects will run with a completed\n * subject and crash.\n *\n * There is another pattern to the current implementation which is using useState and\n * do a setState on the second mount if the source has completed. This will trigger a new\n * commit and re-render with new subject. However I am not sure which one is correct\n * for now. Because of the simple first naive approach is using useRef I will use the\n * same but patch it to support Strict Mode\n *\n * @see https://github.com/reactwg/react-18/discussions/18\n * @see https://github.com/reactwg/react-18/discussions/19\n */\nexport const useBehaviorSubject = <S>(state: S) => {\n\tconst subject = useConstant(() => new BehaviorSubject(state));\n\tconst completed = useRef(false);\n\tconst stateRef = useRef(state);\n\n\tuseEffect(() => {\n\t\tif (completed.current) {\n\t\t\tsubject.current = new BehaviorSubject(stateRef.current);\n\t\t\tcompleted.current = false;\n\t\t}\n\n\t\treturn () => {\n\t\t\tif (!completed.current) {\n\t\t\t\tsubject.current.complete();\n\t\t\t\tcompleted.current = true;\n\t\t\t}\n\t\t};\n\t}, [subject]);\n\n\treturn subject;\n};\n","import { useCallback } from \"react\";\nimport type { Observable } from \"rxjs\";\nimport { useLiveRef } from \"../utils/react/useLiveRef\";\nimport { useBehaviorSubject } from \"./useBehaviorSubject\";\n\n/**\n * If you need to represent some piece of state as an observable and also want the ability to change\n * this state during the lifetime of the component, useObservableState\n * is for you. It acts like React.useState(), only that\n * it returns an observable representing changes to the\n * value instead of the value itself. The callback/setter\n * returned acts like a the regular callback you\n * would otherwise get from React.useState. This is useful when you want\n * to compose the state change together with other observables.\n *\n * @important\n * The last array value is the value itself in case\n * you need a direct reference to the value\n */\nexport const useObservableState = <T>(\n\tdefaultValue: T,\n): [Observable<T>, (value: T) => void, T] => {\n\tconst subject = useBehaviorSubject(defaultValue);\n\n\tconst subject$ = useLiveRef(subject.current.asObservable());\n\n\tconst setState = useCallback(\n\t\t(value: T) => {\n\t\t\tsubject.current.next(value);\n\t\t},\n\t\t[subject.current],\n\t);\n\n\treturn [subject$.current, setState, subject.current.getValue()];\n};\n","import { useEffect } from \"react\";\nimport { useBehaviorSubject } from \"./useBehaviorSubject\";\n\nexport const useLiveBehaviorSubject = <S>(state: S) => {\n\tconst subject = useBehaviorSubject(state);\n\n\tuseEffect(() => {\n\t\tsubject.current.next(state);\n\t}, [state, subject]);\n\n\treturn subject;\n};\n","import { type DependencyList, useCallback } from \"react\";\nimport { catchError, identity, retry } from \"rxjs\";\nimport { makeObservable } from \"../utils/makeObservable\";\nimport { useLiveRef } from \"../utils/react/useLiveRef\";\nimport type { SubscribeSource } from \"./types\";\nimport { useSubscribe } from \"./useSubscribe\";\n\ninterface Option {\n\tretry?: boolean;\n\tonError?: (error: unknown) => void;\n}\n\nexport function useSubscribeEffect<T>(source: SubscribeSource<T>): void;\nexport function useSubscribeEffect<T>(\n\tsource: SubscribeSource<T>,\n\toptions: Option,\n): void;\n\nexport function useSubscribeEffect<T>(\n\tsource: SubscribeSource<T>,\n\tdeps: DependencyList,\n): void;\n\nexport function useSubscribeEffect<T>(\n\tsource: SubscribeSource<T>,\n\toptions: Option,\n\tdeps: DependencyList,\n): void;\n\nexport function useSubscribeEffect<T>(\n\tsource: SubscribeSource<T>,\n\tunsafeOptions?: Option | DependencyList,\n\tdeps: DependencyList = [],\n) {\n\tconst options =\n\t\tunsafeOptions != null && !Array.isArray(unsafeOptions)\n\t\t\t? (unsafeOptions as Option)\n\t\t\t: ({} satisfies Option);\n\tconst retryOption = options.retry ?? true;\n\tconst onErrorRef = useLiveRef(\n\t\toptions.onError ??\n\t\t\t((error: unknown) => {\n\t\t\t\tconsole.error(error);\n\t\t\t}),\n\t);\n\n\t// biome-ignore lint/correctness/useExhaustiveDependencies: <explanation>\n\tconst sourceAsObservable = useCallback(() => makeObservable(source)(), deps);\n\n\tconst enhancerMakeObservable = useCallback(\n\t\t() =>\n\t\t\tsourceAsObservable().pipe(\n\t\t\t\tcatchError((error) => {\n\t\t\t\t\tonErrorRef.current(error);\n\n\t\t\t\t\tthrow error;\n\t\t\t\t}),\n\t\t\t\tretryOption ? retry() : identity,\n\t\t\t),\n\t\t[sourceAsObservable, retryOption, onErrorRef],\n\t);\n\n\tuseSubscribe(enhancerMakeObservable, deps);\n}\n","export const SIGNAL_RESET = Symbol(\"SIGNAL_RESET\");\n","import { BehaviorSubject, first, skip } from \"rxjs\";\nimport type { Observable } from \"rxjs\";\nimport { SIGNAL_RESET } from \"./constants\";\n\ntype setValue<S> = (\n\tstateOrUpdater: typeof SIGNAL_RESET | S | ((prev: S) => S),\n) => void;\n\ntype Getter<Value> = (\n\t// biome-ignore lint/suspicious/noExplicitAny: <explanation>\n\tget: <GetSignal extends Signal<any, any, any>>(\n\t\tsignal: GetSignal,\n\t) => ReturnType<GetSignal[\"getValue\"]>,\n) => Value;\n\nexport type Config<\n\tDefaultValue = undefined,\n\tKey = undefined,\n> = Key extends undefined\n\t? {\n\t\t\tdefault: DefaultValue;\n\t\t}\n\t: {\n\t\t\tdefault: DefaultValue;\n\t\t\tkey: Key;\n\t\t};\n\ninterface ReadOnlySignalConfig<Value> {\n\tget: Getter<Value>;\n}\n\nexport interface ReadOnlySignal<Value> {\n\tgetValue: () => Value;\n\tconfig: ReadOnlySignalConfig<Value>;\n\tsubject: Observable<Value>;\n}\n\nexport interface Signal<\n\tDefaultValue = undefined,\n\tValue = undefined,\n\tKey = undefined,\n> {\n\tsetValue: setValue<DefaultValue>;\n\tgetValue: () => Value;\n\tconfig: Config<DefaultValue, Key>;\n\tsubject: Observable<DefaultValue>;\n}\n\nexport function signal<T = undefined, V = T>(\n\tconfig?: Omit<Partial<Config<T, string | undefined>>, \"key\" | \"get\">,\n): Signal<T, V, undefined>;\n\nexport function signal<T = undefined, V = T>(\n\tconfig: Omit<Partial<Config<T, string | undefined>>, \"get\"> & {\n\t\tkey: string;\n\t},\n): Signal<T, V, string>;\n\nexport function signal<V = undefined>(\n\tconfig: ReadOnlySignalConfig<V>,\n): ReadOnlySignal<V>;\n\nexport function signal<\n\tT = undefined,\n\tV = undefined,\n\tKey extends string | undefined = undefined,\n>(\n\tconfig: Partial<Config<T, Key>> | ReadOnlySignalConfig<V> = {},\n): Signal<T, V, Key> | ReadOnlySignal<V> {\n\tconst normalizedConfig: Config<T | undefined, string | undefined> = {\n\t\t// biome-ignore lint/suspicious/noExplicitAny: <explanation>\n\t\tdefault: (config as any).default,\n\t\t// biome-ignore lint/suspicious/noExplicitAny: <explanation>\n\t\tkey: (config as any).key,\n\t};\n\tconst { default: defaultValue } = normalizedConfig ?? {};\n\t// biome-ignore lint/suspicious/noExplicitAny: <explanation>\n\tconst subject = new BehaviorSubject(defaultValue as any);\n\n\tconst setValue = <F extends (prev: T) => T>(\n\t\targ: T | F | typeof SIGNAL_RESET,\n\t) => {\n\t\tconst update = (value: T | undefined) => {\n\t\t\tif (\"key\" in config) {\n\t\t\t\tconsole.log(\n\t\t\t\t\t\"[reactjrx][state][signal]:\",\n\t\t\t\t\t`Value update for signal ${config.key}`,\n\t\t\t\t\t{\n\t\t\t\t\t\tprev: subject.getValue(),\n\t\t\t\t\t\tcurr: value,\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tsubject.next(value);\n\t\t};\n\n\t\tif (typeof arg === \"function\") {\n\t\t\tconst change = (arg as F)(subject.getValue());\n\n\t\t\tif (change === subject.getValue()) return;\n\n\t\t\treturn update(change);\n\t\t}\n\n\t\tif (arg === SIGNAL_RESET) {\n\t\t\tif (defaultValue === subject.getValue()) return;\n\n\t\t\treturn update((defaultValue ?? undefined) as T);\n\t\t}\n\n\t\tif (arg === subject.getValue()) return;\n\n\t\treturn update(arg);\n\t};\n\n\tconst getValue = () => subject.getValue();\n\n\t/**\n\t * Read Only signals\n\t */\n\tif (\"get\" in config) {\n\t\t// biome-ignore lint/suspicious/noExplicitAny: <explanation>\n\t\tconst getter = (signal: Signal<any, any, any>) => {\n\t\t\tsignal.subject.pipe(skip(1), first()).subscribe(() => {\n\t\t\t\tconst newValue = config.get?.(getter);\n\n\t\t\t\t// biome-ignore lint/suspicious/noExplicitAny: <explanation>\n\t\t\t\tsetValue(newValue as any);\n\t\t\t});\n\n\t\t\treturn signal.getValue();\n\t\t};\n\n\t\tconst defaultValue = config.get(getter);\n\n\t\t// biome-ignore lint/suspicious/noExplicitAny: <explanation>\n\t\tsetValue(defaultValue as any);\n\n\t\treturn {\n\t\t\tgetValue,\n\t\t\tconfig,\n\t\t\tsubject,\n\t\t};\n\t}\n\n\treturn {\n\t\tsetValue,\n\t\tgetValue,\n\t\t// biome-ignore lint/suspicious/noExplicitAny: <explanation>\n\t\tconfig: normalizedConfig as any,\n\t\tsubject,\n\t};\n}\n\n// biome-ignore lint/suspicious/noExplicitAny: <explanation>\nexport type SignalValue<S extends Signal<any, any, any>> = ReturnType<\n\tS[\"getValue\"]\n>;\n","import { type Observable, distinctUntilChanged, map } from \"rxjs\";\nimport { useObserve } from \"../../binding/useObserve\";\nimport type { ReadOnlySignal, Signal } from \"../signal\";\n\nexport function useSignalValue<DefaultValue, Value, Key, SelectValue>(\n\tsignal: Signal<DefaultValue, Value, Key>,\n\tselector: (value: DefaultValue) => SelectValue,\n): SelectValue;\nexport function useSignalValue<DefaultValue, Value, Key>(\n\tsignal: Signal<DefaultValue, Value, Key>,\n): DefaultValue;\n// read only\nexport function useSignalValue<Value>(signal: ReadOnlySignal<Value>): Value;\n// read only select\nexport function useSignalValue<Value, SelectValue>(\n\tsignal: ReadOnlySignal<Value>,\n\tselector: (value: Value) => SelectValue,\n): SelectValue;\nexport function useSignalValue<DefaultValue, Value, Key, SelectedValue>(\n\tsignal: Signal<DefaultValue, Value, Key> | ReadOnlySignal<Value>,\n\tselector?: (\n\t\tvalue: DefaultValue | Value,\n\t) => SelectedValue | DefaultValue | Value,\n) {\n\tconst defaultSelector = () => signal.getValue();\n\tconst selectorOrDefault = selector ?? defaultSelector;\n\n\treturn useObserve(\n\t\t() => {\n\t\t\tconst observed$ = (signal.subject as Observable<Value>).pipe(\n\t\t\t\tmap((value) => {\n\t\t\t\t\tconst selectedValue = selectorOrDefault(value);\n\n\t\t\t\t\treturn selectedValue;\n\t\t\t\t}),\n\t\t\t\tdistinctUntilChanged(),\n\t\t\t);\n\n\t\t\treturn observed$;\n\t\t},\n\t\t{\n\t\t\tdefaultValue: selectorOrDefault(signal.getValue()),\n\t\t},\n\t\t[],\n\t);\n}\n","import { useState } from \"react\";\nimport { type Config, signal } from \"../signal\";\nimport { useSignalValue } from \"./useSignalValue\";\n\n/**\n * Use it when:\n * - you need reactive state\n * - you don't need global state\n */\nexport const useSignal = <T>(config: Config<T>) => {\n\tconst [stateSignal] = useState(() => signal(config));\n\n\tconst value = useSignalValue(stateSignal);\n\n\treturn [value, stateSignal] as const;\n};\n","import type { Adapter } from \"./Adapter\";\n\nexport const createLocalforageAdapter = (forage: {\n\tgetItem: (key: string) => Promise<string | null>;\n\tsetItem: (key: string, value: string) => Promise<string>;\n}): Adapter => ({\n\tgetItem: async (key: string) => {\n\t\tconst serializedValue = await forage.getItem(key);\n\n\t\tif (!serializedValue) return undefined;\n\n\t\treturn JSON.parse(serializedValue);\n\t},\n\n\tsetItem: async (key: string, value: unknown) => {\n\t\tawait forage.setItem(key, JSON.stringify(value));\n\t},\n\n\tremoveItem: async (_: string) => {},\n\n\tclear: async () => {},\n});\n","import type { Adapter } from \"./Adapter\";\n\nconst normalizeStore = (store: unknown) => {\n\tif (!store || typeof store !== \"object\") {\n\t\treturn undefined;\n\t}\n\n\treturn 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\tadapter,\n\tkey,\n}: {\n\tadapter: Adapter;\n\tkey: string;\n}): Adapter => ({\n\tclear: async () => {\n\t\treturn await adapter.removeItem(key);\n\t},\n\n\tremoveItem: async (keyToDelete) => {\n\t\tconst unsafeStore = await adapter.getItem(key);\n\t\tconst { [keyToDelete]: toRemove, ...rest } =\n\t\t\t// biome-ignore lint/suspicious/noExplicitAny: <explanation>\n\t\t\tnormalizeStore(unsafeStore) ?? ({} as any);\n\n\t\tawait adapter.setItem(key, rest);\n\t},\n\n\tgetItem: async (itemKey: string) => {\n\t\tconst unsafeStore = await adapter.getItem(key);\n\t\tconst store = normalizeStore(unsafeStore) ?? {};\n\n\t\tif (itemKey in store) {\n\t\t\treturn store[itemKey as keyof typeof store];\n\t\t}\n\n\t\treturn undefined;\n\t},\n\n\tsetItem: async (itemKey: string, value: unknown) => {\n\t\tconst unsafeStore = await adapter.getItem(key);\n\t\tconst store = normalizeStore(unsafeStore) ?? {};\n\n\t\tawait adapter.setItem(key, { ...store, [itemKey]: value });\n\t},\n});\n\nexport const createLocalStorageAdapter = ({\n\tkey,\n}: { key?: string } = {}): Adapter => {\n\tif (key) {\n\t\treturn createSharedStoreAdapter({\n\t\t\tadapter: createLocalStorageAdapter(),\n\t\t\tkey,\n\t\t});\n\t}\n\n\treturn {\n\t\tclear: async () => {\n\t\t\tlocalStorage.clear();\n\t\t},\n\n\t\tremoveItem: async (key) => {\n\t\t\tlocalStorage.removeItem(key);\n\t\t},\n\n\t\tgetItem: async (key) => {\n\t\t\tconst serializedValue = localStorage.getItem(key);\n\n\t\t\tif (!serializedValue) return undefined;\n\n\t\t\treturn JSON.parse(serializedValue);\n\t\t},\n\n\t\tsetItem: async (key, value) => {\n\t\t\tlocalStorage.setItem(key, JSON.stringify(value));\n\t\t},\n\t};\n};\n","export function shallowEqual<A, B>(objA: A, objB: B): boolean {\n\t// Check if both objects are null or undefined\n\tif (objA === null || objA === undefined || objB === undefined) {\n\t\t// biome-ignore lint/suspicious/noExplicitAny: <explanation>\n\t\treturn (objA as any) === (objB as any);\n\t}\n\n\t// Check if both objects are primitives\n\tif (typeof objA !== \"object\" || typeof objB !== \"object\") {\n\t\t// biome-ignore lint/suspicious/noExplicitAny: <explanation>\n\t\treturn (objA as any) === (objB as any);\n\t}\n\n\t// Check if both objects have the same prototype\n\tif (objA.constructor !== objB?.constructor) {\n\t\treturn false;\n\t}\n\n\t// Check if both objects have the same keys\n\tconst keysA = Object.keys(objA) as Array<keyof A>;\n\tconst keysB = Object.keys(objB) as Array<keyof A>;\n\n\tif (keysA.length !== keysB.length) {\n\t\treturn false;\n\t}\n\n\t// Check if the values of the keys are equal\n\tfor (const key of keysA) {\n\t\t// biome-ignore lint/suspicious/noPrototypeBuiltins: <explanation>\n\t\t// biome-ignore lint/suspicious/noExplicitAny: <explanation>\n\t\tif (!objB.hasOwnProperty(key) || objA[key] !== (objB as any)[key]) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\t// If all checks pass, the objects are considered shallowly equal\n\treturn true;\n}\n","export const IDENTIFIER_PERSISTANCE_KEY = \"__reactjrx\";\n","import { catchError, from, of, switchMap } from \"rxjs\";\nimport type { Adapter } from \"./adapters/Adapter\";\nimport { IDENTIFIER_PERSISTANCE_KEY } from \"./constants\";\nimport type { PersistanceEntry, SignalPersistenceConfig } from \"./types\";\n\nexport const getNormalizedPersistanceValue = (unknownValue: unknown) => {\n\tif (\n\t\ttypeof unknownValue === \"object\" &&\n\t\tunknownValue !== null &&\n\t\tIDENTIFIER_PERSISTANCE_KEY in unknownValue &&\n\t\tunknownValue[IDENTIFIER_PERSISTANCE_KEY] === IDENTIFIER_PERSISTANCE_KEY\n\t) {\n\t\treturn unknownValue as PersistanceEntry;\n\t}\n\n\treturn undefined;\n};\n\nexport const persistValue = ({\n\tadapter,\n\tconfig,\n}: {\n\tadapter: Adapter;\n\t// biome-ignore lint/suspicious/noExplicitAny: <explanation>\n\tconfig: SignalPersistenceConfig<any>;\n}) => {\n\tconst { signal, version } = config;\n\tconst state = signal.getValue();\n\n\tconst value = {\n\t\tvalue: state,\n\t\t[IDENTIFIER_PERSISTANCE_KEY]: IDENTIFIER_PERSISTANCE_KEY,\n\t\tmigrationVersion: version,\n\t} satisfies PersistanceEntry;\n\n\tif (process.env.NODE_ENV === \"development\") {\n\t\tconsole.log(\n\t\t\t\"[reactjrx][state][persistance]:\",\n\t\t\t\"Persist value\",\n\t\t\tvalue,\n\t\t\t`for signal ${signal.config.key}`,\n\t\t);\n\t}\n\n\treturn from(adapter.setItem(signal.config.key, value)).pipe(\n\t\tcatchError((e) => {\n\t\t\tconsole.error(e);\n\n\t\t\treturn of(null);\n\t\t}),\n\t);\n};\n\nexport function hydrateValueToSignal({\n\tadapter,\n\tconfig,\n}: {\n\tadapter: Adapter;\n\t// biome-ignore lint/suspicious/noExplicitAny: <explanation>\n\tconfig: SignalPersistenceConfig<any>;\n}) {\n\tconst { hydrate = ({ value }) => value, signal, version } = config;\n\n\treturn from(adapter.getItem(signal.config.key)).pipe(\n\t\tswitchMap((value) => {\n\t\t\tconst normalizedValue = getNormalizedPersistanceValue(value);\n\n\t\t\tif (!normalizedValue) return of(value);\n\n\t\t\tconst storedVersionIsInvalid =\n\t\t\t\ttypeof normalizedValue.migrationVersion !== \"number\";\n\n\t\t\tconst signalVersionIsSuperior =\n\t\t\t\tnormalizedValue.migrationVersion !== undefined &&\n\t\t\t\tversion > normalizedValue.migrationVersion;\n\n\t\t\tif (\n\t\t\t\tstoredVersionIsInvalid ||\n\t\t\t\tsignalVersionIsSuperior ||\n\t\t\t\tnormalizedValue.value === undefined\n\t\t\t) {\n\t\t\t\treturn of(value);\n\t\t\t}\n\n\t\t\tconst correctVersionValue = normalizedValue.value;\n\n\t\t\tif (process.env.NODE_ENV === \"development\") {\n\t\t\t\tconsole.log(\n\t\t\t\t\t\"[reactjrx][state][persistance]:\",\n\t\t\t\t\t\"Hydrate value\",\n\t\t\t\t\tnormalizedValue,\n\t\t\t\t\t`for signal ${signal.config.key}`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tsignal.setValue(hydrate({ value: correctVersionValue, version }));\n\n\t\t\treturn of(value);\n\t\t}),\n\t);\n}\n","import {\n\tEMPTY,\n\tasyncScheduler,\n\tcatchError,\n\tfrom,\n\tmap,\n\tmerge,\n\tof,\n\tshare,\n\tswitchMap,\n\ttap,\n\tthrottleTime,\n\tzip,\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\tentries = [],\n\tonHydrated,\n\tadapter,\n}: {\n\t// biome-ignore lint/suspicious/noExplicitAny: <explanation>\n\tentries: Array<SignalPersistenceConfig<Signal<any, any, string>>>;\n\t/**\n\t * Triggered after first successful hydrate\n\t */\n\tonHydrated?: () => void;\n\t/**\n\t * Requires a stable instance otherwise the hydration\n\t * process will start again. This is useful when you\n\t * need to change adapter during runtime.\n\t */\n\tadapter: Adapter;\n}) {\n\tconst signalsHydrated$ =\n\t\tentries.length === 0\n\t\t\t? of([])\n\t\t\t: zip(\n\t\t\t\t\t...entries.map((config) =>\n\t\t\t\t\t\thydrateValueToSignal({\n\t\t\t\t\t\t\tadapter,\n\t\t\t\t\t\t\tconfig,\n\t\t\t\t\t\t}),\n\t\t\t\t\t),\n\t\t\t\t);\n\n\tconst isHydrated$ = signalsHydrated$.pipe(\n\t\ttap(onHydrated),\n\t\tcatchError((error) => {\n\t\t\tconsole.error(\"Unable to hydrate\", error);\n\n\t\t\treturn EMPTY;\n\t\t}),\n\t\tshare(),\n\t);\n\n\t/**\n\t * Start persisting to the current adapter\n\t * as soon as signals are hydrated. Will stop\n\t * whenever hydration process starts again\n\t */\n\tconst persisted$ = isHydrated$.pipe(\n\t\tswitchMap(() =>\n\t\t\tmerge(\n\t\t\t\t...entries.map((config) =>\n\t\t\t\t\tconfig.signal.subject.pipe(\n\t\t\t\t\t\tthrottleTime(500, asyncScheduler, {\n\t\t\t\t\t\t\ttrailing: true,\n\t\t\t\t\t\t}),\n\t\t\t\t\t\tswitchMap(() =>\n\t\t\t\t\t\t\tfrom(\n\t\t\t\t\t\t\t\tpersistValue({\n\t\t\t\t\t\t\t\t\tadapter,\n\t\t\t\t\t\t\t\t\tconfig,\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t),\n\t\t\t\t\t),\n\t\t\t\t),\n\t\t\t),\n\t\t),\n\t);\n\n\treturn merge(\n\t\tisHydrated$.pipe(\n\t\t\tmap(() => ({\n\t\t\t\ttype: \"hydrated\" as const,\n\t\t\t})),\n\t\t),\n\t\tpersisted$.pipe(\n\t\t\tmap(() => ({\n\t\t\t\ttype: \"persisted\" as const,\n\t\t\t})),\n\t\t),\n\t);\n}\n","import { concatMap, merge, of, scan, switchMap } from \"rxjs\";\nimport { useLiveBehaviorSubject } from \"../../binding/useLiveBehaviorSubject\";\nimport { useObserve } from \"../../binding/useObserve\";\nimport { useLiveRef } from \"../../utils/react/useLiveRef\";\nimport { shallowEqual } from \"../../utils/shallowEqual\";\nimport type { Adapter } from \"../persistance/adapters/Adapter\";\nimport { persistSignals } from \"../persistance/persistSignals\";\nimport type { SignalPersistenceConfig } from \"../persistance/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\tentries = [],\n\tonHydrated,\n\tadapter,\n}: {\n\t/**\n\t * Passing a new list of entries will start over the process\n\t * once the current one is finished. Use a stable reference to avoid\n\t * inifite loop.\n\t */\n\n\t// biome-ignore lint/suspicious/noExplicitAny: <explanation>\n\tentries?: Array<SignalPersistenceConfig<any>>;\n\t/**\n\t * Triggered after first successful hydrate\n\t */\n\tonHydrated?: () => void;\n\t/**\n\t * Passing a new adapter reference will start over the process\n\t * once the current one is finished. Use a stable reference to avoid\n\t * inifite loop.\n\t */\n\tadapter?: Adapter;\n}): { isHydrated: boolean } {\n\tconst onHydratedRef = useLiveRef(onHydrated);\n\tconst adapterSubject = useLiveBehaviorSubject(adapter);\n\tconst entriesSubject = useLiveBehaviorSubject(entries);\n\n\treturn useObserve(\n\t\t() => {\n\t\t\tconst persistence$ = adapterSubject.current.pipe(\n\t\t\t\tswitchMap((adapter) => {\n\t\t\t\t\tif (!adapter) return of({ type: \"reset\" });\n\n\t\t\t\t\treturn merge(\n\t\t\t\t\t\tof({ type: \"reset\" }),\n\t\t\t\t\t\tentriesSubject.current.pipe(\n\t\t\t\t\t\t\tconcatMap((entries) =>\n\t\t\t\t\t\t\t\tpersistSignals({\n\t\t\t\t\t\t\t\t\tadapter,\n\t\t\t\t\t\t\t\t\tentries,\n\t\t\t\t\t\t\t\t\tonHydrated: () => {\n\t\t\t\t\t\t\t\t\t\tonHydratedRef.current?.();\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t),\n\t\t\t\t\t);\n\t\t\t\t}),\n\t\t\t);\n\n\t\t\treturn persistence$.pipe(\n\t\t\t\tscan(\n\t\t\t\t\t(acc, event) => {\n\t\t\t\t\t\tif (event.type === \"reset\") return { isHydrated: false };\n\t\t\t\t\t\tif (event.type === \"hydrated\") return { isHydrated: true };\n\n\t\t\t\t\t\treturn acc;\n\t\t\t\t\t},\n\t\t\t\t\t{ isHydrated: false as boolean },\n\t\t\t\t),\n\t\t\t);\n\t\t},\n\t\t{ defaultValue: { isHydrated: false }, compareFn: shallowEqual },\n\t\t[adapterSubject, entriesSubject],\n\t);\n}\n","import { useSubject } from \"../../binding/useSubject\";\n\nexport const useUnmountObservable = () => {\n\tconst subject = useSubject<void>({\n\t\tonBeforeComplete: () => {\n\t\t\tsubject.current.next();\n\t\t},\n\t});\n\n\treturn subject;\n};\n","import { type EffectCallback, useEffect } from \"react\";\n\nexport const useEffectOnce = (effect: EffectCallback) => {\n\tuseEffect(effect, []);\n};\n","import { useEffectOnce } from \"./useEffectOnce\";\n\nexport const useMount = (fn: () => void) => {\n\tuseEffectOnce(() => {\n\t\tfn();\n\t});\n};\n","import { type Observable, defer, merge, of, throwError, timer } from \"rxjs\";\nimport {\n\tcatchError,\n\tconcatMap,\n\tfirst,\n\tmergeMap,\n\tretryWhen,\n\ttap,\n} from \"rxjs/operators\";\n\nexport interface RetryBackoffConfig<T, TError> {\n\t// Initial interval. It will eventually go as high as maxInterval.\n\tinitialInterval?: number;\n\t// Maximum delay between retries.\n\tmaxInterval?: number;\n\t// When set to `true` every successful emission will reset the delay and the\n\t// error count.\n\tresetOnSuccess?: boolean;\n\tretry?: (attempt: number, error: TError) => boolean;\n\tretryAfterDelay?: (attempt: number, error: TError) => boolean;\n\t// Can be used to delay the retry (outside of backoff process)\n\t// for example if you want to pause retry due to connectivity issue\n\t// biome-ignore lint/suspicious/noExplicitAny: <explanation>\n\tretryAfter?: () => Observable<any>;\n\tretryDelay?: number | ((attempt: number, error: TError) => number);\n\t// Conditional retry.\n\t// shouldRetry?: (attempt: number, error: any) => Observable<boolean>\n\tbackoffDelay?: (iteration: number, initialInterval: number) => number;\n\t// biome-ignore lint/suspicious/noExplicitAny: <explanation>\n\tcaughtError?: (attempt: number, error: any) => undefined | Observable<T>;\n\t// biome-ignore lint/suspicious/noExplicitAny: <explanation>\n\tcatchError?: (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\treturn Math.min(backoffDelay, maxInterval);\n}\n\n/** Exponential backoff delay */\nexport function exponentialBackoffDelay(\n\titeration: number,\n\tinitialInterval: number,\n) {\n\treturn 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\tconst {\n\t\tretry,\n\t\tretryDelay,\n\t\tretryAfterDelay,\n\t\tretryAfter = () => of(true),\n\t} = config;\n\n\tconst maxRetries =\n\t\ttypeof retry !== \"function\"\n\t\t\t? retry === false\n\t\t\t\t? 0\n\t\t\t\t: retry === true\n\t\t\t\t\t? Number.POSITIVE_INFINITY\n\t\t\t\t\t: (retry ?? Number.POSITIVE_INFINITY)\n\t\t\t: Number.POSITIVE_INFINITY;\n\n\tconst shouldRetry =\n\t\ttypeof retry === \"function\"\n\t\t\t? // ? (attempt: number, error: TError) => of(retry(attempt, error))\n\t\t\t\tretry\n\t\t\t: () => true;\n\n\tconst initialInterval = typeof retryDelay === \"number\" ? retryDelay : 100;\n\n\tconst normalizedConfig = {\n\t\tshouldRetry,\n\t\t...config,\n\t};\n\n\tconst {\n\t\tmaxInterval = Number.POSITIVE_INFINITY,\n\t\tresetOnSuccess = false,\n\t\tbackoffDelay = exponentialBackoffDelay,\n\t} = normalizedConfig;\n\n\treturn <T>(source: Observable<T>) =>\n\t\tdefer(() => {\n\t\t\tlet caughtErrors = 0;\n\n\t\t\tconst shouldRetryFn = (attempt: number, error: TError) =>\n\t\t\t\tattempt < maxRetries ? shouldRetry(attempt, error) : false;\n\n\t\t\treturn source.pipe(\n\t\t\t\tcatchError<T, Observable<T>>((error) => {\n\t\t\t\t\tcaughtErrors++;\n\n\t\t\t\t\tif (!shouldRetryFn(caughtErrors - 1, error)) throw error;\n\n\t\t\t\t\tconst caughtErrorResult$ = config.caughtError?.(caughtErrors, error);\n\n\t\t\t\t\tif (!caughtErrorResult$) throw error;\n\n\t\t\t\t\treturn caughtErrorResult$.pipe(\n\t\t\t\t\t\tmergeMap((source) =>\n\t\t\t\t\t\t\tmerge(\n\t\t\t\t\t\t\t\tof(source) as unknown as Observable<T>,\n\t\t\t\t\t\t\t\tthrowError(() => error),\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t),\n\t\t\t\t\t);\n\t\t\t\t}),\n\t\t\t\tretryWhen<T>((errors) => {\n\t\t\t\t\treturn errors.pipe(\n\t\t\t\t\t\tconcatMap((error) => {\n\t\t\t\t\t\t\tconst attempt = caughtErrors - 1;\n\n\t\t\t\t\t\t\treturn retryAfter().pipe(\n\t\t\t\t\t\t\t\tfirst(),\n\t\t\t\t\t\t\t\tmergeMap(() =>\n\t\t\t\t\t\t\t\t\tshouldRetryFn(attempt, error)\n\t\t\t\t\t\t\t\t\t\t? timer(\n\t\t\t\t\t\t\t\t\t\t\t\tgetDelay(\n\t\t\t\t\t\t\t\t\t\t\t\t\tbackoffDelay(attempt, initialInterval),\n\t\t\t\t\t\t\t\t\t\t\t\t\tmaxInterval,\n\t\t\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\t\t).pipe(\n\t\t\t\t\t\t\t\t\t\t\t\tmergeMap((timer) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tretryAfterDelay &&\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t!retryAfterDelay(attempt, error)\n\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\treturn throwError(() => error);\n\n\t\t\t\t\t\t\t\t\t\t\t\t\treturn of(timer);\n\t\t\t\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t: throwError(() => error),\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}),\n\t\t\t\t\t);\n\t\t\t\t}),\n\t\t\t\tcatchError((e) => {\n\t\t\t\t\tif (config.catchError) {\n\t\t\t\t\t\treturn config.catchError(caughtErrors, e);\n\t\t\t\t\t}\n\n\t\t\t\t\tthrow e;\n\t\t\t\t}),\n\t\t\t\ttap(() => {\n\t\t\t\t\tif (resetOnSuccess) {\n\t\t\t\t\t\tcaughtErrors = 0;\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t);\n\t\t});\n}\n","export function isDefined<T>(\n\targ: T | null | undefined,\n): arg is T extends null | undefined ? never : T {\n\treturn arg !== null && arg !== undefined;\n}\n","// biome-ignore lint/suspicious/noExplicitAny: <explanation>\nexport const arrayEqual = <A extends any[], B extends any[]>(a: A, b: B) =>\n\ta.length === b.length && a.every((v, i) => v === b[i]);\n","export const isServer = typeof window === \"undefined\" || \"Deno\" in window;\n","import { type QueryKey, hashKey } from \"@tanstack/react-query\";\nimport { createContext, memo, useContext, useEffect, useState } from \"react\";\nimport {\n\ttype Observable,\n\ttype Subscription,\n\tfromEvent,\n\tshare,\n\ttakeUntil,\n} from \"rxjs\";\n\ntype CacheEntry = {\n\tquery$: Observable<unknown>;\n\tsignal: AbortSignal;\n\tsub: Subscription | undefined;\n\tisCompleted: boolean;\n\tlastData: { value: unknown } | undefined;\n};\n\nexport class QueryClient$ {\n\tpublic readonly queryMap: Map<string, CacheEntry> = new Map();\n\n\tgetQuery(queryHash: string) {\n\t\treturn this.queryMap.get(queryHash);\n\t}\n\n\tsetQuery(\n\t\tqueryKey: QueryKey,\n\t\tquery$: Observable<unknown>,\n\t\tsignal: AbortSignal,\n\t) {\n\t\tconst queryHash = hashKey(queryKey);\n\n\t\tconst sharedQuery$ = query$.pipe(\n\t\t\t/**\n\t\t\t * abort signal is triggered on:\n\t\t\t * - manual cancellation from user\n\t\t\t * - unmounting the component\n\t\t\t * @see https://tanstack.com/query/latest/docs/framework/react/guides/query-cancellation\n\t\t\t */\n\t\t\ttakeUntil(fromEvent(signal, \"abort\")),\n\t\t\tshare(),\n\t\t);\n\n\t\tconst cacheEntry: CacheEntry = {\n\t\t\tquery$: sharedQuery$,\n\t\t\tsignal,\n\t\t\tsub: undefined,\n\t\t\tisCompleted: false,\n\t\t\tlastData: undefined,\n\t\t};\n\n\t\tthis.queryMap.set(queryHash, cacheEntry);\n\n\t\tconst sub = sharedQuery$.subscribe({\n\t\t\tnext: (data) => {\n\t\t\t\tconst entry = this.queryMap.get(queryHash);\n\n\t\t\t\tif (entry) {\n\t\t\t\t\tentry.lastData = { value: data };\n\t\t\t\t}\n\t\t\t},\n\t\t\tcomplete: () => {\n\t\t\t\tthis.deleteQuery(queryHash);\n\t\t\t},\n\t\t});\n\n\t\tcacheEntry.sub = sub;\n\n\t\treturn cacheEntry;\n\t}\n\n\tdeleteQuery(queryHash: string) {\n\t\tconst entry = this.queryMap.get(queryHash);\n\n\t\tif (!entry) return;\n\n\t\tif (entry.sub) {\n\t\t\tentry.sub.unsubscribe();\n\t\t\tentry.sub = undefined;\n\t\t}\n\n\t\tentry.isCompleted = true;\n\n\t\tthis.queryMap.delete(queryHash);\n\t}\n\n\tdestroy() {\n\t\tthis.queryMap.forEach((_, key) => {\n\t\t\tthis.deleteQuery(key);\n\t\t});\n\t}\n}\n\nexport const Context = createContext<QueryClient$ | undefined>(undefined);\n\nexport const QueryClientProvider$ = memo(\n\t({\n\t\tchildren,\n\t\tclient: _client,\n\t}: {\n\t\tchildren: React.ReactNode;\n\t\tclient?: QueryClient$;\n\t}) => {\n\t\tconst [client] = useState(() => _client ?? new QueryClient$());\n\n\t\tuseEffect(() => {\n\t\t\treturn () => {\n\t\t\t\tclient.destroy();\n\t\t\t};\n\t\t}, [client]);\n\n\t\treturn <Context.Provider value={client}>{children}</Context.Provider>;\n\t},\n);\n\nexport const useQueryClient$ = () => {\n\tconst client = useContext(Context);\n\n\tif (!client) {\n\t\tthrow new Error(\n\t\t\t\"useReactJrxQueryClient must be used within a ReactJrxQueryProvider\",\n\t\t);\n\t}\n\n\treturn client;\n};\n","import {\n\ttype DefaultError,\n\ttype QueryClient,\n\ttype QueryFunctionContext,\n\ttype QueryKey,\n\ttype UseQueryOptions,\n\thashKey,\n\tuseQuery,\n\tuseQueryClient,\n} from \"@tanstack/react-query\";\nimport { type Observable, defer, delay, take } from \"rxjs\";\nimport { useQueryClient$ } from \"./QueryClientProvider$\";\n\nexport function useQuery$<\n\tTQueryFnData = unknown,\n\tTError = DefaultError,\n\tTData = TQueryFnData,\n\tTQueryKey extends QueryKey = QueryKey,\n>(\n\toptions: Omit<\n\t\tUseQueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n\t\t\"queryFn\"\n\t> & {\n\t\tqueryFn:\n\t\t\t| ((context: QueryFunctionContext<TQueryKey>) => Observable<TQueryFnData>)\n\t\t\t| Observable<TQueryFnData>;\n\t},\n\tqueryClient?: QueryClient,\n) {\n\tconst _queryClient = useQueryClient(queryClient);\n\tconst queryClient$ = useQueryClient$();\n\n\tconst queryFnAsync = (context: QueryFunctionContext<TQueryKey>) => {\n\t\treturn new Promise<TQueryFnData>((resolve, reject) => {\n\t\t\tconst getSource = () =>\n\t\t\t\tdefer(() =>\n\t\t\t\t\ttypeof options.queryFn === \"function\"\n\t\t\t\t\t\t? options.queryFn(context)\n\t\t\t\t\t\t: options.queryFn,\n\t\t\t\t);\n\n\t\t\tconst queryHash = hashKey(context.queryKey);\n\n\t\t\tconst queryCacheEntry =\n\t\t\t\tqueryClient$.getQuery(queryHash) ??\n\t\t\t\tqueryClient$.setQuery(context.queryKey, getSource(), context.signal);\n\n\t\t\tconst query$ = queryCacheEntry.query$;\n\n\t\t\tquery$\n\t\t\t\t.pipe(\n\t\t\t\t\ttake(1),\n\t\t\t\t\t/**\n\t\t\t\t\t * If several values are emitted during this delay, we will only\n\t\t\t\t\t * keep the last value. This is unfortunate but it's the best we can do\n\t\t\t\t\t * for now.\n\t\t\t\t\t */\n\t\t\t\t\tdelay(1),\n\t\t\t\t)\n\t\t\t\t.subscribe({\n\t\t\t\t\terror: (error) => {\n\t\t\t\t\t\treturn reject(error);\n\t\t\t\t\t},\n\t\t\t\t\tcomplete: () => {\n\t\t\t\t\t\tif (queryCacheEntry?.lastData === undefined) {\n\t\t\t\t\t\t\tif (queryCacheEntry.signal.aborted) {\n\t\t\t\t\t\t\t\treturn resolve(undefined as TQueryFnData);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tconsole.log(\n\t\t\t\t\t\t\t\t`cancelled due to stream completing without data for query ${queryHash}`,\n\t\t\t\t\t\t\t\tqueryCacheEntry?.lastData,\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t_queryClient.cancelQueries({\n\t\t\t\t\t\t\t\tqueryKey: context.queryKey,\n\t\t\t\t\t\t\t\texact: true,\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\treturn resolve(undefined as TQueryFnData);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tresolve(queryCacheEntry.lastData.value as TQueryFnData);\n\n\t\t\t\t\t\tif (queryCacheEntry?.isCompleted === false) {\n\t\t\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\t\t\t_queryClient?.refetchQueries({\n\t\t\t\t\t\t\t\t\tqueryKey: context.queryKey,\n\t\t\t\t\t\t\t\t\texact: true,\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t});\n\t};\n\n\tconst result = useQuery<TQueryFnData, TError, TData, TQueryKey>(\n\t\t{\n\t\t\t...options,\n\t\t\tqueryFn: queryFnAsync,\n\t\t},\n\t\tqueryClient,\n\t);\n\n\treturn result;\n}\n","import {\n\ttype DefaultError,\n\ttype QueryClient,\n\ttype UseMutationOptions,\n\ttype UseMutationResult,\n\tuseMutation,\n} from \"@tanstack/react-query\";\nimport { useEffect } from \"react\";\nimport { type Observable, take } from \"rxjs\";\nimport { useBehaviorSubject } from \"../binding/useBehaviorSubject\";\n\nexport type UseMutation$Options<\n\tTData = unknown,\n\tTError = DefaultError,\n\tTVariables = void,\n\tTContext = unknown,\n> = Omit<\n\tUseMutationOptions<TData, TError, TVariables, TContext>,\n\t\"mutationFn\"\n> & {\n\tmutationFn:\n\t\t| ((variables: TVariables) => Observable<TData>)\n\t\t| Observable<TData>;\n};\n\nexport function useMutation$<\n\tTData = unknown,\n\tTError = DefaultError,\n\tTVariables = void,\n\tTContext = unknown,\n>(\n\toptions: UseMutation$Options<TData, TError, TVariables, TContext>,\n\tqueryClient?: QueryClient,\n) {\n\tconst stateSubject = useBehaviorSubject<\n\t\tPick<\n\t\t\tUseMutationResult<TData, TError, TVariables, TContext>,\n\t\t\t\"status\" | \"isPending\" | \"isError\" | \"isSuccess\" | \"isIdle\"\n\t\t>\n\t>({\n\t\tstatus: \"idle\",\n\t\tisPending: false,\n\t\tisError: false,\n\t\tisSuccess: false,\n\t\tisIdle: true,\n\t});\n\n\tconst result = useMutation<TData, TError, TVariables, TContext>(\n\t\t{\n\t\t\t...options,\n\t\t\tmutationFn: (variables: TVariables) => {\n\t\t\t\tlet lastData: { value: TData } | undefined;\n\n\t\t\t\treturn new Promise<TData>((resolve, reject) => {\n\t\t\t\t\tconst source =\n\t\t\t\t\t\ttypeof options.mutationFn === \"function\"\n\t\t\t\t\t\t\t? options.mutationFn(variables)\n\t\t\t\t\t\t\t: options.mutationFn;\n\n\t\t\t\t\tsource.pipe(take(1)).subscribe({\n\t\t\t\t\t\tnext: (data) => {\n\t\t\t\t\t\t\tlastData = { value: data };\n\t\t\t\t\t\t},\n\t\t\t\t\t\terror: (error) => {\n\t\t\t\t\t\t\treject(error);\n\t\t\t\t\t\t},\n\t\t\t\t\t\tcomplete: () => {\n\t\t\t\t\t\t\tif (lastData === undefined)\n\t\t\t\t\t\t\t\treturn reject(new Error(\"Stream completed without any data\"));\n\n\t\t\t\t\t\t\tresolve(lastData.value);\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t},\n\t\t},\n\t\tqueryClient,\n\t);\n\n\tconst { status, isPending, isError, isSuccess, isIdle } = result;\n\n\tuseEffect(() => {\n\t\tstateSubject.current.next({\n\t\t\tstatus,\n\t\t\tisPending,\n\t\t\tisError,\n\t\t\tisSuccess,\n\t\t\tisIdle,\n\t\t});\n\t}, [status, isPending, isError, isSuccess, isIdle, stateSubject]);\n\n\treturn { ...result, state$: stateSubject.current };\n}\n","import type { DefaultError, QueryClient } from \"@tanstack/react-query\";\nimport { useCallback } from \"react\";\nimport { defaultIfEmpty, takeUntil } from \"rxjs\";\nimport { useObservableCallback } from \"../binding/useObservableCallback\";\nimport { type UseMutation$Options, useMutation$ } from \"./useMutation$\";\n\nexport function useSwitchMutation$<\n\tTData = unknown,\n\tTError = DefaultError,\n\tTVariables = void,\n\tTContext = unknown,\n>(\n\toptions: UseMutation$Options<TData | null, TError, TVariables, TContext>,\n\tqueryClient?: QueryClient,\n) {\n\tconst [cancel$, cancel] = useObservableCallback();\n\ttype TDataOrNull = TData | null;\n\n\tconst { mutate, mutateAsync, ...rest } = useMutation$<\n\t\tTDataOrNull,\n\t\tTError,\n\t\tTVariables,\n\t\tTContext\n\t>(\n\t\t{\n\t\t\t...options,\n\t\t\tmutationFn: (variables) => {\n\t\t\t\tconst source =\n\t\t\t\t\ttypeof options.mutationFn === \"function\"\n\t\t\t\t\t\t? options.mutationFn(variables)\n\t\t\t\t\t\t: options.mutationFn;\n\n\t\t\t\treturn source.pipe(takeUntil(cancel$), defaultIfEmpty(null));\n\t\t\t},\n\t\t},\n\t\tqueryClient,\n\t);\n\n\tconst mutateSwitch = useCallback(\n\t\t(variables: TVariables) => {\n\t\t\tcancel();\n\n\t\t\treturn mutate(variables);\n\t\t},\n\t\t[mutate, cancel],\n\t);\n\n\tconst mutateAsyncSwitch = useCallback(\n\t\t(variables: TVariables) => {\n\t\t\tcancel();\n\n\t\t\treturn mutateAsync(variables);\n\t\t},\n\t\t[mutateAsync, cancel],\n\t);\n\n\treturn { ...rest, mutate: mutateSwitch, mutateAsync: mutateAsyncSwitch };\n}\n","import {\n\ttype DefaultError,\n\ttype MutationKey,\n\ttype QueryClient,\n\tuseQueryClient,\n} from \"@tanstack/react-query\";\nimport { useCallback } from \"react\";\nimport {\n\tBehaviorSubject,\n\ttype Subject,\n\tfilter,\n\tfirst,\n\tnoop,\n\tswitchMap,\n} from \"rxjs\";\nimport { type UseMutation$Options, useMutation$ } from \"./useMutation$\";\n\nexport function useContactMutation$<\n\tTData = unknown,\n\tTError = DefaultError,\n\tTVariables = void,\n\tTContext = unknown,\n>(\n\toptions: UseMutation$Options<TData | null, TError, TVariables, TContext> & {\n\t\tmutationKey: MutationKey;\n\t},\n\tqueryClient?: QueryClient,\n) {\n\tconst client = useQueryClient(queryClient);\n\ttype TDataOrNull = TData | null;\n\tconst mutationKey = options.mutationKey;\n\n\tconst { mutateAsync, ...rest } = useMutation$<\n\t\tTDataOrNull,\n\t\tTError,\n\t\t{ variables: TVariables; ready$: Subject<boolean> },\n\t\tTContext\n\t>(\n\t\t{\n\t\t\t...options,\n\t\t\tonMutate({ variables }) {\n\t\t\t\treturn options.onMutate?.(variables);\n\t\t\t},\n\t\t\tonSuccess(data, variables, context) {\n\t\t\t\treturn options.onSuccess?.(data, variables.variables, context);\n\t\t\t},\n\t\t\tonError(error, variables, context) {\n\t\t\t\treturn options.onError?.(error, variables.variables, context);\n\t\t\t},\n\t\t\tonSettled(data, error, variables, context) {\n\t\t\t\treturn options.onSettled?.(data, error, variables.variables, context);\n\t\t\t},\n\t\t\tmutationFn: ({ ready$, variables }) => {\n\t\t\t\tconst source =\n\t\t\t\t\ttypeof options.mutationFn === \"function\"\n\t\t\t\t\t\t? options.mutationFn(variables)\n\t\t\t\t\t\t: options.mutationFn;\n\n\t\t\t\treturn ready$.pipe(\n\t\t\t\t\tfilter((isReady) => isReady),\n\t\t\t\t\tfirst(),\n\t\t\t\t\tswitchMap(() => source),\n\t\t\t\t);\n\t\t\t},\n\t\t},\n\t\tqueryClient,\n\t);\n\n\tconst mutateAsyncConcat = useCallback(\n\t\tasync (variables: TVariables) => {\n\t\t\tconst mutations = client.getMutationCache().findAll({\n\t\t\t\tmutationKey,\n\t\t\t\texact: true,\n\t\t\t});\n\n\t\t\tconst subject = new BehaviorSubject(false);\n\n\t\t\tconst result = mutateAsync({ variables, ready$: subject });\n\n\t\t\tawait Promise.all(\n\t\t\t\tmutations.map((mutation) => mutation.continue().catch(noop)),\n\t\t\t);\n\n\t\t\tsubject.next(true);\n\n\t\t\treturn await result.finally(() => {\n\t\t\t\tsubject.complete();\n\t\t\t});\n\t\t},\n\t\t[mutateAsync, client, mutationKey],\n\t);\n\n\tconst mutateConcat = useCallback(\n\t\t(variables: TVariables) => {\n\t\t\tmutateAsyncConcat(variables).catch(noop);\n\t\t},\n\t\t[mutateAsyncConcat],\n\t);\n\n\treturn { ...rest, mutate: mutateConcat, mutateAsync: mutateAsyncConcat };\n}\n"],"names":["isPromiseLike","value","makeObservable","something","isObservable","from","of","somethingAsFunction","params","defer","result","useLiveRef","ref","useRef","useMemo","useObserve","source$","optionsOrDeps","maybeDeps","options","deps","valueRef","sourceRef","optionsRef","getSnapshot","useCallback","subscribe","next","source","sub","startWith","identity","distinctUntilChanged","a","b","tap","catchError","error","EMPTY","useSyncExternalStore","useSubscribe","useEffect","useConstant","fn","useSubject","onBeforeComplete","completeOnUnmount","subject","Subject","completed","onBeforeCompleteRef","completeOnUnmountRef","useObservableCallback","trigger","arg","useBehaviorSubject","state","BehaviorSubject","stateRef","useObservableState","defaultValue","subject$","setState","useLiveBehaviorSubject","useSubscribeEffect","unsafeOptions","retryOption","onErrorRef","sourceAsObservable","enhancerMakeObservable","retry","SIGNAL_RESET","signal","config","normalizedConfig","setValue","update","change","getValue","getter","skip","first","newValue","_a","useSignalValue","selector","selectorOrDefault","map","useSignal","stateSignal","useState","createLocalforageAdapter","forage","key","serializedValue","_","normalizeStore","store","createSharedStoreAdapter","adapter","keyToDelete","unsafeStore","toRemove","rest","itemKey","createLocalStorageAdapter","shallowEqual","objA","objB","keysA","keysB","IDENTIFIER_PERSISTANCE_KEY","getNormalizedPersistanceValue","unknownValue","persistValue","version","e","hydrateValueToSignal","hydrate","switchMap","normalizedValue","storedVersionIsInvalid","signalVersionIsSuperior","correctVersionValue","persistSignals","entries","onHydrated","isHydrated$","zip","share","persisted$","merge","throttleTime","asyncScheduler","usePersistSignals","onHydratedRef","adapterSubject","entriesSubject","concatMap","scan","acc","event","useUnmountObservable","useEffectOnce","effect","useMount","getDelay","backoffDelay","maxInterval","exponentialBackoffDelay","iteration","initialInterval","retryBackoff","retryDelay","retryAfterDelay","retryAfter","maxRetries","shouldRetry","resetOnSuccess","caughtErrors","shouldRetryFn","attempt","caughtErrorResult$","mergeMap","throwError","retryWhen","errors","timer","isDefined","arrayEqual","v","i","isServer","QueryClient$","__publicField","queryHash","queryKey","query$","hashKey","sharedQuery$","takeUntil","fromEvent","cacheEntry","data","entry","Context","createContext","QueryClientProvider$","memo","children","_client","client","useQueryClient$","useContext","useQuery$","queryClient","_queryClient","useQueryClient","queryClient$","queryFnAsync","context","resolve","reject","getSource","queryCacheEntry","take","delay","useQuery","useMutation$","stateSubject","useMutation","variables","lastData","status","isPending","isError","isSuccess","isIdle","useSwitchMutation$","cancel$","cancel","mutate","mutateAsync","defaultIfEmpty","mutateSwitch","mutateAsyncSwitch","useContactMutation$","mutationKey","ready$","filter","isReady","mutateAsyncConcat","mutations","mutation","noop","mutateConcat"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../src/lib/utils/isPromiseLike.ts","../src/lib/utils/makeObservable.ts","../src/lib/utils/react/useLiveRef.ts","../src/lib/binding/useObserve.ts","../src/lib/binding/useSubscribe.ts","../src/lib/utils/react/useConstant.ts","../src/lib/binding/useSubject.ts","../src/lib/binding/useObservableCallback.ts","../src/lib/binding/useBehaviorSubject.ts","../src/lib/binding/useObservableState.ts","../src/lib/binding/useLiveBehaviorSubject.ts","../src/lib/binding/useSubscribeEffect.ts","../src/lib/state/constants.ts","../src/lib/state/signal.ts","../src/lib/state/react/useSignalValue.ts","../src/lib/state/react/useSignal.ts","../src/lib/state/persistance/adapters/createLocalforageAdapter.ts","../src/lib/state/persistance/adapters/createLocalStorageAdapter.ts","../src/lib/utils/shallowEqual.ts","../src/lib/state/persistance/constants.ts","../src/lib/state/persistance/helpers.ts","../src/lib/state/persistance/persistSignals.ts","../src/lib/state/react/usePersistSignals.tsx","../src/lib/utils/react/useUnmountObservable.ts","../src/lib/utils/react/useEffectOnce.ts","../src/lib/utils/react/useMount.ts","../src/lib/utils/operators/retryBackoff.ts","../src/lib/utils/isDefined.ts","../src/lib/utils/arrayEqual.ts","../src/lib/utils/isServer.ts","../src/lib/queries/QueryClientProvider$.tsx","../src/lib/queries/useQuery$.ts","../src/lib/queries/useMutation$.ts","../src/lib/queries/useSwitchMutation$.ts","../src/lib/queries/useConcatMutation$.ts"],"sourcesContent":["// biome-ignore lint/suspicious/noExplicitAny: <explanation>\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","import { type Observable, defer, from, isObservable, of } from \"rxjs\";\nimport { isPromiseLike } from \"./isPromiseLike\";\n\ntype FnReturnToObservable<T> = 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 { 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 type DependencyList,\n useCallback,\n useRef,\n useSyncExternalStore,\n} from \"react\";\nimport {\n type BehaviorSubject,\n EMPTY,\n type Observable,\n catchError,\n distinctUntilChanged,\n identity,\n startWith,\n tap,\n} from \"rxjs\";\nimport { makeObservable } from \"../utils/makeObservable\";\nimport { useLiveRef } from \"../utils/react/useLiveRef\";\n\ninterface Option<R = undefined> {\n defaultValue: R;\n unsubscribeOnUnmount?: boolean;\n compareFn?: (a: R, b: R) => boolean;\n}\n\nexport function useObserve<T>(source: BehaviorSubject<T>): T;\n\nexport function useObserve<T>(source: Observable<T>): T | undefined;\n\nexport function useObserve<T>(\n source: () => Observable<T>,\n deps: DependencyList,\n): T | undefined;\n\nexport function useObserve<T>(\n source: () => Observable<T> | undefined,\n deps: DependencyList,\n): T | undefined;\n\nexport function useObserve<T>(source: Observable<T>, options: Option<T>): T;\n\nexport function useObserve<T>(\n source: () => Observable<T>,\n options: Option<T>,\n deps: DependencyList,\n): T;\n\nexport function useObserve<T>(\n source$: Observable<T> | (() => Observable<T> | undefined),\n optionsOrDeps?: Option<T> | DependencyList,\n maybeDeps?: DependencyList,\n): T {\n const options =\n optionsOrDeps != null && !Array.isArray(optionsOrDeps)\n ? (optionsOrDeps as Option<T>)\n : ({\n defaultValue: undefined,\n unsubscribeOnUnmount: true,\n compareFn: undefined,\n } satisfies Option<undefined>);\n const deps =\n !maybeDeps && Array.isArray(optionsOrDeps)\n ? optionsOrDeps\n : typeof source$ === \"function\"\n ? (maybeDeps ?? [])\n : [source$];\n const valueRef = useRef(\n \"getValue\" in source$ && typeof source$.getValue === \"function\"\n ? source$.getValue()\n : options.defaultValue,\n );\n const sourceRef = useLiveRef(source$);\n const optionsRef = useLiveRef(options);\n\n const getSnapshot = useCallback(() => {\n return valueRef.current;\n }, []);\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: <explanation>\n const subscribe = useCallback(\n (next: () => void) => {\n const source = sourceRef.current;\n\n const sub = makeObservable(source)()\n .pipe(\n optionsRef.current.defaultValue\n ? startWith(optionsRef.current.defaultValue)\n : identity,\n /**\n * @important there is already a Object.is comparison in place from react\n * so we only add a custom compareFn if provided\n */\n distinctUntilChanged((a, b) => {\n if (optionsRef.current.compareFn) {\n if (a === undefined || b === undefined) return false;\n\n return optionsRef.current.compareFn(a, b);\n }\n\n return false;\n }),\n tap((value) => {\n valueRef.current = value;\n }),\n catchError((error) => {\n console.error(error);\n\n return EMPTY;\n }),\n )\n .subscribe(next);\n\n return () => {\n if (optionsRef.current.unsubscribeOnUnmount === false) return;\n\n sub.unsubscribe();\n };\n },\n [...deps],\n );\n\n const result = useSyncExternalStore(subscribe, getSnapshot, getSnapshot);\n\n return result as T;\n}\n","import { type DependencyList, useEffect } from \"react\";\nimport { EMPTY, catchError } from \"rxjs\";\nimport { makeObservable } from \"../utils/makeObservable\";\nimport { useLiveRef } from \"../utils/react/useLiveRef\";\nimport type { SubscribeSource } from \"./types\";\n\nexport function useSubscribe<T>(\n source: SubscribeSource<T> | (() => T),\n deps: DependencyList = [],\n) {\n const sourceRef = useLiveRef(source);\n\n useEffect(() => {\n const sub = makeObservable(sourceRef.current)()\n .pipe(\n catchError((error) => {\n console.error(error);\n\n return EMPTY;\n }),\n )\n .subscribe();\n\n return () => {\n sub.unsubscribe();\n };\n }, [...deps, sourceRef]);\n}\n","import { useEffect, useRef } from \"react\";\n\nexport const useConstant = <T>(fn: () => T) => {\n const ref = useRef<T>(undefined);\n\n if (!ref.current) {\n ref.current = fn();\n }\n\n useEffect(() => {\n /**\n * Because strict mode keep reference to the same ref when the component\n * is re-mounted we force a rewrite here to prevent weird behavior.\n * I don't know why react does that since it is I believe technically\n * wrong. useRef should persist across re-render, not re-mount.\n *\n * @important\n * The downside is that during dev the factory will be called again every\n * mount.\n */\n if (process.env.NODE_ENV === \"development\") {\n // ref.current = fn();\n }\n }, []);\n\n return ref as { current: T };\n};\n","import { useEffect, useRef } from \"react\";\nimport { Subject } from \"rxjs\";\nimport { useConstant } from \"../utils/react/useConstant\";\nimport { useLiveRef } from \"../utils/react/useLiveRef\";\n\n/**\n * @see\n * useBehaviorSubject\n */\nexport const useSubject = <S>({\n onBeforeComplete,\n completeOnUnmount = true,\n}: { onBeforeComplete?: () => void; completeOnUnmount?: boolean } = {}) => {\n const subject = useConstant(() => new Subject<S>());\n const completed = useRef(false);\n const onBeforeCompleteRef = useLiveRef(onBeforeComplete);\n const completeOnUnmountRef = useLiveRef(completeOnUnmount);\n\n useEffect(() => {\n if (completed.current) {\n subject.current = new Subject<S>();\n completed.current = false;\n }\n\n return () => {\n /**\n * @important\n * In case we don't want to complete we still want to\n * flag it in order to be replaced with new subject on remount.\n */\n if (!completeOnUnmountRef.current) {\n completed.current = true;\n\n return;\n }\n\n if (!completed.current) {\n if (onBeforeCompleteRef.current != null) onBeforeCompleteRef.current();\n subject.current.complete();\n completed.current = true;\n }\n };\n }, [completeOnUnmountRef, onBeforeCompleteRef, subject]);\n\n return subject;\n};\n","import { useCallback } from \"react\";\nimport type { Observable } from \"rxjs\";\nimport { useSubject } from \"./useSubject\";\n\n/**\n * This creates an event handler and an observable that represents calls to that handler.\n */\nexport const useObservableCallback = <T = void>(): readonly [\n Observable<T>,\n (arg: T) => void,\n] => {\n const subject = useSubject<T>();\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: <explanation>\n const trigger = useCallback((arg: T) => {\n subject.current.next(arg);\n }, []);\n\n return [subject.current, trigger] as const;\n};\n","import { useEffect, useRef } from \"react\";\nimport { BehaviorSubject } from \"rxjs\";\nimport { useConstant } from \"../utils/react/useConstant\";\n\n/**\n * @important\n * Because of React 18 and its strict mode\n * - concurrency means that effect can run more than once without committing\n * - state & ref can be reused across remount\n *\n * This means that using regular useRef for subject and calling a complete() on\n * unmount will not have the desired effects. Next effects will run with a completed\n * subject and crash.\n *\n * There is another pattern to the current implementation which is using useState and\n * do a setState on the second mount if the source has completed. This will trigger a new\n * commit and re-render with new subject. However I am not sure which one is correct\n * for now. Because of the simple first naive approach is using useRef I will use the\n * same but patch it to support Strict Mode\n *\n * @see https://github.com/reactwg/react-18/discussions/18\n * @see https://github.com/reactwg/react-18/discussions/19\n */\nexport const useBehaviorSubject = <S>(state: S) => {\n const subject = useConstant(() => new BehaviorSubject(state));\n const completed = useRef(false);\n const stateRef = useRef(state);\n\n useEffect(() => {\n if (completed.current) {\n subject.current = new BehaviorSubject(stateRef.current);\n completed.current = false;\n }\n\n return () => {\n if (!completed.current) {\n subject.current.complete();\n completed.current = true;\n }\n };\n }, [subject]);\n\n return subject;\n};\n","import { useCallback } from \"react\";\nimport type { Observable } from \"rxjs\";\nimport { useLiveRef } from \"../utils/react/useLiveRef\";\nimport { useBehaviorSubject } from \"./useBehaviorSubject\";\n\n/**\n * If you need to represent some piece of state as an observable and also want the ability to change\n * this state during the lifetime of the component, useObservableState\n * is for you. It acts like React.useState(), only that\n * it returns an observable representing changes to the\n * value instead of the value itself. The callback/setter\n * returned acts like a the regular callback you\n * would otherwise get from React.useState. This is useful when you want\n * to compose the state change together with other observables.\n *\n * @important\n * The last array value is the value itself in case\n * you need a direct reference to the value\n */\nexport const useObservableState = <T>(\n defaultValue: T,\n): [Observable<T>, (value: T) => void, T] => {\n const subject = useBehaviorSubject(defaultValue);\n\n const subject$ = useLiveRef(subject.current.asObservable());\n\n const setState = useCallback(\n (value: T) => {\n subject.current.next(value);\n },\n [subject.current],\n );\n\n return [subject$.current, setState, subject.current.getValue()];\n};\n","import { useEffect } from \"react\";\nimport { useBehaviorSubject } from \"./useBehaviorSubject\";\n\nexport const useLiveBehaviorSubject = <S>(state: S) => {\n const subject = useBehaviorSubject(state);\n\n useEffect(() => {\n subject.current.next(state);\n }, [state, subject]);\n\n return subject;\n};\n","import { type DependencyList, useCallback } from \"react\";\nimport { catchError, identity, retry } from \"rxjs\";\nimport { makeObservable } from \"../utils/makeObservable\";\nimport { useLiveRef } from \"../utils/react/useLiveRef\";\nimport type { SubscribeSource } from \"./types\";\nimport { useSubscribe } from \"./useSubscribe\";\n\ninterface Option {\n retry?: boolean;\n onError?: (error: unknown) => void;\n}\n\nexport function useSubscribeEffect<T>(source: SubscribeSource<T>): void;\nexport function useSubscribeEffect<T>(\n source: SubscribeSource<T>,\n options: Option,\n): void;\n\nexport function useSubscribeEffect<T>(\n source: SubscribeSource<T>,\n deps: DependencyList,\n): void;\n\nexport function useSubscribeEffect<T>(\n source: SubscribeSource<T>,\n options: Option,\n deps: DependencyList,\n): void;\n\nexport function useSubscribeEffect<T>(\n source: SubscribeSource<T>,\n unsafeOptions?: Option | DependencyList,\n deps: DependencyList = [],\n) {\n const options =\n unsafeOptions != null && !Array.isArray(unsafeOptions)\n ? (unsafeOptions as Option)\n : ({} satisfies Option);\n const retryOption = options.retry ?? true;\n const onErrorRef = useLiveRef(\n options.onError ??\n ((error: unknown) => {\n console.error(error);\n }),\n );\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: <explanation>\n const sourceAsObservable = useCallback(() => makeObservable(source)(), deps);\n\n const enhancerMakeObservable = useCallback(\n () =>\n sourceAsObservable().pipe(\n catchError((error) => {\n onErrorRef.current(error);\n\n throw error;\n }),\n retryOption ? retry() : identity,\n ),\n [sourceAsObservable, retryOption, onErrorRef],\n );\n\n useSubscribe(enhancerMakeObservable, deps);\n}\n","export const SIGNAL_RESET = Symbol(\"SIGNAL_RESET\");\n","import { BehaviorSubject, first, skip } from \"rxjs\";\nimport type { Observable } from \"rxjs\";\nimport { SIGNAL_RESET } from \"./constants\";\n\ntype setValue<S> = (\n stateOrUpdater: typeof SIGNAL_RESET | S | ((prev: S) => S),\n) => void;\n\ntype Getter<Value> = (\n // biome-ignore lint/suspicious/noExplicitAny: <explanation>\n get: <GetSignal extends Signal<any, any, any>>(\n signal: GetSignal,\n ) => ReturnType<GetSignal[\"getValue\"]>,\n) => Value;\n\nexport type Config<\n DefaultValue = undefined,\n Key = undefined,\n> = Key extends undefined\n ? {\n default: DefaultValue;\n }\n : {\n default: DefaultValue;\n key: Key;\n };\n\ninterface ReadOnlySignalConfig<Value> {\n get: Getter<Value>;\n}\n\nexport interface ReadOnlySignal<Value> {\n getValue: () => Value;\n config: ReadOnlySignalConfig<Value>;\n subject: Observable<Value>;\n}\n\nexport interface Signal<\n DefaultValue = undefined,\n Value = undefined,\n Key = undefined,\n> {\n setValue: setValue<DefaultValue>;\n getValue: () => Value;\n config: Config<DefaultValue, Key>;\n subject: Observable<DefaultValue>;\n}\n\nexport function signal<T = undefined, V = T>(\n config?: Omit<Partial<Config<T, string | undefined>>, \"key\" | \"get\">,\n): Signal<T, V, undefined>;\n\nexport function signal<T = undefined, V = T>(\n config: Omit<Partial<Config<T, string | undefined>>, \"get\"> & {\n key: string;\n },\n): Signal<T, V, string>;\n\nexport function signal<V = undefined>(\n config: ReadOnlySignalConfig<V>,\n): ReadOnlySignal<V>;\n\nexport function signal<\n T = undefined,\n V = undefined,\n Key extends string | undefined = undefined,\n>(\n config: Partial<Config<T, Key>> | ReadOnlySignalConfig<V> = {},\n): Signal<T, V, Key> | ReadOnlySignal<V> {\n const normalizedConfig: Config<T | undefined, string | undefined> = {\n // biome-ignore lint/suspicious/noExplicitAny: <explanation>\n default: (config as any).default,\n // biome-ignore lint/suspicious/noExplicitAny: <explanation>\n key: (config as any).key,\n };\n const { default: defaultValue } = normalizedConfig ?? {};\n // biome-ignore lint/suspicious/noExplicitAny: <explanation>\n const subject = new BehaviorSubject(defaultValue as any);\n\n const setValue = <F extends (prev: T) => T>(\n arg: T | F | typeof SIGNAL_RESET,\n ) => {\n const update = (value: T | undefined) => {\n if (\"key\" in config) {\n console.log(\n \"[reactjrx][state][signal]:\",\n `Value update for signal ${config.key}`,\n {\n prev: subject.getValue(),\n curr: value,\n },\n );\n }\n\n subject.next(value);\n };\n\n if (typeof arg === \"function\") {\n const change = (arg as F)(subject.getValue());\n\n if (change === subject.getValue()) return;\n\n return update(change);\n }\n\n if (arg === SIGNAL_RESET) {\n if (defaultValue === subject.getValue()) return;\n\n return update((defaultValue ?? undefined) as T);\n }\n\n if (arg === subject.getValue()) return;\n\n return update(arg);\n };\n\n const getValue = () => subject.getValue();\n\n /**\n * Read Only signals\n */\n if (\"get\" in config) {\n // biome-ignore lint/suspicious/noExplicitAny: <explanation>\n const getter = (signal: Signal<any, any, any>) => {\n signal.subject.pipe(skip(1), first()).subscribe(() => {\n const newValue = config.get?.(getter);\n\n // biome-ignore lint/suspicious/noExplicitAny: <explanation>\n setValue(newValue as any);\n });\n\n return signal.getValue();\n };\n\n const defaultValue = config.get(getter);\n\n // biome-ignore lint/suspicious/noExplicitAny: <explanation>\n setValue(defaultValue as any);\n\n return {\n getValue,\n config,\n subject,\n };\n }\n\n return {\n setValue,\n getValue,\n // biome-ignore lint/suspicious/noExplicitAny: <explanation>\n config: normalizedConfig as any,\n subject,\n };\n}\n\n// biome-ignore lint/suspicious/noExplicitAny: <explanation>\nexport type SignalValue<S extends Signal<any, any, any>> = ReturnType<\n S[\"getValue\"]\n>;\n","import { type Observable, distinctUntilChanged, map } from \"rxjs\";\nimport { useObserve } from \"../../binding/useObserve\";\nimport type { ReadOnlySignal, Signal } from \"../signal\";\n\nexport function useSignalValue<DefaultValue, Value, Key, SelectValue>(\n signal: Signal<DefaultValue, Value, Key>,\n selector: (value: DefaultValue) => SelectValue,\n): SelectValue;\nexport function useSignalValue<DefaultValue, Value, Key>(\n signal: Signal<DefaultValue, Value, Key>,\n): DefaultValue;\n// read only\nexport function useSignalValue<Value>(signal: ReadOnlySignal<Value>): Value;\n// read only select\nexport function useSignalValue<Value, SelectValue>(\n signal: ReadOnlySignal<Value>,\n selector: (value: Value) => SelectValue,\n): SelectValue;\nexport function useSignalValue<DefaultValue, Value, Key, SelectedValue>(\n signal: Signal<DefaultValue, Value, Key> | ReadOnlySignal<Value>,\n selector?: (\n value: DefaultValue | Value,\n ) => SelectedValue | DefaultValue | Value,\n) {\n const defaultSelector = () => signal.getValue();\n const selectorOrDefault = selector ?? defaultSelector;\n\n return useObserve(\n () => {\n const observed$ = (signal.subject as Observable<Value>).pipe(\n map((value) => {\n const selectedValue = selectorOrDefault(value);\n\n return selectedValue;\n }),\n distinctUntilChanged(),\n );\n\n return observed$;\n },\n {\n defaultValue: selectorOrDefault(signal.getValue()),\n },\n [],\n );\n}\n","import { useState } from \"react\";\nimport { type Config, signal } from \"../signal\";\nimport { useSignalValue } from \"./useSignalValue\";\n\n/**\n * Use it when:\n * - you need reactive state\n * - you don't need global state\n */\nexport const useSignal = <T>(config: Config<T>) => {\n const [stateSignal] = useState(() => signal(config));\n\n const value = useSignalValue(stateSignal);\n\n return [value, stateSignal] as const;\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","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: <explanation>\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}: { key?: string } = {}): 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","export function shallowEqual<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: <explanation>\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: <explanation>\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: <explanation>\n // biome-ignore lint/suspicious/noExplicitAny: <explanation>\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_PERSISTANCE_KEY = \"__reactjrx\";\n","import { catchError, from, of, switchMap } from \"rxjs\";\nimport type { Adapter } from \"./adapters/Adapter\";\nimport { IDENTIFIER_PERSISTANCE_KEY } from \"./constants\";\nimport type { PersistanceEntry, SignalPersistenceConfig } from \"./types\";\n\nexport const getNormalizedPersistanceValue = (unknownValue: unknown) => {\n if (\n typeof unknownValue === \"object\" &&\n unknownValue !== null &&\n IDENTIFIER_PERSISTANCE_KEY in unknownValue &&\n unknownValue[IDENTIFIER_PERSISTANCE_KEY] === IDENTIFIER_PERSISTANCE_KEY\n ) {\n return unknownValue as PersistanceEntry;\n }\n\n return undefined;\n};\n\nexport const persistValue = ({\n adapter,\n config,\n}: {\n adapter: Adapter;\n // biome-ignore lint/suspicious/noExplicitAny: <explanation>\n config: SignalPersistenceConfig<any>;\n}) => {\n const { signal, version } = config;\n const state = signal.getValue();\n\n const value = {\n value: state,\n [IDENTIFIER_PERSISTANCE_KEY]: IDENTIFIER_PERSISTANCE_KEY,\n migrationVersion: version,\n } satisfies PersistanceEntry;\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: <explanation>\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 EMPTY,\n asyncScheduler,\n catchError,\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: <explanation>\n entries: Array<SignalPersistenceConfig<Signal<any, 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.subject.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\";\nimport { useLiveRef } from \"../../utils/react/useLiveRef\";\nimport { shallowEqual } from \"../../utils/shallowEqual\";\nimport type { Adapter } from \"../persistance/adapters/Adapter\";\nimport { persistSignals } from \"../persistance/persistSignals\";\nimport type { SignalPersistenceConfig } from \"../persistance/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 * inifite loop.\n */\n\n // biome-ignore lint/suspicious/noExplicitAny: <explanation>\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 * inifite 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 return useObserve(\n () => {\n const persistence$ = adapterSubject.current.pipe(\n switchMap((adapter) => {\n if (!adapter) return of({ type: \"reset\" });\n\n return merge(\n of({ type: \"reset\" }),\n entriesSubject.current.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: shallowEqual },\n [adapterSubject, entriesSubject],\n );\n}\n","import { useSubject } from \"../../binding/useSubject\";\n\nexport const useUnmountObservable = () => {\n const subject = useSubject<void>({\n onBeforeComplete: () => {\n subject.current.next();\n },\n });\n\n return subject;\n};\n","import { type EffectCallback, useEffect } from \"react\";\n\nexport const useEffectOnce = (effect: EffectCallback) => {\n useEffect(effect, []);\n};\n","import { useEffectOnce } from \"./useEffectOnce\";\n\nexport const useMount = (fn: () => void) => {\n useEffectOnce(() => {\n fn();\n });\n};\n","import { type Observable, defer, merge, 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: <explanation>\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: <explanation>\n caughtError?: (attempt: number, error: any) => undefined | Observable<T>;\n // biome-ignore lint/suspicious/noExplicitAny: <explanation>\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","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: <explanation>\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 const isServer = typeof window === \"undefined\" || \"Deno\" in window;\n","import { type QueryKey, hashKey } from \"@tanstack/react-query\";\nimport { createContext, memo, useContext, useEffect, useState } from \"react\";\nimport {\n type Observable,\n type Subscription,\n fromEvent,\n share,\n takeUntil,\n} from \"rxjs\";\n\ntype CacheEntry = {\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 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 /**\n * abort signal is triggered on:\n * - manual cancellation from user\n * - unmounting the component\n * @see https://tanstack.com/query/latest/docs/framework/react/guides/query-cancellation\n */\n takeUntil(fromEvent(signal, \"abort\")),\n share(),\n );\n\n const cacheEntry: CacheEntry = {\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 this.deleteQuery(queryHash);\n },\n });\n\n cacheEntry.sub = sub;\n\n return cacheEntry;\n }\n\n deleteQuery(queryHash: string) {\n const entry = this.queryMap.get(queryHash);\n\n if (!entry) return;\n\n if (entry.sub) {\n entry.sub.unsubscribe();\n entry.sub = undefined;\n }\n\n entry.isCompleted = true;\n\n this.queryMap.delete(queryHash);\n }\n\n destroy() {\n this.queryMap.forEach((_, key) => {\n this.deleteQuery(key);\n });\n }\n}\n\nexport const Context = createContext<QueryClient$ | undefined>(undefined);\n\nexport const QueryClientProvider$ = memo(\n ({\n children,\n client: _client,\n }: {\n children: React.ReactNode;\n client?: QueryClient$;\n }) => {\n const [client] = useState(() => _client ?? new QueryClient$());\n\n useEffect(() => {\n return () => {\n client.destroy();\n };\n }, [client]);\n\n return <Context.Provider value={client}>{children}</Context.Provider>;\n },\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 QueryFunctionContext,\n type QueryKey,\n type UseQueryOptions,\n hashKey,\n useQuery,\n useQueryClient,\n} from \"@tanstack/react-query\";\nimport { type Observable, defer, delay, 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 options: Omit<\n UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n \"queryFn\"\n > & {\n queryFn:\n | ((context: QueryFunctionContext<TQueryKey>) => Observable<TQueryFnData>)\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 return new Promise<TQueryFnData>((resolve, reject) => {\n const getSource = () =>\n defer(() =>\n typeof options.queryFn === \"function\"\n ? options.queryFn(context)\n : options.queryFn,\n );\n\n const queryHash = hashKey(context.queryKey);\n\n const queryCacheEntry =\n queryClient$.getQuery(queryHash) ??\n queryClient$.setQuery(context.queryKey, getSource(), context.signal);\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 return resolve(undefined as TQueryFnData);\n }\n\n console.log(\n `cancelled due to stream completing without data for query ${queryHash}`,\n queryCacheEntry?.lastData,\n );\n\n _queryClient.cancelQueries({\n queryKey: context.queryKey,\n exact: true,\n });\n\n return resolve(undefined as TQueryFnData);\n }\n\n resolve(queryCacheEntry.lastData.value as TQueryFnData);\n\n if (queryCacheEntry?.isCompleted === false) {\n setTimeout(() => {\n _queryClient?.refetchQueries({\n queryKey: context.queryKey,\n exact: true,\n });\n });\n }\n },\n });\n });\n };\n\n const result = useQuery<TQueryFnData, TError, TData, TQueryKey>(\n {\n ...options,\n queryFn: queryFnAsync,\n },\n queryClient,\n );\n\n return result;\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 { type Observable, take } from \"rxjs\";\nimport { useBehaviorSubject } from \"../binding/useBehaviorSubject\";\n\nexport type UseMutation$Options<\n TData = unknown,\n TError = DefaultError,\n TVariables = void,\n TContext = unknown,\n> = Omit<\n UseMutationOptions<TData, TError, TVariables, TContext>,\n \"mutationFn\"\n> & {\n mutationFn:\n | ((variables: TVariables) => Observable<TData>)\n | Observable<TData>;\n};\n\nexport function useMutation$<\n TData = unknown,\n TError = DefaultError,\n TVariables = void,\n TContext = unknown,\n>(\n options: UseMutation$Options<TData, TError, TVariables, TContext>,\n queryClient?: QueryClient,\n) {\n const stateSubject = useBehaviorSubject<\n Pick<\n UseMutationResult<TData, TError, TVariables, TContext>,\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 const result = useMutation<TData, TError, TVariables, TContext>(\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.current.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.current };\n}\n","import type { DefaultError, QueryClient } from \"@tanstack/react-query\";\nimport { useCallback } from \"react\";\nimport { defaultIfEmpty, takeUntil } from \"rxjs\";\nimport { useObservableCallback } from \"../binding/useObservableCallback\";\nimport { type UseMutation$Options, useMutation$ } from \"./useMutation$\";\n\nexport function useSwitchMutation$<\n TData = unknown,\n TError = DefaultError,\n TVariables = void,\n TContext = unknown,\n>(\n options: UseMutation$Options<TData | null, TError, TVariables, TContext>,\n queryClient?: QueryClient,\n) {\n const [cancel$, cancel] = useObservableCallback();\n type TDataOrNull = TData | null;\n\n const { mutate, mutateAsync, ...rest } = useMutation$<\n TDataOrNull,\n TError,\n TVariables,\n TContext\n >(\n {\n ...options,\n mutationFn: (variables) => {\n const source =\n typeof options.mutationFn === \"function\"\n ? options.mutationFn(variables)\n : options.mutationFn;\n\n return source.pipe(takeUntil(cancel$), defaultIfEmpty(null));\n },\n },\n queryClient,\n );\n\n const mutateSwitch = useCallback(\n (variables: TVariables) => {\n cancel();\n\n return mutate(variables);\n },\n [mutate, cancel],\n );\n\n const mutateAsyncSwitch = useCallback(\n (variables: TVariables) => {\n cancel();\n\n return mutateAsync(variables);\n },\n [mutateAsync, cancel],\n );\n\n return { ...rest, mutate: mutateSwitch, mutateAsync: mutateAsyncSwitch };\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 type Subject,\n filter,\n first,\n noop,\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 options: 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({ variables }) {\n return options.onMutate?.(variables);\n },\n onSuccess(data, variables, context) {\n return options.onSuccess?.(data, variables.variables, context);\n },\n onError(error, variables, context) {\n return options.onError?.(error, variables.variables, context);\n },\n onSettled(data, error, variables, context) {\n return options.onSettled?.(data, error, variables.variables, context);\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"],"names":["isPromiseLike","value","makeObservable","something","isObservable","from","of","somethingAsFunction","params","defer","result","useLiveRef","ref","useRef","useMemo","useObserve","source$","optionsOrDeps","maybeDeps","options","deps","valueRef","sourceRef","optionsRef","getSnapshot","useCallback","subscribe","next","source","sub","startWith","identity","distinctUntilChanged","a","b","tap","catchError","error","EMPTY","useSyncExternalStore","useSubscribe","useEffect","useConstant","fn","useSubject","onBeforeComplete","completeOnUnmount","subject","Subject","completed","onBeforeCompleteRef","completeOnUnmountRef","useObservableCallback","trigger","arg","useBehaviorSubject","state","BehaviorSubject","stateRef","useObservableState","defaultValue","subject$","setState","useLiveBehaviorSubject","useSubscribeEffect","unsafeOptions","retryOption","onErrorRef","sourceAsObservable","enhancerMakeObservable","retry","SIGNAL_RESET","signal","config","normalizedConfig","setValue","update","change","getValue","getter","skip","first","newValue","_a","useSignalValue","selector","selectorOrDefault","map","useSignal","stateSignal","useState","createLocalforageAdapter","forage","key","serializedValue","_","normalizeStore","store","createSharedStoreAdapter","adapter","keyToDelete","unsafeStore","toRemove","rest","itemKey","createLocalStorageAdapter","shallowEqual","objA","objB","keysA","keysB","IDENTIFIER_PERSISTANCE_KEY","getNormalizedPersistanceValue","unknownValue","persistValue","version","e","hydrateValueToSignal","hydrate","switchMap","normalizedValue","storedVersionIsInvalid","signalVersionIsSuperior","correctVersionValue","persistSignals","entries","onHydrated","isHydrated$","zip","share","persisted$","merge","throttleTime","asyncScheduler","usePersistSignals","onHydratedRef","adapterSubject","entriesSubject","concatMap","scan","acc","event","useUnmountObservable","useEffectOnce","effect","useMount","getDelay","backoffDelay","maxInterval","exponentialBackoffDelay","iteration","initialInterval","retryBackoff","retryDelay","retryAfterDelay","retryAfter","maxRetries","shouldRetry","resetOnSuccess","caughtErrors","shouldRetryFn","attempt","caughtErrorResult$","mergeMap","throwError","retryWhen","errors","timer","isDefined","arrayEqual","v","i","isServer","QueryClient$","__publicField","queryHash","queryKey","query$","hashKey","sharedQuery$","takeUntil","fromEvent","cacheEntry","data","entry","Context","createContext","QueryClientProvider$","memo","children","_client","client","useQueryClient$","useContext","useQuery$","queryClient","_queryClient","useQueryClient","queryClient$","queryFnAsync","context","resolve","reject","getSource","queryCacheEntry","take","delay","useQuery","useMutation$","stateSubject","useMutation","variables","lastData","status","isPending","isError","isSuccess","isIdle","useSwitchMutation$","cancel$","cancel","mutate","mutateAsync","defaultIfEmpty","mutateSwitch","mutateAsyncSwitch","useContactMutation$","mutationKey","ready$","filter","isReady","mutateAsyncConcat","mutations","mutation","noop","mutateConcat"],"mappings":"6XACO,SAASA,EAAiBC,EAAqC,CACpE,OACEA,aAAiB,SAChBA,GACC,OAAOA,GAAU,UACjB,SAAUA,GACV,OAAOA,EAAM,MAAS,YACtB,UAAWA,GACXA,EAAM,QAAU,UAEtB,CC2CO,SAASC,EACdC,EAOsC,CACtC,GAAIC,eAAaD,CAAS,EAAG,MAAO,IAAMA,EAE1C,GAAIH,EAAcG,CAAS,EAAU,MAAA,IAAME,EAAAA,KAAKF,CAAS,EAEzD,GAAI,OAAOA,GAAc,WAAmB,MAAA,IAAMG,EAAAA,GAAGH,CAAS,EAE9D,MAAMI,EAAsBJ,EAKrB,OAACK,GACNC,EAAAA,MAAM,IAAM,CACJ,MAAAC,EAASH,EAAoBC,CAAM,EAErC,OAAAR,EAAcU,CAAM,EACfL,EAAAA,KAAKK,CAAM,EAGhBN,EAAAA,aAAaM,CAAM,EACdA,EAGFJ,EAAAA,GAAGI,CAAM,CAAA,CACjB,CACL,CCtFa,MAAAC,EAAiBV,GAAa,CACnC,MAAAW,EAAMC,SAAOZ,CAAK,EAaxBa,OAAAA,EAAAA,QAAQ,IAAM,CACZF,EAAI,QAAUX,CAAA,EACb,CAACA,CAAK,CAAC,EAEHW,CACT,EC0BgB,SAAAG,EACdC,EACAC,EACAC,EACG,CACG,MAAAC,EACJF,GAAiB,MAAQ,CAAC,MAAM,QAAQA,CAAa,EAChDA,EACA,CACC,aAAc,OACd,qBAAsB,GACtB,UAAW,MACb,EACAG,EACJ,CAACF,GAAa,MAAM,QAAQD,CAAa,EACrCA,EACA,OAAOD,GAAY,WAChBE,GAAa,CAAC,EACf,CAACF,CAAO,EACVK,EAAWR,EAAA,OACf,aAAcG,GAAW,OAAOA,EAAQ,UAAa,WACjDA,EAAQ,SAAS,EACjBG,EAAQ,YACd,EACMG,EAAYX,EAAWK,CAAO,EAC9BO,EAAaZ,EAAWQ,CAAO,EAE/BK,EAAcC,EAAAA,YAAY,IACvBJ,EAAS,QACf,EAAE,EAGCK,EAAYD,EAAA,YACfE,GAAqB,CACpB,MAAMC,EAASN,EAAU,QAEnBO,EAAM3B,EAAe0B,CAAM,EAC9B,EAAA,KACCL,EAAW,QAAQ,aACfO,EAAAA,UAAUP,EAAW,QAAQ,YAAY,EACzCQ,EAAA,SAKJC,uBAAqB,CAACC,EAAGC,IACnBX,EAAW,QAAQ,UACjBU,IAAM,QAAaC,IAAM,OAAkB,GAExCX,EAAW,QAAQ,UAAUU,EAAGC,CAAC,EAGnC,EACR,EACDC,EAAA,IAAKlC,GAAU,CACboB,EAAS,QAAUpB,CAAA,CACpB,EACDmC,EAAA,WAAYC,IACV,QAAQ,MAAMA,CAAK,EAEZC,EAAA,MACR,CAAA,EAEF,UAAUX,CAAI,EAEjB,MAAO,IAAM,CACPJ,EAAW,QAAQ,uBAAyB,IAEhDM,EAAI,YAAY,CAClB,CACF,EACA,CAAC,GAAGT,CAAI,CACV,EAIO,OAFQmB,EAAA,qBAAqBb,EAAWF,EAAaA,CAAW,CAGzE,CCtHO,SAASgB,EACdZ,EACAR,EAAuB,GACvB,CACM,MAAAE,EAAYX,EAAWiB,CAAM,EAEnCa,EAAAA,UAAU,IAAM,CACd,MAAMZ,EAAM3B,EAAeoB,EAAU,OAAO,EACzC,EAAA,KACCc,EAAA,WAAYC,IACV,QAAQ,MAAMA,CAAK,EAEZC,EAAA,MACR,GAEF,UAAU,EAEb,MAAO,IAAM,CACXT,EAAI,YAAY,CAClB,CAAA,EACC,CAAC,GAAGT,EAAME,CAAS,CAAC,CACzB,CCzBa,MAAAoB,EAAkBC,GAAgB,CACvC,MAAA/B,EAAMC,SAAU,MAAS,EAE3B,OAACD,EAAI,UACPA,EAAI,QAAU+B,EAAG,GAGnBF,EAAAA,UAAU,IAAM,CAWV,QAAQ,IAAI,QAGlB,EAAG,EAAE,EAEE7B,CACT,ECjBagC,EAAa,CAAI,CAC5B,iBAAAC,EACA,kBAAAC,EAAoB,EACtB,EAAoE,KAAO,CACzE,MAAMC,EAAUL,EAAY,IAAM,IAAIM,SAAY,EAC5CC,EAAYpC,SAAO,EAAK,EACxBqC,EAAsBvC,EAAWkC,CAAgB,EACjDM,EAAuBxC,EAAWmC,CAAiB,EAEzDL,OAAAA,EAAAA,UAAU,KACJQ,EAAU,UACJF,EAAA,QAAU,IAAIC,UACtBC,EAAU,QAAU,IAGf,IAAM,CAMP,GAAA,CAACE,EAAqB,QAAS,CACjCF,EAAU,QAAU,GAEpB,MAAA,CAGGA,EAAU,UACTC,EAAoB,SAAW,MAAMA,EAAoB,QAAQ,EACrEH,EAAQ,QAAQ,SAAS,EACzBE,EAAU,QAAU,GAExB,GACC,CAACE,EAAsBD,EAAqBH,CAAO,CAAC,EAEhDA,CACT,ECtCaK,EAAwB,IAGhC,CACH,MAAML,EAAUH,EAAc,EAGxBS,EAAU5B,cAAa6B,GAAW,CAC9BP,EAAA,QAAQ,KAAKO,CAAG,CAC1B,EAAG,EAAE,EAEE,MAAA,CAACP,EAAQ,QAASM,CAAO,CAClC,ECIaE,EAAyBC,GAAa,CACjD,MAAMT,EAAUL,EAAY,IAAM,IAAIe,EAAA,gBAAgBD,CAAK,CAAC,EACtDP,EAAYpC,SAAO,EAAK,EACxB6C,EAAW7C,SAAO2C,CAAK,EAE7Bf,OAAAA,EAAAA,UAAU,KACJQ,EAAU,UACZF,EAAQ,QAAU,IAAIU,kBAAgBC,EAAS,OAAO,EACtDT,EAAU,QAAU,IAGf,IAAM,CACNA,EAAU,UACbF,EAAQ,QAAQ,SAAS,EACzBE,EAAU,QAAU,GAExB,GACC,CAACF,CAAO,CAAC,EAELA,CACT,ECxBaY,EACXC,GAC2C,CACrC,MAAAb,EAAUQ,EAAmBK,CAAY,EAEzCC,EAAWlD,EAAWoC,EAAQ,QAAQ,cAAc,EAEpDe,EAAWrC,EAAA,YACdxB,GAAa,CACJ8C,EAAA,QAAQ,KAAK9C,CAAK,CAC5B,EACA,CAAC8C,EAAQ,OAAO,CAClB,EAEA,MAAO,CAACc,EAAS,QAASC,EAAUf,EAAQ,QAAQ,UAAU,CAChE,EC/BagB,EAA6BP,GAAa,CAC/C,MAAAT,EAAUQ,EAAmBC,CAAK,EAExCf,OAAAA,EAAAA,UAAU,IAAM,CACNM,EAAA,QAAQ,KAAKS,CAAK,CAAA,EACzB,CAACA,EAAOT,CAAO,CAAC,EAEZA,CACT,ECkBO,SAASiB,EACdpC,EACAqC,EACA7C,EAAuB,CAAA,EACvB,CACM,MAAAD,EACJ8C,GAAiB,MAAQ,CAAC,MAAM,QAAQA,CAAa,EAChDA,EACA,CAAC,EACFC,EAAc/C,EAAQ,OAAS,GAC/BgD,EAAaxD,EACjBQ,EAAQ,UACJkB,GAAmB,CACnB,QAAQ,MAAMA,CAAK,CACrB,EACJ,EAGM+B,EAAqB3C,EAAAA,YAAY,IAAMvB,EAAe0B,CAAM,IAAKR,CAAI,EAErEiD,EAAyB5C,EAAA,YAC7B,IACE2C,EAAqB,EAAA,KACnBhC,EAAA,WAAYC,GAAU,CACpB,MAAA8B,EAAW,QAAQ9B,CAAK,EAElBA,CAAA,CACP,EACD6B,EAAcI,UAAUvC,EAAAA,QAC1B,EACF,CAACqC,EAAoBF,EAAaC,CAAU,CAC9C,EAEA3B,EAAa6B,EAAwBjD,CAAI,CAC3C,CC/Da,MAAAmD,EAAe,OAAO,cAAc,EC8DjC,SAAAC,EAKdC,EAA4D,GACrB,CACvC,MAAMC,EAA8D,CAElE,QAAUD,EAAe,QAEzB,IAAMA,EAAe,GACvB,EACM,CAAE,QAASb,CAAa,EAAIc,EAE5B3B,EAAU,IAAIU,EAAA,gBAAgBG,CAAmB,EAEjDe,EACJrB,GACG,CACG,MAAAsB,EAAU3E,GAAyB,CACnC,QAASwE,GACH,QAAA,IACN,6BACA,2BAA2BA,EAAO,GAAG,GACrC,CACE,KAAM1B,EAAQ,SAAS,EACvB,KAAM9C,CAAA,CAEV,EAGF8C,EAAQ,KAAK9C,CAAK,CACpB,EAEI,GAAA,OAAOqD,GAAQ,WAAY,CAC7B,MAAMuB,EAAUvB,EAAUP,EAAQ,SAAA,CAAU,EAExC,OAAA8B,IAAW9B,EAAQ,WAAY,OAE5B6B,EAAOC,CAAM,CAAA,CAGtB,GAAIvB,IAAQiB,EACN,OAAAX,IAAiBb,EAAQ,WAAY,OAElC6B,EAAQhB,GAAgB,MAAe,EAG5C,GAAAN,IAAQP,EAAQ,WAEpB,OAAO6B,EAAOtB,CAAG,CACnB,EAEMwB,EAAW,IAAM/B,EAAQ,SAAS,EAKxC,GAAI,QAAS0B,EAAQ,CAEb,MAAAM,EAAUP,IACdA,EAAO,QAAQ,KAAKQ,EAAK,KAAA,CAAC,EAAGC,EAAM,MAAA,CAAC,EAAE,UAAU,IAAM,OAC9C,MAAAC,GAAWC,EAAAV,EAAO,MAAP,YAAAU,EAAA,KAAAV,EAAaM,GAG9BJ,EAASO,CAAe,CAAA,CACzB,EAEMV,EAAO,SAAS,GAGnBZ,EAAea,EAAO,IAAIM,CAAM,EAGtC,OAAAJ,EAASf,CAAmB,EAErB,CACL,SAAAkB,EACA,OAAAL,EACA,QAAA1B,CACF,CAAA,CAGK,MAAA,CACL,SAAA4B,EACA,SAAAG,EAEA,OAAQJ,EACR,QAAA3B,CACF,CACF,CCvIgB,SAAAqC,EACdZ,EACAa,EAGA,CAEA,MAAMC,EAAoBD,IADF,IAAMb,EAAO,SAAS,GAGvC,OAAAzD,EACL,IACqByD,EAAO,QAA8B,KACtDe,EAAA,IAAKtF,GACmBqF,EAAkBrF,CAAK,CAG9C,EACD+B,EAAqB,qBAAA,CACvB,EAIF,CACE,aAAcsD,EAAkBd,EAAO,SAAU,CAAA,CACnD,EACA,CAAA,CACF,CACF,CCpCa,MAAAgB,EAAgBf,GAAsB,CACjD,KAAM,CAACgB,CAAW,EAAIC,EAAAA,SAAS,IAAMlB,EAAOC,CAAM,CAAC,EAI5C,MAAA,CAFOW,EAAeK,CAAW,EAEzBA,CAAW,CAC5B,ECbaE,EAA4BC,IAGzB,CACd,QAAS,MAAOC,GAAgB,CAC9B,MAAMC,EAAkB,MAAMF,EAAO,QAAQC,CAAG,EAE5C,GAACC,EAEE,OAAA,KAAK,MAAMA,CAAe,CACnC,EAEA,QAAS,MAAOD,EAAa5F,IAAmB,CAC9C,MAAM2F,EAAO,QAAQC,EAAK,KAAK,UAAU5F,CAAK,CAAC,CACjD,EAEA,WAAY,MAAO8F,GAAc,CAAC,EAElC,MAAO,SAAY,CAAA,CACrB,GCnBMC,EAAkBC,GAAmB,CACzC,GAAI,GAACA,GAAS,OAAOA,GAAU,UAIxB,OAAAA,CACT,EAOMC,GAA2B,CAAC,CAChC,QAAAC,EACA,IAAAN,CACF,KAGgB,CACd,MAAO,SACE,MAAMM,EAAQ,WAAWN,CAAG,EAGrC,WAAY,MAAOO,GAAgB,CACjC,MAAMC,EAAc,MAAMF,EAAQ,QAAQN,CAAG,EACvC,CAAE,CAACO,CAAW,EAAGE,EAAU,GAAGC,CAAK,EAEvCP,EAAeK,CAAW,GAAM,CAAA,EAE5B,MAAAF,EAAQ,QAAQN,EAAKU,CAAI,CACjC,EAEA,QAAS,MAAOC,GAAoB,CAClC,MAAMH,EAAc,MAAMF,EAAQ,QAAQN,CAAG,EACvCI,EAAQD,EAAeK,CAAW,GAAK,CAAC,EAE9C,GAAIG,KAAWP,EACb,OAAOA,EAAMO,CAA6B,CAI9C,EAEA,QAAS,MAAOA,EAAiBvG,IAAmB,CAClD,MAAMoG,EAAc,MAAMF,EAAQ,QAAQN,CAAG,EACvCI,EAAQD,EAAeK,CAAW,GAAK,CAAC,EAExC,MAAAF,EAAQ,QAAQN,EAAK,CAAE,GAAGI,EAAO,CAACO,CAAO,EAAGvG,EAAO,CAAA,CAE7D,GAEawG,EAA4B,CAAC,CACxC,IAAAZ,CACF,EAAsB,KAChBA,EACKK,GAAyB,CAC9B,QAASO,EAA0B,EACnC,IAAAZ,CAAA,CACD,EAGI,CACL,MAAO,SAAY,CACjB,aAAa,MAAM,CACrB,EAEA,WAAY,MAAOA,GAAQ,CACzB,aAAa,WAAWA,CAAG,CAC7B,EAEA,QAAS,MAAOA,GAAQ,CAChB,MAAAC,EAAkB,aAAa,QAAQD,CAAG,EAE5C,GAACC,EAEE,OAAA,KAAK,MAAMA,CAAe,CACnC,EAEA,QAAS,MAAOD,EAAK5F,IAAU,CAC7B,aAAa,QAAQ4F,EAAK,KAAK,UAAU5F,CAAK,CAAC,CAAA,CAEnD,ECpFc,SAAAyG,GAAmBC,EAASC,EAAkB,CAQ5D,GANID,GAAS,MAA8BC,IAAS,QAMhD,OAAOD,GAAS,UAAY,OAAOC,GAAS,SAE9C,OAAQD,IAAkBC,EAIxB,GAAAD,EAAK,eAAgBC,GAAA,YAAAA,EAAM,aACtB,MAAA,GAIH,MAAAC,EAAQ,OAAO,KAAKF,CAAI,EACxBG,EAAQ,OAAO,KAAKF,CAAI,EAE1B,GAAAC,EAAM,SAAWC,EAAM,OAClB,MAAA,GAIT,UAAWjB,KAAOgB,EAGZ,GAAA,CAACD,EAAK,eAAef,CAAG,GAAKc,EAAKd,CAAG,IAAOe,EAAaf,CAAG,EACvD,MAAA,GAKJ,MAAA,EACT,CCrCO,MAAMkB,EAA6B,aCK7BC,GAAiCC,GAA0B,CAEpE,GAAA,OAAOA,GAAiB,UACxBA,IAAiB,MACjBF,KAA8BE,GAC9BA,EAAaF,CAA0B,IAAMA,EAEtC,OAAAE,CAIX,EAEaC,GAAe,CAAC,CAC3B,QAAAf,EACA,OAAA1B,CACF,IAIM,CACE,KAAA,CAAE,OAAAD,EAAQ,QAAA2C,CAAA,EAAY1C,EAGtBxE,EAAQ,CACZ,MAHYuE,EAAO,SAAS,EAI5B,CAACuC,CAA0B,EAAGA,EAC9B,iBAAkBI,CACpB,EAEI,OAAA,QAAQ,IAAI,WAAa,eACnB,QAAA,IACN,kCACA,gBACAlH,EACA,cAAcuE,EAAO,OAAO,GAAG,EACjC,EAGKnE,EAAA,KAAK8F,EAAQ,QAAQ3B,EAAO,OAAO,IAAKvE,CAAK,CAAC,EAAE,KACrDmC,EAAA,WAAYgF,IACV,QAAQ,MAAMA,CAAC,EAER9G,EAAAA,GAAG,IAAI,EACf,CACH,CACF,EAEO,SAAS+G,GAAqB,CACnC,QAAAlB,EACA,OAAA1B,CACF,EAIG,CACK,KAAA,CAAE,QAAA6C,EAAU,CAAC,CAAE,MAAArH,KAAYA,EAAO,OAAAuE,EAAQ,QAAA2C,CAAA,EAAY1C,EAE5D,OAAOpE,EAAAA,KAAK8F,EAAQ,QAAQ3B,EAAO,OAAO,GAAG,CAAC,EAAE,KAC9C+C,EAAA,UAAWtH,GAAU,CACb,MAAAuH,EAAkBR,GAA8B/G,CAAK,EAE3D,GAAI,CAACuH,EAAwB,OAAAlH,EAAA,GAAGL,CAAK,EAE/B,MAAAwH,EACJ,OAAOD,EAAgB,kBAAqB,SAExCE,EACJF,EAAgB,mBAAqB,QACrCL,EAAUK,EAAgB,iBAE5B,GACEC,GACAC,GACAF,EAAgB,QAAU,OAE1B,OAAOlH,EAAAA,GAAGL,CAAK,EAGjB,MAAM0H,EAAsBH,EAAgB,MAExC,OAAA,QAAQ,IAAI,WAAa,eACnB,QAAA,IACN,kCACA,gBACAA,EACA,cAAchD,EAAO,OAAO,GAAG,EACjC,EAGFA,EAAO,SAAS8C,EAAQ,CAAE,MAAOK,EAAqB,QAAAR,CAAA,CAAS,CAAC,EAEzD7G,EAAAA,GAAGL,CAAK,CAChB,CAAA,CACH,CACF,CCjFO,SAAS2H,GAAe,CAC7B,QAAAC,EAAU,CAAC,EACX,WAAAC,EACA,QAAA3B,CACF,EAaG,CAaD,MAAM4B,GAXJF,EAAQ,SAAW,EACfvH,EAAG,GAAA,CAAE,CAAA,EACL0H,EAAA,IACE,GAAGH,EAAQ,IAAKpD,GACd4C,GAAqB,CACnB,QAAAlB,EACA,OAAA1B,CACD,CAAA,CAAA,CAEL,GAE+B,KACnCtC,EAAAA,IAAI2F,CAAU,EACd1F,EAAA,WAAYC,IACF,QAAA,MAAM,oBAAqBA,CAAK,EAEjCC,EAAA,MACR,EACD2F,EAAM,MAAA,CACR,EAOMC,EAAaH,EAAY,KAC7BR,EAAA,UAAU,IACRY,EAAA,MACE,GAAGN,EAAQ,IAAKpD,GACdA,EAAO,OAAO,QAAQ,KACpB2D,EAAA,aAAa,IAAKC,iBAAgB,CAChC,SAAU,EAAA,CACX,EACDd,EAAA,UAAU,IACRlH,EAAA,KACE6G,GAAa,CACX,QAAAf,EACA,OAAA1B,CACD,CAAA,CAAA,CACH,CACF,CACF,CACF,CACF,CAEJ,EAEO,OAAA0D,EAAA,MACLJ,EAAY,KACVxC,EAAAA,IAAI,KAAO,CACT,KAAM,UAAA,EACN,CACJ,EACA2C,EAAW,KACT3C,EAAAA,IAAI,KAAO,CACT,KAAM,WAAA,EACN,CAAA,CAEN,CACF,CClFO,SAAS+C,GAAkB,CAChC,QAAAT,EAAU,CAAC,EACX,WAAAC,EACA,QAAA3B,CACF,EAmB4B,CACpB,MAAAoC,EAAgB5H,EAAWmH,CAAU,EACrCU,EAAiBzE,EAAuBoC,CAAO,EAC/CsC,EAAiB1E,EAAuB8D,CAAO,EAE9C,OAAA9G,EACL,IACuByH,EAAe,QAAQ,KAC1CjB,EAAA,UAAWpB,GACJA,EAEEgC,EAAA,MACL7H,KAAG,CAAE,KAAM,QAAS,EACpBmI,EAAe,QAAQ,KACrBC,EAAA,UAAWb,GACTD,GAAe,CACb,QAAAzB,EACA,QAAA0B,EACA,WAAY,IAAM,QAChB1C,EAAAoD,EAAc,UAAd,MAAApD,EAAA,KAAAoD,EAAwB,CAE3B,CAAA,CAAA,CACH,CAEJ,EAfqBjI,EAAAA,GAAG,CAAE,KAAM,QAAS,CAgB1C,CACH,EAEoB,KAClBqI,EAAA,KACE,CAACC,EAAKC,IACAA,EAAM,OAAS,QAAgB,CAAE,WAAY,EAAM,EACnDA,EAAM,OAAS,WAAmB,CAAE,WAAY,EAAK,EAElDD,EAET,CAAE,WAAY,EAAiB,CAAA,CAEnC,EAEF,CAAE,aAAc,CAAE,WAAY,EAAM,EAAG,UAAWlC,EAAa,EAC/D,CAAC8B,EAAgBC,CAAc,CACjC,CACF,CChFO,MAAMK,GAAuB,IAAM,CACxC,MAAM/F,EAAUH,EAAiB,CAC/B,iBAAkB,IAAM,CACtBG,EAAQ,QAAQ,KAAK,CAAA,CACvB,CACD,EAEM,OAAAA,CACT,ECRagG,EAAiBC,GAA2B,CAC7CvG,EAAA,UAAAuG,EAAQ,EAAE,CACtB,ECFaC,GAAYtG,GAAmB,CAC1CoG,EAAc,IAAM,CACfpG,EAAA,CAAA,CACJ,CACH,EC6BgB,SAAAuG,EAASC,EAAsBC,EAAqB,CAC3D,OAAA,KAAK,IAAID,EAAcC,CAAW,CAC3C,CAGgB,SAAAC,EACdC,EACAC,EACA,CACA,MAAO,IAAKD,EAAYC,CAC1B,CAUO,SAASC,GAAwB/E,EAAuC,CACvE,KAAA,CACJ,MAAAH,EACA,WAAAmF,EACA,gBAAAC,EACA,WAAAC,EAAa,IAAMrJ,EAAAA,GAAG,EAAI,CAAA,EACxBmE,EAEEmF,EACJ,OAAOtF,GAAU,WACbA,IAAU,GACR,EACAA,IAAU,GACR,OAAO,kBACNA,GAAS,OAAO,kBACrB,OAAO,kBAEPuF,EACJ,OAAOvF,GAAU,WAEbA,EACA,IAAM,GAENiF,EAAkB,OAAOE,GAAe,SAAWA,EAAa,IAEhE/E,EAAmB,CACvB,YAAAmF,EACA,GAAGpF,CACL,EAEM,CACJ,YAAA2E,EAAc,OAAO,kBACrB,eAAAU,EAAiB,GACjB,aAAAX,EAAeE,CAAA,EACb3E,EAEG,OAAI9C,GACTnB,EAAAA,MAAM,IAAM,CACV,IAAIsJ,EAAe,EAEb,MAAAC,EAAgB,CAACC,EAAiB5H,IACtC4H,EAAUL,EAAaC,EAAYI,EAAS5H,CAAK,EAAI,GAEvD,OAAOT,EAAO,KACZQ,EAAA,WAA8BC,GAAU,OAGtC,GAFA0H,IAEI,CAACC,EAAcD,EAAe,EAAG1H,CAAK,EAAS,MAAAA,EAEnD,MAAM6H,GAAqB/E,EAAAV,EAAO,cAAP,YAAAU,EAAA,KAAAV,EAAqBsF,EAAc1H,GAE1D,GAAA,CAAC6H,EAA0B,MAAA7H,EAE/B,OAAO6H,EAAmB,KACxBC,EAAA,SAAUvI,GACRuG,EAAA,MACE7H,EAAAA,GAAGsB,CAAM,EACTwI,EAAAA,WAAW,IAAM/H,CAAK,CAAA,CACxB,CAEJ,CAAA,CACD,EACDgI,EAAA,UAAcC,GACLA,EAAO,KACZ5B,EAAA,UAAWrG,GAAU,CACnB,MAAM4H,EAAUF,EAAe,EAE/B,OAAOJ,EAAa,EAAA,KAClB1E,QAAM,EACNkF,EAAA,SAAS,IACPH,EAAcC,EAAS5H,CAAK,EACxBkI,EAAA,MACErB,EACEC,EAAac,EAASV,CAAe,EACrCH,CAAA,CACF,EACA,KACAe,EAAA,SAAUI,GAENb,GACA,CAACA,EAAgBO,EAAS5H,CAAK,EAExB+H,EAAAA,WAAW,IAAM/H,CAAK,EAExB/B,EAAAA,GAAGiK,CAAK,CAChB,CAAA,EAEHH,EAAAA,WAAW,IAAM/H,CAAK,CAAA,CAE9B,CACD,CAAA,CACH,CACD,EACDD,EAAA,WAAYgF,GAAM,CAChB,GAAI3C,EAAO,WACF,OAAAA,EAAO,WAAWsF,EAAc3C,CAAC,EAGpC,MAAAA,CAAA,CACP,EACDjF,EAAAA,IAAI,IAAM,CACJ2H,IACaC,EAAA,EAElB,CAAA,CACH,CAAA,CACD,CACL,CClKO,SAASS,GACdlH,EAC+C,CACxC,OAAAA,GAAQ,IACjB,CCHO,MAAMmH,GAAa,CAAmCxI,EAAMC,IACjED,EAAE,SAAWC,EAAE,QAAUD,EAAE,MAAM,CAACyI,EAAGC,IAAMD,IAAMxI,EAAEyI,CAAC,CAAC,ECF1CC,GAAW,OAAO,OAAW,KAAe,SAAU,OCkB5D,MAAMC,CAAa,CAAnB,cACWC,EAAA,oBAAwC,KAExD,SAASC,EAAmB,CACnB,OAAA,KAAK,SAAS,IAAIA,CAAS,CAAA,CAGpC,SACEC,EACAC,EACAzG,EACA,CACM,MAAAuG,EAAYG,UAAQF,CAAQ,EAE5BG,EAAeF,EAAO,KAO1BG,EAAAA,UAAUC,EAAA,UAAU7G,EAAQ,OAAO,CAAC,EACpCyD,EAAM,MAAA,CACR,EAEMqD,EAAyB,CAC7B,OAAQH,EACR,OAAA3G,EACA,IAAK,OACL,YAAa,GACb,SAAU,MACZ,EAEK,KAAA,SAAS,IAAIuG,EAAWO,CAAU,EAEjC,MAAAzJ,EAAMsJ,EAAa,UAAU,CACjC,KAAOI,GAAS,CACd,MAAMC,EAAQ,KAAK,SAAS,IAAIT,CAAS,EAErCS,IACIA,EAAA,SAAW,CAAE,MAAOD,CAAK,EAEnC,EACA,SAAU,IAAM,CACd,KAAK,YAAYR,CAAS,CAAA,CAC5B,CACD,EAED,OAAAO,EAAW,IAAMzJ,EAEVyJ,CAAA,CAGT,YAAYP,EAAmB,CAC7B,MAAMS,EAAQ,KAAK,SAAS,IAAIT,CAAS,EAEpCS,IAEDA,EAAM,MACRA,EAAM,IAAI,YAAY,EACtBA,EAAM,IAAM,QAGdA,EAAM,YAAc,GAEf,KAAA,SAAS,OAAOT,CAAS,EAAA,CAGhC,SAAU,CACR,KAAK,SAAS,QAAQ,CAAChF,EAAGF,IAAQ,CAChC,KAAK,YAAYA,CAAG,CAAA,CACrB,CAAA,CAEL,CAEa,MAAA4F,EAAUC,gBAAwC,MAAS,EAE3DC,GAAuBC,EAAA,KAClC,CAAC,CACC,SAAAC,EACA,OAAQC,CAAA,IAIJ,CACE,KAAA,CAACC,CAAM,EAAIrG,EAAAA,SAAS,IAAMoG,GAAW,IAAIjB,CAAc,EAE7DpI,OAAAA,EAAAA,UAAU,IACD,IAAM,CACXsJ,EAAO,QAAQ,CACjB,EACC,CAACA,CAAM,CAAC,QAEHN,EAAQ,SAAR,CAAiB,MAAOM,EAAS,SAAAF,EAAS,CAAA,CAEtD,EAEaG,EAAkB,IAAM,CAC7B,MAAAD,EAASE,aAAWR,CAAO,EAEjC,GAAI,CAACM,EACH,MAAM,IAAI,MACR,oEACF,EAGK,OAAAA,CACT,EChHgB,SAAAG,GAMd/K,EAQAgL,EACA,CACM,MAAAC,EAAeC,iBAAeF,CAAW,EACzCG,EAAeN,EAAgB,EAE/BO,EAAgBC,GACb,IAAI,QAAsB,CAACC,EAASC,IAAW,CACpD,MAAMC,EAAY,IAChBlM,EAAA,MAAM,IACJ,OAAOU,EAAQ,SAAY,WACvBA,EAAQ,QAAQqL,CAAO,EACvBrL,EAAQ,OACd,EAEI4J,EAAYG,EAAAA,QAAQsB,EAAQ,QAAQ,EAEpCI,EACJN,EAAa,SAASvB,CAAS,GAC/BuB,EAAa,SAASE,EAAQ,SAAUG,IAAaH,EAAQ,MAAM,EAEtDI,EAAgB,OAG5B,KACCC,EAAAA,KAAK,CAAC,EAMNC,EAAAA,MAAM,CAAC,GAER,UAAU,CACT,MAAQzK,GACCqK,EAAOrK,CAAK,EAErB,SAAU,IAAM,CACV,IAAAuK,GAAA,YAAAA,EAAiB,YAAa,OAC5B,OAAAA,EAAgB,OAAO,UAInB,QAAA,IACN,6DAA6D7B,CAAS,GACtE6B,GAAA,YAAAA,EAAiB,QACnB,EAEAR,EAAa,cAAc,CACzB,SAAUI,EAAQ,SAClB,MAAO,EAAA,CACR,GAEMC,EAAQ,MAAyB,EAGlCA,EAAAG,EAAgB,SAAS,KAAqB,GAElDA,GAAA,YAAAA,EAAiB,eAAgB,IACnC,WAAW,IAAM,CACfR,GAAA,MAAAA,EAAc,eAAe,CAC3B,SAAUI,EAAQ,SAClB,MAAO,EAAA,EACR,CACF,CACH,CACF,CACD,CAAA,CACJ,EAWI,OARQO,EAAA,SACb,CACE,GAAG5L,EACH,QAASoL,CACX,EACAJ,CACF,CAGF,CCjFgB,SAAAa,EAMd7L,EACAgL,EACA,CACA,MAAMc,EAAe1J,EAKnB,CACA,OAAQ,OACR,UAAW,GACX,QAAS,GACT,UAAW,GACX,OAAQ,EAAA,CACT,EAEK7C,EAASwM,EAAA,YACb,CACE,GAAG/L,EACH,WAAagM,GAA0B,CACjC,IAAAC,EAEJ,OAAO,IAAI,QAAe,CAACX,EAASC,IAAW,EAE3C,OAAOvL,EAAQ,YAAe,WAC1BA,EAAQ,WAAWgM,CAAS,EAC5BhM,EAAQ,YAEP,KAAK0L,EAAAA,KAAK,CAAC,CAAC,EAAE,UAAU,CAC7B,KAAOtB,GAAS,CACH6B,EAAA,CAAE,MAAO7B,CAAK,CAC3B,EACA,MAAQlJ,GAAU,CAChBqK,EAAOrK,CAAK,CACd,EACA,SAAU,IAAM,CACd,GAAI+K,IAAa,OACf,OAAOV,EAAO,IAAI,MAAM,mCAAmC,CAAC,EAE9DD,EAAQW,EAAS,KAAK,CAAA,CACxB,CACD,CAAA,CACF,CAAA,CAEL,EACAjB,CACF,EAEM,CAAE,OAAAkB,EAAQ,UAAAC,EAAW,QAAAC,EAAS,UAAAC,EAAW,OAAAC,GAAW/M,EAE1D+B,OAAAA,EAAAA,UAAU,IAAM,CACdwK,EAAa,QAAQ,KAAK,CACxB,OAAAI,EACA,UAAAC,EACA,QAAAC,EACA,UAAAC,EACA,OAAAC,CAAA,CACD,CAAA,EACA,CAACJ,EAAQC,EAAWC,EAASC,EAAWC,EAAQR,CAAY,CAAC,EAEzD,CAAE,GAAGvM,EAAQ,OAAQuM,EAAa,OAAQ,CACnD,CCtFgB,SAAAS,GAMdvM,EACAgL,EACA,CACA,KAAM,CAACwB,EAASC,CAAM,EAAIxK,EAAsB,EAG1C,CAAE,OAAAyK,EAAQ,YAAAC,EAAa,GAAGvH,CAAS,EAAAyG,EAMvC,CACE,GAAG7L,EACH,WAAagM,IAET,OAAOhM,EAAQ,YAAe,WAC1BA,EAAQ,WAAWgM,CAAS,EAC5BhM,EAAQ,YAEA,KAAKiK,EAAA,UAAUuC,CAAO,EAAGI,EAAAA,eAAe,IAAI,CAAC,CAE/D,EACA5B,CACF,EAEM6B,EAAevM,EAAA,YAClB0L,IACQS,EAAA,EAEAC,EAAOV,CAAS,GAEzB,CAACU,EAAQD,CAAM,CACjB,EAEMK,EAAoBxM,EAAA,YACvB0L,IACQS,EAAA,EAEAE,EAAYX,CAAS,GAE9B,CAACW,EAAaF,CAAM,CACtB,EAEA,MAAO,CAAE,GAAGrH,EAAM,OAAQyH,EAAc,YAAaC,CAAkB,CACzE,CCxCgB,SAAAC,GAMd/M,EAGAgL,EACA,CACM,MAAAJ,EAASM,iBAAeF,CAAW,EAEnCgC,EAAchN,EAAQ,YAEtB,CAAE,YAAA2M,EAAa,GAAGvH,CAAA,EAASyG,EAM/B,CACE,GAAG7L,EACH,SAAS,CAAE,UAAAgM,GAAa,OACf,OAAAhI,EAAAhE,EAAQ,WAAR,YAAAgE,EAAA,KAAAhE,EAAmBgM,EAC5B,EACA,UAAU5B,EAAM4B,EAAWX,EAAS,OAClC,OAAOrH,EAAAhE,EAAQ,YAAR,YAAAgE,EAAA,KAAAhE,EAAoBoK,EAAM4B,EAAU,UAAWX,EACxD,EACA,QAAQnK,EAAO8K,EAAWX,EAAS,OACjC,OAAOrH,EAAAhE,EAAQ,UAAR,YAAAgE,EAAA,KAAAhE,EAAkBkB,EAAO8K,EAAU,UAAWX,EACvD,EACA,UAAUjB,EAAMlJ,EAAO8K,EAAWX,EAAS,OACzC,OAAOrH,EAAAhE,EAAQ,YAAR,YAAAgE,EAAA,KAAAhE,EAAoBoK,EAAMlJ,EAAO8K,EAAU,UAAWX,EAC/D,EACA,WAAY,CAAC,CAAE,OAAA4B,EAAQ,UAAAjB,KAAgB,CAC/B,MAAAvL,EACJ,OAAOT,EAAQ,YAAe,WAC1BA,EAAQ,WAAWgM,CAAS,EAC5BhM,EAAQ,WAEd,OAAOiN,EAAO,KACZC,SAAQC,GAAYA,CAAO,EAC3BrJ,QAAM,EACNsC,EAAAA,UAAU,IAAM3F,CAAM,CACxB,CAAA,CAEJ,EACAuK,CACF,EAEMoC,EAAoB9M,EAAA,YACxB,MAAO0L,GAA0B,CAC/B,MAAMqB,EAAYzC,EAAO,iBAAiB,EAAE,QAAQ,CAClD,YAAAoC,EACA,MAAO,EAAA,CACR,EAEKpL,EAAU,IAAIU,EAAA,gBAAgB,EAAK,EAEnC/C,EAASoN,EAAY,CAAE,UAAAX,EAAW,OAAQpK,EAAS,EAEzD,aAAM,QAAQ,IACZyL,EAAU,IAAKC,GAAaA,EAAS,SAAS,EAAE,MAAMC,MAAI,CAAC,CAC7D,EAEA3L,EAAQ,KAAK,EAAI,EAEV,MAAMrC,EAAO,QAAQ,IAAM,CAChCqC,EAAQ,SAAS,CAAA,CAClB,CACH,EACA,CAAC+K,EAAa/B,EAAQoC,CAAW,CACnC,EAEMQ,EAAelN,EAAA,YAClB0L,GAA0B,CACPoB,EAAApB,CAAS,EAAE,MAAMuB,MAAI,CACzC,EACA,CAACH,CAAiB,CACpB,EAEA,MAAO,CAAE,GAAGhI,EAAM,OAAQoI,EAAc,YAAaJ,CAAkB,CACzE"}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/lib/utils/isPromiseLike.ts","../src/lib/utils/makeObservable.ts","../src/lib/utils/react/useLiveRef.ts","../src/lib/binding/useObserve.ts","../src/lib/binding/useSubscribe.ts","../src/lib/utils/react/useConstant.ts","../src/lib/binding/useSubject.ts","../src/lib/binding/useObservableCallback.ts","../src/lib/binding/useBehaviorSubject.ts","../src/lib/binding/useObservableState.ts","../src/lib/binding/useLiveBehaviorSubject.ts","../src/lib/binding/useSubscribeEffect.ts","../src/lib/state/constants.ts","../src/lib/state/signal.ts","../src/lib/state/react/useSignalValue.ts","../src/lib/state/react/useSignal.ts","../src/lib/state/persistance/adapters/createLocalforageAdapter.ts","../src/lib/state/persistance/adapters/createLocalStorageAdapter.ts","../src/lib/utils/shallowEqual.ts","../src/lib/state/persistance/constants.ts","../src/lib/state/persistance/helpers.ts","../src/lib/state/persistance/persistSignals.ts","../src/lib/state/react/usePersistSignals.tsx","../src/lib/utils/react/useUnmountObservable.ts","../src/lib/utils/react/useEffectOnce.ts","../src/lib/utils/react/useMount.ts","../src/lib/utils/operators/retryBackoff.ts","../src/lib/utils/isDefined.ts","../src/lib/utils/arrayEqual.ts","../src/lib/utils/isServer.ts","../src/lib/queries/QueryClientProvider$.tsx","../src/lib/queries/useQuery$.ts","../src/lib/queries/useMutation$.ts","../src/lib/queries/useSwitchMutation$.ts","../src/lib/queries/useConcatMutation$.ts"],"sourcesContent":["// biome-ignore lint/suspicious/noExplicitAny: <explanation>\nexport function isPromiseLike<T>(value: T): value is T & Promise<any> {\n\treturn (\n\t\tvalue instanceof Promise ||\n\t\t(value &&\n\t\t\ttypeof value === \"object\" &&\n\t\t\t\"then\" in value &&\n\t\t\ttypeof value.then === \"function\" &&\n\t\t\t\"catch\" in value &&\n\t\t\tvalue.catch === \"function\")\n\t);\n}\n","import { type Observable, defer, from, isObservable, of } from \"rxjs\";\nimport { isPromiseLike } from \"./isPromiseLike\";\n\ntype FnReturnToObservable<T> = T extends Observable<infer ObservedData>\n\t? ObservedData\n\t: T extends Promise<infer ThenData>\n\t\t? ThenData\n\t\t: T;\n\nexport function makeObservable<Data>(\n\tfn: Observable<Data>,\n): () => Observable<Data>;\n\nexport function makeObservable<Data>(fn: Promise<Data>): () => Observable<Data>;\n\nexport function makeObservable<Data>(\n\tfn: Promise<Data> | Observable<Data>,\n): () => Observable<Data>;\n\nexport function makeObservable<Data>(\n\tfn: () => Promise<Data> | Observable<Data>,\n): () => Observable<Data>;\n\n/**\n * Generic factory\n */\nexport function makeObservable<Data>(\n\tfn: () => Promise<Data> | Observable<Data> | Data,\n): () => Observable<Data>;\n\n/**\n * Generic factory\n */\nexport function makeObservable<Data, Params>(\n\tfn: (params: Params) => Data,\n): (params: Params) => Observable<FnReturnToObservable<Data>>;\n\n/**\n * Generic factory OR Observable\n */\nexport function makeObservable<Data, Return>(\n\tfn: 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\tsomething:\n\t\t| ((params: Params) => Observable<Data>)\n\t\t| Promise<Data>\n\t\t| Observable<Data>\n\t\t| ((params: Params) => Promise<Data>)\n\t\t| ((params: Params) => Data)\n\t\t| Data,\n): (params: Params) => Observable<Data> {\n\tif (isObservable(something)) return () => something;\n\n\tif (isPromiseLike(something)) return () => from(something);\n\n\tif (typeof something !== \"function\") return () => of(something);\n\n\tconst somethingAsFunction = something as\n\t\t| ((params: Params) => Observable<Data>)\n\t\t| ((params: Params) => Promise<Data>)\n\t\t| ((params: Params) => Data);\n\n\treturn (params: Params) =>\n\t\tdefer(() => {\n\t\t\tconst result = somethingAsFunction(params);\n\n\t\t\tif (isPromiseLike(result)) {\n\t\t\t\treturn from(result);\n\t\t\t}\n\n\t\t\tif (isObservable(result)) {\n\t\t\t\treturn result;\n\t\t\t}\n\n\t\t\treturn of(result);\n\t\t});\n}\n","import { useMemo, useRef } from \"react\";\n\nexport const useLiveRef = <T>(value: T) => {\n\tconst ref = useRef(value);\n\n\t/**\n\t * We don't update the value on render because of potential\n\t * bug related to react concurrency mode.\n\t * We don't update the value in a useEffect because effects run after\n\t * render and we could maybe? have situation where the ref\n\t * is being called after render but before effect?\n\t * I am not sure of that one.\n\t *\n\t * `useMemo` is a good compromise since it runs during render but before\n\t * repaint. It prevents the concurrency mode issue.\n\t */\n\tuseMemo(() => {\n\t\tref.current = value;\n\t}, [value]);\n\n\treturn ref;\n};\n","import {\n\ttype DependencyList,\n\tuseCallback,\n\tuseRef,\n\tuseSyncExternalStore,\n} from \"react\";\nimport {\n\ttype BehaviorSubject,\n\tEMPTY,\n\ttype Observable,\n\tcatchError,\n\tdistinctUntilChanged,\n\tidentity,\n\tstartWith,\n\ttap,\n} from \"rxjs\";\nimport { makeObservable } from \"../utils/makeObservable\";\nimport { useLiveRef } from \"../utils/react/useLiveRef\";\n\ninterface Option<R = undefined> {\n\tdefaultValue: R;\n\tunsubscribeOnUnmount?: boolean;\n\tcompareFn?: (a: R, b: R) => boolean;\n}\n\nexport function useObserve<T>(source: BehaviorSubject<T>): T;\n\nexport function useObserve<T>(source: Observable<T>): T | undefined;\n\nexport function useObserve<T>(\n\tsource: () => Observable<T>,\n\tdeps: DependencyList,\n): T | undefined;\n\nexport function useObserve<T>(\n\tsource: () => Observable<T> | undefined,\n\tdeps: DependencyList,\n): T | undefined;\n\nexport function useObserve<T>(source: Observable<T>, options: Option<T>): T;\n\nexport function useObserve<T>(\n\tsource: () => Observable<T>,\n\toptions: Option<T>,\n\tdeps: DependencyList,\n): T;\n\nexport function useObserve<T>(\n\tsource$: Observable<T> | (() => Observable<T> | undefined),\n\toptionsOrDeps?: Option<T> | DependencyList,\n\tmaybeDeps?: DependencyList,\n): T {\n\tconst options =\n\t\toptionsOrDeps != null && !Array.isArray(optionsOrDeps)\n\t\t\t? (optionsOrDeps as Option<T>)\n\t\t\t: ({\n\t\t\t\t\tdefaultValue: undefined,\n\t\t\t\t\tunsubscribeOnUnmount: true,\n\t\t\t\t\tcompareFn: undefined,\n\t\t\t\t} satisfies Option<undefined>);\n\tconst deps =\n\t\t!maybeDeps && Array.isArray(optionsOrDeps)\n\t\t\t? optionsOrDeps\n\t\t\t: typeof source$ === \"function\"\n\t\t\t\t? (maybeDeps ?? [])\n\t\t\t\t: [source$];\n\tconst valueRef = useRef(\n\t\t\"getValue\" in source$ && typeof source$.getValue === \"function\"\n\t\t\t? source$.getValue()\n\t\t\t: options.defaultValue,\n\t);\n\tconst sourceRef = useLiveRef(source$);\n\tconst optionsRef = useLiveRef(options);\n\n\tconst getSnapshot = useCallback(() => {\n\t\treturn valueRef.current;\n\t}, []);\n\n\t// biome-ignore lint/correctness/useExhaustiveDependencies: <explanation>\n\tconst subscribe = useCallback(\n\t\t(next: () => void) => {\n\t\t\tconst source = sourceRef.current;\n\n\t\t\tconst sub = makeObservable(source)()\n\t\t\t\t.pipe(\n\t\t\t\t\toptionsRef.current.defaultValue\n\t\t\t\t\t\t? startWith(optionsRef.current.defaultValue)\n\t\t\t\t\t\t: identity,\n\t\t\t\t\t/**\n\t\t\t\t\t * @important there is already a Object.is comparison in place from react\n\t\t\t\t\t * so we only add a custom compareFn if provided\n\t\t\t\t\t */\n\t\t\t\t\tdistinctUntilChanged((a, b) => {\n\t\t\t\t\t\tif (optionsRef.current.compareFn) {\n\t\t\t\t\t\t\tif (a === undefined || b === undefined) return false;\n\n\t\t\t\t\t\t\treturn optionsRef.current.compareFn(a, b);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}),\n\t\t\t\t\ttap((value) => {\n\t\t\t\t\t\tvalueRef.current = value;\n\t\t\t\t\t}),\n\t\t\t\t\tcatchError((error) => {\n\t\t\t\t\t\tconsole.error(error);\n\n\t\t\t\t\t\treturn EMPTY;\n\t\t\t\t\t}),\n\t\t\t\t)\n\t\t\t\t.subscribe(next);\n\n\t\t\treturn () => {\n\t\t\t\tif (optionsRef.current.unsubscribeOnUnmount === false) return;\n\n\t\t\t\tsub.unsubscribe();\n\t\t\t};\n\t\t},\n\t\t[...deps],\n\t);\n\n\tconst result = useSyncExternalStore(subscribe, getSnapshot, getSnapshot);\n\n\treturn result as T;\n}\n","import { type DependencyList, useEffect } from \"react\";\nimport { EMPTY, catchError } from \"rxjs\";\nimport { makeObservable } from \"../utils/makeObservable\";\nimport { useLiveRef } from \"../utils/react/useLiveRef\";\nimport type { SubscribeSource } from \"./types\";\n\nexport function useSubscribe<T>(\n\tsource: SubscribeSource<T> | (() => T),\n\tdeps: DependencyList = [],\n) {\n\tconst sourceRef = useLiveRef(source);\n\n\tuseEffect(() => {\n\t\tconst sub = makeObservable(sourceRef.current)()\n\t\t\t.pipe(\n\t\t\t\tcatchError((error) => {\n\t\t\t\t\tconsole.error(error);\n\n\t\t\t\t\treturn EMPTY;\n\t\t\t\t}),\n\t\t\t)\n\t\t\t.subscribe();\n\n\t\treturn () => {\n\t\t\tsub.unsubscribe();\n\t\t};\n\t}, [...deps, sourceRef]);\n}\n","import { useEffect, useRef } from \"react\";\n\nexport const useConstant = <T>(fn: () => T) => {\n\tconst ref = useRef<T>(undefined);\n\n\tif (!ref.current) {\n\t\tref.current = fn();\n\t}\n\n\tuseEffect(() => {\n\t\t/**\n\t\t * Because strict mode keep reference to the same ref when the component\n\t\t * is re-mounted we force a rewrite here to prevent weird behavior.\n\t\t * I don't know why react does that since it is I believe technically\n\t\t * wrong. useRef should persist across re-render, not re-mount.\n\t\t *\n\t\t * @important\n\t\t * The downside is that during dev the factory will be called again every\n\t\t * mount.\n\t\t */\n\t\tif (process.env.NODE_ENV === \"development\") {\n\t\t\t// ref.current = fn();\n\t\t}\n\t}, []);\n\n\treturn ref as { current: T };\n};\n","import { useEffect, useRef } from \"react\";\nimport { Subject } from \"rxjs\";\nimport { useConstant } from \"../utils/react/useConstant\";\nimport { useLiveRef } from \"../utils/react/useLiveRef\";\n\n/**\n * @see\n * useBehaviorSubject\n */\nexport const useSubject = <S>({\n\tonBeforeComplete,\n\tcompleteOnUnmount = true,\n}: { onBeforeComplete?: () => void; completeOnUnmount?: boolean } = {}) => {\n\tconst subject = useConstant(() => new Subject<S>());\n\tconst completed = useRef(false);\n\tconst onBeforeCompleteRef = useLiveRef(onBeforeComplete);\n\tconst completeOnUnmountRef = useLiveRef(completeOnUnmount);\n\n\tuseEffect(() => {\n\t\tif (completed.current) {\n\t\t\tsubject.current = new Subject<S>();\n\t\t\tcompleted.current = false;\n\t\t}\n\n\t\treturn () => {\n\t\t\t/**\n\t\t\t * @important\n\t\t\t * In case we don't want to complete we still want to\n\t\t\t * flag it in order to be replaced with new subject on remount.\n\t\t\t */\n\t\t\tif (!completeOnUnmountRef.current) {\n\t\t\t\tcompleted.current = true;\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!completed.current) {\n\t\t\t\tif (onBeforeCompleteRef.current != null) onBeforeCompleteRef.current();\n\t\t\t\tsubject.current.complete();\n\t\t\t\tcompleted.current = true;\n\t\t\t}\n\t\t};\n\t}, [completeOnUnmountRef, onBeforeCompleteRef, subject]);\n\n\treturn subject;\n};\n","import { useCallback } from \"react\";\nimport type { Observable } from \"rxjs\";\nimport { useSubject } from \"./useSubject\";\n\n/**\n * This creates an event handler and an observable that represents calls to that handler.\n */\nexport const useObservableCallback = <T = void>(): readonly [\n\tObservable<T>,\n\t(arg: T) => void,\n] => {\n\tconst subject = useSubject<T>();\n\n\t// biome-ignore lint/correctness/useExhaustiveDependencies: <explanation>\n\tconst trigger = useCallback((arg: T) => {\n\t\tsubject.current.next(arg);\n\t}, []);\n\n\treturn [subject.current, trigger] as const;\n};\n","import { useEffect, useRef } from \"react\";\nimport { BehaviorSubject } from \"rxjs\";\nimport { useConstant } from \"../utils/react/useConstant\";\n\n/**\n * @important\n * Because of React 18 and its strict mode\n * - concurrency means that effect can run more than once without committing\n * - state & ref can be reused across remount\n *\n * This means that using regular useRef for subject and calling a complete() on\n * unmount will not have the desired effects. Next effects will run with a completed\n * subject and crash.\n *\n * There is another pattern to the current implementation which is using useState and\n * do a setState on the second mount if the source has completed. This will trigger a new\n * commit and re-render with new subject. However I am not sure which one is correct\n * for now. Because of the simple first naive approach is using useRef I will use the\n * same but patch it to support Strict Mode\n *\n * @see https://github.com/reactwg/react-18/discussions/18\n * @see https://github.com/reactwg/react-18/discussions/19\n */\nexport const useBehaviorSubject = <S>(state: S) => {\n\tconst subject = useConstant(() => new BehaviorSubject(state));\n\tconst completed = useRef(false);\n\tconst stateRef = useRef(state);\n\n\tuseEffect(() => {\n\t\tif (completed.current) {\n\t\t\tsubject.current = new BehaviorSubject(stateRef.current);\n\t\t\tcompleted.current = false;\n\t\t}\n\n\t\treturn () => {\n\t\t\tif (!completed.current) {\n\t\t\t\tsubject.current.complete();\n\t\t\t\tcompleted.current = true;\n\t\t\t}\n\t\t};\n\t}, [subject]);\n\n\treturn subject;\n};\n","import { useCallback } from \"react\";\nimport type { Observable } from \"rxjs\";\nimport { useLiveRef } from \"../utils/react/useLiveRef\";\nimport { useBehaviorSubject } from \"./useBehaviorSubject\";\n\n/**\n * If you need to represent some piece of state as an observable and also want the ability to change\n * this state during the lifetime of the component, useObservableState\n * is for you. It acts like React.useState(), only that\n * it returns an observable representing changes to the\n * value instead of the value itself. The callback/setter\n * returned acts like a the regular callback you\n * would otherwise get from React.useState. This is useful when you want\n * to compose the state change together with other observables.\n *\n * @important\n * The last array value is the value itself in case\n * you need a direct reference to the value\n */\nexport const useObservableState = <T>(\n\tdefaultValue: T,\n): [Observable<T>, (value: T) => void, T] => {\n\tconst subject = useBehaviorSubject(defaultValue);\n\n\tconst subject$ = useLiveRef(subject.current.asObservable());\n\n\tconst setState = useCallback(\n\t\t(value: T) => {\n\t\t\tsubject.current.next(value);\n\t\t},\n\t\t[subject.current],\n\t);\n\n\treturn [subject$.current, setState, subject.current.getValue()];\n};\n","import { useEffect } from \"react\";\nimport { useBehaviorSubject } from \"./useBehaviorSubject\";\n\nexport const useLiveBehaviorSubject = <S>(state: S) => {\n\tconst subject = useBehaviorSubject(state);\n\n\tuseEffect(() => {\n\t\tsubject.current.next(state);\n\t}, [state, subject]);\n\n\treturn subject;\n};\n","import { type DependencyList, useCallback } from \"react\";\nimport { catchError, identity, retry } from \"rxjs\";\nimport { makeObservable } from \"../utils/makeObservable\";\nimport { useLiveRef } from \"../utils/react/useLiveRef\";\nimport type { SubscribeSource } from \"./types\";\nimport { useSubscribe } from \"./useSubscribe\";\n\ninterface Option {\n\tretry?: boolean;\n\tonError?: (error: unknown) => void;\n}\n\nexport function useSubscribeEffect<T>(source: SubscribeSource<T>): void;\nexport function useSubscribeEffect<T>(\n\tsource: SubscribeSource<T>,\n\toptions: Option,\n): void;\n\nexport function useSubscribeEffect<T>(\n\tsource: SubscribeSource<T>,\n\tdeps: DependencyList,\n): void;\n\nexport function useSubscribeEffect<T>(\n\tsource: SubscribeSource<T>,\n\toptions: Option,\n\tdeps: DependencyList,\n): void;\n\nexport function useSubscribeEffect<T>(\n\tsource: SubscribeSource<T>,\n\tunsafeOptions?: Option | DependencyList,\n\tdeps: DependencyList = [],\n) {\n\tconst options =\n\t\tunsafeOptions != null && !Array.isArray(unsafeOptions)\n\t\t\t? (unsafeOptions as Option)\n\t\t\t: ({} satisfies Option);\n\tconst retryOption = options.retry ?? true;\n\tconst onErrorRef = useLiveRef(\n\t\toptions.onError ??\n\t\t\t((error: unknown) => {\n\t\t\t\tconsole.error(error);\n\t\t\t}),\n\t);\n\n\t// biome-ignore lint/correctness/useExhaustiveDependencies: <explanation>\n\tconst sourceAsObservable = useCallback(() => makeObservable(source)(), deps);\n\n\tconst enhancerMakeObservable = useCallback(\n\t\t() =>\n\t\t\tsourceAsObservable().pipe(\n\t\t\t\tcatchError((error) => {\n\t\t\t\t\tonErrorRef.current(error);\n\n\t\t\t\t\tthrow error;\n\t\t\t\t}),\n\t\t\t\tretryOption ? retry() : identity,\n\t\t\t),\n\t\t[sourceAsObservable, retryOption, onErrorRef],\n\t);\n\n\tuseSubscribe(enhancerMakeObservable, deps);\n}\n","export const SIGNAL_RESET = Symbol(\"SIGNAL_RESET\");\n","import { BehaviorSubject, first, skip } from \"rxjs\";\nimport type { Observable } from \"rxjs\";\nimport { SIGNAL_RESET } from \"./constants\";\n\ntype setValue<S> = (\n\tstateOrUpdater: typeof SIGNAL_RESET | S | ((prev: S) => S),\n) => void;\n\ntype Getter<Value> = (\n\t// biome-ignore lint/suspicious/noExplicitAny: <explanation>\n\tget: <GetSignal extends Signal<any, any, any>>(\n\t\tsignal: GetSignal,\n\t) => ReturnType<GetSignal[\"getValue\"]>,\n) => Value;\n\nexport type Config<\n\tDefaultValue = undefined,\n\tKey = undefined,\n> = Key extends undefined\n\t? {\n\t\t\tdefault: DefaultValue;\n\t\t}\n\t: {\n\t\t\tdefault: DefaultValue;\n\t\t\tkey: Key;\n\t\t};\n\ninterface ReadOnlySignalConfig<Value> {\n\tget: Getter<Value>;\n}\n\nexport interface ReadOnlySignal<Value> {\n\tgetValue: () => Value;\n\tconfig: ReadOnlySignalConfig<Value>;\n\tsubject: Observable<Value>;\n}\n\nexport interface Signal<\n\tDefaultValue = undefined,\n\tValue = undefined,\n\tKey = undefined,\n> {\n\tsetValue: setValue<DefaultValue>;\n\tgetValue: () => Value;\n\tconfig: Config<DefaultValue, Key>;\n\tsubject: Observable<DefaultValue>;\n}\n\nexport function signal<T = undefined, V = T>(\n\tconfig?: Omit<Partial<Config<T, string | undefined>>, \"key\" | \"get\">,\n): Signal<T, V, undefined>;\n\nexport function signal<T = undefined, V = T>(\n\tconfig: Omit<Partial<Config<T, string | undefined>>, \"get\"> & {\n\t\tkey: string;\n\t},\n): Signal<T, V, string>;\n\nexport function signal<V = undefined>(\n\tconfig: ReadOnlySignalConfig<V>,\n): ReadOnlySignal<V>;\n\nexport function signal<\n\tT = undefined,\n\tV = undefined,\n\tKey extends string | undefined = undefined,\n>(\n\tconfig: Partial<Config<T, Key>> | ReadOnlySignalConfig<V> = {},\n): Signal<T, V, Key> | ReadOnlySignal<V> {\n\tconst normalizedConfig: Config<T | undefined, string | undefined> = {\n\t\t// biome-ignore lint/suspicious/noExplicitAny: <explanation>\n\t\tdefault: (config as any).default,\n\t\t// biome-ignore lint/suspicious/noExplicitAny: <explanation>\n\t\tkey: (config as any).key,\n\t};\n\tconst { default: defaultValue } = normalizedConfig ?? {};\n\t// biome-ignore lint/suspicious/noExplicitAny: <explanation>\n\tconst subject = new BehaviorSubject(defaultValue as any);\n\n\tconst setValue = <F extends (prev: T) => T>(\n\t\targ: T | F | typeof SIGNAL_RESET,\n\t) => {\n\t\tconst update = (value: T | undefined) => {\n\t\t\tif (\"key\" in config) {\n\t\t\t\tconsole.log(\n\t\t\t\t\t\"[reactjrx][state][signal]:\",\n\t\t\t\t\t`Value update for signal ${config.key}`,\n\t\t\t\t\t{\n\t\t\t\t\t\tprev: subject.getValue(),\n\t\t\t\t\t\tcurr: value,\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tsubject.next(value);\n\t\t};\n\n\t\tif (typeof arg === \"function\") {\n\t\t\tconst change = (arg as F)(subject.getValue());\n\n\t\t\tif (change === subject.getValue()) return;\n\n\t\t\treturn update(change);\n\t\t}\n\n\t\tif (arg === SIGNAL_RESET) {\n\t\t\tif (defaultValue === subject.getValue()) return;\n\n\t\t\treturn update((defaultValue ?? undefined) as T);\n\t\t}\n\n\t\tif (arg === subject.getValue()) return;\n\n\t\treturn update(arg);\n\t};\n\n\tconst getValue = () => subject.getValue();\n\n\t/**\n\t * Read Only signals\n\t */\n\tif (\"get\" in config) {\n\t\t// biome-ignore lint/suspicious/noExplicitAny: <explanation>\n\t\tconst getter = (signal: Signal<any, any, any>) => {\n\t\t\tsignal.subject.pipe(skip(1), first()).subscribe(() => {\n\t\t\t\tconst newValue = config.get?.(getter);\n\n\t\t\t\t// biome-ignore lint/suspicious/noExplicitAny: <explanation>\n\t\t\t\tsetValue(newValue as any);\n\t\t\t});\n\n\t\t\treturn signal.getValue();\n\t\t};\n\n\t\tconst defaultValue = config.get(getter);\n\n\t\t// biome-ignore lint/suspicious/noExplicitAny: <explanation>\n\t\tsetValue(defaultValue as any);\n\n\t\treturn {\n\t\t\tgetValue,\n\t\t\tconfig,\n\t\t\tsubject,\n\t\t};\n\t}\n\n\treturn {\n\t\tsetValue,\n\t\tgetValue,\n\t\t// biome-ignore lint/suspicious/noExplicitAny: <explanation>\n\t\tconfig: normalizedConfig as any,\n\t\tsubject,\n\t};\n}\n\n// biome-ignore lint/suspicious/noExplicitAny: <explanation>\nexport type SignalValue<S extends Signal<any, any, any>> = ReturnType<\n\tS[\"getValue\"]\n>;\n","import { type Observable, distinctUntilChanged, map } from \"rxjs\";\nimport { useObserve } from \"../../binding/useObserve\";\nimport type { ReadOnlySignal, Signal } from \"../signal\";\n\nexport function useSignalValue<DefaultValue, Value, Key, SelectValue>(\n\tsignal: Signal<DefaultValue, Value, Key>,\n\tselector: (value: DefaultValue) => SelectValue,\n): SelectValue;\nexport function useSignalValue<DefaultValue, Value, Key>(\n\tsignal: Signal<DefaultValue, Value, Key>,\n): DefaultValue;\n// read only\nexport function useSignalValue<Value>(signal: ReadOnlySignal<Value>): Value;\n// read only select\nexport function useSignalValue<Value, SelectValue>(\n\tsignal: ReadOnlySignal<Value>,\n\tselector: (value: Value) => SelectValue,\n): SelectValue;\nexport function useSignalValue<DefaultValue, Value, Key, SelectedValue>(\n\tsignal: Signal<DefaultValue, Value, Key> | ReadOnlySignal<Value>,\n\tselector?: (\n\t\tvalue: DefaultValue | Value,\n\t) => SelectedValue | DefaultValue | Value,\n) {\n\tconst defaultSelector = () => signal.getValue();\n\tconst selectorOrDefault = selector ?? defaultSelector;\n\n\treturn useObserve(\n\t\t() => {\n\t\t\tconst observed$ = (signal.subject as Observable<Value>).pipe(\n\t\t\t\tmap((value) => {\n\t\t\t\t\tconst selectedValue = selectorOrDefault(value);\n\n\t\t\t\t\treturn selectedValue;\n\t\t\t\t}),\n\t\t\t\tdistinctUntilChanged(),\n\t\t\t);\n\n\t\t\treturn observed$;\n\t\t},\n\t\t{\n\t\t\tdefaultValue: selectorOrDefault(signal.getValue()),\n\t\t},\n\t\t[],\n\t);\n}\n","import { useState } from \"react\";\nimport { type Config, signal } from \"../signal\";\nimport { useSignalValue } from \"./useSignalValue\";\n\n/**\n * Use it when:\n * - you need reactive state\n * - you don't need global state\n */\nexport const useSignal = <T>(config: Config<T>) => {\n\tconst [stateSignal] = useState(() => signal(config));\n\n\tconst value = useSignalValue(stateSignal);\n\n\treturn [value, stateSignal] as const;\n};\n","import type { Adapter } from \"./Adapter\";\n\nexport const createLocalforageAdapter = (forage: {\n\tgetItem: (key: string) => Promise<string | null>;\n\tsetItem: (key: string, value: string) => Promise<string>;\n}): Adapter => ({\n\tgetItem: async (key: string) => {\n\t\tconst serializedValue = await forage.getItem(key);\n\n\t\tif (!serializedValue) return undefined;\n\n\t\treturn JSON.parse(serializedValue);\n\t},\n\n\tsetItem: async (key: string, value: unknown) => {\n\t\tawait forage.setItem(key, JSON.stringify(value));\n\t},\n\n\tremoveItem: async (_: string) => {},\n\n\tclear: async () => {},\n});\n","import type { Adapter } from \"./Adapter\";\n\nconst normalizeStore = (store: unknown) => {\n\tif (!store || typeof store !== \"object\") {\n\t\treturn undefined;\n\t}\n\n\treturn 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\tadapter,\n\tkey,\n}: {\n\tadapter: Adapter;\n\tkey: string;\n}): Adapter => ({\n\tclear: async () => {\n\t\treturn await adapter.removeItem(key);\n\t},\n\n\tremoveItem: async (keyToDelete) => {\n\t\tconst unsafeStore = await adapter.getItem(key);\n\t\tconst { [keyToDelete]: toRemove, ...rest } =\n\t\t\t// biome-ignore lint/suspicious/noExplicitAny: <explanation>\n\t\t\tnormalizeStore(unsafeStore) ?? ({} as any);\n\n\t\tawait adapter.setItem(key, rest);\n\t},\n\n\tgetItem: async (itemKey: string) => {\n\t\tconst unsafeStore = await adapter.getItem(key);\n\t\tconst store = normalizeStore(unsafeStore) ?? {};\n\n\t\tif (itemKey in store) {\n\t\t\treturn store[itemKey as keyof typeof store];\n\t\t}\n\n\t\treturn undefined;\n\t},\n\n\tsetItem: async (itemKey: string, value: unknown) => {\n\t\tconst unsafeStore = await adapter.getItem(key);\n\t\tconst store = normalizeStore(unsafeStore) ?? {};\n\n\t\tawait adapter.setItem(key, { ...store, [itemKey]: value });\n\t},\n});\n\nexport const createLocalStorageAdapter = ({\n\tkey,\n}: { key?: string } = {}): Adapter => {\n\tif (key) {\n\t\treturn createSharedStoreAdapter({\n\t\t\tadapter: createLocalStorageAdapter(),\n\t\t\tkey,\n\t\t});\n\t}\n\n\treturn {\n\t\tclear: async () => {\n\t\t\tlocalStorage.clear();\n\t\t},\n\n\t\tremoveItem: async (key) => {\n\t\t\tlocalStorage.removeItem(key);\n\t\t},\n\n\t\tgetItem: async (key) => {\n\t\t\tconst serializedValue = localStorage.getItem(key);\n\n\t\t\tif (!serializedValue) return undefined;\n\n\t\t\treturn JSON.parse(serializedValue);\n\t\t},\n\n\t\tsetItem: async (key, value) => {\n\t\t\tlocalStorage.setItem(key, JSON.stringify(value));\n\t\t},\n\t};\n};\n","export function shallowEqual<A, B>(objA: A, objB: B): boolean {\n\t// Check if both objects are null or undefined\n\tif (objA === null || objA === undefined || objB === undefined) {\n\t\t// biome-ignore lint/suspicious/noExplicitAny: <explanation>\n\t\treturn (objA as any) === (objB as any);\n\t}\n\n\t// Check if both objects are primitives\n\tif (typeof objA !== \"object\" || typeof objB !== \"object\") {\n\t\t// biome-ignore lint/suspicious/noExplicitAny: <explanation>\n\t\treturn (objA as any) === (objB as any);\n\t}\n\n\t// Check if both objects have the same prototype\n\tif (objA.constructor !== objB?.constructor) {\n\t\treturn false;\n\t}\n\n\t// Check if both objects have the same keys\n\tconst keysA = Object.keys(objA) as Array<keyof A>;\n\tconst keysB = Object.keys(objB) as Array<keyof A>;\n\n\tif (keysA.length !== keysB.length) {\n\t\treturn false;\n\t}\n\n\t// Check if the values of the keys are equal\n\tfor (const key of keysA) {\n\t\t// biome-ignore lint/suspicious/noPrototypeBuiltins: <explanation>\n\t\t// biome-ignore lint/suspicious/noExplicitAny: <explanation>\n\t\tif (!objB.hasOwnProperty(key) || objA[key] !== (objB as any)[key]) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\t// If all checks pass, the objects are considered shallowly equal\n\treturn true;\n}\n","export const IDENTIFIER_PERSISTANCE_KEY = \"__reactjrx\";\n","import { catchError, from, of, switchMap } from \"rxjs\";\nimport type { Adapter } from \"./adapters/Adapter\";\nimport { IDENTIFIER_PERSISTANCE_KEY } from \"./constants\";\nimport type { PersistanceEntry, SignalPersistenceConfig } from \"./types\";\n\nexport const getNormalizedPersistanceValue = (unknownValue: unknown) => {\n\tif (\n\t\ttypeof unknownValue === \"object\" &&\n\t\tunknownValue !== null &&\n\t\tIDENTIFIER_PERSISTANCE_KEY in unknownValue &&\n\t\tunknownValue[IDENTIFIER_PERSISTANCE_KEY] === IDENTIFIER_PERSISTANCE_KEY\n\t) {\n\t\treturn unknownValue as PersistanceEntry;\n\t}\n\n\treturn undefined;\n};\n\nexport const persistValue = ({\n\tadapter,\n\tconfig,\n}: {\n\tadapter: Adapter;\n\t// biome-ignore lint/suspicious/noExplicitAny: <explanation>\n\tconfig: SignalPersistenceConfig<any>;\n}) => {\n\tconst { signal, version } = config;\n\tconst state = signal.getValue();\n\n\tconst value = {\n\t\tvalue: state,\n\t\t[IDENTIFIER_PERSISTANCE_KEY]: IDENTIFIER_PERSISTANCE_KEY,\n\t\tmigrationVersion: version,\n\t} satisfies PersistanceEntry;\n\n\tif (process.env.NODE_ENV === \"development\") {\n\t\tconsole.log(\n\t\t\t\"[reactjrx][state][persistance]:\",\n\t\t\t\"Persist value\",\n\t\t\tvalue,\n\t\t\t`for signal ${signal.config.key}`,\n\t\t);\n\t}\n\n\treturn from(adapter.setItem(signal.config.key, value)).pipe(\n\t\tcatchError((e) => {\n\t\t\tconsole.error(e);\n\n\t\t\treturn of(null);\n\t\t}),\n\t);\n};\n\nexport function hydrateValueToSignal({\n\tadapter,\n\tconfig,\n}: {\n\tadapter: Adapter;\n\t// biome-ignore lint/suspicious/noExplicitAny: <explanation>\n\tconfig: SignalPersistenceConfig<any>;\n}) {\n\tconst { hydrate = ({ value }) => value, signal, version } = config;\n\n\treturn from(adapter.getItem(signal.config.key)).pipe(\n\t\tswitchMap((value) => {\n\t\t\tconst normalizedValue = getNormalizedPersistanceValue(value);\n\n\t\t\tif (!normalizedValue) return of(value);\n\n\t\t\tconst storedVersionIsInvalid =\n\t\t\t\ttypeof normalizedValue.migrationVersion !== \"number\";\n\n\t\t\tconst signalVersionIsSuperior =\n\t\t\t\tnormalizedValue.migrationVersion !== undefined &&\n\t\t\t\tversion > normalizedValue.migrationVersion;\n\n\t\t\tif (\n\t\t\t\tstoredVersionIsInvalid ||\n\t\t\t\tsignalVersionIsSuperior ||\n\t\t\t\tnormalizedValue.value === undefined\n\t\t\t) {\n\t\t\t\treturn of(value);\n\t\t\t}\n\n\t\t\tconst correctVersionValue = normalizedValue.value;\n\n\t\t\tif (process.env.NODE_ENV === \"development\") {\n\t\t\t\tconsole.log(\n\t\t\t\t\t\"[reactjrx][state][persistance]:\",\n\t\t\t\t\t\"Hydrate value\",\n\t\t\t\t\tnormalizedValue,\n\t\t\t\t\t`for signal ${signal.config.key}`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tsignal.setValue(hydrate({ value: correctVersionValue, version }));\n\n\t\t\treturn of(value);\n\t\t}),\n\t);\n}\n","import {\n\tEMPTY,\n\tasyncScheduler,\n\tcatchError,\n\tfrom,\n\tmap,\n\tmerge,\n\tof,\n\tshare,\n\tswitchMap,\n\ttap,\n\tthrottleTime,\n\tzip,\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\tentries = [],\n\tonHydrated,\n\tadapter,\n}: {\n\t// biome-ignore lint/suspicious/noExplicitAny: <explanation>\n\tentries: Array<SignalPersistenceConfig<Signal<any, any, string>>>;\n\t/**\n\t * Triggered after first successful hydrate\n\t */\n\tonHydrated?: () => void;\n\t/**\n\t * Requires a stable instance otherwise the hydration\n\t * process will start again. This is useful when you\n\t * need to change adapter during runtime.\n\t */\n\tadapter: Adapter;\n}) {\n\tconst signalsHydrated$ =\n\t\tentries.length === 0\n\t\t\t? of([])\n\t\t\t: zip(\n\t\t\t\t\t...entries.map((config) =>\n\t\t\t\t\t\thydrateValueToSignal({\n\t\t\t\t\t\t\tadapter,\n\t\t\t\t\t\t\tconfig,\n\t\t\t\t\t\t}),\n\t\t\t\t\t),\n\t\t\t\t);\n\n\tconst isHydrated$ = signalsHydrated$.pipe(\n\t\ttap(onHydrated),\n\t\tcatchError((error) => {\n\t\t\tconsole.error(\"Unable to hydrate\", error);\n\n\t\t\treturn EMPTY;\n\t\t}),\n\t\tshare(),\n\t);\n\n\t/**\n\t * Start persisting to the current adapter\n\t * as soon as signals are hydrated. Will stop\n\t * whenever hydration process starts again\n\t */\n\tconst persisted$ = isHydrated$.pipe(\n\t\tswitchMap(() =>\n\t\t\tmerge(\n\t\t\t\t...entries.map((config) =>\n\t\t\t\t\tconfig.signal.subject.pipe(\n\t\t\t\t\t\tthrottleTime(500, asyncScheduler, {\n\t\t\t\t\t\t\ttrailing: true,\n\t\t\t\t\t\t}),\n\t\t\t\t\t\tswitchMap(() =>\n\t\t\t\t\t\t\tfrom(\n\t\t\t\t\t\t\t\tpersistValue({\n\t\t\t\t\t\t\t\t\tadapter,\n\t\t\t\t\t\t\t\t\tconfig,\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t),\n\t\t\t\t\t),\n\t\t\t\t),\n\t\t\t),\n\t\t),\n\t);\n\n\treturn merge(\n\t\tisHydrated$.pipe(\n\t\t\tmap(() => ({\n\t\t\t\ttype: \"hydrated\" as const,\n\t\t\t})),\n\t\t),\n\t\tpersisted$.pipe(\n\t\t\tmap(() => ({\n\t\t\t\ttype: \"persisted\" as const,\n\t\t\t})),\n\t\t),\n\t);\n}\n","import { concatMap, merge, of, scan, switchMap } from \"rxjs\";\nimport { useLiveBehaviorSubject } from \"../../binding/useLiveBehaviorSubject\";\nimport { useObserve } from \"../../binding/useObserve\";\nimport { useLiveRef } from \"../../utils/react/useLiveRef\";\nimport { shallowEqual } from \"../../utils/shallowEqual\";\nimport type { Adapter } from \"../persistance/adapters/Adapter\";\nimport { persistSignals } from \"../persistance/persistSignals\";\nimport type { SignalPersistenceConfig } from \"../persistance/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\tentries = [],\n\tonHydrated,\n\tadapter,\n}: {\n\t/**\n\t * Passing a new list of entries will start over the process\n\t * once the current one is finished. Use a stable reference to avoid\n\t * inifite loop.\n\t */\n\n\t// biome-ignore lint/suspicious/noExplicitAny: <explanation>\n\tentries?: Array<SignalPersistenceConfig<any>>;\n\t/**\n\t * Triggered after first successful hydrate\n\t */\n\tonHydrated?: () => void;\n\t/**\n\t * Passing a new adapter reference will start over the process\n\t * once the current one is finished. Use a stable reference to avoid\n\t * inifite loop.\n\t */\n\tadapter?: Adapter;\n}): { isHydrated: boolean } {\n\tconst onHydratedRef = useLiveRef(onHydrated);\n\tconst adapterSubject = useLiveBehaviorSubject(adapter);\n\tconst entriesSubject = useLiveBehaviorSubject(entries);\n\n\treturn useObserve(\n\t\t() => {\n\t\t\tconst persistence$ = adapterSubject.current.pipe(\n\t\t\t\tswitchMap((adapter) => {\n\t\t\t\t\tif (!adapter) return of({ type: \"reset\" });\n\n\t\t\t\t\treturn merge(\n\t\t\t\t\t\tof({ type: \"reset\" }),\n\t\t\t\t\t\tentriesSubject.current.pipe(\n\t\t\t\t\t\t\tconcatMap((entries) =>\n\t\t\t\t\t\t\t\tpersistSignals({\n\t\t\t\t\t\t\t\t\tadapter,\n\t\t\t\t\t\t\t\t\tentries,\n\t\t\t\t\t\t\t\t\tonHydrated: () => {\n\t\t\t\t\t\t\t\t\t\tonHydratedRef.current?.();\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t),\n\t\t\t\t\t);\n\t\t\t\t}),\n\t\t\t);\n\n\t\t\treturn persistence$.pipe(\n\t\t\t\tscan(\n\t\t\t\t\t(acc, event) => {\n\t\t\t\t\t\tif (event.type === \"reset\") return { isHydrated: false };\n\t\t\t\t\t\tif (event.type === \"hydrated\") return { isHydrated: true };\n\n\t\t\t\t\t\treturn acc;\n\t\t\t\t\t},\n\t\t\t\t\t{ isHydrated: false as boolean },\n\t\t\t\t),\n\t\t\t);\n\t\t},\n\t\t{ defaultValue: { isHydrated: false }, compareFn: shallowEqual },\n\t\t[adapterSubject, entriesSubject],\n\t);\n}\n","import { useSubject } from \"../../binding/useSubject\";\n\nexport const useUnmountObservable = () => {\n\tconst subject = useSubject<void>({\n\t\tonBeforeComplete: () => {\n\t\t\tsubject.current.next();\n\t\t},\n\t});\n\n\treturn subject;\n};\n","import { type EffectCallback, useEffect } from \"react\";\n\nexport const useEffectOnce = (effect: EffectCallback) => {\n\tuseEffect(effect, []);\n};\n","import { useEffectOnce } from \"./useEffectOnce\";\n\nexport const useMount = (fn: () => void) => {\n\tuseEffectOnce(() => {\n\t\tfn();\n\t});\n};\n","import { type Observable, defer, merge, of, throwError, timer } from \"rxjs\";\nimport {\n\tcatchError,\n\tconcatMap,\n\tfirst,\n\tmergeMap,\n\tretryWhen,\n\ttap,\n} from \"rxjs/operators\";\n\nexport interface RetryBackoffConfig<T, TError> {\n\t// Initial interval. It will eventually go as high as maxInterval.\n\tinitialInterval?: number;\n\t// Maximum delay between retries.\n\tmaxInterval?: number;\n\t// When set to `true` every successful emission will reset the delay and the\n\t// error count.\n\tresetOnSuccess?: boolean;\n\tretry?: (attempt: number, error: TError) => boolean;\n\tretryAfterDelay?: (attempt: number, error: TError) => boolean;\n\t// Can be used to delay the retry (outside of backoff process)\n\t// for example if you want to pause retry due to connectivity issue\n\t// biome-ignore lint/suspicious/noExplicitAny: <explanation>\n\tretryAfter?: () => Observable<any>;\n\tretryDelay?: number | ((attempt: number, error: TError) => number);\n\t// Conditional retry.\n\t// shouldRetry?: (attempt: number, error: any) => Observable<boolean>\n\tbackoffDelay?: (iteration: number, initialInterval: number) => number;\n\t// biome-ignore lint/suspicious/noExplicitAny: <explanation>\n\tcaughtError?: (attempt: number, error: any) => undefined | Observable<T>;\n\t// biome-ignore lint/suspicious/noExplicitAny: <explanation>\n\tcatchError?: (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\treturn Math.min(backoffDelay, maxInterval);\n}\n\n/** Exponential backoff delay */\nexport function exponentialBackoffDelay(\n\titeration: number,\n\tinitialInterval: number,\n) {\n\treturn 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\tconst {\n\t\tretry,\n\t\tretryDelay,\n\t\tretryAfterDelay,\n\t\tretryAfter = () => of(true),\n\t} = config;\n\n\tconst maxRetries =\n\t\ttypeof retry !== \"function\"\n\t\t\t? retry === false\n\t\t\t\t? 0\n\t\t\t\t: retry === true\n\t\t\t\t\t? Number.POSITIVE_INFINITY\n\t\t\t\t\t: (retry ?? Number.POSITIVE_INFINITY)\n\t\t\t: Number.POSITIVE_INFINITY;\n\n\tconst shouldRetry =\n\t\ttypeof retry === \"function\"\n\t\t\t? // ? (attempt: number, error: TError) => of(retry(attempt, error))\n\t\t\t\tretry\n\t\t\t: () => true;\n\n\tconst initialInterval = typeof retryDelay === \"number\" ? retryDelay : 100;\n\n\tconst normalizedConfig = {\n\t\tshouldRetry,\n\t\t...config,\n\t};\n\n\tconst {\n\t\tmaxInterval = Number.POSITIVE_INFINITY,\n\t\tresetOnSuccess = false,\n\t\tbackoffDelay = exponentialBackoffDelay,\n\t} = normalizedConfig;\n\n\treturn <T>(source: Observable<T>) =>\n\t\tdefer(() => {\n\t\t\tlet caughtErrors = 0;\n\n\t\t\tconst shouldRetryFn = (attempt: number, error: TError) =>\n\t\t\t\tattempt < maxRetries ? shouldRetry(attempt, error) : false;\n\n\t\t\treturn source.pipe(\n\t\t\t\tcatchError<T, Observable<T>>((error) => {\n\t\t\t\t\tcaughtErrors++;\n\n\t\t\t\t\tif (!shouldRetryFn(caughtErrors - 1, error)) throw error;\n\n\t\t\t\t\tconst caughtErrorResult$ = config.caughtError?.(caughtErrors, error);\n\n\t\t\t\t\tif (!caughtErrorResult$) throw error;\n\n\t\t\t\t\treturn caughtErrorResult$.pipe(\n\t\t\t\t\t\tmergeMap((source) =>\n\t\t\t\t\t\t\tmerge(\n\t\t\t\t\t\t\t\tof(source) as unknown as Observable<T>,\n\t\t\t\t\t\t\t\tthrowError(() => error),\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t),\n\t\t\t\t\t);\n\t\t\t\t}),\n\t\t\t\tretryWhen<T>((errors) => {\n\t\t\t\t\treturn errors.pipe(\n\t\t\t\t\t\tconcatMap((error) => {\n\t\t\t\t\t\t\tconst attempt = caughtErrors - 1;\n\n\t\t\t\t\t\t\treturn retryAfter().pipe(\n\t\t\t\t\t\t\t\tfirst(),\n\t\t\t\t\t\t\t\tmergeMap(() =>\n\t\t\t\t\t\t\t\t\tshouldRetryFn(attempt, error)\n\t\t\t\t\t\t\t\t\t\t? timer(\n\t\t\t\t\t\t\t\t\t\t\t\tgetDelay(\n\t\t\t\t\t\t\t\t\t\t\t\t\tbackoffDelay(attempt, initialInterval),\n\t\t\t\t\t\t\t\t\t\t\t\t\tmaxInterval,\n\t\t\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\t\t).pipe(\n\t\t\t\t\t\t\t\t\t\t\t\tmergeMap((timer) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tretryAfterDelay &&\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t!retryAfterDelay(attempt, error)\n\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\treturn throwError(() => error);\n\n\t\t\t\t\t\t\t\t\t\t\t\t\treturn of(timer);\n\t\t\t\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t: throwError(() => error),\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}),\n\t\t\t\t\t);\n\t\t\t\t}),\n\t\t\t\tcatchError((e) => {\n\t\t\t\t\tif (config.catchError) {\n\t\t\t\t\t\treturn config.catchError(caughtErrors, e);\n\t\t\t\t\t}\n\n\t\t\t\t\tthrow e;\n\t\t\t\t}),\n\t\t\t\ttap(() => {\n\t\t\t\t\tif (resetOnSuccess) {\n\t\t\t\t\t\tcaughtErrors = 0;\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t);\n\t\t});\n}\n","export function isDefined<T>(\n\targ: T | null | undefined,\n): arg is T extends null | undefined ? never : T {\n\treturn arg !== null && arg !== undefined;\n}\n","// biome-ignore lint/suspicious/noExplicitAny: <explanation>\nexport const arrayEqual = <A extends any[], B extends any[]>(a: A, b: B) =>\n\ta.length === b.length && a.every((v, i) => v === b[i]);\n","export const isServer = typeof window === \"undefined\" || \"Deno\" in window;\n","import { type QueryKey, hashKey } from \"@tanstack/react-query\";\nimport { createContext, memo, useContext, useEffect, useState } from \"react\";\nimport {\n\ttype Observable,\n\ttype Subscription,\n\tfromEvent,\n\tshare,\n\ttakeUntil,\n} from \"rxjs\";\n\ntype CacheEntry = {\n\tquery$: Observable<unknown>;\n\tsignal: AbortSignal;\n\tsub: Subscription | undefined;\n\tisCompleted: boolean;\n\tlastData: { value: unknown } | undefined;\n};\n\nexport class QueryClient$ {\n\tpublic readonly queryMap: Map<string, CacheEntry> = new Map();\n\n\tgetQuery(queryHash: string) {\n\t\treturn this.queryMap.get(queryHash);\n\t}\n\n\tsetQuery(\n\t\tqueryKey: QueryKey,\n\t\tquery$: Observable<unknown>,\n\t\tsignal: AbortSignal,\n\t) {\n\t\tconst queryHash = hashKey(queryKey);\n\n\t\tconst sharedQuery$ = query$.pipe(\n\t\t\t/**\n\t\t\t * abort signal is triggered on:\n\t\t\t * - manual cancellation from user\n\t\t\t * - unmounting the component\n\t\t\t * @see https://tanstack.com/query/latest/docs/framework/react/guides/query-cancellation\n\t\t\t */\n\t\t\ttakeUntil(fromEvent(signal, \"abort\")),\n\t\t\tshare(),\n\t\t);\n\n\t\tconst cacheEntry: CacheEntry = {\n\t\t\tquery$: sharedQuery$,\n\t\t\tsignal,\n\t\t\tsub: undefined,\n\t\t\tisCompleted: false,\n\t\t\tlastData: undefined,\n\t\t};\n\n\t\tthis.queryMap.set(queryHash, cacheEntry);\n\n\t\tconst sub = sharedQuery$.subscribe({\n\t\t\tnext: (data) => {\n\t\t\t\tconst entry = this.queryMap.get(queryHash);\n\n\t\t\t\tif (entry) {\n\t\t\t\t\tentry.lastData = { value: data };\n\t\t\t\t}\n\t\t\t},\n\t\t\tcomplete: () => {\n\t\t\t\tthis.deleteQuery(queryHash);\n\t\t\t},\n\t\t});\n\n\t\tcacheEntry.sub = sub;\n\n\t\treturn cacheEntry;\n\t}\n\n\tdeleteQuery(queryHash: string) {\n\t\tconst entry = this.queryMap.get(queryHash);\n\n\t\tif (!entry) return;\n\n\t\tif (entry.sub) {\n\t\t\tentry.sub.unsubscribe();\n\t\t\tentry.sub = undefined;\n\t\t}\n\n\t\tentry.isCompleted = true;\n\n\t\tthis.queryMap.delete(queryHash);\n\t}\n\n\tdestroy() {\n\t\tthis.queryMap.forEach((_, key) => {\n\t\t\tthis.deleteQuery(key);\n\t\t});\n\t}\n}\n\nexport const Context = createContext<QueryClient$ | undefined>(undefined);\n\nexport const QueryClientProvider$ = memo(\n\t({\n\t\tchildren,\n\t\tclient: _client,\n\t}: {\n\t\tchildren: React.ReactNode;\n\t\tclient?: QueryClient$;\n\t}) => {\n\t\tconst [client] = useState(() => _client ?? new QueryClient$());\n\n\t\tuseEffect(() => {\n\t\t\treturn () => {\n\t\t\t\tclient.destroy();\n\t\t\t};\n\t\t}, [client]);\n\n\t\treturn <Context.Provider value={client}>{children}</Context.Provider>;\n\t},\n);\n\nexport const useQueryClient$ = () => {\n\tconst client = useContext(Context);\n\n\tif (!client) {\n\t\tthrow new Error(\n\t\t\t\"useReactJrxQueryClient must be used within a ReactJrxQueryProvider\",\n\t\t);\n\t}\n\n\treturn client;\n};\n","import {\n\ttype DefaultError,\n\ttype QueryClient,\n\ttype QueryFunctionContext,\n\ttype QueryKey,\n\ttype UseQueryOptions,\n\thashKey,\n\tuseQuery,\n\tuseQueryClient,\n} from \"@tanstack/react-query\";\nimport { type Observable, defer, delay, take } from \"rxjs\";\nimport { useQueryClient$ } from \"./QueryClientProvider$\";\n\nexport function useQuery$<\n\tTQueryFnData = unknown,\n\tTError = DefaultError,\n\tTData = TQueryFnData,\n\tTQueryKey extends QueryKey = QueryKey,\n>(\n\toptions: Omit<\n\t\tUseQueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n\t\t\"queryFn\"\n\t> & {\n\t\tqueryFn:\n\t\t\t| ((context: QueryFunctionContext<TQueryKey>) => Observable<TQueryFnData>)\n\t\t\t| Observable<TQueryFnData>;\n\t},\n\tqueryClient?: QueryClient,\n) {\n\tconst _queryClient = useQueryClient(queryClient);\n\tconst queryClient$ = useQueryClient$();\n\n\tconst queryFnAsync = (context: QueryFunctionContext<TQueryKey>) => {\n\t\treturn new Promise<TQueryFnData>((resolve, reject) => {\n\t\t\tconst getSource = () =>\n\t\t\t\tdefer(() =>\n\t\t\t\t\ttypeof options.queryFn === \"function\"\n\t\t\t\t\t\t? options.queryFn(context)\n\t\t\t\t\t\t: options.queryFn,\n\t\t\t\t);\n\n\t\t\tconst queryHash = hashKey(context.queryKey);\n\n\t\t\tconst queryCacheEntry =\n\t\t\t\tqueryClient$.getQuery(queryHash) ??\n\t\t\t\tqueryClient$.setQuery(context.queryKey, getSource(), context.signal);\n\n\t\t\tconst query$ = queryCacheEntry.query$;\n\n\t\t\tquery$\n\t\t\t\t.pipe(\n\t\t\t\t\ttake(1),\n\t\t\t\t\t/**\n\t\t\t\t\t * If several values are emitted during this delay, we will only\n\t\t\t\t\t * keep the last value. This is unfortunate but it's the best we can do\n\t\t\t\t\t * for now.\n\t\t\t\t\t */\n\t\t\t\t\tdelay(1),\n\t\t\t\t)\n\t\t\t\t.subscribe({\n\t\t\t\t\terror: (error) => {\n\t\t\t\t\t\treturn reject(error);\n\t\t\t\t\t},\n\t\t\t\t\tcomplete: () => {\n\t\t\t\t\t\tif (queryCacheEntry?.lastData === undefined) {\n\t\t\t\t\t\t\tif (queryCacheEntry.signal.aborted) {\n\t\t\t\t\t\t\t\treturn resolve(undefined as TQueryFnData);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tconsole.log(\n\t\t\t\t\t\t\t\t`cancelled due to stream completing without data for query ${queryHash}`,\n\t\t\t\t\t\t\t\tqueryCacheEntry?.lastData,\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t_queryClient.cancelQueries({\n\t\t\t\t\t\t\t\tqueryKey: context.queryKey,\n\t\t\t\t\t\t\t\texact: true,\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\treturn resolve(undefined as TQueryFnData);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tresolve(queryCacheEntry.lastData.value as TQueryFnData);\n\n\t\t\t\t\t\tif (queryCacheEntry?.isCompleted === false) {\n\t\t\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\t\t\t_queryClient?.refetchQueries({\n\t\t\t\t\t\t\t\t\tqueryKey: context.queryKey,\n\t\t\t\t\t\t\t\t\texact: true,\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t});\n\t};\n\n\tconst result = useQuery<TQueryFnData, TError, TData, TQueryKey>(\n\t\t{\n\t\t\t...options,\n\t\t\tqueryFn: queryFnAsync,\n\t\t},\n\t\tqueryClient,\n\t);\n\n\treturn result;\n}\n","import {\n\ttype DefaultError,\n\ttype QueryClient,\n\ttype UseMutationOptions,\n\ttype UseMutationResult,\n\tuseMutation,\n} from \"@tanstack/react-query\";\nimport { useEffect } from \"react\";\nimport { type Observable, take } from \"rxjs\";\nimport { useBehaviorSubject } from \"../binding/useBehaviorSubject\";\n\nexport type UseMutation$Options<\n\tTData = unknown,\n\tTError = DefaultError,\n\tTVariables = void,\n\tTContext = unknown,\n> = Omit<\n\tUseMutationOptions<TData, TError, TVariables, TContext>,\n\t\"mutationFn\"\n> & {\n\tmutationFn:\n\t\t| ((variables: TVariables) => Observable<TData>)\n\t\t| Observable<TData>;\n};\n\nexport function useMutation$<\n\tTData = unknown,\n\tTError = DefaultError,\n\tTVariables = void,\n\tTContext = unknown,\n>(\n\toptions: UseMutation$Options<TData, TError, TVariables, TContext>,\n\tqueryClient?: QueryClient,\n) {\n\tconst stateSubject = useBehaviorSubject<\n\t\tPick<\n\t\t\tUseMutationResult<TData, TError, TVariables, TContext>,\n\t\t\t\"status\" | \"isPending\" | \"isError\" | \"isSuccess\" | \"isIdle\"\n\t\t>\n\t>({\n\t\tstatus: \"idle\",\n\t\tisPending: false,\n\t\tisError: false,\n\t\tisSuccess: false,\n\t\tisIdle: true,\n\t});\n\n\tconst result = useMutation<TData, TError, TVariables, TContext>(\n\t\t{\n\t\t\t...options,\n\t\t\tmutationFn: (variables: TVariables) => {\n\t\t\t\tlet lastData: { value: TData } | undefined;\n\n\t\t\t\treturn new Promise<TData>((resolve, reject) => {\n\t\t\t\t\tconst source =\n\t\t\t\t\t\ttypeof options.mutationFn === \"function\"\n\t\t\t\t\t\t\t? options.mutationFn(variables)\n\t\t\t\t\t\t\t: options.mutationFn;\n\n\t\t\t\t\tsource.pipe(take(1)).subscribe({\n\t\t\t\t\t\tnext: (data) => {\n\t\t\t\t\t\t\tlastData = { value: data };\n\t\t\t\t\t\t},\n\t\t\t\t\t\terror: (error) => {\n\t\t\t\t\t\t\treject(error);\n\t\t\t\t\t\t},\n\t\t\t\t\t\tcomplete: () => {\n\t\t\t\t\t\t\tif (lastData === undefined)\n\t\t\t\t\t\t\t\treturn reject(new Error(\"Stream completed without any data\"));\n\n\t\t\t\t\t\t\tresolve(lastData.value);\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t},\n\t\t},\n\t\tqueryClient,\n\t);\n\n\tconst { status, isPending, isError, isSuccess, isIdle } = result;\n\n\tuseEffect(() => {\n\t\tstateSubject.current.next({\n\t\t\tstatus,\n\t\t\tisPending,\n\t\t\tisError,\n\t\t\tisSuccess,\n\t\t\tisIdle,\n\t\t});\n\t}, [status, isPending, isError, isSuccess, isIdle, stateSubject]);\n\n\treturn { ...result, state$: stateSubject.current };\n}\n","import type { DefaultError, QueryClient } from \"@tanstack/react-query\";\nimport { useCallback } from \"react\";\nimport { defaultIfEmpty, takeUntil } from \"rxjs\";\nimport { useObservableCallback } from \"../binding/useObservableCallback\";\nimport { type UseMutation$Options, useMutation$ } from \"./useMutation$\";\n\nexport function useSwitchMutation$<\n\tTData = unknown,\n\tTError = DefaultError,\n\tTVariables = void,\n\tTContext = unknown,\n>(\n\toptions: UseMutation$Options<TData | null, TError, TVariables, TContext>,\n\tqueryClient?: QueryClient,\n) {\n\tconst [cancel$, cancel] = useObservableCallback();\n\ttype TDataOrNull = TData | null;\n\n\tconst { mutate, mutateAsync, ...rest } = useMutation$<\n\t\tTDataOrNull,\n\t\tTError,\n\t\tTVariables,\n\t\tTContext\n\t>(\n\t\t{\n\t\t\t...options,\n\t\t\tmutationFn: (variables) => {\n\t\t\t\tconst source =\n\t\t\t\t\ttypeof options.mutationFn === \"function\"\n\t\t\t\t\t\t? options.mutationFn(variables)\n\t\t\t\t\t\t: options.mutationFn;\n\n\t\t\t\treturn source.pipe(takeUntil(cancel$), defaultIfEmpty(null));\n\t\t\t},\n\t\t},\n\t\tqueryClient,\n\t);\n\n\tconst mutateSwitch = useCallback(\n\t\t(variables: TVariables) => {\n\t\t\tcancel();\n\n\t\t\treturn mutate(variables);\n\t\t},\n\t\t[mutate, cancel],\n\t);\n\n\tconst mutateAsyncSwitch = useCallback(\n\t\t(variables: TVariables) => {\n\t\t\tcancel();\n\n\t\t\treturn mutateAsync(variables);\n\t\t},\n\t\t[mutateAsync, cancel],\n\t);\n\n\treturn { ...rest, mutate: mutateSwitch, mutateAsync: mutateAsyncSwitch };\n}\n","import {\n\ttype DefaultError,\n\ttype MutationKey,\n\ttype QueryClient,\n\tuseQueryClient,\n} from \"@tanstack/react-query\";\nimport { useCallback } from \"react\";\nimport {\n\tBehaviorSubject,\n\ttype Subject,\n\tfilter,\n\tfirst,\n\tnoop,\n\tswitchMap,\n} from \"rxjs\";\nimport { type UseMutation$Options, useMutation$ } from \"./useMutation$\";\n\nexport function useContactMutation$<\n\tTData = unknown,\n\tTError = DefaultError,\n\tTVariables = void,\n\tTContext = unknown,\n>(\n\toptions: UseMutation$Options<TData | null, TError, TVariables, TContext> & {\n\t\tmutationKey: MutationKey;\n\t},\n\tqueryClient?: QueryClient,\n) {\n\tconst client = useQueryClient(queryClient);\n\ttype TDataOrNull = TData | null;\n\tconst mutationKey = options.mutationKey;\n\n\tconst { mutateAsync, ...rest } = useMutation$<\n\t\tTDataOrNull,\n\t\tTError,\n\t\t{ variables: TVariables; ready$: Subject<boolean> },\n\t\tTContext\n\t>(\n\t\t{\n\t\t\t...options,\n\t\t\tonMutate({ variables }) {\n\t\t\t\treturn options.onMutate?.(variables);\n\t\t\t},\n\t\t\tonSuccess(data, variables, context) {\n\t\t\t\treturn options.onSuccess?.(data, variables.variables, context);\n\t\t\t},\n\t\t\tonError(error, variables, context) {\n\t\t\t\treturn options.onError?.(error, variables.variables, context);\n\t\t\t},\n\t\t\tonSettled(data, error, variables, context) {\n\t\t\t\treturn options.onSettled?.(data, error, variables.variables, context);\n\t\t\t},\n\t\t\tmutationFn: ({ ready$, variables }) => {\n\t\t\t\tconst source =\n\t\t\t\t\ttypeof options.mutationFn === \"function\"\n\t\t\t\t\t\t? options.mutationFn(variables)\n\t\t\t\t\t\t: options.mutationFn;\n\n\t\t\t\treturn ready$.pipe(\n\t\t\t\t\tfilter((isReady) => isReady),\n\t\t\t\t\tfirst(),\n\t\t\t\t\tswitchMap(() => source),\n\t\t\t\t);\n\t\t\t},\n\t\t},\n\t\tqueryClient,\n\t);\n\n\tconst mutateAsyncConcat = useCallback(\n\t\tasync (variables: TVariables) => {\n\t\t\tconst mutations = client.getMutationCache().findAll({\n\t\t\t\tmutationKey,\n\t\t\t\texact: true,\n\t\t\t});\n\n\t\t\tconst subject = new BehaviorSubject(false);\n\n\t\t\tconst result = mutateAsync({ variables, ready$: subject });\n\n\t\t\tawait Promise.all(\n\t\t\t\tmutations.map((mutation) => mutation.continue().catch(noop)),\n\t\t\t);\n\n\t\t\tsubject.next(true);\n\n\t\t\treturn await result.finally(() => {\n\t\t\t\tsubject.complete();\n\t\t\t});\n\t\t},\n\t\t[mutateAsync, client, mutationKey],\n\t);\n\n\tconst mutateConcat = useCallback(\n\t\t(variables: TVariables) => {\n\t\t\tmutateAsyncConcat(variables).catch(noop);\n\t\t},\n\t\t[mutateAsyncConcat],\n\t);\n\n\treturn { ...rest, mutate: mutateConcat, mutateAsync: mutateAsyncConcat };\n}\n"],"names":["isPromiseLike","value","makeObservable","something","isObservable","from","of","somethingAsFunction","params","defer","result","useLiveRef","ref","useRef","useMemo","useObserve","source$","optionsOrDeps","maybeDeps","options","deps","valueRef","sourceRef","optionsRef","getSnapshot","useCallback","subscribe","next","source","sub","startWith","identity","distinctUntilChanged","a","b","tap","catchError","error","EMPTY","useSyncExternalStore","useSubscribe","useEffect","useConstant","fn","useSubject","onBeforeComplete","completeOnUnmount","subject","Subject","completed","onBeforeCompleteRef","completeOnUnmountRef","useObservableCallback","trigger","arg","useBehaviorSubject","state","BehaviorSubject","stateRef","useObservableState","defaultValue","subject$","setState","useLiveBehaviorSubject","useSubscribeEffect","unsafeOptions","retryOption","onErrorRef","sourceAsObservable","enhancerMakeObservable","retry","SIGNAL_RESET","signal","config","normalizedConfig","setValue","update","change","getValue","getter","skip","first","newValue","_a","useSignalValue","selector","selectorOrDefault","map","useSignal","stateSignal","useState","createLocalforageAdapter","forage","key","serializedValue","_","normalizeStore","store","createSharedStoreAdapter","adapter","keyToDelete","unsafeStore","toRemove","rest","itemKey","createLocalStorageAdapter","shallowEqual","objA","objB","keysA","keysB","IDENTIFIER_PERSISTANCE_KEY","getNormalizedPersistanceValue","unknownValue","persistValue","version","e","hydrateValueToSignal","hydrate","switchMap","normalizedValue","storedVersionIsInvalid","signalVersionIsSuperior","correctVersionValue","persistSignals","entries","onHydrated","isHydrated$","zip","share","persisted$","merge","throttleTime","asyncScheduler","usePersistSignals","onHydratedRef","adapterSubject","entriesSubject","concatMap","scan","acc","event","useUnmountObservable","useEffectOnce","effect","useMount","getDelay","backoffDelay","maxInterval","exponentialBackoffDelay","iteration","initialInterval","retryBackoff","retryDelay","retryAfterDelay","retryAfter","maxRetries","shouldRetry","resetOnSuccess","caughtErrors","shouldRetryFn","attempt","caughtErrorResult$","mergeMap","throwError","retryWhen","errors","timer","isDefined","arrayEqual","v","i","isServer","QueryClient$","__publicField","queryHash","queryKey","query$","hashKey","sharedQuery$","takeUntil","fromEvent","cacheEntry","data","entry","Context","createContext","QueryClientProvider$","memo","children","_client","client","useQueryClient$","useContext","useQuery$","queryClient","_queryClient","useQueryClient","queryClient$","useQuery","context","resolve","reject","getSource","queryCacheEntry","take","delay","useMutation$","stateSubject","useMutation","variables","lastData","status","isPending","isError","isSuccess","isIdle","useSwitchMutation$","cancel$","cancel","mutate","mutateAsync","defaultIfEmpty","mutateSwitch","mutateAsyncSwitch","useContactMutation$","mutationKey","ready$","filter","isReady","mutateAsyncConcat","mutations","mutation","noop","mutateConcat"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/lib/utils/isPromiseLike.ts","../src/lib/utils/makeObservable.ts","../src/lib/utils/react/useLiveRef.ts","../src/lib/binding/useObserve.ts","../src/lib/binding/useSubscribe.ts","../src/lib/utils/react/useConstant.ts","../src/lib/binding/useSubject.ts","../src/lib/binding/useObservableCallback.ts","../src/lib/binding/useBehaviorSubject.ts","../src/lib/binding/useObservableState.ts","../src/lib/binding/useLiveBehaviorSubject.ts","../src/lib/binding/useSubscribeEffect.ts","../src/lib/state/constants.ts","../src/lib/state/signal.ts","../src/lib/state/react/useSignalValue.ts","../src/lib/state/react/useSignal.ts","../src/lib/state/persistance/adapters/createLocalforageAdapter.ts","../src/lib/state/persistance/adapters/createLocalStorageAdapter.ts","../src/lib/utils/shallowEqual.ts","../src/lib/state/persistance/constants.ts","../src/lib/state/persistance/helpers.ts","../src/lib/state/persistance/persistSignals.ts","../src/lib/state/react/usePersistSignals.tsx","../src/lib/utils/react/useUnmountObservable.ts","../src/lib/utils/react/useEffectOnce.ts","../src/lib/utils/react/useMount.ts","../src/lib/utils/operators/retryBackoff.ts","../src/lib/utils/isDefined.ts","../src/lib/utils/arrayEqual.ts","../src/lib/utils/isServer.ts","../src/lib/queries/QueryClientProvider$.tsx","../src/lib/queries/useQuery$.ts","../src/lib/queries/useMutation$.ts","../src/lib/queries/useSwitchMutation$.ts","../src/lib/queries/useConcatMutation$.ts"],"sourcesContent":["// biome-ignore lint/suspicious/noExplicitAny: <explanation>\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","import { type Observable, defer, from, isObservable, of } from \"rxjs\";\nimport { isPromiseLike } from \"./isPromiseLike\";\n\ntype FnReturnToObservable<T> = 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 { 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 type DependencyList,\n useCallback,\n useRef,\n useSyncExternalStore,\n} from \"react\";\nimport {\n type BehaviorSubject,\n EMPTY,\n type Observable,\n catchError,\n distinctUntilChanged,\n identity,\n startWith,\n tap,\n} from \"rxjs\";\nimport { makeObservable } from \"../utils/makeObservable\";\nimport { useLiveRef } from \"../utils/react/useLiveRef\";\n\ninterface Option<R = undefined> {\n defaultValue: R;\n unsubscribeOnUnmount?: boolean;\n compareFn?: (a: R, b: R) => boolean;\n}\n\nexport function useObserve<T>(source: BehaviorSubject<T>): T;\n\nexport function useObserve<T>(source: Observable<T>): T | undefined;\n\nexport function useObserve<T>(\n source: () => Observable<T>,\n deps: DependencyList,\n): T | undefined;\n\nexport function useObserve<T>(\n source: () => Observable<T> | undefined,\n deps: DependencyList,\n): T | undefined;\n\nexport function useObserve<T>(source: Observable<T>, options: Option<T>): T;\n\nexport function useObserve<T>(\n source: () => Observable<T>,\n options: Option<T>,\n deps: DependencyList,\n): T;\n\nexport function useObserve<T>(\n source$: Observable<T> | (() => Observable<T> | undefined),\n optionsOrDeps?: Option<T> | DependencyList,\n maybeDeps?: DependencyList,\n): T {\n const options =\n optionsOrDeps != null && !Array.isArray(optionsOrDeps)\n ? (optionsOrDeps as Option<T>)\n : ({\n defaultValue: undefined,\n unsubscribeOnUnmount: true,\n compareFn: undefined,\n } satisfies Option<undefined>);\n const deps =\n !maybeDeps && Array.isArray(optionsOrDeps)\n ? optionsOrDeps\n : typeof source$ === \"function\"\n ? (maybeDeps ?? [])\n : [source$];\n const valueRef = useRef(\n \"getValue\" in source$ && typeof source$.getValue === \"function\"\n ? source$.getValue()\n : options.defaultValue,\n );\n const sourceRef = useLiveRef(source$);\n const optionsRef = useLiveRef(options);\n\n const getSnapshot = useCallback(() => {\n return valueRef.current;\n }, []);\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: <explanation>\n const subscribe = useCallback(\n (next: () => void) => {\n const source = sourceRef.current;\n\n const sub = makeObservable(source)()\n .pipe(\n optionsRef.current.defaultValue\n ? startWith(optionsRef.current.defaultValue)\n : identity,\n /**\n * @important there is already a Object.is comparison in place from react\n * so we only add a custom compareFn if provided\n */\n distinctUntilChanged((a, b) => {\n if (optionsRef.current.compareFn) {\n if (a === undefined || b === undefined) return false;\n\n return optionsRef.current.compareFn(a, b);\n }\n\n return false;\n }),\n tap((value) => {\n valueRef.current = value;\n }),\n catchError((error) => {\n console.error(error);\n\n return EMPTY;\n }),\n )\n .subscribe(next);\n\n return () => {\n if (optionsRef.current.unsubscribeOnUnmount === false) return;\n\n sub.unsubscribe();\n };\n },\n [...deps],\n );\n\n const result = useSyncExternalStore(subscribe, getSnapshot, getSnapshot);\n\n return result as T;\n}\n","import { type DependencyList, useEffect } from \"react\";\nimport { EMPTY, catchError } from \"rxjs\";\nimport { makeObservable } from \"../utils/makeObservable\";\nimport { useLiveRef } from \"../utils/react/useLiveRef\";\nimport type { SubscribeSource } from \"./types\";\n\nexport function useSubscribe<T>(\n source: SubscribeSource<T> | (() => T),\n deps: DependencyList = [],\n) {\n const sourceRef = useLiveRef(source);\n\n useEffect(() => {\n const sub = makeObservable(sourceRef.current)()\n .pipe(\n catchError((error) => {\n console.error(error);\n\n return EMPTY;\n }),\n )\n .subscribe();\n\n return () => {\n sub.unsubscribe();\n };\n }, [...deps, sourceRef]);\n}\n","import { useEffect, useRef } from \"react\";\n\nexport const useConstant = <T>(fn: () => T) => {\n const ref = useRef<T>(undefined);\n\n if (!ref.current) {\n ref.current = fn();\n }\n\n useEffect(() => {\n /**\n * Because strict mode keep reference to the same ref when the component\n * is re-mounted we force a rewrite here to prevent weird behavior.\n * I don't know why react does that since it is I believe technically\n * wrong. useRef should persist across re-render, not re-mount.\n *\n * @important\n * The downside is that during dev the factory will be called again every\n * mount.\n */\n if (process.env.NODE_ENV === \"development\") {\n // ref.current = fn();\n }\n }, []);\n\n return ref as { current: T };\n};\n","import { useEffect, useRef } from \"react\";\nimport { Subject } from \"rxjs\";\nimport { useConstant } from \"../utils/react/useConstant\";\nimport { useLiveRef } from \"../utils/react/useLiveRef\";\n\n/**\n * @see\n * useBehaviorSubject\n */\nexport const useSubject = <S>({\n onBeforeComplete,\n completeOnUnmount = true,\n}: { onBeforeComplete?: () => void; completeOnUnmount?: boolean } = {}) => {\n const subject = useConstant(() => new Subject<S>());\n const completed = useRef(false);\n const onBeforeCompleteRef = useLiveRef(onBeforeComplete);\n const completeOnUnmountRef = useLiveRef(completeOnUnmount);\n\n useEffect(() => {\n if (completed.current) {\n subject.current = new Subject<S>();\n completed.current = false;\n }\n\n return () => {\n /**\n * @important\n * In case we don't want to complete we still want to\n * flag it in order to be replaced with new subject on remount.\n */\n if (!completeOnUnmountRef.current) {\n completed.current = true;\n\n return;\n }\n\n if (!completed.current) {\n if (onBeforeCompleteRef.current != null) onBeforeCompleteRef.current();\n subject.current.complete();\n completed.current = true;\n }\n };\n }, [completeOnUnmountRef, onBeforeCompleteRef, subject]);\n\n return subject;\n};\n","import { useCallback } from \"react\";\nimport type { Observable } from \"rxjs\";\nimport { useSubject } from \"./useSubject\";\n\n/**\n * This creates an event handler and an observable that represents calls to that handler.\n */\nexport const useObservableCallback = <T = void>(): readonly [\n Observable<T>,\n (arg: T) => void,\n] => {\n const subject = useSubject<T>();\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: <explanation>\n const trigger = useCallback((arg: T) => {\n subject.current.next(arg);\n }, []);\n\n return [subject.current, trigger] as const;\n};\n","import { useEffect, useRef } from \"react\";\nimport { BehaviorSubject } from \"rxjs\";\nimport { useConstant } from \"../utils/react/useConstant\";\n\n/**\n * @important\n * Because of React 18 and its strict mode\n * - concurrency means that effect can run more than once without committing\n * - state & ref can be reused across remount\n *\n * This means that using regular useRef for subject and calling a complete() on\n * unmount will not have the desired effects. Next effects will run with a completed\n * subject and crash.\n *\n * There is another pattern to the current implementation which is using useState and\n * do a setState on the second mount if the source has completed. This will trigger a new\n * commit and re-render with new subject. However I am not sure which one is correct\n * for now. Because of the simple first naive approach is using useRef I will use the\n * same but patch it to support Strict Mode\n *\n * @see https://github.com/reactwg/react-18/discussions/18\n * @see https://github.com/reactwg/react-18/discussions/19\n */\nexport const useBehaviorSubject = <S>(state: S) => {\n const subject = useConstant(() => new BehaviorSubject(state));\n const completed = useRef(false);\n const stateRef = useRef(state);\n\n useEffect(() => {\n if (completed.current) {\n subject.current = new BehaviorSubject(stateRef.current);\n completed.current = false;\n }\n\n return () => {\n if (!completed.current) {\n subject.current.complete();\n completed.current = true;\n }\n };\n }, [subject]);\n\n return subject;\n};\n","import { useCallback } from \"react\";\nimport type { Observable } from \"rxjs\";\nimport { useLiveRef } from \"../utils/react/useLiveRef\";\nimport { useBehaviorSubject } from \"./useBehaviorSubject\";\n\n/**\n * If you need to represent some piece of state as an observable and also want the ability to change\n * this state during the lifetime of the component, useObservableState\n * is for you. It acts like React.useState(), only that\n * it returns an observable representing changes to the\n * value instead of the value itself. The callback/setter\n * returned acts like a the regular callback you\n * would otherwise get from React.useState. This is useful when you want\n * to compose the state change together with other observables.\n *\n * @important\n * The last array value is the value itself in case\n * you need a direct reference to the value\n */\nexport const useObservableState = <T>(\n defaultValue: T,\n): [Observable<T>, (value: T) => void, T] => {\n const subject = useBehaviorSubject(defaultValue);\n\n const subject$ = useLiveRef(subject.current.asObservable());\n\n const setState = useCallback(\n (value: T) => {\n subject.current.next(value);\n },\n [subject.current],\n );\n\n return [subject$.current, setState, subject.current.getValue()];\n};\n","import { useEffect } from \"react\";\nimport { useBehaviorSubject } from \"./useBehaviorSubject\";\n\nexport const useLiveBehaviorSubject = <S>(state: S) => {\n const subject = useBehaviorSubject(state);\n\n useEffect(() => {\n subject.current.next(state);\n }, [state, subject]);\n\n return subject;\n};\n","import { type DependencyList, useCallback } from \"react\";\nimport { catchError, identity, retry } from \"rxjs\";\nimport { makeObservable } from \"../utils/makeObservable\";\nimport { useLiveRef } from \"../utils/react/useLiveRef\";\nimport type { SubscribeSource } from \"./types\";\nimport { useSubscribe } from \"./useSubscribe\";\n\ninterface Option {\n retry?: boolean;\n onError?: (error: unknown) => void;\n}\n\nexport function useSubscribeEffect<T>(source: SubscribeSource<T>): void;\nexport function useSubscribeEffect<T>(\n source: SubscribeSource<T>,\n options: Option,\n): void;\n\nexport function useSubscribeEffect<T>(\n source: SubscribeSource<T>,\n deps: DependencyList,\n): void;\n\nexport function useSubscribeEffect<T>(\n source: SubscribeSource<T>,\n options: Option,\n deps: DependencyList,\n): void;\n\nexport function useSubscribeEffect<T>(\n source: SubscribeSource<T>,\n unsafeOptions?: Option | DependencyList,\n deps: DependencyList = [],\n) {\n const options =\n unsafeOptions != null && !Array.isArray(unsafeOptions)\n ? (unsafeOptions as Option)\n : ({} satisfies Option);\n const retryOption = options.retry ?? true;\n const onErrorRef = useLiveRef(\n options.onError ??\n ((error: unknown) => {\n console.error(error);\n }),\n );\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: <explanation>\n const sourceAsObservable = useCallback(() => makeObservable(source)(), deps);\n\n const enhancerMakeObservable = useCallback(\n () =>\n sourceAsObservable().pipe(\n catchError((error) => {\n onErrorRef.current(error);\n\n throw error;\n }),\n retryOption ? retry() : identity,\n ),\n [sourceAsObservable, retryOption, onErrorRef],\n );\n\n useSubscribe(enhancerMakeObservable, deps);\n}\n","export const SIGNAL_RESET = Symbol(\"SIGNAL_RESET\");\n","import { BehaviorSubject, first, skip } from \"rxjs\";\nimport type { Observable } from \"rxjs\";\nimport { SIGNAL_RESET } from \"./constants\";\n\ntype setValue<S> = (\n stateOrUpdater: typeof SIGNAL_RESET | S | ((prev: S) => S),\n) => void;\n\ntype Getter<Value> = (\n // biome-ignore lint/suspicious/noExplicitAny: <explanation>\n get: <GetSignal extends Signal<any, any, any>>(\n signal: GetSignal,\n ) => ReturnType<GetSignal[\"getValue\"]>,\n) => Value;\n\nexport type Config<\n DefaultValue = undefined,\n Key = undefined,\n> = Key extends undefined\n ? {\n default: DefaultValue;\n }\n : {\n default: DefaultValue;\n key: Key;\n };\n\ninterface ReadOnlySignalConfig<Value> {\n get: Getter<Value>;\n}\n\nexport interface ReadOnlySignal<Value> {\n getValue: () => Value;\n config: ReadOnlySignalConfig<Value>;\n subject: Observable<Value>;\n}\n\nexport interface Signal<\n DefaultValue = undefined,\n Value = undefined,\n Key = undefined,\n> {\n setValue: setValue<DefaultValue>;\n getValue: () => Value;\n config: Config<DefaultValue, Key>;\n subject: Observable<DefaultValue>;\n}\n\nexport function signal<T = undefined, V = T>(\n config?: Omit<Partial<Config<T, string | undefined>>, \"key\" | \"get\">,\n): Signal<T, V, undefined>;\n\nexport function signal<T = undefined, V = T>(\n config: Omit<Partial<Config<T, string | undefined>>, \"get\"> & {\n key: string;\n },\n): Signal<T, V, string>;\n\nexport function signal<V = undefined>(\n config: ReadOnlySignalConfig<V>,\n): ReadOnlySignal<V>;\n\nexport function signal<\n T = undefined,\n V = undefined,\n Key extends string | undefined = undefined,\n>(\n config: Partial<Config<T, Key>> | ReadOnlySignalConfig<V> = {},\n): Signal<T, V, Key> | ReadOnlySignal<V> {\n const normalizedConfig: Config<T | undefined, string | undefined> = {\n // biome-ignore lint/suspicious/noExplicitAny: <explanation>\n default: (config as any).default,\n // biome-ignore lint/suspicious/noExplicitAny: <explanation>\n key: (config as any).key,\n };\n const { default: defaultValue } = normalizedConfig ?? {};\n // biome-ignore lint/suspicious/noExplicitAny: <explanation>\n const subject = new BehaviorSubject(defaultValue as any);\n\n const setValue = <F extends (prev: T) => T>(\n arg: T | F | typeof SIGNAL_RESET,\n ) => {\n const update = (value: T | undefined) => {\n if (\"key\" in config) {\n console.log(\n \"[reactjrx][state][signal]:\",\n `Value update for signal ${config.key}`,\n {\n prev: subject.getValue(),\n curr: value,\n },\n );\n }\n\n subject.next(value);\n };\n\n if (typeof arg === \"function\") {\n const change = (arg as F)(subject.getValue());\n\n if (change === subject.getValue()) return;\n\n return update(change);\n }\n\n if (arg === SIGNAL_RESET) {\n if (defaultValue === subject.getValue()) return;\n\n return update((defaultValue ?? undefined) as T);\n }\n\n if (arg === subject.getValue()) return;\n\n return update(arg);\n };\n\n const getValue = () => subject.getValue();\n\n /**\n * Read Only signals\n */\n if (\"get\" in config) {\n // biome-ignore lint/suspicious/noExplicitAny: <explanation>\n const getter = (signal: Signal<any, any, any>) => {\n signal.subject.pipe(skip(1), first()).subscribe(() => {\n const newValue = config.get?.(getter);\n\n // biome-ignore lint/suspicious/noExplicitAny: <explanation>\n setValue(newValue as any);\n });\n\n return signal.getValue();\n };\n\n const defaultValue = config.get(getter);\n\n // biome-ignore lint/suspicious/noExplicitAny: <explanation>\n setValue(defaultValue as any);\n\n return {\n getValue,\n config,\n subject,\n };\n }\n\n return {\n setValue,\n getValue,\n // biome-ignore lint/suspicious/noExplicitAny: <explanation>\n config: normalizedConfig as any,\n subject,\n };\n}\n\n// biome-ignore lint/suspicious/noExplicitAny: <explanation>\nexport type SignalValue<S extends Signal<any, any, any>> = ReturnType<\n S[\"getValue\"]\n>;\n","import { type Observable, distinctUntilChanged, map } from \"rxjs\";\nimport { useObserve } from \"../../binding/useObserve\";\nimport type { ReadOnlySignal, Signal } from \"../signal\";\n\nexport function useSignalValue<DefaultValue, Value, Key, SelectValue>(\n signal: Signal<DefaultValue, Value, Key>,\n selector: (value: DefaultValue) => SelectValue,\n): SelectValue;\nexport function useSignalValue<DefaultValue, Value, Key>(\n signal: Signal<DefaultValue, Value, Key>,\n): DefaultValue;\n// read only\nexport function useSignalValue<Value>(signal: ReadOnlySignal<Value>): Value;\n// read only select\nexport function useSignalValue<Value, SelectValue>(\n signal: ReadOnlySignal<Value>,\n selector: (value: Value) => SelectValue,\n): SelectValue;\nexport function useSignalValue<DefaultValue, Value, Key, SelectedValue>(\n signal: Signal<DefaultValue, Value, Key> | ReadOnlySignal<Value>,\n selector?: (\n value: DefaultValue | Value,\n ) => SelectedValue | DefaultValue | Value,\n) {\n const defaultSelector = () => signal.getValue();\n const selectorOrDefault = selector ?? defaultSelector;\n\n return useObserve(\n () => {\n const observed$ = (signal.subject as Observable<Value>).pipe(\n map((value) => {\n const selectedValue = selectorOrDefault(value);\n\n return selectedValue;\n }),\n distinctUntilChanged(),\n );\n\n return observed$;\n },\n {\n defaultValue: selectorOrDefault(signal.getValue()),\n },\n [],\n );\n}\n","import { useState } from \"react\";\nimport { type Config, signal } from \"../signal\";\nimport { useSignalValue } from \"./useSignalValue\";\n\n/**\n * Use it when:\n * - you need reactive state\n * - you don't need global state\n */\nexport const useSignal = <T>(config: Config<T>) => {\n const [stateSignal] = useState(() => signal(config));\n\n const value = useSignalValue(stateSignal);\n\n return [value, stateSignal] as const;\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","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: <explanation>\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}: { key?: string } = {}): 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","export function shallowEqual<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: <explanation>\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: <explanation>\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: <explanation>\n // biome-ignore lint/suspicious/noExplicitAny: <explanation>\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_PERSISTANCE_KEY = \"__reactjrx\";\n","import { catchError, from, of, switchMap } from \"rxjs\";\nimport type { Adapter } from \"./adapters/Adapter\";\nimport { IDENTIFIER_PERSISTANCE_KEY } from \"./constants\";\nimport type { PersistanceEntry, SignalPersistenceConfig } from \"./types\";\n\nexport const getNormalizedPersistanceValue = (unknownValue: unknown) => {\n if (\n typeof unknownValue === \"object\" &&\n unknownValue !== null &&\n IDENTIFIER_PERSISTANCE_KEY in unknownValue &&\n unknownValue[IDENTIFIER_PERSISTANCE_KEY] === IDENTIFIER_PERSISTANCE_KEY\n ) {\n return unknownValue as PersistanceEntry;\n }\n\n return undefined;\n};\n\nexport const persistValue = ({\n adapter,\n config,\n}: {\n adapter: Adapter;\n // biome-ignore lint/suspicious/noExplicitAny: <explanation>\n config: SignalPersistenceConfig<any>;\n}) => {\n const { signal, version } = config;\n const state = signal.getValue();\n\n const value = {\n value: state,\n [IDENTIFIER_PERSISTANCE_KEY]: IDENTIFIER_PERSISTANCE_KEY,\n migrationVersion: version,\n } satisfies PersistanceEntry;\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: <explanation>\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 EMPTY,\n asyncScheduler,\n catchError,\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: <explanation>\n entries: Array<SignalPersistenceConfig<Signal<any, 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.subject.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\";\nimport { useLiveRef } from \"../../utils/react/useLiveRef\";\nimport { shallowEqual } from \"../../utils/shallowEqual\";\nimport type { Adapter } from \"../persistance/adapters/Adapter\";\nimport { persistSignals } from \"../persistance/persistSignals\";\nimport type { SignalPersistenceConfig } from \"../persistance/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 * inifite loop.\n */\n\n // biome-ignore lint/suspicious/noExplicitAny: <explanation>\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 * inifite 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 return useObserve(\n () => {\n const persistence$ = adapterSubject.current.pipe(\n switchMap((adapter) => {\n if (!adapter) return of({ type: \"reset\" });\n\n return merge(\n of({ type: \"reset\" }),\n entriesSubject.current.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: shallowEqual },\n [adapterSubject, entriesSubject],\n );\n}\n","import { useSubject } from \"../../binding/useSubject\";\n\nexport const useUnmountObservable = () => {\n const subject = useSubject<void>({\n onBeforeComplete: () => {\n subject.current.next();\n },\n });\n\n return subject;\n};\n","import { type EffectCallback, useEffect } from \"react\";\n\nexport const useEffectOnce = (effect: EffectCallback) => {\n useEffect(effect, []);\n};\n","import { useEffectOnce } from \"./useEffectOnce\";\n\nexport const useMount = (fn: () => void) => {\n useEffectOnce(() => {\n fn();\n });\n};\n","import { type Observable, defer, merge, 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: <explanation>\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: <explanation>\n caughtError?: (attempt: number, error: any) => undefined | Observable<T>;\n // biome-ignore lint/suspicious/noExplicitAny: <explanation>\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","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: <explanation>\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 const isServer = typeof window === \"undefined\" || \"Deno\" in window;\n","import { type QueryKey, hashKey } from \"@tanstack/react-query\";\nimport { createContext, memo, useContext, useEffect, useState } from \"react\";\nimport {\n type Observable,\n type Subscription,\n fromEvent,\n share,\n takeUntil,\n} from \"rxjs\";\n\ntype CacheEntry = {\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 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 /**\n * abort signal is triggered on:\n * - manual cancellation from user\n * - unmounting the component\n * @see https://tanstack.com/query/latest/docs/framework/react/guides/query-cancellation\n */\n takeUntil(fromEvent(signal, \"abort\")),\n share(),\n );\n\n const cacheEntry: CacheEntry = {\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 this.deleteQuery(queryHash);\n },\n });\n\n cacheEntry.sub = sub;\n\n return cacheEntry;\n }\n\n deleteQuery(queryHash: string) {\n const entry = this.queryMap.get(queryHash);\n\n if (!entry) return;\n\n if (entry.sub) {\n entry.sub.unsubscribe();\n entry.sub = undefined;\n }\n\n entry.isCompleted = true;\n\n this.queryMap.delete(queryHash);\n }\n\n destroy() {\n this.queryMap.forEach((_, key) => {\n this.deleteQuery(key);\n });\n }\n}\n\nexport const Context = createContext<QueryClient$ | undefined>(undefined);\n\nexport const QueryClientProvider$ = memo(\n ({\n children,\n client: _client,\n }: {\n children: React.ReactNode;\n client?: QueryClient$;\n }) => {\n const [client] = useState(() => _client ?? new QueryClient$());\n\n useEffect(() => {\n return () => {\n client.destroy();\n };\n }, [client]);\n\n return <Context.Provider value={client}>{children}</Context.Provider>;\n },\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 QueryFunctionContext,\n type QueryKey,\n type UseQueryOptions,\n hashKey,\n useQuery,\n useQueryClient,\n} from \"@tanstack/react-query\";\nimport { type Observable, defer, delay, 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 options: Omit<\n UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n \"queryFn\"\n > & {\n queryFn:\n | ((context: QueryFunctionContext<TQueryKey>) => Observable<TQueryFnData>)\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 return new Promise<TQueryFnData>((resolve, reject) => {\n const getSource = () =>\n defer(() =>\n typeof options.queryFn === \"function\"\n ? options.queryFn(context)\n : options.queryFn,\n );\n\n const queryHash = hashKey(context.queryKey);\n\n const queryCacheEntry =\n queryClient$.getQuery(queryHash) ??\n queryClient$.setQuery(context.queryKey, getSource(), context.signal);\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 return resolve(undefined as TQueryFnData);\n }\n\n console.log(\n `cancelled due to stream completing without data for query ${queryHash}`,\n queryCacheEntry?.lastData,\n );\n\n _queryClient.cancelQueries({\n queryKey: context.queryKey,\n exact: true,\n });\n\n return resolve(undefined as TQueryFnData);\n }\n\n resolve(queryCacheEntry.lastData.value as TQueryFnData);\n\n if (queryCacheEntry?.isCompleted === false) {\n setTimeout(() => {\n _queryClient?.refetchQueries({\n queryKey: context.queryKey,\n exact: true,\n });\n });\n }\n },\n });\n });\n };\n\n const result = useQuery<TQueryFnData, TError, TData, TQueryKey>(\n {\n ...options,\n queryFn: queryFnAsync,\n },\n queryClient,\n );\n\n return result;\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 { type Observable, take } from \"rxjs\";\nimport { useBehaviorSubject } from \"../binding/useBehaviorSubject\";\n\nexport type UseMutation$Options<\n TData = unknown,\n TError = DefaultError,\n TVariables = void,\n TContext = unknown,\n> = Omit<\n UseMutationOptions<TData, TError, TVariables, TContext>,\n \"mutationFn\"\n> & {\n mutationFn:\n | ((variables: TVariables) => Observable<TData>)\n | Observable<TData>;\n};\n\nexport function useMutation$<\n TData = unknown,\n TError = DefaultError,\n TVariables = void,\n TContext = unknown,\n>(\n options: UseMutation$Options<TData, TError, TVariables, TContext>,\n queryClient?: QueryClient,\n) {\n const stateSubject = useBehaviorSubject<\n Pick<\n UseMutationResult<TData, TError, TVariables, TContext>,\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 const result = useMutation<TData, TError, TVariables, TContext>(\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.current.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.current };\n}\n","import type { DefaultError, QueryClient } from \"@tanstack/react-query\";\nimport { useCallback } from \"react\";\nimport { defaultIfEmpty, takeUntil } from \"rxjs\";\nimport { useObservableCallback } from \"../binding/useObservableCallback\";\nimport { type UseMutation$Options, useMutation$ } from \"./useMutation$\";\n\nexport function useSwitchMutation$<\n TData = unknown,\n TError = DefaultError,\n TVariables = void,\n TContext = unknown,\n>(\n options: UseMutation$Options<TData | null, TError, TVariables, TContext>,\n queryClient?: QueryClient,\n) {\n const [cancel$, cancel] = useObservableCallback();\n type TDataOrNull = TData | null;\n\n const { mutate, mutateAsync, ...rest } = useMutation$<\n TDataOrNull,\n TError,\n TVariables,\n TContext\n >(\n {\n ...options,\n mutationFn: (variables) => {\n const source =\n typeof options.mutationFn === \"function\"\n ? options.mutationFn(variables)\n : options.mutationFn;\n\n return source.pipe(takeUntil(cancel$), defaultIfEmpty(null));\n },\n },\n queryClient,\n );\n\n const mutateSwitch = useCallback(\n (variables: TVariables) => {\n cancel();\n\n return mutate(variables);\n },\n [mutate, cancel],\n );\n\n const mutateAsyncSwitch = useCallback(\n (variables: TVariables) => {\n cancel();\n\n return mutateAsync(variables);\n },\n [mutateAsync, cancel],\n );\n\n return { ...rest, mutate: mutateSwitch, mutateAsync: mutateAsyncSwitch };\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 type Subject,\n filter,\n first,\n noop,\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 options: 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({ variables }) {\n return options.onMutate?.(variables);\n },\n onSuccess(data, variables, context) {\n return options.onSuccess?.(data, variables.variables, context);\n },\n onError(error, variables, context) {\n return options.onError?.(error, variables.variables, context);\n },\n onSettled(data, error, variables, context) {\n return options.onSettled?.(data, error, variables.variables, context);\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"],"names":["isPromiseLike","value","makeObservable","something","isObservable","from","of","somethingAsFunction","params","defer","result","useLiveRef","ref","useRef","useMemo","useObserve","source$","optionsOrDeps","maybeDeps","options","deps","valueRef","sourceRef","optionsRef","getSnapshot","useCallback","subscribe","next","source","sub","startWith","identity","distinctUntilChanged","a","b","tap","catchError","error","EMPTY","useSyncExternalStore","useSubscribe","useEffect","useConstant","fn","useSubject","onBeforeComplete","completeOnUnmount","subject","Subject","completed","onBeforeCompleteRef","completeOnUnmountRef","useObservableCallback","trigger","arg","useBehaviorSubject","state","BehaviorSubject","stateRef","useObservableState","defaultValue","subject$","setState","useLiveBehaviorSubject","useSubscribeEffect","unsafeOptions","retryOption","onErrorRef","sourceAsObservable","enhancerMakeObservable","retry","SIGNAL_RESET","signal","config","normalizedConfig","setValue","update","change","getValue","getter","skip","first","newValue","_a","useSignalValue","selector","selectorOrDefault","map","useSignal","stateSignal","useState","createLocalforageAdapter","forage","key","serializedValue","_","normalizeStore","store","createSharedStoreAdapter","adapter","keyToDelete","unsafeStore","toRemove","rest","itemKey","createLocalStorageAdapter","shallowEqual","objA","objB","keysA","keysB","IDENTIFIER_PERSISTANCE_KEY","getNormalizedPersistanceValue","unknownValue","persistValue","version","e","hydrateValueToSignal","hydrate","switchMap","normalizedValue","storedVersionIsInvalid","signalVersionIsSuperior","correctVersionValue","persistSignals","entries","onHydrated","isHydrated$","zip","share","persisted$","merge","throttleTime","asyncScheduler","usePersistSignals","onHydratedRef","adapterSubject","entriesSubject","concatMap","scan","acc","event","useUnmountObservable","useEffectOnce","effect","useMount","getDelay","backoffDelay","maxInterval","exponentialBackoffDelay","iteration","initialInterval","retryBackoff","retryDelay","retryAfterDelay","retryAfter","maxRetries","shouldRetry","resetOnSuccess","caughtErrors","shouldRetryFn","attempt","caughtErrorResult$","mergeMap","throwError","retryWhen","errors","timer","isDefined","arrayEqual","v","i","isServer","QueryClient$","__publicField","queryHash","queryKey","query$","hashKey","sharedQuery$","takeUntil","fromEvent","cacheEntry","data","entry","Context","createContext","QueryClientProvider$","memo","children","_client","client","useQueryClient$","useContext","useQuery$","queryClient","_queryClient","useQueryClient","queryClient$","useQuery","context","resolve","reject","getSource","queryCacheEntry","take","delay","useMutation$","stateSubject","useMutation","variables","lastData","status","isPending","isError","isSuccess","isIdle","useSwitchMutation$","cancel$","cancel","mutate","mutateAsync","defaultIfEmpty","mutateSwitch","mutateAsyncSwitch","useContactMutation$","mutationKey","ready$","filter","isReady","mutateAsyncConcat","mutations","mutation","noop","mutateConcat"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,70 +1,70 @@
|
|
|
1
1
|
{
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
2
|
+
"name": "reactjrx",
|
|
3
|
+
"private": false,
|
|
4
|
+
"version": "1.115.1",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"files": [
|
|
7
|
+
"dist"
|
|
8
|
+
],
|
|
9
|
+
"main": "./dist/index.js",
|
|
10
|
+
"module": "./dist/index.js",
|
|
11
|
+
"exports": {
|
|
12
|
+
".": {
|
|
13
|
+
"import": "./dist/index.js",
|
|
14
|
+
"require": "./dist/index.umd.cjs"
|
|
15
|
+
}
|
|
16
|
+
},
|
|
17
|
+
"types": "./dist/index.d.ts",
|
|
18
|
+
"publishConfig": {
|
|
19
|
+
"access": "public"
|
|
20
|
+
},
|
|
21
|
+
"scripts": {
|
|
22
|
+
"dev": "vite",
|
|
23
|
+
"build": "tsc && vite build",
|
|
24
|
+
"watch": "vite build --watch",
|
|
25
|
+
"preview": "vite preview",
|
|
26
|
+
"prepublishOnly": "npm run build",
|
|
27
|
+
"semantic-release": "semantic-release",
|
|
28
|
+
"test": "vitest --typecheck",
|
|
29
|
+
"test:ci": "vitest run",
|
|
30
|
+
"tsc": "tsc",
|
|
31
|
+
"prepare": "husky && husky install",
|
|
32
|
+
"check": "npx @biomejs/biome check ."
|
|
33
|
+
},
|
|
34
|
+
"peerDependencies": {
|
|
35
|
+
"@tanstack/react-query": "5.x",
|
|
36
|
+
"react": "^18 || ^19",
|
|
37
|
+
"react-dom": "^18 || ^19",
|
|
38
|
+
"rxjs": "*"
|
|
39
|
+
},
|
|
40
|
+
"devDependencies": {
|
|
41
|
+
"@biomejs/biome": "1.9.4",
|
|
42
|
+
"@testing-library/jest-dom": "^6.2.0",
|
|
43
|
+
"@testing-library/react": "^16.1.0",
|
|
44
|
+
"@types/node": "^22.10.2",
|
|
45
|
+
"@types/react": "^19.0.2",
|
|
46
|
+
"@types/react-dom": "^19.0.2",
|
|
47
|
+
"@vitejs/plugin-react": "^4.0.0",
|
|
48
|
+
"husky": "^9.1.7",
|
|
49
|
+
"jsdom": "^26.0.0",
|
|
50
|
+
"lint-staged": "^15.3.0",
|
|
51
|
+
"react": "^19.0.0",
|
|
52
|
+
"react-dom": "^19.0.0",
|
|
53
|
+
"rollup-plugin-node-externals": "^8.0.0",
|
|
54
|
+
"rxjs": "^7.8.0",
|
|
55
|
+
"semantic-release": "^24.1.1",
|
|
56
|
+
"typescript": "^5.6.2",
|
|
57
|
+
"vite": "^6.0.6",
|
|
58
|
+
"vite-plugin-dts": "^4.2.1",
|
|
59
|
+
"vitest": "^2.1.8"
|
|
60
|
+
},
|
|
61
|
+
"repository": {
|
|
62
|
+
"type": "git",
|
|
63
|
+
"url": "https://github.com/mbret/reactjrx.git"
|
|
64
|
+
},
|
|
65
|
+
"lint-staged": {
|
|
66
|
+
"*": [
|
|
67
|
+
"biome check --no-errors-on-unmatched --files-ignore-unknown=true --write"
|
|
68
|
+
]
|
|
69
|
+
}
|
|
70
70
|
}
|