@spotify/backstage-plugin-soundcheck 0.13.0 → 0.14.1
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 +65 -0
- package/alpha/package.json +1 -1
- package/dist/alpha/apis.esm.js +1 -1
- package/dist/alpha/entity-content.esm.js +1 -1
- package/dist/alpha/pages.esm.js +1 -1
- package/dist/alpha/plugin.esm.js +1 -1
- package/dist/alpha/sidebar-item.esm.js +1 -1
- package/dist/alpha.d.ts +121 -1
- package/dist/api.esm.js +1 -1
- package/dist/components/Badges/BaseBadge.esm.js +1 -1
- package/dist/components/Badges/CampaignBadge.esm.js +1 -1
- package/dist/components/Badges/CertificationBadge.esm.js +1 -1
- package/dist/components/Badges/NoLevelBadge.esm.js +5 -1
- package/dist/components/Badges/PlaylistBadge.esm.js +1 -1
- package/dist/components/CampaignCreatePage/CampaignCreatePage.esm.js +2 -0
- package/dist/components/CampaignDetailsPage/CampaignChecks.esm.js +1 -1
- package/dist/components/CampaignDetailsPage/CampaignDetailRow.esm.js +1 -1
- package/dist/components/CampaignDetailsPage/CampaignDetails.esm.js +1 -1
- package/dist/components/CampaignDetailsPage/CampaignDetailsPage.esm.js +1 -1
- package/dist/components/CampaignDetailsPage/CampaignMilestones.esm.js +1 -1
- package/dist/components/CampaignDetailsPage/CampaignProgress.esm.js +1 -1
- package/dist/components/CampaignForm/CampaignForm.esm.js +1 -1
- package/dist/components/CampaignForm/Steps/CampaignDetailsStep/CampaignDescriptionField.esm.js +1 -1
- package/dist/components/CampaignForm/Steps/CampaignDetailsStep/CampaignNameField.esm.js +1 -1
- package/dist/components/CampaignForm/Steps/CampaignDetailsStep/CampaignOwnerField.esm.js +1 -1
- package/dist/components/CampaignForm/Steps/CampaignDetailsStep/CampaignScheduleField.esm.js +1 -1
- package/dist/components/CampaignForm/Steps/CampaignMilestonesStep.esm.js +1 -1
- package/dist/components/CampaignForm/utils/campaignFormUtils.esm.js +1 -1
- package/dist/components/CampaignForm/utils/validation.esm.js +1 -1
- package/dist/components/CampaignsPage/CampaignEmptyState.esm.js +1 -1
- package/dist/components/CampaignsPage/CampaignListPage/CampaignListPage.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/CertificationAccordion/CertificationAccordion.esm.js +1 -1
- package/dist/components/CertificationSidebar/CertificationSummary.esm.js +1 -1
- package/dist/components/CertificationSidebar/Check.esm.js +1 -1
- package/dist/components/CertificationsPage/CertificationsPage.esm.js +1 -1
- package/dist/components/CheckCard/CheckCard.esm.js +1 -1
- package/dist/components/CheckCreatePage/CheckCreatePage.esm.js +2 -0
- package/dist/components/CheckDetails/ResultStateBox.esm.js +1 -1
- package/dist/components/CheckDryRun/CheckDryRun.esm.js +2 -0
- package/dist/components/CheckDryRun/CheckDryRunContext.esm.js +2 -0
- package/dist/components/CheckDryRun/CheckDryRunDetails.esm.js +2 -0
- package/dist/components/CheckDryRun/CheckDryRunDialog.esm.js +2 -0
- package/dist/components/CheckDryRun/CheckDryRunDialogButton.esm.js +2 -0
- package/dist/components/CheckDryRun/checkDryRunUtils.esm.js +2 -0
- package/dist/components/CheckForm/CheckForm.esm.js +1 -1
- package/dist/components/CheckForm/FormFields/CheckDescriptionInput/CheckDescriptionInput.esm.js +1 -1
- package/dist/components/CheckForm/FormFields/CheckNameInput/CheckNameInput.esm.js +1 -1
- package/dist/components/CheckForm/FormFields/CheckPathResolverInput.esm.js +2 -0
- package/dist/components/CheckForm/FormFields/RuleInput/AddMenuButton.esm.js +1 -1
- package/dist/components/CheckForm/FormFields/RuleInput/Conditions/ConditionList.esm.js +1 -1
- package/dist/components/CheckForm/FormFields/RuleInput/Conditions/FactValueDisplay.esm.js +2 -0
- package/dist/components/CheckForm/FormFields/RuleInput/Conditions/RuleConditionInput.esm.js +1 -1
- package/dist/components/CheckForm/FormFields/RuleInput/Conditions/ValueListContext.esm.js +2 -0
- package/dist/components/CheckForm/FormFields/RuleInput/Conditions/ValueListInput.esm.js +2 -0
- package/dist/components/CheckForm/FormFields/RuleInput/Conditions/styles.esm.js +1 -1
- package/dist/components/CheckForm/FormFields/RuleInput/Conditions/useRuleOptions.esm.js +1 -1
- package/dist/components/CheckForm/FormFields/RuleInput/Expressions/ExpressionTypeToggle.esm.js +1 -1
- package/dist/components/CheckForm/FormFields/RuleInput/RuleInputBox.esm.js +1 -1
- package/dist/components/CheckForm/FormFields/RuleInput/useRuleInputHandlers.esm.js +1 -1
- package/dist/components/CheckForm/FormFields/TeamDetailsInput/TeamDetailsInput.esm.js +1 -1
- package/dist/components/CheckForm/Steps/CheckDetailsStep.esm.js +1 -1
- package/dist/components/CheckForm/Steps/CheckReviewStep.esm.js +2 -0
- package/dist/components/CheckForm/Steps/CheckRulesStep.esm.js +1 -1
- package/dist/components/CheckForm/types/ExpressionType.esm.js +1 -1
- package/dist/components/CheckForm/useCheckForm.esm.js +1 -1
- package/dist/components/CheckForm/utils/checkFormUtils.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/CheckDetailsView.esm.js +1 -1
- package/dist/components/CheckPage/CheckEditView.esm.js +1 -1
- package/dist/components/CheckPage/CheckEntitiesTable/CheckEntitiesTable.esm.js +1 -1
- package/dist/components/CheckPage/CheckInsightsPage.esm.js +1 -1
- package/dist/components/CheckPage/CheckStatusBar.esm.js +1 -1
- package/dist/components/CheckPage/CheckStatusHistoryChart.esm.js +1 -1
- package/dist/components/CheckPage/FilterBar/FilterBar.esm.js +1 -1
- package/dist/components/CheckTemplatesPage/CheckTemplatesPage.esm.js +2 -0
- package/dist/components/CheckTemplatesPage/TemplateCategory.esm.js +2 -0
- package/dist/components/ChecksPage/CheckListPage/CheckListPage.esm.js +1 -1
- package/dist/components/ChecksPage/ChecksPage.esm.js +1 -1
- package/dist/components/ChecksTab/ChecksTab.esm.js +1 -1
- package/dist/components/CollectorPage/CollectorPage.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/Common/CollectorOption.esm.js +2 -0
- package/dist/components/CollectorPage/Configurators/Common/FactCollectionConfig.esm.js +2 -0
- package/dist/components/CollectorPage/Configurators/Common/utils.esm.js +2 -0
- package/dist/components/CollectorPage/Configurators/Configurator.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/DataDog/DataDogConfigurator.esm.js +2 -0
- package/dist/components/CollectorPage/Configurators/DataDog/utils.esm.js +2 -0
- package/dist/components/CollectorPage/Configurators/Github/GithubConfigurator.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/Github/utils.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/Jira/IssuesSearchFactDetailsComponent.esm.js +2 -0
- package/dist/components/CollectorPage/Configurators/Jira/JiraConfigurator.esm.js +2 -0
- package/dist/components/CollectorPage/Configurators/Jira/utils.esm.js +2 -0
- package/dist/components/CollectorPage/Configurators/Jira/validation.esm.js +2 -0
- package/dist/components/CollectorPage/Configurators/Kubernetes/KubernetesConfigurator.esm.js +2 -0
- package/dist/components/CollectorPage/Configurators/Kubernetes/utils.esm.js +2 -0
- package/dist/components/CollectorPage/Configurators/PagerDuty/IncidentsFactDetailsComponent.esm.js +2 -0
- package/dist/components/CollectorPage/Configurators/PagerDuty/PagerDutyConfigurator.esm.js +2 -0
- package/dist/components/CollectorPage/Configurators/PagerDuty/StatusesComponent.esm.js +2 -0
- package/dist/components/CollectorPage/Configurators/PagerDuty/utils.esm.js +2 -0
- package/dist/components/CollectorPage/Configurators/PagerDuty/validation.esm.js +2 -0
- package/dist/components/CollectorPage/Configurators/SCM/ExistsFactDetailsComponent.esm.js +2 -0
- package/dist/components/CollectorPage/Configurators/SCM/FactCollectionConfig.esm.js +2 -0
- package/dist/components/CollectorPage/Configurators/SCM/FactDetailsComponent.esm.js +2 -0
- package/dist/components/CollectorPage/Configurators/SCM/JsonFactDetailsComponent.esm.js +2 -0
- package/dist/components/CollectorPage/Configurators/SCM/RegexFactDetailsComponent.esm.js +2 -0
- package/dist/components/CollectorPage/Configurators/SCM/ScmConfigurator.esm.js +2 -0
- package/dist/components/CollectorPage/Configurators/SCM/utils.esm.js +2 -0
- package/dist/components/CollectorPage/Configurators/SCM/validation.esm.js +2 -0
- package/dist/components/CollectorPage/Configurators/SonarQube/MeasuresFactDetailsInput.esm.js +2 -0
- package/dist/components/CollectorPage/Configurators/SonarQube/MetricsInput.esm.js +2 -0
- package/dist/components/CollectorPage/Configurators/SonarQube/SonarQubeConfigurator.esm.js +2 -0
- package/dist/components/CollectorPage/Configurators/SonarQube/utils.esm.js +2 -0
- package/dist/components/CollectorPage/Configurators/SonarQube/validation.esm.js +2 -0
- package/dist/components/CollectorsPage/CollectorListPage/CollectorListPage.esm.js +1 -1
- package/dist/components/CollectorsPage/CollectorListPage/CollectorLogo.esm.js +1 -1
- package/dist/components/CollectorsPage/CollectorListPage/CollectorSummaryCard.esm.js +1 -1
- package/dist/components/CollectorsPage/CollectorsPage.esm.js +1 -1
- package/dist/components/EntitySoundcheckCard/Card.esm.js +1 -1
- package/dist/components/ExpandableSection/ExpandableSection.esm.js +2 -0
- package/dist/components/FactExplorer/FactExplorer.esm.js +2 -0
- package/dist/components/FactExplorer/FactExplorerContext.esm.js +2 -0
- package/dist/components/FactExplorer/FactExplorerDialog.esm.js +2 -0
- package/dist/components/FactExplorer/useFactOptions.esm.js +2 -0
- package/dist/components/Filter/EntityAutocompletePicker.esm.js +1 -1
- package/dist/components/Filter/FilterPreviewTable/EntityTableToolbar.esm.js +1 -1
- package/dist/components/Filter/FilterPreviewTable/FilterPreviewTable.esm.js +1 -1
- package/dist/components/Filter/utils.esm.js +1 -1
- package/dist/components/FooterButtons/FooterButtons.esm.js +1 -1
- package/dist/components/FormControlledAutocomplete/ControlledAutocomplete.esm.js +2 -0
- package/dist/components/FormControlledAutocomplete/FormControlledAutocomplete.esm.js +2 -0
- package/dist/components/FormControlledAutocomplete/useLabelOptions.esm.js +2 -0
- package/dist/components/FormFieldLabel/FormFieldLabel.esm.js +2 -0
- package/dist/components/FormStepper/FormStepper.esm.js +1 -1
- package/dist/components/FormattedPreview/FormattedPreview.esm.js +4 -0
- package/dist/components/Frequency/FrequencyComponent.esm.js +1 -1
- package/dist/components/GroupSelector/GroupSelector.esm.js +1 -1
- package/dist/components/LevelCard/LevelCard.esm.js +1 -1
- package/dist/components/ListboxVirtualized/ListboxVirtualized.esm.js +2 -0
- package/dist/components/MultiSelectFilter/MultiSelectFilter.esm.js +1 -1
- package/dist/components/OverviewPage/CampaignBanner/CampaignArea.esm.js +2 -0
- package/dist/components/OverviewPage/CampaignBanner/CampaignBanner.esm.js +1 -1
- package/dist/components/OverviewPage/OverviewPage.esm.js +1 -1
- package/dist/components/OverviewPage/OverviewPageContent.esm.js +1 -1
- package/dist/components/OverviewPage/OverviewPageHeader.esm.js +2 -0
- package/dist/components/OverviewPage/index.esm.js +1 -1
- package/dist/components/OverviewTable/Cell/CheckCellTooltip.esm.js +1 -1
- package/dist/components/OverviewTable/Cell/CheckLabelCell.esm.js +2 -0
- package/dist/components/OverviewTable/Cell/EntityRefCell.esm.js +1 -1
- package/dist/components/OverviewTable/Cell/HighestLevelBadge.esm.js +1 -1
- package/dist/components/OverviewTable/Cell/TrackLevelHeaderCell.esm.js +1 -1
- package/dist/components/OverviewTable/Cell/cellRenderer.esm.js +1 -1
- package/dist/components/OverviewTable/OverviewTable.esm.js +1 -1
- package/dist/components/OverviewTable/ResultsTable.esm.js +1 -1
- package/dist/components/OverviewTable/ResultsTableHeader.esm.js +1 -1
- package/dist/components/OverviewTable/ResultsTableRow.esm.js +1 -1
- package/dist/components/PassRateTable/PassRateTable.esm.js +3 -1
- package/dist/components/QuickstartPage/HowDoIListItem.esm.js +2 -0
- package/dist/components/QuickstartPage/QuickStartChecksCard.esm.js +2 -0
- package/dist/components/QuickstartPage/QuickstartCardBase.esm.js +2 -0
- package/dist/components/QuickstartPage/QuickstartCollectorConfigurationsCard.esm.js +2 -0
- package/dist/components/QuickstartPage/QuickstartPage.esm.js +2 -0
- package/dist/components/QuickstartPage/QuickstartTracksCard.esm.js +2 -0
- package/dist/components/QuickstartPage/WelcomeHelpSection.esm.js +7 -0
- package/dist/components/QuickstartPage/WelcomeModal.esm.js +2 -0
- package/dist/components/QuickstartPage/styles.esm.js +2 -0
- package/dist/components/RoutingPage/RoutingPage.esm.js +1 -1
- package/dist/components/SearchBar/SearchBar.esm.js +1 -1
- package/dist/components/SearchFilters/SearchFilters.esm.js +1 -1
- package/dist/components/SoundcheckDialog/SoundcheckDialog.esm.js +2 -0
- package/dist/components/SoundcheckHeader/Breadcrumbs.esm.js +2 -0
- package/dist/components/SoundcheckHeader/SoundcheckHeader.esm.js +2 -0
- package/dist/components/SoundcheckHeader/SoundcheckHeaderContext.esm.js +2 -0
- package/dist/components/SoundcheckHeader/headerUtil.esm.js +2 -0
- package/dist/components/SoundcheckHeader/useHeader.esm.js +2 -0
- package/dist/components/SummaryCard/SummaryCard.esm.js +1 -1
- package/dist/components/TechHealth/Filters/FacetFilter.esm.js +1 -1
- package/dist/components/TechHealth/TechHealth.esm.js +1 -1
- package/dist/components/TechHealthTabs/ActionColumn.esm.js +1 -1
- package/dist/components/TechHealthTabs/CheckResultsTab/CheckResultsTab.esm.js +1 -1
- package/dist/components/TrackCreatePage/TrackCreatePage.esm.js +2 -0
- package/dist/components/{EditTrackPage/EditTrackPage.esm.js → TrackEditPage/TrackEditPage.esm.js} +2 -2
- package/dist/components/TrackEditPage/TrackEditView.esm.js +2 -0
- package/dist/components/TrackForm/Steps/LevelsStep/ChecksSection/ChecksSection.esm.js +1 -1
- package/dist/components/TrackForm/Steps/TrackDetailsStep/TrackDescriptionInput/TrackDescriptionInput.esm.js +1 -1
- package/dist/components/TrackForm/Steps/TrackDetailsStep/TrackDocumentationUrlInput/TrackDocumentationUrlInput.esm.js +1 -1
- package/dist/components/TrackForm/Steps/TrackDetailsStep/TrackNameInput/TrackNameInput.esm.js +1 -1
- package/dist/components/TrackForm/Steps/TrackDetailsStep/TrackOwnerSelect/TrackOwnerSelect.esm.js +1 -1
- package/dist/components/TrackForm/TrackForm.esm.js +1 -1
- package/dist/components/TrackForm/utils/trackFormUtils.esm.js +1 -1
- package/dist/components/TrackForm/utils/validation.esm.js +1 -1
- package/dist/components/TrackPage/FilterBar/FilterBar.esm.js +1 -1
- package/dist/components/TrackPage/TrackEntitiesTable/TrackEntitiesTable.esm.js +1 -1
- package/dist/components/TrackPage/TrackEntitiesTable/utils.esm.js +1 -1
- package/dist/components/TrackPage/TrackPage.esm.js +1 -1
- package/dist/components/TrackPage/TrackProgressCard.esm.js +1 -1
- package/dist/components/TracksPage/TrackListPage/TrackListPage.esm.js +1 -1
- package/dist/components/TracksPage/TracksPage.esm.js +1 -1
- package/dist/components/TracksTab/TracksTab.esm.js +1 -1
- package/dist/contexts/GenericFormContext.esm.js +1 -1
- package/dist/graphql/generated/index.esm.js +104 -36
- package/dist/hooks/catalog/useGetEntityRefs.esm.js +2 -0
- package/dist/hooks/certifications/useProgramOverviewForOwner.esm.js +1 -1
- package/dist/hooks/checks/useCheckTemplates.esm.js +2 -0
- package/dist/hooks/checks/useExecuteCheck.esm.js +1 -1
- package/dist/hooks/checks/useGetChecks.esm.js +1 -1
- package/dist/hooks/collectors/useGetFactSchema.esm.js +1 -1
- package/dist/hooks/collectors/useUpdateCollectorConfig.esm.js +1 -1
- package/dist/hooks/graphqlKeys.esm.js +1 -1
- package/dist/hooks/useGetFact.esm.js +2 -0
- package/dist/hooks/useGetPathResolvers.esm.js +2 -0
- package/dist/images/gitlab-rgb.svg +1 -0
- package/dist/images/gitlab-white.svg +1 -0
- package/dist/images/jira-rgb.svg +25 -0
- package/dist/images/jira-white.svg +25 -0
- package/dist/images/sonarqube-rgb.svg +14 -0
- package/dist/images/sonarqube-white.svg +14 -0
- package/dist/index.d.ts +5 -5
- package/dist/plugin.esm.js +1 -1
- package/dist/routes.esm.js +1 -1
- package/dist/utils/export.esm.js +3 -3
- package/dist/utils/filters.esm.js +1 -1
- package/dist/utils/formStyles.esm.js +1 -1
- package/dist/utils/validation.esm.js +1 -1
- package/package.json +20 -18
- package/dist/components/CampaignForm/CampaignFormDescription.esm.js +0 -2
- package/dist/components/CampaignsPage/AddCampaignView.esm.js +0 -2
- package/dist/components/CheckForm/CheckFormDescription.esm.js +0 -2
- package/dist/components/CheckForm/FormFields/RuleInput/Conditions/ControlledAutocomplete.esm.js +0 -2
- package/dist/components/ChecksPage/AddCheckView.esm.js +0 -2
- package/dist/components/CollectorPage/Configurators/Github/FactCollectionConfig.esm.js +0 -2
- package/dist/components/EditTrackPage/EditTrackView.esm.js +0 -2
- package/dist/components/FormControlledSelect/FormControlledSelect.esm.js +0 -2
- package/dist/components/FullScreenDialog/FullScreenDialog.esm.js +0 -2
- package/dist/components/OverviewPage/OverviewTabs.esm.js +0 -2
- package/dist/components/OverviewPage/OverviewTabsSkeleton.esm.js +0 -2
- package/dist/components/RoutingPage/Breadcrumbs.esm.js +0 -2
- package/dist/components/RoutingPage/utils.esm.js +0 -2
- package/dist/components/TracksPage/AddTrackView.esm.js +0 -2
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import
|
|
1
|
+
import i,{useEffect as m}from"react";import"../../contexts/TrackFormContext.esm.js";import{useCheckFormContext as c}from"../../contexts/CheckFormContext.esm.js";import"../../contexts/CampaignFormContext.esm.js";import"../../contexts/UserProvider.esm.js";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"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as p}from"../../hooks/useNavigateBack.esm.js";import{checksPageRouteRef as s}from"../../routes.esm.js";import{CheckForm as a}from"../CheckForm/CheckForm.esm.js";import"../CheckForm/Steps/CheckDetailsStep.esm.js";import"../CheckForm/Steps/CheckRulesStep.esm.js";import"../SoundcheckHeader/SoundcheckHeader.esm.js";import"../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as n}from"../SoundcheckHeader/useHeader.esm.js";const f=({check:t})=>{const{selectedItem:e,showReadOnly:o}=c();m(()=>{o(t)},[t,o]);const[r]=p(s);return n({title:"Check Details",description:"Identify if your software meets organizational standards by setting up a check.",docLink:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/checks"}),e&&i.createElement(a,{onClose:r,onSave:()=>{}})};export{f as CheckDetailsView};
|
|
2
2
|
//# sourceMappingURL=CheckDetailsView.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import
|
|
1
|
+
import d,{useEffect as c}from"react";import"../../contexts/TrackFormContext.esm.js";import{useCheckFormContext as i}from"../../contexts/CheckFormContext.esm.js";import"../../contexts/CampaignFormContext.esm.js";import"../../contexts/UserProvider.esm.js";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"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as u}from"../../hooks/useNavigateBack.esm.js";import{useUpdateCheck as h}from"../../hooks/checks/useUpdateCheck.esm.js";import{checksPageRouteRef as f}from"../../routes.esm.js";import{CheckForm as l}from"../CheckForm/CheckForm.esm.js";import"../CheckForm/Steps/CheckDetailsStep.esm.js";import"../CheckForm/Steps/CheckRulesStep.esm.js";import"../SoundcheckHeader/SoundcheckHeader.esm.js";import"../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as g}from"../SoundcheckHeader/useHeader.esm.js";const C=({check:t})=>{const{selectedItem:m,setSelectedItem:e}=i(),{setIsLoading:o}=i(),{mutateAsync:s,isLoading:r}=h();c(()=>{o(r)},[o,r]),c(()=>{e(t)},[t,e]);const[p,a]=u(f),n=async k=>{await s(k,{onSuccess:a})};return g({title:"Edit a Check",description:"Make changes to your check\u2019s facts, rules and other details.",docLink:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/checks"}),m&&d.createElement(l,{onClose:p,onSave:n})};export{C as CheckEditView};
|
|
2
2
|
//# sourceMappingURL=CheckEditView.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{stringifyEntityRef as
|
|
1
|
+
import{stringifyEntityRef as v}from"@backstage/catalog-model";import{Table as R}from"@backstage/core-components";import{makeStyles as x}from"@material-ui/core";import L from"lodash";import d,{useState as z,useEffect as B,useCallback as p}from"react";import{CheckEntityField as n,Direction as f}from"../../../graphql/generated/index.esm.js";import{useEntitiesByRefs as T}from"../../../hooks/catalog/useEntitiesByRefs.esm.js";import{useCheckEntities as D}from"../../../hooks/entities/useCheckEntities.esm.js";import{toResultState as m}from"../utils.esm.js";import{columnFactories as r}from"./columns.esm.js";import{toCheckEntityRow as N}from"./utils.esm.js";const O=["kind","metadata.name","metadata.namespace","relations","spec.lifecycle","spec.type"],P=[r.createStateColumn(),r.createNameColumn(),r.createSystemColumn(),r.createOwnerColumn(),r.createSpecTypeColumn(),r.createSpecLifecycleColumn()],F=[n.State,n.Name,n.System,n.Owner,n.Type,n.Lifecycle],$=x({tableContainer:{display:"flex",flexDirection:"column",width:"100%",overflowX:"auto","& table":{boxSizing:"border-box","& th:first-child, & td:first-child":{paddingLeft:"6px"},"& th:last-child, & td:last-child":{paddingRight:"6px !important"}}}}),A=({checkId:g,trackId:u,filter:s,states:c})=>{const h=$(),[e,l]=z({orderBy:void 0,filter:s,states:c?.map(m).filter(t=>t!==void 0),pageInfo:{page:0,pageSize:10,direction:"forward",cursor:null}});B(()=>{l(t=>({...t,pageInfo:{...t.pageInfo,page:0,cursor:null},filter:s,states:c?.map(m).filter(i=>i!==void 0)}))},[s,c]);const{data:a,isLoading:y}=D({checkId:g,trackId:u,orderBy:e.orderBy,filter:e.filter,states:e.states?.length?e.states:void 0,[e.pageInfo.direction==="forward"?"first":"last"]:e.pageInfo.pageSize,[e.pageInfo.direction==="forward"?"after":"before"]:e.pageInfo.cursor}),C=p((t,i)=>{let o;t===-1?o=void 0:o={field:F[t],direction:i==="asc"?f.Asc:f.Desc},l({...e,orderBy:o,pageInfo:{...e.pageInfo,page:0,cursor:null}})},[e]),k=p((t,i)=>{const o=t>e.pageInfo.page?"forward":"backward",b=o==="forward"?a?.checkEntities.pageInfo.endCursor??null:a?.checkEntities.pageInfo.startCursor??null;l({...e,pageInfo:{page:t,pageSize:i,direction:o,cursor:b}})},[a,e]),I=a?.checkEntities.edges.map(t=>t.node.entityRef)??[],{data:w,isLoading:E}=T({entityRefs:I,fields:O}),S=L.compact(a?.checkEntities.edges.map(t=>{const i=w?.items.find(o=>!!o&&v(o)===t.node.entityRef);return i?N({checkDetails:t.node,entity:i}):void 0}))??[];return d.createElement("div",{className:h.tableContainer},d.createElement(R,{title:"Entities",style:{width:"100%",border:"none",margin:0},columns:P,data:S,options:{paging:!0,showFirstLastPageButtons:!1,paginationPosition:"bottom",emptyRowsWhenPaging:!0,pageSizeOptions:[10,25,50],pageSize:10,search:!1,showTitle:!0,padding:"dense"},onOrderChange:C,onPageChange:k,page:e.pageInfo.page,totalCount:a?.checkEntities.totalCount??0,isLoading:y||E,components:{Toolbar:()=>null}}))};export{A as CheckEntitiesTable};
|
|
2
2
|
//# sourceMappingURL=CheckEntitiesTable.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{MarkdownContent as
|
|
1
|
+
import{MarkdownContent as j,Content as x}from"@backstage/core-components";import{useRouteRef as q}from"@backstage/core-plugin-api";import{EntityRefLink as J}from"@backstage/plugin-catalog-react";import{usePermission as L}from"@backstage/plugin-permission-react";import{makeStyles as K,useTheme as X,Button as Y,Paper as Z,Grid as y,Card as E,CardHeader as k,CardContent as C}from"@material-ui/core";import{soundcheckCheckReadPermission as _,soundcheckCheckUpdatePermission as $,toEntityFilterQuery as w,combineEntityFilterQueries as ee}from"@spotify/backstage-plugin-soundcheck-common";import e,{useMemo as S}from"react";import{useParams as te,useNavigate as re}from"react-router-dom";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import{useGetChecks as ie}from"../../hooks/checks/useGetChecks.esm.js";import"../../hooks/useSoundcheckAlert.esm.js";import{useGetAllTracks as ne}from"../../hooks/tracks/useGetAllTracks.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{useCheckStatus as oe}from"../../hooks/aggregations/useCheckStatus.esm.js";import{useSearchParam as l}from"../../hooks/useSearchParam.esm.js";import{checkEditRouteRef as ae}from"../../routes.esm.js";import{LoadingIndicator as se}from"../LoadingIndicator/LoadingIndicator.esm.js";import{PageWarningMessage as P}from"../PageWarningMessage/PageWarningMessage.esm.js";import"../SoundcheckHeader/SoundcheckHeader.esm.js";import"../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as ce}from"../SoundcheckHeader/useHeader.esm.js";import{CheckEntitiesTable as le}from"./CheckEntitiesTable/CheckEntitiesTable.esm.js";import{CheckStatusBar as me}from"./CheckStatusBar.esm.js";import{CheckStatusHistoryChart as de}from"./CheckStatusHistoryChart.esm.js";import{CheckStatusTable as pe}from"./CheckStatusTable.esm.js";import{FilterBar as fe}from"./FilterBar/FilterBar.esm.js";const ue=t=>{const{lifecycles:n,owners:r,types:o,systems:m}=t,a=n?.length?{"spec.lifecycle":n}:void 0,d=r?.length?{"relations.ownedBy":r}:void 0,s=o?.length?{"spec.type":o}:void 0,p=m?.length?{"relations.partOf":m}:void 0;if(a||d||s||p)return{...a,...d,...s,...p}};function he(t,n){for(const r of t.levels)for(const o of r.checks)if(o.id===n)return o;return null}const ge=K(t=>({root:{height:"100%",background:t.palette.background.default},header:{backgroundColor:t.palette.background.paper,borderRadius:0,marginBottom:t.spacing(2)},content:{display:"flex",flexDirection:"column",gap:t.spacing(2),paddingTop:t.spacing(0)},editButton:{marginLeft:"auto"},filterBar:{paddingTop:t.spacing(1),paddingBottom:t.spacing(1)},headerDescription:{fontSize:t.typography.body2.fontSize,margin:t.spacing(.5,0,0),"& p":{margin:0},"& a":{color:"inherit",textDecoration:"underline"}},ownerLink:{"& span":{color:"inherit","&:hover":{textDecoration:"underline"}}}})),ye=()=>{const t=ge(),{trackId:n,checkId:r}=te(),[o,m]=l("states"),[a,d]=l("owners"),[s,p]=l("lifecycles"),[v,T]=l("types"),[I,D]=l("systems"),f=ue({lifecycles:s,owners:a,types:v,systems:I}),{data:F,isLoading:H}=ne({ids:[n??""],first:1},{enabled:!!n}),c=F?.edges?.[0]?.node,{data:G,isLoading:u}=ie({ids:[r??""],first:1}),i=G?.edges?.[0]?.node,{loading:M,allowed:z}=L({permission:_,resourceRef:r}),{loading:b,allowed:R}=L({permission:$,resourceRef:r}),B=re(),N=q(ae),O=X();let h;if(r)if(c){const V=w(c.filter),W=w(he(c,r)?.filter);h=ee(V,W,!0)}else i&&(h=w(i.filter));const{data:g}=oe({checkId:r,trackId:n,filter:f,states:o?.length?o:void 0},!!r),Q=S(()=>i?.ownerEntityRef?e.createElement(J,{color:"inherit",entityRef:i.ownerEntityRef,className:t.ownerLink}):null,[i?.ownerEntityRef,t.ownerLink]),A=S(()=>!b&&R&&i?.isEditable?e.createElement(Y,{className:t.editButton,variant:"contained",color:"primary",onClick:()=>{B(N({checkId:i.id}))}},"Edit Check"):null,[R,i?.id,i?.isEditable,t.editButton,N,b,B]),U=S(()=>i?.description?e.createElement(j,{className:t.headerDescription,content:i.description}):null,[t.headerDescription,i?.description]);return ce({title:i?.name??r??"Soundcheck",description:U,customSubtitle:Q,sectionRight:A}),e.createElement("div",null,e.createElement(P,{entityName:"track",entityId:n,showNotFound:!!n&&!H&&!c}),e.createElement(P,{entityName:"check",entityId:r,showNotFound:!u&&!i,showCannotView:i&&!M&&!z}),u&&e.createElement(se,null),!u&&!!i&&e.createElement("div",{className:t.root},e.createElement(Z,{elevation:3,className:t.header},e.createElement(x,{className:t.filterBar},e.createElement(fe,{filter:h,states:o,setStates:m,owners:a,setOwners:d,lifecycles:s,setLifecycles:p,types:v,setTypes:T,systems:I,setSystems:D}))),e.createElement(x,{className:t.content},e.createElement(y,{container:!0,spacing:2},e.createElement(y,{item:!0,xs:4},e.createElement(E,{style:{height:"100%"}},e.createElement(k,{title:"Current Status"}),e.createElement(C,null,e.createElement("div",{style:{width:"100%",height:30,display:"flex",alignItems:"flex-start"}},e.createElement(me,{checkStatus:g})),e.createElement("div",{style:{paddingTop:O.spacing(1)}},e.createElement(pe,{checkStatus:g}))))),e.createElement(y,{item:!0,xs:8},e.createElement(E,{style:{height:"100%"}},e.createElement(k,{title:"Historical Status"}),e.createElement(C,{style:{height:"90%",paddingBottom:0}},e.createElement(de,{checkId:r,trackId:n,checkStatus:g,filter:f,states:o}))))),e.createElement(E,null,e.createElement(k,{title:"Entities"}),e.createElement(C,null,e.createElement(le,{checkId:r,trackId:c?.id,filter:f,states:o}))))))};export{ye as CheckInsightsPage};
|
|
2
2
|
//# sourceMappingURL=CheckInsightsPage.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{useTheme as
|
|
1
|
+
import{useTheme as i}from"@material-ui/core";import l from"@material-ui/lab/Skeleton";import t from"react";import{BarChart as m,XAxis as s,YAxis as o,Bar as a}from"recharts";import{ChartWrapper as c}from"../Charts/ChartWrapper/ChartWrapper.esm.js";import"../Charts/LineChart/LineChart.esm.js";import"../Charts/ChartTypes.esm.js";import"../Charts/chartUtils.esm.js";import"luxon";import"../TechHealthSummary/SummaryAggregationsProvider.esm.js";import"@backstage/catalog-model";import"../Charts/BarChart/BarChart.esm.js";const n=({checkStatus:r})=>{const e=i();return t.createElement(c,{height:24},r?t.createElement(m,{layout:"vertical",data:[r],stackOffset:"expand",margin:{top:0,right:0,left:0,bottom:0}},t.createElement(s,{hide:!0,type:"number"}),t.createElement(o,{hide:!0,type:"category"}),t.createElement(a,{fill:e.palette.success.main,dataKey:"passed",stackId:"status"}),t.createElement(a,{fill:e.palette.error.main,dataKey:"failed",stackId:"status"}),t.createElement(a,{fill:e.palette.warning.main,dataKey:"warning",stackId:"status"}),t.createElement(a,{fill:e.palette.text.disabled,dataKey:"notApplicable",stackId:"status"}),t.createElement(a,{fill:e.palette.info.main,dataKey:"notReported",stackId:"status"}),t.createElement(a,{fill:e.palette.error.light,dataKey:"error",stackId:"status"})):t.createElement(l,{variant:"rect"}))};export{n as CheckStatusBar};
|
|
2
2
|
//# sourceMappingURL=CheckStatusBar.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{useTheme as
|
|
1
|
+
import{useTheme as E}from"@material-ui/core";import g from"@material-ui/lab/Skeleton";import{DateTime as x}from"luxon";import t from"react";import{LineChart as I,CartesianGrid as A,XAxis as C,YAxis as m,Label as s,Line as r}from"recharts";import{useCheckStatusHistory as v}from"../../hooks/aggregations/useCheckStatusHistory.esm.js";import{ChartWrapper as K}from"../Charts/ChartWrapper/ChartWrapper.esm.js";import"../Charts/LineChart/LineChart.esm.js";import"../Charts/ChartTypes.esm.js";import"../Charts/chartUtils.esm.js";import"../TechHealthSummary/SummaryAggregationsProvider.esm.js";import"@backstage/catalog-model";import"../Charts/BarChart/BarChart.esm.js";const W=({checkId:i,trackId:d,checkStatus:a,filter:c,states:l})=>{const e=E(),{data:n,isLoading:p}=v({checkId:i,trackId:d,filter:c,states:l,numberOfDays:30},!!i&&!!a);if(!a||p)return t.createElement(g,{variant:"rect",width:"100%",height:"100%"});const y=n?.history.every(({notReported:o})=>o>=0);return t.createElement(K,{height:"90%"},t.createElement(I,{data:n?.history??[],margin:{top:0,right:0,left:0,bottom:0}},t.createElement(A,{stroke:e.palette.divider,verticalPoints:[]}),t.createElement(C,{dataKey:"date",tickFormatter:o=>x.fromISO(o).toFormat("MMM d"),allowDuplicatedCategory:!1,height:40,tick:({x:o,y:h,fill:f,payload:k,tickFormatter:u})=>t.createElement("g",{transform:`translate(${o},${h})`},t.createElement("text",{x:0,y:0,dy:16,textAnchor:"end",fill:f,transform:"rotate(-20)",fontSize:12},u(k.value)))}),t.createElement(m,{yAxisId:"percentage",orientation:"right",domain:[0,100]},t.createElement(s,{value:"Percentage",position:"center",angle:90})),t.createElement(m,{yAxisId:"count",domain:[0,a?.numberOfEntities??0]},t.createElement(s,{value:"Count",position:"center",angle:270,offset:2})),t.createElement(r,{type:"monotone",dataKey:"passed",stroke:e.palette.success.main,yAxisId:"count",strokeWidth:2,dot:!1}),t.createElement(r,{type:"monotone",dataKey:"failed",stroke:e.palette.error.main,yAxisId:"count",strokeWidth:2,dot:!1}),t.createElement(r,{type:"monotone",dataKey:"warning",stroke:e.palette.warning.main,yAxisId:"count",strokeWidth:2,dot:!1}),t.createElement(r,{type:"monotone",dataKey:"notApplicable",stroke:e.palette.text.disabled,yAxisId:"count",strokeWidth:2,dot:!1}),t.createElement(r,{type:"monotone",dataKey:"error",stroke:e.palette.error.light,yAxisId:"count",strokeWidth:2,dot:!1}),y&&t.createElement(r,{type:"monotone",dataKey:"notReported",stroke:e.palette.info.main,yAxisId:"count",strokeWidth:2,dot:!1})))};export{W as CheckStatusHistoryChart};
|
|
2
2
|
//# sourceMappingURL=CheckStatusHistoryChart.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{parseEntityRef as x}from"@backstage/catalog-model";import{useApi as N,configApiRef as B}from"@backstage/core-plugin-api";import{EntityDisplayName as D}from"@backstage/plugin-catalog-react";import{makeStyles as T,Checkbox as m,Box as P,Typography as j}from"@material-ui/core";import G from"@material-ui/icons/Category";import M from"@material-ui/icons/Class";import U from"@material-ui/icons/Group";import _ from"@material-ui/icons/Loop";import H from"@material-ui/icons/PlaylistAddCheckRounded";import e,{useMemo as J}from"react";import{useGetEntityFacets as o}from"../../../hooks/catalog/useGetEntityFacets.esm.js";import{CheckIcon as K}from"../../CheckIcon/CheckIcon.esm.js";import l from"../../MultiSelectFilter/MultiSelectFilter.esm.js";function Q(t){return t.toLowerCase().split("_").map(r=>r.charAt(0).toUpperCase()+r.slice(1)).join(" ")}const p=(t,{selected:r})=>e.createElement(e.Fragment,null,e.createElement(m,{value:t,checked:r,color:"primary"}),e.createElement(D,{entityRef:t,hideIcon:!0})),W=(t,{selected:r})=>e.createElement(e.Fragment,null,e.createElement(m,{value:t,checked:r,color:"primary"}),e.createElement(K,{result:t}),e.createElement(P,{mr:1}),e.createElement(j,null,Q(t))),q=T(t=>({root:{display:"flex",flexDirection:"row",alignItems:"center",gap:t.spacing(2)}})),z=({filter:t,states:r,setStates:f,owners:d,setOwners:y,lifecycles:E,setLifecycles:u,types:g,setTypes:h,systems:
|
|
1
|
+
import{parseEntityRef as x}from"@backstage/catalog-model";import{useApi as N,configApiRef as B}from"@backstage/core-plugin-api";import{EntityDisplayName as D}from"@backstage/plugin-catalog-react";import{makeStyles as T,Checkbox as m,Box as P,Typography as j}from"@material-ui/core";import G from"@material-ui/icons/Category";import M from"@material-ui/icons/Class";import U from"@material-ui/icons/Group";import _ from"@material-ui/icons/Loop";import H from"@material-ui/icons/PlaylistAddCheckRounded";import e,{useMemo as J}from"react";import{useGetEntityFacets as o}from"../../../hooks/catalog/useGetEntityFacets.esm.js";import{CheckIcon as K}from"../../CheckIcon/CheckIcon.esm.js";import l from"../../MultiSelectFilter/MultiSelectFilter.esm.js";function Q(t){return t.toLowerCase().split("_").map(r=>r.charAt(0).toUpperCase()+r.slice(1)).join(" ")}const p=(t,{selected:r})=>e.createElement(e.Fragment,null,e.createElement(m,{value:t,checked:r,color:"primary"}),e.createElement(D,{entityRef:t,hideIcon:!0})),W=(t,{selected:r})=>e.createElement(e.Fragment,null,e.createElement(m,{value:t,checked:r,color:"primary"}),e.createElement(K,{result:t}),e.createElement(P,{mr:1}),e.createElement(j,null,Q(t))),q=T(t=>({root:{display:"flex",flexDirection:"row",alignItems:"center",gap:t.spacing(2)}})),z=({filter:t,states:r,setStates:f,owners:d,setOwners:y,lifecycles:E,setLifecycles:u,types:g,setTypes:h,systems:L,setSystems:b})=>{const F=q(),n=N(B).getOptionalStringArray("soundcheck.flags")?.includes("enable-check-insights"),{data:A,isLoading:k}=o("relations.ownedBy",t),{data:s,isLoading:w}=o("spec.lifecycle",t,n),{data:i,isLoading:S}=o("spec.type",t,n),{data:a,isLoading:O}=o("relations.partOf",t,n),c=J(()=>a?.filter(v=>{try{return x(v).kind.toLowerCase()==="system"}catch{return!1}}),[a]),C=(s||[]).length<=1,I=(i||[]).length<=1,R=(c||[]).length<=1;return e.createElement("div",{className:F.root},e.createElement(l,{name:"state",label:"State",icon:e.createElement(H,null),options:["PASSED","FAILED","WARNING","NOT_APPLICABLE"],filters:r,setFilters:f,customRenderOption:W}),n&&e.createElement("div",null,e.createElement(l,{name:"system",label:"System",icon:e.createElement(G,null),filters:L,setFilters:b,options:c??[],disabled:O||R,customRenderOption:p}),e.createElement(l,{name:"owner",label:"Owner",icon:e.createElement(U,null),filters:d,setFilters:y,options:A??[],disabled:k,customRenderOption:p}),e.createElement(l,{name:"type",label:"Type",icon:e.createElement(M,null),filters:g,setFilters:h,options:i??[],disabled:S||I}),e.createElement(l,{name:"lifecycle",label:"Lifecycle",icon:e.createElement(_,null),filters:E,setFilters:u,options:s??[],disabled:w||C})))};export{z as FilterBar};
|
|
2
2
|
//# sourceMappingURL=FilterBar.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{Content as i,ItemCardGrid as s}from"@backstage/core-components";import{useRouteRef as p}from"@backstage/core-plugin-api";import{Typography as a,Box as c,Card as d,CardContent as u}from"@material-ui/core";import{makeStyles as f}from"@material-ui/core/styles";import g from"lodash";import e,{useMemo as k}from"react";import{Link as h}from"react-router-dom";import{useCheckTemplates as y}from"../../hooks/checks/useCheckTemplates.esm.js";import{checkCreateRouteRef as C}from"../../routes.esm.js";import{LoadingIndicator as E}from"../LoadingIndicator/LoadingIndicator.esm.js";import"../SoundcheckHeader/SoundcheckHeader.esm.js";import"../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as b}from"../SoundcheckHeader/useHeader.esm.js";import{TemplateCategory as v}from"./TemplateCategory.esm.js";const x=f(t=>({content:{display:"flex",flexDirection:"column",gap:t.spacing(2)},grid:{marginLeft:t.spacing(2)},cardContent:{"&:hover":{backgroundColor:t.palette.action.hover}},docsLink:{color:t.palette.text.primary},link:{textDecoration:"none"}})),L=()=>{const t=x(),m=p(C),{data:o,isLoading:l}=y(),n=k(()=>g.groupBy(o??[],"category"),[o]);return b({title:"What would you like to check?",docLink:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/checks"}),e.createElement("div",null,l&&e.createElement(E,null),o&&o.length===0&&e.createElement(a,null,"No check templates."),o&&o.length&&e.createElement(i,{className:t.content},e.createElement(c,{className:t.grid},e.createElement(s,null,e.createElement(h,{to:m(),className:t.link},e.createElement(d,null,e.createElement(u,{className:t.cardContent},e.createElement(c,{mb:1},e.createElement(a,{variant:"subtitle1",style:{fontWeight:"bold"},component:"div"},"Custom Check")),e.createElement(a,{variant:"body1"},"Create a custom check using the facts collected about your entities.")))))),Object.keys(n).sort().map(r=>e.createElement(v,{name:r,templates:n[r],key:r}))))};export{L as CheckTemplatesPage};
|
|
2
|
+
//# sourceMappingURL=CheckTemplatesPage.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{ItemCardGrid as c}from"@backstage/core-components";import{useRouteRef as i}from"@backstage/core-plugin-api";import{Typography as a,Box as n,Card as p,CardContent as s}from"@material-ui/core";import{makeStyles as d}from"@material-ui/core/styles";import f from"lodash";import e from"react";import{Link as y}from"react-router-dom";import{checkCreateRouteRef as E}from"../../routes.esm.js";const g=d(t=>({content:{marginLeft:t.spacing(2)},link:{textDecoration:"none"},cardContent:{"&:hover":{backgroundColor:t.palette.action.hover}}})),u=({name:t,templates:m})=>{const o=g(),l=i(E);return e.createElement(e.Fragment,null,e.createElement(a,{variant:"h6"},t),e.createElement(n,{className:o.content},e.createElement(c,null,f.sortBy(m,"title").map(r=>e.createElement(y,{to:`${l()}?template=${r.id}`,className:o.link,key:r.id},e.createElement(p,{style:{height:"100%"}},e.createElement(s,{className:o.cardContent},e.createElement(n,{mb:1},e.createElement(a,{variant:"subtitle1",style:{fontWeight:"bold"},component:"div"},r.title)),e.createElement(a,{variant:"body1"},r.summary))))))))};export{u as TemplateCategory};
|
|
2
|
+
//# sourceMappingURL=TemplateCategory.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{useApi as
|
|
1
|
+
import{useApi as Z,featureFlagsApiRef as $,useRouteRef as q}from"@backstage/core-plugin-api";import{usePermission as z}from"@backstage/plugin-permission-react";import{makeStyles as J,Button as N,Grid as o}from"@material-ui/core";import{soundcheckCheckCreatePermission as K}from"@spotify/backstage-plugin-soundcheck-common";import t,{useState as c,useEffect as w}from"react";import{useNavigate as U}from"react-router-dom";import V from"react-use/lib/useDebounce";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../../api.esm.js";import"../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import{useGetChecks as X}from"../../../hooks/checks/useGetChecks.esm.js";import"../../../hooks/useSoundcheckAlert.esm.js";import"../../../hooks/useConfirmationModal.esm.js";import{useGetCheckOwners as _}from"../../../hooks/checks/useGetCheckOwners.esm.js";import ee from"../../../images/no-results.svg";import{checkTemplatesRouteRef as te}from"../../../routes.esm.js";import{FilterDefault as y}from"../../../utils/filters.esm.js";import{EmptyState as x}from"../../EmptyState/EmptyState.esm.js";import{Pagination as ae}from"../../Pagination/Pagination.esm.js";import{SearchFilters as re}from"../../SearchFilters/SearchFilters.esm.js";import{ChecksOverviewSkeleton as oe}from"../skeletons/ChecksOverviewSkeleton.esm.js";import{CheckSummaryCard as ce}from"./CheckSummaryCard.esm.js";var A=(e=>(e.title="Create a check",e.description="A check is a comparison between a defined acceptable outcome and the actual outcome of a given process.",e.callToAction="Get started",e))(A||{}),S=(e=>(e.title="No checks found",e.description="No checks matched your search. Consider changing search term and filters.",e))(S||{});const ie=J(e=>({headerButtons:{display:"flex",gap:e.spacing(1),flexWrap:"nowrap",justifyContent:"end",alignItems:"end"},header:{padding:e.spacing(0,0,1)},container:{padding:e.spacing(3),gap:e.spacing(3)},createButton:{lineHeight:"1.25rem",paddingTop:e.spacing(1.5),paddingBottom:e.spacing(1.5)}})),se=({checksPerPage:e,currentCursor:B})=>{const i=ie(),[d,h]=c(B),[n,I]=c(""),[g,R]=c(y.Alpha),[u,F]=c(y.Owner),[f,O]=c(""),{data:T,isLoading:G}=_();V(()=>{O(n)},500,[n]);const{loading:k,allowed:L}=z({permission:K}),{data:r,isLoading:l}=X({ids:void 0,first:e,after:d,orderAlphabetical:g,searchByOwner:u,searchByName:f}),[m,D]=c(r),p=m?.edges?.map(a=>a.node),[C,P]=c([]);w(()=>{h(void 0),P([])},[f]);const v=Z($),j=!v.getRegisteredFlags().find(a=>a.name==="soundcheck-enable-check-creation")||v.isActive("soundcheck-enable-check-creation"),E=!L||!j,H=a=>{R(a.target.value)},W=a=>{F(a.target.value)};w(()=>{r&&D(()=>({totalCount:r.totalCount,edges:r.edges,pageInfo:{startCursor:r.pageInfo.startCursor,endCursor:r.pageInfo.endCursor,hasNextPage:r?.pageInfo.hasNextPage??!1,hasPreviousPage:r?.pageInfo.hasPreviousPage??!1}}))},[r]);const M=U(),Q=q(te),b=()=>M(Q());if(!l&&!p)return t.createElement(x,{title:"Create a check",description:"A check is a comparison between a defined acceptable outcome and the actual outcome of a given process.",imgSrc:ee,action:!k&&t.createElement(N,{disabled:E,variant:"contained",color:"primary",onClick:b},"Get started")});let s;l?s=t.createElement(oe,null):p?.length?s=p?.map(a=>t.createElement(o,{key:a.id,xs:12,sm:12,md:6,lg:4,xl:3,item:!0,role:"listitem","aria-label":`check card ${a.id}`},t.createElement(ce,{check:a}))):s=t.createElement(o,{xs:12,item:!0,role:"listitem","aria-label":"result"},t.createElement(x,{title:"No checks found",description:"No checks matched your search. Consider changing search term and filters."}));const Y=m?.pageInfo.hasNextPage||C?.length>0;return t.createElement(o,{container:!0,direction:"row",className:i.container},t.createElement(o,{container:!0,className:i.header},t.createElement(re,{searchPlaceholder:"Search Available Checks",isLoading:l||G,searchTerm:n,setSearchTerm:I,filterAlpha:g,handleAlphabeticalFilterChange:H,filterOwner:u,handleOwnerFilterChange:W,owners:T}),t.createElement(o,{item:!0,xs:2,className:i.headerButtons},!k&&t.createElement(N,{disabled:E,variant:"contained",color:"primary",onClick:b,className:i.createButton},"Create Check"))),t.createElement(o,{container:!0,spacing:4,role:"list","aria-label":"checks"},s),Y&&t.createElement(o,{item:!0,xs:12},t.createElement(ae,{response:m,listingsPerPage:e,cursor:d,setCursor:h,prevCursors:C,setPrevCursors:P,labelPerPageDropdown:"Checks Per Page:",urlRoute:"checks?checksPerPage="})))};export{A as CheckEmptyState,se as CheckListPage,S as CheckNoResults};
|
|
2
2
|
//# sourceMappingURL=CheckListPage.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import
|
|
1
|
+
import r from"react";import{useSearchParams as m}from"react-router-dom";import{RESULTS_PER_PAGE as o}from"../../utils/filters.esm.js";import{CheckListPage as a}from"./CheckListPage/CheckListPage.esm.js";const s=()=>{const[t]=m(),e=t.get("checksPerPage"),c=e?parseInt(e,10):o;return r.createElement("div",null,r.createElement(a,{checksPerPage:c}))};export{s as ChecksPage};
|
|
2
2
|
//# sourceMappingURL=ChecksPage.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import e from"react";import"../../contexts/TrackFormContext.esm.js";import{CheckFormProvider as r}from"../../contexts/CheckFormContext.esm.js";import"../../contexts/CampaignFormContext.esm.js";import"../../contexts/UserProvider.esm.js";import{ChecksPage as o}from"../ChecksPage/ChecksPage.esm.js";const m=()=>e.createElement(r,null,e.createElement(o,null));export{m as ChecksTab};
|
|
1
|
+
import e from"react";import"../../contexts/TrackFormContext.esm.js";import{CheckFormProvider as r}from"../../contexts/CheckFormContext.esm.js";import"../../contexts/CampaignFormContext.esm.js";import"../../contexts/UserProvider.esm.js";import{ChecksPage as o}from"../ChecksPage/ChecksPage.esm.js";import"../SoundcheckHeader/SoundcheckHeader.esm.js";import"../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useSetHeaderDefault as t}from"../SoundcheckHeader/useHeader.esm.js";const m=()=>(t(),e.createElement(r,null,e.createElement(o,null)));export{m as ChecksTab};
|
|
2
2
|
//# sourceMappingURL=ChecksTab.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{usePermission as
|
|
1
|
+
import{Content as l}from"@backstage/core-components";import{usePermission as c}from"@backstage/plugin-permission-react";import{soundcheckCollectorUpdatePermission as d}from"@spotify/backstage-plugin-soundcheck-common";import e from"react";import{useParams as p}from"react-router-dom";import{useGetCollectors as f}from"../../hooks/collectors/useGetCollectors.esm.js";import{LoadingIndicator as g}from"../LoadingIndicator/LoadingIndicator.esm.js";import{PageWarningMessage as u}from"../PageWarningMessage/PageWarningMessage.esm.js";import{Configurator as C}from"./Configurators/Configurator.esm.js";const E=()=>{const{integrationId:r}=p(),{data:i,isLoading:m}=f([r??""]),{loading:a,allowed:s}=c({permission:d}),o=i?.[0],t=m||a,n=s&&o?.isEditable;return e.createElement(l,null,t&&e.createElement(g,null),e.createElement(u,{entityName:"Integration",entityId:r,showNotFound:!t&&!o,showCannotEdit:!t&&!n}),o&&n&&e.createElement(C,{selectedCollector:o}))};export{E as CollectorPage};
|
|
2
2
|
//# sourceMappingURL=CollectorPage.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{z as e}from"zod";import{FrequencySchema as r,FiltersSchema as c,CacheConfigSchema as i}from"../../../../utils/validation.esm.js";import{defaultCacheConfig as l}from"../../../CacheConfig/utils.esm.js";import"../../../CacheConfig/CacheConfigComponent.esm.js";import{emptyFilters as m}from"../../../Filter/types.esm.js";import"../../../Frequency/types.esm.js";import{defaultFrequency as n}from"../../../Frequency/util.esm.js";import"../../../Frequency/FrequencyComponent.esm.js";const o=()=>({filters:{...m(),selectedKinds:["Component"]},frequency:n(),cacheConfig:l()}),a=()=>({enabled:!1,...o()}),t=e.object({frequency:r,filters:c,cacheConfig:i}),f=t.extend({enabled:e.boolean()}).strict();export{t as BaseCollectorSchema,f as CollectorOptionSchema,o as defaultBaseCollectorOption,a as defaultCollectorOption};
|
|
2
|
+
//# sourceMappingURL=CollectorOption.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{makeStyles as z,FormControlLabel as I,Switch as R,Box as G,Typography as y,Divider as L,Tabs as W,Tab as p,Grid as b,Button as $}from"@material-ui/core";import Y from"@material-ui/icons/Add";import j from"@material-ui/icons/Remove";import e,{useState as H}from"react";import{useFieldArray as J,useWatch as K,Controller as u}from"react-hook-form";import{validateCacheConfig as M}from"../../../../utils/collectors.esm.js";import{validateFrequency as O}from"../../../../utils/frequency.esm.js";import"lodash";import"../../../Frequency/types.esm.js";import"../../../Frequency/util.esm.js";import{FrequencyComponent as P}from"../../../Frequency/FrequencyComponent.esm.js";import{CacheConfigComponent as Q}from"../../../CacheConfig/CacheConfigComponent.esm.js";import"@spotify/backstage-plugin-soundcheck-common";import{FilterComponent as U}from"../../../Filter/FilterComponent.esm.js";const V=z(a=>({root:{padding:a.spacing(1.5,6)},tabsContainer:{marginRight:16},tab:{height:"64px",textAlign:"left"},contentContainer:{width:"100%",padding:a.spacing(1)},divider:{marginTop:a.spacing(1),marginBottom:a.spacing(1)},switchTrack:{backgroundColor:`${a.palette.primary.main} !important`},buttonsContainer:{marginTop:a.spacing(1),marginBottom:a.spacing(2)}})),C="FactDetails",v="Frequency",F="Filters",D="Caching",X=({name:a,label:E,description:N,control:i,disabled:m,errors:s,FactDetailsComponent:d,multipleCollectors:r})=>{const{fields:k,insert:q,remove:x}=J({control:i,name:r?.enable?`${a}.collectors`:a}),f=r?.enable?k:[{id:a}],h=d?C:v,[o,g]=H(Array(f.length).fill(h)),T=(l,t,n)=>{g([...o.slice(0,n),t,...o.slice(n+1)])},w=l=>{q(l+1,r?.defaultConfig),g([...o.slice(0,l+1),h,...o.slice(l+1)])},A=l=>{x(l),g([...o.slice(0,l),...o.slice(l+1)])},B=K({control:i,name:`${a}.enabled`}),c=V();return e.createElement("div",{className:c.root},e.createElement(u,{name:`${a}.enabled`,control:i,render:({field:l})=>e.createElement(I,{control:e.createElement(R,{...l,checked:l.value,"data-testid":`${a}-switch`,classes:{track:l.value?c.switchTrack:void 0},disabled:m}),label:e.createElement(G,{display:"flex",flexDirection:"column"},e.createElement(y,{variant:"body1",component:"span"},e.createElement("b",null,`${E}`)),e.createElement(y,{variant:"caption",color:"textSecondary",component:"p"},`${N}`))})}),B&&e.createElement("div",null,f.map((l,t)=>e.createElement("div",{key:l.id},t!==0&&e.createElement(L,{className:c.divider}),e.createElement(W,{orientation:"horizontal",variant:"scrollable",value:o[t],onChange:(n,S)=>T(n,S,t),className:c.tabsContainer},d&&e.createElement(p,{label:"Fact Details",value:C,className:c.tab}),e.createElement(p,{label:"Frequency",value:v,className:c.tab}),e.createElement(p,{label:"Filters",value:F,className:c.tab}),e.createElement(p,{label:"Caching",value:D,className:c.tab})),e.createElement("div",{className:c.contentContainer},o[t]===C&&d&&e.createElement(d,{name:r?.enable?`${a}.collectors.${t}.factDetails`:`${a}.factDetails`,control:i,disabled:m,errors:r?.enable?s?.collectors?.[t]?.factDetails:s?.factDetails}),o[t]===v&&e.createElement(u,{name:r?.enable?`${a}.collectors.${t}.frequency`:`${a}.frequency`,control:i,rules:{validate:O},render:({field:n})=>e.createElement(P,{disabled:m,value:n.value,onChange:n.onChange,errors:r?.enable?s?.collectors?.[t]?.frequency:s?.frequency})}),o[t]===F&&e.createElement(u,{name:r?.enable?`${a}.collectors.${t}.filters`:`${a}.filters`,control:i,render:({field:n})=>e.createElement(U,{disabled:m,value:n.value,onChange:n.onChange})}),o[t]===D&&e.createElement(u,{name:r?.enable?`${a}.collectors.${t}.cacheConfig`:`${a}.cacheConfig`,control:i,rules:{validate:M},render:({field:n})=>e.createElement(Q,{disabled:m,value:n.value,onChange:n.onChange,errors:r?.enable?s?.collectors?.[t]?.cacheConfig:s?.cacheConfig})})),r?.enable&&e.createElement(b,{container:!0,spacing:1,className:c.buttonsContainer},f.length>1&&e.createElement(b,{item:!0},e.createElement($,{startIcon:e.createElement(j,null),onClick:()=>A(t),disabled:m,variant:"outlined",size:"small",color:"secondary"},"Remove")),e.createElement(b,{item:!0},e.createElement($,{startIcon:e.createElement(Y,null),onClick:()=>w(t),disabled:m,variant:"outlined",size:"small",color:"primary"},"Add ",E)))))))};export{X as FactCollectionConfig};
|
|
2
|
+
//# sourceMappingURL=FactCollectionConfig.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const o=t=>({title:t.name??t.id,description:t.description,docLink:`https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/fact-collectors/3p-integrations/${t.id}`}),e=t=>({title:"Update Integration",message:`Are you sure you want to update the ${t.name} integration?`,error:!1});export{o as collectorHeaderContent,e as confirmationModalContent};
|
|
2
|
+
//# sourceMappingURL=utils.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import t from"react";import{
|
|
1
|
+
import t from"react";import{DataDogConfigurator as e}from"./DataDog/DataDogConfigurator.esm.js";import{GithubConfigurator as i}from"./Github/GithubConfigurator.esm.js";import{JiraConfigurator as a}from"./Jira/JiraConfigurator.esm.js";import{KubernetesConfigurator as m}from"./Kubernetes/KubernetesConfigurator.esm.js";import{PagerDutyConfigurator as n}from"./PagerDuty/PagerDutyConfigurator.esm.js";import{ScmConfigurator as u}from"./SCM/ScmConfigurator.esm.js";import{SonarQubeConfigurator as f}from"./SonarQube/SonarQubeConfigurator.esm.js";const g={github:i,scm:u,pagerduty:n,datadog:e,kubernetes:m,jira:a,sonarqube:f},c=({selectedCollector:o})=>{const r=g[o?.id];return t.createElement(r,{selectedCollector:o})};export{c as Configurator};
|
|
2
2
|
//# sourceMappingURL=Configurator.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{makeStyles as u,Paper as C,Divider as D}from"@material-ui/core";import e from"react";import{useForm 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"../../../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as S}from"../../../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as E}from"../../../../hooks/useNavigateBack.esm.js";import{useUpdateCollectorConfig as h}from"../../../../hooks/collectors/useUpdateCollectorConfig.esm.js";import{integrationsPageRouteRef as L}from"../../../../routes.esm.js";import{FooterButtons as y}from"../../../FooterButtons/FooterButtons.esm.js";import"../../../SoundcheckHeader/SoundcheckHeader.esm.js";import"../../../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as O}from"../../../SoundcheckHeader/useHeader.esm.js";import{FactCollectionConfig as l}from"../Common/FactCollectionConfig.esm.js";import{collectorHeaderContent as j,confirmationModalContent as k}from"../Common/utils.esm.js";import{mapConfigToDataDogCollectorConfig as w,defaultDataDogConfig as B,mapDataDogCollectorConfigToConfig as F}from"./utils.esm.js";const x=u(o=>({spacer:{height:o.spacing(8),width:"100%"},section:{marginBottom:o.spacing(2)}})),M=({disabled:o,selectedCollector:t})=>{const{control:r,formState:{errors:i},handleSubmit:a}=b({defaultValues:t?w(t.config):B(),mode:"onChange"}),n=x(),m=!!i.serviceDefinition||!!i.serviceLevelObjective,{mutateAsync:s}=h(),[f,d]=E(L),{showModal:p}=S(),c=async g=>{if(!await p(k(t)))return;const v=F(g);await s({collectorId:t.id,config:v})&&d()};return O(j(t)),e.createElement(e.Fragment,null,e.createElement(C,{className:n.section},e.createElement("form",{onSubmit:a(c)},e.createElement(l,{name:"serviceDefinition",label:"Service Definition",description:"Collects details about Datadog service linked to an entity.",control:r,disabled:o,errors:i.serviceDefinition}),e.createElement(D,null),e.createElement(l,{name:"serviceLevelObjective",label:"Service Level Objective",description:"Collects details about SLOs configured for a Datadog service linked to an entity.",control:r,disabled:o,errors:i.serviceLevelObjective}))),e.createElement("div",{className:n.section},e.createElement(y,{onCancel:f,saveButtonText:"Save",isLoading:!1,onSave:a(c),disableSave:m})))};export{M as DataDogConfigurator};
|
|
2
|
+
//# sourceMappingURL=DataDogConfigurator.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{asArray as h}from"@spotify/backstage-plugin-soundcheck-common";import{mapToCacheConfig as s,mapCacheConfigToHumanDurationOrBoolean as u}from"../../../CacheConfig/utils.esm.js";import"../../../CacheConfig/CacheConfigComponent.esm.js";import{mapCatalogFilterToFilters as C,mapFiltersToCatalogFilter as m}from"../../../Filter/utils.esm.js";import"../../../Filter/FilterComponent.esm.js";import"../../../Frequency/types.esm.js";import{mapHumanDurationOrCronToFrequency as p,mapFrequencyToHumanDurationOrCron as g}from"../../../Frequency/util.esm.js";import"../../../Frequency/FrequencyComponent.esm.js";import{defaultCollectorOption as v}from"../Common/CollectorOption.esm.js";const a="service-definition",l="service-level-objective",y=()=>({serviceDefinition:v(),serviceLevelObjective:v()});function T(e){const{serviceDefinition:i,serviceLevelObjective:r}=e;if(i.enabled||r.enabled){const o={},c=[];if(o.collects=c,i.enabled){const{cacheConfig:t,frequency:n,filters:f}=i;c.push({type:a,frequency:g(n),filter:m(f),cache:u(t)})}if(r.enabled){const{cacheConfig:t,frequency:n,filters:f}=r;c.push({type:l,frequency:g(n),filter:m(f),cache:u(t)})}return o}return{collects:[]}}function D(e){const i=y();if(e){const r=e.collects;if(r)for(const o of h(r)){const c=o.type;c===a&&(i.serviceDefinition={enabled:!0,frequency:p(o.frequency??e.frequency),filters:C(o.filter??e.filter),cacheConfig:s(o.cache??e.cache)}),c===l&&(i.serviceLevelObjective={enabled:!0,frequency:p(o.frequency??e.frequency),filters:C(o.filter??e.filter),cacheConfig:s(o.cache??e.cache)})}}return i}export{a as SERVICE_DEFINITION_COLLECTOR_TYPE,l as SERVICE_LEVEL_OBJECTIVE_COLLECTOR_TYPE,y as defaultDataDogConfig,D as mapConfigToDataDogCollectorConfig,T as mapDataDogCollectorConfigToConfig};
|
|
2
|
+
//# sourceMappingURL=utils.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{makeStyles as b,
|
|
1
|
+
import{makeStyles as b,Paper as h,Divider as m}from"@material-ui/core";import o from"react";import{useForm as y}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"../../../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as E}from"../../../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as S}from"../../../../hooks/useNavigateBack.esm.js";import{useUpdateCollectorConfig as v}from"../../../../hooks/collectors/useUpdateCollectorConfig.esm.js";import{integrationsPageRouteRef as B}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 D}from"../../../SoundcheckHeader/useHeader.esm.js";import{FactCollectionConfig as i}from"../Common/FactCollectionConfig.esm.js";import{collectorHeaderContent as L,confirmationModalContent as w}from"../Common/utils.esm.js";import{mapConfigToGithubCollectorConfig as F,defaultGithubConfig as G,mapGithubCollectorConfigToConfig as R}from"./utils.esm.js";const x=b(e=>({spacer:{height:e.spacing(8),width:"100%"},section:{marginBottom:e.spacing(2)},form:{marginBottom:e.spacing(2)}})),M=({disabled:e,selectedCollector:r})=>{const{control:a,formState:{errors:t},handleSubmit:n}=y({defaultValues:r?F(r.config):G(),mode:"onChange"}),s=x(),c=!!t.branchProtections||!!t.repositoryDetails||!!t.repositoryLanguages,{mutateAsync:p}=v(),[f,g]=S(B),{showModal:u}=E(),l=async d=>{if(!await u(w(r)))return;const C=R(d);await p({collectorId:r.id,config:C})&&g()};return D(L(r)),o.createElement(o.Fragment,null,o.createElement(h,{className:s.form},o.createElement("form",{onSubmit:n(l)},o.createElement(i,{name:"branchProtections",label:"Branch Protections",description:"Collects branch protection information from an entity's repository.",control:a,disabled:e,errors:t.branchProtections}),o.createElement(m,null),o.createElement(i,{name:"repositoryDetails",label:"Repository Details",description:"Collects details about the an entity's repository.",control:a,disabled:e,errors:t.repositoryDetails}),o.createElement(m,null),o.createElement(i,{name:"repositoryLanguages",label:"Repository Languages",description:"Collects details about the languages used in an entity's repository.",control:a,disabled:e,errors:t.repositoryLanguages}))),o.createElement("div",{className:s.section},o.createElement(P,{onCancel:f,saveButtonText:"Save",isLoading:!1,onSave:n(l),disableSave:c})))};export{M as GithubConfigurator};
|
|
2
2
|
//# sourceMappingURL=GithubConfigurator.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{asArray as
|
|
1
|
+
import{asArray as b}from"@spotify/backstage-plugin-soundcheck-common";import{mapToCacheConfig as l,mapCacheConfigToHumanDurationOrBoolean as s}from"../../../CacheConfig/utils.esm.js";import"../../../CacheConfig/CacheConfigComponent.esm.js";import{mapCatalogFilterToFilters as u,mapFiltersToCatalogFilter as p}from"../../../Filter/utils.esm.js";import"../../../Filter/FilterComponent.esm.js";import"../../../Frequency/types.esm.js";import{mapHumanDurationOrCronToFrequency as y,mapFrequencyToHumanDurationOrCron as C}from"../../../Frequency/util.esm.js";import"../../../Frequency/FrequencyComponent.esm.js";import{defaultCollectorOption as h}from"../Common/CollectorOption.esm.js";const m="BranchProtections",g="RepositoryDetails",T="RepositoryLanguages",q=()=>({branchProtections:h(),repositoryDetails:h(),repositoryLanguages:h()});function O(r){const{branchProtections:o,repositoryDetails:n,repositoryLanguages:e}=r;if(o.enabled||n.enabled||e.enabled){const c={},f=[];if(c.collects=f,o.enabled){const{cacheConfig:t,frequency:i,filters:a}=o;f.push({factName:"branch_protections",type:m,frequency:C(i),filter:p(a),cache:s(t)})}if(n.enabled){const{cacheConfig:t,frequency:i,filters:a}=n;f.push({factName:"repository_details",type:g,frequency:C(i),filter:p(a),cache:s(t)})}if(e.enabled){const{cacheConfig:t,frequency:i,filters:a}=e;f.push({factName:"repository_languages",type:T,frequency:C(i),filter:p(a),cache:s(t)})}return c}return[]}function d(r){const o=q();if(r){const n=r.collects;if(n)for(const e of b(n)){const c=e.type;c===m&&(o.branchProtections={enabled:!0,frequency:y(e.frequency??r.frequency),filters:u(e.filter??r.filter),cacheConfig:l(e.cache??r.cache)}),c===g&&(o.repositoryDetails={enabled:!0,frequency:y(e.frequency??r.frequency),filters:u(e.filter??r.filter),cacheConfig:l(e.cache??r.cache)}),c===T&&(o.repositoryLanguages={enabled:!0,frequency:y(e.frequency??r.frequency),filters:u(e.filter??r.filter),cacheConfig:l(e.cache??r.cache)})}}return o}export{m as BRANCH_PROTECTIONS_COLLECTOR_TYPE,g as REPOSITORY_DETAILS_COLLECTOR_TYPE,T as REPOSITORY_LANGUAGES_COLLECTOR_TYPE,q as defaultGithubConfig,d as mapConfigToGithubCollectorConfig,O as mapGithubCollectorConfigToConfig};
|
|
2
2
|
//# sourceMappingURL=utils.esm.js.map
|
package/dist/components/CollectorPage/Configurators/Jira/IssuesSearchFactDetailsComponent.esm.js
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{makeStyles as x,Grid as m,Typography as p,TextField as i}from"@material-ui/core";import e from"react";import{Controller as d}from"react-hook-form";import{JIRA_COLLECTOR_FIELDS as T}from"./utils.esm.js";const h=x(r=>({root:{paddingTop:r.spacing(1)},textInput:{marginTop:0,width:"500px"},helperText:{marginLeft:0}})),f=({name:r,disabled:c,control:s,errors:a})=>{const t=h(),{factName:l,jql:n}=T.factDetails;return e.createElement(m,{container:!0,spacing:1,direction:"column",className:t.root},e.createElement(m,{item:!0},e.createElement(p,{variant:"subtitle2"},l.name),e.createElement(d,{name:`${r}.factName`,control:s,render:({field:o})=>e.createElement(i,{...o,type:"text",variant:"outlined",margin:"dense",placeholder:l.placeholder,className:t.textInput,disabled:c,error:!!a?.factName,helperText:a?.factName?.message??l.helperText,FormHelperTextProps:{className:t.helperText}})})),e.createElement(m,{item:!0},e.createElement(p,{variant:"subtitle2"},n.name),e.createElement(d,{name:`${r}.jql`,control:s,render:({field:o})=>e.createElement(i,{...o,type:"text",variant:"outlined",margin:"dense",placeholder:n.placeholder,className:t.textInput,disabled:c,error:!!a?.jql,helperText:a?.jql?.message??n.helperText,FormHelperTextProps:{className:t.helperText}})})))};export{f as IssuesSearchFactDetailsComponent};
|
|
2
|
+
//# sourceMappingURL=IssuesSearchFactDetailsComponent.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{zodResolver as d}from"@hookform/resolvers/zod";import{makeStyles as g,Paper as S}from"@material-ui/core";import o from"react";import{useForm as h}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"../../../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as b}from"../../../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as v}from"../../../../hooks/useNavigateBack.esm.js";import{useUpdateCollectorConfig as E}from"../../../../hooks/collectors/useUpdateCollectorConfig.esm.js";import{integrationsPageRouteRef as F}from"../../../../routes.esm.js";import{FooterButtons as J}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 B}from"../Common/FactCollectionConfig.esm.js";import{collectorHeaderContent as y,confirmationModalContent as I}from"../Common/utils.esm.js";import{IssuesSearchFactDetailsComponent as M}from"./IssuesSearchFactDetailsComponent.esm.js";import{mapConfigToJiraCollectorConfig as N,defaultJiraConfig as R,issueSearchCollectorConfig as T,mapJiraCollectorConfigToConfig as k}from"./utils.esm.js";import{jiraCollectorFormSchema as x}from"./validation.esm.js";const D=g(t=>({spacer:{height:t.spacing(8),width:"100%"},section:{marginBottom:t.spacing(2)}})),H=({disabled:t,selectedCollector:e})=>{const{control:n,formState:{errors:r},handleSubmit:i}=h({defaultValues:e?N(e.config):R(),mode:"onChange",resolver:d(x)}),a=D(),s=!!r.issuesSearch,{mutateAsync:l}=E(),[c,f]=v(F),{showModal:p}=b(),m=async u=>{if(!await p(I(e)))return;const C=k(u);await l({collectorId:e.id,config:C})&&f()};return w(y(e)),o.createElement(o.Fragment,null,o.createElement(S,{className:a.section},o.createElement("form",{onSubmit:i(m)},o.createElement(B,{name:"issuesSearch",label:"Issues Search",description:"Collects details about Jira issues.",control:n,disabled:t,errors:r.issuesSearch,FactDetailsComponent:M,multipleCollectors:{enable:!0,defaultConfig:T()}}))),o.createElement("div",{className:a.section},o.createElement(J,{onCancel:c,saveButtonText:"Save",isLoading:!1,onSave:i(m),disableSave:s})))};export{H as JiraConfigurator};
|
|
2
|
+
//# sourceMappingURL=JiraConfigurator.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{asArray as f}from"@spotify/backstage-plugin-soundcheck-common";import{mapToCacheConfig as s,mapCacheConfigToHumanDurationOrBoolean as m}from"../../../CacheConfig/utils.esm.js";import"../../../CacheConfig/CacheConfigComponent.esm.js";import{mapCatalogFilterToFilters as u,mapFiltersToCatalogFilter as p}from"../../../Filter/utils.esm.js";import"../../../Filter/FilterComponent.esm.js";import"../../../Frequency/types.esm.js";import{mapHumanDurationOrCronToFrequency as C,mapFrequencyToHumanDurationOrCron as h}from"../../../Frequency/util.esm.js";import"../../../Frequency/FrequencyComponent.esm.js";import{defaultBaseCollectorOption as g}from"../Common/CollectorOption.esm.js";const c="issues-search",q={factDetails:{factName:{name:"Fact Name",helperText:"Fact name must be unique",placeholder:"Fact Name"},jql:{name:"Jira Query Language (JQL)",helperText:"Optional, the value will be concatenated with JQL from 'atlassian.net/jql' annotation.",placeholder:'Example: status = "To Do" AND created >= -30d'}}},i=(a,t)=>({...g(),factDetails:{factName:a??"",jql:t}}),n=()=>({issuesSearch:{enabled:!1,collectors:[i(c)]}});function T(a){const{issuesSearch:t}=a;if(t.enabled){const o={},r=[];return o.collects=r,t.collectors.forEach(e=>{const l=e.factDetails.jql?.trim();r.push({factName:e.factDetails.factName,type:c,jql:l?.length?l:void 0,frequency:h(e.frequency),filter:p(e.filters),cache:m(e.cacheConfig)})}),o}return{collects:[]}}function d(a){const t=n();if(a){const o=a.collects;if(o){const r=f(o).filter(e=>e.type===c);r.length&&(t.issuesSearch={enabled:!0,collectors:r.map(e=>({factDetails:{factName:e.factName??c,jql:e.jql},frequency:C(e.frequency??a.frequency),filters:u(e.filter??a.filter),cacheConfig:s(e.cache??a.cache)}))})}}return t}export{c as ISSUES_SEARCH_COLLECTOR_TYPE,q as JIRA_COLLECTOR_FIELDS,n as defaultJiraConfig,i as issueSearchCollectorConfig,d as mapConfigToJiraCollectorConfig,T as mapJiraCollectorConfigToConfig};
|
|
2
|
+
//# sourceMappingURL=utils.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{validNameRegex as f}from"@spotify/backstage-plugin-soundcheck-common";import{z as e}from"zod";import{FIELD_IS_REQUIRED_MSG as l}from"../../../../utils/validation.esm.js";import{BaseCollectorSchema as d}from"../Common/CollectorOption.esm.js";const r="Fact name is not unique",i="The field contains forbidden characters",m="Max 100 characters",_=d.extend({factDetails:e.strictObject({factName:e.string().min(1,l).max(100,m).regex(f,i),jql:e.string().optional()})}).strict(),S=e.strictObject({enabled:e.boolean(),collectors:e.array(_).superRefine((c,n)=>{const o=c.map(t=>t.factDetails.factName),s=o.filter((t,a)=>o.indexOf(t)!==a);s.length&&c.forEach((t,a)=>{s.includes(t.factDetails.factName)&&n.addIssue({code:e.ZodIssueCode.custom,message:r,path:[a,"factDetails","factName"]})})})}),h=e.strictObject({issuesSearch:S});export{r as FACT_NAME_IS_NOT_UNIQUE_MSG,i as INVALID_CHARACTERS_MSG,m as MAX_100_CHARACTERS_MSG,h as jiraCollectorFormSchema};
|
|
2
|
+
//# sourceMappingURL=validation.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{makeStyles as b,Paper as S,Divider as E}from"@material-ui/core";import e from"react";import{useForm 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"../../../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as h}from"../../../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as y}from"../../../../hooks/useNavigateBack.esm.js";import{useUpdateCollectorConfig as B}from"../../../../hooks/collectors/useUpdateCollectorConfig.esm.js";import{integrationsPageRouteRef as F}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{collectorHeaderContent as T,confirmationModalContent as k}from"../Common/utils.esm.js";import{mapConfigToKubernetesCollectorConfig as x,defaultKubernetesConfig as D,K8S_COLLECTOR_FIELDS as M,mapKubernetesCollectorConfigToConfig as N}from"./utils.esm.js";const O=b(r=>({spacer:{height:r.spacing(8),width:"100%"},section:{marginBottom:r.spacing(2)}})),R=({disabled:r,selectedCollector:t})=>{const{control:c,formState:{errors:o},handleSubmit:a}=v({defaultValues:t?x(t.config):D(),mode:"onChange"}),m=O(),p=!!o.pods||!!o.services||!!o.deployments||!!o.hpas||!!o.statefulSets||!!o.podDisruptionBudgets||!!o.ingresses,{mutateAsync:f}=B(),[d,u]=y(F),{showModal:g}=h(),s=async i=>{if(!await g(k(t)))return;const n=N(i);await f({collectorId:t.id,config:n})&&u()};return w(T(t)),e.createElement(e.Fragment,null,e.createElement(S,{className:m.section},e.createElement("form",{onSubmit:a(s)},Object.entries(M).map(([i,n],l,C)=>e.createElement("div",{key:l},e.createElement(L,{name:i,label:n.label,description:n.description,control:c,disabled:r,errors:o[i]}),l<C.length-1&&e.createElement(E,null))))),e.createElement("div",{className:m.section},e.createElement(K,{onCancel:d,saveButtonText:"Save",isLoading:!1,onSave:a(s),disableSave:p})))};export{R as KubernetesConfigurator};
|
|
2
|
+
//# sourceMappingURL=KubernetesConfigurator.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{asArray as u}from"@spotify/backstage-plugin-soundcheck-common";import{mapToCacheConfig as d,mapCacheConfigToHumanDurationOrBoolean as f}from"../../../CacheConfig/utils.esm.js";import"../../../CacheConfig/CacheConfigComponent.esm.js";import{mapCatalogFilterToFilters as b,mapFiltersToCatalogFilter as m}from"../../../Filter/utils.esm.js";import"../../../Filter/FilterComponent.esm.js";import"../../../Frequency/types.esm.js";import{mapHumanDurationOrCronToFrequency as y,mapFrequencyToHumanDurationOrCron as C}from"../../../Frequency/util.esm.js";import"../../../Frequency/FrequencyComponent.esm.js";import{defaultCollectorOption as s}from"../Common/CollectorOption.esm.js";const l={pods:{type:"k8s_pods",label:"Pods",description:"Collects details about kubernetes pods associated with an entity."},services:{type:"k8s_services",label:"Services",description:"Collects details about kubernetes services associated with an entity."},deployments:{type:"k8s_deployments",label:"Deployments",description:"Collects details about kubernetes deployments associated with an entity."},hpas:{type:"k8s_hpas",label:"Horizontal Pod Autoscalers",description:"Collects details about kubernetes horizontal pod autoscalers associated with an entity."},statefulSets:{type:"k8s_stateful_sets",label:"Stateful Sets",description:"Collects details about kubernetes stateful sets associated with an entity."},podDisruptionBudgets:{type:"k8s_pod_disruption_budgets",label:"Pod Disruption Budgets",description:"Collects details about kubernetes pod disruption budgets associated with an entity."},ingresses:{type:"k8s_ingresses",label:"Ingresses",description:"Collects details about kubernetes ingresses associated with an entity."}},c=()=>({pods:s(),services:s(),deployments:s(),hpas:s(),statefulSets:s(),podDisruptionBudgets:s(),ingresses:s()});function g(e){if(Object.values(e).some(t=>t.enabled)){const t={},i=[];return t.collects=i,Object.entries(e).forEach(([o,n])=>{if(n.enabled){const{cacheConfig:a,frequency:r,filters:p}=n;i.push({type:l[o].type,frequency:C(r),filter:m(p),cache:f(a)})}}),t}return{collects:[]}}function h(e){const t=c();if(e){const i=e.collects;if(i)for(const o of u(i)){const n=o.type;Object.entries(l).map(([a,r])=>{n===r.type&&(t[a]={enabled:!0,frequency:y(o.frequency??e.frequency),filters:b(o.filter??e.filter),cacheConfig:d(o.cache??e.cache)})})}}return t}export{l as K8S_COLLECTOR_FIELDS,c as defaultKubernetesConfig,h as mapConfigToKubernetesCollectorConfig,g as mapKubernetesCollectorConfigToConfig};
|
|
2
|
+
//# sourceMappingURL=utils.esm.js.map
|
package/dist/components/CollectorPage/Configurators/PagerDuty/IncidentsFactDetailsComponent.esm.js
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{makeStyles as c,Typography as i,TextField as p}from"@material-ui/core";import e from"react";import{Controller as s}from"react-hook-form";import{StatusesComponent as d}from"./StatusesComponent.esm.js";import{PAGERDUTY_COLLECTOR_FIELDS as f}from"./utils.esm.js";const T=c(t=>({root:{paddingTop:t.spacing(1)},textInput:{marginTop:0,width:"255px"},helperText:{marginLeft:0}})),x=({name:t,disabled:l,control:m,errors:r})=>{const n=T(),{factName:o}=f.factDetails;return e.createElement("div",{className:n.root},e.createElement(i,{variant:"subtitle2"},o.name),e.createElement(s,{name:`${t}.factName`,control:m,render:({field:a})=>e.createElement(p,{...a,type:"text",variant:"outlined",margin:"dense",placeholder:o.placeholder,className:n.textInput,disabled:l,error:!!r?.factName,helperText:r?.factName?.message??o.helperText,FormHelperTextProps:{className:n.helperText}})}),e.createElement(s,{name:`${t}.statuses`,control:m,render:({field:a})=>e.createElement(d,{disabled:l,value:a.value,onChange:a.onChange,errors:r?.statuses})}))};export{x as IncidentsFactDetailsComponent};
|
|
2
|
+
//# sourceMappingURL=IncidentsFactDetailsComponent.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{zodResolver as E}from"@hookform/resolvers/zod";import{makeStyles as v,Paper as S,Divider as m}from"@material-ui/core";import e from"react";import{useForm 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"../../../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as y}from"../../../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as D}from"../../../../hooks/useNavigateBack.esm.js";import{useUpdateCollectorConfig as P}from"../../../../hooks/collectors/useUpdateCollectorConfig.esm.js";import{integrationsPageRouteRef as T}from"../../../../routes.esm.js";import{FooterButtons as L}from"../../../FooterButtons/FooterButtons.esm.js";import"../../../SoundcheckHeader/SoundcheckHeader.esm.js";import"../../../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as h}from"../../../SoundcheckHeader/useHeader.esm.js";import{FactCollectionConfig as i}from"../Common/FactCollectionConfig.esm.js";import{collectorHeaderContent as w,confirmationModalContent as R}from"../Common/utils.esm.js";import{IncidentsFactDetailsComponent as F}from"./IncidentsFactDetailsComponent.esm.js";import{mapConfigToPagerDutyCollectorConfig as I,defaultPagerDutyConfig as N,SERVICE_COLLECTOR_TYPE as O,STANDARDS_COLLECTOR_TYPE as _,INCIDENTS_COLLECTOR_TYPE as k,incidentsCollectorConfig as B,mapPagerDutyCollectorConfigToConfig as Y}from"./utils.esm.js";import{pagerDutyCollectorFormSchema as A}from"./validation.esm.js";const M=v(t=>({spacer:{height:t.spacing(8),width:"100%"},section:{marginBottom:t.spacing(2)}})),x=({disabled:t,selectedCollector:r})=>{const{control:a,formState:{errors:o},handleSubmit:n}=b({defaultValues:r?I(r.config):N(),mode:"onChange",resolver:E(A)}),l=M(),c=!!o.service||!!o.standards||!!o.incidents,{mutateAsync:d}=P(),[p,C]=D(T),{showModal:f}=y(),s=async u=>{if(!await f(R(r)))return;const g=Y(u);await d({collectorId:r.id,config:g})&&C()};return h(w(r)),e.createElement(e.Fragment,null,e.createElement(S,{className:l.section},e.createElement("form",{onSubmit:n(s)},e.createElement(i,{name:O.toLowerCase(),label:"Service",description:"Collects details about PagerDuty service linked to an entity.",control:a,disabled:t,errors:o.service}),e.createElement(m,null),e.createElement(i,{name:_.toLowerCase(),label:"Standards",description:"Collects details about standards applied to a PagerDuty service linked to an entity.",control:a,disabled:t,errors:o.standards}),e.createElement(m,null),e.createElement(i,{name:k.toLowerCase(),label:"Incidents",description:"Collects details about incidents associated with a PagerDuty service linked to an entity.",control:a,disabled:t,errors:o.incidents,FactDetailsComponent:F,multipleCollectors:{enable:!0,defaultConfig:B()}}))),e.createElement("div",{className:l.section},e.createElement(L,{onCancel:p,saveButtonText:"Save",isLoading:!1,onSave:n(s),disableSave:c})))};export{x as PagerDutyConfigurator};
|
|
2
|
+
//# sourceMappingURL=PagerDutyConfigurator.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{makeStyles as u,Typography as l,FormControl as d,FormGroup as g,FormControlLabel as T,Checkbox as C,FormHelperText as b}from"@material-ui/core";import e,{useState as S,useEffect as f}from"react";import{DEFAULT_INCIDENT_STATUSES as h,PAGERDUTY_COLLECTOR_FIELDS as v}from"./utils.esm.js";const k=u(a=>({caption:{marginTop:a.spacing(2),marginBottom:a.spacing(1)}})),y=({value:a,onChange:r,disabled:m,errors:c})=>{const s=k(),{statuses:o}=v.factDetails,[n,i]=S(a);f(()=>{r&&r(n)},[n,r]);const p=t=>{i({...n,[t.target.name]:t.target.checked})};return e.createElement("div",null,e.createElement("div",{className:s.caption},e.createElement(l,{variant:"subtitle2"},o.name),e.createElement(l,{variant:"caption",color:"textSecondary"},o.description)),e.createElement(d,{disabled:m,component:"fieldset",error:!!c?.message},e.createElement(g,null,Object.keys(h).map((t,E)=>e.createElement(T,{key:E,label:e.createElement(l,{variant:"subtitle2"},t),control:e.createElement(C,{checked:n[t],onChange:p,name:t})}))),e.createElement(b,null,c?.message??o.helperText)))};export{y as StatusesComponent};
|
|
2
|
+
//# sourceMappingURL=StatusesComponent.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{asArray as E}from"@spotify/backstage-plugin-soundcheck-common";import{mapToCacheConfig as f,mapCacheConfigToHumanDurationOrBoolean as u}from"../../../CacheConfig/utils.esm.js";import"../../../CacheConfig/CacheConfigComponent.esm.js";import{mapCatalogFilterToFilters as d,mapFiltersToCatalogFilter as g}from"../../../Filter/utils.esm.js";import"../../../Filter/FilterComponent.esm.js";import"../../../Frequency/types.esm.js";import{mapHumanDurationOrCronToFrequency as m,mapFrequencyToHumanDurationOrCron as C}from"../../../Frequency/util.esm.js";import"../../../Frequency/FrequencyComponent.esm.js";import{defaultBaseCollectorOption as O,defaultCollectorOption as y}from"../Common/CollectorOption.esm.js";const p="Service",h="Standards",l="Incidents",T={triggered:!0,acknowledged:!0,resolved:!0},N={factDetails:{factName:{name:"Fact Name",helperText:"Fact name must be unique",placeholder:"Fact Name"},statuses:{name:"Statuses",description:"Return only incidents with the given statuses",helperText:"Select at least one status"}}},q=(t,a)=>({...O(),factDetails:{factName:t??"",statuses:{triggered:a?.triggered??!1,acknowledged:a?.acknowledged??!1,resolved:a?.resolved??!1}}}),D=()=>({service:y(),standards:y(),incidents:{enabled:!1,collectors:[q(l.toLowerCase(),T)]}});function b(t){const{service:a,standards:o,incidents:n}=t;if(a.enabled||o.enabled||n.enabled){const s={},r=[];if(s.collects=r,a.enabled){const{cacheConfig:c,frequency:e,filters:i}=a;r.push({type:p,frequency:C(e),filter:g(i),cache:u(c)})}if(o.enabled){const{cacheConfig:c,frequency:e,filters:i}=o;r.push({type:h,frequency:C(e),filter:g(i),cache:u(c)})}return n.enabled&&n.collectors.forEach(c=>{r.push({factName:c.factDetails.factName,type:l,statuses:Object.entries(c.factDetails.statuses).filter(([e,i])=>i).map(([e,i])=>e),frequency:C(c.frequency),filter:g(c.filters),cache:u(c.cacheConfig)})}),s}return{collects:[]}}function S(t){const a=D();if(t){const o=t.collects;if(o){const n=E(o),s=n.find(e=>e.type===p);s&&(a.service={enabled:!0,frequency:m(s.frequency??t.frequency),filters:d(s.filter??t.filter),cacheConfig:f(s.cache??t.cache)});const r=n.find(e=>e.type===h);r&&(a.standards={enabled:!0,frequency:m(r.frequency??t.frequency),filters:d(r.filter??t.filter),cacheConfig:f(r.cache??t.cache)});const c=n.filter(e=>e.type===l);c.length&&(a.incidents={enabled:!0,collectors:c.map(e=>({factDetails:{factName:e.factName??l,statuses:{triggered:e.statuses?.length?e.statuses.includes("triggered"):!0,acknowledged:e.statuses?.length?e.statuses.includes("acknowledged"):!0,resolved:e.statuses?.length?e.statuses.includes("resolved"):!0}},frequency:m(e.frequency??t.frequency),filters:d(e.filter??t.filter),cacheConfig:f(e.cache??t.cache)}))})}}return a}export{T as DEFAULT_INCIDENT_STATUSES,l as INCIDENTS_COLLECTOR_TYPE,N as PAGERDUTY_COLLECTOR_FIELDS,p as SERVICE_COLLECTOR_TYPE,h as STANDARDS_COLLECTOR_TYPE,D as defaultPagerDutyConfig,q as incidentsCollectorConfig,S as mapConfigToPagerDutyCollectorConfig,b as mapPagerDutyCollectorConfigToConfig};
|
|
2
|
+
//# sourceMappingURL=utils.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{validNameRegex as f}from"@spotify/backstage-plugin-soundcheck-common";import{z as e}from"zod";import{FIELD_IS_REQUIRED_MSG as S}from"../../../../utils/validation.esm.js";import{BaseCollectorSchema as _,CollectorOptionSchema as r}from"../Common/CollectorOption.esm.js";const i="Fact name is not unique",n="The field contains forbidden characters",l="Max 100 characters",d="At least one status must be selected",g=_.extend({factDetails:e.strictObject({factName:e.string().min(1,S).max(100,l).regex(f,n),statuses:e.strictObject({triggered:e.boolean(),acknowledged:e.boolean(),resolved:e.boolean()}).refine(t=>t.triggered||t.acknowledged||t.resolved,{message:d})})}).strict(),E=e.strictObject({enabled:e.boolean(),collectors:e.array(g).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"]})})})}),b=e.strictObject({service:r,standards:r,incidents:E});export{i as FACT_NAME_IS_NOT_UNIQUE_MSG,n as INVALID_CHARACTERS_MSG,l as MAX_100_CHARACTERS_MSG,d as NO_SELECTED_STATUSES,b as pagerDutyCollectorFormSchema};
|
|
2
|
+
//# sourceMappingURL=validation.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{makeStyles as b,Box as S,Typography as o,Grid as i,TextField as f,IconButton as h}from"@material-ui/core";import y from"@material-ui/icons/Add";import C from"@material-ui/icons/Remove";import e from"react";import{useFieldArray as F,Controller as x}from"react-hook-form";import{FactDetailsComponent as v}from"./FactDetailsComponent.esm.js";import{DEFAULT_EXISTS_FACT_DATA as I,SCM_COLLECTOR_FIELDS as D}from"./utils.esm.js";const P=b(a=>({labelInput:{marginTop:0,width:"255px"},filePathInput:{marginTop:0,width:"420px"},caption:{margin:a.spacing(2,0)},helperText:{marginLeft:0}})),A=({name:a,disabled:r,control:m,errors:n})=>{const l=P(),{filePath:s,label:p,exists:d}=D.factDetails,{fields:E,insert:T,remove:u}=F({control:m,name:`${a}.data`});return e.createElement(S,null,e.createElement(v,{name:a,control:m,disabled:r,errors:n}),e.createElement("div",{className:l.caption},e.createElement(o,{variant:"subtitle2"},d.filesSection.name),e.createElement(o,{variant:"caption",color:"textSecondary"},d.filesSection.description)),e.createElement(i,{container:!0,spacing:0,direction:"column"},E.map((g,t)=>e.createElement(i,{item:!0,container:!0,alignItems:"center",spacing:2,key:g.id},e.createElement(i,{item:!0},e.createElement(o,{variant:"subtitle2"},p.name),e.createElement(x,{name:`${a}.data.${t}.name`,control:m,render:({field:c})=>e.createElement(f,{...c,type:"text",variant:"outlined",margin:"dense",placeholder:p.placeholder,className:l.labelInput,disabled:r,error:!!n?.data?.[t]?.name,helperText:n?.data?.[t]?.name?.message??" ",FormHelperTextProps:{className:l.helperText}})})),e.createElement(i,{item:!0},e.createElement(o,{variant:"subtitle2"},s.name),e.createElement(x,{name:`${a}.data.${t}.path`,control:m,render:({field:c})=>e.createElement(f,{...c,type:"text",variant:"outlined",margin:"dense",placeholder:s.placeholder,className:l.filePathInput,disabled:r,error:!!n?.data?.[t]?.path,helperText:n?.data?.[t]?.path?.message??" ",FormHelperTextProps:{className:l.helperText}})})),e.createElement(i,{item:!0},e.createElement(h,{onClick:()=>u(t),disabled:r||E.length===1},e.createElement(C,{fontSize:"small"})),e.createElement(h,{onClick:()=>T(t+1,I),disabled:r},e.createElement(y,{fontSize:"small"})))))))};export{A as ExistsFactDetailsComponent};
|
|
2
|
+
//# sourceMappingURL=ExistsFactDetailsComponent.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{makeStyles as T,Box as $,Typography as u,Divider as B,Grid as s,Tabs as L,Tab as d,Button as C}from"@material-ui/core";import v from"@material-ui/icons/Add";import O from"@material-ui/icons/Remove";import e,{useState as R}from"react";import{useFieldArray as S,Controller as f}from"react-hook-form";import"lodash";import"../../../Frequency/types.esm.js";import"../../../Frequency/util.esm.js";import{FrequencyComponent as _}from"../../../Frequency/FrequencyComponent.esm.js";import{CacheConfigComponent as k}from"../../../CacheConfig/CacheConfigComponent.esm.js";import"@spotify/backstage-plugin-soundcheck-common";import{FilterComponent as A}from"../../../Filter/FilterComponent.esm.js";import{ExistsFactDetailsComponent as I}from"./ExistsFactDetailsComponent.esm.js";import{JsonFactDetailsComponent as q}from"./JsonFactDetailsComponent.esm.js";import{RegexFactDetailsComponent as z}from"./RegexFactDetailsComponent.esm.js";import{EXISTS_COLLECTOR_TYPE as P,REGEX_COLLECTOR_TYPE as Y,JSON_COLLECTOR_TYPE as G,defaultCollectorConfig as J}from"./utils.esm.js";const X=T(a=>({root:{padding:a.spacing(1,3)},collectorDivider:{marginTop:a.spacing(1)},collectorContainer:{display:"flex",alignItems:"flex-start",paddingBottom:a.spacing(2)},tabsContainer:{marginRight:16},tab:{height:"64px",textAlign:"left"},tabsContentContainer:{width:"100%",padding:a.spacing(1,1,2,1)},addCollectorButton:{margin:a.spacing(2,0)},collectorButtons:{paddingLeft:a.spacing(1)}})),j=({name:a,label:g,description:h,control:i,disabled:c,errors:m})=>{const n=X(),{fields:p,insert:y,remove:D}=S({control:i,name:`${a}.collectors`}),[o,E]=R(Array(p.length).fill(0)),x=(r,t,l)=>{E([...o.slice(0,l),t,...o.slice(l+1)])},b=r=>{y(r+1,J(a)),E([...o.slice(0,r+1),0,...o.slice(r+1)])},F=r=>{D(r),E([...o.slice(0,r),...o.slice(r+1)])};return e.createElement("div",{className:n.root},e.createElement($,{display:"flex",flexDirection:"column"},e.createElement(u,{variant:"body1",component:"span"},e.createElement("b",null,`${g}`)),e.createElement(u,{variant:"caption",color:"textSecondary",component:"p"},`${h}`)),e.createElement(e.Fragment,null,p.map((r,t)=>e.createElement("div",{key:r.id},t!==0&&e.createElement(B,{className:n.collectorDivider}),e.createElement(s,{container:!0,spacing:0,direction:"column",className:n.collectorContainer},e.createElement(s,{item:!0},e.createElement(L,{orientation:"horizontal",variant:"scrollable",value:o[t],onChange:(l,N)=>x(l,N,t),className:n.tabsContainer},e.createElement(d,{label:"Fact Details",className:n.tab}),e.createElement(d,{label:"Frequency",className:n.tab}),e.createElement(d,{label:"Filters",className:n.tab}),e.createElement(d,{label:"Caching",className:n.tab})),e.createElement("div",{className:n.tabsContentContainer},o[t]===0&&a===P&&e.createElement(I,{name:`${a}.collectors.${t}.factDetails`,control:i,disabled:c,errors:m?.collectors?.[t]?.factDetails}),o[t]===0&&a===Y&&e.createElement(z,{name:`${a}.collectors.${t}.factDetails`,control:i,disabled:c,errors:m?.collectors?.[t]?.factDetails}),o[t]===0&&a===G&&e.createElement(q,{name:`${a}.collectors.${t}.factDetails`,control:i,disabled:c,errors:m?.collectors?.[t]?.factDetails}),o[t]===1&&e.createElement(f,{name:`${a}.collectors.${t}.frequency`,control:i,render:({field:l})=>e.createElement(_,{disabled:c,value:l.value,onChange:l.onChange,errors:m?.collectors?.[t]?.frequency})}),o[t]===2&&e.createElement(f,{name:`${a}.collectors.${t}.filters`,control:i,render:({field:l})=>e.createElement(A,{disabled:c,value:l.value,onChange:l.onChange})}),o[t]===3&&e.createElement(f,{name:`${a}.collectors.${t}.cacheConfig`,control:i,render:({field:l})=>e.createElement(k,{disabled:c,value:l.value,onChange:l.onChange,errors:m?.collectors?.[t]?.cacheConfig})}))),e.createElement(s,{item:!0,container:!0,spacing:1,className:n.collectorButtons},e.createElement(s,{item:!0},e.createElement(C,{startIcon:e.createElement(O,null),onClick:()=>F(t),disabled:c,variant:"outlined",size:"small",color:"secondary"},"Remove")),e.createElement(s,{item:!0},e.createElement(C,{startIcon:e.createElement(v,null),onClick:()=>b(t),disabled:c,variant:"outlined",size:"small",color:"primary"},"Add ",g))))))),p.length===0&&e.createElement(C,{startIcon:e.createElement(v,null),onClick:()=>b(0),disabled:c,variant:"outlined",size:"small",color:"primary","data-testid":`${a}-add-first`,className:n.addCollectorButton},"Add"))};export{j as FactCollectionConfig};
|
|
2
|
+
//# sourceMappingURL=FactCollectionConfig.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{makeStyles as E,Grid as p,Typography as d,TextField as b,FormControlLabel as N,Checkbox as u}from"@material-ui/core";import e,{useState as C}from"react";import{useWatch as L,Controller as x}from"react-hook-form";import{SCM_COLLECTOR_FIELDS as F}from"./utils.esm.js";const S=E(r=>({root:{paddingTop:r.spacing(1)},factNameInput:{marginTop:0,width:"255px"},branchInput:{marginTop:0,width:"265px"},branchLabel:{height:"40px"},branchSection:{alignContent:"flex-end"},helperText:{marginLeft:0}})),y=({name:r,disabled:l,control:c,errors:n})=>{const a=S(),{factName:o,branch:m}=F.factDetails,g=L({control:c,name:`${r}.branch`}),[s,T]=C(g),f=(t,i)=>{const h=t.target.checked;T(h),h||i("")};return e.createElement(p,{container:!0,spacing:2,className:a.root},e.createElement(x,{name:`${r}.factName`,control:c,render:({field:t})=>e.createElement(p,{item:!0},e.createElement(d,{variant:"subtitle2"},o.name),e.createElement(b,{...t,type:"text",variant:"outlined",margin:"dense",placeholder:o.placeholder,className:a.factNameInput,disabled:l,error:!!n?.factName,helperText:n?.factName?.message??o.helperText,FormHelperTextProps:{className:a.helperText}}))}),e.createElement(x,{name:`${r}.branch`,control:c,render:({field:t})=>e.createElement(p,{item:!0,className:a.branchSection},e.createElement(N,{control:e.createElement(u,{checked:s,onChange:i=>f(i,t.onChange)}),disabled:l,label:e.createElement(d,{variant:"subtitle2"},m.name),className:a.branchLabel}),e.createElement(b,{...t,type:"text",variant:"outlined",margin:"dense",placeholder:m.placeholder,className:a.branchInput,disabled:l||!s,error:!!n?.branch,helperText:n?.branch?.message??m.helperText,FormHelperTextProps:{className:a.helperText}}))}))};export{y as FactDetailsComponent};
|
|
2
|
+
//# sourceMappingURL=FactDetailsComponent.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{makeStyles as b,Box as v,Typography as o,TextField as p,Grid as i,MenuItem as N,IconButton as f}from"@material-ui/core";import S from"@material-ui/icons/Add";import F from"@material-ui/icons/Remove";import e from"react";import{useFieldArray as I,Controller as d}from"react-hook-form";import{FactDetailsComponent as j}from"./FactDetailsComponent.esm.js";import{ELEMENT_TYPES as C,ARRAY_ELEMENT_TYPES as $,DEFAULT_JSON_FACT_DATA as _,SCM_COLLECTOR_FIELDS as A}from"./utils.esm.js";const L=b(r=>({filePathInput:{marginTop:0,width:"690px"},labelInput:{marginTop:0,width:"255px"},jsonPathInput:{marginTop:0,width:"300px"},typeInput:{marginTop:0,width:"150px"},helperText:{marginLeft:0},caption:{margin:r.spacing(2,0)},filePathSection:{marginTop:r.spacing(1)}})),D=({name:r,disabled:l,control:m,errors:n})=>{const a=L(),{filePath:E,label:x,type:u,json:c}=A.factDetails,{fields:g,insert:P,remove:y}=I({control:m,name:`${r}.data`});return e.createElement(v,null,e.createElement(j,{name:r,control:m,disabled:l,errors:n}),e.createElement("div",{className:a.filePathSection},e.createElement(o,{variant:"subtitle2"},E.name),e.createElement(d,{name:`${r}.path`,control:m,render:({field:h})=>e.createElement(p,{...h,type:"text",variant:"outlined",margin:"dense",placeholder:E.placeholder,className:a.filePathInput,disabled:l,error:!!n?.path,helperText:n?.path?.message??E.helperText,FormHelperTextProps:{className:a.helperText}})})),e.createElement("div",{className:a.caption},e.createElement(o,{variant:"subtitle2"},c.jsonElementsSection.name),e.createElement(o,{variant:"caption",color:"textSecondary"},c.jsonElementsSection.description)),e.createElement(i,{container:!0,spacing:0,direction:"column"},g.map((h,t)=>e.createElement(i,{item:!0,container:!0,alignItems:"center",spacing:2,key:h.id},e.createElement(i,{item:!0},e.createElement(o,{variant:"subtitle2"},x.name),e.createElement(d,{name:`${r}.data.${t}.name`,control:m,render:({field:s})=>e.createElement(p,{...s,type:"text",variant:"outlined",margin:"dense",placeholder:x.placeholder,className:a.labelInput,disabled:l,error:!!n?.data?.[t]?.name,helperText:n?.data?.[t]?.name?.message??" ",FormHelperTextProps:{className:a.helperText}})})),e.createElement(i,{item:!0},e.createElement(o,{variant:"subtitle2"},c.jsonPath.name),e.createElement(d,{name:`${r}.data.${t}.jsonPath`,control:m,render:({field:s})=>e.createElement(p,{...s,type:"text",variant:"outlined",margin:"dense",placeholder:c.jsonPath.placeholder,className:a.jsonPathInput,disabled:l,error:!!n?.data?.[t]?.jsonPath,helperText:n?.data?.[t]?.jsonPath?.message??" ",FormHelperTextProps:{className:a.helperText}})})),e.createElement(i,{item:!0},e.createElement(o,{variant:"subtitle2"},u.name),e.createElement(d,{name:`${r}.data.${t}.type`,control:m,render:({field:s})=>e.createElement(p,{...s,select:!0,type:"text",variant:"outlined",margin:"dense",placeholder:u.placeholder,className:a.typeInput,disabled:l,error:!!n?.data?.[t]?.type,helperText:n?.data?.[t]?.type?.message??" ",FormHelperTextProps:{className:a.helperText}},[...C,...$].map(T=>e.createElement(N,{key:T,value:T},T)))})),e.createElement(i,{item:!0},e.createElement(f,{onClick:()=>y(t),disabled:l||g.length===1},e.createElement(F,{fontSize:"small"})),e.createElement(f,{onClick:()=>P(t+1,_),disabled:l},e.createElement(S,{fontSize:"small"})))))))};export{D as JsonFactDetailsComponent};
|
|
2
|
+
//# sourceMappingURL=JsonFactDetailsComponent.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{makeStyles as D,Box as S,Grid as c,Typography as r,TextField as s,RadioGroup as L,FormControlLabel as C,Radio as N,MenuItem as P,IconButton as I}from"@material-ui/core";import _ from"@material-ui/icons/Add";import k from"@material-ui/icons/Remove";import e,{useState as A}from"react";import{useFieldArray as R,Controller as d}from"react-hook-form";import{FactDetailsComponent as w}from"./FactDetailsComponent.esm.js";import{ELEMENT_TYPES as H,DEFAULT_REGEX_FACT_DATA as M,SCM_COLLECTOR_FIELDS as z}from"./utils.esm.js";const E="CaptureGroupsMode",u="TrueFalseMode",B=D(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)}})),O=({name:l,disabled:m,control:p,errors:n})=>{const a=B(),{label:y,type:v,filePath:x,regex:o}=z.factDetails,{fields:g,insert:f,remove:F}=R({control:p,name:`${l}.data`}),[h,$]=A(g.length?E:u),G=i=>{const t=i.target.value;$(t),t===E?f(0,M):t===u&&F()};return e.createElement(S,null,e.createElement(w,{name:l,control:p,disabled:m,errors:n}),e.createElement(c,{container:!0,spacing:1,direction:"column",className:a.regexSection},e.createElement(c,{item:!0},e.createElement(r,{variant:"subtitle2"},x.name),e.createElement(d,{name:`${l}.path`,control:p,render:({field:i})=>e.createElement(s,{...i,type:"text",variant:"outlined",margin:"dense",placeholder:x.placeholder,className:a.textInput,disabled:m,error:!!n?.path,helperText:n?.path?.message??x.helperText,FormHelperTextProps:{className:a.helperText}})})),e.createElement(c,{item:!0},e.createElement(r,{variant:"subtitle2"},o.regex.name),e.createElement(d,{name:`${l}.regex`,control:p,render:({field:i})=>e.createElement(s,{...i,type:"text",variant:"outlined",margin:"dense",placeholder:o.regex.placeholder,className:a.textInput,disabled:m,error:!!n?.regex,helperText:n?.regex?.message??o.regex.helperText,FormHelperTextProps:{className:a.helperText}})}))),e.createElement(L,{row:!0,name:"regexMode",value:h,onChange:G},e.createElement(C,{value:u,control:e.createElement(N,null),label:e.createElement(r,{variant:"subtitle2"},o.trueFalseMode.label)}),e.createElement(C,{value:E,control:e.createElement(N,null),label:e.createElement(r,{variant:"subtitle2"},o.captureGroupsMode.label)})),h===u&&e.createElement(r,{variant:"caption",color:"textSecondary"},o.trueFalseMode.description),h===E&&e.createElement(S,null,e.createElement(r,{variant:"caption",color:"textSecondary"},o.captureGroupsMode.description),e.createElement("div",{className:a.caption},e.createElement(r,{variant:"subtitle2"},o.captureGroupsSection.name),e.createElement(r,{variant:"caption",color:"textSecondary"},o.captureGroupsSection.description)),e.createElement(c,{container:!0,spacing:0,direction:"column"},g.map((i,t)=>e.createElement(c,{item:!0,container:!0,alignItems:"center",spacing:2,key:i.id},e.createElement(c,{item:!0},e.createElement(r,{variant:"subtitle2"},y.name),e.createElement(d,{name:`${l}.data.${t}.name`,control:p,render:({field:T})=>e.createElement(s,{...T,type:"text",variant:"outlined",margin:"dense",placeholder:y.placeholder,className:a.labelInput,disabled:m,error:!!n?.data?.[t]?.name,helperText:n?.data?.[t]?.name?.message??" ",FormHelperTextProps:{className:a.helperText}})})),e.createElement(c,{item:!0},e.createElement(r,{variant:"subtitle2"},v.name),e.createElement(d,{name:`${l}.data.${t}.type`,control:p,render:({field:T})=>e.createElement(s,{...T,select:!0,type:"text",variant:"outlined",margin:"dense",placeholder:v.placeholder,className:a.typeInput,disabled:m,error:!!n?.data?.[t]?.type,helperText:n?.data?.[t]?.type?.message??" ",FormHelperTextProps:{className:a.helperText}},H.map(b=>e.createElement(P,{key:b,value:b},b)))})),e.createElement(c,{item:!0},e.createElement(I,{onClick:()=>F(t),disabled:m||g.length===1},e.createElement(k,{fontSize:"small"})),e.createElement(I,{onClick:()=>f(t+1,M),disabled:m},e.createElement(_,{fontSize:"small"}))))))))};export{O as RegexFactDetailsComponent};
|
|
2
|
+
//# sourceMappingURL=RegexFactDetailsComponent.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{zodResolver as E}from"@hookform/resolvers/zod";import{makeStyles as S,Paper as O,Divider as l}from"@material-ui/core";import e from"react";import{useForm as L}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"../../../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as T}from"../../../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as x}from"../../../../hooks/useNavigateBack.esm.js";import{useUpdateCollectorConfig as b}from"../../../../hooks/collectors/useUpdateCollectorConfig.esm.js";import{integrationsPageRouteRef as h}from"../../../../routes.esm.js";import{FooterButtons as v}from"../../../FooterButtons/FooterButtons.esm.js";import"../../../SoundcheckHeader/SoundcheckHeader.esm.js";import"../../../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as y}from"../../../SoundcheckHeader/useHeader.esm.js";import{collectorHeaderContent as R,confirmationModalContent as _}from"../Common/utils.esm.js";import{FactCollectionConfig as n}from"./FactCollectionConfig.esm.js";import{mapConfigToScmCollectorConfig as N,DEFAULT_SCM_COLLECTOR_CONFIG as F,EXISTS_COLLECTOR_TYPE as M,REGEX_COLLECTOR_TYPE as w,JSON_COLLECTOR_TYPE as P,mapScmCollectorConfigToConfig as Y}from"./utils.esm.js";import{scmCollectorFormSchema as A}from"./validation.esm.js";const B=S(o=>({spacer:{height:o.spacing(8),width:"100%"},section:{marginBottom:o.spacing(2)}})),J=({disabled:o,selectedCollector:r})=>{const{control:i,formState:{errors:t},handleSubmit:a}=L({defaultValues:r?N(r.config):F,mode:"onChange",resolver:E(A)}),m=B(),c=!!t.exists||!!t.regex||!!t.json,{mutateAsync:p}=b(),[f,d]=x(h),{showModal:C}=T(),s=async g=>{if(!await C(_(r)))return;const u=Y(g);await p({collectorId:r.id,config:u})&&d()};return y(R(r)),e.createElement(e.Fragment,null,e.createElement(O,{className:m.section},e.createElement("form",{onSubmit:a(s)},e.createElement(n,{name:M,label:"Exists",description:"Collects information on the existence of files within an entity's repository.",control:i,disabled:o,errors:t.exists}),e.createElement(l,null),e.createElement(n,{name:w,label:"Regex",description:"Executes regular expressions against a specified file in an entity's repository and collects its capture groups.",control:i,disabled:o,errors:t.regex}),e.createElement(l,null),e.createElement(n,{name:P,label:"JSON / YAML",description:"Collects data from a JSON/YAML file at specified JSON paths in an entity's repository.",control:i,disabled:o,errors:t.json}))),e.createElement("div",{className:m.section},e.createElement(v,{onCancel:f,saveButtonText:"Save",isLoading:!1,onSave:a(s),disableSave:c,noMargin:!0})))};export{J as ScmConfigurator};
|
|
2
|
+
//# sourceMappingURL=ScmConfigurator.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{asArray as D}from"@spotify/backstage-plugin-soundcheck-common";import{mapToCacheConfig as h,mapCacheConfigToHumanDurationOrBoolean as p,defaultCacheConfig as F}from"../../../CacheConfig/utils.esm.js";import"../../../CacheConfig/CacheConfigComponent.esm.js";import{mapCatalogFilterToFilters as m,mapFiltersToCatalogFilter as u}from"../../../Filter/utils.esm.js";import"../../../Filter/FilterComponent.esm.js";import{emptyFilters as N}from"../../../Filter/types.esm.js";import"../../../Frequency/types.esm.js";import{mapHumanDurationOrCronToFrequency as d,mapFrequencyToHumanDurationOrCron as g,defaultFrequency as _}from"../../../Frequency/util.esm.js";import"../../../Frequency/FrequencyComponent.esm.js";const y={exists:{collectors:[]},regex:{collectors:[]},json:{collectors:[]}},C={name:"",path:""},L={name:"",type:"string"},E={name:"",jsonPath:"",type:"string"},q={factName:"",data:[C]},O={factName:"",path:"",regex:"",data:[]},A={factName:"",path:"",data:[E]},S={factDetails:{factName:{name:"Fact Name",helperText:"Fact name must be unique",placeholder:"Fact Name"},branch:{name:"Custom Branch:",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",helperText:"Regex to match",placeholder:"Example: ^apiVersion: backstage.io/(.+)"},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."},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"}}}},i="exists",s="regex",f="json",T=["string","number","integer","boolean","object"],x=T.map(b),P=t=>{let c;switch(t){case i:c=q;break;case s:c=O;break;case f:c=A;break;default:throw Error(`Unsupported fact type ${t}`)}return{factDetails:c,filters:{...N(),selectedKinds:["Component"]},frequency:_(),cacheConfig:F()}};function R(t){const{exists:c,regex:o,json:e}=t;if(c.collectors.length||o.collectors.length||e.collectors.length){const r={},n=[];return r.collects=n,c.collectors.forEach(a=>{n.push({type:i,factName:a.factDetails.factName,branch:a.factDetails.branch?.length?a.factDetails.branch:void 0,data:a.factDetails.data,frequency:g(a.frequency),filter:u(a.filters),cache:p(a.cacheConfig)})}),o.collectors.forEach(a=>{n.push({type:s,factName:a.factDetails.factName,branch:a.factDetails.branch?.length?a.factDetails.branch:void 0,path:a.factDetails.path,regex:a.factDetails.regex,data:a.factDetails.data.length?a.factDetails.data:void 0,frequency:g(a.frequency),filter:u(a.filters),cache:p(a.cacheConfig)})}),e.collectors.forEach(a=>{n.push({type:f,factName:a.factDetails.factName,branch:a.factDetails.branch?.length?a.factDetails.branch:void 0,path:a.factDetails.path,data:a.factDetails.data.map(l=>x.includes(l.type)?{name:l.name,jsonPath:l.jsonPath,type:"array",items:{type:M(l.type)}}:l),frequency:g(a.frequency),filter:u(a.filters),cache:p(a.cacheConfig)})}),r}return[]}function j(t){const c=t?.collects;if(c){const o=D(c);return{exists:{collectors:o.filter(e=>e.type===i).map(e=>({factDetails:{factName:e.factName,branch:e.branch,data:e.data},frequency:d(e.frequency??t.frequency),filters:m(e.filter??t.filter),cacheConfig:h(e.cache)}))},regex:{collectors:o.filter(e=>e.type===s).map(e=>({factDetails:{factName:e.factName,branch:e.branch,path:e.path,regex:e.regex,data:e.data},frequency:d(e.frequency??t.frequency),filters:m(e.filter??t.filter),cacheConfig:h(e.cache)}))},json:{collectors:o.filter(e=>e.type===f).map(e=>({factDetails:{factName:e.factName,branch:e.branch,path:e.path,data:e.data.map(r=>r.type==="array"?{name:r.name,jsonPath:r.jsonPath,type:b(r.items.type)}:r)},frequency:d(e.frequency??t.frequency),filters:m(e.filter??t.filter),cacheConfig:h(e.cache)}))}}}return y}function b(t){return`array[${t}]`}function M(t){const c="array[";return t.substring(t.indexOf(c)+c.length,t.lastIndexOf("]"))}export{x as ARRAY_ELEMENT_TYPES,C as DEFAULT_EXISTS_FACT_DATA,E as DEFAULT_JSON_FACT_DATA,L as DEFAULT_REGEX_FACT_DATA,y as DEFAULT_SCM_COLLECTOR_CONFIG,T as ELEMENT_TYPES,i as EXISTS_COLLECTOR_TYPE,f as JSON_COLLECTOR_TYPE,s as REGEX_COLLECTOR_TYPE,S as SCM_COLLECTOR_FIELDS,P as defaultCollectorConfig,j as mapConfigToScmCollectorConfig,R as mapScmCollectorConfigToConfig};
|
|
2
|
+
//# sourceMappingURL=utils.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{validNameRegex as o}from"@spotify/backstage-plugin-soundcheck-common";import{z as e}from"zod";import{FIELD_IS_REQUIRED_MSG as a,FrequencySchema as h,FiltersSchema as p,CacheConfigSchema as u}from"../../../../utils/validation.esm.js";const n="Fact name is not unique",r="The field contains forbidden characters",i="Max 100 characters",x="Max 1000 characters",f=e.object({factName:e.string().min(1,a).max(100,i).regex(o,r),branch:e.string().optional()}),_=f.merge(e.object({data:e.array(e.strictObject({name:e.string().min(1,a).max(100,i).regex(o,r),path:e.string().min(1,a).max(1e3,x)}))})).strict(),j=f.merge(e.object({path:e.string().min(1,a),regex:e.string().min(1,a),data:e.array(e.strictObject({name:e.string().min(1,a).max(100,i).regex(o,r),type:e.string().min(1,a).max(100,i).regex(o,r).optional()})).optional()})).strict(),N=f.merge(e.object({path:e.string().min(1,a),data:e.array(e.strictObject({name:e.string().min(1,a).regex(o,r),jsonPath:e.string().min(1,a),type:e.string().min(1,a)}))})).strict(),g=s=>e.strictObject({collectors:e.array(e.strictObject({factDetails:s,frequency:h,filters:p,cacheConfig:u}))}),C=e.strictObject({exists:g(_),regex:g(j),json:g(N)}).superRefine((s,l)=>{const d=[...s.exists.collectors.map(t=>t.factDetails.factName),...s.regex.collectors.map(t=>t.factDetails.factName),...s.json.collectors.map(t=>t.factDetails.factName)],m=d.filter((t,c)=>d.indexOf(t)!==c);m.length&&(s.exists.collectors.forEach((t,c)=>{m.includes(t.factDetails.factName)&&l.addIssue({code:e.ZodIssueCode.custom,message:n,path:["exists","collectors",c,"factDetails","factName"]})}),s.regex.collectors.forEach((t,c)=>{m.includes(t.factDetails.factName)&&l.addIssue({code:e.ZodIssueCode.custom,message:n,path:["regex","collectors",c,"factDetails","factName"]})}),s.json.collectors.forEach((t,c)=>{m.includes(t.factDetails.factName)&&l.addIssue({code:e.ZodIssueCode.custom,message:n,path:["json","collectors",c,"factDetails","factName"]})}))});export{n as FACT_NAME_IS_NOT_UNIQUE_MSG,r as INVALID_CHARACTERS_MSG,x as MAX_1000_CHARACTERS_MSG,i as MAX_100_CHARACTERS_MSG,C as scmCollectorFormSchema};
|
|
2
|
+
//# sourceMappingURL=validation.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{makeStyles as c,Typography as i,TextField as p}from"@material-ui/core";import e from"react";import{Controller as s}from"react-hook-form";import{MetricsInput as d}from"./MetricsInput.esm.js";import{SONARQUBE_COLLECTOR_FIELDS as f}from"./utils.esm.js";const h=c(t=>({root:{paddingTop:t.spacing(1)},textInput:{marginTop:0,width:"500px"},helperText:{marginLeft:0}})),x=({name:t,disabled:n,control:m,errors:a})=>{const o=h(),{factName:l}=f.factDetails;return e.createElement("div",{className:o.root},e.createElement(i,{variant:"subtitle2"},l.name),e.createElement(s,{name:`${t}.factName`,control:m,render:({field:r})=>e.createElement(p,{...r,type:"text",variant:"outlined",margin:"dense",placeholder:l.placeholder,className:o.textInput,disabled:n,error:!!a?.factName,helperText:a?.factName?.message??l.helperText,FormHelperTextProps:{className:o.helperText}})}),e.createElement(s,{name:`${t}.metrics`,control:m,render:({field:r})=>e.createElement(d,{disabled:n,value:r.value,onChange:r.onChange,errors:a?.metrics})}))};export{x as MeasuresFactDetailsInput};
|
|
2
|
+
//# sourceMappingURL=MeasuresFactDetailsInput.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{makeStyles as x,Typography as T,Grid as o,Chip as v,TextField as y}from"@material-ui/core";import t,{useState as u,useEffect as C}from"react";import{SONARQUBE_COLLECTOR_FIELDS as N}from"./utils.esm.js";const b=x(r=>({caption:{marginTop:r.spacing(2),marginBottom:r.spacing(1)},metricsInput:{width:"500px"},metricChips:{marginBottom:r.spacing(1)},helperText:{marginLeft:0}})),I=({value:r,onChange:l,disabled:p,errors:d})=>{const i=b(),{metrics:n}=N.factDetails,[a,g]=u(r),[m,h]=u("");C(()=>{l&&l(a)},[a,l]);const E=e=>{e.key==="Enter"&&(a.includes(m.trim())||g([...a,m]),h(""))},f=(e,s)=>{g(a.filter(c=>c!==s))};return t.createElement("div",null,t.createElement("div",{className:i.caption},t.createElement(T,{variant:"subtitle2"},n.name)),t.createElement(o,{container:!0,direction:"column",spacing:0,className:i.metricsInput},t.createElement(o,{item:!0},a.map((e,s)=>t.createElement(v,{key:`${e}-${s}`,label:e,disabled:p,size:"small",onDelete:c=>f(c,e),className:i.metricChips}))),t.createElement(o,{item:!0},t.createElement(y,{type:"text",variant:"outlined",margin:"dense",placeholder:n.placeholder,className:i.metricsInput,disabled:p,error:!!d,fullWidth:!0,value:m,onChange:e=>h(e.target.value),onKeyDown:E,helperText:d?.message??n.helperText,FormHelperTextProps:{className:i.helperText}}))))};export{I as MetricsInput};
|
|
2
|
+
//# sourceMappingURL=MetricsInput.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{zodResolver as b}from"@hookform/resolvers/zod";import{makeStyles as S,Paper as j,Divider as s}from"@material-ui/core";import e from"react";import{useForm as E}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"../../../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as h}from"../../../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as v}from"../../../../hooks/useNavigateBack.esm.js";import{useUpdateCollectorConfig as Q}from"../../../../hooks/collectors/useUpdateCollectorConfig.esm.js";import{integrationsPageRouteRef as y}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 T}from"../../../SoundcheckHeader/useHeader.esm.js";import{FactCollectionConfig as n}from"../Common/FactCollectionConfig.esm.js";import{collectorHeaderContent as k,confirmationModalContent as w}from"../Common/utils.esm.js";import{MeasuresFactDetailsInput as M}from"./MeasuresFactDetailsInput.esm.js";import{mapConfigToSonarQubeCollectorConfig as B,defaultSonarQubeConfig as N,measuresCollectorConfig as P,mapSonarQubeCollectorConfigToConfig as D}from"./utils.esm.js";import{sonarQubeCollectorFormSchema as I}from"./validation.esm.js";const R=S(t=>({spacer:{height:t.spacing(8),width:"100%"},section:{marginBottom:t.spacing(2)}})),x=({disabled:t,selectedCollector:r})=>{const{control:a,formState:{errors:o},handleSubmit:i}=E({defaultValues:r?B(r.config):N(),mode:"onChange",resolver:b(I)}),l=R(),c=!!o.projects||!!o.projectTags||!!o.issues||!!o.measures,{mutateAsync:p}=Q(),[u,d]=v(y),{showModal:f}=h(),m=async g=>{if(!await f(w(r)))return;const C=D(g);await p({collectorId:r.id,config:C})&&d()};return T(k(r)),e.createElement(e.Fragment,null,e.createElement(j,{className:l.section},e.createElement("form",{onSubmit:i(m)},e.createElement(n,{name:"projects",label:"Projects",description:"Collects details about SonarQube project linked to an entity.",control:a,disabled:t,errors:o.projects}),e.createElement(s,null),e.createElement(n,{name:"projectTags",label:"Project Tags",description:"Collects details about tags set on a SonarQube project linked to an entity.",control:a,disabled:t,errors:o.projectTags}),e.createElement(s,null),e.createElement(n,{name:"issues",label:"Issues",description:"Collects details about issues associated with a SonarQube project linked to an entity.",control:a,disabled:t,errors:o.issues}),e.createElement(s,null),e.createElement(n,{name:"measures",label:"Measures",description:"Collects details about measures associated with a SonarQube project linked to an entity.",control:a,disabled:t,errors:o.measures,FactDetailsComponent:M,multipleCollectors:{enable:!0,defaultConfig:P()}}))),e.createElement("div",{className:l.section},e.createElement(F,{onCancel:u,saveButtonText:"Save",isLoading:!1,onSave:i(m),disableSave:c})))};export{x as SonarQubeConfigurator};
|
|
2
|
+
//# sourceMappingURL=SonarQubeConfigurator.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{asArray as E}from"@spotify/backstage-plugin-soundcheck-common";import{mapToCacheConfig as u,mapCacheConfigToHumanDurationOrBoolean as m}from"../../../CacheConfig/utils.esm.js";import"../../../CacheConfig/CacheConfigComponent.esm.js";import{mapCatalogFilterToFilters as p,mapFiltersToCatalogFilter as C}from"../../../Filter/utils.esm.js";import"../../../Filter/FilterComponent.esm.js";import"../../../Frequency/types.esm.js";import{mapHumanDurationOrCronToFrequency as h,mapFrequencyToHumanDurationOrCron as y}from"../../../Frequency/util.esm.js";import"../../../Frequency/FrequencyComponent.esm.js";import{defaultBaseCollectorOption as S,defaultCollectorOption as T}from"../Common/CollectorOption.esm.js";const d="projects",g="project-tags",q="issues",s="measures",O=["ncloc","complexity","violations","open_issues"],L={factDetails:{factName:{name:"Fact Name",helperText:"Fact name must be unique",placeholder:"Fact Name"},metrics:{name:"Metrics",helperText:"Add more metrics to collect",placeholder:"Example: code_smells"}}},b=(c,t)=>({...S(),factDetails:{factName:c??"",metrics:t??O}}),_=()=>({projects:T(),projectTags:T(),issues:T(),measures:{enabled:!1,collectors:[b(s)]}});function F(c){const{projects:t,projectTags:f,issues:a,measures:n}=c;if(t.enabled||f.enabled||a.enabled||n.enabled){const i={},o=[];if(i.collects=o,t.enabled){const{cacheConfig:r,frequency:e,filters:l}=t;o.push({type:d,frequency:y(e),filter:C(l),cache:m(r)})}if(f.enabled){const{cacheConfig:r,frequency:e,filters:l}=f;o.push({type:g,frequency:y(e),filter:C(l),cache:m(r)})}if(a.enabled){const{cacheConfig:r,frequency:e,filters:l}=a;o.push({type:q,frequency:y(e),filter:C(l),cache:m(r)})}return n.enabled&&n.collectors.forEach(r=>{o.push({factName:r.factDetails.factName,type:s,metrics:r.factDetails.metrics,frequency:y(r.frequency),filter:C(r.filters),cache:m(r.cacheConfig)})}),i}return{collects:[]}}function D(c){const t=_();if(c){const f=E(c).flatMap(a=>a.collects);if(f){const a=E(f),n=a.find(e=>e.type===d);n&&(t.projects={enabled:!0,frequency:h(n.frequency??c.frequency),filters:p(n.filter??c.filter),cacheConfig:u(n.cache??c.cache)});const i=a.find(e=>e.type===g);i&&(t.projectTags={enabled:!0,frequency:h(i.frequency??c.frequency),filters:p(i.filter??c.filter),cacheConfig:u(i.cache??c.cache)});const o=a.find(e=>e.type===q);o&&(t.issues={enabled:!0,frequency:h(o.frequency??c.frequency),filters:p(o.filter??c.filter),cacheConfig:u(o.cache??c.cache)});const r=a.filter(e=>e.type===s);r.length&&(t.measures={enabled:!0,collectors:r.map(e=>({factDetails:{factName:e.factName??s,metrics:e.metrics},frequency:h(e.frequency??c.frequency),filters:p(e.filter??c.filter),cacheConfig:u(e.cache??c.cache)}))})}}return t}export{O as DEFAULT_METRICS,q as ISSUES_COLLECTOR_TYPE,s as MEASURES_COLLECTOR_TYPE,d as PROJECTS_COLLECTOR_TYPE,g as PROJECT_TAGS_COLLECTOR_TYPE,L as SONARQUBE_COLLECTOR_FIELDS,_ as defaultSonarQubeConfig,D as mapConfigToSonarQubeCollectorConfig,F as mapSonarQubeCollectorConfigToConfig,b as measuresCollectorConfig};
|
|
2
|
+
//# sourceMappingURL=utils.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{validNameRegex as d}from"@spotify/backstage-plugin-soundcheck-common";import{z as e}from"zod";import{FIELD_IS_REQUIRED_MSG as _}from"../../../../utils/validation.esm.js";import{BaseCollectorSchema as S,CollectorOptionSchema as c}from"../Common/CollectorOption.esm.js";const i="Fact name is not unique",m="The field contains forbidden characters",n="Max 100 characters",l="At least one metric must be added",p=S.extend({factDetails:e.strictObject({factName:e.string().min(1,_).max(100,n).regex(d,m),metrics:e.array(e.string()).min(1,l)})}).strict(),u=e.strictObject({enabled:e.boolean(),collectors:e.array(p).superRefine((r,f)=>{const s=r.map(t=>t.factDetails.factName),o=s.filter((t,a)=>s.indexOf(t)!==a);o.length&&r.forEach((t,a)=>{o.includes(t.factDetails.factName)&&f.addIssue({code:e.ZodIssueCode.custom,message:i,path:[a,"factDetails","factName"]})})})}),I=e.strictObject({projects:c,projectTags:c,issues:c,measures:u});export{i as FACT_NAME_IS_NOT_UNIQUE_MSG,m as INVALID_CHARACTERS_MSG,n as MAX_100_CHARACTERS_MSG,l as MIN_1_METRIC_MSG,I as sonarQubeCollectorFormSchema};
|
|
2
|
+
//# sourceMappingURL=validation.esm.js.map
|