@pol-studios/db 1.0.21 → 1.0.23

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/dist/auth/context.js +2 -2
  2. package/dist/auth/hooks.js +3 -3
  3. package/dist/auth/index.js +3 -3
  4. package/dist/{chunk-R5B2XMN5.js → chunk-3L4HOEXV.js} +1614 -2141
  5. package/dist/chunk-3L4HOEXV.js.map +1 -0
  6. package/dist/{chunk-72WV3ALS.js → chunk-3UYBZHEV.js} +2 -2
  7. package/dist/{chunk-X3HZLNBV.js → chunk-BXSOHOQ2.js} +54 -985
  8. package/dist/chunk-BXSOHOQ2.js.map +1 -0
  9. package/dist/{chunk-N26IEHZT.js → chunk-FZF26ZRB.js} +18 -2
  10. package/dist/{chunk-N26IEHZT.js.map → chunk-FZF26ZRB.js.map} +1 -1
  11. package/dist/chunk-HTJ2FQW5.js +963 -0
  12. package/dist/chunk-HTJ2FQW5.js.map +1 -0
  13. package/dist/{chunk-2T6WTCP4.js → chunk-KDORWXGS.js} +69 -154
  14. package/dist/chunk-KDORWXGS.js.map +1 -0
  15. package/dist/{chunk-36DVUMQD.js → chunk-MBU4KE3V.js} +2 -2
  16. package/dist/{chunk-YERWPV6B.js → chunk-Q7WJEOQ5.js} +150 -19
  17. package/dist/chunk-Q7WJEOQ5.js.map +1 -0
  18. package/dist/{chunk-RMRYGICS.js → chunk-TSXQTYUG.js} +4 -4
  19. package/dist/core/index.d.ts +30 -1
  20. package/dist/hooks/index.d.ts +20 -1
  21. package/dist/hooks/index.js +1 -1
  22. package/dist/{index-BNKhgDdC.d.ts → index-2YySlz7X.d.ts} +3 -3
  23. package/dist/index.d.ts +11 -12
  24. package/dist/index.js +14 -95
  25. package/dist/index.native.d.ts +12 -30
  26. package/dist/index.native.js +17 -96
  27. package/dist/index.web.d.ts +132 -15
  28. package/dist/index.web.js +585 -46
  29. package/dist/index.web.js.map +1 -1
  30. package/dist/powersync-bridge/index.d.ts +1 -1
  31. package/dist/powersync-bridge/index.js +1 -1
  32. package/dist/query/index.js +10 -8
  33. package/dist/types/index.d.ts +1 -1
  34. package/dist/{useDbCount-Id14x_1P.d.ts → useDbCount-s-aR9YeV.d.ts} +1 -1
  35. package/dist/{useResolveFeedback-Ca2rh_Bs.d.ts → useResolveFeedback-DTGcHpCs.d.ts} +275 -390
  36. package/dist/with-auth/index.js +4 -4
  37. package/package.json +13 -12
  38. package/dist/chunk-2T6WTCP4.js.map +0 -1
  39. package/dist/chunk-R5B2XMN5.js.map +0 -1
  40. package/dist/chunk-X3HZLNBV.js.map +0 -1
  41. package/dist/chunk-YERWPV6B.js.map +0 -1
  42. /package/dist/{chunk-72WV3ALS.js.map → chunk-3UYBZHEV.js.map} +0 -0
  43. /package/dist/{chunk-36DVUMQD.js.map → chunk-MBU4KE3V.js.map} +0 -0
  44. /package/dist/{chunk-RMRYGICS.js.map → chunk-TSXQTYUG.js.map} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/query/useQuery.ts","../src/query/usePartialQuery.ts","../src/query/useAdvancedQuery.ts","../src/query/useInfiniteQuery.ts","../src/query/usePartialAdvancedQuery.ts"],"sourcesContent":["import { c as _c } from \"react/compiler-runtime\";\nimport { PostgrestError, PostgrestSingleResponse } from \"@supabase/supabase-js\";\nimport { useMemo } from \"react\";\nimport { ItemType } from \"@pol-studios/utils\";\nimport { encode, useQuery as useSupabaseQuery, UseQuerySingleReturn as BaseUseQuerySingleReturn } from \"@supabase-cache-helpers/postgrest-react-query\";\nimport { omit } from \"@pol-studios/utils\";\nimport { UseQueryOptions } from \"@tanstack/react-query\";\nimport { useDelayedValue } from \"@pol-studios/hooks/state\";\ntype ConfigurationOptions<T> = {\n crossOrganization?: boolean;\n filter?: (item: ItemType<T>) => boolean;\n};\nexport type UseQuerySingleReturn<T> = BaseUseQuerySingleReturn<T> & {\n data: T | null | undefined;\n};\nexport function useQuery(query, config) {\n const $ = _c(5);\n let t0;\n if ($[0] !== query) {\n const queryKey = encode(query, false);\n t0 = queryKey.join(\"-\");\n $[0] = query;\n $[1] = t0;\n } else {\n t0 = $[1];\n }\n const queryKeyString = t0;\n const debouncedKeyString = useDelayedValue(queryKeyString, 50);\n const isKeyStable = queryKeyString === debouncedKeyString;\n const effectiveEnabled = config?.enabled !== false && isKeyStable;\n let t1;\n if ($[2] !== config || $[3] !== effectiveEnabled) {\n t1 = omit({\n retry: 1,\n ...config,\n enabled: effectiveEnabled\n }, [\"queryKey\"]);\n $[2] = config;\n $[3] = effectiveEnabled;\n $[4] = t1;\n } else {\n t1 = $[4];\n }\n const request = useSupabaseQuery(query, t1 as any);\n return request as UseQuerySingleReturn<Result>;\n}","import { c as _c } from \"react/compiler-runtime\";\nimport { UseQueryOptions } from \"@tanstack/react-query\";\nimport { PostgrestSingleResponse } from \"@supabase/supabase-js\";\nimport { encode } from \"@supabase-cache-helpers/postgrest-react-query\";\nimport { useQuery } from \"./useQuery\";\nimport { useId, useMemo } from \"react\";\nimport { newUuid } from \"@pol-studios/utils\";\nimport { useSessionStorageState } from \"@pol-studios/hooks/storage\";\nexport type UsePartialQueryResult<T extends Record<string, any>> = ReturnType<typeof usePartialQuery<T[]>>;\ntype ItemType<T> = T extends Array<infer U> ? U : T;\nexport function usePartialQuery(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 = useQuery(rangedQuery, config as any);\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 let t6;\n if ($[13] !== baseQuery.count || $[14] !== baseQuery.data || $[15] !== currentPage || $[16] !== itemCountPerPage) {\n t6 = baseQuery.data ? toPagedResponse(baseQuery.data as Result, currentPage, baseQuery.count ?? baseQuery.data.length, itemCountPerPage) : null;\n $[13] = baseQuery.count;\n $[14] = baseQuery.data;\n $[15] = currentPage;\n $[16] = itemCountPerPage;\n $[17] = t6;\n } else {\n t6 = $[17];\n }\n const t7 = currentPage < pageCount;\n const t8 = currentPage > 1;\n let t9;\n if ($[18] !== baseQuery || $[19] !== currentPage || $[20] !== fetchPreviousPage || $[21] !== pageCount || $[22] !== safeFetchNextPage || $[23] !== setCurrentPage || $[24] !== t6 || $[25] !== t7 || $[26] !== t8) {\n t9 = {\n ...baseQuery,\n fetchPreviousPage,\n fetchNextPage: safeFetchNextPage,\n currentPage,\n setCurrentPage,\n data: t6,\n pageCount,\n hasNextPage: t7,\n hasPreviousPage: t8\n };\n $[18] = baseQuery;\n $[19] = currentPage;\n $[20] = fetchPreviousPage;\n $[21] = pageCount;\n $[22] = safeFetchNextPage;\n $[23] = setCurrentPage;\n $[24] = t6;\n $[25] = t7;\n $[26] = t8;\n $[27] = t9;\n } else {\n t9 = $[27];\n }\n return t9;\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 { encode } from \"@supabase-cache-helpers/postgrest-react-query\";\nimport { PostgrestSingleResponse, SupabaseClient } from \"@supabase/supabase-js\";\nimport { Dispatch, SetStateAction, useEffect, useMemo, useRef, useState } from \"react\";\nimport useSupabase from \"../useSupabase\";\nimport { PostgrestParser } from \"../parser/PostgrestParser\";\nimport { generateUUID } from \"../utils/uuid\";\nimport { DefinedUseQueryResult, useQuery, UseQueryOptions } from \"@tanstack/react-query\";\nimport { isNullOrWhitespace, isUsable, omit } from \"@pol-studios/utils\";\nimport { useSessionStorageState } from \"@pol-studios/hooks/storage\";\nimport { getSupabaseUrl } from \"../config\";\nimport { FilterConfig, TableInfo, PropertyType, ValueForPropertyType } from \"../types\";\n\n// Re-export FilterConfig and TableInfo for backward compatibility\n// NOTE: PropertyType and ValueForPropertyType are NOT re-exported here to avoid duplicates\n// They are exported from \"@pol-studios/db/types\" which is re-exported in index.ts\nexport type { FilterConfig, TableInfo };\nexport const normalizeFilter = (filter: FilterInput): Filter | FilterGroup | null => {\n // Check if it's a group (using either new 'op' or legacy 'operator' property)\n const groupOp = filter.op || filter.operator;\n if (groupOp && (groupOp === \"AND\" || groupOp === \"OR\") && filter.filters) {\n // It's a group, recursively normalize children\n return {\n id: filter.id || generateUUID(),\n op: groupOp,\n not: filter.not || filter.inverted,\n // Support both 'not' and legacy 'inverted' for groups\n filters: filter.filters.map(normalizeFilter).filter(Boolean) as Array<Filter | FilterGroup>\n };\n }\n\n // Get the operator - either from op or condition field\n let operator = filter.op || filter.condition;\n\n // Track if we need to negate the filter (for != and operators)\n let shouldNegate = filter.not || filter.inverted || false;\n\n // Convert unicode symbols and legacy operators to string operators that edge function expects\n if (operator === \"\\u220B\") operator = \"in\"; // CONTAINS symbol\n // Handle NOT EQUALS: \"!=\" and \"not equals symbol\" are converted to \"=\" with not: true\n if (operator === \"\\u2260\" || operator === \"!=\") {\n operator = \"=\";\n shouldNegate = true;\n }\n if (operator === \"like\") operator = \"contains\"; // Legacy LIKE\n if (operator === \"regex\" || operator === \"regex_i\" || operator === \"similar_to\") {\n // These advanced text operators aren't supported by the edge function yet\n // Fall back to contains for now\n operator = \"contains\";\n }\n\n // Skip filters with undefined operators\n if (!operator) {\n console.error(\"Filter has undefined operator:\", JSON.stringify(filter, null, 2));\n return null;\n }\n\n // Convert old format to new format\n if (filter.propertyName) {\n return {\n id: filter.id || generateUUID(),\n field: filter.propertyName,\n op: operator as FilterOperator,\n value: filter.value as string | number | string[] | number[],\n not: shouldNegate,\n display: filter.display || filter.propertyName\n };\n }\n\n // Already in new format but may need operator normalization\n return {\n id: filter.id || generateUUID(),\n field: filter.field || \"\",\n op: operator as FilterOperator,\n value: filter.value as string | number | string[] | number[],\n not: shouldNegate,\n similarity: filter.similarity,\n where: filter.where,\n display: filter.display || filter.field || \"\"\n };\n};\n/**\n * Filter state for the UI - extends Filter with UI-specific metadata.\n * FilterState can always be assigned where Filter is expected since it\n * contains all Filter properties. The omitted properties (similarity, where, options)\n * are AI search-specific and not typically needed in the UI filter state.\n */\nexport interface FilterState extends Omit<Filter, 'similarity' | 'where' | 'options'> {\n // All base properties (id, field, op, value, not, display, info) are inherited from Filter.\n}\n\n// Allows single or array values for a given PropertyType\nexport type ValueOrArrayForPropertyType<T extends PropertyType> = ValueForPropertyType<T> | ValueForPropertyType<T>[];\n\n/**\n * State for tracking extra query metadata\n */\ninterface ExtraDataState {\n count?: number;\n key?: string;\n [key: string]: unknown;\n}\n\n/**\n * Body structure for query execution\n */\ninterface QueryBody {\n filters: Array<Filter | FilterGroup>;\n pagination: {\n from?: number | null;\n to?: number | null;\n offset?: number;\n limit?: number;\n };\n sort?: Sort[];\n op?: \"AND\" | \"OR\";\n id?: string;\n not?: boolean;\n distinctOn?: string[];\n naturalLanguageQuery?: string;\n isReady?: boolean;\n}\nexport type BooleanOperator = \"AND\" | \"OR\";\n\n/**\n * Filter operators supported by the edge function.\n * This is the single source of truth - matches /supabase/functions/_shared/query-sdk/types.ts\n *\n * Note: The following operators are normalized by normalizeFilter() before sending to the server:\n * - \"like\" -> \"contains\"\n * - \"regex\", \"regex_i\", \"similar_to\" -> \"contains\"\n * - \"!=\" and \"<>\" are NOT supported - use \"=\" with not: true instead\n */\nexport type FilterOperator =\n// Comparison operators\n\"=\" | \">\" | \">=\" | \"<\" | \"<=\"\n// Text search operators\n| \"contains\" | \"ilike\"\n// Null/boolean check\n| \"is\"\n// Array membership\n| \"in\"\n// AI/semantic search\n| \"ai_search\";\n\n// Type alias for backward compatibility\nexport type FilterConditionType = FilterOperator;\n\n/**\n * Filter interface - matches edge function API\n */\nexport interface Filter {\n /** Unique identifier */\n id: string;\n /** Field to filter on */\n field: string;\n /** Operator */\n op: FilterOperator;\n /** Value to compare */\n value: string | number | string[] | number[] | boolean | null;\n /** Negate the condition */\n not?: boolean;\n /** AI search options (when op = \"ai_search\") */\n similarity?: number;\n where?: string;\n display?: string;\n options?: {\n display: string;\n value: ValueForPropertyType<PropertyType>;\n }[];\n /** Filter configuration (UI metadata) */\n info?: FilterConfig<any>;\n}\n\n/**\n * Filter group - combine multiple filters\n */\nexport interface FilterGroup {\n /** Unique identifier */\n id: string;\n /** How to combine filters */\n op: \"AND\" | \"OR\";\n /** Filters in this group */\n filters: Array<Filter | FilterGroup>;\n /** Negate the entire group (NOT (A AND B)) */\n not?: boolean;\n}\n\n/**\n * Input type for normalizeFilter - accepts both legacy and new filter formats.\n * The normalizeFilter function handles legacy operators (like, regex, etc.) for data migration,\n * but the type only exposes the supported FilterOperator values.\n */\nexport type FilterInput = {\n id?: string;\n // New format fields (Filter)\n field?: string;\n value?: string | number | string[] | number[] | boolean | null;\n not?: boolean;\n similarity?: number;\n where?: string;\n display?: string;\n options?: {\n display: string;\n value: ValueForPropertyType<PropertyType>;\n }[];\n // FilterGroup fields\n filters?: Array<Filter | FilterGroup | FilterInput>;\n // Combined op field - can be either FilterOperator (for filters) or group operator\n op?: FilterOperator | \"AND\" | \"OR\";\n // Legacy fields\n propertyName?: string;\n condition?: string;\n operator?: \"AND\" | \"OR\";\n inverted?: boolean;\n};\n\n/**\n * Pagination settings\n */\nexport interface Pagination {\n offset?: number;\n limit?: number;\n}\n\n/**\n * Configuration for computed/aggregated field sorting\n */\nexport interface ComputedSortConfig {\n /** Aggregation function to apply */\n fn: \"SUM\" | \"COUNT\" | \"AVG\" | \"MIN\" | \"MAX\";\n /** Field to aggregate */\n field: string;\n /** Relationship path for related table aggregation (e.g., \"OrderItem\" or \"Order.OrderItem\") */\n relationship?: string;\n}\n\n/**\n * Sort order\n */\nexport interface Sort {\n field: string;\n direction: \"asc\" | \"desc\";\n /** Optional computed/aggregated sort configuration for sorting by aggregate values */\n computed?: ComputedSortConfig;\n}\n\n/**\n * Query state that includes FilterGroup plus pagination, sort, and isReady\n * Used by useAdvancedFilterQuery for managing filter state with query metadata\n */\nexport interface QueryState extends FilterGroup {\n /** Pagination settings */\n pagination?: Pagination;\n /** Sort order */\n sort?: Sort[];\n /** Distinct ON expressions - returns one record per unique combination */\n distinctOn?: string[];\n /** Natural language query - converts to filters automatically */\n naturalLanguageQuery?: string;\n /** Whether the query is ready to execute */\n isReady: boolean;\n}\nexport interface ClarificationSuggestion {\n interpretation: string;\n field_path: string;\n example: string;\n confidence: number;\n}\nexport interface ClarificationQuestion {\n question: string;\n suggestions: ClarificationSuggestion[];\n}\ninterface AdvancedQueryResult<T> {\n data: T;\n count: number;\n error?: Error | null;\n clarification?: ClarificationQuestion;\n}\nexport interface FilterContextType<T> {\n filters: FilterGroup;\n setFilters: Dispatch<SetStateAction<FilterGroup>>;\n}\n\n// Legacy types for backward compatibility\nexport interface OrderColumn {\n field: string;\n direction: \"asc\" | \"desc\";\n}\nexport function useAdvancedFilterQuery<Result>(query: PromiseLike<PostgrestSingleResponse<Result>>, config?: Omit<UseQueryOptions<PostgrestSingleResponse<Result>>, \"queryKey\" | \"queryFn\"> & {\n key?: string;\n filterKey?: string;\n searchByDefault?: boolean;\n timeout?: number;\n count?: \"exact\" | \"estimated\" | \"\";\n}): [DefinedUseQueryResult<Result, Error> & {\n count: number;\n clarification?: ClarificationQuestion;\n}, QueryState, Dispatch<SetStateAction<QueryState>>] {\n const filterKey = useMemo(() => config?.filterKey ?? window.location?.pathname, [config?.filterKey]);\n const [filterLayer, setFilterLayer] = useSessionStorageState<QueryState>(filterKey, {\n id: \"root\",\n op: \"AND\",\n filters: [],\n pagination: undefined,\n sort: [],\n isReady: isUsable(config?.searchByDefault) ? config.searchByDefault ? false : true : true\n });\n const parser = useMemo(() => new PostgrestParser<Result>(query as any), [query, config?.key]);\n useEffect(() => {\n const searchParam = parser.searchParams.get(\"order\");\n if (searchParam) {\n const orderColumns = searchParam.split(\",\");\n const orders: OrderColumn[] = [];\n orderColumns.forEach(x => {\n const values = x.split(\".\");\n orders.push({\n field: values[0],\n direction: values[1] === \"asc\" ? \"asc\" : \"desc\"\n });\n });\n setFilterLayer(pre => {\n if (!pre) {\n return {\n id: \"root\",\n op: \"AND\",\n filters: [],\n isReady: true,\n sort: orders\n };\n }\n return {\n ...pre,\n id: pre.id || \"root\",\n op: pre.op || \"AND\",\n filters: pre.filters || [],\n isReady: pre.isReady ?? true,\n sort: [...(pre.sort || []).filter(old => orders.some(o => o.field === old.field) === false), ...orders]\n };\n });\n }\n }, [JSON.stringify(parser.searchParams), config?.key]);\n const encodedQueryKeyRef = useRef<any[]>([]);\n const encodedQueryKey = useMemo(() => {\n const newEncoded = encode(query, false);\n const newEncodedString = JSON.stringify(newEncoded);\n const oldEncodedString = JSON.stringify(encodedQueryKeyRef.current);\n if (newEncodedString !== oldEncodedString) {\n encodedQueryKeyRef.current = newEncoded;\n }\n return encodedQueryKeyRef.current;\n }, [query, parser.offset, parser.limit]);\n\n // Stabilize filterLayer stringification using ref\n const filterLayerStringRef = useRef<string>(\"\");\n const currentFilterString = JSON.stringify(filterLayer, (key, value) => key === \"id\" ? \"redacted\" : value);\n if (filterLayerStringRef.current !== currentFilterString) {\n filterLayerStringRef.current = currentFilterString;\n }\n\n // Stabilize queryKey using ref - don't use useMemo, just ref\n const queryKeyRef = useRef<any[]>([]);\n const newKey = [encodedQueryKey[0], encodedQueryKey[1], encodedQueryKey[2], encodedQueryKey[3], encodedQueryKey[4], encodedQueryKey[5], \"count=\" + (config?.count ?? \"\"), encodedQueryKey[7], encodedQueryKey[8], filterLayerStringRef.current];\n\n // Only update ref if content actually changed\n const newKeyString = JSON.stringify(newKey);\n const oldKeyString = JSON.stringify(queryKeyRef.current);\n if (oldKeyString !== newKeyString) {\n queryKeyRef.current = newKey;\n }\n const queryKey = queryKeyRef.current;\n const [previousKey, setPreviousKey] = useState(queryKey);\n useEffect(() => {\n if (filterLayer?.isReady) {\n setPreviousKey(queryKey);\n }\n }, [...queryKey]);\n\n // const [local, setLocal] = useLocalStorageState(\"query\" + path, {});\n\n const loadingKey = filterLayer?.isReady ? queryKey : previousKey ?? queryKey;\n const supabase = useSupabase();\n const isEnabled = config?.enabled == null || config?.enabled === undefined ? true : config.enabled;\n const [extraData, setExtraData] = useState<ExtraDataState>({});\n const queryResponse = useQuery<AdvancedQueryResult<Result>>({\n ...(omit({\n retry: 0,\n // Changed from 1 to 0 to prevent retries\n ...(config ?? {}),\n // Override any config settings to prevent multiple executions\n refetchOnMount: false,\n refetchOnWindowFocus: false,\n refetchOnReconnect: false,\n structuralSharing: false,\n enabled: filterLayer?.isReady && isEnabled\n }, [\"queryKey\", \"persister\", \"initialData\"]) as any),\n queryKey: loadingKey,\n queryFn: async props => {\n // Guard clause for type safety - query is only enabled when filterLayer exists\n if (!filterLayer) {\n throw new Error(\"Filter layer is not initialized\");\n }\n try {\n const searchParams = Array.from(parser.searchParams.entries());\n const body = {\n ...filterLayer,\n filters: [...filterLayer.filters],\n pagination: {\n ...filterLayer.pagination\n },\n sort: [...(filterLayer.sort || [])]\n };\n const currentKey = `${parser.schema}${parser.table}${parser.select}${JSON.stringify(omit(body, \"pagination\"))}`;\n\n // For now, assume we don't need edge function for ordering\n // (simplified ordering logic removed complex manyToOneTableInfo handling)\n const requiresEdgeForOrdering = false;\n\n // Always use edge function if natural language query is present\n const hasNaturalLanguageQuery = !!filterLayer.naturalLanguageQuery;\n if (filterLayer.filters.length == 0 && requiresEdgeForOrdering === false && !hasNaturalLanguageQuery) {\n const result = await executeSupabaseQuery(supabase, body, parser, extraData, props.signal, config?.count);\n setExtraData(pre_0 => ({\n ...omit(result, \"data\"),\n count: result.count ? result.count : pre_0.count,\n key: currentKey\n }));\n return result;\n }\n searchParams.forEach(([k, v]) => {\n if (k.includes(\"offset\")) {\n body.pagination.offset = Number(v);\n return;\n }\n if (k.includes(\"limit\")) {\n body.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 // body.order.push({\n // propertyName: values[0],\n // isAscending: values[1] === \"asc\",\n // });\n // });\n return;\n }\n // Skip .or() filters - they're handled separately below for edge function\n if (k === \"or\") {\n return;\n }\n if (v.includes(\".\") === false) return;\n const values_0 = v.split(\".\");\n const column = k;\n let rawCondition = values_0[0];\n let condition = \"\";\n let value_0: any = values_0[1];\n const inverted = values_0[0] === \"not\";\n if (column == \"select\") return;\n if (rawCondition === \"not\") {\n rawCondition = values_0[1];\n value_0 = values_0[2];\n }\n switch (rawCondition) {\n case \"eq\":\n condition = \"=\";\n break;\n case \"in\":\n condition = \"in\";\n value_0 = value_0.slice(1, value_0.length - 1).split(\",\").filter((x_0: string) => isNullOrWhitespace(x_0) === false);\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 if (value_0 == \"null\") {\n value_0 = null;\n }\n break;\n }\n body.filters = [{\n id: `filter_${column}_${Date.now()}`,\n field: column,\n op: condition as FilterOperator,\n value: value_0,\n not: inverted,\n display: column\n }, {\n filters: [...body.filters] as Filter[],\n op: body.op ?? \"AND\",\n id: \"filterstate\"\n }];\n body.op = \"AND\";\n\n // Keep the base query in the query you are saving but not the pagination settings\n const bodyCopy = JSON.parse(JSON.stringify(body));\n bodyCopy.pagination = {\n page: 0,\n pageSize: 50\n };\n bodyCopy.isReady = true;\n\n // setLocal(bodyCopy);\n });\n const {\n data: {\n session\n }\n } = await supabase.auth.getSession();\n if (!session?.access_token) {\n throw new Error(\"No active session\");\n }\n const controller = new AbortController();\n props.signal.addEventListener(\"abort\", () => {\n controller.abort();\n });\n const timeout = setTimeout(() => controller.abort(), config?.timeout ?? 15_000);\n let result_0: any = null;\n let response: {\n error: Error | null;\n data: any;\n } = {\n error: null,\n data: null\n };\n try {\n // Strip UI-only properties from filters before sending to server\n // These properties are for UI metadata and should never be sent to the edge function\n const UI_ONLY_KEYS = new Set([\"info\", \"options\", \"display\"]);\n const filteredBody = JSON.parse(JSON.stringify(body, (key_0, value_1) => {\n // Unconditionally remove UI-only properties from all filters\n if (UI_ONLY_KEYS.has(key_0)) {\n return undefined;\n }\n return value_1;\n }));\n\n // Normalize all filters to use the new format (field, op) instead of (propertyName, condition)\n // Also convert unicode symbols to string operators\n\n filteredBody.filters = filteredBody.filters.map(normalizeFilter).filter(Boolean);\n\n // Handle .or() filters from searchParams by converting to filter format\n // Extract the .or() condition if it exists\n const orParam = parser.searchParams.get(\"or\");\n if (orParam) {\n // Parse the or condition\n // Example: \"(oldRecord->projectDatabaseId.eq.40,newRecord->projectDatabaseId.eq.40)\"\n // Strip parentheses first\n const cleanedOrParam = orParam.replace(/^\\(|\\)$/g, \"\");\n\n // Split by comma to get individual conditions\n const orConditions = cleanedOrParam.split(\",\");\n const orFilters = orConditions.map((condition_0, idx) => {\n // Parse each condition: \"oldRecord->projectDatabaseId.eq.40\"\n // The format is: field.operator.value\n const match = condition_0.match(/^(.+?)\\.([^.]+)\\.(.+)$/);\n if (match) {\n const [_, field, rawOp, value_2] = match;\n\n // Convert Supabase operators to edge function operators\n let op = rawOp.trim();\n switch (op) {\n case \"eq\":\n op = \"=\";\n break;\n case \"neq\":\n op = \"!=\";\n break;\n case \"gt\":\n op = \">\";\n break;\n case \"gte\":\n op = \">=\";\n break;\n case \"lt\":\n op = \"<\";\n break;\n case \"lte\":\n op = \"<=\";\n break;\n case \"like\":\n op = \"contains\";\n break;\n case \"ilike\":\n op = \"contains\";\n break;\n case \"in\":\n op = \"in\";\n break;\n // default: keep as-is\n }\n return {\n id: `or-${idx}`,\n field: field.trim(),\n op: op,\n value: value_2.trim()\n };\n }\n return null;\n }).filter(Boolean);\n if (orFilters.length > 0) {\n // Add OR group to filters\n filteredBody.filters = [...filteredBody.filters, {\n id: \"base-or-group\",\n op: \"OR\" as const,\n filters: orFilters,\n pagination: undefined,\n sort: undefined,\n isReady: true\n }];\n }\n }\n const res = await fetch(`${getSupabaseUrl()}/functions/v1/query?forceDenoVersion=2`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"Authorization\": `Bearer ${session.access_token}`\n },\n body: JSON.stringify({\n table: parser.table,\n schema: parser.schema,\n select: parser.select,\n filters: {\n id: filteredBody.id || \"root\",\n op: filteredBody.op || filteredBody.operator || \"AND\",\n not: filteredBody.not || filteredBody.inverted,\n // Support both 'not' and legacy 'inverted'\n filters: filteredBody.filters || []\n },\n pagination: filteredBody.pagination,\n sort: filteredBody.sort,\n distinctOn: filteredBody.distinctOn,\n naturalLanguageQuery: filteredBody.naturalLanguageQuery,\n count: currentKey === extraData.key ? \"\" : config?.count ?? \"\",\n debug: true\n }),\n signal: controller.signal\n });\n if (!res.ok) {\n const errorData = await res.json();\n // Extract error message from response - edge function returns { error: string }\n const errorMessage_0 = typeof errorData?.error === \"string\" ? errorData.error : errorData?.error?.message || errorData?.message || \"An error occurred while processing your request\";\n throw new Error(errorMessage_0);\n }\n const data = await res.json();\n\n // Check if this is a clarification response\n if (data.clarification) {\n // Return clarification response - don't process as regular data\n return {\n data: [] as Result[],\n // Empty data array\n count: 0,\n clarification: data.clarification as ClarificationQuestion,\n error: undefined\n };\n }\n result_0 = data;\n response = {\n error: null,\n data: data\n };\n } catch (err: any) {\n if (err.name === \"AbortError\") {\n console.error(\"Fetch aborted/time-out\");\n response = {\n error: new Error(\"This query timed out\"),\n data: null\n };\n } else if (err instanceof Error) {\n // Already an Error instance\n response = {\n error: err,\n data: null\n };\n } else {\n // Convert plain object or string to Error\n const errorMessage = err?.error || err?.message || String(err);\n response = {\n error: new Error(errorMessage),\n data: null\n };\n }\n } finally {\n clearTimeout(timeout);\n }\n\n // const response = await supabase.functions.invoke(\"query\", {\n // body: {\n // tableName: parser.table,\n // schema: parser.schema,\n // query: parser.select,\n // filter: body,\n // },\n // method: \"POST\",\n // });\n\n if (response.error) {\n throw response.error;\n } else if ((response.data as any)?.error) {\n throw new Error((response.data as any).error);\n }\n\n // Check if result contains clarification (should have been handled above, but double-check)\n if (result_0.clarification) {\n return {\n data: [] as Result[],\n count: 0,\n clarification: result_0.clarification as ClarificationQuestion,\n error: undefined\n };\n }\n setExtraData(pre_1 => ({\n ...omit(result_0, \"data\"),\n count: pre_1.key === currentKey ? pre_1.count : result_0.count,\n key: currentKey\n }));\n return {\n ...result_0,\n statusText: \"\",\n status: result_0.data?.length > result_0.count ? 206 : 200,\n error: (response.data as any)?.error ?? null,\n hasMore: result_0.data?.length < result_0.count ? true : false\n };\n } catch (error) {\n if (error instanceof Error && error.name === \"AbortError\") {\n console.log(\"Fetch aborted\");\n } else {\n console.error(\"Error fetching data:\", error);\n }\n if (error instanceof Error && error.message === \"Failed to send a request to the Edge Function\") {\n throw new Error(\"Could not contact query server\");\n }\n throw error;\n }\n }\n });\n const response_0 = {\n ...queryResponse,\n data: (queryResponse.data as any)?.data,\n count: extraData.count,\n clarification: (queryResponse.data as any)?.clarification\n } as DefinedUseQueryResult<Result, Error> & {\n count: number;\n clarification?: ClarificationQuestion;\n };\n useEffect(() => {\n if (queryResponse.isFetched && response_0.count == null) {\n queryResponse.refetch();\n }\n }, [response_0.count]);\n useEffect(() => {\n if ((queryResponse.data as any)?.error == null) return;\n if ((queryResponse.data as any)?.error?.message?.includes(\" does not exist\")) {\n setFilterLayer({\n id: \"root\",\n op: \"AND\",\n filters: [],\n pagination: undefined,\n sort: [],\n isReady: isUsable(config?.searchByDefault) ? config.searchByDefault ? false : true : true\n });\n }\n }, [(queryResponse.data as any)?.error]);\n return [response_0, filterLayer!, setFilterLayer as any];\n}\n\n// Helper function to check if a column is searchable\n// This is now handled at the FilterBuilder level, but keeping for backward compatibility\nfunction isSearchableColumn(columnName: string): boolean {\n // Since search is now handled at the FilterBuilder level,\n // we'll allow all searches to pass through here\n return true;\n}\nasync function executeSupabaseQuery<Result>(supabase: SupabaseClient, body: QueryBody, parser: PostgrestParser<Result>, extraData: ExtraDataState, signal: AbortSignal, count?: \"exact\" | \"estimated\" | \"\") {\n const searchParams = Array.from(parser.searchParams.entries());\n const currentKey = `${parser.schema}${parser.table}${parser.select}${JSON.stringify(omit(body, \"pagination\"))}`;\n const query = supabase.schema(parser.schema).from(parser.table).select(parser.select, {\n count: currentKey === extraData.key ? undefined : count || undefined\n });\n\n // Handle sort array from FilterGroup\n if (body.sort && Array.isArray(body.sort)) {\n body.sort.forEach((s: Sort) => {\n query.order(s.field, {\n ascending: s.direction === \"asc\"\n });\n });\n }\n const from = searchParams.find(x => x[0].includes(\"offset\"))?.[1];\n const to = searchParams.find(x => x[0].includes(\"limit\"))?.[1];\n searchParams.forEach(([k, v]) => {\n if (k.includes(\"offset\") && isUsable(v)) {\n body.pagination.from = Number(v);\n return;\n }\n if (k.includes(\"limit\") && isUsable(v)) {\n body.pagination.to = Number(from) + Number(v) - 1;\n return;\n }\n\n // Special handling for .or() filters - pass through as-is\n if (k === \"or\") {\n query.or(v.slice(1, v.length - 1)); // Strip surrounding parentheses\n return;\n }\n const values = v.split(\".\");\n const column = k;\n let rawCondition = values[0];\n let value: any = values[1];\n if (column == \"select\") return;\n // Skip 'order' param - ordering is handled separately via body.sort\n if (column == \"order\") return;\n if (v.includes(\".\") === false) return;\n\n // Skip non-searchable fields from search to avoid ILIKE errors\n // This is now handled at the FilterBuilder level, so we'll allow all searches\n if (rawCondition === \"ilike\" && !isSearchableColumn(column)) {\n return;\n }\n if (rawCondition === \"not\") {\n rawCondition = values[1];\n value = values[2];\n query.not(column, rawCondition, value);\n } else {\n query.filter(column, rawCondition, value);\n }\n });\n if (body.pagination.from !== null && body.pagination.from !== undefined && body.pagination.to !== null && body.pagination.to !== undefined && isNaN(body.pagination.from) === false && isNaN(body.pagination.to) === false) {\n query.range(body.pagination.from, body.pagination.to);\n }\n const result = await query.abortSignal(signal);\n const dataLength = result.data?.length ?? 0;\n const totalCount = result.count ?? 0;\n return {\n ...result,\n statusText: \"\",\n status: dataLength > totalCount ? 206 : 200,\n error: result.error,\n hasMore: dataLength < totalCount\n };\n}\n\n// Alias for backward compatibility - renamed from useDbAdvanceFilterQuery\nexport const useAdvancedQuery = useAdvancedFilterQuery;","import { InfiniteData, useInfiniteQuery as useTanstackInfiniteQuery, 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 useInfiniteQuery<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 = useTanstackInfiniteQuery<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 { 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, useAdvancedFilterQuery } from \"./useAdvancedQuery\";\nexport type UsePartialAdvancedQueryResult<T extends Record<string, any>> = ReturnType<typeof usePartialAdvancedQuery<T[]>>;\nexport function usePartialAdvancedQuery(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] = useAdvancedFilterQuery(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 let t11;\n if ($[34] !== baseQuery.count || $[35] !== baseQuery.data || $[36] !== currentPage || $[37] !== itemCountPerPage) {\n t11 = 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] = t11;\n } else {\n t11 = $[38];\n }\n const t12 = (currentPage ?? 1) < pageCount;\n const t13 = (currentPage ?? 1) > 1;\n const t14 = baseQuery.count ?? baseQuery.data?.length;\n let t15;\n if ($[39] !== baseQuery || $[40] !== currentPage || $[41] !== fetchPreviousPage || $[42] !== pageCount || $[43] !== safeFetchNextPage || $[44] !== setCurrentPage || $[45] !== t11 || $[46] !== t12 || $[47] !== t13 || $[48] !== t14) {\n t15 = {\n ...baseQuery,\n clarification: baseQuery.clarification,\n fetchPreviousPage,\n fetchNextPage: safeFetchNextPage,\n currentPage,\n setCurrentPage,\n data: t11,\n pageCount,\n hasNextPage: t12,\n hasPreviousPage: t13,\n count: t14\n };\n $[39] = baseQuery;\n $[40] = currentPage;\n $[41] = fetchPreviousPage;\n $[42] = pageCount;\n $[43] = safeFetchNextPage;\n $[44] = setCurrentPage;\n $[45] = t11;\n $[46] = t12;\n $[47] = t13;\n $[48] = t14;\n $[49] = t15;\n } else {\n t15 = $[49];\n }\n const request = t15 as ReturnType<typeof useAdvancedFilterQuery<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 useAdvancedFilterQuery<Result>>[0][\"clarification\"];\n };\n let t16;\n if ($[50] !== filter || $[51] !== request || $[52] !== setFilters) {\n t16 = [request, filter, setFilters];\n $[50] = filter;\n $[51] = request;\n $[52] = setFilters;\n $[53] = t16;\n } else {\n t16 = $[53];\n }\n return t16;\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}"],"mappings":"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","names":["useQuery","_c","_c","useQuery","useQuery","useSessionStorageState","useSessionStorageState","useQuery","useMemo","useRef","useRef","useMemo","_c","useState","useSessionStorageState","_c","useState","useSessionStorageState","_temp","_temp2","toPagedResponse"]}
@@ -3,23 +3,16 @@ import {
3
3
  createAdapterRegistry,
4
4
  createSupabaseAdapter,
5
5
  stripSchemaPrefix
6
- } from "./chunk-R5B2XMN5.js";
6
+ } from "./chunk-3L4HOEXV.js";
7
7
  import {
8
8
  DataLayerCoreContext,
9
9
  DataLayerStatusContext
10
- } from "./chunk-YERWPV6B.js";
10
+ } from "./chunk-Q7WJEOQ5.js";
11
11
  import {
12
12
  QueryExecutor,
13
13
  extractRelationNames,
14
14
  parseSelect
15
- } from "./chunk-X3HZLNBV.js";
16
- import {
17
- getSupabaseUrl
18
- } from "./chunk-GC3TBUWE.js";
19
- import {
20
- isNullOrWhitespace,
21
- newUuid
22
- } from "./chunk-OQ7U6EQ3.js";
15
+ } from "./chunk-BXSOHOQ2.js";
23
16
  import {
24
17
  useSupabase
25
18
  } from "./chunk-5EFDS7SR.js";
@@ -1134,120 +1127,16 @@ var require_merge_options = __commonJS({
1134
1127
  }
1135
1128
  });
1136
1129
 
1137
- // src/useDbUpload.ts
1138
- import { c as _c } from "react/compiler-runtime";
1139
- import { useMutation } from "@tanstack/react-query";
1140
- import { Upload } from "tus-js-client";
1141
- function sanitizeStorageKey(path) {
1142
- const cleaned = path.replace(/[\u202F\u00A0]/g, " ").normalize("NFKD").replace(/[\u0300-\u036f]/g, "");
1143
- return cleaned.trim().replace(/\s+/g, "-").replace(/[^A-Za-z0-9\-_.\/]/g, "");
1144
- }
1145
- async function uploadFile(supabase, bucketName, fileName, fileBody, fileOptions, requestOptions) {
1146
- const {
1147
- data: {
1148
- session
1149
- }
1150
- } = await supabase.auth.getSession();
1151
- if (session === null) throw new Error("User needs to be logged in.");
1152
- const contentType = "type" in fileBody ? fileBody.type : fileOptions.contentType;
1153
- if (contentType === void 0) {
1154
- throw new Error("Needs content type for body.");
1155
- }
1156
- return new Promise((resolve, reject) => {
1157
- var upload = new Upload(fileBody, {
1158
- endpoint: `${getSupabaseUrl()}/storage/v1/upload/resumable`,
1159
- retryDelays: [0, 3e3, 5e3, 1e4, 2e4],
1160
- headers: {
1161
- ...fileOptions.headers,
1162
- authorization: `Bearer ${session.access_token}`,
1163
- "x-upsert": "true"
1164
- // optionally set upsert to true to overwrite existing files
1165
- },
1166
- uploadDataDuringCreation: true,
1167
- removeFingerprintOnSuccess: true,
1168
- // Important if you want to allow re-uploading the same file https://github.com/tus/tus-js-client/blob/main/docs/api.md#removefingerprintonsuccess
1169
- metadata: {
1170
- bucketName,
1171
- objectName: fileName,
1172
- contentType,
1173
- cacheControl: fileOptions.cacheControl ?? "3600",
1174
- duplex: fileOptions.duplex ?? "half"
1175
- },
1176
- chunkSize: 6 * 1024 * 1024,
1177
- // NOTE: it must be set to 6MB (for now) do not change it
1178
- onError: function(error) {
1179
- console.log("Failed because: " + error);
1180
- reject(error);
1181
- },
1182
- onProgress: requestOptions.onUploadProgress,
1183
- onSuccess: function(result) {
1184
- resolve(result);
1185
- }
1186
- });
1187
- return upload.findPreviousUploads().then(function(previousUploads) {
1188
- if (previousUploads.length) {
1189
- upload.resumeFromPreviousUpload(previousUploads[0]);
1190
- }
1191
- upload.start();
1192
- });
1193
- });
1194
- }
1195
- function useDbAttachmentUpload(bucketId, t0) {
1196
- const $ = _c(6);
1197
- let t1;
1198
- if ($[0] !== t0) {
1199
- t1 = t0 === void 0 ? {
1200
- onUploadProgress: _temp
1201
- } : t0;
1202
- $[0] = t0;
1203
- $[1] = t1;
1204
- } else {
1205
- t1 = $[1];
1206
- }
1207
- const options = t1;
1208
- const supabase = useSupabase();
1209
- let t2;
1210
- if ($[2] !== bucketId || $[3] !== options || $[4] !== supabase) {
1211
- t2 = {
1212
- mutationFn: async (item) => {
1213
- const directory = item.directory ?? newUuid();
1214
- const originalName = item.fileName ?? ("name" in item.file ? String(item.file.name) : "") ?? ("fileName" in item.file ? String(item.file.fileName) : "");
1215
- if (isNullOrWhitespace(originalName)) {
1216
- throw new Error("file must have a valid name");
1217
- }
1218
- const filePath = `${directory}/${sanitizeStorageKey(originalName)}`;
1219
- await uploadFile(supabase, bucketId, filePath, item.file, {
1220
- upsert: item.upsert,
1221
- cacheControl: item.cacheControl,
1222
- contentType: item.contentType,
1223
- duplex: item.duplex
1224
- }, {
1225
- ...options,
1226
- onUploadProgress: item.onUploadProgress ?? _temp2
1227
- });
1228
- return {
1229
- bucketId,
1230
- path: filePath,
1231
- contentType: item.contentType
1232
- };
1233
- }
1234
- };
1235
- $[2] = bucketId;
1236
- $[3] = options;
1237
- $[4] = supabase;
1238
- $[5] = t2;
1239
- } else {
1240
- t2 = $[5];
1130
+ // src/utils/type-transformer.ts
1131
+ var columnMapCache = /* @__PURE__ */ new WeakMap();
1132
+ function getOrCreateSchemaCache(schema) {
1133
+ let cache = columnMapCache.get(schema);
1134
+ if (!cache) {
1135
+ cache = /* @__PURE__ */ new Map();
1136
+ columnMapCache.set(schema, cache);
1241
1137
  }
1242
- const uploadMutation = useMutation(t2);
1243
- return uploadMutation;
1244
- }
1245
- function _temp2() {
1138
+ return cache;
1246
1139
  }
1247
- function _temp() {
1248
- }
1249
-
1250
- // src/utils/type-transformer.ts
1251
1140
  function transformValueFromStorage(value, columnInfo) {
1252
1141
  if (value === null || value === void 0) {
1253
1142
  return value;
@@ -1276,6 +1165,10 @@ function transformValueFromStorage(value, columnInfo) {
1276
1165
  }
1277
1166
  }
1278
1167
  function getColumnInfoMap(schema, tableName) {
1168
+ const cache = getOrCreateSchemaCache(schema);
1169
+ if (cache.has(tableName)) {
1170
+ return cache.get(tableName);
1171
+ }
1279
1172
  const columnMap = /* @__PURE__ */ new Map();
1280
1173
  for (const schemaName of Object.keys(schema.schemas)) {
1281
1174
  const schemaData = schema.schemas[schemaName];
@@ -1284,6 +1177,7 @@ function getColumnInfoMap(schema, tableName) {
1284
1177
  for (const col of table.columns) {
1285
1178
  columnMap.set(col.name, col);
1286
1179
  }
1180
+ cache.set(tableName, columnMap);
1287
1181
  return columnMap;
1288
1182
  }
1289
1183
  const view = schemaData.views?.[tableName];
@@ -1291,9 +1185,11 @@ function getColumnInfoMap(schema, tableName) {
1291
1185
  for (const col of view.columns) {
1292
1186
  columnMap.set(col.name, col);
1293
1187
  }
1188
+ cache.set(tableName, columnMap);
1294
1189
  return columnMap;
1295
1190
  }
1296
1191
  }
1192
+ cache.set(tableName, null);
1297
1193
  return null;
1298
1194
  }
1299
1195
  function transformRowFromStorage(row, schema, tableName) {
@@ -1661,7 +1557,22 @@ var defaultSyncControl = {
1661
1557
  },
1662
1558
  setScope: async () => {
1663
1559
  console.warn("Scope control not available: PowerSync not initialized");
1664
- }
1560
+ },
1561
+ // Failed upload controls
1562
+ retryFailedUploads: async () => {
1563
+ console.warn("Retry not available: PowerSync not initialized");
1564
+ },
1565
+ clearFailedUploads: () => {
1566
+ console.warn("Clear failed uploads not available: PowerSync not initialized");
1567
+ },
1568
+ failedUploads: [],
1569
+ pauseAutoRetry: () => {
1570
+ console.warn("Pause auto-retry not available: PowerSync not initialized");
1571
+ },
1572
+ resumeAutoRetry: () => {
1573
+ console.warn("Resume auto-retry not available: PowerSync not initialized");
1574
+ },
1575
+ isAutoRetryPaused: false
1665
1576
  };
1666
1577
  function DataLayerProvider({
1667
1578
  config,
@@ -1705,9 +1616,6 @@ function DataLayerProvider({
1705
1616
  schema: config.schema
1706
1617
  });
1707
1618
  registry.initializeAutoDetection(detector);
1708
- if (powerSyncSyncStatus) {
1709
- detector.updateSyncStatus(powerSyncSyncStatus);
1710
- }
1711
1619
  const detection = detector.detect();
1712
1620
  setStatus({
1713
1621
  isInitialized: true,
@@ -1716,7 +1624,8 @@ function DataLayerProvider({
1716
1624
  isOnline: detection.isOnline,
1717
1625
  lastDetection: detection,
1718
1626
  error: null,
1719
- hasSynced: powerSyncSyncStatus?.hasSynced ?? false
1627
+ hasSynced: false
1628
+ // Will be updated by Sync Status Update Effect
1720
1629
  });
1721
1630
  } catch (error) {
1722
1631
  const err = error instanceof Error ? error : new Error(String(error));
@@ -1726,7 +1635,7 @@ function DataLayerProvider({
1726
1635
  }));
1727
1636
  onError?.(err);
1728
1637
  }
1729
- }, [powerSyncInstance, supabaseClient, queryClient, config.schema, registry, onError, powerSyncSyncStatus]);
1638
+ }, [powerSyncInstance, supabaseClient, queryClient, config.schema, registry, onError]);
1730
1639
  useEffect(() => {
1731
1640
  if (powerSyncSyncStatus?.isOnline !== void 0) {
1732
1641
  return;
@@ -1787,14 +1696,22 @@ function DataLayerProvider({
1787
1696
  useEffect(() => {
1788
1697
  if (!autoDetector) return;
1789
1698
  autoDetector.updateSyncStatus(powerSyncSyncStatus ?? null);
1790
- setStatus((prev) => ({
1791
- ...prev,
1792
- hasSynced: powerSyncSyncStatus?.hasSynced ?? false,
1793
- // Only update isOnline if powerSyncSyncStatus provides it (React Native via NetInfo)
1794
- ...powerSyncSyncStatus?.isOnline !== void 0 && {
1795
- isOnline: powerSyncSyncStatus.isOnline
1699
+ setStatus((prev) => {
1700
+ const newHasSynced = powerSyncSyncStatus?.hasSynced ?? false;
1701
+ const newIsOnline = powerSyncSyncStatus?.isOnline;
1702
+ const hasSyncedChanged = prev.hasSynced !== newHasSynced;
1703
+ const isOnlineChanged = newIsOnline !== void 0 && prev.isOnline !== newIsOnline;
1704
+ if (!hasSyncedChanged && !isOnlineChanged) {
1705
+ return prev;
1796
1706
  }
1797
- }));
1707
+ return {
1708
+ ...prev,
1709
+ hasSynced: newHasSynced,
1710
+ ...newIsOnline !== void 0 && {
1711
+ isOnline: newIsOnline
1712
+ }
1713
+ };
1714
+ });
1798
1715
  }, [autoDetector, powerSyncSyncStatus?.hasSynced, powerSyncSyncStatus?.connected, powerSyncSyncStatus?.connecting, powerSyncSyncStatus?.isOnline]);
1799
1716
  useEffect(() => {
1800
1717
  if (status.isInitialized && !status.error && onInitialized) {
@@ -4388,7 +4305,7 @@ var useSupabaseUpload = (options) => {
4388
4305
  };
4389
4306
 
4390
4307
  // src/conflicts/ConflictContext.tsx
4391
- import { c as _c2 } from "react/compiler-runtime";
4308
+ import { c as _c } from "react/compiler-runtime";
4392
4309
  import { createContext, useEffect as useEffect4, useReducer as useReducer2, useRef as useRef2 } from "react";
4393
4310
 
4394
4311
  // ../../../node_modules/.pnpm/merge-options@3.0.4/node_modules/merge-options/index.mjs
@@ -4672,7 +4589,7 @@ function conflictReducer(state, action) {
4672
4589
  }
4673
4590
  }
4674
4591
  function ConflictProvider(t0) {
4675
- const $ = _c2(29);
4592
+ const $ = _c(29);
4676
4593
  const {
4677
4594
  children,
4678
4595
  conflictBus
@@ -4706,7 +4623,7 @@ function ConflictProvider(t0) {
4706
4623
  conflicts
4707
4624
  });
4708
4625
  }
4709
- }).catch(_temp3).finally(() => {
4626
+ }).catch(_temp).finally(() => {
4710
4627
  hasFinishedLoadingRef.current = true;
4711
4628
  });
4712
4629
  };
@@ -4734,7 +4651,7 @@ function ConflictProvider(t0) {
4734
4651
  updatedTimestamps.set(key, now);
4735
4652
  }
4736
4653
  }
4737
- const currentKeys = new Set(state.pendingConflicts.map(_temp22));
4654
+ const currentKeys = new Set(state.pendingConflicts.map(_temp2));
4738
4655
  for (const key_0 of updatedTimestamps.keys()) {
4739
4656
  if (!currentKeys.has(key_0)) {
4740
4657
  updatedTimestamps.delete(key_0);
@@ -4914,15 +4831,15 @@ function ConflictProvider(t0) {
4914
4831
  }
4915
4832
  return t17;
4916
4833
  }
4917
- function _temp22(c) {
4834
+ function _temp2(c) {
4918
4835
  return `${c.table}:${c.recordId}`;
4919
4836
  }
4920
- function _temp3(err) {
4837
+ function _temp(err) {
4921
4838
  console.warn("[ConflictProvider] Failed to load conflicts:", err);
4922
4839
  }
4923
4840
 
4924
4841
  // src/conflicts/useConflictState.ts
4925
- import { c as _c3 } from "react/compiler-runtime";
4842
+ import { c as _c2 } from "react/compiler-runtime";
4926
4843
  import { useContext } from "react";
4927
4844
  function useConflictState() {
4928
4845
  const context = useContext(ConflictContext);
@@ -4932,7 +4849,7 @@ function useConflictState() {
4932
4849
  return context;
4933
4850
  }
4934
4851
  function usePendingConflicts() {
4935
- const $ = _c3(2);
4852
+ const $ = _c2(2);
4936
4853
  const context = useContext(ConflictContext);
4937
4854
  let t0;
4938
4855
  if ($[0] !== context?.pendingConflicts) {
@@ -4949,7 +4866,7 @@ function useHasConflicts() {
4949
4866
  return context?.hasConflicts ?? false;
4950
4867
  }
4951
4868
  function useConflictForRecord(table, recordId) {
4952
- const $ = _c3(4);
4869
+ const $ = _c2(4);
4953
4870
  const conflicts = usePendingConflicts();
4954
4871
  let t0;
4955
4872
  if ($[0] !== conflicts || $[1] !== recordId || $[2] !== table) {
@@ -4964,7 +4881,7 @@ function useConflictForRecord(table, recordId) {
4964
4881
  return t0;
4965
4882
  }
4966
4883
  function useConflictsForTable(table) {
4967
- const $ = _c3(5);
4884
+ const $ = _c2(5);
4968
4885
  const conflicts = usePendingConflicts();
4969
4886
  let t0;
4970
4887
  if ($[0] !== conflicts || $[1] !== table) {
@@ -4986,7 +4903,7 @@ function useConflictsForTable(table) {
4986
4903
  return t0;
4987
4904
  }
4988
4905
  function useConflictCountByTable() {
4989
- const $ = _c3(2);
4906
+ const $ = _c2(2);
4990
4907
  const conflicts = usePendingConflicts();
4991
4908
  let counts;
4992
4909
  if ($[0] !== conflicts) {
@@ -5003,9 +4920,9 @@ function useConflictCountByTable() {
5003
4920
  }
5004
4921
 
5005
4922
  // src/conflicts/useConflictResolution.ts
5006
- import { c as _c4 } from "react/compiler-runtime";
4923
+ import { c as _c3 } from "react/compiler-runtime";
5007
4924
  function useConflictResolution(conflict) {
5008
- const $ = _c4(28);
4925
+ const $ = _c3(28);
5009
4926
  const {
5010
4927
  resolveConflict
5011
4928
  } = useConflictState();
@@ -5079,7 +4996,7 @@ function useConflictResolution(conflict) {
5079
4996
  const syncFields = t4;
5080
4997
  let t5;
5081
4998
  if ($[13] !== conflict.conflicts) {
5082
- t5 = new Set(conflict.conflicts.map(_temp4));
4999
+ t5 = new Set(conflict.conflicts.map(_temp3));
5083
5000
  $[13] = conflict.conflicts;
5084
5001
  $[14] = t5;
5085
5002
  } else {
@@ -5141,11 +5058,11 @@ function useConflictResolution(conflict) {
5141
5058
  }
5142
5059
  return t8;
5143
5060
  }
5144
- function _temp4(c) {
5061
+ function _temp3(c) {
5145
5062
  return c.field;
5146
5063
  }
5147
5064
  function useBulkConflictResolution() {
5148
- const $ = _c4(13);
5065
+ const $ = _c3(13);
5149
5066
  const {
5150
5067
  resolveAll,
5151
5068
  resolveConflict,
@@ -5217,8 +5134,6 @@ function useBulkConflictResolution() {
5217
5134
  }
5218
5135
 
5219
5136
  export {
5220
- sanitizeStorageKey,
5221
- useDbAttachmentUpload,
5222
5137
  PowerSyncAdapter,
5223
5138
  createPowerSyncAdapter,
5224
5139
  DataLayerProvider,
@@ -5263,4 +5178,4 @@ object-assign/index.js:
5263
5178
  @license MIT
5264
5179
  *)
5265
5180
  */
5266
- //# sourceMappingURL=chunk-2T6WTCP4.js.map
5181
+ //# sourceMappingURL=chunk-KDORWXGS.js.map