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