@pol-studios/db 1.0.18 → 1.0.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-ZFM6AGWV.js → chunk-2T6WTCP4.js} +56 -27
- package/dist/chunk-2T6WTCP4.js.map +1 -0
- package/dist/{chunk-XOPORVJG.js → chunk-R5B2XMN5.js} +6 -8
- package/dist/chunk-R5B2XMN5.js.map +1 -0
- package/dist/index.js +2 -2
- package/dist/index.native.d.ts +21 -1
- package/dist/index.native.js +2 -2
- package/dist/index.web.js +1 -1
- package/package.json +61 -13
- package/dist/chunk-XOPORVJG.js.map +0 -1
- package/dist/chunk-ZFM6AGWV.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/useDbDelete.ts","../src/useDbInfiniteQuery.ts","../src/useDbInsert.ts","../src/useDbMultiDelete.ts","../src/useDbMultiUpsert.ts","../src/useDbPartialAdvanceQuery.ts","../src/useDbPartialQuery.ts","../src/useDbRealtime.ts","../src/useDbRealtimeQuery.tsx","../src/useDbUpdate.ts","../src/useMutationSuccess.ts","../src/adapters/types.ts","../src/adapters/auto-detector.ts","../src/adapters/registry.ts","../src/adapters/supabase-adapter.ts","../src/supabase-functions.tsx","../src/useAI.ts","../src/useServerAvailability.ts","../src/useSearchQuery.ts","../src/useLiveChangeTracking.ts","../src/useLatestOperationLog.ts","../src/useAutosaveState.ts","../src/useToastError.ts","../src/advance-query.tsx","../src/storage/useStorageUrl.ts","../src/storage/useStoragePath.ts","../src/storage/bucketConfig.ts","../src/utilities/query-utils.ts","../src/changelog/useChangelogMutations.ts","../src/changelog/useChangelogQuery.ts","../src/nl-training/useFeedbackList.ts","../src/nl-training/useSubmitFeedback.ts","../src/nl-training/useApplyFeedback.ts","../src/nl-training/useResolveFeedback.ts"],"sourcesContent":["import { c as _c } from \"react/compiler-runtime\";\nimport { useMutation } from \"@tanstack/react-query\";\nimport useSupabase, { Database } from \"./useSupabase\";\nimport { PostgrestSingleResponse } from \"@supabase/supabase-js\";\nimport { GetResult } from \"./parser/select-query-parser\";\nimport { GenericSchema } from \"./parser/types\";\nimport { useDeleteItem } from \"@supabase-cache-helpers/postgrest-react-query\";\nimport { isUsable } from \"@pol-studios/utils\";\ntype ItemType<T> = T extends Array<infer U> ? U : T;\nexport function useDbDelete(relation, t0) {\n const $ = _c(14);\n let t1;\n if ($[0] !== t0) {\n t1 = t0 === undefined ? [\"id\" as any] : t0;\n $[0] = t0;\n $[1] = t1;\n } else {\n t1 = $[1];\n }\n const primaryKeys = t1;\n const tableName = typeof relation === \"object\" ? relation.table : relation;\n const schemaName = typeof relation === \"object\" ? relation.schema as string : \"public\";\n const supabase = useSupabase();\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 t3 = t2 as string[];\n let t4;\n if ($[4] !== schemaName || $[5] !== t3 || $[6] !== tableName) {\n t4 = {\n primaryKeys: t3,\n table: tableName,\n schema: schemaName\n };\n $[4] = schemaName;\n $[5] = t3;\n $[6] = tableName;\n $[7] = t4;\n } else {\n t4 = $[7];\n }\n const deleteItem = useDeleteItem(t4);\n let t5;\n if ($[8] !== deleteItem || $[9] !== primaryKeys || $[10] !== schemaName || $[11] !== supabase || $[12] !== tableName) {\n t5 = {\n mutationFn: async item => {\n if (Array.isArray(item)) {\n throw new Error(\"Item cannot be an array.\");\n }\n const deleteQuery = (supabase as any).schema(schemaName as \"public\" | \"core\").from(tableName).delete();\n primaryKeys.forEach(key => {\n const keyStr = String(key);\n const value = (item as any)[keyStr];\n if (isUsable(value)) {\n deleteQuery.eq(keyStr, value);\n }\n });\n const response = await deleteQuery.select().single();\n if (response.error) {\n throw response.error;\n }\n if (response.data) {\n deleteItem(response.data as any);\n } else {\n deleteItem(item as any);\n }\n return response.data as any;\n }\n };\n $[8] = deleteItem;\n $[9] = primaryKeys;\n $[10] = schemaName;\n $[11] = supabase;\n $[12] = tableName;\n $[13] = t5;\n } else {\n t5 = $[13];\n }\n const deleteMutation = useMutation(t5);\n return deleteMutation;\n}\nfunction _temp(k) {\n return String(k);\n}","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 { useMutation } from \"@tanstack/react-query\";\nimport useSupabase, { Database } from \"./useSupabase\";\nimport { PostgrestSingleResponse } from \"@supabase/supabase-js\";\nimport { GetResult } from \"./parser/select-query-parser\";\nimport { GenericSchema } from \"./parser/types\";\nimport { useDeleteManyMutation, useDeleteMutation } from \"@supabase-cache-helpers/postgrest-react-query\";\ntype ItemType<T> = T extends Array<infer U> ? U : T;\nexport function useDbMultiDelete(relation, t0) {\n const $ = _c(10);\n let t1;\n if ($[0] !== t0) {\n t1 = t0 === undefined ? [\"id\" as any] : t0;\n $[0] = t0;\n $[1] = t1;\n } else {\n t1 = $[1];\n }\n const primaryKeys = t1;\n const tableName = typeof relation === \"object\" ? relation.table : relation;\n const schemaName = typeof relation === \"object\" ? String(relation.schema) : \"public\";\n const supabase = useSupabase();\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 deleteManyMutation = useDeleteManyMutation(t4 as any, primaryKeysAsStrings as any);\n let t5;\n if ($[8] !== deleteManyMutation) {\n t5 = {\n mutationFn: async item => {\n if (Array.isArray(item)) {\n const response = await deleteManyMutation.mutateAsync(item);\n return response as any;\n } else {\n throw new Error(\"Item must be an array.\");\n }\n }\n };\n $[8] = deleteManyMutation;\n $[9] = t5;\n } else {\n t5 = $[9];\n }\n const deleteMutation = useMutation(t5);\n return deleteMutation;\n}\nfunction _temp(k) {\n return String(k);\n}","import { c as _c } from \"react/compiler-runtime\";\nimport { useMutation } from \"@tanstack/react-query\";\nimport useSupabase, { Database } from \"./useSupabase\";\nimport { useUpsertItem } from \"@supabase-cache-helpers/postgrest-react-query\";\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;\nexport function useDbMultiUpsert(relation, t0, t1) {\n const $ = _c(17);\n let t2;\n if ($[0] !== t0) {\n t2 = t0 === undefined ? [\"id\"] : t0;\n $[0] = t0;\n $[1] = t2;\n } else {\n t2 = $[1];\n }\n const primaryKeys = t2;\n const query = t1 === undefined ? \"*\" : 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 const t3 = relation as any;\n let t4;\n if ($[2] !== primaryKeys || $[3] !== t3) {\n t4 = {\n primaryKeys,\n table: t3,\n schema: \"public\"\n };\n $[2] = primaryKeys;\n $[3] = t3;\n $[4] = t4;\n } else {\n t4 = $[4];\n }\n const upsertItem = useUpsertItem(t4);\n let t5;\n if ($[5] !== primaryKeys) {\n t5 = primaryKeys.map(_temp);\n $[5] = primaryKeys;\n $[6] = t5;\n } else {\n t5 = $[6];\n }\n const primaryKeysAsStrings = t5 as string[];\n let t6;\n if ($[7] !== primaryKeys || $[8] !== primaryKeysAsStrings || $[9] !== query || $[10] !== schemaName || $[11] !== supabase || $[12] !== tableName) {\n t6 = async function upsertItemAction(item) {\n let task;\n if (Object.keys(item).length !== primaryKeys.length && primaryKeys.every(key_0 => key_0 in item && isUsable(item[key_0]))) {\n const updateObject = omit(item as any, primaryKeysAsStrings as any) as any;\n task = (supabase as any).schema(schemaName as \"public\" | \"core\").from(tableName).update(updateObject);\n primaryKeys.forEach(key => {\n task = task.eq(String(key), item[key]);\n });\n } else {\n task = (supabase as any).schema(schemaName as \"public\" | \"core\").from(tableName).insert(omit(item as any, primaryKeysAsStrings as any) as any);\n }\n const response = await task.select(query);\n if (response.error) {\n throw response.error;\n }\n return response.data[0];\n };\n $[7] = primaryKeys;\n $[8] = primaryKeysAsStrings;\n $[9] = query;\n $[10] = schemaName;\n $[11] = supabase;\n $[12] = tableName;\n $[13] = t6;\n } else {\n t6 = $[13];\n }\n const upsertItemAction = t6;\n let t7;\n if ($[14] !== upsertItem || $[15] !== upsertItemAction) {\n t7 = {\n mutationFn: async item_0 => {\n if (Array.isArray(item_0)) {\n const data = await Promise.all(item_0.map(x => upsertItemAction(x)));\n data.filter(_temp2).forEach(x_1 => upsertItem(x_1 as any));\n return data as RowResult[];\n }\n throw new Error(\"Item must be an array.\");\n }\n };\n $[14] = upsertItem;\n $[15] = upsertItemAction;\n $[16] = t7;\n } else {\n t7 = $[16];\n }\n const updateMutation = useMutation(t7);\n return updateMutation;\n}\nfunction _temp2(x_0) {\n return isUsable(x_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 { useDeleteItem, useQueriesForTableLoader, useUpsertItem } from \"@supabase-cache-helpers/postgrest-react-query\";\nimport { useEffect, useState, useRef } from \"react\";\nimport useSupabase, { UserSessionId } from \"./useSupabase\";\nimport { newUuid } from \"@pol-studios/utils\";\nimport { buildNormalizedQuery, normalizeResponse } from \"@supabase-cache-helpers/postgrest-core\";\nimport { REALTIME_POSTGRES_CHANGES_LISTEN_EVENT, type RealtimePostgresChangesPayload } from \"@supabase/supabase-js\";\nimport { useDelayedValue } from \"@pol-studios/hooks/state\";\nexport default function useDbRealtime(key, query, table, primaryKeys, options) {\n const $ = _c(37);\n const supabase = useSupabase();\n const tableNameValue = typeof table === \"string\" ? table : table.table;\n const schemaValue = typeof table === \"string\" ? \"public\" : table.schema;\n const queriesForTable = useQueriesForTableLoader(tableNameValue);\n let t0;\n if ($[0] !== primaryKeys || $[1] !== schemaValue || $[2] !== tableNameValue) {\n t0 = {\n primaryKeys,\n table: tableNameValue,\n schema: schemaValue\n };\n $[0] = primaryKeys;\n $[1] = schemaValue;\n $[2] = tableNameValue;\n $[3] = t0;\n } else {\n t0 = $[3];\n }\n const deleteItem = useDeleteItem(t0);\n let t1;\n if ($[4] !== primaryKeys || $[5] !== schemaValue || $[6] !== tableNameValue) {\n t1 = {\n primaryKeys,\n table: tableNameValue,\n schema: schemaValue\n };\n $[4] = primaryKeys;\n $[5] = schemaValue;\n $[6] = tableNameValue;\n $[7] = t1;\n } else {\n t1 = $[7];\n }\n const upsertItem = useUpsertItem(t1);\n const [realtimeState, setRealtimeState] = useState(\"CLOSED\");\n const [retryTick, setRetryTick] = useState(0);\n const channelRef = useRef(null);\n const lastRetryTimeRef = useRef(0);\n const retryCountRef = useRef(0);\n const enabled = options?.enabled ?? true;\n const filter = options?.filter;\n const onChange = options?.onChange;\n const debouncedKey = useDelayedValue(key, 50);\n let t2;\n if ($[8] !== deleteItem || $[9] !== enabled || $[10] !== filter || $[11] !== onChange || $[12] !== primaryKeys || $[13] !== queriesForTable || $[14] !== query || $[15] !== retryTick || $[16] !== schemaValue || $[17] !== supabase || $[18] !== tableNameValue || $[19] !== upsertItem) {\n t2 = () => {\n if (!enabled) {\n if (channelRef.current) {\n channelRef.current.unsubscribe();\n supabase.removeChannel(channelRef.current);\n channelRef.current = null;\n }\n setRealtimeState(\"CLOSED\");\n return;\n }\n const now = Date.now();\n const timeSinceLastRetry = now - lastRetryTimeRef.current;\n if (timeSinceLastRetry < 2000 && retryTick > 0) {\n return;\n }\n if (channelRef.current) {\n channelRef.current.unsubscribe();\n supabase.removeChannel(channelRef.current);\n channelRef.current = null;\n }\n lastRetryTimeRef.current = now;\n retryCountRef.current = retryCountRef.current + 1;\n const channel = supabase.channel(newUuid()).on(\"postgres_changes\", {\n event: \"*\",\n schema: schemaValue,\n table: tableNameValue,\n filter\n }, async payload => {\n let data = payload.new ?? payload.old;\n if (payload.new && Object.keys(payload.new).length > 0) {\n const selectQuery = buildNormalizedQuery({\n queriesForTable,\n query\n });\n if (payload.eventType !== REALTIME_POSTGRES_CHANGES_LISTEN_EVENT.DELETE && selectQuery) {\n if (selectQuery.groupedUserQueryPaths?.every(x => x.path in data) === false) {\n const qb = supabase.schema(payload.schema as any).from(payload.table as any).select(selectQuery.selectQuery);\n for (const pk of primaryKeys) {\n qb.eq(pk.toString(), data[pk]);\n }\n const res = await qb.single();\n if (res.data) {\n data = normalizeResponse(selectQuery.groupedPaths, res.data);\n }\n }\n }\n if (\"changedBySessionId\" in data) {\n const sessionId = data.changedBySessionId;\n if (sessionId !== UserSessionId) {\n await upsertItem(data);\n }\n } else {\n await upsertItem(data);\n }\n }\n if (payload.eventType === REALTIME_POSTGRES_CHANGES_LISTEN_EVENT.DELETE) {\n await deleteItem(payload.old);\n }\n if (payload.errors?.length > 0) {\n setRealtimeState(\"CHANNEL_ERROR\");\n }\n if (onChange) {\n onChange(payload);\n }\n }).on(\"postgres_changes\", {\n event: \"DELETE\",\n schema: schemaValue,\n table: tableNameValue\n }, async payload_0 => {\n if (payload_0.eventType === REALTIME_POSTGRES_CHANGES_LISTEN_EVENT.DELETE) {\n await deleteItem(payload_0.old);\n }\n }).subscribe(status => {\n setRealtimeState(status);\n if (status === \"SUBSCRIBED\") {\n retryCountRef.current = 0;\n }\n });\n channelRef.current = channel;\n return () => {\n if (channelRef.current) {\n channelRef.current.unsubscribe();\n supabase.removeChannel(channelRef.current);\n channelRef.current = null;\n }\n };\n };\n $[8] = deleteItem;\n $[9] = enabled;\n $[10] = filter;\n $[11] = onChange;\n $[12] = primaryKeys;\n $[13] = queriesForTable;\n $[14] = query;\n $[15] = retryTick;\n $[16] = schemaValue;\n $[17] = supabase;\n $[18] = tableNameValue;\n $[19] = upsertItem;\n $[20] = t2;\n } else {\n t2 = $[20];\n }\n let t3;\n if ($[21] !== primaryKeys) {\n t3 = primaryKeys.join(\",\");\n $[21] = primaryKeys;\n $[22] = t3;\n } else {\n t3 = $[22];\n }\n let t4;\n if ($[23] !== debouncedKey || $[24] !== enabled || $[25] !== filter || $[26] !== query || $[27] !== retryTick || $[28] !== schemaValue || $[29] !== supabase || $[30] !== t3 || $[31] !== tableNameValue) {\n t4 = [supabase, tableNameValue, schemaValue, enabled, filter, query, t3, retryTick, debouncedKey];\n $[23] = debouncedKey;\n $[24] = enabled;\n $[25] = filter;\n $[26] = query;\n $[27] = retryTick;\n $[28] = schemaValue;\n $[29] = supabase;\n $[30] = t3;\n $[31] = tableNameValue;\n $[32] = t4;\n } else {\n t4 = $[32];\n }\n useEffect(t2, t4);\n let t5;\n let t6;\n if ($[33] !== enabled || $[34] !== realtimeState) {\n t5 = () => {\n if (!enabled || realtimeState === \"SUBSCRIBED\") {\n retryCountRef.current = 0;\n return;\n }\n const delay = Math.min(5000 * Math.pow(2, retryCountRef.current), 60000);\n const id = setTimeout(() => {\n setRetryTick(_temp);\n }, delay);\n return () => clearTimeout(id);\n };\n t6 = [realtimeState, enabled];\n $[33] = enabled;\n $[34] = realtimeState;\n $[35] = t5;\n $[36] = t6;\n } else {\n t5 = $[35];\n t6 = $[36];\n }\n useEffect(t5, t6);\n return realtimeState;\n}\nfunction _temp(t) {\n return t + 1;\n}","import { c as _c } from \"react/compiler-runtime\";\nimport { PostgrestSingleResponse } from \"@supabase/supabase-js\";\nimport { useEffect, useMemo } from \"react\";\nimport { ItemType } from \"@pol-studios/utils\";\nimport { encode, useQuery } from \"@supabase-cache-helpers/postgrest-react-query\";\nimport { UseQueryOptions } from \"@tanstack/react-query\";\nimport useDbRealtime from \"./useDbRealtime\";\nimport { isNullOrWhitespace } from \"@pol-studios/utils\";\nimport { UseDbQuerySingleReturn } from \"./useDbQuery\";\nimport { PostgrestParser } from \"./parser/PostgrestParser\";\ntype ConfigurationOptions<T> = {\n crossOrganization?: boolean;\n};\ntype FilterOperator = \"or\" | \"eq\" | \"neq\" | \"gt\" | \"gte\" | \"lt\" | \"lte\" | \"like\" | \"ilike\" | \"is\" | \"in\" | \"cs\" | \"cd\" | \"fts\" | \"plfts\";\ntype ValueType = number | string | boolean | null | Date | object;\ntype FilterDefinition = {\n path: string;\n alias?: string;\n operator: FilterOperator;\n negate: boolean;\n value: ValueType;\n};\ntype FilterDefinitions = (FilterComposite | FilterDefinition)[];\ntype FilterComposite = {\n or?: FilterDefinitions;\n and?: FilterDefinitions;\n};\nexport type UseDbRealtimeQueryResult<T> = UseDbQuerySingleReturn<T> & {\n realtimeStatus: \"SUBSCRIBED\" | \"TIMED_OUT\" | \"CLOSED\" | \"CHANNEL_ERROR\" | \"Loading...\";\n isRealtimeConnected: boolean;\n isRealtimeLoading: boolean;\n};\ntype DataType = Record<string, any>;\nexport function convertFilterToRealtimeQuery(filters: FilterDefinitions): string {\n function convert(filter: FilterComposite | FilterDefinition): string {\n //TODO: I just added this line to make it work\n if (!filter) return \"\";\n if (\"path\" in filter) {\n if (filter.path.includes(\".\")) return \"\";\n let valueString = filter.value?.toString() ?? \"null\";\n if (filter.operator === \"in\") {\n valueString = '(\"' + valueString.slice(2, valueString.length - 2).split(\",\").join('\",\"') + '\")';\n }\n return `${filter.path}=${filter.negate ? \"not.\" : \"\"}${filter.operator}.${valueString}`;\n } else {\n if (filter.or) {\n return `(${filter.or.map(f => convert(f)).join(\"|\")})`;\n } else if (filter.and) {\n return `(${filter.and.map(f => convert(f)).join(\"&\")})`;\n }\n }\n return \"\";\n }\n\n //todo: review later when multiple filters are available\n return convert(filters[0]);\n}\nexport function useDbRealtimeQuery(query, config, t0) {\n const $ = _c(27);\n let t1;\n if ($[0] !== t0) {\n t1 = t0 === undefined ? [\"id\" as any] : t0;\n $[0] = t0;\n $[1] = t1;\n } else {\n t1 = $[1];\n }\n const primaryKeys = t1;\n const t2 = query as any;\n let t3;\n if ($[2] !== t2) {\n t3 = new PostgrestParser(t2);\n $[2] = t2;\n $[3] = t3;\n } else {\n t3 = $[3];\n }\n const parser = t3;\n const request = useQuery(query, config as any);\n let filter;\n let selectStatement;\n let t4;\n let t5;\n if ($[4] !== parser.filters || $[5] !== parser.select || $[6] !== query || $[7] !== request.data) {\n const queryKey = encode(query, false);\n let t6;\n if ($[12] !== parser.filters || $[13] !== request.data) {\n const filterString = convertFilterToRealtimeQuery(parser.filters);\n filter = request.data && typeof request.data === \"object\" && \"id\" in request.data ? \"id=eq.\" + request.data.id : filterString;\n if (filter.includes(\"in.(\\\\\\\"\\\\\\\")\")) {\n filter = undefined;\n }\n t6 = isNullOrWhitespace(filter);\n $[12] = parser.filters;\n $[13] = request.data;\n $[14] = filter;\n $[15] = t6;\n } else {\n filter = $[14];\n t6 = $[15];\n }\n if (t6) {\n filter = undefined;\n }\n selectStatement = parser.select;\n t4 = useDbRealtime;\n t5 = queryKey.join(\"-\");\n $[4] = parser.filters;\n $[5] = parser.select;\n $[6] = query;\n $[7] = request.data;\n $[8] = filter;\n $[9] = selectStatement;\n $[10] = t4;\n $[11] = t5;\n } else {\n filter = $[8];\n selectStatement = $[9];\n t4 = $[10];\n t5 = $[11];\n }\n let t6;\n if ($[16] !== parser.schema || $[17] !== parser.table) {\n t6 = {\n schema: parser.schema,\n table: parser.table\n };\n $[16] = parser.schema;\n $[17] = parser.table;\n $[18] = t6;\n } else {\n t6 = $[18];\n }\n const t7 = typeof config?.enabled === \"boolean\" ? config.enabled : true;\n let t8;\n if ($[19] !== filter || $[20] !== t7) {\n t8 = {\n filter,\n enabled: t7\n };\n $[19] = filter;\n $[20] = t7;\n $[21] = t8;\n } else {\n t8 = $[21];\n }\n const realtimeStatus = t4(t5, selectStatement, t6, primaryKeys, t8);\n const outputRealtimeStatus = request.isFetching ? \"Loading...\" : realtimeStatus;\n const t9 = request.data as Result | null | undefined;\n const t10 = realtimeStatus == \"SUBSCRIBED\";\n let t11;\n if ($[22] !== outputRealtimeStatus || $[23] !== request || $[24] !== t10 || $[25] !== t9) {\n t11 = {\n ...request,\n data: t9,\n realtimeStatus: outputRealtimeStatus,\n isRealtimeConnected: t10,\n isRealtimeLoading: request.isFetching\n };\n $[22] = outputRealtimeStatus;\n $[23] = request;\n $[24] = t10;\n $[25] = t9;\n $[26] = t11;\n } else {\n t11 = $[26];\n }\n return t11 as UseDbRealtimeQueryResult<Result>;\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}","import { c as _c } from \"react/compiler-runtime\";\nimport { useEffect, useRef } from \"react\";\nimport { UseMutationResult } from \"@tanstack/react-query\";\nimport { isUsable } from \"@pol-studios/utils\";\nexport interface UseMutationSuccessOptions {\n successMessage?: string;\n entityName?: string;\n enabled?: boolean;\n onSuccess?: () => void;\n}\n\n/**\n * Hook to automatically show success feedback after successful mutations\n * Works with both React Native and Web platforms\n */\nexport function useMutationSuccess(mutation, t0) {\n const $ = _c(10);\n let t1;\n if ($[0] !== t0) {\n t1 = t0 === undefined ? {} : t0;\n $[0] = t0;\n $[1] = t1;\n } else {\n t1 = $[1];\n }\n const options = t1;\n const {\n successMessage,\n entityName,\n enabled: t2,\n onSuccess\n } = options;\n const enabled = t2 === undefined ? true : t2;\n const previousSuccessRef = useRef(false);\n const previousDataRef = useRef(undefined);\n let t3;\n let t4;\n if ($[2] !== enabled || $[3] !== entityName || $[4] !== mutation.data || $[5] !== mutation.isSuccess || $[6] !== onSuccess || $[7] !== successMessage) {\n t3 = () => {\n if (!enabled) {\n return;\n }\n const isSuccess = mutation.isSuccess;\n const hasNewData = mutation.data !== previousDataRef.current;\n if (isSuccess && hasNewData && !previousSuccessRef.current) {\n const message = successMessage || getDefaultSuccessMessage(entityName);\n if (typeof window !== \"undefined\") {\n try {\n const {\n toast\n } = require(\"@pol-studios/hooks\");\n toast.toast({\n title: \"Success\",\n description: message\n });\n } catch {}\n } else {\n try {\n const {\n Toast\n } = require(\"toastify-react-native\");\n Toast.success(message);\n } catch {}\n }\n onSuccess?.();\n }\n previousSuccessRef.current = isSuccess;\n previousDataRef.current = mutation.data;\n };\n t4 = [mutation.isSuccess, mutation.data, enabled, successMessage, entityName, onSuccess];\n $[2] = enabled;\n $[3] = entityName;\n $[4] = mutation.data;\n $[5] = mutation.isSuccess;\n $[6] = onSuccess;\n $[7] = successMessage;\n $[8] = t3;\n $[9] = t4;\n } else {\n t3 = $[8];\n t4 = $[9];\n }\n useEffect(t3, t4);\n return mutation;\n}\n\n/**\n * Generates a default success message based on entity name\n */\nfunction getDefaultSuccessMessage(entityName?: string): string {\n if (!entityName) {\n return \"Saved successfully\";\n }\n return `${entityName} saved successfully`;\n}\n\n/**\n * Hook for React Native that uses native toast/alert system\n * @deprecated Use useMutationSuccess instead - it auto-detects platform\n */\nexport function useMutationSuccessRN(mutation, t0) {\n const $ = _c(2);\n let t1;\n if ($[0] !== t0) {\n t1 = t0 === undefined ? {} : t0;\n $[0] = t0;\n $[1] = t1;\n } else {\n t1 = $[1];\n }\n const options = t1;\n return useMutationSuccess(mutation, options);\n}","/**\n * V3 Data Layer Adapter Types\n *\n * Extended types for the adapter layer that complement the core DataAdapter interface.\n * These types support the Strategy pattern for routing queries to different backends.\n */\n\nimport type { QueryOptions, DatabaseSchema } from \"../core/types\";\n\n// =============================================================================\n// Query Result Types\n// =============================================================================\n\n/**\n * Result from adapter query operations.\n * Extends the basic array with optional count for pagination.\n */\nexport interface AdapterQueryResult<T> {\n /** The queried data */\n data: T[];\n /** Total count of matching records (for pagination) */\n count?: number;\n}\n\n// =============================================================================\n// Table-Aware Data Adapter Interface\n// =============================================================================\n\n/**\n * Extended adapter interface that accepts table name for multi-table routing.\n *\n * This interface is used by the AdapterRegistry to provide table-aware adapters\n * that can handle multiple tables with a single adapter instance.\n *\n * Differences from core DataAdapter:\n * - Includes table name parameter in all methods\n * - Returns AdapterQueryResult with optional count\n * - Supports optional subscribe method for reactivity\n */\nexport interface TableDataAdapter {\n /**\n * Unique identifier for the adapter type\n */\n readonly name: string;\n\n // ===========================================================================\n // Query Operations\n // ===========================================================================\n\n /**\n * Execute a query and return results\n *\n * @param table - The table name to query\n * @param options - Query options (select, where, orderBy, limit, offset)\n * @returns Promise resolving to query results with optional count\n */\n query<T>(table: string, options: QueryOptions): Promise<AdapterQueryResult<T>>;\n\n /**\n * Query a single record by ID\n *\n * @param table - The table name to query\n * @param id - The record ID\n * @param options - Optional query options (mainly for select)\n * @returns Promise resolving to the record or null if not found\n */\n queryById?<T>(table: string, id: string, options?: Pick<QueryOptions, \"select\">): Promise<T | null>;\n\n /**\n * Subscribe to real-time changes on a query.\n * Not all adapters support this - it's optional.\n *\n * @param table - The table name to watch\n * @param options - Query options to filter what to watch\n * @param callback - Function called with updated data\n * @returns Unsubscribe function\n */\n subscribe?<T>(table: string, options: QueryOptions, callback: (data: T[]) => void): () => void;\n\n // ===========================================================================\n // Mutation Operations\n // ===========================================================================\n\n /**\n * Insert a new record\n *\n * @param table - The table name\n * @param data - The data to insert\n * @returns Promise resolving to the inserted record\n */\n insert<T>(table: string, data: Partial<T>): Promise<T>;\n\n /**\n * Update an existing record by ID\n *\n * @param table - The table name\n * @param id - The record ID to update\n * @param data - The data to update\n * @returns Promise resolving to the updated record\n */\n update<T>(table: string, id: string, data: Partial<T>): Promise<T>;\n\n /**\n * Upsert (insert or update) a record\n * If the record has an ID and exists, it will be updated.\n * Otherwise, a new record will be inserted.\n *\n * @param table - The table name\n * @param data - The data to upsert\n * @returns Promise resolving to the upserted record\n */\n upsert<T>(table: string, data: Partial<T>): Promise<T>;\n\n /**\n * Delete a record by ID\n *\n * @param table - The table name\n * @param id - The record ID to delete\n * @returns Promise that resolves when deletion is complete\n */\n delete(table: string, id: string): Promise<void>;\n}\n\n// =============================================================================\n// Adapter Factory Types\n// =============================================================================\n\n/**\n * Configuration for creating an adapter\n */\nexport interface AdapterConfig {\n /**\n * The strategy type to create\n */\n strategy: \"powersync\" | \"supabase\" | \"cached\" | \"hybrid\";\n\n /**\n * Additional strategy-specific configuration\n */\n [key: string]: unknown;\n}\n\n/**\n * Factory interface for creating adapters\n */\nexport interface AdapterFactory {\n /**\n * Create a new adapter instance based on configuration\n *\n * @param config - Adapter configuration\n * @returns The created adapter instance\n */\n create(config: AdapterConfig): TableDataAdapter;\n}\n\n// =============================================================================\n// Adapter Capability Types\n// =============================================================================\n\n/**\n * Describes the capabilities of an adapter\n */\nexport interface AdapterCapabilities {\n /**\n * Whether the adapter supports real-time subscriptions\n */\n supportsSubscribe: boolean;\n\n /**\n * Whether the adapter works offline\n */\n supportsOffline: boolean;\n\n /**\n * Whether the adapter caches data locally\n */\n supportsCache: boolean;\n\n /**\n * Whether the adapter syncs data bidirectionally\n */\n supportsSync: boolean;\n}\n\n/**\n * Extended adapter interface with capability reporting\n */\nexport interface CapableDataAdapter extends TableDataAdapter {\n /**\n * Get the capabilities of this adapter\n */\n readonly capabilities: AdapterCapabilities;\n}\n\n// =============================================================================\n// Adapter Initialization Types\n// =============================================================================\n\n/**\n * Dependencies required to initialize adapters.\n * Uses 'unknown' type for external dependencies to allow proper typing\n * when concrete implementations are provided.\n */\nexport interface AdapterDependencies {\n /**\n * PowerSync database instance\n * Will be typed as PowerSyncDatabase when PowerSync is integrated\n */\n powerSync: unknown;\n\n /**\n * Supabase client instance\n * Will be typed as SupabaseClient when imported\n */\n supabase: unknown;\n\n /**\n * TanStack Query client for caching\n * Will be typed as QueryClient when imported\n */\n queryClient: unknown;\n\n /**\n * Database schema for relationship resolution\n */\n schema: DatabaseSchema;\n}\n\n// =============================================================================\n// Adapter Strategy Constants\n// =============================================================================\n\n/**\n * String literals for adapter strategy types\n */\nexport const ADAPTER_STRATEGIES = {\n POWERSYNC: \"powersync\",\n SUPABASE: \"supabase\",\n CACHED: \"cached\",\n HYBRID: \"hybrid\",\n AUTO: \"auto\"\n} as const;\n\n// =============================================================================\n// Auto-Detection Strategy Types\n// =============================================================================\n\n// Re-export AutoStrategy from core types for convenience\nexport type { AutoStrategy } from \"../core/types\";\n\n/**\n * Type for adapter strategy values\n */\nexport type AdapterStrategyType = (typeof ADAPTER_STRATEGIES)[keyof typeof ADAPTER_STRATEGIES];","/**\n * Adapter Auto-Detector\n *\n * Detects available backends (PowerSync, Supabase) at runtime and recommends\n * the best one to use based on availability and configuration preferences.\n *\n * This enables the V3 data layer to automatically select the optimal backend\n * for offline-first or online-first experiences.\n */\n\nimport type { SupabaseClient } from \"@supabase/supabase-js\";\nimport type { PowerSyncDatabase } from \"../query/executor\";\n\n// React Native global for dev mode detection\ndeclare const __DEV__: boolean | undefined;\n\n// =============================================================================\n// Enums\n// =============================================================================\n\n/**\n * Status of a backend adapter\n */\nexport enum BackendStatus {\n /** Backend is available and ready to use */\n AVAILABLE = \"available\",\n /** Backend is initializing (e.g., PowerSync syncing) */\n INITIALIZING = \"initializing\",\n /** Backend is not available */\n UNAVAILABLE = \"unavailable\",\n}\n\n// =============================================================================\n// Types\n// =============================================================================\n\n/**\n * Result of auto-detection\n */\nexport interface AutoDetectionResult {\n /** PowerSync availability status */\n powerSyncStatus: BackendStatus;\n /** Supabase availability status */\n supabaseStatus: BackendStatus;\n /** Recommended backend to use */\n recommendedBackend: \"powersync\" | \"supabase\";\n /** Whether device is online */\n isOnline: boolean;\n /** Reason for recommendation */\n reason: string;\n}\n\n/**\n * Sync status information from PowerSync\n */\nexport interface SyncStatusInfo {\n /** Whether PowerSync has completed at least one full sync */\n hasSynced: boolean;\n /** Whether connected to PowerSync service */\n connected: boolean;\n /** Whether currently connecting */\n connecting: boolean;\n /** Network connectivity status from platform adapter (NetInfo on React Native) */\n isOnline?: boolean;\n}\n\n/**\n * Options for auto-detection\n */\nexport interface AutoDetectorOptions {\n /** Prefer PowerSync when available (default: true) */\n preferPowerSync?: boolean;\n /** Timeout for status checks in ms (default: 1000) */\n statusCheckTimeout?: number;\n /**\n * Use Supabase for queries until PowerSync completes initial sync.\n * When true, queries return online data while syncing.\n * @default true\n */\n useOnlineUntilSynced?: boolean;\n}\n\n/**\n * Listener for backend change events\n */\nexport type BackendChangeListener = (result: AutoDetectionResult) => void;\n\n// =============================================================================\n// AdapterAutoDetector Class\n// =============================================================================\n\n/**\n * Detects available backends and recommends the best one to use.\n *\n * The auto-detector checks for PowerSync and Supabase availability and\n * makes intelligent recommendations based on:\n * - Backend availability\n * - Network connectivity\n * - User preferences (preferPowerSync option)\n *\n * @example\n * ```typescript\n * const detector = new AdapterAutoDetector(powerSyncDb, supabaseClient, {\n * preferPowerSync: true,\n * });\n *\n * const result = detector.detect();\n * console.log(`Using ${result.recommendedBackend}: ${result.reason}`);\n * ```\n */\nexport class AdapterAutoDetector {\n private options: Required<AutoDetectorOptions>;\n private listeners: Set<BackendChangeListener> = new Set();\n private lastResult: AutoDetectionResult | null = null;\n private syncStatus: SyncStatusInfo | null = null;\n constructor(private powerSyncDb: PowerSyncDatabase | null, private supabase: SupabaseClient | null, options: AutoDetectorOptions = {}) {\n this.options = {\n preferPowerSync: options.preferPowerSync ?? true,\n statusCheckTimeout: options.statusCheckTimeout ?? 1000,\n useOnlineUntilSynced: options.useOnlineUntilSynced ?? true\n };\n }\n\n /**\n * Update the sync status from PowerSync.\n * Called when sync status changes to re-evaluate backend recommendation.\n *\n * @param status - Current sync status or null if not available\n */\n updateSyncStatus(status: SyncStatusInfo | null): void {\n const hadSynced = this.syncStatus?.hasSynced;\n const hasSyncedNow = status?.hasSynced;\n const changed = hadSynced !== hasSyncedNow;\n this.syncStatus = status;\n if (changed) {\n // Re-detect to potentially switch backends\n this.detect();\n }\n }\n\n /**\n * Get current sync status.\n * @returns Current sync status or null\n */\n getSyncStatus(): SyncStatusInfo | null {\n return this.syncStatus;\n }\n\n // ===========================================================================\n // Main Detection Methods\n // ===========================================================================\n\n /**\n * Detect backend availability and recommend best option.\n *\n * The detection logic follows this priority:\n * 1. If preferPowerSync is true and PowerSync is available, use PowerSync\n * 2. If PowerSync is initializing and online with Supabase available, use Supabase temporarily\n * 3. If online with Supabase available, use Supabase\n * 4. If offline but PowerSync available, use PowerSync (offline mode)\n * 5. If offline and PowerSync exists (even if initializing), use PowerSync local data\n * 6. Default to Supabase as fallback\n *\n * @returns Detection result with recommendation and reasoning\n */\n detect(): AutoDetectionResult {\n const powerSyncStatus = this.detectPowerSyncStatus();\n const supabaseStatus = this.detectSupabaseStatus();\n const isOnline = this.checkOnlineStatus();\n let recommendedBackend: \"powersync\" | \"supabase\";\n let reason: string;\n\n // Decision logic\n if (this.options.preferPowerSync && powerSyncStatus === BackendStatus.AVAILABLE) {\n recommendedBackend = \"powersync\";\n reason = \"PowerSync is available and preferred for offline-first experience\";\n } else if (powerSyncStatus === BackendStatus.INITIALIZING && isOnline && supabaseStatus === BackendStatus.AVAILABLE) {\n recommendedBackend = \"supabase\";\n reason = \"PowerSync initial sync in progress; using Supabase for fresh data\";\n } else if (supabaseStatus === BackendStatus.AVAILABLE && isOnline) {\n recommendedBackend = \"supabase\";\n reason = \"Using Supabase direct connection\";\n } else if (powerSyncStatus === BackendStatus.AVAILABLE) {\n // Offline but PowerSync available\n recommendedBackend = \"powersync\";\n reason = \"Offline mode using PowerSync local data\";\n } else if (!isOnline && this.powerSyncDb) {\n // Offline with PowerSync database available (even if initial sync incomplete)\n // Use local data - some data is better than no data\n recommendedBackend = \"powersync\";\n reason = \"Offline mode - using PowerSync local data (initial sync may be incomplete)\";\n } else {\n // Fallback - try Supabase even if not confirmed available\n recommendedBackend = \"supabase\";\n reason = \"No confirmed available backend; defaulting to Supabase\";\n }\n const result: AutoDetectionResult = {\n powerSyncStatus,\n supabaseStatus,\n recommendedBackend,\n isOnline,\n reason\n };\n\n // Store last result and notify listeners if changed\n if (this.hasResultChanged(result)) {\n this.lastResult = result;\n this.notifyListeners(result);\n }\n return result;\n }\n\n /**\n * Check if PowerSync is available.\n *\n * PowerSync status depends on:\n * 1. Database instance exists\n * 2. If useOnlineUntilSynced is true, also checks if initial sync completed\n *\n * @returns PowerSync backend status\n */\n detectPowerSyncStatus(): BackendStatus {\n if (!this.powerSyncDb) {\n return BackendStatus.UNAVAILABLE;\n }\n try {\n // Check if db instance has required methods\n if (typeof this.powerSyncDb.getAll !== \"function\") {\n return BackendStatus.INITIALIZING;\n }\n\n // If useOnlineUntilSynced is enabled and we have sync status,\n // treat as INITIALIZING until first sync completes\n if (this.options.useOnlineUntilSynced && this.syncStatus) {\n if (!this.syncStatus.hasSynced) {\n return BackendStatus.INITIALIZING;\n }\n }\n return BackendStatus.AVAILABLE;\n } catch {\n return BackendStatus.INITIALIZING;\n }\n }\n\n /**\n * Check if Supabase is available.\n *\n * Supabase is considered available if we have a client instance.\n * The actual network connectivity is checked separately via checkOnlineStatus().\n *\n * @returns Supabase backend status\n */\n detectSupabaseStatus(): BackendStatus {\n if (!this.supabase) {\n return BackendStatus.UNAVAILABLE;\n }\n\n // Supabase client exists, assume available (actual network check is async)\n // The from() method is a good indicator that the client is properly initialized\n try {\n if (typeof this.supabase.from === \"function\") {\n return BackendStatus.AVAILABLE;\n }\n return BackendStatus.UNAVAILABLE;\n } catch {\n return BackendStatus.UNAVAILABLE;\n }\n }\n\n /**\n * Check if device is online.\n *\n * Prefers the sync status's isOnline property if available (from React Native NetInfo).\n * Falls back to navigator.onLine in browser environments.\n * Returns true by default for other environments.\n *\n * @returns Whether the device has network connectivity\n */\n checkOnlineStatus(): boolean {\n // Use sync status isOnline if available (from React Native NetInfo via platform adapter)\n if (this.syncStatus?.isOnline !== undefined) {\n return this.syncStatus.isOnline;\n }\n\n // Browser environment fallback\n if (typeof window !== \"undefined\" && typeof navigator !== \"undefined\") {\n return navigator.onLine;\n }\n\n // Default to online for unknown environments\n return true;\n }\n\n // ===========================================================================\n // Instance Management Methods\n // ===========================================================================\n\n /**\n * Update PowerSync instance (e.g., when it becomes available).\n *\n * @param db - New PowerSync database instance or null\n */\n setPowerSync(db: PowerSyncDatabase | null): void {\n this.powerSyncDb = db;\n }\n\n /**\n * Update Supabase instance.\n *\n * @param supabase - New Supabase client instance or null\n */\n setSupabase(supabase: SupabaseClient | null): void {\n this.supabase = supabase;\n }\n\n /**\n * Get current PowerSync instance.\n *\n * @returns Current PowerSync database instance or null\n */\n getPowerSync(): PowerSyncDatabase | null {\n return this.powerSyncDb;\n }\n\n /**\n * Get current Supabase instance.\n *\n * @returns Current Supabase client instance or null\n */\n getSupabase(): SupabaseClient | null {\n return this.supabase;\n }\n\n // ===========================================================================\n // Options Management\n // ===========================================================================\n\n /**\n * Update detector options.\n *\n * @param options - New options to merge with existing\n */\n setOptions(options: Partial<AutoDetectorOptions>): void {\n this.options = {\n ...this.options,\n ...options\n };\n }\n\n /**\n * Get current detector options.\n *\n * @returns Current detector options\n */\n getOptions(): Required<AutoDetectorOptions> {\n return {\n ...this.options\n };\n }\n\n // ===========================================================================\n // Listener Management\n // ===========================================================================\n\n /**\n * Add a listener for backend change events.\n *\n * @param listener - Callback to invoke when detection result changes\n * @returns Function to remove the listener\n */\n addListener(listener: BackendChangeListener): () => void {\n this.listeners.add(listener);\n return () => this.listeners.delete(listener);\n }\n\n /**\n * Remove a listener for backend change events.\n *\n * @param listener - Listener to remove\n */\n removeListener(listener: BackendChangeListener): void {\n this.listeners.delete(listener);\n }\n\n /**\n * Get the last detection result.\n *\n * @returns Last detection result or null if never detected\n */\n getLastResult(): AutoDetectionResult | null {\n return this.lastResult;\n }\n\n // ===========================================================================\n // Private Helper Methods\n // ===========================================================================\n\n /**\n * Check if the detection result has changed from the last result.\n */\n private hasResultChanged(result: AutoDetectionResult): boolean {\n if (!this.lastResult) {\n return true;\n }\n return this.lastResult.powerSyncStatus !== result.powerSyncStatus || this.lastResult.supabaseStatus !== result.supabaseStatus || this.lastResult.recommendedBackend !== result.recommendedBackend || this.lastResult.isOnline !== result.isOnline;\n }\n\n /**\n * Notify all listeners of a detection result change.\n */\n private notifyListeners(result: AutoDetectionResult): void {\n // Log backend switches in dev mode (React Native __DEV__ or NODE_ENV)\n const isDev = typeof __DEV__ !== \"undefined\" ? __DEV__ : process.env.NODE_ENV !== \"production\";\n if (isDev) {\n const prevBackend = this.lastResult?.recommendedBackend;\n if (prevBackend && prevBackend !== result.recommendedBackend) {\n console.log(`[DataLayer] Backend switched: ${prevBackend} → ${result.recommendedBackend}`, `| Reason: ${result.reason}`);\n }\n // Log when using Supabase fallback (not PowerSync)\n if (result.recommendedBackend === \"supabase\" && this.options.preferPowerSync) {\n console.log(`[DataLayer] Using online fallback (Supabase)`, `| PowerSync: ${result.powerSyncStatus}`, `| Online: ${result.isOnline}`, `| Reason: ${result.reason}`);\n }\n }\n\n // Convert to array to avoid Set iteration issues with older targets\n Array.from(this.listeners).forEach(listener => {\n try {\n listener(result);\n } catch (error) {\n console.error(\"Error in backend change listener:\", error);\n }\n });\n }\n}\n\n// =============================================================================\n// Factory Function\n// =============================================================================\n\n/**\n * Create an AdapterAutoDetector instance.\n *\n * @param powerSyncDb - PowerSync database instance or null\n * @param supabase - Supabase client instance or null\n * @param options - Detection options\n * @returns New AdapterAutoDetector instance\n *\n * @example\n * ```typescript\n * const detector = createAdapterAutoDetector(powerSyncDb, supabaseClient, {\n * preferPowerSync: true,\n * statusCheckTimeout: 2000,\n * });\n *\n * const { recommendedBackend, reason } = detector.detect();\n * ```\n */\nexport function createAdapterAutoDetector(powerSyncDb: PowerSyncDatabase | null, supabase: SupabaseClient | null, options?: AutoDetectorOptions): AdapterAutoDetector {\n return new AdapterAutoDetector(powerSyncDb, supabase, options);\n}","/**\n * V3 Data Layer Adapter Registry\n *\n * Factory that creates and manages adapter instances based on table configuration.\n * Uses lazy initialization to create adapters on first access.\n */\n\nimport type { DataLayerConfig, TableStrategy, DatabaseSchema, AutoStrategy, PowerSyncStrategy, HybridStrategy } from \"../core/types\";\nimport type { TableDataAdapter, AdapterDependencies } from \"./types\";\nimport { AdapterAutoDetector, BackendStatus, type AutoDetectionResult } from \"./auto-detector\";\n\n// =============================================================================\n// Alias Utilities\n// =============================================================================\n\n/**\n * Strip schema prefix from a table name.\n *\n * Examples:\n * - \"core.Profile\" → \"Profile\"\n * - \"billing.Invoice\" → \"Invoice\"\n * - \"Profile\" → \"Profile\" (no schema, unchanged)\n *\n * @param tableName - Table name, optionally schema-qualified\n * @returns Table name without schema prefix\n */\nexport function stripSchemaPrefix(tableName: string): string {\n if (!tableName.includes('.')) {\n return tableName;\n }\n return tableName.split('.')[1];\n}\n\n/**\n * Generate a PowerSync alias from a schema-qualified table name.\n * Use this when there are conflicting table names across schemas.\n *\n * Examples:\n * - \"core.Profile\" → \"CoreProfile\"\n * - \"billing.Invoice\" → \"BillingInvoice\"\n * - \"Profile\" → \"Profile\" (no schema, unchanged)\n *\n * @param tableName - Table name, optionally schema-qualified\n * @returns PascalCase alias suitable for PowerSync schema\n */\nexport function generatePowerSyncAlias(tableName: string): string {\n if (!tableName.includes('.')) {\n return tableName;\n }\n const [schema, table] = tableName.split('.');\n // Capitalize first letter of schema\n const pascalSchema = schema.charAt(0).toUpperCase() + schema.slice(1);\n return `${pascalSchema}${table}`;\n}\n\n/**\n * Get the PowerSync alias for a table from its strategy config.\n *\n * Resolution order:\n * 1. Explicit alias in strategy config → use it\n * 2. Schema-qualified name → strip schema (e.g., \"core.Profile\" → \"Profile\")\n * 3. Unqualified name → use as-is\n *\n * Note: If you have conflicting table names (e.g., both \"core.Profile\" and \"public.Profile\"),\n * you MUST set an explicit `alias` in the config for at least one of them.\n *\n * @param tableName - Table name (may be schema-qualified)\n * @param strategy - Table strategy config\n * @returns The alias to use in PowerSync schema\n */\nexport function getPowerSyncAlias(tableName: string, strategy: TableStrategy | undefined): string {\n // Check for explicit alias in strategy\n if (strategy && (strategy.strategy === 'powersync' || strategy.strategy === 'hybrid')) {\n const typedStrategy = strategy as PowerSyncStrategy | HybridStrategy;\n if (typedStrategy.alias) {\n return typedStrategy.alias;\n }\n }\n\n // Default: strip schema prefix (e.g., \"core.Profile\" → \"Profile\")\n return stripSchemaPrefix(tableName);\n}\n\n// =============================================================================\n// Adapter Registry Class\n// =============================================================================\n\n/**\n * Registry that manages and provides adapters based on table configuration.\n *\n * The registry:\n * - Stores configuration for table strategies\n * - Lazily creates adapters when first accessed\n * - Caches created adapters for reuse\n * - Provides default fallback for unconfigured tables\n *\n * Usage:\n * ```typescript\n * const registry = createAdapterRegistry(config);\n *\n * // Later, when providers initialize:\n * registry.setPowerSyncAdapter(powerSyncAdapter);\n * registry.setSupabaseAdapter(supabaseAdapter);\n *\n * // Get adapter for a table:\n * const adapter = registry.getAdapter(\"Project\");\n * ```\n */\nexport class AdapterRegistry {\n /**\n * Cache of created adapters by table name\n */\n private adapters: Map<string, TableDataAdapter> = new Map();\n\n /**\n * PowerSync adapter instance (set during initialization)\n */\n private powerSyncAdapter: TableDataAdapter | null = null;\n\n /**\n * Supabase adapter instance (set during initialization)\n */\n private supabaseAdapter: TableDataAdapter | null = null;\n\n /**\n * Cached adapter instance (wraps Supabase with TanStack Query)\n */\n private cachedAdapter: TableDataAdapter | null = null;\n\n /**\n * Dependencies for creating adapters\n */\n private deps: AdapterDependencies | null = null;\n\n /**\n * Whether the registry has been initialized with adapters\n */\n private _isInitialized = false;\n\n /**\n * Auto-detector instance for automatic backend selection\n */\n private autoDetector: AdapterAutoDetector | null = null;\n\n /**\n * Listeners for backend change events\n */\n private backendChangeListeners: Set<(backend: \"powersync\" | \"supabase\") => void> = new Set();\n\n /**\n * Last auto-detection result for debugging and status\n */\n private lastDetectionResult: AutoDetectionResult | null = null;\n\n /**\n * Create a new adapter registry\n *\n * @param config - Data layer configuration with table strategies\n */\n constructor(private config: DataLayerConfig) {}\n\n // ===========================================================================\n // Initialization\n // ===========================================================================\n\n /**\n * Check if the registry has been initialized\n */\n get isInitialized(): boolean {\n return this._isInitialized;\n }\n\n /**\n * Initialize the registry with dependencies.\n * Called by DataLayerProvider when PowerSync and Supabase are ready.\n *\n * @param deps - Dependencies needed to create adapters\n */\n initialize(deps: AdapterDependencies): void {\n this.deps = deps;\n\n // Actual adapter instantiation is deferred to setters\n // This allows Wave 2 agents to provide concrete implementations\n this._isInitialized = true;\n }\n\n /**\n * Set the PowerSync adapter instance\n *\n * @param adapter - PowerSync adapter implementation\n */\n setPowerSyncAdapter(adapter: TableDataAdapter): void {\n this.powerSyncAdapter = adapter;\n }\n\n /**\n * Set the Supabase adapter instance\n *\n * @param adapter - Supabase adapter implementation\n */\n setSupabaseAdapter(adapter: TableDataAdapter): void {\n this.supabaseAdapter = adapter;\n }\n\n /**\n * Set the Cached adapter instance\n *\n * @param adapter - Cached adapter implementation\n */\n setCachedAdapter(adapter: TableDataAdapter): void {\n this.cachedAdapter = adapter;\n }\n\n /**\n * Initialize auto-detection with a detector instance\n *\n * @param detector - The auto-detector to use\n */\n initializeAutoDetection(detector: AdapterAutoDetector): void {\n this.autoDetector = detector;\n\n // Listen for backend changes\n detector.addListener(result => {\n this.lastDetectionResult = result;\n this.notifyBackendChange(result.recommendedBackend);\n });\n }\n\n // ===========================================================================\n // Adapter Access\n // ===========================================================================\n\n /**\n * Get the appropriate adapter for a table based on configuration.\n *\n * The adapter is selected based on the table's strategy in config.tables:\n * - \"powersync\": Returns PowerSyncAdapter\n * - \"supabase\": Returns SupabaseAdapter\n * - \"cached\": Returns CachedAdapter (wrapping Supabase)\n * - \"hybrid\": Returns HybridAdapter (combining PowerSync + Cached)\n * - \"auto\": Uses auto-detection to select the best backend\n *\n * For tables not in config, defaults to auto-detection if available,\n * otherwise falls back to SupabaseAdapter.\n *\n * Supports schema-qualified table names:\n * - \"core.Profile\" looks up config[\"core.Profile\"] first, then config[\"Profile\"]\n * - Auto-generates PowerSync alias as \"CoreProfile\" if not explicitly set\n *\n * @param table - The table name (may be schema-qualified like \"core.Profile\")\n * @returns The appropriate adapter for the table\n * @throws Error if adapters are not initialized\n */\n getAdapter(table: string): TableDataAdapter {\n // Look up strategy - try full name first, then unqualified for backward compat\n const tableWithoutSchema = table.includes('.') ? table.split('.')[1] : table;\n const strategy = this.config.tables[table] ?? this.config.tables[tableWithoutSchema];\n\n // Handle unconfigured tables or explicit auto strategy\n if (!strategy || strategy.strategy === \"auto\") {\n // IMPORTANT: Check if table exists in PowerSync schema before auto-detection\n // If the table is NOT configured for PowerSync sync, we must use Supabase\n // to avoid \"no such table\" SQLite errors when auto-detection recommends PowerSync\n if (this.powerSyncAdapter) {\n const powerSyncTableKeys = this.getPowerSyncTableKeys();\n // Check if table matches any config key (schema-qualified or unqualified)\n const isConfigured = powerSyncTableKeys.some(key => key === table || key === tableWithoutSchema || key.includes('.') && key.split('.')[1] === tableWithoutSchema);\n if (!isConfigured) {\n // Table is not in PowerSync schema - must use Supabase\n if (this.supabaseAdapter) {\n return this.supabaseAdapter;\n }\n throw new Error(`Table \"${table}\" is not configured for PowerSync sync and Supabase adapter is not available. ` + \"Either add this table to the PowerSync schema or initialize the Supabase adapter.\");\n }\n }\n return this.getAutoAdapter(strategy as AutoStrategy | undefined);\n }\n\n // For PowerSync tables, check if we should temporarily use Supabase\n // during initial sync (when hasSynced is false)\n if (strategy.strategy === \"powersync\" && this.autoDetector && this.supabaseAdapter) {\n const detection = this.autoDetector.detect();\n\n // If PowerSync is still syncing (INITIALIZING) and we're online,\n // use Supabase to show live data instead of empty local data\n if (detection.powerSyncStatus === BackendStatus.INITIALIZING && detection.isOnline) {\n return this.supabaseAdapter;\n }\n }\n\n // Check if adapter already exists for this table (only cache after sync complete)\n const existing = this.adapters.get(table);\n if (existing) {\n return existing;\n }\n\n // Create adapter lazily based on strategy\n const adapter = this.createAdapter(strategy);\n this.adapters.set(table, adapter);\n return adapter;\n }\n\n /**\n * Get the PowerSync adapter directly\n *\n * @returns PowerSync adapter or null if not initialized\n */\n getPowerSyncAdapter(): TableDataAdapter | null {\n return this.powerSyncAdapter;\n }\n\n /**\n * Get the Supabase adapter directly\n *\n * @returns Supabase adapter or null if not initialized\n */\n getSupabaseAdapter(): TableDataAdapter | null {\n return this.supabaseAdapter;\n }\n\n /**\n * Get the Cached adapter directly\n *\n * @returns Cached adapter or null if not initialized\n */\n getCachedAdapter(): TableDataAdapter | null {\n return this.cachedAdapter;\n }\n\n /**\n * Get all configured table names\n *\n * @returns Array of table names with explicit strategy configuration\n */\n getConfiguredTables(): string[] {\n return Object.keys(this.config.tables);\n }\n\n /**\n * Get the strategy for a specific table\n *\n * @param table - The table name (may include schema prefix like \"core.Profile\")\n * @returns The table strategy or undefined if not configured\n */\n getTableStrategy(table: string): TableStrategy | undefined {\n // Try full name first (e.g., \"core.Profile\"), then unqualified for backward compat\n const tableWithoutSchema = table.includes('.') ? table.split('.')[1] : table;\n return this.config.tables[table] ?? this.config.tables[tableWithoutSchema];\n }\n\n /**\n * Check if a table uses PowerSync strategy\n *\n * @param table - The table name (may include schema prefix like \"core.Profile\")\n * @returns True if table uses PowerSync or Hybrid strategy\n */\n usesPowerSync(table: string): boolean {\n const strategy = this.getTableStrategy(table);\n return strategy?.strategy === \"powersync\" || strategy?.strategy === \"hybrid\";\n }\n\n /**\n * Get all table config keys that use PowerSync (may be schema-qualified)\n *\n * @returns Array of config keys using PowerSync or Hybrid strategy\n */\n getPowerSyncTableKeys(): string[] {\n return Object.entries(this.config.tables).filter(([_, strategy]) => strategy.strategy === \"powersync\" || strategy.strategy === \"hybrid\").map(([key]) => key);\n }\n\n /**\n * Get all tables that use PowerSync (returns aliases for PowerSync schema)\n *\n * @returns Array of PowerSync table aliases\n */\n getPowerSyncTables(): string[] {\n return Object.entries(this.config.tables).filter(([_, strategy]) => strategy.strategy === \"powersync\" || strategy.strategy === \"hybrid\").map(([key, strategy]) => getPowerSyncAlias(key, strategy));\n }\n\n /**\n * Get the PowerSync alias for a table.\n * Uses explicit alias from config if set, otherwise auto-generates.\n *\n * @param table - Table name (may be schema-qualified)\n * @returns The alias to use in PowerSync schema\n */\n getTableAlias(table: string): string {\n const strategy = this.getTableStrategy(table);\n // Determine which config key matched\n const tableWithoutSchema = table.includes('.') ? table.split('.')[1] : table;\n const configKey = this.config.tables[table] ? table : tableWithoutSchema;\n return getPowerSyncAlias(configKey, strategy);\n }\n\n // ===========================================================================\n // Auto-Detection Methods\n // ===========================================================================\n\n /**\n * Get adapter using auto-detection\n *\n * @param strategy - Optional auto strategy configuration\n * @returns The automatically selected adapter\n */\n private getAutoAdapter(_strategy?: AutoStrategy): TableDataAdapter {\n // If no auto-detector, fall back to Supabase\n if (!this.autoDetector) {\n if (!this.supabaseAdapter) {\n throw new Error(\"No auto-detector configured and Supabase adapter not available. \" + \"Either initialize auto-detection or set adapters explicitly.\");\n }\n return this.supabaseAdapter;\n }\n\n // Perform detection\n const detection = this.autoDetector.detect();\n this.lastDetectionResult = detection;\n if (detection.recommendedBackend === \"powersync\") {\n if (!this.powerSyncAdapter) {\n // PowerSync recommended but not available - fall back to Supabase\n if (!this.supabaseAdapter) {\n throw new Error(\"Neither PowerSync nor Supabase adapters are available.\");\n }\n return this.supabaseAdapter;\n }\n return this.powerSyncAdapter;\n }\n\n // Supabase recommended\n if (!this.supabaseAdapter) {\n throw new Error(\"Supabase adapter not available and PowerSync not recommended.\");\n }\n return this.supabaseAdapter;\n }\n\n /**\n * Subscribe to backend changes\n *\n * @param callback - Function called when recommended backend changes\n * @returns Unsubscribe function\n */\n onBackendChange(callback: (backend: \"powersync\" | \"supabase\") => void): () => void {\n this.backendChangeListeners.add(callback);\n return () => {\n this.backendChangeListeners.delete(callback);\n };\n }\n\n /**\n * Notify listeners of backend change\n *\n * @param backend - The new recommended backend\n */\n private notifyBackendChange(backend: \"powersync\" | \"supabase\"): void {\n this.backendChangeListeners.forEach(callback => {\n try {\n callback(backend);\n } catch (error) {\n console.error(\"Error in backend change listener:\", error);\n }\n });\n }\n\n /**\n * Get the last auto-detection result\n *\n * @returns Last detection result or null if never detected\n */\n getLastDetectionResult(): AutoDetectionResult | null {\n return this.lastDetectionResult;\n }\n\n /**\n * Get the auto-detector instance\n *\n * @returns Auto-detector instance or null if not initialized\n */\n getAutoDetector(): AdapterAutoDetector | null {\n return this.autoDetector;\n }\n\n // ===========================================================================\n // Private Methods\n // ===========================================================================\n\n /**\n * Create an adapter based on the strategy type\n *\n * @param strategy - The table strategy configuration\n * @returns The created adapter\n * @throws Error if the required base adapter is not initialized\n */\n private createAdapter(strategy: TableStrategy): TableDataAdapter {\n switch (strategy.strategy) {\n case \"powersync\":\n if (!this.powerSyncAdapter) {\n throw new Error(\"PowerSync adapter not initialized. \" + \"Ensure PowerSyncAdapter is set before accessing PowerSync tables.\");\n }\n return this.powerSyncAdapter;\n case \"supabase\":\n if (!this.supabaseAdapter) {\n throw new Error(\"Supabase adapter not initialized. \" + \"Ensure SupabaseAdapter is set before accessing Supabase tables.\");\n }\n return this.supabaseAdapter;\n case \"cached\":\n // CachedAdapter wraps SupabaseAdapter with TanStack Query caching\n // Will be fully implemented when CachedAdapter class exists (Wave 2)\n if (this.cachedAdapter) {\n return this.cachedAdapter;\n }\n throw new Error(\"CachedAdapter not yet implemented. \" + \"This feature will be available in Wave 2. \" + \"For now, use 'supabase' strategy as a fallback.\");\n case \"hybrid\":\n // HybridAdapter combines PowerSync (for recent data) with Cached (for overflow)\n // Will be fully implemented when HybridAdapter class exists (Wave 2)\n throw new Error(\"HybridAdapter not yet implemented. \" + \"This feature will be available in Wave 2. \" + \"For now, use 'powersync' or 'supabase' strategy as a fallback.\");\n default:\n // Fallback to Supabase for unknown strategies\n if (!this.supabaseAdapter) {\n throw new Error(\"Supabase adapter not initialized. \" + \"Ensure SupabaseAdapter is set before accessing tables.\");\n }\n return this.supabaseAdapter;\n }\n }\n\n // ===========================================================================\n // Utility Methods\n // ===========================================================================\n\n /**\n * Clear all cached adapters.\n * Useful when configuration changes and adapters need to be recreated.\n */\n clearCache(): void {\n this.adapters.clear();\n }\n\n /**\n * Reset the registry to uninitialized state.\n * Used during cleanup or testing.\n */\n reset(): void {\n this.adapters.clear();\n this.powerSyncAdapter = null;\n this.supabaseAdapter = null;\n this.cachedAdapter = null;\n this.deps = null;\n this._isInitialized = false;\n this.autoDetector = null;\n this.backendChangeListeners.clear();\n this.lastDetectionResult = null;\n }\n\n /**\n * Dispose all adapters and clean up resources.\n * Called when the DataLayerProvider unmounts.\n */\n dispose(): void {\n this.reset();\n }\n\n /**\n * Get debug information about the registry state\n */\n getDebugInfo(): {\n isInitialized: boolean;\n hasPowerSync: boolean;\n hasSupabase: boolean;\n hasCached: boolean;\n cachedAdapterCount: number;\n configuredTableCount: number;\n powerSyncTables: string[];\n hasAutoDetector: boolean;\n lastDetectionResult: AutoDetectionResult | null;\n } {\n return {\n isInitialized: this._isInitialized,\n hasPowerSync: this.powerSyncAdapter !== null,\n hasSupabase: this.supabaseAdapter !== null,\n hasCached: this.cachedAdapter !== null,\n cachedAdapterCount: this.adapters.size,\n configuredTableCount: Object.keys(this.config.tables).length,\n powerSyncTables: this.getPowerSyncTables(),\n hasAutoDetector: this.autoDetector !== null,\n lastDetectionResult: this.lastDetectionResult\n };\n }\n}\n\n// =============================================================================\n// Factory Function\n// =============================================================================\n\n/**\n * Create a new adapter registry\n *\n * @param config - Data layer configuration\n * @returns A new AdapterRegistry instance\n *\n * @example\n * ```typescript\n * const config: DataLayerConfig = {\n * schema: databaseSchema,\n * connections: { ... },\n * tables: {\n * Project: { strategy: \"powersync\", syncScope: \"activeProject\" },\n * AuditLog: { strategy: \"supabase\" },\n * Report: { strategy: \"cached\", cacheTime: 60000 },\n * },\n * scopes: { ... },\n * defaults: { syncMode: \"live\" },\n * };\n *\n * const registry = createAdapterRegistry(config);\n *\n * // In provider:\n * registry.setPowerSyncAdapter(new PowerSyncAdapter(db, schema));\n * registry.setSupabaseAdapter(new SupabaseAdapter(supabase));\n *\n * // In hooks:\n * const adapter = registry.getAdapter(\"Project\"); // Returns PowerSyncAdapter\n * ```\n */\nexport function createAdapterRegistry(config: DataLayerConfig): AdapterRegistry {\n return new AdapterRegistry(config);\n}","/**\n * V3 Data Layer - Supabase Adapter\n *\n * Implements the TableDataAdapter interface for direct Supabase/PostgREST queries.\n * This adapter is used for online-only data access without local caching.\n */\n\nimport { SupabaseClient } from \"@supabase/supabase-js\";\nimport type { TableDataAdapter, AdapterQueryResult, CapableDataAdapter, AdapterCapabilities } from \"./types\";\nimport type { QueryOptions, WhereClause, WhereOperators, DatabaseSchema } from \"../core/types\";\n\n// =============================================================================\n// Type Definitions\n// =============================================================================\n\n/**\n * Supabase filter builder type - uses any to avoid complex generics\n * that would require knowledge of the full database schema type\n */\ntype PostgrestFilterBuilder = ReturnType<ReturnType<SupabaseClient[\"from\"]>[\"select\"]>;\n\n// =============================================================================\n// Supabase Adapter Implementation\n// =============================================================================\n\n/**\n * Adapter for querying Supabase directly via PostgREST API.\n *\n * This adapter:\n * - Queries Supabase directly (no local caching)\n * - Supports real-time subscriptions via Supabase Realtime\n * - Works only when online\n * - Uses Supabase's native select embedding for relations\n *\n * @example\n * ```typescript\n * const adapter = createSupabaseAdapter(supabaseClient, schema);\n *\n * // Query with relations\n * const result = await adapter.query<Project>(\"projects\", {\n * select: \"*, client:clients(*), tasks(*)\",\n * where: { status: \"active\" },\n * orderBy: [{ field: \"created_at\", direction: \"desc\" }],\n * limit: 10\n * });\n * ```\n */\nexport class SupabaseAdapter implements TableDataAdapter, CapableDataAdapter {\n readonly name = \"supabase\";\n readonly capabilities: AdapterCapabilities = {\n supportsSubscribe: true,\n supportsOffline: false,\n supportsCache: false,\n supportsSync: false\n };\n constructor(private supabase: SupabaseClient, private schema: DatabaseSchema) {}\n\n // ===========================================================================\n // Private Helper - Table Name Parsing\n // ===========================================================================\n\n /**\n * Parse a table identifier to extract schema and table name.\n * Handles schema-qualified names like \"core.Profile\" -> { schema: \"core\", tableName: \"Profile\" }\n *\n * @param table - The table name, optionally schema-qualified (e.g., \"users\" or \"core.Profile\")\n * @returns Object with schema (defaults to \"public\") and tableName\n */\n private parseTableIdentifier(table: string): {\n schema: string;\n tableName: string;\n } {\n if (table.includes(\".\")) {\n const [schema, ...rest] = table.split(\".\");\n return {\n schema,\n tableName: rest.join(\".\")\n };\n }\n return {\n schema: \"public\",\n tableName: table\n };\n }\n\n // ===========================================================================\n // Query Operations\n // ===========================================================================\n\n /**\n * Execute a query and return results with optional count\n *\n * @param table - The table name to query\n * @param options - Query options (select, where, orderBy, limit, offset)\n * @returns Promise resolving to query results with optional count\n */\n async query<T>(table: string, options: QueryOptions): Promise<AdapterQueryResult<T>> {\n const {\n select = \"*\",\n where,\n orderBy,\n limit,\n offset\n } = options;\n const {\n schema,\n tableName\n } = this.parseTableIdentifier(table);\n\n // Start building the query with count option for pagination\n let query = this.supabase.schema(schema).from(tableName).select(select, {\n count: \"exact\"\n });\n\n // Apply where clauses\n if (where) {\n query = this.applyWhereClause(query as any, where) as any;\n }\n\n // Apply ordering\n if (orderBy && orderBy.length > 0) {\n for (const order of orderBy) {\n query = query.order(order.field, {\n ascending: order.direction === \"asc\"\n });\n }\n }\n\n // Apply pagination\n if (limit !== undefined && offset !== undefined) {\n // Use range for offset + limit (range is inclusive, so end = offset + limit - 1)\n query = query.range(offset, offset + limit - 1);\n } else if (limit !== undefined) {\n query = query.limit(limit);\n }\n const {\n data,\n error,\n count\n } = await query;\n if (error) {\n throw new Error(`Supabase query error on ${table}: ${error.message}`);\n }\n return {\n data: data as T[] ?? [],\n count: count ?? undefined\n };\n }\n\n /**\n * Query a single record by ID\n *\n * @param table - The table name to query\n * @param id - The record ID\n * @param options - Optional query options (mainly for select)\n * @returns Promise resolving to the record or null if not found\n */\n async queryById<T>(table: string, id: string, options?: Pick<QueryOptions, \"select\">): Promise<T | null> {\n const select = options?.select ?? \"*\";\n const {\n schema,\n tableName\n } = this.parseTableIdentifier(table);\n const {\n data,\n error\n } = await this.supabase.schema(schema).from(tableName).select(select).eq(\"id\", id).single();\n if (error) {\n // PGRST116 = no rows returned (not an error, just no data)\n if (error.code === \"PGRST116\") {\n return null;\n }\n throw new Error(`Supabase queryById error on ${table}: ${error.message}`);\n }\n return data as T;\n }\n\n // ===========================================================================\n // Mutation Operations\n // ===========================================================================\n\n /**\n * Insert a new record\n *\n * @param table - The table name\n * @param data - The data to insert\n * @returns Promise resolving to the inserted record\n */\n async insert<T>(table: string, data: Partial<T>): Promise<T> {\n const {\n schema,\n tableName\n } = this.parseTableIdentifier(table);\n const {\n data: insertedData,\n error\n } = await this.supabase.schema(schema).from(tableName).insert(data as any).select().single();\n if (error) {\n throw new Error(`Supabase insert error on ${table}: ${error.message}`);\n }\n return insertedData as T;\n }\n\n /**\n * Update an existing record by ID\n *\n * @param table - The table name\n * @param id - The record ID to update\n * @param data - The data to update\n * @returns Promise resolving to the updated record\n */\n async update<T>(table: string, id: string, data: Partial<T>): Promise<T> {\n const {\n schema,\n tableName\n } = this.parseTableIdentifier(table);\n const {\n data: updatedData,\n error\n } = await this.supabase.schema(schema).from(tableName).update(data as any).eq(\"id\", id).select().single();\n if (error) {\n throw new Error(`Supabase update error on ${table}: ${error.message}`);\n }\n return updatedData as T;\n }\n\n /**\n * Upsert (insert or update) a record\n *\n * @param table - The table name\n * @param data - The data to upsert\n * @returns Promise resolving to the upserted record\n */\n async upsert<T>(table: string, data: Partial<T>): Promise<T> {\n const {\n schema,\n tableName\n } = this.parseTableIdentifier(table);\n const {\n data: upsertedData,\n error\n } = await this.supabase.schema(schema).from(tableName).upsert(data as any, {\n onConflict: \"id\"\n }).select().single();\n if (error) {\n throw new Error(`Supabase upsert error on ${table}: ${error.message}`);\n }\n return upsertedData as T;\n }\n\n /**\n * Delete a record by ID\n *\n * @param table - The table name\n * @param id - The record ID to delete\n * @returns Promise that resolves when deletion is complete\n */\n async delete(table: string, id: string): Promise<void> {\n const {\n schema,\n tableName\n } = this.parseTableIdentifier(table);\n const {\n error\n } = await this.supabase.schema(schema).from(tableName).delete().eq(\"id\", id);\n if (error) {\n throw new Error(`Supabase delete error on ${table}: ${error.message}`);\n }\n }\n\n // ===========================================================================\n // Subscription (Real-time)\n // ===========================================================================\n\n /**\n * Subscribe to real-time changes on a query\n *\n * @param table - The table name to watch\n * @param options - Query options to filter what to watch\n * @param callback - Function called with updated data\n * @returns Unsubscribe function\n */\n subscribe<T>(table: string, options: QueryOptions, callback: (data: T[]) => void): () => void {\n const {\n schema,\n tableName\n } = this.parseTableIdentifier(table);\n\n // Create a unique channel name for this subscription\n const channelName = `v3:${table}:${Date.now()}`;\n const channel = this.supabase.channel(channelName).on(\"postgres_changes\", {\n event: \"*\",\n schema: schema,\n table: tableName\n }, async () => {\n // Re-fetch data when changes occur and call the callback\n try {\n const {\n data\n } = await this.query<T>(table, options);\n callback(data);\n } catch (error) {\n console.error(`Supabase subscription refetch error on ${table}:`, error);\n }\n }).subscribe();\n\n // Return unsubscribe function\n return () => {\n this.supabase.removeChannel(channel);\n };\n }\n\n // ===========================================================================\n // Private Helper Methods\n // ===========================================================================\n\n /**\n * Apply where clause filters to a Supabase query\n *\n * Converts WhereClause to Supabase filter methods:\n * - Direct value: .eq(field, value)\n * - { in: [...] }: .in(field, values)\n * - { gt: n }: .gt(field, n)\n * - { gte: n }: .gte(field, n)\n * - { lt: n }: .lt(field, n)\n * - { lte: n }: .lte(field, n)\n * - { like: s }: .ilike(field, s)\n * - { is: null }: .is(field, null)\n * - { neq: v }: .neq(field, v) or .not(field, \"is\", null)\n * - { notIn: [...] }: .not().in(field, values)\n *\n * @param query - The Supabase query builder\n * @param where - The where clause to apply\n * @returns The query with filters applied\n */\n private applyWhereClause(query: PostgrestFilterBuilder, where: WhereClause): PostgrestFilterBuilder {\n for (const [field, condition] of Object.entries(where)) {\n if (condition === null) {\n // Direct null value\n query = query.is(field, null);\n } else if (typeof condition === \"string\" || typeof condition === \"number\" || typeof condition === \"boolean\") {\n // Direct value comparison\n query = query.eq(field, condition);\n } else if (typeof condition === \"object\") {\n // WhereOperators object\n const operators = condition as WhereOperators;\n if (operators.in !== undefined) {\n query = query.in(field, operators.in);\n }\n if (operators.gt !== undefined) {\n query = query.gt(field, operators.gt);\n }\n if (operators.gte !== undefined) {\n query = query.gte(field, operators.gte);\n }\n if (operators.lt !== undefined) {\n query = query.lt(field, operators.lt);\n }\n if (operators.lte !== undefined) {\n query = query.lte(field, operators.lte);\n }\n if (operators.like !== undefined) {\n // Use ilike for case-insensitive matching (more common use case)\n query = query.ilike(field, operators.like);\n }\n if (operators.is !== undefined) {\n // operators.is should be null\n query = query.is(field, null);\n }\n if (operators.neq !== undefined) {\n if (operators.neq === null) {\n // NOT NULL\n query = query.not(field, \"is\", null);\n } else {\n query = query.neq(field, operators.neq);\n }\n }\n if (operators.notIn !== undefined) {\n // Use not filter with in\n query = query.not(field, \"in\", `(${operators.notIn.join(\",\")})`);\n }\n }\n }\n return query;\n }\n}\n\n// =============================================================================\n// Factory Function\n// =============================================================================\n\n/**\n * Create a new SupabaseAdapter instance\n *\n * @param supabase - The Supabase client instance\n * @param schema - The database schema definition\n * @returns A new SupabaseAdapter instance\n *\n * @example\n * ```typescript\n * const adapter = createSupabaseAdapter(supabaseClient, databaseSchema);\n * const projects = await adapter.query<Project>(\"projects\", {\n * where: { status: \"active\" }\n * });\n * ```\n */\nexport function createSupabaseAdapter(supabase: SupabaseClient, schema: DatabaseSchema): SupabaseAdapter {\n return new SupabaseAdapter(supabase, schema);\n}","import { FunctionsResponse } from \"@supabase/functions-js\";\nexport async function getErrorBody(response: FunctionsResponse<any>) {\n const stream = response.error.context.body as ReadableStream<Uint8Array>;\n const reader = stream.getReader();\n const {\n value\n } = await reader.read();\n const text = new TextDecoder().decode(value);\n let parsed;\n try {\n parsed = JSON.parse(text);\n } catch {\n parsed = text;\n }\n return parsed;\n}","import { c as _c } from \"react/compiler-runtime\";\nimport useSupabase from \"./useSupabase\";\nexport interface AIOptions {\n maxTokens?: number;\n temperature?: number;\n}\nexport interface AIResponse {\n success: boolean;\n data?: {\n response: string;\n };\n error?: string;\n}\nexport function useAI() {\n const $ = _c(2);\n const supabase = useSupabase();\n let t0;\n if ($[0] !== supabase) {\n const generate = async (prompt, context, options) => {\n const response = await supabase.functions.invoke(\"ai\", {\n body: {\n prompt,\n context,\n options\n }\n });\n if (response.error) {\n throw new Error(`Failed to invoke AI function: ${response.error.message}`);\n }\n if (response.data?.error) {\n throw new Error(response.data.error);\n }\n if (!response.data?.success) {\n throw new Error(response.data?.error || \"Unknown error occurred\");\n }\n if (!response.data?.data?.response) {\n throw new Error(\"No response from AI\");\n }\n return response.data.data.response;\n };\n t0 = {\n generate\n };\n $[0] = supabase;\n $[1] = t0;\n } else {\n t0 = $[1];\n }\n return t0;\n}","import { useState, useEffect, useCallback } from \"react\";\nimport { getSupabaseUrl } from \"./config\";\nexport interface ServerAvailabilityState {\n isAvailable: boolean | null; // null = checking, true = available, false = unavailable\n isChecking: boolean;\n lastChecked: Date | null;\n error: Error | null;\n}\nconst CHECK_TIMEOUT = 10000; // 10 seconds timeout\nconst CHECK_INTERVAL = 30000; // Check every 30 seconds when unavailable\n\n/**\n * Hook to check if the Supabase server is available.\n * Performs periodic health checks and provides availability state.\n * Works without requiring Supabase context, making it safe to use at app initialization.\n */\nexport function useServerAvailability(options?: {\n enabled?: boolean;\n checkInterval?: number;\n timeout?: number;\n}): ServerAvailabilityState & {\n checkAvailability: () => Promise<void>;\n} {\n const {\n enabled = true,\n checkInterval = CHECK_INTERVAL,\n timeout = CHECK_TIMEOUT\n } = options || {};\n const [isAvailable, setIsAvailable] = useState<boolean | null>(null);\n const [isChecking, setIsChecking] = useState(false);\n const [lastChecked, setLastChecked] = useState<Date | null>(null);\n const [error, setError] = useState<Error | null>(null);\n const checkAvailability = useCallback(async () => {\n if (!enabled) return;\n setIsChecking(true);\n setError(null);\n try {\n const supabaseUrl = getSupabaseUrl();\n const supabaseAnonKey = process.env.SUPABASE_ANON_KEY || process.env.EXPO_PUBLIC_SUPABASE_ANON_KEY;\n if (!supabaseUrl) {\n throw new Error(\"Supabase URL is not configured\");\n }\n if (!supabaseAnonKey) {\n throw new Error(\"Supabase anon key is not configured\");\n }\n\n // Create an abort controller for timeout\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), timeout);\n\n // Health check: Try to reach the Supabase REST API\n // This is a lightweight check that doesn't require authentication\n const healthCheckPromise = fetch(`${supabaseUrl}/rest/v1/`, {\n method: \"HEAD\",\n headers: {\n apikey: supabaseAnonKey\n },\n signal: controller.signal\n }).then(response => {\n clearTimeout(timeoutId);\n // Consider server available if we get any response (even 401/403 means server is reachable)\n return response.status < 500;\n }).catch(err_0 => {\n clearTimeout(timeoutId);\n // If aborted, it's a timeout\n if (err_0.name === \"AbortError\") {\n return false;\n }\n return false;\n });\n const available = await healthCheckPromise;\n setIsAvailable(available);\n setLastChecked(new Date());\n setError(null);\n } catch (err) {\n const error_0 = err instanceof Error ? err : new Error(\"Unknown error checking server availability\");\n setIsAvailable(false);\n setError(error_0);\n setLastChecked(new Date());\n } finally {\n setIsChecking(false);\n }\n }, [enabled, timeout]);\n\n // Initial check on mount\n useEffect(() => {\n if (enabled) {\n checkAvailability();\n }\n }, [enabled, checkAvailability]);\n\n // Periodic check when server is unavailable\n useEffect(() => {\n if (!enabled || isAvailable !== false) return;\n const intervalId = setInterval(() => {\n checkAvailability();\n }, checkInterval);\n return () => clearInterval(intervalId);\n }, [enabled, isAvailable, checkInterval, checkAvailability]);\n return {\n isAvailable,\n isChecking,\n lastChecked,\n error,\n checkAvailability\n };\n}","import { useMemo, useRef } from \"react\";\nimport type { PostgrestSingleResponse } from \"@supabase/postgrest-js\";\nimport React from \"react\";\ninterface SearchOptions {\n isOptional: boolean;\n additionCondition: string[];\n}\ntype Snapshot = {\n url: URL;\n method: string;\n headers: Record<string, string>;\n body: any;\n signal: AbortSignal | null;\n};\nexport function useSearchQuery<Result>(baseQuery: PromiseLike<PostgrestSingleResponse<Result>>, searchText: string, columns: ((string & keyof Result) | string)[], options: {\n isOptional: boolean;\n additionCondition: (string | undefined)[];\n} = {\n isOptional: true,\n additionCondition: []\n}) {\n const original = React.useRef<{\n lastQuery: PromiseLike<PostgrestSingleResponse<Result>>;\n original: Snapshot;\n }>(null!);\n\n // if we get a brand-new baseQuery, re-capture the snapshot\n if (original.current?.lastQuery !== baseQuery) {\n const b = baseQuery as any;\n\n // Safely access properties - query builder properties should exist but handle edge cases\n // The url might be a string or URL object\n const urlValue = b.url;\n const url = urlValue ? typeof urlValue === 'string' ? new URL(urlValue) : new URL(urlValue.toString()) : new URL(\"http://localhost\"); // Fallback - should not happen in practice\n\n const method = b.method ?? \"GET\";\n // Preserve the original headers object - don't convert to plain object as it needs to be a Headers instance\n const headers = b.headers ?? {};\n // Only snapshot body for methods that support it - GET/HEAD cannot have body\n const body = method !== \"GET\" && method !== \"HEAD\" ? b.body ?? null : null;\n const signal = b.signal ?? null;\n original.current = {\n lastQuery: baseQuery,\n original: {\n url,\n method,\n headers,\n body,\n signal\n }\n };\n }\n return useMemo(() => {\n const qb = baseQuery as any;\n const {\n url: url_0,\n method: method_0,\n body: body_0,\n signal: signal_0\n } = original.current!.original;\n\n // 1) restore clean state\n qb.url = new URL(url_0.toString());\n qb.method = method_0;\n // Don't restore headers - they should remain unchanged and are a Headers object with .set() method\n // Mutating headers breaks the Headers object type\n // Only restore body for methods that support it (POST, PATCH, DELETE) - GET/HEAD cannot have body\n if (method_0 !== \"GET\" && method_0 !== \"HEAD\") {\n qb.body = body_0;\n } else {\n // For GET/HEAD, delete the body property entirely - setting to null still sets a body\n delete qb.body;\n }\n qb.signal = signal_0;\n\n // 3) Re-apply your logic exactly once\n const term = searchText.trim();\n if (term) {\n const clauses = columns.map(col => {\n const [tbl, colName] = col.split(\".\");\n return `${colName ?? tbl}.ilike.%${escapeLikePattern(term)}%`;\n });\n clauses.push(...(options.additionCondition.filter(Boolean) as string[]));\n qb.or(clauses.join(\",\"), {\n referencedTable: columns.find(c => c.includes(\".\"))?.split(\".\")[0]\n });\n } else if (!options.isOptional) {\n const conds = options.additionCondition.filter(Boolean);\n conds?.length ? qb.or(conds.join(\",\")) : qb.limit(0);\n }\n return qb as PromiseLike<PostgrestSingleResponse<Result>>;\n }, [baseQuery, searchText, columns.join(\",\"), options.isOptional, options.additionCondition.join(\",\")]);\n}\nfunction escapeLikePattern(text: string): string {\n return text?.replace(/[%_]/g, \"\\\\$&\");\n}","import { c as _c } from \"react/compiler-runtime\";\nimport { isUsable } from \"@pol-studios/utils\";\nimport { useEffect, useState } from \"react\";\nimport { GetResult } from \"./parser/select-query-parser\";\nimport { GenericTable } from \"./parser/types\";\nimport useSupabase, { UserSessionId, Database } from \"./useSupabase\";\nimport moment from \"moment\";\nimport { getObjectChanges } from \"@pol-studios/utils\";\nimport { DbChangeLog } from \"./types\";\n\n/** Type for the OperationLog record data */\ninterface OperationLogData {\n sessionId: string | null;\n changeBy: string | null;\n changeAt: string | null;\n}\ntype PublicSchema = Database[Extract<keyof Database, \"public\">];\ntype TableRow<T> = T extends {\n Row: infer R extends Record<string, unknown>;\n} ? R : Record<string, unknown>;\nexport default function useLiveChangeTracking(tableName, item, action) {\n const $ = _c(12);\n const [changeLog, setChangeLog] = useState(null as DbChangeLog);\n const [oldItem, setOldItem] = useState(null as TItem);\n const supabase = useSupabase();\n let t0;\n if ($[0] !== item || $[1] !== oldItem || $[2] !== supabase || $[3] !== tableName) {\n t0 = () => {\n setChangeLog(null);\n if (isUsable(item) === false) {\n return;\n }\n if (isUsable(oldItem) === false) {\n setOldItem(item);\n return;\n }\n const itemId = (item as any).id;\n if (isUsable(itemId) === false) {\n return;\n }\n const changes = getObjectChanges(oldItem, item);\n if (Object.keys(changes).length === 0) {\n return;\n }\n supabase.schema(\"core\").from(\"OperationLog\").select().filter(\"tableName\", \"eq\", tableName).filter(\"recordId\", \"eq\", itemId).order(\"changeAt\", {\n ascending: false\n }).limit(1).single().then(x => {\n if (isUsable(x.data) === false) {\n return;\n }\n const data = x.data as OperationLogData;\n if (data.sessionId === UserSessionId) {\n return;\n }\n const changeLog_0 = {\n modifiedByUserId: data.changeBy,\n changedOn: moment.utc(data.changeAt),\n changes: changes as Partial<TItem>\n };\n setChangeLog(changeLog_0);\n });\n setOldItem(item);\n };\n $[0] = item;\n $[1] = oldItem;\n $[2] = supabase;\n $[3] = tableName;\n $[4] = t0;\n } else {\n t0 = $[4];\n }\n let t1;\n if ($[5] !== item) {\n t1 = [item];\n $[5] = item;\n $[6] = t1;\n } else {\n t1 = $[6];\n }\n useEffect(t0, t1);\n let t2;\n if ($[7] !== action || $[8] !== changeLog) {\n t2 = () => {\n if (isUsable(changeLog) && action) {\n action(changeLog.changes as Partial<TItem>, changeLog);\n }\n };\n $[7] = action;\n $[8] = changeLog;\n $[9] = t2;\n } else {\n t2 = $[9];\n }\n let t3;\n if ($[10] !== changeLog) {\n t3 = [changeLog];\n $[10] = changeLog;\n $[11] = t3;\n } else {\n t3 = $[11];\n }\n useEffect(t2, t3);\n return changeLog;\n}","import { c as _c } from \"react/compiler-runtime\";\nimport useSupabase from \"./useSupabase\";\nimport { isUsable } from \"@pol-studios/utils\";\nimport { useDbQuery } from \"./useDbQuery\";\nimport { OperationLog } from \"./gen/public/OperationLog/query\";\nexport default function useLatestOperationLog(tableName, recordId) {\n const $ = _c(8);\n const supabase = useSupabase();\n const t0 = supabase as any;\n let t1;\n if ($[0] !== recordId || $[1] !== t0 || $[2] !== tableName) {\n t1 = t0.schema(\"core\").from(\"OperationLog\").select(OperationLog.defaultQuery).eq(\"recordId\", String(recordId)).eq(\"tableName\", tableName).order(\"changeAt\", {\n ascending: false\n }).limit(1).maybeSingle();\n $[0] = recordId;\n $[1] = t0;\n $[2] = tableName;\n $[3] = t1;\n } else {\n t1 = $[3];\n }\n let t2;\n if ($[4] !== recordId) {\n t2 = isUsable(recordId);\n $[4] = recordId;\n $[5] = t2;\n } else {\n t2 = $[5];\n }\n let t3;\n if ($[6] !== t2) {\n t3 = {\n refetchOnMount: true,\n refetchOnWindowFocus: true,\n staleTime: 0,\n enabled: t2\n };\n $[6] = t2;\n $[7] = t3;\n } else {\n t3 = $[7];\n }\n return useDbQuery(t1, t3);\n}","import { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { UseMutationOptions } from \"@tanstack/react-query\";\nimport { GetResult } from \"./parser/select-query-parser\";\nimport { diff } from \"@pol-studios/utils\";\nimport { useDbUpsert, UseDbUpsertResult } from \"./hooks/useDbUpsert\";\nimport moment, { Moment } from \"moment\";\nimport { Database } from \"./useSupabase\";\ntype PublicSchema = Database[Extract<keyof Database, \"public\">];\ntype TimeActivity = any;\nexport function newTimeActivity(date: Moment): TimeActivity {\n return {\n activityDate: date.clone().startOf(\"day\").toISOString(true),\n description: \"\",\n hasRequestBillableChange: false,\n hasRequestVerification: false,\n hours: 0,\n userNotes: \"\",\n adminNotes: \"\",\n userId: null,\n clientId: null,\n projectId: null,\n workingPhaseId: null,\n roleId: null,\n taskId: null,\n subtaskId: null,\n weeklyTimesheetId: null,\n id: null,\n BillingDetails: {\n status: \"Unknown\",\n id: null,\n orderHint: \"\",\n chargeTableId: null,\n cosmosId: null,\n amount: 0,\n rate: 0,\n type: \"TimeActivity\"\n }\n };\n}\ntype NotArray<T> = T extends any[] ? never : T;\ntype PendingChange<T> = {\n baseValue: T;\n currentValue: T;\n timeoutId: ReturnType<typeof setTimeout> | null;\n};\ntype AutosaveOptions<T> = UpdateOptions<T> & {\n delay: number;\n primaryKeys?: string[];\n transformBeforeMutation?: (item: T) => Partial<T>;\n};\nfunction getNewValue<T>(action: React.SetStateAction<T>, prevState: T): T {\n return typeof action === \"function\" ? (action as (prevState: T) => T)(prevState) : action;\n}\nexport type UpdateOptions<T> = Partial<UseMutationOptions<T, Error, T, unknown>> & {\n updateCache?: boolean;\n};\n\n/**\n * Hook for managing autosave state with proper entity switching support.\n *\n * This hook provides three main functions:\n * 1. `updateValue` - For making changes to the current entity (with autosave)\n * 2. `setNewEntity` - For switching to a completely different entity (saves previous entity first)\n * 3. `setValue` - For setting a value without triggering autosave or change tracking\n *\n * @example\n * ```tsx\n * const [value, updateValue, mutation, setValue, setNewEntity] = useAutosaveState(\n * 'time_activities',\n * defaultTimeActivity,\n * {\n * delay: 500,\n * transformBeforeMutation: (item) => omitFields(item, ['computedField', 'uiOnlyField'])\n * }\n * );\n *\n * // For making changes to current entity (autosaves after delay)\n * updateValue(prev => ({ ...prev, description: 'New description' }));\n *\n * // For switching to a different entity (saves current entity first)\n * setNewEntity(differentTimeActivity);\n * ```\n */\nexport default function useAutosaveState<T extends TItem & {\n id: string;\n}, TableName extends string & keyof PublicSchema[\"Tables\"] = any, Table extends PublicSchema[\"Tables\"][TableName] = any, Query extends string = \"*\", RelationName = unknown, Relationships = (Table extends {\n Relationships: infer R;\n} ? R : unknown), TItem = Omit<GetResult<PublicSchema, Table extends {\n Row: infer R;\n} ? R extends Record<string, unknown> ? R : any : any, RelationName, Relationships, Query>, \"id\"> & {\n id: string;\n}>(relation: TableName, defaultValue: T, options?: AutosaveOptions<T>): [T, React.Dispatch<React.SetStateAction<T>>, UseDbUpsertResult<T>, React.Dispatch<React.SetStateAction<T>>, (newEntity: T) => void, () => Promise<void>] {\n const [value, setValue] = useState<T>(() => defaultValue);\n const [baseValue, setBaseValue] = useState<T>(() => defaultValue);\n // Use a ref to track baseValue synchronously to avoid stale closure issues\n // When setNewEntity is called, React batches state updates. If updateValue\n // is called before the re-render completes, the closure-captured baseValue\n // would be stale. The ref ensures we always have the latest baseValue.\n const baseValueRef = useRef<T>(defaultValue);\n const pendingChangesRef = useRef<Map<string, PendingChange<T>>>(new Map());\n const currentId = useRef<string | null>(null);\n const newOptions = useMemo(() => options ? {\n ...options,\n primaryKeys: options.primaryKeys ?? [\"id\"]\n } : {\n delay: 200,\n primaryKeys: [\"id\"]\n }, [options]);\n const upsertMutation = useDbUpsert<T>(relation, {\n invalidateTables: [relation]\n });\n const saveEntityChanges = useCallback(async (entityId: string) => {\n if (__DEV__) {\n console.log('[Autosave] saveEntityChanges called:', {\n entityId,\n relation,\n hasPendingEntry: pendingChangesRef.current.has(entityId)\n });\n }\n const pending = pendingChangesRef.current.get(entityId);\n if (!pending) {\n if (__DEV__) {\n console.log('[Autosave] No pending changes found for entity:', entityId);\n }\n return;\n }\n const changes = diff(pending.baseValue, pending.currentValue);\n if (__DEV__) {\n console.log('[Autosave] Computed diff:', {\n entityId,\n relation,\n changeKeys: Object.keys(changes),\n changes,\n baseValue: pending.baseValue,\n currentValue: pending.currentValue\n });\n }\n if (Object.keys(changes).length === 0) {\n if (__DEV__) {\n console.log('[Autosave] No changes detected, skipping save for:', entityId);\n }\n pendingChangesRef.current.delete(entityId);\n return;\n }\n const patch = {\n ...changes,\n id: entityId\n } as any;\n\n // Apply transform function if provided\n const finalPatch = newOptions.transformBeforeMutation ? newOptions.transformBeforeMutation(patch) : patch;\n if (__DEV__) {\n console.log('[Autosave] Calling mutateAsync:', {\n entityId,\n relation,\n patch,\n finalPatch,\n hasTransform: !!newOptions.transformBeforeMutation\n });\n }\n try {\n const result = await upsertMutation.mutateAsync(finalPatch);\n if (__DEV__) {\n console.log('[Autosave] mutateAsync SUCCESS:', {\n entityId,\n relation,\n finalPatch,\n result\n });\n }\n pendingChangesRef.current.delete(entityId);\n } catch (error) {\n if (__DEV__) {\n console.error('[Autosave] mutateAsync FAILED:', {\n entityId,\n relation,\n finalPatch,\n error,\n errorMessage: error instanceof Error ? error.message : String(error),\n errorStack: error instanceof Error ? error.stack : undefined\n });\n }\n throw error;\n }\n }, [relation, upsertMutation, newOptions.transformBeforeMutation]);\n\n // Function to update the current entity (with autosave)\n const updateValue = useCallback((update: React.SetStateAction<T>) => {\n setValue(prev => {\n const newValue = getNewValue(update, prev);\n const entityId_0 = newValue.id;\n if (!entityId_0) return newValue;\n\n // Get or create pending entry for this entity\n let pending_0 = pendingChangesRef.current.get(entityId_0);\n if (!pending_0) {\n // Use baseValueRef.current instead of closure-captured baseValue\n // This ensures we always have the latest baseValue even if React\n // hasn't re-rendered yet after setNewEntity was called\n pending_0 = {\n baseValue: baseValueRef.current,\n currentValue: newValue,\n timeoutId: null\n };\n pendingChangesRef.current.set(entityId_0, pending_0);\n if (__DEV__) {\n console.log('[Autosave] Created new pending entry using baseValueRef:', {\n entityId: entityId_0,\n baseValueId: baseValueRef.current?.id\n });\n }\n } else {\n pending_0.currentValue = newValue;\n }\n\n // Clear existing timeout for this entity\n if (pending_0.timeoutId) {\n clearTimeout(pending_0.timeoutId);\n }\n\n // Set new timeout for autosave\n pending_0.timeoutId = setTimeout(() => {\n saveEntityChanges(entityId_0);\n }, newOptions.delay);\n return newValue;\n });\n }, [saveEntityChanges, newOptions.delay]);\n\n // Function to set a completely new entity (non-blocking)\n // Previous entity's changes will save via their own timer\n const setNewEntity = useCallback((newEntity: T) => {\n // Update ref synchronously BEFORE React state updates\n // This ensures updateValue always has the correct baseValue even if\n // called before the React re-render completes (avoids stale closure)\n baseValueRef.current = newEntity;\n if (__DEV__) {\n console.log('[Autosave] setNewEntity - baseValueRef updated synchronously:', {\n entityId: newEntity.id,\n relation\n });\n }\n setValue(newEntity);\n setBaseValue(newEntity);\n currentId.current = newEntity.id;\n }, [relation]);\n\n // Cleanup all pending timeouts on unmount\n useEffect(() => {\n return () => {\n pendingChangesRef.current.forEach(pending_1 => {\n if (pending_1.timeoutId) clearTimeout(pending_1.timeoutId);\n });\n };\n }, []);\n\n // Function to manually save the current value\n const saveCurrentValue = useCallback(async () => {\n if (currentId.current) {\n await saveEntityChanges(currentId.current);\n }\n }, [saveEntityChanges]);\n return [value, updateValue, upsertMutation, setValue, setNewEntity, saveCurrentValue];\n}","import { c as _c } from \"react/compiler-runtime\";\nimport { isUsable } from \"@pol-studios/utils\";\nimport { useEffect } from \"react\";\nimport { UseMutationResult } from \"@tanstack/react-query\";\nimport { useToast } from \"@pol-studios/hooks/toast\";\nimport { UseDbUpsertResult } from \"./hooks\";\nexport default function useToastError(mutation) {\n const $ = _c(5);\n const toast = useToast();\n let t0;\n if ($[0] !== mutation.error || $[1] !== toast) {\n t0 = () => {\n if (isUsable(mutation.error) === false) {\n return;\n }\n toast.toast({\n title: \"Error\",\n description: mutation.error.message\n });\n };\n $[0] = mutation.error;\n $[1] = toast;\n $[2] = t0;\n } else {\n t0 = $[2];\n }\n let t1;\n if ($[3] !== mutation.error) {\n t1 = [mutation.error];\n $[3] = mutation.error;\n $[4] = t1;\n } else {\n t1 = $[4];\n }\n useEffect(t0, t1);\n return mutation;\n}","import { PostgrestParser } from \"./parser/PostgrestParser\";\nimport { PostgrestResponseSuccess } from \"./parser/types\";\nimport { Filter, FilterOperator, FilterGroup, QueryState, normalizeFilter } from \"./useDbAdvanceQuery\";\nimport { PostgrestSingleResponse } from \"@supabase/supabase-js\";\nexport async function executeAdvanceQuery<Result>(supabase: any, query: PromiseLike<PostgrestSingleResponse<Result>>, filterLayer: QueryState): Promise<{\n data: any;\n count: number | null;\n error: any;\n}> {\n const parser = new PostgrestParser<Result>(query as any);\n\n // Separate filters from pagination/sort/isReady\n const filterGroup: FilterGroup = {\n id: filterLayer.id,\n op: filterLayer.op,\n not: filterLayer.not,\n filters: filterLayer.filters.map(normalizeFilter).filter((f): f is Filter | FilterGroup => f !== null)\n };\n const pagination: {\n offset: number | undefined;\n limit: number | undefined;\n } = {\n offset: undefined,\n limit: undefined\n };\n const sort = [...(filterLayer.sort || [])];\n const searchParams = Array.from(parser.searchParams.entries());\n searchParams.forEach(([k, v]) => {\n if (k.includes(\"offset\")) {\n pagination.offset = Number(v);\n return;\n }\n if (k.includes(\"limit\")) {\n pagination.limit = Number(v);\n return;\n }\n if (k.includes(\"order\")) {\n const orderColumns = v.split(\",\");\n orderColumns.forEach(x => {\n const values = x.split(\".\");\n sort.push({\n field: values[0],\n direction: values[1] === \"asc\" ? \"asc\" : \"desc\"\n });\n });\n return;\n }\n if (v.includes(\".\") === false) return;\n const values = v.split(\".\");\n const column = k;\n const rawCondition = values[0];\n let condition = \"\";\n const value = values[1];\n if (column == \"select\") return;\n switch (rawCondition) {\n case \"eq\":\n condition = \"=\";\n break;\n case \"in\":\n condition = \"in\";\n break;\n case \"lt\":\n condition = \"<\";\n break;\n case \"gt\":\n condition = \">\";\n break;\n case \"lte\":\n condition = \"<=\";\n break;\n case \"gte\":\n condition = \">=\";\n break;\n case \"is\":\n condition = \"is\";\n break;\n case \"ilike\":\n condition = \"ilike\";\n break;\n case \"neq\":\n condition = \"=\"; /* will set not:true later */\n break;\n case \"like\":\n condition = \"contains\";\n break;\n }\n filterGroup.filters.push({\n id: `filter_${column}_${Date.now()}`,\n field: column,\n op: condition as any,\n value: value,\n display: `${column} ${condition} ${value}`\n });\n });\n const stripUIProperties = (obj: any): any => {\n return JSON.parse(JSON.stringify(obj, (key, value) => {\n if (key === \"display\" || key === \"info\" || key === \"options\") {\n return undefined;\n }\n return value;\n }));\n };\n const cleanedBody = stripUIProperties({\n table: parser.table,\n schema: parser.schema,\n select: parser.select,\n filters: filterGroup,\n pagination: pagination,\n sort: sort,\n count: \"exact\"\n });\n const response = await supabase.functions.invoke(\"query\", {\n body: cleanedBody,\n method: \"POST\"\n });\n if (response.error) {\n return {\n data: null,\n count: null,\n error: response.error\n };\n }\n return {\n data: response.data?.data ?? null,\n count: response.data?.count ?? null,\n error: null\n };\n}","import { isUsable } from \"@pol-studios/utils\";\nimport useSupabase from \"../useSupabase\";\nimport moment from \"moment\";\nimport { TransformOptions } from \"@supabase/storage-js\";\nimport { useRef } from \"react\";\nimport { useIndexedDB } from \"@pol-studios/hooks/storage\";\ntype CachedUrl = {\n url: string;\n expiresOn: string;\n key: string;\n};\ntype Attachment = {\n bucketId: string;\n path: string;\n};\n\n// Global cache version map to track when attachments are expired\nconst cacheVersions = new Map<string, number>();\n// Listeners for cache version changes\nconst cacheVersionListeners = new Map<string, Set<() => void>>();\n// Track retry attempts per entity\nconst retryAttempts = new Map<string, number>();\nexport default function useStorageUrl() {\n const db = useIndexedDB({\n dbName: \"polstudios\",\n storeName: \"cached-urls\"\n });\n const storedUrls = useRef(new Map<string, CachedUrl>());\n const supabase = useSupabase();\n function getCacheVersion(entity: {\n bucketId: string;\n path: string;\n }): number {\n const key = `${entity.bucketId}${entity.path}`;\n return cacheVersions.get(key) || 0;\n }\n function subscribeToCacheVersion(entity_0: {\n bucketId: string;\n path: string;\n }, callback: () => void): () => void {\n const key_0 = `${entity_0.bucketId}${entity_0.path}`;\n if (!cacheVersionListeners.has(key_0)) {\n cacheVersionListeners.set(key_0, new Set());\n }\n cacheVersionListeners.get(key_0)!.add(callback);\n return () => {\n cacheVersionListeners.get(key_0)?.delete(callback);\n };\n }\n async function expireCache(entity_1: {\n bucketId: string;\n path: string;\n }) {\n const key_1 = `${entity_1.bucketId}${entity_1.path}`;\n const dbKeys = await db.getAllKeys();\n const keysToDelete = Array.from(new Set([...Array.from(storedUrls.current.keys()), ...dbKeys].filter(value => value.startsWith(key_1))));\n await Promise.all(keysToDelete.map(async x => {\n storedUrls.current.delete(x);\n await db.removeItem(x);\n }));\n\n // Increment cache version to force image refetch\n const currentVersion = cacheVersions.get(key_1) || 0;\n cacheVersions.set(key_1, currentVersion + 1);\n\n // Notify all listeners that cache version changed\n const listeners = cacheVersionListeners.get(key_1);\n if (listeners) {\n listeners.forEach(callback_0 => {\n callback_0();\n });\n }\n }\n async function baseFetchUrl(entity_2: Attachment, options?: {\n download?: string | boolean;\n transform?: TransformOptions;\n }, isPublic: boolean = false) {\n if (isUsable(entity_2) === false) return;\n const optionsString = JSON.stringify(options);\n if (isUsable(entity_2.bucketId) === false) {\n return;\n }\n if (isUsable(entity_2.path) === false) {\n return;\n }\n const key_2 = `${entity_2.bucketId}${entity_2.path}${optionsString ?? \"\"}-cached-url`;\n const inMemoryItem = storedUrls.current.get(key_2);\n let item = inMemoryItem;\n if (isUsable(inMemoryItem) === false) {\n item = (await db.getItem(key_2)) ?? undefined;\n if (isUsable(item)) {}\n } else {}\n if (isUsable(item) && moment(item.expiresOn).isAfter(moment().add(-1 * 60, \"seconds\"))) {\n return item.url;\n }\n const base = supabase.storage.from(entity_2.bucketId);\n let download = options?.download;\n if (typeof options?.download === \"string\") {\n const ext = entity_2.path.split(\".\").pop() ?? \"\";\n download = options?.download.endsWith(ext) ? options?.download : options?.download + \".\" + ext;\n }\n const newOptions = options ? {\n ...options,\n download: download\n } : undefined;\n\n // Track retries per entity\n const retryKey = `${entity_2.bucketId}/${entity_2.path}`;\n const currentRetries = retryAttempts.get(retryKey) || 0;\n let url: string | undefined;\n if (isPublic) {\n url = base.getPublicUrl(entity_2.path, newOptions).data.publicUrl;\n } else {\n // Try to get signed URL with retry logic\n try {\n console.log(\"Creating signed URL for\", entity_2.path);\n const result = await base.createSignedUrl(entity_2.path, 60 * 100, newOptions);\n url = result.data?.signedUrl;\n if (isUsable(url)) {\n // Success - reset retry count\n retryAttempts.delete(retryKey);\n } else if (currentRetries < 3) {\n // Failed but can retry\n retryAttempts.set(retryKey, currentRetries + 1);\n throw new Error(\"Failed to get signed URL\");\n }\n } catch (error) {\n if (currentRetries < 3) {\n // Retry with exponential backoff\n retryAttempts.set(retryKey, currentRetries + 1);\n const delay = Math.min(1000 * Math.pow(2, currentRetries), 5000);\n await new Promise(resolve => setTimeout(resolve, delay));\n return baseFetchUrl(entity_2, options, isPublic);\n }\n // Max retries reached\n retryAttempts.delete(retryKey);\n return undefined;\n }\n }\n if (isUsable(url) === false) return url;\n const cachedUrl = {\n key: key_2,\n url: url,\n expiresOn: moment().add(60 * 100, \"seconds\").toISOString(true)\n };\n storedUrls.current.set(key_2, cachedUrl);\n db.setItem(key_2, cachedUrl);\n return url;\n }\n async function fetchUrl(entity_3: {\n bucketId: string;\n path: string;\n }, options_0?: {\n download?: string | boolean;\n transform?: TransformOptions;\n }) {\n return baseFetchUrl(entity_3, options_0, false);\n }\n async function fetchPublicUrl(entity_4: {\n bucketId: string;\n path: string;\n }, options_1?: {\n download?: string | boolean;\n transform?: TransformOptions;\n }) {\n return baseFetchUrl(entity_4, options_1, true);\n }\n async function prefetchImage(entity_5: Attachment, options_2?: {\n download?: string | boolean;\n transform?: TransformOptions;\n }) {\n const url_0 = await fetchUrl(entity_5, options_2);\n if (url_0) {\n new Image().src = url_0;\n }\n }\n\n /**\n * Batch fetch signed URLs for multiple attachments in a single API call.\n * Falls back to individual fetches if attachments span multiple buckets.\n * Results are cached the same way as individual fetchUrl calls.\n */\n async function fetchUrls(entities: Attachment[], options_3?: {\n download?: string | boolean;\n transform?: TransformOptions;\n }): Promise<Map<string, string | undefined>> {\n const results = new Map<string, string | undefined>();\n if (entities.length === 0) return results;\n const optionsString_0 = JSON.stringify(options_3);\n const expirySeconds = 60 * 100;\n\n // Group entities by bucket\n const byBucket = new Map<string, Attachment[]>();\n for (const entity_6 of entities) {\n if (!isUsable(entity_6.bucketId) || !isUsable(entity_6.path)) continue;\n const list = byBucket.get(entity_6.bucketId) ?? [];\n list.push(entity_6);\n byBucket.set(entity_6.bucketId, list);\n }\n\n // For each bucket, check cache first, then batch fetch uncached\n for (const [bucketId, bucketEntities] of byBucket) {\n const uncached: Attachment[] = [];\n\n // Check cache for each entity\n for (const entity_7 of bucketEntities) {\n const key_3 = `${entity_7.bucketId}${entity_7.path}${optionsString_0 ?? \"\"}-cached-url`;\n const entityKey = `${entity_7.bucketId}/${entity_7.path}`;\n\n // Check in-memory cache first\n let item_0 = storedUrls.current.get(key_3);\n\n // Then check IndexDB\n if (!isUsable(item_0)) {\n item_0 = (await db.getItem(key_3)) ?? undefined;\n }\n\n // If cached and not expired, use it\n if (isUsable(item_0) && moment(item_0.expiresOn).isAfter(moment().add(-1 * 60, \"seconds\"))) {\n results.set(entityKey, item_0.url);\n } else {\n uncached.push(entity_7);\n }\n }\n\n // Batch fetch uncached URLs\n if (uncached.length > 0) {\n const paths = uncached.map(e => e.path);\n const base_0 = supabase.storage.from(bucketId);\n try {\n console.log(\"Signed URLs created\");\n const {\n data,\n error: error_0\n } = await base_0.createSignedUrls(paths, expirySeconds);\n if (!error_0 && data) {\n const expiresOn = moment().add(expirySeconds, \"seconds\").toISOString(true);\n for (let i = 0; i < uncached.length; i++) {\n const entity_9 = uncached[i];\n const urlData = data[i];\n const entityKey_1 = `${entity_9.bucketId}/${entity_9.path}`;\n const cacheKey = `${entity_9.bucketId}${entity_9.path}${optionsString_0 ?? \"\"}-cached-url`;\n if (urlData?.signedUrl) {\n results.set(entityKey_1, urlData.signedUrl);\n\n // Cache the URL\n const cachedUrl_0 = {\n key: cacheKey,\n url: urlData.signedUrl,\n expiresOn\n };\n storedUrls.current.set(cacheKey, cachedUrl_0);\n db.setItem(cacheKey, cachedUrl_0);\n } else {\n results.set(entityKey_1, undefined);\n }\n }\n } else {\n // Fall back to individual fetches on error\n for (const entity_10 of uncached) {\n const entityKey_2 = `${entity_10.bucketId}/${entity_10.path}`;\n const url_2 = await fetchUrl(entity_10, options_3);\n results.set(entityKey_2, url_2);\n }\n }\n } catch {\n // Fall back to individual fetches on error\n for (const entity_8 of uncached) {\n const entityKey_0 = `${entity_8.bucketId}/${entity_8.path}`;\n const url_1 = await fetchUrl(entity_8, options_3);\n results.set(entityKey_0, url_1);\n }\n }\n }\n }\n return results;\n }\n return {\n fetchUrl,\n fetchUrls,\n prefetchImage,\n fetchPublicUrl,\n expireCache,\n getCacheVersion,\n subscribeToCacheVersion\n };\n}","import { c as _c } from \"react/compiler-runtime\";\nimport { useEffect, useState } from \"react\";\nimport { isUsable } from \"@pol-studios/utils\";\nimport useStorageUrl from \"./useStorageUrl\";\nimport { useDbQuery } from \"../useDbQuery\";\nimport useSupabase from \"../useSupabase\";\n\n/**\n * Metadata stored in storage.objects.metadata JSONB column\n */\nexport interface StorageObjectMetadata {\n processingStatus: \"None\" | \"Processing\" | \"Error\";\n contentType: string;\n contentHeight?: number;\n contentWidth?: number;\n originalFileName?: string;\n legacyAttachmentId?: number;\n}\n\n/**\n * Get content type from metadata or infer from file path extension\n */\nfunction getContentType(metadata: StorageObjectMetadata | null | undefined, path: string): string {\n if (metadata?.contentType) {\n return metadata.contentType;\n }\n const ext = path.split(\".\").pop()?.toUpperCase();\n return ext || \"Unknown\";\n}\ntype UseStoragePathOptions = {\n /** Whether to fetch metadata from storage.objects (default: true) */\n fetchMetadata?: boolean;\n /** Transform options for the URL */\n transform?: {\n width?: number;\n height?: number;\n quality?: number;\n format?: \"origin\";\n };\n /** Whether to get a download URL */\n download?: string | boolean;\n};\ntype UseStoragePathResult = {\n /** Signed URL for the storage object */\n url: string | null;\n /** Metadata from storage.objects.metadata JSONB */\n metadata: StorageObjectMetadata | null;\n /** Content type (from metadata or inferred from path) */\n contentType: string;\n /** Whether the URL or metadata is still loading */\n isLoading: boolean;\n /** Error if URL fetch failed */\n error: Error | null;\n};\n\n/**\n * Hook to get a signed URL and metadata for a storage path.\n * Replaces useAttachment for the path-based storage approach.\n *\n * @param storagePath - The path within the bucket (e.g., \"14/abc-123.jpg\")\n * @param bucketId - The storage bucket ID\n * @param options - Optional configuration\n *\n * @example\n * ```tsx\n * const { url, contentType, isLoading } = useStoragePath(\n * profile.profilePath,\n * 'attachments'\n * );\n *\n * if (isLoading) return <Spinner />;\n * return <img src={url} />;\n * ```\n */\nexport default function useStoragePath(storagePath, bucketId, t0) {\n const $ = _c(40);\n let t1;\n if ($[0] !== t0) {\n t1 = t0 === undefined ? {} : t0;\n $[0] = t0;\n $[1] = t1;\n } else {\n t1 = $[1];\n }\n const options = t1;\n const {\n fetchMetadata: t2,\n transform,\n download\n } = options;\n const fetchMetadata = t2 === undefined ? true : t2;\n const [url, setUrl] = useState(null);\n const [error, setError] = useState(null);\n const {\n fetchUrl\n } = useStorageUrl();\n const supabase = useSupabase();\n let t3;\n if ($[2] !== bucketId || $[3] !== download || $[4] !== fetchUrl || $[5] !== storagePath || $[6] !== transform) {\n t3 = () => {\n if (!isUsable(storagePath) || !isUsable(bucketId)) {\n setUrl(null);\n return;\n }\n let cancelled = false;\n fetchUrl({\n bucketId,\n path: storagePath\n }, {\n transform,\n download\n }).then(signedUrl => {\n if (!cancelled) {\n setUrl(signedUrl ?? null);\n setError(null);\n }\n }).catch(err => {\n if (!cancelled) {\n setError(err instanceof Error ? err : new Error(String(err)));\n setUrl(null);\n }\n });\n return () => {\n cancelled = true;\n };\n };\n $[2] = bucketId;\n $[3] = download;\n $[4] = fetchUrl;\n $[5] = storagePath;\n $[6] = transform;\n $[7] = t3;\n } else {\n t3 = $[7];\n }\n let t4;\n if ($[8] !== transform) {\n t4 = JSON.stringify(transform);\n $[8] = transform;\n $[9] = t4;\n } else {\n t4 = $[9];\n }\n let t5;\n if ($[10] !== bucketId || $[11] !== download || $[12] !== storagePath || $[13] !== t4) {\n t5 = [storagePath, bucketId, t4, download];\n $[10] = bucketId;\n $[11] = download;\n $[12] = storagePath;\n $[13] = t4;\n $[14] = t5;\n } else {\n t5 = $[14];\n }\n useEffect(t3, t5);\n let t6;\n if ($[15] !== bucketId || $[16] !== storagePath || $[17] !== supabase) {\n t6 = (supabase.schema(\"storage\" as any) as any).from(\"objects\").select(\"metadata\").eq(\"bucket_id\", bucketId).eq(\"name\", storagePath ?? \"\").maybeSingle();\n $[15] = bucketId;\n $[16] = storagePath;\n $[17] = supabase;\n $[18] = t6;\n } else {\n t6 = $[18];\n }\n const storageQuery = t6;\n let t7;\n if ($[19] !== bucketId || $[20] !== fetchMetadata || $[21] !== storagePath) {\n t7 = fetchMetadata && isUsable(storagePath) && isUsable(bucketId);\n $[19] = bucketId;\n $[20] = fetchMetadata;\n $[21] = storagePath;\n $[22] = t7;\n } else {\n t7 = $[22];\n }\n let t8;\n if ($[23] !== t7) {\n t8 = {\n enabled: t7\n };\n $[23] = t7;\n $[24] = t8;\n } else {\n t8 = $[24];\n }\n const metadataRequest = useDbQuery(storageQuery, t8);\n const metadata = (metadataRequest.data as any)?.metadata as StorageObjectMetadata ?? null;\n const t9 = storagePath ?? \"\";\n let t10;\n if ($[25] !== metadata || $[26] !== t9) {\n t10 = getContentType(metadata, t9);\n $[25] = metadata;\n $[26] = t9;\n $[27] = t10;\n } else {\n t10 = $[27];\n }\n const contentType = t10;\n let t11;\n if ($[28] !== error || $[29] !== fetchMetadata || $[30] !== metadataRequest.isFetching || $[31] !== storagePath || $[32] !== url) {\n t11 = isUsable(storagePath) && url === null && error === null || fetchMetadata && metadataRequest.isFetching;\n $[28] = error;\n $[29] = fetchMetadata;\n $[30] = metadataRequest.isFetching;\n $[31] = storagePath;\n $[32] = url;\n $[33] = t11;\n } else {\n t11 = $[33];\n }\n const isLoading = t11;\n let t12;\n if ($[34] !== contentType || $[35] !== error || $[36] !== isLoading || $[37] !== metadata || $[38] !== url) {\n t12 = {\n url,\n metadata,\n contentType,\n isLoading,\n error\n };\n $[34] = contentType;\n $[35] = error;\n $[36] = isLoading;\n $[37] = metadata;\n $[38] = url;\n $[39] = t12;\n } else {\n t12 = $[39];\n }\n return t12;\n}","/**\n * Storage bucket names for Supabase storage.\n * Use these constants when calling storage APIs.\n */\nexport const BUCKETS = {\n AVATARS: \"avatars\",\n FIXTURE_CATALOG_COVER: \"fixture-catalog-cover\",\n FIXTURE_ATTACHMENTS: \"fixture-attachments\",\n UNIT_DOCUMENTATION: \"unit-documentation-attachments\",\n DATASHEETS: \"datasheets\",\n PATTERNS: \"patterns\",\n LOGOS: \"logos\",\n RECEIPTS: \"receipts\",\n TICKET_ATTACHMENTS: \"ticket-attachment\",\n PROCESS_RESULTS: \"process-results\",\n DATA_EXCHANGE_IMPORTS: \"data-exchange-imports\",\n EMAIL_TEMPLATES: \"email-templates\",\n EMAIL_TEMPLATES_ASSETS: \"email-templates-assets\"\n} as const;\nexport type BucketName = (typeof BUCKETS)[keyof typeof BUCKETS];","import { chunkArray } from \"@pol-studios/utils\";\nexport function createInCondition(column: string, values: (string | number)[]) {\n let condition = \"\";\n if (values.length > 2000) {\n throw new Error(\"Too many values to create in condition\");\n }\n chunkArray(values, 99).forEach((x, index) => {\n if (index == 0) {\n condition = `${column}.in.(${x.join(\",\")})`;\n return;\n }\n condition += `,${column}.in.(${x.join(\",\")})`;\n });\n return condition;\n}","import { c as _c } from \"react/compiler-runtime\";\nimport { useDbUpsert } from \"../hooks\";\nimport { useDbDelete } from \"../useDbDelete\";\nimport { useDbMultiUpsert } from \"../useDbMultiUpsert\";\nimport { useDbMultiDelete } from \"../useDbMultiDelete\";\n\n/**\n * Upsert a changelog (create or update)\n */\nexport const useUpsertChangelog = () => {\n const $ = _c(1);\n let t0;\n if ($[0] === Symbol.for(\"react.memo_cache_sentinel\")) {\n t0 = {\n invalidateTables: [\"Changelog\", \"ChangelogEntry\", \"ChangelogMedia\"]\n };\n $[0] = t0;\n } else {\n t0 = $[0];\n }\n return useDbUpsert(\"Changelog\", t0);\n};\n\n/**\n * Delete a changelog\n * Note: Cascade delete will remove all associated entries and media\n */\nexport const useDeleteChangelog = () => {\n return useDbDelete(\"Changelog\" as any);\n};\n\n/**\n * Upsert a changelog entry (create or update)\n */\nexport const useUpsertChangelogEntry = () => {\n const $ = _c(1);\n let t0;\n if ($[0] === Symbol.for(\"react.memo_cache_sentinel\")) {\n t0 = {\n invalidateTables: [\"ChangelogEntry\", \"ChangelogMedia\"]\n };\n $[0] = t0;\n } else {\n t0 = $[0];\n }\n return useDbUpsert(\"ChangelogEntry\", t0);\n};\n\n/**\n * Upsert multiple changelog entries at once\n */\nexport const useMultiUpsertChangelogEntries = () => {\n const $ = _c(1);\n let t0;\n if ($[0] === Symbol.for(\"react.memo_cache_sentinel\")) {\n t0 = [\"id\"];\n $[0] = t0;\n } else {\n t0 = $[0];\n }\n return useDbMultiUpsert(\"ChangelogEntry\" as any, t0, \"*, ChangelogMedia (*)\");\n};\n\n/**\n * Delete a changelog entry\n * Note: Cascade delete will remove all associated media\n */\nexport const useDeleteChangelogEntry = () => {\n return useDbDelete(\"ChangelogEntry\" as any);\n};\n\n/**\n * Delete multiple changelog entries at once\n */\nexport const useMultiDeleteChangelogEntries = () => {\n return useDbMultiDelete(\"ChangelogEntry\" as any);\n};\n\n/**\n * Upsert changelog media (create or update)\n */\nexport const useUpsertChangelogMedia = () => {\n const $ = _c(1);\n let t0;\n if ($[0] === Symbol.for(\"react.memo_cache_sentinel\")) {\n t0 = {\n invalidateTables: [\"ChangelogMedia\"]\n };\n $[0] = t0;\n } else {\n t0 = $[0];\n }\n return useDbUpsert(\"ChangelogMedia\", t0);\n};\n\n/**\n * Delete changelog media\n */\nexport const useDeleteChangelogMedia = () => {\n return useDbDelete(\"ChangelogMedia\" as any);\n};\n\n/**\n * Upload media file for changelog entry\n * Just returns a simple upload function - caller handles creating ChangelogMedia records\n */\nexport const useUploadChangelogMedia = () => {\n // Simplified: return null for now since upload logic needs to be implemented properly\n // Caller should use supabase.storage.from(\"changelog-media\").upload()\n return {\n mutateAsync: async () => ({\n path: \"\",\n publicUrl: \"\"\n })\n };\n};","import { c as _c } from \"react/compiler-runtime\";\nimport useSupabase from \"../useSupabase\";\nimport { useDbQuery } from \"../useDbQuery\";\nimport { useDbRealtimeQuery } from \"../useDbRealtimeQuery\";\n\n/**\n * Fetch all changelogs with their entries and media\n * Ordered by release date (newest first)\n */\nexport const useChangelogs = (options?: {\n realtime?: boolean;\n}) => {\n const supabase = useSupabase();\n const query = supabase.from(\"Changelog\").select(`\n *,\n ChangelogEntry (\n *,\n ChangelogMedia (*)\n )\n `).order(\"releaseDate\", {\n ascending: false\n }).order(\"order\", {\n foreignTable: \"ChangelogEntry\",\n ascending: true\n }).order(\"order\", {\n foreignTable: \"ChangelogEntry.ChangelogMedia\",\n ascending: true\n });\n if (options?.realtime) {\n return useDbRealtimeQuery(query, {\n crossOrganization: true\n });\n }\n return useDbQuery(query, {\n crossOrganization: true\n });\n};\n\n/**\n * Fetch published changelogs only\n */\nexport const usePublishedChangelogs = (options?: {\n realtime?: boolean;\n}) => {\n const supabase = useSupabase();\n const query = supabase.from(\"Changelog\").select(`\n *,\n ChangelogEntry (\n *,\n ChangelogMedia (*)\n )\n `).eq(\"isPublished\", true).order(\"releaseDate\", {\n ascending: false\n }).order(\"order\", {\n foreignTable: \"ChangelogEntry\",\n ascending: true\n }).order(\"order\", {\n foreignTable: \"ChangelogEntry.ChangelogMedia\",\n ascending: true\n });\n if (options?.realtime) {\n return useDbRealtimeQuery(query, {\n crossOrganization: true\n });\n }\n return useDbQuery(query, {\n crossOrganization: true\n });\n};\n\n/**\n * Fetch a single changelog by ID\n */\nexport const useChangelogById = id => {\n const $ = _c(5);\n const supabase = useSupabase();\n let t0;\n if ($[0] !== id || $[1] !== supabase) {\n t0 = supabase.from(\"Changelog\").select(\"\\n *,\\n ChangelogEntry (\\n *,\\n ChangelogMedia (*)\\n )\\n \").eq(\"id\", id).order(\"order\", {\n foreignTable: \"ChangelogEntry\",\n ascending: true\n }).order(\"order\", {\n foreignTable: \"ChangelogEntry.ChangelogMedia\",\n ascending: true\n }).single();\n $[0] = id;\n $[1] = supabase;\n $[2] = t0;\n } else {\n t0 = $[2];\n }\n const t1 = !!id;\n let t2;\n if ($[3] !== t1) {\n t2 = {\n enabled: t1,\n crossOrganization: true\n };\n $[3] = t1;\n $[4] = t2;\n } else {\n t2 = $[4];\n }\n return useDbQuery(t0, t2);\n};\n\n/**\n * Fetch a single changelog by slug\n */\nexport const useChangelogBySlug = slug => {\n const $ = _c(5);\n const supabase = useSupabase();\n let t0;\n if ($[0] !== slug || $[1] !== supabase) {\n t0 = supabase.from(\"Changelog\").select(\"\\n *,\\n ChangelogEntry (\\n *,\\n ChangelogMedia (*)\\n )\\n \").eq(\"slug\", slug).order(\"order\", {\n foreignTable: \"ChangelogEntry\",\n ascending: true\n }).order(\"order\", {\n foreignTable: \"ChangelogEntry.ChangelogMedia\",\n ascending: true\n }).single();\n $[0] = slug;\n $[1] = supabase;\n $[2] = t0;\n } else {\n t0 = $[2];\n }\n const t1 = !!slug;\n let t2;\n if ($[3] !== t1) {\n t2 = {\n enabled: t1,\n crossOrganization: true\n };\n $[3] = t1;\n $[4] = t2;\n } else {\n t2 = $[4];\n }\n return useDbQuery(t0, t2);\n};\n\n/**\n * Fetch changelog entries for a specific changelog\n */\nexport const useChangelogEntries = changelogId => {\n const $ = _c(5);\n const supabase = useSupabase();\n let t0;\n if ($[0] !== changelogId || $[1] !== supabase) {\n t0 = supabase.from(\"ChangelogEntry\").select(\"*, ChangelogMedia (*)\").eq(\"changelogId\", changelogId).order(\"order\", {\n ascending: true\n }).order(\"order\", {\n foreignTable: \"ChangelogMedia\",\n ascending: true\n });\n $[0] = changelogId;\n $[1] = supabase;\n $[2] = t0;\n } else {\n t0 = $[2];\n }\n const t1 = !!changelogId;\n let t2;\n if ($[3] !== t1) {\n t2 = {\n enabled: t1,\n crossOrganization: true\n };\n $[3] = t1;\n $[4] = t2;\n } else {\n t2 = $[4];\n }\n return useDbQuery(t0, t2);\n};\n\n/**\n * Fetch media for a specific changelog entry\n */\nexport const useChangelogMedia = entryId => {\n const $ = _c(5);\n const supabase = useSupabase();\n let t0;\n if ($[0] !== entryId || $[1] !== supabase) {\n t0 = supabase.from(\"ChangelogMedia\").select(\"*\").eq(\"changelogEntryId\", entryId).order(\"order\", {\n ascending: true\n });\n $[0] = entryId;\n $[1] = supabase;\n $[2] = t0;\n } else {\n t0 = $[2];\n }\n const t1 = !!entryId;\n let t2;\n if ($[3] !== t1) {\n t2 = {\n enabled: t1,\n crossOrganization: true\n };\n $[3] = t1;\n $[4] = t2;\n } else {\n t2 = $[4];\n }\n return useDbQuery(t0, t2);\n};","import { c as _c } from \"react/compiler-runtime\";\nimport { useQuery } from \"@tanstack/react-query\";\nimport useSupabase from \"../useSupabase\";\nexport interface FeedbackListItem {\n id: number;\n userId: string | null;\n table: string | null;\n schema: string;\n memoryType: string;\n resolved: boolean;\n resolvedAt: string | null;\n resolvedBy: string | null;\n createdAt: string;\n updatedAt: string;\n data: {\n query: string;\n queryHash?: string;\n status?: \"success\" | \"failure\" | \"needs_review\" | \"cache_hit\";\n statusMessage?: string;\n confidence?: number;\n filters?: any;\n sql?: string;\n sqlError?: string;\n agentDecisions?: any;\n context?: any;\n trace?: any;\n corrections?: {\n domainTerm?: string;\n domainFieldPath?: string;\n fieldPath?: string;\n filters?: any;\n };\n feedback?: string;\n modelUsed?: string;\n reasoningEffort?: \"minimal\" | \"medium\" | \"high\";\n performance?: any;\n resultCount?: number;\n };\n}\nexport interface FeedbackListParams {\n resolved?: boolean;\n status?: string;\n limit?: number;\n offset?: number;\n userId?: string;\n startDate?: string;\n endDate?: string;\n}\nexport function useFeedbackList(t0) {\n const $ = _c(10);\n let t1;\n if ($[0] !== t0) {\n t1 = t0 === undefined ? {} : t0;\n $[0] = t0;\n $[1] = t1;\n } else {\n t1 = $[1];\n }\n const params = t1;\n const supabase = useSupabase();\n let t2;\n if ($[2] !== params) {\n t2 = [\"feedback-list\", params];\n $[2] = params;\n $[3] = t2;\n } else {\n t2 = $[3];\n }\n let t3;\n if ($[4] !== params || $[5] !== supabase) {\n t3 = async () => {\n const searchParams = new URLSearchParams();\n if (params.resolved !== undefined) {\n searchParams.append(\"resolved\", String(params.resolved));\n }\n if (params.status) {\n searchParams.append(\"status\", params.status);\n }\n if (params.limit) {\n searchParams.append(\"limit\", String(params.limit));\n }\n if (params.offset) {\n searchParams.append(\"offset\", String(params.offset));\n }\n if (params.userId) {\n searchParams.append(\"userId\", params.userId);\n }\n if (params.startDate) {\n searchParams.append(\"startDate\", params.startDate);\n }\n if (params.endDate) {\n searchParams.append(\"endDate\", params.endDate);\n }\n const {\n data,\n error\n } = await supabase.functions.invoke(\"query\", {\n body: {},\n method: \"GET\",\n headers: {\n \"X-Path\": `/query/feedback?${searchParams.toString()}`\n }\n });\n if (error) {\n throw error;\n }\n return data as {\n success: boolean;\n data: FeedbackListItem[];\n pagination: {\n limit: number;\n offset: number;\n total: number;\n };\n };\n };\n $[4] = params;\n $[5] = supabase;\n $[6] = t3;\n } else {\n t3 = $[6];\n }\n let t4;\n if ($[7] !== t2 || $[8] !== t3) {\n t4 = {\n queryKey: t2,\n queryFn: t3\n };\n $[7] = t2;\n $[8] = t3;\n $[9] = t4;\n } else {\n t4 = $[9];\n }\n return useQuery(t4);\n}","import { c as _c } from \"react/compiler-runtime\";\nimport { useMutation, useQueryClient } from \"@tanstack/react-query\";\nimport useSupabase from \"../useSupabase\";\nexport interface SubmitFeedbackParams {\n memoryId?: number;\n query: string;\n table: string;\n schema?: string;\n status?: \"success\" | \"failure\" | \"needs_review\";\n corrections?: {\n domainTerm?: string;\n domainFieldPath?: string;\n fieldPath?: string;\n filters?: any;\n };\n feedback?: string;\n}\nexport function useSubmitFeedback() {\n const $ = _c(7);\n const supabase = useSupabase();\n const queryClient = useQueryClient();\n let t0;\n if ($[0] !== supabase) {\n t0 = async params => {\n const {\n data,\n error\n } = await supabase.functions.invoke(\"query\", {\n body: params,\n method: \"POST\",\n headers: {\n \"X-Path\": \"/query/feedback\"\n }\n });\n if (error) {\n throw error;\n }\n return data as {\n success: boolean;\n data: any;\n };\n };\n $[0] = supabase;\n $[1] = t0;\n } else {\n t0 = $[1];\n }\n let t1;\n if ($[2] !== queryClient) {\n t1 = () => {\n queryClient.invalidateQueries({\n queryKey: [\"feedback-list\"]\n });\n };\n $[2] = queryClient;\n $[3] = t1;\n } else {\n t1 = $[3];\n }\n let t2;\n if ($[4] !== t0 || $[5] !== t1) {\n t2 = {\n mutationFn: t0,\n onSuccess: t1\n };\n $[4] = t0;\n $[5] = t1;\n $[6] = t2;\n } else {\n t2 = $[6];\n }\n return useMutation(t2);\n}","import { c as _c } from \"react/compiler-runtime\";\nimport { useMutation, useQueryClient } from \"@tanstack/react-query\";\nimport useSupabase from \"../useSupabase\";\nexport function useApplyFeedback() {\n const $ = _c(7);\n const supabase = useSupabase();\n const queryClient = useQueryClient();\n let t0;\n if ($[0] !== supabase) {\n t0 = async memoryId => {\n const {\n data,\n error\n } = await supabase.functions.invoke(\"query\", {\n body: {},\n method: \"POST\",\n headers: {\n \"X-Path\": `/query/feedback/${memoryId}/apply`\n }\n });\n if (error) {\n throw error;\n }\n return data as {\n success: boolean;\n data: any;\n learningResults: Array<{\n type: string;\n id: number;\n action: string;\n }>;\n };\n };\n $[0] = supabase;\n $[1] = t0;\n } else {\n t0 = $[1];\n }\n let t1;\n if ($[2] !== queryClient) {\n t1 = () => {\n queryClient.invalidateQueries({\n queryKey: [\"feedback-list\"]\n });\n };\n $[2] = queryClient;\n $[3] = t1;\n } else {\n t1 = $[3];\n }\n let t2;\n if ($[4] !== t0 || $[5] !== t1) {\n t2 = {\n mutationFn: t0,\n onSuccess: t1\n };\n $[4] = t0;\n $[5] = t1;\n $[6] = t2;\n } else {\n t2 = $[6];\n }\n return useMutation(t2);\n}","import { c as _c } from \"react/compiler-runtime\";\nimport { useMutation, useQueryClient } from \"@tanstack/react-query\";\nimport useSupabase from \"../useSupabase\";\nexport function useResolveFeedback() {\n const $ = _c(7);\n const supabase = useSupabase();\n const queryClient = useQueryClient();\n let t0;\n if ($[0] !== supabase) {\n t0 = async memoryId => {\n const {\n data,\n error\n } = await supabase.functions.invoke(\"query\", {\n body: {},\n method: \"POST\",\n headers: {\n \"X-Path\": `/query/feedback/${memoryId}/resolve`\n }\n });\n if (error) {\n throw error;\n }\n return data as {\n success: boolean;\n data: any;\n learningResults: Array<{\n type: string;\n id: number;\n }>;\n };\n };\n $[0] = supabase;\n $[1] = t0;\n } else {\n t0 = $[1];\n }\n let t1;\n if ($[2] !== queryClient) {\n t1 = () => {\n queryClient.invalidateQueries({\n queryKey: [\"feedback-list\"]\n });\n };\n $[2] = queryClient;\n $[3] = t1;\n } else {\n t1 = $[3];\n }\n let t2;\n if ($[4] !== t0 || $[5] !== t1) {\n t2 = {\n mutationFn: t0,\n onSuccess: t1\n };\n $[4] = t0;\n $[5] = t1;\n $[6] = t2;\n } else {\n t2 = $[6];\n }\n return useMutation(t2);\n}"],"mappings":"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","names":["_c","useMutation","_c","_temp","useMutation","_c","useMutation","_c","_temp","useMutation","_c","useMutation","_c","_temp","upsertItemAction","_temp2","useMutation","_c","_c","_temp","_temp2","_temp3","_c","useSessionStorageState","_c","_temp","_temp2","toPagedResponse","_c","useState","useRef","_c","useState","useRef","_temp","_c","_c","t6","_c","useMutation","_c","_temp","useMutation","_c","useEffect","useRef","BackendStatus","_c","_c","useState","useEffect","useState","useEffect","useMemo","_c","useEffect","useState","_c","useState","moment","useEffect","_c","_c","useCallback","useEffect","useMemo","useRef","useState","useState","useRef","useMemo","useCallback","useEffect","_c","useEffect","_c","values","import_moment","useRef","moment","_c","useEffect","useState","_c","useState","useEffect","_c","_c","_c","_c","_c","useQuery","_c","useQuery","_c","useMutation","_c","useMutation","_c","useMutation","useQueryClient","_c","useQueryClient","useMutation","_c","useMutation","useQueryClient","_c","useQueryClient","useMutation"]}
|