catalyst-core 0.3.0-beta.4 → 0.3.0-canary.1

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 (316) hide show
  1. package/changelog.md +80 -0
  2. package/dist/errors/generateDocs.js +100 -0
  3. package/dist/errors/index.js +243 -0
  4. package/dist/errors/registry.js +483 -0
  5. package/dist/errors-index.json +506 -0
  6. package/dist/globals.d.ts +62 -0
  7. package/dist/index.d.ts +5 -0
  8. package/dist/index.jsx +5 -8
  9. package/dist/logger.js +1 -1
  10. package/dist/native/androidProject/app/build.gradle.kts +142 -7
  11. package/dist/native/androidProject/app/src/main/AndroidManifest.xml +4 -0
  12. package/dist/native/androidProject/app/src/main/java/io/yourname/androidproject/NativeBridge.kt +2 -2
  13. package/dist/native/androidProject/app/src/main/java/io/yourname/androidproject/camera/BarcodeDetector.kt +3 -0
  14. package/dist/native/androidProject/app/src/main/java/io/yourname/androidproject/camera/CameraSessionManager.kt +3 -0
  15. package/dist/native/androidProject/app/src/main/java/io/yourname/androidproject/utils/FrameworkServerUtils.kt +43 -8
  16. package/dist/native/androidProject/app/src/test/java/io/yourname/androidproject/BridgeUtilsTest.kt +181 -1
  17. package/dist/native/androidProject/app/src/test/java/io/yourname/androidproject/CameraUtilsTest.kt +156 -236
  18. package/dist/native/androidProject/app/src/test/java/io/yourname/androidproject/FileSizeRouterUtilsTest.kt +471 -0
  19. package/dist/native/androidProject/app/src/test/java/io/yourname/androidproject/FileUtilsTest.kt +222 -226
  20. package/dist/native/androidProject/app/src/test/java/io/yourname/androidproject/FrameworkServerUtilsTest.kt +300 -0
  21. package/dist/native/androidProject/app/src/test/java/io/yourname/androidproject/IntentUtilsTest.kt +244 -0
  22. package/dist/native/androidProject/app/src/test/java/io/yourname/androidproject/MetricsMonitorTest.kt +359 -0
  23. package/dist/native/androidProject/app/src/test/java/io/yourname/androidproject/NativeBridgeTest.kt +108 -63
  24. package/dist/native/androidProject/app/src/test/java/io/yourname/androidproject/NotificationUtilsTest.kt +329 -385
  25. package/dist/native/androidProject/app/src/test/java/io/yourname/androidproject/OfflineCacheServiceTest.kt +302 -0
  26. package/dist/native/androidProject/app/src/test/java/io/yourname/androidproject/PerfEventBufferTest.kt +133 -0
  27. package/dist/native/androidProject/app/src/test/java/io/yourname/androidproject/UtilsKtTest.kt +152 -0
  28. package/dist/native/androidProject/app/src/test/java/io/yourname/androidproject/WebCacheManagerTest.kt +145 -324
  29. package/dist/native/androidProject/app/src/test/java/io/yourname/androidproject/camera/BarcodeDetectorTest.kt +132 -0
  30. package/dist/native/androidProject/app/src/test/java/io/yourname/androidproject/camera/HoldControllerTest.kt +155 -0
  31. package/dist/native/androidProject/app/src/test/java/io/yourname/androidproject/camera/TorchControllerTest.kt +150 -0
  32. package/dist/native/androidProject/app/src/test/java/io/yourname/androidproject/camera/VideoStreamStateMachineTest.kt +120 -0
  33. package/dist/native/androidProject/app/src/test/java/io/yourname/androidproject/camera/VideoStreamStateTest.kt +62 -0
  34. package/dist/native/androidProject/app/src/test/java/io/yourname/androidproject/camera/ViewfinderMapperTest.kt +143 -0
  35. package/dist/native/androidProject/app/src/test/java/io/yourname/androidproject/camera/ZoomControllerTest.kt +421 -0
  36. package/dist/native/androidProject/app/src/test/java/io/yourname/androidproject/design/DesignTokensTest.kt +207 -0
  37. package/dist/native/androidProject/app/src/test/java/io/yourname/androidproject/plugins/PluginBridgeTest.kt +368 -0
  38. package/dist/native/androidProject/app/src/test/java/io/yourname/androidproject/security/FridaDetectorTest.kt +193 -0
  39. package/dist/native/androidProject/app/src/test/java/io/yourname/androidproject/security/SecurityCheckManagerTest.kt +260 -0
  40. package/dist/native/androidProject/app/src/test/java/io/yourname/androidproject/security/SecurityCheckSchedulerTest.kt +166 -0
  41. package/dist/native/androidProject/app/src/test/java/io/yourname/androidproject/utils/DeviceInfoUtilsTest.kt +167 -0
  42. package/dist/native/androidProject/app/src/test/java/io/yourname/androidproject/utils/DownloadUtilsTest.kt +197 -0
  43. package/dist/native/androidProject/app/src/test/java/io/yourname/androidproject/utils/NetworkMonitorTest.kt +271 -0
  44. package/dist/native/androidProject/app/src/test/java/io/yourname/androidproject/utils/PushNotificationUtilsTest.kt +119 -0
  45. package/dist/native/androidProject/app/src/test/java/io/yourname/androidproject/utils/SafeAreaUtilsTest.kt +108 -0
  46. package/dist/native/androidProject/build.gradle.kts +1 -0
  47. package/dist/native/androidProject/gradle/libs.versions.toml +26 -0
  48. package/dist/native/androidProject/settings.gradle.kts +11 -8
  49. package/dist/native/androidSetup.js +2 -2
  50. package/dist/native/bridge/WebBridge.d.ts +98 -0
  51. package/dist/native/bridge/WebBridge.js +40 -6
  52. package/dist/native/bridge/constants/NativeInterfaces.d.ts +391 -0
  53. package/dist/native/bridge/errors.d.ts +67 -0
  54. package/dist/native/bridge/errors.js +66 -151
  55. package/dist/native/bridge/hooks/index.d.ts +13 -0
  56. package/dist/native/bridge/hooks/index.js +0 -6
  57. package/dist/native/bridge/hooks/useAI.d.ts +1 -0
  58. package/dist/native/bridge/hooks/useAI.js +3 -1
  59. package/dist/native/bridge/hooks/useCamera.d.ts +86 -0
  60. package/dist/native/bridge/hooks/useCamera.js +35 -6
  61. package/dist/native/bridge/hooks/useDataProtection.d.ts +17 -0
  62. package/dist/native/bridge/hooks/useDeviceInfo.d.ts +34 -0
  63. package/dist/native/bridge/hooks/useDeviceInfo.js +5 -0
  64. package/dist/native/bridge/hooks/useFilePicker.d.ts +53 -0
  65. package/dist/native/bridge/hooks/useFilePicker.js +13 -0
  66. package/dist/native/bridge/hooks/useGoogleSignIn.d.ts +12 -0
  67. package/dist/native/bridge/hooks/useHapticFeedback.d.ts +76 -0
  68. package/dist/native/bridge/hooks/useHapticFeedback.js +6 -1
  69. package/dist/native/bridge/hooks/useIntent.d.ts +33 -0
  70. package/dist/native/bridge/hooks/useIntent.js +2 -0
  71. package/dist/native/bridge/hooks/useNativeTransition.d.ts +53 -0
  72. package/dist/native/bridge/hooks/useNativeTransition.js +14 -7
  73. package/dist/native/bridge/hooks/useNetworkStatus.d.ts +22 -0
  74. package/dist/native/bridge/hooks/useNetworkStatus.js +7 -0
  75. package/dist/native/bridge/hooks/useNotification.d.ts +83 -0
  76. package/dist/native/bridge/hooks/useNotification.js +81 -34
  77. package/dist/native/bridge/hooks/useSafeArea.d.ts +12 -0
  78. package/dist/native/bridge/hooks/useSafeArea.js +8 -0
  79. package/dist/native/bridge/hooks/useVideoStream.d.ts +67 -0
  80. package/dist/native/bridge/hooks/useVideoStream.js +38 -52
  81. package/dist/native/bridge/hooks/utils.d.ts +4 -0
  82. package/dist/native/bridge/hooks.d.ts +1 -0
  83. package/dist/native/bridge/perf/collectors/ApiCollector.d.ts +30 -0
  84. package/dist/native/bridge/perf/collectors/ApiCollector.js +4 -0
  85. package/dist/native/bridge/perf/collectors/CacheCollector.d.ts +43 -0
  86. package/dist/native/bridge/perf/collectors/CacheCollector.js +4 -0
  87. package/dist/native/bridge/perf/collectors/HookCollector.d.ts +37 -0
  88. package/dist/native/bridge/perf/collectors/HookCollector.js +4 -0
  89. package/dist/native/bridge/perf/collectors/InsightsCollector.d.ts +103 -0
  90. package/dist/native/bridge/perf/collectors/InsightsCollector.js +4 -0
  91. package/dist/native/bridge/perf/collectors/InteractionCollector.d.ts +53 -0
  92. package/dist/native/bridge/perf/collectors/InteractionCollector.js +4 -0
  93. package/dist/native/bridge/perf/collectors/KeyboardCollector.d.ts +30 -0
  94. package/dist/native/bridge/perf/collectors/KeyboardCollector.js +4 -0
  95. package/dist/native/bridge/perf/collectors/NavigationCollector.d.ts +37 -0
  96. package/dist/native/bridge/perf/collectors/NavigationCollector.js +4 -0
  97. package/dist/native/bridge/perf/collectors/NetworkTimingCollector.d.ts +30 -0
  98. package/dist/native/bridge/perf/collectors/NetworkTimingCollector.js +4 -0
  99. package/dist/native/bridge/perf/collectors/RenderCollector.d.ts +47 -0
  100. package/dist/native/bridge/perf/collectors/RenderCollector.js +8 -0
  101. package/dist/native/bridge/perf/collectors/ScrollCollector.d.ts +29 -0
  102. package/dist/native/bridge/perf/collectors/ScrollCollector.js +4 -0
  103. package/dist/native/bridge/perf/collectors/ThreadCollector.d.ts +31 -0
  104. package/dist/native/bridge/perf/collectors/ThreadCollector.js +4 -0
  105. package/dist/native/bridge/perf/core/constants.d.ts +76 -0
  106. package/dist/native/bridge/perf/core/measure.d.ts +39 -0
  107. package/dist/native/bridge/perf/core/measure.js +4 -0
  108. package/dist/native/bridge/perf/core/session.d.ts +49 -0
  109. package/dist/native/bridge/perf/core/session.js +4 -0
  110. package/dist/native/bridge/perf/core/store.d.ts +37 -0
  111. package/dist/native/bridge/perf/core/store.js +4 -0
  112. package/dist/native/bridge/perf/core/summary.d.ts +60 -0
  113. package/dist/native/bridge/perf/core/traceExport.d.ts +10 -0
  114. package/dist/native/bridge/perf/core/waterfalls.d.ts +2 -0
  115. package/dist/native/bridge/perf/index.d.ts +63 -0
  116. package/dist/native/bridge/perf/index.js +4 -0
  117. package/dist/native/bridge/safeArea.d.ts +11 -0
  118. package/dist/native/bridge/safeArea.js +2 -0
  119. package/dist/native/bridge/useBaseHook.d.ts +137 -0
  120. package/dist/native/bridge/useBaseHook.js +34 -4
  121. package/dist/native/bridge/utils/CameraUtils.d.ts +94 -0
  122. package/dist/native/bridge/utils/CameraUtils.js +4 -0
  123. package/dist/native/bridge/utils/FileObjectConverter.d.ts +36 -0
  124. package/dist/native/bridge/utils/NativeBridge.d.ts +270 -0
  125. package/dist/native/bridge/utils/NativeBridge.js +10 -0
  126. package/dist/native/buildAndroid/index.js +1 -1
  127. package/dist/native/buildAppAndroid.js +9 -0
  128. package/dist/native/buildAppIos.js +16 -1
  129. package/dist/native/buildErrorFormat.js +57 -0
  130. package/dist/native/buildIos/config.js +15 -1
  131. package/dist/native/buildIos/index.js +1 -1
  132. package/dist/native/buildIos/plugins.js +10 -1
  133. package/dist/native/iosnativeWebView/CoreLogic/Package.swift +36 -0
  134. package/dist/native/iosnativeWebView/{Sources/Core → CoreLogic/Sources/CatalystCoreLogic}/Camera/VideoStreamState.swift +1 -1
  135. package/dist/native/iosnativeWebView/{Sources/Core → CoreLogic/Sources/CatalystCoreLogic}/Camera/VideoStreamStateMachine.swift +6 -4
  136. package/dist/native/iosnativeWebView/{Sources/Core → CoreLogic/Sources/CatalystCoreLogic}/Utils/BootTimingUtility.swift +3 -3
  137. package/dist/native/iosnativeWebView/{Sources/Core → CoreLogic/Sources/CatalystCoreLogic}/Utils/FrameworkServerUtils.swift +14 -9
  138. package/dist/native/iosnativeWebView/{Sources/Core → CoreLogic/Sources/CatalystCoreLogic}/Utils/NetworkMonitor.swift +11 -9
  139. package/dist/native/iosnativeWebView/{Sources/Core → CoreLogic/Sources/CatalystCoreLogic}/Utils/NotificationHandlerProvider.swift +1 -1
  140. package/dist/native/iosnativeWebView/{Sources/Core → CoreLogic/Sources/CatalystCoreLogic}/Utils/URLWhitelistManager.swift +7 -7
  141. package/dist/native/iosnativeWebView/CoreLogic/Tests/CatalystCoreLogicTests/AnyCodableTests.swift +154 -0
  142. package/dist/native/iosnativeWebView/{iosnativeWebViewTests → CoreLogic/Tests/CatalystCoreLogicTests}/BootTimingUtilityTests.swift +23 -5
  143. package/dist/native/iosnativeWebView/CoreLogic/Tests/CatalystCoreLogicTests/CatalystConstantsTests.swift +192 -0
  144. package/dist/native/iosnativeWebView/{iosnativeWebViewTests → CoreLogic/Tests/CatalystCoreLogicTests}/ConfigMappingTests.swift +1 -1
  145. package/dist/native/iosnativeWebView/CoreLogic/Tests/CatalystCoreLogicTests/FrameworkServerUtilsErrorPathTests.swift +106 -0
  146. package/dist/native/iosnativeWebView/CoreLogic/Tests/CatalystCoreLogicTests/FrameworkServerUtilsLoopbackTests.swift +243 -0
  147. package/dist/native/iosnativeWebView/{iosnativeWebViewTests → CoreLogic/Tests/CatalystCoreLogicTests}/FrameworkServerUtilsTests.swift +1 -1
  148. package/dist/native/iosnativeWebView/CoreLogic/Tests/CatalystCoreLogicTests/NetworkMonitorTests.swift +119 -0
  149. package/dist/native/iosnativeWebView/CoreLogic/Tests/CatalystCoreLogicTests/NotificationHandlerProviderTests.swift +59 -0
  150. package/dist/native/iosnativeWebView/{iosnativeWebViewTests → CoreLogic/Tests/CatalystCoreLogicTests}/NotificationHandlerTests.swift +1 -1
  151. package/dist/native/iosnativeWebView/{iosnativeWebViewTests → CoreLogic/Tests/CatalystCoreLogicTests}/URLWhitelistManagerTests.swift +1 -1
  152. package/dist/native/iosnativeWebView/CoreLogic/Tests/CatalystCoreLogicTests/VideoStreamStateMachineTests.swift +171 -0
  153. package/dist/native/iosnativeWebView/CoreLogic/Tests/CatalystCoreLogicTests/VideoStreamStateTests.swift +91 -0
  154. package/dist/native/iosnativeWebView/Package.swift +10 -9
  155. package/dist/native/iosnativeWebView/Sources/CatalystNotifications/LocalNotificationHandler.swift +7 -2
  156. package/dist/native/iosnativeWebView/Sources/CatalystNotifications/NotificationManager.swift +1 -2
  157. package/dist/native/iosnativeWebView/Sources/CatalystNotifications/PushNotificationHandler.swift +5 -4
  158. package/dist/native/iosnativeWebView/Sources/Core/Camera/CameraSessionManager.swift +1 -0
  159. package/dist/native/iosnativeWebView/Sources/Core/Camera/HoldController.swift +1 -0
  160. package/dist/native/iosnativeWebView/Sources/Core/Camera/NativeCameraManager.swift +6 -5
  161. package/dist/native/iosnativeWebView/Sources/Core/Camera/ZoomController.swift +1 -0
  162. package/dist/native/iosnativeWebView/Sources/Core/Plugins/PluginBridge.swift +1 -0
  163. package/dist/native/iosnativeWebView/Sources/Core/Utils/CacheManager.swift +31 -30
  164. package/dist/native/iosnativeWebView/Sources/Core/Utils/CameraTransportUtils.swift +2 -1
  165. package/dist/native/iosnativeWebView/Sources/Core/Utils/DeviceInfoUtils.swift +1 -1
  166. package/dist/native/iosnativeWebView/Sources/Core/Utils/FilePickerHandler.swift +22 -19
  167. package/dist/native/iosnativeWebView/Sources/Core/Utils/ImageHandler.swift +40 -39
  168. package/dist/native/iosnativeWebView/Sources/Core/Utils/PerfEventBuffer.swift +1 -0
  169. package/dist/native/iosnativeWebView/Sources/Core/Utils/ResourceURLProtocol.swift +15 -15
  170. package/dist/native/iosnativeWebView/Sources/Core/Utils/WebKitConfig.swift +4 -3
  171. package/dist/native/iosnativeWebView/Sources/Core/WebView/BridgeCommandHandler.swift +6 -1
  172. package/dist/native/iosnativeWebView/Sources/Core/WebView/BridgeDelegateHandler.swift +1 -0
  173. package/dist/native/iosnativeWebView/Sources/Core/WebView/BridgeFileHandler.swift +2 -1
  174. package/dist/native/iosnativeWebView/Sources/Core/WebView/BridgeJavaScriptInterface.swift +2 -1
  175. package/dist/native/iosnativeWebView/Sources/Core/WebView/BridgeMessageValidator.swift +3 -5
  176. package/dist/native/iosnativeWebView/Sources/Core/WebView/NativeBridge.swift +20 -13
  177. package/dist/native/iosnativeWebView/Sources/Core/WebView/SplashView.swift +6 -5
  178. package/dist/native/iosnativeWebView/Sources/Core/WebView/SplashViewModel.swift +14 -13
  179. package/dist/native/iosnativeWebView/Sources/Core/WebView/TransitionManager.swift +3 -3
  180. package/dist/native/iosnativeWebView/Sources/Core/WebView/WebView.swift +9 -8
  181. package/dist/native/iosnativeWebView/Sources/Core/WebView/WebViewModel.swift +7 -6
  182. package/dist/native/iosnativeWebView/Sources/Core/WebView/WebViewNavigationDelegate.swift +24 -25
  183. package/dist/native/iosnativeWebView/iosnativeWebView/AppDelegate.swift +6 -1
  184. package/dist/native/iosnativeWebView/iosnativeWebView/ContentView.swift +1 -0
  185. package/dist/native/iosnativeWebView/iosnativeWebView/iosnativeWebViewApp.swift +4 -0
  186. package/dist/native/iosnativeWebView/iosnativeWebView.xcodeproj/project.pbxproj +2 -22
  187. package/dist/native/iosnativeWebView/iosnativeWebViewTests/BridgeMessageValidatorTests.swift +1 -0
  188. package/dist/native/iosnativeWebView/iosnativeWebViewTests/CacheManagerTests.swift +1 -0
  189. package/dist/native/iosnativeWebView/iosnativeWebViewTests/FilePickerHandlerTests.swift +2 -1
  190. package/dist/native/iosnativeWebView/iosnativeWebViewTests/NativeBridgeTests.swift +15 -9
  191. package/dist/native/iosnativeWebView/iosnativeWebViewTests/WebViewTests.swift +1 -0
  192. package/dist/native/setupEmulatorIos.js +2 -2
  193. package/dist/native/terminalProgress.js +17 -17
  194. package/dist/router/ClientRouter.d.ts +8 -0
  195. package/dist/router/ClientRouter.js +13 -11
  196. package/dist/router/ServerRouter.d.ts +13 -0
  197. package/dist/router/ServerRouter.js +19 -7
  198. package/dist/scripts/build.js +14 -2
  199. package/dist/scripts/loadEnvironmentVariables.js +3 -2
  200. package/dist/scripts/plugins.js +1 -1
  201. package/dist/scripts/preServerInit.js +49 -3
  202. package/dist/scripts/preflight.js +111 -0
  203. package/dist/scripts/scriptUtils.js +46 -1
  204. package/dist/scripts/serve.js +7 -1
  205. package/dist/scripts/start.js +8 -1
  206. package/dist/server/expressServer.d.ts +1 -0
  207. package/dist/server/expressServer.js +247 -271
  208. package/dist/server/manifestCache.d.ts +2 -0
  209. package/dist/server/manifestCache.js +25 -33
  210. package/dist/server/renderer/ChunkExtractor.d.ts +44 -0
  211. package/dist/server/renderer/ChunkExtractor.js +113 -125
  212. package/dist/server/renderer/document/Body.d.ts +21 -0
  213. package/dist/server/renderer/document/Body.jsx +45 -45
  214. package/dist/server/renderer/document/FastRefresh.d.ts +3 -0
  215. package/dist/server/renderer/document/FastRefresh.jsx +7 -13
  216. package/dist/server/renderer/document/Head.d.ts +20 -0
  217. package/dist/server/renderer/document/Head.jsx +32 -32
  218. package/dist/server/renderer/document/index.d.ts +2 -0
  219. package/dist/server/renderer/document/index.jsx +2 -2
  220. package/dist/server/renderer/extract.d.ts +67 -0
  221. package/dist/server/renderer/extract.js +92 -89
  222. package/dist/server/renderer/handler.d.ts +2 -0
  223. package/dist/server/renderer/handler.jsx +401 -404
  224. package/dist/server/renderer/index.d.ts +2 -0
  225. package/dist/server/renderer/index.js +5 -8
  226. package/dist/server/renderer/render.d.ts +35 -0
  227. package/dist/server/renderer/render.js +33 -32
  228. package/dist/server/utils/botDetectionMiddleware.d.ts +1 -0
  229. package/dist/server/utils/botDetectionMiddleware.js +33 -23
  230. package/dist/server/utils/cjsRequire.d.ts +8 -0
  231. package/dist/server/utils/cjsRequire.js +2 -2
  232. package/dist/server/utils/userAgentUtil.d.ts +7 -0
  233. package/dist/server/utils/userAgentUtil.js +68 -71
  234. package/dist/server/utils/validator.d.ts +31 -0
  235. package/dist/server/utils/validator.js +133 -158
  236. package/dist/vite/inject-cache-key-plugin.js +3 -27
  237. package/dist/vite/moduleAliases.js +36 -0
  238. package/dist/vite/node-loader.mjs +2 -29
  239. package/dist/vite/resolveDevServerConfig.js +4 -1
  240. package/dist/vite/vite.config.js +13 -31
  241. package/dist/web-router/components/MetaTag.d.ts +4 -0
  242. package/dist/web-router/components/MetaTag.jsx +26 -28
  243. package/dist/web-router/components/MetaTag.test.jsx +100 -0
  244. package/dist/web-router/components/RouterDataProvider.d.ts +96 -0
  245. package/dist/web-router/components/RouterDataProvider.jsx +260 -259
  246. package/dist/web-router/components/RouterDataProvider.server.test.jsx +98 -0
  247. package/dist/web-router/components/RouterDataProvider.test.jsx +310 -0
  248. package/dist/web-router/components/Split.d.ts +74 -0
  249. package/dist/web-router/components/Split.jsx +147 -156
  250. package/dist/web-router/components/Split.server.test.jsx +52 -0
  251. package/dist/web-router/components/Split.test.jsx +167 -0
  252. package/dist/web-router/components/SplitInview.d.ts +22 -0
  253. package/dist/web-router/components/SplitInview.jsx +78 -89
  254. package/dist/web-router/components/SplitInview.test.jsx +112 -0
  255. package/dist/web-router/components/SsrRequestContext.d.ts +20 -0
  256. package/dist/web-router/components/SsrRequestContext.jsx +17 -7
  257. package/dist/web-router/components/SsrRequestContext.test.jsx +53 -0
  258. package/dist/web-router/context.d.ts +15 -0
  259. package/dist/web-router/context.jsx +5 -5
  260. package/dist/web-router/context.test.jsx +10 -0
  261. package/dist/web-router/utils/metaDataUtils.d.ts +24 -0
  262. package/dist/web-router/utils/metaDataUtils.jsx +86 -86
  263. package/dist/web-router/utils/metaDataUtils.test.jsx +188 -0
  264. package/dist/web-router/vitest.setup.js +12 -0
  265. package/mcp_v2/knowledge-base.json +52 -8
  266. package/mcp_v2/mcp.js +140 -3
  267. package/mcp_v2/package-lock.json +2031 -0
  268. package/mcp_v2/package.json +13 -2
  269. package/mcp_v2/scripts/copyErrorsIndex.cjs +34 -0
  270. package/mcp_v2/test/errors.test.ts +123 -0
  271. package/mcp_v2/test/github.test.ts +177 -0
  272. package/mcp_v2/tools/errors.d.ts +20 -0
  273. package/mcp_v2/tools/errors.js +63 -0
  274. package/mcp_v2/tools/github.d.ts +41 -0
  275. package/mcp_v2/tools/github.js +231 -0
  276. package/mcp_v2/vitest.config.mjs +22 -0
  277. package/package.json +60 -11
  278. package/test/errors/docsDrift.test.ts +113 -0
  279. package/test/errors/index.test.ts +200 -0
  280. package/test/errors/registry.test.ts +108 -0
  281. package/test/scripts/preflight.test.ts +121 -0
  282. package/test/server/ChunkExtractor.test.ts +97 -0
  283. package/test/server/extract.test.ts +128 -0
  284. package/test/server/fixtures/template/server/document.jsx +19 -0
  285. package/test/server/fixtures/template/server/index.js +10 -0
  286. package/test/server/fixtures/template/src/js/containers/App/index.jsx +33 -0
  287. package/test/server/fixtures/template/src/js/routes/index.jsx +72 -0
  288. package/test/server/fixtures/template/src/js/routes/utils.jsx +39 -0
  289. package/test/server/fixtures/template/src/js/store/index.js +19 -0
  290. package/test/server/handler.assets.test.ts +331 -0
  291. package/test/server/handler.test.ts +210 -0
  292. package/test/server/manifestCache.test.ts +71 -0
  293. package/test/server/render.test.ts +90 -0
  294. package/test/server/scriptUtils.test.ts +103 -0
  295. package/test/server/userAgentUtil.test.ts +48 -0
  296. package/test/server/validator.test.ts +228 -0
  297. package/test/vite/resolveDevServerConfig.test.js +4 -1
  298. package/tsconfig.test.json +23 -0
  299. package/vitest.config.ts +93 -0
  300. package/dist/caching.js +0 -1
  301. package/dist/native/androidProject/app/src/test/java/io/yourname/androidproject/DeviceInfoUtilsTest.kt +0 -187
  302. package/dist/native/bridge/standardizedHooks.js +0 -611
  303. package/dist/router.js +0 -1
  304. package/dist/scripts/validator.js +0 -149
  305. package/dist/web-router/hooks.jsx +0 -72
  306. package/dist/web-router/types/components/MetaTag.d.ts +0 -2
  307. package/dist/web-router/types/components/RouterDataProvider.d.ts +0 -95
  308. package/dist/web-router/types/context.d.ts +0 -14
  309. package/dist/web-router/types/hooks.d.ts +0 -1
  310. package/dist/web-router/types/index.d.ts +0 -3
  311. package/dist/web-router/types/utils/metaDataUtils.d.ts +0 -24
  312. /package/dist/native/iosnativeWebView/{Sources/Core → CoreLogic/Sources/CatalystCoreLogic}/Constants/CatalystConstants.swift +0 -0
  313. /package/dist/native/iosnativeWebView/{Sources/Core → CoreLogic/Sources/CatalystCoreLogic}/Constants/ConfigConstants.swift +0 -0
  314. /package/dist/native/iosnativeWebView/{Sources/Core → CoreLogic/Sources/CatalystCoreLogic}/Notifications/NotificationModels.swift +0 -0
  315. /package/dist/native/iosnativeWebView/{Sources/Core → CoreLogic/Sources/CatalystCoreLogic}/Protocols/NotificationHandlerProtocol.swift +0 -0
  316. /package/dist/native/iosnativeWebView/{Sources/Core → CoreLogic/Sources/CatalystCoreLogic}/Utils/NullNotificationHandler.swift +0 -0
@@ -1,332 +1,333 @@
1
- import React, { useEffect, useState, createContext, useContext, useMemo, useRef } from "react"
2
- import {
3
- useLocation,
4
- useMatch,
5
- useNavigate,
6
- useParams,
7
- useSearchParams,
8
- UNSAFE_RouteContext,
9
- matchRoutes,
10
- } from "react-router-dom"
11
- import { OneMgRouterContext } from "../context.jsx"
1
+ import React, { useEffect, useState, createContext, useContext, useMemo, useRef } from "react";
2
+ import { useLocation, useMatch, useNavigate, useParams, useSearchParams, UNSAFE_RouteContext, matchRoutes } from "react-router";
3
+ import { OneMgRouterContext } from "../context.jsx";
12
4
  // import sanitizeHtml from "sanitize-html"
13
5
 
14
6
  /**
15
- * @description Router Data
16
- * @typedef {{data: any, error: any, isFetching: boolean, isFetched:boolean, refetch?:(args:any)=>Promise<void>}} RouteData
7
+ * Data a route fetcher produced, as exposed by useCurrentRouteData / useRouterData.
17
8
  */
18
9
 
19
10
  /**
20
- * @type {import("react").Context<Object.<string, RouteData>>}
11
+ * Route data keyed by route key (pathname plus query string).
21
12
  */
22
- export const RouterContext = createContext({})
13
+
14
+ export const RouterContext = createContext({});
23
15
 
24
16
  /**
25
- * @typedef RouterDataProviderConfig
26
- * @property {boolean} [disableCaching=false] disableCaching disable caching of fetched data - default is false
17
+ * Global RouterDataProvider configuration.
27
18
  */
28
19
 
29
20
  /**
30
21
  * Initial State of context
31
22
  */
32
23
  const INITIAL_DATA_STATE = {
33
- data: null,
34
- error: null,
35
- isFetching: false,
36
- isFetched: false,
37
- refetch: () => {},
38
- clear: () => {},
39
- }
24
+ data: null,
25
+ error: null,
26
+ isFetching: false,
27
+ isFetched: false,
28
+ refetch: () => {},
29
+ clear: () => {}
30
+ };
40
31
 
41
32
  /**
42
- * @typedef RouterFetcherProps
43
- * @property {any} route route object
44
- * @property {import("react-router-dom").Location} location the current location object, which represents the current URL in web browsers.
45
- * @property {import("react-router-dom").Params} params object of key/value pairs of the dynamic params from the current URL that were matched by the route path.
46
- * @property {URLSearchParams} searchParams search parameters via URLSearchParams interface.
47
- * @property {import("react-router-dom").NavigateFunction} navigate function to navigate to other pages based on response.
33
+ * Arguments handed to a route's clientFetcher / serverFetcher.
48
34
  */
49
35
 
50
36
  /**
51
- * @typedef ServerFetchDataProps
52
- * @property {import("react-router-dom").RouteObject[]} routes routes Array
53
- * @property {string} url current url
54
- * @property {import("express").Request} req Express request object
37
+ * Arguments for the server-side fetch pass.
55
38
  */
56
39
 
57
40
  /**
58
41
  * @description call this function to fetch data using fetchers defined in routes
59
- * @param {ServerFetchDataProps} serverFetchDataProps
60
- * @param {Object.<string, any>} fetcherArgs anything passed in fetcherArgs prop of RouterProvider
42
+ * @param serverFetchDataProps
43
+ * @param fetcherArgs anything passed in fetcherArgs prop of RouterProvider
61
44
  * @returns RoutesData
62
45
  */
63
46
  export const serverDataFetcher = async (serverFetchDataProps, fetcherArgs) => {
64
- /**
65
- * @type {Object.<string, RouteData>}
66
- */
67
- const routesData = {}
68
- const { routes, url, req, res: responseInstance } = serverFetchDataProps
69
- const matchedRoutes = matchRoutes(routes, url)
70
- if (matchedRoutes) {
71
- const searchParams = req.query
72
- const params = matchedRoutes[matchedRoutes.length - 1].params
73
- let searchParamsString = ""
74
- if (searchParams) {
75
- for (const key in searchParams) {
76
- searchParamsString += `${key}=${searchParams[key]}&`
77
- }
78
- searchParamsString = searchParamsString.slice(0, -1)
79
- searchParamsString = searchParamsString ? `?${searchParamsString}` : searchParamsString
80
- }
81
- await Promise.allSettled(
82
- matchedRoutes.map(async (match) => {
83
- const res = await fetchRouteData(
84
- { req, res: responseInstance, route: match.route, params, searchParams },
85
- fetcherArgs
86
- )
87
- routesData[generateRouteKey(match, searchParamsString)] = res
88
- })
89
- )
47
+ const routesData = {};
48
+ const {
49
+ routes,
50
+ url,
51
+ req,
52
+ res: responseInstance
53
+ } = serverFetchDataProps;
54
+ const matchedRoutes = matchRoutes(routes, url);
55
+ if (matchedRoutes) {
56
+ const searchParams = req.query;
57
+ const params = matchedRoutes[matchedRoutes.length - 1].params;
58
+ let searchParamsString = "";
59
+ if (searchParams) {
60
+ for (const key in searchParams) {
61
+ searchParamsString += `${key}=${searchParams[key]}&`;
62
+ }
63
+ searchParamsString = searchParamsString.slice(0, -1);
64
+ searchParamsString = searchParamsString ? `?${searchParamsString}` : searchParamsString;
90
65
  }
91
- return routesData
92
- }
66
+ await Promise.allSettled(matchedRoutes.map(async match => {
67
+ const res = await fetchRouteData({
68
+ req,
69
+ res: responseInstance,
70
+ route: match.route,
71
+ params,
72
+ searchParams
73
+ }, fetcherArgs);
74
+ routesData[generateRouteKey(match, searchParamsString)] = res;
75
+ }));
76
+ }
77
+ return routesData;
78
+ };
93
79
 
94
80
  /**
95
81
  * @description call this function to fetch data using fetchers defined in [page].fetcher.js
96
- * @param {RouterFetcherProps} routerProps
97
- * @param {Object.<string, any>} fetcherArgs anything passed in fetcherArgs prop of RouterProvider
98
- * @param {Object.<string, any>=} refetchArgs anything passed in argument of refetch function
99
- * @returns {Promise<RouteData>}
82
+ * @param routerProps
83
+ * @param fetcherArgs anything passed in fetcherArgs prop of RouterProvider
84
+ * @param refetchArgs anything passed in argument of refetch function
100
85
  */
101
86
  const fetchRouteData = async (routerProps, fetcherArgs, refetchArgs) => {
102
- const routeData = { ...INITIAL_DATA_STATE }
103
- const { route } = routerProps
104
- const routeComponent = route.component || route.Component || route.element
105
- let component = null
106
- // If component is imported through loadable
107
- if (typeof routeComponent?.load === "function") {
108
- try {
109
- component = await routeComponent.load()
110
- } catch (err) {
111
- console.error("Error loading component", err)
112
- }
87
+ const routeData = {
88
+ ...INITIAL_DATA_STATE
89
+ };
90
+ const {
91
+ route
92
+ } = routerProps;
93
+ const routeComponent = route.component || route.Component || route.element;
94
+ let component = null;
95
+ // If component is imported through loadable
96
+ if (typeof routeComponent?.load === "function") {
97
+ try {
98
+ component = await routeComponent.load();
99
+ } catch (err) {
100
+ console.error("Error loading component", err);
113
101
  }
114
-
115
- let fetcher = component?.default?.clientFetcher
116
-
117
- if (typeof window === "undefined") {
118
- fetcher = component?.default?.serverFetcher
119
- }
120
-
121
- if (fetcher && typeof fetcher === "function") {
122
- routeData.fetcherNotAvailable = false
123
- try {
124
- const res = await fetcher(routerProps, fetcherArgs, refetchArgs)
125
- routeData.data = res
126
- } catch (error) {
127
- // @ts-ignore
128
- routeData.error = error
129
- } finally {
130
- routeData.isFetching = false
131
- routeData.isFetched = true
132
- }
133
- } else {
134
- routeData.fetcherNotAvailable = true
102
+ }
103
+ let fetcher = component?.default?.clientFetcher;
104
+ if (typeof window === "undefined") {
105
+ fetcher = component?.default?.serverFetcher;
106
+ }
107
+ if (fetcher && typeof fetcher === "function") {
108
+ routeData.fetcherNotAvailable = false;
109
+ try {
110
+ const res = await fetcher(routerProps, fetcherArgs, refetchArgs);
111
+ routeData.data = res;
112
+ } catch (error) {
113
+ // @ts-ignore
114
+ routeData.error = error;
115
+ } finally {
116
+ routeData.isFetching = false;
117
+ routeData.isFetched = true;
135
118
  }
136
- return routeData
137
- }
119
+ } else {
120
+ routeData.fetcherNotAvailable = true;
121
+ }
122
+ return routeData;
123
+ };
138
124
 
139
125
  /**
140
126
  *
141
- * @param {RouteContextObject} routeContext route context object
142
- * @returns {import('react-router-dom').RouteMatch[]} Array of matched routes
127
+ * @param routeContext route context object
128
+ * @returns Array of matched routes
143
129
  */
144
- const getMatchedRoutes = ({ matches, outlet }) => {
145
- if (outlet) {
146
- return getMatchedRoutes(outlet.props.routeContext)
147
- }
148
- return matches
149
- }
130
+ const getMatchedRoutes = ({
131
+ matches,
132
+ outlet
133
+ }) => {
134
+ if (outlet) {
135
+ return getMatchedRoutes(outlet.props.routeContext);
136
+ }
137
+ return matches;
138
+ };
150
139
 
151
140
  /**
152
141
  * Generates route key for given route using pathname and query params
153
- * @param {import('react-router-dom').RouteMatch} match Router Match Object
154
- * @param {string} searchParamsString Query params string
155
- * @returns {string} routerKey
142
+ * @param match Router Match Object
143
+ * @param searchParamsString Query params string
144
+ * @returns routerKey
156
145
  */
157
146
  const generateRouteKey = (match, searchParamsString = "") => {
158
- const { pathname, route } = match
159
- const sanitizedPathname = pathname
160
- const sanitizedParams = searchParamsString
161
- if (route.children) {
162
- return `index${sanitizedPathname}${sanitizedParams}`
163
- }
164
- return `${sanitizedPathname}${sanitizedParams}`
165
- }
147
+ const {
148
+ pathname,
149
+ route
150
+ } = match;
151
+ const sanitizedPathname = pathname;
152
+ const sanitizedParams = searchParamsString;
153
+ if (route.children) {
154
+ return `index${sanitizedPathname}${sanitizedParams}`;
155
+ }
156
+ return `${sanitizedPathname}${sanitizedParams}`;
157
+ };
166
158
 
167
159
  /**
168
- * @typedef RouterDataProviderProps
169
- * @property {any} initialState Initial State of Data Provider - Mostly used to hydrate client with data from server
170
- * @property {any} children
171
- * @property {Object.<string, any>} fetcherArgs anything passed in fetcherArgs is passed to all the fetcher functions
172
- * @property {RouterDataProviderConfig} config Global router data provider config
160
+ * Props accepted by {@link RouterDataProvider}.
173
161
  */
174
162
 
175
163
  /**
176
164
  * @description Render the child components with router context and execute data fetchers on path change
177
- * @param {RouterDataProviderProps} props
178
- * @returns React.JSX.Element
179
165
  */
180
- export const RouterDataProvider = ({ children, initialState, fetcherArgs = {}, config }) => {
181
- const match = useMatch("*")
182
- const location = useLocation()
183
- const params = useParams()
184
- const navigate = useNavigate()
185
- const [searchParams] = useSearchParams()
186
-
187
- const isHydrated = useRef(false)
188
- const routeContext = useContext(UNSAFE_RouteContext)
189
- const matchedRoutes = useMemo(() => getMatchedRoutes(routeContext), [routeContext])
166
+ export const RouterDataProvider = ({
167
+ children,
168
+ initialState,
169
+ fetcherArgs = {},
170
+ config = {}
171
+ }) => {
172
+ const match = useMatch("*");
173
+ const location = useLocation();
174
+ const params = useParams();
175
+ const navigate = useNavigate();
176
+ const [searchParams] = useSearchParams();
177
+ const isHydrated = useRef(false);
178
+ const routeContext = useContext(UNSAFE_RouteContext);
179
+ const matchedRoutes = useMemo(() => getMatchedRoutes(routeContext), [routeContext]);
190
180
 
191
- /**
192
- * @description HOF which returns a function to refetch the route data
193
- * @param {import("react-router-dom").RouteObject} route
194
- * @param {string} routeKey
195
- * @returns
196
- */
197
- const refetchData = (route, routeKey) => {
198
- return async (/** @type {{ [x: string]: any; } | undefined} */ args) => {
199
- setRouteData((prevData) => ({
200
- ...prevData,
201
- [routeKey]: { ...INITIAL_DATA_STATE, isFetching: true },
202
- }))
203
- const routerDataRes = await fetchRouteData(
204
- { route, location, params, searchParams, navigate },
205
- fetcherArgs,
206
- args
207
- )
208
- setRouteData((prevData) => ({
209
- ...prevData,
210
- [routeKey]: { ...routerDataRes, fetcherNotAvailable: false },
211
- }))
181
+ /**
182
+ * @description HOF which returns a function to refetch the route data
183
+ */
184
+ const refetchData = (route, routeKey) => {
185
+ return async args => {
186
+ setRouteData(prevData => ({
187
+ ...prevData,
188
+ [routeKey]: {
189
+ ...INITIAL_DATA_STATE,
190
+ isFetching: true
212
191
  }
213
- }
214
-
215
- /**
216
- * @description HOF which returns a function to clear the route data immediately or after given time in ms
217
- * @param {import("react-router-dom").RouteObject} route
218
- * @param {string} routeKey
219
- * @returns
220
- */
221
- const clear =
222
- (routeKey) =>
223
- (wait = 0) => {
224
- // TODO :: Need to think this use case
225
- // eslint-disable-next-line no-unused-vars
226
- const timeout = setTimeout(() => {
227
- setRouteData((prevData) => ({ ...prevData, [routeKey]: { ...INITIAL_DATA_STATE } }))
228
- }, [wait])
192
+ }));
193
+ const routerDataRes = await fetchRouteData({
194
+ route,
195
+ location,
196
+ params,
197
+ searchParams,
198
+ navigate
199
+ }, fetcherArgs, args);
200
+ setRouteData(prevData => ({
201
+ ...prevData,
202
+ [routeKey]: {
203
+ ...routerDataRes,
204
+ fetcherNotAvailable: false
229
205
  }
206
+ }));
207
+ };
208
+ };
230
209
 
231
- /**
232
- * @type {[Object.<string, RouteData>,React.Dispatch<React.SetStateAction<Object.<string, RouteData>>>]}
233
- */
234
- const [routeData, setRouteData] = useState(initialState)
235
-
236
- /**
237
- * @description Check the config for refetching the data
238
- * @param {import('react-router-dom').RouteObject} route
239
- * @returns {boolean}
240
- */
241
- const shouldFetch = (route) => {
242
- // do not refetch on first render if we get something in initialState
243
- if (!isHydrated.current && initialState) return false
244
-
245
- // config at route level over rides config at global level
246
- if (typeof route.disableCaching === "boolean") {
247
- return route.disableCaching
248
- } else if (typeof config.disableCaching === "boolean") {
249
- // refetch if caching is disabled at global level
250
- return config.disableCaching
210
+ /**
211
+ * @description HOF which returns a function to clear the route data immediately or after given time in ms
212
+ */
213
+ const clear = routeKey => (wait = 0) => {
214
+ // TODO :: Need to think this use case
215
+ // eslint-disable-next-line no-unused-vars
216
+ const timeout = setTimeout(() => {
217
+ setRouteData(prevData => ({
218
+ ...prevData,
219
+ [routeKey]: {
220
+ ...INITIAL_DATA_STATE
251
221
  }
252
- return false
253
- }
222
+ }));
223
+ }, [wait]);
224
+ };
225
+ const [routeData, setRouteData] = useState(initialState);
254
226
 
255
- useEffect(() => {
256
- matchedRoutes.forEach(async (match) => {
257
- const route = match.route
258
- const routeKey = generateRouteKey(match, location.search)
259
- if (routeData[routeKey]?.isFetched && !shouldFetch(route)) return
260
- setRouteData((prevData) => ({
261
- ...(prevData || {}),
262
- [routeKey]: { ...INITIAL_DATA_STATE, isFetching: true },
263
- }))
264
- const routerDataRes = await fetchRouteData(
265
- { route, location, params, searchParams, navigate },
266
- fetcherArgs
267
- )
268
- setRouteData((prevData) => ({ ...prevData, [routeKey]: { ...routerDataRes } }))
269
- })
270
- }, [match.pathname, match.params])
227
+ /**
228
+ * @description Check the config for refetching the data
229
+ */
230
+ const shouldFetch = route => {
231
+ // do not refetch on first render if we get something in initialState
232
+ if (!isHydrated.current && initialState) return false;
271
233
 
272
- return (
273
- <OneMgRouterContext.Provider value={{ matchedRoutes, refetchData, clear }}>
274
- <RouterContext.Provider value={{ ...routeData, refetch: refetchData }}>
234
+ // config at route level over rides config at global level
235
+ if (typeof route.disableCaching === "boolean") {
236
+ return route.disableCaching;
237
+ } else if (typeof config.disableCaching === "boolean") {
238
+ // refetch if caching is disabled at global level
239
+ return config.disableCaching;
240
+ }
241
+ return false;
242
+ };
243
+ useEffect(() => {
244
+ matchedRoutes.forEach(async match => {
245
+ const route = match.route;
246
+ const routeKey = generateRouteKey(match, location.search);
247
+ if (routeData[routeKey]?.isFetched && !shouldFetch(route)) return;
248
+ setRouteData(prevData => ({
249
+ ...(prevData || {}),
250
+ [routeKey]: {
251
+ ...INITIAL_DATA_STATE,
252
+ isFetching: true
253
+ }
254
+ }));
255
+ const routerDataRes = await fetchRouteData({
256
+ route,
257
+ location,
258
+ params,
259
+ searchParams,
260
+ navigate
261
+ }, fetcherArgs);
262
+ setRouteData(prevData => ({
263
+ ...prevData,
264
+ [routeKey]: {
265
+ ...routerDataRes
266
+ }
267
+ }));
268
+ });
269
+ }, [match.pathname, match.params]);
270
+ return <OneMgRouterContext.Provider value={{
271
+ matchedRoutes,
272
+ refetchData,
273
+ clear
274
+ }}>
275
+ <RouterContext.Provider value={{
276
+ ...routeData,
277
+ refetch: refetchData
278
+ }}>
275
279
  {children}
276
280
  </RouterContext.Provider>
277
- </OneMgRouterContext.Provider>
278
- )
279
- }
281
+ </OneMgRouterContext.Provider>;
282
+ };
280
283
 
281
284
  /**
282
285
  * @description returns current router context object with three values: data, error, isFetching, isFetched
283
- * @returns {RouteData}
284
286
  * @throws If used outside RouterDataProvider Context
285
287
  */
286
288
  export const useCurrentRouteData = () => {
287
- const routeContext = useContext(UNSAFE_RouteContext)
288
- const currentPageMatch = routeContext.matches[routeContext.matches.length - 1]
289
- const context = useContext(RouterContext)
290
- const { refetchData, clear } = useContext(OneMgRouterContext)
291
- const location = useLocation()
292
- // Throw error if the hook is not used within a RouterProvider
293
- if (context === undefined) {
294
- throw new Error("useCurrentRouteData must be used within a RouterDataProvider")
295
- }
296
-
297
- const routeKey = generateRouteKey(currentPageMatch, location.search)
298
- let currentPageData = context[routeKey]
299
-
300
- useEffect(() => {
301
- if (currentPageData?.fetcherNotAvailable) {
302
- refetchData(currentPageMatch.route, routeKey)()
303
- }
304
- }, [])
305
-
306
- if (!currentPageData) return { ...INITIAL_DATA_STATE }
307
-
308
- if (currentPageData) {
309
- delete currentPageData.fetcherNotAvailable
310
- currentPageData = {
311
- ...currentPageData,
312
- refetch: refetchData(currentPageMatch.route, routeKey),
313
- clear: clear(routeKey),
314
- }
289
+ const routeContext = useContext(UNSAFE_RouteContext);
290
+ const currentPageMatch = routeContext.matches[routeContext.matches.length - 1];
291
+ const context = useContext(RouterContext);
292
+ const {
293
+ refetchData,
294
+ clear
295
+ } = useContext(OneMgRouterContext);
296
+ const location = useLocation();
297
+ // Throw error if the hook is not used within a RouterProvider
298
+ if (context === undefined) {
299
+ throw new Error("useCurrentRouteData must be used within a RouterDataProvider");
300
+ }
301
+ const routeKey = generateRouteKey(currentPageMatch, location.search);
302
+ let currentPageData = context[routeKey];
303
+ useEffect(() => {
304
+ if (currentPageData?.fetcherNotAvailable) {
305
+ refetchData(currentPageMatch.route, routeKey)();
315
306
  }
316
- return currentPageData
317
- }
307
+ }, []);
308
+ if (!currentPageData) return {
309
+ ...INITIAL_DATA_STATE
310
+ };
311
+ if (currentPageData) {
312
+ delete currentPageData.fetcherNotAvailable;
313
+ currentPageData = {
314
+ ...currentPageData,
315
+ refetch: refetchData(currentPageMatch.route, routeKey),
316
+ clear: clear(routeKey)
317
+ };
318
+ }
319
+ return currentPageData;
320
+ };
318
321
 
319
322
  /**
320
323
  * @description returns a router context object with data of all the fetchers in current route tree
321
- * @returns {Object.<string, RouteData>}
322
324
  * @throws If used outside RouterDataProvider Context
323
325
  */
324
326
  export const useRouterData = () => {
325
- const context = useContext(RouterContext)
326
- // Throw error if the hook is not used within a RouterProvider
327
- if (context === undefined) {
328
- throw new Error("useRouterData must be used within a RouterDataProvider")
329
- }
330
-
331
- return context
332
- }
327
+ const context = useContext(RouterContext);
328
+ // Throw error if the hook is not used within a RouterProvider
329
+ if (context === undefined) {
330
+ throw new Error("useRouterData must be used within a RouterDataProvider");
331
+ }
332
+ return context;
333
+ };