@spotify/backstage-plugin-soundcheck 0.22.4 → 0.23.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/CHANGELOG.md +47 -0
- package/dist/alpha/CampaignsRouterPage.esm.js +2 -0
- package/dist/alpha/ChecksRouterPage.esm.js +2 -0
- package/dist/alpha/IntegrationsRouterPage.esm.js +2 -0
- package/dist/alpha/OverviewPageWrapper.esm.js +2 -0
- package/dist/alpha/TracksRouterPage.esm.js +2 -0
- package/dist/alpha/plugin.esm.js +1 -1
- package/dist/alpha.d.ts +155 -59
- package/dist/blueprints/IntegrationPageBlueprint.esm.js +1 -1
- package/dist/components/Badge/Badge.esm.js +2 -0
- package/dist/components/Badges/LevelBadge.esm.js +1 -1
- package/dist/components/Badges/StatusBadge.esm.js +1 -1
- package/dist/components/CampaignCreatePage/CampaignCreatePage.esm.js +1 -1
- package/dist/components/CampaignForm/hooks/useCampaignForm.esm.js +1 -1
- package/dist/components/CampaignForm/utils/validation.esm.js +1 -1
- package/dist/components/CampaignPage/CampaignPageBUI.esm.js +1 -1
- package/dist/components/CampaignPage/CampaignStatusBarBUI.esm.js +1 -1
- package/dist/components/CampaignPage/CampaignTechInsightsExplorerPage.esm.js +1 -1
- package/dist/components/CampaignsPage/CampaignListPageBUI.esm.js +1 -1
- package/dist/components/CampaignsPage/CampaignsPage.esm.js +1 -1
- package/dist/components/CampaignsPage/EditCampaignView.esm.js +1 -1
- package/dist/components/Cards/CheckStatusCard/CheckStatusCard.esm.js +1 -1
- package/dist/components/CertificationAccordion/CertificationAccordion.esm.js +1 -1
- package/dist/components/CertificationSidebar/CertificationSidebar.esm.js +1 -1
- package/dist/components/CertificationSidebar/Check.esm.js +1 -1
- package/dist/components/CertificationSidebar/ExemptionJustificationDialog.esm.js +1 -1
- package/dist/components/CertificationsPage/CertificationTab.esm.js +1 -1
- package/dist/components/CertificationsPage/CertificationTabs.esm.js +1 -1
- package/dist/components/CertificationsPage/CertificationsPage.esm.js +1 -1
- package/dist/components/CertificationsPage/Playlist/PlaylistContext.esm.js +1 -1
- package/dist/components/CheckCreatePage/CheckCreatePage.esm.js +1 -1
- package/dist/components/CheckDetails/CheckDetails.esm.js +1 -1
- package/dist/components/CheckDetails/CheckPullRequest.esm.js +1 -1
- package/dist/components/CheckDetails/FixMeDialog.esm.js +1 -1
- package/dist/components/CheckForm/CheckForm.esm.js +1 -1
- package/dist/components/CheckForm/FormFields/RuleInput/Conditions/RuleConditionInput.esm.js +1 -1
- package/dist/components/CheckForm/FormFields/RuleInput/Conditions/useRuleOptions.esm.js +1 -1
- package/dist/components/CheckForm/FormFields/RuleInput/RuleInputBox.esm.js +1 -1
- package/dist/components/CheckForm/Steps/CheckApplicabilityStep.esm.js +1 -1
- package/dist/components/CheckForm/Steps/CheckDetailsStep.esm.js +1 -1
- package/dist/components/CheckForm/Steps/CheckRulesStep.esm.js +1 -1
- package/dist/components/CheckForm/useCheckForm.esm.js +1 -1
- package/dist/components/CheckForm/utils/validation.esm.js +1 -1
- package/dist/components/CheckIcon/CheckIcon.esm.js +1 -1
- package/dist/components/CheckPage/CheckEditPage.esm.js +1 -1
- package/dist/components/CheckPage/CheckEditView.esm.js +1 -1
- package/dist/components/CheckPage/CheckEntitiesTable/CheckEntitiesTableBUI.esm.js +1 -1
- package/dist/components/CheckPage/CheckPageBUI.esm.js +1 -1
- package/dist/components/CheckPage/ExemptionsTableBUI.esm.js +1 -1
- package/dist/components/CheckPage/utils.esm.js +1 -1
- package/dist/components/CheckSelection/CheckSelection.esm.js +1 -1
- package/dist/components/CheckStatusBar/CheckStatusBarBUI.esm.js +1 -1
- package/dist/components/CheckTemplatesPage/CheckTemplatesPageBUI.esm.js +1 -1
- package/dist/components/ChecksPage/ChecksListPageBUI.esm.js +1 -1
- package/dist/components/ChecksTable/ChecksTable.esm.js +1 -1
- package/dist/components/ChecksTable/FixMeCell.esm.js +1 -1
- package/dist/components/ChecksTable/PullRequestsTable.esm.js +1 -1
- package/dist/components/ChecksTable/utils.esm.js +2 -0
- package/dist/components/CollectorPage/CollectorDetailsPageBUI.esm.js +1 -1
- package/dist/components/CollectorPage/CollectorPage.esm.js +1 -1
- package/dist/components/CollectorPage/CollectorStatus.esm.js +2 -0
- package/dist/components/CollectorPage/Configurators/AzureDevOps/AzureDevOpsConfigurator.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/AzureDevOps/validation.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/BigQuery/BigQueryConfigurator.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/BigQuery/validation.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/Catalog/CatalogConfigurator.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/Common/CollectorOption.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/Common/utils.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/Configurator.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/DataDog/DataDogConfigurator.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/DataRegistry/DataRegistryConfigurator.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/Github/GithubConfigurator.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/Github/validation.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/Gitlab/GitlabConfigurator.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/HTTP/HttpConfigurator.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/HTTP/validation.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/Jira/JiraConfigurator.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/Jira/validation.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/Kubernetes/KubernetesConfigurator.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/Kubernetes/validation.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/NewRelic/NewRelicConfigurator.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/PagerDuty/PagerDutyConfigurator.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/PagerDuty/validation.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/SCM/RegexFactDetailsComponent.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/SCM/ScmConfigurator.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/SCM/utils.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/SCM/validation.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/SchemaBased/SchemaBasedConfigurator.esm.js +2 -0
- package/dist/components/CollectorPage/Configurators/SchemaBased/SchemaField.esm.js +2 -0
- package/dist/components/CollectorPage/Configurators/SchemaBased/utils.esm.js +2 -0
- package/dist/components/CollectorPage/Configurators/SonarQube/SonarQubeConfigurator.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/SonarQube/validation.esm.js +1 -1
- package/dist/components/CollectorPage/utils.esm.js +2 -0
- package/dist/components/CollectorsPage/CollectorsPage.esm.js +1 -1
- package/dist/components/CollectorsPage/IntegrationLogoBUI.esm.js +1 -1
- package/dist/components/CollectorsPage/IntegrationsListPageBUI.esm.js +1 -1
- package/dist/components/CreateNewTrackPage/CreateNewTrackPage.esm.js +1 -1
- package/dist/components/DescriptionCell/DescriptionCell.esm.js +1 -1
- package/dist/components/EntityChip/EntityChip.esm.js +1 -1
- package/dist/components/EntitySoundcheckCard/Card.esm.js +1 -1
- package/dist/components/FactExplorer/FactExplorer.esm.js +1 -1
- package/dist/components/FactExplorer/useFactOptions.esm.js +1 -1
- package/dist/components/Filter/FilterComponent.esm.js +1 -1
- package/dist/components/Filter/FilterPreviewDisplay.esm.js +2 -0
- package/dist/components/FilterSidebar/useTrackFilterSidebar.esm.js +1 -1
- package/dist/components/FilterSidebar/util.esm.js +1 -1
- package/dist/components/FixMeBetaBadge/FixMeBetaBadge.esm.js +2 -0
- package/dist/components/FixMeButton/FixMeButton.esm.js +1 -1
- package/dist/components/FormControlledAutocomplete/ControlledAutocomplete.esm.js +1 -1
- package/dist/components/FormattedPreview/FormattedPreview.esm.js +3 -3
- package/dist/components/GroupSelectorBUI/GroupSelectList.esm.js +1 -1
- package/dist/components/GroupSelectorBUI/GroupSelectionHistory.esm.js +1 -1
- package/dist/components/GroupSelectorBUI/GroupSelectorBUI.esm.js +1 -1
- package/dist/components/GroupSelectorBUI/GroupTagsDisplay.esm.js +2 -0
- package/dist/components/GroupSelectorBUI/ListViewMode.esm.js +2 -0
- package/dist/components/LevelUpParty/LevelUpParty.esm.js +1 -1
- package/dist/components/ListPageCustomActions/ListPageCustomActions.esm.js +1 -1
- package/dist/components/Menus/useCampaignActions.esm.js +1 -1
- package/dist/components/Menus/useCheckActions.esm.js +1 -1
- package/dist/components/Menus/useTrackActions.esm.js +1 -1
- package/dist/components/OverviewTable/ResultsTable.esm.js +1 -1
- package/dist/components/RefetchingIndicator/RefetchingIndicator.esm.js +1 -1
- package/dist/components/Router.esm.js +1 -1
- package/dist/components/RoutingPage/RoutingPageBUI.esm.js +1 -1
- package/dist/components/RoutingPage/RoutingPageWrapperBUI.esm.js +1 -1
- package/dist/components/SendCampaignNotificationDialog/SendCampaignNotificationDialogBUI.esm.js +1 -1
- package/dist/components/StatusBar/StatusBar.esm.js +1 -1
- package/dist/components/Stepper/Stepper.esm.js +1 -1
- package/dist/components/TableRowWithOwner/TableRowWithOwner.esm.js +1 -1
- package/dist/components/TechInsights/TechInsightsPageBUI.esm.js +1 -1
- package/dist/components/TechInsights/TechInsightsTableBUI.esm.js +1 -1
- package/dist/components/TechInsights/hierarchyToNivo.esm.js +2 -0
- package/dist/components/TechInsightsExplorerTable/TechInsightsExplorerTable.esm.js +1 -1
- package/dist/components/TechInsightsGroupSelector/TechInsightsGroupSelector.esm.js +1 -1
- package/dist/components/TimePeriodBar/TimePeriodBarBUI.esm.js +1 -1
- package/dist/components/TopAndBottomPerformingTeams/TopAndBottomPerformingTeams.esm.js +1 -1
- package/dist/components/TopFailingChecksTable/TopFailingChecksTableBUI.esm.js +1 -1
- package/dist/components/TrackBuilderPage/components/SelectProviderStep/SelectProviderStep.esm.js +1 -1
- package/dist/components/TrackCreatePage/TrackCreatePage.esm.js +1 -1
- package/dist/components/TrackEditPage/TrackEditPage.esm.js +1 -1
- package/dist/components/TrackEditPage/TrackEditView.esm.js +1 -1
- package/dist/components/TrackForm/utils/useTrackForm.esm.js +1 -1
- package/dist/components/TrackForm/utils/validation.esm.js +1 -1
- package/dist/components/TrackPage/TrackEntitiesTable/TrackEntitiesTableBUI.esm.js +1 -1
- package/dist/components/TrackPage/TrackPageBUI.esm.js +1 -1
- package/dist/components/TrackPage/TrackStatusBarBUI.esm.js +1 -1
- package/dist/components/TrackPage/TrackStatusTableBUI.esm.js +1 -1
- package/dist/components/TrackPage/TrackTechInsightsExplorerPage.esm.js +1 -1
- package/dist/components/TracksPage/TracksListPageBUI.esm.js +1 -1
- package/dist/contexts/UserProvider.esm.js +1 -1
- package/dist/graphql/generated/index.esm.js +22 -13
- package/dist/hooks/catalog/useEntityPresentation.esm.js +2 -0
- package/dist/hooks/catalog/useEntityPrimaryTitle.esm.js +2 -0
- package/dist/hooks/catalog/useGetEntityRefs.esm.js +1 -1
- package/dist/hooks/checks/useChecks.esm.js +2 -0
- package/dist/hooks/checks/useDeleteCheck.esm.js +1 -1
- package/dist/hooks/collectors/useGetCollectors.esm.js +1 -1
- package/dist/hooks/filters/useFilters.esm.js +1 -1
- package/dist/hooks/filters/useListPageFilters.esm.js +2 -0
- package/dist/hooks/fixMe/useFixMe.esm.js +1 -1
- package/dist/hooks/fixWithAika/useFixWithAika.esm.js +1 -1
- package/dist/hooks/groups/useGroupOptions.esm.js +1 -1
- package/dist/hooks/useChipScopedUrlState.esm.js +2 -0
- package/dist/hooks/usePagination.esm.js +1 -1
- package/dist/index.d.ts +130 -4
- package/dist/index.esm.js +1 -1
- package/dist/plugins/soundcheck/package.json.esm.js +2 -0
- package/dist/utils/charts.esm.js +1 -1
- package/dist/utils/facetFilters/utils.esm.js +1 -1
- package/dist/utils/filters.esm.js +1 -1
- package/dist/utils/validation.esm.js +1 -1
- package/package.json +24 -22
- package/dist/alpha/pages.esm.js +0 -2
- package/dist/components/CategoryBar/CategoryBar.esm.js +0 -2
- package/dist/components/CheckStatusBar/CheckStatusBar.esm.js +0 -2
- package/dist/components/CheckTemplatesPage/CheckTemplatesPageDeprecated.esm.js +0 -2
- package/dist/components/CheckTemplatesPage/TemplateCategory.esm.js +0 -2
- package/dist/components/CollectorPage/CollectorDetailsPageDeprecated.esm.js +0 -2
- package/dist/components/CollectorPage/CollectorFactTable.esm.js +0 -2
- package/dist/components/CollectorsPage/CollectorListPage/CollectorListPageDeprecated.esm.js +0 -2
- package/dist/components/CollectorsPage/CollectorListPage/CollectorLogo.esm.js +0 -2
- package/dist/components/CollectorsPage/CollectorListPage/CollectorSummaryCard.esm.js +0 -2
- package/dist/components/HierarchicalTechInsightsPage/getLeafNodes.esm.js +0 -2
- package/dist/components/HierarchicalTechInsightsPage/visualizations/LoadingOverlay.esm.js +0 -2
- package/dist/components/HierarchicalTechInsightsPage/visualizations/NivoCirclePacking.esm.js +0 -2
- package/dist/components/HierarchicalTechInsightsPage/visualizations/NivoHeatmap.esm.js +0 -2
- package/dist/components/HierarchicalTechInsightsPage/visualizations/NivoIcicle.esm.js +0 -2
- package/dist/components/HierarchicalTechInsightsPage/visualizations/NivoSunburst.esm.js +0 -2
- package/dist/components/HierarchicalTechInsightsPage/visualizations/NivoTreemap.esm.js +0 -2
- package/dist/components/HierarchicalTechInsightsPage/visualizations/VisualizationBreadcrumb.esm.js +0 -2
- package/dist/components/HierarchicalTechInsightsPage/visualizations/hierarchyToNivo.esm.js +0 -2
- package/dist/components/ImportExportPanel/ImportExportPanelDeprecated.esm.js +0 -2
- package/dist/components/SummaryCard/SummaryCard.esm.js +0 -2
- package/dist/components/SummaryCard/SummaryCardActionsMenu.esm.js +0 -2
- package/dist/images/GitHub_Logo.svg +0 -9
- package/dist/images/GitHub_Logo_White.svg +0 -9
- package/dist/images/SCM_DARK.svg +0 -10
- package/dist/images/SCM_LIGHT.svg +0 -10
- package/dist/images/azure-devops-rgb.svg +0 -13
- package/dist/images/azure-devops-white.svg +0 -13
- package/dist/images/bigquery-rgb.svg +0 -15
- package/dist/images/bigquery-white.svg +0 -15
- package/dist/images/cat-blk.svg +0 -12
- package/dist/images/cat-wht.svg +0 -12
- package/dist/images/data-registry-blk.svg +0 -36
- package/dist/images/data-registry-wht.svg +0 -36
- package/dist/images/dd_logo_h_rgb.svg +0 -17
- package/dist/images/dd_logo_h_white.svg +0 -17
- package/dist/images/gitlab-rgb.svg +0 -1
- package/dist/images/gitlab-white.svg +0 -1
- package/dist/images/http-rgb.svg +0 -11
- package/dist/images/http-white.svg +0 -11
- package/dist/images/jira-rgb.svg +0 -25
- package/dist/images/jira-white.svg +0 -25
- package/dist/images/k8s_blue.svg +0 -108
- package/dist/images/k8s_white.svg +0 -108
- package/dist/images/new-relic-rgb.svg +0 -1
- package/dist/images/new-relic-white.svg +0 -1
- package/dist/images/pd-black.svg +0 -9
- package/dist/images/pd-white.svg +0 -9
- package/dist/images/sonarqube-rgb.svg +0 -14
- package/dist/images/sonarqube-white.svg +0 -14
- package/dist/images/soundcheck-black.svg +0 -13
- package/dist/images/soundcheck-white.svg +0 -13
- package/dist/images/tech-black.svg +0 -11
- package/dist/images/tech-white.svg +0 -11
- /package/dist/components/CampaignsPage/{CampaignListPage/useArchiveConfirmationModal.esm.js → useArchiveConfirmationModal.esm.js} +0 -0
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsxs as
|
|
1
|
+
import{jsxs as a,Fragment as I,jsx as r}from"react/jsx-runtime";import{Content as h}from"@backstage/core-components";import{useRouteRef as m}from"@backstage/core-plugin-api";import{usePermission as P}from"@backstage/plugin-permission-react";import{HeaderPage as R,ButtonLink as b}from"@backstage/ui";import{RiInformationLine as L}from"@remixicon/react";import{soundcheckCollectorUpdatePermission as k}from"@spotify/backstage-plugin-soundcheck-common";import{useParams as y}from"react-router-dom";import{useGetCollectors as w}from"../../hooks/collectors/useGetCollectors.esm.js";import{integrationsPageRouteRef as x,integrationDetailsRouteRef as N}from"../../routes.esm.js";import{formStyles as j}from"../../utils/formStyles.esm.js";import{LoadingIndicator as v}from"../LoadingIndicator/LoadingIndicator.esm.js";import{PageWarningMessage as D}from"../PageWarningMessage/PageWarningMessage.esm.js";import{getCollectorDocLink as E,Configurator as F}from"./Configurators/Configurator.esm.js";const S=({collectorId:s})=>{const l=y(),e=s??l.integrationId,{data:f,isLoading:d}=w([e??""]),{loading:c,allowed:g}=P({permission:k}),p=m(x),u=m(N),o=f?.[0],t=d||c,i=g&&o?.isEditable,C=j(),n=E(o?.id);return a(I,{children:[r(R,{title:"Configuration",breadcrumbs:[{label:"Integrations",href:p()},{label:o?.name??o?.id??"Integration",href:u({integrationId:e??""})}],customActions:n?r(b,{iconStart:r(L,{}),href:n,target:"_blank",rel:"noopener noreferrer",variant:"secondary"}):void 0}),a(h,{className:C.formWrapper,children:[t&&r(v,{}),r(D,{entityName:"Integration",entityId:e,showNotFound:!t&&!o,showCannotEdit:!t&&!i}),o&&i&&r(F,{selectedCollector:o})]})]})};export{S as CollectorPage};
|
|
2
2
|
//# sourceMappingURL=CollectorPage.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{jsxs as s,jsx as u}from"react/jsx-runtime";import{Flex as m}from"@backstage/ui";import{makeStyles as c}from"@material-ui/core";import{RiCircleFill as g}from"@remixicon/react";import{DateTime as e}from"luxon";const o=(i,r)=>{if(!i)return"inactive";const a=!!i.latestFailedTime&&e.fromISO(i.latestFailedTime)>e.now().minus({days:1}),n=!!i.latestCompletedTime&&(!i.latestFailedTime||e.fromISO(i.latestCompletedTime)>e.fromISO(i.latestFailedTime).plus({minutes:1}));return(i.active??0)>0||(i.waiting??0)>0?"running":a?n?"warning":"error":n?"healthy":r?"unknown":"inactive"},f={warning:"Warning",running:"Running",healthy:"Healthy",inactive:"Inactive",error:"Error",unknown:"Unknown"},d=i=>({warning:"var(--bui-fg-warning)",running:"var(--bui-fg-info)",healthy:"var(--bui-fg-success)",inactive:"var(--bui-fg-disabled)",unknown:"var(--bui-fg-disabled)",error:"var(--bui-fg-danger)"})[i],b=c(()=>({"@keyframes blink":{"0%, 100%":{opacity:1},"50%":{opacity:.3}},blink:{animation:"$blink 1.5s ease-in-out infinite"}})),v=({jobQueueStatus:i,hasFrequency:r})=>{const a=b(),n=o(i,r),t=f[n],l=d(n);return s(m,{align:"center",gap:"2",style:{cursor:"default"},children:[u(g,{size:12,color:l,"aria-label":t,className:n==="running"?a.blink:void 0}),t]})};export{v as CollectorStatus,o as deriveStatus};
|
|
2
|
+
//# sourceMappingURL=CollectorStatus.esm.js.map
|
package/dist/components/CollectorPage/Configurators/AzureDevOps/AzureDevOpsConfigurator.esm.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsxs as u,Fragment as S,jsx as e}from"react/jsx-runtime";import{
|
|
1
|
+
import{jsxs as u,Fragment as S,jsx as e}from"react/jsx-runtime";import{standardSchemaResolver as k}from"@hookform/resolvers/standard-schema";import{makeStyles as B,Paper as A,Divider as n}from"@material-ui/core";import{useCallback as F}from"react";import{useForm as N,FormProvider as R}from"react-hook-form";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../../../api.esm.js";import"../../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"@spotify/backstage-plugin-soundcheck-common";import"../../../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as I}from"../../../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as W}from"../../../../hooks/useNavigateBack.esm.js";import"react-router-dom";import"react-use/lib/useLocalStorage";import"react-use/lib/useAsync";import"../../../ChecksTable/utils.esm.js";import"../../../../graphql/generated/index.esm.js";import"react-use/lib/useAsyncRetry";import{useUpdateCollectorConfig as q}from"../../../../hooks/collectors/useUpdateCollectorConfig.esm.js";import{integrationsPageRouteRef as w}from"../../../../routes.esm.js";import{FooterButtons as z}from"../../../FooterButtons/FooterButtons.esm.js";import"../../../SoundcheckHeader/SoundcheckHeader.esm.js";import"../../../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as x}from"../../../SoundcheckHeader/useHeader.esm.js";import{FactCollectionConfig as r}from"../Common/FactCollectionConfig.esm.js";import"../Common/CollectorConfigAlert.esm.js";import{defaultCollectorOption as l}from"../Common/CollectorOption.esm.js";import{collectorHeaderContent as j,confirmationModalContent as M}from"../Common/utils.esm.js";import{NumberOfDaysComponent as b}from"./NumberOfDaysComponent.esm.js";import{NumberOfWorkItemsComponent as T}from"./NumberOfWorkItemsComponent.esm.js";import{mapConfigToAzureDevOpsCollectorConfig as H,defaultAzureDevOpsConfig as U,numberOfDaysCollectorConfig as d,numberOfWorkItemsCollectorConfig as V,mapAzureDevOpsCollectorConfigToConfig as L}from"./utils.esm.js";import{azureDevOpsCollectorFormSchema as E}from"./validation.esm.js";const G=B(t=>({spacer:{height:t.spacing(8),width:"100%"},section:{marginBottom:t.spacing(2)}})),J=({disabled:t,selectedCollector:i})=>{const C=F(async(o,...a)=>{const s={enabled:!1,collectors:[]},P={repositoryDetails:o.repositoryDetails.enabled?o.repositoryDetails:l(),branchPolicies:o.branchPolicies.enabled?o.branchPolicies:l(),branchStatus:o.branchStatus.enabled?o.branchStatus:l(),numberOfBranches:o.numberOfBranches.enabled?o.numberOfBranches:s,numberOfActivePullRequests:o.numberOfActivePullRequests.enabled?o.numberOfActivePullRequests:s,numberOfWorkItems:o.numberOfWorkItems.enabled?o.numberOfWorkItems:s};return k(E)(P,...a)},[]),m=N({defaultValues:i?H(i.config):U(),mode:"onChange",resolver:C}),{formState:{isValid:h},handleSubmit:c}=m,p=G(),g=!h,{mutateAsync:O}=q(),[y,v]=W(w),{showModal:D}=I(),f=async o=>{if(!await D(M(i)))return;const a=L(o);await O({collectorId:i.id,config:a})&&v()};return x(j(i)),u(S,{children:[e(A,{className:p.section,children:e(R,{...m,children:u("form",{onSubmit:c(f),children:[e(r,{name:"repositoryDetails",label:"Repository Details",description:"Collects details about an entity's repository.",disabled:t}),e(n,{}),e(r,{name:"branchPolicies",label:"Branch Policies",description:"Collects branch policies information from an entity's repository.",disabled:t}),e(n,{}),e(r,{name:"branchStatus",label:"Branch Status",description:"Collects the latest branch status information from an entity's repository.",disabled:t}),e(n,{}),e(r,{name:"numberOfBranches",label:"Number Of Branches",description:"Collects the number of branches from an entity's repository.",disabled:t,FactDetailsComponent:b,multipleCollectors:{enable:!0,defaultConfig:d()}}),e(n,{}),e(r,{name:"numberOfActivePullRequests",label:"Number Of Active Pull Requests",description:"Collects the number of active pull requests from an entity's repository.",disabled:t,FactDetailsComponent:b,multipleCollectors:{enable:!0,defaultConfig:d()}}),e(n,{}),e(r,{name:"numberOfWorkItems",label:"Number Of Work Items",description:"Collects the number of work items from an entity's project.",disabled:t,FactDetailsComponent:T,multipleCollectors:{enable:!0,defaultConfig:V()}})]})})}),e("div",{className:p.section,children:e(z,{onCancel:y,saveButtonText:"Save",isLoading:!1,onSave:c(f),disableSave:g})})]})};export{J as AzureDevOpsConfigurator};
|
|
2
2
|
//# sourceMappingURL=AzureDevOpsConfigurator.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{validFactNameRegex as d,invalidFactNameErrorMessage as b,validNameRegex as E,invalidNameErrorMessage as _}from"@spotify/backstage-plugin-soundcheck-common";import{z as e}from"zod";import{FIELD_IS_REQUIRED_MSG as m}from"../../../../utils/validation.esm.js";import{CollectorOptionSchema as l,BaseCollectorSchema as I}from"../Common/CollectorOption.esm.js";import{REPOSITORY_DETAILS_COLLECTOR_TYPE as N,BRANCH_POLICIES_COLLECTOR_TYPE as p,BRANCH_STATUS_COLLECTOR_TYPE as C}from"./utils.esm.js";const r="Fact name is not unique",i="Max 100 characters",u=e.object({factName:e.string().min(1,m).max(100,i).regex(d,b)}),O=u.merge(e.object({numberOfDays:e.number().min(0).optional().nullable()})).strict(),R=u.merge(e.object({data:e.array(e.strictObject({name:e.string().min(1,m).max(100,i).regex(E,_),query:e.string().min(1,m)})).min(1)})).strict(),n=a=>e.strictObject({enabled:e.boolean().optional(),collectors:e.array(I.extend({factDetails:a}))}),h=e.strictObject({repositoryDetails:l,branchPolicies:l,branchStatus:l,numberOfBranches:n(O),numberOfActivePullRequests:n(O),numberOfWorkItems:n(R)}).superRefine((a,o)=>{const f=[N,p,C,...a.numberOfBranches.collectors.map(t=>t.factDetails.factName),...a.numberOfActivePullRequests.collectors.map(t=>t.factDetails.factName),...a.numberOfWorkItems.collectors.map(t=>t.factDetails.factName)],s=f.filter((t,c)=>f.indexOf(t)!==c);s.length&&(a.numberOfBranches.collectors.forEach((t,c)=>{s.includes(t.factDetails.factName)&&o.addIssue({code:e.ZodIssueCode.custom,message:r,path:["numberOfBranches","collectors",c,"factDetails","factName"]})}),a.numberOfActivePullRequests.collectors.forEach((t,c)=>{s.includes(t.factDetails.factName)&&o.addIssue({code:e.ZodIssueCode.custom,message:r,path:["numberOfActivePullRequests","collectors",c,"factDetails","factName"]})}),a.numberOfWorkItems.collectors.forEach((t,c)=>{s.includes(t.factDetails.factName)&&o.addIssue({code:e.ZodIssueCode.custom,message:r,path:["numberOfWorkItems","collectors",c,"factDetails","factName"]})}))});export{r as FACT_NAME_IS_NOT_UNIQUE_MSG,i as MAX_100_CHARACTERS_MSG,h as azureDevOpsCollectorFormSchema};
|
|
1
|
+
import{validFactNameRegex as d,invalidFactNameErrorMessage as b,validNameRegex as E,invalidNameErrorMessage as _}from"@spotify/backstage-plugin-soundcheck-common";import{z as e}from"zod/v3";import{FIELD_IS_REQUIRED_MSG as m}from"../../../../utils/validation.esm.js";import{CollectorOptionSchema as l,BaseCollectorSchema as I}from"../Common/CollectorOption.esm.js";import{REPOSITORY_DETAILS_COLLECTOR_TYPE as N,BRANCH_POLICIES_COLLECTOR_TYPE as p,BRANCH_STATUS_COLLECTOR_TYPE as C}from"./utils.esm.js";const r="Fact name is not unique",i="Max 100 characters",u=e.object({factName:e.string().min(1,m).max(100,i).regex(d,b)}),O=u.merge(e.object({numberOfDays:e.number().min(0).optional().nullable()})).strict(),R=u.merge(e.object({data:e.array(e.strictObject({name:e.string().min(1,m).max(100,i).regex(E,_),query:e.string().min(1,m)})).min(1)})).strict(),n=a=>e.strictObject({enabled:e.boolean().optional(),collectors:e.array(I.extend({factDetails:a}))}),h=e.strictObject({repositoryDetails:l,branchPolicies:l,branchStatus:l,numberOfBranches:n(O),numberOfActivePullRequests:n(O),numberOfWorkItems:n(R)}).superRefine((a,o)=>{const f=[N,p,C,...a.numberOfBranches.collectors.map(t=>t.factDetails.factName),...a.numberOfActivePullRequests.collectors.map(t=>t.factDetails.factName),...a.numberOfWorkItems.collectors.map(t=>t.factDetails.factName)],s=f.filter((t,c)=>f.indexOf(t)!==c);s.length&&(a.numberOfBranches.collectors.forEach((t,c)=>{s.includes(t.factDetails.factName)&&o.addIssue({code:e.ZodIssueCode.custom,message:r,path:["numberOfBranches","collectors",c,"factDetails","factName"]})}),a.numberOfActivePullRequests.collectors.forEach((t,c)=>{s.includes(t.factDetails.factName)&&o.addIssue({code:e.ZodIssueCode.custom,message:r,path:["numberOfActivePullRequests","collectors",c,"factDetails","factName"]})}),a.numberOfWorkItems.collectors.forEach((t,c)=>{s.includes(t.factDetails.factName)&&o.addIssue({code:e.ZodIssueCode.custom,message:r,path:["numberOfWorkItems","collectors",c,"factDetails","factName"]})}))});export{r as FACT_NAME_IS_NOT_UNIQUE_MSG,i as MAX_100_CHARACTERS_MSG,h as azureDevOpsCollectorFormSchema};
|
|
2
2
|
//# sourceMappingURL=validation.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsxs as h,Fragment as b,jsx as o}from"react/jsx-runtime";import{
|
|
1
|
+
import{jsxs as h,Fragment as b,jsx as o}from"react/jsx-runtime";import{standardSchemaResolver as B}from"@hookform/resolvers/standard-schema";import{makeStyles as v,Paper as S}from"@material-ui/core";import{useCallback as F}from"react";import{useForm as Q,FormProvider as q}from"react-hook-form";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../../../api.esm.js";import"../../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"@spotify/backstage-plugin-soundcheck-common";import"../../../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as N}from"../../../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as w}from"../../../../hooks/useNavigateBack.esm.js";import"react-router-dom";import"react-use/lib/useLocalStorage";import"react-use/lib/useAsync";import"../../../ChecksTable/utils.esm.js";import"../../../../graphql/generated/index.esm.js";import"react-use/lib/useAsyncRetry";import{useUpdateCollectorConfig as x}from"../../../../hooks/collectors/useUpdateCollectorConfig.esm.js";import{integrationsPageRouteRef as k}from"../../../../routes.esm.js";import{FooterButtons as I}from"../../../FooterButtons/FooterButtons.esm.js";import"../../../SoundcheckHeader/SoundcheckHeader.esm.js";import"../../../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as M}from"../../../SoundcheckHeader/useHeader.esm.js";import{FactCollectionConfig as P}from"../Common/FactCollectionConfig.esm.js";import{CollectorConfigAlert as R}from"../Common/CollectorConfigAlert.esm.js";import{collectorHeaderContent as T,confirmationModalContent as U}from"../Common/utils.esm.js";import{QueryFactDetailsComponent as j}from"./QueryFactDetailsComponent.esm.js";import{mapConfigToBigQueryCollectorConfig as A,defaultBigQueryConfig as D,queryCollectorConfig as H,mapBigQueryCollectorConfigToConfig as V}from"./utils.esm.js";import{bigQueryCollectorFormSchema as L}from"./validation.esm.js";const O=v(t=>({spacer:{height:t.spacing(8),width:"100%"},section:{marginBottom:t.spacing(2)}})),z=({disabled:t,selectedCollector:r})=>{const c=F(async(e,...i)=>{const C={enabled:!1,collectors:[]},y={query:e.query.enabled?e.query:C};return B(L)(y,...i)},[]),m=Q({defaultValues:r?A(r.config):D(),mode:"onChange",resolver:c}),{formState:{isValid:s},handleSubmit:a}=m,n=O(),p=!s,{mutateAsync:f}=x(),[d,u]=w(k),{showModal:g}=N(),l=async e=>{if(!await g(U(r)))return;const i=V(e);await f({collectorId:r.id,config:i})&&u()};return M(T(r)),h(b,{children:[o(R,{collectorName:"Bigquery",collectorId:r.id,hasNonUIOptions:!0}),o(S,{className:n.section,children:o(q,{...m,children:o("form",{onSubmit:a(l),children:o(P,{name:"query",label:"Query",description:"Collects data from BigQuery.",disabled:t,FactDetailsComponent:j,multipleCollectors:{enable:!0,defaultConfig:H()}})})})}),o("div",{className:n.section,children:o(I,{onCancel:d,saveButtonText:"Save",isLoading:!1,onSave:a(l),disableSave:p})})]})};export{z as BigQueryConfigurator};
|
|
2
2
|
//# sourceMappingURL=BigQueryConfigurator.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{validFactNameRegex as g,invalidFactNameErrorMessage as d,validNameRegex as m,invalidNameErrorMessage as n}from"@spotify/backstage-plugin-soundcheck-common";import{z as e}from"zod";import{FIELD_IS_REQUIRED_MSG as a}from"../../../../utils/validation.esm.js";import{BaseCollectorSchema as p}from"../Common/CollectorOption.esm.js";const l="Fact name is not unique",r="Max 100 characters",x=p.extend({factDetails:e.strictObject({factName:e.string().min(1,a).max(100,r).regex(g,d),projectId:e.string().optional(),query:e.string().min(1,a),schema:e.array(e.strictObject({name:e.string().min(1,a).max(100,r).regex(m,n),type:e.string().min(1,a).max(100,r).regex(m,n).optional(),foreignKey:e.string().optional()})).optional()})}).strict(),N=e.strictObject({enabled:e.boolean(),collectors:e.array(x).superRefine((c,f)=>{const o=c.map(t=>t.factDetails.factName),s=o.filter((t,i)=>o.indexOf(t)!==i);s.length&&c.forEach((t,i)=>{s.includes(t.factDetails.factName)&&f.addIssue({code:e.ZodIssueCode.custom,message:l,path:[i,"factDetails","factName"]})})})}),_=e.strictObject({query:N});export{l as FACT_NAME_IS_NOT_UNIQUE_MSG,r as MAX_100_CHARACTERS_MSG,_ as bigQueryCollectorFormSchema};
|
|
1
|
+
import{validFactNameRegex as g,invalidFactNameErrorMessage as d,validNameRegex as m,invalidNameErrorMessage as n}from"@spotify/backstage-plugin-soundcheck-common";import{z as e}from"zod/v3";import{FIELD_IS_REQUIRED_MSG as a}from"../../../../utils/validation.esm.js";import{BaseCollectorSchema as p}from"../Common/CollectorOption.esm.js";const l="Fact name is not unique",r="Max 100 characters",x=p.extend({factDetails:e.strictObject({factName:e.string().min(1,a).max(100,r).regex(g,d),projectId:e.string().optional(),query:e.string().min(1,a),schema:e.array(e.strictObject({name:e.string().min(1,a).max(100,r).regex(m,n),type:e.string().min(1,a).max(100,r).regex(m,n).optional(),foreignKey:e.string().optional()})).optional()})}).strict(),N=e.strictObject({enabled:e.boolean(),collectors:e.array(x).superRefine((c,f)=>{const o=c.map(t=>t.factDetails.factName),s=o.filter((t,i)=>o.indexOf(t)!==i);s.length&&c.forEach((t,i)=>{s.includes(t.factDetails.factName)&&f.addIssue({code:e.ZodIssueCode.custom,message:l,path:[i,"factDetails","factName"]})})})}),_=e.strictObject({query:N});export{l as FACT_NAME_IS_NOT_UNIQUE_MSG,r as MAX_100_CHARACTERS_MSG,_ as bigQueryCollectorFormSchema};
|
|
2
2
|
//# sourceMappingURL=validation.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsxs as C,Fragment as u,jsx as o}from"react/jsx-runtime";import{makeStyles as h,Paper as S}from"@material-ui/core";import{useForm as v,FormProvider as b}from"react-hook-form";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../../../api.esm.js";import"../../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"@spotify/backstage-plugin-soundcheck-common";import"react";import"../../../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as y}from"../../../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as B}from"../../../../hooks/useNavigateBack.esm.js";import"react-router-dom";import"react-use/lib/useLocalStorage";import"react-use/lib/useAsync";import"../../../../graphql/generated/index.esm.js";import"react-use/lib/useAsyncRetry";import{useUpdateCollectorConfig as w}from"../../../../hooks/collectors/useUpdateCollectorConfig.esm.js";import{integrationsPageRouteRef as x}from"../../../../routes.esm.js";import{FooterButtons as F}from"../../../FooterButtons/FooterButtons.esm.js";import"../../../SoundcheckHeader/SoundcheckHeader.esm.js";import"../../../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as N}from"../../../SoundcheckHeader/useHeader.esm.js";import{FactCollectionConfig as k}from"../Common/FactCollectionConfig.esm.js";import"../Common/CollectorConfigAlert.esm.js";import{collectorHeaderContent as D,confirmationModalContent as M}from"../Common/utils.esm.js";import{mapConfigToCatalogCollectorConfig as P,defaultCatalogConfig as T,mapCatalogCollectorConfigToConfig as j}from"./utils.esm.js";const H=h(t=>({spacer:{height:t.spacing(8),width:"100%"},section:{marginBottom:t.spacing(2)},form:{marginBottom:t.spacing(2)}})),R=({disabled:t,selectedCollector:r})=>{const i=v({defaultValues:r?P(r.config):T(),mode:"onChange"}),{formState:{errors:n},handleSubmit:e}=i,m=H(),s=!!n.entityDescriptor,{mutateAsync:l}=w(),[p,c]=B(x),{showModal:f}=y(),a=async g=>{if(!await f(M(r)))return;const d=j(g);await l({collectorId:r.id,config:d})&&c()};return N(D(r)),C(u,{children:[o(S,{className:m.form,children:o(b,{...i,children:o("form",{onSubmit:e(a),children:o(k,{name:"entityDescriptor",label:"Entity Descriptor",description:"Collects entities from Backstage's Software Catalog.",disabled:t})})})}),o("div",{className:m.section,children:o(F,{onCancel:p,saveButtonText:"Save",isLoading:!1,onSave:e(a),disableSave:s})})]})};export{R as CatalogConfigurator};
|
|
1
|
+
import{jsxs as C,Fragment as u,jsx as o}from"react/jsx-runtime";import{makeStyles as h,Paper as S}from"@material-ui/core";import{useForm as v,FormProvider as b}from"react-hook-form";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../../../api.esm.js";import"../../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"@spotify/backstage-plugin-soundcheck-common";import"react";import"../../../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as y}from"../../../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as B}from"../../../../hooks/useNavigateBack.esm.js";import"react-router-dom";import"react-use/lib/useLocalStorage";import"react-use/lib/useAsync";import"../../../ChecksTable/utils.esm.js";import"../../../../graphql/generated/index.esm.js";import"react-use/lib/useAsyncRetry";import{useUpdateCollectorConfig as w}from"../../../../hooks/collectors/useUpdateCollectorConfig.esm.js";import{integrationsPageRouteRef as x}from"../../../../routes.esm.js";import{FooterButtons as F}from"../../../FooterButtons/FooterButtons.esm.js";import"../../../SoundcheckHeader/SoundcheckHeader.esm.js";import"../../../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as N}from"../../../SoundcheckHeader/useHeader.esm.js";import{FactCollectionConfig as k}from"../Common/FactCollectionConfig.esm.js";import"../Common/CollectorConfigAlert.esm.js";import{collectorHeaderContent as D,confirmationModalContent as M}from"../Common/utils.esm.js";import{mapConfigToCatalogCollectorConfig as P,defaultCatalogConfig as T,mapCatalogCollectorConfigToConfig as j}from"./utils.esm.js";const H=h(t=>({spacer:{height:t.spacing(8),width:"100%"},section:{marginBottom:t.spacing(2)},form:{marginBottom:t.spacing(2)}})),R=({disabled:t,selectedCollector:r})=>{const i=v({defaultValues:r?P(r.config):T(),mode:"onChange"}),{formState:{errors:n},handleSubmit:e}=i,m=H(),s=!!n.entityDescriptor,{mutateAsync:l}=w(),[p,c]=B(x),{showModal:f}=y(),a=async g=>{if(!await f(M(r)))return;const d=j(g);await l({collectorId:r.id,config:d})&&c()};return N(D(r)),C(u,{children:[o(S,{className:m.form,children:o(b,{...i,children:o("form",{onSubmit:e(a),children:o(k,{name:"entityDescriptor",label:"Entity Descriptor",description:"Collects entities from Backstage's Software Catalog.",disabled:t})})})}),o("div",{className:m.section,children:o(F,{onCancel:p,saveButtonText:"Save",isLoading:!1,onSave:e(a),disableSave:s})})]})};export{R as CatalogConfigurator};
|
|
2
2
|
//# sourceMappingURL=CatalogConfigurator.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{z as t}from"zod";import{FrequencySchema as o,formFiltersSchema as n,CacheConfigSchema as m}from"../../../../utils/validation.esm.js";import{mapToCacheConfig as f,defaultCacheConfig as p}from"../../../CacheConfig/utils.esm.js";import"../../../CacheConfig/CacheConfigComponent.esm.js";import{mapCatalogFilterToFilters as i}from"../../../Filter/utils.esm.js";import"../../../Filter/FilterComponent.esm.js";import{emptyFilters as l}from"../../../Filter/types.esm.js";import"../../../Frequency/types.esm.js";import{mapHumanDurationOrCronToFrequency as a,defaultFrequency as u}from"../../../Frequency/util.esm.js";import"../../../Frequency/FrequencyComponent.esm.js";const r=(e={})=>({filters:{include:e?.filter&&typeof e.filter=="object"?i(e.filter):[{...l(),selectedKinds:["Component"]}],exclude:e?.exclude&&typeof e.exclude=="object"?i(e.exclude):[l()]},frequency:e?.frequency?a(e.frequency):u(),cacheConfig:e?.cache?f(e.cache):p(),batchSize:e?.batchSize,initialDelay:e?.initialDelay?a(e.initialDelay):void 0}),h=(e={})=>({enabled:!1,...r(e)}),c=t.object({frequency:o,filters:n,cacheConfig:m,initialDelay:o.optional(),batchSize:t.number().min(1,"Batch size should be at least 1").optional().nullable()}),d=c.extend({enabled:t.boolean()}).strict();export{c as BaseCollectorSchema,d as CollectorOptionSchema,r as defaultBaseCollectorOption,h as defaultCollectorOption};
|
|
1
|
+
import{z as t}from"zod/v3";import{FrequencySchema as o,formFiltersSchema as n,CacheConfigSchema as m}from"../../../../utils/validation.esm.js";import{mapToCacheConfig as f,defaultCacheConfig as p}from"../../../CacheConfig/utils.esm.js";import"../../../CacheConfig/CacheConfigComponent.esm.js";import{mapCatalogFilterToFilters as i}from"../../../Filter/utils.esm.js";import"../../../Filter/FilterComponent.esm.js";import{emptyFilters as l}from"../../../Filter/types.esm.js";import"../../../Frequency/types.esm.js";import{mapHumanDurationOrCronToFrequency as a,defaultFrequency as u}from"../../../Frequency/util.esm.js";import"../../../Frequency/FrequencyComponent.esm.js";const r=(e={})=>({filters:{include:e?.filter&&typeof e.filter=="object"?i(e.filter):[{...l(),selectedKinds:["Component"]}],exclude:e?.exclude&&typeof e.exclude=="object"?i(e.exclude):[l()]},frequency:e?.frequency?a(e.frequency):u(),cacheConfig:e?.cache?f(e.cache):p(),batchSize:e?.batchSize,initialDelay:e?.initialDelay?a(e.initialDelay):void 0}),h=(e={})=>({enabled:!1,...r(e)}),c=t.object({frequency:o,filters:n,cacheConfig:m,initialDelay:o.optional(),batchSize:t.number().min(1,"Batch size should be at least 1").optional().nullable()}),d=c.extend({enabled:t.boolean()}).strict();export{c as BaseCollectorSchema,d as CollectorOptionSchema,r as defaultBaseCollectorOption,h as defaultCollectorOption};
|
|
2
2
|
//# sourceMappingURL=CollectorOption.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{mapToCacheConfig as c,mapCacheConfigToHumanDurationOrBoolean as l}from"../../../CacheConfig/utils.esm.js";import"../../../CacheConfig/CacheConfigComponent.esm.js";import{mapCatalogFilterToFilters as
|
|
1
|
+
import{mapToCacheConfig as c,mapCacheConfigToHumanDurationOrBoolean as l}from"../../../CacheConfig/utils.esm.js";import"../../../CacheConfig/CacheConfigComponent.esm.js";import{mapCatalogFilterToFilters as t,mapFiltersToCatalogFilter as n}from"../../../Filter/utils.esm.js";import"../../../Filter/FilterComponent.esm.js";import"../../../Frequency/types.esm.js";import{mapHumanDurationOrCronToFrequency as a,mapFrequencyToHumanDurationOrCron as r}from"../../../Frequency/util.esm.js";import"../../../Frequency/FrequencyComponent.esm.js";const f=i=>({title:i.name??i.id,description:i.description,docLink:`https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/fact-collectors/3p-integrations/${i.id}`}),s=i=>({title:`Update ${i.name} Integration?`,message:`Are you sure you want to update the ${i.name} integration? This will overwrite the current configuration stored in the database. Database settings will take priority over configurations defined in YAML.`,error:!1}),u=({configOption:i,factType:e,additionalParams:o={}})=>({type:e,frequency:r(i.frequency),filter:n(i.filters.include),exclude:n(i.filters.exclude),cache:l(i.cacheConfig),batchSize:i.batchSize??void 0,initialDelay:i.initialDelay?r(i.initialDelay):void 0,...o}),d=({parentConfig:i,factTypeConfig:e})=>{const o=e.initialDelay??i.initialDelay;return{frequency:a(e.frequency??i.frequency),filters:{include:t(e.filter??i.filter),exclude:t(e.exclude??i.exclude)},cacheConfig:c(e.cache??i.cache),batchSize:e.batchSize??i.batchSize,initialDelay:o?a(o):void 0}},m="~1.",p=i=>i.join(m),g=i=>`/config-manager/soundcheck#${p(["root","soundcheck","collectors",i])}__title`;export{f as collectorHeaderContent,s as confirmationModalContent,g as getConfigManagerLink,d as mapBackendConfigToFormIntegrationConfig,u as mapFormIntegrationConfigToBackendConfig};
|
|
2
2
|
//# sourceMappingURL=utils.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as
|
|
1
|
+
import{jsx as r}from"react/jsx-runtime";import{PageWarningMessage as e}from"../../PageWarningMessage/PageWarningMessage.esm.js";import{hasConfigSchema as a}from"../utils.esm.js";import{AzureDevOpsConfigurator as m}from"./AzureDevOps/AzureDevOpsConfigurator.esm.js";import{BigQueryConfigurator as n}from"./BigQuery/BigQueryConfigurator.esm.js";import{CatalogConfigurator as f}from"./Catalog/CatalogConfigurator.esm.js";import{DataDogConfigurator as g}from"./DataDog/DataDogConfigurator.esm.js";import{DataRegistryConfigurator as u}from"./DataRegistry/DataRegistryConfigurator.esm.js";import{GithubConfigurator as c}from"./Github/GithubConfigurator.esm.js";import{GitlabConfigurator as p}from"./Gitlab/GitlabConfigurator.esm.js";import{HttpConfigurator as s}from"./HTTP/HttpConfigurator.esm.js";import{JiraConfigurator as C}from"./Jira/JiraConfigurator.esm.js";import{KubernetesConfigurator as l}from"./Kubernetes/KubernetesConfigurator.esm.js";import{NewRelicConfigurator as d}from"./NewRelic/NewRelicConfigurator.esm.js";import{PagerDutyConfigurator as b}from"./PagerDuty/PagerDutyConfigurator.esm.js";import{SchemaBasedConfigurator as h}from"./SchemaBased/SchemaBasedConfigurator.esm.js";import{ScmConfigurator as y}from"./SCM/ScmConfigurator.esm.js";import{SonarQubeConfigurator as D}from"./SonarQube/SonarQubeConfigurator.esm.js";const t={github:c,gitlab:p,scm:y,pagerduty:b,datadog:g,kubernetes:l,jira:C,sonarqube:D,newrelic:d,bigquery:n,catalog:f,azure:m,http:s,"data-registry":u},k=o=>{if(!(!o||!(o in t)))return`https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/fact-collectors/3p-integrations/${o}`},R=({selectedCollector:o})=>{const i=t[o?.id];return i?r(i,{selectedCollector:o}):a(o)?r(h,{selectedCollector:o}):r(e,{entityName:"Integration",entityId:o.id,showCannotEdit:!0})};export{t as CONFIGURATOR_MAP,R as Configurator,k as getCollectorDocLink};
|
|
2
2
|
//# sourceMappingURL=Configurator.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsxs as c,Fragment as D,jsx as e}from"react/jsx-runtime";import{makeStyles as b,Paper as h,Divider as S}from"@material-ui/core";import{useForm as y,FormProvider as j}from"react-hook-form";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../../../api.esm.js";import"../../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"@spotify/backstage-plugin-soundcheck-common";import"react";import"../../../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as N}from"../../../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as F}from"../../../../hooks/useNavigateBack.esm.js";import"react-router-dom";import"react-use/lib/useLocalStorage";import"react-use/lib/useAsync";import"../../../../graphql/generated/index.esm.js";import"react-use/lib/useAsyncRetry";import{useUpdateCollectorConfig as L}from"../../../../hooks/collectors/useUpdateCollectorConfig.esm.js";import{integrationsPageRouteRef as O}from"../../../../routes.esm.js";import{FooterButtons as k}from"../../../FooterButtons/FooterButtons.esm.js";import"../../../SoundcheckHeader/SoundcheckHeader.esm.js";import"../../../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as w}from"../../../SoundcheckHeader/useHeader.esm.js";import{FactCollectionConfig as l}from"../Common/FactCollectionConfig.esm.js";import{CollectorConfigAlert as x}from"../Common/CollectorConfigAlert.esm.js";import{collectorHeaderContent as B,confirmationModalContent as I}from"../Common/utils.esm.js";import{mapConfigToDataDogCollectorConfig as M,defaultDataDogConfig as P,mapDataDogCollectorConfigToConfig as T}from"./utils.esm.js";const A=b(i=>({spacer:{height:i.spacing(8),width:"100%"},section:{marginBottom:i.spacing(2)}})),H=({disabled:i,selectedCollector:o})=>{const t=y({defaultValues:o?M(o.config):P(),mode:"onChange"}),{formState:{errors:r},handleSubmit:a}=t,n=A(),s=!!r.serviceDefinition||!!r.serviceLevelObjective,{mutateAsync:
|
|
1
|
+
import{jsxs as c,Fragment as D,jsx as e}from"react/jsx-runtime";import{makeStyles as b,Paper as h,Divider as S}from"@material-ui/core";import{useForm as y,FormProvider as j}from"react-hook-form";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../../../api.esm.js";import"../../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"@spotify/backstage-plugin-soundcheck-common";import"react";import"../../../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as N}from"../../../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as F}from"../../../../hooks/useNavigateBack.esm.js";import"react-router-dom";import"react-use/lib/useLocalStorage";import"react-use/lib/useAsync";import"../../../ChecksTable/utils.esm.js";import"../../../../graphql/generated/index.esm.js";import"react-use/lib/useAsyncRetry";import{useUpdateCollectorConfig as L}from"../../../../hooks/collectors/useUpdateCollectorConfig.esm.js";import{integrationsPageRouteRef as O}from"../../../../routes.esm.js";import{FooterButtons as k}from"../../../FooterButtons/FooterButtons.esm.js";import"../../../SoundcheckHeader/SoundcheckHeader.esm.js";import"../../../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as w}from"../../../SoundcheckHeader/useHeader.esm.js";import{FactCollectionConfig as l}from"../Common/FactCollectionConfig.esm.js";import{CollectorConfigAlert as x}from"../Common/CollectorConfigAlert.esm.js";import{collectorHeaderContent as B,confirmationModalContent as I}from"../Common/utils.esm.js";import{mapConfigToDataDogCollectorConfig as M,defaultDataDogConfig as P,mapDataDogCollectorConfigToConfig as T}from"./utils.esm.js";const A=b(i=>({spacer:{height:i.spacing(8),width:"100%"},section:{marginBottom:i.spacing(2)}})),H=({disabled:i,selectedCollector:o})=>{const t=y({defaultValues:o?M(o.config):P(),mode:"onChange"}),{formState:{errors:r},handleSubmit:a}=t,n=A(),s=!!r.serviceDefinition||!!r.serviceLevelObjective,{mutateAsync:p}=L(),[d,f]=F(O),{showModal:g}=N(),m=async C=>{if(!await g(I(o)))return;const u=T(C);await p({collectorId:o.id,config:u})&&f()};w(B(o));const v=!o.config?.apiKey||!o.config?.appKey;return c(D,{children:[e(x,{collectorName:"Datadog",collectorId:o.id,invalidConfig:v,hasNonUIOptions:!0}),e(h,{className:n.section,children:e(j,{...t,children:c("form",{onSubmit:a(m),children:[e(l,{name:"serviceDefinition",label:"Service Definition",description:"Collects details about Datadog service linked to an entity.",disabled:i}),e(S,{}),e(l,{name:"serviceLevelObjective",label:"Service Level Objective",description:"Collects details about SLOs configured for a Datadog service linked to an entity.",disabled:i})]})})}),e("div",{className:n.section,children:e(k,{onCancel:d,saveButtonText:"Save",isLoading:!1,onSave:a(m),disableSave:s})})]})};export{H as DataDogConfigurator};
|
|
2
2
|
//# sourceMappingURL=DataDogConfigurator.esm.js.map
|
package/dist/components/CollectorPage/Configurators/DataRegistry/DataRegistryConfigurator.esm.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsxs as C,Fragment as u,jsx as o}from"react/jsx-runtime";import{makeStyles as h,Paper as S}from"@material-ui/core";import{useForm as y,FormProvider as v}from"react-hook-form";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../../../api.esm.js";import"../../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"@spotify/backstage-plugin-soundcheck-common";import"react";import"../../../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as R}from"../../../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as b}from"../../../../hooks/useNavigateBack.esm.js";import"react-router-dom";import"react-use/lib/useLocalStorage";import"react-use/lib/useAsync";import"../../../../graphql/generated/index.esm.js";import"react-use/lib/useAsyncRetry";import{useUpdateCollectorConfig as D}from"../../../../hooks/collectors/useUpdateCollectorConfig.esm.js";import{integrationsPageRouteRef as B}from"../../../../routes.esm.js";import{FooterButtons as F}from"../../../FooterButtons/FooterButtons.esm.js";import"../../../SoundcheckHeader/SoundcheckHeader.esm.js";import"../../../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as w}from"../../../SoundcheckHeader/useHeader.esm.js";import{FactCollectionConfig as x}from"../Common/FactCollectionConfig.esm.js";import"../Common/CollectorConfigAlert.esm.js";import{collectorHeaderContent as N,confirmationModalContent as T}from"../Common/utils.esm.js";import{mapConfigToDataRegistryCollectorConfig as M,defaultDataRegistryConfig as P,mapDataRegistryCollectorConfigToConfig as j}from"./utils.esm.js";const k=h(t=>({spacer:{height:t.spacing(8),width:"100%"},section:{marginBottom:t.spacing(2)},form:{marginBottom:t.spacing(2)}})),H=({disabled:t,selectedCollector:r})=>{const
|
|
1
|
+
import{jsxs as C,Fragment as u,jsx as o}from"react/jsx-runtime";import{makeStyles as h,Paper as S}from"@material-ui/core";import{useForm as y,FormProvider as v}from"react-hook-form";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../../../api.esm.js";import"../../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"@spotify/backstage-plugin-soundcheck-common";import"react";import"../../../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as R}from"../../../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as b}from"../../../../hooks/useNavigateBack.esm.js";import"react-router-dom";import"react-use/lib/useLocalStorage";import"react-use/lib/useAsync";import"../../../ChecksTable/utils.esm.js";import"../../../../graphql/generated/index.esm.js";import"react-use/lib/useAsyncRetry";import{useUpdateCollectorConfig as D}from"../../../../hooks/collectors/useUpdateCollectorConfig.esm.js";import{integrationsPageRouteRef as B}from"../../../../routes.esm.js";import{FooterButtons as F}from"../../../FooterButtons/FooterButtons.esm.js";import"../../../SoundcheckHeader/SoundcheckHeader.esm.js";import"../../../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as w}from"../../../SoundcheckHeader/useHeader.esm.js";import{FactCollectionConfig as x}from"../Common/FactCollectionConfig.esm.js";import"../Common/CollectorConfigAlert.esm.js";import{collectorHeaderContent as N,confirmationModalContent as T}from"../Common/utils.esm.js";import{mapConfigToDataRegistryCollectorConfig as M,defaultDataRegistryConfig as P,mapDataRegistryCollectorConfigToConfig as j}from"./utils.esm.js";const k=h(t=>({spacer:{height:t.spacing(8),width:"100%"},section:{marginBottom:t.spacing(2)},form:{marginBottom:t.spacing(2)}})),H=({disabled:t,selectedCollector:r})=>{const i=y({defaultValues:r?M(r.config):P(),mode:"onChange"}),{formState:{errors:n},handleSubmit:e}=i,a=k(),s=!!n.datasetSchema,{mutateAsync:p}=D(),[c,l]=b(B),{showModal:f}=R(),m=async d=>{if(!await f(T(r)))return;const g=j(d);await p({collectorId:r.id,config:g})&&l()};return w(N(r)),C(u,{children:[o(S,{className:a.form,children:o(v,{...i,children:o("form",{onSubmit:e(m),children:o(x,{name:"datasetSchema",label:"Dataset Schema",description:"Collects fields (name, type, description) from a dataset in Data Registry.",disabled:t})})})}),o("div",{className:a.section,children:o(F,{onCancel:c,saveButtonText:"Save",isLoading:!1,onSave:e(m),disableSave:s})})]})};export{H as DataRegistryConfigurator};
|
|
2
2
|
//# sourceMappingURL=DataRegistryConfigurator.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsxs as p,Fragment as S,jsx as e}from"react/jsx-runtime";import{
|
|
1
|
+
import{jsxs as p,Fragment as S,jsx as e}from"react/jsx-runtime";import{standardSchemaResolver as A}from"@hookform/resolvers/standard-schema";import{makeStyles as F,Paper as v,Divider as r}from"@material-ui/core";import{useForm as D,FormProvider as R}from"react-hook-form";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../../../api.esm.js";import"../../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"@spotify/backstage-plugin-soundcheck-common";import"react";import"../../../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as B}from"../../../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as L}from"../../../../hooks/useNavigateBack.esm.js";import"react-router-dom";import"react-use/lib/useLocalStorage";import"react-use/lib/useAsync";import"../../../ChecksTable/utils.esm.js";import"../../../../graphql/generated/index.esm.js";import"react-use/lib/useAsyncRetry";import{useUpdateCollectorConfig as T}from"../../../../hooks/collectors/useUpdateCollectorConfig.esm.js";import{integrationsPageRouteRef as x}from"../../../../routes.esm.js";import{FooterButtons as N}from"../../../FooterButtons/FooterButtons.esm.js";import"../../../SoundcheckHeader/SoundcheckHeader.esm.js";import"../../../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as P}from"../../../SoundcheckHeader/useHeader.esm.js";import{FactCollectionConfig as i}from"../Common/FactCollectionConfig.esm.js";import"../Common/CollectorConfigAlert.esm.js";import{collectorHeaderContent as w,confirmationModalContent as G}from"../Common/utils.esm.js";import{CodeScanningAlertsFactDetails as E}from"./CodeScanningAlertsFactDetails.esm.js";import{DependabotAlertsFactDetails as I}from"./DependabotAlertsFactDetails.esm.js";import{SecretScanningAlertsFactDetails as M}from"./SecretScanningAlertsFactDetails.esm.js";import{SecurityAdvisoriesFactDetails as O}from"./SecurityAdvisoriesFactDetails.esm.js";import{mapConfigToGithubCollectorConfig as _,defaultGithubConfig as j,DEFAULT_NEW_COLLECTOR_CONFIG as n,mapGithubCollectorConfigToConfig as k}from"./utils.esm.js";import{githubCollectorFormSchema as H}from"./validation.esm.js";const d=F(o=>({spacer:{height:o.spacing(8),width:"100%"},section:{marginBottom:o.spacing(2)},form:{marginBottom:o.spacing(2)},root:{paddingTop:o.spacing(1)},formInput:{marginTop:0,marginBottom:o.spacing(2),width:"500px"},helperText:{marginLeft:0}})),U=({disabled:o,selectedCollector:a})=>{const s=D({defaultValues:a?_(a.config):j(),mode:"onChange",resolver:A(H)}),{formState:{errors:t},handleSubmit:l}=s,m=d(),f=!!t.branchProtections||!!t.branchRules||!!t.codeScanningAlerts||!!t.dependabotAlerts||!!t.repositoryDetails||!!t.repositoryLanguages||!!t.secretScanningAlerts||!!t.securityAdvisories,{mutateAsync:u}=T(),[g,b]=L(x),{showModal:C}=B(),c=async y=>{if(!await C(G(a)))return;const h=k(y);await u({collectorId:a.id,config:h})&&b()};return P(w(a)),p(S,{children:[e(v,{className:m.form,children:e(R,{...s,children:p("form",{onSubmit:l(c),children:[e(i,{name:"branchProtections",label:"Branch Protections",description:"Collects branch protection information from an entity's repository.",disabled:o}),e(r,{}),e(i,{name:"branchRules",label:"Branch Rules",description:"Collects branch rules information from an entity's repository.",disabled:o}),e(r,{}),e(i,{name:"codeScanningAlerts",label:"Code Scanning Alerts",description:"Collects details about code scanning alerts for an entity's repository.",disabled:o,FactDetailsComponent:E,multipleCollectors:{enable:!0,defaultConfig:n}}),e(r,{}),e(i,{name:"dependabotAlerts",label:"Dependabot Alerts",description:"Collects details about dependabot alerts for an entity's repository.",disabled:o,FactDetailsComponent:I,multipleCollectors:{enable:!0,defaultConfig:n}}),e(r,{}),e(i,{name:"repositoryDetails",label:"Repository Details",description:"Collects details about an entity's repository.",disabled:o}),e(r,{}),e(i,{name:"repositoryLanguages",label:"Repository Languages",description:"Collects details about the languages used in an entity's repository.",disabled:o}),e(r,{}),e(i,{name:"secretScanningAlerts",label:"Secret Scanning Alerts",description:"Collects details about secret scanning alerts for an entity's repository.",disabled:o,FactDetailsComponent:M,multipleCollectors:{enable:!0,defaultConfig:n}}),e(r,{}),e(i,{name:"securityAdvisories",label:"Security Advisories",description:"Collects details about security advisories for an entity's repository.",disabled:o,FactDetailsComponent:O,multipleCollectors:{enable:!0,defaultConfig:n}})]})})}),e("div",{className:m.section,children:e(N,{onCancel:g,saveButtonText:"Save",isLoading:!1,onSave:l(c),disableSave:f})})]})};export{U as GithubConfigurator,d as useStyles};
|
|
2
2
|
//# sourceMappingURL=GithubConfigurator.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{validFactNameRegex as i,invalidFactNameErrorMessage as n}from"@spotify/backstage-plugin-soundcheck-common";import{z as e}from"zod";import{FIELD_IS_REQUIRED_MSG as m}from"../../../../utils/validation.esm.js";import{BaseCollectorSchema as A,CollectorOptionSchema as S}from"../Common/CollectorOption.esm.js";import{CODE_SCANNING_ALERTS_STATE_OPTIONS as d,CODE_SCANNING_ALERTS_SEVERITY_OPTIONS as _,DEPENDABOT_ALERTS_STATE_OPTIONS as E,DEPENDABOT_ALERTS_SEVERITY_OPTIONS as f,SECRET_SCANNING_ALERTS_STATE_OPTIONS as T,SECRET_SCANNING_ALERTS_VALIDITY_OPTIONS as O,SECURITY_ADVISORIES_STATE_OPTIONS as I,BRANCH_PROTECTIONS_FACT_NAME as u,BRANCH_RULES_FACT_NAME as g,REPOSITORY_DETAILS_FACT_NAME as p,REPOSITORY_LANGUAGES_FACT_NAME as b}from"./types.esm.js";const o="Fact name is not unique",r="Max 100 characters",D=A.merge(e.object({factDetails:e.strictObject({factName:e.string().min(1,m).max(100,r).regex(i,n),toolName:e.string().optional(),state:e.enum(d).or(e.literal("")).optional(),severity:e.enum(_).or(e.literal("")).optional()})})).strict(),R=A.merge(e.object({factDetails:e.strictObject({factName:e.string().min(1,m).max(100,r).regex(i,n),states:e.array(e.enum(E)).optional(),severities:e.array(e.enum(f)).optional()})})).strict(),C=A.merge(e.object({factDetails:e.strictObject({factName:e.string().min(1,m).max(100,r).regex(i,n),state:e.enum(T).or(e.literal("")).optional(),validities:e.array(e.enum(O)).optional()})})).strict(),h=A.merge(e.object({factDetails:e.strictObject({factName:e.string().min(1,m).max(100,r).regex(i,n),state:e.enum(I).or(e.literal("")).optional()})})).strict(),y=e.strictObject({branchProtections:S,branchRules:S,codeScanningAlerts:e.strictObject({enabled:e.boolean(),collectors:e.array(D)}),dependabotAlerts:e.strictObject({enabled:e.boolean(),collectors:e.array(R)}),repositoryDetails:S,repositoryLanguages:S,secretScanningAlerts:e.strictObject({enabled:e.boolean(),collectors:e.array(C)}),securityAdvisories:e.strictObject({enabled:e.boolean(),collectors:e.array(h)})}).superRefine((c,l)=>{const N=[u,g,p,b,...c.codeScanningAlerts.collectors.map(t=>t.factDetails.factName),...c.dependabotAlerts.collectors.map(t=>t.factDetails.factName),...c.secretScanningAlerts.collectors.map(t=>t.factDetails.factName),...c.securityAdvisories.collectors.map(t=>t.factDetails.factName)],s=N.filter((t,a)=>N.indexOf(t)!==a);s.length&&(c.codeScanningAlerts.collectors.forEach((t,a)=>{s.includes(t.factDetails.factName)&&l.addIssue({code:e.ZodIssueCode.custom,message:o,path:["codeScanningAlerts","collectors",a,"factDetails","factName"]})}),c.dependabotAlerts.collectors.forEach((t,a)=>{s.includes(t.factDetails.factName)&&l.addIssue({code:e.ZodIssueCode.custom,message:o,path:["dependabotAlerts","collectors",a,"factDetails","factName"]})}),c.secretScanningAlerts.collectors.forEach((t,a)=>{s.includes(t.factDetails.factName)&&l.addIssue({code:e.ZodIssueCode.custom,message:o,path:["secretScanningAlerts","collectors",a,"factDetails","factName"]})}),c.securityAdvisories.collectors.forEach((t,a)=>{s.includes(t.factDetails.factName)&&l.addIssue({code:e.ZodIssueCode.custom,message:o,path:["securityAdvisories","collectors",a,"factDetails","factName"]})}))});export{o as FACT_NAME_IS_NOT_UNIQUE_MSG,r as MAX_100_CHARACTERS_MSG,y as githubCollectorFormSchema};
|
|
1
|
+
import{validFactNameRegex as i,invalidFactNameErrorMessage as n}from"@spotify/backstage-plugin-soundcheck-common";import{z as e}from"zod/v3";import{FIELD_IS_REQUIRED_MSG as m}from"../../../../utils/validation.esm.js";import{BaseCollectorSchema as A,CollectorOptionSchema as S}from"../Common/CollectorOption.esm.js";import{CODE_SCANNING_ALERTS_STATE_OPTIONS as d,CODE_SCANNING_ALERTS_SEVERITY_OPTIONS as _,DEPENDABOT_ALERTS_STATE_OPTIONS as E,DEPENDABOT_ALERTS_SEVERITY_OPTIONS as f,SECRET_SCANNING_ALERTS_STATE_OPTIONS as T,SECRET_SCANNING_ALERTS_VALIDITY_OPTIONS as O,SECURITY_ADVISORIES_STATE_OPTIONS as I,BRANCH_PROTECTIONS_FACT_NAME as u,BRANCH_RULES_FACT_NAME as g,REPOSITORY_DETAILS_FACT_NAME as p,REPOSITORY_LANGUAGES_FACT_NAME as b}from"./types.esm.js";const o="Fact name is not unique",r="Max 100 characters",D=A.merge(e.object({factDetails:e.strictObject({factName:e.string().min(1,m).max(100,r).regex(i,n),toolName:e.string().optional(),state:e.enum(d).or(e.literal("")).optional(),severity:e.enum(_).or(e.literal("")).optional()})})).strict(),R=A.merge(e.object({factDetails:e.strictObject({factName:e.string().min(1,m).max(100,r).regex(i,n),states:e.array(e.enum(E)).optional(),severities:e.array(e.enum(f)).optional()})})).strict(),C=A.merge(e.object({factDetails:e.strictObject({factName:e.string().min(1,m).max(100,r).regex(i,n),state:e.enum(T).or(e.literal("")).optional(),validities:e.array(e.enum(O)).optional()})})).strict(),h=A.merge(e.object({factDetails:e.strictObject({factName:e.string().min(1,m).max(100,r).regex(i,n),state:e.enum(I).or(e.literal("")).optional()})})).strict(),y=e.strictObject({branchProtections:S,branchRules:S,codeScanningAlerts:e.strictObject({enabled:e.boolean(),collectors:e.array(D)}),dependabotAlerts:e.strictObject({enabled:e.boolean(),collectors:e.array(R)}),repositoryDetails:S,repositoryLanguages:S,secretScanningAlerts:e.strictObject({enabled:e.boolean(),collectors:e.array(C)}),securityAdvisories:e.strictObject({enabled:e.boolean(),collectors:e.array(h)})}).superRefine((c,l)=>{const N=[u,g,p,b,...c.codeScanningAlerts.collectors.map(t=>t.factDetails.factName),...c.dependabotAlerts.collectors.map(t=>t.factDetails.factName),...c.secretScanningAlerts.collectors.map(t=>t.factDetails.factName),...c.securityAdvisories.collectors.map(t=>t.factDetails.factName)],s=N.filter((t,a)=>N.indexOf(t)!==a);s.length&&(c.codeScanningAlerts.collectors.forEach((t,a)=>{s.includes(t.factDetails.factName)&&l.addIssue({code:e.ZodIssueCode.custom,message:o,path:["codeScanningAlerts","collectors",a,"factDetails","factName"]})}),c.dependabotAlerts.collectors.forEach((t,a)=>{s.includes(t.factDetails.factName)&&l.addIssue({code:e.ZodIssueCode.custom,message:o,path:["dependabotAlerts","collectors",a,"factDetails","factName"]})}),c.secretScanningAlerts.collectors.forEach((t,a)=>{s.includes(t.factDetails.factName)&&l.addIssue({code:e.ZodIssueCode.custom,message:o,path:["secretScanningAlerts","collectors",a,"factDetails","factName"]})}),c.securityAdvisories.collectors.forEach((t,a)=>{s.includes(t.factDetails.factName)&&l.addIssue({code:e.ZodIssueCode.custom,message:o,path:["securityAdvisories","collectors",a,"factDetails","factName"]})}))});export{o as FACT_NAME_IS_NOT_UNIQUE_MSG,r as MAX_100_CHARACTERS_MSG,y as githubCollectorFormSchema};
|
|
2
2
|
//# sourceMappingURL=validation.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsxs as l,Fragment as h,jsx as o}from"react/jsx-runtime";import{makeStyles as j,Paper as v,Divider as c}from"@material-ui/core";import{useForm as P,FormProvider as S}from"react-hook-form";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../../../api.esm.js";import"../../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"@spotify/backstage-plugin-soundcheck-common";import"react";import"../../../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as y}from"../../../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as B}from"../../../../hooks/useNavigateBack.esm.js";import"react-router-dom";import"react-use/lib/useLocalStorage";import"react-use/lib/useAsync";import"../../../../graphql/generated/index.esm.js";import"react-use/lib/useAsyncRetry";import{useUpdateCollectorConfig as F}from"../../../../hooks/collectors/useUpdateCollectorConfig.esm.js";import{integrationsPageRouteRef as w}from"../../../../routes.esm.js";import{FooterButtons as x}from"../../../FooterButtons/FooterButtons.esm.js";import"../../../SoundcheckHeader/SoundcheckHeader.esm.js";import"../../../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as D}from"../../../SoundcheckHeader/useHeader.esm.js";import{FactCollectionConfig as e}from"../Common/FactCollectionConfig.esm.js";import"../Common/CollectorConfigAlert.esm.js";import{collectorHeaderContent as G,confirmationModalContent as L}from"../Common/utils.esm.js";import{mapConfigToGitlabCollectorConfig as N,defaultGitlabConfig as T,mapGitlabCollectorConfigToConfig as M}from"./utils.esm.js";const k=j(t=>({spacer:{height:t.spacing(8),width:"100%"},section:{marginBottom:t.spacing(2)},form:{marginBottom:t.spacing(2)}})),H=({disabled:t,selectedCollector:i})=>{const a=P({defaultValues:i?N(i.config):T(),mode:"onChange"}),{formState:{errors:r},handleSubmit:n}=a,m=k(),p=!!r.branchProtections||!!r.projectDetails||!!r.projectLanguages,{mutateAsync:d}=F(),[f,g]=B(w),{showModal:u}=y(),s=async C=>{if(!await u(L(i)))return;const b=M(C);await d({collectorId:i.id,config:b})&&g()};return D(G(i)),l(h,{children:[o(v,{className:m.form,children:o(S,{...a,children:l("form",{onSubmit:n(s),children:[o(e,{name:"branchProtections",label:"Branch Protections",description:"Collects branch protection information from an entity's project.",disabled:t}),o(c,{}),o(e,{name:"projectDetails",label:"Project Details",description:"Collects details about an entity's project.",disabled:t}),o(c,{}),o(e,{name:"projectLanguages",label:"Project Languages",description:"Collects details about the languages used in an entity's project.",disabled:t})]})})}),o("div",{className:m.section,children:o(x,{onCancel:f,saveButtonText:"Save",isLoading:!1,onSave:n(s),disableSave:p})})]})};export{H as GitlabConfigurator};
|
|
1
|
+
import{jsxs as l,Fragment as h,jsx as o}from"react/jsx-runtime";import{makeStyles as j,Paper as v,Divider as c}from"@material-ui/core";import{useForm as P,FormProvider as S}from"react-hook-form";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../../../api.esm.js";import"../../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"@spotify/backstage-plugin-soundcheck-common";import"react";import"../../../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as y}from"../../../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as B}from"../../../../hooks/useNavigateBack.esm.js";import"react-router-dom";import"react-use/lib/useLocalStorage";import"react-use/lib/useAsync";import"../../../ChecksTable/utils.esm.js";import"../../../../graphql/generated/index.esm.js";import"react-use/lib/useAsyncRetry";import{useUpdateCollectorConfig as F}from"../../../../hooks/collectors/useUpdateCollectorConfig.esm.js";import{integrationsPageRouteRef as w}from"../../../../routes.esm.js";import{FooterButtons as x}from"../../../FooterButtons/FooterButtons.esm.js";import"../../../SoundcheckHeader/SoundcheckHeader.esm.js";import"../../../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as D}from"../../../SoundcheckHeader/useHeader.esm.js";import{FactCollectionConfig as e}from"../Common/FactCollectionConfig.esm.js";import"../Common/CollectorConfigAlert.esm.js";import{collectorHeaderContent as G,confirmationModalContent as L}from"../Common/utils.esm.js";import{mapConfigToGitlabCollectorConfig as N,defaultGitlabConfig as T,mapGitlabCollectorConfigToConfig as M}from"./utils.esm.js";const k=j(t=>({spacer:{height:t.spacing(8),width:"100%"},section:{marginBottom:t.spacing(2)},form:{marginBottom:t.spacing(2)}})),H=({disabled:t,selectedCollector:i})=>{const a=P({defaultValues:i?N(i.config):T(),mode:"onChange"}),{formState:{errors:r},handleSubmit:n}=a,m=k(),p=!!r.branchProtections||!!r.projectDetails||!!r.projectLanguages,{mutateAsync:d}=F(),[f,g]=B(w),{showModal:u}=y(),s=async C=>{if(!await u(L(i)))return;const b=M(C);await d({collectorId:i.id,config:b})&&g()};return D(G(i)),l(h,{children:[o(v,{className:m.form,children:o(S,{...a,children:l("form",{onSubmit:n(s),children:[o(e,{name:"branchProtections",label:"Branch Protections",description:"Collects branch protection information from an entity's project.",disabled:t}),o(c,{}),o(e,{name:"projectDetails",label:"Project Details",description:"Collects details about an entity's project.",disabled:t}),o(c,{}),o(e,{name:"projectLanguages",label:"Project Languages",description:"Collects details about the languages used in an entity's project.",disabled:t})]})})}),o("div",{className:m.section,children:o(x,{onCancel:f,saveButtonText:"Save",isLoading:!1,onSave:n(s),disableSave:p})})]})};export{H as GitlabConfigurator};
|
|
2
2
|
//# sourceMappingURL=GitlabConfigurator.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsxs as b,Fragment as v,jsx as o}from"react/jsx-runtime";import{
|
|
1
|
+
import{jsxs as b,Fragment as v,jsx as o}from"react/jsx-runtime";import{standardSchemaResolver as S}from"@hookform/resolvers/standard-schema";import{makeStyles as F,Paper as H}from"@material-ui/core";import{useCallback as q}from"react";import{useForm as N,FormProvider as R}from"react-hook-form";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../../../api.esm.js";import"../../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"@spotify/backstage-plugin-soundcheck-common";import"../../../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as T}from"../../../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as w}from"../../../../hooks/useNavigateBack.esm.js";import"react-router-dom";import"react-use/lib/useLocalStorage";import"react-use/lib/useAsync";import"../../../ChecksTable/utils.esm.js";import"../../../../graphql/generated/index.esm.js";import"react-use/lib/useAsyncRetry";import{useUpdateCollectorConfig as x}from"../../../../hooks/collectors/useUpdateCollectorConfig.esm.js";import{integrationsPageRouteRef as y}from"../../../../routes.esm.js";import{FooterButtons as B}from"../../../FooterButtons/FooterButtons.esm.js";import"../../../SoundcheckHeader/SoundcheckHeader.esm.js";import"../../../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as P}from"../../../SoundcheckHeader/useHeader.esm.js";import{FactCollectionConfig as k}from"../Common/FactCollectionConfig.esm.js";import{CollectorConfigAlert as I}from"../Common/CollectorConfigAlert.esm.js";import{collectorHeaderContent as M,confirmationModalContent as U}from"../Common/utils.esm.js";import{RequestFactDetailsComponent as j}from"./RequestFactDetailsComponent.esm.js";import{mapConfigToHttpCollectorConfig as A,defaultHttpConfig as D,defaultRequestCollectorConfig as V,mapHttpCollectorConfigToConfig as L}from"./utils.esm.js";import{httpCollectorFormSchema as O}from"./validation.esm.js";const z=F(e=>({spacer:{height:e.spacing(8),width:"100%"},section:{marginBottom:e.spacing(2)}})),E=({disabled:e,selectedCollector:t})=>{const s=q(async(r,...i)=>{const g={enabled:!1,collectors:[]},h={request:r.request.enabled?r.request:g};return S(O)(h,...i)},[]),m=N({defaultValues:t?A(t.config):D(),mode:"onChange",resolver:s}),{formState:{isValid:c},handleSubmit:a}=m,n=z(),p=!c,{mutateAsync:f}=x(),[d,u]=w(y),{showModal:C}=T(),l=async r=>{if(!await C(U(t)))return;const i=L(r);await f({collectorId:t.id,config:i})&&u()};return P(M(t)),b(v,{children:[o(I,{collectorName:"Http",collectorId:t.id,hasNonUIOptions:!0}),o(H,{className:n.section,children:o(R,{...m,children:o("form",{onSubmit:a(l),children:o(k,{name:"request",label:"Request",description:"Collects data from HTTP endpoint.",disabled:e,FactDetailsComponent:j,multipleCollectors:{enable:!0,defaultConfig:V()}})})})}),o("div",{className:n.section,children:o(B,{onCancel:d,saveButtonText:"Save",isLoading:!1,onSave:a(l),disableSave:p})})]})};export{E as HttpConfigurator};
|
|
2
2
|
//# sourceMappingURL=HttpConfigurator.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{validFactNameRegex as m,invalidFactNameErrorMessage as p}from"@spotify/backstage-plugin-soundcheck-common";import{z as t}from"zod";import{FIELD_IS_REQUIRED_MSG as i}from"../../../../utils/validation.esm.js";import{BaseCollectorSchema as u}from"../Common/CollectorOption.esm.js";const n="Fact name is not unique",c="Max 100 characters",f=t.strictObject({method:t.enum(["POST","GET"]).optional(),url:t.string().min(1,i),headers:t.array(t.strictObject({key:t.string().optional(),value:t.string().optional()})),body:t.string().optional(),targetPluginId:t.string().optional()}),b=t.strictObject({transform:t.string().optional(),schema:t.string().optional(),emptyOnStatuses:t.array(t.number()).optional()}),d=t.strictObject({maxRetries:t.number().min(0).optional().nullable(),retryDelay:t.number().min(0).optional().nullable(),retryOnStatuses:t.array(t.number()).optional()}),g=u.extend({factDetails:t.strictObject({factName:t.string().min(1,i).max(100,c).regex(m,p),request:f,response:b,retries:d})}).strict(),O=t.strictObject({enabled:t.boolean(),collectors:t.array(g).superRefine((r,l)=>{const o=r.map(e=>e.factDetails.factName),s=o.filter((e,a)=>o.indexOf(e)!==a);s.length&&r.forEach((e,a)=>{s.includes(e.factDetails.factName)&&l.addIssue({code:t.ZodIssueCode.custom,message:n,path:[a,"factDetails","factName"]})})})}),S=t.strictObject({request:O});export{n as FACT_NAME_IS_NOT_UNIQUE_MSG,c as MAX_100_CHARACTERS_MSG,S as httpCollectorFormSchema};
|
|
1
|
+
import{validFactNameRegex as m,invalidFactNameErrorMessage as p}from"@spotify/backstage-plugin-soundcheck-common";import{z as t}from"zod/v3";import{FIELD_IS_REQUIRED_MSG as i}from"../../../../utils/validation.esm.js";import{BaseCollectorSchema as u}from"../Common/CollectorOption.esm.js";const n="Fact name is not unique",c="Max 100 characters",f=t.strictObject({method:t.enum(["POST","GET"]).optional(),url:t.string().min(1,i),headers:t.array(t.strictObject({key:t.string().optional(),value:t.string().optional()})),body:t.string().optional(),targetPluginId:t.string().optional()}),b=t.strictObject({transform:t.string().optional(),schema:t.string().optional(),emptyOnStatuses:t.array(t.number()).optional()}),d=t.strictObject({maxRetries:t.number().min(0).optional().nullable(),retryDelay:t.number().min(0).optional().nullable(),retryOnStatuses:t.array(t.number()).optional()}),g=u.extend({factDetails:t.strictObject({factName:t.string().min(1,i).max(100,c).regex(m,p),request:f,response:b,retries:d})}).strict(),O=t.strictObject({enabled:t.boolean(),collectors:t.array(g).superRefine((r,l)=>{const o=r.map(e=>e.factDetails.factName),s=o.filter((e,a)=>o.indexOf(e)!==a);s.length&&r.forEach((e,a)=>{s.includes(e.factDetails.factName)&&l.addIssue({code:t.ZodIssueCode.custom,message:n,path:[a,"factDetails","factName"]})})})}),S=t.strictObject({request:O});export{n as FACT_NAME_IS_NOT_UNIQUE_MSG,c as MAX_100_CHARACTERS_MSG,S as httpCollectorFormSchema};
|
|
2
2
|
//# sourceMappingURL=validation.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsxs as i,Fragment as N,jsx as o}from"react/jsx-runtime";import{DismissableBanner as w}from"@backstage/core-components";import{
|
|
1
|
+
import{jsxs as i,Fragment as N,jsx as o}from"react/jsx-runtime";import{DismissableBanner as w}from"@backstage/core-components";import{standardSchemaResolver as y}from"@hookform/resolvers/standard-schema";import{makeStyles as D,Typography as F,Link as l,Paper as j,Divider as L}from"@material-ui/core";import{useForm as A,FormProvider as P}from"react-hook-form";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../../../api.esm.js";import"../../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"@spotify/backstage-plugin-soundcheck-common";import"react";import"../../../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as T}from"../../../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as x}from"../../../../hooks/useNavigateBack.esm.js";import"react-router-dom";import"react-use/lib/useLocalStorage";import"react-use/lib/useAsync";import"../../../ChecksTable/utils.esm.js";import"../../../../graphql/generated/index.esm.js";import"react-use/lib/useAsyncRetry";import{useUpdateCollectorConfig as B}from"../../../../hooks/collectors/useUpdateCollectorConfig.esm.js";import{integrationsPageRouteRef as M}from"../../../../routes.esm.js";import{FooterButtons as R}from"../../../FooterButtons/FooterButtons.esm.js";import"../../../SoundcheckHeader/SoundcheckHeader.esm.js";import"../../../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as U}from"../../../SoundcheckHeader/useHeader.esm.js";import{FactCollectionConfig as m}from"../Common/FactCollectionConfig.esm.js";import{CollectorConfigAlert as q}from"../Common/CollectorConfigAlert.esm.js";import{collectorHeaderContent as H,confirmationModalContent as Q}from"../Common/utils.esm.js";import{IssuesFactDetailsComponent as p}from"./IssuesFactDetailsComponent.esm.js";import{mapConfigToJiraCollectorConfig as V,defaultJiraConfig as _,issuesCollectorConfig as d,mapJiraCollectorConfigToConfig as O}from"./utils.esm.js";import{jiraCollectorFormSchema as z}from"./validation.esm.js";const E=D(r=>({spacer:{height:r.spacing(8),width:"100%"},section:{marginBottom:r.spacing(2)},apiLink:{color:r.palette.text.primary}})),G=({disabled:r,selectedCollector:e})=>{const s=A({defaultValues:e?V(e.config):_(),mode:"onChange",resolver:y(z)}),{formState:{errors:u},handleSubmit:n}=s,a=E(),f=!!u.issuesSearch,{mutateAsync:h}=B(),[g,C]=x(M),{showModal:S}=T(),c=async k=>{if(!await S(Q(e)))return;const I=O(k);await h({collectorId:e.id,config:I})&&C()};U(H(e));const b=!e.config?.apiToken||!e.config?.username,v=!e.config?.personalAccessToken,J=!e.config?.baseUrl||b&&v,t={issuesSearchDeprecated:{name:"Search for issues using JQL",href:"https://developer.atlassian.com/cloud/jira/platform/rest/v2/api-group-issue-search/#api-rest-api-2-search-get"},issuesSearchNew:{name:"Search for issues using JQL enhanced search",href:"https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-issue-search/#api-rest-api-3-search-jql-post"}};return i(N,{children:[o(q,{collectorName:"Jira",collectorId:e.id,invalidConfig:J,hasNonUIOptions:!0}),o(w,{message:i(F,{variant:"body2",children:["Issues Search fact collector now uses the updated",o(l,{href:t.issuesSearchNew.href,target:"_blank",children:i("span",{className:a.apiLink,children:[" ",t.issuesSearchNew.name," "]})}),"API, as the previous",o(l,{href:t.issuesSearchDeprecated.href,target:"_blank",children:i("span",{className:a.apiLink,children:[" ",t.issuesSearchDeprecated.name," "]})}),"API was deprecated and removed for Jira Cloud instances. Jira Cloud users may be required to update their dependent checks due to this minor API schema change."]}),variant:"warning",id:"jiraDeprecatedIssuesSearch"}),o(j,{className:a.section,children:o(P,{...s,children:i("form",{onSubmit:n(c),children:[o(m,{name:"issuesSearch",label:"Issues Search",description:"Collects details about Jira issues.",disabled:r,FactDetailsComponent:p,multipleCollectors:{enable:!0,defaultConfig:d(e.config)}}),o(L,{}),o(m,{name:"issuesCount",label:"Issues Count",description:"Collects details about a total number of Jira issues.",disabled:r,FactDetailsComponent:p,multipleCollectors:{enable:!0,defaultConfig:d(e.config)}})]})})}),o("div",{className:a.section,children:o(R,{onCancel:g,saveButtonText:"Save",isLoading:!1,onSave:n(c),disableSave:f})})]})};export{G as JiraConfigurator};
|
|
2
2
|
//# sourceMappingURL=JiraConfigurator.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{validFactNameRegex as f,invalidFactNameErrorMessage as n}from"@spotify/backstage-plugin-soundcheck-common";import{z as s}from"zod";import{FIELD_IS_REQUIRED_MSG as u}from"../../../../utils/validation.esm.js";import{BaseCollectorSchema as d}from"../Common/CollectorOption.esm.js";const o="Fact name is not unique",l="Max 100 characters",h=d.extend({factDetails:s.strictObject({factName:s.string().min(1,u).max(100,l).regex(f,n),jql:s.string().optional()})}).strict(),m=s.strictObject({enabled:s.boolean(),collectors:s.array(h)}),N=s.strictObject({issuesSearch:m,issuesCount:m}).superRefine((a,r)=>{const i=[...a.issuesSearch.collectors.map(e=>e.factDetails.factName),...a.issuesCount.collectors.map(e=>e.factDetails.factName)],c=i.filter((e,t)=>i.indexOf(e)!==t);c.length&&(a.issuesSearch.collectors.forEach((e,t)=>{c.includes(e.factDetails.factName)&&r.addIssue({code:s.ZodIssueCode.custom,message:o,path:["issuesSearch","collectors",t,"factDetails","factName"]})}),a.issuesCount.collectors.forEach((e,t)=>{c.includes(e.factDetails.factName)&&r.addIssue({code:s.ZodIssueCode.custom,message:o,path:["issuesCount","collectors",t,"factDetails","factName"]})}))});export{o as FACT_NAME_IS_NOT_UNIQUE_MSG,l as MAX_100_CHARACTERS_MSG,N as jiraCollectorFormSchema};
|
|
1
|
+
import{validFactNameRegex as f,invalidFactNameErrorMessage as n}from"@spotify/backstage-plugin-soundcheck-common";import{z as s}from"zod/v3";import{FIELD_IS_REQUIRED_MSG as u}from"../../../../utils/validation.esm.js";import{BaseCollectorSchema as d}from"../Common/CollectorOption.esm.js";const o="Fact name is not unique",l="Max 100 characters",h=d.extend({factDetails:s.strictObject({factName:s.string().min(1,u).max(100,l).regex(f,n),jql:s.string().optional()})}).strict(),m=s.strictObject({enabled:s.boolean(),collectors:s.array(h)}),N=s.strictObject({issuesSearch:m,issuesCount:m}).superRefine((a,r)=>{const i=[...a.issuesSearch.collectors.map(e=>e.factDetails.factName),...a.issuesCount.collectors.map(e=>e.factDetails.factName)],c=i.filter((e,t)=>i.indexOf(e)!==t);c.length&&(a.issuesSearch.collectors.forEach((e,t)=>{c.includes(e.factDetails.factName)&&r.addIssue({code:s.ZodIssueCode.custom,message:o,path:["issuesSearch","collectors",t,"factDetails","factName"]})}),a.issuesCount.collectors.forEach((e,t)=>{c.includes(e.factDetails.factName)&&r.addIssue({code:s.ZodIssueCode.custom,message:o,path:["issuesCount","collectors",t,"factDetails","factName"]})}))});export{o as FACT_NAME_IS_NOT_UNIQUE_MSG,l as MAX_100_CHARACTERS_MSG,N as jiraCollectorFormSchema};
|
|
2
2
|
//# sourceMappingURL=validation.esm.js.map
|
package/dist/components/CollectorPage/Configurators/Kubernetes/KubernetesConfigurator.esm.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsxs as n,Fragment as b,jsx as o}from"react/jsx-runtime";import{
|
|
1
|
+
import{jsxs as n,Fragment as b,jsx as o}from"react/jsx-runtime";import{standardSchemaResolver as h}from"@hookform/resolvers/standard-schema";import{makeStyles as S,Paper as v,Divider as F}from"@material-ui/core";import{useForm as R,FormProvider as K}from"react-hook-form";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../../../api.esm.js";import"../../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"@spotify/backstage-plugin-soundcheck-common";import"react";import"../../../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as w}from"../../../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as x}from"../../../../hooks/useNavigateBack.esm.js";import"react-router-dom";import"react-use/lib/useLocalStorage";import"react-use/lib/useAsync";import"../../../ChecksTable/utils.esm.js";import"../../../../graphql/generated/index.esm.js";import"react-use/lib/useAsyncRetry";import{useUpdateCollectorConfig as y}from"../../../../hooks/collectors/useUpdateCollectorConfig.esm.js";import{integrationsPageRouteRef as B}from"../../../../routes.esm.js";import{FooterButtons as D}from"../../../FooterButtons/FooterButtons.esm.js";import"../../../SoundcheckHeader/SoundcheckHeader.esm.js";import"../../../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as L}from"../../../SoundcheckHeader/useHeader.esm.js";import{FactCollectionConfig as c}from"../Common/FactCollectionConfig.esm.js";import"../Common/CollectorConfigAlert.esm.js";import{defaultCollectorOption as N}from"../Common/CollectorOption.esm.js";import{collectorHeaderContent as O,confirmationModalContent as T}from"../Common/utils.esm.js";import{KubernetesFactDetails as j}from"./KubernetesFactDetails.esm.js";import{mapConfigToKubernetesCollectorConfig as k,defaultKubernetesConfig as I,K8S_COLLECTOR_FIELDS as M,mapKubernetesCollectorConfigToConfig as P}from"./utils.esm.js";import{customResourceFormSchema as E}from"./validation.esm.js";const H=S(t=>({spacer:{height:t.spacing(8),width:"100%"},section:{marginBottom:t.spacing(2)}})),V=({disabled:t,selectedCollector:e})=>{const r=R({defaultValues:e?k(e.config):I(),mode:"onChange",resolver:h(E)}),a=H(),{mutateAsync:p}=y(),[d,f]=x(B),{isValid:u}=r.formState,{showModal:C}=w(),s=async m=>{if(!await C(T(e)))return;const i=P(m);await p({collectorId:e.id,config:i})&&f()};return L(O(e)),n(b,{children:[o(v,{className:a.section,children:o(K,{...r,children:n("form",{onSubmit:r.handleSubmit(s),children:[Object.entries(M).map(([m,i],l,g)=>n("div",{children:[o(c,{name:m,label:i.label,description:i.description,disabled:t}),l<g.length-1&&o(F,{})]},l)),o(c,{name:"customResources",label:"Custom Resources",description:"Collect facts from a kubernetes custom resource associated with an entity.",disabled:t,FactDetailsComponent:j,multipleCollectors:{enable:!0,defaultConfig:N(e.config)}})]})})}),o("div",{className:a.section,children:o(D,{onCancel:d,saveButtonText:"Save",isLoading:!1,onSave:r.handleSubmit(s),disableSave:!u})})]})};export{V as KubernetesConfigurator};
|
|
2
2
|
//# sourceMappingURL=KubernetesConfigurator.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{validFactNameRegex as l,invalidFactNameErrorMessage as f}from"@spotify/backstage-plugin-soundcheck-common";import{z as e}from"zod";import{FIELD_IS_REQUIRED_MSG as p}from"../../../../utils/validation.esm.js";import{BaseCollectorSchema as u,CollectorOptionSchema as t}from"../Common/CollectorOption.esm.js";const i="Fact name is not unique",m="Max 100 characters",d=u.extend({enabled:e.boolean(),factDetails:e.strictObject({factName:e.string().min(1,p).max(100,m).regex(l,f),customResource:e.strictObject({group:e.string(),apiVersion:e.string(),plural:e.string()})})}).strict(),g=e.strictObject({enabled:e.boolean(),collectors:e.array(d).superRefine((c,n)=>{const o=c.map(s=>s.factDetails.factName),r=o.filter((s,a)=>o.indexOf(s)!==a);r.length&&c.forEach((s,a)=>{r.includes(s.factDetails.factName)&&n.addIssue({code:e.ZodIssueCode.custom,message:i,path:[a,"factDetails","factName"]})})})}),_=e.strictObject({deployments:t,hpas:t,ingresses:t,podDisruptionBudgets:t,pods:t,services:t,statefulSets:t,customResources:g});export{i as FACT_NAME_IS_NOT_UNIQUE_MSG,m as MAX_100_CHARACTERS_MSG,_ as customResourceFormSchema};
|
|
1
|
+
import{validFactNameRegex as l,invalidFactNameErrorMessage as f}from"@spotify/backstage-plugin-soundcheck-common";import{z as e}from"zod/v3";import{FIELD_IS_REQUIRED_MSG as p}from"../../../../utils/validation.esm.js";import{BaseCollectorSchema as u,CollectorOptionSchema as t}from"../Common/CollectorOption.esm.js";const i="Fact name is not unique",m="Max 100 characters",d=u.extend({enabled:e.boolean(),factDetails:e.strictObject({factName:e.string().min(1,p).max(100,m).regex(l,f),customResource:e.strictObject({group:e.string(),apiVersion:e.string(),plural:e.string()})})}).strict(),g=e.strictObject({enabled:e.boolean(),collectors:e.array(d).superRefine((c,n)=>{const o=c.map(s=>s.factDetails.factName),r=o.filter((s,a)=>o.indexOf(s)!==a);r.length&&c.forEach((s,a)=>{r.includes(s.factDetails.factName)&&n.addIssue({code:e.ZodIssueCode.custom,message:i,path:[a,"factDetails","factName"]})})})}),_=e.strictObject({deployments:t,hpas:t,ingresses:t,podDisruptionBudgets:t,pods:t,services:t,statefulSets:t,customResources:g});export{i as FACT_NAME_IS_NOT_UNIQUE_MSG,m as MAX_100_CHARACTERS_MSG,_ as customResourceFormSchema};
|
|
2
2
|
//# sourceMappingURL=validation.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsxs as m,Fragment as w,jsx as o}from"react/jsx-runtime";import{makeStyles as b,Paper as S,Divider as s}from"@material-ui/core";import{useForm as y,FormProvider as R}from"react-hook-form";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../../../api.esm.js";import"../../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"@spotify/backstage-plugin-soundcheck-common";import"react";import"../../../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as v}from"../../../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as B}from"../../../../hooks/useNavigateBack.esm.js";import"react-router-dom";import"react-use/lib/useLocalStorage";import"react-use/lib/useAsync";import"../../../../graphql/generated/index.esm.js";import"react-use/lib/useAsyncRetry";import{useUpdateCollectorConfig as F}from"../../../../hooks/collectors/useUpdateCollectorConfig.esm.js";import{integrationsPageRouteRef as x}from"../../../../routes.esm.js";import{FooterButtons as P}from"../../../FooterButtons/FooterButtons.esm.js";import"../../../SoundcheckHeader/SoundcheckHeader.esm.js";import"../../../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as E}from"../../../SoundcheckHeader/useHeader.esm.js";import{FactCollectionConfig as r}from"../Common/FactCollectionConfig.esm.js";import{CollectorConfigAlert as I}from"../Common/CollectorConfigAlert.esm.js";import{collectorHeaderContent as M,confirmationModalContent as T}from"../Common/utils.esm.js";import{mapConfigToNewRelicCollectorConfig as j,defaultNewRelicConfig as k,mapNewRelicCollectorConfigToConfig as A}from"./utils.esm.js";const H=b(i=>({spacer:{height:i.spacing(8),width:"100%"},section:{marginBottom:i.spacing(2)},form:{marginBottom:i.spacing(2)}})),U=({disabled:i,selectedCollector:t})=>{const a=y({defaultValues:t?j(t.config):k(),mode:"onChange"}),{formState:{errors:e},handleSubmit:c}=a,n=H(),p=!!e.entity||!!e.entitySearch||!!e.policiesSearch,{mutateAsync:d}=F(),[f,g]=B(x),{showModal:C}=v(),l=async h=>{if(!await C(T(t)))return;const N=A(h);await d({collectorId:t.id,config:N})&&g()};E(M(t));const u=!t.config?.apiKey;return m(w,{children:[o(I,{collectorName:"NewRelic",collectorId:t.id,invalidConfig:u,hasNonUIOptions:!0}),o(S,{className:n.form,children:o(R,{...a,children:m("form",{onSubmit:c(l),children:[o(r,{name:"entity",label:"Entity",description:"Collects details about New Relic entity with a specific id.",disabled:i}),o(s,{}),o(r,{name:"entitySearch",label:"Entity Search",description:"Collects details about New Relic entities with a specific tag.",disabled:i}),o(s,{}),o(r,{name:"policiesSearch",label:"Policies Search",description:"Collects details about New Relic policies for a specific account.",disabled:i})]})})}),o("div",{className:n.section,children:o(P,{onCancel:f,saveButtonText:"Save",isLoading:!1,onSave:c(l),disableSave:p})})]})};export{U as NewRelicConfigurator};
|
|
1
|
+
import{jsxs as m,Fragment as w,jsx as o}from"react/jsx-runtime";import{makeStyles as b,Paper as S,Divider as s}from"@material-ui/core";import{useForm as y,FormProvider as R}from"react-hook-form";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../../../api.esm.js";import"../../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"@spotify/backstage-plugin-soundcheck-common";import"react";import"../../../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as v}from"../../../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as B}from"../../../../hooks/useNavigateBack.esm.js";import"react-router-dom";import"react-use/lib/useLocalStorage";import"react-use/lib/useAsync";import"../../../ChecksTable/utils.esm.js";import"../../../../graphql/generated/index.esm.js";import"react-use/lib/useAsyncRetry";import{useUpdateCollectorConfig as F}from"../../../../hooks/collectors/useUpdateCollectorConfig.esm.js";import{integrationsPageRouteRef as x}from"../../../../routes.esm.js";import{FooterButtons as P}from"../../../FooterButtons/FooterButtons.esm.js";import"../../../SoundcheckHeader/SoundcheckHeader.esm.js";import"../../../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as E}from"../../../SoundcheckHeader/useHeader.esm.js";import{FactCollectionConfig as r}from"../Common/FactCollectionConfig.esm.js";import{CollectorConfigAlert as I}from"../Common/CollectorConfigAlert.esm.js";import{collectorHeaderContent as M,confirmationModalContent as T}from"../Common/utils.esm.js";import{mapConfigToNewRelicCollectorConfig as j,defaultNewRelicConfig as k,mapNewRelicCollectorConfigToConfig as A}from"./utils.esm.js";const H=b(i=>({spacer:{height:i.spacing(8),width:"100%"},section:{marginBottom:i.spacing(2)},form:{marginBottom:i.spacing(2)}})),U=({disabled:i,selectedCollector:t})=>{const a=y({defaultValues:t?j(t.config):k(),mode:"onChange"}),{formState:{errors:e},handleSubmit:c}=a,n=H(),p=!!e.entity||!!e.entitySearch||!!e.policiesSearch,{mutateAsync:d}=F(),[f,g]=B(x),{showModal:C}=v(),l=async h=>{if(!await C(T(t)))return;const N=A(h);await d({collectorId:t.id,config:N})&&g()};E(M(t));const u=!t.config?.apiKey;return m(w,{children:[o(I,{collectorName:"NewRelic",collectorId:t.id,invalidConfig:u,hasNonUIOptions:!0}),o(S,{className:n.form,children:o(R,{...a,children:m("form",{onSubmit:c(l),children:[o(r,{name:"entity",label:"Entity",description:"Collects details about New Relic entity with a specific id.",disabled:i}),o(s,{}),o(r,{name:"entitySearch",label:"Entity Search",description:"Collects details about New Relic entities with a specific tag.",disabled:i}),o(s,{}),o(r,{name:"policiesSearch",label:"Policies Search",description:"Collects details about New Relic policies for a specific account.",disabled:i})]})})}),o("div",{className:n.section,children:o(P,{onCancel:f,saveButtonText:"Save",isLoading:!1,onSave:c(l),disableSave:p})})]})};export{U as NewRelicConfigurator};
|
|
2
2
|
//# sourceMappingURL=NewRelicConfigurator.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsxs as m,Fragment as
|
|
1
|
+
import{jsxs as m,Fragment as y,jsx as o}from"react/jsx-runtime";import{standardSchemaResolver as D}from"@hookform/resolvers/standard-schema";import{makeStyles as P,Paper as S,Divider as c}from"@material-ui/core";import{useForm as b,FormProvider as T}from"react-hook-form";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../../../api.esm.js";import"../../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"@spotify/backstage-plugin-soundcheck-common";import"react";import"../../../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as L}from"../../../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as E}from"../../../../hooks/useNavigateBack.esm.js";import"react-router-dom";import"react-use/lib/useLocalStorage";import"react-use/lib/useAsync";import"../../../ChecksTable/utils.esm.js";import"../../../../graphql/generated/index.esm.js";import"react-use/lib/useAsyncRetry";import{useUpdateCollectorConfig as N}from"../../../../hooks/collectors/useUpdateCollectorConfig.esm.js";import{integrationsPageRouteRef as w}from"../../../../routes.esm.js";import{FooterButtons as F}from"../../../FooterButtons/FooterButtons.esm.js";import"../../../SoundcheckHeader/SoundcheckHeader.esm.js";import"../../../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as I}from"../../../SoundcheckHeader/useHeader.esm.js";import{FactCollectionConfig as r}from"../Common/FactCollectionConfig.esm.js";import{CollectorConfigAlert as R}from"../Common/CollectorConfigAlert.esm.js";import{collectorHeaderContent as O,confirmationModalContent as k}from"../Common/utils.esm.js";import{IncidentsFactDetailsComponent as _}from"./IncidentsFactDetailsComponent.esm.js";import{mapConfigToPagerDutyCollectorConfig as x,defaultPagerDutyConfig as A,SERVICE_COLLECTOR_TYPE as B,STANDARDS_COLLECTOR_TYPE as M,INCIDENTS_COLLECTOR_TYPE as Y,incidentsCollectorConfig as j,mapPagerDutyCollectorConfigToConfig as H}from"./utils.esm.js";import{pagerDutyCollectorFormSchema as U}from"./validation.esm.js";const V=P(t=>({spacer:{height:t.spacing(8),width:"100%"},section:{marginBottom:t.spacing(2)}})),Q=({disabled:t,selectedCollector:e})=>{const a=b({defaultValues:e?x(e.config):A(),mode:"onChange",resolver:D(U)}),{formState:{errors:i},handleSubmit:n}=a,l=V(),d=!!i.service||!!i.standards||!!i.incidents,{mutateAsync:p}=N(),[f,C]=E(w),{showModal:g}=L(),s=async v=>{if(!await g(k(e)))return;const h=H(v);await p({collectorId:e.id,config:h})&&C()};I(O(e));const u=!e.config?.token||!e.config?.server;return m(y,{children:[o(R,{collectorName:"PagerDuty",collectorId:e.id,invalidConfig:u,hasNonUIOptions:!0}),o(S,{className:l.section,children:o(T,{...a,children:m("form",{onSubmit:n(s),children:[o(r,{name:B.toLowerCase(),label:"Service",description:"Collects details about PagerDuty service linked to an entity.",disabled:t}),o(c,{}),o(r,{name:M.toLowerCase(),label:"Standards",description:"Collects details about standards applied to a PagerDuty service linked to an entity.",disabled:t}),o(c,{}),o(r,{name:Y.toLowerCase(),label:"Incidents",description:"Collects details about incidents associated with a PagerDuty service linked to an entity.",disabled:t,FactDetailsComponent:_,multipleCollectors:{enable:!0,defaultConfig:j(e.config)}})]})})}),o("div",{className:l.section,children:o(F,{onCancel:f,saveButtonText:"Save",isLoading:!1,onSave:n(s),disableSave:d})})]})};export{Q as PagerDutyConfigurator};
|
|
2
2
|
//# sourceMappingURL=PagerDutyConfigurator.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{validFactNameRegex as d,invalidFactNameErrorMessage as f}from"@spotify/backstage-plugin-soundcheck-common";import{z as e}from"zod";import{FIELD_IS_REQUIRED_MSG as g}from"../../../../utils/validation.esm.js";import{BaseCollectorSchema as S,CollectorOptionSchema as r}from"../Common/CollectorOption.esm.js";const i="Fact name is not unique",l="Max 100 characters",n="At least one status must be selected",_=S.extend({factDetails:e.strictObject({factName:e.string().min(1,g).max(100,l).regex(d,f),statuses:e.strictObject({triggered:e.boolean(),acknowledged:e.boolean(),resolved:e.boolean()}).refine(t=>t.triggered||t.acknowledged||t.resolved,{message:n})})}).strict(),E=e.strictObject({enabled:e.boolean(),collectors:e.array(_).superRefine((t,m)=>{const o=t.map(a=>a.factDetails.factName),c=o.filter((a,s)=>o.indexOf(a)!==s);c.length&&t.forEach((a,s)=>{c.includes(a.factDetails.factName)&&m.addIssue({code:e.ZodIssueCode.custom,message:i,path:[s,"factDetails","factName"]})})})}),u=e.strictObject({service:r,standards:r,incidents:E});export{i as FACT_NAME_IS_NOT_UNIQUE_MSG,l as MAX_100_CHARACTERS_MSG,n as NO_SELECTED_STATUSES,u as pagerDutyCollectorFormSchema};
|
|
1
|
+
import{validFactNameRegex as d,invalidFactNameErrorMessage as f}from"@spotify/backstage-plugin-soundcheck-common";import{z as e}from"zod/v3";import{FIELD_IS_REQUIRED_MSG as g}from"../../../../utils/validation.esm.js";import{BaseCollectorSchema as S,CollectorOptionSchema as r}from"../Common/CollectorOption.esm.js";const i="Fact name is not unique",l="Max 100 characters",n="At least one status must be selected",_=S.extend({factDetails:e.strictObject({factName:e.string().min(1,g).max(100,l).regex(d,f),statuses:e.strictObject({triggered:e.boolean(),acknowledged:e.boolean(),resolved:e.boolean()}).refine(t=>t.triggered||t.acknowledged||t.resolved,{message:n})})}).strict(),E=e.strictObject({enabled:e.boolean(),collectors:e.array(_).superRefine((t,m)=>{const o=t.map(a=>a.factDetails.factName),c=o.filter((a,s)=>o.indexOf(a)!==s);c.length&&t.forEach((a,s)=>{c.includes(a.factDetails.factName)&&m.addIssue({code:e.ZodIssueCode.custom,message:i,path:[s,"factDetails","factName"]})})})}),u=e.strictObject({service:r,standards:r,incidents:E});export{i as FACT_NAME_IS_NOT_UNIQUE_MSG,l as MAX_100_CHARACTERS_MSG,n as NO_SELECTED_STATUSES,u as pagerDutyCollectorFormSchema};
|
|
2
2
|
//# sourceMappingURL=validation.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsxs as
|
|
1
|
+
import{jsxs as a,jsx as e}from"react/jsx-runtime";import{makeStyles as H,Box as m,Grid as d,Typography as t,TextField as h,RadioGroup as R,FormControlLabel as A,Radio as I,MenuItem as w,IconButton as E}from"@material-ui/core";import k from"@material-ui/icons/Add";import j from"@material-ui/icons/Remove";import{useState as z}from"react";import{useFormContext as B,useFieldArray as O,Controller as u}from"react-hook-form";import{FactDetailsComponent as V}from"./FactDetailsComponent.esm.js";import{ELEMENT_TYPES as q,DEFAULT_REGEX_FACT_DATA as G,SCM_COLLECTOR_FIELDS as U}from"./utils.esm.js";const g="CaptureGroupsMode",T="TrueFalseMode",b="MatchAllMode",X=H(l=>({textInput:{marginTop:0,width:"690px"},labelInput:{marginTop:0,width:"255px"},typeInput:{marginTop:0,width:"150px"},helperText:{marginLeft:0},caption:{margin:l.spacing(2,0)},regexSection:{padding:l.spacing(1,0)}})),Y=({name:l,disabled:o})=>{const i=X(),{label:N,type:$,filePath:v,regex:n}=U.factDetails,{control:s,getValues:L,setValue:f}=B(),{fields:F,insert:C,remove:S}=O({control:s,name:`${l}.data`}),P=()=>L(`${l}.matchAll`)?b:F.length?g:T,[x,_]=z(P),D=c=>{const r=c.target.value;_(r),r===g?(C(0,G),f(`${l}.matchAll`,!1)):r===T?(S(),f(`${l}.matchAll`,!1)):r===b&&(S(),f(`${l}.matchAll`,!0))};return a(m,{children:[e(V,{name:l,control:s,disabled:o}),a(d,{container:!0,spacing:1,direction:"column",className:i.regexSection,children:[a(d,{item:!0,children:[a(m,{children:[e(t,{variant:"subtitle2",children:v.name}),e(t,{variant:"caption",children:v.helperText})]}),e(u,{name:`${l}.path`,control:s,render:({field:c,fieldState:{error:r}})=>e(h,{...c,type:"text",variant:"outlined",margin:"dense",placeholder:v.placeholder,className:i.textInput,disabled:o,error:!!r,helperText:r?.message??"",FormHelperTextProps:{className:i.helperText}})})]}),a(d,{item:!0,children:[a(m,{children:[e(t,{variant:"subtitle2",children:n.regex.name}),e(t,{variant:"caption",children:n.regex.helperText})]}),e(u,{name:`${l}.regex`,control:s,render:({field:c,fieldState:{error:r}})=>e(h,{...c,type:"text",variant:"outlined",margin:"dense",placeholder:n.regex.placeholder,className:i.textInput,disabled:o,error:!!r,helperText:r?.message??"",FormHelperTextProps:{className:i.helperText}})})]}),a(d,{item:!0,children:[a(m,{children:[e(t,{variant:"subtitle2",children:n.flags.name}),e(t,{variant:"caption",children:n.flags.helperText})]}),e(u,{name:`${l}.flags`,control:s,render:({field:c,fieldState:{error:r}})=>e(h,{...c,type:"text",variant:"outlined",margin:"dense",placeholder:n.flags.placeholder,className:i.textInput,disabled:o,error:!!r,helperText:r?.message??"",FormHelperTextProps:{className:i.helperText}})})]})]}),a(R,{row:!0,name:"regexMode",value:x,onChange:D,children:[e(A,{value:T,control:e(I,{}),label:e(t,{variant:"subtitle2",children:n.trueFalseMode.label})}),e(A,{value:g,control:e(I,{}),label:e(t,{variant:"subtitle2",children:n.captureGroupsMode.label})}),e(A,{value:b,control:e(I,{}),disabled:o,label:e(t,{variant:"subtitle2",children:n.matchAllMode.label})})]}),x===T&&e(t,{variant:"caption",children:n.trueFalseMode.description}),x===b&&e(t,{variant:"caption",children:n.matchAllMode.description}),x===g&&a(m,{children:[e(t,{variant:"caption",children:n.captureGroupsMode.description}),a("div",{className:i.caption,children:[e(t,{variant:"subtitle2",children:n.captureGroupsSection.name}),e(t,{variant:"caption",children:n.captureGroupsSection.description})]}),e(d,{container:!0,spacing:0,direction:"column",children:F.map((c,r)=>a(d,{item:!0,container:!0,alignItems:"center",spacing:2,children:[a(d,{item:!0,children:[e(t,{variant:"subtitle2",children:N.name}),e(u,{name:`${l}.data.${r}.name`,control:s,render:({field:M,fieldState:{error:p}})=>e(h,{...M,type:"text",variant:"outlined",margin:"dense",placeholder:N.placeholder,className:i.labelInput,disabled:o,error:!!p,helperText:p?.message??" ",FormHelperTextProps:{className:i.helperText}})})]}),a(d,{item:!0,children:[e(t,{variant:"subtitle2",children:$.name}),e(u,{name:`${l}.data.${r}.type`,control:s,render:({field:M,fieldState:{error:p}})=>e(h,{...M,select:!0,type:"text",variant:"outlined",margin:"dense",placeholder:$.placeholder,className:i.typeInput,disabled:o,error:!!p,helperText:p?.message??" ",FormHelperTextProps:{className:i.helperText},children:q.map(y=>e(w,{value:y,children:y},y))})})]}),a(d,{item:!0,children:[e(E,{onClick:()=>S(r),disabled:o||F.length===1,children:e(j,{fontSize:"small"})}),e(E,{onClick:()=>C(r+1,G),disabled:o,children:e(k,{fontSize:"small"})})]})]},c.id))})]})]})};export{Y as RegexFactDetailsComponent};
|
|
2
2
|
//# sourceMappingURL=RegexFactDetailsComponent.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsxs as
|
|
1
|
+
import{jsxs as t,Fragment as D,jsx as e}from"react/jsx-runtime";import{TooltipTrigger as j,ButtonIcon as w,Tooltip as _}from"@backstage/ui";import{standardSchemaResolver as z}from"@hookform/resolvers/standard-schema";import{makeStyles as J,Paper as Y,Box as s,Typography as u,FormControlLabel as G,Checkbox as H,Divider as b,Button as V}from"@material-ui/core";import U from"@material-ui/icons/UnfoldLess";import X from"@material-ui/icons/UnfoldMore";import{RiInformationLine as $}from"@remixicon/react";import{useCallback as q,useMemo as K,useState as c}from"react";import{useForm as Q,Controller as W,FormProvider as Z}from"react-hook-form";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../../../api.esm.js";import"../../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"@spotify/backstage-plugin-soundcheck-common";import"../../../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as ee}from"../../../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as oe}from"../../../../hooks/useNavigateBack.esm.js";import"react-router-dom";import"react-use/lib/useLocalStorage";import"react-use/lib/useAsync";import"../../../ChecksTable/utils.esm.js";import"../../../../graphql/generated/index.esm.js";import"react-use/lib/useAsyncRetry";import{useUpdateCollectorConfig as le}from"../../../../hooks/collectors/useUpdateCollectorConfig.esm.js";import{integrationsPageRouteRef as te}from"../../../../routes.esm.js";import{FooterButtons as ie}from"../../../FooterButtons/FooterButtons.esm.js";import"../../../SoundcheckHeader/SoundcheckHeader.esm.js";import"../../../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as ae}from"../../../SoundcheckHeader/useHeader.esm.js";import{FactCollectionConfig as x}from"../Common/FactCollectionConfig.esm.js";import"../Common/CollectorConfigAlert.esm.js";import{collectorHeaderContent as re,confirmationModalContent as ne}from"../Common/utils.esm.js";import{ExistsFactDetailsComponent as se}from"./ExistsFactDetailsComponent.esm.js";import{JsonFactDetailsComponent as ce}from"./JsonFactDetailsComponent.esm.js";import{RegexFactDetailsComponent as me}from"./RegexFactDetailsComponent.esm.js";import{mapConfigToScmCollectorConfig as de,defaultScmCollectorConfig as L,EXISTS_COLLECTOR_TYPE as pe,REGEX_COLLECTOR_TYPE as fe,JSON_COLLECTOR_TYPE as ge,mapScmCollectorConfigToConfig as Ce}from"./utils.esm.js";import{scmCollectorFormSchema as he}from"./validation.esm.js";const ue=J(l=>({spacer:{height:l.spacing(8),width:"100%"},section:{marginBottom:l.spacing(2)},globalConfig:{padding:l.spacing(2,6)},globalConfigHeader:{marginBottom:l.spacing(1)},globalConfigLabel:{display:"flex",flexDirection:"column"},infoButton:{"&:hover":{backgroundColor:"transparent"}},collapseAllContainer:{display:"flex",justifyContent:"flex-end",padding:l.spacing(1.5,6),borderBottom:`1px solid ${l.palette.divider}`}})),be=({disabled:l,selectedCollector:i})=>{const B=q(async(o,...n)=>{const r={enabled:!1,collectors:[]},k={cacheFullResultsForEtags:o.cacheFullResultsForEtags,exists:o.exists.enabled?o.exists:r,json:o.json.enabled?o.json:r,regex:o.regex.enabled?o.regex:r};return z(he)(k,...n)},[]),m=Q({defaultValues:i?de(i.config):L(),mode:"onChange",resolver:B}),d=K(()=>L(i.config),[i]),{formState:{isValid:N},handleSubmit:S}=m,a=ue(),O=!N,{mutateAsync:R}=le(),[A,I]=oe(te),{showModal:M}=ee(),y=async o=>{if(!await M(ne(i)))return;const n=Ce(o);await R({collectorId:i.id,config:n})&&I()};ae(re(i));const[v,p]=c(!0),[F,f]=c(!0),[E,g]=c(!0),[C,T]=c(!0),h=v&&F&&E,P=()=>{h?(p(!1),f(!1),g(!1),T(!1)):(p(!0),f(!0),g(!0),T(!0))};return t(D,{children:[t(Y,{className:a.section,children:[t(s,{className:a.globalConfig,children:[e(u,{variant:"subtitle2",color:"textSecondary",className:a.globalConfigHeader,children:"Global Settings"}),e(W,{name:"cacheFullResultsForEtags",control:m.control,render:({field:o})=>e(G,{control:e(H,{...o,checked:!!o.value,onChange:(n,r)=>o.onChange(r),color:"primary",disabled:l}),label:t(s,{className:a.globalConfigLabel,children:[t(s,{display:"flex",alignItems:"center",children:[e(u,{variant:"body1",children:e("b",{children:"Cache full results for ETags"})}),t(j,{children:[e(w,{size:"small",variant:"tertiary",className:a.infoButton,icon:e($,{size:16})}),e(_,{children:t("div",{style:{padding:4},children:[t("div",{children:[e("b",{children:"Enabled:"})," caches full SCM responses, avoiding repeated API calls for unchanged files"]}),e("br",{}),t("div",{children:[e("b",{children:"Disabled:"})," caches only ETags, still makes lightweight API calls to check for changes"]}),e("br",{}),t("div",{children:[e("b",{children:"Tradeoffs:"})," Caching files will increase Cache size but reduce API calls for GLOB paths specifically. Caching should be off unless heavy use is made of GLOB paths in SCM"]})]})})]})]}),e(u,{variant:"caption",color:"textSecondary",children:"Cache full SCM responses for ETag checks to reduce API calls at the cost of larger cache size."})]})})})]}),e(b,{}),e(s,{className:a.collapseAllContainer,children:e(V,{startIcon:h?e(X,{}):e(U,{}),onClick:P,variant:"outlined",size:"small",children:h?"Expand All":"Collapse All"})}),e(Z,{...m,children:t("form",{onSubmit:S(y),children:[e(x,{name:pe,label:"Exists",description:"Collects information on the existence of files within an entity's repository.",disabled:l,multipleCollectors:{enable:!0,defaultConfig:d.exists.collectors[0]},FactDetailsComponent:se,collapsed:v,onCollapsedChange:p,allFactsCollapsed:C}),e(b,{}),e(x,{name:fe,label:"Regex",description:"Executes regular expressions against a specified file in an entity's repository and collects its capture groups.",disabled:l,multipleCollectors:{enable:!0,defaultConfig:d.regex.collectors[0]},FactDetailsComponent:me,collapsed:F,onCollapsedChange:f,allFactsCollapsed:C}),e(b,{}),e(x,{name:ge,label:"JSON / YAML",description:"Collects data from a JSON/YAML file at specified JSON paths in an entity's repository.",disabled:l,multipleCollectors:{enable:!0,defaultConfig:d.json.collectors[0]},FactDetailsComponent:ce,collapsed:E,onCollapsedChange:g,allFactsCollapsed:C})]})})]}),e("div",{className:a.section,children:e(ie,{onCancel:A,saveButtonText:"Save",isLoading:!1,onSave:S(y),disableSave:O,noMargin:!0})})]})};export{be as ScmConfigurator};
|
|
2
2
|
//# sourceMappingURL=ScmConfigurator.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{asArray as
|
|
1
|
+
import{asArray as y}from"@spotify/backstage-plugin-soundcheck-common";import{sumBy as D}from"lodash";import{defaultBaseCollectorOption as F}from"../Common/CollectorOption.esm.js";import{mapBackendConfigToFormIntegrationConfig as d,mapFormIntegrationConfigToBackendConfig as g}from"../Common/utils.esm.js";const u={name:"",path:""},A={name:"",type:"string"},E={name:"",jsonPath:"",type:"string"},R={factName:"",data:[u]},N={factName:"",path:"",regex:"",data:[]},L={factName:"",path:"",data:[E]},T=(t={})=>{const l=F(t);return{cacheFullResultsForEtags:!!t?.cacheFullResultsForEtags,exists:{enabled:!1,collectors:[{factDetails:R,...l}]},regex:{enabled:!1,collectors:[{factDetails:N,...l}]},json:{enabled:!1,collectors:[{factDetails:L,...l}]}}},_={factDetails:{factName:{name:"Fact Name",helperText:"Fact name must be unique",placeholder:"Fact Name"},branch:{name:"Custom Branch (Optional)",helperText:"If omitted collects data from default branch",placeholder:"Example: develop"},filePath:{name:"File Path",helperText:"Path to the file whose content will be searched",placeholder:"Example: /catalog-info.yaml"},label:{name:"Label",placeholder:"Label"},type:{name:"Type",placeholder:"Type"},exists:{filesSection:{name:"Files",description:"List the files whose existence will be checked"}},regex:{regex:{name:"RegEx Pattern",helperText:"RegEx pattern to match",placeholder:"Example: ^apiVersion: backstage.io/(.+)"},flags:{name:"RegEx Flags (Optional)",helperText:"Allowed RegEx flags: g, i, m, s, u, y",placeholder:"Example: mi"},trueFalseMode:{label:"True / False Mode",description:"True / False Mode uses a RegEx to search for a match in the given file."},captureGroupsMode:{label:"Capture Groups Mode",description:"RegEx Capture Groups Mode allows the collector to associate capture groups within a RegEx to named values."},matchAllMode:{label:"Match All Mode",description:"Match All Mode finds every occurrence of the RegEx in the file and returns a count and array of all matched strings."},captureGroupsSection:{name:"Capture Groups",description:"Each element must correspond to a capture group in the given RegEx"}},json:{jsonPath:{name:"Json Path",placeholder:"Example: $.metadata.tags"},jsonElementsSection:{name:"JSON / YAML Elements",description:"List json / yaml paths from which to pull data from the given file"}}}},p="exists",h="regex",i="json",m="yaml",x=["string","number","integer","boolean","object"],b=x.map(C);function O(t){const{exists:l,regex:c,json:o,cacheFullResultsForEtags:e}=t;if(e||l.collectors.length||c.collectors.length||o.collectors.length){const n={},f=[];return n.collects=f,e&&(n.cacheFullResultsForEtags=!0),l.enabled&&l.collectors.forEach(a=>{f.push(g({factType:p,configOption:a,additionalParams:{factName:a.factDetails.factName,branch:a.factDetails.branch?.length?a.factDetails.branch:void 0,data:a.factDetails.data}}))}),c.enabled&&c.collectors.forEach(a=>{f.push(g({factType:h,configOption:a,additionalParams:{factName:a.factDetails.factName,branch:a.factDetails.branch?.length?a.factDetails.branch:void 0,path:a.factDetails.path,regex:a.factDetails.regex,flags:a.factDetails.flags?.length?a.factDetails.flags:void 0,matchAll:a.factDetails.matchAll||void 0,data:a.factDetails.data.length?a.factDetails.data:void 0}}))}),o.enabled&&o.collectors.forEach(a=>{f.push(g({factType:i,configOption:a,additionalParams:{factName:a.factDetails.factName,branch:a.factDetails.branch?.length?a.factDetails.branch:void 0,path:a.factDetails.path,data:a.factDetails.data.map(r=>b.includes(r.type)?{name:r.name,jsonPath:r.jsonPath,type:"array",items:{type:S(r.type)}}:r)}}))}),n}return{collects:[]}}const s=(t,l)=>D(t,({type:c})=>+(c===l));function P(t){const l=T(t),c=t?.collects;if(c&&c.length>0){const o=y(c);return{cacheFullResultsForEtags:!!t.cacheFullResultsForEtags,exists:s(o,p)>0?{collectors:o.filter(e=>e.type===p).map(e=>({...d({factTypeConfig:e,parentConfig:t}),factDetails:{factName:e.factName,branch:e.branch,data:e.data}})),enabled:!0}:l.exists,regex:s(o,h)>0?{collectors:o.filter(e=>e.type===h).map(e=>({...d({factTypeConfig:e,parentConfig:t}),factDetails:{factName:e.factName,branch:e.branch,path:e.path,regex:e.regex,flags:e.flags,matchAll:e.matchAll,data:e.data}})),enabled:!0}:l.regex,json:s(o,i)+s(o,m)>0?{collectors:o.filter(e=>e.type===i||e.type===m).map(e=>({...d({factTypeConfig:e,parentConfig:t}),factDetails:{factName:e.factName,branch:e.branch,path:e.path,data:e.data.map(n=>n.type==="array"?{name:n.name,jsonPath:n.jsonPath,type:C(n.items?.type)}:n)}})),enabled:s(o,i)+s(o,m)>0}:l.json}}return l}function C(t="object"){return`array[${t}]`}function S(t){const l="array[";return t.substring(t.indexOf(l)+l.length,t.lastIndexOf("]"))}export{b as ARRAY_ELEMENT_TYPES,u as DEFAULT_EXISTS_FACT_DATA,E as DEFAULT_JSON_FACT_DATA,A as DEFAULT_REGEX_FACT_DATA,x as ELEMENT_TYPES,p as EXISTS_COLLECTOR_TYPE,i as JSON_COLLECTOR_TYPE,h as REGEX_COLLECTOR_TYPE,_ as SCM_COLLECTOR_FIELDS,m as YAML_COLLECTOR_TYPE,T as defaultScmCollectorConfig,P as mapConfigToScmCollectorConfig,O as mapScmCollectorConfigToConfig};
|
|
2
2
|
//# sourceMappingURL=utils.esm.js.map
|