{"version":3,"file":"useLiveQuery.cjs","sources":["../../src/useLiveQuery.ts"],"sourcesContent":["import { useEffect, useMemo, useState } from \"react\"\nimport { useStore } from \"@tanstack/react-store\"\nimport { compileQuery, queryBuilder } from \"@tanstack/optimistic\"\nimport type {\n  Context,\n  InitialQueryBuilder,\n  QueryBuilder,\n  ResultsFromContext,\n  Schema,\n} from \"@tanstack/optimistic\"\n\nexport interface UseLiveQueryReturn<T extends object> {\n  state: Map<string, T>\n  data: Array<T>\n}\n\nexport function useLiveQuery<\n  TResultContext extends Context<Schema> = Context<Schema>,\n>(\n  queryFn: (\n    q: InitialQueryBuilder<Context<Schema>>\n  ) => QueryBuilder<TResultContext>,\n  deps: Array<unknown> = []\n): UseLiveQueryReturn<ResultsFromContext<TResultContext>> {\n  const [restart, forceRestart] = useState(0)\n\n  const compiledQuery = useMemo(() => {\n    const query = queryFn(queryBuilder())\n    const compiled = compileQuery(query)\n    compiled.start()\n    return compiled\n  }, [...deps, restart])\n\n  const state = useStore(compiledQuery.results.derivedState)\n  let data: Array<ResultsFromContext<TResultContext>> | undefined\n\n  // Clean up on unmount\n  useEffect(() => {\n    if (compiledQuery.state === `stopped`) {\n      forceRestart((count) => {\n        return (count += 1)\n      })\n    }\n\n    return () => {\n      compiledQuery.stop()\n    }\n  }, [compiledQuery])\n\n  return {\n    state,\n    get data() {\n      if (!data) {\n        data = Array.from(state.values())\n      }\n      return data\n    },\n  }\n}\n"],"names":["useState","useMemo","queryBuilder","compileQuery","useStore","useEffect"],"mappings":";;;;;AAgBO,SAAS,aAGd,SAGA,OAAuB,IACiC;AACxD,QAAM,CAAC,SAAS,YAAY,IAAIA,MAAAA,SAAS,CAAC;AAEpC,QAAA,gBAAgBC,MAAAA,QAAQ,MAAM;AAC5B,UAAA,QAAQ,QAAQC,WAAAA,cAAc;AAC9B,UAAA,WAAWC,wBAAa,KAAK;AACnC,aAAS,MAAM;AACR,WAAA;AAAA,EAAA,GACN,CAAC,GAAG,MAAM,OAAO,CAAC;AAErB,QAAM,QAAQC,WAAA,SAAS,cAAc,QAAQ,YAAY;AACrD,MAAA;AAGJC,QAAAA,UAAU,MAAM;AACV,QAAA,cAAc,UAAU,WAAW;AACrC,mBAAa,CAAC,UAAU;AACtB,eAAQ,SAAS;AAAA,MAAA,CAClB;AAAA,IAAA;AAGH,WAAO,MAAM;AACX,oBAAc,KAAK;AAAA,IACrB;AAAA,EAAA,GACC,CAAC,aAAa,CAAC;AAEX,SAAA;AAAA,IACL;AAAA,IACA,IAAI,OAAO;AACT,UAAI,CAAC,MAAM;AACT,eAAO,MAAM,KAAK,MAAM,OAAA,CAAQ;AAAA,MAAA;AAE3B,aAAA;AAAA,IAAA;AAAA,EAEX;AACF;;"}