@xopcai/xopc 0.0.152 → 0.0.154
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/dist/browser-ext/manifest.json +1 -1
- package/dist/extensions/telegram/xopc.extension.json +1 -1
- package/dist/gateway/static/root/assets/{activity-store-uu1xu9Pl.js → activity-store-CzdG0bk4.js} +1 -1
- package/dist/gateway/static/root/assets/{agent-avatar-dicebear-CXe2KDZj.js → agent-avatar-dicebear-DFWvUDnw.js} +1 -1
- package/dist/gateway/static/root/assets/{agents-BjLxhsVX.js → agents-D1VBNTLF.js} +1 -1
- package/dist/gateway/static/root/assets/{api-CwL38LEV.js → api-CsyI9oBh.js} +1 -1
- package/dist/gateway/static/root/assets/{app-management-settings-panel-DekP2_hC.js → app-management-settings-panel-DjnqOKBb.js} +1 -1
- package/dist/gateway/static/root/assets/{appearance-settings-Cfd5YavF.js → appearance-settings-CRqe823O.js} +1 -1
- package/dist/gateway/static/root/assets/{apps-page-PS-uUoSk.js → apps-page-BcTujyqO.js} +1 -1
- package/dist/gateway/static/root/assets/{archive-plugin-DWglUgbp.js → archive-plugin-BXq09JWB.js} +1 -1
- package/dist/gateway/static/root/assets/{attachment-load-BJdxo2Vn.js → attachment-load-zlQDh1aZ.js} +1 -1
- package/dist/gateway/static/root/assets/{automation-suggestion-card-B-TfxjJF.js → automation-suggestion-card-gGgpY4-w.js} +1 -1
- package/dist/gateway/static/root/assets/{automations-page-CtNevo3y.js → automations-page-BToFWoa2.js} +1 -1
- package/dist/gateway/static/root/assets/{binary-plugins-DwrYsL8l.js → binary-plugins-DCndLyIW.js} +1 -1
- package/dist/gateway/static/root/assets/{block-editor-CIxjL5Kp.js → block-editor-msfuLqvE.js} +1 -1
- package/dist/gateway/static/root/assets/{browser-settings-page-QncZ-2vS.js → browser-settings-page-QKmt9rhz.js} +1 -1
- package/dist/gateway/static/root/assets/{capability-presets-api-ChR2rMfo.js → capability-presets-api-Bxopvkgk.js} +1 -1
- package/dist/gateway/static/root/assets/{capability-presets-settings-panel-_JBmJl5A.js → capability-presets-settings-panel-DfNXDSNd.js} +1 -1
- package/dist/gateway/static/root/assets/{channel-recipient-api-DYLBAhFF.js → channel-recipient-api-BnHaWUSY.js} +1 -1
- package/dist/gateway/static/root/assets/{channels-settings-Bz3tyWpH.js → channels-settings-H4S5xOJd.js} +1 -1
- package/dist/gateway/static/root/assets/channels-status-swr-CCNusXn-.js +1 -0
- package/dist/gateway/static/root/assets/chunk-KS7C4IRE-uQ0fehio.js +4 -0
- package/dist/gateway/static/root/assets/{connector-logo-KsRvub5G.js → connector-logo-B-uLLvB8.js} +1 -1
- package/dist/gateway/static/root/assets/{connectors-page-_pT0aE0S.js → connectors-page-CdhnQLcO.js} +1 -1
- package/dist/gateway/static/root/assets/{desktop-pet-CRCERvWy.js → desktop-pet-Ex6MK9js.js} +1 -1
- package/dist/gateway/static/root/assets/{desktop-pet-settings-vGrxshsU.js → desktop-pet-settings-BOIzaX68.js} +1 -1
- package/dist/gateway/static/root/assets/{directory-picker-path-field-BGPYrtx6.js → directory-picker-path-field-DqGXYqi0.js} +1 -1
- package/dist/gateway/static/root/assets/{dreaming-settings-B5pzvNgs.js → dreaming-settings-CxijakYG.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-debug-page-BaCko1XU.js → extension-debug-page-BvdFiVRk.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-page-TTXKCMtb.js → extension-page-Dh6JVCzg.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-settings-page-CEMb3uXY.js → extension-settings-page-DVj6FCSE.js} +1 -1
- package/dist/gateway/static/root/assets/{gateway-config-api-Bf37OGhQ.js → gateway-config-api-CQm4GutS.js} +1 -1
- package/dist/gateway/static/root/assets/{gateway-settings-cu-vyeNk.js → gateway-settings-ss66lTqH.js} +1 -1
- package/dist/gateway/static/root/assets/{gateway-startup-retry-BM_xvzl0.js → gateway-startup-retry-BHJhfrQI.js} +1 -1
- package/dist/gateway/static/root/assets/{goal-create-dialog-C-bL8rj8.js → goal-create-dialog-DrLfAaIQ.js} +1 -1
- package/dist/gateway/static/root/assets/{goal-detail-page-p5zPrlTq.js → goal-detail-page-CGX9RlwQ.js} +1 -1
- package/dist/gateway/static/root/assets/{goals-config-api-D2pEoiiO.js → goals-config-api-qW18xhUI.js} +1 -1
- package/dist/gateway/static/root/assets/{goals-page-D-H2u2-J.js → goals-page-Dw_HSDwB.js} +1 -1
- package/dist/gateway/static/root/assets/{goals-settings-BVZaBqPa.js → goals-settings-BIU5W1zl.js} +1 -1
- package/dist/gateway/static/root/assets/{heartbeat-settings-B-AC_uwa.js → heartbeat-settings-CfqjGaTh.js} +1 -1
- package/dist/gateway/static/root/assets/index-C74vxaN3.css +1 -0
- package/dist/gateway/static/root/assets/index-DEFW3c5N.js +196 -0
- package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-w0yIP0UB.js → keyboard-shortcuts-settings-cCBoXp7P.js} +1 -1
- package/dist/gateway/static/root/assets/{local-app-workbench-page-CTq0TIH4.js → local-app-workbench-page-D2eb_Y9l.js} +1 -1
- package/dist/gateway/static/root/assets/{local-apps-page-srIyxJuy.js → local-apps-page-DO2x_rcy.js} +1 -1
- package/dist/gateway/static/root/assets/{locale-store-GfSwnwIZ.js → locale-store-D7eqlIJ9.js} +1 -1
- package/dist/gateway/static/root/assets/logs-page-CGWbln8I.js +7 -0
- package/dist/gateway/static/root/assets/{markdown-split-Du5yPuDb.js → markdown-split-BZXNhOwW.js} +1 -1
- package/dist/gateway/static/root/assets/{media-plugins-Cd1Rmw15.js → media-plugins-DCetbXqB.js} +1 -1
- package/dist/gateway/static/root/assets/messages-CJ9O8gs2.js +5 -0
- package/dist/gateway/static/root/assets/{models-hub-panel-BMg_Xqd9.js → models-hub-panel-CgPuYUSc.js} +1 -1
- package/dist/gateway/static/root/assets/{notes-page-DhfrFd89.js → notes-page-BimdI125.js} +1 -1
- package/dist/gateway/static/root/assets/{notes-workbench-CwJk-D7Y.js → notes-workbench-CJgcA6rb.js} +2 -2
- package/dist/gateway/static/root/assets/{page-tabs-HACawonJ.js → page-tabs-U1pk4NrV.js} +1 -1
- package/dist/gateway/static/root/assets/{preview-open-alternatives-CjEZt_F5.js → preview-open-alternatives-Fxwf5YPD.js} +1 -1
- package/dist/gateway/static/root/assets/{project-detail-page-Dut_micj.js → project-detail-page-VxBEkOCK.js} +1 -1
- package/dist/gateway/static/root/assets/{projects-page-sTRlCEZ5.js → projects-page-aaYIPefA.js} +1 -1
- package/dist/gateway/static/root/assets/{remote-access-hub-Fx81YH7S.js → remote-access-hub-DsoA6Lgj.js} +1 -1
- package/dist/gateway/static/root/assets/{save-bar-controls-CbktHUqt.js → save-bar-controls-Dn4L4DG1.js} +1 -1
- package/dist/gateway/static/root/assets/{schedule-field-BGx_Nb45.js → schedule-field-RyKxT9K9.js} +1 -1
- package/dist/gateway/static/root/assets/{schema-form-Cg-LJVvG.js → schema-form-C1vggaSD.js} +1 -1
- package/dist/gateway/static/root/assets/{sessions-page-DFnmyBpj.js → sessions-page-D6Izw2Lf.js} +1 -1
- package/dist/gateway/static/root/assets/settings-advanced-gate-2xdJe22X.js +1 -0
- package/dist/gateway/static/root/assets/{settings-collapsible-section-yYK4O-5E.js → settings-collapsible-section-nlLe8F2O.js} +1 -1
- package/dist/gateway/static/root/assets/{settings-form-section-DPSA8tG8.js → settings-form-section-D_ZiLpm2.js} +1 -1
- package/dist/gateway/static/root/assets/{settings-loading-skeleton-ClHNJwRL.js → settings-loading-skeleton-B5N97pZa.js} +1 -1
- package/dist/gateway/static/root/assets/{settings-page-lPM7md10.js → settings-page-DPyCrjUe.js} +1 -1
- package/dist/gateway/static/root/assets/{settings-page-layout-B_-VepeK.js → settings-page-layout-DIvXTz_k.js} +1 -1
- package/dist/gateway/static/root/assets/{setup-status-panel-hORJvGAQ.js → setup-status-panel-DrJTD2wb.js} +1 -1
- package/dist/gateway/static/root/assets/{share-preview-page-DyzplAEL.js → share-preview-page-Us8Qsjnv.js} +1 -1
- package/dist/gateway/static/root/assets/{shares-settings-DO3IIgcC.js → shares-settings-wKE-xvx5.js} +1 -1
- package/dist/gateway/static/root/assets/skill-reload-api-DKFt8QcO.js +1 -0
- package/dist/gateway/static/root/assets/{skills-page-CvOIrcCJ.js → skills-page-DLUejhxZ.js} +1 -1
- package/dist/gateway/static/root/assets/sliding-segmented-uWmrxE3P.js +1 -0
- package/dist/gateway/static/root/assets/{system-settings-panel-eIyklo0K.js → system-settings-panel-5lTZWRTB.js} +1 -1
- package/dist/gateway/static/root/assets/{theme-store-Bi6hMBDb.js → theme-store-BpYvZAYm.js} +1 -1
- package/dist/gateway/static/root/assets/{typed-models-lib-BgOpEx3h.js → typed-models-lib-BkK8sFRf.js} +1 -1
- package/dist/gateway/static/root/assets/{use-channel-catalog-f8A-PVuq.js → use-channel-catalog-CyWgVZUn.js} +1 -1
- package/dist/gateway/static/root/assets/{user-context-page-BG_1IrIJ.js → user-context-page-CI0uYsYu.js} +1 -1
- package/dist/gateway/static/root/assets/{user-profile-fields-editor-CfLUK6MT.js → user-profile-fields-editor-DHORj_-E.js} +1 -1
- package/dist/gateway/static/root/assets/{user-profile-settings-panel-BmzPREhJ.js → user-profile-settings-panel-C0cBmeSQ.js} +1 -1
- package/dist/gateway/static/root/assets/{utils-DbFnvDPi.js → utils-D_hszPJs.js} +1 -1
- package/dist/gateway/static/root/assets/{voice-api-key-field-1xyza74n.js → voice-api-key-field-C8A5XTpx.js} +1 -1
- package/dist/gateway/static/root/assets/{work-discovery-page-Dhyk4LHJ.js → work-discovery-page-QyGK7xcU.js} +1 -1
- package/dist/gateway/static/root/assets/{work-item-detail-page-CxBRnWeQ.js → work-item-detail-page-DtM6dJcm.js} +1 -1
- package/dist/gateway/static/root/assets/work-page-BkWtyIkX.js +1 -0
- package/dist/gateway/static/root/assets/{workflow-run-setup-panel-8HLqUALq.js → workflow-run-setup-panel-DxO26B4k.js} +1 -1
- package/dist/gateway/static/root/assets/{workflows-page-D48bPgLI.js → workflows-page-CzHTzaGu.js} +1 -1
- package/dist/gateway/static/root/index.html +8 -8
- package/dist/package.js +1 -1
- package/dist/src/config/agent-profile.js +1 -1
- package/dist/src/config/index.js +2 -2
- package/dist/src/config/paths.d.ts +1 -0
- package/dist/src/config/paths.js +10 -3
- package/dist/src/gateway/agents-admin.js +1 -1
- package/dist/src/infra/update-restart.d.ts +1 -0
- package/dist/src/infra/update-restart.js +20 -0
- package/dist/src/infra/update-runner.js +1 -0
- package/dist/src/infra/update-service-refresh.d.ts +14 -0
- package/dist/src/infra/update-service-refresh.js +66 -0
- package/package.json +7 -6
- package/dist/gateway/static/root/assets/channels-status-swr-CZuEsO5b.js +0 -1
- package/dist/gateway/static/root/assets/chunk-QUQL4437-DXsxWP7r.js +0 -4
- package/dist/gateway/static/root/assets/index-DIlxvrlG.css +0 -1
- package/dist/gateway/static/root/assets/index-DSydVlxZ.js +0 -196
- package/dist/gateway/static/root/assets/logs-page-MQB6-NKt.js +0 -7
- package/dist/gateway/static/root/assets/messages-B0B40tpO.js +0 -5
- package/dist/gateway/static/root/assets/settings-advanced-gate-BlWxQ6Ea.js +0 -1
- package/dist/gateway/static/root/assets/skill-reload-api-C9BqzDjZ.js +0 -1
- package/dist/gateway/static/root/assets/work-page-Btq3YeCH.js +0 -1
|
@@ -11,28 +11,28 @@
|
|
|
11
11
|
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png?v=20260713-1" />
|
|
12
12
|
<link rel="manifest" href="/site.webmanifest?v=20260713-1" />
|
|
13
13
|
<title>xopc</title>
|
|
14
|
-
<script type="module" crossorigin src="/assets/index-
|
|
14
|
+
<script type="module" crossorigin src="/assets/index-DEFW3c5N.js"></script>
|
|
15
15
|
<link rel="modulepreload" crossorigin href="/assets/rolldown-runtime-aKtaBQYM.js">
|
|
16
16
|
<link rel="modulepreload" crossorigin href="/assets/preload-helper-zJ_50EbN.js">
|
|
17
17
|
<link rel="modulepreload" crossorigin href="/assets/vendor-react-BOUWij0V.js">
|
|
18
18
|
<link rel="modulepreload" crossorigin href="/assets/dist-CxGUk8J-.js">
|
|
19
19
|
<link rel="modulepreload" crossorigin href="/assets/Combination-14nmIgxH.js">
|
|
20
20
|
<link rel="modulepreload" crossorigin href="/assets/dist-C230izr8.js">
|
|
21
|
-
<link rel="modulepreload" crossorigin href="/assets/chunk-
|
|
21
|
+
<link rel="modulepreload" crossorigin href="/assets/chunk-KS7C4IRE-uQ0fehio.js">
|
|
22
22
|
<link rel="modulepreload" crossorigin href="/assets/vendor-swr-BIWyz7Rc.js">
|
|
23
23
|
<link rel="modulepreload" crossorigin href="/assets/cn-BQ_8x0bT.js">
|
|
24
24
|
<link rel="modulepreload" crossorigin href="/assets/check-BODqo66o.js">
|
|
25
25
|
<link rel="modulepreload" crossorigin href="/assets/circle-alert-RzVebuX2.js">
|
|
26
26
|
<link rel="modulepreload" crossorigin href="/assets/middleware-Pd0e8Igk.js">
|
|
27
|
-
<link rel="modulepreload" crossorigin href="/assets/messages-
|
|
28
|
-
<link rel="modulepreload" crossorigin href="/assets/locale-store-
|
|
27
|
+
<link rel="modulepreload" crossorigin href="/assets/messages-CJ9O8gs2.js">
|
|
28
|
+
<link rel="modulepreload" crossorigin href="/assets/locale-store-D7eqlIJ9.js">
|
|
29
29
|
<link rel="modulepreload" crossorigin href="/assets/schemas-DgQq6Z5S.js">
|
|
30
30
|
<link rel="modulepreload" crossorigin href="/assets/config-reload-event-Bjh2zoKp.js">
|
|
31
31
|
<link rel="modulepreload" crossorigin href="/assets/copy-to-clipboard-HOJ79TWv.js">
|
|
32
|
-
<link rel="modulepreload" crossorigin href="/assets/gateway-startup-retry-
|
|
33
|
-
<link rel="modulepreload" crossorigin href="/assets/activity-store-
|
|
34
|
-
<link rel="modulepreload" crossorigin href="/assets/theme-store-
|
|
35
|
-
<link rel="stylesheet" crossorigin href="/assets/index-
|
|
32
|
+
<link rel="modulepreload" crossorigin href="/assets/gateway-startup-retry-BHJhfrQI.js">
|
|
33
|
+
<link rel="modulepreload" crossorigin href="/assets/activity-store-CzdG0bk4.js">
|
|
34
|
+
<link rel="modulepreload" crossorigin href="/assets/theme-store-BpYvZAYm.js">
|
|
35
|
+
<link rel="stylesheet" crossorigin href="/assets/index-C74vxaN3.css">
|
|
36
36
|
</head>
|
|
37
37
|
<body>
|
|
38
38
|
<div id="root"></div>
|
package/dist/package.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
+
import { init_agent_scope, normalizeAgentId, resolveAgentWorkspaceDir } from "../agent/agent-scope.js";
|
|
1
2
|
import { resolveEffectiveAgentManifest } from "../agent-manifest/resolver.js";
|
|
2
3
|
import "../agent-manifest/index.js";
|
|
3
|
-
import { init_agent_scope, normalizeAgentId, resolveAgentWorkspaceDir } from "../agent/agent-scope.js";
|
|
4
4
|
import { init_session_key, parseSessionKey } from "../routing/session-key.js";
|
|
5
5
|
import { agentExists, getDefaultAgentId, init_resolve_route } from "../routing/resolve-route.js";
|
|
6
6
|
//#region src/config/agent-profile.ts
|
package/dist/src/config/index.js
CHANGED
|
@@ -7,7 +7,7 @@ import { expandWorkspacePathString, init_workspace_path, normalizeWorkspaceDir,
|
|
|
7
7
|
import { resolveDefaultAgentWorkspaceDir } from "./workspace-defaults.js";
|
|
8
8
|
import { resolveAgentDir as resolveAgentDir$1, resolveAgentHomeDir as resolveAgentHomeDir$1, resolveAgentWorkspaceDir } from "../agent/agent-scope.js";
|
|
9
9
|
import { extractProfileAgentId, resolveEffectiveAgentManifestForAgent, resolveEffectiveAgentManifestForSession, resolveEffectiveAgentProfile, resolveEffectiveAgentProfileForSession } from "./agent-profile.js";
|
|
10
|
-
import { FILENAMES, USER_MEMORY_FILENAME, USER_PROFILE_FILENAME, WORKSPACE_FILES, existsSync, init_paths, resolveAgentAuthProfilesPath, resolveAgentDir, resolveAgentHomeDir, resolveAgentProfileDir, resolveAgentProfileMarkdownPath, resolveAuthProfilesPath, resolveBinDir, resolveBundledExtensionsDir, resolveBundledSkillsDir, resolveConfigPath, resolveCredentialsDir, resolveExtensionSdkPath, resolveExtensionsDir, resolveExtensionsLockPath, resolveInboxDir, resolveInboxMessagePath, resolveInboxPendingDir, resolveInboxProcessedDir, resolveLogPath, resolveLogsDir, resolveModelsJsonPath, resolveNodeBinDir, resolveNodeBinPath, resolveNodeToolsDir, resolveNpmBinPath, resolveOAuthPath, resolvePidPath, resolveSkillPath, resolveSkillsCachePath, resolveSkillsDir, resolveSkillsLockPath, resolveSocketPath, resolveStatusPath, resolveToolsDir, resolveUserDir, resolveUserMemoryPath, resolveUserProfilePath, resolveWorkspaceExtensionsDir, resolveWorkspaceFile, resolveWorkspaceStateDir, resolveWorkspaceStatePath, resolveXopcBinPath } from "./paths.js";
|
|
10
|
+
import { FILENAMES, USER_MEMORY_FILENAME, USER_PROFILE_FILENAME, WORKSPACE_FILES, existsSync, hasBundledExtensionManifest, init_paths, resolveAgentAuthProfilesPath, resolveAgentDir, resolveAgentHomeDir, resolveAgentProfileDir, resolveAgentProfileMarkdownPath, resolveAuthProfilesPath, resolveBinDir, resolveBundledExtensionsDir, resolveBundledSkillsDir, resolveConfigPath, resolveCredentialsDir, resolveExtensionSdkPath, resolveExtensionsDir, resolveExtensionsLockPath, resolveInboxDir, resolveInboxMessagePath, resolveInboxPendingDir, resolveInboxProcessedDir, resolveLogPath, resolveLogsDir, resolveModelsJsonPath, resolveNodeBinDir, resolveNodeBinPath, resolveNodeToolsDir, resolveNpmBinPath, resolveOAuthPath, resolvePidPath, resolveSkillPath, resolveSkillsCachePath, resolveSkillsDir, resolveSkillsLockPath, resolveSocketPath, resolveStatusPath, resolveToolsDir, resolveUserDir, resolveUserMemoryPath, resolveUserProfilePath, resolveWorkspaceExtensionsDir, resolveWorkspaceFile, resolveWorkspaceStateDir, resolveWorkspaceStatePath, resolveXopcBinPath } from "./paths.js";
|
|
11
11
|
import { init_loader, loadConfig, saveConfig } from "./loader.js";
|
|
12
12
|
import { clearConfigValueCache, getAllowedCommands, getCacheStats, init_resolve_config_value, resolveConfigValue, resolveHeaders, testApiKeyResolution } from "./resolve-config-value.js";
|
|
13
13
|
import { CustomModelSchema, ModelOverrideSchema, ModelsJsonSchema, OpenAICompatSchema, OpenAICompletionsCompatSchema, OpenAIResponsesCompatSchema, OpenRouterRoutingSchema, ProviderConfigSchema, VercelGatewayRoutingSchema, getDefaultModelValues, init_models_json, loadModelsJson, modelsJsonExists, saveModelsJson, validateModelsConfig } from "./models-json.js";
|
|
@@ -27,4 +27,4 @@ init_workspace_path();
|
|
|
27
27
|
init_models_json();
|
|
28
28
|
init_resolve_config_value();
|
|
29
29
|
//#endregion
|
|
30
|
-
export { AgentImageGenerationModelSchema, AgentModelRefSchema, AgentModelsSchema, AgentTypedModelRoleSchema, AgentsConfigSchema, BASE_RELOAD_RULES, BindingMatchSchema, BindingRuleSchema, BindingsConfigSchema, BrowserConfigSchema, ChannelsConfigSchema, CodeIntelligenceConfigSchema, CommandsConfigSchema, ConfigHotReloader, ConfigSchema, ConnectorsConfigSchema, CustomModelSchema, ENV_VARS, ExperimentalConfigSchema, ExtensionSecurityConfigSchema, ExtensionSlotsConfigSchema, ExtensionsConfigSchema, FILENAMES, GatewayAuthRateLimitSchema, GatewayAuthSchema, GatewayBindModeSchema, GatewayChannelConnectDeferModeSchema, GatewayConfigSchema, GatewayModeSchema, GatewayRemoteSchema, GatewaySecuritySchema, GatewayTailscaleConsentSchema, GatewayTailscaleSchema, GatewayTlsSchema, GatewayTrustedProxySchema, GoalNotificationEventSchema, GoalNotificationTargetSchema, GoalNotificationsConfigSchema, GoalsConfigSchema, HeartbeatConfigSchema, McpConfigSchema, McpServerSchema, MediaUnderstandingCapabilitiesSchema, MediaUnderstandingModelSchema, MessagesConfigSchema, ModelOverrideSchema, ModelsDevConfigSchema, ModelsJsonSchema, OpenAICompatSchema, OpenAICompletionsCompatSchema, OpenAIResponsesCompatSchema, OpenRouterRoutingSchema, ProfileManager, ProviderAuthConfigSchema, ProviderAzureConfigSchema, ProviderConfigSchema, ProviderRequestOverridesSchema, ProvidersConfigSchema, STTConfigSchema, STTFallbackConfigSchema, STTProviderConfigSchema, SearchProviderEntrySchema, SessionConfigSchema, SessionDmScopeSchema, SessionResetByTypeSchema, SessionResetConfigSchema, SessionResetModeSchema, SessionScopeSchema, SessionStorageConfigSchema, TTSConfigSchema, TTSEdgeConfigSchema, TTSFallbackConfigSchema, TTSModelOverridesConfigSchema, TTSProviderConfigSchema, TTSSummarizationConfigSchema, TelegramAccountConfigSchema, TelegramConfigSchema, TelegramGroupConfigSchema, TelegramTopicConfigSchema, ToolsConfigSchema, ToolsMediaAudioConfigSchema, ToolsMediaConfigSchema, TuiConfigSchema, TunnelConfigSchema, TunnelConsentSchema, USER_MEMORY_FILENAME, USER_PROFILE_FILENAME, UpdateAutoConfigSchema, UpdateConfigSchema, VercelGatewayRoutingSchema, VoiceConfigSchema, VoiceRefinementConfigSchema, WORKSPACE_FILES, WebSearchConfigSchema, WebToolsConfigSchema, WebsiteBlocklistSchema, WeixinAccountConfigSchema, WeixinConfigSchema, WorkspaceConfigSchema, WorkspaceImportConfigSchema, XOPC_DB_FILENAME, applyConfigOverrides, buildReloadPlan, canonicalizeConfiguredMcpServer, clearConfigValueCache, createProfile, deleteProfile, diffConfigPaths, existsSync, expandWorkspacePathString, extractProfileAgentId, formatThinkingLevels, getAgentDefaultImageGenerationModelConfig, getAgentDefaultImageModelConfig, getAgentDefaultModelRef, getAllowedCommands, getCacheStats, getConfigOverrides, getCurrentProfile, getDefaultModelValues, resolveModelsJsonPath as getModelsJsonPath, getProfileManager, getProfileNameFromDir, getSwitchCommand, getWorkspacePath, isKnownCliMcpTypeAlias, listAgentProfileMarkdownDirs, listAgentWorkspaceDirs, listProfiles, listThinkingLevels, loadConfig, loadModelsJson, matchReloadRule, modelsJsonExists, normalizeConfiguredMcpServers, normalizeElevatedMode, normalizeReasoningLevel, normalizeThinkLevel, normalizeVerboseLevel, normalizeWorkspaceDir, parseModelRef, resetConfigOverrides, resolveAgentAuthProfilesPath, resolveAgentDir, resolveAgentDir$1 as resolveAgentDirFromConfig, resolveAgentHomeDir, resolveAgentHomeDir$1 as resolveAgentHomeDirFromConfig, resolveAgentProfileDir, resolveAgentProfileMarkdownPath, resolveAgentWorkspaceDir, resolveAuthProfilesPath, resolveBinDir, resolveBundledExtensionsDir, resolveBundledSkillsDir, resolveConfigPath, resolveConfigValue, resolveCredentialsDir, resolveDefaultAgentWorkspaceDir, resolveEffectiveAgentManifestForAgent, resolveEffectiveAgentManifestForSession, resolveEffectiveAgentProfile, resolveEffectiveAgentProfileForSession, resolveExtensionSdkPath, resolveExtensionsDir, resolveExtensionsLockPath, resolveHeaders, resolveHomeDir, resolveInboxDir, resolveInboxMessagePath, resolveInboxPendingDir, resolveInboxProcessedDir, resolveLogPath, resolveLogsDir, resolveModelsJsonPath, resolveNodeBinDir, resolveNodeBinPath, resolveNodeToolsDir, resolveNpmBinPath, resolveOAuthPath, resolvePidPath, resolveProfileStateDir, resolveSkillPath, resolveSkillsCachePath, resolveSkillsDir, resolveSkillsLockPath, resolveSocketPath, resolveStateDir, resolveStatusPath, resolveToolsDir, resolveUserDir, resolveUserMemoryPath, resolveUserProfilePath, resolveWorkspaceExtensionsDir, resolveWorkspaceFile, resolveWorkspaceRoot, resolveWorkspaceStateDir, resolveWorkspaceStatePath, resolveXopcBinPath, resolveXopcDatabasePath, resolveXopcMcpTransportAlias, saveConfig, saveModelsJson, setConfigOverride, testApiKeyResolution, thinkLevelToNumber, unsetConfigOverride, validateModelsConfig };
|
|
30
|
+
export { AgentImageGenerationModelSchema, AgentModelRefSchema, AgentModelsSchema, AgentTypedModelRoleSchema, AgentsConfigSchema, BASE_RELOAD_RULES, BindingMatchSchema, BindingRuleSchema, BindingsConfigSchema, BrowserConfigSchema, ChannelsConfigSchema, CodeIntelligenceConfigSchema, CommandsConfigSchema, ConfigHotReloader, ConfigSchema, ConnectorsConfigSchema, CustomModelSchema, ENV_VARS, ExperimentalConfigSchema, ExtensionSecurityConfigSchema, ExtensionSlotsConfigSchema, ExtensionsConfigSchema, FILENAMES, GatewayAuthRateLimitSchema, GatewayAuthSchema, GatewayBindModeSchema, GatewayChannelConnectDeferModeSchema, GatewayConfigSchema, GatewayModeSchema, GatewayRemoteSchema, GatewaySecuritySchema, GatewayTailscaleConsentSchema, GatewayTailscaleSchema, GatewayTlsSchema, GatewayTrustedProxySchema, GoalNotificationEventSchema, GoalNotificationTargetSchema, GoalNotificationsConfigSchema, GoalsConfigSchema, HeartbeatConfigSchema, McpConfigSchema, McpServerSchema, MediaUnderstandingCapabilitiesSchema, MediaUnderstandingModelSchema, MessagesConfigSchema, ModelOverrideSchema, ModelsDevConfigSchema, ModelsJsonSchema, OpenAICompatSchema, OpenAICompletionsCompatSchema, OpenAIResponsesCompatSchema, OpenRouterRoutingSchema, ProfileManager, ProviderAuthConfigSchema, ProviderAzureConfigSchema, ProviderConfigSchema, ProviderRequestOverridesSchema, ProvidersConfigSchema, STTConfigSchema, STTFallbackConfigSchema, STTProviderConfigSchema, SearchProviderEntrySchema, SessionConfigSchema, SessionDmScopeSchema, SessionResetByTypeSchema, SessionResetConfigSchema, SessionResetModeSchema, SessionScopeSchema, SessionStorageConfigSchema, TTSConfigSchema, TTSEdgeConfigSchema, TTSFallbackConfigSchema, TTSModelOverridesConfigSchema, TTSProviderConfigSchema, TTSSummarizationConfigSchema, TelegramAccountConfigSchema, TelegramConfigSchema, TelegramGroupConfigSchema, TelegramTopicConfigSchema, ToolsConfigSchema, ToolsMediaAudioConfigSchema, ToolsMediaConfigSchema, TuiConfigSchema, TunnelConfigSchema, TunnelConsentSchema, USER_MEMORY_FILENAME, USER_PROFILE_FILENAME, UpdateAutoConfigSchema, UpdateConfigSchema, VercelGatewayRoutingSchema, VoiceConfigSchema, VoiceRefinementConfigSchema, WORKSPACE_FILES, WebSearchConfigSchema, WebToolsConfigSchema, WebsiteBlocklistSchema, WeixinAccountConfigSchema, WeixinConfigSchema, WorkspaceConfigSchema, WorkspaceImportConfigSchema, XOPC_DB_FILENAME, applyConfigOverrides, buildReloadPlan, canonicalizeConfiguredMcpServer, clearConfigValueCache, createProfile, deleteProfile, diffConfigPaths, existsSync, expandWorkspacePathString, extractProfileAgentId, formatThinkingLevels, getAgentDefaultImageGenerationModelConfig, getAgentDefaultImageModelConfig, getAgentDefaultModelRef, getAllowedCommands, getCacheStats, getConfigOverrides, getCurrentProfile, getDefaultModelValues, resolveModelsJsonPath as getModelsJsonPath, getProfileManager, getProfileNameFromDir, getSwitchCommand, getWorkspacePath, hasBundledExtensionManifest, isKnownCliMcpTypeAlias, listAgentProfileMarkdownDirs, listAgentWorkspaceDirs, listProfiles, listThinkingLevels, loadConfig, loadModelsJson, matchReloadRule, modelsJsonExists, normalizeConfiguredMcpServers, normalizeElevatedMode, normalizeReasoningLevel, normalizeThinkLevel, normalizeVerboseLevel, normalizeWorkspaceDir, parseModelRef, resetConfigOverrides, resolveAgentAuthProfilesPath, resolveAgentDir, resolveAgentDir$1 as resolveAgentDirFromConfig, resolveAgentHomeDir, resolveAgentHomeDir$1 as resolveAgentHomeDirFromConfig, resolveAgentProfileDir, resolveAgentProfileMarkdownPath, resolveAgentWorkspaceDir, resolveAuthProfilesPath, resolveBinDir, resolveBundledExtensionsDir, resolveBundledSkillsDir, resolveConfigPath, resolveConfigValue, resolveCredentialsDir, resolveDefaultAgentWorkspaceDir, resolveEffectiveAgentManifestForAgent, resolveEffectiveAgentManifestForSession, resolveEffectiveAgentProfile, resolveEffectiveAgentProfileForSession, resolveExtensionSdkPath, resolveExtensionsDir, resolveExtensionsLockPath, resolveHeaders, resolveHomeDir, resolveInboxDir, resolveInboxMessagePath, resolveInboxPendingDir, resolveInboxProcessedDir, resolveLogPath, resolveLogsDir, resolveModelsJsonPath, resolveNodeBinDir, resolveNodeBinPath, resolveNodeToolsDir, resolveNpmBinPath, resolveOAuthPath, resolvePidPath, resolveProfileStateDir, resolveSkillPath, resolveSkillsCachePath, resolveSkillsDir, resolveSkillsLockPath, resolveSocketPath, resolveStateDir, resolveStatusPath, resolveToolsDir, resolveUserDir, resolveUserMemoryPath, resolveUserProfilePath, resolveWorkspaceExtensionsDir, resolveWorkspaceFile, resolveWorkspaceRoot, resolveWorkspaceStateDir, resolveWorkspaceStatePath, resolveXopcBinPath, resolveXopcDatabasePath, resolveXopcMcpTransportAlias, saveConfig, saveModelsJson, setConfigOverride, testApiKeyResolution, thinkLevelToNumber, unsetConfigOverride, validateModelsConfig };
|
|
@@ -185,6 +185,7 @@ export declare function resolveSkillsCachePath(config: Config, agentId: string):
|
|
|
185
185
|
* - `src/config` → `dist/extensions` when built, else `extensions/` (dev, tsx)
|
|
186
186
|
* - `out/server` → `dist/electron/extensions` (Electron extension bundles)
|
|
187
187
|
*/
|
|
188
|
+
export declare function hasBundledExtensionManifest(dir: string): boolean;
|
|
188
189
|
export declare function resolveBundledExtensionsDir(): string | null;
|
|
189
190
|
/**
|
|
190
191
|
* Resolve the bundled skills directory (shipped with xopc)
|
package/dist/src/config/paths.js
CHANGED
|
@@ -3,7 +3,7 @@ import { ENV_VARS, XOPC_DB_FILENAME, init_paths_state, resolveHomeDir, resolveSt
|
|
|
3
3
|
import { init_workspace_defaults, resolveDefaultAgentWorkspaceDir } from "./workspace-defaults.js";
|
|
4
4
|
import { init_agent_scope, resolveAgentDir as resolveAgentDir$1, resolveAgentHomeDir as resolveAgentHomeDir$1, resolveAgentProfileDir as resolveAgentProfileDir$1, resolveAgentProfileMarkdownPath as resolveAgentProfileMarkdownPath$1, resolveAgentWorkspaceDir } from "../agent/agent-scope.js";
|
|
5
5
|
import { dirname, join, sep } from "path";
|
|
6
|
-
import { existsSync } from "fs";
|
|
6
|
+
import { existsSync, readdirSync, statSync } from "fs";
|
|
7
7
|
import { fileURLToPath } from "url";
|
|
8
8
|
//#region src/config/paths.ts
|
|
9
9
|
/**
|
|
@@ -242,6 +242,13 @@ function resolveSkillsCachePath(config, agentId) {
|
|
|
242
242
|
* - `src/config` → `dist/extensions` when built, else `extensions/` (dev, tsx)
|
|
243
243
|
* - `out/server` → `dist/electron/extensions` (Electron extension bundles)
|
|
244
244
|
*/
|
|
245
|
+
function hasBundledExtensionManifest(dir) {
|
|
246
|
+
try {
|
|
247
|
+
return readdirSync(dir, { withFileTypes: true }).some((entry) => entry.isDirectory() && statSync(join(dir, entry.name, "xopc.extension.json"), { throwIfNoEntry: false })?.isFile() === true);
|
|
248
|
+
} catch {
|
|
249
|
+
return false;
|
|
250
|
+
}
|
|
251
|
+
}
|
|
245
252
|
function resolveBundledExtensionsDir() {
|
|
246
253
|
const envDir = process.env[ENV_BUNDLED_EXTENSIONS_ROOT];
|
|
247
254
|
if (envDir && existsSync(envDir)) return envDir;
|
|
@@ -253,7 +260,7 @@ function resolveBundledExtensionsDir() {
|
|
|
253
260
|
join(srcDir, "..", "..", "..", "dist", "extensions"),
|
|
254
261
|
join(srcDir, "..", "..", "..", "extensions")
|
|
255
262
|
];
|
|
256
|
-
for (const dir of candidates) if (existsSync(dir)) return dir;
|
|
263
|
+
for (const dir of candidates) if (existsSync(dir) && hasBundledExtensionManifest(dir)) return dir;
|
|
257
264
|
return null;
|
|
258
265
|
} catch {
|
|
259
266
|
return null;
|
|
@@ -327,4 +334,4 @@ var init_paths = __esmMin((() => {
|
|
|
327
334
|
}));
|
|
328
335
|
//#endregion
|
|
329
336
|
init_paths();
|
|
330
|
-
export { ENV_VARS, FILENAMES, USER_MEMORY_FILENAME, USER_PROFILE_FILENAME, WORKSPACE_FILES, XOPC_DB_FILENAME, existsSync, init_paths, resolveAgentAuthProfilesPath, resolveAgentDir, resolveAgentDir$1 as resolveAgentDirFromConfig, resolveAgentHomeDir, resolveAgentHomeDir$1 as resolveAgentHomeDirFromConfig, resolveAgentProfileDir, resolveAgentProfileMarkdownPath, resolveAgentWorkspaceDir, resolveAuthProfilesPath, resolveBinDir, resolveBundledExtensionsDir, resolveBundledSkillsDir, resolveConfigPath, resolveCredentialsDir, resolveDefaultAgentWorkspaceDir, resolveExtensionSdkPath, resolveExtensionsDir, resolveExtensionsLockPath, resolveHomeDir, resolveInboxDir, resolveInboxMessagePath, resolveInboxPendingDir, resolveInboxProcessedDir, resolveLogPath, resolveLogsDir, resolveModelsJsonPath, resolveNodeBinDir, resolveNodeBinPath, resolveNodeToolsDir, resolveNpmBinPath, resolveOAuthPath, resolvePidPath, resolveSkillPath, resolveSkillsCachePath, resolveSkillsDir, resolveSkillsLockPath, resolveSocketPath, resolveStateDir, resolveStatusPath, resolveToolsDir, resolveUserDir, resolveUserMemoryPath, resolveUserProfilePath, resolveWorkspaceExtensionsDir, resolveWorkspaceFile, resolveWorkspaceStateDir, resolveWorkspaceStatePath, resolveXopcBinPath, resolveXopcDatabasePath };
|
|
337
|
+
export { ENV_VARS, FILENAMES, USER_MEMORY_FILENAME, USER_PROFILE_FILENAME, WORKSPACE_FILES, XOPC_DB_FILENAME, existsSync, hasBundledExtensionManifest, init_paths, resolveAgentAuthProfilesPath, resolveAgentDir, resolveAgentDir$1 as resolveAgentDirFromConfig, resolveAgentHomeDir, resolveAgentHomeDir$1 as resolveAgentHomeDirFromConfig, resolveAgentProfileDir, resolveAgentProfileMarkdownPath, resolveAgentWorkspaceDir, resolveAuthProfilesPath, resolveBinDir, resolveBundledExtensionsDir, resolveBundledSkillsDir, resolveConfigPath, resolveCredentialsDir, resolveDefaultAgentWorkspaceDir, resolveExtensionSdkPath, resolveExtensionsDir, resolveExtensionsLockPath, resolveHomeDir, resolveInboxDir, resolveInboxMessagePath, resolveInboxPendingDir, resolveInboxProcessedDir, resolveLogPath, resolveLogsDir, resolveModelsJsonPath, resolveNodeBinDir, resolveNodeBinPath, resolveNodeToolsDir, resolveNpmBinPath, resolveOAuthPath, resolvePidPath, resolveSkillPath, resolveSkillsCachePath, resolveSkillsDir, resolveSkillsLockPath, resolveSocketPath, resolveStateDir, resolveStatusPath, resolveToolsDir, resolveUserDir, resolveUserMemoryPath, resolveUserProfilePath, resolveWorkspaceExtensionsDir, resolveWorkspaceFile, resolveWorkspaceStateDir, resolveWorkspaceStatePath, resolveXopcBinPath, resolveXopcDatabasePath };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { resolveEffectiveAgentManifest } from "../agent-manifest/resolver.js";
|
|
2
1
|
import { init_agent_scope, listAgentEntries, normalizeAgentId, resolveAgentDir, resolveAgentProfileDir, resolveAgentWorkspaceDir, resolveDefaultAgentId, resolveUserPath, validateAgentIdForNewAgent } from "../agent/agent-scope.js";
|
|
2
|
+
import { resolveEffectiveAgentManifest } from "../agent-manifest/resolver.js";
|
|
3
3
|
import { resolveEffectiveAgentProfile } from "../config/agent-profile.js";
|
|
4
4
|
import { WORKSPACE_FILES, init_paths, resolveUserProfilePath } from "../config/paths.js";
|
|
5
5
|
import { AGENT_PROFILE_MARKDOWN_SYSTEM_FILES, REQUIRED_AGENT_PROFILE_MARKDOWN_FILE_SET } from "../agent/context/workspace.js";
|
|
@@ -15,6 +15,7 @@ export declare function isRunningInsideGatewayService(env?: Record<string, strin
|
|
|
15
15
|
export declare function maybeRestartGatewayAfterUpdate(params: {
|
|
16
16
|
shouldRestart?: boolean;
|
|
17
17
|
expectedVersion?: string;
|
|
18
|
+
updatedPackageRoot?: string;
|
|
18
19
|
configPath?: string;
|
|
19
20
|
triggerInProcessRestart?: InProcessRestartTrigger;
|
|
20
21
|
}): Promise<UpdateRestartResult>;
|
|
@@ -6,6 +6,7 @@ import { isRestartEnabled } from "../config/commands.flags.js";
|
|
|
6
6
|
import { resolveGatewayService } from "../daemon/service.js";
|
|
7
7
|
import { authorizeGatewaySigusr1Restart, writeGatewayRestartIntentSync } from "./restart.js";
|
|
8
8
|
import { findVerifiedGatewayListenerPidsOnPortSync, signalVerifiedGatewayPidSync } from "./gateway-processes.js";
|
|
9
|
+
import { refreshGatewayServiceAfterUpdate } from "./update-service-refresh.js";
|
|
9
10
|
//#region src/infra/update-restart.ts
|
|
10
11
|
init_loader();
|
|
11
12
|
init_paths();
|
|
@@ -143,6 +144,25 @@ async function maybeRestartGatewayAfterUpdate(params) {
|
|
|
143
144
|
message: "Gateway restart is disabled (commands.restart=false). Restart manually: xopc gateway restart"
|
|
144
145
|
};
|
|
145
146
|
if (isRunningInsideGatewayService() && params.triggerInProcessRestart) {
|
|
147
|
+
if (params.updatedPackageRoot && params.expectedVersion) try {
|
|
148
|
+
const service = await resolveGatewayService();
|
|
149
|
+
if (await service.isLoaded({ env: process.env })) await refreshGatewayServiceAfterUpdate({
|
|
150
|
+
service,
|
|
151
|
+
packageRoot: params.updatedPackageRoot,
|
|
152
|
+
expectedVersion: params.expectedVersion
|
|
153
|
+
});
|
|
154
|
+
} catch (err) {
|
|
155
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
156
|
+
log.warn({
|
|
157
|
+
err,
|
|
158
|
+
expectedVersion: params.expectedVersion
|
|
159
|
+
}, `Gateway service refresh failed after update: ${message}`);
|
|
160
|
+
return {
|
|
161
|
+
ok: false,
|
|
162
|
+
mode: "failed",
|
|
163
|
+
message: `Installed ${params.expectedVersion}, but failed to refresh the gateway service: ${message}`
|
|
164
|
+
};
|
|
165
|
+
}
|
|
146
166
|
const result = params.triggerInProcessRestart();
|
|
147
167
|
if (!result.ok) return {
|
|
148
168
|
ok: false,
|
|
@@ -541,6 +541,7 @@ async function runGatewayUpdateWithPostSteps(opts = {}) {
|
|
|
541
541
|
postUpdate.restart = await maybeRestartGatewayAfterUpdate({
|
|
542
542
|
shouldRestart: opts.shouldRestart,
|
|
543
543
|
expectedVersion: result.after?.version ?? void 0,
|
|
544
|
+
updatedPackageRoot: result.mode === "npm" || result.mode === "pnpm" ? result.root : void 0,
|
|
544
545
|
triggerInProcessRestart: opts.triggerInProcessRestart
|
|
545
546
|
});
|
|
546
547
|
return {
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { GatewayService, GatewayServiceCommandConfig, GatewayServiceInstallArgs } from '../daemon/types.js';
|
|
2
|
+
export declare function resolveUpdatedGatewayEntryPoint(packageRoot: string): Promise<string>;
|
|
3
|
+
export declare function buildRefreshedGatewayServiceArgs(params: {
|
|
4
|
+
command: GatewayServiceCommandConfig;
|
|
5
|
+
entryPoint: string;
|
|
6
|
+
expectedVersion: string;
|
|
7
|
+
env?: NodeJS.ProcessEnv;
|
|
8
|
+
}): GatewayServiceInstallArgs;
|
|
9
|
+
export declare function refreshGatewayServiceAfterUpdate(params: {
|
|
10
|
+
service: GatewayService;
|
|
11
|
+
packageRoot: string;
|
|
12
|
+
expectedVersion: string;
|
|
13
|
+
env?: NodeJS.ProcessEnv;
|
|
14
|
+
}): Promise<void>;
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { createLogger } from "../utils/logger/index.js";
|
|
2
|
+
import { init_logger } from "../utils/logger.js";
|
|
3
|
+
import { SERVICE_VERSION_ENV_KEY, formatGatewayServiceDescription } from "../daemon/constants.js";
|
|
4
|
+
import path from "node:path";
|
|
5
|
+
import fs from "node:fs/promises";
|
|
6
|
+
//#region src/infra/update-service-refresh.ts
|
|
7
|
+
init_logger();
|
|
8
|
+
const log = createLogger("UpdateServiceRefresh");
|
|
9
|
+
function resolveBinPath(bin) {
|
|
10
|
+
if (typeof bin === "string") return bin;
|
|
11
|
+
if (!bin || typeof bin !== "object") return null;
|
|
12
|
+
return bin.xopc ?? Object.values(bin).find((value) => typeof value === "string") ?? null;
|
|
13
|
+
}
|
|
14
|
+
async function resolveUpdatedGatewayEntryPoint(packageRoot) {
|
|
15
|
+
const resolvedRoot = path.resolve(packageRoot);
|
|
16
|
+
const packageJsonPath = path.join(resolvedRoot, "package.json");
|
|
17
|
+
const binPath = resolveBinPath(JSON.parse(await fs.readFile(packageJsonPath, "utf8")).bin);
|
|
18
|
+
if (!binPath) throw new Error(`Updated package has no xopc CLI entry point: ${packageJsonPath}`);
|
|
19
|
+
const entryPoint = path.resolve(resolvedRoot, binPath);
|
|
20
|
+
const relative = path.relative(resolvedRoot, entryPoint);
|
|
21
|
+
if (relative === ".." || relative.startsWith(`..${path.sep}`) || path.isAbsolute(relative)) throw new Error(`Updated xopc CLI entry point escapes its package root: ${binPath}`);
|
|
22
|
+
await fs.access(entryPoint);
|
|
23
|
+
return entryPoint;
|
|
24
|
+
}
|
|
25
|
+
function buildRefreshedGatewayServiceArgs(params) {
|
|
26
|
+
const programArguments = [...params.command.programArguments];
|
|
27
|
+
const gatewayArgIndex = programArguments.findLastIndex((arg) => arg === "gateway");
|
|
28
|
+
if (gatewayArgIndex < 2) throw new Error("Gateway service command does not contain a replaceable Node.js CLI entry point.");
|
|
29
|
+
programArguments[gatewayArgIndex - 1] = params.entryPoint;
|
|
30
|
+
const environment = {
|
|
31
|
+
...params.command.environment,
|
|
32
|
+
[SERVICE_VERSION_ENV_KEY]: params.expectedVersion,
|
|
33
|
+
XOPC_SERVICE_MARKER: "1"
|
|
34
|
+
};
|
|
35
|
+
const profile = params.env?.XOPC_PROFILE?.trim() || void 0;
|
|
36
|
+
return {
|
|
37
|
+
env: params.env ?? process.env,
|
|
38
|
+
stdout: process.stdout,
|
|
39
|
+
programArguments,
|
|
40
|
+
workingDirectory: params.command.workingDirectory,
|
|
41
|
+
environment,
|
|
42
|
+
description: formatGatewayServiceDescription({
|
|
43
|
+
profile,
|
|
44
|
+
version: params.expectedVersion
|
|
45
|
+
})
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
async function refreshGatewayServiceAfterUpdate(params) {
|
|
49
|
+
const env = params.env ?? process.env;
|
|
50
|
+
const command = await params.service.readCommand(env);
|
|
51
|
+
if (!command) throw new Error("Could not read the installed gateway service command.");
|
|
52
|
+
const entryPoint = await resolveUpdatedGatewayEntryPoint(params.packageRoot);
|
|
53
|
+
const installArgs = buildRefreshedGatewayServiceArgs({
|
|
54
|
+
command,
|
|
55
|
+
entryPoint,
|
|
56
|
+
expectedVersion: params.expectedVersion,
|
|
57
|
+
env
|
|
58
|
+
});
|
|
59
|
+
await params.service.install(installArgs);
|
|
60
|
+
log.info({
|
|
61
|
+
entryPoint,
|
|
62
|
+
expectedVersion: params.expectedVersion
|
|
63
|
+
}, "Refreshed gateway service definition after update");
|
|
64
|
+
}
|
|
65
|
+
//#endregion
|
|
66
|
+
export { buildRefreshedGatewayServiceArgs, refreshGatewayServiceAfterUpdate, resolveUpdatedGatewayEntryPoint };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@xopcai/xopc",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.154",
|
|
4
4
|
"description": "Local-first AI system that remembers context, coordinates AI, and sustains long-term progress.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/src/index.js",
|
|
@@ -103,8 +103,7 @@
|
|
|
103
103
|
"undici": "^8.5.0",
|
|
104
104
|
"uuid": "^14.0.0",
|
|
105
105
|
"ws": "^8.21.0",
|
|
106
|
-
"zod": "^4.4.3"
|
|
107
|
-
"@xopcai/gateway-contract": "0.0.0"
|
|
106
|
+
"zod": "^4.4.3"
|
|
108
107
|
},
|
|
109
108
|
"peerDependencies": {
|
|
110
109
|
"@composio/core": "0.14.0",
|
|
@@ -153,8 +152,8 @@
|
|
|
153
152
|
"cross-env": "^10.1.0",
|
|
154
153
|
"dependency-cruiser": "^17.4.3",
|
|
155
154
|
"electron": "^42.4.1",
|
|
156
|
-
"electron-builder": "^26.
|
|
157
|
-
"electron-updater": "6.8.
|
|
155
|
+
"electron-builder": "^26.15.3",
|
|
156
|
+
"electron-updater": "6.8.9",
|
|
158
157
|
"electron-vite": "^6.0.0-beta.1",
|
|
159
158
|
"esbuild": "^0.28.1",
|
|
160
159
|
"eslint": "^10.4.0",
|
|
@@ -171,7 +170,8 @@
|
|
|
171
170
|
"vite": "^8.0.16",
|
|
172
171
|
"vitepress": "^1.6.4",
|
|
173
172
|
"vitest": "4.1.5",
|
|
174
|
-
"vue": "^3.5.35"
|
|
173
|
+
"vue": "^3.5.35",
|
|
174
|
+
"@xopcai/gateway-contract": "0.0.0"
|
|
175
175
|
},
|
|
176
176
|
"scripts": {
|
|
177
177
|
"assets:brand": "node scripts/generate-brand-assets.mjs",
|
|
@@ -231,6 +231,7 @@
|
|
|
231
231
|
"release:patch": "bash scripts/release-patch.sh",
|
|
232
232
|
"growth:snapshot": "node scripts/growth-snapshot.mjs",
|
|
233
233
|
"growth:github-community": "node scripts/growth-github-community.mjs",
|
|
234
|
+
"release:check-package": "node scripts/check-publish-manifest.mjs",
|
|
234
235
|
"docs:dev": "vitepress dev docs",
|
|
235
236
|
"docs:check": "node scripts/check-docs.mjs",
|
|
236
237
|
"docs:build": "pnpm run docs:check && vitepress build docs",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{r as e}from"./locale-store-GfSwnwIZ.js";import{n as t}from"./channel-recipient-api-DYLBAhFF.js";function n(){return e(`/api/channels/status`)}var r=t;export{r as n,n as t};
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import{i as e}from"./rolldown-runtime-aKtaBQYM.js";import{a as t}from"./vendor-react-BOUWij0V.js";import{t as n}from"./preload-helper-zJ_50EbN.js";var r=e(t(),1),i=e=>{throw TypeError(e)},a=(e,t,n)=>t.has(e)||i(`Cannot `+n),o=(e,t,n)=>(a(e,t,`read from private field`),n?n.call(e):t.get(e)),s=(e,t,n)=>t.has(e)?i(`Cannot add the same private member more than once`):t instanceof WeakSet?t.add(e):t.set(e,n),c=(e,t,n,r)=>(a(e,t,`write to private field`),r?r.call(e,n):t.set(e,n),n),l=`popstate`;function u(e){return typeof e==`object`&&!!e&&`pathname`in e&&`search`in e&&`hash`in e&&`state`in e&&`key`in e}function d(e={}){function t(e,t){let{pathname:n=`/`,search:r=``,hash:i=``}=v(e.location.hash.substring(1));return!n.startsWith(`/`)&&!n.startsWith(`.`)&&(n=`/`+n),g(``,{pathname:n,search:r,hash:i},t.state&&t.state.usr||null,t.state&&t.state.key||`default`)}function n(e,t){let n=e.document.querySelector(`base`),r=``;if(n&&n.getAttribute(`href`)){let t=e.location.href,n=t.indexOf(`#`);r=n===-1?t:t.slice(0,n)}return r+`#`+(typeof t==`string`?t:_(t))}function r(e,t){p(e.pathname.charAt(0)===`/`,`relative pathnames are not supported in hash history.push(${JSON.stringify(t)})`)}return y(t,n,r,e)}function f(e,t){if(e===!1||e==null)throw Error(t)}function p(e,t){if(!e){typeof console<`u`&&console.warn(t);try{throw Error(t)}catch{}}}function m(){return Math.random().toString(36).substring(2,10)}function h(e,t){return{usr:e.state,key:e.key,idx:t,masked:e.mask?{pathname:e.pathname,search:e.search,hash:e.hash}:void 0}}function g(e,t,n=null,r,i){return{pathname:typeof e==`string`?e:e.pathname,search:``,hash:``,...typeof t==`string`?v(t):t,state:n,key:t&&t.key||r||m(),mask:i}}function _({pathname:e=`/`,search:t=``,hash:n=``}){return t&&t!==`?`&&(e+=t.charAt(0)===`?`?t:`?`+t),n&&n!==`#`&&(e+=n.charAt(0)===`#`?n:`#`+n),e}function v(e){let t={};if(e){let n=e.indexOf(`#`);n>=0&&(t.hash=e.substring(n),e=e.substring(0,n));let r=e.indexOf(`?`);r>=0&&(t.search=e.substring(r),e=e.substring(0,r)),e&&(t.pathname=e)}return t}function y(e,t,n,r={}){let{window:i=document.defaultView,v5Compat:a=!1}=r,o=i.history,s=`POP`,c=null,d=f();d??(d=0,o.replaceState({...o.state,idx:d},``));function f(){return(o.state||{idx:null}).idx}function p(){s=`POP`;let e=f(),t=e==null?null:e-d;d=e,c&&c({action:s,location:y.location,delta:t})}function m(e,t){s=`PUSH`;let r=u(e)?e:g(y.location,e,t);n&&n(r,e),d=f()+1;let l=h(r,d),p=y.createHref(r.mask||r);try{o.pushState(l,``,p)}catch(e){if(e instanceof DOMException&&e.name===`DataCloneError`)throw e;i.location.assign(p)}a&&c&&c({action:s,location:y.location,delta:1})}function _(e,t){s=`REPLACE`;let r=u(e)?e:g(y.location,e,t);n&&n(r,e),d=f();let i=h(r,d),l=y.createHref(r.mask||r);o.replaceState(i,``,l),a&&c&&c({action:s,location:y.location,delta:0})}function v(e){return b(i,e)}let y={get action(){return s},get location(){return e(i,o)},listen(e){if(c)throw Error(`A history only accepts one active listener`);return i.addEventListener(l,p),c=e,()=>{i.removeEventListener(l,p),c=null}},createHref(e){return t(i,e)},createURL:v,encodeLocation(e){let t=v(e);return{pathname:t.pathname,search:t.search,hash:t.hash}},push:m,replace:_,go(e){return o.go(e)}};return y}function b(e,t,n=!1){let r=`http://localhost`;e&&(r=e.location.origin===`null`?e.location.href:e.location.origin),f(r,`No window.location.(origin|href) available to create URL`);let i=typeof t==`string`?t:_(t);return i=i.replace(/ $/,`%20`),!n&&i.startsWith(`//`)&&(i=r+i),new URL(i,r)}function x(e){return{defaultValue:e}}var S,C=class{constructor(e){if(s(this,S,new Map),e)for(let[t,n]of e)this.set(t,n)}get(e){if(o(this,S).has(e))return o(this,S).get(e);if(e.defaultValue!==void 0)return e.defaultValue;throw Error(`No value found for context`)}set(e,t){o(this,S).set(e,t)}};S=new WeakMap;var w=new Set([`lazy`,`caseSensitive`,`path`,`id`,`index`,`children`]);function T(e){return w.has(e)}var E=new Set([`lazy`,`caseSensitive`,`path`,`id`,`index`,`middleware`,`children`]);function D(e){return E.has(e)}function O(e){return e.index===!0}function k(e,t,n=[],r={},i=!1){return e.map((e,a)=>{let o=[...n,String(a)],s=typeof e.id==`string`?e.id:o.join(`-`);if(f(e.index!==!0||!e.children,`Cannot specify children on an index route`),f(i||!r[s],`Found a route id collision on id "${s}". Route id's must be globally unique within Data Router usages`),O(e)){let n={...e,id:s};return r[s]=A(n,t(n)),n}else{let n={...e,id:s,children:void 0};return r[s]=A(n,t(n)),e.children&&(n.children=k(e.children,t,o,r,i)),n}})}function A(e,t){return Object.assign(e,{...t,...typeof t.lazy==`object`&&t.lazy!=null?{lazy:{...e.lazy,...t.lazy}}:{}})}function j(e,t,n=`/`){return M(e,t,n,!1)}function M(e,t,n,r,i){let a=B((typeof t==`string`?v(t):t).pathname||`/`,n);if(a==null)return null;let o=i??N(e),s=null,c=z(a);for(let e=0;s==null&&e<o.length;++e)s=le(o[e],c,r);return s}function ee(e,t){let{route:n,pathname:r,params:i}=e;return{id:n.id,pathname:r,params:i,data:t[n.id],loaderData:t[n.id],handle:n.handle}}function N(e){let t=P(e);return I(t),t}function P(e,t=[],n=[],r=``,i=!1){let a=(e,a,o=i,s)=>{let c={relativePath:s===void 0?e.path||``:s,caseSensitive:e.caseSensitive===!0,childrenIndex:a,route:e};if(c.relativePath.startsWith(`/`)){if(!c.relativePath.startsWith(r)&&o)return;f(c.relativePath.startsWith(r),`Absolute route path "${c.relativePath}" nested under path "${r}" is not valid. An absolute child route path must start with the combined path of all its parent routes.`),c.relativePath=c.relativePath.slice(r.length)}let l=W([r,c.relativePath]),u=n.concat(c);e.children&&e.children.length>0&&(f(e.index!==!0,`Index routes must not have child routes. Please remove all child routes from route path "${l}".`),P(e.children,t,u,l,o)),!(e.path==null&&!e.index)&&t.push({path:l,score:se(l,e.index),routesMeta:u})};return e.forEach((e,t)=>{if(e.path===``||!e.path?.includes(`?`))a(e,t);else for(let n of F(e.path))a(e,t,!0,n)}),t}function F(e){let t=e.split(`/`);if(t.length===0)return[];let[n,...r]=t,i=n.endsWith(`?`),a=n.replace(/\?$/,``);if(r.length===0)return i?[a,``]:[a];let o=F(r.join(`/`)),s=[];return s.push(...o.map(e=>e===``?a:[a,e].join(`/`))),i&&s.push(...o),s.map(t=>e.startsWith(`/`)&&t===``?`/`:t)}function I(e){e.sort((e,t)=>e.score===t.score?ce(e.routesMeta.map(e=>e.childrenIndex),t.routesMeta.map(e=>e.childrenIndex)):t.score-e.score)}var te=/^:[\w-]+$/,ne=3,re=2,ie=1,ae=10,oe=-2,L=e=>e===`*`;function se(e,t){let n=e.split(`/`),r=n.length;return n.some(L)&&(r+=oe),t&&(r+=re),n.filter(e=>!L(e)).reduce((e,t)=>e+(te.test(t)?ne:t===``?ie:ae),r)}function ce(e,t){return e.length===t.length&&e.slice(0,-1).every((e,n)=>e===t[n])?e[e.length-1]-t[t.length-1]:0}function le(e,t,n=!1){let{routesMeta:r}=e,i={},a=`/`,o=[];for(let e=0;e<r.length;++e){let s=r[e],c=e===r.length-1,l=a===`/`?t:t.slice(a.length)||`/`,u=R({path:s.relativePath,caseSensitive:s.caseSensitive,end:c},l),d=s.route;if(!u&&c&&n&&!r[r.length-1].route.index&&(u=R({path:s.relativePath,caseSensitive:s.caseSensitive,end:!1},l)),!u)return null;Object.assign(i,u.params),o.push({params:i,pathname:W([a,u.pathname]),pathnameBase:ye(W([a,u.pathnameBase])),route:d}),u.pathnameBase!==`/`&&(a=W([a,u.pathnameBase]))}return o}function R(e,t){typeof e==`string`&&(e={path:e,caseSensitive:!1,end:!0});let[n,r]=ue(e.path,e.caseSensitive,e.end),i=t.match(n);if(!i)return null;let a=i[0],o=a.replace(/(.)\/+$/,`$1`),s=i.slice(1);return{params:r.reduce((e,{paramName:t,isOptional:n},r)=>{if(t===`*`){let e=s[r]||``;o=a.slice(0,a.length-e.length).replace(/(.)\/+$/,`$1`)}let i=s[r];return n&&!i?e[t]=void 0:e[t]=(i||``).replace(/%2F/g,`/`),e},{}),pathname:a,pathnameBase:o,pattern:e}}function ue(e,t=!1,n=!0){p(e===`*`||!e.endsWith(`*`)||e.endsWith(`/*`),`Route path "${e}" will be treated as if it were "${e.replace(/\*$/,`/*`)}" because the \`*\` character must always follow a \`/\` in the pattern. To get rid of this warning, please change the route path to "${e.replace(/\*$/,`/*`)}".`);let r=[],i=`^`+e.replace(/\/*\*?$/,``).replace(/^\/*/,`/`).replace(/[\\.*+^${}|()[\]]/g,`\\$&`).replace(/\/:([\w-]+)(\?)?/g,(e,t,n,i,a)=>{if(r.push({paramName:t,isOptional:n!=null}),n){let t=a.charAt(i+e.length);return t&&t!==`/`?`/([^\\/]*)`:`(?:/([^\\/]*))?`}return`/([^\\/]+)`}).replace(/\/([\w-]+)\?(\/|$)/g,`(/$1)?$2`);return e.endsWith(`*`)?(r.push({paramName:`*`}),i+=e===`*`||e===`/*`?`(.*)$`:`(?:\\/(.+)|\\/*)$`):n?i+=`\\/*$`:e!==``&&e!==`/`&&(i+=`(?:(?=\\/|$))`),[new RegExp(i,t?void 0:`i`),r]}function z(e){try{return e.split(`/`).map(e=>decodeURIComponent(e).replace(/\//g,`%2F`)).join(`/`)}catch(t){return p(!1,`The URL path "${e}" could not be decoded because it is a malformed URL segment. This is probably due to a bad percent encoding (${t}).`),e}}function B(e,t){if(t===`/`)return e;if(!e.toLowerCase().startsWith(t.toLowerCase()))return null;let n=t.endsWith(`/`)?t.length-1:t.length,r=e.charAt(n);return r&&r!==`/`?null:e.slice(n)||`/`}function V({basename:e,pathname:t}){return t===`/`?e:W([e,t])}var H=/^(?:[a-z][a-z0-9+.-]*:|\/\/)/i,de=e=>H.test(e);function fe(e,t=`/`){let{pathname:n,search:r=``,hash:i=``}=typeof e==`string`?v(e):e,a;return n?(n=_e(n),a=n.startsWith(`/`)?pe(n.substring(1),`/`):pe(n,t)):a=t,{pathname:a,search:be(r),hash:xe(i)}}function pe(e,t){let n=ve(t).split(`/`);return e.split(`/`).forEach(e=>{e===`..`?n.length>1&&n.pop():e!==`.`&&n.push(e)}),n.length>1?n.join(`/`):`/`}function me(e,t,n,r){return`Cannot include a '${e}' character in a manually specified \`to.${t}\` field [${JSON.stringify(r)}]. Please separate it out to the \`to.${n}\` field. Alternatively you may provide the full path as a string in <Link to="..."> and the router will parse it for you.`}function he(e){return e.filter((e,t)=>t===0||e.route.path&&e.route.path.length>0)}function ge(e){let t=he(e);return t.map((e,n)=>n===t.length-1?e.pathname:e.pathnameBase)}function U(e,t,n,r=!1){let i;typeof e==`string`?i=v(e):(i={...e},f(!i.pathname||!i.pathname.includes(`?`),me(`?`,`pathname`,`search`,i)),f(!i.pathname||!i.pathname.includes(`#`),me(`#`,`pathname`,`hash`,i)),f(!i.search||!i.search.includes(`#`),me(`#`,`search`,`hash`,i)));let a=e===``||i.pathname===``,o=a?`/`:i.pathname,s;if(o==null)s=n;else{let e=t.length-1;if(!r&&o.startsWith(`..`)){let t=o.split(`/`);for(;t[0]===`..`;)t.shift(),--e;i.pathname=t.join(`/`)}s=e>=0?t[e]:`/`}let c=fe(i,s),l=o&&o!==`/`&&o.endsWith(`/`),u=(a||o===`.`)&&n.endsWith(`/`);return!c.pathname.endsWith(`/`)&&(l||u)&&(c.pathname+=`/`),c}var _e=e=>e.replace(/\/\/+/g,`/`),W=e=>_e(e.join(`/`)),ve=e=>e.replace(/\/+$/,``),ye=e=>ve(e).replace(/^\/*/,`/`),be=e=>!e||e===`?`?``:e.startsWith(`?`)?e:`?`+e,xe=e=>!e||e===`#`?``:e.startsWith(`#`)?e:`#`+e,Se=class{constructor(e,t,n,r=!1){this.status=e,this.statusText=t||``,this.internal=r,n instanceof Error?(this.data=n.toString(),this.error=n):this.data=n}};function Ce(e){return e!=null&&typeof e.status==`number`&&typeof e.statusText==`string`&&typeof e.internal==`boolean`&&`data`in e}function we(e){return W(e.map(e=>e.route.path).filter(Boolean))||`/`}var Te=typeof window<`u`&&window.document!==void 0&&window.document.createElement!==void 0;function Ee(e,t){let n=e;if(typeof n!=`string`||!H.test(n))return{absoluteURL:void 0,isExternal:!1,to:n};let r=n,i=!1;if(Te)try{let e=new URL(window.location.href),r=n.startsWith(`//`)?new URL(e.protocol+n):new URL(n),a=B(r.pathname,t);r.origin===e.origin&&a!=null?n=a+r.search+r.hash:i=!0}catch{p(!1,`<Link to="${n}"> contains an invalid URL which will probably break when clicked - please update to a valid URL path.`)}return{absoluteURL:r,isExternal:i,to:n}}var De=Symbol(`Uninstrumented`);function Oe(e,t){let n={lazy:[],"lazy.loader":[],"lazy.action":[],"lazy.middleware":[],middleware:[],loader:[],action:[]};e.forEach(e=>e({id:t.id,index:t.index,path:t.path,instrument(e){let t=Object.keys(n);for(let r of t)e[r]&&n[r].push(e[r])}}));let r={};if(typeof t.lazy==`function`&&n.lazy.length>0){let e=G(n.lazy,t.lazy,()=>void 0);e&&(r.lazy=e)}if(typeof t.lazy==`object`){let e=t.lazy;[`middleware`,`loader`,`action`].forEach(t=>{let i=e[t],a=n[`lazy.${t}`];if(typeof i==`function`&&a.length>0){let e=G(a,i,()=>void 0);e&&(r.lazy=Object.assign(r.lazy||{},{[t]:e}))}})}return[`loader`,`action`].forEach(e=>{let i=t[e];if(typeof i==`function`&&n[e].length>0){let t=i[De]??i,a=G(n[e],t,(...e)=>je(e[0]));a&&(e===`loader`&&t.hydrate===!0&&(a.hydrate=!0),a[De]=t,r[e]=a)}}),t.middleware&&t.middleware.length>0&&n.middleware.length>0&&(r.middleware=t.middleware.map(e=>{let t=e[De]??e,r=G(n.middleware,t,(...e)=>je(e[0]));return r?(r[De]=t,r):e})),r}function ke(e,t){let n={navigate:[],fetch:[]};if(t.forEach(e=>e({instrument(e){let t=Object.keys(e);for(let r of t)e[r]&&n[r].push(e[r])}})),n.navigate.length>0){let t=e.navigate[De]??e.navigate,r=G(n.navigate,t,(...t)=>{let[n,r]=t;return{to:typeof n==`number`||typeof n==`string`?n:n?_(n):`.`,...Me(e,r??{})}});r&&(r[De]=t,e.navigate=r)}if(n.fetch.length>0){let t=e.fetch[De]??e.fetch,r=G(n.fetch,t,(...t)=>{let[n,,r,i]=t;return{href:r??`.`,fetcherKey:n,...Me(e,i??{})}});r&&(r[De]=t,e.fetch=r)}return e}function G(e,t,n){return e.length===0?null:async(...r)=>{let i=await Ae(e,n(...r),()=>t(...r),e.length-1);if(i.type===`error`)throw i.value;return i.value}}async function Ae(e,t,n,r){let i=e[r],a;if(i){let o,s=async()=>(o?console.error(`You cannot call instrumented handlers more than once`):o=Ae(e,t,n,r-1),a=await o,f(a,`Expected a result`),a.type===`error`&&a.value instanceof Error?{status:`error`,error:a.value}:{status:`success`,error:void 0});try{await i(s,t)}catch(e){console.error(`An instrumentation function threw an error:`,e)}o||await s(),await o}else try{a={type:`success`,value:await n()}}catch(e){a={type:`error`,value:e}}return a||{type:`error`,value:Error(`No result assigned in instrumentation chain.`)}}function je(e){let{request:t,context:n,params:r,pattern:i}=e;return{request:Ne(t),params:{...r},pattern:i,context:K(n)}}function Me(e,t){return{currentUrl:_(e.state.location),...`formMethod`in t?{formMethod:t.formMethod}:{},...`formEncType`in t?{formEncType:t.formEncType}:{},...`formData`in t?{formData:t.formData}:{},...`body`in t?{body:t.body}:{}}}function Ne(e){return{method:e.method,url:e.url,headers:{get:(...t)=>e.headers.get(...t)}}}function K(e){if(Fe(e)){let t={...e};return Object.freeze(t),t}else return{get:t=>e.get(t)}}var Pe=Object.getOwnPropertyNames(Object.prototype).sort().join(`\0`);function Fe(e){if(typeof e!=`object`||!e)return!1;let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null||Object.getOwnPropertyNames(t).sort().join(`\0`)===Pe}var Ie=[`POST`,`PUT`,`PATCH`,`DELETE`],Le=new Set(Ie),q=[`GET`,...Ie],Re=new Set(q),ze=new Set([301,302,303,307,308]),Be=new Set([307,308]),Ve={state:`idle`,location:void 0,matches:void 0,historyAction:void 0,formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0,json:void 0,text:void 0},He={state:`idle`,data:void 0,formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0,json:void 0,text:void 0},Ue={state:`unblocked`,proceed:void 0,reset:void 0,location:void 0},We=e=>({hasErrorBoundary:!!e.hasErrorBoundary}),Ge=`remix-router-transitions`,Ke=Symbol(`ResetLoaderData`),qe,Je,Ye,Xe,Ze=class{constructor(e){s(this,qe),s(this,Je),s(this,Ye),s(this,Xe),c(this,qe,e),c(this,Je,N(e))}get stableRoutes(){return o(this,qe)}get activeRoutes(){return o(this,Ye)??o(this,qe)}get branches(){return o(this,Xe)??o(this,Je)}get hasHMRRoutes(){return o(this,Ye)!=null}setRoutes(e){c(this,qe,e),c(this,Je,N(e))}setHmrRoutes(e){c(this,Ye,e),c(this,Xe,N(e))}commitHmrRoutes(){o(this,Ye)&&(c(this,qe,o(this,Ye)),c(this,Je,o(this,Xe)),c(this,Ye,void 0),c(this,Xe,void 0))}};qe=new WeakMap,Je=new WeakMap,Ye=new WeakMap,Xe=new WeakMap;function Qe(e){let t=e.window?e.window:typeof window<`u`?window:void 0,n=t!==void 0&&t.document!==void 0&&t.document.createElement!==void 0;f(e.routes.length>0,`You must provide a non-empty routes array to createRouter`);let r=e.hydrationRouteProperties||[],i=e.mapRouteProperties||We,a=i;if(e.instrumentations){let t=e.instrumentations;a=e=>({...i(e),...Oe(t.map(e=>e.route).filter(Boolean),e)})}let o={},s=new Ze(k(e.routes,a,void 0,o)),c=e.basename||`/`;c.startsWith(`/`)||(c=`/${c}`);let l=e.dataStrategy||ht,u={...e.future},d=null,m=new Set,h=null,_=null,y=null,x=null,S=e.hydrationData!=null,w=M(s.activeRoutes,e.history.location,c,!1,s.branches),T=!1,E=null,D,O;if(w==null&&!e.patchRoutesOnNavigation){let t=J(404,{pathname:e.history.location.pathname}),{matches:n,route:r}=Rt(s.activeRoutes);D=!0,O=!D,w=n,E={[r.id]:t}}else if(w&&!e.hydrationData&&st(w,s.activeRoutes,e.history.location.pathname).active&&(w=null),!w){D=!1,O=!D,w=[];let t=st(null,s.activeRoutes,e.history.location.pathname);t.active&&t.matches&&(T=!0,w=t.matches)}else if(w.some(e=>e.route.lazy))D=!1,O=!D;else if(!w.some(e=>rt(e.route)))D=!0,O=!D;else{let t=e.hydrationData?e.hydrationData.loaderData:null,n=e.hydrationData?e.hydrationData.errors:null,r=w;if(n){let e=w.findIndex(e=>n[e.route.id]!==void 0);r=r.slice(0,e+1)}O=!1,D=!0,r.forEach(e=>{let r=it(e.route,t,n);O||=r.renderFallback,D&&=!r.shouldLoad})}let A,j={historyAction:e.history.action,location:e.history.location,matches:w,initialized:D,renderFallback:O,navigation:Ve,restoreScrollPosition:e.hydrationData==null?null:!1,preventScrollReset:!1,revalidation:`idle`,loaderData:e.hydrationData&&e.hydrationData.loaderData||{},actionData:e.hydrationData&&e.hydrationData.actionData||null,errors:e.hydrationData&&e.hydrationData.errors||E,fetchers:new Map,blockers:new Map},N=`POP`,P=null,F=!1,I,te=!1,ne=new Map,re=null,ie=!1,ae=!1,oe=new Set,L=new Map,se=0,ce=-1,le=new Map,R=new Set,ue=new Map,z=new Map,V=new Set,H=new Map,fe,pe=null;function me(){if(d=e.history.listen(({action:t,location:n,delta:r})=>{if(fe){fe(),fe=void 0;return}p(H.size===0||r!=null,"You are trying to use a blocker on a POP navigation to a location that was not created by @remix-run/router. This will fail silently in production. This can happen if you are navigating outside the router via `window.history.pushState`/`window.location.hash` instead of using router navigation APIs. This can also happen if you are using createHashRouter and the user manually changes the URL.");let i=Ye({currentLocation:j.location,nextLocation:n,historyAction:t});if(i&&r!=null){let t=new Promise(e=>{fe=e});e.history.go(r*-1),Je(i,{state:`blocked`,location:n,proceed(){Je(i,{state:`proceeding`,proceed:void 0,reset:void 0,location:n}),t.then(()=>e.history.go(r))},reset(){let e=new Map(j.blockers);e.set(i,Ue),U({blockers:e})}}),P?.resolve(),P=null;return}return ye(t,n)}),n){sn(t,ne);let e=()=>cn(t,ne);t.addEventListener(`pagehide`,e),re=()=>t.removeEventListener(`pagehide`,e)}return j.initialized||ye(`POP`,j.location,{initialHydration:!0}),A}function he(){d&&d(),re&&re(),m.clear(),I&&I.abort(),j.fetchers.forEach((e,t)=>Ie(j.fetchers,t)),j.blockers.forEach((e,t)=>qe(t))}function ge(e){if(m.add(e),h){let{newErrors:t}=h;h=null,e(j,{deletedFetchers:[],newErrors:t,viewTransitionOpts:void 0,flushSync:!1})}return()=>m.delete(e)}function U(e,t={}){e.matches&&=e.matches.map(e=>{let t=o[e.route.id],n=e.route;return n.element!==t.element||n.errorElement!==t.errorElement||n.hydrateFallbackElement!==t.hydrateFallbackElement?{...e,route:t}:e}),j={...j,...e};let n=[],r=[];j.fetchers.forEach((e,t)=>{e.state===`idle`&&(V.has(t)?n.push(t):r.push(t))}),V.forEach(e=>{!j.fetchers.has(e)&&!L.has(e)&&n.push(e)}),m.size===0&&(h={newErrors:e.errors??null}),[...m].forEach(r=>r(j,{deletedFetchers:n,newErrors:e.errors??null,viewTransitionOpts:t.viewTransitionOpts,flushSync:t.flushSync===!0})),n.forEach(e=>Ie(j.fetchers,e)),r.forEach(e=>j.fetchers.delete(e))}function _e(t,n,{flushSync:r}={}){let i=j.actionData!=null&&j.navigation.formMethod!=null&&X(j.navigation.formMethod)&&j.navigation.state===`loading`&&t.state?._isRedirect!==!0,a;a=n.actionData?Object.keys(n.actionData).length>0?n.actionData:null:i?j.actionData:null;let o=n.loaderData?Ft(j.loaderData,n.loaderData,n.matches||[],n.errors):j.loaderData,c=j.blockers;c.size>0&&(c=new Map(c),c.forEach((e,t)=>c.set(t,Ue)));let l=ie?!1:ot(t,n.matches||j.matches),u=F===!0||j.navigation.formMethod!=null&&X(j.navigation.formMethod)&&t.state?._isRedirect!==!0;s.commitHmrRoutes(),ie||N===`POP`||(N===`PUSH`?e.history.push(t,t.state):N===`REPLACE`&&e.history.replace(t,t.state));let d;if(N===`POP`){let e=ne.get(j.location.pathname);e&&e.has(t.pathname)?d={currentLocation:j.location,nextLocation:t}:ne.has(t.pathname)&&(d={currentLocation:t,nextLocation:j.location})}else if(te){let e=ne.get(j.location.pathname);e?e.add(t.pathname):(e=new Set([t.pathname]),ne.set(j.location.pathname,e)),d={currentLocation:j.location,nextLocation:t}}U({...n,actionData:a,loaderData:o,historyAction:N,location:t,initialized:!0,renderFallback:!1,navigation:Ve,revalidation:`idle`,restoreScrollPosition:l,preventScrollReset:u,blockers:c},{viewTransitionOpts:d,flushSync:r===!0}),N=`POP`,F=!1,te=!1,ie=!1,ae=!1,P?.resolve(),P=null,pe?.resolve(),pe=null}async function W(t,n){if(P?.resolve(),P=null,typeof t==`number`){P||=ln();let n=P.promise;return e.history.go(t),n}let{path:r,submission:i,error:a}=tt(!1,et(j.location,j.matches,c,t,n?.fromRouteId,n?.relative),n),o;n?.mask&&(o={pathname:``,search:``,hash:``,...typeof n.mask==`string`?v(n.mask):{...j.location.mask,...n.mask}});let s=j.location,l=g(s,r,n&&n.state,void 0,o);l={...l,...e.history.encodeLocation(l)};let u=n&&n.replace!=null?n.replace:void 0,d=`PUSH`;u===!0?d=`REPLACE`:u===!1||i!=null&&X(i.formMethod)&&i.formAction===j.location.pathname+j.location.search&&(d=`REPLACE`);let f=n&&`preventScrollReset`in n?n.preventScrollReset===!0:void 0,p=(n&&n.flushSync)===!0,m=Ye({currentLocation:s,nextLocation:l,historyAction:d});if(m){Je(m,{state:`blocked`,location:l,proceed(){Je(m,{state:`proceeding`,proceed:void 0,reset:void 0,location:l}),W(t,n)},reset(){let e=new Map(j.blockers);e.set(m,Ue),U({blockers:e})}});return}await ye(d,l,{submission:i,pendingError:a,preventScrollReset:f,replace:n&&n.replace,enableViewTransition:n&&n.viewTransition,flushSync:p,callSiteDefaultShouldRevalidate:n&&n.defaultShouldRevalidate})}function ve(){pe||=ln(),Me(),U({revalidation:`loading`});let e=pe.promise;return j.navigation.state===`submitting`?e:j.navigation.state===`idle`?(ye(j.historyAction,j.location,{startUninterruptedRevalidation:!0}),e):(ye(N||j.historyAction,j.navigation.location,{overrideNavigation:j.navigation,enableViewTransition:te===!0}),e)}async function ye(t,n,r){I&&I.abort(),I=null,N=t,ie=(r&&r.startUninterruptedRevalidation)===!0,at(j.location,j.matches),F=(r&&r.preventScrollReset)===!0,te=(r&&r.enableViewTransition)===!0;let i=s.activeRoutes,a=r?.initialHydration&&j.matches&&j.matches.length>0&&!T?j.matches:M(i,n,c,!1,s.branches),o=(r&&r.flushSync)===!0;if(a&&j.initialized&&!ae&&Vt(j.location,n)&&!(r&&r.submission&&X(r.submission.formMethod))){_e(n,{matches:a},{flushSync:o});return}let l=st(a,i,n.pathname);if(l.active&&l.matches&&(a=l.matches),!a){let{error:e,notFoundMatches:t,route:r}=Xe(n.pathname);_e(n,{matches:t,loaderData:{},errors:{[r.id]:e}},{flushSync:o});return}let u=r&&r.overrideNavigation?{...r.overrideNavigation,matches:a,historyAction:t}:void 0;I=new AbortController;let d=kt(e.history,n,I.signal,r&&r.submission),f=e.getContext?await e.getContext():new C,p;if(r&&r.pendingError)p=[Lt(a).route.id,{type:`error`,error:r.pendingError}];else if(r&&r.submission&&X(r.submission.formMethod)){let i=await be(d,n,r.submission,a,t,f,l.active,r&&r.initialHydration===!0,{replace:r.replace,flushSync:o});if(i.shortCircuited)return;if(i.pendingActionResult){let[e,t]=i.pendingActionResult;if(Y(t)&&Ce(t.error)&&t.error.status===404){I=null,_e(n,{matches:i.matches,loaderData:{},errors:{[e]:t.error}});return}}a=i.matches||a,p=i.pendingActionResult,u=tn(n,a,t,r.submission),o=!1,l.active=!1,d=kt(e.history,d.url,d.signal)}let{shortCircuited:m,matches:h,loaderData:g,errors:_,workingFetchers:v}=await xe(d,n,a,t,f,l.active,u,r&&r.submission,r&&r.fetcherSubmission,r&&r.replace,r&&r.initialHydration===!0,o,p,r&&r.callSiteDefaultShouldRevalidate);m||(I=null,_e(n,{matches:h||a,...It(p),loaderData:g,errors:_,...v?{fetchers:v}:{}}))}async function be(t,n,i,l,u,d,f,p,m={}){if(Me(),U({navigation:nn(n,l,u,i)},{flushSync:m.flushSync===!0}),f){let e=await lt(l,n.pathname,t.signal);if(e.type===`aborted`)return{shortCircuited:!0};if(e.type===`error`){if(e.partialMatches.length===0){let{matches:t,route:n}=Rt(s.activeRoutes);return{matches:t,pendingActionResult:[n.id,{type:`error`,error:e.error}]}}let t=Lt(e.partialMatches).route.id;return{matches:e.partialMatches,pendingActionResult:[t,{type:`error`,error:e.error}]}}else if(e.matches)l=e.matches;else{let{notFoundMatches:e,error:t,route:r}=Xe(n.pathname);return{matches:e,pendingActionResult:[r.id,{type:`error`,error:t}]}}}let h,g=$t(l,n);if(!g.route.action&&!g.route.lazy)h={type:`error`,error:J(405,{method:t.method,pathname:n.pathname,routeId:g.route.id})};else{let e=await Ae(t,n,xt(a,o,t,n,l,g,p?[]:r,d),d,null);if(h=e[g.route.id],!h){for(let t of l)if(e[t.route.id]){h=e[t.route.id];break}}if(t.signal.aborted)return{shortCircuited:!0}}if(Kt(h)){let n;return n=m&&m.replace!=null?m.replace:Ot(h.response.headers.get(`Location`),new URL(t.url),c,e.history)===j.location.pathname+j.location.search,await G(t,h,!0,{submission:i,replace:n}),{shortCircuited:!0}}if(Y(h)){let e=Lt(l,g.route.id);return(m&&m.replace)!==!0&&(N=`PUSH`),{matches:l,pendingActionResult:[e.route.id,h,g.route.id]}}return{matches:l,pendingActionResult:[g.route.id,h]}}async function xe(t,n,i,l,u,d,f,p,m,h,g,_,v,y){let b=f||tn(n,i,l,p),x=p||m||en(b),S=!ie&&!g;if(d){if(S){let e=Se(v);U({navigation:b,...e===void 0?{}:{actionData:e}},{flushSync:_})}let e=await lt(i,n.pathname,t.signal);if(e.type===`aborted`)return{shortCircuited:!0};if(e.type===`error`){if(e.partialMatches.length===0){let{matches:t,route:n}=Rt(s.activeRoutes);return{matches:t,loaderData:{},errors:{[n.id]:e.error}}}let t=Lt(e.partialMatches).route.id;return{matches:e.partialMatches,loaderData:{},errors:{[t]:e.error}}}else if(e.matches)i=e.matches;else{let{error:e,notFoundMatches:t,route:r}=Xe(n.pathname);return{matches:t,loaderData:{},errors:{[r.id]:e}}}}let C=s.activeRoutes,{dsMatches:w,revalidatingFetchers:T}=nt(t,u,a,o,e.history,j,i,x,n,g?[]:r,g===!0,ae,oe,V,ue,R,C,c,e.patchRoutesOnNavigation!=null,s.branches,v,y);if(ce=++se,!e.dataStrategy&&!w.some(e=>e.shouldLoad)&&!w.some(e=>e.route.middleware&&e.route.middleware.length>0)&&T.length===0){let e=new Map(j.fetchers),t=ze(e);return _e(n,{matches:i,loaderData:{},errors:v&&Y(v[1])?{[v[0]]:v[1].error}:null,...It(v),...t?{fetchers:e}:{}},{flushSync:_}),{shortCircuited:!0}}if(S){let e={};if(!d){e.navigation=b;let t=Se(v);t!==void 0&&(e.actionData=t)}T.length>0&&(e.fetchers=we(T)),U(e,{flushSync:_})}T.forEach(e=>{q(e.key),e.controller&&L.set(e.key,e.controller)});let E=()=>T.forEach(e=>q(e.key));I&&I.signal.addEventListener(`abort`,E);let{loaderResults:D,fetcherResults:O}=await je(w,T,t,n,u);if(t.signal.aborted)return{shortCircuited:!0};I&&I.signal.removeEventListener(`abort`,E),T.forEach(e=>L.delete(e.key));let k=zt(D);if(k)return await G(t,k.result,!0,{replace:h}),{shortCircuited:!0};if(k=zt(O),k)return R.add(k.key),await G(t,k.result,!0,{replace:h}),{shortCircuited:!0};let A=new Map(j.fetchers),{loaderData:M,errors:ee}=Pt(j,i,D,v,T,O,A);g&&j.errors&&(ee={...j.errors,...ee});let N=ze(A),P=Ge(ce,A),F=N||P||T.length>0;return{matches:i,loaderData:M,errors:ee,...F?{workingFetchers:A}:{}}}function Se(e){if(e&&!Y(e[1]))return{[e[0]]:e[1].data};if(j.actionData)return Object.keys(j.actionData).length===0?null:j.actionData}function we(e){let t=new Map(j.fetchers);return e.forEach(e=>{let n=t.get(e.key),r=rn(void 0,n?n.data:void 0);t.set(e.key,r)}),t}async function Te(t,n,r,i){q(t);let a=(i&&i.flushSync)===!0,o=s.activeRoutes,l=et(j.location,j.matches,c,r,n,i?.relative),u=M(o,l,c,!1,s.branches),d=st(u,o,l);if(d.active&&d.matches&&(u=d.matches),!u){K(t,n,J(404,{pathname:l}),{flushSync:a});return}let{path:f,submission:p,error:m}=tt(!0,l,i);if(m){K(t,n,m,{flushSync:a});return}let h=e.getContext?await e.getContext():new C,g=(i&&i.preventScrollReset)===!0;if(p&&X(p.formMethod)){await Ee(t,n,f,u,h,d.active,a,g,p,i&&i.defaultShouldRevalidate);return}ue.set(t,{routeId:n,path:f}),await De(t,n,f,u,h,d.active,a,g,p)}async function Ee(t,n,i,l,u,d,p,m,h,g){Me(),ue.delete(t),Ne(t,an(h,j.fetchers.get(t)),{flushSync:p});let _=new AbortController,v=kt(e.history,i,_.signal,h);if(d){let e=await lt(l,new URL(v.url).pathname,v.signal,t);if(e.type===`aborted`)return;if(e.type===`error`){K(t,n,e.error,{flushSync:p});return}else if(e.matches)l=e.matches;else{K(t,n,J(404,{pathname:i}),{flushSync:p});return}}let y=$t(l,i);if(!y.route.action&&!y.route.lazy){K(t,n,J(405,{method:h.formMethod,pathname:i,routeId:n}),{flushSync:p});return}L.set(t,_);let b=se,x=xt(a,o,v,i,l,y,r,u),S=await Ae(v,i,x,u,t),C=S[y.route.id];if(!C){for(let e of x)if(S[e.route.id]){C=S[e.route.id];break}}if(v.signal.aborted){L.get(t)===_&&L.delete(t);return}if(V.has(t)){if(Kt(C)||Y(C)){Ne(t,on(void 0));return}}else{if(Kt(C))if(L.delete(t),ce>b){Ne(t,on(void 0));return}else return R.add(t),Ne(t,rn(h)),G(v,C,!1,{fetcherSubmission:h,preventScrollReset:m});if(Y(C)){K(t,n,C.error);return}}let w=j.navigation.location||j.location,T=kt(e.history,w,_.signal),E=s.activeRoutes,D=j.navigation.state===`idle`?j.matches:M(E,j.navigation.location,c,!1,s.branches);f(D,`Didn't find any matches after fetcher action`);let O=++se;le.set(t,O);let{dsMatches:k,revalidatingFetchers:A}=nt(T,u,a,o,e.history,j,D,h,w,r,!1,ae,oe,V,ue,R,E,c,e.patchRoutesOnNavigation!=null,s.branches,[y.route.id,C],g),ee=rn(h,C.data),P=new Map(j.fetchers);P.set(t,ee),A.filter(e=>e.key!==t).forEach(e=>{let t=e.key,n=P.get(t),r=rn(void 0,n?n.data:void 0);P.set(t,r),q(t),e.controller&&L.set(t,e.controller)}),U({fetchers:P});let F=()=>A.forEach(e=>q(e.key));_.signal.addEventListener(`abort`,F);let{loaderResults:te,fetcherResults:ne}=await je(k,A,T,w,u);if(_.signal.aborted)return;_.signal.removeEventListener(`abort`,F),le.delete(t),L.delete(t),A.forEach(e=>L.delete(e.key));let re=j.fetchers.has(t),ie=e=>{if(!re)return e;let n=new Map(e.fetchers);return n.set(t,on(C.data)),{...e,fetchers:n}},z=zt(te);if(z)return j=ie(j),G(T,z.result,!1,{preventScrollReset:m});if(z=zt(ne),z)return R.add(z.key),j=ie(j),G(T,z.result,!1,{preventScrollReset:m});let B=new Map(j.fetchers);re&&B.set(t,on(C.data));let{loaderData:H,errors:de}=Pt(j,D,te,void 0,A,ne,B);Ge(O,B),j.navigation.state===`loading`&&O>ce?(f(N,`Expected pending action`),I&&I.abort(),_e(j.navigation.location,{matches:D,loaderData:H,errors:de,fetchers:B})):(U({errors:de,loaderData:Ft(j.loaderData,H,D,de),fetchers:B}),ae=!1)}async function De(t,n,i,s,c,l,u,d,f){let p=j.fetchers.get(t);Ne(t,rn(f,p?p.data:void 0),{flushSync:u});let m=new AbortController,h=kt(e.history,i,m.signal);if(l){let e=await lt(s,new URL(h.url).pathname,h.signal,t);if(e.type===`aborted`)return;if(e.type===`error`){K(t,n,e.error,{flushSync:u});return}else if(e.matches)s=e.matches;else{K(t,n,J(404,{pathname:i}),{flushSync:u});return}}let g=$t(s,i);L.set(t,m);let _=se,v=await Ae(h,i,xt(a,o,h,i,s,g,r,c),c,t),y=v[g.route.id];if(!y){for(let e of s)if(v[e.route.id]){y=v[e.route.id];break}}if(L.get(t)===m&&L.delete(t),!h.signal.aborted){if(V.has(t)){Ne(t,on(void 0));return}if(Kt(y))if(ce>_){Ne(t,on(void 0));return}else{R.add(t),await G(h,y,!1,{preventScrollReset:d});return}if(Y(y)){K(t,n,y.error);return}Ne(t,on(y.data))}}async function G(r,i,a,{submission:o,fetcherSubmission:s,preventScrollReset:l,replace:u}={}){a||(P?.resolve(),P=null),i.response.headers.has(`X-Remix-Revalidate`)&&(ae=!0);let d=i.response.headers.get(`Location`);f(d,`Expected a Location header on the redirect Response`),d=Ot(d,new URL(r.url),c,e.history);let p=g(j.location,d,{_isRedirect:!0});if(n){let e=!1;if(i.response.headers.has(`X-Remix-Reload-Document`))e=!0;else if(de(d)){let n=b(t,d,!0);e=n.origin!==t.location.origin||B(n.pathname,c)==null}if(e){u?t.location.replace(d):t.location.assign(d);return}}I=null;let m=u===!0||i.response.headers.has(`X-Remix-Replace`)?`REPLACE`:`PUSH`,{formMethod:h,formAction:_,formEncType:v}=j.navigation;!o&&!s&&h&&_&&v&&(o=en(j.navigation));let y=o||s;Be.has(i.response.status)&&y&&X(y.formMethod)?await ye(m,p,{submission:{...y,formAction:d},preventScrollReset:l||F,enableViewTransition:a?te:void 0}):await ye(m,p,{overrideNavigation:tn(p,[],m,o),fetcherSubmission:s,preventScrollReset:l||F,enableViewTransition:a?te:void 0})}async function Ae(e,t,n,r,i){let a,o={};try{a=await St(l,e,t,n,i,r,!1)}catch(e){return n.filter(e=>e.shouldLoad).forEach(t=>{o[t.route.id]={type:`error`,error:e}}),o}if(e.signal.aborted)return o;if(!X(e.method))for(let e of n){if(a[e.route.id]?.type===`error`)break;!a.hasOwnProperty(e.route.id)&&!j.loaderData.hasOwnProperty(e.route.id)&&(!j.errors||!j.errors.hasOwnProperty(e.route.id))&&e.shouldCallHandler()&&(a[e.route.id]={type:`error`,result:Error(`No result returned from dataStrategy for route ${e.route.id}`)})}for(let[t,r]of Object.entries(a))if(Gt(r)){let i=r.result;o[t]={type:`redirect`,response:Et(i,e,t,n,c)}}else o[t]=await Tt(r);return o}async function je(e,t,n,r,i){let a=Ae(n,r,e,i,null),o=Promise.all(t.map(async e=>{if(e.matches&&e.match&&e.request&&e.controller){let t=(await Ae(e.request,e.path,e.matches,i,e.key))[e.match.route.id];return{[e.key]:t}}else return Promise.resolve({[e.key]:{type:`error`,error:J(404,{pathname:e.path})}})}));return{loaderResults:await a,fetcherResults:(await o).reduce((e,t)=>Object.assign(e,t),{})}}function Me(){ae=!0,ue.forEach((e,t)=>{L.has(t)&&oe.add(t),q(t)})}function Ne(e,t,n={}){let r=new Map(j.fetchers);r.set(e,t),U({fetchers:r},{flushSync:(n&&n.flushSync)===!0})}function K(e,t,n,r={}){let i=Lt(j.matches,t),a=new Map(j.fetchers);Ie(a,e),U({errors:{[i.route.id]:n},fetchers:a},{flushSync:(r&&r.flushSync)===!0})}function Pe(e){return z.set(e,(z.get(e)||0)+1),V.has(e)&&V.delete(e),j.fetchers.get(e)||He}function Fe(e,t){q(e,t?.reason),Ne(e,on(null))}function Ie(e,t){let n=j.fetchers.get(t);L.has(t)&&!(n&&n.state===`loading`&&le.has(t))&&q(t),ue.delete(t),le.delete(t),R.delete(t),V.delete(t),oe.delete(t),e.delete(t)}function Le(e){let t=(z.get(e)||0)-1;t<=0?(z.delete(e),V.add(e)):z.set(e,t),U({fetchers:new Map(j.fetchers)})}function q(e,t){let n=L.get(e);n&&(n.abort(t),L.delete(e))}function Re(e,t){for(let n of e){let e=t.get(n);f(e,`Expected fetcher: ${n}`);let r=on(e.data);t.set(n,r)}}function ze(e){let t=[],n=!1;for(let r of R){let i=e.get(r);f(i,`Expected fetcher: ${r}`),i.state===`loading`&&(R.delete(r),t.push(r),n=!0)}return Re(t,e),n}function Ge(e,t){let n=[];for(let[r,i]of le)if(i<e){let e=t.get(r);f(e,`Expected fetcher: ${r}`),e.state===`loading`&&(q(r),le.delete(r),n.push(r))}return Re(n,t),n.length>0}function Ke(e,t){let n=j.blockers.get(e)||Ue;return H.get(e)!==t&&H.set(e,t),n}function qe(e){j.blockers.delete(e),H.delete(e)}function Je(e,t){let n=j.blockers.get(e)||Ue;f(n.state===`unblocked`&&t.state===`blocked`||n.state===`blocked`&&t.state===`blocked`||n.state===`blocked`&&t.state===`proceeding`||n.state===`blocked`&&t.state===`unblocked`||n.state===`proceeding`&&t.state===`unblocked`,`Invalid blocker state transition: ${n.state} -> ${t.state}`);let r=new Map(j.blockers);r.set(e,t),U({blockers:r})}function Ye({currentLocation:e,nextLocation:t,historyAction:n}){if(H.size===0)return;H.size>1&&p(!1,`A router only supports one blocker at a time`);let r=Array.from(H.entries()),[i,a]=r[r.length-1],o=j.blockers.get(i);if(!(o&&o.state===`proceeding`)&&a({currentLocation:e,nextLocation:t,historyAction:n}))return i}function Xe(e){let t=J(404,{pathname:e}),n=s.activeRoutes,{matches:r,route:i}=Rt(n);return{notFoundMatches:r,route:i,error:t}}function Qe(e,t,n){if(_=e,x=t,y=n||null,!S&&j.navigation===Ve){S=!0;let e=ot(j.location,j.matches);e!=null&&U({restoreScrollPosition:e})}return()=>{_=null,x=null,y=null}}function $e(e,t){return y&&y(e,t.map(e=>ee(e,j.loaderData)))||e.key}function at(e,t){if(_&&x){let n=$e(e,t);_[n]=x()}}function ot(e,t){if(_){let n=$e(e,t),r=_[n];if(typeof r==`number`)return r}return null}function st(t,n,r){if(e.patchRoutesOnNavigation){let e=s.branches;if(!t)return{active:!0,matches:M(n,r,c,!0,e)||[]};if(Object.keys(t[0].params).length>0)return{active:!0,matches:M(n,r,c,!0,e)}}return{active:!1,matches:null}}async function lt(t,n,r,i){if(!e.patchRoutesOnNavigation)return{type:`success`,matches:t};let l=t;for(;;){let t=o;try{await e.patchRoutesOnNavigation({signal:r,path:n,matches:l,fetcherKey:i,patch:(e,n)=>{r.aborted||ct(e,n,s,t,a,!1)}})}catch(e){return{type:`error`,error:e,partialMatches:l}}if(r.aborted)return{type:`aborted`};let u=s.branches,d=M(s.activeRoutes,n,c,!1,u),f=null;if(d&&(Object.keys(d[0].params).length===0||(f=M(s.activeRoutes,n,c,!0,u),!(f&&l.length<f.length&&ut(l,f.slice(0,l.length))))))return{type:`success`,matches:d};if(f||=M(s.activeRoutes,n,c,!0,u),!f||ut(l,f))return{type:`success`,matches:null};l=f}}function ut(e,t){return e.length===t.length&&e.every((e,n)=>e.route.id===t[n].route.id)}function dt(e){o={},s.setHmrRoutes(k(e,a,void 0,o))}function ft(e,t,n=!1){ct(e,t,s,o,a,n),s.hasHMRRoutes||U({})}return A={get basename(){return c},get future(){return u},get state(){return j},get routes(){return s.stableRoutes},get branches(){return s.branches},get manifest(){return o},get window(){return t},initialize:me,subscribe:ge,enableScrollRestoration:Qe,navigate:W,fetch:Te,revalidate:ve,createHref:t=>e.history.createHref(t),encodeLocation:t=>e.history.encodeLocation(t),getFetcher:Pe,resetFetcher:Fe,deleteFetcher:Le,dispose:he,getBlocker:Ke,deleteBlocker:qe,patchRoutes:ft,_internalFetchControllers:L,_internalSetRoutes:dt,_internalSetStateDoNotUseOrYouWillBreakYourApp(e){U(e)}},e.instrumentations&&(A=ke(A,e.instrumentations.map(e=>e.router).filter(Boolean))),A}function $e(e){return e!=null&&(`formData`in e&&e.formData!=null||`body`in e&&e.body!==void 0)}function et(e,t,n,r,i,a){let o,s;if(i){o=[];for(let e of t)if(o.push(e),e.route.id===i){s=e;break}}else o=t,s=t[t.length-1];let c=U(r||`.`,ge(o),B(e.pathname,n)||e.pathname,a===`path`);if(r??(c.search=e.search,c.hash=e.hash),(r==null||r===``||r===`.`)&&s){let e=Qt(c.search);if(s.route.index&&!e)c.search=c.search?c.search.replace(/^\?/,`?index&`):`?index`;else if(!s.route.index&&e){let e=new URLSearchParams(c.search),t=e.getAll(`index`);e.delete(`index`),t.filter(e=>e).forEach(t=>e.append(`index`,t));let n=e.toString();c.search=n?`?${n}`:``}}return n!==`/`&&(c.pathname=V({basename:n,pathname:c.pathname})),_(c)}function tt(e,t,n){if(!n||!$e(n))return{path:t};if(n.formMethod&&!Zt(n.formMethod))return{path:t,error:J(405,{method:n.formMethod})};let r=()=>({path:t,error:J(400,{type:`invalid-body`})}),i=(n.formMethod||`get`).toUpperCase(),a=Bt(t);if(n.body!==void 0){if(n.formEncType===`text/plain`){if(!X(i))return r();let e=typeof n.body==`string`?n.body:n.body instanceof FormData||n.body instanceof URLSearchParams?Array.from(n.body.entries()).reduce((e,[t,n])=>`${e}${t}=${n}
|
|
2
|
-
`,``):String(n.body);return{path:t,submission:{formMethod:i,formAction:a,formEncType:n.formEncType,formData:void 0,json:void 0,text:e}}}else if(n.formEncType===`application/json`){if(!X(i))return r();try{let e=typeof n.body==`string`?JSON.parse(n.body):n.body;return{path:t,submission:{formMethod:i,formAction:a,formEncType:n.formEncType,formData:void 0,json:e,text:void 0}}}catch{return r()}}}f(typeof FormData==`function`,`FormData is not available in this environment`);let o,s;if(n.formData)o=jt(n.formData),s=n.formData;else if(n.body instanceof FormData)o=jt(n.body),s=n.body;else if(n.body instanceof URLSearchParams)o=n.body,s=Mt(o);else if(n.body==null)o=new URLSearchParams,s=new FormData;else try{o=new URLSearchParams(n.body),s=Mt(o)}catch{return r()}let c={formMethod:i,formAction:a,formEncType:n&&n.formEncType||`application/x-www-form-urlencoded`,formData:s,json:void 0,text:void 0};if(X(c.formMethod))return{path:t,submission:c};let l=v(t);return e&&l.search&&Qt(l.search)&&o.append(`index`,``),l.search=`?${o}`,{path:_(l),submission:c}}function nt(e,t,n,r,i,a,o,s,c,l,u,d,f,p,m,h,g,_,v,y,b,x){let S=b?Y(b[1])?b[1].error:b[1].data:void 0,C=i.createURL(a.location),w=i.createURL(c),T;if(u&&a.errors){let e=Object.keys(a.errors)[0];T=o.findIndex(t=>t.route.id===e)}else if(b&&Y(b[1])){let e=b[0];T=o.findIndex(t=>t.route.id===e)-1}let E=b?b[1].statusCode:void 0,D=E&&E>=400,O={currentUrl:C,currentParams:a.matches[0]?.params||{},nextUrl:w,nextParams:o[0].params,...s,actionResult:S,actionStatus:E},k=we(o),A=o.map((i,o)=>{let{route:s}=i,f=null;if(T!=null&&o>T)f=!1;else if(s.lazy)f=!0;else if(!rt(s))f=!1;else if(u){let{shouldLoad:e}=it(s,a.loaderData,a.errors);f=e}else at(a.loaderData,a.matches[o],i)&&(f=!0);if(f!==null)return bt(n,r,e,c,k,i,l,t,f);let p=!1;typeof x==`boolean`?p=x:D?p=!1:d||C.pathname+C.search===w.pathname+w.search?p=!0:C.search===w.search?ot(a.matches[o],i)&&(p=!0):p=!0;let m={...O,defaultShouldRevalidate:p};return bt(n,r,e,c,k,i,l,t,st(i,m),m,x)}),j=[];return m.forEach((e,s)=>{if(u||!o.some(t=>t.route.id===e.routeId)||p.has(s))return;let c=a.fetchers.get(s),m=c&&c.state!==`idle`&&c.data===void 0,b=M(g,e.path,_??`/`,!1,y);if(!b){if(v&&m)return;j.push({key:s,routeId:e.routeId,path:e.path,matches:null,match:null,request:null,controller:null});return}if(h.has(s))return;let S=$t(b,e.path),C=new AbortController,w=kt(i,e.path,C.signal),T=null;if(f.has(s))f.delete(s),T=xt(n,r,w,e.path,b,S,l,t);else if(m)d&&(T=xt(n,r,w,e.path,b,S,l,t));else{let i;i=typeof x==`boolean`?x:D?!1:d;let a={...O,defaultShouldRevalidate:i};st(S,a)&&(T=xt(n,r,w,e.path,b,S,l,t,a))}T&&j.push({key:s,routeId:e.routeId,path:e.path,matches:T,match:S,request:w,controller:C})}),{dsMatches:A,revalidatingFetchers:j}}function rt(e){return e.loader!=null||e.middleware!=null&&e.middleware.length>0}function it(e,t,n){if(e.lazy)return{shouldLoad:!0,renderFallback:!0};if(!rt(e))return{shouldLoad:!1,renderFallback:!1};let r=t!=null&&e.id in t,i=n!=null&&n[e.id]!==void 0;if(!r&&i)return{shouldLoad:!1,renderFallback:!1};if(typeof e.loader==`function`&&e.loader.hydrate===!0)return{shouldLoad:!0,renderFallback:!r};let a=!r&&!i;return{shouldLoad:a,renderFallback:a}}function at(e,t,n){let r=!t||n.route.id!==t.route.id,i=!e.hasOwnProperty(n.route.id);return r||i}function ot(e,t){let n=e.route.path;return e.pathname!==t.pathname||n!=null&&n.endsWith(`*`)&&e.params[`*`]!==t.params[`*`]}function st(e,t){if(e.route.shouldRevalidate){let n=e.route.shouldRevalidate(t);if(typeof n==`boolean`)return n}return t.defaultShouldRevalidate}function ct(e,t,n,r,i,a){let o;if(e){let t=r[e];f(t,`No route found to patch children into: routeId = ${e}`),t.children||=[],o=t.children}else o=n.activeRoutes;let s=[],c=[];if(t.forEach(e=>{let t=o.find(t=>lt(e,t));t?c.push({existingRoute:t,newRoute:e}):s.push(e)}),s.length>0){let t=k(s,i,[e||`_`,`patch`,String(o?.length||`0`)],r);o.push(...t)}if(a&&c.length>0)for(let e=0;e<c.length;e++){let{existingRoute:t,newRoute:n}=c[e],r=t,[a]=k([n],i,[],{},!0);Object.assign(r,{element:a.element?a.element:r.element,errorElement:a.errorElement?a.errorElement:r.errorElement,hydrateFallbackElement:a.hydrateFallbackElement?a.hydrateFallbackElement:r.hydrateFallbackElement})}n.hasHMRRoutes||n.setRoutes([...n.activeRoutes])}function lt(e,t){return`id`in e&&`id`in t&&e.id===t.id?!0:e.index===t.index&&e.path===t.path&&e.caseSensitive===t.caseSensitive?(!e.children||e.children.length===0)&&(!t.children||t.children.length===0)?!0:e.children?.every((e,n)=>t.children?.some(t=>lt(e,t)))??!1:!1}var ut=new WeakMap,dt=({key:e,route:t,manifest:n,mapRouteProperties:r})=>{let i=n[t.id];if(f(i,`No route found in manifest`),!i.lazy||typeof i.lazy!=`object`)return;let a=i.lazy[e];if(!a)return;let o=ut.get(i);o||(o={},ut.set(i,o));let s=o[e];if(s)return s;let c=(async()=>{let t=T(e),n=i[e]!==void 0&&e!==`hasErrorBoundary`;if(t)p(!t,`Route property `+e+` is not a supported lazy route property. This property will be ignored.`),o[e]=Promise.resolve();else if(n)p(!1,`Route "${i.id}" has a static property "${e}" defined. The lazy property will be ignored.`);else{let t=await a();t!=null&&(Object.assign(i,{[e]:t}),Object.assign(i,r(i)))}typeof i.lazy==`object`&&(i.lazy[e]=void 0,Object.values(i.lazy).every(e=>e===void 0)&&(i.lazy=void 0))})();return o[e]=c,c},ft=new WeakMap;function pt(e,t,n,r,i){let a=n[e.id];if(f(a,`No route found in manifest`),!e.lazy)return{lazyRoutePromise:void 0,lazyHandlerPromise:void 0};if(typeof e.lazy==`function`){let t=ft.get(a);if(t)return{lazyRoutePromise:t,lazyHandlerPromise:t};let n=(async()=>{f(typeof e.lazy==`function`,`No lazy route function found`);let t=await e.lazy(),n={};for(let e in t){let r=t[e];if(r===void 0)continue;let i=D(e),o=a[e]!==void 0&&e!==`hasErrorBoundary`;i?p(!i,`Route property `+e+` is not a supported property to be returned from a lazy route function. This property will be ignored.`):o?p(!o,`Route "${a.id}" has a static property "${e}" defined but its lazy function is also returning a value for this property. The lazy route property "${e}" will be ignored.`):n[e]=r}Object.assign(a,n),Object.assign(a,{...r(a),lazy:void 0})})();return ft.set(a,n),n.catch(()=>{}),{lazyRoutePromise:n,lazyHandlerPromise:n}}let o=Object.keys(e.lazy),s=[],c;for(let a of o){if(i&&i.includes(a))continue;let o=dt({key:a,route:e,manifest:n,mapRouteProperties:r});o&&(s.push(o),a===t&&(c=o))}let l=s.length>0?Promise.all(s).then(()=>{}):void 0;return l?.catch(()=>{}),c?.catch(()=>{}),{lazyRoutePromise:l,lazyHandlerPromise:c}}async function mt(e){let t=e.matches.filter(e=>e.shouldLoad),n={};return(await Promise.all(t.map(e=>e.resolve()))).forEach((e,r)=>{n[t[r].route.id]=e}),n}async function ht(e){return e.matches.some(e=>e.route.middleware)?gt(e,()=>mt(e)):mt(e)}function gt(e,t){return _t(e,t,e=>{if(Xt(e))throw e;return e},Ut,n);function n(t,n,r){if(r)return Promise.resolve(Object.assign(r.value,{[n]:{type:`error`,result:t}}));{let{matches:r}=e,i=Lt(r,r[Math.min(Math.max(r.findIndex(e=>e.route.id===n),0),Math.max(r.findIndex(e=>e.shouldCallHandler()),0))].route.id).route.id;return Promise.resolve({[i]:{type:`error`,result:t}})}}}async function _t(e,t,n,r,i){let{matches:a,...o}=e;return await vt(o,a.flatMap(e=>e.route.middleware?e.route.middleware.map(t=>[e.route.id,t]):[]),t,n,r,i)}async function vt(e,t,n,r,i,a,o=0){let{request:s}=e;if(s.signal.aborted)throw s.signal.reason??Error(`Request aborted: ${s.method} ${s.url}`);let c=t[o];if(!c)return await n();let[l,u]=c,d,f=async()=>{if(d)throw Error("You may only call `next()` once per middleware");try{return d={value:await vt(e,t,n,r,i,a,o+1)},d.value}catch(e){return d={value:await a(e,l,d)},d.value}};try{let t=await u(e,f),n=t==null?void 0:r(t);return i(n)?n:d?n??d.value:(d={value:await f()},d.value)}catch(e){return await a(e,l,d)}}function yt(e,t,n,r,i){let a=dt({key:`middleware`,route:r.route,manifest:t,mapRouteProperties:e}),o=pt(r.route,X(n.method)?`action`:`loader`,t,e,i);return{middleware:a,route:o.lazyRoutePromise,handler:o.lazyHandlerPromise}}function bt(e,t,n,r,i,a,o,s,c,l=null,u){let d=!1,f=yt(e,t,n,a,o);return{...a,_lazyPromises:f,shouldLoad:c,shouldRevalidateArgs:l,shouldCallHandler(e){return d=!0,l?typeof u==`boolean`?st(a,{...l,defaultShouldRevalidate:u}):typeof e==`boolean`?st(a,{...l,defaultShouldRevalidate:e}):st(a,l):c},resolve(e){let{lazy:t,loader:o,middleware:l}=a.route,u=d||c||e&&!X(n.method)&&(t||o),p=l&&l.length>0&&!o&&!t;return u&&(X(n.method)||!p)?Ct({request:n,path:r,pattern:i,match:a,lazyHandlerPromise:f?.handler,lazyRoutePromise:f?.route,handlerOverride:e,scopedContext:s}):Promise.resolve({type:`data`,result:void 0})}}}function xt(e,t,n,r,i,a,o,s,c=null){return i.map(l=>l.route.id===a.route.id?bt(e,t,n,r,we(i),l,o,s,!0,c):{...l,shouldLoad:!1,shouldRevalidateArgs:c,shouldCallHandler:()=>!1,_lazyPromises:yt(e,t,n,l,o),resolve:()=>Promise.resolve({type:`data`,result:void 0})})}async function St(e,t,n,r,i,a,o){r.some(e=>e._lazyPromises?.middleware)&&await Promise.all(r.map(e=>e._lazyPromises?.middleware));let s={request:t,url:At(t,n),pattern:we(r),params:r[0].params,context:a,matches:r},c=o?()=>{throw Error("You cannot call `runClientMiddleware()` from a static handler `dataStrategy`. Middleware is run outside of `dataStrategy` during SSR in order to bubble up the Response. You can enable middleware via the `respond` API in `query`/`queryRoute`")}:e=>{let t=s;return gt(t,()=>e({...t,fetcherKey:i,runClientMiddleware:()=>{throw Error("Cannot call `runClientMiddleware()` from within an `runClientMiddleware` handler")}}))},l=await e({...s,fetcherKey:i,runClientMiddleware:c});try{await Promise.all(r.flatMap(e=>[e._lazyPromises?.handler,e._lazyPromises?.route]))}catch{}return l}async function Ct({request:e,path:t,pattern:n,match:r,lazyHandlerPromise:i,lazyRoutePromise:a,handlerOverride:o,scopedContext:s}){let c,l,u=X(e.method),d=u?`action`:`loader`,f=i=>{let a,c=new Promise((e,t)=>a=t);l=()=>a(),e.signal.addEventListener(`abort`,l);let u=a=>typeof i==`function`?i({request:e,url:At(e,t),pattern:n,params:r.params,context:s},...a===void 0?[]:[a]):Promise.reject(Error(`You cannot call the handler for a route which defines a boolean "${d}" [routeId: ${r.route.id}]`)),f=(async()=>{try{return{type:`data`,result:await(o?o(e=>u(e)):u())}}catch(e){return{type:`error`,result:e}}})();return Promise.race([f,c])};try{let t=u?r.route.action:r.route.loader;if(i||a)if(t){let e,[n]=await Promise.all([f(t).catch(t=>{e=t}),i,a]);if(e!==void 0)throw e;c=n}else{await i;let t=u?r.route.action:r.route.loader;if(t)[c]=await Promise.all([f(t),a]);else if(d===`action`){let t=new URL(e.url),n=t.pathname+t.search;throw J(405,{method:e.method,pathname:n,routeId:r.route.id})}else return{type:`data`,result:void 0}}else if(t)c=await f(t);else{let t=new URL(e.url);throw J(404,{pathname:t.pathname+t.search})}}catch(e){return{type:`error`,result:e}}finally{l&&e.signal.removeEventListener(`abort`,l)}return c}async function wt(e){let t=e.headers.get(`Content-Type`);return t&&/\bapplication\/json\b/.test(t)?e.body==null?null:e.json():e.text()}async function Tt(e){let{result:t,type:n}=e;if(Jt(t)){let e;try{e=await wt(t)}catch(e){return{type:`error`,error:e}}return n===`error`?{type:`error`,error:new Se(t.status,t.statusText,e),statusCode:t.status,headers:t.headers}:{type:`data`,data:e,statusCode:t.status,headers:t.headers}}return n===`error`?qt(t)?t.data instanceof Error?{type:`error`,error:t.data,statusCode:t.init?.status,headers:t.init?.headers?new Headers(t.init.headers):void 0}:{type:`error`,error:Ht(t),statusCode:Ce(t)?t.status:void 0,headers:t.init?.headers?new Headers(t.init.headers):void 0}:{type:`error`,error:t,statusCode:Ce(t)?t.status:void 0}:qt(t)?{type:`data`,data:t.data,statusCode:t.init?.status,headers:t.init?.headers?new Headers(t.init.headers):void 0}:{type:`data`,data:t}}function Et(e,t,n,r,i){let a=e.headers.get(`Location`);if(f(a,`Redirects returned/thrown from loaders/actions must have a Location header`),!de(a)){let o=r.slice(0,r.findIndex(e=>e.route.id===n)+1);a=et(new URL(t.url),o,i,a),e.headers.set(`Location`,a)}return e}var Dt=[`about:`,`blob:`,`chrome:`,`chrome-untrusted:`,`content:`,`data:`,`devtools:`,`file:`,`filesystem:`,`javascript:`];function Ot(e,t,n,r){if(de(e)){let r=e,i=r.startsWith(`//`)?new URL(t.protocol+r):new URL(r);if(Dt.includes(i.protocol))throw Error(`Invalid redirect location`);let a=B(i.pathname,n)!=null;if(i.origin===t.origin&&a)return _e(i.pathname)+i.search+i.hash}try{let t=r.createURL(e);if(Dt.includes(t.protocol))throw Error(`Invalid redirect location`)}catch{}return e}function kt(e,t,n,r){let i=e.createURL(Bt(t)).toString(),a={signal:n};if(r&&X(r.formMethod)){let{formMethod:e,formEncType:t}=r;a.method=e.toUpperCase(),t===`application/json`?(a.headers=new Headers({"Content-Type":t}),a.body=JSON.stringify(r.json)):t===`text/plain`?a.body=r.text:t===`application/x-www-form-urlencoded`&&r.formData?a.body=jt(r.formData):a.body=r.formData}return new Request(i,a)}function At(e,t){let n=new URL(e.url),r=typeof t==`string`?v(t):t;if(n.pathname=r.pathname||`/`,r.search){let e=new URLSearchParams(r.search),t=e.getAll(`index`);e.delete(`index`);for(let n of t.filter(Boolean))e.append(`index`,n);n.search=e.size?`?${e.toString()}`:``}else n.search=``;return n.hash=r.hash||``,n}function jt(e){let t=new URLSearchParams;for(let[n,r]of e.entries())t.append(n,typeof r==`string`?r:r.name);return t}function Mt(e){let t=new FormData;for(let[n,r]of e.entries())t.append(n,r);return t}function Nt(e,t,n,r=!1,i=!1){let a={},o=null,s,c=!1,l={},u=n&&Y(n[1])?n[1].error:void 0;return e.forEach(n=>{if(!(n.route.id in t))return;let d=n.route.id,p=t[d];if(f(!Kt(p),`Cannot handle redirect results in processLoaderData`),Y(p)){let t=p.error;if(u!==void 0&&(t=u,u=void 0),o||={},i)o[d]=t;else{let n=Lt(e,d);o[n.route.id]??(o[n.route.id]=t)}r||(a[d]=Ke),c||(c=!0,s=Ce(p.error)?p.error.status:500),p.headers&&(l[d]=p.headers)}else a[d]=p.data,p.statusCode&&p.statusCode!==200&&!c&&(s=p.statusCode),p.headers&&(l[d]=p.headers)}),u!==void 0&&n&&(o={[n[0]]:u},n[2]&&(a[n[2]]=void 0)),{loaderData:a,errors:o,statusCode:s||200,loaderHeaders:l}}function Pt(e,t,n,r,i,a,o){let{loaderData:s,errors:c}=Nt(t,n,r);return i.filter(e=>!e.matches||e.matches.some(e=>e.shouldLoad)).forEach(t=>{let{key:n,match:r,controller:i}=t;if(i&&i.signal.aborted)return;let s=a[n];if(f(s,`Did not find corresponding fetcher result`),Y(s)){let t=Lt(e.matches,r?.route.id);c&&c[t.route.id]||(c={...c,[t.route.id]:s.error}),o.delete(n)}else if(Kt(s))f(!1,`Unhandled fetcher revalidation redirect`);else{let e=on(s.data);o.set(n,e)}}),{loaderData:s,errors:c}}function Ft(e,t,n,r){let i=Object.entries(t).filter(([,e])=>e!==Ke).reduce((e,[t,n])=>(e[t]=n,e),{});for(let a of n){let n=a.route.id;if(!t.hasOwnProperty(n)&&e.hasOwnProperty(n)&&a.route.loader&&(i[n]=e[n]),r&&r.hasOwnProperty(n))break}return i}function It(e){return e?Y(e[1])?{actionData:{}}:{actionData:{[e[0]]:e[1].data}}:{}}function Lt(e,t){return(t?e.slice(0,e.findIndex(e=>e.route.id===t)+1):[...e]).reverse().find(e=>e.route.hasErrorBoundary===!0)||e[0]}function Rt(e){let t=e.length===1?e[0]:e.find(e=>e.index||!e.path||e.path===`/`)||{id:`__shim-error-route__`};return{matches:[{params:{},pathname:``,pathnameBase:``,route:t}],route:t}}function J(e,{pathname:t,routeId:n,method:r,type:i,message:a}={}){let o=`Unknown Server Error`,s=`Unknown @remix-run/router error`;return e===400?(o=`Bad Request`,r&&t&&n?s=`You made a ${r} request to "${t}" but did not provide a \`loader\` for route "${n}", so there is no way to handle the request.`:i===`invalid-body`&&(s=`Unable to encode submission body`)):e===403?(o=`Forbidden`,s=`Route "${n}" does not match URL "${t}"`):e===404?(o=`Not Found`,s=`No route matches URL "${t}"`):e===405&&(o=`Method Not Allowed`,r&&t&&n?s=`You made a ${r.toUpperCase()} request to "${t}" but did not provide an \`action\` for route "${n}", so there is no way to handle the request.`:r&&(s=`Invalid request method "${r.toUpperCase()}"`)),new Se(e||500,o,Error(s),!0)}function zt(e){let t=Object.entries(e);for(let e=t.length-1;e>=0;e--){let[n,r]=t[e];if(Kt(r))return{key:n,result:r}}}function Bt(e){return _({...typeof e==`string`?v(e):e,hash:``})}function Vt(e,t){return e.pathname!==t.pathname||e.search!==t.search?!1:e.hash===``?t.hash!==``:e.hash===t.hash?!0:t.hash!==``}function Ht(e){return new Se(e.init?.status??500,e.init?.statusText??`Internal Server Error`,e.data)}function Ut(e){return typeof e==`object`&&!!e&&Object.entries(e).every(([e,t])=>typeof e==`string`&&Wt(t))}function Wt(e){return typeof e==`object`&&!!e&&`type`in e&&`result`in e&&(e.type===`data`||e.type===`error`)}function Gt(e){return Jt(e.result)&&ze.has(e.result.status)}function Y(e){return e.type===`error`}function Kt(e){return(e&&e.type)===`redirect`}function qt(e){return typeof e==`object`&&!!e&&`type`in e&&`data`in e&&`init`in e&&e.type===`DataWithResponseInit`}function Jt(e){return e!=null&&typeof e.status==`number`&&typeof e.statusText==`string`&&typeof e.headers==`object`&&e.body!==void 0}function Yt(e){return ze.has(e)}function Xt(e){return Jt(e)&&Yt(e.status)&&e.headers.has(`Location`)}function Zt(e){return Re.has(e.toUpperCase())}function X(e){return Le.has(e.toUpperCase())}function Qt(e){return new URLSearchParams(e).getAll(`index`).some(e=>e===``)}function $t(e,t){let n=typeof t==`string`?v(t).search:t.search;if(e[e.length-1].route.index&&Qt(n||``))return e[e.length-1];let r=he(e);return r[r.length-1]}function en(e){let{formMethod:t,formAction:n,formEncType:r,text:i,formData:a,json:o}=e;if(!(!t||!n||!r)){if(i!=null)return{formMethod:t,formAction:n,formEncType:r,formData:void 0,json:void 0,text:i};if(a!=null)return{formMethod:t,formAction:n,formEncType:r,formData:a,json:void 0,text:void 0};if(o!==void 0)return{formMethod:t,formAction:n,formEncType:r,formData:void 0,json:o,text:void 0}}}function tn(e,t,n,r){return r?{state:`loading`,location:e,matches:t,historyAction:n,formMethod:r.formMethod,formAction:r.formAction,formEncType:r.formEncType,formData:r.formData,json:r.json,text:r.text}:{state:`loading`,location:e,matches:t,historyAction:n,formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0,json:void 0,text:void 0}}function nn(e,t,n,r){return{state:`submitting`,location:e,matches:t,historyAction:n,formMethod:r.formMethod,formAction:r.formAction,formEncType:r.formEncType,formData:r.formData,json:r.json,text:r.text}}function rn(e,t){return e?{state:`loading`,formMethod:e.formMethod,formAction:e.formAction,formEncType:e.formEncType,formData:e.formData,json:e.json,text:e.text,data:t}:{state:`loading`,formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0,json:void 0,text:void 0,data:t}}function an(e,t){return{state:`submitting`,formMethod:e.formMethod,formAction:e.formAction,formEncType:e.formEncType,formData:e.formData,json:e.json,text:e.text,data:t?t.data:void 0}}function on(e){return{state:`idle`,formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0,json:void 0,text:void 0,data:e}}function sn(e,t){try{let n=e.sessionStorage.getItem(Ge);if(n){let e=JSON.parse(n);for(let[n,r]of Object.entries(e||{}))r&&Array.isArray(r)&&t.set(n,new Set(r||[]))}}catch{}}function cn(e,t){if(t.size>0){let n={};for(let[e,r]of t)n[e]=[...r];try{e.sessionStorage.setItem(Ge,JSON.stringify(n))}catch(e){p(!1,`Failed to save applied view transitions in sessionStorage (${e}).`)}}}function ln(){let e,t,n=new Promise((r,i)=>{e=async e=>{r(e);try{await n}catch{}},t=async e=>{i(e);try{await n}catch{}}});return{promise:n,resolve:e,reject:t}}var un=r.createContext(null);un.displayName=`DataRouter`;var dn=r.createContext(null);dn.displayName=`DataRouterState`;var fn=r.createContext(!1);function pn(){return r.useContext(fn)}var mn=r.createContext({isTransitioning:!1});mn.displayName=`ViewTransition`;var hn=r.createContext(new Map);hn.displayName=`Fetchers`;var gn=r.createContext(null);gn.displayName=`Await`;var Z=r.createContext(null);Z.displayName=`Navigation`;var _n=r.createContext(null);_n.displayName=`Location`;var Q=r.createContext({outlet:null,matches:[],isDataRoute:!1});Q.displayName=`Route`;var vn=r.createContext(null);vn.displayName=`RouteError`;var yn=`REACT_ROUTER_ERROR`,bn=`REDIRECT`,xn=`ROUTE_ERROR_RESPONSE`;function Sn(e){if(e.startsWith(`${yn}:${bn}:{`))try{let t=JSON.parse(e.slice(28));if(typeof t==`object`&&t&&typeof t.status==`number`&&typeof t.statusText==`string`&&typeof t.location==`string`&&typeof t.reloadDocument==`boolean`&&typeof t.replace==`boolean`)return t}catch{}}function Cn(e){if(e.startsWith(`${yn}:${xn}:{`))try{let t=JSON.parse(e.slice(40));if(typeof t==`object`&&t&&typeof t.status==`number`&&typeof t.statusText==`string`)return new Se(t.status,t.statusText,t.data)}catch{}}function wn(e,{relative:t}={}){f(Tn(),`useHref() may be used only in the context of a <Router> component.`);let{basename:n,navigator:i}=r.useContext(Z),{hash:a,pathname:o,search:s}=Nn(e,{relative:t}),c=o;return n!==`/`&&(c=o===`/`?n:W([n,o])),i.createHref({pathname:c,search:s,hash:a})}function Tn(){return r.useContext(_n)!=null}function $(){return f(Tn(),`useLocation() may be used only in the context of a <Router> component.`),r.useContext(_n).location}var En=`You should call navigate() in a React.useEffect(), not when your component is first rendered.`;function Dn(e){r.useContext(Z).static||r.useLayoutEffect(e)}function On(){let{isDataRoute:e}=r.useContext(Q);return e?Zn():kn()}function kn(){f(Tn(),`useNavigate() may be used only in the context of a <Router> component.`);let e=r.useContext(un),{basename:t,navigator:n}=r.useContext(Z),{matches:i}=r.useContext(Q),{pathname:a}=$(),o=JSON.stringify(ge(i)),s=r.useRef(!1);return Dn(()=>{s.current=!0}),r.useCallback((r,i={})=>{if(p(s.current,En),!s.current)return;if(typeof r==`number`){n.go(r);return}let c=U(r,JSON.parse(o),a,i.relative===`path`);e==null&&t!==`/`&&(c.pathname=c.pathname===`/`?t:W([t,c.pathname])),(i.replace?n.replace:n.push)(c,i.state,i)},[t,n,o,a,e])}var An=r.createContext(null);function jn(e){let t=r.useContext(Q).outlet;return r.useMemo(()=>t&&r.createElement(An.Provider,{value:e},t),[t,e])}function Mn(){let{matches:e}=r.useContext(Q);return e[e.length-1]?.params??{}}function Nn(e,{relative:t}={}){let{matches:n}=r.useContext(Q),{pathname:i}=$(),a=JSON.stringify(ge(n));return r.useMemo(()=>U(e,JSON.parse(a),i,t===`path`),[e,a,i,t])}function Pn(e,t,n){f(Tn(),`useRoutes() may be used only in the context of a <Router> component.`);let{navigator:i}=r.useContext(Z),{matches:a}=r.useContext(Q),o=a[a.length-1],s=o?o.params:{},c=o?o.pathname:`/`,l=o?o.pathnameBase:`/`,u=o&&o.route;{let e=u&&u.path||``;$n(c,!u||e.endsWith(`*`)||e.endsWith(`*?`),`You rendered descendant <Routes> (or called \`useRoutes()\`) at "${c}" (under <Route path="${e}">) but the parent route path has no trailing "*". This means if you navigate deeper, the parent won't match anymore and therefore the child routes will never render.
|
|
3
|
-
|
|
4
|
-
Please change the parent <Route path="${e}"> to <Route path="${e===`/`?`*`:`${e}/*`}">.`)}let d=$(),m;if(t){let e=typeof t==`string`?v(t):t;f(l===`/`||e.pathname?.startsWith(l),`When overriding the location using \`<Routes location>\` or \`useRoutes(routes, location)\`, the location pathname must begin with the portion of the URL pathname that was matched by all parent routes. The current pathname base is "${l}" but pathname "${e.pathname}" was given in the \`location\` prop.`),m=e}else m=d;let h=m.pathname||`/`,g=h;if(l!==`/`){let e=l.replace(/^\//,``).split(`/`);g=`/`+h.replace(/^\//,``).split(`/`).slice(e.length).join(`/`)}let _=n&&n.state.matches.length?n.state.matches.map(e=>Object.assign(e,{route:n.manifest[e.route.id]||e.route})):j(e,{pathname:g});p(u||_!=null,`No routes matched location "${m.pathname}${m.search}${m.hash}" `),p(_==null||_[_.length-1].route.element!==void 0||_[_.length-1].route.Component!==void 0||_[_.length-1].route.lazy!==void 0,`Matched leaf route at location "${m.pathname}${m.search}${m.hash}" does not have an element or Component. This means it will render an <Outlet /> with a null value by default resulting in an "empty" page.`);let y=Vn(_&&_.map(e=>Object.assign({},e,{params:Object.assign({},s,e.params),pathname:W([l,i.encodeLocation?i.encodeLocation(e.pathname.replace(/%/g,`%25`).replace(/\?/g,`%3F`).replace(/#/g,`%23`)).pathname:e.pathname]),pathnameBase:e.pathnameBase===`/`?l:W([l,i.encodeLocation?i.encodeLocation(e.pathnameBase.replace(/%/g,`%25`).replace(/\?/g,`%3F`).replace(/#/g,`%23`)).pathname:e.pathnameBase])})),a,n);return t&&y?r.createElement(_n.Provider,{value:{location:{pathname:`/`,search:``,hash:``,state:null,key:`default`,mask:void 0,...m},navigationType:`POP`}},y):y}function Fn(){let e=Xn(),t=Ce(e)?`${e.status} ${e.statusText}`:e instanceof Error?e.message:JSON.stringify(e),n=e instanceof Error?e.stack:null,i=`rgba(200,200,200, 0.5)`,a={padding:`0.5rem`,backgroundColor:i},o={padding:`2px 4px`,backgroundColor:i},s=null;return console.error(`Error handled by React Router default ErrorBoundary:`,e),s=r.createElement(r.Fragment,null,r.createElement(`p`,null,`💿 Hey developer 👋`),r.createElement(`p`,null,`You can provide a way better UX than this when your app throws errors by providing your own `,r.createElement(`code`,{style:o},`ErrorBoundary`),` or`,` `,r.createElement(`code`,{style:o},`errorElement`),` prop on your route.`)),r.createElement(r.Fragment,null,r.createElement(`h2`,null,`Unexpected Application Error!`),r.createElement(`h3`,{style:{fontStyle:`italic`}},t),n?r.createElement(`pre`,{style:a},n):null,s)}var In=r.createElement(Fn,null),Ln=class extends r.Component{constructor(e){super(e),this.state={location:e.location,revalidation:e.revalidation,error:e.error}}static getDerivedStateFromError(e){return{error:e}}static getDerivedStateFromProps(e,t){return t.location!==e.location||t.revalidation!==`idle`&&e.revalidation===`idle`?{error:e.error,location:e.location,revalidation:e.revalidation}:{error:e.error===void 0?t.error:e.error,location:t.location,revalidation:e.revalidation||t.revalidation}}componentDidCatch(e,t){this.props.onError?this.props.onError(e,t):console.error(`React Router caught the following error during render`,e)}render(){let e=this.state.error;if(this.context&&typeof e==`object`&&e&&`digest`in e&&typeof e.digest==`string`){let t=Cn(e.digest);t&&(e=t)}let t=e===void 0?this.props.children:r.createElement(Q.Provider,{value:this.props.routeContext},r.createElement(vn.Provider,{value:e,children:this.props.component}));return this.context?r.createElement(zn,{error:e},t):t}};Ln.contextType=fn;var Rn=new WeakMap;function zn({children:e,error:t}){let{basename:n}=r.useContext(Z);if(typeof t==`object`&&t&&`digest`in t&&typeof t.digest==`string`){let e=Sn(t.digest);if(e){let i=Rn.get(t);if(i)throw i;let a=Ee(e.location,n);if(Te&&!Rn.get(t))if(a.isExternal||e.reloadDocument)window.location.href=a.absoluteURL||a.to;else{let n=Promise.resolve().then(()=>window.__reactRouterDataRouter.navigate(a.to,{replace:e.replace}));throw Rn.set(t,n),n}return r.createElement(`meta`,{httpEquiv:`refresh`,content:`0;url=${a.absoluteURL||a.to}`})}}return e}function Bn({routeContext:e,match:t,children:n}){let i=r.useContext(un);return i&&i.static&&i.staticContext&&(t.route.errorElement||t.route.ErrorBoundary)&&(i.staticContext._deepestRenderedBoundaryId=t.route.id),r.createElement(Q.Provider,{value:e},n)}function Vn(e,t=[],n){let i=n?.state;if(e==null){if(!i)return null;if(i.errors)e=i.matches;else if(t.length===0&&!i.initialized&&i.matches.length>0)e=i.matches;else return null}let a=e,o=i?.errors;if(o!=null){let e=a.findIndex(e=>e.route.id&&o?.[e.route.id]!==void 0);f(e>=0,`Could not find a matching route for errors on route IDs: ${Object.keys(o).join(`,`)}`),a=a.slice(0,Math.min(a.length,e+1))}let s=!1,c=-1;if(n&&i){s=i.renderFallback;for(let e=0;e<a.length;e++){let t=a[e];if((t.route.HydrateFallback||t.route.hydrateFallbackElement)&&(c=e),t.route.id){let{loaderData:e,errors:r}=i,o=t.route.loader&&!e.hasOwnProperty(t.route.id)&&(!r||r[t.route.id]===void 0);if(t.route.lazy||o){n.isStatic&&(s=!0),a=c>=0?a.slice(0,c+1):[a[0]];break}}}}let l=n?.onError,u=i&&l?(e,t)=>{l(e,{location:i.location,params:i.matches?.[0]?.params??{},pattern:we(i.matches),errorInfo:t})}:void 0;return a.reduceRight((e,n,l)=>{let d,f=!1,p=null,m=null;i&&(d=o&&n.route.id?o[n.route.id]:void 0,p=n.route.errorElement||In,s&&(c<0&&l===0?($n(`route-fallback`,!1,"No `HydrateFallback` element provided to render during initial hydration"),f=!0,m=null):c===l&&(f=!0,m=n.route.hydrateFallbackElement||null)));let h=t.concat(a.slice(0,l+1)),g=()=>{let t;return t=d?p:f?m:n.route.Component?r.createElement(n.route.Component,null):n.route.element?n.route.element:e,r.createElement(Bn,{match:n,routeContext:{outlet:e,matches:h,isDataRoute:i!=null},children:t})};return i&&(n.route.ErrorBoundary||n.route.errorElement||l===0)?r.createElement(Ln,{location:i.location,revalidation:i.revalidation,component:p,error:d,children:g(),routeContext:{outlet:null,matches:h,isDataRoute:!0},onError:u}):g()},null)}function Hn(e){return`${e} must be used within a data router. See https://reactrouter.com/en/main/routers/picking-a-router.`}function Un(e){let t=r.useContext(un);return f(t,Hn(e)),t}function Wn(e){let t=r.useContext(dn);return f(t,Hn(e)),t}function Gn(e){let t=r.useContext(Q);return f(t,Hn(e)),t}function Kn(e){let t=Gn(e),n=t.matches[t.matches.length-1];return f(n.route.id,`${e} can only be used on routes that contain a unique "id"`),n.route.id}function qn(){return Kn(`useRouteId`)}function Jn(){let e=Wn(`useNavigation`);return r.useMemo(()=>{let{matches:t,historyAction:n,...r}=e.navigation;return r},[e.navigation])}function Yn(){let{matches:e,loaderData:t}=Wn(`useMatches`);return r.useMemo(()=>e.map(e=>ee(e,t)),[e,t])}function Xn(){let e=r.useContext(vn),t=Wn(`useRouteError`),n=Kn(`useRouteError`);return e===void 0?t.errors?.[n]:e}function Zn(){let{router:e}=Un(`useNavigate`),t=Kn(`useNavigate`),n=r.useRef(!1);return Dn(()=>{n.current=!0}),r.useCallback(async(r,i={})=>{p(n.current,En),n.current&&(typeof r==`number`?await e.navigate(r):await e.navigate(r,{fromRouteId:t,...i}))},[e,t])}var Qn={};function $n(e,t,n){!t&&!Qn[e]&&(Qn[e]=!0,p(!1,n))}var er={};function tr(e,t){!e&&!er[t]&&(er[t]=!0,console.warn(t))}var nr=r.useOptimistic,rr=()=>void 0;function ir(e){return nr?nr(e):[e,rr]}function ar(e){let t={hasErrorBoundary:e.hasErrorBoundary||e.ErrorBoundary!=null||e.errorElement!=null};return e.Component&&(e.element&&p(!1,"You should not include both `Component` and `element` on your route - `Component` will be used."),Object.assign(t,{element:r.createElement(e.Component),Component:void 0})),e.HydrateFallback&&(e.hydrateFallbackElement&&p(!1,"You should not include both `HydrateFallback` and `hydrateFallbackElement` on your route - `HydrateFallback` will be used."),Object.assign(t,{hydrateFallbackElement:r.createElement(e.HydrateFallback),HydrateFallback:void 0})),e.ErrorBoundary&&(e.errorElement&&p(!1,"You should not include both `ErrorBoundary` and `errorElement` on your route - `ErrorBoundary` will be used."),Object.assign(t,{errorElement:r.createElement(e.ErrorBoundary),ErrorBoundary:void 0})),t}var or=[`HydrateFallback`,`hydrateFallbackElement`],sr=class{constructor(){this.status=`pending`,this.promise=new Promise((e,t)=>{this.resolve=t=>{this.status===`pending`&&(this.status=`resolved`,e(t))},this.reject=e=>{this.status===`pending`&&(this.status=`rejected`,t(e))}})}};function cr({router:e,flushSync:t,onError:n,useTransitions:i}){i=pn()||i;let[a,o]=r.useState(e.state),[s,c]=ir(a),[l,u]=r.useState(),[d,f]=r.useState({isTransitioning:!1}),[p,m]=r.useState(),[h,g]=r.useState(),[_,v]=r.useState(),y=r.useRef(new Map),b=r.useCallback((a,{deletedFetchers:s,newErrors:l,flushSync:d,viewTransitionOpts:_})=>{l&&n&&Object.values(l).forEach(e=>n(e,{location:a.location,params:a.matches[0]?.params??{},pattern:we(a.matches)})),a.fetchers.forEach((e,t)=>{e.data!==void 0&&y.current.set(t,e.data)}),s.forEach(e=>y.current.delete(e)),tr(d===!1||t!=null,'You provided the `flushSync` option to a router update, but you are not using the `<RouterProvider>` from `react-router/dom` so `ReactDOM.flushSync()` is unavailable. Please update your app to `import { RouterProvider } from "react-router/dom"` and ensure you have `react-dom` installed as a dependency to use the `flushSync` option.');let b=e.window!=null&&e.window.document!=null&&typeof e.window.document.startViewTransition==`function`;if(tr(_==null||b,"You provided the `viewTransition` option to a router update, but you do not appear to be running in a DOM environment as `window.startViewTransition` is not available."),!_||!b){t&&d?t(()=>o(a)):i===!1?o(a):r.startTransition(()=>{i===!0&&c(e=>lr(e,a)),o(a)});return}if(t&&d){t(()=>{h&&(p?.resolve(),h.skipTransition()),f({isTransitioning:!0,flushSync:!0,currentLocation:_.currentLocation,nextLocation:_.nextLocation})});let n=e.window.document.startViewTransition(()=>{t(()=>o(a))});n.finished.finally(()=>{t(()=>{m(void 0),g(void 0),u(void 0),f({isTransitioning:!1})})}),t(()=>g(n));return}h?(p?.resolve(),h.skipTransition(),v({state:a,currentLocation:_.currentLocation,nextLocation:_.nextLocation})):(u(a),f({isTransitioning:!0,flushSync:!1,currentLocation:_.currentLocation,nextLocation:_.nextLocation}))},[e.window,t,h,p,i,c,n]);r.useLayoutEffect(()=>e.subscribe(b),[e,b]),r.useEffect(()=>{d.isTransitioning&&!d.flushSync&&m(new sr)},[d]),r.useEffect(()=>{if(p&&l&&e.window){let t=l,n=p.promise,a=e.window.document.startViewTransition(async()=>{i===!1?o(t):r.startTransition(()=>{i===!0&&c(e=>lr(e,t)),o(t)}),await n});a.finished.finally(()=>{m(void 0),g(void 0),u(void 0),f({isTransitioning:!1})}),g(a)}},[l,p,e.window,i,c]),r.useEffect(()=>{p&&l&&s.location.key===l.location.key&&p.resolve()},[p,h,s.location,l]),r.useEffect(()=>{!d.isTransitioning&&_&&(u(_.state),f({isTransitioning:!0,flushSync:!1,currentLocation:_.currentLocation,nextLocation:_.nextLocation}),v(void 0))},[d.isTransitioning,_]);let x=r.useMemo(()=>({createHref:e.createHref,encodeLocation:e.encodeLocation,go:t=>e.navigate(t),push:(t,n,r)=>e.navigate(t,{state:n,preventScrollReset:r?.preventScrollReset}),replace:(t,n,r)=>e.navigate(t,{replace:!0,state:n,preventScrollReset:r?.preventScrollReset})}),[e]),S=e.basename||`/`,C=r.useMemo(()=>({router:e,navigator:x,static:!1,basename:S,onError:n}),[e,x,S,n]);return r.createElement(r.Fragment,null,r.createElement(un.Provider,{value:C},r.createElement(dn.Provider,{value:s},r.createElement(hn.Provider,{value:y.current},r.createElement(mn.Provider,{value:d},r.createElement(mr,{basename:S,location:s.location,navigationType:s.historyAction,navigator:x,useTransitions:i},r.createElement(ur,{routes:e.routes,manifest:e.manifest,future:e.future,state:s,isStatic:!1,onError:n})))))),null)}function lr(e,t){return{...e,navigation:t.navigation.state===`idle`?e.navigation:t.navigation,revalidation:t.revalidation===`idle`?e.revalidation:t.revalidation,actionData:t.navigation.state===`submitting`?e.actionData:t.actionData,fetchers:t.fetchers}}var ur=r.memo(dr);function dr({routes:e,manifest:t,future:n,state:r,isStatic:i,onError:a}){return Pn(e,void 0,{manifest:t,state:r,isStatic:i,onError:a,future:n})}function fr({to:e,replace:t,state:n,relative:i}){f(Tn(),`<Navigate> may be used only in the context of a <Router> component.`);let{static:a}=r.useContext(Z);p(!a,`<Navigate> must not be used on the initial render in a <StaticRouter>. This is a no-op, but you should modify your code so the <Navigate> is only ever rendered in response to some user interaction or state change.`);let{matches:o}=r.useContext(Q),{pathname:s}=$(),c=On(),l=U(e,ge(o),s,i===`path`),u=JSON.stringify(l);return r.useEffect(()=>{c(JSON.parse(u),{replace:t,state:n,relative:i})},[c,u,i,t,n]),null}function pr(e){return jn(e.context)}function mr({basename:e=`/`,children:t=null,location:n,navigationType:i=`POP`,navigator:a,static:o=!1,useTransitions:s}){f(!Tn(),`You cannot render a <Router> inside another <Router>. You should never have more than one in your app.`);let c=e.replace(/^\/*/,`/`),l=r.useMemo(()=>({basename:c,navigator:a,static:o,useTransitions:s,future:{}}),[c,a,o,s]);typeof n==`string`&&(n=v(n));let{pathname:u=`/`,search:d=``,hash:m=``,state:h=null,key:g=`default`,mask:_}=n,y=r.useMemo(()=>{let e=B(u,c);return e==null?null:{location:{pathname:e,search:d,hash:m,state:h,key:g,mask:_},navigationType:i}},[c,u,d,m,h,g,i,_]);return p(y!=null,`<Router basename="${c}"> is not able to match the URL "${u}${d}${m}" because it does not start with the basename, so the <Router> won't render anything.`),y==null?null:r.createElement(Z.Provider,{value:l},r.createElement(_n.Provider,{children:t,value:y}))}r.Component;var hr=`get`,gr=`application/x-www-form-urlencoded`;function _r(e){return typeof HTMLElement<`u`&&e instanceof HTMLElement}function vr(e){return _r(e)&&e.tagName.toLowerCase()===`button`}function yr(e){return _r(e)&&e.tagName.toLowerCase()===`form`}function br(e){return _r(e)&&e.tagName.toLowerCase()===`input`}function xr(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}function Sr(e,t){return e.button===0&&(!t||t===`_self`)&&!xr(e)}function Cr(e=``){return new URLSearchParams(typeof e==`string`||Array.isArray(e)||e instanceof URLSearchParams?e:Object.keys(e).reduce((t,n)=>{let r=e[n];return t.concat(Array.isArray(r)?r.map(e=>[n,e]):[[n,r]])},[]))}function wr(e,t){let n=Cr(e);return t&&t.forEach((e,r)=>{n.has(r)||t.getAll(r).forEach(e=>{n.append(r,e)})}),n}var Tr=null;function Er(){if(Tr===null)try{new FormData(document.createElement(`form`),0),Tr=!1}catch{Tr=!0}return Tr}var Dr=new Set([`application/x-www-form-urlencoded`,`multipart/form-data`,`text/plain`]);function Or(e){return e!=null&&!Dr.has(e)?(p(!1,`"${e}" is not a valid \`encType\` for \`<Form>\`/\`<fetcher.Form>\` and will default to "${gr}"`),null):e}function kr(e,t){let n,r,i,a,o;if(yr(e)){let o=e.getAttribute(`action`);r=o?B(o,t):null,n=e.getAttribute(`method`)||hr,i=Or(e.getAttribute(`enctype`))||gr,a=new FormData(e)}else if(vr(e)||br(e)&&(e.type===`submit`||e.type===`image`)){let o=e.form;if(o==null)throw Error(`Cannot submit a <button> or <input type="submit"> without a <form>`);let s=e.getAttribute(`formaction`)||o.getAttribute(`action`);if(r=s?B(s,t):null,n=e.getAttribute(`formmethod`)||o.getAttribute(`method`)||hr,i=Or(e.getAttribute(`formenctype`))||Or(o.getAttribute(`enctype`))||gr,a=new FormData(o,e),!Er()){let{name:t,type:n,value:r}=e;if(n===`image`){let e=t?`${t}.`:``;a.append(`${e}x`,`0`),a.append(`${e}y`,`0`)}else t&&a.append(t,r)}}else if(_r(e))throw Error(`Cannot submit element that is not <form>, <button>, or <input type="submit|image">`);else n=hr,r=null,i=gr,o=e;return a&&i===`text/plain`&&(o=a,a=void 0),{action:r,method:n.toLowerCase(),encType:i,formData:a,body:o}}Object.getOwnPropertyNames(Object.prototype).sort().join(`\0`);var Ar={"&":`\\u0026`,">":`\\u003e`,"<":`\\u003c`,"\u2028":`\\u2028`,"\u2029":`\\u2029`},jr=/[&><\u2028\u2029]/g;function Mr(e){return e.replace(jr,e=>Ar[e])}function Nr(e,t){if(e===!1||e==null)throw Error(t)}function Pr(e,t,n,r){let i=typeof e==`string`?new URL(e,typeof window>`u`?`server://singlefetch/`:window.location.origin):e;return n?i.pathname.endsWith(`/`)?i.pathname=`${i.pathname}_.${r}`:i.pathname=`${i.pathname}.${r}`:i.pathname===`/`?i.pathname=`_root.${r}`:t&&B(i.pathname,t)===`/`?i.pathname=`${ve(t)}/_root.${r}`:i.pathname=`${ve(i.pathname)}.${r}`,i}async function Fr(e,t){if(e.id in t)return t[e.id];try{let r=await n(()=>import(e.module),[]);return t[e.id]=r,r}catch(t){return console.error(`Error loading route module \`${e.module}\`, reloading page...`),console.error(t),window.__reactRouterContext&&window.__reactRouterContext.isSpaMode,window.location.reload(),new Promise(()=>{})}}function Ir(e){return e!=null&&typeof e.page==`string`}function Lr(e){return e==null?!1:e.href==null?e.rel===`preload`&&typeof e.imageSrcSet==`string`&&typeof e.imageSizes==`string`:typeof e.rel==`string`&&typeof e.href==`string`}async function Rr(e,t,n){return Ur((await Promise.all(e.map(async e=>{let r=t.routes[e.route.id];if(r){let e=await Fr(r,n);return e.links?e.links():[]}return[]}))).flat(1).filter(Lr).filter(e=>e.rel===`stylesheet`||e.rel===`preload`).map(e=>e.rel===`stylesheet`?{...e,rel:`prefetch`,as:`style`}:{...e,rel:`prefetch`}))}function zr(e,t,n,r,i,a){let o=(e,t)=>n[t]?e.route.id!==n[t].route.id:!0,s=(e,t)=>n[t].pathname!==e.pathname||n[t].route.path?.endsWith(`*`)&&n[t].params[`*`]!==e.params[`*`];return a===`assets`?t.filter((e,t)=>o(e,t)||s(e,t)):a===`data`?t.filter((t,a)=>{let c=r.routes[t.route.id];if(!c||!c.hasLoader)return!1;if(o(t,a)||s(t,a))return!0;if(t.route.shouldRevalidate){let r=t.route.shouldRevalidate({currentUrl:new URL(i.pathname+i.search+i.hash,window.origin),currentParams:n[0]?.params||{},nextUrl:new URL(e,window.origin),nextParams:t.params,defaultShouldRevalidate:!0});if(typeof r==`boolean`)return r}return!0}):[]}function Br(e,t,{includeHydrateFallback:n}={}){return Vr(e.map(e=>{let r=t.routes[e.route.id];if(!r)return[];let i=[r.module];return r.clientActionModule&&(i=i.concat(r.clientActionModule)),r.clientLoaderModule&&(i=i.concat(r.clientLoaderModule)),n&&r.hydrateFallbackModule&&(i=i.concat(r.hydrateFallbackModule)),r.imports&&(i=i.concat(r.imports)),i}).flat(1))}function Vr(e){return[...new Set(e)]}function Hr(e){let t={},n=Object.keys(e).sort();for(let r of n)t[r]=e[r];return t}function Ur(e,t){let n=new Set,r=new Set(t);return e.reduce((e,i)=>{if(t&&!Ir(i)&&i.as===`script`&&i.href&&r.has(i.href))return e;let a=JSON.stringify(Hr(i));return n.has(a)||(n.add(a),e.push({key:a,link:i})),e},[])}function Wr(){let e=r.useContext(un);return Nr(e,`You must render this element inside a <DataRouterContext.Provider> element`),e}function Gr(){let e=r.useContext(dn);return Nr(e,`You must render this element inside a <DataRouterStateContext.Provider> element`),e}var Kr=r.createContext(void 0);Kr.displayName=`FrameworkContext`;function qr(){let e=r.useContext(Kr);return Nr(e,`You must render this element inside a <HydratedRouter> element`),e}function Jr(e,t){let n=r.useContext(Kr),[i,a]=r.useState(!1),[o,s]=r.useState(!1),{onFocus:c,onBlur:l,onMouseEnter:u,onMouseLeave:d,onTouchStart:f}=t,p=r.useRef(null);r.useEffect(()=>{if(e===`render`&&s(!0),e===`viewport`){let e=new IntersectionObserver(e=>{e.forEach(e=>{s(e.isIntersecting)})},{threshold:.5});return p.current&&e.observe(p.current),()=>{e.disconnect()}}},[e]),r.useEffect(()=>{if(i){let e=setTimeout(()=>{s(!0)},100);return()=>{clearTimeout(e)}}},[i]);let m=()=>{a(!0)},h=()=>{a(!1),s(!1)};return n?e===`intent`?[o,p,{onFocus:Yr(c,m),onBlur:Yr(l,h),onMouseEnter:Yr(u,m),onMouseLeave:Yr(d,h),onTouchStart:Yr(f,m)}]:[o,p,{}]:[!1,p,{}]}function Yr(e,t){return n=>{e&&e(n),n.defaultPrevented||t(n)}}function Xr({page:e,...t}){let n=pn(),{router:i}=Wr(),a=r.useMemo(()=>j(i.routes,e,i.basename),[i.routes,e,i.basename]);return a?n?r.createElement(Qr,{page:e,matches:a,...t}):r.createElement($r,{page:e,matches:a,...t}):null}function Zr(e){let{manifest:t,routeModules:n}=qr(),[i,a]=r.useState([]);return r.useEffect(()=>{let r=!1;return Rr(e,t,n).then(e=>{r||a(e)}),()=>{r=!0}},[e,t,n]),i}function Qr({page:e,matches:t,...n}){let i=$(),{future:a}=qr(),{basename:o}=Wr(),s=r.useMemo(()=>{if(e===i.pathname+i.search+i.hash)return[];let n=Pr(e,o,a.v8_trailingSlashAwareDataRequests,`rsc`),r=!1,s=[];for(let e of t)typeof e.route.shouldRevalidate==`function`?r=!0:s.push(e.route.id);return r&&s.length>0&&n.searchParams.set(`_routes`,s.join(`,`)),[n.pathname+n.search]},[o,a.v8_trailingSlashAwareDataRequests,e,i,t]);return r.createElement(r.Fragment,null,s.map(e=>r.createElement(`link`,{key:e,rel:`prefetch`,as:`fetch`,href:e,...n})))}function $r({page:e,matches:t,...n}){let i=$(),{future:a,manifest:o,routeModules:s}=qr(),{basename:c}=Wr(),{loaderData:l,matches:u}=Gr(),d=r.useMemo(()=>zr(e,t,u,o,i,`data`),[e,t,u,o,i]),f=r.useMemo(()=>zr(e,t,u,o,i,`assets`),[e,t,u,o,i]),p=r.useMemo(()=>{if(e===i.pathname+i.search+i.hash)return[];let n=new Set,r=!1;if(t.forEach(e=>{let t=o.routes[e.route.id];!t||!t.hasLoader||(!d.some(t=>t.route.id===e.route.id)&&e.route.id in l&&s[e.route.id]?.shouldRevalidate||t.hasClientLoader?r=!0:n.add(e.route.id))}),n.size===0)return[];let u=Pr(e,c,a.v8_trailingSlashAwareDataRequests,`data`);return r&&n.size>0&&u.searchParams.set(`_routes`,t.filter(e=>n.has(e.route.id)).map(e=>e.route.id).join(`,`)),[u.pathname+u.search]},[c,a.v8_trailingSlashAwareDataRequests,l,i,o,d,t,e,s]),m=r.useMemo(()=>Br(f,o),[f,o]),h=Zr(f);return r.createElement(r.Fragment,null,p.map(e=>r.createElement(`link`,{key:e,rel:`prefetch`,as:`fetch`,href:e,...n})),m.map(e=>r.createElement(`link`,{key:e,rel:`modulepreload`,href:e,...n})),h.map(({key:e,link:t})=>r.createElement(`link`,{key:e,nonce:n.nonce,...t,crossOrigin:t.crossOrigin??n.crossOrigin})))}function ei(...e){return t=>{e.forEach(e=>{typeof e==`function`?e(t):e!=null&&(e.current=t)})}}r.Component;var ti=typeof window<`u`&&window.document!==void 0&&window.document.createElement!==void 0;try{ti&&(window.__reactRouterVersion=`7.16.0`)}catch{}function ni(e,t){return Qe({basename:t?.basename,getContext:t?.getContext,future:t?.future,history:d({window:t?.window}),hydrationData:t?.hydrationData||ri(),routes:e,mapRouteProperties:ar,hydrationRouteProperties:or,dataStrategy:t?.dataStrategy,patchRoutesOnNavigation:t?.patchRoutesOnNavigation,window:t?.window,instrumentations:t?.instrumentations}).initialize()}function ri(){let e=window?.__staticRouterHydrationData;return e&&e.errors&&(e={...e,errors:ii(e.errors)}),e}function ii(e){if(!e)return null;let t=Object.entries(e),n={};for(let[e,r]of t)if(r&&r.__type===`RouteErrorResponse`)n[e]=new Se(r.status,r.statusText,r.data,r.internal===!0);else if(r&&r.__type===`Error`){if(r.__subType){let t=window[r.__subType];if(typeof t==`function`)try{let i=new t(r.message);i.stack=``,n[e]=i}catch{}}if(n[e]==null){let t=Error(r.message);t.stack=``,n[e]=t}}else n[e]=r;return n}function ai({basename:e,children:t,history:n,useTransitions:i}){let[a,o]=r.useState({action:n.action,location:n.location}),s=r.useCallback(e=>{i===!1?o(e):r.startTransition(()=>o(e))},[i]);return r.useLayoutEffect(()=>n.listen(s),[n,s]),r.createElement(mr,{basename:e,children:t,location:a.location,navigationType:a.action,navigator:n,useTransitions:i})}ai.displayName=`unstable_HistoryRouter`;var oi=/^(?:[a-z][a-z0-9+.-]*:|\/\/)/i,si=r.forwardRef(function({onClick:e,discover:t=`render`,prefetch:n=`none`,relative:i,reloadDocument:a,replace:o,mask:s,state:c,target:l,to:u,preventScrollReset:d,viewTransition:f,defaultShouldRevalidate:p,...m},h){let{basename:g,navigator:_,useTransitions:v}=r.useContext(Z),y=typeof u==`string`&&oi.test(u),b=Ee(u,g);u=b.to;let x=wn(u,{relative:i}),S=$(),C=null;if(s){let e=U(s,[],S.mask?S.mask.pathname:`/`,!0);g!==`/`&&(e.pathname=e.pathname===`/`?g:W([g,e.pathname])),C=_.createHref(e)}let[w,T,E]=Jr(n,m),D=mi(u,{replace:o,mask:s,state:c,target:l,preventScrollReset:d,relative:i,viewTransition:f,defaultShouldRevalidate:p,useTransitions:v});function O(t){e&&e(t),t.defaultPrevented||D(t)}let k=!(b.isExternal||a),A=r.createElement(`a`,{...m,...E,href:(k?C:void 0)||b.absoluteURL||x,onClick:k?O:e,ref:ei(h,T),target:l,"data-discover":!y&&t===`render`?`true`:void 0});return w&&!y?r.createElement(r.Fragment,null,A,r.createElement(Xr,{page:x})):A});si.displayName=`Link`;var ci=r.forwardRef(function({"aria-current":e=`page`,caseSensitive:t=!1,className:n=``,end:i=!1,style:a,to:o,viewTransition:s,children:c,...l},u){let d=Nn(o,{relative:l.relative}),f=$(),p=r.useContext(dn),{navigator:m,basename:h}=r.useContext(Z),g=p!=null&&Ti(d)&&s===!0,_=m.encodeLocation?m.encodeLocation(d).pathname:d.pathname,v=f.pathname,y=p&&p.navigation&&p.navigation.location?p.navigation.location.pathname:null;t||(v=v.toLowerCase(),y=y?y.toLowerCase():null,_=_.toLowerCase()),y&&h&&(y=B(y,h)||y);let b=_!==`/`&&_.endsWith(`/`)?_.length-1:_.length,x=v===_||!i&&v.startsWith(_)&&v.charAt(b)===`/`,S=y!=null&&(y===_||!i&&y.startsWith(_)&&y.charAt(_.length)===`/`),C={isActive:x,isPending:S,isTransitioning:g},w=x?e:void 0,T;T=typeof n==`function`?n(C):[n,x?`active`:null,S?`pending`:null,g?`transitioning`:null].filter(Boolean).join(` `);let E=typeof a==`function`?a(C):a;return r.createElement(si,{...l,"aria-current":w,className:T,ref:u,style:E,to:o,viewTransition:s},typeof c==`function`?c(C):c)});ci.displayName=`NavLink`;var li=r.forwardRef(({discover:e=`render`,fetcherKey:t,navigate:n,reloadDocument:i,replace:a,state:o,method:s=hr,action:c,onSubmit:l,relative:u,preventScrollReset:d,viewTransition:f,defaultShouldRevalidate:p,...m},h)=>{let{useTransitions:g}=r.useContext(Z),_=vi(),v=yi(c,{relative:u}),y=s.toLowerCase()===`get`?`get`:`post`,b=typeof c==`string`&&oi.test(c);return r.createElement(`form`,{ref:h,method:y,action:v,onSubmit:i?l:e=>{if(l&&l(e),e.defaultPrevented)return;e.preventDefault();let i=e.nativeEvent.submitter,c=i?.getAttribute(`formmethod`)||s,m=()=>_(i||e.currentTarget,{fetcherKey:t,method:c,navigate:n,replace:a,state:o,relative:u,preventScrollReset:d,viewTransition:f,defaultShouldRevalidate:p});g&&n!==!1?r.startTransition(()=>m()):m()},...m,"data-discover":!b&&e===`render`?`true`:void 0})});li.displayName=`Form`;function ui({getKey:e,storageKey:t,...n}){let i=r.useContext(Kr),{basename:a}=r.useContext(Z),o=$(),s=Yn();Ci({getKey:e,storageKey:t});let c=r.useMemo(()=>{if(!i||!e)return null;let t=Si(o,s,a,e);return t===o.key?null:t},[]);if(!i||i.isSpaMode)return null;let l=((e,t)=>{if(!window.history.state||!window.history.state.key){let e=Math.random().toString(32).slice(2);window.history.replaceState({key:e},``)}try{let n=JSON.parse(sessionStorage.getItem(e)||`{}`)[t||window.history.state.key];typeof n==`number`&&window.scrollTo(0,n)}catch(t){console.error(t),sessionStorage.removeItem(e)}}).toString();return r.createElement(`script`,{...n,suppressHydrationWarning:!0,dangerouslySetInnerHTML:{__html:`(${l})(${Mr(JSON.stringify(t||bi))}, ${Mr(JSON.stringify(c))})`}})}ui.displayName=`ScrollRestoration`;function di(e){return`${e} must be used within a data router. See https://reactrouter.com/en/main/routers/picking-a-router.`}function fi(e){let t=r.useContext(un);return f(t,di(e)),t}function pi(e){let t=r.useContext(dn);return f(t,di(e)),t}function mi(e,{target:t,replace:n,mask:i,state:a,preventScrollReset:o,relative:s,viewTransition:c,defaultShouldRevalidate:l,useTransitions:u}={}){let d=On(),f=$(),p=Nn(e,{relative:s});return r.useCallback(m=>{if(Sr(m,t)){m.preventDefault();let t=n===void 0?_(f)===_(p):n,h=()=>d(e,{replace:t,mask:i,state:a,preventScrollReset:o,relative:s,viewTransition:c,defaultShouldRevalidate:l});u?r.startTransition(()=>h()):h()}},[f,d,p,n,i,a,t,e,o,s,c,l,u])}function hi(e){p(typeof URLSearchParams<`u`,"You cannot use the `useSearchParams` hook in a browser that does not support the URLSearchParams API. If you need to support Internet Explorer 11, we recommend you load a polyfill such as https://github.com/ungap/url-search-params.");let t=r.useRef(Cr(e)),n=r.useRef(!1),i=$(),a=r.useMemo(()=>wr(i.search,n.current?null:t.current),[i.search]),o=On();return[a,r.useCallback((e,t)=>{let r=Cr(typeof e==`function`?e(new URLSearchParams(a)):e);n.current=!0,o(`?`+r,t)},[o,a])]}var gi=0,_i=()=>`__${String(++gi)}__`;function vi(){let{router:e}=fi(`useSubmit`),{basename:t}=r.useContext(Z),n=qn(),i=e.fetch,a=e.navigate;return r.useCallback(async(e,r={})=>{let{action:o,method:s,encType:c,formData:l,body:u}=kr(e,t);r.navigate===!1?await i(r.fetcherKey||_i(),n,r.action||o,{defaultShouldRevalidate:r.defaultShouldRevalidate,preventScrollReset:r.preventScrollReset,formData:l,body:u,formMethod:r.method||s,formEncType:r.encType||c,flushSync:r.flushSync}):await a(r.action||o,{defaultShouldRevalidate:r.defaultShouldRevalidate,preventScrollReset:r.preventScrollReset,formData:l,body:u,formMethod:r.method||s,formEncType:r.encType||c,replace:r.replace,state:r.state,fromRouteId:n,flushSync:r.flushSync,viewTransition:r.viewTransition})},[i,a,t,n])}function yi(e,{relative:t}={}){let{basename:n}=r.useContext(Z),i=r.useContext(Q);f(i,`useFormAction must be used inside a RouteContext`);let[a]=i.matches.slice(-1),o={...Nn(e||`.`,{relative:t})},s=$();if(e==null){o.search=s.search;let e=new URLSearchParams(o.search),t=e.getAll(`index`);if(t.some(e=>e===``)){e.delete(`index`),t.filter(e=>e).forEach(t=>e.append(`index`,t));let n=e.toString();o.search=n?`?${n}`:``}}return(!e||e===`.`)&&a.route.index&&(o.search=o.search?o.search.replace(/^\?/,`?index&`):`?index`),n!==`/`&&(o.pathname=o.pathname===`/`?n:W([n,o.pathname])),_(o)}var bi=`react-router-scroll-positions`,xi={};function Si(e,t,n,r){let i=null;return r&&(i=r(n===`/`?e:{...e,pathname:B(e.pathname,n)||e.pathname},t)),i??=e.key,i}function Ci({getKey:e,storageKey:t}={}){let{router:n}=fi(`useScrollRestoration`),{restoreScrollPosition:i,preventScrollReset:a}=pi(`useScrollRestoration`),{basename:o}=r.useContext(Z),s=$(),c=Yn(),l=Jn();r.useEffect(()=>(window.history.scrollRestoration=`manual`,()=>{window.history.scrollRestoration=`auto`}),[]),wi(r.useCallback(()=>{if(l.state===`idle`){let t=Si(s,c,o,e);xi[t]=window.scrollY}try{sessionStorage.setItem(t||bi,JSON.stringify(xi))}catch(e){p(!1,`Failed to save scroll positions in sessionStorage, <ScrollRestoration /> will not work properly (${e}).`)}window.history.scrollRestoration=`auto`},[l.state,e,o,s,c,t])),typeof document<`u`&&(r.useLayoutEffect(()=>{try{let e=sessionStorage.getItem(t||bi);e&&(xi=JSON.parse(e))}catch{}},[t]),r.useLayoutEffect(()=>{let t=n?.enableScrollRestoration(xi,()=>window.scrollY,e?(t,n)=>Si(t,n,o,e):void 0);return()=>t&&t()},[n,o,e]),r.useLayoutEffect(()=>{if(i!==!1){if(typeof i==`number`){window.scrollTo(0,i);return}try{if(s.hash){let e=document.getElementById(decodeURIComponent(s.hash.slice(1)));if(e){e.scrollIntoView();return}}}catch{p(!1,`"${s.hash.slice(1)}" is not a decodable element ID. The view will not scroll to it.`)}a!==!0&&window.scrollTo(0,0)}},[s,i,a]))}function wi(e,t){let{capture:n}=t||{};r.useEffect(()=>{let t=n==null?void 0:{capture:n};return window.addEventListener(`pagehide`,e,t),()=>{window.removeEventListener(`pagehide`,e,t)}},[e,n])}function Ti(e,{relative:t}={}){let n=r.useContext(mn);f(n!=null,"`useViewTransitionState` must be used within `react-router-dom`'s `RouterProvider`. Did you accidentally import `RouterProvider` from `react-router`?");let{basename:i}=fi(`useViewTransitionState`),a=Nn(e,{relative:t});if(!n.isTransitioning)return!1;let o=B(n.currentLocation.pathname,i)||n.currentLocation.pathname,s=B(n.nextLocation.pathname,i)||n.nextLocation.pathname;return R(a.pathname,s)!=null||R(a.pathname,o)!=null}export{cr as a,$ as c,hi as d,pr as i,On as l,ci as n,x as o,fr as r,ni as s,si as t,Mn as u};
|