@pol-studios/db 1.0.55 → 1.0.57

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.
Files changed (55) hide show
  1. package/dist/{DataLayerContext-C7cJtiO8.d.ts → DataLayerContext-BYZtDD0g.d.ts} +1 -1
  2. package/dist/auth/context.js +4 -2
  3. package/dist/auth/hooks.js +5 -3
  4. package/dist/auth/index.js +5 -3
  5. package/dist/{chunk-7YGDT46S.js → chunk-4EO55YV2.js} +10 -7
  6. package/dist/chunk-4EO55YV2.js.map +1 -0
  7. package/dist/{chunk-WILXD5X3.js → chunk-6SDH7M7J.js} +25 -9
  8. package/dist/chunk-6SDH7M7J.js.map +1 -0
  9. package/dist/{chunk-OC6S4XFL.js → chunk-DDL63KLQ.js} +385 -104
  10. package/dist/chunk-DDL63KLQ.js.map +1 -0
  11. package/dist/{chunk-WSKBZIEI.js → chunk-GWYTROSD.js} +95 -1
  12. package/dist/chunk-GWYTROSD.js.map +1 -0
  13. package/dist/{chunk-BRFFTGVJ.js → chunk-MEBT5YHA.js} +2 -2
  14. package/dist/chunk-QYAFI34Q.js +64 -0
  15. package/dist/chunk-QYAFI34Q.js.map +1 -0
  16. package/dist/{chunk-AA3VUWTP.js → chunk-VSJKGPRI.js} +12 -8
  17. package/dist/chunk-VSJKGPRI.js.map +1 -0
  18. package/dist/{chunk-AKCNWHXV.js → chunk-VYFAMTHI.js} +2 -2
  19. package/dist/chunk-W7PERM66.js +215 -0
  20. package/dist/chunk-W7PERM66.js.map +1 -0
  21. package/dist/{chunk-HZIVE5AZ.js → chunk-YRIPM2AN.js} +253 -338
  22. package/dist/chunk-YRIPM2AN.js.map +1 -0
  23. package/dist/core/index.d.ts +24 -1
  24. package/dist/{executor-YJw4m7Q7.d.ts → executor-D15yjeMo.d.ts} +20 -0
  25. package/dist/hooks/index.d.ts +3 -3
  26. package/dist/hooks/index.js +4 -2
  27. package/dist/{index-jVYdTeWx.d.ts → index-CFUuTzXO.d.ts} +1 -1
  28. package/dist/index.d.ts +5 -5
  29. package/dist/index.js +10 -8
  30. package/dist/index.native.d.ts +6 -6
  31. package/dist/index.native.js +10 -8
  32. package/dist/index.web.d.ts +10 -9
  33. package/dist/index.web.js +23 -12
  34. package/dist/index.web.js.map +1 -1
  35. package/dist/powersync-bridge/index.d.ts +1 -1
  36. package/dist/query/index.d.ts +4 -83
  37. package/dist/query/index.js +13 -3
  38. package/dist/realtime/index.d.ts +80 -1
  39. package/dist/realtime/index.js +11 -9
  40. package/dist/realtime/index.js.map +1 -1
  41. package/dist/select-parser-BAV7fOaM.d.ts +144 -0
  42. package/dist/types/index.d.ts +3 -3
  43. package/dist/{useDbCount-DHLJzmkO.d.ts → useDbCount-Ckb-FhZk.d.ts} +1 -1
  44. package/dist/{useResolveFeedback-B0UcYWVI.d.ts → useResolveFeedback-CuUkdHoR.d.ts} +13 -29
  45. package/dist/with-auth/index.js +7 -5
  46. package/dist/with-auth/index.js.map +1 -1
  47. package/package.json +5 -2
  48. package/dist/chunk-7YGDT46S.js.map +0 -1
  49. package/dist/chunk-AA3VUWTP.js.map +0 -1
  50. package/dist/chunk-HZIVE5AZ.js.map +0 -1
  51. package/dist/chunk-OC6S4XFL.js.map +0 -1
  52. package/dist/chunk-WILXD5X3.js.map +0 -1
  53. package/dist/chunk-WSKBZIEI.js.map +0 -1
  54. /package/dist/{chunk-BRFFTGVJ.js.map → chunk-MEBT5YHA.js.map} +0 -0
  55. /package/dist/{chunk-AKCNWHXV.js.map → chunk-VYFAMTHI.js.map} +0 -0
package/dist/index.web.js CHANGED
@@ -56,7 +56,7 @@ import {
56
56
  useUpsertChangelog,
57
57
  useUpsertChangelogEntry,
58
58
  useUpsertChangelogMedia
59
- } from "./chunk-OC6S4XFL.js";
59
+ } from "./chunk-DDL63KLQ.js";
60
60
  import {
61
61
  LiveChangeContext,
62
62
  LiveChangeContextProvider,
@@ -67,7 +67,7 @@ import {
67
67
  useUserMetadataState,
68
68
  useUserMetadataValue,
69
69
  userMetadataContext
70
- } from "./chunk-7YGDT46S.js";
70
+ } from "./chunk-4EO55YV2.js";
71
71
  import {
72
72
  PostgrestFilter,
73
73
  binarySearch,
@@ -104,7 +104,7 @@ import {
104
104
  useDbInsert,
105
105
  useDbUpdate,
106
106
  useDbUpsert
107
- } from "./chunk-AKCNWHXV.js";
107
+ } from "./chunk-VYFAMTHI.js";
108
108
  import {
109
109
  Constants,
110
110
  createCombinedStatus,
@@ -299,20 +299,20 @@ import {
299
299
  UserMetadata
300
300
  } from "./chunk-SM73S2DY.js";
301
301
  import "./chunk-NSIAAYW3.js";
302
- import "./chunk-BRFFTGVJ.js";
302
+ import "./chunk-MEBT5YHA.js";
303
303
  import {
304
304
  DEFAULT_QUERY_TIMEOUT,
305
305
  TIMEOUT_ERROR_MESSAGE,
306
306
  isTimeoutError,
307
307
  useDbQuery as useDbQuery2
308
- } from "./chunk-WILXD5X3.js";
308
+ } from "./chunk-6SDH7M7J.js";
309
309
  import {
310
310
  DataLayerContext,
311
311
  useDataLayer,
312
312
  useDataLayerOptional,
313
313
  useDbQuery,
314
314
  useDbQueryById
315
- } from "./chunk-WSKBZIEI.js";
315
+ } from "./chunk-GWYTROSD.js";
316
316
  import "./chunk-RT4O5H2E.js";
317
317
  import {
318
318
  useAdvancedFilterQuery,
@@ -330,23 +330,30 @@ import {
330
330
  createQueryExecutor,
331
331
  createRelationshipResolver,
332
332
  createResultJoiner,
333
- createSQLBuilder,
333
+ createSQLBuilder
334
+ } from "./chunk-YRIPM2AN.js";
335
+ import {
336
+ getSupabaseUrl,
337
+ setSupabaseUrl
338
+ } from "./chunk-GC3TBUWE.js";
339
+ import {
334
340
  extractColumnNames,
341
+ extractExplicitFkRelations,
342
+ extractExplicitFkTables,
335
343
  extractRelationNames,
336
344
  getRelationSelect,
345
+ hasExplicitFk,
337
346
  hasRelation,
338
347
  parseSelect,
348
+ selectHasExplicitFkSyntax,
339
349
  stringifySelect,
340
350
  tokenizeTopLevel
341
- } from "./chunk-HZIVE5AZ.js";
342
- import {
343
- getSupabaseUrl,
344
- setSupabaseUrl
345
- } from "./chunk-GC3TBUWE.js";
351
+ } from "./chunk-W7PERM66.js";
346
352
  import {
347
353
  useBatchDelete,
348
354
  useBatchUpsert
349
355
  } from "./chunk-WM25QE7E.js";
356
+ import "./chunk-QYAFI34Q.js";
350
357
  import {
351
358
  OPERATOR_MAP,
352
359
  PostgrestParser,
@@ -1320,6 +1327,8 @@ export {
1320
1327
  encodeObject,
1321
1328
  executeAdvanceQuery,
1322
1329
  extractColumnNames,
1330
+ extractExplicitFkRelations,
1331
+ extractExplicitFkTables,
1323
1332
  extractPathsFromFilters,
1324
1333
  extractRelationNames,
1325
1334
  filterFilterDefinitionsByPaths,
@@ -1333,6 +1342,7 @@ export {
1333
1342
  getSupabaseUrl,
1334
1343
  getTable,
1335
1344
  groupPathsRecursive,
1345
+ hasExplicitFk,
1336
1346
  hasRelation,
1337
1347
  ifDateGetTime,
1338
1348
  isAndFilter,
@@ -1358,6 +1368,7 @@ export {
1358
1368
  parseValue,
1359
1369
  removeAliasFromDeclaration,
1360
1370
  removeFirstPathElement,
1371
+ selectHasExplicitFkSyntax,
1361
1372
  setDefaultOptions,
1362
1373
  setFilterValue,
1363
1374
  setSupabaseUrl,
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/useDbInfiniteQuery.ts","../src/useDbInsert.ts","../src/useDbPartialAdvanceQuery.ts","../src/useDbPartialQuery.ts","../src/useDbUpdate.ts","../src/providers/DataLayerProvider.web.tsx"],"sourcesContent":["import { InfiniteData, useInfiniteQuery, UseInfiniteQueryOptions } from \"@tanstack/react-query\";\nimport { isUsable } from \"@pol-studios/utils\";\nimport { useMemo, useRef } from \"react\";\nimport { PostgrestSingleResponse } from \"@supabase/supabase-js\";\nimport { GenericTable, GenericView } from \"./parser/types\";\nimport { encode } from \"@supabase-cache-helpers/postgrest-react-query\";\ntype DataType = Record<string, any>;\nexport function useDbInfiniteQuery<Relation extends GenericTable | GenericView, Result extends DataType, Query extends string = \"*\", RelationName = unknown, Relationships = (Relation extends {\n Relationships: infer R;\n} ? R : unknown), Builder = PromiseLike<PostgrestSingleResponse<Result>>>(query: PromiseLike<PostgrestSingleResponse<Result>>, countPerLoad: number, config?: Omit<UseInfiniteQueryOptions<PostgrestSingleResponse<Result>, Error, InfiniteData<PostgrestSingleResponse<Result>, number>>, \"queryKey\" | \"queryFn\" | \"getNextPageParam\" | \"initialPageParam\"> & {\n crossOrganization?: boolean;\n onQuery?: ({\n pageParam,\n query\n }: {\n pageParam: number;\n query: Builder;\n }) => any;\n enableOnQuery?: boolean;\n}) {\n const initialQueryKey = encode(query, false).join(\"-\");\n const lastKnownQuery = useRef(initialQueryKey);\n const currentPageNumber = useRef(1);\n if (lastKnownQuery.current != initialQueryKey) {\n lastKnownQuery.current = initialQueryKey;\n currentPageNumber.current = 1;\n }\n const isFetching = useRef(false);\n const queryKey = useMemo(() => encode(query, false), [initialQueryKey, config?.crossOrganization]);\n const getQuery = useInfiniteQuery<PostgrestSingleResponse<Result>>({\n ...config,\n queryKey: queryKey,\n queryFn: async ({\n pageParam,\n signal\n }) => {\n let adjustableQuery = query as any;\n const pageNumber = pageParam as number;\n if (config?.onQuery && config?.enableOnQuery) {\n config?.onQuery({\n query: adjustableQuery,\n pageParam: pageNumber\n });\n } else {\n adjustableQuery = adjustableQuery.range((pageNumber - 1) * countPerLoad, pageNumber * countPerLoad - 1);\n }\n adjustableQuery = adjustableQuery.abortSignal(signal);\n updatedCache.current = false;\n const response = (await adjustableQuery) as PostgrestSingleResponse<Result>;\n currentPageNumber.current = pageNumber;\n if (response.error) {\n throw response.error;\n } else {\n return response;\n }\n },\n initialPageParam: 1,\n getNextPageParam: (response_0, allResponses, lastParam) => {\n const pageParam_0 = lastParam as number;\n const resp = response_0 as PostgrestSingleResponse<Result> & {\n count?: number | null;\n };\n if (allResponses.length * countPerLoad >= (resp?.count ?? 0)) {\n return undefined;\n }\n return pageParam_0 + 1;\n }\n });\n const updatedCache = useRef(true);\n return useMemo(() => {\n type PageType = PostgrestSingleResponse<Result> & {\n count?: number | null;\n };\n const pages = getQuery.data?.pages as PageType[] | undefined;\n return {\n ...getQuery,\n count: pages?.[pages.length - 1]?.count,\n data: pages?.flatMap(x => x.data ?? []) as unknown as Result\n };\n }, [getQuery.data, currentPageNumber.current]);\n}","import { c as _c } from \"react/compiler-runtime\";\nimport { useMutation } from \"@tanstack/react-query\";\nimport useSupabase, { Database } from \"./useSupabase\";\nimport { useInsertMutation } from \"@supabase-cache-helpers/postgrest-react-query\";\nimport { PostgrestSingleResponse } from \"@supabase/supabase-js\";\nimport { GetResult } from \"./parser/select-query-parser\";\nimport { GenericSchema } from \"./parser/types\";\nimport { isUsable } from \"@pol-studios/utils\";\nimport { omit } from \"@pol-studios/utils\";\ntype ItemType<T> = T extends Array<infer U> ? U : T;\ntype MutationOption = Parameters<typeof useInsertMutation>[3];\nexport function useDbInsert(relation, t0, query, mutationOption) {\n const $ = _c(11);\n let t1;\n if ($[0] !== t0) {\n t1 = t0 === undefined ? [\"id\"] : t0;\n $[0] = t0;\n $[1] = t1;\n } else {\n t1 = $[1];\n }\n const primaryKeys = t1;\n const supabase = useSupabase();\n const tableName = typeof relation === \"object\" ? relation.table : relation;\n const schemaName = typeof relation === \"object\" ? String(relation.schema) : \"public\";\n let t2;\n if ($[2] !== primaryKeys) {\n t2 = primaryKeys.map(_temp);\n $[2] = primaryKeys;\n $[3] = t2;\n } else {\n t2 = $[3];\n }\n const primaryKeysAsStrings = t2 as string[];\n const t3 = supabase as any;\n let t4;\n if ($[4] !== schemaName || $[5] !== t3 || $[6] !== tableName) {\n t4 = t3.schema(schemaName as \"public\" | \"core\").from(tableName);\n $[4] = schemaName;\n $[5] = t3;\n $[6] = tableName;\n $[7] = t4;\n } else {\n t4 = $[7];\n }\n const mutation = useInsertMutation(t4 as any, primaryKeysAsStrings as any, query, mutationOption);\n let t5;\n if ($[8] !== mutation || $[9] !== primaryKeys) {\n t5 = {\n mutationFn: async item => {\n const primaryKeysNull = primaryKeys.filter(x => x in item === false || isUsable((item as any)[x]) === false).map(_temp2);\n const response = await mutation.mutateAsync([omit(item, primaryKeysNull)]);\n mutation.reset();\n return response?.[0] as RowResult;\n }\n };\n $[8] = mutation;\n $[9] = primaryKeys;\n $[10] = t5;\n } else {\n t5 = $[10];\n }\n const updateMutation = useMutation(t5);\n return updateMutation;\n}\nfunction _temp2(k_0) {\n return String(k_0);\n}\nfunction _temp(k) {\n return String(k);\n}","import { c as _c } from \"react/compiler-runtime\";\nimport { UseQueryOptions, UseQueryResult } from \"@tanstack/react-query\";\nimport { PostgrestSingleResponse } from \"@supabase/supabase-js\";\nimport { encode } from \"@supabase-cache-helpers/postgrest-react-query\";\nimport { useLayoutEffect, useMemo, useState } from \"react\";\nimport { newUuid, omit } from \"@pol-studios/utils\";\nimport { useSessionStorageState } from \"@pol-studios/hooks/storage\";\nimport { QueryState, useDbAdvanceFilterQuery } from \"./useDbAdvanceQuery\";\nexport type UseDbPartialAdvanceQueryResult<T extends Record<string, any>> = ReturnType<typeof useDbPartialAdvanceQuery<T[]>>;\nexport function useDbPartialAdvanceQuery(query, itemCountPerPage, config) {\n const $ = _c(54);\n const initialQuery = encode(query, false);\n const [id, setId] = useState(window.location.pathname);\n const [currentPage, setCurrentPage] = useSessionStorageState(`${id}-currentPage`, 1);\n const page = currentPage ?? 1;\n const t0 = query as any;\n let t1;\n if ($[0] !== itemCountPerPage || $[1] !== page || $[2] !== t0) {\n t1 = t0.range((page - 1) * itemCountPerPage, page * itemCountPerPage - 1);\n $[0] = itemCountPerPage;\n $[1] = page;\n $[2] = t0;\n $[3] = t1;\n } else {\n t1 = $[3];\n }\n const rangedQuery = t1;\n const t2 = config?.filterKey;\n const t3 = currentPage ?? 1;\n let t4;\n if ($[4] !== t3) {\n t4 = t3.toString();\n $[4] = t3;\n $[5] = t4;\n } else {\n t4 = $[5];\n }\n let t5;\n if ($[6] !== config || $[7] !== t2 || $[8] !== t4) {\n t5 = {\n ...config,\n filterKey: t2,\n count: \"exact\",\n key: t4\n };\n $[6] = config;\n $[7] = t2;\n $[8] = t4;\n $[9] = t5;\n } else {\n t5 = $[9];\n }\n const [baseQuery, filter, setFilters] = useDbAdvanceFilterQuery(rangedQuery, t5);\n let t6;\n if ($[10] !== filter) {\n t6 = JSON.stringify(omit(filter, [\"pagination\"]));\n $[10] = filter;\n $[11] = t6;\n } else {\n t6 = $[11];\n }\n const filterKey = t6;\n const select = initialQuery[4].split(\"&\").find(_temp);\n let t7;\n if ($[12] !== filterKey || $[13] !== id || $[14] !== initialQuery[3] || $[15] !== initialQuery[5] || $[16] !== initialQuery[6] || $[17] !== initialQuery[7] || $[18] !== initialQuery[8] || $[19] !== select || $[20] !== setId) {\n t7 = () => {\n const newId = [initialQuery[3], select, initialQuery[5], initialQuery[6], initialQuery[7], initialQuery[8], filterKey].join(\"-\");\n console.log({\n newId,\n id\n });\n setId(newId);\n };\n $[12] = filterKey;\n $[13] = id;\n $[14] = initialQuery[3];\n $[15] = initialQuery[5];\n $[16] = initialQuery[6];\n $[17] = initialQuery[7];\n $[18] = initialQuery[8];\n $[19] = select;\n $[20] = setId;\n $[21] = t7;\n } else {\n t7 = $[21];\n }\n let t8;\n if ($[22] !== filterKey || $[23] !== initialQuery[3] || $[24] !== initialQuery[5] || $[25] !== initialQuery[6] || $[26] !== initialQuery[7] || $[27] !== initialQuery[8] || $[28] !== select) {\n t8 = [initialQuery[3], select, initialQuery[5], initialQuery[6], initialQuery[7], initialQuery[8], filterKey];\n $[22] = filterKey;\n $[23] = initialQuery[3];\n $[24] = initialQuery[5];\n $[25] = initialQuery[6];\n $[26] = initialQuery[7];\n $[27] = initialQuery[8];\n $[28] = select;\n $[29] = t8;\n } else {\n t8 = $[29];\n }\n useLayoutEffect(t7, t8);\n let t9;\n if ($[30] !== setCurrentPage) {\n t9 = () => {\n setCurrentPage(_temp2);\n };\n $[30] = setCurrentPage;\n $[31] = t9;\n } else {\n t9 = $[31];\n }\n const safeFetchNextPage = t9;\n let t10;\n if ($[32] !== setCurrentPage) {\n t10 = () => {\n setCurrentPage(_temp3);\n };\n $[32] = setCurrentPage;\n $[33] = t10;\n } else {\n t10 = $[33];\n }\n const fetchPreviousPage = t10;\n const pageCount = Math.max(Math.ceil((baseQuery.count ?? 0) / itemCountPerPage), 1);\n const t11 = currentPage ?? 1;\n let t12;\n if ($[34] !== baseQuery.count || $[35] !== baseQuery.data || $[36] !== currentPage || $[37] !== itemCountPerPage) {\n t12 = baseQuery.data ? toPagedResponse(baseQuery.data as Result, currentPage ?? 1, baseQuery.count ?? baseQuery.data.length, itemCountPerPage) : null;\n $[34] = baseQuery.count;\n $[35] = baseQuery.data;\n $[36] = currentPage;\n $[37] = itemCountPerPage;\n $[38] = t12;\n } else {\n t12 = $[38];\n }\n const t13 = (currentPage ?? 1) < pageCount;\n const t14 = (currentPage ?? 1) > 1;\n const t15 = baseQuery.count ?? baseQuery.data?.length;\n let t16;\n if ($[39] !== baseQuery || $[40] !== fetchPreviousPage || $[41] !== pageCount || $[42] !== safeFetchNextPage || $[43] !== setCurrentPage || $[44] !== t11 || $[45] !== t12 || $[46] !== t13 || $[47] !== t14 || $[48] !== t15) {\n t16 = {\n ...baseQuery,\n clarification: baseQuery.clarification,\n fetchPreviousPage,\n fetchNextPage: safeFetchNextPage,\n currentPage: t11,\n setCurrentPage,\n data: t12,\n pageCount,\n hasNextPage: t13,\n hasPreviousPage: t14,\n count: t15\n };\n $[39] = baseQuery;\n $[40] = fetchPreviousPage;\n $[41] = pageCount;\n $[42] = safeFetchNextPage;\n $[43] = setCurrentPage;\n $[44] = t11;\n $[45] = t12;\n $[46] = t13;\n $[47] = t14;\n $[48] = t15;\n $[49] = t16;\n } else {\n t16 = $[49];\n }\n const request = t16 as ReturnType<typeof useDbAdvanceFilterQuery<Result>>[0] & {\n currentPage: number;\n setCurrentPage: (value: React.SetStateAction<number>) => void;\n fetchNextPage: () => any;\n fetchPreviousPage: () => any;\n data: {\n Items: Result;\n CurrentPage: number;\n ItemCount: number;\n MaxCountPerPage: number;\n PageCount: number;\n };\n pageCount: number;\n hasNextPage: boolean;\n hasPreviousPage: boolean;\n count: number;\n clarification?: ReturnType<typeof useDbAdvanceFilterQuery<Result>>[0][\"clarification\"];\n };\n let t17;\n if ($[50] !== filter || $[51] !== request || $[52] !== setFilters) {\n t17 = [request, filter, setFilters];\n $[50] = filter;\n $[51] = request;\n $[52] = setFilters;\n $[53] = t17;\n } else {\n t17 = $[53];\n }\n return t17;\n}\nfunction _temp3(currentPage_1) {\n return (currentPage_1 ?? 1) - 1;\n}\nfunction _temp2(currentPage_0) {\n return (currentPage_0 ?? 1) + 1;\n}\nfunction _temp(x) {\n return x.startsWith(\"select=\");\n}\nfunction toPagedResponse<Result extends any[]>(results: Result, currentPage: number, totalCount: number, itemPerPage: number) {\n const newPage = {\n Items: results,\n CurrentPage: currentPage,\n ItemCount: totalCount,\n MaxCountPerPage: itemPerPage,\n PageCount: Math.max(Math.ceil(totalCount / itemPerPage), 1)\n };\n return newPage;\n}\ninterface PagedResponse<T extends any[]> {\n Items: T;\n PageCount: number;\n CurrentPage: number;\n ItemCount: number;\n MaxCountPerPage: number;\n ContinuationToken: string;\n}","import { c as _c } from \"react/compiler-runtime\";\nimport { UseQueryOptions } from \"@tanstack/react-query\";\nimport { PostgrestError, PostgrestSingleResponse } from \"@supabase/supabase-js\";\nimport { encode } from \"@supabase-cache-helpers/postgrest-react-query\";\nimport { useDbQuery } from \"./useDbQuery\";\nimport { useId, useMemo } from \"react\";\nimport { newUuid } from \"@pol-studios/utils\";\nimport { useSessionStorageState } from \"@pol-studios/hooks/storage\";\nexport type UseDbPartialQueryResult<T extends Record<string, any>> = ReturnType<typeof useDbPartialQuery<T[]>>;\ntype ItemType<T> = T extends Array<infer U> ? U : T;\nexport function useDbPartialQuery(query, itemCountPerPage, config) {\n const $ = _c(28);\n let t0;\n if ($[0] !== query) {\n t0 = encode(query, false);\n $[0] = query;\n $[1] = t0;\n } else {\n t0 = $[1];\n }\n const initialQuery = t0;\n let t1;\n if ($[2] !== initialQuery[7] || $[3] !== initialQuery[8]) {\n t1 = [initialQuery[7], initialQuery[8]];\n $[2] = initialQuery[7];\n $[3] = initialQuery[8];\n $[4] = t1;\n } else {\n t1 = $[4];\n }\n const id = t1.join(\"-\");\n const [currentPage, setCurrentPage] = useSessionStorageState(id, 1);\n const page = currentPage ?? 1;\n const t2 = query as any;\n let t3;\n if ($[5] !== itemCountPerPage || $[6] !== page || $[7] !== t2) {\n t3 = t2.range((page - 1) * itemCountPerPage, page * itemCountPerPage - 1);\n $[5] = itemCountPerPage;\n $[6] = page;\n $[7] = t2;\n $[8] = t3;\n } else {\n t3 = $[8];\n }\n const rangedQuery = t3;\n const baseQuery = useDbQuery(rangedQuery, config);\n let t4;\n if ($[9] !== setCurrentPage) {\n t4 = () => {\n setCurrentPage(_temp);\n };\n $[9] = setCurrentPage;\n $[10] = t4;\n } else {\n t4 = $[10];\n }\n const safeFetchNextPage = t4;\n let t5;\n if ($[11] !== setCurrentPage) {\n t5 = () => {\n setCurrentPage(_temp2);\n };\n $[11] = setCurrentPage;\n $[12] = t5;\n } else {\n t5 = $[12];\n }\n const fetchPreviousPage = t5;\n const pageCount = Math.max(Math.ceil((baseQuery.count ?? 0) / itemCountPerPage), 1);\n const t6 = currentPage ?? 1;\n let t7;\n if ($[13] !== baseQuery.count || $[14] !== baseQuery.data || $[15] !== currentPage || $[16] !== itemCountPerPage) {\n t7 = baseQuery.data ? toPagedResponse(baseQuery.data as Result, currentPage ?? 1, baseQuery.count ?? baseQuery.data.length, itemCountPerPage) : null;\n $[13] = baseQuery.count;\n $[14] = baseQuery.data;\n $[15] = currentPage;\n $[16] = itemCountPerPage;\n $[17] = t7;\n } else {\n t7 = $[17];\n }\n const t8 = (currentPage ?? 1) < pageCount;\n const t9 = (currentPage ?? 1) > 1;\n let t10;\n if ($[18] !== baseQuery || $[19] !== fetchPreviousPage || $[20] !== pageCount || $[21] !== safeFetchNextPage || $[22] !== setCurrentPage || $[23] !== t6 || $[24] !== t7 || $[25] !== t8 || $[26] !== t9) {\n t10 = {\n ...baseQuery,\n fetchPreviousPage,\n fetchNextPage: safeFetchNextPage,\n currentPage: t6,\n setCurrentPage,\n data: t7,\n pageCount,\n hasNextPage: t8,\n hasPreviousPage: t9\n };\n $[18] = baseQuery;\n $[19] = fetchPreviousPage;\n $[20] = pageCount;\n $[21] = safeFetchNextPage;\n $[22] = setCurrentPage;\n $[23] = t6;\n $[24] = t7;\n $[25] = t8;\n $[26] = t9;\n $[27] = t10;\n } else {\n t10 = $[27];\n }\n return t10;\n}\nfunction _temp2(currentPage_1) {\n return currentPage_1 - 1;\n}\nfunction _temp(currentPage_0) {\n return currentPage_0 + 1;\n}\nfunction toPagedResponse<Result extends any[]>(results: Result, currentPage: number, totalCount: number, itemPerPage: number) {\n const newPage = {\n Items: results,\n CurrentPage: currentPage,\n ItemCount: totalCount,\n MaxCountPerPage: itemPerPage,\n PageCount: Math.max(Math.ceil(totalCount / itemPerPage), 1)\n };\n return newPage;\n}\ninterface PagedResponse<T extends any[]> {\n Items: T;\n PageCount: number;\n CurrentPage: number;\n ItemCount: number;\n MaxCountPerPage: number;\n ContinuationToken: string;\n}","import { c as _c } from \"react/compiler-runtime\";\nimport { useMutation } from \"@tanstack/react-query\";\nimport useSupabase, { Database } from \"./useSupabase\";\nimport { useUpdateMutation, useUpsertItem } from \"@supabase-cache-helpers/postgrest-react-query\";\nimport { GetResult } from \"./parser/select-query-parser\";\nimport { GenericSchema } from \"./parser/types\";\nimport { isUsable, omit } from \"@pol-studios/utils\";\ntype ItemType<T> = T extends Array<infer U> ? U : T;\ntype MutationOption = Parameters<typeof useUpdateMutation>[3];\nexport function useDbUpdate(relation, t0, query, mutationOption) {\n const $ = _c(14);\n let t1;\n if ($[0] !== t0) {\n t1 = t0 === undefined ? [\"id\"] : t0;\n $[0] = t0;\n $[1] = t1;\n } else {\n t1 = $[1];\n }\n const primaryKeys = t1;\n const supabase = useSupabase();\n const tableName = typeof relation === \"object\" ? relation.table : relation;\n const schemaName = typeof relation === \"object\" ? String(relation.schema) : \"public\";\n let t2;\n if ($[2] !== primaryKeys) {\n t2 = primaryKeys.map(_temp);\n $[2] = primaryKeys;\n $[3] = t2;\n } else {\n t2 = $[3];\n }\n const primaryKeysAsStrings = t2 as string[];\n const t3 = primaryKeysAsStrings as any;\n const t4 = relation as any;\n let t5;\n if ($[4] !== t3 || $[5] !== t4) {\n t5 = {\n primaryKeys: t3,\n table: t4,\n schema: \"public\"\n };\n $[4] = t3;\n $[5] = t4;\n $[6] = t5;\n } else {\n t5 = $[6];\n }\n const upsertItem = useUpsertItem(t5);\n let t6;\n if ($[7] !== primaryKeys || $[8] !== primaryKeysAsStrings || $[9] !== schemaName || $[10] !== supabase || $[11] !== tableName || $[12] !== upsertItem) {\n t6 = {\n mutationFn: async item => {\n let response = null;\n if (primaryKeys.every(x_0 => x_0 in item && isUsable((item as any)[x_0]))) {\n const query_0 = (supabase as any).schema(schemaName as \"public\" | \"core\").from(tableName).update(omit(item as any, primaryKeysAsStrings as any) as any);\n primaryKeys.forEach(x => {\n query_0.eq(String(x), (item as any)[x]);\n });\n const queryResponse = await query_0.select().single().throwOnError();\n if (queryResponse.data) {\n response = queryResponse.data as any;\n upsertItem(response as any);\n }\n }\n return response as any;\n }\n };\n $[7] = primaryKeys;\n $[8] = primaryKeysAsStrings;\n $[9] = schemaName;\n $[10] = supabase;\n $[11] = tableName;\n $[12] = upsertItem;\n $[13] = t6;\n } else {\n t6 = $[13];\n }\n const updateMutation = useMutation(t6);\n return updateMutation;\n}\nfunction _temp(k) {\n return String(k);\n}","/**\n * V3 Data Layer Provider - Web/Browser Version\n *\n * React context provider that initializes adapters and provides context for all V3 hooks.\n * This is a browser-safe version that excludes PowerSync dependencies.\n *\n * For React Native apps that need PowerSync, use the default DataLayerProvider instead.\n */\n\nimport React, { useState, useEffect, useMemo, useCallback, ReactNode, JSX } from \"react\";\nimport type { SupabaseClient } from \"@supabase/supabase-js\";\nimport type { QueryClient } from \"@tanstack/react-query\";\nimport { DataLayerContext, DataLayerContextValue, DataLayerStatus } from \"./DataLayerContext\";\nimport { AdapterRegistry, createAdapterRegistry } from \"../adapters/registry\";\nimport { AdapterAutoDetector, BackendStatus, createAdapterAutoDetector } from \"../adapters/auto-detector\";\nimport { createSupabaseAdapter } from \"../adapters/supabase-adapter\";\nimport type { DataLayerConfig, SyncStatus, SyncControl } from \"../core/types\";\n\n// =============================================================================\n// Props Type\n// =============================================================================\n\n/**\n * Props for DataLayerProvider (Web version)\n */\nexport interface DataLayerProviderProps {\n /** Data layer configuration */\n config: DataLayerConfig;\n\n /** Children to render */\n children: ReactNode;\n\n /** Supabase client (required) */\n supabaseClient: SupabaseClient;\n\n /** React Query client (required) */\n queryClient: QueryClient;\n\n /** Callback when initialization completes */\n onInitialized?: (context: DataLayerContextValue) => void;\n\n /** Callback when error occurs */\n onError?: (error: Error) => void;\n}\n\n// =============================================================================\n// Default Values\n// =============================================================================\n\n/**\n * Default sync status for when PowerSync is not available\n */\nconst defaultSyncStatus: SyncStatus = {\n isConnected: false,\n isSyncing: false,\n lastSyncedAt: null,\n pendingUploads: 0,\n error: null\n};\n\n/**\n * Default sync control for when PowerSync is not available\n */\nconst defaultSyncControl: SyncControl = {\n triggerSync: async () => {\n console.warn(\"Sync not available: PowerSync not initialized\");\n },\n startLiveSync: async () => {\n console.warn(\"Live sync not available: PowerSync not initialized\");\n },\n stopLiveSync: () => {\n console.warn(\"Live sync not available: PowerSync not initialized\");\n },\n setScope: async () => {\n console.warn(\"Scope control not available: PowerSync not initialized\");\n },\n // Auto-retry controls\n pauseAutoRetry: () => {\n console.warn(\"Pause auto-retry not available: PowerSync not initialized\");\n },\n resumeAutoRetry: () => {\n console.warn(\"Resume auto-retry not available: PowerSync not initialized\");\n },\n isAutoRetryPaused: false,\n // Pending mutations\n addPendingMutation: () => {\n // No-op when PowerSync not available\n },\n removePendingMutation: () => {\n // No-op when PowerSync not available\n }\n};\n\n// =============================================================================\n// Provider Component\n// =============================================================================\n\n/**\n * Provider component for the V3 data layer (Web/Browser version).\n *\n * This provider:\n * - Creates and manages the AdapterRegistry\n * - Initializes the AdapterAutoDetector for backend selection\n * - Sets up Supabase adapter (PowerSync not supported in web builds)\n * - Tracks online/offline status\n * - Provides context for all V3 hooks\n *\n * Note: This is the browser-safe version that does NOT support PowerSync.\n * For React Native apps that need PowerSync, use the default DataLayerProvider.\n *\n * @example\n * ```tsx\n * import { DataLayerProvider } from \"@pol-studios/db/web\";\n *\n * function App() {\n * return (\n * <DataLayerProvider\n * config={dataLayerConfig}\n * supabaseClient={supabase}\n * queryClient={queryClient}\n * >\n * <YourApp />\n * </DataLayerProvider>\n * );\n * }\n * ```\n */\nexport function DataLayerProvider({\n config,\n children,\n supabaseClient,\n queryClient,\n onInitialized,\n onError\n}: DataLayerProviderProps): JSX.Element {\n // Create registry (stable across renders)\n const [registry] = useState<AdapterRegistry>(() => createAdapterRegistry(config));\n\n // Track auto-detector instance\n const [autoDetector, setAutoDetector] = useState<AdapterAutoDetector | null>(null);\n\n // Track status\n const [status, setStatus] = useState<DataLayerStatus>({\n isInitialized: false,\n currentBackend: null,\n powerSyncStatus: BackendStatus.UNAVAILABLE,\n isOnline: typeof navigator !== \"undefined\" ? navigator.onLine : true,\n lastDetection: null,\n error: null,\n hasSynced: false // Web builds don't use PowerSync, so never synced\n });\n\n // ===========================================================================\n // Initialization Effect\n // ===========================================================================\n\n useEffect(() => {\n try {\n // Create auto-detector (no PowerSync instance for web builds)\n const detector = createAdapterAutoDetector(null,\n // No PowerSync in web builds\n supabaseClient, {\n preferPowerSync: false\n });\n setAutoDetector(detector);\n\n // Create and set Supabase adapter (always available)\n const supabaseAdapter = createSupabaseAdapter(supabaseClient, config.schema);\n registry.setSupabaseAdapter(supabaseAdapter);\n\n // Initialize registry with dependencies (no PowerSync)\n registry.initialize({\n powerSync: null,\n supabase: supabaseClient,\n queryClient,\n schema: config.schema\n });\n\n // Perform initial detection\n const detection = detector.detect();\n\n // Update status\n setStatus({\n isInitialized: true,\n currentBackend: detection.recommendedBackend,\n powerSyncStatus: detection.powerSyncStatus,\n isOnline: detection.isOnline,\n lastDetection: detection,\n error: null,\n hasSynced: false // Web builds don't use PowerSync, so never synced\n });\n } catch (error) {\n const err = error instanceof Error ? error : new Error(String(error));\n setStatus(prev => ({\n ...prev,\n error: err\n }));\n onError?.(err);\n }\n }, [supabaseClient, queryClient, config.schema, registry, onError]);\n\n // ===========================================================================\n // Online/Offline Status Effect\n // ===========================================================================\n\n useEffect(() => {\n const handleOnline = () => {\n setStatus(prev => ({\n ...prev,\n isOnline: true\n }));\n // Re-run detection when coming online\n if (autoDetector) {\n const detection = autoDetector.detect();\n setStatus(prev => ({\n ...prev,\n currentBackend: detection.recommendedBackend,\n powerSyncStatus: detection.powerSyncStatus,\n lastDetection: detection\n }));\n }\n };\n const handleOffline = () => {\n setStatus(prev => ({\n ...prev,\n isOnline: false\n }));\n // Re-run detection when going offline\n if (autoDetector) {\n const detection = autoDetector.detect();\n setStatus(prev => ({\n ...prev,\n currentBackend: detection.recommendedBackend,\n powerSyncStatus: detection.powerSyncStatus,\n lastDetection: detection\n }));\n }\n };\n\n // Only add window event listeners in browser environment\n const isBrowser = typeof window !== \"undefined\" && typeof window.addEventListener === \"function\";\n if (isBrowser) {\n window.addEventListener(\"online\", handleOnline);\n window.addEventListener(\"offline\", handleOffline);\n return () => {\n window.removeEventListener(\"online\", handleOnline);\n window.removeEventListener(\"offline\", handleOffline);\n };\n }\n }, [autoDetector]);\n\n // ===========================================================================\n // Backend Change Listener Effect\n // ===========================================================================\n\n useEffect(() => {\n if (!autoDetector) return;\n const unsubscribe = autoDetector.addListener(detection => {\n setStatus(prev => ({\n ...prev,\n currentBackend: detection.recommendedBackend,\n powerSyncStatus: detection.powerSyncStatus,\n isOnline: detection.isOnline,\n lastDetection: detection\n }));\n });\n return unsubscribe;\n }, [autoDetector]);\n\n // ===========================================================================\n // Initialization Callback Effect\n // ===========================================================================\n\n useEffect(() => {\n if (status.isInitialized && !status.error && onInitialized) {\n const contextValue = buildContextValue();\n if (contextValue) {\n onInitialized(contextValue);\n }\n }\n // Only run when initialization state changes\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [status.isInitialized, status.error]);\n\n // ===========================================================================\n // Helper Functions\n // ===========================================================================\n\n /**\n * Get adapter for a specific table\n */\n const getAdapter = useCallback((table: string, operation: 'read' | 'write' = 'read') => {\n return registry.getAdapter(table, operation);\n }, [registry]);\n\n /**\n * Build the context value object\n */\n const buildContextValue = useCallback((): DataLayerContextValue | null => {\n if (!status.isInitialized) return null;\n return {\n registry,\n getAdapter,\n powerSync: null,\n // No PowerSync in web builds\n supabase: supabaseClient,\n queryClient,\n schema: config.schema,\n status,\n syncStatus: defaultSyncStatus,\n syncControl: defaultSyncControl\n };\n }, [registry, getAdapter, supabaseClient, queryClient, config.schema, status]);\n\n // ===========================================================================\n // Context Value Memoization\n // ===========================================================================\n\n const contextValue = useMemo(() => buildContextValue(), [buildContextValue]);\n\n // ===========================================================================\n // Cleanup Effect\n // ===========================================================================\n\n useEffect(() => {\n return () => {\n // Dispose registry on unmount\n registry.dispose();\n };\n }, [registry]);\n\n // ===========================================================================\n // Render\n // ===========================================================================\n\n // Don't render children until the data layer is initialized.\n // This prevents hooks from being called before the context is ready.\n // The provider will render children once initialization completes.\n if (!contextValue) {\n return null;\n }\n return <DataLayerContext.Provider value={contextValue}>\n {children}\n </DataLayerContext.Provider>;\n}\nexport default DataLayerProvider;"],"mappings":"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","names":["useInfiniteQuery","useDbInfiniteQuery","useInfiniteQuery","useDbInsert","_c","omit","_c","omit","_temp","_temp2","_c","useSessionStorageState","_c","useDbQuery","_temp","_temp2","toPagedResponse","_c","useMutation","isUsable","omit","useDbUpdate","_c","_temp","useMutation","useState","useMemo","useState","contextValue","useMemo"]}
1
+ {"version":3,"sources":["../src/useDbInfiniteQuery.ts","../src/useDbInsert.ts","../src/useDbPartialAdvanceQuery.ts","../src/useDbPartialQuery.ts","../src/useDbUpdate.ts","../src/providers/DataLayerProvider.web.tsx"],"sourcesContent":["import { InfiniteData, useInfiniteQuery, UseInfiniteQueryOptions } from \"@tanstack/react-query\";\nimport { isUsable } from \"@pol-studios/utils\";\nimport { useMemo, useRef } from \"react\";\nimport { PostgrestSingleResponse } from \"@supabase/supabase-js\";\nimport { GenericTable, GenericView } from \"./parser/types\";\nimport { encode } from \"@supabase-cache-helpers/postgrest-react-query\";\ntype DataType = Record<string, any>;\nexport function useDbInfiniteQuery<Relation extends GenericTable | GenericView, Result extends DataType, Query extends string = \"*\", RelationName = unknown, Relationships = (Relation extends {\n Relationships: infer R;\n} ? R : unknown), Builder = PromiseLike<PostgrestSingleResponse<Result>>>(query: PromiseLike<PostgrestSingleResponse<Result>>, countPerLoad: number, config?: Omit<UseInfiniteQueryOptions<PostgrestSingleResponse<Result>, Error, InfiniteData<PostgrestSingleResponse<Result>, number>>, \"queryKey\" | \"queryFn\" | \"getNextPageParam\" | \"initialPageParam\"> & {\n crossOrganization?: boolean;\n onQuery?: ({\n pageParam,\n query\n }: {\n pageParam: number;\n query: Builder;\n }) => any;\n enableOnQuery?: boolean;\n}) {\n const initialQueryKey = encode(query, false).join(\"-\");\n const lastKnownQuery = useRef(initialQueryKey);\n const currentPageNumber = useRef(1);\n if (lastKnownQuery.current != initialQueryKey) {\n lastKnownQuery.current = initialQueryKey;\n currentPageNumber.current = 1;\n }\n const isFetching = useRef(false);\n const queryKey = useMemo(() => encode(query, false), [initialQueryKey, config?.crossOrganization]);\n const getQuery = useInfiniteQuery<PostgrestSingleResponse<Result>>({\n ...config,\n queryKey: queryKey,\n queryFn: async ({\n pageParam,\n signal\n }) => {\n let adjustableQuery = query as any;\n const pageNumber = pageParam as number;\n if (config?.onQuery && config?.enableOnQuery) {\n config?.onQuery({\n query: adjustableQuery,\n pageParam: pageNumber\n });\n } else {\n adjustableQuery = adjustableQuery.range((pageNumber - 1) * countPerLoad, pageNumber * countPerLoad - 1);\n }\n adjustableQuery = adjustableQuery.abortSignal(signal);\n updatedCache.current = false;\n const response = (await adjustableQuery) as PostgrestSingleResponse<Result>;\n currentPageNumber.current = pageNumber;\n if (response.error) {\n throw response.error;\n } else {\n return response;\n }\n },\n initialPageParam: 1,\n getNextPageParam: (response_0, allResponses, lastParam) => {\n const pageParam_0 = lastParam as number;\n const resp = response_0 as PostgrestSingleResponse<Result> & {\n count?: number | null;\n };\n if (allResponses.length * countPerLoad >= (resp?.count ?? 0)) {\n return undefined;\n }\n return pageParam_0 + 1;\n }\n });\n const updatedCache = useRef(true);\n return useMemo(() => {\n type PageType = PostgrestSingleResponse<Result> & {\n count?: number | null;\n };\n const pages = getQuery.data?.pages as PageType[] | undefined;\n return {\n ...getQuery,\n count: pages?.[pages.length - 1]?.count,\n data: pages?.flatMap(x => x.data ?? []) as unknown as Result\n };\n }, [getQuery.data, currentPageNumber.current]);\n}","import { c as _c } from \"react/compiler-runtime\";\nimport { useMutation } from \"@tanstack/react-query\";\nimport useSupabase, { Database } from \"./useSupabase\";\nimport { useInsertMutation } from \"@supabase-cache-helpers/postgrest-react-query\";\nimport { PostgrestSingleResponse } from \"@supabase/supabase-js\";\nimport { GetResult } from \"./parser/select-query-parser\";\nimport { GenericSchema } from \"./parser/types\";\nimport { isUsable } from \"@pol-studios/utils\";\nimport { omit } from \"@pol-studios/utils\";\ntype ItemType<T> = T extends Array<infer U> ? U : T;\ntype MutationOption = Parameters<typeof useInsertMutation>[3];\nexport function useDbInsert(relation, t0, query, mutationOption) {\n const $ = _c(11);\n let t1;\n if ($[0] !== t0) {\n t1 = t0 === undefined ? [\"id\"] : t0;\n $[0] = t0;\n $[1] = t1;\n } else {\n t1 = $[1];\n }\n const primaryKeys = t1;\n const supabase = useSupabase();\n const tableName = typeof relation === \"object\" ? relation.table : relation;\n const schemaName = typeof relation === \"object\" ? String(relation.schema) : \"public\";\n let t2;\n if ($[2] !== primaryKeys) {\n t2 = primaryKeys.map(_temp);\n $[2] = primaryKeys;\n $[3] = t2;\n } else {\n t2 = $[3];\n }\n const primaryKeysAsStrings = t2 as string[];\n const t3 = supabase as any;\n let t4;\n if ($[4] !== schemaName || $[5] !== t3 || $[6] !== tableName) {\n t4 = t3.schema(schemaName as \"public\" | \"core\").from(tableName);\n $[4] = schemaName;\n $[5] = t3;\n $[6] = tableName;\n $[7] = t4;\n } else {\n t4 = $[7];\n }\n const mutation = useInsertMutation(t4 as any, primaryKeysAsStrings as any, query, mutationOption);\n let t5;\n if ($[8] !== mutation || $[9] !== primaryKeys) {\n t5 = {\n mutationFn: async item => {\n const primaryKeysNull = primaryKeys.filter(x => x in item === false || isUsable((item as any)[x]) === false).map(_temp2);\n const response = await mutation.mutateAsync([omit(item, primaryKeysNull)]);\n mutation.reset();\n return response?.[0] as RowResult;\n }\n };\n $[8] = mutation;\n $[9] = primaryKeys;\n $[10] = t5;\n } else {\n t5 = $[10];\n }\n const updateMutation = useMutation(t5);\n return updateMutation;\n}\nfunction _temp2(k_0) {\n return String(k_0);\n}\nfunction _temp(k) {\n return String(k);\n}","import { c as _c } from \"react/compiler-runtime\";\nimport { UseQueryOptions, UseQueryResult } from \"@tanstack/react-query\";\nimport { PostgrestSingleResponse } from \"@supabase/supabase-js\";\nimport { encode } from \"@supabase-cache-helpers/postgrest-react-query\";\nimport { useLayoutEffect, useMemo, useState } from \"react\";\nimport { newUuid, omit } from \"@pol-studios/utils\";\nimport { useSessionStorageState } from \"@pol-studios/hooks/storage\";\nimport { QueryState, useDbAdvanceFilterQuery } from \"./useDbAdvanceQuery\";\nexport type UseDbPartialAdvanceQueryResult<T extends Record<string, any>> = ReturnType<typeof useDbPartialAdvanceQuery<T[]>>;\nexport function useDbPartialAdvanceQuery(query, itemCountPerPage, config) {\n const $ = _c(54);\n const initialQuery = encode(query, false);\n const [id, setId] = useState(window.location.pathname);\n const [currentPage, setCurrentPage] = useSessionStorageState(`${id}-currentPage`, 1);\n const page = currentPage ?? 1;\n const t0 = query as any;\n let t1;\n if ($[0] !== itemCountPerPage || $[1] !== page || $[2] !== t0) {\n t1 = t0.range((page - 1) * itemCountPerPage, page * itemCountPerPage - 1);\n $[0] = itemCountPerPage;\n $[1] = page;\n $[2] = t0;\n $[3] = t1;\n } else {\n t1 = $[3];\n }\n const rangedQuery = t1;\n const t2 = config?.filterKey;\n const t3 = currentPage ?? 1;\n let t4;\n if ($[4] !== t3) {\n t4 = t3.toString();\n $[4] = t3;\n $[5] = t4;\n } else {\n t4 = $[5];\n }\n let t5;\n if ($[6] !== config || $[7] !== t2 || $[8] !== t4) {\n t5 = {\n ...config,\n filterKey: t2,\n count: \"exact\",\n key: t4\n };\n $[6] = config;\n $[7] = t2;\n $[8] = t4;\n $[9] = t5;\n } else {\n t5 = $[9];\n }\n const [baseQuery, filter, setFilters] = useDbAdvanceFilterQuery(rangedQuery, t5);\n let t6;\n if ($[10] !== filter) {\n t6 = JSON.stringify(omit(filter, [\"pagination\"]));\n $[10] = filter;\n $[11] = t6;\n } else {\n t6 = $[11];\n }\n const filterKey = t6;\n const select = initialQuery[4].split(\"&\").find(_temp);\n let t7;\n if ($[12] !== filterKey || $[13] !== id || $[14] !== initialQuery[3] || $[15] !== initialQuery[5] || $[16] !== initialQuery[6] || $[17] !== initialQuery[7] || $[18] !== initialQuery[8] || $[19] !== select || $[20] !== setId) {\n t7 = () => {\n const newId = [initialQuery[3], select, initialQuery[5], initialQuery[6], initialQuery[7], initialQuery[8], filterKey].join(\"-\");\n console.log({\n newId,\n id\n });\n setId(newId);\n };\n $[12] = filterKey;\n $[13] = id;\n $[14] = initialQuery[3];\n $[15] = initialQuery[5];\n $[16] = initialQuery[6];\n $[17] = initialQuery[7];\n $[18] = initialQuery[8];\n $[19] = select;\n $[20] = setId;\n $[21] = t7;\n } else {\n t7 = $[21];\n }\n let t8;\n if ($[22] !== filterKey || $[23] !== initialQuery[3] || $[24] !== initialQuery[5] || $[25] !== initialQuery[6] || $[26] !== initialQuery[7] || $[27] !== initialQuery[8] || $[28] !== select) {\n t8 = [initialQuery[3], select, initialQuery[5], initialQuery[6], initialQuery[7], initialQuery[8], filterKey];\n $[22] = filterKey;\n $[23] = initialQuery[3];\n $[24] = initialQuery[5];\n $[25] = initialQuery[6];\n $[26] = initialQuery[7];\n $[27] = initialQuery[8];\n $[28] = select;\n $[29] = t8;\n } else {\n t8 = $[29];\n }\n useLayoutEffect(t7, t8);\n let t9;\n if ($[30] !== setCurrentPage) {\n t9 = () => {\n setCurrentPage(_temp2);\n };\n $[30] = setCurrentPage;\n $[31] = t9;\n } else {\n t9 = $[31];\n }\n const safeFetchNextPage = t9;\n let t10;\n if ($[32] !== setCurrentPage) {\n t10 = () => {\n setCurrentPage(_temp3);\n };\n $[32] = setCurrentPage;\n $[33] = t10;\n } else {\n t10 = $[33];\n }\n const fetchPreviousPage = t10;\n const pageCount = Math.max(Math.ceil((baseQuery.count ?? 0) / itemCountPerPage), 1);\n const t11 = currentPage ?? 1;\n let t12;\n if ($[34] !== baseQuery.count || $[35] !== baseQuery.data || $[36] !== currentPage || $[37] !== itemCountPerPage) {\n t12 = baseQuery.data ? toPagedResponse(baseQuery.data as Result, currentPage ?? 1, baseQuery.count ?? baseQuery.data.length, itemCountPerPage) : null;\n $[34] = baseQuery.count;\n $[35] = baseQuery.data;\n $[36] = currentPage;\n $[37] = itemCountPerPage;\n $[38] = t12;\n } else {\n t12 = $[38];\n }\n const t13 = (currentPage ?? 1) < pageCount;\n const t14 = (currentPage ?? 1) > 1;\n const t15 = baseQuery.count ?? baseQuery.data?.length;\n let t16;\n if ($[39] !== baseQuery || $[40] !== fetchPreviousPage || $[41] !== pageCount || $[42] !== safeFetchNextPage || $[43] !== setCurrentPage || $[44] !== t11 || $[45] !== t12 || $[46] !== t13 || $[47] !== t14 || $[48] !== t15) {\n t16 = {\n ...baseQuery,\n clarification: baseQuery.clarification,\n fetchPreviousPage,\n fetchNextPage: safeFetchNextPage,\n currentPage: t11,\n setCurrentPage,\n data: t12,\n pageCount,\n hasNextPage: t13,\n hasPreviousPage: t14,\n count: t15\n };\n $[39] = baseQuery;\n $[40] = fetchPreviousPage;\n $[41] = pageCount;\n $[42] = safeFetchNextPage;\n $[43] = setCurrentPage;\n $[44] = t11;\n $[45] = t12;\n $[46] = t13;\n $[47] = t14;\n $[48] = t15;\n $[49] = t16;\n } else {\n t16 = $[49];\n }\n const request = t16 as ReturnType<typeof useDbAdvanceFilterQuery<Result>>[0] & {\n currentPage: number;\n setCurrentPage: (value: React.SetStateAction<number>) => void;\n fetchNextPage: () => any;\n fetchPreviousPage: () => any;\n data: {\n Items: Result;\n CurrentPage: number;\n ItemCount: number;\n MaxCountPerPage: number;\n PageCount: number;\n };\n pageCount: number;\n hasNextPage: boolean;\n hasPreviousPage: boolean;\n count: number;\n clarification?: ReturnType<typeof useDbAdvanceFilterQuery<Result>>[0][\"clarification\"];\n };\n let t17;\n if ($[50] !== filter || $[51] !== request || $[52] !== setFilters) {\n t17 = [request, filter, setFilters];\n $[50] = filter;\n $[51] = request;\n $[52] = setFilters;\n $[53] = t17;\n } else {\n t17 = $[53];\n }\n return t17;\n}\nfunction _temp3(currentPage_1) {\n return (currentPage_1 ?? 1) - 1;\n}\nfunction _temp2(currentPage_0) {\n return (currentPage_0 ?? 1) + 1;\n}\nfunction _temp(x) {\n return x.startsWith(\"select=\");\n}\nfunction toPagedResponse<Result extends any[]>(results: Result, currentPage: number, totalCount: number, itemPerPage: number) {\n const newPage = {\n Items: results,\n CurrentPage: currentPage,\n ItemCount: totalCount,\n MaxCountPerPage: itemPerPage,\n PageCount: Math.max(Math.ceil(totalCount / itemPerPage), 1)\n };\n return newPage;\n}\ninterface PagedResponse<T extends any[]> {\n Items: T;\n PageCount: number;\n CurrentPage: number;\n ItemCount: number;\n MaxCountPerPage: number;\n ContinuationToken: string;\n}","import { c as _c } from \"react/compiler-runtime\";\nimport { UseQueryOptions } from \"@tanstack/react-query\";\nimport { PostgrestError, PostgrestSingleResponse } from \"@supabase/supabase-js\";\nimport { encode } from \"@supabase-cache-helpers/postgrest-react-query\";\nimport { useDbQuery } from \"./useDbQuery\";\nimport { useId, useMemo } from \"react\";\nimport { newUuid } from \"@pol-studios/utils\";\nimport { useSessionStorageState } from \"@pol-studios/hooks/storage\";\nexport type UseDbPartialQueryResult<T extends Record<string, any>> = ReturnType<typeof useDbPartialQuery<T[]>>;\ntype ItemType<T> = T extends Array<infer U> ? U : T;\nexport function useDbPartialQuery(query, itemCountPerPage, config) {\n const $ = _c(28);\n let t0;\n if ($[0] !== query) {\n t0 = encode(query, false);\n $[0] = query;\n $[1] = t0;\n } else {\n t0 = $[1];\n }\n const initialQuery = t0;\n let t1;\n if ($[2] !== initialQuery[7] || $[3] !== initialQuery[8]) {\n t1 = [initialQuery[7], initialQuery[8]];\n $[2] = initialQuery[7];\n $[3] = initialQuery[8];\n $[4] = t1;\n } else {\n t1 = $[4];\n }\n const id = t1.join(\"-\");\n const [currentPage, setCurrentPage] = useSessionStorageState(id, 1);\n const page = currentPage ?? 1;\n const t2 = query as any;\n let t3;\n if ($[5] !== itemCountPerPage || $[6] !== page || $[7] !== t2) {\n t3 = t2.range((page - 1) * itemCountPerPage, page * itemCountPerPage - 1);\n $[5] = itemCountPerPage;\n $[6] = page;\n $[7] = t2;\n $[8] = t3;\n } else {\n t3 = $[8];\n }\n const rangedQuery = t3;\n const baseQuery = useDbQuery(rangedQuery, config);\n let t4;\n if ($[9] !== setCurrentPage) {\n t4 = () => {\n setCurrentPage(_temp);\n };\n $[9] = setCurrentPage;\n $[10] = t4;\n } else {\n t4 = $[10];\n }\n const safeFetchNextPage = t4;\n let t5;\n if ($[11] !== setCurrentPage) {\n t5 = () => {\n setCurrentPage(_temp2);\n };\n $[11] = setCurrentPage;\n $[12] = t5;\n } else {\n t5 = $[12];\n }\n const fetchPreviousPage = t5;\n const pageCount = Math.max(Math.ceil((baseQuery.count ?? 0) / itemCountPerPage), 1);\n const t6 = currentPage ?? 1;\n let t7;\n if ($[13] !== baseQuery.count || $[14] !== baseQuery.data || $[15] !== currentPage || $[16] !== itemCountPerPage) {\n t7 = baseQuery.data ? toPagedResponse(baseQuery.data as Result, currentPage ?? 1, baseQuery.count ?? baseQuery.data.length, itemCountPerPage) : null;\n $[13] = baseQuery.count;\n $[14] = baseQuery.data;\n $[15] = currentPage;\n $[16] = itemCountPerPage;\n $[17] = t7;\n } else {\n t7 = $[17];\n }\n const t8 = (currentPage ?? 1) < pageCount;\n const t9 = (currentPage ?? 1) > 1;\n let t10;\n if ($[18] !== baseQuery || $[19] !== fetchPreviousPage || $[20] !== pageCount || $[21] !== safeFetchNextPage || $[22] !== setCurrentPage || $[23] !== t6 || $[24] !== t7 || $[25] !== t8 || $[26] !== t9) {\n t10 = {\n ...baseQuery,\n fetchPreviousPage,\n fetchNextPage: safeFetchNextPage,\n currentPage: t6,\n setCurrentPage,\n data: t7,\n pageCount,\n hasNextPage: t8,\n hasPreviousPage: t9\n };\n $[18] = baseQuery;\n $[19] = fetchPreviousPage;\n $[20] = pageCount;\n $[21] = safeFetchNextPage;\n $[22] = setCurrentPage;\n $[23] = t6;\n $[24] = t7;\n $[25] = t8;\n $[26] = t9;\n $[27] = t10;\n } else {\n t10 = $[27];\n }\n return t10;\n}\nfunction _temp2(currentPage_1) {\n return currentPage_1 - 1;\n}\nfunction _temp(currentPage_0) {\n return currentPage_0 + 1;\n}\nfunction toPagedResponse<Result extends any[]>(results: Result, currentPage: number, totalCount: number, itemPerPage: number) {\n const newPage = {\n Items: results,\n CurrentPage: currentPage,\n ItemCount: totalCount,\n MaxCountPerPage: itemPerPage,\n PageCount: Math.max(Math.ceil(totalCount / itemPerPage), 1)\n };\n return newPage;\n}\ninterface PagedResponse<T extends any[]> {\n Items: T;\n PageCount: number;\n CurrentPage: number;\n ItemCount: number;\n MaxCountPerPage: number;\n ContinuationToken: string;\n}","import { c as _c } from \"react/compiler-runtime\";\nimport { useMutation } from \"@tanstack/react-query\";\nimport useSupabase, { Database } from \"./useSupabase\";\nimport { useUpdateMutation, useUpsertItem } from \"@supabase-cache-helpers/postgrest-react-query\";\nimport { GetResult } from \"./parser/select-query-parser\";\nimport { GenericSchema } from \"./parser/types\";\nimport { isUsable, omit } from \"@pol-studios/utils\";\ntype ItemType<T> = T extends Array<infer U> ? U : T;\ntype MutationOption = Parameters<typeof useUpdateMutation>[3];\nexport function useDbUpdate(relation, t0, query, mutationOption) {\n const $ = _c(14);\n let t1;\n if ($[0] !== t0) {\n t1 = t0 === undefined ? [\"id\"] : t0;\n $[0] = t0;\n $[1] = t1;\n } else {\n t1 = $[1];\n }\n const primaryKeys = t1;\n const supabase = useSupabase();\n const tableName = typeof relation === \"object\" ? relation.table : relation;\n const schemaName = typeof relation === \"object\" ? String(relation.schema) : \"public\";\n let t2;\n if ($[2] !== primaryKeys) {\n t2 = primaryKeys.map(_temp);\n $[2] = primaryKeys;\n $[3] = t2;\n } else {\n t2 = $[3];\n }\n const primaryKeysAsStrings = t2 as string[];\n const t3 = primaryKeysAsStrings as any;\n const t4 = relation as any;\n let t5;\n if ($[4] !== t3 || $[5] !== t4) {\n t5 = {\n primaryKeys: t3,\n table: t4,\n schema: \"public\"\n };\n $[4] = t3;\n $[5] = t4;\n $[6] = t5;\n } else {\n t5 = $[6];\n }\n const upsertItem = useUpsertItem(t5);\n let t6;\n if ($[7] !== primaryKeys || $[8] !== primaryKeysAsStrings || $[9] !== schemaName || $[10] !== supabase || $[11] !== tableName || $[12] !== upsertItem) {\n t6 = {\n mutationFn: async item => {\n let response = null;\n if (primaryKeys.every(x_0 => x_0 in item && isUsable((item as any)[x_0]))) {\n const query_0 = (supabase as any).schema(schemaName as \"public\" | \"core\").from(tableName).update(omit(item as any, primaryKeysAsStrings as any) as any);\n primaryKeys.forEach(x => {\n query_0.eq(String(x), (item as any)[x]);\n });\n const queryResponse = await query_0.select().single().throwOnError();\n if (queryResponse.data) {\n response = queryResponse.data as any;\n upsertItem(response as any);\n }\n }\n return response as any;\n }\n };\n $[7] = primaryKeys;\n $[8] = primaryKeysAsStrings;\n $[9] = schemaName;\n $[10] = supabase;\n $[11] = tableName;\n $[12] = upsertItem;\n $[13] = t6;\n } else {\n t6 = $[13];\n }\n const updateMutation = useMutation(t6);\n return updateMutation;\n}\nfunction _temp(k) {\n return String(k);\n}","/**\n * V3 Data Layer Provider - Web/Browser Version\n *\n * React context provider that initializes adapters and provides context for all V3 hooks.\n * This is a browser-safe version that excludes PowerSync dependencies.\n *\n * For React Native apps that need PowerSync, use the default DataLayerProvider instead.\n */\n\nimport React, { useState, useEffect, useMemo, useCallback, ReactNode, JSX } from \"react\";\nimport type { SupabaseClient } from \"@supabase/supabase-js\";\nimport type { QueryClient } from \"@tanstack/react-query\";\nimport { DataLayerContext, DataLayerContextValue, DataLayerStatus } from \"./DataLayerContext\";\nimport { AdapterRegistry, createAdapterRegistry } from \"../adapters/registry\";\nimport { AdapterAutoDetector, BackendStatus, createAdapterAutoDetector } from \"../adapters/auto-detector\";\nimport { createSupabaseAdapter } from \"../adapters/supabase-adapter\";\nimport type { DataLayerConfig, SyncStatus, SyncControl } from \"../core/types\";\n\n// =============================================================================\n// Props Type\n// =============================================================================\n\n/**\n * Props for DataLayerProvider (Web version)\n */\nexport interface DataLayerProviderProps {\n /** Data layer configuration */\n config: DataLayerConfig;\n\n /** Children to render */\n children: ReactNode;\n\n /** Supabase client (required) */\n supabaseClient: SupabaseClient;\n\n /** React Query client (required) */\n queryClient: QueryClient;\n\n /** Callback when initialization completes */\n onInitialized?: (context: DataLayerContextValue) => void;\n\n /** Callback when error occurs */\n onError?: (error: Error) => void;\n}\n\n// =============================================================================\n// Default Values\n// =============================================================================\n\n/**\n * Default sync status for when PowerSync is not available\n */\nconst defaultSyncStatus: SyncStatus = {\n isConnected: false,\n isSyncing: false,\n lastSyncedAt: null,\n pendingUploads: 0,\n error: null\n};\n\n/**\n * Default sync control for when PowerSync is not available\n */\nconst defaultSyncControl: SyncControl = {\n triggerSync: async () => {\n console.warn(\"Sync not available: PowerSync not initialized\");\n },\n startLiveSync: async () => {\n console.warn(\"Live sync not available: PowerSync not initialized\");\n },\n stopLiveSync: () => {\n console.warn(\"Live sync not available: PowerSync not initialized\");\n },\n setScope: async () => {\n console.warn(\"Scope control not available: PowerSync not initialized\");\n },\n // Auto-retry controls\n pauseAutoRetry: () => {\n console.warn(\"Pause auto-retry not available: PowerSync not initialized\");\n },\n resumeAutoRetry: () => {\n console.warn(\"Resume auto-retry not available: PowerSync not initialized\");\n },\n isAutoRetryPaused: false,\n // Pending mutations\n addPendingMutation: () => {\n // No-op when PowerSync not available\n },\n removePendingMutation: () => {\n // No-op when PowerSync not available\n }\n};\n\n// =============================================================================\n// Provider Component\n// =============================================================================\n\n/**\n * Provider component for the V3 data layer (Web/Browser version).\n *\n * This provider:\n * - Creates and manages the AdapterRegistry\n * - Initializes the AdapterAutoDetector for backend selection\n * - Sets up Supabase adapter (PowerSync not supported in web builds)\n * - Tracks online/offline status\n * - Provides context for all V3 hooks\n *\n * Note: This is the browser-safe version that does NOT support PowerSync.\n * For React Native apps that need PowerSync, use the default DataLayerProvider.\n *\n * @example\n * ```tsx\n * import { DataLayerProvider } from \"@pol-studios/db/web\";\n *\n * function App() {\n * return (\n * <DataLayerProvider\n * config={dataLayerConfig}\n * supabaseClient={supabase}\n * queryClient={queryClient}\n * >\n * <YourApp />\n * </DataLayerProvider>\n * );\n * }\n * ```\n */\nexport function DataLayerProvider({\n config,\n children,\n supabaseClient,\n queryClient,\n onInitialized,\n onError\n}: DataLayerProviderProps): JSX.Element {\n // Create registry (stable across renders)\n const [registry] = useState<AdapterRegistry>(() => createAdapterRegistry(config));\n\n // Track auto-detector instance\n const [autoDetector, setAutoDetector] = useState<AdapterAutoDetector | null>(null);\n\n // Track status\n const [status, setStatus] = useState<DataLayerStatus>({\n isInitialized: false,\n currentBackend: null,\n powerSyncStatus: BackendStatus.UNAVAILABLE,\n isOnline: typeof navigator !== \"undefined\" ? navigator.onLine : true,\n lastDetection: null,\n error: null,\n hasSynced: false // Web builds don't use PowerSync, so never synced\n });\n\n // ===========================================================================\n // Initialization Effect\n // ===========================================================================\n\n useEffect(() => {\n try {\n // Create auto-detector (no PowerSync instance for web builds)\n const detector = createAdapterAutoDetector(null,\n // No PowerSync in web builds\n supabaseClient, {\n preferPowerSync: false\n });\n setAutoDetector(detector);\n\n // Create and set Supabase adapter (always available)\n const supabaseAdapter = createSupabaseAdapter(supabaseClient, config.schema);\n registry.setSupabaseAdapter(supabaseAdapter);\n\n // Initialize registry with dependencies (no PowerSync)\n registry.initialize({\n powerSync: null,\n supabase: supabaseClient,\n queryClient,\n schema: config.schema\n });\n\n // Perform initial detection\n const detection = detector.detect();\n\n // Update status\n setStatus({\n isInitialized: true,\n currentBackend: detection.recommendedBackend,\n powerSyncStatus: detection.powerSyncStatus,\n isOnline: detection.isOnline,\n lastDetection: detection,\n error: null,\n hasSynced: false // Web builds don't use PowerSync, so never synced\n });\n } catch (error) {\n const err = error instanceof Error ? error : new Error(String(error));\n setStatus(prev => ({\n ...prev,\n error: err\n }));\n onError?.(err);\n }\n }, [supabaseClient, queryClient, config.schema, registry, onError]);\n\n // ===========================================================================\n // Online/Offline Status Effect\n // ===========================================================================\n\n useEffect(() => {\n const handleOnline = () => {\n setStatus(prev => ({\n ...prev,\n isOnline: true\n }));\n // Re-run detection when coming online\n if (autoDetector) {\n const detection = autoDetector.detect();\n setStatus(prev => ({\n ...prev,\n currentBackend: detection.recommendedBackend,\n powerSyncStatus: detection.powerSyncStatus,\n lastDetection: detection\n }));\n }\n };\n const handleOffline = () => {\n setStatus(prev => ({\n ...prev,\n isOnline: false\n }));\n // Re-run detection when going offline\n if (autoDetector) {\n const detection = autoDetector.detect();\n setStatus(prev => ({\n ...prev,\n currentBackend: detection.recommendedBackend,\n powerSyncStatus: detection.powerSyncStatus,\n lastDetection: detection\n }));\n }\n };\n\n // Only add window event listeners in browser environment\n const isBrowser = typeof window !== \"undefined\" && typeof window.addEventListener === \"function\";\n if (isBrowser) {\n window.addEventListener(\"online\", handleOnline);\n window.addEventListener(\"offline\", handleOffline);\n return () => {\n window.removeEventListener(\"online\", handleOnline);\n window.removeEventListener(\"offline\", handleOffline);\n };\n }\n }, [autoDetector]);\n\n // ===========================================================================\n // Backend Change Listener Effect\n // ===========================================================================\n\n useEffect(() => {\n if (!autoDetector) return;\n const unsubscribe = autoDetector.addListener(detection => {\n setStatus(prev => ({\n ...prev,\n currentBackend: detection.recommendedBackend,\n powerSyncStatus: detection.powerSyncStatus,\n isOnline: detection.isOnline,\n lastDetection: detection\n }));\n });\n return unsubscribe;\n }, [autoDetector]);\n\n // ===========================================================================\n // Initialization Callback Effect\n // ===========================================================================\n\n useEffect(() => {\n if (status.isInitialized && !status.error && onInitialized) {\n const contextValue = buildContextValue();\n if (contextValue) {\n onInitialized(contextValue);\n }\n }\n // Only run when initialization state changes\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [status.isInitialized, status.error]);\n\n // ===========================================================================\n // Helper Functions\n // ===========================================================================\n\n /**\n * Get adapter for a specific table\n */\n const getAdapter = useCallback((table: string, operation: 'read' | 'write' = 'read') => {\n return registry.getAdapter(table, operation);\n }, [registry]);\n\n /**\n * Build the context value object\n */\n const buildContextValue = useCallback((): DataLayerContextValue | null => {\n if (!status.isInitialized) return null;\n return {\n registry,\n getAdapter,\n powerSync: null,\n // No PowerSync in web builds\n supabase: supabaseClient,\n queryClient,\n schema: config.schema,\n status,\n syncStatus: defaultSyncStatus,\n syncControl: defaultSyncControl\n };\n }, [registry, getAdapter, supabaseClient, queryClient, config.schema, status]);\n\n // ===========================================================================\n // Context Value Memoization\n // ===========================================================================\n\n const contextValue = useMemo(() => buildContextValue(), [buildContextValue]);\n\n // ===========================================================================\n // Cleanup Effect\n // ===========================================================================\n\n useEffect(() => {\n return () => {\n // Dispose registry on unmount\n registry.dispose();\n };\n }, [registry]);\n\n // ===========================================================================\n // Render\n // ===========================================================================\n\n // Don't render children until the data layer is initialized.\n // This prevents hooks from being called before the context is ready.\n // The provider will render children once initialization completes.\n if (!contextValue) {\n return null;\n }\n return <DataLayerContext.Provider value={contextValue}>\n {children}\n </DataLayerContext.Provider>;\n}\nexport default DataLayerProvider;"],"mappings":"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","names":["useInfiniteQuery","useDbInfiniteQuery","useInfiniteQuery","useDbInsert","_c","omit","_c","omit","_temp","_temp2","_c","useSessionStorageState","_c","useDbQuery","_temp","_temp2","toPagedResponse","_c","useMutation","isUsable","omit","useDbUpdate","_c","_temp","useMutation","useState","useMemo","useState","contextValue","useMemo"]}
@@ -1,5 +1,5 @@
1
1
  import { SyncControl, SyncStatus } from '../core/index.js';
2
- export { P as PowerSyncDatabase } from '../executor-YJw4m7Q7.js';
2
+ export { P as PowerSyncDatabase } from '../executor-D15yjeMo.js';
3
3
 
4
4
  /**
5
5
  * PowerSync Bridge for @pol-studios/db
@@ -1,6 +1,5 @@
1
- import { ParsedSelect, SelectRelation } from '../core/index.js';
2
- export { BuiltQuery, ColumnInfo, DatabaseSchema, OrderBy, QueryOptions, RelationshipInfo, RelationshipType, ResolvedRelationship, SelectColumn, TableSchema, WhereClause, WhereOperators } from '../core/index.js';
3
- export { P as PowerSyncDatabase, Q as QueryExecutor, e as RelationJoinData, R as RelationshipResolver, b as ResultJoiner, S as SQLBuilder, f as createQueryExecutor, c as createRelationshipResolver, d as createResultJoiner, a as createSQLBuilder } from '../executor-YJw4m7Q7.js';
1
+ export { E as ExtractedExplicitFk, e as extractColumnNames, d as extractExplicitFkRelations, f as extractExplicitFkTables, a as extractRelationNames, g as getRelationSelect, b as hasExplicitFk, h as hasRelation, p as parseSelect, c as selectHasExplicitFkSyntax, s as stringifySelect, t as tokenizeTopLevel } from '../select-parser-BAV7fOaM.js';
2
+ export { P as PowerSyncDatabase, Q as QueryExecutor, e as RelationJoinData, R as RelationshipResolver, b as ResultJoiner, S as SQLBuilder, f as createQueryExecutor, c as createRelationshipResolver, d as createResultJoiner, a as createSQLBuilder } from '../executor-D15yjeMo.js';
4
3
  import { PostgrestSingleResponse, PostgrestError } from '@supabase/supabase-js';
5
4
  import { ItemType } from '@pol-studios/utils';
6
5
  import { UseQuerySingleReturn as UseQuerySingleReturn$1 } from '@supabase-cache-helpers/postgrest-react-query';
@@ -11,85 +10,7 @@ import * as react from 'react';
11
10
  import { Dispatch, SetStateAction } from 'react';
12
11
  import { V as ValueForPropertyType, P as PropertyType, a as FilterConfig } from '../FilterConfig-Bt2Ek74z.js';
13
12
  import { G as GenericTable, h as GenericView } from '../types-CYr9JiUE.js';
14
-
15
- /**
16
- * Select String Parser
17
- *
18
- * Parses Supabase PostgREST select syntax into an AST for local SQLite processing.
19
- *
20
- * Supported Syntax:
21
- * - "*" -> All columns
22
- * - "id, name, status" -> Specific columns
23
- * - "*, RelatedTable(*)" -> All columns + relation
24
- * - "id, RelatedTable(id, name)" -> Specific + relation with specific columns
25
- * - "*, Parent(*, Grandparent(name))" -> Nested relations
26
- * - "*, items:RelatedTable(*)" -> Aliased relation
27
- * - "aliasName:columnName" -> Aliased column
28
- */
29
-
30
- /**
31
- * Tokenize a string at the top level, respecting parentheses nesting.
32
- * Splits by comma but keeps nested parentheses intact.
33
- *
34
- * @example
35
- * tokenizeTopLevel("id, name, Parent(*, Child(name))")
36
- * // Returns: ["id", "name", "Parent(*, Child(name))"]
37
- */
38
- declare function tokenizeTopLevel(input: string): string[];
39
- /**
40
- * Parse a Supabase PostgREST select string into an AST.
41
- *
42
- * @param select - The select string (e.g., "*, RelatedTable(*)")
43
- * @returns Parsed select AST
44
- *
45
- * @example
46
- * parseSelect("*")
47
- * // Returns: { columns: "*", relations: [] }
48
- *
49
- * parseSelect("id, name, status")
50
- * // Returns: {
51
- * // columns: [{ name: "id" }, { name: "name" }, { name: "status" }],
52
- * // relations: []
53
- * // }
54
- *
55
- * parseSelect("*, EquipmentFixture(*)")
56
- * // Returns: {
57
- * // columns: "*",
58
- * // relations: [{ name: "EquipmentFixture", columns: "*", relations: [] }]
59
- * // }
60
- *
61
- * parseSelect("id, name, ProjectDatabase(name, Organization(*))")
62
- * // Returns: {
63
- * // columns: [{ name: "id" }, { name: "name" }],
64
- * // relations: [{
65
- * // name: "ProjectDatabase",
66
- * // columns: [{ name: "name" }],
67
- * // relations: [{ name: "Organization", columns: "*", relations: [] }]
68
- * // }]
69
- * // }
70
- */
71
- declare function parseSelect(select: string): ParsedSelect;
72
- /**
73
- * Convert a parsed select back to a string representation (for debugging)
74
- */
75
- declare function stringifySelect(parsed: ParsedSelect): string;
76
- /**
77
- * Extract all column names from a parsed select (for building SQL queries)
78
- * Does not include relation names.
79
- */
80
- declare function extractColumnNames(parsed: ParsedSelect): string[] | "*";
81
- /**
82
- * Extract all relation names from a parsed select
83
- */
84
- declare function extractRelationNames(parsed: ParsedSelect): string[];
85
- /**
86
- * Check if a select string references a specific relation
87
- */
88
- declare function hasRelation(parsed: ParsedSelect, relationName: string): boolean;
89
- /**
90
- * Get the select configuration for a specific relation
91
- */
92
- declare function getRelationSelect(parsed: ParsedSelect, relationName: string): SelectRelation | undefined;
13
+ export { BuiltQuery, ColumnInfo, DatabaseSchema, ExplicitFkSpec, OrderBy, ParsedSelect, QueryOptions, RelationshipInfo, RelationshipType, ResolvedRelationship, SelectColumn, SelectRelation, TableSchema, WhereClause, WhereOperators } from '../core/index.js';
93
14
 
94
15
  type ConfigurationOptions<T> = {
95
16
  crossOrganization?: boolean;
@@ -720,4 +641,4 @@ declare function usePartialAdvancedQuery<Result extends Record<string, any>[]>(q
720
641
  React.Dispatch<React.SetStateAction<QueryState>>
721
642
  ];
722
643
 
723
- export { ParsedSelect, SelectRelation, type UsePartialAdvancedQueryResult, type UsePartialQueryResult, type UseQuerySingleReturn, extractColumnNames, extractRelationNames, getRelationSelect, hasRelation, parseSelect, stringifySelect, tokenizeTopLevel, useAdvancedFilterQuery, useAdvancedQuery, useInfiniteQuery, usePartialAdvancedQuery, usePartialQuery, useQuery };
644
+ export { type UsePartialAdvancedQueryResult, type UsePartialQueryResult, type UseQuerySingleReturn, useAdvancedFilterQuery, useAdvancedQuery, useInfiniteQuery, usePartialAdvancedQuery, usePartialQuery, useQuery };
@@ -14,16 +14,22 @@ import {
14
14
  createQueryExecutor,
15
15
  createRelationshipResolver,
16
16
  createResultJoiner,
17
- createSQLBuilder,
17
+ createSQLBuilder
18
+ } from "../chunk-YRIPM2AN.js";
19
+ import "../chunk-GC3TBUWE.js";
20
+ import {
18
21
  extractColumnNames,
22
+ extractExplicitFkRelations,
23
+ extractExplicitFkTables,
19
24
  extractRelationNames,
20
25
  getRelationSelect,
26
+ hasExplicitFk,
21
27
  hasRelation,
22
28
  parseSelect,
29
+ selectHasExplicitFkSyntax,
23
30
  stringifySelect,
24
31
  tokenizeTopLevel
25
- } from "../chunk-HZIVE5AZ.js";
26
- import "../chunk-GC3TBUWE.js";
32
+ } from "../chunk-W7PERM66.js";
27
33
  import "../chunk-JOULSXOI.js";
28
34
  import "../chunk-J4ZVCXZ4.js";
29
35
  import "../chunk-YUX6RGLZ.js";
@@ -40,10 +46,14 @@ export {
40
46
  createResultJoiner,
41
47
  createSQLBuilder,
42
48
  extractColumnNames,
49
+ extractExplicitFkRelations,
50
+ extractExplicitFkTables,
43
51
  extractRelationNames,
44
52
  getRelationSelect,
53
+ hasExplicitFk,
45
54
  hasRelation,
46
55
  parseSelect,
56
+ selectHasExplicitFkSyntax,
47
57
  stringifySelect,
48
58
  tokenizeTopLevel,
49
59
  useAdvancedFilterQuery,
@@ -2,7 +2,9 @@ import { RealtimePostgresChangesPayload, PostgrestSingleResponse } from '@supaba
2
2
  import { ItemType } from '@pol-studios/utils';
3
3
  import { UseQueryOptions } from '@tanstack/react-query';
4
4
  import { U as UseDbQuerySingleReturn } from '../useDbQuery-C-TL8jY1.js';
5
+ import { E as ExtractedExplicitFk } from '../select-parser-BAV7fOaM.js';
5
6
  import '@supabase-cache-helpers/postgrest-react-query';
7
+ import '../core/index.js';
6
8
 
7
9
  declare function useRealtime(key: string, query: string, table: string | {
8
10
  table: string;
@@ -41,4 +43,81 @@ type DataType = Record<string, any>;
41
43
  declare function convertFilterToRealtimeQuery(filters: FilterDefinitions): string;
42
44
  declare function useRealtimeQuery<Result extends DataType>(query: PromiseLike<PostgrestSingleResponse<Result>>, config?: Omit<UseQueryOptions<PostgrestSingleResponse<Result>>, "queryKey" | "queryFn"> & ConfigurationOptions<Result>, primaryKeys?: (keyof ItemType<Result> & string)[]): UseRealtimeQueryResult<Result>;
43
45
 
44
- export { type UseRealtimeQueryResult, convertFilterToRealtimeQuery, useRealtimeQuery as useDbRealtimeQuery, useRealtime, useRealtimeQuery };
46
+ /**
47
+ * Optimistic Merge Utilities for Explicit FK Relations
48
+ *
49
+ * When using realtime subscriptions with explicit FK joins (e.g., Sender!senderId:core.Profile(*)),
50
+ * changes to related tables need to be optimistically merged into cached query data.
51
+ *
52
+ * This module provides utilities for:
53
+ * 1. Extracting explicit FK relation info from select strings
54
+ * 2. Merging changes from related tables into parent query data
55
+ * 3. Managing multiple subscriptions for related tables
56
+ */
57
+
58
+ /**
59
+ * A changed record from a related table.
60
+ */
61
+ interface ChangedRecord {
62
+ /** The record ID */
63
+ id: string;
64
+ /** All record fields */
65
+ [key: string]: unknown;
66
+ }
67
+ /**
68
+ * Merge updated related records into parent query data.
69
+ *
70
+ * When a record in a related table changes, this function updates all references
71
+ * to that record within the parent data's nested relations.
72
+ *
73
+ * @param parentData - The current cached query data (array of parent records)
74
+ * @param relation - The explicit FK relation info (alias, sourceField, etc.)
75
+ * @param changedRecords - The updated records from the related table
76
+ * @returns New array with merged updates (immutable - does not modify input)
77
+ *
78
+ * @example
79
+ * // Parent data has: [{ id: "1", senderId: "user-1", Sender: { id: "user-1", name: "Alice" } }]
80
+ * // User "user-1" changed their name to "Bob"
81
+ * const updated = mergeRelatedUpdate(
82
+ * parentData,
83
+ * { alias: "Sender", sourceField: "senderId", targetTable: "User", targetColumn: "id" },
84
+ * [{ id: "user-1", name: "Bob" }]
85
+ * );
86
+ * // Result: [{ id: "1", senderId: "user-1", Sender: { id: "user-1", name: "Bob" } }]
87
+ */
88
+ declare function mergeRelatedUpdate<T extends Record<string, unknown>>(parentData: T[], relation: ExtractedExplicitFk, changedRecords: ChangedRecord[]): T[];
89
+ /**
90
+ * Merge a single changed record into parent query data.
91
+ *
92
+ * Convenience wrapper around mergeRelatedUpdate for single record changes.
93
+ *
94
+ * @param parentData - The current cached query data
95
+ * @param relation - The explicit FK relation info
96
+ * @param changedRecord - The updated record from the related table
97
+ * @returns New array with merged update
98
+ */
99
+ declare function mergeSingleRelatedUpdate<T extends Record<string, unknown>>(parentData: T[], relation: ExtractedExplicitFk, changedRecord: ChangedRecord): T[];
100
+ /**
101
+ * Check if any parent records reference a given related record ID.
102
+ *
103
+ * Useful for determining whether a change to a related record is relevant
104
+ * to the current query data.
105
+ *
106
+ * @param parentData - The current cached query data
107
+ * @param relation - The explicit FK relation info
108
+ * @param relatedId - The ID of the related record that changed
109
+ * @returns true if any parent references this related record
110
+ */
111
+ declare function parentReferencesRelated<T extends Record<string, unknown>>(parentData: T[], relation: ExtractedExplicitFk, relatedId: string): boolean;
112
+ /**
113
+ * Extract all related IDs from parent data for a given relation.
114
+ *
115
+ * Useful for filtering realtime subscriptions to only watch relevant records.
116
+ *
117
+ * @param parentData - The current cached query data
118
+ * @param relation - The explicit FK relation info
119
+ * @returns Set of related record IDs referenced by the parent data
120
+ */
121
+ declare function extractRelatedIds<T extends Record<string, unknown>>(parentData: T[], relation: ExtractedExplicitFk): Set<string>;
122
+
123
+ export { type ChangedRecord, type UseRealtimeQueryResult, convertFilterToRealtimeQuery, extractRelatedIds, mergeRelatedUpdate, mergeSingleRelatedUpdate, parentReferencesRelated, useRealtimeQuery as useDbRealtimeQuery, useRealtime, useRealtimeQuery };
@@ -1,3 +1,9 @@
1
+ import {
2
+ extractRelatedIds,
3
+ mergeRelatedUpdate,
4
+ mergeSingleRelatedUpdate,
5
+ parentReferencesRelated
6
+ } from "../chunk-QYAFI34Q.js";
1
7
  import {
2
8
  PostgrestParser
3
9
  } from "../chunk-JOULSXOI.js";
@@ -106,7 +112,7 @@ function useRealtime(key, query, table, primaryKeys, options) {
106
112
  query
107
113
  });
108
114
  if (payload.eventType !== REALTIME_POSTGRES_CHANGES_LISTEN_EVENT.DELETE && selectQuery) {
109
- if (selectQuery.groupedUserQueryPaths.every((x) => x.path in data) === false) {
115
+ if (selectQuery.groupedUserQueryPaths?.every((x) => x.path in data) === false) {
110
116
  const qb = supabase.schema(payload.schema).from(payload.table).select(selectQuery.selectQuery);
111
117
  for (const pk of primaryKeys) {
112
118
  qb.eq(pk.toString(), data[pk]);
@@ -135,14 +141,6 @@ function useRealtime(key, query, table, primaryKeys, options) {
135
141
  if (onChange) {
136
142
  onChange(payload);
137
143
  }
138
- }).on("postgres_changes", {
139
- event: "DELETE",
140
- schema: schemaValue,
141
- table: tableNameValue
142
- }, async (payload_0) => {
143
- if (payload_0.eventType === REALTIME_POSTGRES_CHANGES_LISTEN_EVENT.DELETE) {
144
- await deleteItem(payload_0.old);
145
- }
146
144
  }).subscribe((status) => {
147
145
  setRealtimeState(status);
148
146
  if (status === "SUBSCRIBED") {
@@ -367,6 +365,10 @@ function useRealtimeQuery(query, config, t0) {
367
365
  }
368
366
  export {
369
367
  convertFilterToRealtimeQuery,
368
+ extractRelatedIds,
369
+ mergeRelatedUpdate,
370
+ mergeSingleRelatedUpdate,
371
+ parentReferencesRelated,
370
372
  useRealtimeQuery as useDbRealtimeQuery,
371
373
  useRealtime,
372
374
  useRealtimeQuery