@spotify/backstage-plugin-soundcheck 0.16.2 → 0.17.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +43 -0
- package/dist/alpha/integrations.esm.js +2 -0
- package/dist/alpha/pages.esm.js +1 -1
- package/dist/alpha/plugin.esm.js +1 -1
- package/dist/alpha.d.ts +252 -17
- package/dist/api.esm.js +1 -1
- package/dist/blueprints/IntegrationPageBlueprint.esm.js +2 -0
- package/dist/components/Badges/LevelBadge.esm.js +1 -1
- package/dist/components/CampaignForm/hooks/utils.esm.js +1 -1
- package/dist/components/CampaignInsightsPage/CampaignStatusHistoryTile.esm.js +1 -1
- package/dist/components/CertificationSidebar/ExemptionJustificationDialog.esm.js +1 -1
- package/dist/components/CertificationsPage/CertificationTab.esm.js +1 -1
- package/dist/components/CertificationsPage/CertificationTabs.esm.js +1 -1
- package/dist/components/CheckDetails/CheckResultDetails.esm.js +1 -1
- package/dist/components/CheckDetails/ResultStateBox.esm.js +1 -1
- package/dist/components/CheckDryRun/CheckDryRunDetails.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 +1 -1
- package/dist/components/CheckForm/FormFields/RuleInput/Conditions/RuleConditionInput.esm.js +1 -1
- package/dist/components/CheckForm/FormFields/RuleInput/Expressions/ExpressionBox.esm.js +1 -1
- package/dist/components/CheckForm/FormFields/RuleInput/RuleInputBox.esm.js +1 -1
- package/dist/components/CheckForm/Steps/CheckApplicabilityStep.esm.js +1 -1
- package/dist/components/CheckForm/utils/checkFormUtils.esm.js +2 -2
- package/dist/components/CheckForm/utils/validation.esm.js +1 -1
- package/dist/components/CheckIcon/CheckIcon.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/ExemptionsTable.esm.js +2 -0
- package/dist/components/CollectorPage/CollectorPage.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/Common/FactCollectionConfig.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/HTTP/HttpStatusesInput.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/PagerDuty/PagerDutyConfigurator.esm.js +1 -1
- package/dist/components/CollectorPage/Configurators/PagerDuty/utils.esm.js +1 -1
- package/dist/components/CollectorsPage/CollectorListPage/CollectorListPage.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/EntitiesAutocompletePicker/EntitiesAutocompletePicker.esm.js +1 -1
- package/dist/components/FactExplorer/FactExplorer.esm.js +1 -1
- package/dist/components/FactExplorer/FactExplorerDialog.esm.js +1 -1
- package/dist/components/FactExplorer/useFactOptions.esm.js +1 -1
- package/dist/components/Filter/EntityAutocompletePicker.esm.js +1 -1
- package/dist/components/Filter/FilterComponent.esm.js +1 -1
- package/dist/components/FilterSidebar/StateFilter.esm.js +1 -1
- package/dist/components/FormControlledAutocomplete/FormControlledMultipleAutocomplete.esm.js +1 -1
- package/dist/components/GroupSelector/GroupSelector.esm.js +1 -1
- package/dist/components/LevelsTable/CheckRowContent.esm.js +1 -1
- package/dist/components/OrgInsights/OrgInsightsPage.esm.js +2 -0
- package/dist/components/OrgInsights/OrgInsightsSidebar.esm.js +2 -0
- package/dist/components/OrgInsights/OrgInsightsViewSelector.esm.js +2 -0
- package/dist/components/OrgInsights/TrackCardGrid.esm.js +2 -0
- package/dist/components/OrgInsights/TrackComparison.esm.js +2 -0
- package/dist/components/OrgInsights/TrackStatusTile.esm.js +2 -0
- package/dist/components/OrgInsights/styles.esm.js +2 -0
- package/dist/components/OverviewPage/OverviewPageHeader.esm.js +1 -1
- package/dist/components/OverviewTable/Cell/CheckNameCell.esm.js +1 -1
- package/dist/components/OverviewTable/Cell/TrackCheckStatusCount.esm.js +2 -0
- package/dist/components/OverviewTable/Cell/cellRenderer.esm.js +1 -1
- package/dist/components/OverviewTable/OverviewTableContent.esm.js +1 -1
- package/dist/components/OverviewTable/ResultsTable.esm.js +1 -1
- package/dist/components/OverviewTable/ResultsTableRow.esm.js +1 -1
- package/dist/components/Router.esm.js +1 -1
- package/dist/components/RoutingPage/RoutingPage.esm.js +1 -1
- package/dist/components/RoutingPage/index.esm.js +1 -1
- package/dist/components/SoundcheckHeader/SoundcheckHeader.esm.js +1 -1
- package/dist/components/SummaryCard/SummaryCard.esm.js +1 -1
- package/dist/components/TechHealth/Filters/FacetFilter.esm.js +1 -1
- package/dist/components/TopFailingChecksTable/TopFailingChecksTable.esm.js +1 -1
- package/dist/components/TrackPage/TrackEntitiesTable/columns.esm.js +1 -1
- package/dist/components/TrackPage/TrackEntitiesTable/utils.esm.js +1 -1
- package/dist/components/TrackPage/TrackHistoryChart.esm.js +1 -1
- package/dist/components/TrackPage/TrackPage.esm.js +1 -1
- package/dist/components/TrackPage/TrackStatusBar.esm.js +1 -1
- package/dist/components/TrackPage/TrackStatusTable.esm.js +1 -1
- package/dist/contexts/UserProvider.esm.js +1 -1
- package/dist/graphql/generated/index.esm.js +56 -22
- package/dist/hooks/aggregations/useCheckStatus.esm.js +1 -1
- package/dist/hooks/campaigns/useCreateCampaign.esm.js +1 -1
- package/dist/hooks/campaigns/useUpdateCampaign.esm.js +1 -1
- package/dist/hooks/certifications/useTrackOverviewForOwner.esm.js +1 -1
- package/dist/hooks/checks/useCreateCheck.esm.js +1 -1
- package/dist/hooks/checks/useSetManualResult.esm.js +1 -1
- package/dist/hooks/checks/useUpdateCheck.esm.js +1 -1
- package/dist/hooks/collectors/useUpdateCollectorConfig.esm.js +1 -1
- package/dist/hooks/exemptions/useDeleteExemption.esm.js +1 -1
- package/dist/hooks/exemptions/useExemptCheckIds.esm.js +1 -1
- package/dist/hooks/exemptions/useExemptions.esm.js +2 -0
- package/dist/hooks/exemptions/useGetExemption.esm.js +1 -1
- package/dist/hooks/exemptions/useSetEntityExempt.esm.js +1 -1
- package/dist/hooks/graphqlKeys.esm.js +1 -1
- package/dist/hooks/tracks/useCreateTrack.esm.js +1 -1
- package/dist/hooks/tracks/useUpdateTrack.esm.js +1 -1
- package/dist/index.d.ts +85 -1
- package/dist/index.esm.js +1 -1
- package/dist/utils/validation.esm.js +1 -1
- package/package.json +18 -18
- package/dist/components/CheckForm/FormFields/RuleInput/useRuleInputHandlers.esm.js +0 -2
- package/dist/components/OrgHealth/OrgHealthPage.esm.js +0 -2
- package/dist/components/OverviewTable/Cell/TrackCheckIndicator.esm.js +0 -2
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as a,jsxs as
|
|
1
|
+
import{jsx as a,jsxs as l}from"react/jsx-runtime";import{useTheme as y,Typography as p}from"@material-ui/core";import{makeStyles as v,createStyles as k}from"@material-ui/core/styles";import{Skeleton as d}from"@material-ui/lab";import{memo as x,useMemo as N,Fragment as S}from"react";import{compactNumberFormatter as h}from"../../utils/formatters.esm.js";import{getChartColors as w}from"../Charts/chartUtils.esm.js";const C=v(e=>k({container:{display:"grid",gridTemplateColumns:"3fr 2fr",gap:e.spacing(1),minWidth:0},item:{display:"flex",alignItems:"center",fontSize:"0.875rem",minWidth:0},legendDash:{width:e.spacing(2),height:e.spacing(.75),borderRadius:e.spacing(.375),marginRight:e.spacing(1)},category:{display:"flex",alignItems:"center",fontSize:"0.875rem",minWidth:0,flex:1},categoryText:{whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis",fontSize:"0.875rem",minWidth:0,flex:1},value:{fontSize:"0.875rem",color:e.palette.text.primary},valueCell:{justifyContent:"flex-end",whiteSpace:"nowrap"},percentage:{color:e.palette.text.secondary,marginLeft:e.spacing(1)},skeleton:{backgroundColor:e.palette.action.hover}})),T=x(({track:e,status:s})=>{const r=y(),t=C(),g=N(()=>{if(!e)return[{name:"",key:1,color:r.palette.action.hover},{name:"",key:2,color:r.palette.action.hover},{name:"",key:3,color:r.palette.action.hover}];const n=w(r);return e.levels.map(({name:i,ordinal:o})=>({name:i??`Level ${o}`,key:o,color:n[o%n.length]}))},[r,e]),c=s?.numberOfEntities??0;return a("div",{className:t.container,children:g.map(({name:n,key:i,color:o})=>{const m=s?.statusByLevel.find(({ordinal:u})=>u===i)?.cumulativelyPassed??0,f=c>0?Math.round(m/c*100):0;return l(S,{children:[a("div",{className:t.item,children:l("div",{className:t.category,children:[a("span",{className:t.legendDash,style:{backgroundColor:o}}),e?a(p,{className:t.categoryText,children:n}):a(d,{width:80,height:20,className:t.skeleton})]})}),a("div",{className:`${t.item} ${t.valueCell}`,children:e&&s?l(p,{className:t.value,children:[h(m)," of"," ",h(c),l("span",{className:t.percentage,children:["(",f,"%)"]})]}):a(d,{width:120,height:20,className:t.skeleton})})]},i)})})});export{T as TrackStatusTable};
|
|
2
2
|
//# sourceMappingURL=TrackStatusTable.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as d}from"react/jsx-runtime";import{stringifyEntityRef as g}from"@backstage/catalog-model";import{useApi as a,identityApiRef as p}from"@backstage/core-plugin-api";import{catalogApiRef as y}from"@backstage/plugin-catalog-react";import{createContext as R,useState as E,useEffect as v,useContext as x}from"react";import
|
|
1
|
+
import{jsx as d}from"react/jsx-runtime";import{stringifyEntityRef as g}from"@backstage/catalog-model";import{useApi as a,identityApiRef as p}from"@backstage/core-plugin-api";import{catalogApiRef as y}from"@backstage/plugin-catalog-react";import{createContext as R,useState as E,useEffect as v,useContext as x}from"react";import C from"react-use/lib/useAsync";const f={loading:!0},l=R(f),A=()=>x(l),P=({children:u})=>{const[m,n]=E(f),s=a(y),t=a(p),{value:e,loading:r,error:o}=C(async()=>{const[{token:i},c]=await Promise.all([t.getCredentials(),t.getBackstageIdentity()]);return i?await s.getEntityByRef(c.userEntityRef):null},[s,t]);return v(()=>{if(e){const i=g(e);n({user:e,userEntityRef:i,loading:r,error:o})}else n({loading:r,error:o})},[e,r,o]),d(l.Provider,{value:m,children:u})};export{P as UserProvider,A as useLoggedInUser};
|
|
2
2
|
//# sourceMappingURL=UserProvider.esm.js.map
|
|
@@ -5,6 +5,7 @@ import i from"graphql-tag";var o=(r=>(r.Medal="MEDAL",r.Status="STATUS",r))(o||{
|
|
|
5
5
|
options {
|
|
6
6
|
color
|
|
7
7
|
level
|
|
8
|
+
svg
|
|
8
9
|
}
|
|
9
10
|
}
|
|
10
11
|
... on BadgeVariantStatus {
|
|
@@ -112,6 +113,7 @@ ${h}`,y=i`
|
|
|
112
113
|
}
|
|
113
114
|
totalCount
|
|
114
115
|
totalPassing
|
|
116
|
+
totalFailing
|
|
115
117
|
}
|
|
116
118
|
}
|
|
117
119
|
`,$=i`
|
|
@@ -175,11 +177,11 @@ ${h}`,y=i`
|
|
|
175
177
|
description
|
|
176
178
|
}
|
|
177
179
|
}
|
|
178
|
-
`,
|
|
180
|
+
`,I=i`
|
|
179
181
|
mutation deleteChecker($checkerId: String!) {
|
|
180
182
|
deleteChecker(checkerId: $checkerId)
|
|
181
183
|
}
|
|
182
|
-
`,
|
|
184
|
+
`,T=i`
|
|
183
185
|
mutation deleteExemption($checkId: String!, $entityRef: String!) {
|
|
184
186
|
deleteExemption(checkId: $checkId, entityRef: $entityRef) {
|
|
185
187
|
check_id
|
|
@@ -199,6 +201,7 @@ ${h}`,y=i`
|
|
|
199
201
|
data
|
|
200
202
|
timestamp
|
|
201
203
|
entityRef
|
|
204
|
+
sensitive
|
|
202
205
|
}
|
|
203
206
|
ruleResults {
|
|
204
207
|
name
|
|
@@ -610,6 +613,30 @@ ${u}`,_=i`
|
|
|
610
613
|
}
|
|
611
614
|
}
|
|
612
615
|
`,ne=i`
|
|
616
|
+
query getExemptions($checkId: String!, $first: Int, $after: String, $last: Int, $before: String) {
|
|
617
|
+
exemptions(
|
|
618
|
+
input: {checkId: $checkId, first: $first, after: $after, last: $last, before: $before}
|
|
619
|
+
) {
|
|
620
|
+
totalCount
|
|
621
|
+
edges {
|
|
622
|
+
node {
|
|
623
|
+
check_id
|
|
624
|
+
entity_ref
|
|
625
|
+
user_ref
|
|
626
|
+
justification
|
|
627
|
+
timestamp
|
|
628
|
+
}
|
|
629
|
+
cursor
|
|
630
|
+
}
|
|
631
|
+
pageInfo {
|
|
632
|
+
hasNextPage
|
|
633
|
+
hasPreviousPage
|
|
634
|
+
startCursor
|
|
635
|
+
endCursor
|
|
636
|
+
}
|
|
637
|
+
}
|
|
638
|
+
}
|
|
639
|
+
`,se=i`
|
|
613
640
|
query getFacetsForOwner($ownerEntityRef: String!) {
|
|
614
641
|
facetsForOwner(ownerEntityRef: $ownerEntityRef) {
|
|
615
642
|
types {
|
|
@@ -619,7 +646,7 @@ ${u}`,_=i`
|
|
|
619
646
|
}
|
|
620
647
|
}
|
|
621
648
|
}
|
|
622
|
-
`,
|
|
649
|
+
`,ue=i`
|
|
623
650
|
query getFact($entityRef: String!, $factRef: String!, $path: String, $pathResolver: String, $refresh: Boolean) {
|
|
624
651
|
fact(
|
|
625
652
|
entityRef: $entityRef
|
|
@@ -633,6 +660,7 @@ ${u}`,_=i`
|
|
|
633
660
|
data
|
|
634
661
|
entityRef
|
|
635
662
|
timestamp
|
|
663
|
+
sensitive
|
|
636
664
|
}
|
|
637
665
|
collectionError {
|
|
638
666
|
factRef
|
|
@@ -643,7 +671,7 @@ ${u}`,_=i`
|
|
|
643
671
|
resolvedValue
|
|
644
672
|
}
|
|
645
673
|
}
|
|
646
|
-
`,
|
|
674
|
+
`,ce=i`
|
|
647
675
|
query getCollectors($ids: [String!]) {
|
|
648
676
|
collectors(ids: $ids) {
|
|
649
677
|
id
|
|
@@ -651,6 +679,7 @@ ${u}`,_=i`
|
|
|
651
679
|
description
|
|
652
680
|
factNames
|
|
653
681
|
config
|
|
682
|
+
configSchema
|
|
654
683
|
isConfigurable
|
|
655
684
|
isEditable
|
|
656
685
|
collectionConfigs {
|
|
@@ -660,15 +689,20 @@ ${u}`,_=i`
|
|
|
660
689
|
cache
|
|
661
690
|
exclude
|
|
662
691
|
}
|
|
692
|
+
hasUIConfig
|
|
693
|
+
dependentChecks {
|
|
694
|
+
id
|
|
695
|
+
name
|
|
696
|
+
}
|
|
663
697
|
}
|
|
664
698
|
}
|
|
665
|
-
`,
|
|
699
|
+
`,oe=i`
|
|
666
700
|
query getFactSchemas($collectorId: String!, $factName: String!) {
|
|
667
701
|
factSchema(collectorId: $collectorId, factName: $factName) {
|
|
668
702
|
schema
|
|
669
703
|
}
|
|
670
704
|
}
|
|
671
|
-
`,
|
|
705
|
+
`,le=i`
|
|
672
706
|
query getIndividualCheckPassRates($filter: Filter) {
|
|
673
707
|
individualCheckPassRates(filter: $filter) {
|
|
674
708
|
id
|
|
@@ -679,7 +713,7 @@ ${u}`,_=i`
|
|
|
679
713
|
trendPassRates
|
|
680
714
|
}
|
|
681
715
|
}
|
|
682
|
-
`,
|
|
716
|
+
`,de=i`
|
|
683
717
|
query getIndividualEntityPassRates($input: PassRatesInput) {
|
|
684
718
|
individualEntityPassRates(input: $input) {
|
|
685
719
|
totalCount
|
|
@@ -701,7 +735,7 @@ ${u}`,_=i`
|
|
|
701
735
|
}
|
|
702
736
|
}
|
|
703
737
|
}
|
|
704
|
-
`,
|
|
738
|
+
`,pe=i`
|
|
705
739
|
query getIndividualGroupPassRates($input: PassRatesInput) {
|
|
706
740
|
groupPassRates(input: $input) {
|
|
707
741
|
totalCount
|
|
@@ -723,7 +757,7 @@ ${u}`,_=i`
|
|
|
723
757
|
}
|
|
724
758
|
}
|
|
725
759
|
}
|
|
726
|
-
`,
|
|
760
|
+
`,ge=i`
|
|
727
761
|
query getIndividualTrackPassRate($filter: Filter) {
|
|
728
762
|
individualTrackPassRate(filter: $filter) {
|
|
729
763
|
id
|
|
@@ -738,25 +772,25 @@ ${u}`,_=i`
|
|
|
738
772
|
}
|
|
739
773
|
}
|
|
740
774
|
}
|
|
741
|
-
`,
|
|
775
|
+
`,me=i`
|
|
742
776
|
query getOperators {
|
|
743
777
|
operators {
|
|
744
778
|
name
|
|
745
779
|
title
|
|
746
780
|
}
|
|
747
781
|
}
|
|
748
|
-
`,
|
|
782
|
+
`,fe=i`
|
|
749
783
|
query getOverallCheckPassRates($filter: Filter) {
|
|
750
784
|
overallCheckPassRates(filter: $filter)
|
|
751
785
|
}
|
|
752
|
-
`,
|
|
786
|
+
`,ke=i`
|
|
753
787
|
query getOverallEntityPassRates($filter: Filter) {
|
|
754
788
|
overallEntityPassRates(filter: $filter) {
|
|
755
789
|
id
|
|
756
790
|
trendPassRates
|
|
757
791
|
}
|
|
758
792
|
}
|
|
759
|
-
`,
|
|
793
|
+
`,Ce=i`
|
|
760
794
|
query getOverallGroupPassRates($input: PassRatesInput) {
|
|
761
795
|
groupPassRates(input: $input) {
|
|
762
796
|
totalCount
|
|
@@ -776,7 +810,7 @@ ${u}`,_=i`
|
|
|
776
810
|
}
|
|
777
811
|
}
|
|
778
812
|
}
|
|
779
|
-
`,
|
|
813
|
+
`,he=i`
|
|
780
814
|
query getOverallTrackPassRate($filter: Filter) {
|
|
781
815
|
overallTrackPassRate(filter: $filter) {
|
|
782
816
|
levelOrdinal
|
|
@@ -784,13 +818,13 @@ ${u}`,_=i`
|
|
|
784
818
|
trendPassRates
|
|
785
819
|
}
|
|
786
820
|
}
|
|
787
|
-
`,
|
|
821
|
+
`,ye=i`
|
|
788
822
|
query getPathResolvers {
|
|
789
823
|
pathResolvers {
|
|
790
824
|
id
|
|
791
825
|
}
|
|
792
826
|
}
|
|
793
|
-
`,
|
|
827
|
+
`,Re=i`
|
|
794
828
|
query getPlaylists($entityRef: String!) {
|
|
795
829
|
playlists(entityRef: $entityRef) {
|
|
796
830
|
id
|
|
@@ -800,7 +834,7 @@ ${u}`,_=i`
|
|
|
800
834
|
trackIds
|
|
801
835
|
}
|
|
802
836
|
}
|
|
803
|
-
|
|
837
|
+
`,$e=i`
|
|
804
838
|
query getTrackOverviewForOwner($ownerEntityRef: String!, $facet: FacetInput, $first: Int, $after: String, $entitySearch: String) {
|
|
805
839
|
trackOverviewForOwner(
|
|
806
840
|
ownerEntityRef: $ownerEntityRef
|
|
@@ -832,7 +866,7 @@ ${u}`,_=i`
|
|
|
832
866
|
}
|
|
833
867
|
}
|
|
834
868
|
${$}
|
|
835
|
-
${R}
|
|
869
|
+
${R}`,qe=i`
|
|
836
870
|
query getTrack($id: ID!) {
|
|
837
871
|
track(id: $id) {
|
|
838
872
|
id
|
|
@@ -854,7 +888,7 @@ ${R}`,$e=i`
|
|
|
854
888
|
}
|
|
855
889
|
}
|
|
856
890
|
${c}
|
|
857
|
-
${s}`,
|
|
891
|
+
${s}`,ve=i`
|
|
858
892
|
query getTrackEntities($input: TrackEntitiesInput!) {
|
|
859
893
|
trackEntities(input: $input) {
|
|
860
894
|
totalCount
|
|
@@ -891,11 +925,11 @@ ${s}`,qe=i`
|
|
|
891
925
|
}
|
|
892
926
|
}
|
|
893
927
|
}
|
|
894
|
-
${s}`,
|
|
928
|
+
${s}`,Ee=i`
|
|
895
929
|
query getTrackOwners {
|
|
896
930
|
trackOwners
|
|
897
931
|
}
|
|
898
|
-
`,
|
|
932
|
+
`,De=i`
|
|
899
933
|
query getTracks($filter: ListEntityFilter!) {
|
|
900
934
|
tracks(filter: $filter) {
|
|
901
935
|
totalCount
|
|
@@ -929,5 +963,5 @@ ${s}`,qe=i`
|
|
|
929
963
|
}
|
|
930
964
|
}
|
|
931
965
|
${c}
|
|
932
|
-
${s}`,
|
|
966
|
+
${s}`,Se=(r,n,e,t)=>r();function Pe(r,n=Se){return{archiveCampaign(e,t){return n(a=>r.request(v,e,{...t,...a}),"archiveCampaign","mutation",e)},createCampaign(e,t){return n(a=>r.request(E,e,{...t,...a}),"createCampaign","mutation",e)},deleteCampaign(e,t){return n(a=>r.request(D,e,{...t,...a}),"deleteCampaign","mutation",e)},updateCampaign(e,t){return n(a=>r.request(S,e,{...t,...a}),"updateCampaign","mutation",e)},createCheck(e,t){return n(a=>r.request(P,e,{...t,...a}),"createCheck","mutation",e)},deleteChecker(e,t){return n(a=>r.request(I,e,{...t,...a}),"deleteChecker","mutation",e)},deleteExemption(e,t){return n(a=>r.request(T,e,{...t,...a}),"deleteExemption","mutation",e)},executeCheck(e,t){return n(a=>r.request(F,e,{...t,...a}),"executeCheck","mutation",e)},setEntityExempt(e,t){return n(a=>r.request(O,e,{...t,...a}),"setEntityExempt","mutation",e)},setManualCheckResult(e,t){return n(a=>r.request(w,e,{...t,...a}),"setManualCheckResult","mutation",e)},createTrack(e,t){return n(a=>r.request(x,e,{...t,...a}),"createTrack","mutation",e)},deleteTrack(e,t){return n(a=>r.request(G,e,{...t,...a}),"deleteTrack","mutation",e)},updateTrack(e,t){return n(a=>r.request(L,e,{...t,...a}),"updateTrack","mutation",e)},updateCheck(e,t){return n(a=>r.request(b,e,{...t,...a}),"updateCheck","mutation",e)},updateCollectorConfig(e,t){return n(a=>r.request(A,e,{...t,...a}),"updateCollectorConfig","mutation",e)},getAllCertifications(e,t){return n(a=>r.request(N,e,{...t,...a}),"getAllCertifications","query",e)},getCampaignOwners(e,t){return n(a=>r.request(B,e,{...t,...a}),"getCampaignOwners","query",e)},getCampaigns(e,t){return n(a=>r.request(H,e,{...t,...a}),"getCampaigns","query",e)},getCertificationDetails(e,t){return n(a=>r.request(M,e,{...t,...a}),"getCertificationDetails","query",e)},getCertificationDetailsForTrack(e,t){return n(a=>r.request(V,e,{...t,...a}),"getCertificationDetailsForTrack","query",e)},getCertificationStatus(e,t){return n(a=>r.request(_,e,{...t,...a}),"getCertificationStatus","query",e)},getCertificationStatusHistory(e,t){return n(a=>r.request(U,e,{...t,...a}),"getCertificationStatusHistory","query",e)},getCheckResultDetails(e,t){return n(a=>r.request(Y,e,{...t,...a}),"getCheckResultDetails","query",e)},getCheckEntities(e,t){return n(a=>r.request(W,e,{...t,...a}),"getCheckEntities","query",e)},getCheckOwners(e,t){return n(a=>r.request(j,e,{...t,...a}),"getCheckOwners","query",e)},getCheckStatus(e,t){return n(a=>r.request(K,e,{...t,...a}),"getCheckStatus","query",e)},getCheckStatusHistories(e,t){return n(a=>r.request(X,e,{...t,...a}),"getCheckStatusHistories","query",e)},getCheckStatusHistory(e,t){return n(a=>r.request(z,e,{...t,...a}),"getCheckStatusHistory","query",e)},getCheckStatuses(e,t){return n(a=>r.request(J,e,{...t,...a}),"getCheckStatuses","query",e)},getCheckTemplates(e,t){return n(a=>r.request(Q,e,{...t,...a}),"getCheckTemplates","query",e)},getCheck(e,t){return n(a=>r.request(Z,e,{...t,...a}),"getCheck","query",e)},getCheckers(e,t){return n(a=>r.request(ee,e,{...t,...a}),"getCheckers","query",e)},getEntityRefsForTechHealthFilter(e,t){return n(a=>r.request(te,e,{...t,...a}),"getEntityRefsForTechHealthFilter","query",e)},getExecutableChecks(e,t){return n(a=>r.request(ae,e,{...t,...a}),"getExecutableChecks","query",e)},getExemptCheckIds(e,t){return n(a=>r.request(re,e,{...t,...a}),"getExemptCheckIds","query",e)},getExemption(e,t){return n(a=>r.request(ie,e,{...t,...a}),"getExemption","query",e)},getExemptions(e,t){return n(a=>r.request(ne,e,{...t,...a}),"getExemptions","query",e)},getFacetsForOwner(e,t){return n(a=>r.request(se,e,{...t,...a}),"getFacetsForOwner","query",e)},getFact(e,t){return n(a=>r.request(ue,e,{...t,...a}),"getFact","query",e)},getCollectors(e,t){return n(a=>r.request(ce,e,{...t,...a}),"getCollectors","query",e)},getFactSchemas(e,t){return n(a=>r.request(oe,e,{...t,...a}),"getFactSchemas","query",e)},getIndividualCheckPassRates(e,t){return n(a=>r.request(le,e,{...t,...a}),"getIndividualCheckPassRates","query",e)},getIndividualEntityPassRates(e,t){return n(a=>r.request(de,e,{...t,...a}),"getIndividualEntityPassRates","query",e)},getIndividualGroupPassRates(e,t){return n(a=>r.request(pe,e,{...t,...a}),"getIndividualGroupPassRates","query",e)},getIndividualTrackPassRate(e,t){return n(a=>r.request(ge,e,{...t,...a}),"getIndividualTrackPassRate","query",e)},getOperators(e,t){return n(a=>r.request(me,e,{...t,...a}),"getOperators","query",e)},getOverallCheckPassRates(e,t){return n(a=>r.request(fe,e,{...t,...a}),"getOverallCheckPassRates","query",e)},getOverallEntityPassRates(e,t){return n(a=>r.request(ke,e,{...t,...a}),"getOverallEntityPassRates","query",e)},getOverallGroupPassRates(e,t){return n(a=>r.request(Ce,e,{...t,...a}),"getOverallGroupPassRates","query",e)},getOverallTrackPassRate(e,t){return n(a=>r.request(he,e,{...t,...a}),"getOverallTrackPassRate","query",e)},getPathResolvers(e,t){return n(a=>r.request(ye,e,{...t,...a}),"getPathResolvers","query",e)},getPlaylists(e,t){return n(a=>r.request(Re,e,{...t,...a}),"getPlaylists","query",e)},getTrackOverviewForOwner(e,t){return n(a=>r.request($e,e,{...t,...a}),"getTrackOverviewForOwner","query",e)},getTrack(e,t){return n(a=>r.request(qe,e,{...t,...a}),"getTrack","query",e)},getTrackEntities(e,t){return n(a=>r.request(ve,e,{...t,...a}),"getTrackEntities","query",e)},getTrackOwners(e,t){return n(a=>r.request(Ee,e,{...t,...a}),"getTrackOwners","query",e)},getTracks(e,t){return n(a=>r.request(De,e,{...t,...a}),"getTracks","query",e)}}}export{v as ArchiveCampaignDocument,o as BadgeVariant,s as BadgeVariantsFragmentDoc,k as CampaignLevelFragmentDoc,f as CertificationSummaryFragmentDoc,l as CheckEntityField,y as CheckResultDetailsFragmentDoc,h as CheckResultSummaryFragmentDoc,d as CheckerType,E as CreateCampaignDocument,P as CreateCheckDocument,x as CreateTrackDocument,D as DeleteCampaignDocument,I as DeleteCheckerDocument,T as DeleteExemptionDocument,G as DeleteTrackDocument,p as Direction,F as ExecuteCheckDocument,N as GetAllCertificationsDocument,B as GetCampaignOwnersDocument,H as GetCampaignsDocument,M as GetCertificationDetailsDocument,V as GetCertificationDetailsForTrackDocument,_ as GetCertificationStatusDocument,U as GetCertificationStatusHistoryDocument,Z as GetCheckDocument,W as GetCheckEntitiesDocument,j as GetCheckOwnersDocument,Y as GetCheckResultDetailsDocument,K as GetCheckStatusDocument,X as GetCheckStatusHistoriesDocument,z as GetCheckStatusHistoryDocument,J as GetCheckStatusesDocument,Q as GetCheckTemplatesDocument,ee as GetCheckersDocument,ce as GetCollectorsDocument,te as GetEntityRefsForTechHealthFilterDocument,ae as GetExecutableChecksDocument,re as GetExemptCheckIdsDocument,ie as GetExemptionDocument,ne as GetExemptionsDocument,se as GetFacetsForOwnerDocument,ue as GetFactDocument,oe as GetFactSchemasDocument,le as GetIndividualCheckPassRatesDocument,de as GetIndividualEntityPassRatesDocument,pe as GetIndividualGroupPassRatesDocument,ge as GetIndividualTrackPassRateDocument,me as GetOperatorsDocument,fe as GetOverallCheckPassRatesDocument,ke as GetOverallEntityPassRatesDocument,Ce as GetOverallGroupPassRatesDocument,he as GetOverallTrackPassRateDocument,ye as GetPathResolversDocument,Re as GetPlaylistsDocument,qe as GetTrackDocument,ve as GetTrackEntitiesDocument,$e as GetTrackOverviewForOwnerDocument,Ee as GetTrackOwnersDocument,De as GetTracksDocument,q as HighestLevelFragmentDoc,u as LevelResultDetailsFragmentDoc,C as MilestoneFragmentDoc,R as OverviewLevelResultFragmentDoc,g as ResultState,O as SetEntityExemptDocument,w as SetManualCheckResultDocument,m as TrackEntityField,c as TrackLevelFragmentDoc,$ as TrackStatusFragmentDoc,S as UpdateCampaignDocument,b as UpdateCheckDocument,A as UpdateCollectorConfigDocument,L as UpdateTrackDocument,Pe as getSdk};
|
|
933
967
|
//# sourceMappingURL=index.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{useApi as
|
|
1
|
+
import{useApi as n,useAnalytics as a}from"@backstage/core-plugin-api";import{useQuery as o}from"@tanstack/react-query";import{soundcheckApiRef as p}from"../../api.esm.js";import{QueryKeys as u}from"../graphqlKeys.esm.js";const c=(t,r=!0)=>{const i=n(p),s=a();return o([u.CheckStatus,t],async()=>{const e=await i.getCheckStatus(t);return e&&s.captureEvent("page_details","Check Status",{attributes:{id:e.id,error:e.error,exempt:e.exempt,failed:e.failed,notApplicable:e.notApplicable,notReported:e.notReported,numberOfEntities:e.numberOfEntities,passed:e.passed,warning:e.warning,filter:t.filter}}),e},{enabled:r,staleTime:10*60*1e3,refetchInterval:!1,refetchOnWindowFocus:!1})};export{c as useCheckStatus};
|
|
2
2
|
//# sourceMappingURL=useCheckStatus.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{useApi as m}from"@backstage/core-plugin-api";import{useQueryClient as
|
|
1
|
+
import{useApi as u,useAnalytics as m}from"@backstage/core-plugin-api";import{useQueryClient as p,useMutation as g}from"@tanstack/react-query";import{soundcheckApiRef as C}from"../../api.esm.js";import{MutationKeys as y,QueryKeys as i}from"../graphqlKeys.esm.js";import{useSoundcheckAlert as l}from"../useSoundcheckAlert.esm.js";const f="Error Creating Campaign",s="Failed to create campaign.";function d(){const o=u(C),a=p(),{showAlert:n}=l(),t=m(),c=async e=>{const r=await o.createCampaign(e);if(!r)throw new Error(s);return r};return g([y.CreateCampaign],c,{onSuccess:e=>(t.captureEvent("resource_action","Create Campaign",{attributes:{resourceType:"campaign",resourceAction:"create",resourceId:e.id,success:"true"}}),Promise.all([a.invalidateQueries({queryKey:[i.GetCampaigns]}),a.invalidateQueries({queryKey:[i.GetCampaignOwners]})])),onError:e=>{let r=s;e instanceof Error&&(r=e.message),n({severity:"error",title:f,message:r}),t.captureEvent("resource_action","Create Campaign",{attributes:{resourceType:"campaign",resourceAction:"create",success:"false"}}),t.captureEvent("error","Create Campaign",{attributes:{errorMessage:r}})}})}export{d as useCreateCampaign};
|
|
2
2
|
//# sourceMappingURL=useCreateCampaign.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{useApi as
|
|
1
|
+
import{useApi as c,useAnalytics as m}from"@backstage/core-plugin-api";import{useQueryClient as d,useMutation as g}from"@tanstack/react-query";import{soundcheckApiRef as y}from"../../api.esm.js";import{MutationKeys as l,QueryKeys as s}from"../graphqlKeys.esm.js";import{useSoundcheckAlert as f}from"../useSoundcheckAlert.esm.js";const C="Error Updating Campaign",n="Failed to update campaign.";function E(){const o=c(y),t=d(),{showAlert:u}=f(),a=m(),p=async e=>{const r=await o.updateCampaign(e);if(!r)throw new Error(n);return r};return g([l.UpdateCampaign],p,{onSuccess:e=>(a.captureEvent("resource_action","Update Campaign",{attributes:{resourceType:"campaign",resourceAction:"update",resourceId:e.id,success:"true"}}),Promise.all([t.invalidateQueries({queryKey:[s.GetCampaigns]}),t.invalidateQueries({queryKey:[s.GetIndividualEntityPassRateTrends]}),t.invalidateQueries({queryKey:[s.GetCampaignOwners]})])),onError:(e,r)=>{let i=n;e instanceof Error&&(i=e.message),u({severity:"error",title:C,message:i}),a.captureEvent("resource_action","Update Campaign",{attributes:{resourceType:"campaign",resourceAction:"update",resourceId:r.id,success:"false"}}),a.captureEvent("error","Update Campaign",{attributes:{errorMessage:i}})}})}export{E as useUpdateCampaign};
|
|
2
2
|
//# sourceMappingURL=useUpdateCampaign.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{useApi as c}from"@backstage/core-plugin-api";import{useQuery as s}from"@tanstack/react-query";import{soundcheckApiRef as m}from"../../api.esm.js";import{QueryKeys as u}from"../graphqlKeys.esm.js";function f(e,r,o,t,n){const i=c(m);return s([u.GetTrackOverviewForOwner,e??"",r??"",o??"",t??"",n??""],async()=>i.getTrackOverviewForOwner(e,r,o,t,n),{enabled:!!e&&!!r?.kind,staleTime:
|
|
1
|
+
import{useApi as c}from"@backstage/core-plugin-api";import{useQuery as s}from"@tanstack/react-query";import{soundcheckApiRef as m}from"../../api.esm.js";import{QueryKeys as u}from"../graphqlKeys.esm.js";function f(e,r,o,t,n){const i=c(m);return s([u.GetTrackOverviewForOwner,e??"",r??"",o??"",t??"",n??""],async()=>i.getTrackOverviewForOwner(e,r,o,t,n),{enabled:!!e&&!!r?.kind,staleTime:0,refetchInterval:!1,refetchOnWindowFocus:!1})}export{f as useTrackOverviewForOwner};
|
|
2
2
|
//# sourceMappingURL=useTrackOverviewForOwner.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{useApi as
|
|
1
|
+
import{useApi as i,useAnalytics as n}from"@backstage/core-plugin-api";import{useQueryClient as h,useMutation as C}from"@tanstack/react-query";import{soundcheckApiRef as k}from"../../api.esm.js";import{MutationKeys as y,QueryKeys as s}from"../graphqlKeys.esm.js";import{useSoundcheckAlert as l}from"../useSoundcheckAlert.esm.js";const m="Error Creating Check";function p(){const o=i(k),t=h(),{showAlert:a}=l(),c=n(),u=async e=>{const r=await o.createCheck(e);if(!r)throw new Error("Failed to create check.");return r};return C([y.CreateCheck],u,{onSuccess:e=>(c.captureEvent("resource_action","Create Check",{attributes:{resourceType:"check",resourceAction:"create",resourceId:e.id,success:"true"}}),Promise.all([t.invalidateQueries({queryKey:[s.GetChecks]}),t.invalidateQueries({queryKey:[s.GetCheckOwners]}),t.invalidateQueries({queryKey:[s.ExecutableChecks]})])),onError:e=>{let r="Failed to create check.";e instanceof Error&&(r=e.message),a({severity:"error",title:m,message:r}),c.captureEvent("resource_action","Create Check",{attributes:{resourceType:"check",resourceAction:"create",success:"false"}}),c.captureEvent("error","Create Check",{attributes:{errorMessage:r}})}})}export{p as useCreateCheck};
|
|
2
2
|
//# sourceMappingURL=useCreateCheck.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{useApi as
|
|
1
|
+
import{useApi as l,useAnalytics as y}from"@backstage/core-plugin-api";import{useQueryClient as m,useMutation as d}from"@tanstack/react-query";import{useParams as f}from"react-router-dom";import{soundcheckApiRef as h}from"../../api.esm.js";import{MutationKeys as k,QueryKeys as s}from"../graphqlKeys.esm.js";import{useSoundcheckAlert as p}from"../useSoundcheckAlert.esm.js";function v(){const a=l(h),u=y(),r=m(),{showAlert:c}=p(),o=async i=>{const e=await a.setManualCheckResult(i);if(!e)throw new Error(`Failed to set manual result for check ${i.checkId} on entity ${i.entityRef}.`);return e},{trackId:n}=f();return d([k.SetResult],o,{onSuccess:(i,{checkId:e,entityRef:t})=>(u.captureEvent("resource_action","Manual Result",{attributes:{resourceType:"manual_check_result",resourceAction:"set",resourceId:`${t}:${e}`,success:"true"}}),Promise.all([r.invalidateQueries({queryKey:[s.CertificationDetails,t]}),r.invalidateQueries({queryKey:[s.CertificationStatus,t]}),r.invalidateQueries({queryKey:[s.Certifications,t]}),r.invalidateQueries({queryKey:[s.CheckDetails,t,n,e]}),r.invalidateQueries({queryKey:[s.CheckStatus,e,t]}),r.invalidateQueries({queryKey:[s.TrackEntities]}),r.invalidateQueries({queryKey:[s.GetExemptCheckIds,t]})])),onError:(i,e)=>{let t="Failed to execute check.";i instanceof Error&&(t=i.message),c({severity:"error",title:"Failed to set manual result.",message:t}),u.captureEvent("resource_action","Manual Result",{attributes:{resourceType:"manual_check_result",resourceAction:"set",resourceId:e?.entityRef&&e?.checkId?`${e.entityRef}:${e.checkId}`:"",success:"false"}})}})}export{v as useSetManualResult};
|
|
2
2
|
//# sourceMappingURL=useSetManualResult.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{useApi as
|
|
1
|
+
import{useApi as n,useAnalytics as p}from"@backstage/core-plugin-api";import{useQueryClient as d,useMutation as h}from"@tanstack/react-query";import{soundcheckApiRef as k}from"../../api.esm.js";import{MutationKeys as m,QueryKeys as t}from"../graphqlKeys.esm.js";import{useSoundcheckAlert as C}from"../useSoundcheckAlert.esm.js";const l="Error Creating Check";function y(){const u=n(k),o=d(),{showAlert:a}=C(),s=p(),i=async e=>{const r=await u.updateCheck(e);if(!r)throw new Error("Failed to update check.");return r};return h([m.UpdateCheck],i,{onSuccess:e=>{const r=[t.GetChecks,t.GetCheckOwners,t.ExecutableChecks,t.GetFacetsForOwner,t.GetTrackOverviewForOwner];return o.setQueryData([t.Check,e.id],e),s.captureEvent("resource_action","Update Check",{attributes:{resourceType:"check",resourceAction:"update",resourceId:e.id,success:"true"}}),Promise.all(r.map(c=>o.invalidateQueries({queryKey:[c]})))},onError:(e,r)=>{let c="Failed to update check.";e instanceof Error&&(c=e.message),a({severity:"error",title:l,message:c}),s.captureEvent("resource_action","Update Check",{attributes:{resourceType:"check",resourceAction:"update",resourceId:r.id,success:"false"}}),s.captureEvent("error","Update Check",{attributes:{errorMessage:c}})}})}export{y as useUpdateCheck};
|
|
2
2
|
//# sourceMappingURL=useUpdateCheck.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{useApi as
|
|
1
|
+
import{useApi as u,useAnalytics as a}from"@backstage/core-plugin-api";import{useQueryClient as l,useMutation as p}from"@tanstack/react-query";import{soundcheckApiRef as d}from"../../api.esm.js";import{MutationKeys as f,QueryKeys as g}from"../graphqlKeys.esm.js";import{useSoundcheckAlert as C}from"../useSoundcheckAlert.esm.js";const m="Error Configuring Integration";function y(){const c=u(d),i=l(),{showAlert:n}=C(),o=a(),s=async e=>{const r=await c.updateCollectorConfig(e);if(!r)throw new Error("Failed to update integration configuration.");return r};return p([f.UpdateCollectorConfig],s,{onSuccess:e=>(o.captureEvent("resource_action","Update Collector Config",{attributes:{resourceType:"collector",resourceAction:"update",resourceId:e.id,success:"true"}}),i.invalidateQueries({queryKey:[g.GetCollectors]})),onError:(e,r)=>{let t="Failed to update integration configuration.";e instanceof Error&&(t=e.message),n({severity:"error",title:m,message:t}),o.captureEvent("resource_action","Update Collector Config",{attributes:{resourceType:"collector",resourceAction:"update",resourceId:r.collectorId,success:"false"}}),o.captureEvent("error","Update Collector Config",{attributes:{errorMessage:t}})}})}export{y as useUpdateCollectorConfig};
|
|
2
2
|
//# sourceMappingURL=useUpdateCollectorConfig.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{useApi as l}from"@backstage/core-plugin-api";import{useQueryClient as
|
|
1
|
+
import{useApi as y,useAnalytics as l}from"@backstage/core-plugin-api";import{useQueryClient as d,useMutation as m}from"@tanstack/react-query";import{soundcheckApiRef as p}from"../../api.esm.js";import{MutationKeys as f,QueryKeys as r}from"../graphqlKeys.esm.js";import{useSoundcheckAlert as E}from"../useSoundcheckAlert.esm.js";function x(){const u=y(p),s=l(),i=d(),{showAlert:c}=E(),a=async o=>{const{checkId:t,entityRef:e}=o,n=await u.deleteExemption(t,e);if(!n)throw new Error(`Failed to delete exemption for entity ${e} from check id ${t}.`);return n};return m([f.DeleteExemption],a,{onSuccess:({deleteExemption:o})=>{const{check_id:t,entity_ref:e}=o;return s.captureEvent("resource_action","Entity Exemption",{attributes:{resourceType:"exemption",resourceAction:"delete",resourceId:`${e}:${t}`,success:"true"}}),Promise.all([i.invalidateQueries({queryKey:[r.GetExemption,e,t]}),i.invalidateQueries({queryKey:[r.GetChecks,t]}),i.invalidateQueries({queryKey:[r.TrackEntities,e]}),i.invalidateQueries({queryKey:[r.CertificationDetails,e]}),i.invalidateQueries({queryKey:[r.CertificationStatus,e]}),i.invalidateQueries({queryKey:[r.Certifications,e]}),i.invalidateQueries({queryKey:[r.CheckDetails,e]}),i.invalidateQueries({queryKey:[r.CheckStatus,t,e]}),i.invalidateQueries({queryKey:[r.GetExemptCheckIds,e]}),i.invalidateQueries({queryKey:[r.GetExemptions]})])},onError:(o,t)=>{let e="Failed to delete exemption.";o instanceof Error&&(e=o.message),c({severity:"error",title:"Error Deleting Exemption",message:e}),s.captureEvent("resource_action","Entity Exemption",{attributes:{resourceType:"exemption",resourceAction:"delete",resourceId:t?.entityRef&&t?.checkId?`${t.entityRef}:${t.checkId}`:"",success:"false"}})}})}export{x as useDeleteExemption};
|
|
2
2
|
//# sourceMappingURL=useDeleteExemption.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{useApi as i}from"@backstage/core-plugin-api";import{useQuery as c}from"@tanstack/react-query";import{soundcheckApiRef as m}from"../../api.esm.js";import{QueryKeys as n}from"../graphqlKeys.esm.js";function s(e,t){const r=i(m);return c([n.
|
|
1
|
+
import{useApi as i}from"@backstage/core-plugin-api";import{useQuery as c}from"@tanstack/react-query";import{soundcheckApiRef as m}from"../../api.esm.js";import{QueryKeys as n}from"../graphqlKeys.esm.js";function s(e,t){const r=i(m);return c([n.GetExemptCheckIds,e,t],async()=>{const o=await r.getExemptCheckIds(e,t);if(!o)throw new Error(`Failed to get exempt check ids for entity ${e} and track id ${t}.`);return o},{enabled:!!t&&!!e})}export{s as useExemptCheckIds};
|
|
2
2
|
//# sourceMappingURL=useExemptCheckIds.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{useApi as n}from"@backstage/core-plugin-api";import{useQuery as p}from"@tanstack/react-query";import{soundcheckApiRef as f}from"../../api.esm.js";import{QueryKeys as u}from"../graphqlKeys.esm.js";function a(e,s){const m=n(f),{first:t=10,after:o,last:r,before:i}=s||{};return p([u.GetExemptions,e,t,o,r,i],async()=>(await m.getExemptions(e,t,o,r,i)).exemptions,{enabled:!!e})}export{a as useExemptions};
|
|
2
|
+
//# sourceMappingURL=useExemptions.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{useApi as i}from"@backstage/core-plugin-api";import{useQuery as n}from"@tanstack/react-query";import{soundcheckApiRef as m}from"../../api.esm.js";import{QueryKeys as f}from"../graphqlKeys.esm.js";function p(t,e){const r=i(m);return n([f.
|
|
1
|
+
import{useApi as i}from"@backstage/core-plugin-api";import{useQuery as n}from"@tanstack/react-query";import{soundcheckApiRef as m}from"../../api.esm.js";import{QueryKeys as f}from"../graphqlKeys.esm.js";function p(t,e){const r=i(m);return n([f.GetExemption,t,e],async()=>{if(!e)return null;const o=await r.getExemption(e,t);if(!o)throw new Error(`Failed to check for exemption for entity ${t} for check id ${e}.`);return o})}export{p as useGetExemption};
|
|
2
2
|
//# sourceMappingURL=useGetExemption.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{useApi as
|
|
1
|
+
import{useApi as m,useAnalytics as f}from"@backstage/core-plugin-api";import{useQueryClient as p,useMutation as d}from"@tanstack/react-query";import{soundcheckApiRef as l}from"../../api.esm.js";import{MutationKeys as E,QueryKeys as i}from"../graphqlKeys.esm.js";import{useSoundcheckAlert as h}from"../useSoundcheckAlert.esm.js";const x="Error Setting Exemption";function k(){const u=m(l),n=f(),t=p(),{showAlert:c}=h(),a=async r=>{const{checkId:e,entityRef:s,justification:y}=r,o=await u.setEntityExempt({checkId:e,entityRef:s,justification:y});if(!o)throw new Error(`Failed to exempt entity ${s} from check id ${e}.`);return o};return d([E.CreateExemption],a,{onSuccess:({check_id:r,entity_ref:e,user_ref:s})=>(n.captureEvent("resource_action","Entity Exemption",{attributes:{resourceType:"exemption",resourceAction:"create",resourceId:`${e}:${r}`,success:"true",userRef:s}}),Promise.all([t.invalidateQueries({queryKey:[i.GetExemption,e,r]}),t.invalidateQueries({queryKey:[i.GetChecks,r]}),t.invalidateQueries({queryKey:[i.TrackEntities,e]}),t.invalidateQueries({queryKey:[i.CertificationDetails,e]}),t.invalidateQueries({queryKey:[i.CertificationStatus,e]}),t.invalidateQueries({queryKey:[i.Certifications,e]}),t.invalidateQueries({queryKey:[i.CheckDetails,e]}),t.invalidateQueries({queryKey:[i.CheckStatus,r,e]}),t.invalidateQueries({queryKey:[i.GetExemptCheckIds,e]}),t.invalidateQueries({queryKey:[i.GetExemptions]})])),onError:(r,e)=>{let s="Failed to set exemption";r instanceof Error&&(s=r.message),c({severity:"error",title:x,message:s}),n.captureEvent("resource_action","Entity Exemption",{attributes:{resourceType:"exemption",resourceAction:"create",resourceId:e?.entityRef&&e?.checkId?`${e.entityRef}:${e.checkId}`:"",success:"false",justification:e?.justification}})}})}export{k as useSetEntityExempt};
|
|
2
2
|
//# sourceMappingURL=useSetEntityExempt.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var t=(e=>(e.GetTrack="soundcheck/track",e.GetAllTracks="soundcheck/tracks",e.GetChecks="soundcheck/checks",e.GetCollectors="soundcheck/collectors",e.GetFactSchema="soundcheck/collectors/schema",e.GetEntityFacets="soundcheck/catalog/facets",e.GetSoftwareEntityRefsForUser="soundcheck/entities/softwareEntityRefsForUser",e.GetEntityRefs="soundcheck/catalog/entityRefs",e.ExecutableChecks="soundcheck/executableChecks",e.GetCampaigns="soundcheck/campaigns",e.GetOverallCheckPassRateTrends="soundcheck/charts/overallCheckPassRateTrends",e.GetIndividualCheckPassRateTrends="soundcheck/charts/getIndividualCheckPassRateTrends",e.GetOverallTrackPassRateTrends="soundcheck/charts/overallTrackPassRateTrends",e.GetIndividualTrackPassRateTrends="soundcheck/charts/individualTrackPassRateTrends",e.GetOverallEntityPassRateTrends="soundcheck/charts/overallEntityPassRateTrends",e.GetIndividualEntityPassRateTrends="soundcheck/charts/individualEntityPassRateTrends",e.GetOverallGroupPassRateTrends="soundcheck/charts/overallGroupPassRateTrends",e.GetIndividualGroupPassRateTrends="soundcheck/charts/individualGroupPassRateTrends",e.EntityByRef="soundcheck/catalog/entityByRef",e.EntitiesByRefs="soundcheck/catalog/entitiesByRef",e.TrackEntities="soundcheck/track/entities",e.CheckEntities="soundcheck/check/entities",e.CertificationStatus="soundcheck/certificationStatus",e.CertificationStatusHistory="soundcheck/certificationStatusHistory",e.CheckStatus="soundcheck/checkStatus",e.CheckStatuses="soundcheck/checkStatuses",e.CheckStatusHistory="soundcheck/checkStatusHistory",e.CheckStatusHistories="soundcheck/checkStatusHistories",e.Check="soundcheck/check",e.CheckDetails="soundcheck/checkDetails",e.Certifications="soundcheck/certifications",e.CertificationDetails="soundcheck/certificationDetails",e.GetCheckOwners="soundcheck/checks/getOwners",e.GetTrackOwners="soundcheck/tracks/getOwners",e.GetCampaignOwners="soundcheck/campaigns/getOwners",e.GetTrackRelatedGroups="soundcheck/track/getTrackRelatedGroups",e.CheckTemplates="soundcheck/checkTemplates",e.GetFacetsForOwner="soundcheck/facets-for-owner",e.GetTrackOverviewForOwner="soundcheck/track-overview-for-owner",e.
|
|
1
|
+
var t=(e=>(e.GetTrack="soundcheck/track",e.GetAllTracks="soundcheck/tracks",e.GetChecks="soundcheck/checks",e.GetCollectors="soundcheck/collectors",e.GetFactSchema="soundcheck/collectors/schema",e.GetEntityFacets="soundcheck/catalog/facets",e.GetSoftwareEntityRefsForUser="soundcheck/entities/softwareEntityRefsForUser",e.GetEntityRefs="soundcheck/catalog/entityRefs",e.ExecutableChecks="soundcheck/executableChecks",e.GetCampaigns="soundcheck/campaigns",e.GetOverallCheckPassRateTrends="soundcheck/charts/overallCheckPassRateTrends",e.GetIndividualCheckPassRateTrends="soundcheck/charts/getIndividualCheckPassRateTrends",e.GetOverallTrackPassRateTrends="soundcheck/charts/overallTrackPassRateTrends",e.GetIndividualTrackPassRateTrends="soundcheck/charts/individualTrackPassRateTrends",e.GetOverallEntityPassRateTrends="soundcheck/charts/overallEntityPassRateTrends",e.GetIndividualEntityPassRateTrends="soundcheck/charts/individualEntityPassRateTrends",e.GetOverallGroupPassRateTrends="soundcheck/charts/overallGroupPassRateTrends",e.GetIndividualGroupPassRateTrends="soundcheck/charts/individualGroupPassRateTrends",e.EntityByRef="soundcheck/catalog/entityByRef",e.EntitiesByRefs="soundcheck/catalog/entitiesByRef",e.TrackEntities="soundcheck/track/entities",e.CheckEntities="soundcheck/check/entities",e.CertificationStatus="soundcheck/certificationStatus",e.CertificationStatusHistory="soundcheck/certificationStatusHistory",e.CheckStatus="soundcheck/checkStatus",e.CheckStatuses="soundcheck/checkStatuses",e.CheckStatusHistory="soundcheck/checkStatusHistory",e.CheckStatusHistories="soundcheck/checkStatusHistories",e.Check="soundcheck/check",e.CheckDetails="soundcheck/checkDetails",e.Certifications="soundcheck/certifications",e.CertificationDetails="soundcheck/certificationDetails",e.GetCheckOwners="soundcheck/checks/getOwners",e.GetTrackOwners="soundcheck/tracks/getOwners",e.GetCampaignOwners="soundcheck/campaigns/getOwners",e.GetTrackRelatedGroups="soundcheck/track/getTrackRelatedGroups",e.CheckTemplates="soundcheck/checkTemplates",e.GetFacetsForOwner="soundcheck/facets-for-owner",e.GetTrackOverviewForOwner="soundcheck/track-overview-for-owner",e.GetExemption="soundcheck/getExemption",e.GetExemptions="soundcheck/getExemptions",e.GetExemptCheckIds="soundcheck/getExemptCheckIds",e))(t||{}),s=(e=>(e.DeleteCheck="soundcheck/deleteCheck",e.CreateCheck="soundcheck/createCheck",e.UpdateCheck="soundcheck/updateCheck",e.ExecuteCheck="soundcheck/executeCheck",e.SetResult="soundcheck/setResult",e.CreateExemption="soundcheck/createExemption",e.UpdateExemption="soundcheck/updateExemption",e.DeleteExemption="soundcheck/deleteExemption",e.DeleteTrack="soundcheck/deleteTrack",e.CreateTrack="soundcheck/createTrack",e.UpdateTrack="soundcheck/updateTrack",e.UpdateCollectorConfig="soundcheck/updateCollectorConfig",e.CreateCampaign="soundcheck/createCampaign",e.UpdateCampaign="soundcheck/updateCampaign",e.DeleteCampaign="soundcheck/deleteCampaign",e.ArchiveCampaign="soundcheck/archiveCampaign",e))(s||{});export{s as MutationKeys,t as QueryKeys};
|
|
2
2
|
//# sourceMappingURL=graphqlKeys.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{useApi as
|
|
1
|
+
import{useApi as i,useAnalytics as k}from"@backstage/core-plugin-api";import{useQueryClient as l,useMutation as T}from"@tanstack/react-query";import{soundcheckApiRef as m}from"../../api.esm.js";import{MutationKeys as p,QueryKeys as t}from"../graphqlKeys.esm.js";import{useSoundcheckAlert as d}from"../useSoundcheckAlert.esm.js";const y="Error Creating Track";function f(){const c=i(m),s=l(),{showAlert:o}=d(),a=k(),n=async r=>{const e=await c.createTrack(r);if(!e)throw new Error("Failed to create track.");return e};return T([p.CreateTrack],n,{onSuccess:r=>{a.captureEvent("resource_action","Create Track",{attributes:{resourceType:"track",resourceAction:"create",resourceId:r.id,success:"true"}});const e=[t.GetAllTracks,t.GetOverallTrackPassRateTrends,t.GetIndividualTrackPassRateTrends,t.GetTrackOwners,t.GetFacetsForOwner,t.GetTrackOverviewForOwner];return Promise.all(e.map(u=>s.invalidateQueries({queryKey:[u]})))},onError:r=>{let e="Failed to create track.";r instanceof Error&&(e=r.message),o({severity:"error",title:y,message:e}),a.captureEvent("resource_action","Create Track",{attributes:{resourceType:"track",resourceAction:"create",success:"false"}}),a.captureEvent("error","Create Track",{attributes:{errorMessage:e}})}})}export{f as useCreateTrack};
|
|
2
2
|
//# sourceMappingURL=useCreateTrack.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{useApi as
|
|
1
|
+
import{useApi as n,useAnalytics as d}from"@backstage/core-plugin-api";import{asArray as p}from"@spotify/backstage-plugin-soundcheck-common";import{useQueryClient as k,useMutation as l}from"@tanstack/react-query";import{soundcheckApiRef as T}from"../../api.esm.js";import{MutationKeys as m,QueryKeys as t}from"../graphqlKeys.esm.js";import{useSoundcheckAlert as y}from"../useSoundcheckAlert.esm.js";const f="Error Updating Track";function v(){const c=n(T),o=k(),{showAlert:u}=y(),s=d(),i=async e=>{const r=await c.updateTrack(e);if(!r)throw new Error("Failed to update track.");return r};return l([m.UpdateTrack],i,{onSuccess:async e=>{s.captureEvent("resource_action","Update Track",{attributes:{resourceType:"track",resourceAction:"update",resourceId:e.id,success:"true"}});const r=[[t.GetTrack,e.id],t.GetAllTracks,t.GetOverallTrackPassRateTrends,t.GetIndividualTrackPassRateTrends,t.GetTrackOwners,t.GetFacetsForOwner,t.GetTrackOverviewForOwner];return Promise.all(r.map(a=>o.invalidateQueries({queryKey:p(a)})))},onError:(e,r)=>{let a="Failed to update track.";e instanceof Error&&(a=e.message),u({severity:"error",title:f,message:a}),s.captureEvent("resource_action","Update Track",{attributes:{resourceType:"track",resourceAction:"update",resourceId:r.id,success:"false"}}),s.captureEvent("error","Update Track",{attributes:{errorMessage:a,resourceId:r.id}})}})}export{v as useUpdateTrack};
|
|
2
2
|
//# sourceMappingURL=useUpdateTrack.esm.js.map
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
2
|
import * as _backstage_core_plugin_api from '@backstage/core-plugin-api';
|
|
3
|
+
import * as react from 'react';
|
|
4
|
+
import * as _backstage_frontend_plugin_api from '@backstage/frontend-plugin-api';
|
|
5
|
+
import { RouteRef } from '@backstage/frontend-plugin-api';
|
|
6
|
+
import * as _tanstack_react_query from '@tanstack/react-query';
|
|
7
|
+
import { JsonObject } from '@backstage/types';
|
|
3
8
|
|
|
4
9
|
/**
|
|
5
10
|
* Props for the EntitySoundcheckCard.
|
|
@@ -67,4 +72,83 @@ declare const SoundcheckOverviewPage: (props: OverviewPageProps) => JSX.Element;
|
|
|
67
72
|
*/
|
|
68
73
|
declare const SoundcheckRoutingPage: (props: OverviewPageProps) => JSX.Element;
|
|
69
74
|
|
|
70
|
-
|
|
75
|
+
/**
|
|
76
|
+
* Create Soundcheck integration extensions that are routable React page components.
|
|
77
|
+
*
|
|
78
|
+
* @alpha
|
|
79
|
+
*/
|
|
80
|
+
declare const IntegrationPageBlueprint: _backstage_frontend_plugin_api.ExtensionBlueprint<{
|
|
81
|
+
kind: "integration";
|
|
82
|
+
name: undefined;
|
|
83
|
+
params: {
|
|
84
|
+
integrationId: string;
|
|
85
|
+
loader: () => Promise<JSX.Element>;
|
|
86
|
+
path?: string;
|
|
87
|
+
routeRef?: RouteRef;
|
|
88
|
+
};
|
|
89
|
+
output: _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<react.JSX.Element, "core.reactElement", {}> | _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<string, "core.routing.path", {}> | _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<string, "soundcheck.integrationId", {}> | _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<RouteRef<_backstage_frontend_plugin_api.AnyRouteRefParams>, "core.routing.ref", {
|
|
90
|
+
optional: true;
|
|
91
|
+
}>;
|
|
92
|
+
inputs: {};
|
|
93
|
+
config: {};
|
|
94
|
+
configInput: {};
|
|
95
|
+
dataRefs: {
|
|
96
|
+
integrationId: _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<string, "soundcheck.integrationId", {}>;
|
|
97
|
+
};
|
|
98
|
+
}>;
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* React hook that fetches collector configurations by their IDs.
|
|
102
|
+
*
|
|
103
|
+
* @public
|
|
104
|
+
*/
|
|
105
|
+
declare function useGetCollectors(collectorIds?: string[]): _tanstack_react_query.UseQueryResult<{
|
|
106
|
+
__typename?: "Collector";
|
|
107
|
+
id: string;
|
|
108
|
+
name?: string | null;
|
|
109
|
+
description?: string | null;
|
|
110
|
+
factNames: Array<string>;
|
|
111
|
+
config?: any | null;
|
|
112
|
+
configSchema?: any | null;
|
|
113
|
+
isConfigurable: boolean;
|
|
114
|
+
isEditable: boolean;
|
|
115
|
+
hasUIConfig?: boolean | null;
|
|
116
|
+
collectionConfigs: Array<{
|
|
117
|
+
__typename?: "CollectionConfig";
|
|
118
|
+
factRefs: Array<string>;
|
|
119
|
+
filter?: any | null;
|
|
120
|
+
frequency?: any | null;
|
|
121
|
+
cache?: any | null;
|
|
122
|
+
exclude?: any | null;
|
|
123
|
+
}>;
|
|
124
|
+
dependentChecks?: Array<{
|
|
125
|
+
__typename?: "Checker";
|
|
126
|
+
id: string;
|
|
127
|
+
name?: string | null;
|
|
128
|
+
}> | null;
|
|
129
|
+
}[], unknown>;
|
|
130
|
+
|
|
131
|
+
/**
|
|
132
|
+
* React hook that saves collector configuration.
|
|
133
|
+
*
|
|
134
|
+
* @public
|
|
135
|
+
*/
|
|
136
|
+
declare function useUpdateCollectorConfig(): _tanstack_react_query.UseMutationResult<{
|
|
137
|
+
__typename?: "Collector";
|
|
138
|
+
id: string;
|
|
139
|
+
factNames: Array<string>;
|
|
140
|
+
config?: any | null;
|
|
141
|
+
configSchema?: any | null;
|
|
142
|
+
collectionConfigs: Array<{
|
|
143
|
+
__typename?: "CollectionConfig";
|
|
144
|
+
factRefs: Array<string>;
|
|
145
|
+
filter?: any | null;
|
|
146
|
+
frequency?: any | null;
|
|
147
|
+
cache?: any | null;
|
|
148
|
+
}>;
|
|
149
|
+
}, unknown, {
|
|
150
|
+
collectorId: string;
|
|
151
|
+
config?: JsonObject;
|
|
152
|
+
}, unknown>;
|
|
153
|
+
|
|
154
|
+
export { EntitySoundcheckCard, type EntitySoundcheckCardProps, EntitySoundcheckContent, GroupSoundcheckContent, IntegrationPageBlueprint, type OverviewPageProps, SoundcheckOverviewPage, SoundcheckRoutingPage, soundcheckPlugin, useGetCollectors, useUpdateCollectorConfig };
|
package/dist/index.esm.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{EntitySoundcheckCard as
|
|
1
|
+
import{EntitySoundcheckCard as m,EntitySoundcheckContent as d,GroupSoundcheckContent as g,SoundcheckOverviewPage as a,SoundcheckRoutingPage as h,soundcheckPlugin as k}from"./plugin.esm.js";import"react/jsx-runtime";import"./components/SoundcheckQueryClientProvider/SoundcheckQueryClientProvider.esm.js";import"./components/EntitySoundcheckCard/Card.esm.js";import{IntegrationPageBlueprint as C}from"./blueprints/IntegrationPageBlueprint.esm.js";import{useGetCollectors as S}from"./hooks/collectors/useGetCollectors.esm.js";import{useUpdateCollectorConfig as x}from"./hooks/collectors/useUpdateCollectorConfig.esm.js";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"./api.esm.js";import"./hooks/graphqlKeys.esm.js";export{m as EntitySoundcheckCard,d as EntitySoundcheckContent,g as GroupSoundcheckContent,C as IntegrationPageBlueprint,a as SoundcheckOverviewPage,h as SoundcheckRoutingPage,k as soundcheckPlugin,S as useGetCollectors,x as useUpdateCollectorConfig};
|
|
2
2
|
//# sourceMappingURL=index.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{z as e}from"zod";import{filterPresent as
|
|
1
|
+
import F from"lodash";import{z as e}from"zod";import{filterPresent as n}from"../components/Filter/utils.esm.js";import"../components/Filter/FilterComponent.esm.js";import{TimeUnit as h}from"../components/Frequency/types.esm.js";import"../components/Frequency/util.esm.js";import"../components/Frequency/FrequencyComponent.esm.js";import{validateCacheConfig as l}from"./collectors.esm.js";import{validateFrequency as o}from"./frequency.esm.js";const b="At least one check is required",v="This field is required",s=e.nativeEnum(h),S=e.strictObject({enabled:e.boolean(),hasDuration:e.boolean(),unit:s.optional(),value:e.number().min(1,"Value must be greater than 0.").optional()}).refine(t=>l(t)===!0,t=>({message:l(t)})),k=e.strictObject({type:e.enum(["HumanDuration","cron"]),unit:s.optional(),value:e.number().min(1,"Value must be greater than 0.").optional(),cron:e.string().optional()}).refine(t=>o(t)===!0,t=>({message:o(t)})),r=e.strictObject({selectedKinds:e.string().array(),selectedTypes:e.string().array(),selectedLifecycles:e.string().array(),selectedOwners:e.string().array(),selectedSystems:e.string().array(),selectedTags:e.string().array()}),i=e.strictObject({selectedLabels:e.object({key:e.string(),value:e.string().array().min(1,"Requires at least 1 value for key.")}).array().optional(),selectedAnnotations:e.object({key:e.string(),value:e.string().array().min(1,"Requires at least 1 value for key.")}).array().optional(),selectedOtherFilters:e.object({key:e.string(),value:e.string().array().min(1,"Requires at least 1 value for key.")}).array().optional()}),c=e.strictObject({filter:r.optional(),keyValueFilter:i.optional(),excludeFilter:r.optional(),excludeKeyValueFilter:i.optional()}),u=t=>!(!n(t.filter,t.keyValueFilter)&&n(t.excludeFilter,t.excludeKeyValueFilter)),m="Cannot have an include and exclude filter on the same facet (kind, type, lifecycle, etc.).",f=t=>{if(t.filter&&t.excludeFilter){const y=Object.keys(t.filter),d=Object.keys(t.excludeFilter);for(const a of F.intersection(y,d)){const p=t.filter[a],g=t.excludeFilter[a];if(p.length>0&&g.length>0)return!1}}return!0},C=c.refine(u,"Cannot have an exclude filter without an include filter.").refine(f,m);export{b as CHECK_IS_REQUIRED_MSG,m as CONFLICTING_FILTER_ERROR_MESSAGE,S as CacheConfigSchema,v as FIELD_IS_REQUIRED_MSG,r as FiltersSchema,k as FrequencySchema,i as KeyValueFiltersSchema,c as baseFiltersSchema,f as ensureNoConflictingFilters,C as formFiltersSchema,u as refineFilters};
|
|
2
2
|
//# sourceMappingURL=validation.esm.js.map
|