@pol-studios/db 1.0.30 → 1.0.33

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (100) hide show
  1. package/dist/{DataLayerContext-Dc7nF2IG.d.ts → DataLayerContext-BwMk4VpG.d.ts} +92 -8
  2. package/dist/{UserMetadataContext-B8gVWGMl.d.ts → UserMetadataContext-pQb3A8_Q.d.ts} +1 -1
  3. package/dist/{UserMetadataContext-DntmpK41.d.ts → UserMetadataContext-yLZQu24J.d.ts} +1 -1
  4. package/dist/auth/context.d.ts +3 -3
  5. package/dist/auth/context.js +5 -10
  6. package/dist/auth/guards.d.ts +9 -9
  7. package/dist/auth/guards.js +2 -3
  8. package/dist/auth/hooks.d.ts +5 -4
  9. package/dist/auth/hooks.js +6 -9
  10. package/dist/auth/index.d.ts +4 -4
  11. package/dist/auth/index.js +7 -12
  12. package/dist/{chunk-EKUDGIQZ.js → chunk-3XCW225W.js} +274 -468
  13. package/dist/chunk-3XCW225W.js.map +1 -0
  14. package/dist/{chunk-OQ7U6EQ3.js → chunk-4EJ6LUH7.js} +3800 -3425
  15. package/dist/chunk-4EJ6LUH7.js.map +1 -0
  16. package/dist/{chunk-FZF26ZRB.js → chunk-7BGDQT5X.js} +29 -16
  17. package/dist/{chunk-FZF26ZRB.js.map → chunk-7BGDQT5X.js.map} +1 -1
  18. package/dist/{chunk-P4UZ7IXC.js → chunk-7D4SUZUM.js} +1 -5
  19. package/dist/{chunk-3PJTNH2L.js → chunk-AKIRHA4Q.js} +2 -2
  20. package/dist/{chunk-5EFDS7SR.js → chunk-DMVUEJG2.js} +7 -2
  21. package/dist/chunk-DMVUEJG2.js.map +1 -0
  22. package/dist/{chunk-KQNOEADH.js → chunk-E64B4PJZ.js} +74 -309
  23. package/dist/chunk-E64B4PJZ.js.map +1 -0
  24. package/dist/{chunk-A7C2FMUF.js → chunk-E6JL3RUF.js} +209 -53
  25. package/dist/chunk-E6JL3RUF.js.map +1 -0
  26. package/dist/{chunk-U5UNPBKB.js → chunk-FI6JAD5G.js} +3 -3
  27. package/dist/{chunk-TKWR5AAY.js → chunk-JOULSXOI.js} +2 -2
  28. package/dist/{chunk-HTJ2FQW5.js → chunk-LF3V3ERS.js} +13 -15
  29. package/dist/{chunk-HTJ2FQW5.js.map → chunk-LF3V3ERS.js.map} +1 -1
  30. package/dist/{chunk-D522CKBU.js → chunk-OUCPYEKC.js} +15 -15
  31. package/dist/{chunk-D522CKBU.js.map → chunk-OUCPYEKC.js.map} +1 -1
  32. package/dist/{chunk-7DJELYBA.js → chunk-PNC6CG5U.js} +43 -82
  33. package/dist/chunk-PNC6CG5U.js.map +1 -0
  34. package/dist/{chunk-CNIGRBRE.js → chunk-QJZUIAHA.js} +43 -19
  35. package/dist/{chunk-CNIGRBRE.js.map → chunk-QJZUIAHA.js.map} +1 -1
  36. package/dist/{chunk-HAWJTZCK.js → chunk-RT4O5H2E.js} +5 -7
  37. package/dist/chunk-RT4O5H2E.js.map +1 -0
  38. package/dist/{chunk-WVF7RUW5.js → chunk-WM25QE7E.js} +3 -3
  39. package/dist/{chunk-H6365JPC.js → chunk-YUX6RGLZ.js} +3 -3
  40. package/dist/{chunk-H6365JPC.js.map → chunk-YUX6RGLZ.js.map} +1 -1
  41. package/dist/{chunk-H3LNH2NT.js → chunk-Z456IHCB.js} +5 -9
  42. package/dist/{chunk-H3LNH2NT.js.map → chunk-Z456IHCB.js.map} +1 -1
  43. package/dist/{chunk-JAATANS3.js → chunk-ZCOFRJQD.js} +3 -3
  44. package/dist/{chunk-JAATANS3.js.map → chunk-ZCOFRJQD.js.map} +1 -1
  45. package/dist/client/index.d.ts +1 -1
  46. package/dist/client/index.js +2 -2
  47. package/dist/core/index.d.ts +54 -31
  48. package/dist/{executor-Br27YZvl.d.ts → executor-YJw4m7Q7.d.ts} +9 -1
  49. package/dist/gen/index.js +1 -1
  50. package/dist/hooks/index.d.ts +3 -22
  51. package/dist/hooks/index.js +5 -4
  52. package/dist/{index-CYFdO0iB.d.ts → index-lveh8qb0.d.ts} +1 -1
  53. package/dist/index.d.ts +38 -10
  54. package/dist/index.js +60 -42
  55. package/dist/index.native.d.ts +19 -13
  56. package/dist/index.native.js +65 -39
  57. package/dist/index.web.d.ts +18 -45
  58. package/dist/index.web.js +58 -52
  59. package/dist/index.web.js.map +1 -1
  60. package/dist/mutation/index.d.ts +2 -2
  61. package/dist/mutation/index.js +5 -5
  62. package/dist/parser/index.js +4 -4
  63. package/dist/powersync-bridge/index.d.ts +18 -3
  64. package/dist/powersync-bridge/index.js +2 -2
  65. package/dist/query/index.d.ts +1 -1
  66. package/dist/query/index.js +7 -8
  67. package/dist/realtime/index.js +7 -9
  68. package/dist/realtime/index.js.map +1 -1
  69. package/dist/{setupAuthContext-Kv-THH-h.d.ts → setupAuthContext-B76nbIP6.d.ts} +23 -17
  70. package/dist/types/index.d.ts +3 -3
  71. package/dist/types/index.js +6 -7
  72. package/dist/{useBatchUpsert-9OYjibLh.d.ts → useBatchUpsert-DAkiCNo3.d.ts} +1 -1
  73. package/dist/{useDbCount-Dk0yCKlT.d.ts → useDbCount-DWfYB2iu.d.ts} +16 -2
  74. package/dist/{useResolveFeedback-C1KucfdQ.d.ts → useResolveFeedback-CxLccZKK.d.ts} +197 -93
  75. package/dist/{useSupabase-DvWVuHHE.d.ts → useSupabase-DSZNeXnF.d.ts} +1 -1
  76. package/dist/with-auth/index.d.ts +3 -3
  77. package/dist/with-auth/index.js +43 -32
  78. package/dist/with-auth/index.js.map +1 -1
  79. package/package.json +18 -8
  80. package/dist/canvas-C4TBBDUL.node +0 -0
  81. package/dist/canvas-ZQNCL7JL.js +0 -1541
  82. package/dist/canvas-ZQNCL7JL.js.map +0 -1
  83. package/dist/chunk-5EFDS7SR.js.map +0 -1
  84. package/dist/chunk-7DJELYBA.js.map +0 -1
  85. package/dist/chunk-A7C2FMUF.js.map +0 -1
  86. package/dist/chunk-EKUDGIQZ.js.map +0 -1
  87. package/dist/chunk-HAWJTZCK.js.map +0 -1
  88. package/dist/chunk-IXBDCSM3.js +0 -3391
  89. package/dist/chunk-IXBDCSM3.js.map +0 -1
  90. package/dist/chunk-KQNOEADH.js.map +0 -1
  91. package/dist/chunk-OQ7U6EQ3.js.map +0 -1
  92. package/dist/dist-NDNRSNOG.js +0 -521
  93. package/dist/dist-NDNRSNOG.js.map +0 -1
  94. package/dist/pdf-PHXP7RHD.js +0 -20336
  95. package/dist/pdf-PHXP7RHD.js.map +0 -1
  96. /package/dist/{chunk-P4UZ7IXC.js.map → chunk-7D4SUZUM.js.map} +0 -0
  97. /package/dist/{chunk-3PJTNH2L.js.map → chunk-AKIRHA4Q.js.map} +0 -0
  98. /package/dist/{chunk-U5UNPBKB.js.map → chunk-FI6JAD5G.js.map} +0 -0
  99. /package/dist/{chunk-TKWR5AAY.js.map → chunk-JOULSXOI.js.map} +0 -0
  100. /package/dist/{chunk-WVF7RUW5.js.map → chunk-WM25QE7E.js.map} +0 -0
@@ -3,23 +3,19 @@ import {
3
3
  } from "./chunk-GC3TBUWE.js";
4
4
  import {
5
5
  PostgrestParser
6
- } from "./chunk-TKWR5AAY.js";
7
- import {
8
- isNullOrWhitespace,
9
- isUsable,
10
- omit
11
- } from "./chunk-OQ7U6EQ3.js";
6
+ } from "./chunk-JOULSXOI.js";
12
7
  import {
13
8
  encode,
14
9
  useQuery
15
- } from "./chunk-H6365JPC.js";
10
+ } from "./chunk-YUX6RGLZ.js";
16
11
  import {
17
12
  generateUUID,
18
13
  useSupabase
19
- } from "./chunk-5EFDS7SR.js";
14
+ } from "./chunk-DMVUEJG2.js";
20
15
 
21
16
  // src/query/useQuery.ts
22
17
  import { c as _c } from "react/compiler-runtime";
18
+ import { omit } from "@pol-studios/utils";
23
19
  import { useDelayedValue } from "@pol-studios/hooks/state";
24
20
  function useQuery2(query, config) {
25
21
  const $ = _c(5);
@@ -176,6 +172,7 @@ function toPagedResponse(results, currentPage, totalCount, itemPerPage) {
176
172
  // src/query/useAdvancedQuery.ts
177
173
  import { useEffect, useMemo, useRef, useState } from "react";
178
174
  import { useQuery as useQuery3 } from "@tanstack/react-query";
175
+ import { isNullOrWhitespace, isUsable, omit as omit2 } from "@pol-studios/utils";
179
176
  import { useSessionStorageState as useSessionStorageState2 } from "@pol-studios/hooks/storage";
180
177
  var normalizeFilter = (filter) => {
181
178
  const groupOp = filter.op || filter.operator;
@@ -302,7 +299,7 @@ function useAdvancedFilterQuery(query, config) {
302
299
  const isEnabled = config?.enabled == null || config?.enabled === void 0 ? true : config.enabled;
303
300
  const [extraData, setExtraData] = useState({});
304
301
  const queryResponse = useQuery3({
305
- ...omit({
302
+ ...omit2({
306
303
  retry: 0,
307
304
  // Changed from 1 to 0 to prevent retries
308
305
  ...config ?? {},
@@ -328,13 +325,13 @@ function useAdvancedFilterQuery(query, config) {
328
325
  },
329
326
  sort: [...filterLayer.sort || []]
330
327
  };
331
- const currentKey = `${parser.schema}${parser.table}${parser.select}${JSON.stringify(omit(body, "pagination"))}`;
328
+ const currentKey = `${parser.schema}${parser.table}${parser.select}${JSON.stringify(omit2(body, "pagination"))}`;
332
329
  const requiresEdgeForOrdering = false;
333
330
  const hasNaturalLanguageQuery = !!filterLayer.naturalLanguageQuery;
334
331
  if (filterLayer.filters.length == 0 && requiresEdgeForOrdering === false && !hasNaturalLanguageQuery) {
335
332
  const result = await executeSupabaseQuery(supabase, body, parser, extraData, props.signal, config?.count);
336
333
  setExtraData((pre_0) => ({
337
- ...omit(result, "data"),
334
+ ...omit2(result, "data"),
338
335
  count: result.count ? result.count : pre_0.count,
339
336
  key: currentKey
340
337
  }));
@@ -581,7 +578,7 @@ function useAdvancedFilterQuery(query, config) {
581
578
  };
582
579
  }
583
580
  setExtraData((pre_1) => ({
584
- ...omit(result_0, "data"),
581
+ ...omit2(result_0, "data"),
585
582
  count: pre_1.key === currentKey ? pre_1.count : result_0.count,
586
583
  key: currentKey
587
584
  }));
@@ -636,7 +633,7 @@ function isSearchableColumn(columnName) {
636
633
  }
637
634
  async function executeSupabaseQuery(supabase, body, parser, extraData, signal, count) {
638
635
  const searchParams = Array.from(parser.searchParams.entries());
639
- const currentKey = `${parser.schema}${parser.table}${parser.select}${JSON.stringify(omit(body, "pagination"))}`;
636
+ const currentKey = `${parser.schema}${parser.table}${parser.select}${JSON.stringify(omit2(body, "pagination"))}`;
640
637
  const query = supabase.schema(parser.schema).from(parser.table).select(parser.select, {
641
638
  count: currentKey === extraData.key ? void 0 : count || void 0
642
639
  });
@@ -760,6 +757,7 @@ function useInfiniteQuery(query, countPerLoad, config) {
760
757
  // src/query/usePartialAdvancedQuery.ts
761
758
  import { c as _c3 } from "react/compiler-runtime";
762
759
  import { useLayoutEffect, useState as useState2 } from "react";
760
+ import { omit as omit3 } from "@pol-studios/utils";
763
761
  import { useSessionStorageState as useSessionStorageState3 } from "@pol-studios/hooks/storage";
764
762
  function usePartialAdvancedQuery(query, itemCountPerPage, config) {
765
763
  const $ = _c3(54);
@@ -807,7 +805,7 @@ function usePartialAdvancedQuery(query, itemCountPerPage, config) {
807
805
  const [baseQuery, filter, setFilters] = useAdvancedFilterQuery(rangedQuery, t5);
808
806
  let t6;
809
807
  if ($[10] !== filter) {
810
- t6 = JSON.stringify(omit(filter, ["pagination"]));
808
+ t6 = JSON.stringify(omit3(filter, ["pagination"]));
811
809
  $[10] = filter;
812
810
  $[11] = t6;
813
811
  } else {
@@ -960,4 +958,4 @@ export {
960
958
  useInfiniteQuery,
961
959
  usePartialAdvancedQuery
962
960
  };
963
- //# sourceMappingURL=chunk-HTJ2FQW5.js.map
961
+ //# sourceMappingURL=chunk-LF3V3ERS.js.map
@@ -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,26 +1,22 @@
1
+ import {
2
+ useDbUpsert
3
+ } from "./chunk-3XCW225W.js";
1
4
  import {
2
5
  UserMetadata
3
6
  } from "./chunk-SM73S2DY.js";
4
7
  import {
5
8
  useSetupAuth
6
- } from "./chunk-7DJELYBA.js";
9
+ } from "./chunk-PNC6CG5U.js";
7
10
  import {
8
11
  useDbQuery
9
- } from "./chunk-A7C2FMUF.js";
10
- import {
11
- useDbUpsert
12
- } from "./chunk-EKUDGIQZ.js";
13
- import {
14
- delay,
15
- isNullOrWhitespace,
16
- isUsable
17
- } from "./chunk-OQ7U6EQ3.js";
12
+ } from "./chunk-E6JL3RUF.js";
18
13
  import {
19
14
  useSupabase
20
- } from "./chunk-5EFDS7SR.js";
15
+ } from "./chunk-DMVUEJG2.js";
21
16
 
22
17
  // src/contexts/LiveChangeContext.tsx
23
18
  import { c as _c } from "react/compiler-runtime";
19
+ import { isUsable } from "@pol-studios/utils";
24
20
  import { createContext } from "react";
25
21
  import { jsx } from "react/jsx-runtime";
26
22
  var LiveChangeContext = createContext({});
@@ -87,7 +83,10 @@ var LiveChangeContextProvider = (t0) => {
87
83
  };
88
84
 
89
85
  // src/useLiveChangesIndicator.tsx
86
+ import { isNullOrWhitespace } from "@pol-studios/utils";
90
87
  import { useCallback, useContext, useEffect, useRef, useState } from "react";
88
+ import { delay } from "@pol-studios/utils";
89
+ import { isUsable as isUsable2 } from "@pol-studios/utils";
91
90
  function useLiveChangesIndicator(value, field) {
92
91
  const liveChangesContext = useContext(LiveChangeContext);
93
92
  const [showModifiedByName, setShowModifiedByName] = useState(false);
@@ -98,11 +97,11 @@ function useLiveChangesIndicator(value, field) {
98
97
  const checkChanges = useCallback(async () => {
99
98
  try {
100
99
  const changeLog = liveChangesContext?.changeLog;
101
- if (isUsable(changeLog) === false) {
100
+ if (isUsable2(changeLog) === false) {
102
101
  return;
103
102
  }
104
103
  const changes = changeLog.changes;
105
- if (isUsable(changes) === false) {
104
+ if (isUsable2(changes) === false) {
106
105
  return;
107
106
  }
108
107
  const changeOccurredInChangeLog = Object.keys(changes).some((x) => {
@@ -132,6 +131,7 @@ function useLiveChangesIndicator(value, field) {
132
131
  // src/contexts/UserMetadataContext.tsx
133
132
  import { c as _c2 } from "react/compiler-runtime";
134
133
  import { createContext as createContext2, useContext as useContext2, useEffect as useEffect2, useState as useState2 } from "react";
134
+ import { isUsable as isUsable3 } from "@pol-studios/utils";
135
135
  import { jsx as jsx2 } from "react/jsx-runtime";
136
136
  var userMetadataContext = createContext2(null);
137
137
  function UserMetadataContextProvider(t0) {
@@ -165,7 +165,7 @@ function UserMetadataContextProvider(t0) {
165
165
  }
166
166
  let t3;
167
167
  if ($[4] !== userId) {
168
- t3 = isUsable(userId);
168
+ t3 = isUsable3(userId);
169
169
  $[4] = userId;
170
170
  $[5] = t3;
171
171
  } else {
@@ -467,4 +467,4 @@ export {
467
467
  useSetUserMetadata,
468
468
  useUserMetadataState
469
469
  };
470
- //# sourceMappingURL=chunk-D522CKBU.js.map
470
+ //# sourceMappingURL=chunk-OUCPYEKC.js.map