react-native-ensys-camera-x 1.0.7

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 (506) hide show
  1. package/CustomCamera.podspec +20 -0
  2. package/LICENSE +20 -0
  3. package/README.md +833 -0
  4. package/android/build.gradle +135 -0
  5. package/android/consumer-rules.pro +47 -0
  6. package/android/src/main/AndroidManifest.xml +72 -0
  7. package/android/src/main/java/android/print/PdfPrint.java +51 -0
  8. package/android/src/main/java/com/customcamera/AnimatedImageViewManager.kt +199 -0
  9. package/android/src/main/java/com/customcamera/AudioPlayerView.kt +322 -0
  10. package/android/src/main/java/com/customcamera/AudioRecorder.kt +506 -0
  11. package/android/src/main/java/com/customcamera/BarcodeScannerActivity.kt +361 -0
  12. package/android/src/main/java/com/customcamera/BlurBackgroundView.kt +199 -0
  13. package/android/src/main/java/com/customcamera/CacheCleanupManager.kt +386 -0
  14. package/android/src/main/java/com/customcamera/CameraAspectRatioMode.kt +77 -0
  15. package/android/src/main/java/com/customcamera/CameraAsset.kt +211 -0
  16. package/android/src/main/java/com/customcamera/CameraTheme.kt +479 -0
  17. package/android/src/main/java/com/customcamera/CompressionCacheStore.kt +504 -0
  18. package/android/src/main/java/com/customcamera/CompressionFileNameUtils.kt +7 -0
  19. package/android/src/main/java/com/customcamera/CompressionProfile.kt +195 -0
  20. package/android/src/main/java/com/customcamera/CustomCameraActivity.kt +7291 -0
  21. package/android/src/main/java/com/customcamera/CustomCameraFileProvider.kt +9 -0
  22. package/android/src/main/java/com/customcamera/CustomCameraModule.kt +2479 -0
  23. package/android/src/main/java/com/customcamera/CustomCameraPackage.kt +53 -0
  24. package/android/src/main/java/com/customcamera/DisplayUtils.kt +9 -0
  25. package/android/src/main/java/com/customcamera/DocumentPreviewView.kt +846 -0
  26. package/android/src/main/java/com/customcamera/DrawingView.kt +214 -0
  27. package/android/src/main/java/com/customcamera/EmojiPickerData.kt +228 -0
  28. package/android/src/main/java/com/customcamera/FilterStripAdapter.kt +158 -0
  29. package/android/src/main/java/com/customcamera/GifSupport.kt +215 -0
  30. package/android/src/main/java/com/customcamera/GlobalAudioPlayer.kt +320 -0
  31. package/android/src/main/java/com/customcamera/ImageExporter.kt +1394 -0
  32. package/android/src/main/java/com/customcamera/ImageFormatSupport.kt +163 -0
  33. package/android/src/main/java/com/customcamera/Localization.kt +206 -0
  34. package/android/src/main/java/com/customcamera/MediaAdapters.kt +758 -0
  35. package/android/src/main/java/com/customcamera/MediaCacheManager.kt +782 -0
  36. package/android/src/main/java/com/customcamera/MediaExportFormats.kt +201 -0
  37. package/android/src/main/java/com/customcamera/MediaFileIo.kt +310 -0
  38. package/android/src/main/java/com/customcamera/MediaMetadataStore.kt +494 -0
  39. package/android/src/main/java/com/customcamera/MediaPreviewEditor.kt +14865 -0
  40. package/android/src/main/java/com/customcamera/MediaPublisher.kt +423 -0
  41. package/android/src/main/java/com/customcamera/MediaStorageWorkflow.kt +722 -0
  42. package/android/src/main/java/com/customcamera/MediaStoreRepository.kt +378 -0
  43. package/android/src/main/java/com/customcamera/MediaThumbnailView.kt +286 -0
  44. package/android/src/main/java/com/customcamera/MediaUtils.kt +37 -0
  45. package/android/src/main/java/com/customcamera/NativeVideoViewManager.kt +845 -0
  46. package/android/src/main/java/com/customcamera/OfficeDocumentConverter.kt +2791 -0
  47. package/android/src/main/java/com/customcamera/PendingCaptureCrops.kt +88 -0
  48. package/android/src/main/java/com/customcamera/PowerPointPreview.kt +4077 -0
  49. package/android/src/main/java/com/customcamera/RecentPickerStore.kt +74 -0
  50. package/android/src/main/java/com/customcamera/SecureFileEraser.kt +411 -0
  51. package/android/src/main/java/com/customcamera/SecureKeyModule.kt +88 -0
  52. package/android/src/main/java/com/customcamera/SecureMediaDeleter.kt +493 -0
  53. package/android/src/main/java/com/customcamera/StickerPickerData.kt +107 -0
  54. package/android/src/main/java/com/customcamera/SvgDrawable.kt +175 -0
  55. package/android/src/main/java/com/customcamera/SvgIconViewManager.kt +77 -0
  56. package/android/src/main/java/com/customcamera/TextEntryController.kt +553 -0
  57. package/android/src/main/java/com/customcamera/ThumbnailLoader.kt +455 -0
  58. package/android/src/main/java/com/customcamera/UploadService.kt +909 -0
  59. package/android/src/main/java/com/customcamera/VideoEditUtils.kt +210 -0
  60. package/android/src/main/java/com/customcamera/VideoRotationTranscoder.kt +1992 -0
  61. package/android/src/main/java/com/customcamera/gif/AnimatedGifEncoder.kt +473 -0
  62. package/android/src/main/java/com/customcamera/gif/GifDecoder.kt +690 -0
  63. package/android/src/main/java/com/customcamera/gif/GifFramesDrawable.kt +160 -0
  64. package/android/src/main/java/com/customcamera/gif/GifHttp.kt +112 -0
  65. package/android/src/main/java/com/customcamera/gif/GifImageLoader.kt +186 -0
  66. package/android/src/main/java/com/customcamera/gif/GifModels.kt +74 -0
  67. package/android/src/main/java/com/customcamera/gif/GifProvider.kt +49 -0
  68. package/android/src/main/java/com/customcamera/gif/GifProviders.kt +27 -0
  69. package/android/src/main/java/com/customcamera/gif/GifRepository.kt +124 -0
  70. package/android/src/main/java/com/customcamera/gif/GifSafety.kt +33 -0
  71. package/android/src/main/java/com/customcamera/gif/GiphyGifProvider.kt +146 -0
  72. package/android/src/main/java/com/customcamera/gif/LZWEncoder.kt +258 -0
  73. package/android/src/main/java/com/customcamera/gif/NeuQuant.kt +435 -0
  74. package/android/src/main/java/com/customcamera/gif/TenorGifProvider.kt +147 -0
  75. package/android/src/main/res/drawable/bg_brush_selected.xml +5 -0
  76. package/android/src/main/res/drawable/bg_color_swatch.xml +5 -0
  77. package/android/src/main/res/drawable/bg_editor_toolbar.xml +6 -0
  78. package/android/src/main/res/drawable/bg_icon_circle.xml +5 -0
  79. package/android/src/main/res/drawable/bg_icon_circle_light.xml +5 -0
  80. package/android/src/main/res/drawable/bg_mode_tab_active.xml +6 -0
  81. package/android/src/main/res/drawable/bg_pill.xml +6 -0
  82. package/android/src/main/res/drawable/bg_recording_dot.xml +6 -0
  83. package/android/src/main/res/drawable/bg_selection_badge.xml +8 -0
  84. package/android/src/main/res/drawable/bg_send_button.xml +5 -0
  85. package/android/src/main/res/drawable/bg_shutter_inner.xml +5 -0
  86. package/android/src/main/res/drawable/bg_shutter_recording.xml +6 -0
  87. package/android/src/main/res/drawable/bg_shutter_ring.xml +8 -0
  88. package/android/src/main/res/drawable/bg_shutter_video_idle.xml +5 -0
  89. package/android/src/main/res/drawable/bg_thumbnail.xml +9 -0
  90. package/android/src/main/res/drawable/ic_aspect_ratio.xml +17 -0
  91. package/android/src/main/res/drawable/ic_audio.xml +10 -0
  92. package/android/src/main/res/drawable/ic_back.xml +10 -0
  93. package/android/src/main/res/drawable/ic_brush_medium.xml +12 -0
  94. package/android/src/main/res/drawable/ic_brush_thick.xml +12 -0
  95. package/android/src/main/res/drawable/ic_brush_thin.xml +12 -0
  96. package/android/src/main/res/drawable/ic_check.xml +17 -0
  97. package/android/src/main/res/drawable/ic_chevron_down.xml +10 -0
  98. package/android/src/main/res/drawable/ic_chevron_up.xml +13 -0
  99. package/android/src/main/res/drawable/ic_clear_drawing.xml +10 -0
  100. package/android/src/main/res/drawable/ic_close.xml +10 -0
  101. package/android/src/main/res/drawable/ic_cover.xml +9 -0
  102. package/android/src/main/res/drawable/ic_crop.xml +10 -0
  103. package/android/src/main/res/drawable/ic_delete.xml +9 -0
  104. package/android/src/main/res/drawable/ic_document.xml +10 -0
  105. package/android/src/main/res/drawable/ic_done.xml +10 -0
  106. package/android/src/main/res/drawable/ic_download.xml +10 -0
  107. package/android/src/main/res/drawable/ic_emoji.xml +10 -0
  108. package/android/src/main/res/drawable/ic_filter.xml +10 -0
  109. package/android/src/main/res/drawable/ic_flash_auto.xml +7 -0
  110. package/android/src/main/res/drawable/ic_flash_off.xml +23 -0
  111. package/android/src/main/res/drawable/ic_flash_on.xml +16 -0
  112. package/android/src/main/res/drawable/ic_flip.xml +15 -0
  113. package/android/src/main/res/drawable/ic_gallery.xml +10 -0
  114. package/android/src/main/res/drawable/ic_gif.xml +24 -0
  115. package/android/src/main/res/drawable/ic_lock.xml +19 -0
  116. package/android/src/main/res/drawable/ic_lock_open.xml +22 -0
  117. package/android/src/main/res/drawable/ic_marker.xml +10 -0
  118. package/android/src/main/res/drawable/ic_more_vert.xml +18 -0
  119. package/android/src/main/res/drawable/ic_overlay_close.xml +19 -0
  120. package/android/src/main/res/drawable/ic_overlay_resize.xml +18 -0
  121. package/android/src/main/res/drawable/ic_pause.xml +10 -0
  122. package/android/src/main/res/drawable/ic_photo_mode.xml +10 -0
  123. package/android/src/main/res/drawable/ic_play.xml +10 -0
  124. package/android/src/main/res/drawable/ic_redo.xml +10 -0
  125. package/android/src/main/res/drawable/ic_rotate.xml +9 -0
  126. package/android/src/main/res/drawable/ic_send.xml +10 -0
  127. package/android/src/main/res/drawable/ic_share.xml +10 -0
  128. package/android/src/main/res/drawable/ic_stat_upload.xml +10 -0
  129. package/android/src/main/res/drawable/ic_sticker.xml +24 -0
  130. package/android/src/main/res/drawable/ic_text.xml +10 -0
  131. package/android/src/main/res/drawable/ic_text_align_center.xml +11 -0
  132. package/android/src/main/res/drawable/ic_text_align_left.xml +11 -0
  133. package/android/src/main/res/drawable/ic_text_align_right.xml +11 -0
  134. package/android/src/main/res/drawable/ic_text_bg.xml +11 -0
  135. package/android/src/main/res/drawable/ic_trim.xml +23 -0
  136. package/android/src/main/res/drawable/ic_undo.xml +10 -0
  137. package/android/src/main/res/drawable/ic_video_mode.xml +10 -0
  138. package/android/src/main/res/drawable/ic_video_note.xml +13 -0
  139. package/android/src/main/res/drawable/ic_volume_off.xml +9 -0
  140. package/android/src/main/res/drawable/ic_volume_on.xml +9 -0
  141. package/android/src/main/res/drawable/sticker_heart.xml +9 -0
  142. package/android/src/main/res/drawable/sticker_smile.xml +9 -0
  143. package/android/src/main/res/drawable/sticker_star.xml +9 -0
  144. package/android/src/main/res/drawable/sticker_thumbsup.xml +9 -0
  145. package/android/src/main/res/values/colors.xml +34 -0
  146. package/android/src/main/res/values/ids.xml +15 -0
  147. package/android/src/main/res/values/strings.xml +15 -0
  148. package/android/src/main/res/values/styles.xml +20 -0
  149. package/android/src/main/res/xml/file_paths.xml +34 -0
  150. package/ios/CustomCamera.h +5 -0
  151. package/ios/CustomCamera.mm +214 -0
  152. package/lib/module/AudioPlayerContext.js +233 -0
  153. package/lib/module/AudioPlayerContext.js.map +1 -0
  154. package/lib/module/CameraPreview.js +304 -0
  155. package/lib/module/CameraPreview.js.map +1 -0
  156. package/lib/module/NativeAnimatedImageView.js +41 -0
  157. package/lib/module/NativeAnimatedImageView.js.map +1 -0
  158. package/lib/module/NativeAudioPlayerView.js +33 -0
  159. package/lib/module/NativeAudioPlayerView.js.map +1 -0
  160. package/lib/module/NativeBlurView.js +35 -0
  161. package/lib/module/NativeBlurView.js.map +1 -0
  162. package/lib/module/NativeCustomCamera.js +128 -0
  163. package/lib/module/NativeCustomCamera.js.map +1 -0
  164. package/lib/module/NativeCustomCamera.web.js +143 -0
  165. package/lib/module/NativeCustomCamera.web.js.map +1 -0
  166. package/lib/module/NativeCustomVideoView.js +5 -0
  167. package/lib/module/NativeCustomVideoView.js.map +1 -0
  168. package/lib/module/NativeDocumentPreviewView.js +156 -0
  169. package/lib/module/NativeDocumentPreviewView.js.map +1 -0
  170. package/lib/module/NativeMediaThumbnailView.js +110 -0
  171. package/lib/module/NativeMediaThumbnailView.js.map +1 -0
  172. package/lib/module/NativeSvgIcon.js +32 -0
  173. package/lib/module/NativeSvgIcon.js.map +1 -0
  174. package/lib/module/ResponsivePreviewContainer.js +171 -0
  175. package/lib/module/ResponsivePreviewContainer.js.map +1 -0
  176. package/lib/module/accessibility.js +61 -0
  177. package/lib/module/accessibility.js.map +1 -0
  178. package/lib/module/config.js +352 -0
  179. package/lib/module/config.js.map +1 -0
  180. package/lib/module/cpuOptimization.js +296 -0
  181. package/lib/module/cpuOptimization.js.map +1 -0
  182. package/lib/module/db/DatabaseManager.js +191 -0
  183. package/lib/module/db/DatabaseManager.js.map +1 -0
  184. package/lib/module/db/MediaMapper.js +284 -0
  185. package/lib/module/db/MediaMapper.js.map +1 -0
  186. package/lib/module/db/MediaRepository.js +242 -0
  187. package/lib/module/db/MediaRepository.js.map +1 -0
  188. package/lib/module/db/index.js +41 -0
  189. package/lib/module/db/index.js.map +1 -0
  190. package/lib/module/db/migrations.js +180 -0
  191. package/lib/module/db/migrations.js.map +1 -0
  192. package/lib/module/db/react-native-sqlcipher.d.js +2 -0
  193. package/lib/module/db/react-native-sqlcipher.d.js.map +1 -0
  194. package/lib/module/db/secureKey.js +87 -0
  195. package/lib/module/db/secureKey.js.map +1 -0
  196. package/lib/module/db/types.js +57 -0
  197. package/lib/module/db/types.js.map +1 -0
  198. package/lib/module/db/useMediaDatabase.js +123 -0
  199. package/lib/module/db/useMediaDatabase.js.map +1 -0
  200. package/lib/module/defaultIcons.js +2259 -0
  201. package/lib/module/defaultIcons.js.map +1 -0
  202. package/lib/module/deviceCapabilities.js +408 -0
  203. package/lib/module/deviceCapabilities.js.map +1 -0
  204. package/lib/module/errors.js +267 -0
  205. package/lib/module/errors.js.map +1 -0
  206. package/lib/module/iconConfig.js +796 -0
  207. package/lib/module/iconConfig.js.map +1 -0
  208. package/lib/module/icons.js +514 -0
  209. package/lib/module/icons.js.map +1 -0
  210. package/lib/module/index.js +251 -0
  211. package/lib/module/index.js.map +1 -0
  212. package/lib/module/jest-globals.d.js +2 -0
  213. package/lib/module/jest-globals.d.js.map +1 -0
  214. package/lib/module/library/MediaLibrary.js +107 -0
  215. package/lib/module/library/MediaLibrary.js.map +1 -0
  216. package/lib/module/library/MediaLibraryScreen.js +2597 -0
  217. package/lib/module/library/MediaLibraryScreen.js.map +1 -0
  218. package/lib/module/library/components/AudioPreview.js +74 -0
  219. package/lib/module/library/components/AudioPreview.js.map +1 -0
  220. package/lib/module/library/components/DocumentPreview.js +331 -0
  221. package/lib/module/library/components/DocumentPreview.js.map +1 -0
  222. package/lib/module/library/components/ExpandableFab.js +343 -0
  223. package/lib/module/library/components/ExpandableFab.js.map +1 -0
  224. package/lib/module/library/components/FileTiles.js +251 -0
  225. package/lib/module/library/components/FileTiles.js.map +1 -0
  226. package/lib/module/library/components/ImagePreview.js +70 -0
  227. package/lib/module/library/components/ImagePreview.js.map +1 -0
  228. package/lib/module/library/components/MediaMetadataHeader.js +175 -0
  229. package/lib/module/library/components/MediaMetadataHeader.js.map +1 -0
  230. package/lib/module/library/components/RecordAudioScreen.js +816 -0
  231. package/lib/module/library/components/RecordAudioScreen.js.map +1 -0
  232. package/lib/module/library/components/VideoPreview.js +453 -0
  233. package/lib/module/library/components/VideoPreview.js.map +1 -0
  234. package/lib/module/library/components/ViewerCounter.js +55 -0
  235. package/lib/module/library/components/ViewerCounter.js.map +1 -0
  236. package/lib/module/library/compressionEstimate.js +507 -0
  237. package/lib/module/library/compressionEstimate.js.map +1 -0
  238. package/lib/module/library/fileMetadata.js +196 -0
  239. package/lib/module/library/fileMetadata.js.map +1 -0
  240. package/lib/module/library/index.js +42 -0
  241. package/lib/module/library/index.js.map +1 -0
  242. package/lib/module/library/libraryIconRegistry.js +69 -0
  243. package/lib/module/library/libraryIconRegistry.js.map +1 -0
  244. package/lib/module/library/libraryIcons.js +858 -0
  245. package/lib/module/library/libraryIcons.js.map +1 -0
  246. package/lib/module/library/localizedFormat.js +181 -0
  247. package/lib/module/library/localizedFormat.js.map +1 -0
  248. package/lib/module/library/palette.js +225 -0
  249. package/lib/module/library/palette.js.map +1 -0
  250. package/lib/module/library/responsive.js +53 -0
  251. package/lib/module/library/responsive.js.map +1 -0
  252. package/lib/module/locales.js +416 -0
  253. package/lib/module/locales.js.map +1 -0
  254. package/lib/module/localization.js +1064 -0
  255. package/lib/module/localization.js.map +1 -0
  256. package/lib/module/logger.js +20 -0
  257. package/lib/module/logger.js.map +1 -0
  258. package/lib/module/lowMemoryCache.js +206 -0
  259. package/lib/module/lowMemoryCache.js.map +1 -0
  260. package/lib/module/mediaHistory.js +33 -0
  261. package/lib/module/mediaHistory.js.map +1 -0
  262. package/lib/module/mediaStorageService.js +402 -0
  263. package/lib/module/mediaStorageService.js.map +1 -0
  264. package/lib/module/memory.js +79 -0
  265. package/lib/module/memory.js.map +1 -0
  266. package/lib/module/nativeActions.js +307 -0
  267. package/lib/module/nativeActions.js.map +1 -0
  268. package/lib/module/nativeComponentSupport.js +61 -0
  269. package/lib/module/nativeComponentSupport.js.map +1 -0
  270. package/lib/module/networkPerformance.js +24 -0
  271. package/lib/module/networkPerformance.js.map +1 -0
  272. package/lib/module/package.json +1 -0
  273. package/lib/module/performance.js +104 -0
  274. package/lib/module/performance.js.map +1 -0
  275. package/lib/module/performanceMonitor.js +155 -0
  276. package/lib/module/performanceMonitor.js.map +1 -0
  277. package/lib/module/permissions.js +370 -0
  278. package/lib/module/permissions.js.map +1 -0
  279. package/lib/module/rendering.js +40 -0
  280. package/lib/module/rendering.js.map +1 -0
  281. package/lib/module/security.js +18 -0
  282. package/lib/module/security.js.map +1 -0
  283. package/lib/module/state.js +266 -0
  284. package/lib/module/state.js.map +1 -0
  285. package/lib/module/storage.js +400 -0
  286. package/lib/module/storage.js.map +1 -0
  287. package/lib/module/theme.js +390 -0
  288. package/lib/module/theme.js.map +1 -0
  289. package/lib/module/types.js +4 -0
  290. package/lib/module/types.js.map +1 -0
  291. package/lib/module/utils.js +115 -0
  292. package/lib/module/utils.js.map +1 -0
  293. package/lib/module/validation.js +288 -0
  294. package/lib/module/validation.js.map +1 -0
  295. package/lib/typescript/package.json +1 -0
  296. package/lib/typescript/src/AudioPlayerContext.d.ts +27 -0
  297. package/lib/typescript/src/AudioPlayerContext.d.ts.map +1 -0
  298. package/lib/typescript/src/CameraPreview.d.ts +13 -0
  299. package/lib/typescript/src/CameraPreview.d.ts.map +1 -0
  300. package/lib/typescript/src/NativeAnimatedImageView.d.ts +33 -0
  301. package/lib/typescript/src/NativeAnimatedImageView.d.ts.map +1 -0
  302. package/lib/typescript/src/NativeAudioPlayerView.d.ts +12 -0
  303. package/lib/typescript/src/NativeAudioPlayerView.d.ts.map +1 -0
  304. package/lib/typescript/src/NativeBlurView.d.ts +12 -0
  305. package/lib/typescript/src/NativeBlurView.d.ts.map +1 -0
  306. package/lib/typescript/src/NativeCustomCamera.d.ts +167 -0
  307. package/lib/typescript/src/NativeCustomCamera.d.ts.map +1 -0
  308. package/lib/typescript/src/NativeCustomCamera.web.d.ts +47 -0
  309. package/lib/typescript/src/NativeCustomCamera.web.d.ts.map +1 -0
  310. package/lib/typescript/src/NativeCustomVideoView.d.ts +30 -0
  311. package/lib/typescript/src/NativeCustomVideoView.d.ts.map +1 -0
  312. package/lib/typescript/src/NativeDocumentPreviewView.d.ts +48 -0
  313. package/lib/typescript/src/NativeDocumentPreviewView.d.ts.map +1 -0
  314. package/lib/typescript/src/NativeMediaThumbnailView.d.ts +54 -0
  315. package/lib/typescript/src/NativeMediaThumbnailView.d.ts.map +1 -0
  316. package/lib/typescript/src/NativeSvgIcon.d.ts +25 -0
  317. package/lib/typescript/src/NativeSvgIcon.d.ts.map +1 -0
  318. package/lib/typescript/src/ResponsivePreviewContainer.d.ts +92 -0
  319. package/lib/typescript/src/ResponsivePreviewContainer.d.ts.map +1 -0
  320. package/lib/typescript/src/accessibility.d.ts +20 -0
  321. package/lib/typescript/src/accessibility.d.ts.map +1 -0
  322. package/lib/typescript/src/config.d.ts +145 -0
  323. package/lib/typescript/src/config.d.ts.map +1 -0
  324. package/lib/typescript/src/cpuOptimization.d.ts +63 -0
  325. package/lib/typescript/src/cpuOptimization.d.ts.map +1 -0
  326. package/lib/typescript/src/db/DatabaseManager.d.ts +48 -0
  327. package/lib/typescript/src/db/DatabaseManager.d.ts.map +1 -0
  328. package/lib/typescript/src/db/MediaMapper.d.ts +77 -0
  329. package/lib/typescript/src/db/MediaMapper.d.ts.map +1 -0
  330. package/lib/typescript/src/db/MediaRepository.d.ts +66 -0
  331. package/lib/typescript/src/db/MediaRepository.d.ts.map +1 -0
  332. package/lib/typescript/src/db/index.d.ts +23 -0
  333. package/lib/typescript/src/db/index.d.ts.map +1 -0
  334. package/lib/typescript/src/db/migrations.d.ts +31 -0
  335. package/lib/typescript/src/db/migrations.d.ts.map +1 -0
  336. package/lib/typescript/src/db/secureKey.d.ts +10 -0
  337. package/lib/typescript/src/db/secureKey.d.ts.map +1 -0
  338. package/lib/typescript/src/db/types.d.ts +115 -0
  339. package/lib/typescript/src/db/types.d.ts.map +1 -0
  340. package/lib/typescript/src/db/useMediaDatabase.d.ts +41 -0
  341. package/lib/typescript/src/db/useMediaDatabase.d.ts.map +1 -0
  342. package/lib/typescript/src/defaultIcons.d.ts +139 -0
  343. package/lib/typescript/src/defaultIcons.d.ts.map +1 -0
  344. package/lib/typescript/src/deviceCapabilities.d.ts +92 -0
  345. package/lib/typescript/src/deviceCapabilities.d.ts.map +1 -0
  346. package/lib/typescript/src/errors.d.ts +95 -0
  347. package/lib/typescript/src/errors.d.ts.map +1 -0
  348. package/lib/typescript/src/iconConfig.d.ts +176 -0
  349. package/lib/typescript/src/iconConfig.d.ts.map +1 -0
  350. package/lib/typescript/src/icons.d.ts +217 -0
  351. package/lib/typescript/src/icons.d.ts.map +1 -0
  352. package/lib/typescript/src/index.d.ts +104 -0
  353. package/lib/typescript/src/index.d.ts.map +1 -0
  354. package/lib/typescript/src/library/MediaLibrary.d.ts +57 -0
  355. package/lib/typescript/src/library/MediaLibrary.d.ts.map +1 -0
  356. package/lib/typescript/src/library/MediaLibraryScreen.d.ts +51 -0
  357. package/lib/typescript/src/library/MediaLibraryScreen.d.ts.map +1 -0
  358. package/lib/typescript/src/library/components/AudioPreview.d.ts +6 -0
  359. package/lib/typescript/src/library/components/AudioPreview.d.ts.map +1 -0
  360. package/lib/typescript/src/library/components/DocumentPreview.d.ts +10 -0
  361. package/lib/typescript/src/library/components/DocumentPreview.d.ts.map +1 -0
  362. package/lib/typescript/src/library/components/ExpandableFab.d.ts +39 -0
  363. package/lib/typescript/src/library/components/ExpandableFab.d.ts.map +1 -0
  364. package/lib/typescript/src/library/components/FileTiles.d.ts +8 -0
  365. package/lib/typescript/src/library/components/FileTiles.d.ts.map +1 -0
  366. package/lib/typescript/src/library/components/ImagePreview.d.ts +5 -0
  367. package/lib/typescript/src/library/components/ImagePreview.d.ts.map +1 -0
  368. package/lib/typescript/src/library/components/MediaMetadataHeader.d.ts +16 -0
  369. package/lib/typescript/src/library/components/MediaMetadataHeader.d.ts.map +1 -0
  370. package/lib/typescript/src/library/components/RecordAudioScreen.d.ts +8 -0
  371. package/lib/typescript/src/library/components/RecordAudioScreen.d.ts.map +1 -0
  372. package/lib/typescript/src/library/components/VideoPreview.d.ts +20 -0
  373. package/lib/typescript/src/library/components/VideoPreview.d.ts.map +1 -0
  374. package/lib/typescript/src/library/components/ViewerCounter.d.ts +13 -0
  375. package/lib/typescript/src/library/components/ViewerCounter.d.ts.map +1 -0
  376. package/lib/typescript/src/library/compressionEstimate.d.ts +313 -0
  377. package/lib/typescript/src/library/compressionEstimate.d.ts.map +1 -0
  378. package/lib/typescript/src/library/fileMetadata.d.ts +33 -0
  379. package/lib/typescript/src/library/fileMetadata.d.ts.map +1 -0
  380. package/lib/typescript/src/library/index.d.ts +40 -0
  381. package/lib/typescript/src/library/index.d.ts.map +1 -0
  382. package/lib/typescript/src/library/libraryIconRegistry.d.ts +35 -0
  383. package/lib/typescript/src/library/libraryIconRegistry.d.ts.map +1 -0
  384. package/lib/typescript/src/library/libraryIcons.d.ts +85 -0
  385. package/lib/typescript/src/library/libraryIcons.d.ts.map +1 -0
  386. package/lib/typescript/src/library/localizedFormat.d.ts +49 -0
  387. package/lib/typescript/src/library/localizedFormat.d.ts.map +1 -0
  388. package/lib/typescript/src/library/palette.d.ts +104 -0
  389. package/lib/typescript/src/library/palette.d.ts.map +1 -0
  390. package/lib/typescript/src/library/responsive.d.ts +15 -0
  391. package/lib/typescript/src/library/responsive.d.ts.map +1 -0
  392. package/lib/typescript/src/locales.d.ts +103 -0
  393. package/lib/typescript/src/locales.d.ts.map +1 -0
  394. package/lib/typescript/src/localization.d.ts +1051 -0
  395. package/lib/typescript/src/localization.d.ts.map +1 -0
  396. package/lib/typescript/src/logger.d.ts +4 -0
  397. package/lib/typescript/src/logger.d.ts.map +1 -0
  398. package/lib/typescript/src/lowMemoryCache.d.ts +64 -0
  399. package/lib/typescript/src/lowMemoryCache.d.ts.map +1 -0
  400. package/lib/typescript/src/mediaHistory.d.ts +3 -0
  401. package/lib/typescript/src/mediaHistory.d.ts.map +1 -0
  402. package/lib/typescript/src/mediaStorageService.d.ts +155 -0
  403. package/lib/typescript/src/mediaStorageService.d.ts.map +1 -0
  404. package/lib/typescript/src/memory.d.ts +21 -0
  405. package/lib/typescript/src/memory.d.ts.map +1 -0
  406. package/lib/typescript/src/nativeActions.d.ts +174 -0
  407. package/lib/typescript/src/nativeActions.d.ts.map +1 -0
  408. package/lib/typescript/src/nativeComponentSupport.d.ts +30 -0
  409. package/lib/typescript/src/nativeComponentSupport.d.ts.map +1 -0
  410. package/lib/typescript/src/networkPerformance.d.ts +12 -0
  411. package/lib/typescript/src/networkPerformance.d.ts.map +1 -0
  412. package/lib/typescript/src/performance.d.ts +32 -0
  413. package/lib/typescript/src/performance.d.ts.map +1 -0
  414. package/lib/typescript/src/performanceMonitor.d.ts +45 -0
  415. package/lib/typescript/src/performanceMonitor.d.ts.map +1 -0
  416. package/lib/typescript/src/permissions.d.ts +132 -0
  417. package/lib/typescript/src/permissions.d.ts.map +1 -0
  418. package/lib/typescript/src/rendering.d.ts +9 -0
  419. package/lib/typescript/src/rendering.d.ts.map +1 -0
  420. package/lib/typescript/src/security.d.ts +6 -0
  421. package/lib/typescript/src/security.d.ts.map +1 -0
  422. package/lib/typescript/src/state.d.ts +102 -0
  423. package/lib/typescript/src/state.d.ts.map +1 -0
  424. package/lib/typescript/src/storage.d.ts +117 -0
  425. package/lib/typescript/src/storage.d.ts.map +1 -0
  426. package/lib/typescript/src/theme.d.ts +15 -0
  427. package/lib/typescript/src/theme.d.ts.map +1 -0
  428. package/lib/typescript/src/types.d.ts +802 -0
  429. package/lib/typescript/src/types.d.ts.map +1 -0
  430. package/lib/typescript/src/utils.d.ts +50 -0
  431. package/lib/typescript/src/utils.d.ts.map +1 -0
  432. package/lib/typescript/src/validation.d.ts +52 -0
  433. package/lib/typescript/src/validation.d.ts.map +1 -0
  434. package/package.json +204 -0
  435. package/react-native.config.js +17 -0
  436. package/src/AudioPlayerContext.tsx +220 -0
  437. package/src/CameraPreview.tsx +352 -0
  438. package/src/NativeAnimatedImageView.tsx +71 -0
  439. package/src/NativeAudioPlayerView.tsx +39 -0
  440. package/src/NativeBlurView.tsx +40 -0
  441. package/src/NativeCustomCamera.ts +305 -0
  442. package/src/NativeCustomCamera.web.ts +192 -0
  443. package/src/NativeCustomVideoView.ts +30 -0
  444. package/src/NativeDocumentPreviewView.tsx +196 -0
  445. package/src/NativeMediaThumbnailView.tsx +167 -0
  446. package/src/NativeSvgIcon.tsx +46 -0
  447. package/src/ResponsivePreviewContainer.tsx +227 -0
  448. package/src/accessibility.ts +80 -0
  449. package/src/config.ts +406 -0
  450. package/src/cpuOptimization.ts +365 -0
  451. package/src/db/DatabaseManager.ts +212 -0
  452. package/src/db/MediaMapper.ts +377 -0
  453. package/src/db/MediaRepository.ts +313 -0
  454. package/src/db/index.ts +73 -0
  455. package/src/db/migrations.ts +222 -0
  456. package/src/db/react-native-sqlcipher.d.ts +76 -0
  457. package/src/db/secureKey.ts +100 -0
  458. package/src/db/types.ts +123 -0
  459. package/src/db/useMediaDatabase.ts +191 -0
  460. package/src/defaultIcons.tsx +2390 -0
  461. package/src/deviceCapabilities.ts +438 -0
  462. package/src/errors.ts +350 -0
  463. package/src/iconConfig.tsx +962 -0
  464. package/src/icons.tsx +788 -0
  465. package/src/index.tsx +763 -0
  466. package/src/jest-globals.d.ts +9 -0
  467. package/src/library/MediaLibrary.tsx +141 -0
  468. package/src/library/MediaLibraryScreen.tsx +3003 -0
  469. package/src/library/components/AudioPreview.tsx +73 -0
  470. package/src/library/components/DocumentPreview.tsx +361 -0
  471. package/src/library/components/ExpandableFab.tsx +342 -0
  472. package/src/library/components/FileTiles.tsx +252 -0
  473. package/src/library/components/ImagePreview.tsx +72 -0
  474. package/src/library/components/MediaMetadataHeader.tsx +208 -0
  475. package/src/library/components/RecordAudioScreen.tsx +845 -0
  476. package/src/library/components/VideoPreview.tsx +478 -0
  477. package/src/library/components/ViewerCounter.tsx +71 -0
  478. package/src/library/compressionEstimate.ts +662 -0
  479. package/src/library/fileMetadata.ts +212 -0
  480. package/src/library/index.ts +66 -0
  481. package/src/library/libraryIconRegistry.tsx +86 -0
  482. package/src/library/libraryIcons.tsx +928 -0
  483. package/src/library/localizedFormat.ts +207 -0
  484. package/src/library/palette.ts +281 -0
  485. package/src/library/responsive.ts +49 -0
  486. package/src/locales.ts +381 -0
  487. package/src/localization.ts +1947 -0
  488. package/src/logger.ts +20 -0
  489. package/src/lowMemoryCache.ts +218 -0
  490. package/src/mediaHistory.ts +42 -0
  491. package/src/mediaStorageService.ts +546 -0
  492. package/src/memory.ts +102 -0
  493. package/src/nativeActions.ts +422 -0
  494. package/src/nativeComponentSupport.ts +60 -0
  495. package/src/networkPerformance.ts +30 -0
  496. package/src/performance.ts +137 -0
  497. package/src/performanceMonitor.ts +219 -0
  498. package/src/permissions.ts +403 -0
  499. package/src/rendering.ts +47 -0
  500. package/src/security.ts +19 -0
  501. package/src/state.ts +333 -0
  502. package/src/storage.ts +453 -0
  503. package/src/theme.tsx +467 -0
  504. package/src/types.ts +946 -0
  505. package/src/utils.ts +177 -0
  506. package/src/validation.ts +372 -0
@@ -0,0 +1,296 @@
1
+ "use strict";
2
+
3
+ /// <reference lib="dom" />
4
+
5
+ /**
6
+ * CPU optimization utilities for low-end devices
7
+ */
8
+
9
+ import { devWarn } from "./logger.js";
10
+
11
+ /**
12
+ * Debounce function optimized for low-end devices
13
+ * Longer default delay to reduce CPU load
14
+ */
15
+ export function debounceForLowEnd(func, wait = 500 // Longer debounce for low-end
16
+ ) {
17
+ let timeout = null;
18
+ return function (...args) {
19
+ if (timeout) {
20
+ clearTimeout(timeout);
21
+ }
22
+ timeout = setTimeout(() => {
23
+ // Use requestIdleCallback if available for better CPU management
24
+ const nativeGlobal = global;
25
+ if (typeof nativeGlobal.requestIdleCallback === 'function') {
26
+ nativeGlobal.requestIdleCallback(() => func(...args), {
27
+ timeout: 1000
28
+ });
29
+ } else {
30
+ func(...args);
31
+ }
32
+ }, wait);
33
+ };
34
+ }
35
+
36
+ /**
37
+ * Throttle function optimized for low-end devices
38
+ * Longer limit to reduce CPU load
39
+ */
40
+ export function throttleForLowEnd(func, limit = 1000 // Longer throttle for low-end
41
+ ) {
42
+ let lastFunc = null;
43
+ let lastRan = 0;
44
+ return function (...args) {
45
+ if (!lastRan) {
46
+ func(...args);
47
+ lastRan = Date.now();
48
+ } else {
49
+ if (lastFunc) {
50
+ clearTimeout(lastFunc);
51
+ }
52
+ lastFunc = setTimeout(() => {
53
+ if (Date.now() - lastRan >= limit) {
54
+ func(...args);
55
+ lastRan = Date.now();
56
+ }
57
+ }, limit - (Date.now() - lastRan));
58
+ }
59
+ };
60
+ }
61
+
62
+ /**
63
+ * Run operation in background with priority control
64
+ * Uses requestIdleCallback when available
65
+ */
66
+ export async function runInBackgroundWithPriority(operation, priority = 'low') {
67
+ if (priority === 'low') {
68
+ await Promise.resolve();
69
+ }
70
+ await operation();
71
+ }
72
+
73
+ /**
74
+ * Create lazy initializer that defers execution
75
+ * Uses requestIdleCallback when available
76
+ */
77
+ export function createLazyInitializer(initializer) {
78
+ let value = null;
79
+ let initialized = false;
80
+ let initializing = false;
81
+ let callbacks = [];
82
+ const initialize = () => {
83
+ if (initializing) return;
84
+ initializing = true;
85
+ const nativeGlobal = global;
86
+ if (typeof nativeGlobal.requestIdleCallback === 'function') {
87
+ nativeGlobal.requestIdleCallback(() => {
88
+ try {
89
+ value = initializer();
90
+ initialized = true;
91
+ callbacks.forEach(cb => cb(value));
92
+ callbacks = [];
93
+ } catch {
94
+ // Silently fail lazy initialization
95
+ }
96
+ initializing = false;
97
+ }, {
98
+ timeout: 1000
99
+ });
100
+
101
+ // Fallback if idle callback doesn't fire
102
+ setTimeout(() => {
103
+ if (!initialized && !initializing) {
104
+ try {
105
+ value = initializer();
106
+ initialized = true;
107
+ callbacks.forEach(cb => cb(value));
108
+ callbacks = [];
109
+ } catch {
110
+ // Silently fail
111
+ }
112
+ }
113
+ }, 1000);
114
+ } else {
115
+ try {
116
+ value = initializer();
117
+ initialized = true;
118
+ callbacks.forEach(cb => cb(value));
119
+ callbacks = [];
120
+ } catch {
121
+ // Silently fail
122
+ }
123
+ }
124
+ };
125
+ return () => {
126
+ if (!initialized) {
127
+ if (!initializing) {
128
+ initialize();
129
+ }
130
+ return new Promise(resolve => {
131
+ callbacks.push(resolve);
132
+ });
133
+ }
134
+ return value;
135
+ };
136
+ }
137
+
138
+ /**
139
+ * Process operations in chunks to avoid blocking UI
140
+ */
141
+ export async function processInChunks(operations) {
142
+ const results = [];
143
+ for (const operation of operations) {
144
+ await Promise.resolve();
145
+ try {
146
+ const result = await operation();
147
+ results.push(result);
148
+ } catch (error) {
149
+ throw error;
150
+ }
151
+ }
152
+ return results;
153
+ }
154
+
155
+ /**
156
+ * CPU-efficient delay that yields to main thread
157
+ */
158
+ export function efficientDelay(ms) {
159
+ return new Promise(resolve => {
160
+ if (ms <= 0) {
161
+ resolve();
162
+ return;
163
+ }
164
+ const start = performance.now();
165
+ while (performance.now() - start < ms) {
166
+ // Busy-wait briefly to provide a real delay without depending on timers
167
+ }
168
+ resolve();
169
+ });
170
+ }
171
+
172
+ /**
173
+ * Check if current thread is busy
174
+ */
175
+ export function isMainThreadBusy() {
176
+ // Simple heuristic for busyness
177
+ const start = performance.now();
178
+ let computation = 0;
179
+
180
+ // Small computation to check responsiveness
181
+ for (let i = 0; i < 1000; i += 1) {
182
+ computation += i;
183
+ }
184
+ const duration = performance.now() - start;
185
+ if (computation === 0) {
186
+ return false;
187
+ }
188
+
189
+ // If simple computation takes too long, thread is busy
190
+ return duration > 5; // More than 5ms indicates busyness
191
+ }
192
+
193
+ /**
194
+ * Wait for main thread to be available
195
+ */
196
+ export async function waitForMainThreadAvailable(maxWait = 1000, checkInterval = 50) {
197
+ const startTime = Date.now();
198
+ while (Date.now() - startTime < maxWait) {
199
+ if (!isMainThreadBusy()) {
200
+ return;
201
+ }
202
+ await efficientDelay(checkInterval);
203
+ }
204
+
205
+ // Timeout reached
206
+ devWarn('Main thread remained busy for too long');
207
+ }
208
+
209
+ /**
210
+ * CPU-efficient animation frame handler
211
+ */
212
+ export function requestEfficientAnimationFrame(callback) {
213
+ if (isMainThreadBusy()) {
214
+ // If main thread is busy, use setTimeout instead
215
+ const handle = setTimeout(() => {
216
+ const time = performance.now();
217
+ callback(time);
218
+ }, 16); // ~60fps
219
+ return handle;
220
+ }
221
+ return requestAnimationFrame(callback);
222
+ }
223
+
224
+ /**
225
+ * Cancel efficient animation frame
226
+ */
227
+ export function cancelEfficientAnimationFrame(handle) {
228
+ try {
229
+ cancelAnimationFrame(handle);
230
+ } catch {
231
+ // If it was a setTimeout, clear it
232
+ clearTimeout(handle);
233
+ }
234
+ }
235
+
236
+ /**
237
+ * Get CPU optimization level based on device specs
238
+ */
239
+ export function getCpuOptimizationLevel(ram, processor) {
240
+ if (ram === 'low' || processor === 'weak') {
241
+ return 'aggressive';
242
+ }
243
+ if (ram === 'medium' || processor === 'medium') {
244
+ return 'moderate';
245
+ }
246
+ return 'none';
247
+ }
248
+
249
+ /**
250
+ * Check if device supports requestIdleCallback
251
+ */
252
+ export function supportsIdleCallback() {
253
+ const nativeGlobal = global;
254
+ return typeof nativeGlobal.requestIdleCallback === 'function';
255
+ }
256
+
257
+ /**
258
+ * Polyfill for requestIdleCallback
259
+ */
260
+ export function requestIdleCallbackPolyfill(callback, options) {
261
+ if (supportsIdleCallback()) {
262
+ const nativeGlobal = global;
263
+ const idleCallback = nativeGlobal.requestIdleCallback;
264
+ if (typeof idleCallback === 'function') {
265
+ return idleCallback(callback, options);
266
+ }
267
+ }
268
+
269
+ // Polyfill using setTimeout
270
+ const timeout = options?.timeout || 5000;
271
+ const start = Date.now();
272
+ const handle = setTimeout(() => {
273
+ callback({
274
+ didTimeout: false,
275
+ timeRemaining: () => Math.max(0, timeout - (Date.now() - start))
276
+ });
277
+ }, 16); // Next animation frame
278
+
279
+ return handle;
280
+ }
281
+
282
+ /**
283
+ * Cancel polyfilled idle callback
284
+ */
285
+ export function cancelIdleCallbackPolyfill(handle) {
286
+ const nativeGlobal = global;
287
+ if (supportsIdleCallback() && typeof nativeGlobal.cancelIdleCallback === 'function') {
288
+ const idleCancelCallback = nativeGlobal.cancelIdleCallback;
289
+ if (typeof idleCancelCallback === 'function') {
290
+ idleCancelCallback(handle);
291
+ }
292
+ } else {
293
+ clearTimeout(handle);
294
+ }
295
+ }
296
+ //# sourceMappingURL=cpuOptimization.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["devWarn","debounceForLowEnd","func","wait","timeout","args","clearTimeout","setTimeout","nativeGlobal","global","requestIdleCallback","throttleForLowEnd","limit","lastFunc","lastRan","Date","now","runInBackgroundWithPriority","operation","priority","Promise","resolve","createLazyInitializer","initializer","value","initialized","initializing","callbacks","initialize","forEach","cb","push","processInChunks","operations","results","result","error","efficientDelay","ms","start","performance","isMainThreadBusy","computation","i","duration","waitForMainThreadAvailable","maxWait","checkInterval","startTime","requestEfficientAnimationFrame","callback","handle","time","requestAnimationFrame","cancelEfficientAnimationFrame","cancelAnimationFrame","getCpuOptimizationLevel","ram","processor","supportsIdleCallback","requestIdleCallbackPolyfill","options","idleCallback","didTimeout","timeRemaining","Math","max","cancelIdleCallbackPolyfill","cancelIdleCallback","idleCancelCallback"],"sourceRoot":"..\\..\\src","sources":["cpuOptimization.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,191 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * DatabaseManager — the single, centralized owner of the encrypted SQLCipher
5
+ * connection.
6
+ *
7
+ * Responsibilities:
8
+ * - Lazily open the encrypted database exactly once (idempotent `init`).
9
+ * - Provision the encryption key via the Keystore-backed `secureKey` helper.
10
+ * - Run schema migrations on open.
11
+ * - Expose small, safe primitives (`exec`, `query`, `transaction`) that the
12
+ * repository layer builds on — nothing above this file touches the raw driver.
13
+ *
14
+ * The `react-native-sqlcipher` native driver is imported lazily so the bundle
15
+ * still loads on platforms where it is absent (e.g. web); callers get a clear
16
+ * error instead of a hard crash at import time.
17
+ */
18
+ import { Platform } from 'react-native';
19
+ import { getDatabaseKey } from "./secureKey.js";
20
+ import { runMigrations } from "./migrations.js";
21
+ const DATABASE_NAME = 'media_secure.db';
22
+ const DATABASE_LOCATION = 'default';
23
+
24
+ /** A single parameterized statement for {@link DatabaseManager.batch}. */
25
+
26
+ /** Loads the native SQLCipher module lazily. Returns null when unavailable. */
27
+ function loadDriver() {
28
+ try {
29
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
30
+ const mod = require('react-native-sqlcipher');
31
+ return mod?.default ?? mod;
32
+ } catch {
33
+ return null;
34
+ }
35
+ }
36
+ export class DatabaseManager {
37
+ db = null;
38
+ initPromise = null;
39
+
40
+ /** True once the encrypted database is open and migrated. */
41
+ get isReady() {
42
+ return this.db !== null;
43
+ }
44
+
45
+ /**
46
+ * Opens (once) the encrypted database and applies migrations. Concurrent
47
+ * callers share a single in-flight open, so `init` is safe to call from
48
+ * multiple screens/hooks simultaneously.
49
+ */
50
+ async init() {
51
+ if (this.db) return this.db;
52
+ if (this.initPromise) return this.initPromise;
53
+ this.initPromise = this.open().then(db => {
54
+ this.db = db;
55
+ return db;
56
+ }).catch(error => {
57
+ // Reset so a later attempt can retry from scratch.
58
+ this.initPromise = null;
59
+ throw error;
60
+ });
61
+ return this.initPromise;
62
+ }
63
+ async open() {
64
+ const SQLite = loadDriver();
65
+ if (!SQLite) {
66
+ throw new Error(`[DatabaseManager] 'react-native-sqlcipher' is not available on ` + `platform '${Platform.OS}'. Install the package and rebuild the ` + `native app to enable the encrypted media database.`);
67
+ }
68
+ SQLite.enablePromise(true);
69
+ const key = await getDatabaseKey();
70
+ const db = await SQLite.openDatabase({
71
+ name: DATABASE_NAME,
72
+ key,
73
+ location: DATABASE_LOCATION
74
+ });
75
+
76
+ // Pragmas: WAL for concurrent read/write throughput, FK enforcement on.
77
+ await db.executeSql('PRAGMA foreign_keys = ON;');
78
+ try {
79
+ await db.executeSql('PRAGMA journal_mode = WAL;');
80
+ } catch {
81
+ // WAL is an optimization; ignore if the platform rejects it.
82
+ }
83
+ await runMigrations(this.createMigrationExecutor(db));
84
+ return db;
85
+ }
86
+
87
+ /** Ensures the DB is open and returns the live connection. */
88
+ async requireDb() {
89
+ return this.db ?? (await this.init());
90
+ }
91
+
92
+ /**
93
+ * Executes a write/DDL statement. Returns the raw result set for callers that
94
+ * need `insertId` / `rowsAffected`.
95
+ */
96
+ async exec(sql, params = []) {
97
+ const db = await this.requireDb();
98
+ const [result] = await db.executeSql(sql, params);
99
+ return result;
100
+ }
101
+
102
+ /** Executes a SELECT and returns the rows as an array of `T`. */
103
+ async query(sql, params = []) {
104
+ const db = await this.requireDb();
105
+ const [result] = await db.executeSql(sql, params);
106
+ const rows = [];
107
+ for (let i = 0; i < result.rows.length; i++) {
108
+ rows.push(result.rows.item(i));
109
+ }
110
+ return rows;
111
+ }
112
+
113
+ /** Convenience: SELECT returning the first scalar column of the first row. */
114
+ async queryScalar(sql, params = []) {
115
+ const rows = await this.query(sql, params);
116
+ if (rows.length === 0) return null;
117
+ const first = rows[0];
118
+ const firstKey = Object.keys(first)[0];
119
+ return firstKey === undefined ? null : first[firstKey];
120
+ }
121
+
122
+ /**
123
+ * Runs a set of statements atomically in a single transaction.
124
+ *
125
+ * The `react-native-sqlcipher` driver requires every `executeSql` to be queued
126
+ * *synchronously* inside the transaction scope, so this takes a pre-built list
127
+ * of statements rather than an async callback — guaranteeing all-or-nothing
128
+ * semantics (used by `insertMany` and the migration runner).
129
+ */
130
+ async batch(statements) {
131
+ if (statements.length === 0) return;
132
+ const db = await this.requireDb();
133
+ await db.transaction(tx => {
134
+ for (const {
135
+ sql,
136
+ params
137
+ } of statements) {
138
+ tx.executeSql(sql, params ?? []);
139
+ }
140
+ });
141
+ }
142
+
143
+ /** Adapts this manager to the migration executor contract. */
144
+ createMigrationExecutor(db) {
145
+ return {
146
+ getVersion: async () => {
147
+ const [result] = await db.executeSql('PRAGMA user_version;');
148
+ const row = result.rows.item(0);
149
+ return Number(row?.user_version ?? 0);
150
+ },
151
+ runBatch: async statements => {
152
+ await db.transaction(tx => {
153
+ for (const sql of statements) {
154
+ tx.executeSql(sql, []);
155
+ }
156
+ });
157
+ }
158
+ };
159
+ }
160
+
161
+ /** Closes the connection (e.g. on teardown). Safe to call when not open. */
162
+ async close() {
163
+ const db = this.db;
164
+ this.db = null;
165
+ this.initPromise = null;
166
+ if (db) {
167
+ try {
168
+ await db.close();
169
+ } catch (error) {
170
+ console.warn('[DatabaseManager] close failed', error);
171
+ }
172
+ }
173
+ }
174
+ }
175
+
176
+ // Process-wide singleton — every consumer shares one encrypted connection.
177
+ let managerInstance = null;
178
+
179
+ /** Returns the shared `DatabaseManager` singleton. */
180
+ export function getDatabaseManager() {
181
+ if (!managerInstance) {
182
+ managerInstance = new DatabaseManager();
183
+ }
184
+ return managerInstance;
185
+ }
186
+
187
+ /** Opens + migrates the encrypted database. Call once at app startup. */
188
+ export async function initializeMediaDatabase() {
189
+ await getDatabaseManager().init();
190
+ }
191
+ //# sourceMappingURL=DatabaseManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["Platform","getDatabaseKey","runMigrations","DATABASE_NAME","DATABASE_LOCATION","loadDriver","mod","require","default","DatabaseManager","db","initPromise","isReady","init","open","then","catch","error","SQLite","Error","OS","enablePromise","key","openDatabase","name","location","executeSql","createMigrationExecutor","requireDb","exec","sql","params","result","query","rows","i","length","push","item","queryScalar","first","firstKey","Object","keys","undefined","batch","statements","transaction","tx","getVersion","row","Number","user_version","runBatch","close","console","warn","managerInstance","getDatabaseManager","initializeMediaDatabase"],"sourceRoot":"..\\..\\..\\src","sources":["db/DatabaseManager.ts"],"mappings":"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","ignoreList":[]}