{"version":3,"sources":["../src/useQuery.tsx","../src/client-provider.tsx","../src/queryObserver.ts","../src/useMutation.ts","../src/mutationObserver.ts","../src/mutation.ts","../src/query.ts","../src/elhalaClient.ts","../src/useSuspenseQuery.ts"],"sourcesContent":["import { useSyncExternalStore, useRef, useCallback } from \"react\";\r\nimport { useElhalaClient } from \"./client-provider\";\r\nimport { createQueryObserver } from \"./queryObserver\";\r\nimport { QueryObserver, QueryState, useQueryOptions } from \"./types\";\r\n\r\nexport function useQuery<T>(options: useQueryOptions<T>): QueryState<T> {\r\n  const client = useElhalaClient();\r\n\r\n  const observer = useRef<QueryObserver<T> | null>(null);\r\n  if (!observer.current) {\r\n    observer.current = createQueryObserver(client, options);\r\n  }\r\n\r\n  useSyncExternalStore(\r\n    useCallback((onStoreChange) => {\r\n      return observer.current!.subscribe(onStoreChange);\r\n    }, []),\r\n    () => observer.current?.getResults(),\r\n    () => observer.current?.getResults()\r\n  );\r\n\r\n  return observer.current.getResults();\r\n}\r\n","import {\r\n  useContext,\r\n  createContext,\r\n  ReactNode,\r\n  useCallback,\r\n  useEffect,\r\n} from \"react\";\r\nimport { ElhalaClient } from \"./elhalaClient\";\r\n\r\nconst elhalaClientContext = createContext<ElhalaClient | null>(null);\r\n\r\nexport const useElhalaClient = () => {\r\n  const client = useContext(elhalaClientContext);\r\n  if (!client) {\r\n    throw new Error(\r\n      \"useElhalaClient must be used within an ElhalaClientProvider\"\r\n    );\r\n  }\r\n  return client;\r\n};\r\n\r\nexport const ElhalaProvider = ({\r\n  client,\r\n  children,\r\n}: {\r\n  client: ElhalaClient;\r\n  children: ReactNode;\r\n}) => {\r\n  const onFocus = useCallback(() => {\r\n    client.queries.forEach((query) => {\r\n      query.subscribers.forEach((sub) => sub.notify());\r\n    });\r\n  }, [client]);\r\n\r\n  useEffect(() => {\r\n    const controller = new AbortController();\r\n    window.addEventListener(\"focus\", onFocus, { signal: controller.signal });\r\n    window.addEventListener(\"visibilitychange\", onFocus, {\r\n      signal: controller.signal,\r\n    });\r\n\r\n    return () => controller.abort();\r\n  }, [onFocus]);\r\n  return (\r\n    <elhalaClientContext.Provider value={client}>\r\n      {children}\r\n    </elhalaClientContext.Provider>\r\n  );\r\n};\r\n","import { ElhalaClient } from \"./elhalaClient\";\nimport { QueryObserver, useQueryOptions } from \"./types\";\n\nexport function createQueryObserver<T>(\n  client: ElhalaClient,\n  { queryFn, queryKey, cacheTime, staleTime = 0 }: useQueryOptions<T>\n): QueryObserver<T> {\n  const query = client.getQuery({ queryFn, queryKey, cacheTime });\n  let staleCheckTimer: ReturnType<typeof setTimeout> | null = null;\n\n  const setupStaleCheck = () => {\n    if (staleTime <= 0 || !query.state.lastUpdated) return;\n\n    if (staleCheckTimer) {\n      clearTimeout(staleCheckTimer);\n      staleCheckTimer = null;\n    }\n\n    const timeUntilStale = staleTime - (Date.now() - query.state.lastUpdated);\n\n    if (timeUntilStale > 0) {\n      staleCheckTimer = setTimeout(() => {\n        query.fetch();\n      }, timeUntilStale);\n    }\n  };\n\n  const observer: QueryObserver<T> = {\n    notify: () => {\n      setupStaleCheck();\n      return query.state;\n    },\n    getResults: () => query.state,\n    fetch: () => {\n      if (\n        !query.state.lastUpdated ||\n        Date.now() - query.state.lastUpdated > staleTime\n      ) {\n        query.fetch();\n      }\n    },\n    subscribe: (callback) => {\n      observer.notify = () => {\n        setupStaleCheck();\n        callback();\n        return query.state;\n      };\n\n      const unsub = query.subscribe(observer);\n\n      // fetch the data immediately !!IMPORTANT!!\n      observer.fetch();\n\n      setupStaleCheck();\n\n      return () => {\n        unsub();\n        if (staleCheckTimer) {\n          clearTimeout(staleCheckTimer);\n          staleCheckTimer = null;\n        }\n      };\n    },\n    fetchOptimistic: () => {\n      return query.fetch();\n    },\n  };\n  return observer;\n}\n","import { useSyncExternalStore, useRef, useCallback } from \"react\";\r\nimport { useElhalaClient } from \"./client-provider\";\r\nimport { createMutationObserver } from \"./mutationObserver\";\r\nimport { MutationObserver, MutationState, MutationOptions } from \"./types\";\r\n\r\nexport function useMutation<T>(options: MutationOptions<T>): MutationState<T> {\r\n  const client = useElhalaClient();\r\n\r\n  const observer = useRef<MutationObserver<T> | null>(null);\r\n  if (!observer.current) {\r\n    observer.current = createMutationObserver(client, options);\r\n  }\r\n\r\n  useSyncExternalStore(\r\n    useCallback((onStoreChange) => {\r\n      return observer.current!.subscribe(onStoreChange);\r\n    }, []),\r\n    () => observer.current?.getResults(),\r\n    () => observer.current?.getResults()\r\n  );\r\n\r\n  return observer.current.getResults();\r\n}\r\n","import { ElhalaClient } from \"./elhalaClient\";\r\nimport { MutationObserver, MutationOptions } from \"./types\";\r\n\r\nexport function createMutationObserver<T>(\r\n  client: ElhalaClient,\r\n  options: MutationOptions<T>\r\n): MutationObserver<T> {\r\n  const mutation = client.getMutation(options);\r\n  const observer: MutationObserver<T> = {\r\n    notify: () => mutation.state,\r\n    getResults: () => mutation.state,\r\n    subscribe: (callback) => {\r\n      observer.notify = callback;\r\n      const unsub = mutation.subscribe(observer);\r\n\r\n      return unsub;\r\n    },\r\n  };\r\n  return observer;\r\n}\r\n","import { MutationOptions, Mutation } from \"./types\";\r\n\r\nexport function createMutation<T>({\r\n  mutationFn,\r\n  mutationKey,\r\n  onError,\r\n  onMutate,\r\n  onSettled,\r\n  onSuccess,\r\n}: MutationOptions<T>): Mutation<T> {\r\n  let mutation: Mutation<T> = {\r\n    subscribers: [],\r\n    subscribe: (subscriber) => {\r\n      mutation.subscribers.push(subscriber);\r\n\r\n      return () => {\r\n        mutation.subscribers = mutation.subscribers.filter(\r\n          (sub) => sub !== subscriber\r\n        );\r\n      };\r\n    },\r\n    setState: (updater) => {\r\n      mutation.state = updater(mutation.state);\r\n      mutation.subscribers.forEach((sub) => sub.notify());\r\n    },\r\n    options: {\r\n      mutationFn: mutationFn,\r\n      mutationKey: mutationKey,\r\n      onError: onError,\r\n      onMutate: onMutate,\r\n      onSettled: onSettled,\r\n      onSuccess: onSuccess,\r\n      mutationHash: JSON.stringify(mutationKey),\r\n    },\r\n    state: {\r\n      data: undefined,\r\n      error: undefined,\r\n      isLoading: false,\r\n      isSuccess: false,\r\n      isError: false,\r\n      status: \"idle\",\r\n      mutate: async (variables) => {\r\n        mutation.setState((state) => ({\r\n          ...state,\r\n          isLoading: true,\r\n          isSuccess: false,\r\n          isError: false,\r\n          status: \"loading\",\r\n        }));\r\n        mutation.options.onMutate?.();\r\n\r\n        try {\r\n          const data = await mutation.options.mutationFn(variables);\r\n          mutation.setState((state) => ({\r\n            ...state,\r\n            data: data,\r\n            isSuccess: true,\r\n            isError: false,\r\n            status: \"success\",\r\n          }));\r\n\r\n          mutation.options.onSuccess?.(data);\r\n        } catch (error) {\r\n          mutation.setState((state) => ({\r\n            ...state,\r\n            isSuccess: false,\r\n            isError: true,\r\n            status: \"error\",\r\n            error: error as Error,\r\n          }));\r\n\r\n          mutation.options.onError?.(error as Error);\r\n        } finally {\r\n          mutation.setState((state) => ({\r\n            ...state,\r\n            isLoading: false,\r\n            status: \"idle\",\r\n          }));\r\n          mutation.options.onSettled?.();\r\n        }\r\n      },\r\n    },\r\n  };\r\n\r\n  return mutation;\r\n}\r\n","import { ElhalaClient } from \"./elhalaClient\";\nimport { Query, QueryOptions } from \"./types\";\n\nconst DEFAULT_CACHE_TIME = 1000 * 60 * 5;\n\nexport function createQuery<T>(\n  client: ElhalaClient,\n  { queryFn, queryKey, cacheTime = DEFAULT_CACHE_TIME }: QueryOptions<T>\n): Query<T> {\n  let queryHash = JSON.stringify(queryKey);\n\n  let query: Query<T> = {\n    subscribers: [],\n    state: {\n      data: undefined,\n      error: undefined,\n      isLoading: true,\n      isFetching: true,\n      isError: false,\n      status: \"loading\",\n      lastUpdated: undefined,\n      refetch: () => {\n        query.fetch();\n      },\n    },\n    promise: undefined,\n    options: {\n      queryFn: queryFn,\n      queryHash: queryHash,\n      queryKey: queryKey,\n    },\n    gcTimeout: undefined,\n\n    scheduleGC: () => {\n      query.gcTimeout = setTimeout(() => {\n        client.removeQuery(query);\n      }, cacheTime);\n    },\n\n    unscheduleGC: () => {\n      clearTimeout(query.gcTimeout);\n    },\n\n    subscribe: (subscriber) => {\n      query.subscribers.push(subscriber);\n\n      query.unscheduleGC();\n\n      return () => {\n        query.subscribers = query.subscribers.filter(\n          (sub) => sub !== subscriber\n        );\n\n        if (query.subscribers.length === 0) {\n          query.scheduleGC();\n        }\n      };\n    },\n\n    setState: (updater) => {\n      query.state = updater(query.state);\n\n      query.subscribers.forEach((sub) => sub.notify());\n    },\n\n    fetch: () => {\n      if (!query.promise) {\n        query.promise = (async () => {\n          query.setState((state) => ({ ...state, isFetching: true }));\n          try {\n            let data = await query.options.queryFn({\n              queryKey: query.options.queryKey,\n            });\n            query.setState((state) => ({\n              ...state,\n              data: data,\n              status: \"success\",\n              isError: false,\n              lastUpdated: Date.now(),\n            }));\n          } catch (error) {\n            query.setState((state) => ({\n              ...state,\n              error: error as Error,\n              isError: true,\n              status: \"error\",\n            }));\n          } finally {\n            query.promise = undefined;\n            query.setState((state) => ({\n              ...state,\n              isFetching: false,\n              isLoading: false,\n            }));\n          }\n        })();\n      }\n      return query.promise;\n    },\n  };\n\n  return query;\n}\n","import { createMutation } from \"./mutation\";\r\nimport { createQuery } from \"./query\";\r\nimport {\r\n  Query,\r\n  QueryOptions,\r\n  Mutation,\r\n  MutationOptions,\r\n  QueryKey,\r\n} from \"./types\";\r\n\r\nexport class ElhalaClient {\r\n  queries: Map<string, Query<any>>;\r\n  mutations: Map<string, Mutation<any>>;\r\n  constructor() {\r\n    this.queries = new Map();\r\n    this.mutations = new Map();\r\n  }\r\n\r\n  getQuery<T>(options: QueryOptions<T>): Query<T> {\r\n    let queryHash = JSON.stringify(options.queryKey);\r\n\r\n    if (this.queries.has(queryHash)) {\r\n      return this.queries.get(queryHash) as Query<T>;\r\n    } else {\r\n      let query = createQuery(this, options);\r\n      this.queries.set(queryHash, query);\r\n\r\n      return query;\r\n    }\r\n  }\r\n\r\n  getQueryData<T>(options: QueryOptions<T>): T | undefined {\r\n    return this.getQuery(options).state.data;\r\n  }\r\n\r\n  setQueryData<T>(options: QueryOptions<T>, data: T) {\r\n    let query = this.getQuery(options);\r\n    query.setState((state) => ({\r\n      ...state,\r\n      data: data,\r\n    }));\r\n  }\r\n\r\n  removeQuery(query: Query<any>) {\r\n    this.queries.delete(query.options.queryHash);\r\n  }\r\n\r\n  invalidateQueries({ queryKey }: { queryKey: QueryKey }) {\r\n    this.queries.forEach((query) => {\r\n      if (\r\n        queryKey.length === 0 ||\r\n        queryKey.some((key) => query.options.queryKey.includes(key))\r\n      ) {\r\n        query.setState((state) => ({\r\n          ...state,\r\n          isLoading: true,\r\n          isFetching: true,\r\n        }));\r\n        query.fetch();\r\n      }\r\n    });\r\n  }\r\n\r\n  clearQueriesCache() {\r\n    this.queries.clear();\r\n  }\r\n\r\n  getMutation<T>(options: MutationOptions<T>): Mutation<T> {\r\n    let mutationHash = JSON.stringify(options.mutationKey);\r\n\r\n    if (this.mutations.has(mutationHash)) {\r\n      return this.mutations.get(mutationHash) as Mutation<T>;\r\n    } else {\r\n      let mutation = createMutation(options);\r\n      this.mutations.set(mutationHash, mutation);\r\n\r\n      return mutation;\r\n    }\r\n  }\r\n\r\n  clearMutationsCache() {\r\n    this.mutations.clear();\r\n  }\r\n}\r\n","import { useSyncExternalStore, useRef, useCallback } from \"react\";\nimport { useElhalaClient } from \"./client-provider\";\nimport { createQueryObserver } from \"./queryObserver\";\nimport { QueryObserver, useQueryOptions, SuspenseQueryState } from \"./types\";\n\nexport function useSuspenseQuery<T>(\n  options: useQueryOptions<T>\n): SuspenseQueryState<T> {\n  const client = useElhalaClient();\n  const observer = useRef<QueryObserver<T> | null>(null);\n\n  if (!observer.current) {\n    observer.current = createQueryObserver(client, options);\n  }\n\n  const state = useSyncExternalStore(\n    useCallback(\n      (onStoreChange) => observer.current!.subscribe(onStoreChange),\n      []\n    ),\n    () => observer.current?.getResults(),\n    () => observer.current?.getResults()\n  );\n\n  if (state?.isFetching) {\n    const promise = observer.current.fetchOptimistic();\n    if (promise) throw promise;\n    throw new Promise(() => {});\n  }\n\n  if (state?.status === \"error\") {\n    throw state.error;\n  }\n\n  return state as SuspenseQueryState<T>;\n}\n"],"mappings":"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","names":["useCallback","useCallback","useSyncExternalStore","useRef","useCallback","useRef","useSyncExternalStore","useCallback","useSyncExternalStore","useRef","useCallback","useRef","useSyncExternalStore","useCallback"]}