catalyst-core 0.3.0-beta.5 → 0.3.0-canary.2

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 +185 -71
  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 +12 -5
  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 -3
  205. package/dist/scripts/start.js +8 -3
  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 +25 -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 +2 -29
  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 +115 -17
  266. package/mcp_v2/mcp.js +141 -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 +118 -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 +330 -0
  291. package/test/server/handler.test.ts +208 -0
  292. package/test/server/manifestCache.test.ts +71 -0
  293. package/test/server/render.test.ts +71 -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 +225 -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 -40
  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,106 +1,95 @@
1
- import React, { useState, useEffect, useRef } from "react"
1
+ import React, { useState, useEffect, useRef } from "react";
2
2
 
3
3
  // Load components 75% of viewport below the fold so they're ready by the time
4
4
  // the user scrolls to them. Matches react-loadable-visibility's default.
5
- const DEFAULT_ROOT_MARGIN = "0px 0px 75% 0px"
5
+ const DEFAULT_ROOT_MARGIN = "0px 0px 75% 0px";
6
6
 
7
7
  // Shared IntersectionObserver for the default (no rootOptions) path.
8
8
  // Each observed element maps to a callback that fires once and unobserves.
9
- const callbacks = new Map()
10
- let sharedObserver = null
11
-
9
+ const callbacks = new Map();
10
+ let sharedObserver = null;
12
11
  function getSharedObserver() {
13
- if (sharedObserver) return sharedObserver
14
- sharedObserver = new IntersectionObserver(
15
- (entries) => {
16
- entries.forEach((entry) => {
17
- if (entry.isIntersecting || entry.intersectionRatio > 0) {
18
- const cb = callbacks.get(entry.target)
19
- if (cb) {
20
- cb()
21
- callbacks.delete(entry.target)
22
- sharedObserver.unobserve(entry.target)
23
- }
24
- }
25
- })
26
- },
27
- { rootMargin: DEFAULT_ROOT_MARGIN }
28
- )
29
- return sharedObserver
12
+ if (sharedObserver) return sharedObserver;
13
+ sharedObserver = new IntersectionObserver(entries => {
14
+ entries.forEach(entry => {
15
+ if (entry.isIntersecting || entry.intersectionRatio > 0) {
16
+ const cb = callbacks.get(entry.target);
17
+ if (cb) {
18
+ cb();
19
+ callbacks.delete(entry.target);
20
+ sharedObserver.unobserve(entry.target);
21
+ }
22
+ }
23
+ });
24
+ }, {
25
+ rootMargin: DEFAULT_ROOT_MARGIN
26
+ });
27
+ return sharedObserver;
30
28
  }
29
+ const hasCustomOptions = o => o && typeof o === "object" && (o.root != null || o.rootMargin != null || o.threshold != null);
31
30
 
32
- const hasCustomOptions = (o) =>
33
- o && typeof o === "object" && (o.root != null || o.rootMargin != null || o.threshold != null)
31
+ /**
32
+ * Props for the internal visibility-deferring wrapper. Not part of the public
33
+ * surface: `split()` supplies these from its own options.
34
+ */
34
35
 
35
36
  /**
36
37
  * Defers rendering of children until the placeholder enters the viewport.
37
38
  * Once visible, it stays visible.
38
39
  *
39
40
  * On the server or when IntersectionObserver is unavailable, children render immediately.
40
- *
41
- * @param {Object} props
42
- * @param {React.ReactNode} props.fallback - Shown while the component is outside the viewport
43
- * @param {React.ReactNode} props.children - Rendered once the placeholder scrolls into view
44
- * @param {Object=} props.rootOptions - Optional IntersectionObserver options for parity with react-loadable-visibility
45
- * @param {Function=} props.onVisible - Called once when the placeholder enters the viewport
46
41
  */
47
- const SplitInview = ({ fallback = null, children, rootOptions, onVisible }) => {
48
- const isServer = typeof window === "undefined"
49
- const [isVisible, setIsVisible] = useState(() => {
50
- if (isServer) return true
51
- if (!window.IntersectionObserver) return true
52
- return false
53
- })
54
- const ref = useRef(null)
55
- // Freeze rootOptions at mount. IO options are not expected to change mid-lifecycle,
56
- // so we avoid array/object identity churn (e.g. inline `threshold: [0, 0.5, 1]`).
57
- const rootOptionsRef = useRef(rootOptions)
58
- const onVisibleRef = useRef(onVisible)
59
- onVisibleRef.current = onVisible
60
-
61
- useEffect(() => {
62
- if (isVisible) return
63
- const node = ref.current
64
- if (!node) return
65
-
66
- const opts = rootOptionsRef.current
67
- const fire = () => {
68
- setIsVisible(true)
69
- onVisibleRef.current?.()
42
+ const SplitInview = ({
43
+ fallback = null,
44
+ children,
45
+ rootOptions,
46
+ onVisible
47
+ }) => {
48
+ const isServer = typeof window === "undefined";
49
+ const [isVisible, setIsVisible] = useState(() => {
50
+ if (isServer) return true;
51
+ if (!window.IntersectionObserver) return true;
52
+ return false;
53
+ });
54
+ const ref = useRef(null);
55
+ // Freeze rootOptions at mount. IO options are not expected to change mid-lifecycle,
56
+ // so we avoid array/object identity churn (e.g. inline `threshold: [0, 0.5, 1]`).
57
+ const rootOptionsRef = useRef(rootOptions);
58
+ const onVisibleRef = useRef(onVisible);
59
+ onVisibleRef.current = onVisible;
60
+ useEffect(() => {
61
+ if (isVisible) return;
62
+ const node = ref.current;
63
+ if (!node) return;
64
+ const opts = rootOptionsRef.current;
65
+ const fire = () => {
66
+ setIsVisible(true);
67
+ onVisibleRef.current?.();
68
+ };
69
+ if (!hasCustomOptions(opts)) {
70
+ callbacks.set(node, fire);
71
+ getSharedObserver().observe(node);
72
+ return () => {
73
+ callbacks.delete(node);
74
+ if (sharedObserver) sharedObserver.unobserve(node);
75
+ };
76
+ }
77
+ const observer = new IntersectionObserver(entries => {
78
+ entries.forEach(entry => {
79
+ if (entry.isIntersecting || entry.intersectionRatio > 0) {
80
+ fire();
81
+ observer.unobserve(entry.target);
70
82
  }
71
-
72
- if (!hasCustomOptions(opts)) {
73
- callbacks.set(node, fire)
74
- getSharedObserver().observe(node)
75
- return () => {
76
- callbacks.delete(node)
77
- if (sharedObserver) sharedObserver.unobserve(node)
78
- }
79
- }
80
-
81
- const observer = new IntersectionObserver(
82
- (entries) => {
83
- entries.forEach((entry) => {
84
- if (entry.isIntersecting || entry.intersectionRatio > 0) {
85
- fire()
86
- observer.unobserve(entry.target)
87
- }
88
- })
89
- },
90
- {
91
- root: opts.root ?? null,
92
- rootMargin: opts.rootMargin ?? DEFAULT_ROOT_MARGIN,
93
- threshold: opts.threshold,
94
- }
95
- )
96
-
97
- observer.observe(node)
98
- return () => observer.disconnect()
99
- }, [isVisible])
100
-
101
- if (isVisible) return children
102
-
103
- return <div ref={ref}>{fallback}</div>
104
- }
105
-
106
- export default SplitInview
83
+ });
84
+ }, {
85
+ root: opts.root ?? null,
86
+ rootMargin: opts.rootMargin ?? DEFAULT_ROOT_MARGIN,
87
+ threshold: opts.threshold
88
+ });
89
+ observer.observe(node);
90
+ return () => observer.disconnect();
91
+ }, [isVisible]);
92
+ if (isVisible) return children;
93
+ return <div ref={ref}>{fallback}</div>;
94
+ };
95
+ export default SplitInview;
@@ -0,0 +1,112 @@
1
+ import React from "react"
2
+ import { describe, expect, it, vi, beforeEach, afterEach } from "vitest"
3
+ import { render, screen, act } from "@testing-library/react"
4
+ import SplitInview from "./SplitInview.jsx"
5
+
6
+ // jsdom does not implement IntersectionObserver -- stub it here and
7
+ // capture the callback/options so tests can simulate an intersection
8
+ // firing without a real layout engine.
9
+ let observedNodes
10
+ let ioCallback
11
+ let ioOptions
12
+
13
+ class FakeIntersectionObserver {
14
+ constructor(callback, options) {
15
+ ioCallback = callback
16
+ ioOptions = options
17
+ observedNodes = []
18
+ }
19
+ observe(node) {
20
+ observedNodes.push(node)
21
+ }
22
+ unobserve(node) {
23
+ observedNodes = observedNodes.filter((n) => n !== node)
24
+ }
25
+ disconnect() {
26
+ observedNodes = []
27
+ }
28
+ }
29
+
30
+ function fireIntersection(node, isIntersecting = true) {
31
+ ioCallback([{ target: node, isIntersecting, intersectionRatio: isIntersecting ? 1 : 0 }])
32
+ }
33
+
34
+ beforeEach(() => {
35
+ vi.stubGlobal("IntersectionObserver", FakeIntersectionObserver)
36
+ })
37
+
38
+ afterEach(() => {
39
+ vi.unstubAllGlobals()
40
+ })
41
+
42
+ describe("SplitInview", () => {
43
+ it("renders the fallback placeholder before becoming visible", () => {
44
+ render(
45
+ <SplitInview fallback={<span>loading</span>}>
46
+ <span>real content</span>
47
+ </SplitInview>
48
+ )
49
+ expect(screen.getByText("loading")).toBeInTheDocument()
50
+ expect(screen.queryByText("real content")).not.toBeInTheDocument()
51
+ })
52
+
53
+ it("renders children once the observer reports an intersection", () => {
54
+ render(
55
+ <SplitInview fallback={<span>loading</span>}>
56
+ <span>real content</span>
57
+ </SplitInview>
58
+ )
59
+ const node = observedNodes[0]
60
+ act(() => {
61
+ fireIntersection(node, true)
62
+ })
63
+ expect(screen.getByText("real content")).toBeInTheDocument()
64
+ })
65
+
66
+ it("calls onVisible exactly once when it becomes visible", () => {
67
+ const onVisible = vi.fn()
68
+ render(
69
+ <SplitInview fallback={<span>loading</span>} onVisible={onVisible}>
70
+ <span>real content</span>
71
+ </SplitInview>
72
+ )
73
+ const node = observedNodes[0]
74
+ act(() => {
75
+ fireIntersection(node, true)
76
+ fireIntersection(node, true)
77
+ })
78
+ expect(onVisible).toHaveBeenCalledTimes(1)
79
+ })
80
+
81
+ it("ignores non-intersecting entries", () => {
82
+ render(
83
+ <SplitInview fallback={<span>loading</span>}>
84
+ <span>real content</span>
85
+ </SplitInview>
86
+ )
87
+ const node = observedNodes[0]
88
+ act(() => {
89
+ fireIntersection(node, false)
90
+ })
91
+ expect(screen.queryByText("real content")).not.toBeInTheDocument()
92
+ })
93
+
94
+ it("renders children immediately when IntersectionObserver is unavailable", () => {
95
+ vi.stubGlobal("IntersectionObserver", undefined)
96
+ render(
97
+ <SplitInview fallback={<span>loading</span>}>
98
+ <span>real content</span>
99
+ </SplitInview>
100
+ )
101
+ expect(screen.getByText("real content")).toBeInTheDocument()
102
+ })
103
+
104
+ it("uses a dedicated observer (not the shared default) when rootOptions are given", () => {
105
+ render(
106
+ <SplitInview fallback={<span>loading</span>} rootOptions={{ threshold: 0.5 }}>
107
+ <span>real content</span>
108
+ </SplitInview>
109
+ )
110
+ expect(ioOptions.threshold).toBe(0.5)
111
+ })
112
+ })
@@ -0,0 +1,20 @@
1
+ import React from "react";
2
+ /**
3
+ * Request-scoped SSR flags. `isBot` is true when the request User-Agent matched
4
+ * a known crawler, which forces `ssr: false` split components to render on the
5
+ * server anyway.
6
+ */
7
+ export interface SsrRequestContextValue {
8
+ isBot: boolean;
9
+ }
10
+ export interface SsrRequestProviderProps {
11
+ value?: SsrRequestContextValue | null;
12
+ children?: any;
13
+ }
14
+ /**
15
+ * SSR request flags (e.g. crawler UA). Set by the document handler via SsrRequestProvider.
16
+ * Kept separate from Split.jsx so the server handler does not import lazy/Suspense code.
17
+ * `window.__CATALYST_IS_BOT__` is inlined for bots that execute JS so hydration matches the server.
18
+ */
19
+ export declare const SsrRequestContext: React.Context<SsrRequestContextValue>;
20
+ export declare function SsrRequestProvider({ value, children }: SsrRequestProviderProps): React.JSX.Element;
@@ -1,14 +1,24 @@
1
- import React, { createContext } from "react"
1
+ import React, { createContext } from "react";
2
+
3
+ /**
4
+ * Request-scoped SSR flags. `isBot` is true when the request User-Agent matched
5
+ * a known crawler, which forces `ssr: false` split components to render on the
6
+ * server anyway.
7
+ */
2
8
 
3
9
  /**
4
10
  * SSR request flags (e.g. crawler UA). Set by the document handler via SsrRequestProvider.
5
11
  * Kept separate from Split.jsx so the server handler does not import lazy/Suspense code.
6
12
  * `window.__CATALYST_IS_BOT__` is inlined for bots that execute JS so hydration matches the server.
7
13
  */
8
- export const SsrRequestContext = createContext({ isBot: false })
9
-
10
- export function SsrRequestProvider({ value, children }) {
11
- return (
12
- <SsrRequestContext.Provider value={value ?? { isBot: false }}>{children}</SsrRequestContext.Provider>
13
- )
14
+ export const SsrRequestContext = createContext({
15
+ isBot: false
16
+ });
17
+ export function SsrRequestProvider({
18
+ value,
19
+ children
20
+ }) {
21
+ return <SsrRequestContext.Provider value={value ?? {
22
+ isBot: false
23
+ }}>{children}</SsrRequestContext.Provider>;
14
24
  }
@@ -0,0 +1,53 @@
1
+ import React, { useContext } from "react"
2
+ import { describe, expect, it } from "vitest"
3
+ import { render, screen } from "@testing-library/react"
4
+ import { SsrRequestContext, SsrRequestProvider } from "./SsrRequestContext.jsx"
5
+
6
+ function ContextReader() {
7
+ const value = useContext(SsrRequestContext)
8
+ return <div data-testid="value">{JSON.stringify(value)}</div>
9
+ }
10
+
11
+ describe("SsrRequestContext", () => {
12
+ it("defaults to { isBot: false }", () => {
13
+ expect(SsrRequestContext._currentValue).toEqual({ isBot: false })
14
+ })
15
+ })
16
+
17
+ describe("SsrRequestProvider", () => {
18
+ it("provides the given value to descendants", () => {
19
+ render(
20
+ <SsrRequestProvider value={{ isBot: true }}>
21
+ <ContextReader />
22
+ </SsrRequestProvider>
23
+ )
24
+ expect(screen.getByTestId("value")).toHaveTextContent(JSON.stringify({ isBot: true }))
25
+ })
26
+
27
+ it("falls back to { isBot: false } when value is null", () => {
28
+ render(
29
+ <SsrRequestProvider value={null}>
30
+ <ContextReader />
31
+ </SsrRequestProvider>
32
+ )
33
+ expect(screen.getByTestId("value")).toHaveTextContent(JSON.stringify({ isBot: false }))
34
+ })
35
+
36
+ it("falls back to { isBot: false } when value is undefined (not passed)", () => {
37
+ render(
38
+ <SsrRequestProvider>
39
+ <ContextReader />
40
+ </SsrRequestProvider>
41
+ )
42
+ expect(screen.getByTestId("value")).toHaveTextContent(JSON.stringify({ isBot: false }))
43
+ })
44
+
45
+ it("renders its children", () => {
46
+ render(
47
+ <SsrRequestProvider value={{ isBot: false }}>
48
+ <span>child content</span>
49
+ </SsrRequestProvider>
50
+ )
51
+ expect(screen.getByText("child content")).toBeInTheDocument()
52
+ })
53
+ })
@@ -0,0 +1,15 @@
1
+ import type { RouteMatch, RouteObject } from "react-router";
2
+ /**
3
+ * Internal context shared among the router components. `matchedRoutes` is the
4
+ * match chain for the current location; the two callbacks are supplied by
5
+ * RouterDataProvider and consumed by useCurrentRouteData.
6
+ */
7
+ export interface OneMgRouterContextValue {
8
+ matchedRoutes?: RouteMatch<string, RouteObject>[];
9
+ refetchData?: (route: RouteObject, routeKey: string) => (args?: Record<string, any>) => void | Promise<void>;
10
+ clear?: (routeKey: string) => (wait?: number) => void;
11
+ }
12
+ /**
13
+ * @description This is internal context made for sharing data among router components
14
+ */
15
+ export declare const OneMgRouterContext: import("react").Context<OneMgRouterContextValue>;
@@ -1,12 +1,12 @@
1
- import { createContext } from "react"
1
+ import { createContext } from "react";
2
2
 
3
3
  /**
4
- * @typedef oneMgRouterContext
5
- * @property {import("react-router").RouteMatch<string, import("react-router").RouteObject>[]=} matchedRoutes
4
+ * Internal context shared among the router components. `matchedRoutes` is the
5
+ * match chain for the current location; the two callbacks are supplied by
6
+ * RouterDataProvider and consumed by useCurrentRouteData.
6
7
  */
7
8
 
8
9
  /**
9
10
  * @description This is internal context made for sharing data among router components
10
- * @type {import("react").Context<oneMgRouterContext>}
11
11
  */
12
- export const OneMgRouterContext = createContext({})
12
+ export const OneMgRouterContext = createContext({});
@@ -0,0 +1,10 @@
1
+ import { describe, expect, it } from "vitest"
2
+ import { OneMgRouterContext } from "./context.jsx"
3
+
4
+ describe("OneMgRouterContext", () => {
5
+ it("is a React context with an empty object default value", () => {
6
+ expect(OneMgRouterContext.Provider).toBeDefined()
7
+ expect(OneMgRouterContext.Consumer).toBeDefined()
8
+ expect(OneMgRouterContext._currentValue).toEqual({})
9
+ })
10
+ })
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Merges multiple lists of head elements, ensuring that later lists override earlier ones in case of duplicates.
3
+ * Handles all types of head elements, including title, meta, link, etc.
4
+ *
5
+ * @param lists - Multiple lists of JSX head elements, where the first argument is the parent and the rest are children in order.
6
+ * @returns The combined list with later lists overriding duplicates from earlier ones.
7
+ */
8
+ export declare function mergeHeadElements(...lists: any[]): any[];
9
+ /**
10
+ * Deletes all elements in the head with a specific data attribute.
11
+ *
12
+ * @param attributeName - The name of the data attribute to search for.
13
+ * @param attributeValue - The specific value of the data attribute to match (optional).
14
+ */
15
+ export declare function deleteHeadTagsByDataAttribute(attributeName: string, attributeValue?: string): void;
16
+ /**
17
+ * Returns resolved array of meta data elements.
18
+ *
19
+ *
20
+ * @param matchedRoutes - Array of all matches.
21
+ * @param routeData - Data returned from Router.
22
+ * @returns List of all meta tags for the matched location.
23
+ */
24
+ export declare function getMetaData(matchedRoutes: any, routeData: any): any[];