@pol-studios/db 1.0.31 → 1.0.34
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-Dc7nF2IG.d.ts → DataLayerContext-BwMk4VpG.d.ts} +92 -8
- package/dist/UserMetadataContext-QLIv-mfF.d.ts +171 -0
- package/dist/{UserMetadataContext-B8gVWGMl.d.ts → UserMetadataContext-pQb3A8_Q.d.ts} +1 -1
- package/dist/auth/context.d.ts +53 -5
- package/dist/auth/context.js +30 -8
- package/dist/auth/guards.d.ts +9 -9
- package/dist/auth/guards.js +2 -3
- package/dist/auth/hooks.d.ts +108 -4
- package/dist/auth/hooks.js +13 -9
- package/dist/auth/index.d.ts +6 -6
- package/dist/auth/index.js +45 -17
- package/dist/chunk-5HJLTYRA.js +355 -0
- package/dist/chunk-5HJLTYRA.js.map +1 -0
- package/dist/{chunk-WX4ABYIF.js → chunk-67HMVGV7.js} +292 -94
- package/dist/chunk-67HMVGV7.js.map +1 -0
- package/dist/chunk-6KN7KLEG.js +1 -0
- package/dist/{chunk-FZF26ZRB.js → chunk-7BGDQT5X.js} +29 -16
- package/dist/{chunk-FZF26ZRB.js.map → chunk-7BGDQT5X.js.map} +1 -1
- package/dist/{chunk-P4UZ7IXC.js → chunk-7D4SUZUM.js} +1 -5
- package/dist/{chunk-3PJTNH2L.js → chunk-AKIRHA4Q.js} +2 -2
- package/dist/{chunk-OQ7U6EQ3.js → chunk-AML2TLXJ.js} +3801 -3424
- package/dist/chunk-AML2TLXJ.js.map +1 -0
- package/dist/{chunk-5EFDS7SR.js → chunk-DMVUEJG2.js} +7 -2
- package/dist/chunk-DMVUEJG2.js.map +1 -0
- package/dist/{chunk-ADD5MIMK.js → chunk-FESQS4S5.js} +15 -15
- package/dist/{chunk-ADD5MIMK.js.map → chunk-FESQS4S5.js.map} +1 -1
- package/dist/{chunk-U5UNPBKB.js → chunk-FI6JAD5G.js} +3 -3
- package/dist/{chunk-TKWR5AAY.js → chunk-JOULSXOI.js} +2 -2
- package/dist/{chunk-HTJ2FQW5.js → chunk-LF3V3ERS.js} +13 -15
- package/dist/{chunk-HTJ2FQW5.js.map → chunk-LF3V3ERS.js.map} +1 -1
- package/dist/{chunk-5BLKZUKM.js → chunk-MREERKQU.js} +45 -14
- package/dist/chunk-MREERKQU.js.map +1 -0
- package/dist/{chunk-VGEMLNNM.js → chunk-NP34C3O3.js} +306 -704
- package/dist/chunk-NP34C3O3.js.map +1 -0
- package/dist/{chunk-CNIGRBRE.js → chunk-QJZUIAHA.js} +43 -19
- package/dist/{chunk-CNIGRBRE.js.map → chunk-QJZUIAHA.js.map} +1 -1
- package/dist/{chunk-HAWJTZCK.js → chunk-RT4O5H2E.js} +5 -7
- package/dist/chunk-RT4O5H2E.js.map +1 -0
- package/dist/{chunk-2NVSXZKQ.js → chunk-TN7QINPK.js} +74 -309
- package/dist/chunk-TN7QINPK.js.map +1 -0
- package/dist/chunk-UBHORKBS.js +215 -0
- package/dist/chunk-UBHORKBS.js.map +1 -0
- package/dist/{chunk-WVF7RUW5.js → chunk-WM25QE7E.js} +3 -3
- package/dist/{chunk-H6365JPC.js → chunk-YUX6RGLZ.js} +3 -3
- package/dist/{chunk-H6365JPC.js.map → chunk-YUX6RGLZ.js.map} +1 -1
- package/dist/{chunk-H3LNH2NT.js → chunk-Z456IHCB.js} +5 -9
- package/dist/{chunk-H3LNH2NT.js.map → chunk-Z456IHCB.js.map} +1 -1
- package/dist/{chunk-JAATANS3.js → chunk-ZCOFRJQD.js} +3 -3
- package/dist/{chunk-JAATANS3.js.map → chunk-ZCOFRJQD.js.map} +1 -1
- package/dist/client/index.d.ts +1 -1
- package/dist/client/index.js +2 -2
- package/dist/core/index.d.ts +54 -31
- package/dist/{executor-Br27YZvl.d.ts → executor-YJw4m7Q7.d.ts} +9 -1
- package/dist/gen/index.js +1 -1
- package/dist/hooks/index.d.ts +3 -22
- package/dist/hooks/index.js +12 -9
- package/dist/{index-CYFdO0iB.d.ts → index-lveh8qb0.d.ts} +1 -1
- package/dist/index.d.ts +38 -10
- package/dist/index.js +57 -36
- package/dist/index.native.d.ts +19 -13
- package/dist/index.native.js +64 -35
- package/dist/index.web.d.ts +18 -45
- package/dist/index.web.js +58 -49
- package/dist/index.web.js.map +1 -1
- package/dist/mutation/index.d.ts +2 -2
- package/dist/mutation/index.js +5 -5
- package/dist/parser/index.js +4 -4
- package/dist/powersync-bridge/index.d.ts +18 -3
- package/dist/powersync-bridge/index.js +2 -2
- package/dist/query/index.d.ts +1 -1
- package/dist/query/index.js +7 -8
- package/dist/realtime/index.js +7 -9
- package/dist/realtime/index.js.map +1 -1
- package/dist/types/index.d.ts +3 -3
- package/dist/types/index.js +6 -7
- package/dist/{useBatchUpsert-9OYjibLh.d.ts → useBatchUpsert-DAkiCNo3.d.ts} +1 -1
- package/dist/{useDbCount-Dk0yCKlT.d.ts → useDbCount-DWfYB2iu.d.ts} +16 -2
- package/dist/{useResolveFeedback-C1KucfdQ.d.ts → useResolveFeedback-CxLccZKK.d.ts} +197 -93
- package/dist/{useSupabase-DvWVuHHE.d.ts → useSupabase-DSZNeXnF.d.ts} +1 -1
- package/dist/with-auth/index.d.ts +2 -2
- package/dist/with-auth/index.js +46 -33
- package/dist/with-auth/index.js.map +1 -1
- package/package.json +18 -8
- package/dist/UserMetadataContext-DntmpK41.d.ts +0 -33
- package/dist/canvas-C4TBBDUL.node +0 -0
- package/dist/canvas-ZQNCL7JL.js +0 -1541
- package/dist/canvas-ZQNCL7JL.js.map +0 -1
- package/dist/chunk-2NVSXZKQ.js.map +0 -1
- package/dist/chunk-5BLKZUKM.js.map +0 -1
- package/dist/chunk-5EFDS7SR.js.map +0 -1
- package/dist/chunk-HAWJTZCK.js.map +0 -1
- package/dist/chunk-NSIAAYW3.js +0 -1
- package/dist/chunk-O7SETNGD.js +0 -3391
- package/dist/chunk-O7SETNGD.js.map +0 -1
- package/dist/chunk-OQ7U6EQ3.js.map +0 -1
- package/dist/chunk-VGEMLNNM.js.map +0 -1
- package/dist/chunk-WX4ABYIF.js.map +0 -1
- package/dist/dist-NDNRSNOG.js +0 -521
- package/dist/dist-NDNRSNOG.js.map +0 -1
- package/dist/pdf-PHXP7RHD.js +0 -20336
- package/dist/pdf-PHXP7RHD.js.map +0 -1
- /package/dist/{chunk-NSIAAYW3.js.map → chunk-6KN7KLEG.js.map} +0 -0
- /package/dist/{chunk-P4UZ7IXC.js.map → chunk-7D4SUZUM.js.map} +0 -0
- /package/dist/{chunk-3PJTNH2L.js.map → chunk-AKIRHA4Q.js.map} +0 -0
- /package/dist/{chunk-U5UNPBKB.js.map → chunk-FI6JAD5G.js.map} +0 -0
- /package/dist/{chunk-TKWR5AAY.js.map → chunk-JOULSXOI.js.map} +0 -0
- /package/dist/{chunk-WVF7RUW5.js.map → chunk-WM25QE7E.js.map} +0 -0
|
@@ -1 +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"]}
|
|
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","omit","useSessionStorageState","useSessionStorageState","useQuery","omit","useMemo","useRef","useRef","useMemo","_c","useState","omit","useSessionStorageState","_c","useState","useSessionStorageState","omit","_temp","_temp2","toPagedResponse"]}
|
|
@@ -1,13 +1,41 @@
|
|
|
1
1
|
import {
|
|
2
2
|
permissionContext,
|
|
3
3
|
setupAuthContext
|
|
4
|
-
} from "./chunk-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
} from "
|
|
4
|
+
} from "./chunk-67HMVGV7.js";
|
|
5
|
+
|
|
6
|
+
// src/auth/hooks/useOfflineAuth.ts
|
|
7
|
+
import { useMemo } from "react";
|
|
8
|
+
var PROFILE_QUERY = `
|
|
9
|
+
SELECT id, email, firstName, lastName, fullName, status, profilePath
|
|
10
|
+
FROM Profile
|
|
11
|
+
WHERE id = ?
|
|
12
|
+
LIMIT 1
|
|
13
|
+
`;
|
|
14
|
+
var USER_ACCESS_QUERY = `
|
|
15
|
+
SELECT id, userId, accessKey
|
|
16
|
+
FROM UserAccess
|
|
17
|
+
WHERE userId = ?
|
|
18
|
+
`;
|
|
19
|
+
var offlineAuthQueryKeys = {
|
|
20
|
+
profile: (userId) => ["profile", userId],
|
|
21
|
+
userAccess: (userId) => ["userAccess", userId]
|
|
22
|
+
};
|
|
23
|
+
var offlineAuthQueries = {
|
|
24
|
+
async fetchProfile(db, userId) {
|
|
25
|
+
return db.getOptional(PROFILE_QUERY, [userId]);
|
|
26
|
+
},
|
|
27
|
+
async fetchUserAccess(db, userId) {
|
|
28
|
+
return db.getAll(USER_ACCESS_QUERY, [userId]);
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
function extractAccessKeys(userAccess) {
|
|
32
|
+
if (!userAccess) return [];
|
|
33
|
+
return userAccess.map((ua) => ua.accessKey).filter(Boolean);
|
|
34
|
+
}
|
|
8
35
|
|
|
9
36
|
// src/auth/hooks/useAuth.ts
|
|
10
|
-
import {
|
|
37
|
+
import { isUsable } from "@pol-studios/utils";
|
|
38
|
+
import { useCallback as useCallback2, useContext, useMemo as useMemo2 } from "react";
|
|
11
39
|
function useAuth() {
|
|
12
40
|
const auth = useContext(setupAuthContext);
|
|
13
41
|
if (isUsable(auth.user) === false) {
|
|
@@ -22,7 +50,7 @@ function useAuth() {
|
|
|
22
50
|
function useSetupAuth() {
|
|
23
51
|
const auth = useContext(setupAuthContext);
|
|
24
52
|
const entityPermissions = useContext(permissionContext);
|
|
25
|
-
const hasAccess =
|
|
53
|
+
const hasAccess = useCallback2((key) => {
|
|
26
54
|
if (auth.hasAccess) {
|
|
27
55
|
return auth.hasAccess(key);
|
|
28
56
|
}
|
|
@@ -31,12 +59,12 @@ function useSetupAuth() {
|
|
|
31
59
|
}
|
|
32
60
|
const accessGiven = auth.access;
|
|
33
61
|
if (isUsable(accessGiven) === false) return false;
|
|
34
|
-
if (accessGiven.includes("
|
|
62
|
+
if (accessGiven.includes("*:*:*")) return true;
|
|
35
63
|
if (accessGiven.includes(key)) return true;
|
|
36
64
|
if (isUsable(key) === false) return true;
|
|
37
65
|
return false;
|
|
38
66
|
}, [auth.hasAccess, auth.access, auth.isArchived, auth.isSuspended]);
|
|
39
|
-
const hasEntityAccess =
|
|
67
|
+
const hasEntityAccess = useCallback2((entityType, entityId, action) => {
|
|
40
68
|
if (auth.isArchived || auth.isSuspended) {
|
|
41
69
|
return false;
|
|
42
70
|
}
|
|
@@ -44,7 +72,7 @@ function useSetupAuth() {
|
|
|
44
72
|
return false;
|
|
45
73
|
}
|
|
46
74
|
const accessGiven_0 = auth.access;
|
|
47
|
-
if (isUsable(accessGiven_0) && accessGiven_0.includes("
|
|
75
|
+
if (isUsable(accessGiven_0) && accessGiven_0.includes("*:*:*")) {
|
|
48
76
|
return true;
|
|
49
77
|
}
|
|
50
78
|
if (!entityPermissions || typeof entityPermissions.checkPermission !== "function") {
|
|
@@ -52,7 +80,7 @@ function useSetupAuth() {
|
|
|
52
80
|
}
|
|
53
81
|
return entityPermissions.checkPermission(entityType, entityId, action);
|
|
54
82
|
}, [auth.access, auth.isArchived, auth.isSuspended, entityPermissions]);
|
|
55
|
-
return
|
|
83
|
+
return useMemo2(() => ({
|
|
56
84
|
hasAccess,
|
|
57
85
|
hasEntityAccess,
|
|
58
86
|
...auth,
|
|
@@ -63,7 +91,7 @@ function useSetupAuth() {
|
|
|
63
91
|
|
|
64
92
|
// src/auth/hooks/usePermission.ts
|
|
65
93
|
import { c as _c } from "react/compiler-runtime";
|
|
66
|
-
import { useContext as useContext2, useEffect, useMemo as
|
|
94
|
+
import { useContext as useContext2, useEffect, useMemo as useMemo3 } from "react";
|
|
67
95
|
function usePermissionContext() {
|
|
68
96
|
const context = useContext2(permissionContext);
|
|
69
97
|
if (!context || Object.keys(context).length === 0) {
|
|
@@ -143,7 +171,7 @@ function usePermissionsBatch(entities) {
|
|
|
143
171
|
getPermission,
|
|
144
172
|
prefetchPermissions
|
|
145
173
|
} = usePermissionContext();
|
|
146
|
-
const entitiesKey =
|
|
174
|
+
const entitiesKey = useMemo3(() => entities.map((e) => `${e.type}:${e.id}`).sort().join(","), [entities]);
|
|
147
175
|
useEffect(() => {
|
|
148
176
|
if (entities.length === 0) {
|
|
149
177
|
return;
|
|
@@ -154,7 +182,7 @@ function usePermissionsBatch(entities) {
|
|
|
154
182
|
}));
|
|
155
183
|
prefetchPermissions(entitiesToPrefetch);
|
|
156
184
|
}, [entities, entitiesKey, prefetchPermissions]);
|
|
157
|
-
return
|
|
185
|
+
return useMemo3(() => {
|
|
158
186
|
if (entities.length === 0) {
|
|
159
187
|
return [];
|
|
160
188
|
}
|
|
@@ -194,6 +222,9 @@ function usePermissionLoading() {
|
|
|
194
222
|
}
|
|
195
223
|
|
|
196
224
|
export {
|
|
225
|
+
offlineAuthQueryKeys,
|
|
226
|
+
offlineAuthQueries,
|
|
227
|
+
extractAccessKeys,
|
|
197
228
|
useAuth,
|
|
198
229
|
useSetupAuth,
|
|
199
230
|
usePermission,
|
|
@@ -207,4 +238,4 @@ export {
|
|
|
207
238
|
useInvalidatePermission,
|
|
208
239
|
usePermissionLoading
|
|
209
240
|
};
|
|
210
|
-
//# sourceMappingURL=chunk-
|
|
241
|
+
//# sourceMappingURL=chunk-MREERKQU.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/auth/hooks/useOfflineAuth.ts","../src/auth/hooks/useAuth.ts","../src/auth/hooks/usePermission.ts"],"sourcesContent":["/**\n * useOfflineAuth - Hook for offline-first authentication\n *\n * Reads Profile and UserAccess from PowerSync (local SQLite).\n * Works 100% offline once data is synced.\n *\n * Usage:\n * ```tsx\n * import { SimpleAuthProvider } from \"@pol-studios/db\";\n * import { useOfflineAuth } from \"@pol-studios/db\";\n *\n * function AuthWrapper({ children }) {\n * const authData = useOfflineAuth();\n *\n * return (\n * <SimpleAuthProvider {...authData}>\n * {children}\n * </SimpleAuthProvider>\n * );\n * }\n * ```\n */\n\nimport { useCallback, useMemo } from \"react\";\nimport { User } from \"@supabase/supabase-js\";\nimport type { SimpleProfile, SimpleUserAccess } from \"../context/SimpleAuthProvider\";\n\n// ─── Types ───────────────────────────────────────────────────────────────────\n\nexport interface OfflineAuthData {\n /** Supabase user from auth session */\n user: User | null;\n /** Profile from PowerSync */\n profile: SimpleProfile | null;\n /** User access records from PowerSync */\n userAccess: SimpleUserAccess[] | null;\n /** Whether auth data is loading */\n isLoading: boolean;\n /** Sign out function */\n onSignOut: () => Promise<void>;\n}\nexport interface UseOfflineAuthOptions {\n /** Supabase client for auth operations */\n supabase: {\n auth: {\n getUser: () => Promise<{\n data: {\n user: User | null;\n };\n error: any;\n }>;\n signOut: () => Promise<{\n error: any;\n }>;\n onAuthStateChange: (callback: (event: string, session: any) => void) => {\n data: {\n subscription: {\n unsubscribe: () => void;\n };\n };\n };\n };\n };\n /** PowerSync database for local queries */\n db: {\n getAll: <T>(sql: string, params?: any[]) => Promise<T[]>;\n getOptional: <T>(sql: string, params?: any[]) => Promise<T | null>;\n } | null;\n /** Whether PowerSync is ready */\n isDbReady?: boolean;\n}\n\n// ─── SQL Queries ─────────────────────────────────────────────────────────────\n\nconst PROFILE_QUERY = `\n SELECT id, email, firstName, lastName, fullName, status, profilePath\n FROM Profile\n WHERE id = ?\n LIMIT 1\n`;\nconst USER_ACCESS_QUERY = `\n SELECT id, userId, accessKey\n FROM UserAccess\n WHERE userId = ?\n`;\n\n// ─── Hook Implementation ─────────────────────────────────────────────────────\n\n/**\n * Creates offline auth data by reading from PowerSync.\n *\n * This is a low-level hook. For most use cases, use the pre-built\n * `OfflineAuthProvider` component instead.\n */\nexport function createOfflineAuthHook(options: UseOfflineAuthOptions) {\n const {\n supabase,\n db,\n isDbReady = true\n } = options;\n return function useOfflineAuthInternal(user: User | null): {\n profile: SimpleProfile | null;\n userAccess: SimpleUserAccess[] | null;\n isLoading: boolean;\n } {\n // This is a synchronous hook that expects data to be pre-loaded\n // In practice, you'd use React Query or similar for async loading\n // Here we return loading state if DB isn't ready\n return useMemo(() => ({\n profile: null,\n userAccess: null,\n isLoading: !isDbReady || !user\n }), [user, isDbReady]);\n };\n}\n\n// ─── React Query Integration ─────────────────────────────────────────────────\n\n/**\n * Query keys for React Query integration\n */\nexport const offlineAuthQueryKeys = {\n profile: (userId: string | undefined) => [\"profile\", userId] as const,\n userAccess: (userId: string | undefined) => [\"userAccess\", userId] as const\n};\n\n/**\n * Query functions for React Query integration.\n * Use these with useQuery from @tanstack/react-query.\n *\n * @example\n * ```tsx\n * import { useQuery } from \"@tanstack/react-query\";\n * import { offlineAuthQueries, offlineAuthQueryKeys } from \"@pol-studios/db\";\n *\n * function useProfile(db, userId) {\n * return useQuery({\n * queryKey: offlineAuthQueryKeys.profile(userId),\n * queryFn: () => offlineAuthQueries.fetchProfile(db, userId),\n * enabled: !!userId && !!db,\n * });\n * }\n * ```\n */\nexport const offlineAuthQueries = {\n async fetchProfile(db: {\n getOptional: <T>(sql: string, params?: any[]) => Promise<T | null>;\n }, userId: string): Promise<SimpleProfile | null> {\n return db.getOptional<SimpleProfile>(PROFILE_QUERY, [userId]);\n },\n async fetchUserAccess(db: {\n getAll: <T>(sql: string, params?: any[]) => Promise<T[]>;\n }, userId: string): Promise<SimpleUserAccess[]> {\n return db.getAll<SimpleUserAccess>(USER_ACCESS_QUERY, [userId]);\n }\n};\n\n// ─── Utility Functions ───────────────────────────────────────────────────────\n\n/**\n * Extract access keys from UserAccess records.\n */\nexport function extractAccessKeys(userAccess: SimpleUserAccess[] | null): string[] {\n if (!userAccess) return [];\n return userAccess.map(ua => ua.accessKey).filter(Boolean);\n}","import { isUsable } from \"@pol-studios/utils\";\nimport { useCallback, useContext, useMemo } from \"react\";\nimport { User } from \"@supabase/supabase-js\";\nimport { SetupAuthContext, setupAuthContext, type EffectivePermission } from \"../context/AuthProvider\";\nimport { permissionContext } from \"../context/PermissionContext\";\nimport { EntityAction, EntityType } from \"../types/EntityPermissions\";\n\n// Re-export EffectivePermission type for consumers\nexport type { EffectivePermission };\n\n/**\n * Hook for authenticated users only.\n * Throws an error if the user is not authenticated.\n * Use useSetupAuth() if you need to handle unauthenticated users.\n *\n * @returns Auth context with guaranteed non-null user and hasAccess helper\n * @throws Error if user is not authenticated\n *\n * @example\n * ```tsx\n * function AuthenticatedComponent() {\n * const { user, hasAccess, profile } = useAuth();\n *\n * // user is guaranteed to be non-null\n * console.log(user.id);\n *\n * if (hasAccess('admin')) {\n * return <AdminDashboard />;\n * }\n *\n * return <UserDashboard />;\n * }\n * ```\n */\nexport function useAuth() {\n const auth = useContext(setupAuthContext);\n if (isUsable(auth.user) === false) {\n console.log({\n auth\n });\n throw new Error(\"User must not be null, use useSetupAuth() to use a nullable user.\");\n } else {\n return auth as any;\n }\n}\n\n/**\n * Hook for handling both authenticated and unauthenticated states.\n * Does not throw if user is not authenticated.\n *\n * @returns Auth context with possibly null user, hasAccess, and hasEntityAccess helpers\n *\n * @example\n * ```tsx\n * function FlexibleComponent() {\n * const { user, hasAccess, hasEntityAccess, isLoading } = useSetupAuth();\n *\n * if (isLoading) {\n * return <Spinner />;\n * }\n *\n * if (!user) {\n * return <LoginPrompt />;\n * }\n *\n * // Check global access\n * const isAdmin = hasAccess('admin');\n *\n * // Check entity-level access\n * const canEditProject = hasEntityAccess('Project', 123, 'edit');\n *\n * return <Dashboard />;\n * }\n * ```\n */\nexport function useSetupAuth(): SetupAuthContext & {\n hasAccess: (access: string) => boolean;\n hasEntityAccess: (entityType: EntityType, entityId: number, action: EntityAction) => boolean;\n effectivePermissions: EffectivePermission[];\n} {\n const auth = useContext(setupAuthContext);\n const entityPermissions = useContext(permissionContext);\n\n // Use the context's hasAccess which now includes effective permissions checking\n const hasAccess = useCallback((key: string) => {\n // Delegate to context hasAccess if available (includes effective permissions)\n if (auth.hasAccess) {\n return auth.hasAccess(key);\n }\n\n // Fallback for backward compatibility\n // Archived/suspended users have no access\n if (auth.isArchived || auth.isSuspended) {\n return false;\n }\n const accessGiven = auth.access;\n if (isUsable(accessGiven) === false) return false;\n // Super-admin key bypasses all permission checks\n if (accessGiven.includes(\"*:*:*\")) return true;\n if (accessGiven.includes(key)) return true;\n if (isUsable(key) === false) return true;\n return false;\n }, [auth.hasAccess, auth.access, auth.isArchived, auth.isSuspended]);\n\n /**\n * Check if the current user has access to a specific entity.\n * Super-admin key (*:*:*) bypasses entity permissions entirely.\n * Otherwise, delegates to the PermissionContext for granular permission checks.\n *\n * @param entityType - 'Project' | 'Client' | 'ProjectDatabase'\n * @param entityId - The ID of the entity to check\n * @param action - 'view' | 'adminView' | 'edit' | 'create' | 'delete' | 'share'\n * @returns boolean - true if user has permission for the action on the entity\n */\n const hasEntityAccess = useCallback((entityType: EntityType, entityId: number, action: EntityAction): boolean => {\n // Archived/suspended users have no entity access\n if (auth.isArchived || auth.isSuspended) {\n return false;\n }\n\n // Validate entityId is a valid positive integer\n if (!entityId || entityId <= 0 || !Number.isInteger(entityId)) {\n return false;\n }\n\n // Super-admin key bypasses all entity permission checks\n const accessGiven_0 = auth.access;\n if (isUsable(accessGiven_0) && accessGiven_0.includes(\"*:*:*\")) {\n return true;\n }\n\n // If PermissionContext is not available, deny access\n if (!entityPermissions || typeof entityPermissions.checkPermission !== \"function\") {\n return false;\n }\n\n // Delegate to PermissionContext\n return entityPermissions.checkPermission(entityType, entityId, action);\n }, [auth.access, auth.isArchived, auth.isSuspended, entityPermissions]);\n return useMemo(() => ({\n hasAccess,\n hasEntityAccess,\n ...auth,\n user: auth.user,\n effectivePermissions: auth.effectivePermissions || []\n }), [hasAccess, hasEntityAccess, auth]);\n}","import { c as _c } from \"react/compiler-runtime\";\nimport { useContext, useEffect, useMemo } from \"react\";\nimport { permissionContext } from \"../context/PermissionContext\";\nimport { EntityType, EntityAction, EntityPermissionCheck } from \"../types/EntityPermissions\";\n\n// Re-export types for convenience\nexport type { EntityType, EntityAction, EntityPermissionCheck };\n\n/**\n * Hook to get the full PermissionContext\n * @throws Error if used outside of PermissionProvider\n */\nfunction usePermissionContext() {\n const context = useContext(permissionContext);\n if (!context || Object.keys(context).length === 0) {\n throw new Error(\"usePermission hooks must be used within a PermissionProvider\");\n }\n return context;\n}\n\n/**\n * Hook to get full permission info for a single entity\n * @param entityType - 'Project' | 'Client' | 'ProjectDatabase'\n * @param entityId - The ID of the entity (can be undefined for loading states)\n * @returns EntityPermissionCheck with canView, canEdit, etc. and isLoading\n *\n * @example\n * ```tsx\n * function ProjectHeader({ projectId }: { projectId: number }) {\n * const permission = usePermission('Project', projectId);\n *\n * if (permission.isLoading) {\n * return <Spinner />;\n * }\n *\n * return (\n * <div>\n * {permission.canEdit && <EditButton />}\n * {permission.canDelete && <DeleteButton />}\n * </div>\n * );\n * }\n * ```\n */\nexport function usePermission(entityType, entityId) {\n const $ = _c(5);\n const {\n getPermission\n } = usePermissionContext();\n let t0;\n bb0: {\n if (entityId === undefined) {\n let t1;\n if ($[0] === Symbol.for(\"react.memo_cache_sentinel\")) {\n t1 = {\n canView: false,\n canAdminView: false,\n canEdit: false,\n canCreate: false,\n canDelete: false,\n canShare: false,\n permissionLevel: null,\n isLoading: true\n };\n $[0] = t1;\n } else {\n t1 = $[0];\n }\n t0 = t1;\n break bb0;\n }\n let t1;\n if ($[1] !== entityId || $[2] !== entityType || $[3] !== getPermission) {\n t1 = getPermission(entityType, entityId);\n $[1] = entityId;\n $[2] = entityType;\n $[3] = getPermission;\n $[4] = t1;\n } else {\n t1 = $[4];\n }\n t0 = t1;\n }\n return t0;\n}\n\n/**\n * Hook to check a single action permission\n * @param entityType - Entity type\n * @param entityId - Entity ID\n * @param action - 'view' | 'adminView' | 'edit' | 'create' | 'delete' | 'share'\n * @returns boolean - true if user has permission for action\n *\n * @example\n * ```tsx\n * function ProjectActions({ projectId }: { projectId: number }) {\n * const canEdit = usePermissionCheck('Project', projectId, 'edit');\n * const canDelete = usePermissionCheck('Project', projectId, 'delete');\n *\n * return (\n * <div>\n * <Button disabled={!canEdit}>Edit</Button>\n * <Button disabled={!canDelete}>Delete</Button>\n * </div>\n * );\n * }\n * ```\n */\nexport function usePermissionCheck(entityType, entityId, action) {\n const $ = _c(5);\n const {\n checkPermission\n } = usePermissionContext();\n let t0;\n bb0: {\n if (entityId === undefined) {\n t0 = false;\n break bb0;\n }\n let t1;\n if ($[0] !== action || $[1] !== checkPermission || $[2] !== entityId || $[3] !== entityType) {\n t1 = checkPermission(entityType, entityId, action);\n $[0] = action;\n $[1] = checkPermission;\n $[2] = entityId;\n $[3] = entityType;\n $[4] = t1;\n } else {\n t1 = $[4];\n }\n t0 = t1;\n }\n return t0;\n}\n\n/**\n * Result type for usePermissions batch hook\n */\nexport interface EntityWithPermission {\n type: EntityType;\n id: number;\n permission: EntityPermissionCheck;\n}\n\n/**\n * Hook for batch permission lookup - useful for lists\n * @param entities - Array of { type, id } objects\n * @returns Array of entities with their permissions attached\n *\n * This hook:\n * - Calls prefetchPermissions on mount and when entities change\n * - Returns memoized results\n * - Handles empty arrays gracefully\n *\n * @example\n * ```tsx\n * function ProjectList({ projects }: { projects: Array<{ id: number; name: string }> }) {\n * const entities = projects.map(p => ({ type: 'Project' as const, id: p.id }));\n * const entitiesWithPermissions = usePermissionsBatch(entities);\n *\n * return (\n * <ul>\n * {entitiesWithPermissions.map(({ id, permission }) => {\n * const project = projects.find(p => p.id === id);\n * return (\n * <li key={id}>\n * {project?.name}\n * {permission.canEdit && <EditIcon />}\n * </li>\n * );\n * })}\n * </ul>\n * );\n * }\n * ```\n */\nexport function usePermissionsBatch(entities: Array<{\n type: EntityType;\n id: number;\n}>): EntityWithPermission[] {\n const {\n getPermission,\n prefetchPermissions\n } = usePermissionContext();\n\n // Memoize the entities array to prevent unnecessary re-renders\n const entitiesKey = useMemo(() => entities.map(e => `${e.type}:${e.id}`).sort().join(\",\"), [entities]);\n\n // Prefetch permissions when entities change\n useEffect(() => {\n if (entities.length === 0) {\n return;\n }\n\n // Convert to the format expected by prefetchPermissions\n const entitiesToPrefetch = entities.map(e_0 => ({\n entityType: e_0.type,\n entityId: e_0.id\n }));\n prefetchPermissions(entitiesToPrefetch);\n }, [entities, entitiesKey, prefetchPermissions]);\n\n // Return memoized results\n return useMemo(() => {\n if (entities.length === 0) {\n return [];\n }\n return entities.map(entity => ({\n type: entity.type,\n id: entity.id,\n permission: getPermission(entity.type, entity.id)\n }));\n }, [getPermission, entitiesKey]);\n}\n\n/**\n * Simple boolean hook to check if user can view an entity\n * @param entityType - Entity type\n * @param entityId - Entity ID (can be undefined for loading states)\n * @returns boolean - true if user can view the entity\n *\n * @example\n * ```tsx\n * function ProjectPage({ projectId }: { projectId: number }) {\n * const canView = useCanView('Project', projectId);\n *\n * if (!canView) {\n * return <AccessDenied />;\n * }\n *\n * return <ProjectContent projectId={projectId} />;\n * }\n * ```\n */\nexport function useCanView(entityType, entityId) {\n return usePermissionCheck(entityType, entityId, \"view\");\n}\n\n/**\n * Simple boolean hook to check if user can edit an entity\n * @param entityType - Entity type\n * @param entityId - Entity ID (can be undefined for loading states)\n * @returns boolean - true if user can edit the entity\n *\n * @example\n * ```tsx\n * function ProjectEditor({ projectId }: { projectId: number }) {\n * const canEdit = useCanEdit('Project', projectId);\n *\n * return (\n * <form>\n * <input disabled={!canEdit} />\n * <button disabled={!canEdit}>Save</button>\n * </form>\n * );\n * }\n * ```\n */\nexport function useCanEdit(entityType, entityId) {\n return usePermissionCheck(entityType, entityId, \"edit\");\n}\n\n/**\n * Simple boolean hook to check if user can delete an entity\n * @param entityType - Entity type\n * @param entityId - Entity ID (can be undefined for loading states)\n * @returns boolean - true if user can delete the entity\n *\n * @example\n * ```tsx\n * function ProjectActions({ projectId }: { projectId: number }) {\n * const canDelete = useCanDelete('Project', projectId);\n *\n * return (\n * <Button\n * variant=\"destructive\"\n * disabled={!canDelete}\n * onClick={handleDelete}\n * >\n * Delete Project\n * </Button>\n * );\n * }\n * ```\n */\nexport function useCanDelete(entityType, entityId) {\n return usePermissionCheck(entityType, entityId, \"delete\");\n}\n\n/**\n * Simple boolean hook to check if user can share an entity\n * @param entityType - Entity type\n * @param entityId - Entity ID (can be undefined for loading states)\n * @returns boolean - true if user can share the entity\n *\n * @example\n * ```tsx\n * function ShareButton({ projectId }: { projectId: number }) {\n * const canShare = useCanShare('Project', projectId);\n *\n * if (!canShare) {\n * return null;\n * }\n *\n * return <Button onClick={openShareModal}>Share</Button>;\n * }\n * ```\n */\nexport function useCanShare(entityType, entityId) {\n return usePermissionCheck(entityType, entityId, \"share\");\n}\n\n/**\n * Simple boolean hook to check if user can create entities of a type\n * Note: For create permission, the entityId should be the parent entity ID\n * (e.g., for creating a ProjectDatabase, pass the Project ID)\n *\n * @param entityType - Entity type\n * @param entityId - Parent entity ID (can be undefined for loading states)\n * @returns boolean - true if user can create entities\n *\n * @example\n * ```tsx\n * function AddDatabaseButton({ projectId }: { projectId: number }) {\n * const canCreate = useCanCreate('ProjectDatabase', projectId);\n *\n * return (\n * <Button disabled={!canCreate} onClick={handleCreate}>\n * Add Database\n * </Button>\n * );\n * }\n * ```\n */\nexport function useCanCreate(entityType, entityId) {\n return usePermissionCheck(entityType, entityId, \"create\");\n}\n\n/**\n * Hook to invalidate permission cache for a specific entity\n * Useful after permission changes (e.g., after sharing an entity)\n *\n * @returns Function to invalidate permission for an entity\n *\n * @example\n * ```tsx\n * function ShareModal({ projectId }: { projectId: number }) {\n * const invalidatePermission = useInvalidatePermission();\n *\n * const handleShare = async (userId: string) => {\n * await shareProject(projectId, userId);\n * invalidatePermission('Project', projectId);\n * };\n *\n * return <ShareForm onShare={handleShare} />;\n * }\n * ```\n */\nexport function useInvalidatePermission() {\n const {\n invalidatePermission\n } = usePermissionContext();\n return invalidatePermission;\n}\n\n/**\n * Hook to get the loading state of the permission context\n * @returns boolean - true if permissions are being fetched\n *\n * @example\n * ```tsx\n * function PermissionAwareComponent() {\n * const isLoadingPermissions = usePermissionLoading();\n *\n * if (isLoadingPermissions) {\n * return <LoadingSpinner />;\n * }\n *\n * return <Content />;\n * }\n * ```\n */\nexport function usePermissionLoading() {\n const {\n isLoading\n } = usePermissionContext();\n return isLoading;\n}"],"mappings":";;;;;;AAuBA,SAAsB,eAAe;AAmDrC,IAAM,gBAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAMtB,IAAM,oBAAoB;AAAA;AAAA;AAAA;AAAA;AAyCnB,IAAM,uBAAuB;AAAA,EAClC,SAAS,CAAC,WAA+B,CAAC,WAAW,MAAM;AAAA,EAC3D,YAAY,CAAC,WAA+B,CAAC,cAAc,MAAM;AACnE;AAoBO,IAAM,qBAAqB;AAAA,EAChC,MAAM,aAAa,IAEhB,QAA+C;AAChD,WAAO,GAAG,YAA2B,eAAe,CAAC,MAAM,CAAC;AAAA,EAC9D;AAAA,EACA,MAAM,gBAAgB,IAEnB,QAA6C;AAC9C,WAAO,GAAG,OAAyB,mBAAmB,CAAC,MAAM,CAAC;AAAA,EAChE;AACF;AAOO,SAAS,kBAAkB,YAAiD;AACjF,MAAI,CAAC,WAAY,QAAO,CAAC;AACzB,SAAO,WAAW,IAAI,QAAM,GAAG,SAAS,EAAE,OAAO,OAAO;AAC1D;;;ACrKA,SAAS,gBAAgB;AACzB,SAAS,eAAAA,cAAa,YAAY,WAAAC,gBAAe;AAiC1C,SAAS,UAAU;AACxB,QAAM,OAAO,WAAW,gBAAgB;AACxC,MAAI,SAAS,KAAK,IAAI,MAAM,OAAO;AACjC,YAAQ,IAAI;AAAA,MACV;AAAA,IACF,CAAC;AACD,UAAM,IAAI,MAAM,mEAAmE;AAAA,EACrF,OAAO;AACL,WAAO;AAAA,EACT;AACF;AA+BO,SAAS,eAId;AACA,QAAM,OAAO,WAAW,gBAAgB;AACxC,QAAM,oBAAoB,WAAW,iBAAiB;AAGtD,QAAM,YAAYC,aAAY,CAAC,QAAgB;AAE7C,QAAI,KAAK,WAAW;AAClB,aAAO,KAAK,UAAU,GAAG;AAAA,IAC3B;AAIA,QAAI,KAAK,cAAc,KAAK,aAAa;AACvC,aAAO;AAAA,IACT;AACA,UAAM,cAAc,KAAK;AACzB,QAAI,SAAS,WAAW,MAAM,MAAO,QAAO;AAE5C,QAAI,YAAY,SAAS,OAAO,EAAG,QAAO;AAC1C,QAAI,YAAY,SAAS,GAAG,EAAG,QAAO;AACtC,QAAI,SAAS,GAAG,MAAM,MAAO,QAAO;AACpC,WAAO;AAAA,EACT,GAAG,CAAC,KAAK,WAAW,KAAK,QAAQ,KAAK,YAAY,KAAK,WAAW,CAAC;AAYnE,QAAM,kBAAkBA,aAAY,CAAC,YAAwB,UAAkB,WAAkC;AAE/G,QAAI,KAAK,cAAc,KAAK,aAAa;AACvC,aAAO;AAAA,IACT;AAGA,QAAI,CAAC,YAAY,YAAY,KAAK,CAAC,OAAO,UAAU,QAAQ,GAAG;AAC7D,aAAO;AAAA,IACT;AAGA,UAAM,gBAAgB,KAAK;AAC3B,QAAI,SAAS,aAAa,KAAK,cAAc,SAAS,OAAO,GAAG;AAC9D,aAAO;AAAA,IACT;AAGA,QAAI,CAAC,qBAAqB,OAAO,kBAAkB,oBAAoB,YAAY;AACjF,aAAO;AAAA,IACT;AAGA,WAAO,kBAAkB,gBAAgB,YAAY,UAAU,MAAM;AAAA,EACvE,GAAG,CAAC,KAAK,QAAQ,KAAK,YAAY,KAAK,aAAa,iBAAiB,CAAC;AACtE,SAAOC,SAAQ,OAAO;AAAA,IACpB;AAAA,IACA;AAAA,IACA,GAAG;AAAA,IACH,MAAM,KAAK;AAAA,IACX,sBAAsB,KAAK,wBAAwB,CAAC;AAAA,EACtD,IAAI,CAAC,WAAW,iBAAiB,IAAI,CAAC;AACxC;;;AClJA,SAAS,KAAK,UAAU;AACxB,SAAS,cAAAC,aAAY,WAAW,WAAAC,gBAAe;AAW/C,SAAS,uBAAuB;AAC9B,QAAM,UAAUC,YAAW,iBAAiB;AAC5C,MAAI,CAAC,WAAW,OAAO,KAAK,OAAO,EAAE,WAAW,GAAG;AACjD,UAAM,IAAI,MAAM,8DAA8D;AAAA,EAChF;AACA,SAAO;AACT;AA0BO,SAAS,cAAc,YAAY,UAAU;AAClD,QAAM,IAAI,GAAG,CAAC;AACd,QAAM;AAAA,IACJ;AAAA,EACF,IAAI,qBAAqB;AACzB,MAAI;AACJ,OAAK;AACH,QAAI,aAAa,QAAW;AAC1B,UAAIC;AACJ,UAAI,EAAE,CAAC,MAAM,uBAAO,IAAI,2BAA2B,GAAG;AACpD,QAAAA,MAAK;AAAA,UACH,SAAS;AAAA,UACT,cAAc;AAAA,UACd,SAAS;AAAA,UACT,WAAW;AAAA,UACX,WAAW;AAAA,UACX,UAAU;AAAA,UACV,iBAAiB;AAAA,UACjB,WAAW;AAAA,QACb;AACA,UAAE,CAAC,IAAIA;AAAA,MACT,OAAO;AACL,QAAAA,MAAK,EAAE,CAAC;AAAA,MACV;AACA,WAAKA;AACL,YAAM;AAAA,IACR;AACA,QAAI;AACJ,QAAI,EAAE,CAAC,MAAM,YAAY,EAAE,CAAC,MAAM,cAAc,EAAE,CAAC,MAAM,eAAe;AACtE,WAAK,cAAc,YAAY,QAAQ;AACvC,QAAE,CAAC,IAAI;AACP,QAAE,CAAC,IAAI;AACP,QAAE,CAAC,IAAI;AACP,QAAE,CAAC,IAAI;AAAA,IACT,OAAO;AACL,WAAK,EAAE,CAAC;AAAA,IACV;AACA,SAAK;AAAA,EACP;AACA,SAAO;AACT;AAwBO,SAAS,mBAAmB,YAAY,UAAU,QAAQ;AAC/D,QAAM,IAAI,GAAG,CAAC;AACd,QAAM;AAAA,IACJ;AAAA,EACF,IAAI,qBAAqB;AACzB,MAAI;AACJ,OAAK;AACH,QAAI,aAAa,QAAW;AAC1B,WAAK;AACL,YAAM;AAAA,IACR;AACA,QAAI;AACJ,QAAI,EAAE,CAAC,MAAM,UAAU,EAAE,CAAC,MAAM,mBAAmB,EAAE,CAAC,MAAM,YAAY,EAAE,CAAC,MAAM,YAAY;AAC3F,WAAK,gBAAgB,YAAY,UAAU,MAAM;AACjD,QAAE,CAAC,IAAI;AACP,QAAE,CAAC,IAAI;AACP,QAAE,CAAC,IAAI;AACP,QAAE,CAAC,IAAI;AACP,QAAE,CAAC,IAAI;AAAA,IACT,OAAO;AACL,WAAK,EAAE,CAAC;AAAA,IACV;AACA,SAAK;AAAA,EACP;AACA,SAAO;AACT;AA2CO,SAAS,oBAAoB,UAGR;AAC1B,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,EACF,IAAI,qBAAqB;AAGzB,QAAM,cAAcC,SAAQ,MAAM,SAAS,IAAI,OAAK,GAAG,EAAE,IAAI,IAAI,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,GAAG,GAAG,CAAC,QAAQ,CAAC;AAGrG,YAAU,MAAM;AACd,QAAI,SAAS,WAAW,GAAG;AACzB;AAAA,IACF;AAGA,UAAM,qBAAqB,SAAS,IAAI,UAAQ;AAAA,MAC9C,YAAY,IAAI;AAAA,MAChB,UAAU,IAAI;AAAA,IAChB,EAAE;AACF,wBAAoB,kBAAkB;AAAA,EACxC,GAAG,CAAC,UAAU,aAAa,mBAAmB,CAAC;AAG/C,SAAOA,SAAQ,MAAM;AACnB,QAAI,SAAS,WAAW,GAAG;AACzB,aAAO,CAAC;AAAA,IACV;AACA,WAAO,SAAS,IAAI,aAAW;AAAA,MAC7B,MAAM,OAAO;AAAA,MACb,IAAI,OAAO;AAAA,MACX,YAAY,cAAc,OAAO,MAAM,OAAO,EAAE;AAAA,IAClD,EAAE;AAAA,EACJ,GAAG,CAAC,eAAe,WAAW,CAAC;AACjC;AAqBO,SAAS,WAAW,YAAY,UAAU;AAC/C,SAAO,mBAAmB,YAAY,UAAU,MAAM;AACxD;AAsBO,SAAS,WAAW,YAAY,UAAU;AAC/C,SAAO,mBAAmB,YAAY,UAAU,MAAM;AACxD;AAyBO,SAAS,aAAa,YAAY,UAAU;AACjD,SAAO,mBAAmB,YAAY,UAAU,QAAQ;AAC1D;AAqBO,SAAS,YAAY,YAAY,UAAU;AAChD,SAAO,mBAAmB,YAAY,UAAU,OAAO;AACzD;AAwBO,SAAS,aAAa,YAAY,UAAU;AACjD,SAAO,mBAAmB,YAAY,UAAU,QAAQ;AAC1D;AAsBO,SAAS,0BAA0B;AACxC,QAAM;AAAA,IACJ;AAAA,EACF,IAAI,qBAAqB;AACzB,SAAO;AACT;AAmBO,SAAS,uBAAuB;AACrC,QAAM;AAAA,IACJ;AAAA,EACF,IAAI,qBAAqB;AACzB,SAAO;AACT;","names":["useCallback","useMemo","useCallback","useMemo","useContext","useMemo","useContext","t1","useMemo"]}
|