@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
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/contexts/LiveChangeContext.tsx","../src/useLiveChangesIndicator.tsx","../src/contexts/UserMetadataContext.tsx"],"sourcesContent":["import { c as _c } from \"react/compiler-runtime\";\nimport { isUsable } from \"@pol-studios/utils\";\nimport { ReactNode, createContext } from \"react\";\nimport { DbChangeLog } from \"../types\";\nimport { useDbQuery } from \"../useDbQuery\";\nimport useSupabase from \"../useSupabase\";\nexport interface AlertProps {\n title: string;\n description: string;\n}\ninterface Context {\n lastModifiedUserName: string;\n changeLog: DbChangeLog;\n}\ninterface AlertState {\n isOpen: boolean;\n title: string;\n description: string;\n onConfirm: () => void;\n onCancel: () => void;\n}\nexport const LiveChangeContext = createContext({} as Context);\nexport const LiveChangeContextProvider = t0 => {\n const $ = _c(13);\n const {\n children,\n changeLog\n } = t0;\n const supabase = useSupabase();\n let t1;\n if ($[0] !== changeLog?.modifiedByUserId || $[1] !== supabase) {\n t1 = supabase.schema(\"core\").from(\"Profile\").select().eq(\"id\", changeLog?.modifiedByUserId).single();\n $[0] = changeLog?.modifiedByUserId;\n $[1] = supabase;\n $[2] = t1;\n } else {\n t1 = $[2];\n }\n const t2 = changeLog?.modifiedByUserId;\n let t3;\n if ($[3] !== t2) {\n t3 = isUsable(t2);\n $[3] = t2;\n $[4] = t3;\n } else {\n t3 = $[4];\n }\n let t4;\n if ($[5] !== t3) {\n t4 = {\n enabled: t3,\n crossOrganization: true\n };\n $[5] = t3;\n $[6] = t4;\n } else {\n t4 = $[6];\n }\n const userRequest = useDbQuery(t1, t4);\n const t5 = userRequest.data?.firstName + \" \" + userRequest.data?.lastName;\n let t6;\n if ($[7] !== changeLog || $[8] !== t5) {\n t6 = {\n changeLog,\n lastModifiedUserName: t5\n };\n $[7] = changeLog;\n $[8] = t5;\n $[9] = t6;\n } else {\n t6 = $[9];\n }\n let t7;\n if ($[10] !== children || $[11] !== t6) {\n t7 = <LiveChangeContext.Provider value={t6}>{children}</LiveChangeContext.Provider>;\n $[10] = children;\n $[11] = t6;\n $[12] = t7;\n } else {\n t7 = $[12];\n }\n return t7;\n};","import { isNullOrWhitespace } from \"@pol-studios/utils\";\nimport { useCallback, useContext, useEffect, useRef, useState } from \"react\";\nimport { delay } from \"@pol-studios/utils\";\nimport { LiveChangeContext } from \"./contexts/LiveChangeContext\";\nimport { isUsable } from \"@pol-studios/utils\";\nimport { useSetupAuth } from \"./auth\";\nexport default function useLiveChangesIndicator(value: any, field: string | undefined): [boolean, string] {\n const liveChangesContext = useContext(LiveChangeContext);\n const [showModifiedByName, setShowModifiedByName] = useState(false);\n const isMounted = useRef(false);\n const {\n user\n } = useSetupAuth();\n const checkChanges = useCallback(async () => {\n try {\n const changeLog = liveChangesContext?.changeLog;\n if (isUsable(changeLog) === false) {\n return;\n }\n const changes = changeLog.changes;\n if (isUsable(changes) === false) {\n return;\n }\n const changeOccurredInChangeLog = Object.keys(changes).some(x => {\n return field ? x === field : changes[x] === value;\n });\n if (changeOccurredInChangeLog === false) {\n return;\n }\n setShowModifiedByName(changeLog.modifiedByUserId !== user?.id);\n await delay(isNullOrWhitespace(liveChangesContext?.lastModifiedUserName) ? 2000 : 1500);\n } finally {\n setShowModifiedByName(false);\n }\n }, [liveChangesContext?.changeLog]);\n useEffect(() => {\n if (isMounted.current === false) {\n delay(200).then(x => {\n isMounted.current = true;\n });\n return;\n }\n checkChanges();\n }, [liveChangesContext?.changeLog]);\n return [showModifiedByName, liveChangesContext?.lastModifiedUserName];\n}","import { c as _c } from \"react/compiler-runtime\";\nimport { ReactNode, createContext, useContext, useEffect, useMemo, useState, useCallback } from \"react\";\nimport { useDbQuery } from \"../useDbQuery\";\nimport { useDbUpsert } from \"../hooks\";\nimport useSupabase from \"../useSupabase\";\nimport { isUsable } from \"@pol-studios/utils\";\nimport { Database } from \"../useSupabase\";\nimport { useDbRealtimeQuery } from \"../useDbRealtimeQuery\";\nimport { UserMetadata } from \"../gen/public/UserMetadata/query\";\nimport { useSetupAuth } from \"../auth\";\n\n// Type definitions for UserMetadata\nexport type UserMetadataRow = Database[\"core\"][\"Tables\"][\"UserMetadata\"][\"Row\"];\nexport type UserMetadataInsert = Database[\"core\"][\"Tables\"][\"UserMetadata\"][\"Insert\"];\nexport type UserMetadataUpdate = Database[\"core\"][\"Tables\"][\"UserMetadata\"][\"Update\"];\n\n// Context interface\nexport interface UserMetadataContextType {\n metadata: Record<string, string>;\n isLoading: boolean;\n error: Error | null;\n setMetadata: (key: string, value: string) => Promise<void>;\n getMetadata: (key: string) => string | undefined;\n removeMetadata: (key: string) => Promise<void>;\n refreshMetadata: () => Promise<void>;\n}\n\n// Create context\nexport const userMetadataContext = createContext<UserMetadataContextType | null>(null);\n\n// Provider component\nexport function UserMetadataContextProvider(t0) {\n const $ = _c(35);\n const {\n children\n } = t0;\n const supabase = useSupabase();\n let t1;\n if ($[0] === Symbol.for(\"react.memo_cache_sentinel\")) {\n t1 = {};\n $[0] = t1;\n } else {\n t1 = $[0];\n }\n const [metadata, setMetadataState] = useState(t1);\n const [isLoading, setIsLoading] = useState(true);\n const [error, setError] = useState(null);\n const {\n user\n } = useSetupAuth();\n const userId = user?.id;\n let t2;\n if ($[1] !== supabase || $[2] !== userId) {\n t2 = supabase.schema(\"core\").from(\"UserMetadata\").select(UserMetadata.defaultQuery).eq(\"userId\", userId).order(\"key\");\n $[1] = supabase;\n $[2] = userId;\n $[3] = t2;\n } else {\n t2 = $[3];\n }\n let t3;\n if ($[4] !== userId) {\n t3 = isUsable(userId);\n $[4] = userId;\n $[5] = t3;\n } else {\n t3 = $[5];\n }\n let t4;\n if ($[6] !== t3) {\n t4 = {\n enabled: t3,\n crossOrganization: true\n };\n $[6] = t3;\n $[7] = t4;\n } else {\n t4 = $[7];\n }\n const metadataQuery = useDbQuery(t2, t4);\n let t5;\n if ($[8] === Symbol.for(\"react.memo_cache_sentinel\")) {\n t5 = {\n invalidateTables: [\"UserMetadata\"]\n };\n $[8] = t5;\n } else {\n t5 = $[8];\n }\n const upsertMutation = useDbUpsert(\"UserMetadata\", t5);\n let t6;\n let t7;\n if ($[9] !== metadataQuery.data || $[10] !== metadataQuery.error || $[11] !== metadataQuery.isLoading) {\n t6 = () => {\n if (metadataQuery.data && Array.isArray(metadataQuery.data)) {\n const metadataMap = {};\n metadataQuery.data.forEach(item => {\n metadataMap[item.key] = item.value;\n });\n setMetadataState(metadataMap);\n setIsLoading(false);\n setError(null);\n } else {\n if (metadataQuery.error) {\n setError(metadataQuery.error);\n setIsLoading(false);\n } else {\n if (metadataQuery.isLoading) {\n setIsLoading(true);\n } else {\n if (metadataQuery.data && !Array.isArray(metadataQuery.data)) {\n setMetadataState({});\n setIsLoading(false);\n }\n }\n }\n }\n };\n t7 = [metadataQuery.data, metadataQuery.error, metadataQuery.isLoading];\n $[9] = metadataQuery.data;\n $[10] = metadataQuery.error;\n $[11] = metadataQuery.isLoading;\n $[12] = t6;\n $[13] = t7;\n } else {\n t6 = $[12];\n t7 = $[13];\n }\n useEffect(t6, t7);\n let t8;\n if ($[14] !== upsertMutation || $[15] !== userId) {\n t8 = async (key, value) => {\n if (!userId) {\n throw new Error(\"User not authenticated\");\n }\n ;\n try {\n await upsertMutation.mutateAsync({\n userId,\n key,\n value\n });\n setMetadataState(prev => ({\n ...prev,\n [key]: value\n }));\n } catch (t9) {\n const err = t9;\n setError(err as Error);\n throw err;\n }\n };\n $[14] = upsertMutation;\n $[15] = userId;\n $[16] = t8;\n } else {\n t8 = $[16];\n }\n const setMetadata = t8;\n let t9;\n if ($[17] !== metadata) {\n t9 = key_0 => metadata[key_0];\n $[17] = metadata;\n $[18] = t9;\n } else {\n t9 = $[18];\n }\n const getMetadata = t9;\n let t10;\n if ($[19] !== supabase || $[20] !== userId) {\n t10 = async key_1 => {\n if (!userId) {\n throw new Error(\"User not authenticated\");\n }\n ;\n try {\n await supabase.schema(\"core\").from(\"UserMetadata\").delete().eq(\"userId\", userId).eq(\"key\", key_1);\n setMetadataState(prev_0 => {\n const newState = {\n ...prev_0\n };\n delete newState[key_1];\n return newState;\n });\n } catch (t11) {\n const err_0 = t11;\n setError(err_0 as Error);\n throw err_0;\n }\n };\n $[19] = supabase;\n $[20] = userId;\n $[21] = t10;\n } else {\n t10 = $[21];\n }\n const removeMetadata = t10;\n let t11;\n if ($[22] !== metadataQuery) {\n t11 = async () => {\n await metadataQuery.refetch();\n };\n $[22] = metadataQuery;\n $[23] = t11;\n } else {\n t11 = $[23];\n }\n const refreshMetadata = t11;\n let t12;\n if ($[24] !== error || $[25] !== getMetadata || $[26] !== isLoading || $[27] !== metadata || $[28] !== refreshMetadata || $[29] !== removeMetadata || $[30] !== setMetadata) {\n t12 = {\n metadata,\n isLoading,\n error,\n setMetadata,\n getMetadata,\n removeMetadata,\n refreshMetadata\n };\n $[24] = error;\n $[25] = getMetadata;\n $[26] = isLoading;\n $[27] = metadata;\n $[28] = refreshMetadata;\n $[29] = removeMetadata;\n $[30] = setMetadata;\n $[31] = t12;\n } else {\n t12 = $[31];\n }\n const contextValue = t12;\n let t13;\n if ($[32] !== children || $[33] !== contextValue) {\n t13 = <userMetadataContext.Provider value={contextValue}>{children}</userMetadataContext.Provider>;\n $[32] = children;\n $[33] = contextValue;\n $[34] = t13;\n } else {\n t13 = $[34];\n }\n return t13;\n}\n\n// Hook to use the context\nexport function useUserMetadata() {\n const context = useContext(userMetadataContext);\n if (!context) {\n throw new Error(\"useUserMetadata must be used within a UserMetadataContextProvider\");\n }\n return context;\n}\n\n// Convenience hook for getting a specific metadata value\nexport function useUserMetadataValue(key) {\n const $ = _c(3);\n const {\n getMetadata\n } = useUserMetadata();\n let t0;\n if ($[0] !== getMetadata || $[1] !== key) {\n t0 = getMetadata(key);\n $[0] = getMetadata;\n $[1] = key;\n $[2] = t0;\n } else {\n t0 = $[2];\n }\n return t0;\n}\n\n// Convenience hook for setting a specific metadata value\nexport function useSetUserMetadata() {\n const $ = _c(3);\n const {\n setMetadata,\n removeMetadata\n } = useUserMetadata();\n let t0;\n if ($[0] !== removeMetadata || $[1] !== setMetadata) {\n t0 = {\n setMetadata,\n removeMetadata\n };\n $[0] = removeMetadata;\n $[1] = setMetadata;\n $[2] = t0;\n } else {\n t0 = $[2];\n }\n return t0;\n}\n\n// Advanced state-like hook with JSON serialization support\nexport function useUserMetadataState(key, defaultValue, options) {\n const $ = _c(11);\n const {\n metadata,\n setMetadata,\n isLoading\n } = useUserMetadata();\n const serialize = options?.serialize ?? _temp;\n const deserialize = options?.deserialize ?? _temp2;\n let t0;\n bb0: {\n const rawValue = metadata[key];\n if (!rawValue) {\n t0 = defaultValue;\n break bb0;\n }\n ;\n try {\n let t2;\n if ($[0] !== deserialize || $[1] !== rawValue) {\n t2 = deserialize(rawValue);\n $[0] = deserialize;\n $[1] = rawValue;\n $[2] = t2;\n } else {\n t2 = $[2];\n }\n t0 = t2;\n } catch (t1) {\n const error = t1;\n console.warn(`Failed to deserialize metadata for key \"${key}\":`, error);\n t0 = defaultValue;\n }\n }\n const currentValue = t0;\n let t1;\n if ($[3] !== key || $[4] !== serialize || $[5] !== setMetadata) {\n t1 = async value_1 => {\n const serializedValue = serialize(value_1);\n await setMetadata(key, serializedValue);\n };\n $[3] = key;\n $[4] = serialize;\n $[5] = setMetadata;\n $[6] = t1;\n } else {\n t1 = $[6];\n }\n const setValue = t1;\n let t2;\n if ($[7] !== currentValue || $[8] !== isLoading || $[9] !== setValue) {\n t2 = [currentValue, setValue, isLoading];\n $[7] = currentValue;\n $[8] = isLoading;\n $[9] = setValue;\n $[10] = t2;\n } else {\n t2 = $[10];\n }\n return t2;\n}\nfunction _temp2(value_0) {\n return JSON.parse(value_0);\n}\nfunction _temp(value) {\n return JSON.stringify(value);\n}"],"mappings":"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","names":["_c","createContext","useContext","useEffect","useState","jsx","createContext","_c","useState","useEffect","t9","t11","useContext","t2","t1"]}
1
+ {"version":3,"sources":["../src/contexts/LiveChangeContext.tsx","../src/useLiveChangesIndicator.tsx","../src/contexts/UserMetadataContext.tsx"],"sourcesContent":["import { c as _c } from \"react/compiler-runtime\";\nimport { isUsable } from \"@pol-studios/utils\";\nimport { ReactNode, createContext } from \"react\";\nimport { DbChangeLog } from \"../types\";\nimport { useDbQuery } from \"../useDbQuery\";\nimport useSupabase from \"../useSupabase\";\nexport interface AlertProps {\n title: string;\n description: string;\n}\ninterface Context {\n lastModifiedUserName: string;\n changeLog: DbChangeLog;\n}\ninterface AlertState {\n isOpen: boolean;\n title: string;\n description: string;\n onConfirm: () => void;\n onCancel: () => void;\n}\nexport const LiveChangeContext = createContext({} as Context);\nexport const LiveChangeContextProvider = t0 => {\n const $ = _c(13);\n const {\n children,\n changeLog\n } = t0;\n const supabase = useSupabase();\n let t1;\n if ($[0] !== changeLog?.modifiedByUserId || $[1] !== supabase) {\n t1 = supabase.schema(\"core\").from(\"Profile\").select().eq(\"id\", changeLog?.modifiedByUserId).single();\n $[0] = changeLog?.modifiedByUserId;\n $[1] = supabase;\n $[2] = t1;\n } else {\n t1 = $[2];\n }\n const t2 = changeLog?.modifiedByUserId;\n let t3;\n if ($[3] !== t2) {\n t3 = isUsable(t2);\n $[3] = t2;\n $[4] = t3;\n } else {\n t3 = $[4];\n }\n let t4;\n if ($[5] !== t3) {\n t4 = {\n enabled: t3,\n crossOrganization: true\n };\n $[5] = t3;\n $[6] = t4;\n } else {\n t4 = $[6];\n }\n const userRequest = useDbQuery(t1, t4);\n const t5 = userRequest.data?.firstName + \" \" + userRequest.data?.lastName;\n let t6;\n if ($[7] !== changeLog || $[8] !== t5) {\n t6 = {\n changeLog,\n lastModifiedUserName: t5\n };\n $[7] = changeLog;\n $[8] = t5;\n $[9] = t6;\n } else {\n t6 = $[9];\n }\n let t7;\n if ($[10] !== children || $[11] !== t6) {\n t7 = <LiveChangeContext.Provider value={t6}>{children}</LiveChangeContext.Provider>;\n $[10] = children;\n $[11] = t6;\n $[12] = t7;\n } else {\n t7 = $[12];\n }\n return t7;\n};","import { isNullOrWhitespace } from \"@pol-studios/utils\";\nimport { useCallback, useContext, useEffect, useRef, useState } from \"react\";\nimport { delay } from \"@pol-studios/utils\";\nimport { LiveChangeContext } from \"./contexts/LiveChangeContext\";\nimport { isUsable } from \"@pol-studios/utils\";\nimport { useSetupAuth } from \"./auth\";\nexport default function useLiveChangesIndicator(value: any, field: string | undefined): [boolean, string] {\n const liveChangesContext = useContext(LiveChangeContext);\n const [showModifiedByName, setShowModifiedByName] = useState(false);\n const isMounted = useRef(false);\n const {\n user\n } = useSetupAuth();\n const checkChanges = useCallback(async () => {\n try {\n const changeLog = liveChangesContext?.changeLog;\n if (isUsable(changeLog) === false) {\n return;\n }\n const changes = changeLog.changes;\n if (isUsable(changes) === false) {\n return;\n }\n const changeOccurredInChangeLog = Object.keys(changes).some(x => {\n return field ? x === field : changes[x] === value;\n });\n if (changeOccurredInChangeLog === false) {\n return;\n }\n setShowModifiedByName(changeLog.modifiedByUserId !== user?.id);\n await delay(isNullOrWhitespace(liveChangesContext?.lastModifiedUserName) ? 2000 : 1500);\n } finally {\n setShowModifiedByName(false);\n }\n }, [liveChangesContext?.changeLog]);\n useEffect(() => {\n if (isMounted.current === false) {\n delay(200).then(x => {\n isMounted.current = true;\n });\n return;\n }\n checkChanges();\n }, [liveChangesContext?.changeLog]);\n return [showModifiedByName, liveChangesContext?.lastModifiedUserName];\n}","import { c as _c } from \"react/compiler-runtime\";\nimport { ReactNode, createContext, useContext, useEffect, useMemo, useState, useCallback } from \"react\";\nimport { useDbQuery } from \"../useDbQuery\";\nimport { useDbUpsert } from \"../hooks\";\nimport useSupabase from \"../useSupabase\";\nimport { isUsable } from \"@pol-studios/utils\";\nimport { Database } from \"../useSupabase\";\nimport { useDbRealtimeQuery } from \"../useDbRealtimeQuery\";\nimport { UserMetadata } from \"../gen/public/UserMetadata/query\";\nimport { useSetupAuth } from \"../auth\";\n\n// Type definitions for UserMetadata\nexport type UserMetadataRow = Database[\"core\"][\"Tables\"][\"UserMetadata\"][\"Row\"];\nexport type UserMetadataInsert = Database[\"core\"][\"Tables\"][\"UserMetadata\"][\"Insert\"];\nexport type UserMetadataUpdate = Database[\"core\"][\"Tables\"][\"UserMetadata\"][\"Update\"];\n\n// Context interface\nexport interface UserMetadataContextType {\n metadata: Record<string, string>;\n isLoading: boolean;\n error: Error | null;\n setMetadata: (key: string, value: string) => Promise<void>;\n getMetadata: (key: string) => string | undefined;\n removeMetadata: (key: string) => Promise<void>;\n refreshMetadata: () => Promise<void>;\n}\n\n// Create context\nexport const userMetadataContext = createContext<UserMetadataContextType | null>(null);\n\n// Provider component\nexport function UserMetadataContextProvider(t0) {\n const $ = _c(35);\n const {\n children\n } = t0;\n const supabase = useSupabase();\n let t1;\n if ($[0] === Symbol.for(\"react.memo_cache_sentinel\")) {\n t1 = {};\n $[0] = t1;\n } else {\n t1 = $[0];\n }\n const [metadata, setMetadataState] = useState(t1);\n const [isLoading, setIsLoading] = useState(true);\n const [error, setError] = useState(null);\n const {\n user\n } = useSetupAuth();\n const userId = user?.id;\n let t2;\n if ($[1] !== supabase || $[2] !== userId) {\n t2 = supabase.schema(\"core\").from(\"UserMetadata\").select(UserMetadata.defaultQuery).eq(\"userId\", userId).order(\"key\");\n $[1] = supabase;\n $[2] = userId;\n $[3] = t2;\n } else {\n t2 = $[3];\n }\n let t3;\n if ($[4] !== userId) {\n t3 = isUsable(userId);\n $[4] = userId;\n $[5] = t3;\n } else {\n t3 = $[5];\n }\n let t4;\n if ($[6] !== t3) {\n t4 = {\n enabled: t3,\n crossOrganization: true\n };\n $[6] = t3;\n $[7] = t4;\n } else {\n t4 = $[7];\n }\n const metadataQuery = useDbQuery(t2, t4);\n let t5;\n if ($[8] === Symbol.for(\"react.memo_cache_sentinel\")) {\n t5 = {\n invalidateTables: [\"UserMetadata\"]\n };\n $[8] = t5;\n } else {\n t5 = $[8];\n }\n const upsertMutation = useDbUpsert(\"UserMetadata\", t5);\n let t6;\n let t7;\n if ($[9] !== metadataQuery.data || $[10] !== metadataQuery.error || $[11] !== metadataQuery.isLoading) {\n t6 = () => {\n if (metadataQuery.data && Array.isArray(metadataQuery.data)) {\n const metadataMap = {};\n metadataQuery.data.forEach(item => {\n metadataMap[item.key] = item.value;\n });\n setMetadataState(metadataMap);\n setIsLoading(false);\n setError(null);\n } else {\n if (metadataQuery.error) {\n setError(metadataQuery.error);\n setIsLoading(false);\n } else {\n if (metadataQuery.isLoading) {\n setIsLoading(true);\n } else {\n if (metadataQuery.data && !Array.isArray(metadataQuery.data)) {\n setMetadataState({});\n setIsLoading(false);\n }\n }\n }\n }\n };\n t7 = [metadataQuery.data, metadataQuery.error, metadataQuery.isLoading];\n $[9] = metadataQuery.data;\n $[10] = metadataQuery.error;\n $[11] = metadataQuery.isLoading;\n $[12] = t6;\n $[13] = t7;\n } else {\n t6 = $[12];\n t7 = $[13];\n }\n useEffect(t6, t7);\n let t8;\n if ($[14] !== upsertMutation || $[15] !== userId) {\n t8 = async (key, value) => {\n if (!userId) {\n throw new Error(\"User not authenticated\");\n }\n ;\n try {\n await upsertMutation.mutateAsync({\n userId,\n key,\n value\n });\n setMetadataState(prev => ({\n ...prev,\n [key]: value\n }));\n } catch (t9) {\n const err = t9;\n setError(err as Error);\n throw err;\n }\n };\n $[14] = upsertMutation;\n $[15] = userId;\n $[16] = t8;\n } else {\n t8 = $[16];\n }\n const setMetadata = t8;\n let t9;\n if ($[17] !== metadata) {\n t9 = key_0 => metadata[key_0];\n $[17] = metadata;\n $[18] = t9;\n } else {\n t9 = $[18];\n }\n const getMetadata = t9;\n let t10;\n if ($[19] !== supabase || $[20] !== userId) {\n t10 = async key_1 => {\n if (!userId) {\n throw new Error(\"User not authenticated\");\n }\n ;\n try {\n await supabase.schema(\"core\").from(\"UserMetadata\").delete().eq(\"userId\", userId).eq(\"key\", key_1);\n setMetadataState(prev_0 => {\n const newState = {\n ...prev_0\n };\n delete newState[key_1];\n return newState;\n });\n } catch (t11) {\n const err_0 = t11;\n setError(err_0 as Error);\n throw err_0;\n }\n };\n $[19] = supabase;\n $[20] = userId;\n $[21] = t10;\n } else {\n t10 = $[21];\n }\n const removeMetadata = t10;\n let t11;\n if ($[22] !== metadataQuery) {\n t11 = async () => {\n await metadataQuery.refetch();\n };\n $[22] = metadataQuery;\n $[23] = t11;\n } else {\n t11 = $[23];\n }\n const refreshMetadata = t11;\n let t12;\n if ($[24] !== error || $[25] !== getMetadata || $[26] !== isLoading || $[27] !== metadata || $[28] !== refreshMetadata || $[29] !== removeMetadata || $[30] !== setMetadata) {\n t12 = {\n metadata,\n isLoading,\n error,\n setMetadata,\n getMetadata,\n removeMetadata,\n refreshMetadata\n };\n $[24] = error;\n $[25] = getMetadata;\n $[26] = isLoading;\n $[27] = metadata;\n $[28] = refreshMetadata;\n $[29] = removeMetadata;\n $[30] = setMetadata;\n $[31] = t12;\n } else {\n t12 = $[31];\n }\n const contextValue = t12;\n let t13;\n if ($[32] !== children || $[33] !== contextValue) {\n t13 = <userMetadataContext.Provider value={contextValue}>{children}</userMetadataContext.Provider>;\n $[32] = children;\n $[33] = contextValue;\n $[34] = t13;\n } else {\n t13 = $[34];\n }\n return t13;\n}\n\n// Hook to use the context\nexport function useUserMetadata() {\n const context = useContext(userMetadataContext);\n if (!context) {\n throw new Error(\"useUserMetadata must be used within a UserMetadataContextProvider\");\n }\n return context;\n}\n\n// Convenience hook for getting a specific metadata value\nexport function useUserMetadataValue(key) {\n const $ = _c(3);\n const {\n getMetadata\n } = useUserMetadata();\n let t0;\n if ($[0] !== getMetadata || $[1] !== key) {\n t0 = getMetadata(key);\n $[0] = getMetadata;\n $[1] = key;\n $[2] = t0;\n } else {\n t0 = $[2];\n }\n return t0;\n}\n\n// Convenience hook for setting a specific metadata value\nexport function useSetUserMetadata() {\n const $ = _c(3);\n const {\n setMetadata,\n removeMetadata\n } = useUserMetadata();\n let t0;\n if ($[0] !== removeMetadata || $[1] !== setMetadata) {\n t0 = {\n setMetadata,\n removeMetadata\n };\n $[0] = removeMetadata;\n $[1] = setMetadata;\n $[2] = t0;\n } else {\n t0 = $[2];\n }\n return t0;\n}\n\n// Advanced state-like hook with JSON serialization support\nexport function useUserMetadataState(key, defaultValue, options) {\n const $ = _c(11);\n const {\n metadata,\n setMetadata,\n isLoading\n } = useUserMetadata();\n const serialize = options?.serialize ?? _temp;\n const deserialize = options?.deserialize ?? _temp2;\n let t0;\n bb0: {\n const rawValue = metadata[key];\n if (!rawValue) {\n t0 = defaultValue;\n break bb0;\n }\n ;\n try {\n let t2;\n if ($[0] !== deserialize || $[1] !== rawValue) {\n t2 = deserialize(rawValue);\n $[0] = deserialize;\n $[1] = rawValue;\n $[2] = t2;\n } else {\n t2 = $[2];\n }\n t0 = t2;\n } catch (t1) {\n const error = t1;\n console.warn(`Failed to deserialize metadata for key \"${key}\":`, error);\n t0 = defaultValue;\n }\n }\n const currentValue = t0;\n let t1;\n if ($[3] !== key || $[4] !== serialize || $[5] !== setMetadata) {\n t1 = async value_1 => {\n const serializedValue = serialize(value_1);\n await setMetadata(key, serializedValue);\n };\n $[3] = key;\n $[4] = serialize;\n $[5] = setMetadata;\n $[6] = t1;\n } else {\n t1 = $[6];\n }\n const setValue = t1;\n let t2;\n if ($[7] !== currentValue || $[8] !== isLoading || $[9] !== setValue) {\n t2 = [currentValue, setValue, isLoading];\n $[7] = currentValue;\n $[8] = isLoading;\n $[9] = setValue;\n $[10] = t2;\n } else {\n t2 = $[10];\n }\n return t2;\n}\nfunction _temp2(value_0) {\n return JSON.parse(value_0);\n}\nfunction _temp(value) {\n return JSON.stringify(value);\n}"],"mappings":"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","names":["isUsable","isUsable","_c","createContext","useContext","useEffect","useState","isUsable","jsx","createContext","_c","useState","isUsable","useEffect","t9","t11","useContext","t2","t1"]}
@@ -1,14 +1,11 @@
1
1
  import {
2
2
  permissionContext,
3
3
  setupAuthContext
4
- } from "./chunk-A7C2FMUF.js";
5
- import {
6
- isUsable
7
- } from "./chunk-OQ7U6EQ3.js";
4
+ } from "./chunk-E6JL3RUF.js";
8
5
 
9
6
  // src/auth/hooks/useAuth.ts
10
- import { c as _c } from "react/compiler-runtime";
11
- import { useContext } from "react";
7
+ import { isUsable } from "@pol-studios/utils";
8
+ import { useCallback, useContext, useMemo } from "react";
12
9
  function useAuth() {
13
10
  const auth = useContext(setupAuthContext);
14
11
  if (isUsable(auth.user) === false) {
@@ -21,85 +18,49 @@ function useAuth() {
21
18
  }
22
19
  }
23
20
  function useSetupAuth() {
24
- const $ = _c(13);
25
21
  const auth = useContext(setupAuthContext);
26
22
  const entityPermissions = useContext(permissionContext);
27
- let t0;
28
- if ($[0] !== auth.access || $[1] !== auth.isArchived || $[2] !== auth.isSuspended) {
29
- t0 = (key) => {
30
- if (auth.isArchived || auth.isSuspended) {
31
- return false;
32
- }
33
- const accessGiven = auth.access;
34
- if (isUsable(accessGiven) === false) {
35
- return false;
36
- }
37
- if (accessGiven.includes("owner")) {
38
- return true;
39
- }
40
- if (accessGiven.includes(key)) {
41
- return true;
42
- }
43
- if (isUsable(key) === false) {
44
- return true;
45
- }
23
+ const hasAccess = useCallback((key) => {
24
+ if (auth.hasAccess) {
25
+ return auth.hasAccess(key);
26
+ }
27
+ if (auth.isArchived || auth.isSuspended) {
46
28
  return false;
47
- };
48
- $[0] = auth.access;
49
- $[1] = auth.isArchived;
50
- $[2] = auth.isSuspended;
51
- $[3] = t0;
52
- } else {
53
- t0 = $[3];
54
- }
55
- const hasAccess = t0;
56
- let t1;
57
- if ($[4] !== auth.access || $[5] !== auth.isArchived || $[6] !== auth.isSuspended || $[7] !== entityPermissions) {
58
- t1 = (entityType, entityId, action) => {
59
- if (auth.isArchived || auth.isSuspended) {
60
- return false;
61
- }
62
- if (!entityId || entityId <= 0 || !Number.isInteger(entityId)) {
63
- return false;
64
- }
65
- const accessGiven_0 = auth.access;
66
- if (isUsable(accessGiven_0) && accessGiven_0.includes("owner")) {
67
- return true;
68
- }
69
- if (!entityPermissions || typeof entityPermissions.checkPermission !== "function") {
70
- return false;
71
- }
72
- return entityPermissions.checkPermission(entityType, entityId, action);
73
- };
74
- $[4] = auth.access;
75
- $[5] = auth.isArchived;
76
- $[6] = auth.isSuspended;
77
- $[7] = entityPermissions;
78
- $[8] = t1;
79
- } else {
80
- t1 = $[8];
81
- }
82
- const hasEntityAccess = t1;
83
- let t2;
84
- if ($[9] !== auth || $[10] !== hasAccess || $[11] !== hasEntityAccess) {
85
- t2 = {
86
- hasAccess,
87
- hasEntityAccess,
88
- ...auth,
89
- user: auth.user
90
- };
91
- $[9] = auth;
92
- $[10] = hasAccess;
93
- $[11] = hasEntityAccess;
94
- $[12] = t2;
95
- } else {
96
- t2 = $[12];
97
- }
98
- return t2;
29
+ }
30
+ const accessGiven = auth.access;
31
+ if (isUsable(accessGiven) === false) return false;
32
+ if (accessGiven.includes("*:*:*")) return true;
33
+ if (accessGiven.includes(key)) return true;
34
+ if (isUsable(key) === false) return true;
35
+ return false;
36
+ }, [auth.hasAccess, auth.access, auth.isArchived, auth.isSuspended]);
37
+ const hasEntityAccess = useCallback((entityType, entityId, action) => {
38
+ if (auth.isArchived || auth.isSuspended) {
39
+ return false;
40
+ }
41
+ if (!entityId || entityId <= 0 || !Number.isInteger(entityId)) {
42
+ return false;
43
+ }
44
+ const accessGiven_0 = auth.access;
45
+ if (isUsable(accessGiven_0) && accessGiven_0.includes("*:*:*")) {
46
+ return true;
47
+ }
48
+ if (!entityPermissions || typeof entityPermissions.checkPermission !== "function") {
49
+ return false;
50
+ }
51
+ return entityPermissions.checkPermission(entityType, entityId, action);
52
+ }, [auth.access, auth.isArchived, auth.isSuspended, entityPermissions]);
53
+ return useMemo(() => ({
54
+ hasAccess,
55
+ hasEntityAccess,
56
+ ...auth,
57
+ user: auth.user,
58
+ effectivePermissions: auth.effectivePermissions || []
59
+ }), [hasAccess, hasEntityAccess, auth]);
99
60
  }
100
61
 
101
62
  // src/auth/hooks/usePermission.ts
102
- import { c as _c2 } from "react/compiler-runtime";
63
+ import { c as _c } from "react/compiler-runtime";
103
64
  import { useContext as useContext2, useEffect, useMemo as useMemo2 } from "react";
104
65
  function usePermissionContext() {
105
66
  const context = useContext2(permissionContext);
@@ -109,7 +70,7 @@ function usePermissionContext() {
109
70
  return context;
110
71
  }
111
72
  function usePermission(entityType, entityId) {
112
- const $ = _c2(5);
73
+ const $ = _c(5);
113
74
  const {
114
75
  getPermission
115
76
  } = usePermissionContext();
@@ -150,7 +111,7 @@ function usePermission(entityType, entityId) {
150
111
  return t0;
151
112
  }
152
113
  function usePermissionCheck(entityType, entityId, action) {
153
- const $ = _c2(5);
114
+ const $ = _c(5);
154
115
  const {
155
116
  checkPermission
156
117
  } = usePermissionContext();
@@ -244,4 +205,4 @@ export {
244
205
  useInvalidatePermission,
245
206
  usePermissionLoading
246
207
  };
247
- //# sourceMappingURL=chunk-7DJELYBA.js.map
208
+ //# sourceMappingURL=chunk-PNC6CG5U.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/auth/hooks/useAuth.ts","../src/auth/hooks/usePermission.ts"],"sourcesContent":["import { isUsable } from \"@pol-studios/utils\";\nimport { useCallback, useContext, useMemo } from \"react\";\nimport { User } from \"@supabase/supabase-js\";\nimport { SetupAuthContext, setupAuthContext, type EffectivePermission } from \"../context/AuthProvider\";\nimport { permissionContext } from \"../context/PermissionContext\";\nimport { EntityAction, EntityType } from \"../types/EntityPermissions\";\n\n// Re-export EffectivePermission type for consumers\nexport type { EffectivePermission };\n\n/**\n * Hook for authenticated users only.\n * Throws an error if the user is not authenticated.\n * Use useSetupAuth() if you need to handle unauthenticated users.\n *\n * @returns Auth context with guaranteed non-null user and hasAccess helper\n * @throws Error if user is not authenticated\n *\n * @example\n * ```tsx\n * function AuthenticatedComponent() {\n * const { user, hasAccess, profile } = useAuth();\n *\n * // user is guaranteed to be non-null\n * console.log(user.id);\n *\n * if (hasAccess('admin')) {\n * return <AdminDashboard />;\n * }\n *\n * return <UserDashboard />;\n * }\n * ```\n */\nexport function useAuth() {\n const auth = useContext(setupAuthContext);\n if (isUsable(auth.user) === false) {\n console.log({\n auth\n });\n throw new Error(\"User must not be null, use useSetupAuth() to use a nullable user.\");\n } else {\n return auth as any;\n }\n}\n\n/**\n * Hook for handling both authenticated and unauthenticated states.\n * Does not throw if user is not authenticated.\n *\n * @returns Auth context with possibly null user, hasAccess, and hasEntityAccess helpers\n *\n * @example\n * ```tsx\n * function FlexibleComponent() {\n * const { user, hasAccess, hasEntityAccess, isLoading } = useSetupAuth();\n *\n * if (isLoading) {\n * return <Spinner />;\n * }\n *\n * if (!user) {\n * return <LoginPrompt />;\n * }\n *\n * // Check global access\n * const isAdmin = hasAccess('admin');\n *\n * // Check entity-level access\n * const canEditProject = hasEntityAccess('Project', 123, 'edit');\n *\n * return <Dashboard />;\n * }\n * ```\n */\nexport function useSetupAuth(): SetupAuthContext & {\n hasAccess: (access: string) => boolean;\n hasEntityAccess: (entityType: EntityType, entityId: number, action: EntityAction) => boolean;\n effectivePermissions: EffectivePermission[];\n} {\n const auth = useContext(setupAuthContext);\n const entityPermissions = useContext(permissionContext);\n\n // Use the context's hasAccess which now includes effective permissions checking\n const hasAccess = useCallback((key: string) => {\n // Delegate to context hasAccess if available (includes effective permissions)\n if (auth.hasAccess) {\n return auth.hasAccess(key);\n }\n\n // Fallback for backward compatibility\n // Archived/suspended users have no access\n if (auth.isArchived || auth.isSuspended) {\n return false;\n }\n const accessGiven = auth.access;\n if (isUsable(accessGiven) === false) return false;\n // Super-admin key bypasses all permission checks\n if (accessGiven.includes(\"*:*:*\")) return true;\n if (accessGiven.includes(key)) return true;\n if (isUsable(key) === false) return true;\n return false;\n }, [auth.hasAccess, auth.access, auth.isArchived, auth.isSuspended]);\n\n /**\n * Check if the current user has access to a specific entity.\n * Super-admin key (*:*:*) bypasses entity permissions entirely.\n * Otherwise, delegates to the PermissionContext for granular permission checks.\n *\n * @param entityType - 'Project' | 'Client' | 'ProjectDatabase'\n * @param entityId - The ID of the entity to check\n * @param action - 'view' | 'adminView' | 'edit' | 'create' | 'delete' | 'share'\n * @returns boolean - true if user has permission for the action on the entity\n */\n const hasEntityAccess = useCallback((entityType: EntityType, entityId: number, action: EntityAction): boolean => {\n // Archived/suspended users have no entity access\n if (auth.isArchived || auth.isSuspended) {\n return false;\n }\n\n // Validate entityId is a valid positive integer\n if (!entityId || entityId <= 0 || !Number.isInteger(entityId)) {\n return false;\n }\n\n // Super-admin key bypasses all entity permission checks\n const accessGiven_0 = auth.access;\n if (isUsable(accessGiven_0) && accessGiven_0.includes(\"*:*:*\")) {\n return true;\n }\n\n // If PermissionContext is not available, deny access\n if (!entityPermissions || typeof entityPermissions.checkPermission !== \"function\") {\n return false;\n }\n\n // Delegate to PermissionContext\n return entityPermissions.checkPermission(entityType, entityId, action);\n }, [auth.access, auth.isArchived, auth.isSuspended, entityPermissions]);\n return useMemo(() => ({\n hasAccess,\n hasEntityAccess,\n ...auth,\n user: auth.user,\n effectivePermissions: auth.effectivePermissions || []\n }), [hasAccess, hasEntityAccess, auth]);\n}","import { c as _c } from \"react/compiler-runtime\";\nimport { useContext, useEffect, useMemo } from \"react\";\nimport { permissionContext } from \"../context/PermissionContext\";\nimport { EntityType, EntityAction, EntityPermissionCheck } from \"../types/EntityPermissions\";\n\n// Re-export types for convenience\nexport type { EntityType, EntityAction, EntityPermissionCheck };\n\n/**\n * Hook to get the full PermissionContext\n * @throws Error if used outside of PermissionProvider\n */\nfunction usePermissionContext() {\n const context = useContext(permissionContext);\n if (!context || Object.keys(context).length === 0) {\n throw new Error(\"usePermission hooks must be used within a PermissionProvider\");\n }\n return context;\n}\n\n/**\n * Hook to get full permission info for a single entity\n * @param entityType - 'Project' | 'Client' | 'ProjectDatabase'\n * @param entityId - The ID of the entity (can be undefined for loading states)\n * @returns EntityPermissionCheck with canView, canEdit, etc. and isLoading\n *\n * @example\n * ```tsx\n * function ProjectHeader({ projectId }: { projectId: number }) {\n * const permission = usePermission('Project', projectId);\n *\n * if (permission.isLoading) {\n * return <Spinner />;\n * }\n *\n * return (\n * <div>\n * {permission.canEdit && <EditButton />}\n * {permission.canDelete && <DeleteButton />}\n * </div>\n * );\n * }\n * ```\n */\nexport function usePermission(entityType, entityId) {\n const $ = _c(5);\n const {\n getPermission\n } = usePermissionContext();\n let t0;\n bb0: {\n if (entityId === undefined) {\n let t1;\n if ($[0] === Symbol.for(\"react.memo_cache_sentinel\")) {\n t1 = {\n canView: false,\n canAdminView: false,\n canEdit: false,\n canCreate: false,\n canDelete: false,\n canShare: false,\n permissionLevel: null,\n isLoading: true\n };\n $[0] = t1;\n } else {\n t1 = $[0];\n }\n t0 = t1;\n break bb0;\n }\n let t1;\n if ($[1] !== entityId || $[2] !== entityType || $[3] !== getPermission) {\n t1 = getPermission(entityType, entityId);\n $[1] = entityId;\n $[2] = entityType;\n $[3] = getPermission;\n $[4] = t1;\n } else {\n t1 = $[4];\n }\n t0 = t1;\n }\n return t0;\n}\n\n/**\n * Hook to check a single action permission\n * @param entityType - Entity type\n * @param entityId - Entity ID\n * @param action - 'view' | 'adminView' | 'edit' | 'create' | 'delete' | 'share'\n * @returns boolean - true if user has permission for action\n *\n * @example\n * ```tsx\n * function ProjectActions({ projectId }: { projectId: number }) {\n * const canEdit = usePermissionCheck('Project', projectId, 'edit');\n * const canDelete = usePermissionCheck('Project', projectId, 'delete');\n *\n * return (\n * <div>\n * <Button disabled={!canEdit}>Edit</Button>\n * <Button disabled={!canDelete}>Delete</Button>\n * </div>\n * );\n * }\n * ```\n */\nexport function usePermissionCheck(entityType, entityId, action) {\n const $ = _c(5);\n const {\n checkPermission\n } = usePermissionContext();\n let t0;\n bb0: {\n if (entityId === undefined) {\n t0 = false;\n break bb0;\n }\n let t1;\n if ($[0] !== action || $[1] !== checkPermission || $[2] !== entityId || $[3] !== entityType) {\n t1 = checkPermission(entityType, entityId, action);\n $[0] = action;\n $[1] = checkPermission;\n $[2] = entityId;\n $[3] = entityType;\n $[4] = t1;\n } else {\n t1 = $[4];\n }\n t0 = t1;\n }\n return t0;\n}\n\n/**\n * Result type for usePermissions batch hook\n */\nexport interface EntityWithPermission {\n type: EntityType;\n id: number;\n permission: EntityPermissionCheck;\n}\n\n/**\n * Hook for batch permission lookup - useful for lists\n * @param entities - Array of { type, id } objects\n * @returns Array of entities with their permissions attached\n *\n * This hook:\n * - Calls prefetchPermissions on mount and when entities change\n * - Returns memoized results\n * - Handles empty arrays gracefully\n *\n * @example\n * ```tsx\n * function ProjectList({ projects }: { projects: Array<{ id: number; name: string }> }) {\n * const entities = projects.map(p => ({ type: 'Project' as const, id: p.id }));\n * const entitiesWithPermissions = usePermissionsBatch(entities);\n *\n * return (\n * <ul>\n * {entitiesWithPermissions.map(({ id, permission }) => {\n * const project = projects.find(p => p.id === id);\n * return (\n * <li key={id}>\n * {project?.name}\n * {permission.canEdit && <EditIcon />}\n * </li>\n * );\n * })}\n * </ul>\n * );\n * }\n * ```\n */\nexport function usePermissionsBatch(entities: Array<{\n type: EntityType;\n id: number;\n}>): EntityWithPermission[] {\n const {\n getPermission,\n prefetchPermissions\n } = usePermissionContext();\n\n // Memoize the entities array to prevent unnecessary re-renders\n const entitiesKey = useMemo(() => entities.map(e => `${e.type}:${e.id}`).sort().join(\",\"), [entities]);\n\n // Prefetch permissions when entities change\n useEffect(() => {\n if (entities.length === 0) {\n return;\n }\n\n // Convert to the format expected by prefetchPermissions\n const entitiesToPrefetch = entities.map(e_0 => ({\n entityType: e_0.type,\n entityId: e_0.id\n }));\n prefetchPermissions(entitiesToPrefetch);\n }, [entities, entitiesKey, prefetchPermissions]);\n\n // Return memoized results\n return useMemo(() => {\n if (entities.length === 0) {\n return [];\n }\n return entities.map(entity => ({\n type: entity.type,\n id: entity.id,\n permission: getPermission(entity.type, entity.id)\n }));\n }, [getPermission, entitiesKey]);\n}\n\n/**\n * Simple boolean hook to check if user can view an entity\n * @param entityType - Entity type\n * @param entityId - Entity ID (can be undefined for loading states)\n * @returns boolean - true if user can view the entity\n *\n * @example\n * ```tsx\n * function ProjectPage({ projectId }: { projectId: number }) {\n * const canView = useCanView('Project', projectId);\n *\n * if (!canView) {\n * return <AccessDenied />;\n * }\n *\n * return <ProjectContent projectId={projectId} />;\n * }\n * ```\n */\nexport function useCanView(entityType, entityId) {\n return usePermissionCheck(entityType, entityId, \"view\");\n}\n\n/**\n * Simple boolean hook to check if user can edit an entity\n * @param entityType - Entity type\n * @param entityId - Entity ID (can be undefined for loading states)\n * @returns boolean - true if user can edit the entity\n *\n * @example\n * ```tsx\n * function ProjectEditor({ projectId }: { projectId: number }) {\n * const canEdit = useCanEdit('Project', projectId);\n *\n * return (\n * <form>\n * <input disabled={!canEdit} />\n * <button disabled={!canEdit}>Save</button>\n * </form>\n * );\n * }\n * ```\n */\nexport function useCanEdit(entityType, entityId) {\n return usePermissionCheck(entityType, entityId, \"edit\");\n}\n\n/**\n * Simple boolean hook to check if user can delete an entity\n * @param entityType - Entity type\n * @param entityId - Entity ID (can be undefined for loading states)\n * @returns boolean - true if user can delete the entity\n *\n * @example\n * ```tsx\n * function ProjectActions({ projectId }: { projectId: number }) {\n * const canDelete = useCanDelete('Project', projectId);\n *\n * return (\n * <Button\n * variant=\"destructive\"\n * disabled={!canDelete}\n * onClick={handleDelete}\n * >\n * Delete Project\n * </Button>\n * );\n * }\n * ```\n */\nexport function useCanDelete(entityType, entityId) {\n return usePermissionCheck(entityType, entityId, \"delete\");\n}\n\n/**\n * Simple boolean hook to check if user can share an entity\n * @param entityType - Entity type\n * @param entityId - Entity ID (can be undefined for loading states)\n * @returns boolean - true if user can share the entity\n *\n * @example\n * ```tsx\n * function ShareButton({ projectId }: { projectId: number }) {\n * const canShare = useCanShare('Project', projectId);\n *\n * if (!canShare) {\n * return null;\n * }\n *\n * return <Button onClick={openShareModal}>Share</Button>;\n * }\n * ```\n */\nexport function useCanShare(entityType, entityId) {\n return usePermissionCheck(entityType, entityId, \"share\");\n}\n\n/**\n * Simple boolean hook to check if user can create entities of a type\n * Note: For create permission, the entityId should be the parent entity ID\n * (e.g., for creating a ProjectDatabase, pass the Project ID)\n *\n * @param entityType - Entity type\n * @param entityId - Parent entity ID (can be undefined for loading states)\n * @returns boolean - true if user can create entities\n *\n * @example\n * ```tsx\n * function AddDatabaseButton({ projectId }: { projectId: number }) {\n * const canCreate = useCanCreate('ProjectDatabase', projectId);\n *\n * return (\n * <Button disabled={!canCreate} onClick={handleCreate}>\n * Add Database\n * </Button>\n * );\n * }\n * ```\n */\nexport function useCanCreate(entityType, entityId) {\n return usePermissionCheck(entityType, entityId, \"create\");\n}\n\n/**\n * Hook to invalidate permission cache for a specific entity\n * Useful after permission changes (e.g., after sharing an entity)\n *\n * @returns Function to invalidate permission for an entity\n *\n * @example\n * ```tsx\n * function ShareModal({ projectId }: { projectId: number }) {\n * const invalidatePermission = useInvalidatePermission();\n *\n * const handleShare = async (userId: string) => {\n * await shareProject(projectId, userId);\n * invalidatePermission('Project', projectId);\n * };\n *\n * return <ShareForm onShare={handleShare} />;\n * }\n * ```\n */\nexport function useInvalidatePermission() {\n const {\n invalidatePermission\n } = usePermissionContext();\n return invalidatePermission;\n}\n\n/**\n * Hook to get the loading state of the permission context\n * @returns boolean - true if permissions are being fetched\n *\n * @example\n * ```tsx\n * function PermissionAwareComponent() {\n * const isLoadingPermissions = usePermissionLoading();\n *\n * if (isLoadingPermissions) {\n * return <LoadingSpinner />;\n * }\n *\n * return <Content />;\n * }\n * ```\n */\nexport function usePermissionLoading() {\n const {\n isLoading\n } = usePermissionContext();\n return isLoading;\n}"],"mappings":"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","names":["useContext","useMemo","useContext","t1","useMemo"]}
@@ -966,10 +966,16 @@ var QueryExecutor = class {
966
966
  }
967
967
  const query = this.builder.buildInsertQuery(table, data);
968
968
  if (__DEV__) {
969
+ const columns = Object.keys(data).filter((k) => data[k] !== void 0);
970
+ const idIndex = columns.indexOf(idColumn);
969
971
  console.log(`[QueryExecutor] insert executing SQL:`, {
970
972
  table,
971
973
  sql: query.sql,
972
- paramCount: query.params.length
974
+ paramCount: query.params.length,
975
+ idColumn,
976
+ idValue: data[idColumn],
977
+ idParamIndex: idIndex,
978
+ idParamValue: idIndex >= 0 ? query.params[idIndex] : "NOT_FOUND"
973
979
  });
974
980
  }
975
981
  await this.db.execute(query.sql, query.params);
@@ -1024,8 +1030,16 @@ var QueryExecutor = class {
1024
1030
  /**
1025
1031
  * Upsert a record (insert or update).
1026
1032
  *
1033
+ * PowerSync tables are SQLite VIEWs with INSTEAD OF INSERT triggers.
1034
+ * Using INSERT OR REPLACE causes the native extension to bypass provided UUIDs
1035
+ * and generate timestamp-based IDs (e.g., "1772167324515-7xufitksy").
1036
+ *
1037
+ * Logic:
1038
+ * - No ID provided → generate UUID → INSERT directly
1039
+ * - ID provided → try UPDATE first, if 0 rows affected → INSERT
1040
+ *
1027
1041
  * @param table - The table to upsert into
1028
- * @param data - The record data (must include ID for update)
1042
+ * @param data - The record data (ID optional for new records)
1029
1043
  * @returns The upserted record
1030
1044
  */
1031
1045
  async upsert(table, data) {
@@ -1040,38 +1054,48 @@ var QueryExecutor = class {
1040
1054
  const idColumn = this.resolver.getPrimaryKey(table);
1041
1055
  let id = data[idColumn];
1042
1056
  if (!id) {
1043
- const [{
1044
- id: generatedId
1045
- }] = await this.db.getAll("SELECT uuid() as id");
1046
- id = generatedId;
1057
+ const [result] = await this.db.getAll("SELECT uuid() as id");
1058
+ if (!result?.id) {
1059
+ throw new Error(`Failed to generate UUID for table "${table}"`);
1060
+ }
1061
+ id = result.id;
1047
1062
  data = {
1048
1063
  ...data,
1049
1064
  [idColumn]: id
1050
1065
  };
1051
1066
  if (__DEV__) {
1052
- console.log(`[QueryExecutor] upsert generated UUID:`, {
1067
+ console.log(`[QueryExecutor] upsert: no ID, inserting with generated UUID:`, {
1053
1068
  table,
1054
1069
  id
1055
1070
  });
1056
1071
  }
1072
+ return this.insert(table, data);
1057
1073
  }
1058
- const query = this.builder.buildUpsertQuery(table, data, idColumn);
1059
- if (__DEV__) {
1060
- console.log(`[QueryExecutor] upsert executing SQL:`, {
1061
- table,
1062
- sql: query.sql,
1063
- paramCount: query.params.length
1064
- });
1074
+ const existsQuery = this.builder.buildByIdQuery(table, id, "*", idColumn);
1075
+ const existingRows = await this.db.getAll(existsQuery.sql, existsQuery.params);
1076
+ const existing = existingRows.length > 0 ? existingRows[0] : null;
1077
+ if (existing) {
1078
+ if (__DEV__) {
1079
+ console.log(`[QueryExecutor] upsert: record exists, performing update:`, {
1080
+ table,
1081
+ id
1082
+ });
1083
+ }
1084
+ return this.update(table, id, data);
1085
+ }
1086
+ if (!data[idColumn]) {
1087
+ data = {
1088
+ ...data,
1089
+ [idColumn]: id
1090
+ };
1065
1091
  }
1066
- await this.db.execute(query.sql, query.params);
1067
1092
  if (__DEV__) {
1068
- console.log(`[QueryExecutor] upsert completed:`, {
1093
+ console.log(`[QueryExecutor] upsert: record does not exist, inserting:`, {
1069
1094
  table,
1070
- operation: "upsert",
1071
1095
  id
1072
1096
  });
1073
1097
  }
1074
- return data;
1098
+ return this.insert(table, data);
1075
1099
  }
1076
1100
  /**
1077
1101
  * Delete a record.
@@ -1228,4 +1252,4 @@ export {
1228
1252
  QueryExecutor,
1229
1253
  createQueryExecutor
1230
1254
  };
1231
- //# sourceMappingURL=chunk-CNIGRBRE.js.map
1255
+ //# sourceMappingURL=chunk-QJZUIAHA.js.map