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,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
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
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
|
-
|
|
33
|
-
|
|
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 = ({
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
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
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
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({
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
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
|
-
*
|
|
5
|
-
*
|
|
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[];
|