@massdriver/backstage-plugin 1.0.0
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/LICENSE +202 -0
- package/README.md +196 -0
- package/dist/MassdriverRouter.esm.js +78 -0
- package/dist/MassdriverRouter.esm.js.map +1 -0
- package/dist/api.esm.js +119 -0
- package/dist/api.esm.js.map +1 -0
- package/dist/assets/massdriver-logo-dark.svg +55 -0
- package/dist/assets/massdriver-logo-light.svg +50 -0
- package/dist/components/AttributesColumn.esm.js +95 -0
- package/dist/components/AttributesColumn.esm.js.map +1 -0
- package/dist/components/AttributesSummaryCell.esm.js +103 -0
- package/dist/components/AttributesSummaryCell.esm.js.map +1 -0
- package/dist/components/AuthedIcon.esm.js +26 -0
- package/dist/components/AuthedIcon.esm.js.map +1 -0
- package/dist/components/ConditionsCell.esm.js +48 -0
- package/dist/components/ConditionsCell.esm.js.map +1 -0
- package/dist/components/DisabledAction.esm.js +30 -0
- package/dist/components/DisabledAction.esm.js.map +1 -0
- package/dist/components/EntityMassdriverContent/EntityMassdriverContent.esm.js +80 -0
- package/dist/components/EntityMassdriverContent/EntityMassdriverContent.esm.js.map +1 -0
- package/dist/components/EntityMassdriverContent/index.esm.js +6 -0
- package/dist/components/EntityMassdriverContent/index.esm.js.map +1 -0
- package/dist/components/EntityMassdriverOverviewCard/EntityMassdriverOverviewCard.esm.js +75 -0
- package/dist/components/EntityMassdriverOverviewCard/EntityMassdriverOverviewCard.esm.js.map +1 -0
- package/dist/components/EntityMassdriverOverviewCard/index.esm.js +6 -0
- package/dist/components/EntityMassdriverOverviewCard/index.esm.js.map +1 -0
- package/dist/components/ForkPill.esm.js +84 -0
- package/dist/components/ForkPill.esm.js.map +1 -0
- package/dist/components/InstanceStatusIndicator.esm.js +21 -0
- package/dist/components/InstanceStatusIndicator.esm.js.map +1 -0
- package/dist/components/InstanceStatusPill.esm.js +67 -0
- package/dist/components/InstanceStatusPill.esm.js.map +1 -0
- package/dist/components/MassdriverIcon.esm.js +13 -0
- package/dist/components/MassdriverIcon.esm.js.map +1 -0
- package/dist/components/MassdriverSidebarItem.esm.js +45 -0
- package/dist/components/MassdriverSidebarItem.esm.js.map +1 -0
- package/dist/components/NotFound.esm.js +44 -0
- package/dist/components/NotFound.esm.js.map +1 -0
- package/dist/components/OpenInMassdriverButton.esm.js +24 -0
- package/dist/components/OpenInMassdriverButton.esm.js.map +1 -0
- package/dist/components/PageLayout.esm.js +88 -0
- package/dist/components/PageLayout.esm.js.map +1 -0
- package/dist/components/RouterLinkAdapter.esm.js +12 -0
- package/dist/components/RouterLinkAdapter.esm.js.map +1 -0
- package/dist/components/VersionBadge.esm.js +57 -0
- package/dist/components/VersionBadge.esm.js.map +1 -0
- package/dist/components/grantColumns.esm.js +56 -0
- package/dist/components/grantColumns.esm.js.map +1 -0
- package/dist/components/icons/BundleIcon.esm.js +7 -0
- package/dist/components/icons/BundleIcon.esm.js.map +1 -0
- package/dist/components/icons/FolderOutlinedIcon.esm.js +7 -0
- package/dist/components/icons/FolderOutlinedIcon.esm.js.map +1 -0
- package/dist/components/icons/TokenIcon.esm.js +7 -0
- package/dist/components/icons/TokenIcon.esm.js.map +1 -0
- package/dist/entity.esm.js +23 -0
- package/dist/entity.esm.js.map +1 -0
- package/dist/features/environment/CompareDeploymentsDialog/CompareDeploymentsDialog.esm.js +115 -0
- package/dist/features/environment/CompareDeploymentsDialog/CompareDeploymentsDialog.esm.js.map +1 -0
- package/dist/features/environment/CompareDeploymentsDialog/ResultsStep.esm.js +165 -0
- package/dist/features/environment/CompareDeploymentsDialog/ResultsStep.esm.js.map +1 -0
- package/dist/features/environment/CompareDeploymentsDialog/SelectStep.esm.js +216 -0
- package/dist/features/environment/CompareDeploymentsDialog/SelectStep.esm.js.map +1 -0
- package/dist/features/environment/CompareDeploymentsDialog/compareColumns.esm.js +86 -0
- package/dist/features/environment/CompareDeploymentsDialog/compareColumns.esm.js.map +1 -0
- package/dist/features/environment/CompareDeploymentsDialog/flattenDeploymentComparison.esm.js +57 -0
- package/dist/features/environment/CompareDeploymentsDialog/flattenDeploymentComparison.esm.js.map +1 -0
- package/dist/features/environment/CompareDeploymentsDialog/queries.esm.js +53 -0
- package/dist/features/environment/CompareDeploymentsDialog/queries.esm.js.map +1 -0
- package/dist/features/environment/CompareEnvironmentsDialog/CompareEnvironmentsDialog.esm.js +94 -0
- package/dist/features/environment/CompareEnvironmentsDialog/CompareEnvironmentsDialog.esm.js.map +1 -0
- package/dist/features/environment/CompareEnvironmentsDialog/ComparisonValueCell.esm.js +67 -0
- package/dist/features/environment/CompareEnvironmentsDialog/ComparisonValueCell.esm.js.map +1 -0
- package/dist/features/environment/CompareEnvironmentsDialog/ResultsStep.esm.js +202 -0
- package/dist/features/environment/CompareEnvironmentsDialog/ResultsStep.esm.js.map +1 -0
- package/dist/features/environment/CompareEnvironmentsDialog/SelectStep.esm.js +183 -0
- package/dist/features/environment/CompareEnvironmentsDialog/SelectStep.esm.js.map +1 -0
- package/dist/features/environment/CompareEnvironmentsDialog/compareColumns.esm.js +73 -0
- package/dist/features/environment/CompareEnvironmentsDialog/compareColumns.esm.js.map +1 -0
- package/dist/features/environment/CompareEnvironmentsDialog/flattenComparison.esm.js +70 -0
- package/dist/features/environment/CompareEnvironmentsDialog/flattenComparison.esm.js.map +1 -0
- package/dist/features/environment/CompareEnvironmentsDialog/queries.esm.js +32 -0
- package/dist/features/environment/CompareEnvironmentsDialog/queries.esm.js.map +1 -0
- package/dist/features/environment/EnvironmentGraphPage.esm.js +131 -0
- package/dist/features/environment/EnvironmentGraphPage.esm.js.map +1 -0
- package/dist/features/environment/GraphHeader/EnvironmentDefaults.esm.js +252 -0
- package/dist/features/environment/GraphHeader/EnvironmentDefaults.esm.js.map +1 -0
- package/dist/features/environment/GraphHeader/GraphHeader.esm.js +247 -0
- package/dist/features/environment/GraphHeader/GraphHeader.esm.js.map +1 -0
- package/dist/features/environment/GraphHeader/HeaderActions.esm.js +127 -0
- package/dist/features/environment/GraphHeader/HeaderActions.esm.js.map +1 -0
- package/dist/features/environment/GraphHeader/Switcher.esm.js +75 -0
- package/dist/features/environment/GraphHeader/Switcher.esm.js.map +1 -0
- package/dist/features/environment/GraphHeader/queries.esm.js +60 -0
- package/dist/features/environment/GraphHeader/queries.esm.js.map +1 -0
- package/dist/features/environment/InstanceDrawer/AlarmCard.esm.js +151 -0
- package/dist/features/environment/InstanceDrawer/AlarmCard.esm.js.map +1 -0
- package/dist/features/environment/InstanceDrawer/InstanceDrawer.esm.js +165 -0
- package/dist/features/environment/InstanceDrawer/InstanceDrawer.esm.js.map +1 -0
- package/dist/features/environment/InstanceDrawer/InstanceDrawerHeader.esm.js +241 -0
- package/dist/features/environment/InstanceDrawer/InstanceDrawerHeader.esm.js.map +1 -0
- package/dist/features/environment/InstanceDrawer/InstanceTabs.esm.js +119 -0
- package/dist/features/environment/InstanceDrawer/InstanceTabs.esm.js.map +1 -0
- package/dist/features/environment/InstanceDrawer/TabState.esm.js +30 -0
- package/dist/features/environment/InstanceDrawer/TabState.esm.js.map +1 -0
- package/dist/features/environment/InstanceDrawer/formsDataSource.esm.js +25 -0
- package/dist/features/environment/InstanceDrawer/formsDataSource.esm.js.map +1 -0
- package/dist/features/environment/InstanceDrawer/helpers.esm.js +282 -0
- package/dist/features/environment/InstanceDrawer/helpers.esm.js.map +1 -0
- package/dist/features/environment/InstanceDrawer/queries.esm.js +281 -0
- package/dist/features/environment/InstanceDrawer/queries.esm.js.map +1 -0
- package/dist/features/environment/InstanceDrawer/tabs/ConfigTab.esm.js +170 -0
- package/dist/features/environment/InstanceDrawer/tabs/ConfigTab.esm.js.map +1 -0
- package/dist/features/environment/InstanceDrawer/tabs/DependenciesTab.esm.js +413 -0
- package/dist/features/environment/InstanceDrawer/tabs/DependenciesTab.esm.js.map +1 -0
- package/dist/features/environment/InstanceDrawer/tabs/DeploymentLogsPanel.esm.js +191 -0
- package/dist/features/environment/InstanceDrawer/tabs/DeploymentLogsPanel.esm.js.map +1 -0
- package/dist/features/environment/InstanceDrawer/tabs/DeploymentReadOnlyActions.esm.js +63 -0
- package/dist/features/environment/InstanceDrawer/tabs/DeploymentReadOnlyActions.esm.js.map +1 -0
- package/dist/features/environment/InstanceDrawer/tabs/GuideTab.esm.js +48 -0
- package/dist/features/environment/InstanceDrawer/tabs/GuideTab.esm.js.map +1 -0
- package/dist/features/environment/InstanceDrawer/tabs/HistoryTab.esm.js +446 -0
- package/dist/features/environment/InstanceDrawer/tabs/HistoryTab.esm.js.map +1 -0
- package/dist/features/environment/InstanceDrawer/tabs/MonitorTab.esm.js +146 -0
- package/dist/features/environment/InstanceDrawer/tabs/MonitorTab.esm.js.map +1 -0
- package/dist/features/environment/InstanceDrawer/tabs/OverviewTab.esm.js +572 -0
- package/dist/features/environment/InstanceDrawer/tabs/OverviewTab.esm.js.map +1 -0
- package/dist/features/environment/InstanceDrawer/tabs/ResourcesTab.esm.js +471 -0
- package/dist/features/environment/InstanceDrawer/tabs/ResourcesTab.esm.js.map +1 -0
- package/dist/features/environment/InstanceDrawer/tabs/SecretsTab.esm.js +109 -0
- package/dist/features/environment/InstanceDrawer/tabs/SecretsTab.esm.js.map +1 -0
- package/dist/features/environment/InstanceDrawer/tabs/ViewDeploymentDetails.esm.js +384 -0
- package/dist/features/environment/InstanceDrawer/tabs/ViewDeploymentDetails.esm.js.map +1 -0
- package/dist/features/environment/InstanceDrawer/tabs/flattenParams.esm.js +23 -0
- package/dist/features/environment/InstanceDrawer/tabs/flattenParams.esm.js.map +1 -0
- package/dist/features/environment/InstanceDrawer/useInstanceApiQuery.esm.js +6 -0
- package/dist/features/environment/InstanceDrawer/useInstanceApiQuery.esm.js.map +1 -0
- package/dist/features/environment/InstanceDrawer/useOverflowMeasure.esm.js +55 -0
- package/dist/features/environment/InstanceDrawer/useOverflowMeasure.esm.js.map +1 -0
- package/dist/features/environment/InstanceDrawer/useResizableWidth.esm.js +44 -0
- package/dist/features/environment/InstanceDrawer/useResizableWidth.esm.js.map +1 -0
- package/dist/features/environment/components/InstanceStatusPill.esm.js +54 -0
- package/dist/features/environment/components/InstanceStatusPill.esm.js.map +1 -0
- package/dist/features/environment/graph/Diagram.esm.js +143 -0
- package/dist/features/environment/graph/Diagram.esm.js.map +1 -0
- package/dist/features/environment/graph/DiagramNode.constants.esm.js +5 -0
- package/dist/features/environment/graph/DiagramNode.constants.esm.js.map +1 -0
- package/dist/features/environment/graph/DiagramNode.esm.js +221 -0
- package/dist/features/environment/graph/DiagramNode.esm.js.map +1 -0
- package/dist/features/environment/graph/NodeMeta.esm.js +182 -0
- package/dist/features/environment/graph/NodeMeta.esm.js.map +1 -0
- package/dist/features/environment/graph/NodeVersionBadges.esm.js +150 -0
- package/dist/features/environment/graph/NodeVersionBadges.esm.js.map +1 -0
- package/dist/features/environment/graph/diagramFactory.esm.js +151 -0
- package/dist/features/environment/graph/diagramFactory.esm.js.map +1 -0
- package/dist/features/environment/graph/handles/ExpandableHandleWrapper.esm.js +174 -0
- package/dist/features/environment/graph/handles/ExpandableHandleWrapper.esm.js.map +1 -0
- package/dist/features/environment/graph/handles/NodeHandle.esm.js +45 -0
- package/dist/features/environment/graph/handles/NodeHandle.esm.js.map +1 -0
- package/dist/features/environment/graph/handles/NodeHandleTooltip.esm.js +134 -0
- package/dist/features/environment/graph/handles/NodeHandleTooltip.esm.js.map +1 -0
- package/dist/features/environment/graph/handles/handleTypes.esm.js +170 -0
- package/dist/features/environment/graph/handles/handleTypes.esm.js.map +1 -0
- package/dist/features/environment/graph/handles/useAnimationFrameSync.esm.js +19 -0
- package/dist/features/environment/graph/handles/useAnimationFrameSync.esm.js.map +1 -0
- package/dist/features/environment/graph/handles/useRadialPositions.esm.js +37 -0
- package/dist/features/environment/graph/handles/useRadialPositions.esm.js.map +1 -0
- package/dist/features/environment/graph/handles/useTransitionLifecycle.esm.js +19 -0
- package/dist/features/environment/graph/handles/useTransitionLifecycle.esm.js.map +1 -0
- package/dist/features/environment/graph/hasUndeployedPlan.esm.js +43 -0
- package/dist/features/environment/graph/hasUndeployedPlan.esm.js.map +1 -0
- package/dist/features/environment/graph/queries.esm.js +103 -0
- package/dist/features/environment/graph/queries.esm.js.map +1 -0
- package/dist/features/environment/graph/useDiagramSnapshot.esm.js +43 -0
- package/dist/features/environment/graph/useDiagramSnapshot.esm.js.map +1 -0
- package/dist/features/environment/realtime/RealtimeProvider.esm.js +43 -0
- package/dist/features/environment/realtime/RealtimeProvider.esm.js.map +1 -0
- package/dist/features/environment/realtime/queries.esm.js +76 -0
- package/dist/features/environment/realtime/queries.esm.js.map +1 -0
- package/dist/features/environment/realtime/useLiveRelayQuery.esm.js +36 -0
- package/dist/features/environment/realtime/useLiveRelayQuery.esm.js.map +1 -0
- package/dist/features/project/ProjectDetailsPage.esm.js +101 -0
- package/dist/features/project/ProjectDetailsPage.esm.js.map +1 -0
- package/dist/features/project/tabs/ComponentsTab.esm.js +149 -0
- package/dist/features/project/tabs/ComponentsTab.esm.js.map +1 -0
- package/dist/features/project/tabs/EnvStatus.esm.js +149 -0
- package/dist/features/project/tabs/EnvStatus.esm.js.map +1 -0
- package/dist/features/project/tabs/EnvironmentsTab.esm.js +199 -0
- package/dist/features/project/tabs/EnvironmentsTab.esm.js.map +1 -0
- package/dist/features/project/tabs/OverviewTab.esm.js +420 -0
- package/dist/features/project/tabs/OverviewTab.esm.js.map +1 -0
- package/dist/features/projects/ProjectsListPage.esm.js +50 -0
- package/dist/features/projects/ProjectsListPage.esm.js.map +1 -0
- package/dist/features/projects/ProjectsListPageLazy.esm.js +12 -0
- package/dist/features/projects/ProjectsListPageLazy.esm.js.map +1 -0
- package/dist/features/projects/projectColumns.esm.js +38 -0
- package/dist/features/projects/projectColumns.esm.js.map +1 -0
- package/dist/features/projects/useProjects.esm.js +48 -0
- package/dist/features/projects/useProjects.esm.js.map +1 -0
- package/dist/features/repo/DeploymentLogsDrawer.esm.js +213 -0
- package/dist/features/repo/DeploymentLogsDrawer.esm.js.map +1 -0
- package/dist/features/repo/DeploymentLogsDrawer.loading.esm.js +43 -0
- package/dist/features/repo/DeploymentLogsDrawer.loading.esm.js.map +1 -0
- package/dist/features/repo/FileTree.esm.js +179 -0
- package/dist/features/repo/FileTree.esm.js.map +1 -0
- package/dist/features/repo/FileViewer.esm.js +115 -0
- package/dist/features/repo/FileViewer.esm.js.map +1 -0
- package/dist/features/repo/FileViewer.helpers.esm.js +54 -0
- package/dist/features/repo/FileViewer.helpers.esm.js.map +1 -0
- package/dist/features/repo/RepoDetailsPage.esm.js +127 -0
- package/dist/features/repo/RepoDetailsPage.esm.js.map +1 -0
- package/dist/features/repo/RepoEmptyState.esm.js +58 -0
- package/dist/features/repo/RepoEmptyState.esm.js.map +1 -0
- package/dist/features/repo/RepoNoVersionsState.esm.js +29 -0
- package/dist/features/repo/RepoNoVersionsState.esm.js.map +1 -0
- package/dist/features/repo/RepoTabHeader.esm.js +30 -0
- package/dist/features/repo/RepoTabHeader.esm.js.map +1 -0
- package/dist/features/repo/RepoTabLayout.esm.js +18 -0
- package/dist/features/repo/RepoTabLayout.esm.js.map +1 -0
- package/dist/features/repo/RepoVersionSelect.esm.js +176 -0
- package/dist/features/repo/RepoVersionSelect.esm.js.map +1 -0
- package/dist/features/repo/ViewDeploymentDetailsDialog.esm.js +427 -0
- package/dist/features/repo/ViewDeploymentDetailsDialog.esm.js.map +1 -0
- package/dist/features/repo/deploymentHelpers.esm.js +74 -0
- package/dist/features/repo/deploymentHelpers.esm.js.map +1 -0
- package/dist/features/repo/fileTreeHelpers.esm.js +45 -0
- package/dist/features/repo/fileTreeHelpers.esm.js.map +1 -0
- package/dist/features/repo/flattenParams.esm.js +23 -0
- package/dist/features/repo/flattenParams.esm.js.map +1 -0
- package/dist/features/repo/queries.esm.js +239 -0
- package/dist/features/repo/queries.esm.js.map +1 -0
- package/dist/features/repo/repoFilter.esm.js +9 -0
- package/dist/features/repo/repoFilter.esm.js.map +1 -0
- package/dist/features/repo/repoTabs.esm.js +22 -0
- package/dist/features/repo/repoTabs.esm.js.map +1 -0
- package/dist/features/repo/resolveVersion.esm.js +22 -0
- package/dist/features/repo/resolveVersion.esm.js.map +1 -0
- package/dist/features/repo/tabs/DeploymentRow.esm.js +201 -0
- package/dist/features/repo/tabs/DeploymentRow.esm.js.map +1 -0
- package/dist/features/repo/tabs/DeploymentsTab.esm.js +188 -0
- package/dist/features/repo/tabs/DeploymentsTab.esm.js.map +1 -0
- package/dist/features/repo/tabs/DeploymentsTab.helpers.esm.js +46 -0
- package/dist/features/repo/tabs/DeploymentsTab.helpers.esm.js.map +1 -0
- package/dist/features/repo/tabs/DeploymentsTab.loading.esm.js +37 -0
- package/dist/features/repo/tabs/DeploymentsTab.loading.esm.js.map +1 -0
- package/dist/features/repo/tabs/FilesTab.esm.js +142 -0
- package/dist/features/repo/tabs/FilesTab.esm.js.map +1 -0
- package/dist/features/repo/tabs/InstanceRow.esm.js +121 -0
- package/dist/features/repo/tabs/InstanceRow.esm.js.map +1 -0
- package/dist/features/repo/tabs/InstancesTab.esm.js +147 -0
- package/dist/features/repo/tabs/InstancesTab.esm.js.map +1 -0
- package/dist/features/repo/tabs/InstancesTab.helpers.esm.js +44 -0
- package/dist/features/repo/tabs/InstancesTab.helpers.esm.js.map +1 -0
- package/dist/features/repo/tabs/InstancesTab.loading.esm.js +33 -0
- package/dist/features/repo/tabs/InstancesTab.loading.esm.js.map +1 -0
- package/dist/features/repo/tabs/OverviewTab.esm.js +77 -0
- package/dist/features/repo/tabs/OverviewTab.esm.js.map +1 -0
- package/dist/features/repo/tabs/PermissionsTab.esm.js +56 -0
- package/dist/features/repo/tabs/PermissionsTab.esm.js.map +1 -0
- package/dist/features/repo/tabs/VersionsTab.esm.js +152 -0
- package/dist/features/repo/tabs/VersionsTab.esm.js.map +1 -0
- package/dist/features/repo/useInfiniteRelayList.esm.js +92 -0
- package/dist/features/repo/useInfiniteRelayList.esm.js.map +1 -0
- package/dist/features/repo/useInfiniteScroll.esm.js +21 -0
- package/dist/features/repo/useInfiniteScroll.esm.js.map +1 -0
- package/dist/features/repos/ReposListPage.esm.js +53 -0
- package/dist/features/repos/ReposListPage.esm.js.map +1 -0
- package/dist/features/repos/queries.esm.js +40 -0
- package/dist/features/repos/queries.esm.js.map +1 -0
- package/dist/features/repos/repoColumns.esm.js +121 -0
- package/dist/features/repos/repoColumns.esm.js.map +1 -0
- package/dist/features/repos/useRepos.esm.js +22 -0
- package/dist/features/repos/useRepos.esm.js.map +1 -0
- package/dist/features/resource/OriginChip.esm.js +42 -0
- package/dist/features/resource/OriginChip.esm.js.map +1 -0
- package/dist/features/resource/ResourceDetailsPage.esm.js +167 -0
- package/dist/features/resource/ResourceDetailsPage.esm.js.map +1 -0
- package/dist/features/resource/queries.esm.js +141 -0
- package/dist/features/resource/queries.esm.js.map +1 -0
- package/dist/features/resource/tabs/GeneralTab.esm.js +247 -0
- package/dist/features/resource/tabs/GeneralTab.esm.js.map +1 -0
- package/dist/features/resource/tabs/GeneralTab.loading.esm.js +76 -0
- package/dist/features/resource/tabs/GeneralTab.loading.esm.js.map +1 -0
- package/dist/features/resource/tabs/PermissionsTab.esm.js +57 -0
- package/dist/features/resource/tabs/PermissionsTab.esm.js.map +1 -0
- package/dist/features/resource/tabs/SettingsTabLayout.esm.js +18 -0
- package/dist/features/resource/tabs/SettingsTabLayout.esm.js.map +1 -0
- package/dist/features/resource/tabs/TabHeader.esm.js +30 -0
- package/dist/features/resource/tabs/TabHeader.esm.js.map +1 -0
- package/dist/features/resource/tabs/UsagePanel.esm.js +35 -0
- package/dist/features/resource/tabs/UsagePanel.esm.js.map +1 -0
- package/dist/features/resource/tabs/UsageTab.esm.js +91 -0
- package/dist/features/resource/tabs/UsageTab.esm.js.map +1 -0
- package/dist/features/resource/tabs/UsageTab.helpers.esm.js +168 -0
- package/dist/features/resource/tabs/UsageTab.helpers.esm.js.map +1 -0
- package/dist/features/resources/ResourcesEmptyState.esm.js +148 -0
- package/dist/features/resources/ResourcesEmptyState.esm.js.map +1 -0
- package/dist/features/resources/ResourcesListPage.esm.js +115 -0
- package/dist/features/resources/ResourcesListPage.esm.js.map +1 -0
- package/dist/features/resources/queries.esm.js +50 -0
- package/dist/features/resources/queries.esm.js.map +1 -0
- package/dist/features/resources/resourceColumns.esm.js +158 -0
- package/dist/features/resources/resourceColumns.esm.js.map +1 -0
- package/dist/features/resources/resourceConstants.esm.js +7 -0
- package/dist/features/resources/resourceConstants.esm.js.map +1 -0
- package/dist/features/resources/toResourceRow.esm.js +29 -0
- package/dist/features/resources/toResourceRow.esm.js.map +1 -0
- package/dist/hooks/useAuthedSvg.esm.js +34 -0
- package/dist/hooks/useAuthedSvg.esm.js.map +1 -0
- package/dist/hooks/useCursorPagination.esm.js +40 -0
- package/dist/hooks/useCursorPagination.esm.js.map +1 -0
- package/dist/hooks/useMassdriverSubscription.esm.js +61 -0
- package/dist/hooks/useMassdriverSubscription.esm.js.map +1 -0
- package/dist/hooks/usePaginatedRelayQuery.esm.js +68 -0
- package/dist/hooks/usePaginatedRelayQuery.esm.js.map +1 -0
- package/dist/index.d.ts +256 -0
- package/dist/index.esm.js +8 -0
- package/dist/index.esm.js.map +1 -0
- package/dist/internalRoutes.esm.js +29 -0
- package/dist/internalRoutes.esm.js.map +1 -0
- package/dist/plugin.esm.js +57 -0
- package/dist/plugin.esm.js.map +1 -0
- package/dist/queries.esm.js +54 -0
- package/dist/queries.esm.js.map +1 -0
- package/dist/routes.esm.js +6 -0
- package/dist/routes.esm.js.map +1 -0
- package/dist/shell/MassdriverHeader.esm.js +37 -0
- package/dist/shell/MassdriverHeader.esm.js.map +1 -0
- package/dist/shell/MassdriverShell.esm.js +30 -0
- package/dist/shell/MassdriverShell.esm.js.map +1 -0
- package/dist/theme/MassdriverThemeScope.esm.js +30 -0
- package/dist/theme/MassdriverThemeScope.esm.js.map +1 -0
- package/dist/theme/ThemeModeContext.esm.js +35 -0
- package/dist/theme/ThemeModeContext.esm.js.map +1 -0
- package/dist/theme/muiClassNameAudit.esm.js +11 -0
- package/dist/theme/muiClassNameAudit.esm.js.map +1 -0
- package/dist/useInstances.esm.js +39 -0
- package/dist/useInstances.esm.js.map +1 -0
- package/dist/utils/attributes.esm.js +28 -0
- package/dist/utils/attributes.esm.js.map +1 -0
- package/dist/utils/conditions.esm.js +20 -0
- package/dist/utils/conditions.esm.js.map +1 -0
- package/dist/utils/formatRelativeTime.esm.js +40 -0
- package/dist/utils/formatRelativeTime.esm.js.map +1 -0
- package/dist/utils/instanceStatuses.esm.js +74 -0
- package/dist/utils/instanceStatuses.esm.js.map +1 -0
- package/package.json +92 -0
|
@@ -0,0 +1,281 @@
|
|
|
1
|
+
const MONEY = `{ amount currency }`;
|
|
2
|
+
const PANEL_QUERY = `
|
|
3
|
+
query MassdriverInstancePanel($organizationId: ID!, $id: ID!) {
|
|
4
|
+
instance(organizationId: $organizationId, id: $id) {
|
|
5
|
+
id
|
|
6
|
+
name
|
|
7
|
+
status
|
|
8
|
+
version
|
|
9
|
+
createdAt
|
|
10
|
+
updatedAt
|
|
11
|
+
environment { id name }
|
|
12
|
+
component { id name }
|
|
13
|
+
cost {
|
|
14
|
+
lastDay ${MONEY}
|
|
15
|
+
lastMonth ${MONEY}
|
|
16
|
+
dailyAverage ${MONEY}
|
|
17
|
+
monthlyAverage ${MONEY}
|
|
18
|
+
}
|
|
19
|
+
secretFields { name required title description sha256 }
|
|
20
|
+
alarms(cursor: { limit: 50 }) {
|
|
21
|
+
cursor { next }
|
|
22
|
+
items { id currentState { id status } }
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
`;
|
|
27
|
+
const OVERVIEW_QUERY = `
|
|
28
|
+
query MassdriverInstanceOverview($organizationId: ID!, $id: ID!) {
|
|
29
|
+
instance(organizationId: $organizationId, id: $id) {
|
|
30
|
+
id
|
|
31
|
+
name
|
|
32
|
+
status
|
|
33
|
+
version
|
|
34
|
+
resolvedVersion
|
|
35
|
+
deployedVersion
|
|
36
|
+
availableUpgrade
|
|
37
|
+
effectiveAttributes
|
|
38
|
+
bundle { id name version description }
|
|
39
|
+
properties { name path value }
|
|
40
|
+
alarms(cursor: { limit: 50 }) {
|
|
41
|
+
cursor { next }
|
|
42
|
+
items {
|
|
43
|
+
id
|
|
44
|
+
displayName
|
|
45
|
+
cloudResourceId
|
|
46
|
+
comparisonOperator
|
|
47
|
+
threshold
|
|
48
|
+
period
|
|
49
|
+
metric {
|
|
50
|
+
namespace
|
|
51
|
+
name
|
|
52
|
+
statistic
|
|
53
|
+
dimensions { name value }
|
|
54
|
+
}
|
|
55
|
+
currentState { id status message occurredAt }
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
`;
|
|
61
|
+
const RESOURCES_QUERY = `
|
|
62
|
+
query MassdriverInstanceResources($organizationId: ID!, $id: ID!) {
|
|
63
|
+
instance(organizationId: $organizationId, id: $id) {
|
|
64
|
+
id
|
|
65
|
+
status
|
|
66
|
+
bundle {
|
|
67
|
+
id
|
|
68
|
+
resources {
|
|
69
|
+
name
|
|
70
|
+
required
|
|
71
|
+
resourceType { id name icon }
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
resources {
|
|
75
|
+
field
|
|
76
|
+
required
|
|
77
|
+
resourceType { id name icon }
|
|
78
|
+
resource {
|
|
79
|
+
id
|
|
80
|
+
name
|
|
81
|
+
origin
|
|
82
|
+
formats
|
|
83
|
+
payload
|
|
84
|
+
createdAt
|
|
85
|
+
updatedAt
|
|
86
|
+
instance { id name }
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
`;
|
|
92
|
+
const RESOURCE_CONSUMERS_QUERY = `
|
|
93
|
+
query MassdriverResourceConsumers($organizationId: ID!, $id: ID!) {
|
|
94
|
+
resource(organizationId: $organizationId, id: $id) {
|
|
95
|
+
id
|
|
96
|
+
connections(cursor: { limit: 50 }) {
|
|
97
|
+
cursor { next }
|
|
98
|
+
items {
|
|
99
|
+
id
|
|
100
|
+
fromField
|
|
101
|
+
toField
|
|
102
|
+
fromInstance { id name }
|
|
103
|
+
toInstance { id name }
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
environmentDefaults(cursor: { limit: 50 }) {
|
|
107
|
+
cursor { next }
|
|
108
|
+
items {
|
|
109
|
+
id
|
|
110
|
+
environment { id name project { id name } }
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
remoteReferences(cursor: { limit: 50 }) {
|
|
114
|
+
cursor { next }
|
|
115
|
+
items {
|
|
116
|
+
id
|
|
117
|
+
field
|
|
118
|
+
instance { id name }
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
grants(cursor: { limit: 50 }) {
|
|
122
|
+
cursor { next }
|
|
123
|
+
items { id action recipientConditions }
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
`;
|
|
128
|
+
const DEPENDENCIES_QUERY = `
|
|
129
|
+
query MassdriverInstanceDependencies($organizationId: ID!, $id: ID!) {
|
|
130
|
+
instance(organizationId: $organizationId, id: $id) {
|
|
131
|
+
id
|
|
132
|
+
status
|
|
133
|
+
bundle {
|
|
134
|
+
id
|
|
135
|
+
dependencies {
|
|
136
|
+
name
|
|
137
|
+
required
|
|
138
|
+
resourceType { id name icon connectionOrientation }
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
dependencies {
|
|
142
|
+
field
|
|
143
|
+
required
|
|
144
|
+
resource { id name }
|
|
145
|
+
resourceType { id name icon connectionOrientation }
|
|
146
|
+
source {
|
|
147
|
+
__typename
|
|
148
|
+
... on Connection {
|
|
149
|
+
id
|
|
150
|
+
fromField
|
|
151
|
+
fromInstance {
|
|
152
|
+
id
|
|
153
|
+
name
|
|
154
|
+
status
|
|
155
|
+
environment { id }
|
|
156
|
+
}
|
|
157
|
+
link { id fromComponent { id name } }
|
|
158
|
+
}
|
|
159
|
+
... on RemoteReference {
|
|
160
|
+
id
|
|
161
|
+
resource { id name resourceType { id name icon } }
|
|
162
|
+
}
|
|
163
|
+
... on EnvironmentDefault {
|
|
164
|
+
id
|
|
165
|
+
resource { id name resourceType { id name icon } }
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
`;
|
|
172
|
+
const ALARMS_QUERY = `
|
|
173
|
+
query MassdriverInstanceAlarms($organizationId: ID!, $id: ID!) {
|
|
174
|
+
instance(organizationId: $organizationId, id: $id) {
|
|
175
|
+
id
|
|
176
|
+
alarms(cursor: { limit: 100 }) {
|
|
177
|
+
cursor { next }
|
|
178
|
+
items {
|
|
179
|
+
id
|
|
180
|
+
displayName
|
|
181
|
+
cloudResourceId
|
|
182
|
+
comparisonOperator
|
|
183
|
+
threshold
|
|
184
|
+
period
|
|
185
|
+
metric {
|
|
186
|
+
namespace
|
|
187
|
+
name
|
|
188
|
+
statistic
|
|
189
|
+
dimensions { name value }
|
|
190
|
+
}
|
|
191
|
+
currentState { id status message occurredAt }
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
`;
|
|
197
|
+
const HISTORY_QUERY = `
|
|
198
|
+
query MassdriverInstanceHistory(
|
|
199
|
+
$organizationId: ID!
|
|
200
|
+
$instanceId: ID!
|
|
201
|
+
$filter: DeploymentsFilter
|
|
202
|
+
$sort: DeploymentsSort
|
|
203
|
+
) {
|
|
204
|
+
deployments(
|
|
205
|
+
organizationId: $organizationId
|
|
206
|
+
filter: $filter
|
|
207
|
+
sort: $sort
|
|
208
|
+
cursor: { limit: 50 }
|
|
209
|
+
) {
|
|
210
|
+
cursor { next }
|
|
211
|
+
items {
|
|
212
|
+
id
|
|
213
|
+
status
|
|
214
|
+
action
|
|
215
|
+
version
|
|
216
|
+
message
|
|
217
|
+
createdAt
|
|
218
|
+
updatedAt
|
|
219
|
+
lastTransitionedAt
|
|
220
|
+
elapsedTime
|
|
221
|
+
deployedBy
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
instance(organizationId: $organizationId, id: $instanceId) {
|
|
225
|
+
id
|
|
226
|
+
createdAt
|
|
227
|
+
environment { id name }
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
`;
|
|
231
|
+
const DEPLOYMENT_QUERY = `
|
|
232
|
+
query MassdriverDeployment($organizationId: ID!, $id: UUID!) {
|
|
233
|
+
deployment(organizationId: $organizationId, id: $id) {
|
|
234
|
+
id
|
|
235
|
+
status
|
|
236
|
+
action
|
|
237
|
+
version
|
|
238
|
+
message
|
|
239
|
+
params
|
|
240
|
+
effectiveAttributes
|
|
241
|
+
createdAt
|
|
242
|
+
lastTransitionedAt
|
|
243
|
+
elapsedTime
|
|
244
|
+
deployedBy
|
|
245
|
+
instance {
|
|
246
|
+
id
|
|
247
|
+
component { id name }
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
`;
|
|
252
|
+
const DEPLOYMENT_LOGS_QUERY = `
|
|
253
|
+
query MassdriverDeploymentLogs($organizationId: ID!, $id: UUID!) {
|
|
254
|
+
deployment(organizationId: $organizationId, id: $id) {
|
|
255
|
+
id
|
|
256
|
+
status
|
|
257
|
+
action
|
|
258
|
+
version
|
|
259
|
+
instance {
|
|
260
|
+
id
|
|
261
|
+
component { id name }
|
|
262
|
+
}
|
|
263
|
+
logs {
|
|
264
|
+
timestamp
|
|
265
|
+
message
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
`;
|
|
270
|
+
const GUIDE_QUERY = `
|
|
271
|
+
query MassdriverInstanceGuide($organizationId: ID!, $id: ID!) {
|
|
272
|
+
instance(organizationId: $organizationId, id: $id) {
|
|
273
|
+
id
|
|
274
|
+
operatorGuide
|
|
275
|
+
bundle { id name version }
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
`;
|
|
279
|
+
|
|
280
|
+
export { ALARMS_QUERY, DEPENDENCIES_QUERY, DEPLOYMENT_LOGS_QUERY, DEPLOYMENT_QUERY, GUIDE_QUERY, HISTORY_QUERY, OVERVIEW_QUERY, PANEL_QUERY, RESOURCES_QUERY, RESOURCE_CONSUMERS_QUERY };
|
|
281
|
+
//# sourceMappingURL=queries.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queries.esm.js","sources":["../../../../src/features/environment/InstanceDrawer/queries.ts"],"sourcesContent":["// GraphQL documents for the read-only instance drawer. All are proxied through\n// the backend relay, which injects `organizationId`, so callers pass only the\n// remaining variables (see api.ts). Every normalizable selection includes `id`.\n\nconst MONEY = `{ amount currency }`;\n\nexport const PANEL_QUERY = `\n query MassdriverInstancePanel($organizationId: ID!, $id: ID!) {\n instance(organizationId: $organizationId, id: $id) {\n id\n name\n status\n version\n createdAt\n updatedAt\n environment { id name }\n component { id name }\n cost {\n lastDay ${MONEY}\n lastMonth ${MONEY}\n dailyAverage ${MONEY}\n monthlyAverage ${MONEY}\n }\n secretFields { name required title description sha256 }\n alarms(cursor: { limit: 50 }) {\n cursor { next }\n items { id currentState { id status } }\n }\n }\n }\n`;\n\nexport const OVERVIEW_QUERY = `\n query MassdriverInstanceOverview($organizationId: ID!, $id: ID!) {\n instance(organizationId: $organizationId, id: $id) {\n id\n name\n status\n version\n resolvedVersion\n deployedVersion\n availableUpgrade\n effectiveAttributes\n bundle { id name version description }\n properties { name path value }\n alarms(cursor: { limit: 50 }) {\n cursor { next }\n items {\n id\n displayName\n cloudResourceId\n comparisonOperator\n threshold\n period\n metric {\n namespace\n name\n statistic\n dimensions { name value }\n }\n currentState { id status message occurredAt }\n }\n }\n }\n }\n`;\n\nexport const RESOURCES_QUERY = `\n query MassdriverInstanceResources($organizationId: ID!, $id: ID!) {\n instance(organizationId: $organizationId, id: $id) {\n id\n status\n bundle {\n id\n resources {\n name\n required\n resourceType { id name icon }\n }\n }\n resources {\n field\n required\n resourceType { id name icon }\n resource {\n id\n name\n origin\n formats\n payload\n createdAt\n updatedAt\n instance { id name }\n }\n }\n }\n }\n`;\n\nexport const RESOURCE_CONSUMERS_QUERY = `\n query MassdriverResourceConsumers($organizationId: ID!, $id: ID!) {\n resource(organizationId: $organizationId, id: $id) {\n id\n connections(cursor: { limit: 50 }) {\n cursor { next }\n items {\n id\n fromField\n toField\n fromInstance { id name }\n toInstance { id name }\n }\n }\n environmentDefaults(cursor: { limit: 50 }) {\n cursor { next }\n items {\n id\n environment { id name project { id name } }\n }\n }\n remoteReferences(cursor: { limit: 50 }) {\n cursor { next }\n items {\n id\n field\n instance { id name }\n }\n }\n grants(cursor: { limit: 50 }) {\n cursor { next }\n items { id action recipientConditions }\n }\n }\n }\n`;\n\nexport const DEPENDENCIES_QUERY = `\n query MassdriverInstanceDependencies($organizationId: ID!, $id: ID!) {\n instance(organizationId: $organizationId, id: $id) {\n id\n status\n bundle {\n id\n dependencies {\n name\n required\n resourceType { id name icon connectionOrientation }\n }\n }\n dependencies {\n field\n required\n resource { id name }\n resourceType { id name icon connectionOrientation }\n source {\n __typename\n ... on Connection {\n id\n fromField\n fromInstance {\n id\n name\n status\n environment { id }\n }\n link { id fromComponent { id name } }\n }\n ... on RemoteReference {\n id\n resource { id name resourceType { id name icon } }\n }\n ... on EnvironmentDefault {\n id\n resource { id name resourceType { id name icon } }\n }\n }\n }\n }\n }\n`;\n\nexport const ALARMS_QUERY = `\n query MassdriverInstanceAlarms($organizationId: ID!, $id: ID!) {\n instance(organizationId: $organizationId, id: $id) {\n id\n alarms(cursor: { limit: 100 }) {\n cursor { next }\n items {\n id\n displayName\n cloudResourceId\n comparisonOperator\n threshold\n period\n metric {\n namespace\n name\n statistic\n dimensions { name value }\n }\n currentState { id status message occurredAt }\n }\n }\n }\n }\n`;\n\n// `deployments` is capped at a single page of 50 (cursor.limit) — the web app's\n// infinite scroll is dropped as an acceptable read-only simplification, so an\n// instance with more than 50 deployments shows only its 50 most-recent. The\n// second root field (`instance`) sources the \"Initialized\" footer row.\nexport const HISTORY_QUERY = `\n query MassdriverInstanceHistory(\n $organizationId: ID!\n $instanceId: ID!\n $filter: DeploymentsFilter\n $sort: DeploymentsSort\n ) {\n deployments(\n organizationId: $organizationId\n filter: $filter\n sort: $sort\n cursor: { limit: 50 }\n ) {\n cursor { next }\n items {\n id\n status\n action\n version\n message\n createdAt\n updatedAt\n lastTransitionedAt\n elapsedTime\n deployedBy\n }\n }\n instance(organizationId: $organizationId, id: $instanceId) {\n id\n createdAt\n environment { id name }\n }\n }\n`;\n\n// Full snapshot of a single deployment for the read-only detail panel. `id` is a\n// `UUID!` here (the `deployment(id:)` field), unlike the list filter's `ID!`.\nexport const DEPLOYMENT_QUERY = `\n query MassdriverDeployment($organizationId: ID!, $id: UUID!) {\n deployment(organizationId: $organizationId, id: $id) {\n id\n status\n action\n version\n message\n params\n effectiveAttributes\n createdAt\n lastTransitionedAt\n elapsedTime\n deployedBy\n instance {\n id\n component { id name }\n }\n }\n }\n`;\n\n// Initial log backfill for the read-only logs viewer. The live tail is streamed\n// separately via the `deploymentLogs` subscription (see realtime/queries.ts).\n// `id` is a `UUID!` here, matching `deployment(id:)`.\nexport const DEPLOYMENT_LOGS_QUERY = `\n query MassdriverDeploymentLogs($organizationId: ID!, $id: UUID!) {\n deployment(organizationId: $organizationId, id: $id) {\n id\n status\n action\n version\n instance {\n id\n component { id name }\n }\n logs {\n timestamp\n message\n }\n }\n }\n`;\n\nexport const GUIDE_QUERY = `\n query MassdriverInstanceGuide($organizationId: ID!, $id: ID!) {\n instance(organizationId: $organizationId, id: $id) {\n id\n operatorGuide\n bundle { id name version }\n }\n }\n`;\n"],"names":[],"mappings":"AAIA,MAAM,KAAA,GAAQ,CAAA,mBAAA,CAAA;AAEP,MAAM,WAAA,GAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gBAAA,EAYT,KAAK;AAAA,kBAAA,EACH,KAAK;AAAA,qBAAA,EACF,KAAK;AAAA,uBAAA,EACH,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAWvB,MAAM,cAAA,GAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAmCvB,MAAM,eAAA,GAAkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAgCxB,MAAM,wBAAA,GAA2B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAqCjC,MAAM,kBAAA,GAAqB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA6C3B,MAAM,YAAA,GAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA8BrB,MAAM,aAAA,GAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAqCtB,MAAM,gBAAA,GAAmB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAyBzB,MAAM,qBAAA,GAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAmB9B,MAAM,WAAA,GAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;"}
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
2
|
+
import { useState, useMemo } from 'react';
|
|
3
|
+
import Box from '@massdriver/ui/Box';
|
|
4
|
+
import Button from '@massdriver/ui/Button';
|
|
5
|
+
import CodeBlock from '@massdriver/ui/CodeBlock';
|
|
6
|
+
import TextField from '@massdriver/ui/TextField';
|
|
7
|
+
import ToggleButton from '@massdriver/ui/ToggleButton';
|
|
8
|
+
import ToggleButtonGroup from '@massdriver/ui/ToggleButtonGroup';
|
|
9
|
+
import Tooltip from '@massdriver/ui/Tooltip';
|
|
10
|
+
import Typography from '@massdriver/ui/Typography';
|
|
11
|
+
import stylin from '@massdriver/ui/stylin';
|
|
12
|
+
import { DataSourceProvider, Form } from '@massdriver/forms';
|
|
13
|
+
import '@mui/material/Chip';
|
|
14
|
+
import '@mui/material/Drawer';
|
|
15
|
+
import '@mui/material/OutlinedInput';
|
|
16
|
+
import '@mui/material/Select';
|
|
17
|
+
import { toggleButtonClasses } from '@mui/material/ToggleButton';
|
|
18
|
+
import { useInstanceApiQuery } from '../useInstanceApiQuery.esm.js';
|
|
19
|
+
import { TabState } from '../TabState.esm.js';
|
|
20
|
+
import { formsDataSource } from '../formsDataSource.esm.js';
|
|
21
|
+
|
|
22
|
+
const CONFIG_QUERY = `
|
|
23
|
+
query MassdriverInstanceConfig($organizationId: ID!, $id: ID!) {
|
|
24
|
+
instance(organizationId: $organizationId, id: $id) {
|
|
25
|
+
id
|
|
26
|
+
name
|
|
27
|
+
params
|
|
28
|
+
paramsSchema
|
|
29
|
+
uiSchema
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
`;
|
|
33
|
+
const FORM_VIEW_TOOLTIP = "Show the config as a form.";
|
|
34
|
+
const JSON_VIEW_TOOLTIP = "Show the raw JSON params.";
|
|
35
|
+
const PROPOSE_TOOLTIP = "This view is read-only. Open in Massdriver to propose or deploy changes.";
|
|
36
|
+
const parseMap = (value) => {
|
|
37
|
+
if (value == null) return void 0;
|
|
38
|
+
if (typeof value === "object") return value;
|
|
39
|
+
try {
|
|
40
|
+
return JSON.parse(value);
|
|
41
|
+
} catch {
|
|
42
|
+
return void 0;
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
const noop = () => {
|
|
46
|
+
};
|
|
47
|
+
const ConfigTab = ({ instanceId }) => {
|
|
48
|
+
const { value, loading, error } = useInstanceApiQuery(CONFIG_QUERY, instanceId);
|
|
49
|
+
const instance = value?.instance;
|
|
50
|
+
const [viewMode, setViewMode] = useState("form");
|
|
51
|
+
const schema = useMemo(
|
|
52
|
+
() => parseMap(instance?.paramsSchema),
|
|
53
|
+
[instance?.paramsSchema]
|
|
54
|
+
);
|
|
55
|
+
const uiSchema = useMemo(
|
|
56
|
+
() => parseMap(instance?.uiSchema) || {},
|
|
57
|
+
[instance?.uiSchema]
|
|
58
|
+
);
|
|
59
|
+
const formData = useMemo(
|
|
60
|
+
() => parseMap(instance?.params) ?? {},
|
|
61
|
+
[instance?.params]
|
|
62
|
+
);
|
|
63
|
+
return /* @__PURE__ */ jsx(TabState, { loading, error, children: schema ? /* @__PURE__ */ jsxs(Root, { children: [
|
|
64
|
+
/* @__PURE__ */ jsx(Header, { children: /* @__PURE__ */ jsxs(
|
|
65
|
+
ViewToggle,
|
|
66
|
+
{
|
|
67
|
+
value: viewMode,
|
|
68
|
+
exclusive: true,
|
|
69
|
+
size: "small",
|
|
70
|
+
onChange: (_event, next) => next && setViewMode(next),
|
|
71
|
+
"aria-label": "Config view mode",
|
|
72
|
+
children: [
|
|
73
|
+
/* @__PURE__ */ jsx(Tooltip, { title: FORM_VIEW_TOOLTIP, placement: "top", arrow: true, children: /* @__PURE__ */ jsx(ToggleButton, { value: "form", "aria-label": "Form view", children: "Form" }) }),
|
|
74
|
+
/* @__PURE__ */ jsx(Tooltip, { title: JSON_VIEW_TOOLTIP, placement: "top", arrow: true, children: /* @__PURE__ */ jsx(ToggleButton, { value: "json", "aria-label": "JSON view", children: "JSON" }) })
|
|
75
|
+
]
|
|
76
|
+
}
|
|
77
|
+
) }),
|
|
78
|
+
viewMode === "json" ? /* @__PURE__ */ jsxs(JsonViewSection, { children: [
|
|
79
|
+
/* @__PURE__ */ jsx(JsonViewCaption, { variant: "caption", children: "Read-only view of the raw JSON params." }),
|
|
80
|
+
/* @__PURE__ */ jsx(JsonCodeBlock, { children: JSON.stringify(formData ?? {}, null, 2) })
|
|
81
|
+
] }) : /* @__PURE__ */ jsxs(FormSection, { children: [
|
|
82
|
+
/* @__PURE__ */ jsx(DataSourceProvider, { value: formsDataSource, children: /* @__PURE__ */ jsx(
|
|
83
|
+
Form,
|
|
84
|
+
{
|
|
85
|
+
id: "instance-config",
|
|
86
|
+
schema,
|
|
87
|
+
uiSchema,
|
|
88
|
+
formData,
|
|
89
|
+
readonly: true,
|
|
90
|
+
onChange: noop,
|
|
91
|
+
children: /* @__PURE__ */ jsx(Fragment, {})
|
|
92
|
+
}
|
|
93
|
+
) }),
|
|
94
|
+
/* @__PURE__ */ jsx(MessageRow, { children: /* @__PURE__ */ jsx(
|
|
95
|
+
TextField,
|
|
96
|
+
{
|
|
97
|
+
label: "Deployment message",
|
|
98
|
+
helperText: "Optional. Shown in the deployment history.",
|
|
99
|
+
fullWidth: true,
|
|
100
|
+
multiline: true,
|
|
101
|
+
minRows: 1,
|
|
102
|
+
maxRows: 4,
|
|
103
|
+
value: "",
|
|
104
|
+
disabled: true
|
|
105
|
+
}
|
|
106
|
+
) }),
|
|
107
|
+
/* @__PURE__ */ jsx(Footer, { children: /* @__PURE__ */ jsx(Tooltip, { title: PROPOSE_TOOLTIP, placement: "top", children: /* @__PURE__ */ jsx(ButtonWrap, { children: /* @__PURE__ */ jsx(Button, { variant: "outlined", disabled: true, children: "Propose" }) }) }) })
|
|
108
|
+
] })
|
|
109
|
+
] }) : /* @__PURE__ */ jsx(Empty, { children: /* @__PURE__ */ jsx(Typography, { variant: "body2", color: "text.secondary", children: "This instance has no configuration schema." }) }) });
|
|
110
|
+
};
|
|
111
|
+
const Root = stylin(Box)(({ theme }) => ({
|
|
112
|
+
display: "flex",
|
|
113
|
+
flexDirection: "column",
|
|
114
|
+
gap: theme.spacing(2)
|
|
115
|
+
}));
|
|
116
|
+
const Header = stylin(Box)(({ theme }) => ({
|
|
117
|
+
display: "flex",
|
|
118
|
+
alignItems: "center",
|
|
119
|
+
justifyContent: "space-between",
|
|
120
|
+
gap: theme.spacing(2),
|
|
121
|
+
paddingBottom: theme.spacing(1.5),
|
|
122
|
+
borderBottom: `1px solid ${theme.palette.divider}`,
|
|
123
|
+
minHeight: theme.spacing(5.5)
|
|
124
|
+
}));
|
|
125
|
+
const ViewToggle = stylin(ToggleButtonGroup)(({ theme }) => ({
|
|
126
|
+
width: theme.spacing(16),
|
|
127
|
+
height: theme.spacing(3.5),
|
|
128
|
+
[`& .${toggleButtonClasses.root}`]: {
|
|
129
|
+
flex: 1,
|
|
130
|
+
height: "100%",
|
|
131
|
+
fontWeight: 400,
|
|
132
|
+
fontSize: theme.typography.pxToRem(13),
|
|
133
|
+
paddingTop: 0,
|
|
134
|
+
paddingBottom: 0
|
|
135
|
+
}
|
|
136
|
+
}));
|
|
137
|
+
const FormSection = stylin(Box)(({ theme }) => ({
|
|
138
|
+
display: "flex",
|
|
139
|
+
flexDirection: "column",
|
|
140
|
+
gap: theme.spacing(2)
|
|
141
|
+
}));
|
|
142
|
+
const JsonViewSection = stylin(Box)(({ theme }) => ({
|
|
143
|
+
display: "flex",
|
|
144
|
+
flexDirection: "column",
|
|
145
|
+
gap: theme.spacing(1)
|
|
146
|
+
}));
|
|
147
|
+
const JsonCodeBlock = stylin(CodeBlock)(({ theme }) => ({
|
|
148
|
+
maxHeight: theme.spacing(50)
|
|
149
|
+
}));
|
|
150
|
+
const JsonViewCaption = stylin(Typography)(({ theme }) => ({
|
|
151
|
+
color: theme.palette.text.secondary
|
|
152
|
+
}));
|
|
153
|
+
const MessageRow = stylin(Box)({
|
|
154
|
+
display: "flex",
|
|
155
|
+
flexDirection: "column"
|
|
156
|
+
});
|
|
157
|
+
const Footer = stylin(Box)(({ theme }) => ({
|
|
158
|
+
display: "flex",
|
|
159
|
+
gap: theme.spacing(1),
|
|
160
|
+
marginTop: theme.spacing(1)
|
|
161
|
+
}));
|
|
162
|
+
const ButtonWrap = stylin("span")({
|
|
163
|
+
display: "inline-flex"
|
|
164
|
+
});
|
|
165
|
+
const Empty = stylin(Box)(({ theme }) => ({
|
|
166
|
+
padding: theme.spacing(2)
|
|
167
|
+
}));
|
|
168
|
+
|
|
169
|
+
export { ConfigTab, ConfigTab as default };
|
|
170
|
+
//# sourceMappingURL=ConfigTab.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConfigTab.esm.js","sources":["../../../../../src/features/environment/InstanceDrawer/tabs/ConfigTab.tsx"],"sourcesContent":["import { useMemo, useState } from 'react';\nimport Box from '@massdriver/ui/Box';\nimport Button from '@massdriver/ui/Button';\nimport CodeBlock from '@massdriver/ui/CodeBlock';\nimport TextField from '@massdriver/ui/TextField';\nimport ToggleButton from '@massdriver/ui/ToggleButton';\nimport ToggleButtonGroup from '@massdriver/ui/ToggleButtonGroup';\nimport Tooltip from '@massdriver/ui/Tooltip';\nimport Typography from '@massdriver/ui/Typography';\nimport stylin from '@massdriver/ui/stylin';\nimport { Form, DataSourceProvider } from '@massdriver/forms';\nimport { toggleButtonClasses } from '../../../../theme/muiClasses';\nimport { useInstanceApiQuery } from '../useInstanceApiQuery';\nimport { TabState } from '../TabState';\nimport { formsDataSource } from '../formsDataSource';\n\nconst CONFIG_QUERY = `\n query MassdriverInstanceConfig($organizationId: ID!, $id: ID!) {\n instance(organizationId: $organizationId, id: $id) {\n id\n name\n params\n paramsSchema\n uiSchema\n }\n }\n`;\n\nconst FORM_VIEW_TOOLTIP = 'Show the config as a form.';\nconst JSON_VIEW_TOOLTIP = 'Show the raw JSON params.';\nconst PROPOSE_TOOLTIP =\n 'This view is read-only. Open in Massdriver to propose or deploy changes.';\n\ninterface ConfigInstance {\n id: string;\n params?: string | null;\n paramsSchema?: string | null;\n uiSchema?: string | null;\n}\n\n// paramsSchema / uiSchema / params come back as JSON-encoded strings; parse to\n// objects the way the web app's `parseMap` does for the same fields.\nconst parseMap = (value: unknown): any => {\n if (value == null) return undefined;\n if (typeof value === 'object') return value;\n try {\n return JSON.parse(value as string);\n } catch {\n return undefined;\n }\n};\n\nconst noop = () => {};\n\n/**\n * Read-only instance config. Mirrors the web app's ConfigTab: a Form/JSON view\n * toggle, the schema-driven RJSF `Form` (rendered `readonly`, submit suppressed\n * via `<></>` children), the raw-params `CodeBlock`, and a disabled Propose\n * button. Everything is read-only — the drawer header's \"Open in Massdriver\"\n * deep-links here to actually edit/propose/deploy. Data-fetching fields resolve\n * through the relay via the injected `formsDataSource`.\n */\nexport const ConfigTab = ({ instanceId }: { instanceId: string | null }) => {\n const { value, loading, error } = useInstanceApiQuery<{\n instance: ConfigInstance | null;\n }>(CONFIG_QUERY, instanceId);\n const instance = value?.instance;\n\n const [viewMode, setViewMode] = useState<'form' | 'json'>('form');\n\n const schema = useMemo(\n () => parseMap(instance?.paramsSchema),\n [instance?.paramsSchema],\n );\n const uiSchema = useMemo(\n () => parseMap(instance?.uiSchema) || {},\n [instance?.uiSchema],\n );\n const formData = useMemo(\n () => parseMap(instance?.params) ?? {},\n [instance?.params],\n );\n\n return (\n <TabState loading={loading} error={error}>\n {schema ? (\n <Root>\n <Header>\n <ViewToggle\n value={viewMode}\n exclusive\n size=\"small\"\n onChange={(_event: unknown, next: 'form' | 'json' | null) =>\n next && setViewMode(next)\n }\n aria-label=\"Config view mode\"\n >\n <Tooltip title={FORM_VIEW_TOOLTIP} placement=\"top\" arrow>\n <ToggleButton value=\"form\" aria-label=\"Form view\">\n Form\n </ToggleButton>\n </Tooltip>\n <Tooltip title={JSON_VIEW_TOOLTIP} placement=\"top\" arrow>\n <ToggleButton value=\"json\" aria-label=\"JSON view\">\n JSON\n </ToggleButton>\n </Tooltip>\n </ViewToggle>\n </Header>\n\n {viewMode === 'json' ? (\n <JsonViewSection>\n <JsonViewCaption variant=\"caption\">\n Read-only view of the raw JSON params.\n </JsonViewCaption>\n <JsonCodeBlock>\n {JSON.stringify(formData ?? {}, null, 2)}\n </JsonCodeBlock>\n </JsonViewSection>\n ) : (\n <FormSection>\n <DataSourceProvider value={formsDataSource}>\n <Form\n id=\"instance-config\"\n schema={schema}\n uiSchema={uiSchema}\n formData={formData}\n readonly\n onChange={noop}\n >\n <></>\n </Form>\n </DataSourceProvider>\n\n <MessageRow>\n <TextField\n label=\"Deployment message\"\n helperText=\"Optional. Shown in the deployment history.\"\n fullWidth\n multiline\n minRows={1}\n maxRows={4}\n value=\"\"\n disabled\n />\n </MessageRow>\n\n <Footer>\n <Tooltip title={PROPOSE_TOOLTIP} placement=\"top\">\n <ButtonWrap>\n <Button variant=\"outlined\" disabled>\n Propose\n </Button>\n </ButtonWrap>\n </Tooltip>\n </Footer>\n </FormSection>\n )}\n </Root>\n ) : (\n <Empty>\n <Typography variant=\"body2\" color=\"text.secondary\">\n This instance has no configuration schema.\n </Typography>\n </Empty>\n )}\n </TabState>\n );\n};\n\nexport default ConfigTab;\n\nconst Root = stylin(Box)(({ theme }: { theme: any }) => ({\n display: 'flex',\n flexDirection: 'column',\n gap: theme.spacing(2),\n}));\n\nconst Header = stylin(Box)(({ theme }: { theme: any }) => ({\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: theme.spacing(2),\n paddingBottom: theme.spacing(1.5),\n borderBottom: `1px solid ${theme.palette.divider}`,\n minHeight: theme.spacing(5.5),\n}));\n\n// Ported from apps/web/features/environments/sections/InstancePanel/tabs/ConfigTab/ConfigTab.view.js\nconst ViewToggle = stylin(ToggleButtonGroup)(({ theme }: { theme: any }) => ({\n width: theme.spacing(16),\n height: theme.spacing(3.5),\n [`& .${toggleButtonClasses.root}`]: {\n flex: 1,\n height: '100%',\n fontWeight: 400,\n fontSize: theme.typography.pxToRem(13),\n paddingTop: 0,\n paddingBottom: 0,\n },\n}));\n\nconst FormSection = stylin(Box)(({ theme }: { theme: any }) => ({\n display: 'flex',\n flexDirection: 'column',\n gap: theme.spacing(2),\n}));\n\nconst JsonViewSection = stylin(Box)(({ theme }: { theme: any }) => ({\n display: 'flex',\n flexDirection: 'column',\n gap: theme.spacing(1),\n}));\n\nconst JsonCodeBlock = stylin(CodeBlock)(({ theme }: { theme: any }) => ({\n maxHeight: theme.spacing(50),\n}));\n\nconst JsonViewCaption = stylin(Typography)(({ theme }: { theme: any }) => ({\n color: theme.palette.text.secondary,\n}));\n\nconst MessageRow = stylin(Box)({\n display: 'flex',\n flexDirection: 'column',\n});\n\nconst Footer = stylin(Box)(({ theme }: { theme: any }) => ({\n display: 'flex',\n gap: theme.spacing(1),\n marginTop: theme.spacing(1),\n}));\n\nconst ButtonWrap = stylin('span')({\n display: 'inline-flex',\n});\n\nconst Empty = stylin(Box)(({ theme }: { theme: any }) => ({\n padding: theme.spacing(2),\n}));\n"],"names":[],"mappings":"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"}
|