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.
- package/changelog.md +185 -71
- package/dist/errors/generateDocs.js +100 -0
- package/dist/errors/index.js +243 -0
- package/dist/errors/registry.js +483 -0
- package/dist/errors-index.json +506 -0
- package/dist/globals.d.ts +62 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.jsx +5 -8
- package/dist/logger.js +1 -1
- package/dist/native/androidProject/app/build.gradle.kts +142 -7
- package/dist/native/androidProject/app/src/main/AndroidManifest.xml +4 -0
- package/dist/native/androidProject/app/src/main/java/io/yourname/androidproject/NativeBridge.kt +2 -2
- package/dist/native/androidProject/app/src/main/java/io/yourname/androidproject/camera/BarcodeDetector.kt +3 -0
- package/dist/native/androidProject/app/src/main/java/io/yourname/androidproject/camera/CameraSessionManager.kt +3 -0
- package/dist/native/androidProject/app/src/main/java/io/yourname/androidproject/utils/FrameworkServerUtils.kt +43 -8
- package/dist/native/androidProject/app/src/test/java/io/yourname/androidproject/BridgeUtilsTest.kt +181 -1
- package/dist/native/androidProject/app/src/test/java/io/yourname/androidproject/CameraUtilsTest.kt +156 -236
- package/dist/native/androidProject/app/src/test/java/io/yourname/androidproject/FileSizeRouterUtilsTest.kt +471 -0
- package/dist/native/androidProject/app/src/test/java/io/yourname/androidproject/FileUtilsTest.kt +222 -226
- package/dist/native/androidProject/app/src/test/java/io/yourname/androidproject/FrameworkServerUtilsTest.kt +300 -0
- package/dist/native/androidProject/app/src/test/java/io/yourname/androidproject/IntentUtilsTest.kt +244 -0
- package/dist/native/androidProject/app/src/test/java/io/yourname/androidproject/MetricsMonitorTest.kt +359 -0
- package/dist/native/androidProject/app/src/test/java/io/yourname/androidproject/NativeBridgeTest.kt +108 -63
- package/dist/native/androidProject/app/src/test/java/io/yourname/androidproject/NotificationUtilsTest.kt +329 -385
- package/dist/native/androidProject/app/src/test/java/io/yourname/androidproject/OfflineCacheServiceTest.kt +302 -0
- package/dist/native/androidProject/app/src/test/java/io/yourname/androidproject/PerfEventBufferTest.kt +133 -0
- package/dist/native/androidProject/app/src/test/java/io/yourname/androidproject/UtilsKtTest.kt +152 -0
- package/dist/native/androidProject/app/src/test/java/io/yourname/androidproject/WebCacheManagerTest.kt +145 -324
- package/dist/native/androidProject/app/src/test/java/io/yourname/androidproject/camera/BarcodeDetectorTest.kt +132 -0
- package/dist/native/androidProject/app/src/test/java/io/yourname/androidproject/camera/HoldControllerTest.kt +155 -0
- package/dist/native/androidProject/app/src/test/java/io/yourname/androidproject/camera/TorchControllerTest.kt +150 -0
- package/dist/native/androidProject/app/src/test/java/io/yourname/androidproject/camera/VideoStreamStateMachineTest.kt +120 -0
- package/dist/native/androidProject/app/src/test/java/io/yourname/androidproject/camera/VideoStreamStateTest.kt +62 -0
- package/dist/native/androidProject/app/src/test/java/io/yourname/androidproject/camera/ViewfinderMapperTest.kt +143 -0
- package/dist/native/androidProject/app/src/test/java/io/yourname/androidproject/camera/ZoomControllerTest.kt +421 -0
- package/dist/native/androidProject/app/src/test/java/io/yourname/androidproject/design/DesignTokensTest.kt +207 -0
- package/dist/native/androidProject/app/src/test/java/io/yourname/androidproject/plugins/PluginBridgeTest.kt +368 -0
- package/dist/native/androidProject/app/src/test/java/io/yourname/androidproject/security/FridaDetectorTest.kt +193 -0
- package/dist/native/androidProject/app/src/test/java/io/yourname/androidproject/security/SecurityCheckManagerTest.kt +260 -0
- package/dist/native/androidProject/app/src/test/java/io/yourname/androidproject/security/SecurityCheckSchedulerTest.kt +166 -0
- package/dist/native/androidProject/app/src/test/java/io/yourname/androidproject/utils/DeviceInfoUtilsTest.kt +167 -0
- package/dist/native/androidProject/app/src/test/java/io/yourname/androidproject/utils/DownloadUtilsTest.kt +197 -0
- package/dist/native/androidProject/app/src/test/java/io/yourname/androidproject/utils/NetworkMonitorTest.kt +271 -0
- package/dist/native/androidProject/app/src/test/java/io/yourname/androidproject/utils/PushNotificationUtilsTest.kt +119 -0
- package/dist/native/androidProject/app/src/test/java/io/yourname/androidproject/utils/SafeAreaUtilsTest.kt +108 -0
- package/dist/native/androidProject/build.gradle.kts +1 -0
- package/dist/native/androidProject/gradle/libs.versions.toml +26 -0
- package/dist/native/androidProject/settings.gradle.kts +11 -8
- package/dist/native/androidSetup.js +2 -2
- package/dist/native/bridge/WebBridge.d.ts +98 -0
- package/dist/native/bridge/WebBridge.js +40 -6
- package/dist/native/bridge/constants/NativeInterfaces.d.ts +391 -0
- package/dist/native/bridge/errors.d.ts +67 -0
- package/dist/native/bridge/errors.js +66 -151
- package/dist/native/bridge/hooks/index.d.ts +13 -0
- package/dist/native/bridge/hooks/index.js +0 -6
- package/dist/native/bridge/hooks/useAI.d.ts +1 -0
- package/dist/native/bridge/hooks/useAI.js +3 -1
- package/dist/native/bridge/hooks/useCamera.d.ts +86 -0
- package/dist/native/bridge/hooks/useCamera.js +35 -6
- package/dist/native/bridge/hooks/useDataProtection.d.ts +17 -0
- package/dist/native/bridge/hooks/useDeviceInfo.d.ts +34 -0
- package/dist/native/bridge/hooks/useDeviceInfo.js +5 -0
- package/dist/native/bridge/hooks/useFilePicker.d.ts +53 -0
- package/dist/native/bridge/hooks/useFilePicker.js +13 -0
- package/dist/native/bridge/hooks/useGoogleSignIn.d.ts +12 -0
- package/dist/native/bridge/hooks/useHapticFeedback.d.ts +76 -0
- package/dist/native/bridge/hooks/useHapticFeedback.js +6 -1
- package/dist/native/bridge/hooks/useIntent.d.ts +33 -0
- package/dist/native/bridge/hooks/useIntent.js +2 -0
- package/dist/native/bridge/hooks/useNativeTransition.d.ts +53 -0
- package/dist/native/bridge/hooks/useNativeTransition.js +12 -5
- package/dist/native/bridge/hooks/useNetworkStatus.d.ts +22 -0
- package/dist/native/bridge/hooks/useNetworkStatus.js +7 -0
- package/dist/native/bridge/hooks/useNotification.d.ts +83 -0
- package/dist/native/bridge/hooks/useNotification.js +81 -34
- package/dist/native/bridge/hooks/useSafeArea.d.ts +12 -0
- package/dist/native/bridge/hooks/useSafeArea.js +8 -0
- package/dist/native/bridge/hooks/useVideoStream.d.ts +67 -0
- package/dist/native/bridge/hooks/useVideoStream.js +38 -52
- package/dist/native/bridge/hooks/utils.d.ts +4 -0
- package/dist/native/bridge/hooks.d.ts +1 -0
- package/dist/native/bridge/perf/collectors/ApiCollector.d.ts +30 -0
- package/dist/native/bridge/perf/collectors/ApiCollector.js +4 -0
- package/dist/native/bridge/perf/collectors/CacheCollector.d.ts +43 -0
- package/dist/native/bridge/perf/collectors/CacheCollector.js +4 -0
- package/dist/native/bridge/perf/collectors/HookCollector.d.ts +37 -0
- package/dist/native/bridge/perf/collectors/HookCollector.js +4 -0
- package/dist/native/bridge/perf/collectors/InsightsCollector.d.ts +103 -0
- package/dist/native/bridge/perf/collectors/InsightsCollector.js +4 -0
- package/dist/native/bridge/perf/collectors/InteractionCollector.d.ts +53 -0
- package/dist/native/bridge/perf/collectors/InteractionCollector.js +4 -0
- package/dist/native/bridge/perf/collectors/KeyboardCollector.d.ts +30 -0
- package/dist/native/bridge/perf/collectors/KeyboardCollector.js +4 -0
- package/dist/native/bridge/perf/collectors/NavigationCollector.d.ts +37 -0
- package/dist/native/bridge/perf/collectors/NavigationCollector.js +4 -0
- package/dist/native/bridge/perf/collectors/NetworkTimingCollector.d.ts +30 -0
- package/dist/native/bridge/perf/collectors/NetworkTimingCollector.js +4 -0
- package/dist/native/bridge/perf/collectors/RenderCollector.d.ts +47 -0
- package/dist/native/bridge/perf/collectors/RenderCollector.js +8 -0
- package/dist/native/bridge/perf/collectors/ScrollCollector.d.ts +29 -0
- package/dist/native/bridge/perf/collectors/ScrollCollector.js +4 -0
- package/dist/native/bridge/perf/collectors/ThreadCollector.d.ts +31 -0
- package/dist/native/bridge/perf/collectors/ThreadCollector.js +4 -0
- package/dist/native/bridge/perf/core/constants.d.ts +76 -0
- package/dist/native/bridge/perf/core/measure.d.ts +39 -0
- package/dist/native/bridge/perf/core/measure.js +4 -0
- package/dist/native/bridge/perf/core/session.d.ts +49 -0
- package/dist/native/bridge/perf/core/session.js +4 -0
- package/dist/native/bridge/perf/core/store.d.ts +37 -0
- package/dist/native/bridge/perf/core/store.js +4 -0
- package/dist/native/bridge/perf/core/summary.d.ts +60 -0
- package/dist/native/bridge/perf/core/traceExport.d.ts +10 -0
- package/dist/native/bridge/perf/core/waterfalls.d.ts +2 -0
- package/dist/native/bridge/perf/index.d.ts +63 -0
- package/dist/native/bridge/perf/index.js +4 -0
- package/dist/native/bridge/safeArea.d.ts +11 -0
- package/dist/native/bridge/safeArea.js +2 -0
- package/dist/native/bridge/useBaseHook.d.ts +137 -0
- package/dist/native/bridge/useBaseHook.js +34 -4
- package/dist/native/bridge/utils/CameraUtils.d.ts +94 -0
- package/dist/native/bridge/utils/CameraUtils.js +4 -0
- package/dist/native/bridge/utils/FileObjectConverter.d.ts +36 -0
- package/dist/native/bridge/utils/NativeBridge.d.ts +270 -0
- package/dist/native/bridge/utils/NativeBridge.js +10 -0
- package/dist/native/buildAndroid/index.js +1 -1
- package/dist/native/buildAppAndroid.js +9 -0
- package/dist/native/buildAppIos.js +16 -1
- package/dist/native/buildErrorFormat.js +57 -0
- package/dist/native/buildIos/config.js +15 -1
- package/dist/native/buildIos/index.js +1 -1
- package/dist/native/buildIos/plugins.js +10 -1
- package/dist/native/iosnativeWebView/CoreLogic/Package.swift +36 -0
- package/dist/native/iosnativeWebView/{Sources/Core → CoreLogic/Sources/CatalystCoreLogic}/Camera/VideoStreamState.swift +1 -1
- package/dist/native/iosnativeWebView/{Sources/Core → CoreLogic/Sources/CatalystCoreLogic}/Camera/VideoStreamStateMachine.swift +6 -4
- package/dist/native/iosnativeWebView/{Sources/Core → CoreLogic/Sources/CatalystCoreLogic}/Utils/BootTimingUtility.swift +3 -3
- package/dist/native/iosnativeWebView/{Sources/Core → CoreLogic/Sources/CatalystCoreLogic}/Utils/FrameworkServerUtils.swift +14 -9
- package/dist/native/iosnativeWebView/{Sources/Core → CoreLogic/Sources/CatalystCoreLogic}/Utils/NetworkMonitor.swift +11 -9
- package/dist/native/iosnativeWebView/{Sources/Core → CoreLogic/Sources/CatalystCoreLogic}/Utils/NotificationHandlerProvider.swift +1 -1
- package/dist/native/iosnativeWebView/{Sources/Core → CoreLogic/Sources/CatalystCoreLogic}/Utils/URLWhitelistManager.swift +7 -7
- package/dist/native/iosnativeWebView/CoreLogic/Tests/CatalystCoreLogicTests/AnyCodableTests.swift +154 -0
- package/dist/native/iosnativeWebView/{iosnativeWebViewTests → CoreLogic/Tests/CatalystCoreLogicTests}/BootTimingUtilityTests.swift +23 -5
- package/dist/native/iosnativeWebView/CoreLogic/Tests/CatalystCoreLogicTests/CatalystConstantsTests.swift +192 -0
- package/dist/native/iosnativeWebView/{iosnativeWebViewTests → CoreLogic/Tests/CatalystCoreLogicTests}/ConfigMappingTests.swift +1 -1
- package/dist/native/iosnativeWebView/CoreLogic/Tests/CatalystCoreLogicTests/FrameworkServerUtilsErrorPathTests.swift +106 -0
- package/dist/native/iosnativeWebView/CoreLogic/Tests/CatalystCoreLogicTests/FrameworkServerUtilsLoopbackTests.swift +243 -0
- package/dist/native/iosnativeWebView/{iosnativeWebViewTests → CoreLogic/Tests/CatalystCoreLogicTests}/FrameworkServerUtilsTests.swift +1 -1
- package/dist/native/iosnativeWebView/CoreLogic/Tests/CatalystCoreLogicTests/NetworkMonitorTests.swift +119 -0
- package/dist/native/iosnativeWebView/CoreLogic/Tests/CatalystCoreLogicTests/NotificationHandlerProviderTests.swift +59 -0
- package/dist/native/iosnativeWebView/{iosnativeWebViewTests → CoreLogic/Tests/CatalystCoreLogicTests}/NotificationHandlerTests.swift +1 -1
- package/dist/native/iosnativeWebView/{iosnativeWebViewTests → CoreLogic/Tests/CatalystCoreLogicTests}/URLWhitelistManagerTests.swift +1 -1
- package/dist/native/iosnativeWebView/CoreLogic/Tests/CatalystCoreLogicTests/VideoStreamStateMachineTests.swift +171 -0
- package/dist/native/iosnativeWebView/CoreLogic/Tests/CatalystCoreLogicTests/VideoStreamStateTests.swift +91 -0
- package/dist/native/iosnativeWebView/Package.swift +10 -9
- package/dist/native/iosnativeWebView/Sources/CatalystNotifications/LocalNotificationHandler.swift +7 -2
- package/dist/native/iosnativeWebView/Sources/CatalystNotifications/NotificationManager.swift +1 -2
- package/dist/native/iosnativeWebView/Sources/CatalystNotifications/PushNotificationHandler.swift +5 -4
- package/dist/native/iosnativeWebView/Sources/Core/Camera/CameraSessionManager.swift +1 -0
- package/dist/native/iosnativeWebView/Sources/Core/Camera/HoldController.swift +1 -0
- package/dist/native/iosnativeWebView/Sources/Core/Camera/NativeCameraManager.swift +6 -5
- package/dist/native/iosnativeWebView/Sources/Core/Camera/ZoomController.swift +1 -0
- package/dist/native/iosnativeWebView/Sources/Core/Plugins/PluginBridge.swift +1 -0
- package/dist/native/iosnativeWebView/Sources/Core/Utils/CacheManager.swift +31 -30
- package/dist/native/iosnativeWebView/Sources/Core/Utils/CameraTransportUtils.swift +2 -1
- package/dist/native/iosnativeWebView/Sources/Core/Utils/DeviceInfoUtils.swift +1 -1
- package/dist/native/iosnativeWebView/Sources/Core/Utils/FilePickerHandler.swift +22 -19
- package/dist/native/iosnativeWebView/Sources/Core/Utils/ImageHandler.swift +40 -39
- package/dist/native/iosnativeWebView/Sources/Core/Utils/PerfEventBuffer.swift +1 -0
- package/dist/native/iosnativeWebView/Sources/Core/Utils/ResourceURLProtocol.swift +15 -15
- package/dist/native/iosnativeWebView/Sources/Core/Utils/WebKitConfig.swift +4 -3
- package/dist/native/iosnativeWebView/Sources/Core/WebView/BridgeCommandHandler.swift +6 -1
- package/dist/native/iosnativeWebView/Sources/Core/WebView/BridgeDelegateHandler.swift +1 -0
- package/dist/native/iosnativeWebView/Sources/Core/WebView/BridgeFileHandler.swift +2 -1
- package/dist/native/iosnativeWebView/Sources/Core/WebView/BridgeJavaScriptInterface.swift +2 -1
- package/dist/native/iosnativeWebView/Sources/Core/WebView/BridgeMessageValidator.swift +3 -5
- package/dist/native/iosnativeWebView/Sources/Core/WebView/NativeBridge.swift +20 -13
- package/dist/native/iosnativeWebView/Sources/Core/WebView/SplashView.swift +6 -5
- package/dist/native/iosnativeWebView/Sources/Core/WebView/SplashViewModel.swift +14 -13
- package/dist/native/iosnativeWebView/Sources/Core/WebView/TransitionManager.swift +3 -3
- package/dist/native/iosnativeWebView/Sources/Core/WebView/WebView.swift +9 -8
- package/dist/native/iosnativeWebView/Sources/Core/WebView/WebViewModel.swift +7 -6
- package/dist/native/iosnativeWebView/Sources/Core/WebView/WebViewNavigationDelegate.swift +24 -25
- package/dist/native/iosnativeWebView/iosnativeWebView/AppDelegate.swift +6 -1
- package/dist/native/iosnativeWebView/iosnativeWebView/ContentView.swift +1 -0
- package/dist/native/iosnativeWebView/iosnativeWebView/iosnativeWebViewApp.swift +4 -0
- package/dist/native/iosnativeWebView/iosnativeWebView.xcodeproj/project.pbxproj +2 -22
- package/dist/native/iosnativeWebView/iosnativeWebViewTests/BridgeMessageValidatorTests.swift +1 -0
- package/dist/native/iosnativeWebView/iosnativeWebViewTests/CacheManagerTests.swift +1 -0
- package/dist/native/iosnativeWebView/iosnativeWebViewTests/FilePickerHandlerTests.swift +2 -1
- package/dist/native/iosnativeWebView/iosnativeWebViewTests/NativeBridgeTests.swift +15 -9
- package/dist/native/iosnativeWebView/iosnativeWebViewTests/WebViewTests.swift +1 -0
- package/dist/native/setupEmulatorIos.js +2 -2
- package/dist/native/terminalProgress.js +17 -17
- package/dist/router/ClientRouter.d.ts +8 -0
- package/dist/router/ClientRouter.js +13 -11
- package/dist/router/ServerRouter.d.ts +13 -0
- package/dist/router/ServerRouter.js +19 -7
- package/dist/scripts/build.js +14 -2
- package/dist/scripts/loadEnvironmentVariables.js +3 -2
- package/dist/scripts/plugins.js +1 -1
- package/dist/scripts/preServerInit.js +49 -3
- package/dist/scripts/preflight.js +111 -0
- package/dist/scripts/scriptUtils.js +46 -1
- package/dist/scripts/serve.js +7 -3
- package/dist/scripts/start.js +8 -3
- package/dist/server/expressServer.d.ts +1 -0
- package/dist/server/expressServer.js +247 -271
- package/dist/server/manifestCache.d.ts +2 -0
- package/dist/server/manifestCache.js +25 -33
- package/dist/server/renderer/ChunkExtractor.d.ts +44 -0
- package/dist/server/renderer/ChunkExtractor.js +113 -125
- package/dist/server/renderer/document/Body.d.ts +21 -0
- package/dist/server/renderer/document/Body.jsx +45 -45
- package/dist/server/renderer/document/FastRefresh.d.ts +3 -0
- package/dist/server/renderer/document/FastRefresh.jsx +7 -13
- package/dist/server/renderer/document/Head.d.ts +20 -0
- package/dist/server/renderer/document/Head.jsx +32 -32
- package/dist/server/renderer/document/index.d.ts +2 -0
- package/dist/server/renderer/document/index.jsx +2 -2
- package/dist/server/renderer/extract.d.ts +67 -0
- package/dist/server/renderer/extract.js +92 -89
- package/dist/server/renderer/handler.d.ts +2 -0
- package/dist/server/renderer/handler.jsx +401 -404
- package/dist/server/renderer/index.d.ts +2 -0
- package/dist/server/renderer/index.js +5 -8
- package/dist/server/renderer/render.d.ts +35 -0
- package/dist/server/renderer/render.js +25 -32
- package/dist/server/utils/botDetectionMiddleware.d.ts +1 -0
- package/dist/server/utils/botDetectionMiddleware.js +33 -23
- package/dist/server/utils/cjsRequire.d.ts +8 -0
- package/dist/server/utils/cjsRequire.js +2 -2
- package/dist/server/utils/userAgentUtil.d.ts +7 -0
- package/dist/server/utils/userAgentUtil.js +68 -71
- package/dist/server/utils/validator.d.ts +31 -0
- package/dist/server/utils/validator.js +133 -158
- package/dist/vite/inject-cache-key-plugin.js +3 -27
- package/dist/vite/moduleAliases.js +36 -0
- package/dist/vite/node-loader.mjs +2 -29
- package/dist/vite/resolveDevServerConfig.js +4 -1
- package/dist/vite/vite.config.js +2 -29
- package/dist/web-router/components/MetaTag.d.ts +4 -0
- package/dist/web-router/components/MetaTag.jsx +26 -28
- package/dist/web-router/components/MetaTag.test.jsx +100 -0
- package/dist/web-router/components/RouterDataProvider.d.ts +96 -0
- package/dist/web-router/components/RouterDataProvider.jsx +260 -259
- package/dist/web-router/components/RouterDataProvider.server.test.jsx +98 -0
- package/dist/web-router/components/RouterDataProvider.test.jsx +310 -0
- package/dist/web-router/components/Split.d.ts +74 -0
- package/dist/web-router/components/Split.jsx +147 -156
- package/dist/web-router/components/Split.server.test.jsx +52 -0
- package/dist/web-router/components/Split.test.jsx +167 -0
- package/dist/web-router/components/SplitInview.d.ts +22 -0
- package/dist/web-router/components/SplitInview.jsx +78 -89
- package/dist/web-router/components/SplitInview.test.jsx +112 -0
- package/dist/web-router/components/SsrRequestContext.d.ts +20 -0
- package/dist/web-router/components/SsrRequestContext.jsx +17 -7
- package/dist/web-router/components/SsrRequestContext.test.jsx +53 -0
- package/dist/web-router/context.d.ts +15 -0
- package/dist/web-router/context.jsx +5 -5
- package/dist/web-router/context.test.jsx +10 -0
- package/dist/web-router/utils/metaDataUtils.d.ts +24 -0
- package/dist/web-router/utils/metaDataUtils.jsx +86 -86
- package/dist/web-router/utils/metaDataUtils.test.jsx +188 -0
- package/dist/web-router/vitest.setup.js +12 -0
- package/mcp_v2/knowledge-base.json +115 -17
- package/mcp_v2/mcp.js +141 -3
- package/mcp_v2/package-lock.json +2031 -0
- package/mcp_v2/package.json +13 -2
- package/mcp_v2/scripts/copyErrorsIndex.cjs +34 -0
- package/mcp_v2/test/errors.test.ts +123 -0
- package/mcp_v2/test/github.test.ts +177 -0
- package/mcp_v2/tools/errors.d.ts +20 -0
- package/mcp_v2/tools/errors.js +63 -0
- package/mcp_v2/tools/github.d.ts +41 -0
- package/mcp_v2/tools/github.js +231 -0
- package/mcp_v2/vitest.config.mjs +22 -0
- package/package.json +60 -11
- package/test/errors/docsDrift.test.ts +113 -0
- package/test/errors/index.test.ts +200 -0
- package/test/errors/registry.test.ts +108 -0
- package/test/scripts/preflight.test.ts +118 -0
- package/test/server/ChunkExtractor.test.ts +97 -0
- package/test/server/extract.test.ts +128 -0
- package/test/server/fixtures/template/server/document.jsx +19 -0
- package/test/server/fixtures/template/server/index.js +10 -0
- package/test/server/fixtures/template/src/js/containers/App/index.jsx +33 -0
- package/test/server/fixtures/template/src/js/routes/index.jsx +72 -0
- package/test/server/fixtures/template/src/js/routes/utils.jsx +39 -0
- package/test/server/fixtures/template/src/js/store/index.js +19 -0
- package/test/server/handler.assets.test.ts +330 -0
- package/test/server/handler.test.ts +208 -0
- package/test/server/manifestCache.test.ts +71 -0
- package/test/server/render.test.ts +71 -0
- package/test/server/scriptUtils.test.ts +103 -0
- package/test/server/userAgentUtil.test.ts +48 -0
- package/test/server/validator.test.ts +225 -0
- package/test/vite/resolveDevServerConfig.test.js +4 -1
- package/tsconfig.test.json +23 -0
- package/vitest.config.ts +93 -0
- package/dist/caching.js +0 -1
- package/dist/native/androidProject/app/src/test/java/io/yourname/androidproject/DeviceInfoUtilsTest.kt +0 -187
- package/dist/native/bridge/standardizedHooks.js +0 -611
- package/dist/router.js +0 -1
- package/dist/scripts/validator.js +0 -149
- package/dist/web-router/hooks.jsx +0 -72
- package/dist/web-router/types/components/MetaTag.d.ts +0 -2
- package/dist/web-router/types/components/RouterDataProvider.d.ts +0 -95
- package/dist/web-router/types/context.d.ts +0 -14
- package/dist/web-router/types/hooks.d.ts +0 -1
- package/dist/web-router/types/index.d.ts +0 -3
- package/dist/web-router/types/utils/metaDataUtils.d.ts +0 -40
- /package/dist/native/iosnativeWebView/{Sources/Core → CoreLogic/Sources/CatalystCoreLogic}/Constants/CatalystConstants.swift +0 -0
- /package/dist/native/iosnativeWebView/{Sources/Core → CoreLogic/Sources/CatalystCoreLogic}/Constants/ConfigConstants.swift +0 -0
- /package/dist/native/iosnativeWebView/{Sources/Core → CoreLogic/Sources/CatalystCoreLogic}/Notifications/NotificationModels.swift +0 -0
- /package/dist/native/iosnativeWebView/{Sources/Core → CoreLogic/Sources/CatalystCoreLogic}/Protocols/NotificationHandlerProtocol.swift +0 -0
- /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
|
-
|
|
4
|
-
useMatch,
|
|
5
|
-
useNavigate,
|
|
6
|
-
useParams,
|
|
7
|
-
useSearchParams,
|
|
8
|
-
UNSAFE_RouteContext,
|
|
9
|
-
matchRoutes,
|
|
10
|
-
} from "react-router"
|
|
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
|
-
*
|
|
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
|
-
*
|
|
11
|
+
* Route data keyed by route key (pathname plus query string).
|
|
21
12
|
*/
|
|
22
|
-
|
|
13
|
+
|
|
14
|
+
export const RouterContext = createContext({});
|
|
23
15
|
|
|
24
16
|
/**
|
|
25
|
-
*
|
|
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
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
}
|
|
24
|
+
data: null,
|
|
25
|
+
error: null,
|
|
26
|
+
isFetching: false,
|
|
27
|
+
isFetched: false,
|
|
28
|
+
refetch: () => {},
|
|
29
|
+
clear: () => {}
|
|
30
|
+
};
|
|
40
31
|
|
|
41
32
|
/**
|
|
42
|
-
*
|
|
43
|
-
* @property {any} route route object
|
|
44
|
-
* @property {import("react-router").Location} location the current location object, which represents the current URL in web browsers.
|
|
45
|
-
* @property {import("react-router").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").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
|
-
*
|
|
52
|
-
* @property {import("react-router").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
|
|
60
|
-
* @param
|
|
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
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
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
|
-
|
|
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
|
|
97
|
-
* @param
|
|
98
|
-
* @param
|
|
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
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
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
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
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
|
-
|
|
137
|
-
|
|
119
|
+
} else {
|
|
120
|
+
routeData.fetcherNotAvailable = true;
|
|
121
|
+
}
|
|
122
|
+
return routeData;
|
|
123
|
+
};
|
|
138
124
|
|
|
139
125
|
/**
|
|
140
126
|
*
|
|
141
|
-
* @param
|
|
142
|
-
* @returns
|
|
127
|
+
* @param routeContext route context object
|
|
128
|
+
* @returns Array of matched routes
|
|
143
129
|
*/
|
|
144
|
-
const getMatchedRoutes = ({
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
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
|
|
154
|
-
* @param
|
|
155
|
-
* @returns
|
|
142
|
+
* @param match Router Match Object
|
|
143
|
+
* @param searchParamsString Query params string
|
|
144
|
+
* @returns routerKey
|
|
156
145
|
*/
|
|
157
146
|
const generateRouteKey = (match, searchParamsString = "") => {
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
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
|
-
* @
|
|
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 = ({
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
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
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
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
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
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
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
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
|
-
|
|
253
|
-
}
|
|
222
|
+
}));
|
|
223
|
+
}, [wait]);
|
|
224
|
+
};
|
|
225
|
+
const [routeData, setRouteData] = useState(initialState);
|
|
254
226
|
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
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
|
-
|
|
273
|
-
|
|
274
|
-
|
|
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
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
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
|
-
|
|
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
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
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
|
+
};
|