From 61b0d616afec1cd93135ec821277dc88020a3bd9 Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Wed, 2 Jun 2021 15:59:06 -0400 Subject: [PATCH 001/141] Replaced chart legend triangleUp symbols with triangleLeft https://issues.redhat.com/browse/COST-1484 --- src/components/charts/costChart/costChart.tsx | 4 ++-- src/components/charts/dailyCostChart/dailyCostChart.tsx | 4 ++-- src/components/charts/dailyTrendChart/dailyTrendChart.tsx | 2 +- src/components/charts/trendChart/trendChart.tsx | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/components/charts/costChart/costChart.tsx b/src/components/charts/costChart/costChart.tsx index cd84e0811..88a35ae28 100644 --- a/src/components/charts/costChart/costChart.tsx +++ b/src/components/charts/costChart/costChart.tsx @@ -242,7 +242,7 @@ class CostChart extends React.Component { name: getCostRangeString(forecastConeData, 'chart.cost_forecast_cone_legend_label', false, false), symbol: { fill: chartStyles.forecastConeDataColorScale[0], - type: 'triangleUp', + type: 'triangleLeft', }, tooltip: getCostRangeString(forecastConeData, 'chart.cost_forecast_cone_legend_tooltip', false, false), }, @@ -265,7 +265,7 @@ class CostChart extends React.Component { ), symbol: { fill: chartStyles.forecastInfrastructureConeDataColorScale[0], - type: 'triangleUp', + type: 'triangleLeft', }, tooltip: getCostRangeString( forecastInfrastructureConeData, diff --git a/src/components/charts/dailyCostChart/dailyCostChart.tsx b/src/components/charts/dailyCostChart/dailyCostChart.tsx index dfabf170e..d061a5afb 100644 --- a/src/components/charts/dailyCostChart/dailyCostChart.tsx +++ b/src/components/charts/dailyCostChart/dailyCostChart.tsx @@ -247,7 +247,7 @@ class DailyCostChart extends React.Component { name: getCostRangeString(forecastConeData, 'chart.cost_forecast_cone_legend_label', false, false), symbol: { fill: chartStyles.forecastConeDataColorScale[0], - type: 'triangleUp', + type: 'triangleLeft', }, tooltip: getCostRangeString(forecastConeData, 'chart.cost_forecast_cone_legend_tooltip', false, false), }, @@ -271,7 +271,7 @@ class DailyCostChart extends React.Component { ), symbol: { fill: chartStyles.forecastInfrastructureConeDataColorScale[0], - type: 'triangleUp', + type: 'triangleLeft', }, tooltip: getCostRangeString( forecastInfrastructureConeData, diff --git a/src/components/charts/dailyTrendChart/dailyTrendChart.tsx b/src/components/charts/dailyTrendChart/dailyTrendChart.tsx index 699f677ab..99ef9383a 100644 --- a/src/components/charts/dailyTrendChart/dailyTrendChart.tsx +++ b/src/components/charts/dailyTrendChart/dailyTrendChart.tsx @@ -182,7 +182,7 @@ class DailyTrendChart extends React.Component { name: getCostRangeString(forecastConeData, 'chart.cost_forecast_cone_legend_label', false, false), symbol: { fill: chartStyles.forecastConeDataColorScale[0], - type: 'triangleUp', + type: 'triangleLeft', }, tooltip: getCostRangeString(forecastConeData, 'chart.cost_forecast_cone_legend_tooltip', false, false), }, diff --git a/src/components/charts/trendChart/trendChart.tsx b/src/components/charts/trendChart/trendChart.tsx index 85f9d5401..80d7dc932 100644 --- a/src/components/charts/trendChart/trendChart.tsx +++ b/src/components/charts/trendChart/trendChart.tsx @@ -178,7 +178,7 @@ class TrendChart extends React.Component { name: getCostRangeString(forecastConeData, 'chart.cost_forecast_cone_legend_label', false, false), symbol: { fill: chartStyles.forecastConeDataColorScale[0], - type: 'triangleUp', + type: 'triangleLeft', }, tooltip: getCostRangeString(forecastConeData, 'chart.cost_forecast_cone_legend_tooltip', false, false), }, From 38f6959a627fc7f9c5d5cc3405f71398d760e29c Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Tue, 27 Apr 2021 12:43:37 -0400 Subject: [PATCH 002/141] Move date ranges from cost explorer to utils --- src/pages/views/explorer/explorerUtils.ts | 29 ++++------------------- src/utils/dateRange.ts | 23 ++++++++++++++++++ 2 files changed, 27 insertions(+), 25 deletions(-) diff --git a/src/pages/views/explorer/explorerUtils.ts b/src/pages/views/explorer/explorerUtils.ts index 718198dc8..9f10adde7 100644 --- a/src/pages/views/explorer/explorerUtils.ts +++ b/src/pages/views/explorer/explorerUtils.ts @@ -4,13 +4,12 @@ import { ReportPathsType, ReportType } from 'api/reports/report'; import { TagPathsType } from 'api/tags/tag'; import { UserAccess } from 'api/userAccess'; import { ComputedReportItemType } from 'components/charts/common/chartDatumUtils'; -import { format } from 'date-fns'; import { ComputedAwsReportItemsParams } from 'utils/computedReport/getComputedAwsReportItems'; import { ComputedAzureReportItemsParams } from 'utils/computedReport/getComputedAzureReportItems'; import { ComputedGcpReportItemsParams } from 'utils/computedReport/getComputedGcpReportItems'; import { ComputedIbmReportItemsParams } from 'utils/computedReport/getComputedIbmReportItems'; import { ComputedOcpReportItemsParams } from 'utils/computedReport/getComputedOcpReportItems'; -import { getCurrentMonthDate } from 'utils/dateRange'; +import { getCurrentMonthDate, getLast30DaysDate, getLast60DaysDate, getPreviousMonthDate } from 'utils/dateRange'; import { hasAwsAccess, hasAzureAccess, hasGcpAccess, hasIbmAccess, hasOcpAccess } from 'utils/userAccess'; // The date range drop down has the options below (if today is Jan 18th…) @@ -160,37 +159,17 @@ export const getComputedReportItemType = (perspective: string) => { }; export const getDateRange = queryFromRoute => { - const endDate = new Date(); - const startDate = new Date(); let dateRange; switch (getDateRangeDefault(queryFromRoute)) { case DateRangeType.previousMonthToDate: - startDate.setDate(1); // Required to obtain correct month - startDate.setMonth(startDate.getMonth() - 1); - - dateRange = { - end_date: format(endDate, 'yyyy-MM-dd'), - start_date: format(startDate, 'yyyy-MM-dd'), - }; + dateRange = getPreviousMonthDate(); break; case DateRangeType.lastSixtyDays: - // 61 days, including today's date. See https://issues.redhat.com/browse/COST-1117 - startDate.setDate(startDate.getDate() - 60); - - dateRange = { - end_date: format(endDate, 'yyyy-MM-dd'), - start_date: format(startDate, 'yyyy-MM-dd'), - }; + dateRange = getLast60DaysDate(); break; case DateRangeType.lastThirtyDays: - // 31 days, including today's date. See https://issues.redhat.com/browse/COST-1117 - startDate.setDate(startDate.getDate() - 30); - - dateRange = { - end_date: format(endDate, 'yyyy-MM-dd'), - start_date: format(startDate, 'yyyy-MM-dd'), - }; + dateRange = getLast30DaysDate(); break; case DateRangeType.currentMonthToDate: default: diff --git a/src/utils/dateRange.ts b/src/utils/dateRange.ts index 0489dc225..5e8a9b8dd 100644 --- a/src/utils/dateRange.ts +++ b/src/utils/dateRange.ts @@ -87,3 +87,26 @@ export function getCurrentMonthDate() { export function getPreviousMonthDate() { return getMonthDate(1); } + +// Returns offset + 1 days, including today's date. See https://issues.redhat.com/browse/COST-1117 +export function getLastDaysDate(offset: number) { + const endDate = new Date(); + const startDate = new Date(); + + startDate.setDate(startDate.getDate() - offset); + + return { + end_date: format(endDate, 'yyyy-MM-dd'), + start_date: format(startDate, 'yyyy-MM-dd'), + }; +} + +// Returns 31 days, including today's date +export function getLast30DaysDate() { + return getLastDaysDate(30); +} + +// Returns 61 days, including today's date +export function getLast60DaysDate() { + return getLastDaysDate(60); +} From 91bf557fc758c329bed371eb67d44bd20583c976 Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Tue, 27 Apr 2021 13:19:07 -0400 Subject: [PATCH 003/141] Restored previous month and month to date --- src/pages/views/explorer/explorerUtils.ts | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/pages/views/explorer/explorerUtils.ts b/src/pages/views/explorer/explorerUtils.ts index 9f10adde7..c397b4c94 100644 --- a/src/pages/views/explorer/explorerUtils.ts +++ b/src/pages/views/explorer/explorerUtils.ts @@ -4,12 +4,13 @@ import { ReportPathsType, ReportType } from 'api/reports/report'; import { TagPathsType } from 'api/tags/tag'; import { UserAccess } from 'api/userAccess'; import { ComputedReportItemType } from 'components/charts/common/chartDatumUtils'; +import { format } from 'date-fns'; import { ComputedAwsReportItemsParams } from 'utils/computedReport/getComputedAwsReportItems'; import { ComputedAzureReportItemsParams } from 'utils/computedReport/getComputedAzureReportItems'; import { ComputedGcpReportItemsParams } from 'utils/computedReport/getComputedGcpReportItems'; import { ComputedIbmReportItemsParams } from 'utils/computedReport/getComputedIbmReportItems'; import { ComputedOcpReportItemsParams } from 'utils/computedReport/getComputedOcpReportItems'; -import { getCurrentMonthDate, getLast30DaysDate, getLast60DaysDate, getPreviousMonthDate } from 'utils/dateRange'; +import { getCurrentMonthDate, getLast30DaysDate, getLast60DaysDate } from 'utils/dateRange'; import { hasAwsAccess, hasAzureAccess, hasGcpAccess, hasIbmAccess, hasOcpAccess } from 'utils/userAccess'; // The date range drop down has the options below (if today is Jan 18th…) @@ -159,11 +160,19 @@ export const getComputedReportItemType = (perspective: string) => { }; export const getDateRange = queryFromRoute => { + const endDate = new Date(); + const startDate = new Date(); let dateRange; switch (getDateRangeDefault(queryFromRoute)) { case DateRangeType.previousMonthToDate: - dateRange = getPreviousMonthDate(); + startDate.setDate(1); // Required to obtain correct month + startDate.setMonth(startDate.getMonth() - 1); // Note: Must include previous and current month + + dateRange = { + end_date: format(endDate, 'yyyy-MM-dd'), + start_date: format(startDate, 'yyyy-MM-dd'), + }; break; case DateRangeType.lastSixtyDays: dateRange = getLast60DaysDate(); From dd5e54f4ecb3edbbb5362a4232e6eae49f78aa46 Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Tue, 27 Apr 2021 13:26:47 -0400 Subject: [PATCH 004/141] Refactored tags API request to use start and end dates --- .../views/components/groupBy/groupBy.tsx | 50 +++++++++++++------ .../details/awsDetails/detailsToolbar.tsx | 7 ++- .../details/azureDetails/detailsToolbar.tsx | 12 ++--- .../views/details/components/tag/tagLink.tsx | 10 ++-- .../views/details/components/tag/tagModal.tsx | 10 ++-- .../details/gcpDetails/detailsToolbar.tsx | 7 ++- .../details/ibmDetails/detailsToolbar.tsx | 7 ++- .../details/ocpDetails/detailsToolbar.tsx | 12 ++--- src/pages/views/explorer/explorerFilter.tsx | 40 +++++++++------ 9 files changed, 102 insertions(+), 53 deletions(-) diff --git a/src/pages/views/components/groupBy/groupBy.tsx b/src/pages/views/components/groupBy/groupBy.tsx index 12938c95b..2b2c0b8f1 100644 --- a/src/pages/views/components/groupBy/groupBy.tsx +++ b/src/pages/views/components/groupBy/groupBy.tsx @@ -9,6 +9,7 @@ import { connect } from 'react-redux'; import { createMapStateToProps, FetchStatus } from 'store/common'; import { orgActions, orgSelectors } from 'store/orgs'; import { tagActions, tagSelectors } from 'store/tags'; +import { getLast60DaysDate } from 'utils/dateRange'; import { styles } from './groupBy.styles'; import { GroupByOrg } from './groupByOrg'; @@ -23,11 +24,12 @@ interface GroupByOwnProps extends WithTranslation { label: string; value: string; }[]; + orgQueryString?: string; orgReportPathsType?: OrgPathsType; perspective?: PerspectiveType; - queryString?: string; showOrgs?: boolean; showTags?: boolean; + tagQueryString?: string; tagReportPathsType: TagPathsType; } @@ -83,12 +85,21 @@ class GroupByBase extends React.Component { } public componentDidMount() { - const { fetchOrg, fetchTag, queryString, orgReportPathsType, showOrgs, showTags, tagReportPathsType } = this.props; + const { + fetchOrg, + fetchTag, + orgQueryString, + orgReportPathsType, + showOrgs, + showTags, + tagQueryString, + tagReportPathsType, + } = this.props; if (showOrgs) { - fetchOrg(orgReportPathsType, orgReportType, queryString); + fetchOrg(orgReportPathsType, orgReportType, orgQueryString); } if (showTags) { - fetchTag(tagReportPathsType, tagReportType, queryString); + fetchTag(tagReportPathsType, tagReportType, tagQueryString); } this.setState({ currentItem: this.getCurrentGroupBy(), @@ -100,19 +111,20 @@ class GroupByBase extends React.Component { fetchOrg, fetchTag, groupBy, + orgQueryString, orgReportPathsType, perspective, - queryString, showOrgs, showTags, + tagQueryString, tagReportPathsType, } = this.props; if (prevProps.groupBy !== groupBy || prevProps.perspective !== perspective) { if (showOrgs) { - fetchOrg(orgReportPathsType, orgReportType, queryString); + fetchOrg(orgReportPathsType, orgReportType, orgQueryString); } if (showTags) { - fetchTag(tagReportPathsType, tagReportType, queryString); + fetchTag(tagReportPathsType, tagReportType, tagQueryString); } let options; @@ -252,27 +264,37 @@ class GroupByBase extends React.Component { const mapStateToProps = createMapStateToProps( (state, { orgReportPathsType, tagReportPathsType }) => { - const queryString = getQuery({ - // key_only: true + const orgQueryString = getQuery({ + // TBD... }); - const orgReport = orgSelectors.selectOrg(state, orgReportPathsType, orgReportType, queryString); + const orgReport = orgSelectors.selectOrg(state, orgReportPathsType, orgReportType, orgQueryString); const orgReportFetchStatus = orgSelectors.selectOrgFetchStatus( state, orgReportPathsType, orgReportType, - queryString + orgQueryString ); - const tagReport = tagSelectors.selectTag(state, tagReportPathsType, tagReportType, queryString); + + const { start_date, end_date } = getLast60DaysDate(); + + // Omitting key_only to share a single, cached request -- although the header doesn't need key values, the toolbar does + const tagQueryString = getQuery({ + start_date, + end_date, + // key_only: true + }); + const tagReport = tagSelectors.selectTag(state, tagReportPathsType, tagReportType, tagQueryString); const tagReportFetchStatus = tagSelectors.selectTagFetchStatus( state, tagReportPathsType, tagReportType, - queryString + tagQueryString ); return { - queryString, + orgQueryString, orgReport, orgReportFetchStatus, + tagQueryString, tagReport, tagReportFetchStatus, }; diff --git a/src/pages/views/details/awsDetails/detailsToolbar.tsx b/src/pages/views/details/awsDetails/detailsToolbar.tsx index 8881b6f6b..f0645549f 100644 --- a/src/pages/views/details/awsDetails/detailsToolbar.tsx +++ b/src/pages/views/details/awsDetails/detailsToolbar.tsx @@ -11,6 +11,7 @@ import { createMapStateToProps, FetchStatus } from 'store/common'; import { orgActions, orgSelectors } from 'store/orgs'; import { tagActions, tagSelectors } from 'store/tags'; import { ComputedReportItem } from 'utils/computedReport/getComputedReportItems'; +import { getLast60DaysDate } from 'utils/dateRange'; import { isEqual } from 'utils/equal'; interface DetailsToolbarOwnProps { @@ -151,8 +152,12 @@ export class DetailsToolbarBase extends React.Component { // eslint-disable-next-line @typescript-eslint/no-unused-vars const mapStateToProps = createMapStateToProps((state, props) => { - // Omitting key_only to share a single request -- the toolbar needs key values + const { start_date, end_date } = getLast60DaysDate(); + + // Omitting key_only to share a single, cached request -- although the header doesn't need key values, the toolbar does const queryString = getQuery({ + start_date, + end_date, // key_only: true }); const orgReport = orgSelectors.selectOrg(state, orgReportPathsType, orgReportType, queryString); diff --git a/src/pages/views/details/azureDetails/detailsToolbar.tsx b/src/pages/views/details/azureDetails/detailsToolbar.tsx index 253974433..679dd0c04 100644 --- a/src/pages/views/details/azureDetails/detailsToolbar.tsx +++ b/src/pages/views/details/azureDetails/detailsToolbar.tsx @@ -10,6 +10,7 @@ import { connect } from 'react-redux'; import { createMapStateToProps, FetchStatus } from 'store/common'; import { tagActions, tagSelectors } from 'store/tags'; import { ComputedReportItem } from 'utils/computedReport/getComputedReportItems'; +import { getLast60DaysDate } from 'utils/dateRange'; import { isEqual } from 'utils/equal'; interface DetailsToolbarOwnProps { @@ -139,13 +140,12 @@ export class DetailsToolbarBase extends React.Component { // eslint-disable-next-line @typescript-eslint/no-unused-vars const mapStateToProps = createMapStateToProps((state, props) => { - // Omitting key_only to share a single request -- the toolbar needs key values + const { start_date, end_date } = getLast60DaysDate(); + + // Omitting key_only to share a single, cached request -- although the header doesn't need key values, the toolbar does const queryString = getQuery({ - filter: { - resolution: 'monthly', - time_scope_units: 'month', - time_scope_value: -1, - }, + start_date, + end_date, // key_only: true }); const tagReport = tagSelectors.selectTag(state, tagReportPathsType, tagReportType, queryString); diff --git a/src/pages/views/details/components/tag/tagLink.tsx b/src/pages/views/details/components/tag/tagLink.tsx index c3dd3b653..812dcbaf5 100644 --- a/src/pages/views/details/components/tag/tagLink.tsx +++ b/src/pages/views/details/components/tag/tagLink.tsx @@ -8,6 +8,7 @@ import { connect } from 'react-redux'; import { createMapStateToProps, FetchStatus } from 'store/common'; import { tagActions, tagSelectors } from 'store/tags'; import { getTestProps, testIds } from 'testIds'; +import { getLast60DaysDate } from 'utils/dateRange'; import { styles } from './tag.styles'; import { TagModal } from './tagModal'; @@ -107,19 +108,18 @@ const mapStateToProps = createMapStateToProps { // eslint-disable-next-line @typescript-eslint/no-unused-vars const mapStateToProps = createMapStateToProps((state, props) => { - // Omitting key_only to share a single request -- the toolbar needs key values + const { start_date, end_date } = getLast60DaysDate(); + + // Omitting key_only to share a single, cached request -- although the header doesn't need key values, the toolbar does const queryString = getQuery({ + start_date, + end_date, // key_only: true }); diff --git a/src/pages/views/details/ibmDetails/detailsToolbar.tsx b/src/pages/views/details/ibmDetails/detailsToolbar.tsx index 694e1bdc0..40f86cc2a 100644 --- a/src/pages/views/details/ibmDetails/detailsToolbar.tsx +++ b/src/pages/views/details/ibmDetails/detailsToolbar.tsx @@ -9,6 +9,7 @@ import { connect } from 'react-redux'; import { createMapStateToProps, FetchStatus } from 'store/common'; import { tagActions, tagSelectors } from 'store/tags'; import { ComputedReportItem } from 'utils/computedReport/getComputedReportItems'; +import { getLast60DaysDate } from 'utils/dateRange'; import { isEqual } from 'utils/equal'; interface DetailsToolbarOwnProps { @@ -136,8 +137,12 @@ export class DetailsToolbarBase extends React.Component { // eslint-disable-next-line @typescript-eslint/no-unused-vars const mapStateToProps = createMapStateToProps((state, props) => { - // Omitting key_only to share a single request -- the toolbar needs key values + const { start_date, end_date } = getLast60DaysDate(); + + // Omitting key_only to share a single, cached request -- although the header doesn't need key values, the toolbar does const queryString = getQuery({ + start_date, + end_date, // key_only: true }); diff --git a/src/pages/views/details/ocpDetails/detailsToolbar.tsx b/src/pages/views/details/ocpDetails/detailsToolbar.tsx index e1ab51ea9..6e8fa1737 100644 --- a/src/pages/views/details/ocpDetails/detailsToolbar.tsx +++ b/src/pages/views/details/ocpDetails/detailsToolbar.tsx @@ -10,6 +10,7 @@ import { connect } from 'react-redux'; import { createMapStateToProps, FetchStatus } from 'store/common'; import { tagActions, tagSelectors } from 'store/tags'; import { ComputedReportItem } from 'utils/computedReport/getComputedReportItems'; +import { getLast60DaysDate } from 'utils/dateRange'; import { isEqual } from 'utils/equal'; interface DetailsToolbarOwnProps { @@ -132,13 +133,12 @@ export class DetailsToolbarBase extends React.Component { // eslint-disable-next-line @typescript-eslint/no-unused-vars const mapStateToProps = createMapStateToProps((state, props) => { - // Omitting key_only to share a single request -- the toolbar needs key values + const { start_date, end_date } = getLast60DaysDate(); + + // Omitting key_only to share a single, cached request -- although the header doesn't need key values, the toolbar does const queryString = getQuery({ - filter: { - resolution: 'monthly', - time_scope_units: 'month', - time_scope_value: -1, - }, + start_date, + end_date, // key_only: true }); const tagReport = tagSelectors.selectTag(state, tagReportPathsType, tagReportType, queryString); diff --git a/src/pages/views/explorer/explorerFilter.tsx b/src/pages/views/explorer/explorerFilter.tsx index 10462b161..191995684 100644 --- a/src/pages/views/explorer/explorerFilter.tsx +++ b/src/pages/views/explorer/explorerFilter.tsx @@ -13,6 +13,7 @@ import { createMapStateToProps, FetchStatus } from 'store/common'; import { orgActions, orgSelectors } from 'store/orgs'; import { tagActions, tagSelectors } from 'store/tags'; import { allUserAccessQuery, userAccessSelectors } from 'store/userAccess'; +import { getLast60DaysDate } from 'utils/dateRange'; import { isEqual } from 'utils/equal'; import { DateRange } from './dateRange'; @@ -34,9 +35,10 @@ interface ExplorerFilterOwnProps { isDisabled?: boolean; onFilterAdded(filterType: string, filterValue: string); onFilterRemoved(filterType: string, filterValue?: string); + orgQueryString?: string; pagination?: React.ReactNode; query?: Query; - queryString?: string; + tagQueryString?: string; } interface ExplorerFilterStateProps { @@ -74,13 +76,13 @@ export class ExplorerFilterBase extends React.Component { public state: ExplorerFilterState = { ...this.defaultState }; public componentDidMount() { - const { fetchOrg, fetchTag, orgReportPathsType, queryString, tagReportPathsType } = this.props; + const { fetchOrg, fetchTag, orgQueryString, orgReportPathsType, tagQueryString, tagReportPathsType } = this.props; if (orgReportPathsType) { - fetchOrg(orgReportPathsType, orgReportType, queryString); + fetchOrg(orgReportPathsType, orgReportType, orgQueryString); } if (tagReportPathsType) { - fetchTag(tagReportPathsType, tagReportType, queryString); + fetchTag(tagReportPathsType, tagReportType, tagQueryString); } this.setState({ categoryOptions: this.getCategoryOptions(), @@ -92,21 +94,22 @@ export class ExplorerFilterBase extends React.Component { const { fetchOrg, fetchTag, + orgQueryString, orgReport, orgReportPathsType, perspective, query, - queryString, + tagQueryString, tagReport, tagReportPathsType, } = this.props; if (query && !isEqual(query, prevProps.query)) { if (orgReportPathsType) { - fetchOrg(orgReportPathsType, orgReportType, queryString); + fetchOrg(orgReportPathsType, orgReportType, orgQueryString); } if (tagReportPathsType) { - fetchTag(tagReportPathsType, tagReportType, queryString); + fetchTag(tagReportPathsType, tagReportType, tagQueryString); } } if (!isEqual(orgReport, prevProps.orgReport) || !isEqual(tagReport, prevProps.tagReport)) { @@ -206,33 +209,42 @@ const mapStateToProps = createMapStateToProps Date: Tue, 27 Apr 2021 15:31:12 -0400 Subject: [PATCH 005/141] Modified getDateRange not to choose the default date range type --- src/pages/views/explorer/explorer.tsx | 2 +- src/pages/views/explorer/explorerChart.tsx | 2 +- src/pages/views/explorer/explorerTable.tsx | 2 +- src/pages/views/explorer/explorerUtils.ts | 4 ++-- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/pages/views/explorer/explorer.tsx b/src/pages/views/explorer/explorer.tsx index 5e3c8ad86..c8bd8447b 100644 --- a/src/pages/views/explorer/explorer.tsx +++ b/src/pages/views/explorer/explorer.tsx @@ -503,7 +503,7 @@ const mapStateToProps = createMapStateToProps(location.search); const perspective = getPerspectiveDefault(queryFromRoute, userAccess); const dateRange = getDateRangeDefault(queryFromRoute); - const { end_date, start_date } = getDateRange(queryFromRoute); + const { end_date, start_date } = getDateRange(getDateRangeDefault(queryFromRoute)); const query = { filter: { diff --git a/src/pages/views/explorer/explorerChart.tsx b/src/pages/views/explorer/explorerChart.tsx index fc9e58d4e..a293ecee1 100644 --- a/src/pages/views/explorer/explorerChart.tsx +++ b/src/pages/views/explorer/explorerChart.tsx @@ -283,7 +283,7 @@ const mapStateToProps = createMapStateToProps(location.search); const perspective = getPerspectiveDefault(queryFromRoute, userAccess); const dateRange = getDateRangeDefault(queryFromRoute); - const { end_date, start_date } = getDateRange(queryFromRoute); + const { end_date, start_date } = getDateRange(getDateRangeDefault(queryFromRoute)); const query = { filter: { diff --git a/src/pages/views/explorer/explorerTable.tsx b/src/pages/views/explorer/explorerTable.tsx index 1570f47a7..2b08daf52 100644 --- a/src/pages/views/explorer/explorerTable.tsx +++ b/src/pages/views/explorer/explorerTable.tsx @@ -351,7 +351,7 @@ const mapStateToProps = createMapStateToProps(location.search); const perspective = getPerspectiveDefault(queryFromRoute, userAccess); const dateRange = getDateRangeDefault(queryFromRoute); - const { end_date, start_date } = getDateRange(queryFromRoute); + const { end_date, start_date } = getDateRange(getDateRangeDefault(queryFromRoute)); return { dateRange, diff --git a/src/pages/views/explorer/explorerUtils.ts b/src/pages/views/explorer/explorerUtils.ts index c397b4c94..19fc6617f 100644 --- a/src/pages/views/explorer/explorerUtils.ts +++ b/src/pages/views/explorer/explorerUtils.ts @@ -159,12 +159,12 @@ export const getComputedReportItemType = (perspective: string) => { return result; }; -export const getDateRange = queryFromRoute => { +export const getDateRange = (dateRangeType: DateRangeType) => { const endDate = new Date(); const startDate = new Date(); let dateRange; - switch (getDateRangeDefault(queryFromRoute)) { + switch (dateRangeType) { case DateRangeType.previousMonthToDate: startDate.setDate(1); // Required to obtain correct month startDate.setMonth(startDate.getMonth() - 1); // Note: Must include previous and current month From cee89d8e869bb147a0c9e8988598728aae432303 Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Tue, 27 Apr 2021 15:32:29 -0400 Subject: [PATCH 006/141] Modified details pages to fetch tags using current month as date range --- src/pages/views/details/awsDetails/detailsToolbar.tsx | 10 +++++----- .../views/details/azureDetails/detailsToolbar.tsx | 10 +++++----- src/pages/views/details/components/tag/tagLink.tsx | 9 +++++---- src/pages/views/details/components/tag/tagModal.tsx | 9 +++++---- src/pages/views/details/gcpDetails/detailsToolbar.tsx | 10 +++++----- src/pages/views/details/ibmDetails/detailsToolbar.tsx | 10 +++++----- src/pages/views/details/ocpDetails/detailsToolbar.tsx | 10 +++++----- 7 files changed, 35 insertions(+), 33 deletions(-) diff --git a/src/pages/views/details/awsDetails/detailsToolbar.tsx b/src/pages/views/details/awsDetails/detailsToolbar.tsx index f0645549f..59263b37e 100644 --- a/src/pages/views/details/awsDetails/detailsToolbar.tsx +++ b/src/pages/views/details/awsDetails/detailsToolbar.tsx @@ -11,7 +11,6 @@ import { createMapStateToProps, FetchStatus } from 'store/common'; import { orgActions, orgSelectors } from 'store/orgs'; import { tagActions, tagSelectors } from 'store/tags'; import { ComputedReportItem } from 'utils/computedReport/getComputedReportItems'; -import { getLast60DaysDate } from 'utils/dateRange'; import { isEqual } from 'utils/equal'; interface DetailsToolbarOwnProps { @@ -152,12 +151,13 @@ export class DetailsToolbarBase extends React.Component { // eslint-disable-next-line @typescript-eslint/no-unused-vars const mapStateToProps = createMapStateToProps((state, props) => { - const { start_date, end_date } = getLast60DaysDate(); - // Omitting key_only to share a single, cached request -- although the header doesn't need key values, the toolbar does const queryString = getQuery({ - start_date, - end_date, + filter: { + resolution: 'monthly', + time_scope_units: 'month', + time_scope_value: -1, + }, // key_only: true }); const orgReport = orgSelectors.selectOrg(state, orgReportPathsType, orgReportType, queryString); diff --git a/src/pages/views/details/azureDetails/detailsToolbar.tsx b/src/pages/views/details/azureDetails/detailsToolbar.tsx index 679dd0c04..16de3c3a5 100644 --- a/src/pages/views/details/azureDetails/detailsToolbar.tsx +++ b/src/pages/views/details/azureDetails/detailsToolbar.tsx @@ -10,7 +10,6 @@ import { connect } from 'react-redux'; import { createMapStateToProps, FetchStatus } from 'store/common'; import { tagActions, tagSelectors } from 'store/tags'; import { ComputedReportItem } from 'utils/computedReport/getComputedReportItems'; -import { getLast60DaysDate } from 'utils/dateRange'; import { isEqual } from 'utils/equal'; interface DetailsToolbarOwnProps { @@ -140,12 +139,13 @@ export class DetailsToolbarBase extends React.Component { // eslint-disable-next-line @typescript-eslint/no-unused-vars const mapStateToProps = createMapStateToProps((state, props) => { - const { start_date, end_date } = getLast60DaysDate(); - // Omitting key_only to share a single, cached request -- although the header doesn't need key values, the toolbar does const queryString = getQuery({ - start_date, - end_date, + filter: { + resolution: 'monthly', + time_scope_units: 'month', + time_scope_value: -1, + }, // key_only: true }); const tagReport = tagSelectors.selectTag(state, tagReportPathsType, tagReportType, queryString); diff --git a/src/pages/views/details/components/tag/tagLink.tsx b/src/pages/views/details/components/tag/tagLink.tsx index 812dcbaf5..6c0f9f81f 100644 --- a/src/pages/views/details/components/tag/tagLink.tsx +++ b/src/pages/views/details/components/tag/tagLink.tsx @@ -8,7 +8,6 @@ import { connect } from 'react-redux'; import { createMapStateToProps, FetchStatus } from 'store/common'; import { tagActions, tagSelectors } from 'store/tags'; import { getTestProps, testIds } from 'testIds'; -import { getLast60DaysDate } from 'utils/dateRange'; import { styles } from './tag.styles'; import { TagModal } from './tagModal'; @@ -108,17 +107,19 @@ const mapStateToProps = createMapStateToProps { // eslint-disable-next-line @typescript-eslint/no-unused-vars const mapStateToProps = createMapStateToProps((state, props) => { - const { start_date, end_date } = getLast60DaysDate(); - // Omitting key_only to share a single, cached request -- although the header doesn't need key values, the toolbar does const queryString = getQuery({ - start_date, - end_date, + filter: { + resolution: 'monthly', + time_scope_units: 'month', + time_scope_value: -1, + }, // key_only: true }); diff --git a/src/pages/views/details/ibmDetails/detailsToolbar.tsx b/src/pages/views/details/ibmDetails/detailsToolbar.tsx index 40f86cc2a..dd18c2a96 100644 --- a/src/pages/views/details/ibmDetails/detailsToolbar.tsx +++ b/src/pages/views/details/ibmDetails/detailsToolbar.tsx @@ -9,7 +9,6 @@ import { connect } from 'react-redux'; import { createMapStateToProps, FetchStatus } from 'store/common'; import { tagActions, tagSelectors } from 'store/tags'; import { ComputedReportItem } from 'utils/computedReport/getComputedReportItems'; -import { getLast60DaysDate } from 'utils/dateRange'; import { isEqual } from 'utils/equal'; interface DetailsToolbarOwnProps { @@ -137,12 +136,13 @@ export class DetailsToolbarBase extends React.Component { // eslint-disable-next-line @typescript-eslint/no-unused-vars const mapStateToProps = createMapStateToProps((state, props) => { - const { start_date, end_date } = getLast60DaysDate(); - // Omitting key_only to share a single, cached request -- although the header doesn't need key values, the toolbar does const queryString = getQuery({ - start_date, - end_date, + filter: { + resolution: 'monthly', + time_scope_units: 'month', + time_scope_value: -1, + }, // key_only: true }); diff --git a/src/pages/views/details/ocpDetails/detailsToolbar.tsx b/src/pages/views/details/ocpDetails/detailsToolbar.tsx index 6e8fa1737..cb9bb59f6 100644 --- a/src/pages/views/details/ocpDetails/detailsToolbar.tsx +++ b/src/pages/views/details/ocpDetails/detailsToolbar.tsx @@ -10,7 +10,6 @@ import { connect } from 'react-redux'; import { createMapStateToProps, FetchStatus } from 'store/common'; import { tagActions, tagSelectors } from 'store/tags'; import { ComputedReportItem } from 'utils/computedReport/getComputedReportItems'; -import { getLast60DaysDate } from 'utils/dateRange'; import { isEqual } from 'utils/equal'; interface DetailsToolbarOwnProps { @@ -133,12 +132,13 @@ export class DetailsToolbarBase extends React.Component { // eslint-disable-next-line @typescript-eslint/no-unused-vars const mapStateToProps = createMapStateToProps((state, props) => { - const { start_date, end_date } = getLast60DaysDate(); - // Omitting key_only to share a single, cached request -- although the header doesn't need key values, the toolbar does const queryString = getQuery({ - start_date, - end_date, + filter: { + resolution: 'monthly', + time_scope_units: 'month', + time_scope_value: -1, + }, // key_only: true }); const tagReport = tagSelectors.selectTag(state, tagReportPathsType, tagReportType, queryString); From 46ad0adab29aad20a15caec6535c68791fbde8ab Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Tue, 27 Apr 2021 15:34:19 -0400 Subject: [PATCH 007/141] Modified GroupBy to accept start & end dates for fetching tags, default is current month --- .../views/components/groupBy/groupBy.tsx | 45 ++++++++++++------- src/pages/views/explorer/explorerFilter.tsx | 1 + src/pages/views/explorer/explorerHeader.tsx | 6 +++ 3 files changed, 36 insertions(+), 16 deletions(-) diff --git a/src/pages/views/components/groupBy/groupBy.tsx b/src/pages/views/components/groupBy/groupBy.tsx index 2b2c0b8f1..da3b55183 100644 --- a/src/pages/views/components/groupBy/groupBy.tsx +++ b/src/pages/views/components/groupBy/groupBy.tsx @@ -9,13 +9,13 @@ import { connect } from 'react-redux'; import { createMapStateToProps, FetchStatus } from 'store/common'; import { orgActions, orgSelectors } from 'store/orgs'; import { tagActions, tagSelectors } from 'store/tags'; -import { getLast60DaysDate } from 'utils/dateRange'; import { styles } from './groupBy.styles'; import { GroupByOrg } from './groupByOrg'; import { GroupByTag } from './groupByTag'; interface GroupByOwnProps extends WithTranslation { + endDate?: string; getIdKeyForGroupBy: (groupBy: Query['group_by']) => string; groupBy?: string; isDisabled?: boolean; @@ -29,6 +29,7 @@ interface GroupByOwnProps extends WithTranslation { perspective?: PerspectiveType; showOrgs?: boolean; showTags?: boolean; + startDate?: string; tagQueryString?: string; tagReportPathsType: TagPathsType; } @@ -263,24 +264,24 @@ class GroupByBase extends React.Component { } const mapStateToProps = createMapStateToProps( - (state, { orgReportPathsType, tagReportPathsType }) => { - const orgQueryString = getQuery({ - // TBD... - }); - const orgReport = orgSelectors.selectOrg(state, orgReportPathsType, orgReportType, orgQueryString); - const orgReportFetchStatus = orgSelectors.selectOrgFetchStatus( - state, - orgReportPathsType, - orgReportType, - orgQueryString - ); - - const { start_date, end_date } = getLast60DaysDate(); + (state, { endDate, startDate, orgReportPathsType, tagReportPathsType }) => { + const tagQuery = + endDate && startDate + ? { + start_date: startDate, + end_date: endDate, + } + : { + filter: { + resolution: 'monthly', + time_scope_units: 'month', + time_scope_value: -1, + }, + }; // Omitting key_only to share a single, cached request -- although the header doesn't need key values, the toolbar does const tagQueryString = getQuery({ - start_date, - end_date, + ...tagQuery, // key_only: true }); const tagReport = tagSelectors.selectTag(state, tagReportPathsType, tagReportType, tagQueryString); @@ -290,6 +291,18 @@ const mapStateToProps = createMapStateToProps { const orgReportPathsType = getOrgReportPathsType(perspective); const tagReportPathsType = getTagReportPathsType(perspective); + // Fetch tags with largest date range available + const { start_date, end_date } = getLast60DaysDate(); + return (
@@ -269,6 +273,7 @@ class ExplorerHeaderBase extends React.Component { {this.getPerspective(noProviders)}
{ perspective={perspective} showOrgs={orgReportPathsType} showTags={tagReportPathsType} + startDate={start_date} tagReportPathsType={tagReportPathsType} />
From d339edf4477d1875c645ce94754c588042350eee Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Tue, 27 Apr 2021 16:07:55 -0400 Subject: [PATCH 008/141] Renamed "allCloud" as "ocpCloud" --- src/locales/en.json | 6 ++--- src/pages/views/explorer/explorerChart.tsx | 6 ++--- src/pages/views/explorer/explorerHeader.tsx | 4 ++-- src/pages/views/explorer/explorerUtils.ts | 26 ++++++++++----------- src/pages/views/overview/overview.tsx | 14 +++++------ 5 files changed, 28 insertions(+), 28 deletions(-) diff --git a/src/locales/en.json b/src/locales/en.json index a88ae6155..2a4a0429f 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -443,7 +443,6 @@ "no_data": "no data", "org_unit_column_title": "Names", "perspective": { - "all_cloud": "All cloud filtered by OpenShift", "aws": "Amazon Web Services", "aws_cloud": "Amazon Web Services filtered by OpenShift", "azure": "Microsoft Azure", @@ -451,11 +450,11 @@ "gcp": "Google Cloud Platform", "ibm": "IBM Cloud", "ocp": "All OpenShift cost", + "ocp_cloud": "All cloud filtered by OpenShift", "ocp_supplementary": "OpenShift supplementary cost", "ocp_usage": "OpenShift usage" }, "title": { - "all_cloud": "All cloud filtered by OpenShift - Top 5 Costliest", "aws": "Amazon Web Services - Top 5 Costliest", "aws_cloud": "Amazon Web Services filtered by OpenShift - Top 5 Costliest", "azure": "Microsoft Azure - Top 5 Costliest", @@ -463,6 +462,7 @@ "gcp": "Google Cloud Platform - Top 5 Costliest", "ibm": "IBM Cloud - Top 5 Costliest", "ocp": "All OpenShift cost - Top 5 Costliest", + "ocp_cloud": "All cloud filtered by OpenShift - Top 5 Costliest", "ocp_supplementary": "OpenShift supplementary cost - Top 5 Costliest", "ocp_usage": "OpenShift usage - Top 5 Costliest" } @@ -816,7 +816,6 @@ "ocp_desc": "Total cost for OpenShift Container Platform, comprising the infrastructure cost and cost calculated from metrics.", "perspective": { "all": "All", - "all_cloud": "All cloud filtered by OpenShift", "aws": "Amazon Web Services", "aws_cloud": "Amazon Web Services filtered by OpenShift", "azure": "Microsoft Azure", @@ -824,6 +823,7 @@ "gcp": "Google Cloud Platform", "ibm": "IBM Cloud", "label": "Perspective", + "ocp_cloud": "All cloud filtered by OpenShift", "ocp_usage": "OpenShift usage", "supplementary": "Supplementary" } diff --git a/src/pages/views/explorer/explorerChart.tsx b/src/pages/views/explorer/explorerChart.tsx index a293ecee1..011ff6af0 100644 --- a/src/pages/views/explorer/explorerChart.tsx +++ b/src/pages/views/explorer/explorerChart.tsx @@ -139,9 +139,6 @@ class ExplorerChartBase extends React.Component { private getChartTitle = (perspective: string) => { let result; switch (perspective) { - case PerspectiveType.allCloud: - result = 'explorer.title.all_cloud'; - break; case PerspectiveType.aws: result = 'explorer.title.aws'; break; @@ -163,6 +160,9 @@ class ExplorerChartBase extends React.Component { case PerspectiveType.ocp: result = 'explorer.title.ocp'; break; + case PerspectiveType.ocpCloud: + result = 'explorer.title.ocp_cloud'; + break; case PerspectiveType.ocpSupplementary: result = 'explorer.title.ocp_supplementary'; break; diff --git a/src/pages/views/explorer/explorerHeader.tsx b/src/pages/views/explorer/explorerHeader.tsx index ac7fbc1d0..80354a424 100644 --- a/src/pages/views/explorer/explorerHeader.tsx +++ b/src/pages/views/explorer/explorerHeader.tsx @@ -35,13 +35,13 @@ import { getPerspectiveDefault, getRouteForQuery, getTagReportPathsType, - infrastructureAllCloudOptions, infrastructureAwsCloudOptions, infrastructureAwsOptions, infrastructureAzureCloudOptions, infrastructureAzureOptions, infrastructureGcpOptions, infrastructureIbmOptions, + infrastructureOcpCloudOptions, infrastructureOcpOptions, ocpOptions, PerspectiveType, @@ -146,7 +146,7 @@ class ExplorerHeaderBase extends React.Component { const options = []; if (ocp) { options.push(...ocpOptions); - options.push(...infrastructureAllCloudOptions); + options.push(...infrastructureOcpCloudOptions); } if (aws) { options.push(...infrastructureAwsOptions); diff --git a/src/pages/views/explorer/explorerUtils.ts b/src/pages/views/explorer/explorerUtils.ts index 19fc6617f..c8d1bbdf5 100644 --- a/src/pages/views/explorer/explorerUtils.ts +++ b/src/pages/views/explorer/explorerUtils.ts @@ -24,7 +24,6 @@ export const enum DateRangeType { // eslint-disable-next-line no-shadow export const enum PerspectiveType { - allCloud = 'all_cloud', // All filtered by Ocp aws = 'aws', awsCloud = 'aws_cloud', // Aws filtered by Ocp azure = 'azure', @@ -32,6 +31,7 @@ export const enum PerspectiveType { gcp = 'gcp', ocp = 'ocp', ibm = 'ibm', + ocpCloud = 'ocp_cloud', // All filtered by Ocp ocpSupplementary = 'ocp_supplementary', ocpUsage = 'ocp_usage', } @@ -107,9 +107,6 @@ export const groupByOcpOptions: { { label: 'project', value: 'project' }, ]; -// Infrastructure all cloud options -export const infrastructureAllCloudOptions = [{ label: 'explorer.perspective.all_cloud', value: 'all_cloud' }]; - // Infrastructure AWS options export const infrastructureAwsOptions = [{ label: 'explorer.perspective.aws', value: 'aws' }]; @@ -131,6 +128,9 @@ export const infrastructureIbmOptions = [{ label: 'explorer.perspective.ibm', va // Infrastructure Ocp options export const infrastructureOcpOptions = [{ label: 'explorer.perspective.ocp_usage', value: 'ocp_usage' }]; +// Infrastructure Ocp cloud options +export const infrastructureOcpCloudOptions = [{ label: 'explorer.perspective.ocp_cloud', value: 'ocp_cloud' }]; + // Ocp options export const ocpOptions = [ { label: 'explorer.perspective.ocp', value: 'ocp' }, @@ -144,13 +144,13 @@ export const getComputedReportItemType = (perspective: string) => { result = ComputedReportItemType.supplementary; break; case PerspectiveType.aws: - case PerspectiveType.allCloud: case PerspectiveType.awsCloud: case PerspectiveType.azure: case PerspectiveType.azureCloud: case PerspectiveType.gcp: case PerspectiveType.ibm: case PerspectiveType.ocp: + case PerspectiveType.ocpCloud: case PerspectiveType.ocpUsage: default: result = ComputedReportItemType.cost; @@ -224,8 +224,8 @@ export const getGroupByDefault = (perspective: string) => { case PerspectiveType.azureCloud: result = 'subscription_guid'; break; - case PerspectiveType.allCloud: case PerspectiveType.ocp: + case PerspectiveType.ocpCloud: case PerspectiveType.ocpSupplementary: case PerspectiveType.ocpUsage: result = 'project'; @@ -254,8 +254,8 @@ export const getGroupByOptions = (perspective: string) => { case PerspectiveType.ibm: result = groupByIbmOptions; break; - case PerspectiveType.allCloud: case PerspectiveType.ocp: + case PerspectiveType.ocpCloud: case PerspectiveType.ocpSupplementary: case PerspectiveType.ocpUsage: result = groupByOcpOptions; @@ -273,13 +273,13 @@ export const getOrgReportPathsType = (perspective: string) => { case PerspectiveType.aws: result = OrgPathsType.aws; break; - case PerspectiveType.allCloud: case PerspectiveType.awsCloud: case PerspectiveType.azure: case PerspectiveType.azureCloud: case PerspectiveType.gcp: case PerspectiveType.ibm: case PerspectiveType.ocp: + case PerspectiveType.ocpCloud: case PerspectiveType.ocpSupplementary: case PerspectiveType.ocpUsage: default: @@ -292,7 +292,6 @@ export const getOrgReportPathsType = (perspective: string) => { export const getReportType = (perspective: string) => { let result; switch (perspective) { - case PerspectiveType.allCloud: case PerspectiveType.aws: case PerspectiveType.awsCloud: case PerspectiveType.azure: @@ -300,6 +299,7 @@ export const getReportType = (perspective: string) => { case PerspectiveType.gcp: case PerspectiveType.ibm: case PerspectiveType.ocp: + case PerspectiveType.ocpCloud: case PerspectiveType.ocpSupplementary: case PerspectiveType.ocpUsage: default: @@ -312,9 +312,6 @@ export const getReportType = (perspective: string) => { export const getReportPathsType = (perspective: string) => { let result; switch (perspective) { - case PerspectiveType.allCloud: - result = ReportPathsType.ocpCloud; - break; case PerspectiveType.aws: result = ReportPathsType.aws; break; @@ -336,6 +333,9 @@ export const getReportPathsType = (perspective: string) => { case PerspectiveType.ocp: result = ReportPathsType.ocp; break; + case PerspectiveType.ocpCloud: + result = ReportPathsType.ocpCloud; + break; case PerspectiveType.ocpSupplementary: result = ReportPathsType.ocp; break; @@ -366,8 +366,8 @@ export const getTagReportPathsType = (perspective: string) => { case PerspectiveType.ibm: return TagPathsType.ibm; break; - case PerspectiveType.allCloud: case PerspectiveType.ocp: + case PerspectiveType.ocpCloud: case PerspectiveType.ocpSupplementary: case PerspectiveType.ocpUsage: return TagPathsType.ocp; diff --git a/src/pages/views/overview/overview.tsx b/src/pages/views/overview/overview.tsx index b16beebb4..39103d4b9 100644 --- a/src/pages/views/overview/overview.tsx +++ b/src/pages/views/overview/overview.tsx @@ -42,13 +42,13 @@ import { styles } from './overview.styles'; // eslint-disable-next-line no-shadow const enum InfrastructurePerspective { - allCloud = 'all_cloud', // All filtered by Ocp aws = 'aws', awsCloud = 'aws_cloud', // Aws filtered by Ocp azure = 'azure', azureCloud = 'azure_cloud', // Azure filtered by Ocp gcp = 'gcp', ibm = 'ibm', + ocpCloud = 'ocp_cloud', // All filtered by Ocp ocpUsage = 'ocp_usage', } @@ -120,9 +120,6 @@ const ocpOptions = [ { label: 'overview.perspective.supplementary', value: 'supplementary' }, ]; -// Infrastructure all cloud options -const infrastructureAllCloudOptions = [{ label: 'overview.perspective.all_cloud', value: 'all_cloud' }]; - // Infrastructure AWS options const infrastructureAwsOptions = [{ label: 'overview.perspective.aws', value: 'aws' }]; @@ -144,6 +141,9 @@ const infrastructureIbmOptions = [{ label: 'overview.perspective.ibm', value: 'i // Infrastructure Ocp options const infrastructureOcpOptions = [{ label: 'overview.perspective.ocp_usage', value: 'ocp_usage' }]; +// Infrastructure Ocp cloud options +const infrastructureOcpCloudOptions = [{ label: 'overview.perspective.ocp_cloud', value: 'ocp_cloud' }]; + class OverviewBase extends React.Component { protected defaultState: OverviewState = { activeTabKey: 0, @@ -224,7 +224,7 @@ class OverviewBase extends React.Component { private getDefaultInfrastructurePerspective = () => { if (this.isOcpAvailable()) { - return InfrastructurePerspective.allCloud; + return InfrastructurePerspective.ocpCloud; } if (this.isAwsAvailable()) { return InfrastructurePerspective.aws; @@ -267,7 +267,7 @@ class OverviewBase extends React.Component { const options = []; if (this.getCurrentTab() === OverviewTab.infrastructure) { if (ocp) { - options.push(...infrastructureAllCloudOptions); + options.push(...infrastructureOcpCloudOptions); } if (aws) { options.push(...infrastructureAwsOptions); @@ -344,7 +344,7 @@ class OverviewBase extends React.Component { } const currentTab = getIdKeyForTab(tab); if (currentTab === OverviewTab.infrastructure) { - if (currentInfrastructurePerspective === InfrastructurePerspective.allCloud) { + if (currentInfrastructurePerspective === InfrastructurePerspective.ocpCloud) { const hasData = hasCurrentMonthData(ocpProviders) || hasPreviousMonthData(ocpProviders); return hasData ? : noData; } else if (currentInfrastructurePerspective === InfrastructurePerspective.aws) { From 95d67bb20818e14e06bbd3241f7f1976fa0ccc7e Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Tue, 27 Apr 2021 16:24:41 -0400 Subject: [PATCH 009/141] Added API requests for OCP on AWS, OCP on Azure, and OCP on cloud https://issues.redhat.com/browse/COST-1338 --- src/api/tags/awsCloudTags.ts | 14 ++++++++++++++ src/api/tags/azureCloudTags.ts | 14 ++++++++++++++ src/api/tags/ocpCloudTags.ts | 14 ++++++++++++++ src/api/tags/tag.ts | 3 +++ src/api/tags/tagUtils.ts | 12 ++++++++++++ src/pages/views/explorer/explorerUtils.ts | 12 +++++++++--- 6 files changed, 66 insertions(+), 3 deletions(-) create mode 100644 src/api/tags/awsCloudTags.ts create mode 100644 src/api/tags/azureCloudTags.ts create mode 100644 src/api/tags/ocpCloudTags.ts diff --git a/src/api/tags/awsCloudTags.ts b/src/api/tags/awsCloudTags.ts new file mode 100644 index 000000000..a3473e9bc --- /dev/null +++ b/src/api/tags/awsCloudTags.ts @@ -0,0 +1,14 @@ +import axios from 'axios'; + +import { Tag, TagType } from './tag'; + +export interface AwsCloudTag extends Tag {} + +export const TagTypePaths: Partial> = { + [TagType.tag]: 'tags/openshift/infrastructures/aws/', +}; + +export function runTag(tagType: TagType, query: string) { + const path = TagTypePaths[tagType]; + return axios.get(`${path}?${query}`); +} diff --git a/src/api/tags/azureCloudTags.ts b/src/api/tags/azureCloudTags.ts new file mode 100644 index 000000000..f438c5a9b --- /dev/null +++ b/src/api/tags/azureCloudTags.ts @@ -0,0 +1,14 @@ +import axios from 'axios'; + +import { Tag, TagType } from './tag'; + +export interface AzureCloudTag extends Tag {} + +export const TagTypePaths: Partial> = { + [TagType.tag]: 'tags/openshift/infrastructures/azure/', +}; + +export function runTag(tagType: TagType, query: string) { + const path = TagTypePaths[tagType]; + return axios.get(`${path}?${query}`); +} diff --git a/src/api/tags/ocpCloudTags.ts b/src/api/tags/ocpCloudTags.ts new file mode 100644 index 000000000..33bd0b1c2 --- /dev/null +++ b/src/api/tags/ocpCloudTags.ts @@ -0,0 +1,14 @@ +import axios from 'axios'; + +import { Tag, TagType } from './tag'; + +export interface OcpCloudTag extends Tag {} + +export const TagTypePaths: Partial> = { + [TagType.tag]: 'tags/openshift/infrastructures/all/', +}; + +export function runTag(tagType: TagType, query: string) { + const path = TagTypePaths[tagType]; + return axios.get(`${path}?${query}`); +} diff --git a/src/api/tags/tag.ts b/src/api/tags/tag.ts index d9b86a250..3e0a3f173 100644 --- a/src/api/tags/tag.ts +++ b/src/api/tags/tag.ts @@ -38,8 +38,11 @@ export const enum TagType { // eslint-disable-next-line no-shadow export const enum TagPathsType { aws = 'aws', + awsCloud = 'aws_cloud', azure = 'azure', + azureCloud = 'azure_cloud', gcp = 'gcp', ibm = 'gcp', // Todo: update to use ibm backend apis when they become available ocp = 'ocp', + ocpCloud = 'ocp_cloud', } diff --git a/src/api/tags/tagUtils.ts b/src/api/tags/tagUtils.ts index af85c9a93..c55043e54 100644 --- a/src/api/tags/tagUtils.ts +++ b/src/api/tags/tagUtils.ts @@ -1,7 +1,10 @@ +import { runTag as runAwsCloudTag } from './awsCloudTags'; import { runTag as runAwsTag } from './awsTags'; +import { runTag as runAzureCloudTag } from './azureCloudTags'; import { runTag as runAzureTag } from './azureTags'; import { runTag as runGcpTag } from './gcpTags'; import { runTag as runIbmTag } from './ibmTags'; +import { runTag as runOcpCloudTag } from './ocpCloudTags'; import { runTag as runOcpTag } from './ocpTags'; import { TagPathsType, TagType } from './tag'; @@ -11,9 +14,15 @@ export function runTag(tagPathsType: TagPathsType, tagType: TagType, query: stri case TagPathsType.aws: tagReport = runAwsTag(tagType, query); break; + case TagPathsType.awsCloud: + tagReport = runAwsCloudTag(tagType, query); + break; case TagPathsType.azure: tagReport = runAzureTag(tagType, query); break; + case TagPathsType.azureCloud: + tagReport = runAzureCloudTag(tagType, query); + break; case TagPathsType.gcp: tagReport = runGcpTag(tagType, query); break; @@ -23,6 +32,9 @@ export function runTag(tagPathsType: TagPathsType, tagType: TagType, query: stri case TagPathsType.ocp: tagReport = runOcpTag(tagType, query); break; + case TagPathsType.ocpCloud: + tagReport = runOcpCloudTag(tagType, query); + break; } return tagReport; } diff --git a/src/pages/views/explorer/explorerUtils.ts b/src/pages/views/explorer/explorerUtils.ts index c8d1bbdf5..be8b16b0d 100644 --- a/src/pages/views/explorer/explorerUtils.ts +++ b/src/pages/views/explorer/explorerUtils.ts @@ -353,13 +353,17 @@ export const getTagReportPathsType = (perspective: string) => { let result; switch (perspective) { case PerspectiveType.aws: - case PerspectiveType.awsCloud: return TagPathsType.aws; break; + case PerspectiveType.awsCloud: + return TagPathsType.awsCloud; + break; case PerspectiveType.azure: - case PerspectiveType.azureCloud: return TagPathsType.azure; break; + case PerspectiveType.azureCloud: + return TagPathsType.azureCloud; + break; case PerspectiveType.gcp: return TagPathsType.gcp; break; @@ -367,11 +371,13 @@ export const getTagReportPathsType = (perspective: string) => { return TagPathsType.ibm; break; case PerspectiveType.ocp: - case PerspectiveType.ocpCloud: case PerspectiveType.ocpSupplementary: case PerspectiveType.ocpUsage: return TagPathsType.ocp; break; + case PerspectiveType.ocpCloud: + return TagPathsType.ocpCloud; + break; default: result = undefined; break; From d38d04216416117b2035a45e58a10c32bd9f1d2c Mon Sep 17 00:00:00 2001 From: Doug Donahue Date: Wed, 28 Apr 2021 10:20:45 -0400 Subject: [PATCH 010/141] added i18n exclude list key validation --- package.json | 1 + scripts/utils/i18n_excludes | 1 - scripts/utils/i18n_key_tool.py | 34 +++++++++++++++++++++++++++++----- 3 files changed, 30 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index ce61dd6f5..288fff8b9 100644 --- a/package.json +++ b/package.json @@ -19,6 +19,7 @@ "i18n:key:check:full": "scripts/utils/i18n_key_tool.py --json-file src/locales/en.json --search-path src --exclude-file scripts/utils/i18n_excludes", "i18n:key:check:notfound": "scripts/utils/i18n_key_tool.py --Xreport-found --json-file src/locales/en.json --search-path src --exclude-file scripts/utils/i18n_excludes", "i18n:key:check:duplicates": "scripts/utils/i18n_key_tool.py --find-duplicates --Xreport-found --Xreport-not-found --json-file src/locales/en.json --search-path src --exclude-file scripts/utils/i18n_excludes", + "i18n:key:check:excludes": "scripts/utils/i18n_key_tool.py --validate-excludes --Xreport-found --Xreport-not-found --json-file src/locales/en.json --search-path src --exclude-file scripts/utils/i18n_excludes", "start": "NODE_OPTIONS=--max-old-space-size=8192 webpack serve -c ./webpack.config.js", "start:beta": "BETA_ENV=true yarn start", "stats": "yarn build:client --profile --json > stats.json", diff --git a/scripts/utils/i18n_excludes b/scripts/utils/i18n_excludes index ceb9aee5d..b3fc0abe1 100644 --- a/scripts/utils/i18n_excludes +++ b/scripts/utils/i18n_excludes @@ -228,4 +228,3 @@ unit_tooltips.gibibyte month unit_tooltips.hour unit_tooltips.vm-hours unit_tooltips.usd - diff --git a/scripts/utils/i18n_key_tool.py b/scripts/utils/i18n_key_tool.py index 9c1968b80..cf4d6ce13 100755 --- a/scripts/utils/i18n_key_tool.py +++ b/scripts/utils/i18n_key_tool.py @@ -4,6 +4,7 @@ import glob import json import os +import sys from functools import reduce import operator @@ -38,6 +39,7 @@ def check_file(filename): parser.add_argument('--exclude-file', type=check_file, help='file that lists i18n tags in dot notation to exclude' 'from reporting') parser.add_argument('--find-duplicates', action='store_true', help='report all duplicate values') +parser.add_argument('--validate-excludes', action='store_true', help='validate excluded in keys are valid') parser.add_argument('--Xreport-found', action='store_false', help='do not report any "Found" keys') parser.add_argument('--Xreport-not-found', action='store_false', help='do not report any "Not Found" keys') @@ -109,21 +111,32 @@ def find_duplicate_values(data): print(Colors.OKCYAN + "TOTAL DUPLICATES FOUND: ", Colors.OKBLUE + str(total_dupes) + Colors.ENDC) +# validate excludes are valid +def validate_excludes(elist, data): + i18n_keys = list(set(walk_keys(json_data))) + print('{:>30s}'.format(Colors.OKBLUE + "Validating exclude list..." + Colors.ENDC)) + for exclude in elist: + if exclude not in i18n_keys and exclude: + print('{:<80s}{:>10s}'.format(Colors.OKCYAN + exclude, Colors.FAIL + '[EXCLUDE NOT VALID]') + Colors.ENDC) + + json_data = json.load(open(args.json_file)) previous_key_status = {} # Check all i18n_keys to see if they are being used in the src code if args.Xreport_not_found or args.Xreport_found: + # check if exclude list is given + if args.exclude_file is not None: + with open(args.exclude_file) as f: + exclude_data = f.read().splitlines() + validate_excludes(exclude_data, json_data) + + print(' ') print(Colors.OKBLUE + 'Checking for dead keys...' + Colors.ENDC) for i18n_key in sorted(list(set(walk_keys(json_data)))): exclude_data = [] found = False - # check if exclude list is given - if args.exclude_file is not None: - with open(args.exclude_file) as f: - exclude_data = f.read().splitlines() - if exclude_data.__contains__(i18n_key): # key is on exclude list previous_key_status.clear() @@ -206,3 +219,14 @@ def get(self, path, default=None): print("\n") find_duplicate_values(key_vals) + + +# check excludes for validity +if args.validate_excludes: + if args.exclude_file is not None: + exclude_data = [] + with open(args.exclude_file) as f: + exclude_data = f.read().splitlines() + validate_excludes(exclude_data, json_data) + else: + sys.exit(Colors.FAIL + 'You must supply an exclude file' + Colors.ENDC) From df7c8899d46e37aa0a159df6db4d336719e53f66 Mon Sep 17 00:00:00 2001 From: Doug Donahue Date: Wed, 28 Apr 2021 11:19:44 -0400 Subject: [PATCH 011/141] removed invalid excludes --- scripts/utils/i18n_excludes | 22 +--------------------- 1 file changed, 1 insertion(+), 21 deletions(-) diff --git a/scripts/utils/i18n_excludes b/scripts/utils/i18n_excludes index b3fc0abe1..cc7ba42a0 100644 --- a/scripts/utils/i18n_excludes +++ b/scripts/utils/i18n_excludes @@ -13,7 +13,6 @@ breakdown.navigation.azure breakdown.navigation.gcp breakdown.navigation.ibm breakdown.navigation.ocp -breakdown.navigation.ocpunit_tooltips.core-hours chart.cost_forecast_cone_legend_label_no_data chart.cost_forecast_cone_legend_label_plural chart.cost_forecast_legend_label_no_data @@ -35,25 +34,15 @@ chart.requests_legend_label_no_data chart.requests_legend_label_plural chart.usage_legend_label_no_data chart.usage_legend_label_plural +chart.usage_legend_label_plural cost_models.add_rate_form.save_rate_button cost_models.infra_cost_switch -cost_models.infra_no -cost_models.infra_yes cost_models.learn_more cost_models.lowercase.Currency cost_models.lowercase.Request cost_models.lowercase.Usage cost_models.node-month cost_models.remove_button -cost_models_details.action_view -cost_models_details.add_source_desc -cost_models_details.filter.placeholder -cost_models_details.filter.type_options_aria_label -cost_models_details.filter.type_options_label -cost_models_details.sources_filter_results -cost_models_details.table.actions.clone -cost_models_details.table.actions.delete -cost_models_details.table.actions.view cost_models_router.no_match cost_models_wizard.finish_button cost_models_wizard.inprogress_message @@ -70,7 +59,6 @@ cost_models_wizard.source_table.active_filters cost_models_wizard.source_table.already_assigned cost_models_wizard.source_table.clear_all_filters cost_models_wizard.source_table.filter_section_aria_label -cost_models_wizard.source_table.name_label cost_models_wizard.source_table.results_text cost_models_wizard.source_table.select_filter_type cost_models_wizard.source_table.toolbar_results_section @@ -103,7 +91,6 @@ dialog.title explorer.title.azure explorer.title.gcp explorer.title.ocp -explorer.total_cost export.daily export.monthly filter_by.account.button_aria_label @@ -189,20 +176,13 @@ group_by.values.tag group_by.values.tag_plural months_abbr no_match_found_state.title -onboarding.type_label -overview.title_aria_label source_details.type.AWS source_details.type.AZURE source_details.type.OCP source_details.type.GCP toolbar.filterby -toolbar.pricelist.options.Currency -toolbar.pricelist.options.Request -toolbar.pricelist.options.Usage toolbar.sources.lower.description toolbar.sources.lower.name -toolbar.sources.primary.description -toolbar.sources.primary.name toolbar.sources.primary.source_type toolbar.sources.secondary.aws toolbar.sources.secondary.azure From 182263380e3b5690a8b5b69bc2c83eb137381fa4 Mon Sep 17 00:00:00 2001 From: Doug Donahue Date: Wed, 28 Apr 2021 14:05:16 -0400 Subject: [PATCH 012/141] fix for i18n tool, list was instantiated in the wrong place, causing a scope issue added a few more keys to the exclude list --- scripts/utils/i18n_excludes | 5 +++++ scripts/utils/i18n_key_tool.py | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/scripts/utils/i18n_excludes b/scripts/utils/i18n_excludes index cc7ba42a0..e55f18017 100644 --- a/scripts/utils/i18n_excludes +++ b/scripts/utils/i18n_excludes @@ -63,6 +63,7 @@ cost_models_wizard.source_table.results_text cost_models_wizard.source_table.select_filter_type cost_models_wizard.source_table.toolbar_results_section cost_models_wizard.warning_sources +details.more_tags details.price_list.modal.hours details.price_list.modal.month details.price_list.modal.no_match @@ -92,7 +93,10 @@ explorer.title.azure explorer.title.gcp explorer.title.ocp export.daily +export.file.daily +export.file.monthly export.monthly +filter.name filter_by.account.button_aria_label filter_by.account.input_aria_label filter_by.account.placeholder @@ -181,6 +185,7 @@ source_details.type.AZURE source_details.type.OCP source_details.type.GCP toolbar.filterby +toolbar.sources.category.name toolbar.sources.lower.description toolbar.sources.lower.name toolbar.sources.primary.source_type diff --git a/scripts/utils/i18n_key_tool.py b/scripts/utils/i18n_key_tool.py index cf4d6ce13..f08e96121 100755 --- a/scripts/utils/i18n_key_tool.py +++ b/scripts/utils/i18n_key_tool.py @@ -126,6 +126,7 @@ def validate_excludes(elist, data): # Check all i18n_keys to see if they are being used in the src code if args.Xreport_not_found or args.Xreport_found: # check if exclude list is given + exclude_data = [] if args.exclude_file is not None: with open(args.exclude_file) as f: exclude_data = f.read().splitlines() @@ -134,7 +135,6 @@ def validate_excludes(elist, data): print(' ') print(Colors.OKBLUE + 'Checking for dead keys...' + Colors.ENDC) for i18n_key in sorted(list(set(walk_keys(json_data)))): - exclude_data = [] found = False if exclude_data.__contains__(i18n_key): From 529a8933f0f9e0d38de6f4fe46b3f15890d641fe Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Wed, 28 Apr 2021 13:09:10 -0400 Subject: [PATCH 013/141] Fixed default perspective https://issues.redhat.com/browse/COST-1340 --- src/pages/views/explorer/explorerUtils.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/pages/views/explorer/explorerUtils.ts b/src/pages/views/explorer/explorerUtils.ts index be8b16b0d..753a548ec 100644 --- a/src/pages/views/explorer/explorerUtils.ts +++ b/src/pages/views/explorer/explorerUtils.ts @@ -201,11 +201,11 @@ export const getPerspectiveDefault = (queryFromRoute: Query, userAccess: UserAcc } else if (hasAwsAccess(userAccess)) { result = PerspectiveType.aws; } else if (hasAzureAccess(userAccess)) { - result = PerspectiveType.aws; + result = PerspectiveType.azure; } else if (hasGcpAccess(userAccess)) { - result = PerspectiveType.aws; + result = PerspectiveType.gcp; } else if (hasIbmAccess(userAccess)) { - result = PerspectiveType.aws; + result = PerspectiveType.ibm; } } return result; From 2658cee4820f02284610dbcf08588a4af599f2e8 Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Wed, 28 Apr 2021 13:09:53 -0400 Subject: [PATCH 014/141] Added explicit path to cost explorer for notAuthorizedState --- src/pages/state/notAuthorized/notAuthorizedState.tsx | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/pages/state/notAuthorized/notAuthorizedState.tsx b/src/pages/state/notAuthorized/notAuthorizedState.tsx index 066e078d0..ce2338eff 100644 --- a/src/pages/state/notAuthorized/notAuthorizedState.tsx +++ b/src/pages/state/notAuthorized/notAuthorizedState.tsx @@ -25,6 +25,12 @@ class NotAuthorizedStateBase extends React.Component { case paths.azureDetailsBreakdown: serviceName = 'no_auth_state.azure_service_name'; break; + case paths.costModels: + serviceName = 'no_auth_state.cost_models_service_name'; + break; + case paths.explorer: + serviceName = 'cost_management'; + break; case paths.gcpDetails: case paths.gcpDetailsBreakdown: serviceName = 'no_auth_state.gcp_service_name'; @@ -33,9 +39,6 @@ class NotAuthorizedStateBase extends React.Component { case paths.ibmDetailsBreakdown: serviceName = 'no_auth_state.ibm_service_name'; break; - case paths.costModels: - serviceName = 'no_auth_state.cost_models_service_name'; - break; case paths.ocpDetails: case paths.ocpDetailsBreakdown: serviceName = 'no_auth_state.ocp_service_name'; From 25847689af46bce25bbf46d6417f59a1bd5f0629 Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Wed, 28 Apr 2021 14:44:40 -0400 Subject: [PATCH 015/141] Modified getPerspectiveDefault to check for sources --- src/pages/views/explorer/explorer.tsx | 84 ++++--- src/pages/views/explorer/explorerChart.tsx | 105 ++++---- src/pages/views/explorer/explorerFilter.tsx | 109 +++++---- src/pages/views/explorer/explorerHeader.tsx | 255 +++++++++----------- src/pages/views/explorer/explorerTable.tsx | 36 ++- src/pages/views/explorer/explorerUtils.ts | 42 +++- 6 files changed, 324 insertions(+), 307 deletions(-) diff --git a/src/pages/views/explorer/explorer.tsx b/src/pages/views/explorer/explorer.tsx index c8bd8447b..c5792726c 100644 --- a/src/pages/views/explorer/explorer.tsx +++ b/src/pages/views/explorer/explorer.tsx @@ -224,6 +224,7 @@ class Explorer extends React.Component { isLoading={reportFetchStatus === FetchStatus.inProgress} onSelected={this.handleSelected} onSort={this.handleSort} + perspective={perspective} query={query} report={report} selectedItems={selectedItems} @@ -382,7 +383,7 @@ class Explorer extends React.Component { dateRange, // Preserve date range }) ); - } else { + } else if (perspective) { fetchReport(getReportPathsType(perspective), getReportType(perspective), queryString); } }; @@ -462,11 +463,12 @@ class Explorer extends React.Component { onFilterRemoved={this.handleFilterRemoved} onGroupByClicked={this.handleGroupByClick} onPerspectiveClicked={this.handlePerspectiveClick} + perspective={perspective} /> {itemsTotal > 0 && (
- +
)} @@ -500,38 +502,6 @@ const mapStateToProps = createMapStateToProps(location.search); - const perspective = getPerspectiveDefault(queryFromRoute, userAccess); - const dateRange = getDateRangeDefault(queryFromRoute); - const { end_date, start_date } = getDateRange(getDateRangeDefault(queryFromRoute)); - - const query = { - filter: { - ...baseQuery.filter, - ...queryFromRoute.filter, - }, - filter_by: queryFromRoute.filter_by || baseQuery.filter_by, - group_by: queryFromRoute.group_by || { [getGroupByDefault(perspective)]: '*' } || baseQuery.group_by, - // order_by: queryFromRoute.order_by || baseQuery.order_by, // Todo: omit default sort - order_by: queryFromRoute.order_by, - perspective, - dateRange, - end_date, - start_date, - }; - const queryString = getQuery({ - ...query, - perspective: undefined, - dateRange: undefined, - }); - - const reportPathsType = getReportPathsType(perspective); - const reportType = getReportType(perspective); - - const report = reportSelectors.selectReport(state, reportPathsType, reportType, queryString); - const reportError = reportSelectors.selectReportError(state, reportPathsType, reportType, queryString); - const reportFetchStatus = reportSelectors.selectReportFetchStatus(state, reportPathsType, reportType, queryString); - const awsProvidersQueryString = getProvidersQuery(awsProvidersQuery); const awsProviders = providersSelectors.selectProviders(state, ProviderType.aws, awsProvidersQueryString); const awsProvidersFetchStatus = providersSelectors.selectProvidersFetchStatus( @@ -586,6 +556,52 @@ const mapStateToProps = createMapStateToProps(location.search); + const dateRange = getDateRangeDefault(queryFromRoute); + const { end_date, start_date } = getDateRange(getDateRangeDefault(queryFromRoute)); + const perspective = getPerspectiveDefault({ + awsProviders, + awsProvidersFetchStatus, + azureProviders, + azureProvidersFetchStatus, + gcpProviders, + gcpProvidersFetchStatus, + ibmProviders, + ibmProvidersFetchStatus, + ocpProviders, + ocpProvidersFetchStatus, + queryFromRoute, + userAccess, + }); + + const query = { + filter: { + ...baseQuery.filter, + ...queryFromRoute.filter, + }, + filter_by: queryFromRoute.filter_by || baseQuery.filter_by, + group_by: queryFromRoute.group_by || { [getGroupByDefault(perspective)]: '*' } || baseQuery.group_by, + // order_by: queryFromRoute.order_by || baseQuery.order_by, // Todo: omit default sort + order_by: queryFromRoute.order_by, + perspective, + dateRange, + end_date, + start_date, + }; + const queryString = getQuery({ + ...query, + perspective: undefined, + dateRange: undefined, + }); + + const reportPathsType = getReportPathsType(perspective); + const reportType = getReportType(perspective); + + const report = reportSelectors.selectReport(state, reportPathsType, reportType, queryString); + const reportError = reportSelectors.selectReportError(state, reportPathsType, reportType, queryString); + const reportFetchStatus = reportSelectors.selectReportFetchStatus(state, reportPathsType, reportType, queryString); + return { awsProviders, awsProvidersFetchStatus, diff --git a/src/pages/views/explorer/explorerChart.tsx b/src/pages/views/explorer/explorerChart.tsx index 011ff6af0..95d29d86f 100644 --- a/src/pages/views/explorer/explorerChart.tsx +++ b/src/pages/views/explorer/explorerChart.tsx @@ -1,8 +1,6 @@ import { Skeleton, Title } from '@patternfly/react-core'; import { getQuery, parseQuery, Query } from 'api/queries/query'; -import { getUserAccessQuery } from 'api/queries/userAccessQuery'; import { Report } from 'api/reports/report'; -import { UserAccessType } from 'api/userAccess'; import { AxiosError } from 'axios'; import { ChartDatum, ComputedReportItemType, isFloat, isInt } from 'components/charts/common/chartDatumUtils'; import { CostExplorerChart } from 'components/charts/costExplorerChart'; @@ -14,7 +12,6 @@ import { connect } from 'react-redux'; import { RouteComponentProps, withRouter } from 'react-router-dom'; import { createMapStateToProps, FetchStatus } from 'store/common'; import { reportActions, reportSelectors } from 'store/reports'; -import { allUserAccessQuery, userAccessSelectors } from 'store/userAccess'; import { getIdKeyForGroupBy } from 'utils/computedReport/getComputedExplorerReportItems'; import { ComputedReportItem, getUnsortedComputedReportItems } from 'utils/computedReport/getComputedReportItems'; import { formatValue } from 'utils/formatValue'; @@ -26,7 +23,6 @@ import { getDateRange, getDateRangeDefault, getGroupByDefault, - getPerspectiveDefault, getReportPathsType, getReportType, PerspectiveType, @@ -34,6 +30,7 @@ import { interface ExplorerChartOwnProps extends RouteComponentProps, WithTranslation { computedReportItemType?: ComputedReportItemType; + perspective: PerspectiveType; } interface ExplorerChartStateProps { @@ -108,10 +105,12 @@ class ExplorerChartBase extends React.Component { private fetchReport = () => { const { fetchReport, perspective, queryString } = this.props; - const reportPathsType = getReportPathsType(perspective); - const reportType = getReportType(perspective); + if (perspective) { + const reportPathsType = getReportPathsType(perspective); + const reportType = getReportType(perspective); - fetchReport(reportPathsType, reportType, queryString); + fetchReport(reportPathsType, reportType, queryString); + } }; private getChartDatums = (computedItems: ComputedReportItem[]) => { @@ -276,53 +275,51 @@ class ExplorerChartBase extends React.Component { } // eslint-disable-next-line @typescript-eslint/no-unused-vars -const mapStateToProps = createMapStateToProps((state, props) => { - const userAccessQueryString = getUserAccessQuery(allUserAccessQuery); - const userAccess = userAccessSelectors.selectUserAccess(state, UserAccessType.all, userAccessQueryString); - - const queryFromRoute = parseQuery(location.search); - const perspective = getPerspectiveDefault(queryFromRoute, userAccess); - const dateRange = getDateRangeDefault(queryFromRoute); - const { end_date, start_date } = getDateRange(getDateRangeDefault(queryFromRoute)); - - const query = { - filter: { - ...baseQuery.filter, - ...queryFromRoute.filter, - limit: 5, - offset: undefined, - }, - filter_by: queryFromRoute.filter_by || baseQuery.filter_by, - group_by: queryFromRoute.group_by || { [getGroupByDefault(perspective)]: '*' } || baseQuery.group_by, - perspective, - dateRange, - end_date, - start_date, - }; - const queryString = getQuery({ - ...query, - perspective: undefined, - dateRange: undefined, - }); - - const reportPathsType = getReportPathsType(perspective); - const reportType = getReportType(perspective); - - const report = reportSelectors.selectReport(state, reportPathsType, reportType, queryString); - const reportError = reportSelectors.selectReportError(state, reportPathsType, reportType, queryString); - const reportFetchStatus = reportSelectors.selectReportFetchStatus(state, reportPathsType, reportType, queryString); - - return { - end_date, - perspective, - query, - queryString, - report, - reportError, - reportFetchStatus, - start_date, - }; -}); +const mapStateToProps = createMapStateToProps( + (state, { perspective }) => { + const queryFromRoute = parseQuery(location.search); + const dateRange = getDateRangeDefault(queryFromRoute); + const { end_date, start_date } = getDateRange(getDateRangeDefault(queryFromRoute)); + + const query = { + filter: { + ...baseQuery.filter, + ...queryFromRoute.filter, + limit: 5, + offset: undefined, + }, + filter_by: queryFromRoute.filter_by || baseQuery.filter_by, + group_by: queryFromRoute.group_by || { [getGroupByDefault(perspective)]: '*' } || baseQuery.group_by, + perspective, + dateRange, + end_date, + start_date, + }; + const queryString = getQuery({ + ...query, + perspective: undefined, + dateRange: undefined, + }); + + const reportPathsType = getReportPathsType(perspective); + const reportType = getReportType(perspective); + + const report = reportSelectors.selectReport(state, reportPathsType, reportType, queryString); + const reportError = reportSelectors.selectReportError(state, reportPathsType, reportType, queryString); + const reportFetchStatus = reportSelectors.selectReportFetchStatus(state, reportPathsType, reportType, queryString); + + return { + end_date, + perspective, + query, + queryString, + report, + reportError, + reportFetchStatus, + start_date, + }; + } +); const mapDispatchToProps: ExplorerChartDispatchProps = { fetchReport: reportActions.fetchReport, diff --git a/src/pages/views/explorer/explorerFilter.tsx b/src/pages/views/explorer/explorerFilter.tsx index 73b79ae17..251bd7e3a 100644 --- a/src/pages/views/explorer/explorerFilter.tsx +++ b/src/pages/views/explorer/explorerFilter.tsx @@ -1,9 +1,7 @@ import { ToolbarChipGroup } from '@patternfly/react-core'; import { Org, OrgPathsType, OrgType } from 'api/orgs/org'; import { getQuery, orgUnitIdKey, parseQuery, Query, tagKey } from 'api/queries/query'; -import { getUserAccessQuery } from 'api/queries/userAccessQuery'; import { Tag, TagPathsType, TagType } from 'api/tags/tag'; -import { UserAccessType } from 'api/userAccess'; import { DataToolbar } from 'pages/views/components/dataToolbar/dataToolbar'; import React from 'react'; import { WithTranslation, withTranslation } from 'react-i18next'; @@ -12,7 +10,6 @@ import { RouteComponentProps, withRouter } from 'react-router-dom'; import { createMapStateToProps, FetchStatus } from 'store/common'; import { orgActions, orgSelectors } from 'store/orgs'; import { tagActions, tagSelectors } from 'store/tags'; -import { allUserAccessQuery, userAccessSelectors } from 'store/userAccess'; import { getLast60DaysDate } from 'utils/dateRange'; import { isEqual } from 'utils/equal'; @@ -24,7 +21,6 @@ import { getDateRangeDefault, getGroupByOptions, getOrgReportPathsType, - getPerspectiveDefault, getRouteForQuery, getTagReportPathsType, PerspectiveType, @@ -37,6 +33,7 @@ interface ExplorerFilterOwnProps { onFilterRemoved(filterType: string, filterValue?: string); orgQueryString?: string; pagination?: React.ReactNode; + perspective: PerspectiveType; query?: Query; tagQueryString?: string; } @@ -46,7 +43,6 @@ interface ExplorerFilterStateProps { orgReport?: Org; orgReportFetchStatus?: FetchStatus; orgReportPathsType?: OrgPathsType; - perspective: PerspectiveType; tagReport?: Tag; tagReportFetchStatus?: FetchStatus; tagReportPathsType?: TagPathsType; @@ -200,63 +196,72 @@ export class ExplorerFilterBase extends React.Component { } // eslint-disable-next-line @typescript-eslint/no-unused-vars -const mapStateToProps = createMapStateToProps((state, props) => { - const userAccessQueryString = getUserAccessQuery(allUserAccessQuery); - const userAccess = userAccessSelectors.selectUserAccess(state, UserAccessType.all, userAccessQueryString); - - const queryFromRoute = parseQuery(location.search); - const perspective = getPerspectiveDefault(queryFromRoute, userAccess); - const dateRange = getDateRangeDefault(queryFromRoute); +const mapStateToProps = createMapStateToProps( + (state, { perspective }) => { + const queryFromRoute = parseQuery(location.search); + const dateRange = getDateRangeDefault(queryFromRoute); + + // Omitting key_only to share a single request -- the toolbar needs key values + const orgQueryString = getQuery({ + // TBD... + }); - // Omitting key_only to share a single request -- the toolbar needs key values - const orgQueryString = getQuery({ - // TBD... - }); + let orgReport; + let orgReportFetchStatus; + const orgReportPathsType = getOrgReportPathsType(perspective); + if (orgReportPathsType) { + orgReport = orgSelectors.selectOrg(state, orgReportPathsType, orgReportType, orgQueryString); + orgReportFetchStatus = orgSelectors.selectOrgFetchStatus( + state, + orgReportPathsType, + orgReportType, + orgQueryString + ); + } - let orgReport; - let orgReportFetchStatus; - const orgReportPathsType = getOrgReportPathsType(perspective); - if (orgReportPathsType) { - orgReport = orgSelectors.selectOrg(state, orgReportPathsType, orgReportType, orgQueryString); - orgReportFetchStatus = orgSelectors.selectOrgFetchStatus(state, orgReportPathsType, orgReportType, orgQueryString); - } + // Fetch tags with largest date range available + const { start_date, end_date } = getLast60DaysDate(); - // Fetch tags with largest date range available - const { start_date, end_date } = getLast60DaysDate(); + // Omitting key_only to share a single, cached request -- although the header doesn't need key values, the toolbar does + const tagQueryString = getQuery({ + start_date, + end_date, + // key_only: true + }); + let tagReport; + let tagReportFetchStatus; + const tagReportPathsType = getTagReportPathsType(perspective); + if (tagReportPathsType) { + tagReport = tagSelectors.selectTag(state, tagReportPathsType, tagReportType, tagQueryString); + tagReportFetchStatus = tagSelectors.selectTagFetchStatus( + state, + tagReportPathsType, + tagReportType, + tagQueryString + ); + } - // Omitting key_only to share a single, cached request -- although the header doesn't need key values, the toolbar does - const tagQueryString = getQuery({ - start_date, - end_date, - // key_only: true - }); - let tagReport; - let tagReportFetchStatus; - const tagReportPathsType = getTagReportPathsType(perspective); - if (tagReportPathsType) { - tagReport = tagSelectors.selectTag(state, tagReportPathsType, tagReportType, tagQueryString); - tagReportFetchStatus = tagSelectors.selectTagFetchStatus(state, tagReportPathsType, tagReportType, tagQueryString); + return { + dateRange, + orgQueryString, + orgReport, + orgReportFetchStatus, + orgReportPathsType, + perspective, + tagQueryString, + tagReport, + tagReportFetchStatus, + tagReportPathsType, + }; } - - return { - dateRange, - orgQueryString, - orgReport, - orgReportFetchStatus, - orgReportPathsType, - perspective, - tagQueryString, - tagReport, - tagReportFetchStatus, - tagReportPathsType, - }; -}); +); const mapDispatchToProps: ExplorerFilterDispatchProps = { fetchOrg: orgActions.fetchOrg, fetchTag: tagActions.fetchTag, }; -const ExplorerFilter = withRouter(withTranslation()(connect(mapStateToProps, mapDispatchToProps)(ExplorerFilterBase))); +const ExplorerFilterConnect = connect(mapStateToProps, mapDispatchToProps)(ExplorerFilterBase); +const ExplorerFilter = withRouter(withTranslation()(ExplorerFilterConnect)); export { ExplorerFilter, ExplorerFilterProps }; diff --git a/src/pages/views/explorer/explorerHeader.tsx b/src/pages/views/explorer/explorerHeader.tsx index 80354a424..4baccdc78 100644 --- a/src/pages/views/explorer/explorerHeader.tsx +++ b/src/pages/views/explorer/explorerHeader.tsx @@ -32,7 +32,6 @@ import { getGroupByDefault, getGroupByOptions, getOrgReportPathsType, - getPerspectiveDefault, getRouteForQuery, getTagReportPathsType, infrastructureAwsCloudOptions, @@ -53,6 +52,7 @@ interface ExplorerHeaderOwnProps { onFilterRemoved(filterType: string, filterValue?: string); onGroupByClicked(value: string); onPerspectiveClicked(value: string); + perspective: PerspectiveType; } interface ExplorerHeaderStateProps { @@ -75,7 +75,6 @@ interface ExplorerHeaderStateProps { ocpProviders: Providers; ocpProvidersFetchStatus: FetchStatus; ocpProvidersQueryString: string; - perspective: PerspectiveType; query: Query; queryString: string; userAccess: UserAccess; @@ -101,34 +100,10 @@ class ExplorerHeaderBase extends React.Component { public componentDidMount() { this.setState({ - currentPerspective: this.getDefaultPerspective(), + currentPerspective: this.props.perspective, }); } - private getDefaultPerspective = () => { - const { perspective } = this.props; - - if (perspective) { - return perspective; - } - if (this.isAwsAvailable()) { - return PerspectiveType.aws; - } - if (this.isAzureAvailable()) { - return PerspectiveType.azure; - } - if (this.isGcpAvailable()) { - return PerspectiveType.gcp; - } - if (this.isIbmAvailable()) { - return PerspectiveType.ibm; - } - if (this.isOcpAvailable()) { - return PerspectiveType.ocp; - } - return undefined; - }; - private getPerspective = (isDisabled: boolean) => { const { currentPerspective } = this.state; @@ -293,6 +268,7 @@ class ExplorerHeaderBase extends React.Component { isDisabled={noProviders} onFilterAdded={onFilterAdded} onFilterRemoved={onFilterRemoved} + perspective={perspective} query={query} />
@@ -302,118 +278,119 @@ class ExplorerHeaderBase extends React.Component { } // eslint-disable-next-line @typescript-eslint/no-unused-vars -const mapStateToProps = createMapStateToProps((state, props) => { - const userAccessQueryString = getUserAccessQuery(allUserAccessQuery); - const userAccess = userAccessSelectors.selectUserAccess(state, UserAccessType.all, userAccessQueryString); - const userAccessError = userAccessSelectors.selectUserAccessError(state, UserAccessType.all, userAccessQueryString); - const userAccessFetchStatus = userAccessSelectors.selectUserAccessFetchStatus( - state, - UserAccessType.all, - userAccessQueryString - ); - - const queryFromRoute = parseQuery(location.search); - const perspective = getPerspectiveDefault(queryFromRoute, userAccess); - - const query = { - filter: { - ...baseQuery.filter, - ...queryFromRoute.filter, - }, - filter_by: queryFromRoute.filter_by || baseQuery.filter_by, - group_by: queryFromRoute.group_by || { [getGroupByDefault(perspective)]: '*' } || baseQuery.group_by, - // order_by: queryFromRoute.order_by || baseQuery.order_by, // Todo: omit default sort - order_by: queryFromRoute.order_by, - perspective, - }; - const queryString = getQuery({ - ...query, - perspective: undefined, - }); - - const awsProvidersQueryString = getProvidersQuery(awsProvidersQuery); - const awsProviders = providersSelectors.selectProviders(state, ProviderType.aws, awsProvidersQueryString); - const awsProvidersFetchStatus = providersSelectors.selectProvidersFetchStatus( - state, - ProviderType.aws, - awsProvidersQueryString - ); - - const azureProvidersQueryString = getProvidersQuery(azureProvidersQuery); - const azureProviders = providersSelectors.selectProviders(state, ProviderType.azure, azureProvidersQueryString); - const azureProvidersFetchStatus = providersSelectors.selectProvidersFetchStatus( - state, - ProviderType.azure, - azureProvidersQueryString - ); - - const gcpProvidersQueryString = getProvidersQuery(gcpProvidersQuery); - const gcpProviders = providersSelectors.selectProviders(state, ProviderType.gcp, gcpProvidersQueryString); - const gcpProvidersFetchStatus = providersSelectors.selectProvidersFetchStatus( - state, - ProviderType.gcp, - gcpProvidersQueryString - ); - - const ibmProvidersQueryString = getProvidersQuery(ibmProvidersQuery); - const ibmProviders = providersSelectors.selectProviders(state, ProviderType.ibm, ibmProvidersQueryString); - const ibmProvidersFetchStatus = providersSelectors.selectProvidersFetchStatus( - state, - ProviderType.ibm, - ibmProvidersQueryString - ); - - const ocpProvidersQueryString = getProvidersQuery(ocpProvidersQuery); - const ocpProviders = providersSelectors.selectProviders(state, ProviderType.ocp, ocpProvidersQueryString); - const ocpProvidersFetchStatus = providersSelectors.selectProvidersFetchStatus( - state, - ProviderType.ocp, - ocpProvidersQueryString - ); - - // Todo: temporarily request IBM separately with beta flag. - const ibmUserAccessQueryString = getUserAccessQuery(ibmUserAccessQuery); - const ibmUserAccess = userAccessSelectors.selectUserAccess(state, UserAccessType.ibm, ibmUserAccessQueryString); - const ibmUserAccessError = userAccessSelectors.selectUserAccessError( - state, - UserAccessType.ibm, - ibmUserAccessQueryString - ); - const ibmUserAccessFetchStatus = userAccessSelectors.selectUserAccessFetchStatus( - state, - UserAccessType.ibm, - ibmUserAccessQueryString - ); - - return { - awsProviders, - awsProvidersFetchStatus, - awsProvidersQueryString, - azureProviders, - azureProvidersFetchStatus, - azureProvidersQueryString, - gcpProviders, - gcpProvidersFetchStatus, - gcpProvidersQueryString, - ibmProviders, - ibmProvidersFetchStatus, - ibmProvidersQueryString, - ibmUserAccess, - ibmUserAccessError, - ibmUserAccessFetchStatus, - ibmUserAccessQueryString, - ocpProviders, - ocpProvidersFetchStatus, - ocpProvidersQueryString, - perspective, - query, - queryString, - userAccess, - userAccessError, - userAccessFetchStatus, - userAccessQueryString, - }; -}); +const mapStateToProps = createMapStateToProps( + (state, { perspective }) => { + const userAccessQueryString = getUserAccessQuery(allUserAccessQuery); + const userAccess = userAccessSelectors.selectUserAccess(state, UserAccessType.all, userAccessQueryString); + const userAccessError = userAccessSelectors.selectUserAccessError(state, UserAccessType.all, userAccessQueryString); + const userAccessFetchStatus = userAccessSelectors.selectUserAccessFetchStatus( + state, + UserAccessType.all, + userAccessQueryString + ); + + const queryFromRoute = parseQuery(location.search); + + const query = { + filter: { + ...baseQuery.filter, + ...queryFromRoute.filter, + }, + filter_by: queryFromRoute.filter_by || baseQuery.filter_by, + group_by: queryFromRoute.group_by || { [getGroupByDefault(perspective)]: '*' } || baseQuery.group_by, + // order_by: queryFromRoute.order_by || baseQuery.order_by, // Todo: omit default sort + order_by: queryFromRoute.order_by, + perspective, + }; + const queryString = getQuery({ + ...query, + perspective: undefined, + }); + + const awsProvidersQueryString = getProvidersQuery(awsProvidersQuery); + const awsProviders = providersSelectors.selectProviders(state, ProviderType.aws, awsProvidersQueryString); + const awsProvidersFetchStatus = providersSelectors.selectProvidersFetchStatus( + state, + ProviderType.aws, + awsProvidersQueryString + ); + + const azureProvidersQueryString = getProvidersQuery(azureProvidersQuery); + const azureProviders = providersSelectors.selectProviders(state, ProviderType.azure, azureProvidersQueryString); + const azureProvidersFetchStatus = providersSelectors.selectProvidersFetchStatus( + state, + ProviderType.azure, + azureProvidersQueryString + ); + + const gcpProvidersQueryString = getProvidersQuery(gcpProvidersQuery); + const gcpProviders = providersSelectors.selectProviders(state, ProviderType.gcp, gcpProvidersQueryString); + const gcpProvidersFetchStatus = providersSelectors.selectProvidersFetchStatus( + state, + ProviderType.gcp, + gcpProvidersQueryString + ); + + const ibmProvidersQueryString = getProvidersQuery(ibmProvidersQuery); + const ibmProviders = providersSelectors.selectProviders(state, ProviderType.ibm, ibmProvidersQueryString); + const ibmProvidersFetchStatus = providersSelectors.selectProvidersFetchStatus( + state, + ProviderType.ibm, + ibmProvidersQueryString + ); + + const ocpProvidersQueryString = getProvidersQuery(ocpProvidersQuery); + const ocpProviders = providersSelectors.selectProviders(state, ProviderType.ocp, ocpProvidersQueryString); + const ocpProvidersFetchStatus = providersSelectors.selectProvidersFetchStatus( + state, + ProviderType.ocp, + ocpProvidersQueryString + ); + + // Todo: temporarily request IBM separately with beta flag. + const ibmUserAccessQueryString = getUserAccessQuery(ibmUserAccessQuery); + const ibmUserAccess = userAccessSelectors.selectUserAccess(state, UserAccessType.ibm, ibmUserAccessQueryString); + const ibmUserAccessError = userAccessSelectors.selectUserAccessError( + state, + UserAccessType.ibm, + ibmUserAccessQueryString + ); + const ibmUserAccessFetchStatus = userAccessSelectors.selectUserAccessFetchStatus( + state, + UserAccessType.ibm, + ibmUserAccessQueryString + ); + + return { + awsProviders, + awsProvidersFetchStatus, + awsProvidersQueryString, + azureProviders, + azureProvidersFetchStatus, + azureProvidersQueryString, + gcpProviders, + gcpProvidersFetchStatus, + gcpProvidersQueryString, + ibmProviders, + ibmProvidersFetchStatus, + ibmProvidersQueryString, + ibmUserAccess, + ibmUserAccessError, + ibmUserAccessFetchStatus, + ibmUserAccessQueryString, + ocpProviders, + ocpProvidersFetchStatus, + ocpProvidersQueryString, + perspective, + query, + queryString, + userAccess, + userAccessError, + userAccessFetchStatus, + userAccessQueryString, + }; + } +); const ExplorerHeader = withRouter(withTranslation()(connect(mapStateToProps, {})(ExplorerHeaderBase))); diff --git a/src/pages/views/explorer/explorerTable.tsx b/src/pages/views/explorer/explorerTable.tsx index 2b08daf52..d6da1763d 100644 --- a/src/pages/views/explorer/explorerTable.tsx +++ b/src/pages/views/explorer/explorerTable.tsx @@ -5,9 +5,7 @@ import { CalculatorIcon } from '@patternfly/react-icons/dist/js/icons/calculator import { nowrap, sortable, SortByDirection, Table, TableBody, TableHeader } from '@patternfly/react-table'; import { AwsQuery, getQuery } from 'api/queries/awsQuery'; import { parseQuery, Query } from 'api/queries/query'; -import { getUserAccessQuery } from 'api/queries/userAccessQuery'; import { AwsReport } from 'api/reports/awsReports'; -import { UserAccessType } from 'api/userAccess'; import { ComputedReportItemType } from 'components/charts/common/chartDatumUtils'; import { EmptyFilterState } from 'components/state/emptyFilterState/emptyFilterState'; import { format, getDate, getMonth } from 'date-fns'; @@ -16,7 +14,6 @@ import React from 'react'; import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; import { createMapStateToProps } from 'store/common'; -import { allUserAccessQuery, userAccessSelectors } from 'store/userAccess'; import { getIdKeyForGroupBy } from 'utils/computedReport/getComputedExplorerReportItems'; import { ComputedReportItem, getUnsortedComputedReportItems } from 'utils/computedReport/getComputedReportItems'; import { formatCurrency } from 'utils/formatValue'; @@ -26,7 +23,6 @@ import { DateRangeType, getDateRange, getDateRangeDefault, - getPerspectiveDefault, PerspectiveType, } from './explorerUtils'; @@ -37,6 +33,7 @@ interface ExplorerTableOwnProps { isLoading?: boolean; onSelected(items: ComputedReportItem[], isSelected: boolean); onSort(value: string, isSortAscending: boolean); + perspective: PerspectiveType; query: AwsQuery; report: AwsReport; selectedItems?: ComputedReportItem[]; @@ -45,7 +42,6 @@ interface ExplorerTableOwnProps { interface ExplorerTableStateProps { dateRange: DateRangeType; end_date?: string; - perspective: PerspectiveType; start_date?: string; } @@ -344,22 +340,20 @@ class ExplorerTableBase extends React.Component { } // eslint-disable-next-line @typescript-eslint/no-unused-vars -const mapStateToProps = createMapStateToProps((state, props) => { - const userAccessQueryString = getUserAccessQuery(allUserAccessQuery); - const userAccess = userAccessSelectors.selectUserAccess(state, UserAccessType.all, userAccessQueryString); - - const queryFromRoute = parseQuery(location.search); - const perspective = getPerspectiveDefault(queryFromRoute, userAccess); - const dateRange = getDateRangeDefault(queryFromRoute); - const { end_date, start_date } = getDateRange(getDateRangeDefault(queryFromRoute)); - - return { - dateRange, - end_date, - perspective, - start_date, - }; -}); +const mapStateToProps = createMapStateToProps( + (state, { perspective }) => { + const queryFromRoute = parseQuery(location.search); + const dateRange = getDateRangeDefault(queryFromRoute); + const { end_date, start_date } = getDateRange(getDateRangeDefault(queryFromRoute)); + + return { + dateRange, + end_date, + perspective, + start_date, + }; + } +); const mapDispatchToProps: ExplorerTableDispatchProps = {}; diff --git a/src/pages/views/explorer/explorerUtils.ts b/src/pages/views/explorer/explorerUtils.ts index 753a548ec..46e5df6cf 100644 --- a/src/pages/views/explorer/explorerUtils.ts +++ b/src/pages/views/explorer/explorerUtils.ts @@ -1,17 +1,19 @@ import { OrgPathsType } from 'api/orgs/org'; +import { Providers } from 'api/providers'; import { getQueryRoute, Query } from 'api/queries/query'; import { ReportPathsType, ReportType } from 'api/reports/report'; import { TagPathsType } from 'api/tags/tag'; import { UserAccess } from 'api/userAccess'; import { ComputedReportItemType } from 'components/charts/common/chartDatumUtils'; import { format } from 'date-fns'; +import { FetchStatus } from 'store/common'; import { ComputedAwsReportItemsParams } from 'utils/computedReport/getComputedAwsReportItems'; import { ComputedAzureReportItemsParams } from 'utils/computedReport/getComputedAzureReportItems'; import { ComputedGcpReportItemsParams } from 'utils/computedReport/getComputedGcpReportItems'; import { ComputedIbmReportItemsParams } from 'utils/computedReport/getComputedIbmReportItems'; import { ComputedOcpReportItemsParams } from 'utils/computedReport/getComputedOcpReportItems'; import { getCurrentMonthDate, getLast30DaysDate, getLast60DaysDate } from 'utils/dateRange'; -import { hasAwsAccess, hasAzureAccess, hasGcpAccess, hasIbmAccess, hasOcpAccess } from 'utils/userAccess'; +import { isAwsAvailable, isAzureAvailable, isGcpAvailable, isIbmAvailable, isOcpAvailable } from 'utils/userAccess'; // The date range drop down has the options below (if today is Jan 18th…) // eslint-disable-next-line no-shadow @@ -192,19 +194,45 @@ export const getDateRangeDefault = (queryFromRoute: Query) => { return queryFromRoute.dateRange || DateRangeType.currentMonthToDate; }; -export const getPerspectiveDefault = (queryFromRoute: Query, userAccess: UserAccess) => { +export const getPerspectiveDefault = ({ + awsProviders, + awsProvidersFetchStatus, + azureProviders, + azureProvidersFetchStatus, + gcpProviders, + gcpProvidersFetchStatus, + ibmProviders, + ibmProvidersFetchStatus, + ocpProviders, + ocpProvidersFetchStatus, + queryFromRoute, + userAccess, +}: { + awsProviders: Providers; + awsProvidersFetchStatus: FetchStatus; + azureProviders: Providers; + azureProvidersFetchStatus: FetchStatus; + gcpProviders: Providers; + gcpProvidersFetchStatus: FetchStatus; + ibmProviders: Providers; + ibmProvidersFetchStatus: FetchStatus; + ocpProviders: Providers; + ocpProvidersFetchStatus: FetchStatus; + queryFromRoute: Query; + userAccess: UserAccess; +}) => { let result = queryFromRoute.perspective; if (!result) { - if (hasOcpAccess(userAccess)) { + if (isOcpAvailable(userAccess, ocpProviders, ocpProvidersFetchStatus)) { result = PerspectiveType.ocp; - } else if (hasAwsAccess(userAccess)) { + } else if (isAwsAvailable(userAccess, awsProviders, awsProvidersFetchStatus)) { result = PerspectiveType.aws; - } else if (hasAzureAccess(userAccess)) { + } else if (isAzureAvailable(userAccess, azureProviders, azureProvidersFetchStatus)) { result = PerspectiveType.azure; - } else if (hasGcpAccess(userAccess)) { + } else if (isGcpAvailable(userAccess, gcpProviders, gcpProvidersFetchStatus)) { result = PerspectiveType.gcp; - } else if (hasIbmAccess(userAccess)) { + } else if (isIbmAvailable(userAccess, ibmProviders, ibmProvidersFetchStatus)) { result = PerspectiveType.ibm; } } From 9947eacbf1e523b503cf3fc37c32309d806bcc3c Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Wed, 28 Apr 2021 14:50:26 -0400 Subject: [PATCH 016/141] Fixed perspective menu options for Cost Explorer https://issues.redhat.com/browse/COST-1339 --- src/pages/views/explorer/explorerHeader.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/views/explorer/explorerHeader.tsx b/src/pages/views/explorer/explorerHeader.tsx index 4baccdc78..7d79972db 100644 --- a/src/pages/views/explorer/explorerHeader.tsx +++ b/src/pages/views/explorer/explorerHeader.tsx @@ -126,7 +126,7 @@ class ExplorerHeaderBase extends React.Component { if (aws) { options.push(...infrastructureAwsOptions); } - if (ocp && isAwsAvailable) { + if (ocp && aws) { options.push(...infrastructureAwsCloudOptions); } if (gcp) { From 1cb3867658210049501712bc6155b73ebd4116aa Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Wed, 28 Apr 2021 14:55:22 -0400 Subject: [PATCH 017/141] Cost Explorer format fix for linter --- src/pages/views/explorer/explorer.tsx | 5 ++++- src/pages/views/explorer/explorerTable.tsx | 7 +------ 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/src/pages/views/explorer/explorer.tsx b/src/pages/views/explorer/explorer.tsx index c5792726c..fc579745c 100644 --- a/src/pages/views/explorer/explorer.tsx +++ b/src/pages/views/explorer/explorer.tsx @@ -468,7 +468,10 @@ class Explorer extends React.Component { {itemsTotal > 0 && (
- +
)} diff --git a/src/pages/views/explorer/explorerTable.tsx b/src/pages/views/explorer/explorerTable.tsx index d6da1763d..66ee25785 100644 --- a/src/pages/views/explorer/explorerTable.tsx +++ b/src/pages/views/explorer/explorerTable.tsx @@ -19,12 +19,7 @@ import { ComputedReportItem, getUnsortedComputedReportItems } from 'utils/comput import { formatCurrency } from 'utils/formatValue'; import { styles } from './explorerTable.styles'; -import { - DateRangeType, - getDateRange, - getDateRangeDefault, - PerspectiveType, -} from './explorerUtils'; +import { DateRangeType, getDateRange, getDateRangeDefault, PerspectiveType } from './explorerUtils'; interface ExplorerTableOwnProps { computedReportItemType?: ComputedReportItemType; From be7262523b01dbd601d23cb753c27717987027ec Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Fri, 7 May 2021 09:51:25 -0400 Subject: [PATCH 018/141] Cost Explorer to show infrastructure cost for "OpenShift usage" https://issues.redhat.com/browse/COST-1371 --- src/pages/views/explorer/explorerUtils.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/pages/views/explorer/explorerUtils.ts b/src/pages/views/explorer/explorerUtils.ts index 46e5df6cf..eb9314725 100644 --- a/src/pages/views/explorer/explorerUtils.ts +++ b/src/pages/views/explorer/explorerUtils.ts @@ -145,6 +145,9 @@ export const getComputedReportItemType = (perspective: string) => { case PerspectiveType.ocpSupplementary: result = ComputedReportItemType.supplementary; break; + case PerspectiveType.ocpUsage: + result = ComputedReportItemType.infrastructure; + break; case PerspectiveType.aws: case PerspectiveType.awsCloud: case PerspectiveType.azure: @@ -153,7 +156,6 @@ export const getComputedReportItemType = (perspective: string) => { case PerspectiveType.ibm: case PerspectiveType.ocp: case PerspectiveType.ocpCloud: - case PerspectiveType.ocpUsage: default: result = ComputedReportItemType.cost; break; From 1d9da293bd8963e9c7454d5db5b47d619cb52f2c Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Fri, 7 May 2021 15:29:05 -0400 Subject: [PATCH 019/141] Moved "learn_more" i18n key to common location --- .../costModels/createCostModelWizard/generalInformation.tsx | 2 +- .../details/components/costOverview/costOverviewBase.tsx | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/pages/costModels/createCostModelWizard/generalInformation.tsx b/src/pages/costModels/createCostModelWizard/generalInformation.tsx index 1573737bc..c43c9547a 100644 --- a/src/pages/costModels/createCostModelWizard/generalInformation.tsx +++ b/src/pages/costModels/createCostModelWizard/generalInformation.tsx @@ -28,7 +28,7 @@ const GeneralInformation: React.SFC = ({ t }) => { - {t('cost_models_wizard.general_info.learn_more')} + {t('learn_more')} diff --git a/src/pages/views/details/components/costOverview/costOverviewBase.tsx b/src/pages/views/details/components/costOverview/costOverviewBase.tsx index b59d406c4..d8f8d3f87 100644 --- a/src/pages/views/details/components/costOverview/costOverviewBase.tsx +++ b/src/pages/views/details/components/costOverview/costOverviewBase.tsx @@ -88,8 +88,8 @@ class CostOverviewBase extends React.Component {

{t('breakdown.markup_title')}

{t('breakdown.markup_desc')}


- - {t('cost_models_wizard.general_info.learn_more')} + + {t('learn_more')} } From bef62d2061da76a70dddf78b58910a4ff9b20512 Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Fri, 7 May 2021 15:29:38 -0400 Subject: [PATCH 020/141] Added "learn more" link to cost models popover https://issues.redhat.com/browse/COST-1011 --- src/locales/en.json | 8 ++++---- src/pages/costModels/costModelsDetails/header.tsx | 13 +++++++++++-- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/src/locales/en.json b/src/locales/en.json index 2a4a0429f..52cc9ef56 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -153,7 +153,6 @@ "default": "Default", "description_too_long": "Should not exceed 500 characters", "infra_cost_switch": "Use this rate to calculate infrastructure cost", - "learn_more": "Learn more", "lowercase": { "Currency": "price ({{units}})", "Request": "request ({{units}})", @@ -244,7 +243,6 @@ }, "finish_button": "Finish", "general_info": { - "learn_more": "Learn more", "name_too_long": "Should not exceed 100 characters", "source_type_empty_value_label": "Select source type", "source_type_label": "Source type", @@ -420,7 +418,8 @@ "docs": { "add_ocp_sources": "https://access.redhat.com/documentation/en-us/cost_management_service/2021/html/getting_started_with_cost_management/assembly-adding-openshift-container-platform-source", "config_cost_models": "https://access.redhat.com/documentation/en-us/cost_management_service/2021/html/using_cost_models/assembly-setting-up-cost-models", - "using_cost_model": "https://access.redhat.com/documentation/en-us/cost_management_service/2021/html/using_cost_models/assembly-using-cost-models#cost-model-terminology" + "cost_model_terminology": "https://access.redhat.com/documentation/en-us/cost_management_service/2021/html/using_cost_models/assembly-using-cost-models#cost-model-terminology", + "using_cost_models": "https://access.redhat.com/documentation/en-us/cost_management_service/2021/html-single/using_cost_models/index" }, "empty_filter_state": { "subtitle": "Sorry, no data with the given filter was found.", @@ -662,6 +661,7 @@ "title": "A problem was detected with {{value}}", "title_multiple": "A problem was detected with the following sources" }, + "learn_more": "Learn more", "loading": "Loading", "loading_state": { "sources_desc": "Searching for your sources. Do not refresh the browser", @@ -843,7 +843,7 @@ "filter_by_description": "Filter by description", "filter_by_name": "Filter by name", "filter_by_source_type": "Filter by source type", - "header_popover": "A cost model allows you to associate a price to metrics provided by your sources to charge for utilization of resources.", + "header_popover": "A cost model allows you to associate a price to metrics provided by your sources to charge for utilization of resources. <0>Learn more", "header_title": "Cost models", "last_change": "Last change", "no_cost_models_description": "Create a cost model to start calculating your hybrid cloud costs using custom price lists, markups, or both. Click on the button below to begin the journey.", diff --git a/src/pages/costModels/costModelsDetails/header.tsx b/src/pages/costModels/costModelsDetails/header.tsx index ec833972a..52edb4542 100644 --- a/src/pages/costModels/costModelsDetails/header.tsx +++ b/src/pages/costModels/costModelsDetails/header.tsx @@ -1,7 +1,7 @@ import { Button, ButtonVariant, Popover, TextContent, Title } from '@patternfly/react-core'; import { OutlinedQuestionCircleIcon } from '@patternfly/react-icons/dist/js/icons/outlined-question-circle-icon'; import React from 'react'; -import { WithTranslation, withTranslation } from 'react-i18next'; +import { Trans, WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; import { RootState } from 'store'; @@ -21,10 +21,19 @@ function HeaderBase({ children }: HeaderProps): JSX.Element { const mapStateToProps = (state: RootState, ownProps: WithTranslation) => { const { t } = ownProps; + const children = ( <> {t('page_cost_models.header_title')} - + + + + } + enableFlip + > From 749db2f54a3d4ac57ad48a47a67f7db14693405e Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Fri, 7 May 2021 15:42:46 -0400 Subject: [PATCH 021/141] Fixed _blank anchor targets --- src/pages/costModels/costModelsDetails/header.tsx | 2 +- .../costModels/createCostModelWizard/generalInformation.tsx | 2 +- .../views/details/components/costOverview/costOverviewBase.tsx | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/pages/costModels/costModelsDetails/header.tsx b/src/pages/costModels/costModelsDetails/header.tsx index 52edb4542..2ffd1bdaa 100644 --- a/src/pages/costModels/costModelsDetails/header.tsx +++ b/src/pages/costModels/costModelsDetails/header.tsx @@ -29,7 +29,7 @@ const mapStateToProps = (state: RootState, ownProps: WithTranslation) => { aria-label="page header popver" bodyContent={ - + } enableFlip diff --git a/src/pages/costModels/createCostModelWizard/generalInformation.tsx b/src/pages/costModels/createCostModelWizard/generalInformation.tsx index c43c9547a..4eaf124c0 100644 --- a/src/pages/costModels/createCostModelWizard/generalInformation.tsx +++ b/src/pages/costModels/createCostModelWizard/generalInformation.tsx @@ -27,7 +27,7 @@ const GeneralInformation: React.SFC = ({ t }) => {
- + {t('learn_more')} diff --git a/src/pages/views/details/components/costOverview/costOverviewBase.tsx b/src/pages/views/details/components/costOverview/costOverviewBase.tsx index d8f8d3f87..75d272c58 100644 --- a/src/pages/views/details/components/costOverview/costOverviewBase.tsx +++ b/src/pages/views/details/components/costOverview/costOverviewBase.tsx @@ -88,7 +88,7 @@ class CostOverviewBase extends React.Component {

{t('breakdown.markup_title')}

{t('breakdown.markup_desc')}


- + {t('learn_more')} From c002e6fe9699af513ede3015453d8a3f3a6d6c94 Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Fri, 7 May 2021 15:52:14 -0400 Subject: [PATCH 022/141] Updated doc links to use single page --- src/locales/en.json | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/locales/en.json b/src/locales/en.json index 52cc9ef56..c1fa8d9c2 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -416,9 +416,9 @@ "title": "Delete {{rate.metric.label_metric}}-{{rate.metric.label_measurement}} ({{rate.metric.label_measurement_unit}}) rate?" }, "docs": { - "add_ocp_sources": "https://access.redhat.com/documentation/en-us/cost_management_service/2021/html/getting_started_with_cost_management/assembly-adding-openshift-container-platform-source", - "config_cost_models": "https://access.redhat.com/documentation/en-us/cost_management_service/2021/html/using_cost_models/assembly-setting-up-cost-models", - "cost_model_terminology": "https://access.redhat.com/documentation/en-us/cost_management_service/2021/html/using_cost_models/assembly-using-cost-models#cost-model-terminology", + "add_ocp_sources": "https://access.redhat.com/documentation/en-us/cost_management_service/2021/html-single/getting_started_with_cost_management/index#assembly-adding-openshift-container-platform-source", + "config_cost_models": "https://access.redhat.com/documentation/en-us/cost_management_service/2021/html-single/using_cost_models/index#assembly-setting-up-cost-models", + "cost_model_terminology": "https://access.redhat.com/documentation/en-us/cost_management_service/2021/html-single/using_cost_models/index#cost-model-terminology", "using_cost_models": "https://access.redhat.com/documentation/en-us/cost_management_service/2021/html-single/using_cost_models/index" }, "empty_filter_state": { @@ -847,6 +847,7 @@ "header_title": "Cost models", "last_change": "Last change", "no_cost_models_description": "Create a cost model to start calculating your hybrid cloud costs using custom price lists, markups, or both. Click on the button below to begin the journey.", + "no_cost_models_learn_more": "Read about setting up a cost model", "no_cost_models_title": "What is your hybrid cloud costing you?", "ocp": "OpenShift Container Platform", "source_type": "Source type" From e5a76cf3265ff12fa10685858d47f62f9b40c710 Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Fri, 7 May 2021 15:58:57 -0400 Subject: [PATCH 023/141] Added "learn more" link to cost models empty state https://issues.redhat.com/browse/COST-1011 --- .../costModels/costModelsDetails/noCostModels.tsx | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/pages/costModels/costModelsDetails/noCostModels.tsx b/src/pages/costModels/costModelsDetails/noCostModels.tsx index db23b24eb..08b3f3b38 100644 --- a/src/pages/costModels/costModelsDetails/noCostModels.tsx +++ b/src/pages/costModels/costModelsDetails/noCostModels.tsx @@ -12,7 +12,16 @@ const NoCostModels = HookIntoProps(() => { title: t('page_cost_models.no_cost_models_title'), description: t('page_cost_models.no_cost_models_description'), icon: PlusCircleIcon, - actions: , + actions: ( + <> + +
+
+ + {t('page_cost_models.no_cost_models_learn_more')} + + + ), }; })(EmptyStateBase); From 5c59634e151436785b4e65bcd34eae4912b3125d Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Mon, 10 May 2021 20:22:15 -0400 Subject: [PATCH 024/141] Add GCP and IBM to inactive sources widget (#1966) https://issues.redhat.com/browse/COST-1375 --- .../inactiveSources/inactiveSources.tsx | 32 +++++++++++++++++-- 1 file changed, 29 insertions(+), 3 deletions(-) diff --git a/src/components/sources/inactiveSources/inactiveSources.tsx b/src/components/sources/inactiveSources/inactiveSources.tsx index b5a77edf2..30b7301cd 100644 --- a/src/components/sources/inactiveSources/inactiveSources.tsx +++ b/src/components/sources/inactiveSources/inactiveSources.tsx @@ -160,7 +160,7 @@ class InactiveSourcesBase extends React.Component { }; private getInactiveSourceNames = () => { - const { awsProviders, azureProviders, ocpProviders } = this.props; + const { awsProviders, azureProviders, gcpProviders, ibmProviders, ocpProviders } = this.props; const sources = []; @@ -178,6 +178,20 @@ class InactiveSourcesBase extends React.Component { } }); } + if (gcpProviders && gcpProviders.data) { + gcpProviders.data.map(data => { + if (data.active !== true) { + sources.push(data.name); + } + }); + } + if (ibmProviders && ibmProviders.data) { + ibmProviders.data.map(data => { + if (data.active !== true) { + sources.push(data.name); + } + }); + } if (ocpProviders && ocpProviders.data) { ocpProviders.data.map(data => { if (data.active !== true) { @@ -231,6 +245,12 @@ class InactiveSourcesBase extends React.Component { azureProviders, azureProvidersError, azureProvidersFetchStatus, + gcpProviders, + gcpProvidersError, + gcpProvidersFetchStatus, + ibmProviders, + ibmProvidersError, + ibmProvidersFetchStatus, ocpProviders, ocpProvidersError, ocpProvidersFetchStatus, @@ -250,6 +270,12 @@ class InactiveSourcesBase extends React.Component { azureProviders && azureProvidersFetchStatus === FetchStatus.complete && !azureProvidersError && + gcpProviders && + gcpProvidersFetchStatus === FetchStatus.complete && + !gcpProvidersError && + ibmProviders && + ibmProvidersFetchStatus === FetchStatus.complete && + !ibmProvidersError && ocpProviders && ocpProvidersFetchStatus === FetchStatus.complete && !ocpProvidersError @@ -321,8 +347,8 @@ const mapStateToProps = createMapStateToProps Date: Thu, 13 May 2021 07:38:39 -0400 Subject: [PATCH 025/141] Cost Explorer bar width (#1967) * Cost Explorer dynamic bar width https://issues.redhat.com/browse/COST-1383 * Added flag to fix chart tick label overlap issue * Adjust tick values * Add max bar width --- .../costExplorerChart/costExplorerChart.tsx | 44 ++++++++++++++++--- 1 file changed, 39 insertions(+), 5 deletions(-) diff --git a/src/components/charts/costExplorerChart/costExplorerChart.tsx b/src/components/charts/costExplorerChart/costExplorerChart.tsx index 03de6eab7..de2872653 100644 --- a/src/components/charts/costExplorerChart/costExplorerChart.tsx +++ b/src/components/charts/costExplorerChart/costExplorerChart.tsx @@ -234,12 +234,40 @@ class CostExplorerChart extends React.Component { return adjustedContainerHeight; }; - private getChart = (series: ChartSeries, index: number) => { + // If bar width exceeds max and domainPadding is true, extra width is returned to help center bars horizontally + private getBarWidth = (domainPadding: boolean = false) => { + const { hiddenSeries, series, width } = this.state; + const maxWidth = 200; + let maxValue = -1; + + if (series) { + series.forEach((s: any, index) => { + if (!isSeriesHidden(hiddenSeries, index) && s.data && s.data.length !== 0) { + if (s.data.length > maxValue) { + maxValue = s.data.length; + } + } + }); + } + + // Divide available width into equal sections + const sections = maxValue * 2 + 1; + const sectionWidth = maxValue > 0 ? width / sections : 0; + + if (domainPadding) { + // Add any extra bar width for domain padding + const extraWidth = sectionWidth > maxWidth ? (sectionWidth - maxWidth) * maxValue : 0; + return (sectionWidth + extraWidth / 2) * 2; + } + return sectionWidth > maxWidth ? maxWidth : sectionWidth; + }; + + private getChart = (series: ChartSeries, index: number, barWidth: number) => { const { hiddenSeries } = this.state; const data = !hiddenSeries.has(index) ? series.data : [{ y: null }]; return ( - + ); }; @@ -336,8 +364,11 @@ class CostExplorerChart extends React.Component { // Prune tick values const tickValues = []; + const modVal = values.length < 6 ? 2 : 3; for (let i = 0; i < values.length; i++) { - if (i % 3 === 0 && i + 2 < values.length) { + if (i % modVal === 0 && i + 2 < values.length) { + tickValues.push(values[i]); + } else if (values.length < 3 && i + 1 < values.length) { tickValues.push(values[i]); } } @@ -409,6 +440,8 @@ class CostExplorerChart extends React.Component { }) : undefined; + const barWidth = this.getBarWidth(); + // Note: For tooltip values to match properly, chart groups must be rendered in the order given as legend data return (
@@ -416,6 +449,7 @@ class CostExplorerChart extends React.Component { { width={width} > {series && series.length > 0 && ( - {series.map((s, index) => this.getChart(s, index))} + {series.map((s, index) => this.getChart(s, index, barWidth))} )} - +
From d54a73572907da0b7c7fc2a67361b22cef48f76a Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Fri, 14 May 2021 09:04:47 -0400 Subject: [PATCH 026/141] Clear sort when group_by is updated https://issues.redhat.com/browse/COST-1411 --- src/pages/views/explorer/explorer.tsx | 5 ++--- src/pages/views/explorer/explorerHeader.tsx | 4 +--- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/src/pages/views/explorer/explorer.tsx b/src/pages/views/explorer/explorer.tsx index fc579745c..8bf438f49 100644 --- a/src/pages/views/explorer/explorer.tsx +++ b/src/pages/views/explorer/explorer.tsx @@ -308,7 +308,7 @@ class Explorer extends React.Component { group_by: { [groupByKey]: value, }, - // order_by: { cost: 'desc' }, // // Todo: omit default sort + order_by: undefined, // Clear sort }; history.replace(getRouteForQuery(history, newQuery, true)); this.setState({ isAllSelected: false, selectedItems: [] }); @@ -379,7 +379,7 @@ class Explorer extends React.Component { getRouteForQuery(history, { filter_by: query ? query.filter_by : undefined, group_by: query ? query.group_by : undefined, - // order_by: { cost: 'desc' }, // Todo: omit default sort + order_by: query ? query.order_by : undefined, dateRange, // Preserve date range }) ); @@ -585,7 +585,6 @@ const mapStateToProps = createMapStateToProps { ...JSON.parse(JSON.stringify(query)), filter_by: undefined, group_by: { [getGroupByDefault(value)]: '*' }, - // order_by: { cost: 'desc' }, // Todo: omit default sort - order_by: undefined, // Clear sort because table columns are not a match + order_by: undefined, // Clear sort perspective: value, }; history.replace(getRouteForQuery(history, newQuery, true)); @@ -298,7 +297,6 @@ const mapStateToProps = createMapStateToProps Date: Mon, 17 May 2021 10:51:36 -0400 Subject: [PATCH 027/141] fixed empty and error state i18n for cost model sources --- src/locales/en.json | 4 +++- src/pages/costModels/components/errorState.tsx | 7 ++----- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/src/locales/en.json b/src/locales/en.json index c1fa8d9c2..9ec64a222 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -187,6 +187,7 @@ "add_source": "Assign source", "assign_sources": "Assign sources", "assign_sources_error_action_button": "Refresh this dialog", + "assign_sources_error_desc": "You cannot assign a source at this time. Try refreshing this page. If the problem persists, contact your organization administrator or visit our <0>Status Page for known outages.", "assign_sources_error_title": "This action is temporarily unavailable", "cost_model": { "cost_models": "Cost models", @@ -289,7 +290,7 @@ "caption": "Select from the following {{ type }} sources:", "error": { "action": "Refresh this step", - "desc": "Try refreshing this step or you can skip this step (as it is optional) and assign the source to the cost model at a later time. If the problem persists, contact your organization administrator or visit our <2>status page for known outages.", + "desc": "Try refreshing this step or you can skip this step (as it is optional) and assign the source to the cost model at a later time. If the problem persists, contact your organization administrator or visit our <0>Status Page for known outages.", "title": "This step is temporarily unavailable" }, "sub_title": "Select one or more sources to this cost model. You can skip this step and assign the cost model to a source at a later time. A source will be unavailable for selection if a cost model is already assigned to it.", @@ -873,6 +874,7 @@ "OCP": "Red Hat OpenShift" } }, + "status_url": "https://status.redhat.com", "tag": { "heading_key": "Key", "heading_value": "Value", diff --git a/src/pages/costModels/components/errorState.tsx b/src/pages/costModels/components/errorState.tsx index 09d0a5562..c8c521a2e 100644 --- a/src/pages/costModels/components/errorState.tsx +++ b/src/pages/costModels/components/errorState.tsx @@ -51,9 +51,7 @@ export const SourceStepErrorState: React.FunctionComponent - Try refreshing this step or you can skip this step (as it is optional) and assign the source to the cost model at - a later time. If the problem persists, contact your organization administrator or visit our{' '} - status page for known outages. + ); const actionButton = ( @@ -83,8 +81,7 @@ export const SourcesModalErrorStateBase: React.FunctionComponent - You cannot assign a source at this time. Try refreshing this page. If the problem persists, contact your - organization administrator or visit our status page for known outages. + ); const actionButton = ( From 596a170d11b2088db8d568cee52475cca6162996 Mon Sep 17 00:00:00 2001 From: Doug Donahue Date: Mon, 17 May 2021 12:51:25 -0400 Subject: [PATCH 028/141] fixes for cost models i18n price list keys --- src/locales/en.json | 4 ++-- src/pages/costModels/createCostModelWizard/priceListTable.tsx | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/locales/en.json b/src/locales/en.json index 9ec64a222..3657e43b3 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -236,9 +236,9 @@ "description": "A cost model allows you to associate a price to metrics provided by your sources to charge for utilization of resources.", "empty_state": { "add_rate": "Add rate", - "desc_create": "To create a price list, begin by clicking the {{add_rate}} button.", + "desc_create": "To create a price list, begin by clicking the <0>Create rate button.", "desc_other_time": "You can create a price list or modify one at a later time.", - "desc_skip": "To skip this step, click the {{next}} button.", + "desc_skip": "To skip this step, click the <0>next button.", "next": "Next", "title": "A price list has not been created." }, diff --git a/src/pages/costModels/createCostModelWizard/priceListTable.tsx b/src/pages/costModels/createCostModelWizard/priceListTable.tsx index 74039a692..e77db792f 100644 --- a/src/pages/costModels/createCostModelWizard/priceListTable.tsx +++ b/src/pages/costModels/createCostModelWizard/priceListTable.tsx @@ -45,7 +45,7 @@ const NoTiersEmptyState = ({ t }) => ( - {t('cost_models_wizard.empty_state.add_rate')} + {t('cost_models_wizard.price_list.create_rate')}
From f88428362d316e748cefa48f52f5613623337873 Mon Sep 17 00:00:00 2001 From: Doug Donahue Date: Mon, 17 May 2021 15:44:34 -0400 Subject: [PATCH 029/141] fixed i18n key 'sub_title_details' --- src/locales/en.json | 2 +- src/pages/costModels/createCostModelWizard/review.tsx | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/locales/en.json b/src/locales/en.json index 3657e43b3..84429b5a3 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -281,7 +281,7 @@ "create_button": "Create", "markup": "Markup/discount", "sources": "Assigned sources", - "sub_title_details": "Review and confirm your cost model configuration and assignments. Click {{create}} to create the cost model, or {{back}} to revise.", + "sub_title_details": "Review and confirm your cost model configuration and assignments. Click <0>Create to create the cost model, or <1>Back to revise.", "sub_title_success": "Costs for resources connected to the assigned sources will now be calculated using the newly created {{ cost_model }} cost model.", "title_details": "Review details", "title_success": "Creation successful" diff --git a/src/pages/costModels/createCostModelWizard/review.tsx b/src/pages/costModels/createCostModelWizard/review.tsx index 76e7afc0e..5f1aebe4c 100644 --- a/src/pages/costModels/createCostModelWizard/review.tsx +++ b/src/pages/costModels/createCostModelWizard/review.tsx @@ -65,8 +65,8 @@ const ReviewDetailsBase: React.SFC = ({ t }) => ( - {t('cost_models_wizard.review.create_button')} - {t('cost_models_wizard.review.back_button')} + {t('cost_models_wizard.review.create_button')} + {t('cost_models_wizard.review.back_button')} From 13ddb05ee8099e9beaad7fbb4fb4bbd3d65c3589 Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Thu, 13 May 2021 11:43:11 -0400 Subject: [PATCH 030/141] Update dependencies for Dependabot alerts https://issues.redhat.com/browse/COST-1403 --- koku-ui-manifest | 16 +++++----- package.json | 6 ++-- yarn.lock | 82 +++++++++++++++++++++++++++++++++--------------- 3 files changed, 69 insertions(+), 35 deletions(-) diff --git a/koku-ui-manifest b/koku-ui-manifest index d1d0bf932..76b0b8189 100644 --- a/koku-ui-manifest +++ b/koku-ui-manifest @@ -55,7 +55,6 @@ mgmt_services/cost-mgmt:koku-ui/@babel/runtime:7.13.10.yarnlock mgmt_services/cost-mgmt:koku-ui/@babel/runtime:7.13.10.yarnlock mgmt_services/cost-mgmt:koku-ui/@babel/runtime:7.13.10.yarnlock mgmt_services/cost-mgmt:koku-ui/@babel/runtime:7.13.10.yarnlock -mgmt_services/cost-mgmt:koku-ui/@babel/runtime:7.13.10.yarnlock mgmt_services/cost-mgmt:koku-ui/@babel/template:7.12.13.yarnlock mgmt_services/cost-mgmt:koku-ui/@babel/template:7.12.13.yarnlock mgmt_services/cost-mgmt:koku-ui/@babel/traverse:7.13.0.yarnlock @@ -397,7 +396,7 @@ mgmt_services/cost-mgmt:koku-ui/cross-spawn:7.0.3.yarnlock mgmt_services/cost-mgmt:koku-ui/cross-spawn:7.0.3.yarnlock mgmt_services/cost-mgmt:koku-ui/cross-spawn:7.0.3.yarnlock mgmt_services/cost-mgmt:koku-ui/css-in-js-utils:2.0.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/css-loader:5.0.2.yarnlock +mgmt_services/cost-mgmt:koku-ui/css-loader:5.2.4.yarnlock mgmt_services/cost-mgmt:koku-ui/css-select:2.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/css-select:3.1.2.yarnlock mgmt_services/cost-mgmt:koku-ui/css-what:3.4.2.yarnlock @@ -535,7 +534,7 @@ mgmt_services/cost-mgmt:koku-ui/eslint-plugin-import:2.22.1.yarnlock mgmt_services/cost-mgmt:koku-ui/eslint-plugin-jest:21.27.2.yarnlock mgmt_services/cost-mgmt:koku-ui/eslint-plugin-jsdoc:32.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/eslint-plugin-jsx-a11y:6.4.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/eslint-plugin-markdown:2.0.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/eslint-plugin-markdown:2.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/eslint-plugin-node:6.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/eslint-plugin-patternfly-react:4.1.5.yarnlock mgmt_services/cost-mgmt:koku-ui/eslint-plugin-prettier:2.7.0.yarnlock @@ -694,7 +693,7 @@ mgmt_services/cost-mgmt:koku-ui/html-loader:2.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/html-minifier-terser:5.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/html-minifier-terser:5.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/html-parse-stringify2:2.0.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/html-parse-stringify2:2.0.1.yarnlock +mgmt_services/cost-mgmt:koku-ui/html-parse-stringify:3.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/html-replace-webpack-plugin:2.6.0.yarnlock mgmt_services/cost-mgmt:koku-ui/html-webpack-plugin:5.3.1.yarnlock mgmt_services/cost-mgmt:koku-ui/htmlparser2:3.10.1.yarnlock @@ -980,6 +979,7 @@ mgmt_services/cost-mgmt:koku-ui/multicast-dns-service-types:1.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/multicast-dns:6.2.3.yarnlock mgmt_services/cost-mgmt:koku-ui/nanoid:2.1.11.yarnlock mgmt_services/cost-mgmt:koku-ui/nanoid:3.1.20.yarnlock +mgmt_services/cost-mgmt:koku-ui/nanoid:3.1.23.yarnlock mgmt_services/cost-mgmt:koku-ui/nanomatch:1.2.13.yarnlock mgmt_services/cost-mgmt:koku-ui/natural-compare:1.4.0.yarnlock mgmt_services/cost-mgmt:koku-ui/nearley:2.20.1.yarnlock @@ -1104,7 +1104,7 @@ mgmt_services/cost-mgmt:koku-ui/postcss-selector-parser:6.0.4.yarnlock mgmt_services/cost-mgmt:koku-ui/postcss-selector-parser:6.0.4.yarnlock mgmt_services/cost-mgmt:koku-ui/postcss-value-parser:4.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/postcss:8.2.7.yarnlock -mgmt_services/cost-mgmt:koku-ui/postcss:8.2.7.yarnlock +mgmt_services/cost-mgmt:koku-ui/postcss:8.2.15.yarnlock mgmt_services/cost-mgmt:koku-ui/prelude-ls:1.2.1.yarnlock mgmt_services/cost-mgmt:koku-ui/prelude-ls:1.1.2.yarnlock mgmt_services/cost-mgmt:koku-ui/prettier-linter-helpers:1.0.0.yarnlock @@ -1146,7 +1146,7 @@ mgmt_services/cost-mgmt:koku-ui/react-dom:17.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/react-dropzone:9.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/react-fast-compare:2.0.4.yarnlock mgmt_services/cost-mgmt:koku-ui/react-i18next:11.8.9.yarnlock -mgmt_services/cost-mgmt:koku-ui/react-i18next:11.8.7.yarnlock +mgmt_services/cost-mgmt:koku-ui/react-i18next:11.8.15.yarnlock mgmt_services/cost-mgmt:koku-ui/react-is:16.13.1.yarnlock mgmt_services/cost-mgmt:koku-ui/react-is:16.13.1.yarnlock mgmt_services/cost-mgmt:koku-ui/react-is:16.13.1.yarnlock @@ -1191,7 +1191,7 @@ mgmt_services/cost-mgmt:koku-ui/regexpp:3.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/regexpp:3.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/regextras:0.7.1.yarnlock mgmt_services/cost-mgmt:koku-ui/relateurl:0.2.7.yarnlock -mgmt_services/cost-mgmt:koku-ui/remark-parse:5.0.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/remark-parse:7.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/remove-trailing-separator:1.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/renderkid:2.0.5.yarnlock mgmt_services/cost-mgmt:koku-ui/repeat-element:1.1.3.yarnlock @@ -1259,6 +1259,7 @@ mgmt_services/cost-mgmt:koku-ui/semver:7.3.4.yarnlock mgmt_services/cost-mgmt:koku-ui/semver:7.3.4.yarnlock mgmt_services/cost-mgmt:koku-ui/semver:6.3.0.yarnlock mgmt_services/cost-mgmt:koku-ui/semver:6.3.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/semver:7.3.5.yarnlock mgmt_services/cost-mgmt:koku-ui/send:0.17.1.yarnlock mgmt_services/cost-mgmt:koku-ui/serialize-javascript:5.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/serve-index:1.9.1.yarnlock @@ -1470,6 +1471,7 @@ mgmt_services/cost-mgmt:koku-ui/victory-voronoi-container:35.4.11.yarnlock mgmt_services/cost-mgmt:koku-ui/victory-voronoi-container:35.4.11.yarnlock mgmt_services/cost-mgmt:koku-ui/victory-zoom-container:35.4.11.yarnlock mgmt_services/cost-mgmt:koku-ui/victory-zoom-container:35.4.11.yarnlock +mgmt_services/cost-mgmt:koku-ui/void-elements:3.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/void-elements:2.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/w3c-hr-time:1.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/w3c-xmlserializer:2.0.0.yarnlock diff --git a/package.json b/package.json index 288fff8b9..9ef64e0a7 100644 --- a/package.json +++ b/package.json @@ -66,7 +66,7 @@ "react": "17.0.1", "react-bootstrap": "1.5.0", "react-dom": "17.0.1", - "react-i18next": "11.8.7", + "react-i18next": "11.8.15", "react-redux": "7.2.2", "react-router-dom": "5.2.0", "redux": "4.0.5", @@ -87,13 +87,13 @@ "@yarnpkg/lockfile": "1.1.0", "aphrodite": "2.4.0", "copy-webpack-plugin": "7.0.0", - "css-loader": "5.0.2", + "css-loader": "5.2.4", "enzyme": "3.11.0", "enzyme-adapter-react-16": "1.15.6", "enzyme-to-json": "3.6.1", "eslint": "^7.20.0", "eslint-plugin-jsdoc": "^32.0.1", - "eslint-plugin-markdown": "^2.0.0", + "eslint-plugin-markdown": "^2.1.0", "eslint-plugin-patternfly-react": "^4.1.5", "eslint-plugin-prettier": "^3.3.1", "eslint-plugin-react": "^7.22.0", diff --git a/yarn.lock b/yarn.lock index 081a24f0b..13e12e43c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -268,7 +268,7 @@ core-js-pure "^3.0.0" regenerator-runtime "^0.13.4" -"@babel/runtime@^7.1.2", "@babel/runtime@^7.10.2", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.0", "@babel/runtime@^7.12.1", "@babel/runtime@^7.12.5", "@babel/runtime@^7.13.6", "@babel/runtime@^7.3.1", "@babel/runtime@^7.4.2", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.3", "@babel/runtime@^7.8.7": +"@babel/runtime@^7.1.2", "@babel/runtime@^7.10.2", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.0", "@babel/runtime@^7.12.1", "@babel/runtime@^7.12.5", "@babel/runtime@^7.13.6", "@babel/runtime@^7.4.2", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.3", "@babel/runtime@^7.8.7": version "7.13.10" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.13.10.tgz#47d42a57b6095f4468da440388fdbad8bebf0d7d" integrity sha512-4QPkjJq6Ns3V/RgpEahRk+AGfL0eO6RHHtTWoNNr5mO49G6B5+X6d6THgWEAvTrznU5xYpbAlVKRYcsCgh/Akw== @@ -2408,23 +2408,22 @@ css-in-js-utils@^2.0.0: hyphenate-style-name "^1.0.2" isobject "^3.0.1" -css-loader@5.0.2: - version "5.0.2" - resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-5.0.2.tgz#24f758dae349bad0a440c50d7e2067742e0899cb" - integrity sha512-gbkBigdcHbmNvZ1Cg6aV6qh6k9N6XOr8YWzISLQGrwk2mgOH8LLrizhkxbDhQtaLtktyKHD4970S0xwz5btfTA== +css-loader@5.2.4: + version "5.2.4" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-5.2.4.tgz#e985dcbce339812cb6104ef3670f08f9893a1536" + integrity sha512-OFYGyINCKkdQsTrSYxzGSFnGS4gNjcXkKkQgWxK138jgnPt+lepxdjSZNc8sHAl5vP3DhsJUxufWIjOwI8PMMw== dependencies: camelcase "^6.2.0" - cssesc "^3.0.0" icss-utils "^5.1.0" loader-utils "^2.0.0" - postcss "^8.2.4" + postcss "^8.2.10" postcss-modules-extract-imports "^3.0.0" postcss-modules-local-by-default "^4.0.0" postcss-modules-scope "^3.0.0" postcss-modules-values "^4.0.0" postcss-value-parser "^4.1.0" schema-utils "^3.0.0" - semver "^7.3.4" + semver "^7.3.5" css-select@^2.0.2: version "2.1.0" @@ -3253,12 +3252,12 @@ eslint-plugin-jsx-a11y@^6.0.3: jsx-ast-utils "^3.1.0" language-tags "^1.0.5" -eslint-plugin-markdown@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-markdown/-/eslint-plugin-markdown-2.0.0.tgz#cd650beda2b599cd9e4535ea369266b5d0e49d23" - integrity sha512-zt10JoexHeJFMTE5egDcetAJ34bn5k/92s0wAuRZfhDAyI0ryEj+O91JL2CbBExajie6BE5L63y47dN1Sbp6mQ== +eslint-plugin-markdown@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-markdown/-/eslint-plugin-markdown-2.1.0.tgz#1fee34a058e299bd51f3393553bf7f92f3fa167c" + integrity sha512-Rqw7tosArdlzXcR/xJGW3Er9gRiF7iE+QEMEm7hZZ/feZjUf8xCaGQJgB1nzs9yVhJnUeiAcj5TXLLfKMbp3DQ== dependencies: - remark-parse "^5.0.0" + remark-parse "^7.0.0" unified "^6.1.2" eslint-plugin-node@^6.0.1: @@ -4178,13 +4177,20 @@ html-minifier-terser@^5.0.1, html-minifier-terser@^5.1.1: relateurl "^0.2.7" terser "^4.6.3" -html-parse-stringify2@2.0.1, html-parse-stringify2@^2.0.1: +html-parse-stringify2@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/html-parse-stringify2/-/html-parse-stringify2-2.0.1.tgz#dc5670b7292ca158b7bc916c9a6735ac8872834a" integrity sha1-3FZwtyksoVi3vJFsmmc1rIhyg0o= dependencies: void-elements "^2.0.1" +html-parse-stringify@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/html-parse-stringify/-/html-parse-stringify-3.0.1.tgz#dfc1017347ce9f77c8141a507f233040c59c55d2" + integrity sha512-KknJ50kTInJ7qIScF3jeaFRpMpE8/lfiTdzf/twXyPBLAGrLRTmkz3AdTnKeh40X8k9L2fdYwEp/42WGXIRGcg== + dependencies: + void-elements "3.1.0" + html-replace-webpack-plugin@2.6.0: version "2.6.0" resolved "https://registry.yarnpkg.com/html-replace-webpack-plugin/-/html-replace-webpack-plugin-2.6.0.tgz#506d81e06cb5d6519281ce7c7dde7aeee04620e7" @@ -5838,6 +5844,11 @@ nanoid@^3.1.20: resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.20.tgz#badc263c6b1dcf14b71efaa85f6ab4c1d6cfc788" integrity sha512-a1cQNyczgKbLX9jwbS/+d7W8fX/RfgYR7lVWwWOGIPNgK2m0MWvrGF6/m4kk6U3QcFMnZf3RIhL0v2Jgh/0Uxw== +nanoid@^3.1.23: + version "3.1.23" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.23.tgz#f744086ce7c2bc47ee0a8472574d5c78e4183a81" + integrity sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw== + nanomatch@^1.2.9: version "1.2.13" resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" @@ -6509,7 +6520,7 @@ postcss-value-parser@^4.1.0: resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz#443f6a20ced6481a2bda4fa8532a6e55d789a2cb" integrity sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ== -postcss@^8.0.2, postcss@^8.2.4: +postcss@^8.0.2: version "8.2.7" resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.2.7.tgz#48ed8d88b4de10afa0dfd1c3f840aa57b55c4d47" integrity sha512-DsVLH3xJzut+VT+rYr0mtvOtpTjSyqDwPf5EZWXcb0uAKfitGpTY9Ec+afi2+TgdN8rWS9Cs88UDYehKo/RvOw== @@ -6518,6 +6529,15 @@ postcss@^8.0.2, postcss@^8.2.4: nanoid "^3.1.20" source-map "^0.6.1" +postcss@^8.2.10: + version "8.2.15" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.2.15.tgz#9e66ccf07292817d226fc315cbbf9bc148fbca65" + integrity sha512-2zO3b26eJD/8rb106Qu2o7Qgg52ND5HPjcyQiK2B98O388h43A448LCslC0dI2P97wCAQRJsFvwTRcXxTKds+Q== + dependencies: + colorette "^1.2.2" + nanoid "^3.1.23" + source-map "^0.6.1" + prelude-ls@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" @@ -6766,13 +6786,13 @@ react-i18next@*: "@babel/runtime" "^7.13.6" html-parse-stringify2 "^2.0.1" -react-i18next@11.8.7: - version "11.8.7" - resolved "https://registry.yarnpkg.com/react-i18next/-/react-i18next-11.8.7.tgz#845f31e01e2aa92a3954c374ebcc4bd54df1cace" - integrity sha512-IDK/a73cJN4J2C6yTqmDS/r8iikwKaN283hltqps8UiRaFVTvlSxE85HkamEFD6lULG4hFZExecXJ/hA27DW3Q== +react-i18next@11.8.15: + version "11.8.15" + resolved "https://registry.yarnpkg.com/react-i18next/-/react-i18next-11.8.15.tgz#89450d585298f18d4a8eb1628b0868863f3a4767" + integrity sha512-ZbKcbYYKukgDL0MiUWKJTEsEftjSTNVZv67/V+SjPqTRwuF/aL4NbUtuEcb4WjHk0HyZ1M+2wGd07Fp0RUNHKA== dependencies: - "@babel/runtime" "^7.3.1" - html-parse-stringify2 "2.0.1" + "@babel/runtime" "^7.13.6" + html-parse-stringify "^3.0.1" react-is@^16.12.0, react-is@^16.13.1, react-is@^16.3.2, react-is@^16.6.0, react-is@^16.7.0, react-is@^16.8.1, react-is@^16.8.6: version "16.13.1" @@ -7032,10 +7052,10 @@ relateurl@^0.2.7: resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" integrity sha1-VNvzd+UUQKypCkzSdGANP/LYiKk= -remark-parse@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-5.0.0.tgz#4c077f9e499044d1d5c13f80d7a98cf7b9285d95" - integrity sha512-b3iXszZLH1TLoyUzrATcTQUZrwNl1rE70rVdSruJFlDaJ9z5aMkhrG43Pp68OgfHndL/ADz6V69Zow8cTQu+JA== +remark-parse@^7.0.0: + version "7.0.2" + resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-7.0.2.tgz#41e7170d9c1d96c3d32cf1109600a9ed50dba7cf" + integrity sha512-9+my0lQS80IQkYXsMA8Sg6m9QfXYJBnXjWYN5U+kFc5/n69t+XZVXU/ZBYr3cYH8FheEGf1v87rkFDhJ8bVgMA== dependencies: collapse-white-space "^1.0.2" is-alphabetical "^1.0.0" @@ -7354,6 +7374,13 @@ semver@^6.0.0, semver@^6.3.0: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== +semver@^7.3.5: + version "7.3.5" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" + integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== + dependencies: + lru-cache "^6.0.0" + send@0.17.1: version "0.17.1" resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" @@ -8615,6 +8642,11 @@ victory-zoom-container@^35.4.11, victory-zoom-container@^35.4.4: prop-types "^15.5.8" victory-core "^35.4.11" +void-elements@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-3.1.0.tgz#614f7fbf8d801f0bb5f0661f5b2f5785750e4f09" + integrity sha1-YU9/v42AHwu18GYfWy9XhXUOTwk= + void-elements@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-2.0.1.tgz#c066afb582bb1cb4128d60ea92392e94d5e9dbec" From 7e1f9ebc1393af2d5a9a740d1c90e7659f365fa2 Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Thu, 13 May 2021 20:57:28 -0400 Subject: [PATCH 031/141] PatternFly milestone update https://issues.redhat.com/browse/COST-1376 --- koku-ui-manifest | 28 ++++++------ package.json | 20 ++++----- yarn.lock | 113 ++++++++++++++++++++++++++--------------------- 3 files changed, 86 insertions(+), 75 deletions(-) diff --git a/koku-ui-manifest b/koku-ui-manifest index 76b0b8189..a2c01d971 100644 --- a/koku-ui-manifest +++ b/koku-ui-manifest @@ -88,24 +88,24 @@ mgmt_services/cost-mgmt:koku-ui/@nodelib/fs.scandir:2.1.4.yarnlock mgmt_services/cost-mgmt:koku-ui/@nodelib/fs.stat:2.0.4.yarnlock mgmt_services/cost-mgmt:koku-ui/@nodelib/fs.stat:2.0.4.yarnlock mgmt_services/cost-mgmt:koku-ui/@nodelib/fs.walk:1.2.6.yarnlock -mgmt_services/cost-mgmt:koku-ui/@patternfly/patternfly:4.102.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/@patternfly/react-charts:6.14.16.yarnlock -mgmt_services/cost-mgmt:koku-ui/@patternfly/react-core:4.115.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/@patternfly/react-core:4.115.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/@patternfly/react-icons:4.10.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/@patternfly/react-icons:4.10.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/@patternfly/react-styles:4.10.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/@patternfly/react-styles:4.10.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/@patternfly/react-table:4.26.6.yarnlock -mgmt_services/cost-mgmt:koku-ui/@patternfly/react-tokens:4.11.2.yarnlock -mgmt_services/cost-mgmt:koku-ui/@patternfly/react-tokens:4.11.2.yarnlock +mgmt_services/cost-mgmt:koku-ui/@patternfly/patternfly:4.103.6.yarnlock +mgmt_services/cost-mgmt:koku-ui/@patternfly/react-charts:6.14.22.yarnlock +mgmt_services/cost-mgmt:koku-ui/@patternfly/react-core:4.121.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/@patternfly/react-core:4.121.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/@patternfly/react-icons:4.10.7.yarnlock +mgmt_services/cost-mgmt:koku-ui/@patternfly/react-icons:4.10.7.yarnlock +mgmt_services/cost-mgmt:koku-ui/@patternfly/react-styles:4.10.7.yarnlock +mgmt_services/cost-mgmt:koku-ui/@patternfly/react-styles:4.10.7.yarnlock +mgmt_services/cost-mgmt:koku-ui/@patternfly/react-table:4.27.6.yarnlock +mgmt_services/cost-mgmt:koku-ui/@patternfly/react-tokens:4.11.8.yarnlock +mgmt_services/cost-mgmt:koku-ui/@patternfly/react-tokens:4.11.8.yarnlock mgmt_services/cost-mgmt:koku-ui/@popperjs/core:2.9.1.yarnlock mgmt_services/cost-mgmt:koku-ui/@redhat-cloud-services/frontend-components-notifications:3.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/@redhat-cloud-services/frontend-components-utilities:3.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/@redhat-cloud-services/frontend-components-utilities:3.1.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/@redhat-cloud-services/frontend-components-utilities:3.1.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/@redhat-cloud-services/frontend-components:3.1.7.yarnlock -mgmt_services/cost-mgmt:koku-ui/@redhat-cloud-services/rbac-client:1.0.96.yarnlock +mgmt_services/cost-mgmt:koku-ui/@redhat-cloud-services/frontend-components-utilities:3.1.2.yarnlock +mgmt_services/cost-mgmt:koku-ui/@redhat-cloud-services/frontend-components:3.1.11.yarnlock +mgmt_services/cost-mgmt:koku-ui/@redhat-cloud-services/rbac-client:1.0.97.yarnlock mgmt_services/cost-mgmt:koku-ui/@restart/context:2.1.4.yarnlock mgmt_services/cost-mgmt:koku-ui/@restart/hooks:0.3.26.yarnlock mgmt_services/cost-mgmt:koku-ui/@restart/hooks:0.3.26.yarnlock diff --git a/package.json b/package.json index 9ef64e0a7..23b25807c 100644 --- a/package.json +++ b/package.json @@ -32,17 +32,17 @@ }, "dependencies": { "@fortawesome/free-solid-svg-icons": "5.15.2", - "@patternfly/patternfly": "4.102.1", - "@patternfly/react-charts": "^6.14.16", - "@patternfly/react-core": "4.115.1", - "@patternfly/react-icons": "4.10.1", - "@patternfly/react-styles": "4.10.1", - "@patternfly/react-table": "4.26.6", - "@patternfly/react-tokens": "4.11.2", - "@redhat-cloud-services/frontend-components": "^3.1.7", + "@patternfly/patternfly": "4.103.6", + "@patternfly/react-charts": "6.14.22", + "@patternfly/react-core": "4.121.0", + "@patternfly/react-icons": "4.10.7", + "@patternfly/react-styles": "4.10.7", + "@patternfly/react-table": "4.27.6", + "@patternfly/react-tokens": "4.11.8", + "@redhat-cloud-services/frontend-components": "^3.1.11", "@redhat-cloud-services/frontend-components-notifications": "^3.1.0", - "@redhat-cloud-services/frontend-components-utilities": "^3.1.1", - "@redhat-cloud-services/rbac-client": "^1.0.96", + "@redhat-cloud-services/frontend-components-utilities": "^3.1.2", + "@redhat-cloud-services/rbac-client": "^1.0.97", "@types/date-fns": "2.6.0", "@types/i18next": "13.0.0", "@types/i18next-xhr-backend": "1.4.2", diff --git a/yarn.lock b/yarn.lock index 13e12e43c..2b71f8b12 100644 --- a/yarn.lock +++ b/yarn.lock @@ -561,18 +561,18 @@ "@nodelib/fs.scandir" "2.1.4" fastq "^1.6.0" -"@patternfly/patternfly@4.102.1": - version "4.102.1" - resolved "https://registry.yarnpkg.com/@patternfly/patternfly/-/patternfly-4.102.1.tgz#a453c4e866941db1348f0580fdc08f1441b8fdf3" - integrity sha512-YQSJH4EirnFdwJ3eN7BUgGj/Q3bg/Lmc+8vU/bhIDnRuk5KqGZ7xbVCPrWwrV0oYrfIUAWgbrbJjpP03VjrJLw== - -"@patternfly/react-charts@^6.14.16": - version "6.14.16" - resolved "https://registry.yarnpkg.com/@patternfly/react-charts/-/react-charts-6.14.16.tgz#c5c3f7983cf16e2868907d61f61af7b275ca962c" - integrity sha512-7Na5f0bU+hX09+QAw24lVXvAjxLikyJU423fYg+P1U60gA5uiWyN2eB4JDW1gYn3XeoLtEicheL9o7hL4P6WZQ== - dependencies: - "@patternfly/react-styles" "^4.10.1" - "@patternfly/react-tokens" "^4.11.2" +"@patternfly/patternfly@4.103.6": + version "4.103.6" + resolved "https://registry.yarnpkg.com/@patternfly/patternfly/-/patternfly-4.103.6.tgz#a01b1dced931eb4971a6c7366901fdde81a52284" + integrity sha512-veWpHv/Dlk0P7tu96QUjLzD2Aq4IysUSGOjGPXlbb/KOUfnIrErLRmQnljY01ykXLJ7kxQSnC3yaJqCU+4fDPQ== + +"@patternfly/react-charts@6.14.22": + version "6.14.22" + resolved "https://registry.yarnpkg.com/@patternfly/react-charts/-/react-charts-6.14.22.tgz#a78ab36ab094c8ed87855afc3c73593b2ef01256" + integrity sha512-9rkokh8JPRryqAPDjP3sB+Kx85v9i2jlMVA0JfAa2rQkhS0gOKgOUkU/I9KegXaDEHvtTpCpI6S6a9uQ9/ewYQ== + dependencies: + "@patternfly/react-styles" "^4.10.7" + "@patternfly/react-tokens" "^4.11.8" hoist-non-react-statics "^3.3.0" lodash "^4.17.19" tslib "1.13.0" @@ -592,45 +592,45 @@ victory-voronoi-container "^35.4.4" victory-zoom-container "^35.4.4" -"@patternfly/react-core@4.115.1", "@patternfly/react-core@^4.115.1": - version "4.115.1" - resolved "https://registry.yarnpkg.com/@patternfly/react-core/-/react-core-4.115.1.tgz#739f4430fa7f1a563cf28642c3d08db3ebe1bf97" - integrity sha512-CIUd6y0Zt90a1NXam64uxMnXSG6MV8ECsSW8nN2iyveK73w2P9Zuuxf9UkCEtfi/DDmbCaAPUNmrOYZ6Ez+NkA== +"@patternfly/react-core@4.121.0", "@patternfly/react-core@^4.121.0": + version "4.121.0" + resolved "https://registry.yarnpkg.com/@patternfly/react-core/-/react-core-4.121.0.tgz#8f0a18ee2d4f782f0b0f35e1ef848d98598e933c" + integrity sha512-KwDBv24DQywH3GjFlROp2v8bFuAIpYAjqKPASCY3TuLp+Ig97Pdp3fhCYUIDk40MF/uCdRrDEmjdLfd2tp3oKw== dependencies: - "@patternfly/react-icons" "^4.10.1" - "@patternfly/react-styles" "^4.10.1" - "@patternfly/react-tokens" "^4.11.2" + "@patternfly/react-icons" "^4.10.7" + "@patternfly/react-styles" "^4.10.7" + "@patternfly/react-tokens" "^4.11.8" focus-trap "6.2.2" react-dropzone "9.0.0" tippy.js "5.1.2" tslib "1.13.0" -"@patternfly/react-icons@4.10.1", "@patternfly/react-icons@^4.10.1": - version "4.10.1" - resolved "https://registry.yarnpkg.com/@patternfly/react-icons/-/react-icons-4.10.1.tgz#687a36a22c357e79662d8e20f93267a81a553f9b" - integrity sha512-PDljCqWk+Jld8VJI0zMbigmKh0NhnSl/paXFU8cawZYt4dczbLjvj5kTMqqSOt0/DmvstcMXIvhXxL9SoYAuIA== - -"@patternfly/react-styles@4.10.1", "@patternfly/react-styles@^4.10.1": - version "4.10.1" - resolved "https://registry.yarnpkg.com/@patternfly/react-styles/-/react-styles-4.10.1.tgz#551353d67c01234f08e5e1e2a2947c8865751a7e" - integrity sha512-nrxKeu4ftZArswT0azcZB2r6eV4d5bs4L9HrwHnElMte+6fsUmXbuaBxCVfHh/aHxZSIIxqDElEHNaOqcs7SWg== - -"@patternfly/react-table@4.26.6": - version "4.26.6" - resolved "https://registry.yarnpkg.com/@patternfly/react-table/-/react-table-4.26.6.tgz#39e7293b7ff424d98ff29beabcc1a31daff1b7e6" - integrity sha512-mpm60Bc/oMfHoz2dEjGmyXADlY3OsuhnLybcB3hoYT99kTPudg+3WXqNACx/CCy9RW3m6I2Gpqy5DxymUXy3DQ== - dependencies: - "@patternfly/react-core" "^4.115.1" - "@patternfly/react-icons" "^4.10.1" - "@patternfly/react-styles" "^4.10.1" - "@patternfly/react-tokens" "^4.11.2" +"@patternfly/react-icons@4.10.7", "@patternfly/react-icons@^4.10.7": + version "4.10.7" + resolved "https://registry.yarnpkg.com/@patternfly/react-icons/-/react-icons-4.10.7.tgz#fe2eabf88512afe7dab0c0e7c71142ec6e594664" + integrity sha512-CiHYDOS8jrxNiy/KIxv9vPqg3cie4SzsbQKh+eW8lj41x68IrgILiw3VvjcJeVXXJDRW36T7u3IPKjMI6zuoyA== + +"@patternfly/react-styles@4.10.7", "@patternfly/react-styles@^4.10.7": + version "4.10.7" + resolved "https://registry.yarnpkg.com/@patternfly/react-styles/-/react-styles-4.10.7.tgz#3b0ce38f3e12a69cdcbaf1ada163a5b114b919bd" + integrity sha512-oA9R1dXAJaKhj0/1z/uf2Z1wzsQ4jGQw2F8alPBagbDLyZD+pvUmElBr7o2Ucz/fm+/pLcphekCkGEVtyV3jOA== + +"@patternfly/react-table@4.27.6": + version "4.27.6" + resolved "https://registry.yarnpkg.com/@patternfly/react-table/-/react-table-4.27.6.tgz#064bd897d120a887095db7262714ff1f23224a5b" + integrity sha512-qlwvTM/6wshilPysdN2TPDNvsi9nE6nXUQWrJzZXOgc6hb/l4evn2UCfkMyJvSna+CMR1YlFjZrMAHOCxZQcvQ== + dependencies: + "@patternfly/react-core" "^4.121.0" + "@patternfly/react-icons" "^4.10.7" + "@patternfly/react-styles" "^4.10.7" + "@patternfly/react-tokens" "^4.11.8" lodash "^4.17.19" tslib "1.13.0" -"@patternfly/react-tokens@4.11.2", "@patternfly/react-tokens@^4.11.2": - version "4.11.2" - resolved "https://registry.yarnpkg.com/@patternfly/react-tokens/-/react-tokens-4.11.2.tgz#9d200883f177d1dfd0aecd832caa877bc337feb6" - integrity sha512-uLEj6mUknX2vE1z79c28cY+/GBVh0SjS3T6s+bG9ZVP7rGopSgtEQDfejSIEBAwD/t0u1gHW/ncWZ1kyIeVMGg== +"@patternfly/react-tokens@4.11.8", "@patternfly/react-tokens@^4.11.8": + version "4.11.8" + resolved "https://registry.yarnpkg.com/@patternfly/react-tokens/-/react-tokens-4.11.8.tgz#ea0c9ca036f6b0506cda43e899c3248971920337" + integrity sha512-k3UwsnWRoHHYbFbiqmUHtkrAPtw6D8BZLB1tPGzdXBlqQXRX1t8xukgDcTSUWo6wOPVdk8WrOgmWMy0u0Tk+sw== "@popperjs/core@^2.5.3": version "2.9.1" @@ -644,7 +644,7 @@ dependencies: "@redhat-cloud-services/frontend-components-utilities" "*" -"@redhat-cloud-services/frontend-components-utilities@*", "@redhat-cloud-services/frontend-components-utilities@>=3.0.0", "@redhat-cloud-services/frontend-components-utilities@^3.1.1": +"@redhat-cloud-services/frontend-components-utilities@*", "@redhat-cloud-services/frontend-components-utilities@>=3.0.0": version "3.1.1" resolved "https://registry.yarnpkg.com/@redhat-cloud-services/frontend-components-utilities/-/frontend-components-utilities-3.1.1.tgz#6e707bdf0cbe9e9065fb8c7d64424d23aced2bc6" integrity sha512-lqcdpvjuFJQZ1f/iNkoecjtLShqM8WPJaeTa4Y1whUu8kEkDDQ9BUa7RlTQ5x1XOt6OgTTFGg8R/RScPUbxa5A== @@ -655,20 +655,31 @@ commander ">=2.20.0" react-content-loader ">=3.4.1" -"@redhat-cloud-services/frontend-components@^3.1.7": - version "3.1.7" - resolved "https://registry.yarnpkg.com/@redhat-cloud-services/frontend-components/-/frontend-components-3.1.7.tgz#751a69b086478e623b63312662d57afd5887e64b" - integrity sha512-nvu3oXpfMQP7npe0NSLIvsyuoHL6V1uxomD+0AaU/KQxzO8z4cmXvqidHcRDP9Q2fBLvwiEipRX6VTYqIw224w== +"@redhat-cloud-services/frontend-components-utilities@^3.1.2": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@redhat-cloud-services/frontend-components-utilities/-/frontend-components-utilities-3.1.2.tgz#965c03508336e6d68dc9cad39b38ae05acd0f4e8" + integrity sha512-CDnhCQTotqCWUzZUgPXEori95FDhrXGBUxodwQpR3wKTb1lBpwDHg4b3TdpzPz+KyryClT6OfNkVabmjQ2S6CA== + dependencies: + "@sentry/browser" "^5.4.0" + awesome-debounce-promise "^2.1.0" + axios "^0.21.1" + commander ">=2.20.0" + react-content-loader ">=3.4.1" + +"@redhat-cloud-services/frontend-components@^3.1.11": + version "3.1.11" + resolved "https://registry.yarnpkg.com/@redhat-cloud-services/frontend-components/-/frontend-components-3.1.11.tgz#ad655dc0a69c6b851087aac1d38beec3e79dfebc" + integrity sha512-6dvjKlb2l7cKn9Ex+z+aJkn4RHn2NzQIs8ylYQgN9fkKtZhm3dTQiINKxcmmlBTsody6pbPcp2I854jhyqfMug== dependencies: "@redhat-cloud-services/frontend-components-utilities" ">=3.0.0" "@scalprum/core" "^0.0.11" "@scalprum/react-core" "^0.0.16" sanitize-html "^2.3.2" -"@redhat-cloud-services/rbac-client@^1.0.96": - version "1.0.96" - resolved "https://registry.yarnpkg.com/@redhat-cloud-services/rbac-client/-/rbac-client-1.0.96.tgz#0e07d68ca0da246f61e9ee337354ffe492f10112" - integrity sha512-Zx/RYy3v0CaFM+NtCzWqLRRjy0HoG7xs3f1F4TDvEOGaTVF+DIcs6MHr9D1HTPb4QM/hXXykNH6WiNpznOQ+Bg== +"@redhat-cloud-services/rbac-client@^1.0.97": + version "1.0.97" + resolved "https://registry.yarnpkg.com/@redhat-cloud-services/rbac-client/-/rbac-client-1.0.97.tgz#a6b75bdd3eab92b39887a7149b9fbf0ac1f887a8" + integrity sha512-m+6EehKY6qlnf7Je9M8mMqqVSXefs5PeXTf3H1xO03xEWAv6u6tgYjWw+f9/DiEYOcn5DUgXSH7T+QEJgVQ+Og== dependencies: axios "^0.21.1" From 8db3bfcf410b8927c69cb85d81d897186056119b Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Wed, 19 May 2021 14:44:25 -0400 Subject: [PATCH 032/141] Move unused chart utils to archive area https://issues.redhat.com/browse/COST-1422 --- {src => archive}/components/charts/common/chart.styles.ts | 0 {src => archive}/components/charts/common/chartLegend.tsx | 0 .../components/charts/common/chartLegendItem.styles.ts | 0 .../components/charts/common/chartLegendItem.test.tsx | 0 {src => archive}/components/charts/common/chartLegendItem.tsx | 0 {src => archive}/components/charts/common/chartTitle.tsx | 0 src/components/charts/common/index.ts | 3 --- 7 files changed, 3 deletions(-) rename {src => archive}/components/charts/common/chart.styles.ts (100%) rename {src => archive}/components/charts/common/chartLegend.tsx (100%) rename {src => archive}/components/charts/common/chartLegendItem.styles.ts (100%) rename {src => archive}/components/charts/common/chartLegendItem.test.tsx (100%) rename {src => archive}/components/charts/common/chartLegendItem.tsx (100%) rename {src => archive}/components/charts/common/chartTitle.tsx (100%) diff --git a/src/components/charts/common/chart.styles.ts b/archive/components/charts/common/chart.styles.ts similarity index 100% rename from src/components/charts/common/chart.styles.ts rename to archive/components/charts/common/chart.styles.ts diff --git a/src/components/charts/common/chartLegend.tsx b/archive/components/charts/common/chartLegend.tsx similarity index 100% rename from src/components/charts/common/chartLegend.tsx rename to archive/components/charts/common/chartLegend.tsx diff --git a/src/components/charts/common/chartLegendItem.styles.ts b/archive/components/charts/common/chartLegendItem.styles.ts similarity index 100% rename from src/components/charts/common/chartLegendItem.styles.ts rename to archive/components/charts/common/chartLegendItem.styles.ts diff --git a/src/components/charts/common/chartLegendItem.test.tsx b/archive/components/charts/common/chartLegendItem.test.tsx similarity index 100% rename from src/components/charts/common/chartLegendItem.test.tsx rename to archive/components/charts/common/chartLegendItem.test.tsx diff --git a/src/components/charts/common/chartLegendItem.tsx b/archive/components/charts/common/chartLegendItem.tsx similarity index 100% rename from src/components/charts/common/chartLegendItem.tsx rename to archive/components/charts/common/chartLegendItem.tsx diff --git a/src/components/charts/common/chartTitle.tsx b/archive/components/charts/common/chartTitle.tsx similarity index 100% rename from src/components/charts/common/chartTitle.tsx rename to archive/components/charts/common/chartTitle.tsx diff --git a/src/components/charts/common/index.ts b/src/components/charts/common/index.ts index 913a73073..fe96c08fe 100644 --- a/src/components/charts/common/index.ts +++ b/src/components/charts/common/index.ts @@ -1,4 +1 @@ -export { ChartLegend, ChartLegendProps } from './chartLegend'; -export { ChartLegendItem, ChartLegendItemProps } from './chartLegendItem'; -export { ChartTitle, ChartTitleProps } from './chartTitle'; export { ChartDatum } from './chartDatumUtils'; From f8ebe93b6bff665739ca7e89e38e98fcada4f695 Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Wed, 19 May 2021 15:00:36 -0400 Subject: [PATCH 033/141] Updated unit tests for unused chart utils --- .../common/__snapshots__/chartLegendItem.test.tsx.snap | 5 ----- 1 file changed, 5 deletions(-) delete mode 100644 src/components/charts/common/__snapshots__/chartLegendItem.test.tsx.snap diff --git a/src/components/charts/common/__snapshots__/chartLegendItem.test.tsx.snap b/src/components/charts/common/__snapshots__/chartLegendItem.test.tsx.snap deleted file mode 100644 index 25dae9cfb..000000000 --- a/src/components/charts/common/__snapshots__/chartLegendItem.test.tsx.snap +++ /dev/null @@ -1,5 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`range is formated with start and end date 1`] = `""`; - -exports[`range is formated with start and end date for an empty report 1`] = `""`; From 7b6a3156d2cc1f67e4ad478ac70f5a618601b88c Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Mon, 24 May 2021 12:05:48 -0400 Subject: [PATCH 034/141] Hide aggregate type from Cost Explorer's export dialog https://issues.redhat.com/browse/COST-1453 --- .../views/components/export/exportModal.tsx | 48 ++++++++++++------- .../views/details/awsDetails/awsDetails.tsx | 1 - .../details/azureDetails/azureDetails.tsx | 1 - .../details/components/actions/actions.tsx | 1 - .../views/details/gcpDetails/gcpDetails.tsx | 1 - .../views/details/ibmDetails/ibmDetails.tsx | 1 - .../views/details/ocpDetails/ocpDetails.tsx | 1 - src/pages/views/explorer/explorer.tsx | 2 + 8 files changed, 32 insertions(+), 24 deletions(-) diff --git a/src/pages/views/components/export/exportModal.tsx b/src/pages/views/components/export/exportModal.tsx index 9bd1961a9..5f09c903f 100644 --- a/src/pages/views/components/export/exportModal.tsx +++ b/src/pages/views/components/export/exportModal.tsx @@ -27,6 +27,7 @@ export interface ExportModalOwnProps extends WithTranslation { queryString?: string; reportPathsType: ReportPathsType; resolution?: 'daily' | 'monthly'; // Default resolution + showAggregateType?: boolean; // monthly resolution filters are not valid with date range showTimeScope?: boolean; // timeScope filters are not valid with date range } @@ -90,7 +91,16 @@ export class ExportModalBase extends React.Component{t('export.heading', { groupBy })}
- - - {resolutionOptions.map((option, index) => ( - - ))} - - + {showAggregateType && ( + + + {resolutionOptions.map((option, index) => ( + + ))} + + + )} {showTimeScope && ( diff --git a/src/pages/views/details/awsDetails/awsDetails.tsx b/src/pages/views/details/awsDetails/awsDetails.tsx index 82c905f47..929324083 100644 --- a/src/pages/views/details/awsDetails/awsDetails.tsx +++ b/src/pages/views/details/awsDetails/awsDetails.tsx @@ -148,7 +148,6 @@ class AwsDetails extends React.Component { onClose={this.handleExportModalClose} query={query} reportPathsType={reportPathsType} - showTimeScope /> ); }; diff --git a/src/pages/views/details/azureDetails/azureDetails.tsx b/src/pages/views/details/azureDetails/azureDetails.tsx index 16611c6db..430ff34a3 100644 --- a/src/pages/views/details/azureDetails/azureDetails.tsx +++ b/src/pages/views/details/azureDetails/azureDetails.tsx @@ -146,7 +146,6 @@ class AzureDetails extends React.Component { onClose={this.handleExportModalClose} query={query} reportPathsType={reportPathsType} - showTimeScope /> ); }; diff --git a/src/pages/views/details/components/actions/actions.tsx b/src/pages/views/details/components/actions/actions.tsx index a4671ef86..e3f2de7c7 100644 --- a/src/pages/views/details/components/actions/actions.tsx +++ b/src/pages/views/details/components/actions/actions.tsx @@ -64,7 +64,6 @@ class DetailsActionsBase extends React.Component { onClose={this.handleExportModalClose} query={query} reportPathsType={reportPathsType} - showTimeScope /> ); }; diff --git a/src/pages/views/details/gcpDetails/gcpDetails.tsx b/src/pages/views/details/gcpDetails/gcpDetails.tsx index c5e5d16dd..959101533 100644 --- a/src/pages/views/details/gcpDetails/gcpDetails.tsx +++ b/src/pages/views/details/gcpDetails/gcpDetails.tsx @@ -146,7 +146,6 @@ class GcpDetails extends React.Component { onClose={this.handleExportModalClose} query={query} reportPathsType={reportPathsType} - showTimeScope /> ); }; diff --git a/src/pages/views/details/ibmDetails/ibmDetails.tsx b/src/pages/views/details/ibmDetails/ibmDetails.tsx index 3033a9178..c40df9f76 100644 --- a/src/pages/views/details/ibmDetails/ibmDetails.tsx +++ b/src/pages/views/details/ibmDetails/ibmDetails.tsx @@ -146,7 +146,6 @@ class IbmDetails extends React.Component { onClose={this.handleExportModalClose} query={query} reportPathsType={reportPathsType} - showTimeScope /> ); }; diff --git a/src/pages/views/details/ocpDetails/ocpDetails.tsx b/src/pages/views/details/ocpDetails/ocpDetails.tsx index e71f49eed..b5c752c45 100644 --- a/src/pages/views/details/ocpDetails/ocpDetails.tsx +++ b/src/pages/views/details/ocpDetails/ocpDetails.tsx @@ -146,7 +146,6 @@ class OcpDetails extends React.Component { onClose={this.handleExportModalClose} query={query} reportPathsType={reportPathsType} - showTimeScope /> ); }; diff --git a/src/pages/views/explorer/explorer.tsx b/src/pages/views/explorer/explorer.tsx index 8bf438f49..ba3bf8534 100644 --- a/src/pages/views/explorer/explorer.tsx +++ b/src/pages/views/explorer/explorer.tsx @@ -177,6 +177,8 @@ class Explorer extends React.Component { query={query} reportPathsType={getReportPathsType(perspective)} resolution="daily" + showAggregateType={false} + showTimeScope={false} /> ); }; From 766b7384ab139eb389b7983d5ceb3e6679edc45b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Maro=C5=A1i?= Date: Thu, 27 May 2021 17:43:23 +0200 Subject: [PATCH 035/141] Fix chunk loading error in local env (#1973) * Use webpack dev server instead of proxy. * Use cloud services config utils package. * Add interactive start command to pick env. * Add option to conusme local api. * Update manifest. * Change output dir to dist instead of public * Fix linter issues. * Set "useProxy" via env variable. * Add option to host main.yml config * Use default port for proxy dev server. * Configure local API route via webpack --- .eslintignore | 1 + .gitignore | 1 + .travis.yml | 2 +- config/chrome-render-loader.js | 7 - config/chunk-mapper.js | 55 -- config/spandx.config.js | 18 +- config/spandx.config.local.js | 8 +- koku-ui-manifest | 196 ++++-- package.json | 19 +- scripts/start-dev-server.js | 39 ++ tsconfig.json | 2 +- webpack.config.js | 79 ++- yarn.lock | 1170 ++++++++++++++++++++++++-------- 13 files changed, 1177 insertions(+), 420 deletions(-) delete mode 100644 config/chrome-render-loader.js delete mode 100644 config/chunk-mapper.js create mode 100644 scripts/start-dev-server.js diff --git a/.eslintignore b/.eslintignore index 9fd52a1d0..9ea4f8663 100644 --- a/.eslintignore +++ b/.eslintignore @@ -1,6 +1,7 @@ # Javascript builds node_modules public +dist .DS_Store coverage diff --git a/.gitignore b/.gitignore index 42e5f23ad..cbd627c80 100644 --- a/.gitignore +++ b/.gitignore @@ -48,5 +48,6 @@ node_modules/ .env public/ +dist/ .DS_Store .idea diff --git a/.travis.yml b/.travis.yml index 98cb2db11..9272cf2c2 100644 --- a/.travis.yml +++ b/.travis.yml @@ -17,4 +17,4 @@ env: - REPO="git@github.com:RedHatInsights/cost-management-build" - REPO_DIR="cost-management-build" - BRANCH=${TRAVIS_PULL_REQUEST_BRANCH:-$TRAVIS_BRANCH} - - APP_BUILD_DIR="public" + - APP_BUILD_DIR="dist" diff --git a/config/chrome-render-loader.js b/config/chrome-render-loader.js deleted file mode 100644 index 3e0e3db87..000000000 --- a/config/chrome-render-loader.js +++ /dev/null @@ -1,7 +0,0 @@ -function chromeRenderLoader(source) { - const loaderUtils = require('loader-utils'); - const options = loaderUtils.getOptions(this); - return `document.getElementById('root').classList.add('${options.appName}');var isChrome2 = window.insights && window.insights.chrome && window.insights.chrome.isChrome2 || false; if(!isChrome2){${source}}`; -} - -module.exports = chromeRenderLoader; diff --git a/config/chunk-mapper.js b/config/chunk-mapper.js deleted file mode 100644 index 621ac4295..000000000 --- a/config/chunk-mapper.js +++ /dev/null @@ -1,55 +0,0 @@ -/* global */ - -/** - * The chunk mapper is required for other apps which do not run cost webpack init to propery register its modules - * If we want to used the remote module outside of cost and before it was run in browser, the fed-mods.json is required - * to properly find and register new remote modules. - */ -class ChunkMapper { - constructor(options) { - this.config = {}; - this.options = options || {}; - } - - apply(compiler) { - compiler.hooks.emit.tap('ChunkMapper', compilation => { - const prefix = - this.options.prefix || RegExp('^/.*/$').test(compiler.options.output.publicPath) - ? compiler.options.output.publicPath - : '/'; - compilation.chunks.forEach(({ name, files, runtime }) => { - const modules = Array.isArray(this.options.modules) ? this.options.modules : [this.options.modules]; - if (modules.find(oneEntry => RegExp(`${oneEntry}$`).test(runtime))) { - this.config[runtime] = { - ...(this.config[runtime] || {}), - ...(name === runtime - ? { - entry: Array.from(files) - .map(item => `${prefix}${item}`) - .filter((file, _index, array) => { - if (array.find(item => !RegExp('\\.hot-update\\.js$').test(item))) { - return !RegExp('\\.hot-update\\.js$').test(file); - } - - return true; - }), - } - : { - modules: [ - ...(this.config[runtime].modules || []), - ...Array.from(files).map(item => `${prefix}${item}`), - ], - }), - }; - } - }); - - compilation.assets['fed-mods.json'] = { - source: () => JSON.stringify(this.config, null, 4), - size: () => JSON.stringify(this.config, null, 4).length, - }; - }); - } -} - -module.exports = ChunkMapper; diff --git a/config/spandx.config.js b/config/spandx.config.js index 3a6522e31..06166df6b 100644 --- a/config/spandx.config.js +++ b/config/spandx.config.js @@ -1,27 +1,19 @@ -/*global module*/ -const localhost = - process.env.PLATFORM === 'linux' ? 'localhost' : 'host.docker.internal'; +const localhost = process.env.PLATFORM === 'linux' ? 'localhost' : 'host.docker.internal'; module.exports = { routes: { '/apps/cost-management': { - host: `http://${localhost}:8002`, + host: `https://${localhost}:8002`, }, '/beta/apps/cost-management': { - host: `http://${localhost}:8002`, - }, - '/cost-management': { - host: `http://${localhost}:8002`, - }, - '/beta/cost-management': { - host: `http://${localhost}:8002`, + host: `https://${localhost}:8002`, }, // New URLs '/openshift/cost-management': { - host: `http://${localhost}:8002`, + host: `https://${localhost}:8002`, }, '/beta/openshift/cost-management': { - host: `http://${localhost}:8002`, + host: `https://${localhost}:8002`, }, // For testing cloud-services-config https://github.com/RedHatInsights/cloud-services-config#testing-your-changes-locally // '/beta/config': { diff --git a/config/spandx.config.local.js b/config/spandx.config.local.js index d3323a008..a08821fdd 100644 --- a/config/spandx.config.local.js +++ b/config/spandx.config.local.js @@ -1,9 +1,5 @@ -/* global exports */ -const localhost = - process.env.PLATFORM === 'linux' ? 'localhost' : 'host.docker.internal'; -const localKokuPort = process.env.LOCAL_API_PORT - ? process.env.LOCAL_API_PORT - : '80'; +const localhost = process.env.PLATFORM === 'linux' ? 'localhost' : 'host.docker.internal'; +const localKokuPort = process.env.LOCAL_API_PORT ? process.env.LOCAL_API_PORT : '80'; const localKoku = 'http://' + process.env.LOCAL_API + ':' + localKokuPort; exports.routes = { '/api/cost-management/': { diff --git a/koku-ui-manifest b/koku-ui-manifest index a2c01d971..6f8b11107 100644 --- a/koku-ui-manifest +++ b/koku-ui-manifest @@ -100,6 +100,7 @@ mgmt_services/cost-mgmt:koku-ui/@patternfly/react-table:4.27.6.yarnlock mgmt_services/cost-mgmt:koku-ui/@patternfly/react-tokens:4.11.8.yarnlock mgmt_services/cost-mgmt:koku-ui/@patternfly/react-tokens:4.11.8.yarnlock mgmt_services/cost-mgmt:koku-ui/@popperjs/core:2.9.1.yarnlock +mgmt_services/cost-mgmt:koku-ui/@redhat-cloud-services/frontend-components-config-utilities:1.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/@redhat-cloud-services/frontend-components-notifications:3.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/@redhat-cloud-services/frontend-components-utilities:3.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/@redhat-cloud-services/frontend-components-utilities:3.1.1.yarnlock @@ -111,6 +112,7 @@ mgmt_services/cost-mgmt:koku-ui/@restart/hooks:0.3.26.yarnlock mgmt_services/cost-mgmt:koku-ui/@restart/hooks:0.3.26.yarnlock mgmt_services/cost-mgmt:koku-ui/@scalprum/core:0.0.11.yarnlock mgmt_services/cost-mgmt:koku-ui/@scalprum/react-core:0.0.16.yarnlock +mgmt_services/cost-mgmt:koku-ui/@schibstedpl/circuit-breaker-js:0.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/@sentry/browser:5.30.0.yarnlock mgmt_services/cost-mgmt:koku-ui/@sentry/core:5.30.0.yarnlock mgmt_services/cost-mgmt:koku-ui/@sentry/hub:5.30.0.yarnlock @@ -139,12 +141,12 @@ mgmt_services/cost-mgmt:koku-ui/@types/enzyme:3.10.8.yarnlock mgmt_services/cost-mgmt:koku-ui/@types/eslint-scope:3.7.0.yarnlock mgmt_services/cost-mgmt:koku-ui/@types/eslint:7.2.7.yarnlock mgmt_services/cost-mgmt:koku-ui/@types/estree:0.0.46.yarnlock -mgmt_services/cost-mgmt:koku-ui/@types/estree:0.0.46.yarnlock +mgmt_services/cost-mgmt:koku-ui/@types/estree:0.0.47.yarnlock +mgmt_services/cost-mgmt:koku-ui/@types/glob:7.1.3.yarnlock mgmt_services/cost-mgmt:koku-ui/@types/graceful-fs:4.1.5.yarnlock mgmt_services/cost-mgmt:koku-ui/@types/history:4.7.8.yarnlock mgmt_services/cost-mgmt:koku-ui/@types/hoist-non-react-statics:3.3.1.yarnlock mgmt_services/cost-mgmt:koku-ui/@types/html-minifier-terser:5.1.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/@types/http-proxy:1.17.5.yarnlock mgmt_services/cost-mgmt:koku-ui/@types/i18next-xhr-backend:1.4.2.yarnlock mgmt_services/cost-mgmt:koku-ui/@types/i18next:13.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/@types/invariant:2.2.34.yarnlock @@ -159,6 +161,7 @@ mgmt_services/cost-mgmt:koku-ui/@types/json-schema:7.0.7.yarnlock mgmt_services/cost-mgmt:koku-ui/@types/json-schema:7.0.7.yarnlock mgmt_services/cost-mgmt:koku-ui/@types/json-schema:7.0.7.yarnlock mgmt_services/cost-mgmt:koku-ui/@types/json5:0.0.29.yarnlock +mgmt_services/cost-mgmt:koku-ui/@types/minimatch:3.0.4.yarnlock mgmt_services/cost-mgmt:koku-ui/@types/node:14.14.33.yarnlock mgmt_services/cost-mgmt:koku-ui/@types/normalize-package-data:2.4.0.yarnlock mgmt_services/cost-mgmt:koku-ui/@types/prettier:2.2.2.yarnlock @@ -175,7 +178,6 @@ mgmt_services/cost-mgmt:koku-ui/@types/react:17.0.3.yarnlock mgmt_services/cost-mgmt:koku-ui/@types/react:17.0.3.yarnlock mgmt_services/cost-mgmt:koku-ui/@types/react:17.0.3.yarnlock mgmt_services/cost-mgmt:koku-ui/@types/react:17.0.2.yarnlock -mgmt_services/cost-mgmt:koku-ui/@types/retry:0.12.0.yarnlock mgmt_services/cost-mgmt:koku-ui/@types/scheduler:0.16.1.yarnlock mgmt_services/cost-mgmt:koku-ui/@types/source-list-map:0.1.2.yarnlock mgmt_services/cost-mgmt:koku-ui/@types/stack-utils:2.0.0.yarnlock @@ -208,9 +210,9 @@ mgmt_services/cost-mgmt:koku-ui/@webassemblyjs/wasm-gen:1.11.0.yarnlock mgmt_services/cost-mgmt:koku-ui/@webassemblyjs/wasm-opt:1.11.0.yarnlock mgmt_services/cost-mgmt:koku-ui/@webassemblyjs/wasm-parser:1.11.0.yarnlock mgmt_services/cost-mgmt:koku-ui/@webassemblyjs/wast-printer:1.11.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/@webpack-cli/configtest:1.0.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/@webpack-cli/info:1.2.2.yarnlock -mgmt_services/cost-mgmt:koku-ui/@webpack-cli/serve:1.3.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/@webpack-cli/configtest:1.0.3.yarnlock +mgmt_services/cost-mgmt:koku-ui/@webpack-cli/info:1.2.4.yarnlock +mgmt_services/cost-mgmt:koku-ui/@webpack-cli/serve:1.4.0.yarnlock mgmt_services/cost-mgmt:koku-ui/@wojtekmaj/enzyme-adapter-react-17:0.4.1.yarnlock mgmt_services/cost-mgmt:koku-ui/@xstate/graph:1.3.0.yarnlock mgmt_services/cost-mgmt:koku-ui/@xstate/test:0.4.2.yarnlock @@ -228,21 +230,27 @@ mgmt_services/cost-mgmt:koku-ui/acorn-walk:7.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/acorn:7.4.1.yarnlock mgmt_services/cost-mgmt:koku-ui/acorn:7.4.1.yarnlock mgmt_services/cost-mgmt:koku-ui/acorn:8.1.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/acorn:8.1.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/aggregate-error:3.1.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/acorn:8.2.4.yarnlock mgmt_services/cost-mgmt:koku-ui/airbnb-prop-types:2.16.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/ajv-errors:1.0.1.yarnlock +mgmt_services/cost-mgmt:koku-ui/ajv-keywords:3.5.2.yarnlock mgmt_services/cost-mgmt:koku-ui/ajv-keywords:3.5.2.yarnlock +mgmt_services/cost-mgmt:koku-ui/ajv:5.5.2.yarnlock +mgmt_services/cost-mgmt:koku-ui/ajv:6.12.6.yarnlock mgmt_services/cost-mgmt:koku-ui/ajv:6.12.6.yarnlock mgmt_services/cost-mgmt:koku-ui/ajv:6.12.6.yarnlock mgmt_services/cost-mgmt:koku-ui/ajv:6.12.6.yarnlock mgmt_services/cost-mgmt:koku-ui/ajv:6.12.6.yarnlock mgmt_services/cost-mgmt:koku-ui/ajv:7.2.1.yarnlock +mgmt_services/cost-mgmt:koku-ui/ansi-colors:3.2.4.yarnlock mgmt_services/cost-mgmt:koku-ui/ansi-colors:4.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/ansi-escapes:4.3.1.yarnlock mgmt_services/cost-mgmt:koku-ui/ansi-html:0.0.7.yarnlock mgmt_services/cost-mgmt:koku-ui/ansi-regex:2.1.1.yarnlock +mgmt_services/cost-mgmt:koku-ui/ansi-regex:4.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/ansi-regex:5.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/ansi-styles:3.2.1.yarnlock +mgmt_services/cost-mgmt:koku-ui/ansi-styles:3.2.1.yarnlock mgmt_services/cost-mgmt:koku-ui/ansi-styles:4.3.0.yarnlock mgmt_services/cost-mgmt:koku-ui/ansi-styles:4.3.0.yarnlock mgmt_services/cost-mgmt:koku-ui/anymatch:2.0.0.yarnlock @@ -259,7 +267,9 @@ mgmt_services/cost-mgmt:koku-ui/array-flatten:1.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/array-flatten:2.1.2.yarnlock mgmt_services/cost-mgmt:koku-ui/array-includes:3.1.3.yarnlock mgmt_services/cost-mgmt:koku-ui/array-includes:3.1.3.yarnlock +mgmt_services/cost-mgmt:koku-ui/array-union:1.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/array-union:2.1.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/array-uniq:1.0.3.yarnlock mgmt_services/cost-mgmt:koku-ui/array-unique:0.3.2.yarnlock mgmt_services/cost-mgmt:koku-ui/array.prototype.find:2.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/array.prototype.flat:1.2.4.yarnlock @@ -271,6 +281,8 @@ mgmt_services/cost-mgmt:koku-ui/assert-plus:1.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/assign-symbols:1.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/ast-types-flow:0.0.7.yarnlock mgmt_services/cost-mgmt:koku-ui/astral-regex:2.0.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/async-each:1.0.3.yarnlock +mgmt_services/cost-mgmt:koku-ui/async-limiter:1.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/async:2.6.3.yarnlock mgmt_services/cost-mgmt:koku-ui/asynckit:0.4.0.yarnlock mgmt_services/cost-mgmt:koku-ui/atob:2.1.2.yarnlock @@ -280,6 +292,7 @@ mgmt_services/cost-mgmt:koku-ui/awesome-imperative-promise:1.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/awesome-only-resolves-last-promise:1.0.3.yarnlock mgmt_services/cost-mgmt:koku-ui/aws-sign2:0.7.0.yarnlock mgmt_services/cost-mgmt:koku-ui/aws4:1.11.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/aws4:1.11.0.yarnlock mgmt_services/cost-mgmt:koku-ui/axe-core:4.1.3.yarnlock mgmt_services/cost-mgmt:koku-ui/axios:0.21.1.yarnlock mgmt_services/cost-mgmt:koku-ui/axios:0.21.1.yarnlock @@ -292,26 +305,33 @@ mgmt_services/cost-mgmt:koku-ui/babel-preset-current-node-syntax:1.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/babel-preset-jest:26.6.2.yarnlock mgmt_services/cost-mgmt:koku-ui/bail:1.0.5.yarnlock mgmt_services/cost-mgmt:koku-ui/balanced-match:1.0.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/base64-js:1.5.1.yarnlock mgmt_services/cost-mgmt:koku-ui/base:0.11.2.yarnlock mgmt_services/cost-mgmt:koku-ui/batch:0.6.1.yarnlock mgmt_services/cost-mgmt:koku-ui/bcrypt-pbkdf:1.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/big.js:5.2.2.yarnlock +mgmt_services/cost-mgmt:koku-ui/binary-extensions:1.13.1.yarnlock mgmt_services/cost-mgmt:koku-ui/binary-extensions:2.2.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/bindings:1.5.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/bl:4.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/body-parser:1.19.0.yarnlock mgmt_services/cost-mgmt:koku-ui/bonjour:3.5.0.yarnlock mgmt_services/cost-mgmt:koku-ui/boolbase:1.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/boolbase:1.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/brace-expansion:1.1.11.yarnlock mgmt_services/cost-mgmt:koku-ui/braces:2.3.2.yarnlock +mgmt_services/cost-mgmt:koku-ui/braces:2.3.2.yarnlock mgmt_services/cost-mgmt:koku-ui/braces:3.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/braces:3.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/browser-process-hrtime:1.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/browserslist:4.16.3.yarnlock mgmt_services/cost-mgmt:koku-ui/bs-logger:0.2.6.yarnlock mgmt_services/cost-mgmt:koku-ui/bser:2.1.1.yarnlock +mgmt_services/cost-mgmt:koku-ui/buffer-equal-constant-time:1.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/buffer-from:1.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/buffer-from:1.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/buffer-indexof:1.1.1.yarnlock +mgmt_services/cost-mgmt:koku-ui/buffer:5.7.1.yarnlock mgmt_services/cost-mgmt:koku-ui/bytes:3.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/bytes:3.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/cache-base:1.0.1.yarnlock @@ -325,6 +345,7 @@ mgmt_services/cost-mgmt:koku-ui/camelcase:5.3.1.yarnlock mgmt_services/cost-mgmt:koku-ui/camelcase:6.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/camelcase:6.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/caniuse-lite:1.0.30001197.yarnlock +mgmt_services/cost-mgmt:koku-ui/capitalize:1.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/capture-exit:2.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/caseless:0.12.0.yarnlock mgmt_services/cost-mgmt:koku-ui/chalk:2.4.2.yarnlock @@ -332,24 +353,32 @@ mgmt_services/cost-mgmt:koku-ui/chalk:2.4.2.yarnlock mgmt_services/cost-mgmt:koku-ui/chalk:2.4.2.yarnlock mgmt_services/cost-mgmt:koku-ui/chalk:4.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/chalk:4.1.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/chalk:4.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/char-regex:1.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/character-entities-legacy:1.1.4.yarnlock mgmt_services/cost-mgmt:koku-ui/character-entities:1.2.4.yarnlock mgmt_services/cost-mgmt:koku-ui/character-reference-invalid:1.1.4.yarnlock +mgmt_services/cost-mgmt:koku-ui/chardet:0.7.0.yarnlock mgmt_services/cost-mgmt:koku-ui/cheerio-select-tmp:0.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/cheerio:1.0.0-rc.5.yarnlock mgmt_services/cost-mgmt:koku-ui/chokidar:3.5.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/chokidar:3.5.1.yarnlock +mgmt_services/cost-mgmt:koku-ui/chokidar:2.1.8.yarnlock mgmt_services/cost-mgmt:koku-ui/chrome-trace-event:1.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/ci-info:2.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/cjs-module-lexer:0.6.0.yarnlock mgmt_services/cost-mgmt:koku-ui/class-utils:0.3.6.yarnlock mgmt_services/cost-mgmt:koku-ui/classnames:2.2.6.yarnlock mgmt_services/cost-mgmt:koku-ui/clean-css:4.2.3.yarnlock -mgmt_services/cost-mgmt:koku-ui/clean-stack:2.2.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/cli-cursor:3.1.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/cli-spinners:2.6.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/cli-width:3.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/cliui:3.2.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/cliui:5.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/cliui:6.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/clone-deep:4.0.1.yarnlock +mgmt_services/cost-mgmt:koku-ui/clone:1.0.3.yarnlock +mgmt_services/cost-mgmt:koku-ui/clone:2.1.1.yarnlock +mgmt_services/cost-mgmt:koku-ui/clone:1.0.4.yarnlock mgmt_services/cost-mgmt:koku-ui/co:4.6.0.yarnlock mgmt_services/cost-mgmt:koku-ui/code-point-at:1.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/collapse-white-space:1.0.6.yarnlock @@ -363,13 +392,13 @@ mgmt_services/cost-mgmt:koku-ui/colorette:1.2.2.yarnlock mgmt_services/cost-mgmt:koku-ui/colorette:1.2.2.yarnlock mgmt_services/cost-mgmt:koku-ui/combined-stream:1.0.8.yarnlock mgmt_services/cost-mgmt:koku-ui/combined-stream:1.0.8.yarnlock +mgmt_services/cost-mgmt:koku-ui/combined-stream:1.0.8.yarnlock mgmt_services/cost-mgmt:koku-ui/commander:7.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/commander:7.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/commander:2.20.3.yarnlock mgmt_services/cost-mgmt:koku-ui/commander:2.20.3.yarnlock mgmt_services/cost-mgmt:koku-ui/commander:4.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/comment-parser:1.1.2.yarnlock -mgmt_services/cost-mgmt:koku-ui/commondir:1.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/component-emitter:1.3.0.yarnlock mgmt_services/cost-mgmt:koku-ui/compressible:2.0.18.yarnlock mgmt_services/cost-mgmt:koku-ui/compression:1.7.4.yarnlock @@ -431,6 +460,7 @@ mgmt_services/cost-mgmt:koku-ui/debug:2.6.9.yarnlock mgmt_services/cost-mgmt:koku-ui/debug:2.6.9.yarnlock mgmt_services/cost-mgmt:koku-ui/debug:2.6.9.yarnlock mgmt_services/cost-mgmt:koku-ui/debug:3.2.7.yarnlock +mgmt_services/cost-mgmt:koku-ui/debug:3.2.7.yarnlock mgmt_services/cost-mgmt:koku-ui/debug:4.3.1.yarnlock mgmt_services/cost-mgmt:koku-ui/debug:4.3.1.yarnlock mgmt_services/cost-mgmt:koku-ui/debug:4.3.1.yarnlock @@ -443,12 +473,13 @@ mgmt_services/cost-mgmt:koku-ui/deep-equal:1.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/deep-is:0.1.3.yarnlock mgmt_services/cost-mgmt:koku-ui/deep-is:0.1.3.yarnlock mgmt_services/cost-mgmt:koku-ui/deepmerge:4.2.2.yarnlock -mgmt_services/cost-mgmt:koku-ui/default-gateway:6.0.3.yarnlock +mgmt_services/cost-mgmt:koku-ui/default-gateway:4.2.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/defaults:1.0.3.yarnlock mgmt_services/cost-mgmt:koku-ui/define-properties:1.1.3.yarnlock mgmt_services/cost-mgmt:koku-ui/define-property:0.2.5.yarnlock mgmt_services/cost-mgmt:koku-ui/define-property:1.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/define-property:2.0.2.yarnlock -mgmt_services/cost-mgmt:koku-ui/del:6.0.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/del:4.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/delaunator:4.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/delaunay-find:0.0.5.yarnlock mgmt_services/cost-mgmt:koku-ui/delayed-stream:1.0.0.yarnlock @@ -486,17 +517,18 @@ mgmt_services/cost-mgmt:koku-ui/domutils:2.4.4.yarnlock mgmt_services/cost-mgmt:koku-ui/domutils:2.4.4.yarnlock mgmt_services/cost-mgmt:koku-ui/dot-case:3.0.4.yarnlock mgmt_services/cost-mgmt:koku-ui/ecc-jsbn:0.1.2.yarnlock +mgmt_services/cost-mgmt:koku-ui/ecdsa-sig-formatter:1.0.11.yarnlock mgmt_services/cost-mgmt:koku-ui/ee-first:1.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/electron-to-chromium:1.3.683.yarnlock mgmt_services/cost-mgmt:koku-ui/emittery:0.7.2.yarnlock +mgmt_services/cost-mgmt:koku-ui/emoji-regex:7.0.3.yarnlock mgmt_services/cost-mgmt:koku-ui/emoji-regex:8.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/emoji-regex:9.2.2.yarnlock mgmt_services/cost-mgmt:koku-ui/emojis-list:3.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/encodeurl:1.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/end-of-stream:1.4.4.yarnlock mgmt_services/cost-mgmt:koku-ui/enhanced-resolve:4.5.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/enhanced-resolve:5.7.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/enquirer:2.3.6.yarnlock +mgmt_services/cost-mgmt:koku-ui/enhanced-resolve:5.8.2.yarnlock mgmt_services/cost-mgmt:koku-ui/enquirer:2.3.6.yarnlock mgmt_services/cost-mgmt:koku-ui/entities:1.1.2.yarnlock mgmt_services/cost-mgmt:koku-ui/entities:2.2.0.yarnlock @@ -571,6 +603,7 @@ mgmt_services/cost-mgmt:koku-ui/esutils:2.0.3.yarnlock mgmt_services/cost-mgmt:koku-ui/etag:1.8.1.yarnlock mgmt_services/cost-mgmt:koku-ui/eventemitter3:4.0.7.yarnlock mgmt_services/cost-mgmt:koku-ui/events:3.3.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/eventsource:1.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/exec-sh:0.3.4.yarnlock mgmt_services/cost-mgmt:koku-ui/execa:1.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/execa:4.1.0.yarnlock @@ -584,9 +617,12 @@ mgmt_services/cost-mgmt:koku-ui/extend-shallow:3.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/extend-shallow:3.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/extend:3.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/extend:3.0.2.yarnlock +mgmt_services/cost-mgmt:koku-ui/extend:3.0.2.yarnlock +mgmt_services/cost-mgmt:koku-ui/external-editor:3.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/extglob:2.0.4.yarnlock mgmt_services/cost-mgmt:koku-ui/extsprintf:1.3.0.yarnlock mgmt_services/cost-mgmt:koku-ui/extsprintf:1.4.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/fast-deep-equal:1.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/fast-deep-equal:3.1.3.yarnlock mgmt_services/cost-mgmt:koku-ui/fast-diff:1.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/fast-diff:1.2.0.yarnlock @@ -600,15 +636,17 @@ mgmt_services/cost-mgmt:koku-ui/fastest-levenshtein:1.0.12.yarnlock mgmt_services/cost-mgmt:koku-ui/fastq:1.11.0.yarnlock mgmt_services/cost-mgmt:koku-ui/faye-websocket:0.11.3.yarnlock mgmt_services/cost-mgmt:koku-ui/fb-watchman:2.0.1.yarnlock +mgmt_services/cost-mgmt:koku-ui/figures:3.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/file-entry-cache:6.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/file-selector:0.1.19.yarnlock +mgmt_services/cost-mgmt:koku-ui/file-uri-to-path:1.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/fill-range:4.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/fill-range:7.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/finalhandler:1.1.2.yarnlock -mgmt_services/cost-mgmt:koku-ui/find-cache-dir:3.3.1.yarnlock mgmt_services/cost-mgmt:koku-ui/find-up:1.1.2.yarnlock mgmt_services/cost-mgmt:koku-ui/find-up:2.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/find-up:2.1.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/find-up:3.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/find-up:4.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/find-up:4.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/flat-cache:3.0.4.yarnlock @@ -619,11 +657,12 @@ mgmt_services/cost-mgmt:koku-ui/follow-redirects:1.13.3.yarnlock mgmt_services/cost-mgmt:koku-ui/for-in:1.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/forever-agent:0.6.1.yarnlock mgmt_services/cost-mgmt:koku-ui/form-data:2.3.3.yarnlock +mgmt_services/cost-mgmt:koku-ui/form-data:2.3.3.yarnlock mgmt_services/cost-mgmt:koku-ui/forwarded:0.1.2.yarnlock mgmt_services/cost-mgmt:koku-ui/fragment-cache:0.2.1.yarnlock mgmt_services/cost-mgmt:koku-ui/fresh:0.5.2.yarnlock -mgmt_services/cost-mgmt:koku-ui/fs-monkey:1.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/fs.realpath:1.0.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/fsevents:1.2.13.yarnlock mgmt_services/cost-mgmt:koku-ui/fsevents:2.3.2.yarnlock mgmt_services/cost-mgmt:koku-ui/fsevents:2.3.2.yarnlock mgmt_services/cost-mgmt:koku-ui/function-bind:1.1.1.yarnlock @@ -646,11 +685,14 @@ mgmt_services/cost-mgmt:koku-ui/get-value:2.0.6.yarnlock mgmt_services/cost-mgmt:koku-ui/get-value:2.0.6.yarnlock mgmt_services/cost-mgmt:koku-ui/getpass:0.1.7.yarnlock mgmt_services/cost-mgmt:koku-ui/git-revision-webpack-plugin:3.0.6.yarnlock +mgmt_services/cost-mgmt:koku-ui/glob-parent:3.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/glob-parent:5.1.2.yarnlock mgmt_services/cost-mgmt:koku-ui/glob-parent:5.1.2.yarnlock mgmt_services/cost-mgmt:koku-ui/glob-parent:5.1.2.yarnlock mgmt_services/cost-mgmt:koku-ui/glob-parent:5.1.2.yarnlock mgmt_services/cost-mgmt:koku-ui/glob-to-regexp:0.4.1.yarnlock +mgmt_services/cost-mgmt:koku-ui/glob:7.1.7.yarnlock +mgmt_services/cost-mgmt:koku-ui/glob:7.1.7.yarnlock mgmt_services/cost-mgmt:koku-ui/glob:7.1.6.yarnlock mgmt_services/cost-mgmt:koku-ui/glob:7.1.6.yarnlock mgmt_services/cost-mgmt:koku-ui/glob:7.1.6.yarnlock @@ -659,12 +701,15 @@ mgmt_services/cost-mgmt:koku-ui/glob:7.1.6.yarnlock mgmt_services/cost-mgmt:koku-ui/globals:11.12.0.yarnlock mgmt_services/cost-mgmt:koku-ui/globals:12.4.0.yarnlock mgmt_services/cost-mgmt:koku-ui/globby:11.0.2.yarnlock +mgmt_services/cost-mgmt:koku-ui/globby:6.1.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/good-guy-http:1.12.0.yarnlock mgmt_services/cost-mgmt:koku-ui/graceful-fs:4.2.6.yarnlock mgmt_services/cost-mgmt:koku-ui/graceful-fs:4.2.6.yarnlock mgmt_services/cost-mgmt:koku-ui/graceful-fs:4.2.6.yarnlock mgmt_services/cost-mgmt:koku-ui/growly:1.3.0.yarnlock mgmt_services/cost-mgmt:koku-ui/handle-thing:2.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/har-schema:2.0.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/har-validator:5.0.3.yarnlock mgmt_services/cost-mgmt:koku-ui/har-validator:5.1.5.yarnlock mgmt_services/cost-mgmt:koku-ui/has-bigints:1.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/has-flag:3.0.0.yarnlock @@ -678,6 +723,7 @@ mgmt_services/cost-mgmt:koku-ui/has-values:0.1.4.yarnlock mgmt_services/cost-mgmt:koku-ui/has-values:1.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/has:1.0.3.yarnlock mgmt_services/cost-mgmt:koku-ui/he:1.2.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/he:1.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/history:4.10.1.yarnlock mgmt_services/cost-mgmt:koku-ui/hoist-non-react-statics:3.3.2.yarnlock mgmt_services/cost-mgmt:koku-ui/hoist-non-react-statics:3.3.2.yarnlock @@ -687,7 +733,7 @@ mgmt_services/cost-mgmt:koku-ui/hosted-git-info:2.8.8.yarnlock mgmt_services/cost-mgmt:koku-ui/hpack.js:2.1.6.yarnlock mgmt_services/cost-mgmt:koku-ui/html-element-map:1.3.0.yarnlock mgmt_services/cost-mgmt:koku-ui/html-encoding-sniffer:2.0.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/html-entities:2.3.2.yarnlock +mgmt_services/cost-mgmt:koku-ui/html-entities:1.4.0.yarnlock mgmt_services/cost-mgmt:koku-ui/html-escaper:2.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/html-loader:2.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/html-minifier-terser:5.1.1.yarnlock @@ -703,7 +749,7 @@ mgmt_services/cost-mgmt:koku-ui/http-errors:1.7.2.yarnlock mgmt_services/cost-mgmt:koku-ui/http-errors:1.6.3.yarnlock mgmt_services/cost-mgmt:koku-ui/http-errors:1.7.3.yarnlock mgmt_services/cost-mgmt:koku-ui/http-parser-js:0.5.3.yarnlock -mgmt_services/cost-mgmt:koku-ui/http-proxy-middleware:1.2.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/http-proxy-middleware:0.19.1.yarnlock mgmt_services/cost-mgmt:koku-ui/http-proxy:1.18.1.yarnlock mgmt_services/cost-mgmt:koku-ui/http-signature:1.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/human-date:1.4.0.yarnlock @@ -716,16 +762,18 @@ mgmt_services/cost-mgmt:koku-ui/i18next-xhr-backend:3.2.2.yarnlock mgmt_services/cost-mgmt:koku-ui/i18next:19.9.2.yarnlock mgmt_services/cost-mgmt:koku-ui/i18next:19.8.8.yarnlock mgmt_services/cost-mgmt:koku-ui/iconv-lite:0.4.24.yarnlock +mgmt_services/cost-mgmt:koku-ui/iconv-lite:0.4.24.yarnlock mgmt_services/cost-mgmt:koku-ui/icss-utils:5.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/icss-utils:5.1.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/ieee754:1.2.1.yarnlock mgmt_services/cost-mgmt:koku-ui/ignore:3.3.10.yarnlock mgmt_services/cost-mgmt:koku-ui/ignore:4.0.6.yarnlock mgmt_services/cost-mgmt:koku-ui/ignore:5.1.8.yarnlock mgmt_services/cost-mgmt:koku-ui/import-fresh:3.3.0.yarnlock mgmt_services/cost-mgmt:koku-ui/import-fresh:3.3.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/import-local:2.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/import-local:3.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/imurmurhash:0.1.4.yarnlock -mgmt_services/cost-mgmt:koku-ui/indent-string:4.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/indexes-of:1.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/inflight:1.0.6.yarnlock mgmt_services/cost-mgmt:koku-ui/inherits:2.0.4.yarnlock @@ -734,18 +782,20 @@ mgmt_services/cost-mgmt:koku-ui/inherits:2.0.4.yarnlock mgmt_services/cost-mgmt:koku-ui/inherits:2.0.4.yarnlock mgmt_services/cost-mgmt:koku-ui/inherits:2.0.4.yarnlock mgmt_services/cost-mgmt:koku-ui/inherits:2.0.4.yarnlock +mgmt_services/cost-mgmt:koku-ui/inherits:2.0.4.yarnlock mgmt_services/cost-mgmt:koku-ui/inherits:2.0.3.yarnlock mgmt_services/cost-mgmt:koku-ui/inline-style-prefixer:5.1.2.yarnlock -mgmt_services/cost-mgmt:koku-ui/internal-ip:6.2.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/inquirer:8.1.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/internal-ip:4.3.0.yarnlock mgmt_services/cost-mgmt:koku-ui/internal-slot:1.0.3.yarnlock mgmt_services/cost-mgmt:koku-ui/interpret:2.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/invariant:2.2.4.yarnlock mgmt_services/cost-mgmt:koku-ui/invert-kv:1.0.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/ip-regex:4.3.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/ip-regex:2.1.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/ip:1.1.5.yarnlock mgmt_services/cost-mgmt:koku-ui/ip:1.1.5.yarnlock mgmt_services/cost-mgmt:koku-ui/ipaddr.js:1.9.1.yarnlock mgmt_services/cost-mgmt:koku-ui/ipaddr.js:1.9.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/ipaddr.js:2.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/is-absolute-url:3.0.3.yarnlock mgmt_services/cost-mgmt:koku-ui/is-accessor-descriptor:0.1.6.yarnlock mgmt_services/cost-mgmt:koku-ui/is-accessor-descriptor:1.0.0.yarnlock @@ -754,6 +804,7 @@ mgmt_services/cost-mgmt:koku-ui/is-alphanumerical:1.0.4.yarnlock mgmt_services/cost-mgmt:koku-ui/is-arguments:1.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/is-arrayish:0.2.1.yarnlock mgmt_services/cost-mgmt:koku-ui/is-bigint:1.0.1.yarnlock +mgmt_services/cost-mgmt:koku-ui/is-binary-path:1.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/is-binary-path:2.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/is-boolean-object:1.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/is-boolean-object:1.1.0.yarnlock @@ -776,22 +827,25 @@ mgmt_services/cost-mgmt:koku-ui/is-extendable:0.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/is-extendable:0.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/is-extendable:1.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/is-extglob:2.1.1.yarnlock +mgmt_services/cost-mgmt:koku-ui/is-extglob:2.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/is-fullwidth-code-point:1.0.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/is-fullwidth-code-point:2.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/is-fullwidth-code-point:3.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/is-generator-fn:2.1.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/is-glob:3.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/is-glob:4.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/is-glob:4.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/is-glob:4.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/is-hexadecimal:1.0.4.yarnlock -mgmt_services/cost-mgmt:koku-ui/is-ip:3.1.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/is-interactive:1.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/is-negative-zero:2.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/is-number-object:1.0.4.yarnlock mgmt_services/cost-mgmt:koku-ui/is-number:3.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/is-number:7.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/is-path-cwd:2.2.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/is-path-inside:3.0.3.yarnlock +mgmt_services/cost-mgmt:koku-ui/is-path-in-cwd:2.1.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/is-path-inside:2.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/is-plain-obj:1.1.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/is-plain-obj:3.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/is-plain-object:2.0.4.yarnlock mgmt_services/cost-mgmt:koku-ui/is-plain-object:2.0.4.yarnlock mgmt_services/cost-mgmt:koku-ui/is-plain-object:5.0.0.yarnlock @@ -808,11 +862,12 @@ mgmt_services/cost-mgmt:koku-ui/is-symbol:1.0.3.yarnlock mgmt_services/cost-mgmt:koku-ui/is-symbol:1.0.3.yarnlock mgmt_services/cost-mgmt:koku-ui/is-typedarray:1.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/is-typedarray:1.0.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/is-unicode-supported:0.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/is-utf8:0.2.1.yarnlock mgmt_services/cost-mgmt:koku-ui/is-whitespace-character:1.0.4.yarnlock mgmt_services/cost-mgmt:koku-ui/is-windows:1.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/is-word-character:1.0.4.yarnlock -mgmt_services/cost-mgmt:koku-ui/is-wsl:2.2.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/is-wsl:1.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/is-wsl:2.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/isarray:0.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/isarray:1.0.0.yarnlock @@ -870,6 +925,7 @@ mgmt_services/cost-mgmt:koku-ui/jsdom:16.5.0.yarnlock mgmt_services/cost-mgmt:koku-ui/jsesc:2.5.2.yarnlock mgmt_services/cost-mgmt:koku-ui/json-parse-better-errors:1.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/json-parse-even-better-errors:2.3.1.yarnlock +mgmt_services/cost-mgmt:koku-ui/json-schema-traverse:0.3.1.yarnlock mgmt_services/cost-mgmt:koku-ui/json-schema-traverse:0.4.1.yarnlock mgmt_services/cost-mgmt:koku-ui/json-schema-traverse:1.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/json-schema:0.2.3.yarnlock @@ -877,6 +933,7 @@ mgmt_services/cost-mgmt:koku-ui/json-stable-stringify-without-jsonify:1.0.1.yarn mgmt_services/cost-mgmt:koku-ui/json-stable-stringify:1.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/json-stringify-safe:5.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/json-stringify-safe:5.0.1.yarnlock +mgmt_services/cost-mgmt:koku-ui/json3:3.3.3.yarnlock mgmt_services/cost-mgmt:koku-ui/json5:2.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/json5:2.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/json5:1.0.1.yarnlock @@ -884,6 +941,8 @@ mgmt_services/cost-mgmt:koku-ui/jsonify:0.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/jsprim:1.4.1.yarnlock mgmt_services/cost-mgmt:koku-ui/jsx-ast-utils:3.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/jsx-ast-utils:3.2.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/jwa:2.0.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/jws:4.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/killable:1.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/kind-of:3.2.2.yarnlock mgmt_services/cost-mgmt:koku-ui/kind-of:3.2.2.yarnlock @@ -907,6 +966,7 @@ mgmt_services/cost-mgmt:koku-ui/load-json-file:2.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/loader-runner:4.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/loader-utils:2.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/locate-path:2.0.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/locate-path:3.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/locate-path:5.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/lodash-es:4.17.21.yarnlock mgmt_services/cost-mgmt:koku-ui/lodash.assign:4.2.0.yarnlock @@ -921,6 +981,10 @@ mgmt_services/cost-mgmt:koku-ui/lodash:4.17.21.yarnlock mgmt_services/cost-mgmt:koku-ui/lodash:4.17.21.yarnlock mgmt_services/cost-mgmt:koku-ui/lodash:4.17.21.yarnlock mgmt_services/cost-mgmt:koku-ui/lodash:4.17.21.yarnlock +mgmt_services/cost-mgmt:koku-ui/lodash:4.17.21.yarnlock +mgmt_services/cost-mgmt:koku-ui/lodash:4.17.21.yarnlock +mgmt_services/cost-mgmt:koku-ui/log-symbols:4.1.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/loglevel:1.7.1.yarnlock mgmt_services/cost-mgmt:koku-ui/loglevelnext:3.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/loose-envify:1.4.0.yarnlock mgmt_services/cost-mgmt:koku-ui/loose-envify:1.4.0.yarnlock @@ -931,22 +995,20 @@ mgmt_services/cost-mgmt:koku-ui/lower-case:2.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/lru-cache:6.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/lz-string:1.4.4.yarnlock mgmt_services/cost-mgmt:koku-ui/make-dir:3.1.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/make-dir:3.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/make-error:1.3.6.yarnlock mgmt_services/cost-mgmt:koku-ui/makeerror:1.0.11.yarnlock -mgmt_services/cost-mgmt:koku-ui/map-age-cleaner:0.1.3.yarnlock mgmt_services/cost-mgmt:koku-ui/map-cache:0.2.2.yarnlock mgmt_services/cost-mgmt:koku-ui/map-visit:1.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/markdown-escapes:1.0.4.yarnlock mgmt_services/cost-mgmt:koku-ui/media-typer:0.3.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/mem:8.1.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/memfs:3.2.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/memory-fs:0.4.1.yarnlock mgmt_services/cost-mgmt:koku-ui/memory-fs:0.5.0.yarnlock mgmt_services/cost-mgmt:koku-ui/merge-descriptors:1.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/merge-stream:2.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/merge2:1.4.1.yarnlock mgmt_services/cost-mgmt:koku-ui/methods:1.1.2.yarnlock mgmt_services/cost-mgmt:koku-ui/micromatch:3.1.10.yarnlock +mgmt_services/cost-mgmt:koku-ui/micromatch:3.1.10.yarnlock mgmt_services/cost-mgmt:koku-ui/micromatch:4.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/micromatch:4.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/mime-db:1.46.0.yarnlock @@ -956,10 +1018,9 @@ mgmt_services/cost-mgmt:koku-ui/mime-types:2.1.29.yarnlock mgmt_services/cost-mgmt:koku-ui/mime-types:2.1.29.yarnlock mgmt_services/cost-mgmt:koku-ui/mime-types:2.1.29.yarnlock mgmt_services/cost-mgmt:koku-ui/mime-types:2.1.29.yarnlock -mgmt_services/cost-mgmt:koku-ui/mime-types:2.1.29.yarnlock mgmt_services/cost-mgmt:koku-ui/mime:1.6.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/mime:2.5.2.yarnlock mgmt_services/cost-mgmt:koku-ui/mimic-fn:2.1.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/mimic-fn:3.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/mini-create-react-context:0.4.1.yarnlock mgmt_services/cost-mgmt:koku-ui/mini-css-extract-plugin:1.3.9.yarnlock mgmt_services/cost-mgmt:koku-ui/minimalistic-assert:1.0.1.yarnlock @@ -970,6 +1031,7 @@ mgmt_services/cost-mgmt:koku-ui/minimist:1.2.5.yarnlock mgmt_services/cost-mgmt:koku-ui/mixin-deep:1.3.2.yarnlock mgmt_services/cost-mgmt:koku-ui/mkdirp:1.0.4.yarnlock mgmt_services/cost-mgmt:koku-ui/mkdirp:0.5.5.yarnlock +mgmt_services/cost-mgmt:koku-ui/mkdirp:0.5.5.yarnlock mgmt_services/cost-mgmt:koku-ui/moo:0.5.1.yarnlock mgmt_services/cost-mgmt:koku-ui/ms:2.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/ms:2.1.1.yarnlock @@ -977,6 +1039,8 @@ mgmt_services/cost-mgmt:koku-ui/ms:2.1.2.yarnlock mgmt_services/cost-mgmt:koku-ui/ms:2.1.3.yarnlock mgmt_services/cost-mgmt:koku-ui/multicast-dns-service-types:1.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/multicast-dns:6.2.3.yarnlock +mgmt_services/cost-mgmt:koku-ui/mute-stream:0.0.8.yarnlock +mgmt_services/cost-mgmt:koku-ui/nan:2.14.2.yarnlock mgmt_services/cost-mgmt:koku-ui/nanoid:2.1.11.yarnlock mgmt_services/cost-mgmt:koku-ui/nanoid:3.1.20.yarnlock mgmt_services/cost-mgmt:koku-ui/nanoid:3.1.23.yarnlock @@ -992,6 +1056,7 @@ mgmt_services/cost-mgmt:koku-ui/node-int64:0.4.0.yarnlock mgmt_services/cost-mgmt:koku-ui/node-modules-regexp:1.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/node-notifier:8.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/node-releases:1.1.71.yarnlock +mgmt_services/cost-mgmt:koku-ui/nodesi:1.15.0.yarnlock mgmt_services/cost-mgmt:koku-ui/normalize-package-data:2.5.0.yarnlock mgmt_services/cost-mgmt:koku-ui/normalize-package-data:2.5.0.yarnlock mgmt_services/cost-mgmt:koku-ui/normalize-path:2.1.1.yarnlock @@ -1005,8 +1070,10 @@ mgmt_services/cost-mgmt:koku-ui/nth-check:2.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/null-loader:4.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/number-is-nan:1.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/nwsapi:2.2.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/oauth-sign:0.8.2.yarnlock mgmt_services/cost-mgmt:koku-ui/oauth-sign:0.9.0.yarnlock mgmt_services/cost-mgmt:koku-ui/object-assign:4.1.1.yarnlock +mgmt_services/cost-mgmt:koku-ui/object-assign:4.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/object-copy:0.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/object-inspect:1.9.0.yarnlock mgmt_services/cost-mgmt:koku-ui/object-inspect:1.9.0.yarnlock @@ -1034,23 +1101,25 @@ mgmt_services/cost-mgmt:koku-ui/once:1.4.0.yarnlock mgmt_services/cost-mgmt:koku-ui/once:1.4.0.yarnlock mgmt_services/cost-mgmt:koku-ui/onetime:5.1.2.yarnlock mgmt_services/cost-mgmt:koku-ui/onetime:5.1.2.yarnlock -mgmt_services/cost-mgmt:koku-ui/open:7.4.2.yarnlock +mgmt_services/cost-mgmt:koku-ui/opn:5.5.0.yarnlock mgmt_services/cost-mgmt:koku-ui/optionator:0.8.3.yarnlock mgmt_services/cost-mgmt:koku-ui/optionator:0.9.1.yarnlock +mgmt_services/cost-mgmt:koku-ui/ora:5.4.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/original:1.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/os-locale:1.4.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/p-defer:1.0.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/os-tmpdir:1.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/p-each-series:2.2.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/p-event:4.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/p-finally:1.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/p-limit:1.3.0.yarnlock mgmt_services/cost-mgmt:koku-ui/p-limit:2.3.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/p-limit:2.3.0.yarnlock mgmt_services/cost-mgmt:koku-ui/p-limit:3.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/p-limit:3.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/p-locate:2.0.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/p-locate:3.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/p-locate:4.1.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/p-map:4.0.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/p-retry:4.5.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/p-timeout:3.2.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/p-map:2.1.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/p-retry:3.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/p-try:1.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/p-try:2.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/param-case:3.0.4.yarnlock @@ -1068,10 +1137,12 @@ mgmt_services/cost-mgmt:koku-ui/parseurl:1.3.3.yarnlock mgmt_services/cost-mgmt:koku-ui/parseurl:1.3.3.yarnlock mgmt_services/cost-mgmt:koku-ui/pascal-case:3.1.2.yarnlock mgmt_services/cost-mgmt:koku-ui/pascalcase:0.1.1.yarnlock +mgmt_services/cost-mgmt:koku-ui/path-dirname:1.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/path-exists:2.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/path-exists:3.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/path-exists:4.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/path-is-absolute:1.0.1.yarnlock +mgmt_services/cost-mgmt:koku-ui/path-is-inside:1.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/path-key:2.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/path-key:2.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/path-key:3.1.1.yarnlock @@ -1087,11 +1158,12 @@ mgmt_services/cost-mgmt:koku-ui/picomatch:2.2.2.yarnlock mgmt_services/cost-mgmt:koku-ui/picomatch:2.2.2.yarnlock mgmt_services/cost-mgmt:koku-ui/picomatch:2.2.2.yarnlock mgmt_services/cost-mgmt:koku-ui/pify:2.3.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/pify:4.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/pinkie-promise:2.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/pinkie:2.0.4.yarnlock mgmt_services/cost-mgmt:koku-ui/pirates:4.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/pkg-dir:2.0.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/pkg-dir:4.2.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/pkg-dir:3.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/pkg-dir:4.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/popper.js:1.16.1.yarnlock mgmt_services/cost-mgmt:koku-ui/portfinder:1.0.28.yarnlock @@ -1126,12 +1198,15 @@ mgmt_services/cost-mgmt:koku-ui/psl:1.8.0.yarnlock mgmt_services/cost-mgmt:koku-ui/psl:1.8.0.yarnlock mgmt_services/cost-mgmt:koku-ui/pump:3.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/punycode:1.3.2.yarnlock +mgmt_services/cost-mgmt:koku-ui/punycode:1.4.1.yarnlock mgmt_services/cost-mgmt:koku-ui/punycode:2.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/punycode:2.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/qs:6.7.0.yarnlock mgmt_services/cost-mgmt:koku-ui/qs:6.9.6.yarnlock mgmt_services/cost-mgmt:koku-ui/qs:6.5.2.yarnlock +mgmt_services/cost-mgmt:koku-ui/qs:6.5.2.yarnlock mgmt_services/cost-mgmt:koku-ui/querystring:0.2.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/querystringify:2.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/queue-microtask:1.2.2.yarnlock mgmt_services/cost-mgmt:koku-ui/raf:3.4.1.yarnlock mgmt_services/cost-mgmt:koku-ui/railroad-diagrams:1.0.0.yarnlock @@ -1174,8 +1249,11 @@ mgmt_services/cost-mgmt:koku-ui/read-pkg:1.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/read-pkg:2.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/read-pkg:5.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/readable-stream:2.3.7.yarnlock +mgmt_services/cost-mgmt:koku-ui/readable-stream:2.3.7.yarnlock +mgmt_services/cost-mgmt:koku-ui/readable-stream:3.6.0.yarnlock mgmt_services/cost-mgmt:koku-ui/readable-stream:3.6.0.yarnlock mgmt_services/cost-mgmt:koku-ui/readable-stream:3.6.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/readdirp:2.2.1.yarnlock mgmt_services/cost-mgmt:koku-ui/readdirp:3.5.0.yarnlock mgmt_services/cost-mgmt:koku-ui/rechoir:0.7.0.yarnlock mgmt_services/cost-mgmt:koku-ui/redux-thunk:2.3.0.yarnlock @@ -1200,13 +1278,16 @@ mgmt_services/cost-mgmt:koku-ui/repeat-string:1.6.1.yarnlock mgmt_services/cost-mgmt:koku-ui/replace-ext:1.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/request-promise-core:1.1.4.yarnlock mgmt_services/cost-mgmt:koku-ui/request-promise-native:1.0.9.yarnlock +mgmt_services/cost-mgmt:koku-ui/request:2.87.0.yarnlock mgmt_services/cost-mgmt:koku-ui/request:2.88.2.yarnlock mgmt_services/cost-mgmt:koku-ui/require-directory:2.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/require-from-string:2.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/require-main-filename:1.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/require-main-filename:2.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/requires-port:1.0.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/resolve-cwd:2.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/resolve-cwd:3.0.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/resolve-from:3.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/resolve-from:4.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/resolve-from:5.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/resolve-pathname:3.0.0.yarnlock @@ -1217,14 +1298,18 @@ mgmt_services/cost-mgmt:koku-ui/resolve:1.20.0.yarnlock mgmt_services/cost-mgmt:koku-ui/resolve:1.20.0.yarnlock mgmt_services/cost-mgmt:koku-ui/resolve:1.20.0.yarnlock mgmt_services/cost-mgmt:koku-ui/resolve:1.20.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/restore-cursor:3.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/ret:0.1.15.yarnlock mgmt_services/cost-mgmt:koku-ui/retry:0.12.0.yarnlock mgmt_services/cost-mgmt:koku-ui/reusify:1.0.4.yarnlock +mgmt_services/cost-mgmt:koku-ui/rimraf:2.7.1.yarnlock mgmt_services/cost-mgmt:koku-ui/rimraf:3.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/rimraf:3.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/rst-selector-parser:2.2.3.yarnlock mgmt_services/cost-mgmt:koku-ui/rsvp:4.8.5.yarnlock +mgmt_services/cost-mgmt:koku-ui/run-async:2.4.1.yarnlock mgmt_services/cost-mgmt:koku-ui/run-parallel:1.2.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/rxjs:6.6.7.yarnlock mgmt_services/cost-mgmt:koku-ui/safe-buffer:5.1.2.yarnlock mgmt_services/cost-mgmt:koku-ui/safe-buffer:5.1.2.yarnlock mgmt_services/cost-mgmt:koku-ui/safe-buffer:5.1.2.yarnlock @@ -1233,6 +1318,7 @@ mgmt_services/cost-mgmt:koku-ui/safe-buffer:5.2.1.yarnlock mgmt_services/cost-mgmt:koku-ui/safe-buffer:5.2.1.yarnlock mgmt_services/cost-mgmt:koku-ui/safe-buffer:5.2.1.yarnlock mgmt_services/cost-mgmt:koku-ui/safe-buffer:5.2.1.yarnlock +mgmt_services/cost-mgmt:koku-ui/safe-buffer:5.2.1.yarnlock mgmt_services/cost-mgmt:koku-ui/safe-regex:1.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/safer-buffer:2.1.2.yarnlock mgmt_services/cost-mgmt:koku-ui/safer-buffer:2.1.2.yarnlock @@ -1245,6 +1331,7 @@ mgmt_services/cost-mgmt:koku-ui/sass:1.32.8.yarnlock mgmt_services/cost-mgmt:koku-ui/saxes:5.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/scheduler:0.19.1.yarnlock mgmt_services/cost-mgmt:koku-ui/scheduler:0.20.1.yarnlock +mgmt_services/cost-mgmt:koku-ui/schema-utils:1.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/schema-utils:3.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/select-hose:2.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/selfsigned:1.10.8.yarnlock @@ -1285,6 +1372,7 @@ mgmt_services/cost-mgmt:koku-ui/slice-ansi:4.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/snapdragon-node:2.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/snapdragon-util:3.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/snapdragon:0.8.2.yarnlock +mgmt_services/cost-mgmt:koku-ui/sockjs-client:1.5.1.yarnlock mgmt_services/cost-mgmt:koku-ui/sockjs:0.3.21.yarnlock mgmt_services/cost-mgmt:koku-ui/source-list-map:2.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/source-list-map:2.0.1.yarnlock @@ -1323,6 +1411,8 @@ mgmt_services/cost-mgmt:koku-ui/string-hash:1.1.3.yarnlock mgmt_services/cost-mgmt:koku-ui/string-length:4.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/string-width:1.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/string-width:1.0.2.yarnlock +mgmt_services/cost-mgmt:koku-ui/string-width:3.1.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/string-width:3.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/string-width:4.2.2.yarnlock mgmt_services/cost-mgmt:koku-ui/string-width:4.2.2.yarnlock mgmt_services/cost-mgmt:koku-ui/string.prototype.matchall:4.0.4.yarnlock @@ -1333,6 +1423,9 @@ mgmt_services/cost-mgmt:koku-ui/string_decoder:1.3.0.yarnlock mgmt_services/cost-mgmt:koku-ui/string_decoder:1.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/strip-ansi:3.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/strip-ansi:3.0.1.yarnlock +mgmt_services/cost-mgmt:koku-ui/strip-ansi:5.2.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/strip-ansi:5.2.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/strip-ansi:5.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/strip-ansi:6.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/strip-bom:2.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/strip-bom:3.0.0.yarnlock @@ -1342,6 +1435,7 @@ mgmt_services/cost-mgmt:koku-ui/strip-final-newline:2.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/strip-json-comments:3.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/strip-json-comments:3.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/supports-color:5.5.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/supports-color:6.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/supports-color:7.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/supports-color:7.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/supports-hyperlinks:2.1.0.yarnlock @@ -1360,11 +1454,13 @@ mgmt_services/cost-mgmt:koku-ui/terser:5.6.0.yarnlock mgmt_services/cost-mgmt:koku-ui/test-exclude:6.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/text-table:0.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/throat:5.0.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/through:2.3.8.yarnlock mgmt_services/cost-mgmt:koku-ui/thunky:1.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/tiny-invariant:1.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/tiny-warning:1.0.3.yarnlock mgmt_services/cost-mgmt:koku-ui/tiny-warning:1.0.3.yarnlock mgmt_services/cost-mgmt:koku-ui/tippy.js:5.1.2.yarnlock +mgmt_services/cost-mgmt:koku-ui/tmp:0.0.33.yarnlock mgmt_services/cost-mgmt:koku-ui/tmpl:1.0.4.yarnlock mgmt_services/cost-mgmt:koku-ui/to-fast-properties:2.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/to-object-path:0.3.0.yarnlock @@ -1376,6 +1472,7 @@ mgmt_services/cost-mgmt:koku-ui/toidentifier:1.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/tough-cookie:2.5.0.yarnlock mgmt_services/cost-mgmt:koku-ui/tough-cookie:2.5.0.yarnlock mgmt_services/cost-mgmt:koku-ui/tough-cookie:4.0.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/tough-cookie:2.3.4.yarnlock mgmt_services/cost-mgmt:koku-ui/tr46:2.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/trim-trailing-lines:1.1.4.yarnlock mgmt_services/cost-mgmt:koku-ui/trim:0.0.1.yarnlock @@ -1409,6 +1506,7 @@ mgmt_services/cost-mgmt:koku-ui/typesafe-actions:5.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/typescript:4.1.5.yarnlock mgmt_services/cost-mgmt:koku-ui/unbox-primitive:1.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/uncontrollable:7.2.1.yarnlock +mgmt_services/cost-mgmt:koku-ui/underscore:1.8.3.yarnlock mgmt_services/cost-mgmt:koku-ui/unherit:1.1.3.yarnlock mgmt_services/cost-mgmt:koku-ui/unified:6.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/union-value:1.0.1.yarnlock @@ -1423,8 +1521,11 @@ mgmt_services/cost-mgmt:koku-ui/universalify:0.1.2.yarnlock mgmt_services/cost-mgmt:koku-ui/unpipe:1.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/unpipe:1.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/unset-value:1.0.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/upath:1.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/uri-js:4.4.1.yarnlock mgmt_services/cost-mgmt:koku-ui/urix:0.1.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/url-parse:1.5.1.yarnlock +mgmt_services/cost-mgmt:koku-ui/url-parse:1.5.1.yarnlock mgmt_services/cost-mgmt:koku-ui/url:0.11.0.yarnlock mgmt_services/cost-mgmt:koku-ui/use:3.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/util-deprecate:1.0.2.yarnlock @@ -1434,6 +1535,7 @@ mgmt_services/cost-mgmt:koku-ui/utila:0.4.0.yarnlock mgmt_services/cost-mgmt:koku-ui/utils-merge:1.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/uuid:3.4.0.yarnlock mgmt_services/cost-mgmt:koku-ui/uuid:3.4.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/uuid:3.4.0.yarnlock mgmt_services/cost-mgmt:koku-ui/uuid:8.3.2.yarnlock mgmt_services/cost-mgmt:koku-ui/v8-compile-cache:2.3.0.yarnlock mgmt_services/cost-mgmt:koku-ui/v8-compile-cache:2.3.0.yarnlock @@ -1482,16 +1584,18 @@ mgmt_services/cost-mgmt:koku-ui/warning:4.0.3.yarnlock mgmt_services/cost-mgmt:koku-ui/watchpack:2.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/wbuf:1.7.3.yarnlock mgmt_services/cost-mgmt:koku-ui/wbuf:1.7.3.yarnlock +mgmt_services/cost-mgmt:koku-ui/wcwidth:1.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/webidl-conversions:5.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/webidl-conversions:6.1.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/webpack-cli:4.5.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/webpack-dev-middleware:4.1.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/webpack-dev-server:4.0.0-beta.2.yarnlock +mgmt_services/cost-mgmt:koku-ui/webpack-cli:4.7.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/webpack-dev-middleware:3.7.3.yarnlock +mgmt_services/cost-mgmt:koku-ui/webpack-dev-server:3.11.2.yarnlock +mgmt_services/cost-mgmt:koku-ui/webpack-log:2.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/webpack-log:3.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/webpack-merge:5.7.3.yarnlock mgmt_services/cost-mgmt:koku-ui/webpack-sources:1.4.3.yarnlock mgmt_services/cost-mgmt:koku-ui/webpack-sources:2.2.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/webpack:5.24.4.yarnlock +mgmt_services/cost-mgmt:koku-ui/webpack:5.37.1.yarnlock mgmt_services/cost-mgmt:koku-ui/websocket-driver:0.7.4.yarnlock mgmt_services/cost-mgmt:koku-ui/websocket-driver:0.7.4.yarnlock mgmt_services/cost-mgmt:koku-ui/websocket-extensions:0.1.4.yarnlock @@ -1509,9 +1613,11 @@ mgmt_services/cost-mgmt:koku-ui/window-size:0.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/word-wrap:1.2.3.yarnlock mgmt_services/cost-mgmt:koku-ui/word-wrap:1.2.3.yarnlock mgmt_services/cost-mgmt:koku-ui/wrap-ansi:2.1.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/wrap-ansi:5.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/wrap-ansi:6.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/wrappy:1.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/write-file-atomic:3.0.3.yarnlock +mgmt_services/cost-mgmt:koku-ui/ws:6.2.1.yarnlock mgmt_services/cost-mgmt:koku-ui/ws:7.4.4.yarnlock mgmt_services/cost-mgmt:koku-ui/x-is-string:0.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/xml-name-validator:3.0.0.yarnlock @@ -1523,8 +1629,10 @@ mgmt_services/cost-mgmt:koku-ui/y18n:3.2.2.yarnlock mgmt_services/cost-mgmt:koku-ui/y18n:4.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/yallist:4.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/yargs-parser:20.2.6.yarnlock +mgmt_services/cost-mgmt:koku-ui/yargs-parser:13.1.2.yarnlock mgmt_services/cost-mgmt:koku-ui/yargs-parser:18.1.3.yarnlock mgmt_services/cost-mgmt:koku-ui/yargs-parser:3.2.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/yargs:13.3.2.yarnlock mgmt_services/cost-mgmt:koku-ui/yargs:15.4.1.yarnlock mgmt_services/cost-mgmt:koku-ui/yargs:5.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/yocto-queue:0.1.0.yarnlock diff --git a/package.json b/package.json index 23b25807c..401bb609f 100644 --- a/package.json +++ b/package.json @@ -10,7 +10,7 @@ "scripts": { "build": "yarn build:client", "build:client": "yarn clean && node --max_old_space_size=8192 node_modules/.bin/webpack --mode=production", - "clean": "rimraf public/", + "clean": "rimraf dist/", "lint": "yarn lint:locales && yarn lint:ts", "lint:locales": "node scripts/syncLocales --check", "lint:locales:fix": "node scripts/syncLocales", @@ -20,8 +20,8 @@ "i18n:key:check:notfound": "scripts/utils/i18n_key_tool.py --Xreport-found --json-file src/locales/en.json --search-path src --exclude-file scripts/utils/i18n_excludes", "i18n:key:check:duplicates": "scripts/utils/i18n_key_tool.py --find-duplicates --Xreport-found --Xreport-not-found --json-file src/locales/en.json --search-path src --exclude-file scripts/utils/i18n_excludes", "i18n:key:check:excludes": "scripts/utils/i18n_key_tool.py --validate-excludes --Xreport-found --Xreport-not-found --json-file src/locales/en.json --search-path src --exclude-file scripts/utils/i18n_excludes", - "start": "NODE_OPTIONS=--max-old-space-size=8192 webpack serve -c ./webpack.config.js", - "start:beta": "BETA_ENV=true yarn start", + "start": "node scripts/start-dev-server.js", + "start:dev": "NODE_OPTIONS=--max-old-space-size=8192 webpack serve -c ./webpack.config.js", "stats": "yarn build:client --profile --json > stats.json", "test": "jest", "manifest:update": "node scripts/createManifest", @@ -77,6 +77,7 @@ "xstate": "4.16.2" }, "devDependencies": { + "@redhat-cloud-services/frontend-components-config-utilities": "^1.1.1", "@testing-library/react": "11.2.5", "@types/enzyme": "3.10.8", "@types/jest": "26.0.20", @@ -99,12 +100,16 @@ "eslint-plugin-react": "^7.22.0", "eslint-plugin-simple-import-sort": "^5.0.3", "git-revision-webpack-plugin": "3.0.6", + "glob": "^7.1.7", "html-loader": "2.0.0", "html-replace-webpack-plugin": "2.6.0", "html-webpack-plugin": "^5.1.0", "i18next-json-sync": "^2.3.1", + "inquirer": "^8.1.0", "jest": "26.6.3", + "jws": "^4.0.0", "mini-css-extract-plugin": "^1.3.7", + "nodesi": "^1.15.0", "null-loader": "4.0.1", "prettier": "^2.2.1", "rimraf": "^3.0.2", @@ -113,12 +118,12 @@ "ts-jest": "26.5.1", "ts-loader": "8.0.17", "tsconfig-paths-webpack-plugin": "^3.3.0", - "webpack": "^5.24.3", - "webpack-cli": "^4.5.0", - "webpack-dev-server": "^4.0.0-beta.2", + "webpack": "^5.37.1", + "webpack-cli": "^4.7.0", + "webpack-dev-server": "^3.11.2", "webpack-log": "^3.0.1" }, "insights": { "appname": "cost-management" } -} +} \ No newline at end of file diff --git a/scripts/start-dev-server.js b/scripts/start-dev-server.js new file mode 100644 index 000000000..11ead9f3c --- /dev/null +++ b/scripts/start-dev-server.js @@ -0,0 +1,39 @@ +/* eslint-disable no-console */ +const inquirer = require('inquirer'); +const { resolve } = require('path'); +const { spawn } = require('child_process'); + +async function setEnv() { + return inquirer + .prompt([ + { type: 'list', name: 'uiEnv', message: 'Which UI environment you want to use?', choices: ['stable', 'beta'] }, + { + type: 'list', + name: 'clouddotEnv', + message: 'Which platform environment you want to use', + choices: ['ci', 'qa', 'prod'], + }, + ]) + .then(answers => { + const { uiEnv, clouddotEnv } = answers; + + process.env.BETA_ENV = uiEnv === 'beta' ? 'true' : 'false'; + process.env.CLOUDOT_ENV = clouddotEnv; + process.env.USE_PROXY = 'true'; + }); +} + +async function run() { + await setEnv(); + const child = spawn('yarn', ['start:dev'], { + stdio: [process.stdout, process.stdout, process.stdout], + cwd: resolve(__dirname, '../'), + }); +} + +try { + run(); +} catch (error) { + console.error(error); + process.exit(1); +} diff --git a/tsconfig.json b/tsconfig.json index 0d4bf2078..6732bdc09 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,7 +1,7 @@ { "compilerOptions": { "baseUrl": "./src", - "outDir": "./public", + "outDir": "./dist", "allowJs": true, "jsx": "react", "target": "es2017", diff --git a/webpack.config.js b/webpack.config.js index 6acebbeac..2b1286455 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -4,13 +4,15 @@ const weblog = require('webpack-log'); const log = weblog({ name: 'wds', }); +const proxy = require('@redhat-cloud-services/frontend-components-config-utilities/proxy'); +const ChunkMapperPlugin = require('@redhat-cloud-services/frontend-components-config-utilities/chunk-mapper'); + const HtmlWebpackPlugin = require('html-webpack-plugin'); const HtmlReplaceWebpackPlugin = require('html-replace-webpack-plugin'); const MiniCssExtractPlugin = require('mini-css-extract-plugin'); const TsconfigPathsPlugin = require('tsconfig-paths-webpack-plugin'); const CopyWebpackPlugin = require('copy-webpack-plugin'); const GitRevisionPlugin = require('git-revision-webpack-plugin'); -const ChunkMapperPlugin = require('./config/chunk-mapper'); const { dependencies, insights } = require('./package.json'); const singletonDeps = [ 'lodash', @@ -32,7 +34,7 @@ const singletonDeps = [ ]; const fileRegEx = /\.(png|woff|woff2|eot|ttf|svg|gif|jpe?g|png)(\?[a-z0-9=.]+)?$/; const srcDir = path.resolve(__dirname, './src'); -const distDir = path.resolve(__dirname, './public/'); +const distDir = path.resolve(__dirname, './dist/'); const betaEnv = process.env.BETA_ENV; const nodeEnv = process.env.NODE_ENV; @@ -43,6 +45,8 @@ const gitRevisionPlugin = new GitRevisionPlugin({ const betaBranches = ['master', 'qa-beta', 'ci-beta', 'prod-beta']; const moduleName = insights.appname.replace(/-(\w)/g, (_, match) => match.toUpperCase()); +const localhost = process.env.PLATFORM === 'linux' ? 'localhost' : 'host.docker.internal'; + // show what files changed since last compilation class WatchRunPlugin { apply(compiler) { @@ -61,10 +65,13 @@ class WatchRunPlugin { module.exports = (_env, argv) => { const gitBranch = process.env.TRAVIS_BRANCH || process.env.BRANCH || gitRevisionPlugin.branch(); const isProduction = nodeEnv === 'production' || argv.mode === 'production'; - const appDeployment = (isProduction && betaBranches.includes(gitBranch)) || betaEnv === 'true' ? 'beta/apps' : 'apps'; + const isBeta = betaEnv === 'true'; + const useLocalRoutes = process.env.USE_LOCAL_ROUTES === 'true'; + const appDeployment = (isProduction && betaBranches.includes(gitBranch)) || isBeta ? 'beta/apps' : 'apps'; const publicPath = `/${appDeployment}/${insights.appname}/`; // Moved multiple entries to index.tsx in order to help speed up webpack const entry = path.join(srcDir, 'index.tsx'); + const useProxy = process.env.USE_PROXY === 'true'; log.info('~~~Using variables~~~'); log.info(`isProduction: ${isProduction}`); @@ -80,6 +87,22 @@ module.exports = (_env, argv) => { modules: false, }; + const routes = { + // For local API development + // '/api/cost-management/v1/': { host: 'http://localhost:8000' }, + // For testing cloud-services-config https://github.com/RedHatInsights/cloud-services-config#testing-your-changes-locally + // '/beta/config': { + // host: `http://${localhost}:8889`, + // }, + }; + if (useLocalRoutes) { + const localKokuPort = process.env.LOCAL_API_PORT ? process.env.LOCAL_API_PORT : '80'; + const localKoku = 'http://' + process.env.LOCAL_API + ':' + localKokuPort; + routes['/api/cost-management/'] = { + host: localKoku, + }; + } + return { stats, mode: isProduction ? 'production' : 'development', @@ -94,7 +117,10 @@ module.exports = (_env, argv) => { rules: [ { test: new RegExp(entry), - loader: path.resolve(__dirname, './config/chrome-render-loader.js'), + loader: path.resolve( + __dirname, + './node_modules/@redhat-cloud-services/frontend-components-config-utilities/chrome-render-loader.js' + ), options: { appName: insights.appname, }, @@ -215,20 +241,35 @@ module.exports = (_env, argv) => { }), ], }, - devServer: { - host: 'localhost', - port: 8002, - historyApiFallback: { - index: `${publicPath}index.html`, - }, - // hot: !isProduction, - hot: false, // default is true, which currently does not work with Insights and federated modules? - firewall: false, - transportMode: 'sockjs', - headers: { - 'Access-Control-Allow-Origin': '*', - 'Access-Control-Allow-Headers': 'Origin, X-Requested-With, Content-Type, Accept, Authorization', - }, - }, + devServer: useProxy + ? proxy({ + betaEnv: process.env.CLOUDOT_ENV, + rootFolder: path.resolve(__dirname), + localChrome: false, + customProxy: undefined, + appName: insights.appname, + publicPath, + https: true, + proxyVerbose: true, + // routesPath: path.resolve(__dirname, './config/spandx.config.js'), + appUrl: [`/${isBeta ? 'beta/' : ''}openshift/cost-management`], + disableFallback: false, + routes, + }) + : { + host: 'localhost', + port: 8002, + historyApiFallback: { + index: `${publicPath}index.html`, + }, + // hot: !isProduction, + hot: false, // default is true, which currently does not work with Insights and federated modules? + firewall: false, + transportMode: 'sockjs', + headers: { + 'Access-Control-Allow-Origin': '*', + 'Access-Control-Allow-Headers': 'Origin, X-Requested-With, Content-Type, Accept, Authorization', + }, + }, }; }; diff --git a/yarn.lock b/yarn.lock index 2b71f8b12..afec3588b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -637,6 +637,11 @@ resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.9.1.tgz#7f554e7368c9ab679a11f4a042ca17149d70cf12" integrity sha512-DvJbbn3dUgMxDnJLH+RZQPnXak1h4ZVYQ7CWiFWjQwBFkVajT4rfw2PdpHLTSTwxrYfnoEXkuBiwkDm6tPMQeA== +"@redhat-cloud-services/frontend-components-config-utilities@^1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@redhat-cloud-services/frontend-components-config-utilities/-/frontend-components-config-utilities-1.1.1.tgz#067fed07c260ebd0afc46bab91b2c8cef8216351" + integrity sha512-0nRMr5PD20fDMp6tCN2zYKSEkP/W8iPVqjk77F5i5HyyPDHSm+BJitk1+GVoriDAltqN27Dvj8vp4veUj5EISg== + "@redhat-cloud-services/frontend-components-notifications@^3.1.0": version "3.1.0" resolved "https://registry.yarnpkg.com/@redhat-cloud-services/frontend-components-notifications/-/frontend-components-notifications-3.1.0.tgz#d0d7ec32e8d88b75a1aef0b2ebb1e12eecf93632" @@ -709,6 +714,11 @@ "@scalprum/core" "^0.0.11" lodash "^4.17.0" +"@schibstedpl/circuit-breaker-js@0.0.2": + version "0.0.2" + resolved "https://registry.yarnpkg.com/@schibstedpl/circuit-breaker-js/-/circuit-breaker-js-0.0.2.tgz#630589cb0ee933c58053aa32d2bdf4104bfae0be" + integrity sha512-82fEbDRVsEAO/XlaFsGb5GKoAMvlfOd/hiNxyPWMvd1ZYJxxHs8hAu4i5Jrlcgpf1sUhhgV53oJSHNwyThsVFQ== + "@sentry/browser@^5.4.0": version "5.30.0" resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-5.30.0.tgz#c28f49d551db3172080caef9f18791a7fd39e3b3" @@ -888,11 +898,24 @@ "@types/estree" "*" "@types/json-schema" "*" -"@types/estree@*", "@types/estree@^0.0.46": +"@types/estree@*": version "0.0.46" resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.46.tgz#0fb6bfbbeabd7a30880504993369c4bf1deab1fe" integrity sha512-laIjwTQaD+5DukBZaygQ79K1Z0jb1bPEMRrkXSLjtCcZm+abyp5YbrqpSLzD42FwWW6gK/aS4NYpJ804nG2brg== +"@types/estree@^0.0.47": + version "0.0.47" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.47.tgz#d7a51db20f0650efec24cd04994f523d93172ed4" + integrity sha512-c5ciR06jK8u9BstrmJyO97m+klJrrhCf9u3rLu3DEAJBirxRqSCvDQoYKmxuYwQI5SZChAWu+tq9oVlGRuzPAg== + +"@types/glob@^7.1.1": + version "7.1.3" + resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.3.tgz#e6ba80f36b7daad2c685acd9266382e68985c183" + integrity sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w== + dependencies: + "@types/minimatch" "*" + "@types/node" "*" + "@types/graceful-fs@^4.1.2": version "4.1.5" resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.5.tgz#21ffba0d98da4350db64891f92a9e5db3cdb4e15" @@ -918,13 +941,6 @@ resolved "https://registry.yarnpkg.com/@types/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz#3c9ee980f1a10d6021ae6632ca3e79ca2ec4fb50" integrity sha512-giAlZwstKbmvMk1OO7WXSj4OZ0keXAcl2TQq4LWHiiPH2ByaH7WeUzng+Qej8UPxxv+8lRTuouo0iaNDBuzIBA== -"@types/http-proxy@^1.17.5": - version "1.17.5" - resolved "https://registry.yarnpkg.com/@types/http-proxy/-/http-proxy-1.17.5.tgz#c203c5e6e9dc6820d27a40eb1e511c70a220423d" - integrity sha512-GNkDE7bTv6Sf8JbV2GksknKOsk7OznNYHSdrtvPJXO0qJ9odZig6IZKUi5RFGi6d1bf6dgIAe4uXi3DBc7069Q== - dependencies: - "@types/node" "*" - "@types/i18next-xhr-backend@1.4.2": version "1.4.2" resolved "https://registry.yarnpkg.com/@types/i18next-xhr-backend/-/i18next-xhr-backend-1.4.2.tgz#e3849b77e77daa1504f02269b1c192dc0e86e507" @@ -981,6 +997,11 @@ resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4= +"@types/minimatch@*": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.4.tgz#f0ec25dbf2f0e4b18647313ac031134ca5b24b21" + integrity sha512-1z8k4wzFnNjVK/tlxvrWuK5WMt6mydWWP7+zvH5eFep4oj+UkrfiJTRtjCeBXNpwaA/FYqqtb4/QS4ianFpIRA== + "@types/node@*": version "14.14.33" resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.33.tgz#9e4f8c64345522e4e8ce77b334a8aaa64e2b6c78" @@ -1071,11 +1092,6 @@ "@types/prop-types" "*" csstype "^3.0.2" -"@types/retry@^0.12.0": - version "0.12.0" - resolved "https://registry.yarnpkg.com/@types/retry/-/retry-0.12.0.tgz#2b35eccfcee7d38cd72ad99232fbd58bffb3c84d" - integrity sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA== - "@types/scheduler@*": version "0.16.1" resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.1.tgz#18845205e86ff0038517aab7a18a62a6b9f71275" @@ -1332,22 +1348,22 @@ "@webassemblyjs/ast" "1.11.0" "@xtuc/long" "4.2.2" -"@webpack-cli/configtest@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@webpack-cli/configtest/-/configtest-1.0.1.tgz#241aecfbdc715eee96bed447ed402e12ec171935" - integrity sha512-B+4uBUYhpzDXmwuo3V9yBH6cISwxEI4J+NO5ggDaGEEHb0osY/R7MzeKc0bHURXQuZjMM4qD+bSJCKIuI3eNBQ== +"@webpack-cli/configtest@^1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@webpack-cli/configtest/-/configtest-1.0.3.tgz#204bcff87cda3ea4810881f7ea96e5f5321b87b9" + integrity sha512-WQs0ep98FXX2XBAfQpRbY0Ma6ADw8JR6xoIkaIiJIzClGOMqVRvPCWqndTxf28DgFopWan0EKtHtg/5W1h0Zkw== -"@webpack-cli/info@^1.2.2": - version "1.2.2" - resolved "https://registry.yarnpkg.com/@webpack-cli/info/-/info-1.2.2.tgz#ef3c0cd947a1fa083e174a59cb74e0b6195c236c" - integrity sha512-5U9kUJHnwU+FhKH4PWGZuBC1hTEPYyxGSL5jjoBI96Gx8qcYJGOikpiIpFoTq8mmgX3im2zAo2wanv/alD74KQ== +"@webpack-cli/info@^1.2.4": + version "1.2.4" + resolved "https://registry.yarnpkg.com/@webpack-cli/info/-/info-1.2.4.tgz#7381fd41c9577b2d8f6c2594fad397ef49ad5573" + integrity sha512-ogE2T4+pLhTTPS/8MM3IjHn0IYplKM4HbVNMCWA9N4NrdPzunwenpCsqKEXyejMfRu6K8mhauIPYf8ZxWG5O6g== dependencies: envinfo "^7.7.3" -"@webpack-cli/serve@^1.3.0": - version "1.3.0" - resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-1.3.0.tgz#2730c770f5f1f132767c63dcaaa4ec28f8c56a6c" - integrity sha512-k2p2VrONcYVX1wRRrf0f3X2VGltLWcv+JzXRBDmvCxGlCeESx4OXw91TsWeKOkp784uNoVQo313vxJFHXPPwfw== +"@webpack-cli/serve@^1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-1.4.0.tgz#f84fd07bcacefe56ce762925798871092f0f228e" + integrity sha512-xgT/HqJ+uLWGX+Mzufusl3cgjAcnqYYskaB7o0vRcwOEfuu6hMzSILQpnIzFMGsTaeaX4Nnekl+6fadLbl1/Vg== "@wojtekmaj/enzyme-adapter-react-17@^0.4.1": version "0.4.1" @@ -1428,18 +1444,15 @@ acorn@^7.1.1, acorn@^7.4.0: resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== -acorn@^8.0.4, acorn@^8.0.5: +acorn@^8.0.5: version "8.1.0" resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.1.0.tgz#52311fd7037ae119cbb134309e901aa46295b3fe" integrity sha512-LWCF/Wn0nfHOmJ9rzQApGnxnvgfROzGilS8936rqN/lfcYkY9MYZzdMqN+2NJ4SlTc+m5HiSa+kNfDtI64dwUA== -aggregate-error@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" - integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== - dependencies: - clean-stack "^2.0.0" - indent-string "^4.0.0" +acorn@^8.2.1: + version "8.2.4" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.2.4.tgz#caba24b08185c3b56e3168e97d15ed17f4d31fd0" + integrity sha512-Ibt84YwBDDA890eDiDCEqcbwvHlBvzzDkU2cGBBDDI1QWT12jTiXIOn2CIw5KK4i6N5Z2HUxwYjzriDyqaqqZg== airbnb-prop-types@^2.16.0: version "2.16.0" @@ -1456,12 +1469,27 @@ airbnb-prop-types@^2.16.0: prop-types-exact "^1.2.0" react-is "^16.13.1" -ajv-keywords@^3.5.2: +ajv-errors@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d" + integrity sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ== + +ajv-keywords@^3.1.0, ajv-keywords@^3.5.2: version "3.5.2" resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== -ajv@^6.10.0, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.12.5: +ajv@^5.1.0: + version "5.5.2" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965" + integrity sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU= + dependencies: + co "^4.6.0" + fast-deep-equal "^1.0.0" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.3.0" + +ajv@^6.1.0, ajv@^6.10.0, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.12.5: version "6.12.6" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== @@ -1481,6 +1509,11 @@ ajv@^7.0.2: require-from-string "^2.0.2" uri-js "^4.2.2" +ansi-colors@^3.0.0: + version "3.2.4" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.4.tgz#e3a3da4bfbae6c86a9c285625de124a234026fbf" + integrity sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA== + ansi-colors@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" @@ -1493,7 +1526,7 @@ ansi-escapes@^4.2.1: dependencies: type-fest "^0.11.0" -ansi-html@^0.0.7: +ansi-html@0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e" integrity sha1-gTWEAhliqenm/QOflA0S9WynhZ4= @@ -1503,12 +1536,17 @@ ansi-regex@^2.0.0: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= +ansi-regex@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" + integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== + ansi-regex@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== -ansi-styles@^3.2.1: +ansi-styles@^3.2.0, ansi-styles@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== @@ -1603,11 +1641,23 @@ array-includes@^3.1.1, array-includes@^3.1.2: get-intrinsic "^1.1.1" is-string "^1.0.5" +array-union@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" + integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= + dependencies: + array-uniq "^1.0.1" + array-union@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== +array-uniq@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" + integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= + array-unique@^0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" @@ -1672,6 +1722,16 @@ astral-regex@^2.0.0: resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== +async-each@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" + integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== + +async-limiter@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" + integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== + async@^2.6.2: version "2.6.3" resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" @@ -1723,7 +1783,7 @@ aws-sign2@~0.7.0: resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= -aws4@^1.8.0: +aws4@^1.6.0, aws4@^1.8.0: version "1.11.0" resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59" integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== @@ -1828,6 +1888,11 @@ balanced-match@^1.0.0: resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= +base64-js@^1.3.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + base@^0.11.1: version "0.11.2" resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" @@ -1858,11 +1923,32 @@ big.js@^5.2.2: resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== +binary-extensions@^1.0.0: + version "1.13.1" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" + integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== + binary-extensions@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== +bindings@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" + integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== + dependencies: + file-uri-to-path "1.0.0" + +bl@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" + integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== + dependencies: + buffer "^5.5.0" + inherits "^2.0.4" + readable-stream "^3.4.0" + body-parser@1.19.0: version "1.19.0" resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" @@ -1904,7 +1990,7 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" -braces@^2.3.1: +braces@^2.3.1, braces@^2.3.2: version "2.3.2" resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== @@ -1957,6 +2043,11 @@ bser@2.1.1: dependencies: node-int64 "^0.4.0" +buffer-equal-constant-time@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819" + integrity sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk= + buffer-from@1.x, buffer-from@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" @@ -1967,6 +2058,14 @@ buffer-indexof@^1.0.0: resolved "https://registry.yarnpkg.com/buffer-indexof/-/buffer-indexof-1.1.1.tgz#52fabcc6a606d1a00302802648ef68f639da268c" integrity sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g== +buffer@^5.5.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" + integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.1.13" + bytes@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" @@ -2033,6 +2132,11 @@ caniuse-lite@^1.0.30001181: resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001197.tgz#47ad15b977d2f32b3ec2fe2b087e0c50443771db" integrity sha512-8aE+sqBqtXz4G8g35Eg/XEaFr2N7rd/VQ6eABGBmNtcB8cN6qNJhMi6oSFy4UWWZgqgL3filHT8Nha4meu3tsw== +capitalize@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/capitalize/-/capitalize-1.0.0.tgz#dc802c580aee101929020d2ca14b4ca8a0ae44be" + integrity sha1-3IAsWAruEBkpAg0soUtMqKCuRL4= + capture-exit@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4" @@ -2062,6 +2166,14 @@ chalk@^4.0.0, chalk@^4.1.0: ansi-styles "^4.1.0" supports-color "^7.1.0" +chalk@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.1.tgz#c80b3fab28bf6371e6863325eee67e618b77e6ad" + integrity sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + char-regex@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" @@ -2082,6 +2194,11 @@ character-reference-invalid@^1.0.0: resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz#083329cda0eae272ab3dbbf37e9a382c13af1560" integrity sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg== +chardet@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" + integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== + cheerio-select-tmp@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/cheerio-select-tmp/-/cheerio-select-tmp-0.1.1.tgz#55bbef02a4771710195ad736d5e346763ca4e646" @@ -2106,7 +2223,7 @@ cheerio@^1.0.0-rc.3: parse5 "^6.0.0" parse5-htmlparser2-tree-adapter "^6.0.0" -"chokidar@>=2.0.0 <4.0.0", chokidar@^3.5.1: +"chokidar@>=2.0.0 <4.0.0": version "3.5.1" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.1.tgz#ee9ce7bbebd2b79f49f304799d5468e31e14e68a" integrity sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw== @@ -2121,6 +2238,25 @@ cheerio@^1.0.0-rc.3: optionalDependencies: fsevents "~2.3.1" +chokidar@^2.1.8: + version "2.1.8" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" + integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg== + dependencies: + anymatch "^2.0.0" + async-each "^1.0.1" + braces "^2.3.2" + glob-parent "^3.1.0" + inherits "^2.0.3" + is-binary-path "^1.0.0" + is-glob "^4.0.0" + normalize-path "^3.0.0" + path-is-absolute "^1.0.0" + readdirp "^2.2.1" + upath "^1.1.1" + optionalDependencies: + fsevents "^1.2.7" + chrome-trace-event@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz#234090ee97c7d4ad1a2c4beae27505deffc608a4" @@ -2160,10 +2296,22 @@ clean-css@^4.2.3: dependencies: source-map "~0.6.0" -clean-stack@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" - integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== +cli-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" + integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== + dependencies: + restore-cursor "^3.1.0" + +cli-spinners@^2.5.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.6.0.tgz#36c7dc98fb6a9a76bd6238ec3f77e2425627e939" + integrity sha512-t+4/y50K/+4xcCRosKkA7W4gTr1MySvLV0q+PxmG7FJ5g+66ChKurYjxBCjHggHH3HA5Hh9cy+lcUGWDqVH+4Q== + +cli-width@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" + integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== cliui@^3.2.0: version "3.2.0" @@ -2174,6 +2322,15 @@ cliui@^3.2.0: strip-ansi "^3.0.1" wrap-ansi "^2.0.0" +cliui@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" + integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== + dependencies: + string-width "^3.1.0" + strip-ansi "^5.2.0" + wrap-ansi "^5.1.0" + cliui@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" @@ -2192,6 +2349,21 @@ clone-deep@^4.0.1: kind-of "^6.0.2" shallow-clone "^3.0.0" +clone@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.3.tgz#298d7e2231660f40c003c2ed3140decf3f53085f" + integrity sha1-KY1+IjFmD0DAA8LtMUDezz9TCF8= + +clone@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.1.tgz#d217d1e961118e3ac9a4b8bba3285553bf647cdb" + integrity sha1-0hfR6WERjjrJpLi7oyhVU79kfNs= + +clone@^1.0.2: + version "1.0.4" + resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" + integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4= + co@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" @@ -2249,7 +2421,7 @@ colorette@^1.2.1, colorette@^1.2.2: resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.2.tgz#cbcc79d5e99caea2dbf10eb3a26fd8b3e6acfa94" integrity sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w== -combined-stream@^1.0.6, combined-stream@~1.0.6: +combined-stream@^1.0.6, combined-stream@~1.0.5, combined-stream@~1.0.6: version "1.0.8" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== @@ -2276,11 +2448,6 @@ comment-parser@1.1.2: resolved "https://registry.yarnpkg.com/comment-parser/-/comment-parser-1.1.2.tgz#e5317d7a2ec22b470dcb54a29b25426c30bf39d8" integrity sha512-AOdq0i8ghZudnYv8RUnHrhTgafUGs61Rdz9jemU5x2lnZwAWyOq7vySo626K59e1fVKH1xSRorJwPVRLSWOoAQ== -commondir@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" - integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= - component-emitter@^1.2.1: version "1.3.0" resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" @@ -2611,7 +2778,7 @@ debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.9: dependencies: ms "2.0.0" -debug@^3.1.1: +debug@^3.1.1, debug@^3.2.6: version "3.2.7" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== @@ -2662,12 +2829,20 @@ deepmerge@^4.2.2: resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== -default-gateway@^6.0.0: - version "6.0.3" - resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-6.0.3.tgz#819494c888053bdb743edbf343d6cdf7f2943a71" - integrity sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg== +default-gateway@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-4.2.0.tgz#167104c7500c2115f6dd69b0a536bb8ed720552b" + integrity sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA== dependencies: - execa "^5.0.0" + execa "^1.0.0" + ip-regex "^2.1.0" + +defaults@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" + integrity sha1-xlYFHpgX2f8I7YgUd/P+QBnz730= + dependencies: + clone "^1.0.2" define-properties@^1.1.3: version "1.1.3" @@ -2698,19 +2873,18 @@ define-property@^2.0.2: is-descriptor "^1.0.2" isobject "^3.0.1" -del@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/del/-/del-6.0.0.tgz#0b40d0332cea743f1614f818be4feb717714c952" - integrity sha512-1shh9DQ23L16oXSZKB2JxpL7iMy2E0S9d517ptA1P8iw0alkPtQcrKH7ru31rYtKwF499HkTu+DRzq3TCKDFRQ== +del@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/del/-/del-4.1.1.tgz#9e8f117222ea44a31ff3a156c049b99052a9f0b4" + integrity sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ== dependencies: - globby "^11.0.1" - graceful-fs "^4.2.4" - is-glob "^4.0.1" - is-path-cwd "^2.2.0" - is-path-inside "^3.0.2" - p-map "^4.0.0" - rimraf "^3.0.2" - slash "^3.0.0" + "@types/glob" "^7.1.1" + globby "^6.1.0" + is-path-cwd "^2.0.0" + is-path-in-cwd "^2.0.0" + p-map "^2.0.0" + pify "^4.0.1" + rimraf "^2.6.3" delaunator@^4.0.0: version "4.0.1" @@ -2909,6 +3083,13 @@ ecc-jsbn@~0.1.1: jsbn "~0.1.0" safer-buffer "^2.1.0" +ecdsa-sig-formatter@1.0.11: + version "1.0.11" + resolved "https://registry.yarnpkg.com/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz#ae0f0fa2d85045ef14a817daa3ce9acd0489e5bf" + integrity sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ== + dependencies: + safe-buffer "^5.0.1" + ee-first@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" @@ -2924,6 +3105,11 @@ emittery@^0.7.1: resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.7.2.tgz#25595908e13af0f5674ab419396e2fb394cdfa82" integrity sha512-A8OG5SR/ij3SsJdWDJdkkSYUjQdCUx6APQXem0SaEePBSRg4eymGYwBkKo1Y6DU+af/Jn2dBQqDBvjnr9Vi8nQ== +emoji-regex@^7.0.1: + version "7.0.3" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" + integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== + emoji-regex@^8.0.0: version "8.0.0" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" @@ -2960,15 +3146,15 @@ enhanced-resolve@^4.0.0: memory-fs "^0.5.0" tapable "^1.0.0" -enhanced-resolve@^5.7.0: - version "5.7.0" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.7.0.tgz#525c5d856680fbd5052de453ac83e32049958b5c" - integrity sha512-6njwt/NsZFUKhM6j9U8hzVyD4E4r0x7NQzhTCbcWOJ0IQjNSAoalWmb0AE51Wn+fwan5qVESWi7t2ToBxs9vrw== +enhanced-resolve@^5.8.0: + version "5.8.2" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.8.2.tgz#15ddc779345cbb73e97c611cd00c01c1e7bf4d8b" + integrity sha512-F27oB3WuHDzvR2DOGNTaYy0D5o0cnrv8TeI482VM4kYgQd/FT9lUQwuNsJ0oOHtBUq7eiW5ytqzp7nBFknL+GA== dependencies: graceful-fs "^4.2.4" tapable "^2.2.0" -enquirer@^2.3.5, enquirer@^2.3.6: +enquirer@^2.3.5: version "2.3.6" resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== @@ -3499,6 +3685,13 @@ events@^3.2.0: resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== +eventsource@^1.0.7: + version "1.1.0" + resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-1.1.0.tgz#00e8ca7c92109e94b0ddf32dac677d841028cfaf" + integrity sha512-VSJjT5oCNrFvCS6igjzPAt5hBzQ2qPBFIbJ03zLI9SE0mxwZpMw6BfJrbFHm1a141AavMEB8JHmBhWAd66PfCg== + dependencies: + original "^1.0.0" + exec-sh@^0.3.2: version "0.3.4" resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.4.tgz#3a018ceb526cc6f6df2bb504b2bfe8e3a4934ec5" @@ -3628,11 +3821,20 @@ extend-shallow@^3.0.0, extend-shallow@^3.0.2: assign-symbols "^1.0.0" is-extendable "^1.0.1" -extend@^3.0.0, extend@~3.0.2: +extend@^3.0.0, extend@~3.0.1, extend@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== +external-editor@^3.0.3: + version "3.1.0" + resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" + integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== + dependencies: + chardet "^0.7.0" + iconv-lite "^0.4.24" + tmp "^0.0.33" + extglob@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" @@ -3657,6 +3859,11 @@ extsprintf@^1.2.0: resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= +fast-deep-equal@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz#c053477817c86b51daa853c81e059b733d023614" + integrity sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ= + fast-deep-equal@^3.1.1: version "3.1.3" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" @@ -3715,6 +3922,13 @@ fb-watchman@^2.0.0: dependencies: bser "2.1.1" +figures@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" + integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== + dependencies: + escape-string-regexp "^1.0.5" + file-entry-cache@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" @@ -3729,6 +3943,11 @@ file-selector@^0.1.8: dependencies: tslib "^2.0.1" +file-uri-to-path@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" + integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== + fill-range@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" @@ -3759,15 +3978,6 @@ finalhandler@~1.1.2: statuses "~1.5.0" unpipe "~1.0.0" -find-cache-dir@^3.3.1: - version "3.3.1" - resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.1.tgz#89b33fad4a4670daa94f855f7fbe31d6d84fe880" - integrity sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ== - dependencies: - commondir "^1.0.1" - make-dir "^3.0.2" - pkg-dir "^4.1.0" - find-up@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" @@ -3783,6 +3993,13 @@ find-up@^2.0.0, find-up@^2.1.0: dependencies: locate-path "^2.0.0" +find-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" + integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== + dependencies: + locate-path "^3.0.0" + find-up@^4.0.0, find-up@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" @@ -3826,7 +4043,7 @@ forever-agent@~0.6.1: resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= -form-data@~2.3.2: +form-data@~2.3.1, form-data@~2.3.2: version "2.3.3" resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== @@ -3852,16 +4069,19 @@ fresh@0.5.2: resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= -fs-monkey@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/fs-monkey/-/fs-monkey-1.0.1.tgz#4a82f36944365e619f4454d9fff106553067b781" - integrity sha512-fcSa+wyTqZa46iWweI7/ZiUfegOZl0SG8+dltIwFXo7+zYU9J9kpS3NB6pZcSlJdhvIwp81Adx2XhZorncxiaA== - fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= +fsevents@^1.2.7: + version "1.2.13" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.13.tgz#f325cb0455592428bcf11b383370ef70e3bfcc38" + integrity sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw== + dependencies: + bindings "^1.5.0" + nan "^2.12.1" + fsevents@^2.1.2, fsevents@~2.3.1: version "2.3.2" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" @@ -3962,6 +4182,14 @@ git-revision-webpack-plugin@3.0.6: resolved "https://registry.yarnpkg.com/git-revision-webpack-plugin/-/git-revision-webpack-plugin-3.0.6.tgz#5dd6c6829fae05b405059dea6195b23875d69d4d" integrity sha512-vW/9dBahGbpKPcccy3xKkHgdWoH/cAPPc3lQw+3edl7b4j29JfNGVrja0a1d8ZoRe4nTN8GCPrF9aBErDnzx5Q== +glob-parent@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" + integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4= + dependencies: + is-glob "^3.1.0" + path-dirname "^1.0.0" + glob-parent@^5.0.0, glob-parent@^5.1.0, glob-parent@^5.1.1, glob-parent@~5.1.0: version "5.1.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" @@ -3974,6 +4202,18 @@ glob-to-regexp@^0.4.1: resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== +glob@^7.0.3, glob@^7.1.7: + version "7.1.7" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90" + integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + glob@^7.0.5, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4: version "7.1.6" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" @@ -4010,7 +4250,29 @@ globby@^11.0.1: merge2 "^1.3.0" slash "^3.0.0" -graceful-fs@^4.1.2, graceful-fs@^4.2.4, graceful-fs@^4.2.6: +globby@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" + integrity sha1-9abXDoOV4hyFj7BInWTfAkJNUGw= + dependencies: + array-union "^1.0.1" + glob "^7.0.3" + object-assign "^4.0.1" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +good-guy-http@1.12.0: + version "1.12.0" + resolved "https://registry.yarnpkg.com/good-guy-http/-/good-guy-http-1.12.0.tgz#431270540d39214e5de7a861fb15b4e3bf714d53" + integrity sha512-h6EKC9fb+Aaq75KSwToHRG3sTH5dJk0IlzrTFWxr7Bs6FoEKSTTQdB65R1Oxe/9ngUdjJRT6ZR3dzV4RS6Ea1Q== + dependencies: + "@schibstedpl/circuit-breaker-js" "0.0.2" + capitalize "^1.0.0" + clone "2.1.1" + request "2.87.0" + underscore "1.8.3" + +graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.2.4: version "4.2.6" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee" integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ== @@ -4030,6 +4292,14 @@ har-schema@^2.0.0: resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= +har-validator@~5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.0.3.tgz#ba402c266194f15956ef15e0fcf242993f6a7dfd" + integrity sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0= + dependencies: + ajv "^5.1.0" + har-schema "^2.0.0" + har-validator@~5.1.3: version "5.1.5" resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd" @@ -4096,7 +4366,7 @@ has@^1.0.3: dependencies: function-bind "^1.1.1" -he@^1.2.0: +he@1.2.0, he@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== @@ -4157,10 +4427,10 @@ html-encoding-sniffer@^2.0.1: dependencies: whatwg-encoding "^1.0.5" -html-entities@^2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.3.2.tgz#760b404685cb1d794e4f4b744332e3b00dcfe488" - integrity sha512-c3Ab/url5ksaT0WyleslpBEthOzWhrjQbg75y7XUsfSzi3Dgzt0l8w5e7DylRn15MTlMMD58dTfzddNS2kcAjQ== +html-entities@^1.3.1: + version "1.4.0" + resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.4.0.tgz#cfbd1b01d2afaf9adca1b10ae7dffab98c71d2dc" + integrity sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA== html-escaper@^2.0.0: version "2.0.2" @@ -4282,18 +4552,17 @@ http-parser-js@>=0.5.1: resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.3.tgz#01d2709c79d41698bb01d4decc5e9da4e4a033d9" integrity sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg== -http-proxy-middleware@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-1.2.0.tgz#87776ea3d4d8dda3dc2594a076787bbc6fe4d995" - integrity sha512-vNw+AxT0+6VTM1rCJw1bpiIaUQ1Ww/vTyIEOUzdW9kNX4yuhhqV3jLSKDJo/Y/lqEIshaKCDujtvEqWiD9Dn6Q== +http-proxy-middleware@0.19.1: + version "0.19.1" + resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz#183c7dc4aa1479150306498c210cdaf96080a43a" + integrity sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q== dependencies: - "@types/http-proxy" "^1.17.5" - http-proxy "^1.18.1" - is-glob "^4.0.1" - is-plain-obj "^3.0.0" - micromatch "^4.0.2" + http-proxy "^1.17.0" + is-glob "^4.0.0" + lodash "^4.17.11" + micromatch "^3.1.10" -http-proxy@^1.18.1: +http-proxy@^1.17.0: version "1.18.1" resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549" integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ== @@ -4361,7 +4630,7 @@ i18next@19.8.8: dependencies: "@babel/runtime" "^7.12.0" -iconv-lite@0.4.24: +iconv-lite@0.4.24, iconv-lite@^0.4.24: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== @@ -4373,6 +4642,11 @@ icss-utils@^5.0.0, icss-utils@^5.1.0: resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-5.1.0.tgz#c6be6858abd013d768e98366ae47e25d5887b1ae" integrity sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA== +ieee754@^1.1.13: + version "1.2.1" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + ignore@^3.3.6: version "3.3.10" resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043" @@ -4396,6 +4670,14 @@ import-fresh@^3.0.0, import-fresh@^3.2.1: parent-module "^1.0.0" resolve-from "^4.0.0" +import-local@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d" + integrity sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ== + dependencies: + pkg-dir "^3.0.0" + resolve-cwd "^2.0.0" + import-local@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.0.2.tgz#a8cfd0431d1de4a2199703d003e3e62364fa6db6" @@ -4409,11 +4691,6 @@ imurmurhash@^0.1.4: resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= -indent-string@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" - integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== - indexes-of@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" @@ -4427,7 +4704,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@2.0.4, inherits@^2.0.0, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.3: +inherits@2, inherits@2.0.4, inherits@^2.0.0, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -4444,15 +4721,33 @@ inline-style-prefixer@^5.1.0: dependencies: css-in-js-utils "^2.0.0" -internal-ip@^6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/internal-ip/-/internal-ip-6.2.0.tgz#d5541e79716e406b74ac6b07b856ef18dc1621c1" - integrity sha512-D8WGsR6yDt8uq7vDMu7mjcR+yRMm3dW8yufyChmszWRjcSHuxLBkR3GdS2HZAjodsaGuCvXeEJpueisXJULghg== +inquirer@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-8.1.0.tgz#68ce5ce5376cf0e89765c993d8b7c1e62e184d69" + integrity sha512-1nKYPoalt1vMBfCMtpomsUc32wmOoWXAoq3kM/5iTfxyQ2f/BxjixQpC+mbZ7BI0JUXHED4/XPXekDVtJNpXYw== + dependencies: + ansi-escapes "^4.2.1" + chalk "^4.1.1" + cli-cursor "^3.1.0" + cli-width "^3.0.0" + external-editor "^3.0.3" + figures "^3.0.0" + lodash "^4.17.21" + mute-stream "0.0.8" + ora "^5.3.0" + run-async "^2.4.0" + rxjs "^6.6.6" + string-width "^4.1.0" + strip-ansi "^6.0.0" + through "^2.3.6" + +internal-ip@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/internal-ip/-/internal-ip-4.3.0.tgz#845452baad9d2ca3b69c635a137acb9a0dad0907" + integrity sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg== dependencies: - default-gateway "^6.0.0" - ipaddr.js "^1.9.1" - is-ip "^3.1.0" - p-event "^4.2.0" + default-gateway "^4.2.0" + ipaddr.js "^1.9.0" internal-slot@^1.0.3: version "1.0.3" @@ -4480,26 +4775,21 @@ invert-kv@^1.0.0: resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" integrity sha1-EEqOSqym09jNFXqO+L+rLXo//bY= -ip-regex@^4.0.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-4.3.0.tgz#687275ab0f57fa76978ff8f4dddc8a23d5990db5" - integrity sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q== +ip-regex@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" + integrity sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk= -ip@^1.1.0: +ip@^1.1.0, ip@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= -ipaddr.js@1.9.1, ipaddr.js@^1.9.1: +ipaddr.js@1.9.1, ipaddr.js@^1.9.0: version "1.9.1" resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== -ipaddr.js@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-2.0.0.tgz#77ccccc8063ae71ab65c55f21b090698e763fc6e" - integrity sha512-S54H9mIj0rbxRIyrDMEuuER86LdlgUg9FSeZ8duQb6CUG2iRrA36MYVQBSprTF/ZeAwvyQ5mDGuNvIPM0BIl3w== - is-absolute-url@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-3.0.3.tgz#96c6a22b6a23929b11ea0afb1836c36ad4a5d698" @@ -4549,6 +4839,13 @@ is-bigint@^1.0.1: resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.1.tgz#6923051dfcbc764278540b9ce0e6b3213aa5ebc2" integrity sha512-J0ELF4yHFxHy0cmSxZuheDOz2luOdVvqjwmEcj8H/L1JHeuEDSDbeRP+Dk9kFVk5RTFzbucJ2Kb9F7ixY2QaCg== +is-binary-path@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" + integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg= + dependencies: + binary-extensions "^1.0.0" + is-binary-path@~2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" @@ -4646,7 +4943,7 @@ is-extendable@^1.0.1: dependencies: is-plain-object "^2.0.4" -is-extglob@^2.1.1: +is-extglob@^2.1.0, is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= @@ -4658,6 +4955,11 @@ is-fullwidth-code-point@^1.0.0: dependencies: number-is-nan "^1.0.0" +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= + is-fullwidth-code-point@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" @@ -4668,6 +4970,13 @@ is-generator-fn@^2.0.0: resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== +is-glob@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" + integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo= + dependencies: + is-extglob "^2.1.0" + is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" @@ -4680,12 +4989,10 @@ is-hexadecimal@^1.0.0: resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz#cc35c97588da4bd49a8eedd6bc4082d44dcb23a7" integrity sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw== -is-ip@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/is-ip/-/is-ip-3.1.0.tgz#2ae5ddfafaf05cb8008a62093cf29734f657c5d8" - integrity sha512-35vd5necO7IitFPjd/YBeqwWnyDWbuLH9ZXQdMfDA8TEo7pv5X8yfrvVO3xbJbLUlERCMvf6X0hTUamQxCYJ9Q== - dependencies: - ip-regex "^4.0.0" +is-interactive@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" + integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== is-negative-zero@^2.0.1: version "2.0.1" @@ -4709,26 +5016,30 @@ is-number@^7.0.0: resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== -is-path-cwd@^2.2.0: +is-path-cwd@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb" integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ== -is-path-inside@^3.0.2: - version "3.0.3" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" - integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== +is-path-in-cwd@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz#bfe2dca26c69f397265a4009963602935a053acb" + integrity sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ== + dependencies: + is-path-inside "^2.1.0" + +is-path-inside@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-2.1.0.tgz#7c9810587d659a40d27bcdb4d5616eab059494b2" + integrity sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg== + dependencies: + path-is-inside "^1.0.2" is-plain-obj@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= -is-plain-obj@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-3.0.0.tgz#af6f2ea14ac5a646183a5bbdb5baabbc156ad9d7" - integrity sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA== - is-plain-object@^2.0.3, is-plain-object@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" @@ -4786,6 +5097,11 @@ is-typedarray@^1.0.0, is-typedarray@~1.0.0: resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= +is-unicode-supported@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" + integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== + is-utf8@^0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" @@ -4806,7 +5122,12 @@ is-word-character@^1.0.0: resolved "https://registry.yarnpkg.com/is-word-character/-/is-word-character-1.0.4.tgz#ce0e73216f98599060592f62ff31354ddbeb0230" integrity sha512-5SMO8RVennx3nZrqtKwCGyyetPE9VDba5ugvKLaD4KopPG5kR4mQ7tNt/r7feL5yt5h3lpuBbIUmCOG2eSzXHA== -is-wsl@^2.1.1, is-wsl@^2.2.0: +is-wsl@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" + integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= + +is-wsl@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== @@ -5339,6 +5660,11 @@ json-parse-even-better-errors@^2.3.0: resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== +json-schema-traverse@^0.3.0: + version "0.3.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340" + integrity sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A= + json-schema-traverse@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" @@ -5371,6 +5697,11 @@ json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1: resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= +json3@^3.3.3: + version "3.3.3" + resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.3.tgz#7fc10e375fc5ae42c4705a5cc0aa6f62be305b81" + integrity sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA== + json5@2.x, json5@^2.1.2: version "2.2.0" resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.0.tgz#2dfefe720c6ba525d9ebd909950f0515316c89a3" @@ -5408,6 +5739,23 @@ jsprim@^1.2.2: array-includes "^3.1.2" object.assign "^4.1.2" +jwa@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/jwa/-/jwa-2.0.0.tgz#a7e9c3f29dae94027ebcaf49975c9345593410fc" + integrity sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA== + dependencies: + buffer-equal-constant-time "1.0.1" + ecdsa-sig-formatter "1.0.11" + safe-buffer "^5.0.1" + +jws@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jws/-/jws-4.0.0.tgz#2d4e8cf6a318ffaa12615e9dec7e86e6c97310f4" + integrity sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg== + dependencies: + jwa "^2.0.0" + safe-buffer "^5.0.1" + killable@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/killable/-/killable-1.0.1.tgz#4c8ce441187a061c7474fb87ca08e2a638194892" @@ -5535,6 +5883,14 @@ locate-path@^2.0.0: p-locate "^2.0.0" path-exists "^3.0.0" +locate-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" + integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== + dependencies: + p-locate "^3.0.0" + path-exists "^3.0.0" + locate-path@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" @@ -5572,11 +5928,24 @@ lodash.sortby@^4.7.0: resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg= -lodash@4.x, lodash@^4.17.0, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20: +lodash@4.x, lodash@^4.17.0, lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== +log-symbols@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" + integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== + dependencies: + chalk "^4.1.0" + is-unicode-supported "^0.1.0" + +loglevel@^1.6.8: + version "1.7.1" + resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.7.1.tgz#005fde2f5e6e47068f935ff28573e125ef72f197" + integrity sha512-Hesni4s5UkWkwCGJMQGAh71PaLUmKFM60dHvq0zi/vDhhrzuk+4GgNbTXJ12YYQJn6ZKBDNIjYcuQGKudvqrIw== + loglevelnext@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/loglevelnext/-/loglevelnext-3.0.1.tgz#e3e4659c4061c09264f6812c33586dc55a009a04" @@ -5608,7 +5977,7 @@ lz-string@^1.4.4: resolved "https://registry.yarnpkg.com/lz-string/-/lz-string-1.4.4.tgz#c0d8eaf36059f705796e1e344811cf4c498d3a26" integrity sha1-wNjq82BZ9wV5bh40SBHPTEmNOiY= -make-dir@^3.0.0, make-dir@^3.0.2: +make-dir@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== @@ -5627,13 +5996,6 @@ makeerror@1.0.x: dependencies: tmpl "1.0.x" -map-age-cleaner@^0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a" - integrity sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w== - dependencies: - p-defer "^1.0.0" - map-cache@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" @@ -5656,20 +6018,13 @@ media-typer@0.3.0: resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= -mem@^8.0.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/mem/-/mem-8.1.0.tgz#445e47827fb757a4e5f35b0a6a62743cbfdc0a0d" - integrity sha512-FIkgXo0kTi3XpvaznV5Muk6Y6w8SkdmRXcY7ZLonQesuYezp59UooLxAVBcGuN6PH2tXN84mR3vyzSc6oSMUfA== - dependencies: - map-age-cleaner "^0.1.3" - mimic-fn "^3.1.0" - -memfs@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/memfs/-/memfs-3.2.0.tgz#f9438e622b5acd1daa8a4ae160c496fdd1325b26" - integrity sha512-f/xxz2TpdKv6uDn6GtHee8ivFyxwxmPuXatBb1FBwxYNuVpbM3k/Y1Z+vC0mH/dIXXrukYfe3qe5J32Dfjg93A== +memory-fs@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" + integrity sha1-OpoguEYlI+RHz7x+i7gO1me/xVI= dependencies: - fs-monkey "1.0.1" + errno "^0.1.3" + readable-stream "^2.0.1" memory-fs@^0.5.0: version "0.5.0" @@ -5699,7 +6054,7 @@ methods@~1.1.2: resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= -micromatch@^3.1.4: +micromatch@^3.1.10, micromatch@^3.1.4: version "3.1.10" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== @@ -5731,7 +6086,7 @@ mime-db@1.46.0, "mime-db@>= 1.43.0 < 2": resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.46.0.tgz#6267748a7f799594de3cbc8cde91def349661cee" integrity sha512-svXaP8UQRZ5K7or+ZmfNhg2xX3yKDMUzqadsSqi4NCH/KomcH75MAMYAGVlvXn4+b/xOPhS3I2uHKRUzvjY7BQ== -mime-types@^2.1.12, mime-types@^2.1.27, mime-types@^2.1.28, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24: +mime-types@^2.1.12, mime-types@^2.1.27, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24: version "2.1.29" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.29.tgz#1d4ab77da64b91f5f72489df29236563754bb1b2" integrity sha512-Y/jMt/S5sR9OaqteJtslsFZKWOIIqMACsJSiHghlCAyhf7jfVYjKBmLiX8OgpWeW+fjJ2b+Az69aPFPkUOY6xQ== @@ -5743,16 +6098,16 @@ mime@1.6.0: resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== +mime@^2.4.4: + version "2.5.2" + resolved "https://registry.yarnpkg.com/mime/-/mime-2.5.2.tgz#6e3dc6cc2b9510643830e5f19d5cb753da5eeabe" + integrity sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg== + mimic-fn@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== -mimic-fn@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-3.1.0.tgz#65755145bbf3e36954b949c16450427451d5ca74" - integrity sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ== - mini-create-react-context@^0.4.0: version "0.4.1" resolved "https://registry.yarnpkg.com/mini-create-react-context/-/mini-create-react-context-0.4.1.tgz#072171561bfdc922da08a60c2197a497cc2d1d5e" @@ -5800,7 +6155,7 @@ mkdirp@1.x: resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== -mkdirp@^0.5.5: +mkdirp@^0.5.1, mkdirp@^0.5.5: version "0.5.5" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== @@ -5845,6 +6200,16 @@ multicast-dns@^6.0.1: dns-packet "^1.3.1" thunky "^1.0.2" +mute-stream@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" + integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== + +nan@^2.12.1: + version "2.14.2" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.2.tgz#f5376400695168f4cc694ac9393d0c9585eeea19" + integrity sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ== + nanoid@^2.0.3: version "2.1.11" resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-2.1.11.tgz#ec24b8a758d591561531b4176a01e3ab4f0f0280" @@ -5947,6 +6312,15 @@ node-releases@^1.1.70: resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.71.tgz#cb1334b179896b1c89ecfdd4b725fb7bbdfc7dbb" integrity sha512-zR6HoT6LrLCRBwukmrVbHv0EpEQjksO6GmFcZQQuCAy139BEsoVKPYnf3jongYW83fAa1torLGYwxxky/p28sg== +nodesi@^1.15.0: + version "1.15.0" + resolved "https://registry.yarnpkg.com/nodesi/-/nodesi-1.15.0.tgz#eb042dec9cb8cbf1578cbae546bf3a74e0ccfb8b" + integrity sha512-R0Cn+YeAH3ooz27AibJYAA3KWqSs9y+4q28nChPTv+eCGOovDBjpBDy+WRMhtyLGJAuhO+OqXJ0hCbbs+XRyZg== + dependencies: + clone "1.0.3" + good-guy-http "1.12.0" + he "1.2.0" + normalize-package-data@^2.3.2, normalize-package-data@^2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" @@ -6015,12 +6389,17 @@ nwsapi@^2.2.0: resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7" integrity sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ== +oauth-sign@~0.8.2: + version "0.8.2" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" + integrity sha1-Rqarfwrq2N6unsBWV4C31O/rnUM= + oauth-sign@~0.9.0: version "0.9.0" resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== -object-assign@^4.1.1: +object-assign@^4.0.1, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= @@ -6137,13 +6516,12 @@ onetime@^5.1.0, onetime@^5.1.2: dependencies: mimic-fn "^2.1.0" -open@^7.4.2: - version "7.4.2" - resolved "https://registry.yarnpkg.com/open/-/open-7.4.2.tgz#b8147e26dcf3e426316c730089fd71edd29c2321" - integrity sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q== +opn@^5.5.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/opn/-/opn-5.5.0.tgz#fc7164fab56d235904c51c3b27da6758ca3b9bfc" + integrity sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA== dependencies: - is-docker "^2.0.0" - is-wsl "^2.1.1" + is-wsl "^1.1.0" optionator@^0.8.1: version "0.8.3" @@ -6169,6 +6547,28 @@ optionator@^0.9.1: type-check "^0.4.0" word-wrap "^1.2.3" +ora@^5.3.0: + version "5.4.0" + resolved "https://registry.yarnpkg.com/ora/-/ora-5.4.0.tgz#42eda4855835b9cd14d33864c97a3c95a3f56bf4" + integrity sha512-1StwyXQGoU6gdjYkyVcqOLnVlbKj+6yPNNOxJVgpt9t4eksKjiriiHuxktLYkgllwk+D6MbC4ihH84L1udRXPg== + dependencies: + bl "^4.1.0" + chalk "^4.1.0" + cli-cursor "^3.1.0" + cli-spinners "^2.5.0" + is-interactive "^1.0.0" + is-unicode-supported "^0.1.0" + log-symbols "^4.1.0" + strip-ansi "^6.0.0" + wcwidth "^1.0.1" + +original@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/original/-/original-1.0.2.tgz#e442a61cffe1c5fd20a65f3261c26663b303f25f" + integrity sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg== + dependencies: + url-parse "^1.4.3" + os-locale@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9" @@ -6176,23 +6576,16 @@ os-locale@^1.4.0: dependencies: lcid "^1.0.0" -p-defer@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" - integrity sha1-n26xgvbJqozXQwBKfU+WsZaw+ww= +os-tmpdir@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= p-each-series@^2.1.0: version "2.2.0" resolved "https://registry.yarnpkg.com/p-each-series/-/p-each-series-2.2.0.tgz#105ab0357ce72b202a8a8b94933672657b5e2a9a" integrity sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA== -p-event@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/p-event/-/p-event-4.2.0.tgz#af4b049c8acd91ae81083ebd1e6f5cae2044c1b5" - integrity sha512-KXatOjCRXXkSePPb1Nbi0p0m+gQAwdlbhi4wQKJPI1HsMQS9g+Sqp2o+QHziPr7eYJyOZet836KoHEVM1mwOrQ== - dependencies: - p-timeout "^3.1.0" - p-finally@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" @@ -6205,7 +6598,7 @@ p-limit@^1.1.0: dependencies: p-try "^1.0.0" -p-limit@^2.2.0: +p-limit@^2.0.0, p-limit@^2.2.0: version "2.3.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== @@ -6226,6 +6619,13 @@ p-locate@^2.0.0: dependencies: p-limit "^1.1.0" +p-locate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" + integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== + dependencies: + p-limit "^2.0.0" + p-locate@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" @@ -6233,28 +6633,18 @@ p-locate@^4.1.0: dependencies: p-limit "^2.2.0" -p-map@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" - integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== - dependencies: - aggregate-error "^3.0.0" +p-map@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" + integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== -p-retry@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-4.5.0.tgz#6685336b3672f9ee8174d3769a660cb5e488521d" - integrity sha512-5Hwh4aVQSu6BEP+w2zKlVXtFAaYQe1qWuVADSgoeVlLjwe/Q/AMSoRR4MDeaAfu8llT+YNbEijWu/YF3m6avkg== +p-retry@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-3.0.1.tgz#316b4c8893e2c8dc1cfa891f406c4b422bebf328" + integrity sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w== dependencies: - "@types/retry" "^0.12.0" retry "^0.12.0" -p-timeout@^3.1.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-3.2.0.tgz#c7e17abc971d2a7962ef83626b35d635acf23dfe" - integrity sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg== - dependencies: - p-finally "^1.0.0" - p-try@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" @@ -6351,6 +6741,11 @@ pascalcase@^0.1.1: resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= +path-dirname@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" + integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= + path-exists@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" @@ -6373,6 +6768,11 @@ path-is-absolute@^1.0.0: resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= +path-is-inside@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" + integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= + path-key@^2.0.0, path-key@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" @@ -6436,6 +6836,11 @@ pify@^2.0.0: resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= +pify@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" + integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== + pinkie-promise@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" @@ -6462,7 +6867,14 @@ pkg-dir@^2.0.0: dependencies: find-up "^2.1.0" -pkg-dir@^4.1.0, pkg-dir@^4.2.0: +pkg-dir@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" + integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw== + dependencies: + find-up "^3.0.0" + +pkg-dir@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== @@ -6474,7 +6886,7 @@ popper.js@^1.16.0: resolved "https://registry.yarnpkg.com/popper.js/-/popper.js-1.16.1.tgz#2a223cb3dc7b6213d740e40372be40de43e65b1b" integrity sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ== -portfinder@^1.0.28: +portfinder@^1.0.26: version "1.0.28" resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.28.tgz#67c4622852bd5374dd1dd900f779f53462fac778" integrity sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA== @@ -6664,6 +7076,11 @@ punycode@1.3.2: resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= +punycode@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= + punycode@^2.1.0, punycode@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" @@ -6679,7 +7096,7 @@ qs@6.9.6: resolved "https://registry.yarnpkg.com/qs/-/qs-6.9.6.tgz#26ed3c8243a431b2924aca84cc90471f35d5a0ee" integrity sha512-TIRk4aqYLNoJUbd+g2lEdz5kLWIuTMRagAXxl78Q0RiVjAOugHmeKNGdd3cwo/ktpf9aL9epCfFqWDEKysUlLQ== -qs@~6.5.2: +qs@~6.5.1, qs@~6.5.2: version "6.5.2" resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== @@ -6689,6 +7106,11 @@ querystring@0.2.0: resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= +querystringify@^2.1.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" + integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== + queue-microtask@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.2.tgz#abf64491e6ecf0f38a6502403d4cda04f372dfd3" @@ -6973,7 +7395,7 @@ read-pkg@^5.2.0: parse-json "^5.0.0" type-fest "^0.6.0" -readable-stream@^2.0.1: +readable-stream@^2.0.1, readable-stream@^2.0.2: version "2.3.7" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== @@ -6986,7 +7408,7 @@ readable-stream@^2.0.1: string_decoder "~1.1.1" util-deprecate "~1.0.1" -readable-stream@^3.0.6, readable-stream@^3.1.1: +readable-stream@^3.0.6, readable-stream@^3.1.1, readable-stream@^3.4.0: version "3.6.0" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== @@ -6995,6 +7417,15 @@ readable-stream@^3.0.6, readable-stream@^3.1.1: string_decoder "^1.1.1" util-deprecate "^1.0.1" +readdirp@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" + integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ== + dependencies: + graceful-fs "^4.1.11" + micromatch "^3.1.10" + readable-stream "^2.0.2" + readdirp@~3.5.0: version "3.5.0" resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.5.0.tgz#9ba74c019b15d365278d2e91bb8c48d7b4d42c9e" @@ -7131,6 +7562,32 @@ request-promise-native@^1.0.9: stealthy-require "^1.1.1" tough-cookie "^2.3.3" +request@2.87.0: + version "2.87.0" + resolved "https://registry.yarnpkg.com/request/-/request-2.87.0.tgz#32f00235cd08d482b4d0d68db93a829c0ed5756e" + integrity sha512-fcogkm7Az5bsS6Sl0sibkbhcKsnyon/jV1kF3ajGmF0c8HrttdKTPRT9hieOaQHA5HEq6r8OyWOo/o781C1tNw== + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.6.0" + caseless "~0.12.0" + combined-stream "~1.0.5" + extend "~3.0.1" + forever-agent "~0.6.1" + form-data "~2.3.1" + har-validator "~5.0.3" + http-signature "~1.2.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.17" + oauth-sign "~0.8.2" + performance-now "^2.1.0" + qs "~6.5.1" + safe-buffer "^5.1.1" + tough-cookie "~2.3.3" + tunnel-agent "^0.6.0" + uuid "^3.1.0" + request@^2.88.2: version "2.88.2" resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" @@ -7182,6 +7639,13 @@ requires-port@^1.0.0: resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= +resolve-cwd@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" + integrity sha1-AKn3OHVW4nA46uIyyqNypqWbZlo= + dependencies: + resolve-from "^3.0.0" + resolve-cwd@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" @@ -7189,6 +7653,11 @@ resolve-cwd@^3.0.0: dependencies: resolve-from "^5.0.0" +resolve-from@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" + integrity sha1-six699nWiBvItuZTM17rywoYh0g= + resolve-from@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" @@ -7217,6 +7686,14 @@ resolve@^1.10.0, resolve@^1.13.1, resolve@^1.17.0, resolve@^1.18.1, resolve@^1.3 is-core-module "^2.2.0" path-parse "^1.0.6" +restore-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" + integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== + dependencies: + onetime "^5.1.0" + signal-exit "^3.0.2" + ret@~0.1.10: version "0.1.15" resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" @@ -7232,6 +7709,13 @@ reusify@^1.0.4: resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== +rimraf@^2.6.3: + version "2.7.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== + dependencies: + glob "^7.1.3" + rimraf@^3.0.0, rimraf@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" @@ -7252,6 +7736,11 @@ rsvp@^4.8.4: resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734" integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA== +run-async@^2.4.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" + integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== + run-parallel@^1.1.9: version "1.2.0" resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" @@ -7259,12 +7748,19 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" +rxjs@^6.6.6: + version "6.6.7" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.7.tgz#90ac018acabf491bf65044235d5863c4dab804c9" + integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ== + dependencies: + tslib "^1.9.0" + safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== -safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.2, safe-buffer@~5.2.0: +safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== @@ -7347,6 +7843,15 @@ scheduler@^0.20.1: loose-envify "^1.1.0" object-assign "^4.1.1" +schema-utils@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770" + integrity sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g== + dependencies: + ajv "^6.1.0" + ajv-errors "^1.0.0" + ajv-keywords "^3.1.0" + schema-utils@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.0.0.tgz#67502f6aa2b66a2d4032b4279a2944978a0913ef" @@ -7565,6 +8070,18 @@ snapdragon@^0.8.1: source-map-resolve "^0.5.0" use "^3.1.0" +sockjs-client@^1.5.0: + version "1.5.1" + resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.5.1.tgz#256908f6d5adfb94dabbdbd02c66362cca0f9ea6" + integrity sha512-VnVAb663fosipI/m6pqRXakEOw7nvd7TUgdr3PlR/8V2I95QIdwT8L4nMxhyU8SmDBHYXU1TOElaKOmKLfYzeQ== + dependencies: + debug "^3.2.6" + eventsource "^1.0.7" + faye-websocket "^0.11.3" + inherits "^2.0.4" + json3 "^3.3.3" + url-parse "^1.5.1" + sockjs@^0.3.21: version "0.3.21" resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.21.tgz#b34ffb98e796930b60a0cfa11904d6a339a7d417" @@ -7746,6 +8263,15 @@ string-width@^1.0.1, string-width@^1.0.2: is-fullwidth-code-point "^1.0.0" strip-ansi "^3.0.0" +string-width@^3.0.0, string-width@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" + integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== + dependencies: + emoji-regex "^7.0.1" + is-fullwidth-code-point "^2.0.0" + strip-ansi "^5.1.0" + string-width@^4.1.0, string-width@^4.2.0: version "4.2.2" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.2.tgz#dafd4f9559a7585cfba529c6a0a4f73488ebd4c5" @@ -7814,6 +8340,13 @@ strip-ansi@^3.0.0, strip-ansi@^3.0.1: dependencies: ansi-regex "^2.0.0" +strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" + integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== + dependencies: + ansi-regex "^4.1.0" + strip-ansi@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" @@ -7860,6 +8393,13 @@ supports-color@^5.3.0: dependencies: has-flag "^3.0.0" +supports-color@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" + integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== + dependencies: + has-flag "^3.0.0" + supports-color@^7.0.0, supports-color@^7.1.0: version "7.2.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" @@ -7967,6 +8507,11 @@ throat@^5.0.0: resolved "https://registry.yarnpkg.com/throat/-/throat-5.0.0.tgz#c5199235803aad18754a667d659b5e72ce16764b" integrity sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA== +through@^2.3.6: + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= + thunky@^1.0.2: version "1.1.0" resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d" @@ -7989,6 +8534,13 @@ tippy.js@5.1.2: dependencies: popper.js "^1.16.0" +tmp@^0.0.33: + version "0.0.33" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== + dependencies: + os-tmpdir "~1.0.2" + tmpl@1.0.x: version "1.0.4" resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" @@ -8053,6 +8605,13 @@ tough-cookie@^4.0.0: punycode "^2.1.1" universalify "^0.1.2" +tough-cookie@~2.3.3: + version "2.3.4" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.4.tgz#ec60cee38ac675063ffc97a5c18970578ee83655" + integrity sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA== + dependencies: + punycode "^1.4.1" + tr46@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/tr46/-/tr46-2.0.2.tgz#03273586def1595ae08fedb38d7733cee91d2479" @@ -8235,6 +8794,11 @@ uncontrollable@^7.0.0: invariant "^2.2.4" react-lifecycles-compat "^3.0.4" +underscore@1.8.3: + version "1.8.3" + resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.8.3.tgz#4f3fb53b106e6097fcf9cb4109f2a5e9bdfa5022" + integrity sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI= + unherit@^1.0.4: version "1.1.3" resolved "https://registry.yarnpkg.com/unherit/-/unherit-1.1.3.tgz#6c9b503f2b41b262330c80e91c8614abdaa69c22" @@ -8319,6 +8883,11 @@ unset-value@^1.0.0: has-value "^0.3.1" isobject "^3.0.0" +upath@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" + integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== + uri-js@^4.2.2: version "4.4.1" resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" @@ -8331,6 +8900,14 @@ urix@^0.1.0: resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= +url-parse@^1.4.3, url-parse@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.1.tgz#d5fa9890af8a5e1f274a2c98376510f6425f6e3b" + integrity sha512-HOfCOUJt7iSYzEx/UqgtwKRMC6EU91NFhsCHMv9oM03VJcVo2Qrp8T8kI9D7amFf1cu+/3CEhgb3rF9zL7k85Q== + dependencies: + querystringify "^2.1.1" + requires-port "^1.0.0" + url@^0.11.0: version "0.11.0" resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" @@ -8359,7 +8936,7 @@ utils-merge@1.0.1: resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= -uuid@^3.3.2, uuid@^3.4.0: +uuid@^3.1.0, uuid@^3.3.2, uuid@^3.4.0: version "3.4.0" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== @@ -8706,6 +9283,13 @@ wbuf@^1.1.0, wbuf@^1.7.3: dependencies: minimalistic-assert "^1.0.0" +wcwidth@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" + integrity sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g= + dependencies: + defaults "^1.0.3" + webidl-conversions@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-5.0.0.tgz#ae59c8a00b121543a2acc65c0434f57b0fc11aff" @@ -8716,18 +9300,17 @@ webidl-conversions@^6.1.0: resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514" integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w== -webpack-cli@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-4.5.0.tgz#b5213b84adf6e1f5de6391334c9fa53a48850466" - integrity sha512-wXg/ef6Ibstl2f50mnkcHblRPN/P9J4Nlod5Hg9HGFgSeF8rsqDGHJeVe4aR26q9l62TUJi6vmvC2Qz96YJw1Q== +webpack-cli@^4.7.0: + version "4.7.0" + resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-4.7.0.tgz#3195a777f1f802ecda732f6c95d24c0004bc5a35" + integrity sha512-7bKr9182/sGfjFm+xdZSwgQuFjgEcy0iCTIBxRUeteJ2Kr8/Wz0qNJX+jw60LU36jApt4nmMkep6+W5AKhok6g== dependencies: "@discoveryjs/json-ext" "^0.5.0" - "@webpack-cli/configtest" "^1.0.1" - "@webpack-cli/info" "^1.2.2" - "@webpack-cli/serve" "^1.3.0" + "@webpack-cli/configtest" "^1.0.3" + "@webpack-cli/info" "^1.2.4" + "@webpack-cli/serve" "^1.4.0" colorette "^1.2.1" commander "^7.0.0" - enquirer "^2.3.6" execa "^5.0.0" fastest-levenshtein "^1.0.12" import-local "^3.0.2" @@ -8736,50 +9319,63 @@ webpack-cli@^4.5.0: v8-compile-cache "^2.2.0" webpack-merge "^5.7.3" -webpack-dev-middleware@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-4.1.0.tgz#f0c1f12ff4cd855b3b5eec89ee0f69bcc5336364" - integrity sha512-mpa/FY+DiBu5+r5JUIyTCYWRfkWgyA3/OOE9lwfzV9S70A4vJYLsVRKj5rMFEsezBroy2FmPyQ8oBRVW8QmK1A== +webpack-dev-middleware@^3.7.2: + version "3.7.3" + resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-3.7.3.tgz#0639372b143262e2b84ab95d3b91a7597061c2c5" + integrity sha512-djelc/zGiz9nZj/U7PTBi2ViorGJXEWo/3ltkPbDyxCXhhEXkW0ce99falaok4TPj+AsxLiXJR0EBOb0zh9fKQ== dependencies: - colorette "^1.2.1" - mem "^8.0.0" - memfs "^3.2.0" - mime-types "^2.1.28" + memory-fs "^0.4.1" + mime "^2.4.4" + mkdirp "^0.5.1" range-parser "^1.2.1" - schema-utils "^3.0.0" + webpack-log "^2.0.0" -webpack-dev-server@^4.0.0-beta.2: - version "4.0.0-beta.2" - resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-4.0.0-beta.2.tgz#0364a5756544da9c077da829016817703db4d5ed" - integrity sha512-kbUAjQg1FLtCoIZ0NdcTZWRBVT1EDajBSvGAiAqQPJxBjsr0N3FQ57kJ/4SrIZPyAajn8kcHctwFsTKPwme1tQ== +webpack-dev-server@^3.11.2: + version "3.11.2" + resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-3.11.2.tgz#695ebced76a4929f0d5de7fd73fafe185fe33708" + integrity sha512-A80BkuHRQfCiNtGBS1EMf2ChTUs0x+B3wGDFmOeT4rmJOHhHTCH2naNxIHhmkr0/UillP4U3yeIyv1pNp+QDLQ== dependencies: - ansi-html "^0.0.7" + ansi-html "0.0.7" bonjour "^3.5.0" - chokidar "^3.5.1" + chokidar "^2.1.8" compression "^1.7.4" connect-history-api-fallback "^1.6.0" - del "^6.0.0" + debug "^4.1.1" + del "^4.1.1" express "^4.17.1" - find-cache-dir "^3.3.1" - graceful-fs "^4.2.6" - html-entities "^2.3.2" - http-proxy-middleware "^1.1.0" - internal-ip "^6.2.0" - ipaddr.js "^2.0.0" + html-entities "^1.3.1" + http-proxy-middleware "0.19.1" + import-local "^2.0.0" + internal-ip "^4.3.0" + ip "^1.1.5" is-absolute-url "^3.0.3" killable "^1.0.1" - open "^7.4.2" - p-retry "^4.5.0" - portfinder "^1.0.28" - schema-utils "^3.0.0" + loglevel "^1.6.8" + opn "^5.5.0" + p-retry "^3.0.1" + portfinder "^1.0.26" + schema-utils "^1.0.0" selfsigned "^1.10.8" + semver "^6.3.0" serve-index "^1.9.1" sockjs "^0.3.21" + sockjs-client "^1.5.0" spdy "^4.0.2" - strip-ansi "^6.0.0" + strip-ansi "^3.0.1" + supports-color "^6.1.0" url "^0.11.0" - webpack-dev-middleware "^4.1.0" - ws "^7.4.4" + webpack-dev-middleware "^3.7.2" + webpack-log "^2.0.0" + ws "^6.2.1" + yargs "^13.3.2" + +webpack-log@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/webpack-log/-/webpack-log-2.0.0.tgz#5b7928e0637593f119d32f6227c1e0ac31e1b47f" + integrity sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg== + dependencies: + ansi-colors "^3.0.0" + uuid "^3.3.2" webpack-log@^3.0.1: version "3.0.1" @@ -8814,20 +9410,20 @@ webpack-sources@^2.1.1: source-list-map "^2.0.1" source-map "^0.6.1" -webpack@^5.24.3: - version "5.24.4" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.24.4.tgz#37d8cf95841dd23c809ea02931294b3455d74a59" - integrity sha512-RXOdxF9hFFFhg47BryCgyFrEyyu7Y/75/uiI2DoUiTMqysK+WczVSTppvkR47oZcmI/DPaXCiCiaXBP8QjkNpA== +webpack@^5.37.1: + version "5.37.1" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.37.1.tgz#2deb5acd350583c1ab9338471f323381b0b0c14b" + integrity sha512-btZjGy/hSjCAAVHw+cKG+L0M+rstlyxbO2C+BOTaQ5/XAnxkDrP5sVbqWhXgo4pL3X2dcOib6rqCP20Zr9PLow== dependencies: "@types/eslint-scope" "^3.7.0" - "@types/estree" "^0.0.46" + "@types/estree" "^0.0.47" "@webassemblyjs/ast" "1.11.0" "@webassemblyjs/wasm-edit" "1.11.0" "@webassemblyjs/wasm-parser" "1.11.0" - acorn "^8.0.4" + acorn "^8.2.1" browserslist "^4.14.5" chrome-trace-event "^1.0.2" - enhanced-resolve "^5.7.0" + enhanced-resolve "^5.8.0" es-module-lexer "^0.4.0" eslint-scope "^5.1.1" events "^3.2.0" @@ -8936,6 +9532,15 @@ wrap-ansi@^2.0.0: string-width "^1.0.1" strip-ansi "^3.0.1" +wrap-ansi@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" + integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== + dependencies: + ansi-styles "^3.2.0" + string-width "^3.0.0" + strip-ansi "^5.0.0" + wrap-ansi@^6.2.0: version "6.2.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" @@ -8960,6 +9565,13 @@ write-file-atomic@^3.0.0: signal-exit "^3.0.2" typedarray-to-buffer "^3.1.5" +ws@^6.2.1: + version "6.2.1" + resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.1.tgz#442fdf0a47ed64f59b6a5d8ff130f4748ed524fb" + integrity sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA== + dependencies: + async-limiter "~1.0.0" + ws@^7.4.4: version "7.4.4" resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.4.tgz#383bc9742cb202292c9077ceab6f6047b17f2d59" @@ -9010,6 +9622,14 @@ yargs-parser@20.x: resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.6.tgz#69f920addf61aafc0b8b89002f5d66e28f2d8b20" integrity sha512-AP1+fQIWSM/sMiET8fyayjx/J+JmTPt2Mr0FkrgqB4todtfa53sOsrSAcIrJRD5XS20bKUwaDIuMkWKCEiQLKA== +yargs-parser@^13.1.2: + version "13.1.2" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" + integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + yargs-parser@^18.1.2: version "18.1.3" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" @@ -9026,6 +9646,22 @@ yargs-parser@^3.2.0: camelcase "^3.0.0" lodash.assign "^4.1.0" +yargs@^13.3.2: + version "13.3.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd" + integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw== + dependencies: + cliui "^5.0.0" + find-up "^3.0.0" + get-caller-file "^2.0.1" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^3.0.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^13.1.2" + yargs@^15.4.1: version "15.4.1" resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" From b15cd6d8c28a2d6b0f94dc0bea8655e4c703c177 Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Thu, 27 May 2021 12:30:20 -0400 Subject: [PATCH 036/141] Refactored webpack config to work with the Insights proxy for Docker --- config/spandx.config.js | 8 ++++---- scripts/start-dev-server.js | 19 ++++++++++++++++--- webpack.config.js | 25 +++++++++++++++++++++---- 3 files changed, 41 insertions(+), 11 deletions(-) diff --git a/config/spandx.config.js b/config/spandx.config.js index 06166df6b..a77484ac8 100644 --- a/config/spandx.config.js +++ b/config/spandx.config.js @@ -3,17 +3,17 @@ const localhost = process.env.PLATFORM === 'linux' ? 'localhost' : 'host.docker. module.exports = { routes: { '/apps/cost-management': { - host: `https://${localhost}:8002`, + host: `http://${localhost}:8002`, }, '/beta/apps/cost-management': { - host: `https://${localhost}:8002`, + host: `http://${localhost}:8002`, }, // New URLs '/openshift/cost-management': { - host: `https://${localhost}:8002`, + host: `http://${localhost}:8002`, }, '/beta/openshift/cost-management': { - host: `https://${localhost}:8002`, + host: `http://${localhost}:8002`, }, // For testing cloud-services-config https://github.com/RedHatInsights/cloud-services-config#testing-your-changes-locally // '/beta/config': { diff --git a/scripts/start-dev-server.js b/scripts/start-dev-server.js index 11ead9f3c..f0b39ddc0 100644 --- a/scripts/start-dev-server.js +++ b/scripts/start-dev-server.js @@ -6,20 +6,33 @@ const { spawn } = require('child_process'); async function setEnv() { return inquirer .prompt([ - { type: 'list', name: 'uiEnv', message: 'Which UI environment you want to use?', choices: ['stable', 'beta'] }, + { type: 'list', name: 'uiEnv', message: 'Which UI environment you want to use?', choices: ['beta', 'stable'] }, { type: 'list', name: 'clouddotEnv', message: 'Which platform environment you want to use', choices: ['ci', 'qa', 'prod'], }, + { + name: 'insightsProxy', + message: 'Do you want to use the Insights proxy?', + type: 'confirm', + default: false, + }, + // { + // name: 'localApi', + // message: 'Do you want to use local api?', + // type: 'confirm', + // default: false, + // }, ]) .then(answers => { - const { uiEnv, clouddotEnv } = answers; + const { uiEnv, clouddotEnv, insightsProxy, localApi } = answers; process.env.BETA_ENV = uiEnv === 'beta' ? 'true' : 'false'; process.env.CLOUDOT_ENV = clouddotEnv; - process.env.USE_PROXY = 'true'; + process.env.USE_PROXY = (!insightsProxy).toString(); // Set 'true' for webpack proxy + // process.env.USE_LOCAL_ROUTES = localApi.toString(); }); } diff --git a/webpack.config.js b/webpack.config.js index 2b1286455..e57a6af73 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -79,6 +79,7 @@ module.exports = (_env, argv) => { log.info(`Beta branches: ${betaBranches}`); log.info(`Using deployments: ${appDeployment}`); log.info(`Public path: ${publicPath}`); + log.info(`Using Insights proxy: ${!useProxy}`); log.info('~~~~~~~~~~~~~~~~~~~~~'); const stats = { @@ -90,6 +91,7 @@ module.exports = (_env, argv) => { const routes = { // For local API development // '/api/cost-management/v1/': { host: 'http://localhost:8000' }, + // // For testing cloud-services-config https://github.com/RedHatInsights/cloud-services-config#testing-your-changes-locally // '/beta/config': { // host: `http://${localhost}:8889`, @@ -257,19 +259,34 @@ module.exports = (_env, argv) => { routes, }) : { - host: 'localhost', - port: 8002, + stats, + contentBase: false, historyApiFallback: { index: `${publicPath}index.html`, }, // hot: !isProduction, hot: false, // default is true, which currently does not work with Insights and federated modules? - firewall: false, - transportMode: 'sockjs', + port: 8002, + disableHostCheck: true, headers: { 'Access-Control-Allow-Origin': '*', 'Access-Control-Allow-Headers': 'Origin, X-Requested-With, Content-Type, Accept, Authorization', }, + // Props for webpack-dev-server v4.0.0-beta.2 + // + // host: 'localhost', + // port: 8002, + // historyApiFallback: { + // index: `${publicPath}index.html`, + // }, + // // hot: !isProduction, + // hot: false, // default is true, which currently does not work with Insights and federated modules? + // firewall: false, + // transportMode: 'sockjs', + // headers: { + // 'Access-Control-Allow-Origin': '*', + // 'Access-Control-Allow-Headers': 'Origin, X-Requested-With, Content-Type, Accept, Authorization', + // }, }, }; }; From d30ab94a8918b15faa1e45df2479b67eac847b6d Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Wed, 2 Jun 2021 14:46:59 -0400 Subject: [PATCH 037/141] Temporary omit "All cloud filtered by OpenShift" option https://issues.redhat.com/browse/COST-1483 --- src/pages/views/explorer/explorerHeader.tsx | 6 ++++-- src/pages/views/overview/overview.tsx | 21 ++++++++++++++------- 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/src/pages/views/explorer/explorerHeader.tsx b/src/pages/views/explorer/explorerHeader.tsx index 57f175e33..05f53d2c9 100644 --- a/src/pages/views/explorer/explorerHeader.tsx +++ b/src/pages/views/explorer/explorerHeader.tsx @@ -40,7 +40,7 @@ import { infrastructureAzureOptions, infrastructureGcpOptions, infrastructureIbmOptions, - infrastructureOcpCloudOptions, + // infrastructureOcpCloudOptions, // Todo: Temp disabled -- see https://issues.redhat.com/browse/COST-1483 infrastructureOcpOptions, ocpOptions, PerspectiveType, @@ -121,7 +121,9 @@ class ExplorerHeaderBase extends React.Component { const options = []; if (ocp) { options.push(...ocpOptions); - options.push(...infrastructureOcpCloudOptions); + // Todo: Temp disabled -- see https://issues.redhat.com/browse/COST-1483 + // + // options.push(...infrastructureOcpCloudOptions); } if (aws) { options.push(...infrastructureAwsOptions); diff --git a/src/pages/views/overview/overview.tsx b/src/pages/views/overview/overview.tsx index 39103d4b9..79fe3b75f 100644 --- a/src/pages/views/overview/overview.tsx +++ b/src/pages/views/overview/overview.tsx @@ -142,7 +142,10 @@ const infrastructureIbmOptions = [{ label: 'overview.perspective.ibm', value: 'i const infrastructureOcpOptions = [{ label: 'overview.perspective.ocp_usage', value: 'ocp_usage' }]; // Infrastructure Ocp cloud options -const infrastructureOcpCloudOptions = [{ label: 'overview.perspective.ocp_cloud', value: 'ocp_cloud' }]; +// +// Todo: Temp disabled -- see https://issues.redhat.com/browse/COST-1483 +// +// const infrastructureOcpCloudOptions = [{ label: 'overview.perspective.ocp_cloud', value: 'ocp_cloud' }]; class OverviewBase extends React.Component { protected defaultState: OverviewState = { @@ -223,9 +226,11 @@ class OverviewBase extends React.Component { }; private getDefaultInfrastructurePerspective = () => { - if (this.isOcpAvailable()) { - return InfrastructurePerspective.ocpCloud; - } + // Todo: Temp disabled -- see https://issues.redhat.com/browse/COST-1483 + // + // if (this.isOcpAvailable()) { + // return InfrastructurePerspective.ocpCloud; + // } if (this.isAwsAvailable()) { return InfrastructurePerspective.aws; } @@ -266,9 +271,11 @@ class OverviewBase extends React.Component { // Dynamically show options if providers are available const options = []; if (this.getCurrentTab() === OverviewTab.infrastructure) { - if (ocp) { - options.push(...infrastructureOcpCloudOptions); - } + // Todo: Temp disabled -- see https://issues.redhat.com/browse/COST-1483 + // + // if (ocp) { + // options.push(...infrastructureOcpCloudOptions); + // } if (aws) { options.push(...infrastructureAwsOptions); } From 16560956efd3c84d6197c8773335ecd5a2bee390 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergio=20Oc=C3=B3n-C=C3=A1rdenas?= Date: Mon, 31 May 2021 10:34:58 +0200 Subject: [PATCH 038/141] Update License to Apache --- LICENSE | 862 +++++++++++++------------------------------------------- 1 file changed, 201 insertions(+), 661 deletions(-) diff --git a/LICENSE b/LICENSE index dbbe35581..ab58b1298 100644 --- a/LICENSE +++ b/LICENSE @@ -1,661 +1,201 @@ - GNU AFFERO GENERAL PUBLIC LICENSE - Version 3, 19 November 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU Affero General Public License is a free, copyleft license for -software and other kinds of works, specifically designed to ensure -cooperation with the community in the case of network server software. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -our General Public Licenses are intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - Developers that use our General Public Licenses protect your rights -with two steps: (1) assert copyright on the software, and (2) offer -you this License which gives you legal permission to copy, distribute -and/or modify the software. - - A secondary benefit of defending all users' freedom is that -improvements made in alternate versions of the program, if they -receive widespread use, become available for other developers to -incorporate. Many developers of free software are heartened and -encouraged by the resulting cooperation. However, in the case of -software used on network servers, this result may fail to come about. -The GNU General Public License permits making a modified version and -letting the public access it on a server without ever releasing its -source code to the public. - - The GNU Affero General Public License is designed specifically to -ensure that, in such cases, the modified source code becomes available -to the community. It requires the operator of a network server to -provide the source code of the modified version running there to the -users of that server. Therefore, public use of a modified version, on -a publicly accessible server, gives the public access to the source -code of the modified version. - - An older license, called the Affero General Public License and -published by Affero, was designed to accomplish similar goals. This is -a different license, not a version of the Affero GPL, but Affero has -released a new version of the Affero GPL which permits relicensing under -this license. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU Affero General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Remote Network Interaction; Use with the GNU General Public License. - - Notwithstanding any other provision of this License, if you modify the -Program, your modified version must prominently offer all users -interacting with it remotely through a computer network (if your version -supports such interaction) an opportunity to receive the Corresponding -Source of your version by providing access to the Corresponding Source -from a network server at no charge, through some standard or customary -means of facilitating copying of software. This Corresponding Source -shall include the Corresponding Source for any work covered by version 3 -of the GNU General Public License that is incorporated pursuant to the -following paragraph. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the work with which it is combined will remain governed by version -3 of the GNU General Public License. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU Affero General Public License from time to time. Such new versions -will be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU Affero General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU Affero General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU Affero General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as published - by the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If your software can interact with users remotely through a computer -network, you should also make sure that it provides a way for users to -get its source. For example, if your program is a web application, its -interface could display a "Source" link that leads users to an archive -of the code. There are many ways you could offer source, and different -solutions will be better for different programs; see section 13 for the -specific requirements. - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU AGPL, see -. + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2021 Red Hat, Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. From cf47b15b2cd0e2b340806143eb4f2af465c251bc Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Thu, 3 Jun 2021 15:30:53 -0400 Subject: [PATCH 039/141] PatternFly milestone update https://issues.redhat.com/browse/COST-1487 --- koku-ui-manifest | 32 ++++++------ package.json | 24 ++++----- yarn.lock | 125 +++++++++++++++++++++++++---------------------- 3 files changed, 95 insertions(+), 86 deletions(-) diff --git a/koku-ui-manifest b/koku-ui-manifest index 6f8b11107..98b2859d9 100644 --- a/koku-ui-manifest +++ b/koku-ui-manifest @@ -88,25 +88,25 @@ mgmt_services/cost-mgmt:koku-ui/@nodelib/fs.scandir:2.1.4.yarnlock mgmt_services/cost-mgmt:koku-ui/@nodelib/fs.stat:2.0.4.yarnlock mgmt_services/cost-mgmt:koku-ui/@nodelib/fs.stat:2.0.4.yarnlock mgmt_services/cost-mgmt:koku-ui/@nodelib/fs.walk:1.2.6.yarnlock -mgmt_services/cost-mgmt:koku-ui/@patternfly/patternfly:4.103.6.yarnlock -mgmt_services/cost-mgmt:koku-ui/@patternfly/react-charts:6.14.22.yarnlock -mgmt_services/cost-mgmt:koku-ui/@patternfly/react-core:4.121.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/@patternfly/react-core:4.121.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/@patternfly/react-icons:4.10.7.yarnlock -mgmt_services/cost-mgmt:koku-ui/@patternfly/react-icons:4.10.7.yarnlock -mgmt_services/cost-mgmt:koku-ui/@patternfly/react-styles:4.10.7.yarnlock -mgmt_services/cost-mgmt:koku-ui/@patternfly/react-styles:4.10.7.yarnlock -mgmt_services/cost-mgmt:koku-ui/@patternfly/react-table:4.27.6.yarnlock -mgmt_services/cost-mgmt:koku-ui/@patternfly/react-tokens:4.11.8.yarnlock -mgmt_services/cost-mgmt:koku-ui/@patternfly/react-tokens:4.11.8.yarnlock +mgmt_services/cost-mgmt:koku-ui/@patternfly/patternfly:4.108.2.yarnlock +mgmt_services/cost-mgmt:koku-ui/@patternfly/react-charts:6.14.29.yarnlock +mgmt_services/cost-mgmt:koku-ui/@patternfly/react-core:4.128.2.yarnlock +mgmt_services/cost-mgmt:koku-ui/@patternfly/react-core:4.128.2.yarnlock +mgmt_services/cost-mgmt:koku-ui/@patternfly/react-icons:4.10.11.yarnlock +mgmt_services/cost-mgmt:koku-ui/@patternfly/react-icons:4.10.11.yarnlock +mgmt_services/cost-mgmt:koku-ui/@patternfly/react-styles:4.10.11.yarnlock +mgmt_services/cost-mgmt:koku-ui/@patternfly/react-styles:4.10.11.yarnlock +mgmt_services/cost-mgmt:koku-ui/@patternfly/react-table:4.27.24.yarnlock +mgmt_services/cost-mgmt:koku-ui/@patternfly/react-tokens:4.11.12.yarnlock +mgmt_services/cost-mgmt:koku-ui/@patternfly/react-tokens:4.11.12.yarnlock mgmt_services/cost-mgmt:koku-ui/@popperjs/core:2.9.1.yarnlock mgmt_services/cost-mgmt:koku-ui/@redhat-cloud-services/frontend-components-config-utilities:1.1.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/@redhat-cloud-services/frontend-components-notifications:3.1.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/@redhat-cloud-services/frontend-components-notifications:3.2.2.yarnlock mgmt_services/cost-mgmt:koku-ui/@redhat-cloud-services/frontend-components-utilities:3.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/@redhat-cloud-services/frontend-components-utilities:3.1.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/@redhat-cloud-services/frontend-components-utilities:3.1.2.yarnlock -mgmt_services/cost-mgmt:koku-ui/@redhat-cloud-services/frontend-components:3.1.11.yarnlock -mgmt_services/cost-mgmt:koku-ui/@redhat-cloud-services/rbac-client:1.0.97.yarnlock +mgmt_services/cost-mgmt:koku-ui/@redhat-cloud-services/frontend-components-utilities:3.2.2.yarnlock +mgmt_services/cost-mgmt:koku-ui/@redhat-cloud-services/frontend-components:3.2.3.yarnlock +mgmt_services/cost-mgmt:koku-ui/@redhat-cloud-services/rbac-client:1.0.98.yarnlock mgmt_services/cost-mgmt:koku-ui/@restart/context:2.1.4.yarnlock mgmt_services/cost-mgmt:koku-ui/@restart/hooks:0.3.26.yarnlock mgmt_services/cost-mgmt:koku-ui/@restart/hooks:0.3.26.yarnlock @@ -1030,6 +1030,7 @@ mgmt_services/cost-mgmt:koku-ui/minimist:1.2.5.yarnlock mgmt_services/cost-mgmt:koku-ui/minimist:1.2.5.yarnlock mgmt_services/cost-mgmt:koku-ui/mixin-deep:1.3.2.yarnlock mgmt_services/cost-mgmt:koku-ui/mkdirp:1.0.4.yarnlock +mgmt_services/cost-mgmt:koku-ui/mkdirp:1.0.4.yarnlock mgmt_services/cost-mgmt:koku-ui/mkdirp:0.5.5.yarnlock mgmt_services/cost-mgmt:koku-ui/mkdirp:0.5.5.yarnlock mgmt_services/cost-mgmt:koku-ui/moo:0.5.1.yarnlock @@ -1256,6 +1257,7 @@ mgmt_services/cost-mgmt:koku-ui/readable-stream:3.6.0.yarnlock mgmt_services/cost-mgmt:koku-ui/readdirp:2.2.1.yarnlock mgmt_services/cost-mgmt:koku-ui/readdirp:3.5.0.yarnlock mgmt_services/cost-mgmt:koku-ui/rechoir:0.7.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/redux-promise-middleware:6.1.2.yarnlock mgmt_services/cost-mgmt:koku-ui/redux-thunk:2.3.0.yarnlock mgmt_services/cost-mgmt:koku-ui/redux:4.0.5.yarnlock mgmt_services/cost-mgmt:koku-ui/redux:4.0.5.yarnlock diff --git a/package.json b/package.json index 401bb609f..cda7eb924 100644 --- a/package.json +++ b/package.json @@ -32,17 +32,17 @@ }, "dependencies": { "@fortawesome/free-solid-svg-icons": "5.15.2", - "@patternfly/patternfly": "4.103.6", - "@patternfly/react-charts": "6.14.22", - "@patternfly/react-core": "4.121.0", - "@patternfly/react-icons": "4.10.7", - "@patternfly/react-styles": "4.10.7", - "@patternfly/react-table": "4.27.6", - "@patternfly/react-tokens": "4.11.8", - "@redhat-cloud-services/frontend-components": "^3.1.11", - "@redhat-cloud-services/frontend-components-notifications": "^3.1.0", - "@redhat-cloud-services/frontend-components-utilities": "^3.1.2", - "@redhat-cloud-services/rbac-client": "^1.0.97", + "@patternfly/patternfly": "4.108.2", + "@patternfly/react-charts": "6.14.29", + "@patternfly/react-core": "4.128.2", + "@patternfly/react-icons": "4.10.11", + "@patternfly/react-styles": "4.10.11", + "@patternfly/react-table": "4.27.24", + "@patternfly/react-tokens": "4.11.12", + "@redhat-cloud-services/frontend-components": "^3.2.3", + "@redhat-cloud-services/frontend-components-notifications": "^3.2.2", + "@redhat-cloud-services/frontend-components-utilities": "^3.2.2", + "@redhat-cloud-services/rbac-client": "^1.0.98", "@types/date-fns": "2.6.0", "@types/i18next": "13.0.0", "@types/i18next-xhr-backend": "1.4.2", @@ -126,4 +126,4 @@ "insights": { "appname": "cost-management" } -} \ No newline at end of file +} diff --git a/yarn.lock b/yarn.lock index afec3588b..655f3fbd2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -561,18 +561,18 @@ "@nodelib/fs.scandir" "2.1.4" fastq "^1.6.0" -"@patternfly/patternfly@4.103.6": - version "4.103.6" - resolved "https://registry.yarnpkg.com/@patternfly/patternfly/-/patternfly-4.103.6.tgz#a01b1dced931eb4971a6c7366901fdde81a52284" - integrity sha512-veWpHv/Dlk0P7tu96QUjLzD2Aq4IysUSGOjGPXlbb/KOUfnIrErLRmQnljY01ykXLJ7kxQSnC3yaJqCU+4fDPQ== - -"@patternfly/react-charts@6.14.22": - version "6.14.22" - resolved "https://registry.yarnpkg.com/@patternfly/react-charts/-/react-charts-6.14.22.tgz#a78ab36ab094c8ed87855afc3c73593b2ef01256" - integrity sha512-9rkokh8JPRryqAPDjP3sB+Kx85v9i2jlMVA0JfAa2rQkhS0gOKgOUkU/I9KegXaDEHvtTpCpI6S6a9uQ9/ewYQ== - dependencies: - "@patternfly/react-styles" "^4.10.7" - "@patternfly/react-tokens" "^4.11.8" +"@patternfly/patternfly@4.108.2": + version "4.108.2" + resolved "https://registry.yarnpkg.com/@patternfly/patternfly/-/patternfly-4.108.2.tgz#b6686b9865fd5d4233a15bdf04cc53bded5a8ccc" + integrity sha512-z0VB+1CXcH+eoClYQABwapX5FURSvm1nPr6asLWwg/Z4Wuxs0RjZpC6Gb+KRm8nGQwSAcMKZY1jLfPqVnznQnw== + +"@patternfly/react-charts@6.14.29": + version "6.14.29" + resolved "https://registry.yarnpkg.com/@patternfly/react-charts/-/react-charts-6.14.29.tgz#bae620dd9e249140ba3bc67692ce20b7c1682f21" + integrity sha512-bmpfhdhn0gnmZCCIeuGK/N6a6nb2TFWvBv8WZzjQq1lgxW3apeQGnXAEWg/iLEsRHrk19T7hbqoSTmh2t5/HIQ== + dependencies: + "@patternfly/react-styles" "^4.10.11" + "@patternfly/react-tokens" "^4.11.12" hoist-non-react-statics "^3.3.0" lodash "^4.17.19" tslib "1.13.0" @@ -592,45 +592,45 @@ victory-voronoi-container "^35.4.4" victory-zoom-container "^35.4.4" -"@patternfly/react-core@4.121.0", "@patternfly/react-core@^4.121.0": - version "4.121.0" - resolved "https://registry.yarnpkg.com/@patternfly/react-core/-/react-core-4.121.0.tgz#8f0a18ee2d4f782f0b0f35e1ef848d98598e933c" - integrity sha512-KwDBv24DQywH3GjFlROp2v8bFuAIpYAjqKPASCY3TuLp+Ig97Pdp3fhCYUIDk40MF/uCdRrDEmjdLfd2tp3oKw== +"@patternfly/react-core@4.128.2", "@patternfly/react-core@^4.128.2": + version "4.128.2" + resolved "https://registry.yarnpkg.com/@patternfly/react-core/-/react-core-4.128.2.tgz#dd0c218bc75a32ee41c69e3d51bead6b157c4aae" + integrity sha512-EhrxE3+V7AYVhbERrcRVH7oY6TeVRqqzaRx8HXWnyn/hxE2rTzhhaLHyjotxk9mGYmIYtMuMebBHFbX0g+6Ymg== dependencies: - "@patternfly/react-icons" "^4.10.7" - "@patternfly/react-styles" "^4.10.7" - "@patternfly/react-tokens" "^4.11.8" + "@patternfly/react-icons" "^4.10.11" + "@patternfly/react-styles" "^4.10.11" + "@patternfly/react-tokens" "^4.11.12" focus-trap "6.2.2" react-dropzone "9.0.0" tippy.js "5.1.2" tslib "1.13.0" -"@patternfly/react-icons@4.10.7", "@patternfly/react-icons@^4.10.7": - version "4.10.7" - resolved "https://registry.yarnpkg.com/@patternfly/react-icons/-/react-icons-4.10.7.tgz#fe2eabf88512afe7dab0c0e7c71142ec6e594664" - integrity sha512-CiHYDOS8jrxNiy/KIxv9vPqg3cie4SzsbQKh+eW8lj41x68IrgILiw3VvjcJeVXXJDRW36T7u3IPKjMI6zuoyA== - -"@patternfly/react-styles@4.10.7", "@patternfly/react-styles@^4.10.7": - version "4.10.7" - resolved "https://registry.yarnpkg.com/@patternfly/react-styles/-/react-styles-4.10.7.tgz#3b0ce38f3e12a69cdcbaf1ada163a5b114b919bd" - integrity sha512-oA9R1dXAJaKhj0/1z/uf2Z1wzsQ4jGQw2F8alPBagbDLyZD+pvUmElBr7o2Ucz/fm+/pLcphekCkGEVtyV3jOA== - -"@patternfly/react-table@4.27.6": - version "4.27.6" - resolved "https://registry.yarnpkg.com/@patternfly/react-table/-/react-table-4.27.6.tgz#064bd897d120a887095db7262714ff1f23224a5b" - integrity sha512-qlwvTM/6wshilPysdN2TPDNvsi9nE6nXUQWrJzZXOgc6hb/l4evn2UCfkMyJvSna+CMR1YlFjZrMAHOCxZQcvQ== - dependencies: - "@patternfly/react-core" "^4.121.0" - "@patternfly/react-icons" "^4.10.7" - "@patternfly/react-styles" "^4.10.7" - "@patternfly/react-tokens" "^4.11.8" +"@patternfly/react-icons@4.10.11", "@patternfly/react-icons@^4.10.11": + version "4.10.11" + resolved "https://registry.yarnpkg.com/@patternfly/react-icons/-/react-icons-4.10.11.tgz#9bed483fc37c8b795b3fb98c17ede00eef775857" + integrity sha512-Qyxwvghb9HZB2do3UVw4EzJSvqWaw/AEw6mFzqshZiIm2oPrL4NkvavwDt5WRicz5sbyWTZluB4grOj33PEpww== + +"@patternfly/react-styles@4.10.11", "@patternfly/react-styles@^4.10.11": + version "4.10.11" + resolved "https://registry.yarnpkg.com/@patternfly/react-styles/-/react-styles-4.10.11.tgz#6bda5673a71037c0fb9be7e11a117ed8cfea6ce0" + integrity sha512-M+NhTtAXreJzMAV2Z1P2pbnKpRYnWbB5iZ6mxB0tkxxG+KyZ0/se8M5rUepLOE/n7BMq8IiOjPJ9zu/vpWj0gA== + +"@patternfly/react-table@4.27.24": + version "4.27.24" + resolved "https://registry.yarnpkg.com/@patternfly/react-table/-/react-table-4.27.24.tgz#c61947800d9c82fae3d46a03a1e9989ec49f5f61" + integrity sha512-LXKWtCeEJ4KR8ZnyeAPHdDQFJC9KQe/2Z7yJxBHy8gWciLAPcrLvnTtAb+d1O2lFXKMpUKFNUIwzVvuAffjDSA== + dependencies: + "@patternfly/react-core" "^4.128.2" + "@patternfly/react-icons" "^4.10.11" + "@patternfly/react-styles" "^4.10.11" + "@patternfly/react-tokens" "^4.11.12" lodash "^4.17.19" tslib "1.13.0" -"@patternfly/react-tokens@4.11.8", "@patternfly/react-tokens@^4.11.8": - version "4.11.8" - resolved "https://registry.yarnpkg.com/@patternfly/react-tokens/-/react-tokens-4.11.8.tgz#ea0c9ca036f6b0506cda43e899c3248971920337" - integrity sha512-k3UwsnWRoHHYbFbiqmUHtkrAPtw6D8BZLB1tPGzdXBlqQXRX1t8xukgDcTSUWo6wOPVdk8WrOgmWMy0u0Tk+sw== +"@patternfly/react-tokens@4.11.12", "@patternfly/react-tokens@^4.11.12": + version "4.11.12" + resolved "https://registry.yarnpkg.com/@patternfly/react-tokens/-/react-tokens-4.11.12.tgz#0d4d88ec768cbf5c4b46e75dc8673ba97448823c" + integrity sha512-PTEc2CQa/BqcDcUwT0V02l+ZoJa+bheLlh9R5g1+JQ6vlqH31gk0dpHmj6goEcSDLkbvMJgr3kNZdJsP1VdBMg== "@popperjs/core@^2.5.3": version "2.9.1" @@ -642,12 +642,13 @@ resolved "https://registry.yarnpkg.com/@redhat-cloud-services/frontend-components-config-utilities/-/frontend-components-config-utilities-1.1.1.tgz#067fed07c260ebd0afc46bab91b2c8cef8216351" integrity sha512-0nRMr5PD20fDMp6tCN2zYKSEkP/W8iPVqjk77F5i5HyyPDHSm+BJitk1+GVoriDAltqN27Dvj8vp4veUj5EISg== -"@redhat-cloud-services/frontend-components-notifications@^3.1.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@redhat-cloud-services/frontend-components-notifications/-/frontend-components-notifications-3.1.0.tgz#d0d7ec32e8d88b75a1aef0b2ebb1e12eecf93632" - integrity sha512-gHN424/3TJ1kPtk5Dos+aScUL+QjkmKhKhyiSDNN2o7LzhN+J+d2xA0bCx2mfEBspqHG+1nTiHpZbgQ3l0kntw== +"@redhat-cloud-services/frontend-components-notifications@^3.2.2": + version "3.2.2" + resolved "https://registry.yarnpkg.com/@redhat-cloud-services/frontend-components-notifications/-/frontend-components-notifications-3.2.2.tgz#588f08197ce75520ba1729774be0af8334e9f0bb" + integrity sha512-n6aGKwv5ttlW+dEFWoj9uclEbgl5V6iFWOwwMg5FdWsh3jQ6Y9oaUxX4XYsOGAJyNgD92JH6A6n0T9Fgy6mWQA== dependencies: "@redhat-cloud-services/frontend-components-utilities" "*" + redux-promise-middleware "6.1.2" "@redhat-cloud-services/frontend-components-utilities@*", "@redhat-cloud-services/frontend-components-utilities@>=3.0.0": version "3.1.1" @@ -660,31 +661,32 @@ commander ">=2.20.0" react-content-loader ">=3.4.1" -"@redhat-cloud-services/frontend-components-utilities@^3.1.2": - version "3.1.2" - resolved "https://registry.yarnpkg.com/@redhat-cloud-services/frontend-components-utilities/-/frontend-components-utilities-3.1.2.tgz#965c03508336e6d68dc9cad39b38ae05acd0f4e8" - integrity sha512-CDnhCQTotqCWUzZUgPXEori95FDhrXGBUxodwQpR3wKTb1lBpwDHg4b3TdpzPz+KyryClT6OfNkVabmjQ2S6CA== +"@redhat-cloud-services/frontend-components-utilities@^3.2.2": + version "3.2.2" + resolved "https://registry.yarnpkg.com/@redhat-cloud-services/frontend-components-utilities/-/frontend-components-utilities-3.2.2.tgz#b84e107a603b18473bbd8600a98eb003b2f8be55" + integrity sha512-HCiXpAuXCmxFc3+Lf/QS0niemGa/4Z6BbbghixA9y3NZytt9ggHVeYyVJNIfHa6aEkQn7OiHL7RaISfmhmirKw== dependencies: "@sentry/browser" "^5.4.0" awesome-debounce-promise "^2.1.0" axios "^0.21.1" commander ">=2.20.0" + mkdirp "^1.0.4" react-content-loader ">=3.4.1" -"@redhat-cloud-services/frontend-components@^3.1.11": - version "3.1.11" - resolved "https://registry.yarnpkg.com/@redhat-cloud-services/frontend-components/-/frontend-components-3.1.11.tgz#ad655dc0a69c6b851087aac1d38beec3e79dfebc" - integrity sha512-6dvjKlb2l7cKn9Ex+z+aJkn4RHn2NzQIs8ylYQgN9fkKtZhm3dTQiINKxcmmlBTsody6pbPcp2I854jhyqfMug== +"@redhat-cloud-services/frontend-components@^3.2.3": + version "3.2.3" + resolved "https://registry.yarnpkg.com/@redhat-cloud-services/frontend-components/-/frontend-components-3.2.3.tgz#f656c0e0a5903b53ca495e612b09b8cd407f6f5d" + integrity sha512-DOqfAimqmJoj5ZMOtHRx77uPe5fThLPZOnsYoggnGz+CwJ28Yti+Zidp1bFuMdOwqqluekHM78O4ehwg3qh+DA== dependencies: "@redhat-cloud-services/frontend-components-utilities" ">=3.0.0" "@scalprum/core" "^0.0.11" "@scalprum/react-core" "^0.0.16" sanitize-html "^2.3.2" -"@redhat-cloud-services/rbac-client@^1.0.97": - version "1.0.97" - resolved "https://registry.yarnpkg.com/@redhat-cloud-services/rbac-client/-/rbac-client-1.0.97.tgz#a6b75bdd3eab92b39887a7149b9fbf0ac1f887a8" - integrity sha512-m+6EehKY6qlnf7Je9M8mMqqVSXefs5PeXTf3H1xO03xEWAv6u6tgYjWw+f9/DiEYOcn5DUgXSH7T+QEJgVQ+Og== +"@redhat-cloud-services/rbac-client@^1.0.98": + version "1.0.98" + resolved "https://registry.yarnpkg.com/@redhat-cloud-services/rbac-client/-/rbac-client-1.0.98.tgz#f4f5b7340d1c0ef58de0141a3ef5b203ee49ce99" + integrity sha512-R5xcoHs7EIdsbMhyXWWgAnkGf3WoLyd5tnpF/tos96pCUEsdXCCCkzDTdy8NqQT2SgLr1wjCorDHaDRuSdh9qA== dependencies: axios "^0.21.1" @@ -6150,7 +6152,7 @@ mixin-deep@^1.2.0: for-in "^1.0.2" is-extendable "^1.0.1" -mkdirp@1.x: +mkdirp@1.x, mkdirp@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== @@ -7440,6 +7442,11 @@ rechoir@^0.7.0: dependencies: resolve "^1.9.0" +redux-promise-middleware@6.1.2: + version "6.1.2" + resolved "https://registry.yarnpkg.com/redux-promise-middleware/-/redux-promise-middleware-6.1.2.tgz#1c14222686934be243cbb292e348ef7d5b20d6d2" + integrity sha512-ZqZu/nnSzGgwTtNbGoGVontpk7LjTOv0kigtt3CcgXI9gpq+8WlfXTXRZD0WTD5yaohRq0q2nYmJXSTjwXs83Q== + redux-thunk@2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/redux-thunk/-/redux-thunk-2.3.0.tgz#51c2c19a185ed5187aaa9a2d08b666d0d6467622" From 085974c028649fe54c16dc2604ad95238ec851d6 Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Tue, 8 Jun 2021 12:01:23 -0400 Subject: [PATCH 040/141] Workaround for testing pre-release PatternFly packages. --- src/federatedEntry.tsx | 1 + webpack.config.js | 17 ++++++++++++++--- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/src/federatedEntry.tsx b/src/federatedEntry.tsx index 4ffca5db1..c8ab478b2 100644 --- a/src/federatedEntry.tsx +++ b/src/federatedEntry.tsx @@ -8,6 +8,7 @@ import { getBaseName } from 'utils/getBaseName'; import App from './app'; import { configureStore } from './store'; +require.resolve('@patternfly/patternfly/patternfly.css'); require.resolve('@patternfly/patternfly/patternfly-addons.css'); import './styles/global.css'; diff --git a/webpack.config.js b/webpack.config.js index e57a6af73..774acf1dd 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -23,14 +23,21 @@ const singletonDeps = [ 'react-router-dom', 'react-redux', 'react-promise-middleware', + // '@patternfly/react-core', + // '@patternfly/react-charts', + // '@patternfly/react-table', + // '@patternfly/react-icons', + // '@patternfly/react-tokens', + '@redhat-cloud-services/frontend-components', + '@redhat-cloud-services/frontend-components-utilities', + '@redhat-cloud-services/frontend-components-notifications', +]; +const patternFlyDeps = [ '@patternfly/react-core', '@patternfly/react-charts', '@patternfly/react-table', '@patternfly/react-icons', '@patternfly/react-tokens', - '@redhat-cloud-services/frontend-components', - '@redhat-cloud-services/frontend-components-utilities', - '@redhat-cloud-services/frontend-components-notifications', ]; const fileRegEx = /\.(png|woff|woff2|eot|ttf|svg|gif|jpe?g|png)(\?[a-z0-9=.]+)?$/; const srcDir = path.resolve(__dirname, './src'); @@ -210,6 +217,10 @@ module.exports = (_env, argv) => { acc[dep] = { singleton: true, requiredVersion: dependencies[dep] }; return acc; }, {}), + ...patternFlyDeps.reduce((acc, dep) => { + acc[dep] = { singleton: false, requiredVersion: dependencies[dep] }; + return acc; + }, {}), }, }), new ChunkMapperPlugin({ From 541c80c134c64bc9bc4fbe19e2801ba346fa4393 Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Tue, 8 Jun 2021 14:37:38 -0400 Subject: [PATCH 041/141] Added choice to startup script for using shared PatternFly modules --- scripts/start-dev-server.js | 8 +++++++- src/federatedEntry.tsx | 3 ++- webpack.config.js | 25 +++++++++++++++---------- 3 files changed, 24 insertions(+), 12 deletions(-) diff --git a/scripts/start-dev-server.js b/scripts/start-dev-server.js index f0b39ddc0..17998387b 100644 --- a/scripts/start-dev-server.js +++ b/scripts/start-dev-server.js @@ -19,6 +19,11 @@ async function setEnv() { type: 'confirm', default: false, }, + { + name: 'sharedDependencies', + message: 'Use shared PatternFly dependencies?', + type: 'confirm', + }, // { // name: 'localApi', // message: 'Do you want to use local api?', @@ -27,11 +32,12 @@ async function setEnv() { // }, ]) .then(answers => { - const { uiEnv, clouddotEnv, insightsProxy, localApi } = answers; + const { uiEnv, clouddotEnv, insightsProxy, localApi, sharedDependencies } = answers; process.env.BETA_ENV = uiEnv === 'beta' ? 'true' : 'false'; process.env.CLOUDOT_ENV = clouddotEnv; process.env.USE_PROXY = (!insightsProxy).toString(); // Set 'true' for webpack proxy + process.env.USE_SHARED_DEPS = sharedDependencies.toString(); // Set 'true' for shared dependencies // process.env.USE_LOCAL_ROUTES = localApi.toString(); }); } diff --git a/src/federatedEntry.tsx b/src/federatedEntry.tsx index c8ab478b2..0308d3451 100644 --- a/src/federatedEntry.tsx +++ b/src/federatedEntry.tsx @@ -8,7 +8,8 @@ import { getBaseName } from 'utils/getBaseName'; import App from './app'; import { configureStore } from './store'; -require.resolve('@patternfly/patternfly/patternfly.css'); +// Todo: uncomment for testing PatternFly pre-release packages +// require.resolve('@patternfly/patternfly/patternfly.css'); require.resolve('@patternfly/patternfly/patternfly-addons.css'); import './styles/global.css'; diff --git a/webpack.config.js b/webpack.config.js index 774acf1dd..555c0e9a1 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -23,20 +23,17 @@ const singletonDeps = [ 'react-router-dom', 'react-redux', 'react-promise-middleware', - // '@patternfly/react-core', - // '@patternfly/react-charts', - // '@patternfly/react-table', - // '@patternfly/react-icons', - // '@patternfly/react-tokens', '@redhat-cloud-services/frontend-components', '@redhat-cloud-services/frontend-components-utilities', '@redhat-cloud-services/frontend-components-notifications', ]; const patternFlyDeps = [ + '@patternfly/patternfly', '@patternfly/react-core', '@patternfly/react-charts', '@patternfly/react-table', '@patternfly/react-icons', + '@patternfly/react-styles', '@patternfly/react-tokens', ]; const fileRegEx = /\.(png|woff|woff2|eot|ttf|svg|gif|jpe?g|png)(\?[a-z0-9=.]+)?$/; @@ -74,6 +71,7 @@ module.exports = (_env, argv) => { const isProduction = nodeEnv === 'production' || argv.mode === 'production'; const isBeta = betaEnv === 'true'; const useLocalRoutes = process.env.USE_LOCAL_ROUTES === 'true'; + const useSharedDeps = process.env.USE_SHARED_DEPS === 'true'; const appDeployment = (isProduction && betaBranches.includes(gitBranch)) || isBeta ? 'beta/apps' : 'apps'; const publicPath = `/${appDeployment}/${insights.appname}/`; // Moved multiple entries to index.tsx in order to help speed up webpack @@ -87,8 +85,19 @@ module.exports = (_env, argv) => { log.info(`Using deployments: ${appDeployment}`); log.info(`Public path: ${publicPath}`); log.info(`Using Insights proxy: ${!useProxy}`); + log.info(`Using shared PatternFly dependencies: ${useSharedDeps}`); log.info('~~~~~~~~~~~~~~~~~~~~~'); + let sharedDependencies = dependencies; + if (useSharedDeps) { + sharedDependencies = Object.keys(dependencies) + .filter(key => !patternFlyDeps.includes(key)) + .reduce((obj, key) => { + obj[key] = dependencies[key]; + return obj; + }, {}); + } + const stats = { excludeAssets: fileRegEx, colors: true, @@ -212,15 +221,11 @@ module.exports = (_env, argv) => { // './OcpOverviewWidget': path.resolve(__dirname, './src/modules/ocpOverviewWidget'), }, shared: { - ...dependencies, + ...sharedDependencies, ...singletonDeps.reduce((acc, dep) => { acc[dep] = { singleton: true, requiredVersion: dependencies[dep] }; return acc; }, {}), - ...patternFlyDeps.reduce((acc, dep) => { - acc[dep] = { singleton: false, requiredVersion: dependencies[dep] }; - return acc; - }, {}), }, }), new ChunkMapperPlugin({ From f84c409ea22a1bfecbbb170b5dc4763d3683cebd Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Tue, 8 Jun 2021 18:30:21 -0400 Subject: [PATCH 042/141] Clean up shared dependencies --- src/federatedEntry.tsx | 2 +- webpack.config.js | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/federatedEntry.tsx b/src/federatedEntry.tsx index 0308d3451..13b6019df 100644 --- a/src/federatedEntry.tsx +++ b/src/federatedEntry.tsx @@ -8,7 +8,7 @@ import { getBaseName } from 'utils/getBaseName'; import App from './app'; import { configureStore } from './store'; -// Todo: uncomment for testing PatternFly pre-release packages +// Todo: Uncomment for use with non-shared PatternFly packages // require.resolve('@patternfly/patternfly/patternfly.css'); require.resolve('@patternfly/patternfly/patternfly-addons.css'); diff --git a/webpack.config.js b/webpack.config.js index 555c0e9a1..79f5fbae7 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -88,8 +88,9 @@ module.exports = (_env, argv) => { log.info(`Using shared PatternFly dependencies: ${useSharedDeps}`); log.info('~~~~~~~~~~~~~~~~~~~~~'); + // Cannot share dependencies with local repo paths let sharedDependencies = dependencies; - if (useSharedDeps) { + if (!useSharedDeps) { sharedDependencies = Object.keys(dependencies) .filter(key => !patternFlyDeps.includes(key)) .reduce((obj, key) => { From 7e6fcb1b12223c7ee318ffa131a6a60109fba41f Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Tue, 8 Jun 2021 22:37:04 -0400 Subject: [PATCH 043/141] Simplify PatternFly shared modules using singleton=false --- scripts/start-dev-server.js | 8 +------- webpack.config.js | 20 ++++++-------------- 2 files changed, 7 insertions(+), 21 deletions(-) diff --git a/scripts/start-dev-server.js b/scripts/start-dev-server.js index 17998387b..f0b39ddc0 100644 --- a/scripts/start-dev-server.js +++ b/scripts/start-dev-server.js @@ -19,11 +19,6 @@ async function setEnv() { type: 'confirm', default: false, }, - { - name: 'sharedDependencies', - message: 'Use shared PatternFly dependencies?', - type: 'confirm', - }, // { // name: 'localApi', // message: 'Do you want to use local api?', @@ -32,12 +27,11 @@ async function setEnv() { // }, ]) .then(answers => { - const { uiEnv, clouddotEnv, insightsProxy, localApi, sharedDependencies } = answers; + const { uiEnv, clouddotEnv, insightsProxy, localApi } = answers; process.env.BETA_ENV = uiEnv === 'beta' ? 'true' : 'false'; process.env.CLOUDOT_ENV = clouddotEnv; process.env.USE_PROXY = (!insightsProxy).toString(); // Set 'true' for webpack proxy - process.env.USE_SHARED_DEPS = sharedDependencies.toString(); // Set 'true' for shared dependencies // process.env.USE_LOCAL_ROUTES = localApi.toString(); }); } diff --git a/webpack.config.js b/webpack.config.js index 79f5fbae7..d0fd548f4 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -71,7 +71,6 @@ module.exports = (_env, argv) => { const isProduction = nodeEnv === 'production' || argv.mode === 'production'; const isBeta = betaEnv === 'true'; const useLocalRoutes = process.env.USE_LOCAL_ROUTES === 'true'; - const useSharedDeps = process.env.USE_SHARED_DEPS === 'true'; const appDeployment = (isProduction && betaBranches.includes(gitBranch)) || isBeta ? 'beta/apps' : 'apps'; const publicPath = `/${appDeployment}/${insights.appname}/`; // Moved multiple entries to index.tsx in order to help speed up webpack @@ -85,20 +84,8 @@ module.exports = (_env, argv) => { log.info(`Using deployments: ${appDeployment}`); log.info(`Public path: ${publicPath}`); log.info(`Using Insights proxy: ${!useProxy}`); - log.info(`Using shared PatternFly dependencies: ${useSharedDeps}`); log.info('~~~~~~~~~~~~~~~~~~~~~'); - // Cannot share dependencies with local repo paths - let sharedDependencies = dependencies; - if (!useSharedDeps) { - sharedDependencies = Object.keys(dependencies) - .filter(key => !patternFlyDeps.includes(key)) - .reduce((obj, key) => { - obj[key] = dependencies[key]; - return obj; - }, {}); - } - const stats = { excludeAssets: fileRegEx, colors: true, @@ -222,11 +209,16 @@ module.exports = (_env, argv) => { // './OcpOverviewWidget': path.resolve(__dirname, './src/modules/ocpOverviewWidget'), }, shared: { - ...sharedDependencies, + ...dependencies, ...singletonDeps.reduce((acc, dep) => { acc[dep] = { singleton: true, requiredVersion: dependencies[dep] }; return acc; }, {}), + // Allows a different (e.g., pre-release) version of PatternFly to be used + ...patternFlyDeps.reduce((acc, dep) => { + acc[dep] = { singleton: false, requiredVersion: dependencies[dep] }; + return acc; + }, {}), }, }), new ChunkMapperPlugin({ From d56e4cd8102b921ce0da34f397cd5f2112d79197 Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Tue, 8 Jun 2021 22:55:30 -0400 Subject: [PATCH 044/141] Added version ranges to PatternFly packages for shared module matching --- koku-ui-manifest | 6 +----- package.json | 14 +++++++------- yarn.lock | 20 ++++++++++---------- 3 files changed, 18 insertions(+), 22 deletions(-) diff --git a/koku-ui-manifest b/koku-ui-manifest index 98b2859d9..dbff59df2 100644 --- a/koku-ui-manifest +++ b/koku-ui-manifest @@ -89,16 +89,12 @@ mgmt_services/cost-mgmt:koku-ui/@nodelib/fs.stat:2.0.4.yarnlock mgmt_services/cost-mgmt:koku-ui/@nodelib/fs.stat:2.0.4.yarnlock mgmt_services/cost-mgmt:koku-ui/@nodelib/fs.walk:1.2.6.yarnlock mgmt_services/cost-mgmt:koku-ui/@patternfly/patternfly:4.108.2.yarnlock -mgmt_services/cost-mgmt:koku-ui/@patternfly/react-charts:6.14.29.yarnlock +mgmt_services/cost-mgmt:koku-ui/@patternfly/react-charts:6.15.0.yarnlock mgmt_services/cost-mgmt:koku-ui/@patternfly/react-core:4.128.2.yarnlock -mgmt_services/cost-mgmt:koku-ui/@patternfly/react-core:4.128.2.yarnlock -mgmt_services/cost-mgmt:koku-ui/@patternfly/react-icons:4.10.11.yarnlock mgmt_services/cost-mgmt:koku-ui/@patternfly/react-icons:4.10.11.yarnlock mgmt_services/cost-mgmt:koku-ui/@patternfly/react-styles:4.10.11.yarnlock -mgmt_services/cost-mgmt:koku-ui/@patternfly/react-styles:4.10.11.yarnlock mgmt_services/cost-mgmt:koku-ui/@patternfly/react-table:4.27.24.yarnlock mgmt_services/cost-mgmt:koku-ui/@patternfly/react-tokens:4.11.12.yarnlock -mgmt_services/cost-mgmt:koku-ui/@patternfly/react-tokens:4.11.12.yarnlock mgmt_services/cost-mgmt:koku-ui/@popperjs/core:2.9.1.yarnlock mgmt_services/cost-mgmt:koku-ui/@redhat-cloud-services/frontend-components-config-utilities:1.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/@redhat-cloud-services/frontend-components-notifications:3.2.2.yarnlock diff --git a/package.json b/package.json index cda7eb924..517697eb9 100644 --- a/package.json +++ b/package.json @@ -32,13 +32,13 @@ }, "dependencies": { "@fortawesome/free-solid-svg-icons": "5.15.2", - "@patternfly/patternfly": "4.108.2", - "@patternfly/react-charts": "6.14.29", - "@patternfly/react-core": "4.128.2", - "@patternfly/react-icons": "4.10.11", - "@patternfly/react-styles": "4.10.11", - "@patternfly/react-table": "4.27.24", - "@patternfly/react-tokens": "4.11.12", + "@patternfly/patternfly": "^4.108.2", + "@patternfly/react-charts": "^6.15.0", + "@patternfly/react-core": "^4.128.2", + "@patternfly/react-icons": "^4.10.11", + "@patternfly/react-styles": "^4.10.11", + "@patternfly/react-table": "^4.27.24", + "@patternfly/react-tokens": "^4.11.12", "@redhat-cloud-services/frontend-components": "^3.2.3", "@redhat-cloud-services/frontend-components-notifications": "^3.2.2", "@redhat-cloud-services/frontend-components-utilities": "^3.2.2", diff --git a/yarn.lock b/yarn.lock index 655f3fbd2..27fb790af 100644 --- a/yarn.lock +++ b/yarn.lock @@ -561,15 +561,15 @@ "@nodelib/fs.scandir" "2.1.4" fastq "^1.6.0" -"@patternfly/patternfly@4.108.2": +"@patternfly/patternfly@^4.108.2": version "4.108.2" resolved "https://registry.yarnpkg.com/@patternfly/patternfly/-/patternfly-4.108.2.tgz#b6686b9865fd5d4233a15bdf04cc53bded5a8ccc" integrity sha512-z0VB+1CXcH+eoClYQABwapX5FURSvm1nPr6asLWwg/Z4Wuxs0RjZpC6Gb+KRm8nGQwSAcMKZY1jLfPqVnznQnw== -"@patternfly/react-charts@6.14.29": - version "6.14.29" - resolved "https://registry.yarnpkg.com/@patternfly/react-charts/-/react-charts-6.14.29.tgz#bae620dd9e249140ba3bc67692ce20b7c1682f21" - integrity sha512-bmpfhdhn0gnmZCCIeuGK/N6a6nb2TFWvBv8WZzjQq1lgxW3apeQGnXAEWg/iLEsRHrk19T7hbqoSTmh2t5/HIQ== +"@patternfly/react-charts@^6.15.0": + version "6.15.0" + resolved "https://registry.yarnpkg.com/@patternfly/react-charts/-/react-charts-6.15.0.tgz#6bb279baafb87d7a5285c0489b67928d4c8546a3" + integrity sha512-yXHY84UBP8fatNdLw73PEzhcl2+VgooaGvwLT4ZKkQHDRYBW+ISvBUfLe5k9qg2Qn6asTjNdycdFq0HatG0Olg== dependencies: "@patternfly/react-styles" "^4.10.11" "@patternfly/react-tokens" "^4.11.12" @@ -592,7 +592,7 @@ victory-voronoi-container "^35.4.4" victory-zoom-container "^35.4.4" -"@patternfly/react-core@4.128.2", "@patternfly/react-core@^4.128.2": +"@patternfly/react-core@^4.128.2": version "4.128.2" resolved "https://registry.yarnpkg.com/@patternfly/react-core/-/react-core-4.128.2.tgz#dd0c218bc75a32ee41c69e3d51bead6b157c4aae" integrity sha512-EhrxE3+V7AYVhbERrcRVH7oY6TeVRqqzaRx8HXWnyn/hxE2rTzhhaLHyjotxk9mGYmIYtMuMebBHFbX0g+6Ymg== @@ -605,17 +605,17 @@ tippy.js "5.1.2" tslib "1.13.0" -"@patternfly/react-icons@4.10.11", "@patternfly/react-icons@^4.10.11": +"@patternfly/react-icons@^4.10.11": version "4.10.11" resolved "https://registry.yarnpkg.com/@patternfly/react-icons/-/react-icons-4.10.11.tgz#9bed483fc37c8b795b3fb98c17ede00eef775857" integrity sha512-Qyxwvghb9HZB2do3UVw4EzJSvqWaw/AEw6mFzqshZiIm2oPrL4NkvavwDt5WRicz5sbyWTZluB4grOj33PEpww== -"@patternfly/react-styles@4.10.11", "@patternfly/react-styles@^4.10.11": +"@patternfly/react-styles@^4.10.11": version "4.10.11" resolved "https://registry.yarnpkg.com/@patternfly/react-styles/-/react-styles-4.10.11.tgz#6bda5673a71037c0fb9be7e11a117ed8cfea6ce0" integrity sha512-M+NhTtAXreJzMAV2Z1P2pbnKpRYnWbB5iZ6mxB0tkxxG+KyZ0/se8M5rUepLOE/n7BMq8IiOjPJ9zu/vpWj0gA== -"@patternfly/react-table@4.27.24": +"@patternfly/react-table@^4.27.24": version "4.27.24" resolved "https://registry.yarnpkg.com/@patternfly/react-table/-/react-table-4.27.24.tgz#c61947800d9c82fae3d46a03a1e9989ec49f5f61" integrity sha512-LXKWtCeEJ4KR8ZnyeAPHdDQFJC9KQe/2Z7yJxBHy8gWciLAPcrLvnTtAb+d1O2lFXKMpUKFNUIwzVvuAffjDSA== @@ -627,7 +627,7 @@ lodash "^4.17.19" tslib "1.13.0" -"@patternfly/react-tokens@4.11.12", "@patternfly/react-tokens@^4.11.12": +"@patternfly/react-tokens@^4.11.12": version "4.11.12" resolved "https://registry.yarnpkg.com/@patternfly/react-tokens/-/react-tokens-4.11.12.tgz#0d4d88ec768cbf5c4b46e75dc8673ba97448823c" integrity sha512-PTEc2CQa/BqcDcUwT0V02l+ZoJa+bheLlh9R5g1+JQ6vlqH31gk0dpHmj6goEcSDLkbvMJgr3kNZdJsP1VdBMg== From 0dfa968a358fd4b660b4f5c1a4d68bad7d5690ab Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Wed, 9 Jun 2021 09:07:16 -0400 Subject: [PATCH 045/141] GCP & Azure empty states have grammatical error https://issues.redhat.com/browse/COST-1493 --- src/locales/en.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/locales/en.json b/src/locales/en.json index 84429b5a3..3589cfb97 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -738,9 +738,9 @@ "no_providers_state": { "aws_desc": "Add an Amazon Web Services account to see a total cost breakdown of your spend by accounts, organizational units, services, regions, or tags.", "aws_title": "Track your Amazon Web Services spending!", - "azure_desc": "Add an Microsoft Azure account to see a total cost breakdown of your spend by accounts, services, regions, or tags.", + "azure_desc": "Add a Microsoft Azure account to see a total cost breakdown of your spend by accounts, services, regions, or tags.", "azure_title": "Track your Microsoft Azure spending!", - "gcp_desc": "Add an Google Cloud Platform account to see a total cost breakdown of your spend by accounts, services, regions, or tags.", + "gcp_desc": "Add a Google Cloud Platform account to see a total cost breakdown of your spend by accounts, services, regions, or tags.", "gcp_title": "Track your Google Cloud Platform spending!", "get_started": "Get started with Sources", "ibm_desc": "Add an IBM Cloud account to see a total cost breakdown of your spend by accounts, services, regions, or tags.", From e0fab6a09565e7964bd34a9910849675683b1350 Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Wed, 9 Jun 2021 10:32:42 -0400 Subject: [PATCH 046/141] Added OpenShift Infrastructure chart to overview https://issues.redhat.com/browse/COST-1491 --- .../dailyTrendChart/dailyTrendChart.tsx | 6 + .../charts/trendChart/trendChart.tsx | 6 + src/locales/en.json | 10 +- .../components/dashboardWidgetBase.tsx | 20 ++- .../ocpInfrastructureDashboard/index.ts | 3 + .../ocpInfrastructureDashboard.tsx | 29 +++ .../ocpInfrastructureDashboardWidget.tsx | 81 +++++++++ src/pages/views/overview/overview.tsx | 9 +- src/store/dashboard/common/dashboardCommon.ts | 1 + .../ocpDashboard/ocpDashboardWidgets.ts | 4 +- .../ocpInfrastructureDashboard/index.ts | 17 ++ .../ocpInfrastructureDashboardActions.ts | 44 +++++ .../ocpInfrastructureDashboardCommon.ts | 55 ++++++ .../ocpInfrastructureDashboardReducer.ts | 43 +++++ .../ocpInfrastructureDashboardSelectors.ts | 43 +++++ .../ocpInfrastructureDashboardWidgets.ts | 170 ++++++++++++++++++ .../ocpSupplementaryDashboardWidgets.ts | 1 + src/store/rootReducer.ts | 5 + 18 files changed, 539 insertions(+), 8 deletions(-) create mode 100644 src/pages/views/overview/ocpInfrastructureDashboard/index.ts create mode 100644 src/pages/views/overview/ocpInfrastructureDashboard/ocpInfrastructureDashboard.tsx create mode 100644 src/pages/views/overview/ocpInfrastructureDashboard/ocpInfrastructureDashboardWidget.tsx create mode 100644 src/store/dashboard/ocpInfrastructureDashboard/index.ts create mode 100644 src/store/dashboard/ocpInfrastructureDashboard/ocpInfrastructureDashboardActions.ts create mode 100644 src/store/dashboard/ocpInfrastructureDashboard/ocpInfrastructureDashboardCommon.ts create mode 100644 src/store/dashboard/ocpInfrastructureDashboard/ocpInfrastructureDashboardReducer.ts create mode 100644 src/store/dashboard/ocpInfrastructureDashboard/ocpInfrastructureDashboardSelectors.ts create mode 100644 src/store/dashboard/ocpInfrastructureDashboard/ocpInfrastructureDashboardWidgets.ts diff --git a/src/components/charts/dailyTrendChart/dailyTrendChart.tsx b/src/components/charts/dailyTrendChart/dailyTrendChart.tsx index 99ef9383a..75fd46d2f 100644 --- a/src/components/charts/dailyTrendChart/dailyTrendChart.tsx +++ b/src/components/charts/dailyTrendChart/dailyTrendChart.tsx @@ -47,6 +47,7 @@ interface DailyTrendChartProps { formatDatumOptions?: FormatOptions; padding?: any; showForecast?: boolean; // Show forecast legend regardless if data is available + showInfrastructureLabel?: boolean; // Show supplementary cost labels showSupplementaryLabel?: boolean; // Show supplementary cost labels showUsageLegendLabel?: boolean; // The cost legend label is shown by default title?: string; @@ -98,6 +99,7 @@ class DailyTrendChart extends React.Component { forecastConeData, previousData, showForecast, + showInfrastructureLabel = false, showSupplementaryLabel = false, showUsageLegendLabel = false, } = this.props; @@ -106,12 +108,16 @@ class DailyTrendChart extends React.Component { ? 'chart.usage_legend_label' : showSupplementaryLabel ? 'chart.cost_supplementary_legend_label' + : showInfrastructureLabel + ? 'chart.cost_infrastructure_legend_label' : 'chart.cost_legend_label'; const tooltipKey = showUsageLegendLabel ? 'chart.usage_legend_tooltip' : showSupplementaryLabel ? 'chart.cost_supplementary_legend_tooltip' + : showInfrastructureLabel + ? 'chart.cost_infrastructure_legend_tooltip' : 'chart.cost_legend_tooltip'; // Show all legends, regardless of length -- https://github.com/project-koku/koku-ui/issues/248 diff --git a/src/components/charts/trendChart/trendChart.tsx b/src/components/charts/trendChart/trendChart.tsx index 80d7dc932..1d8f963e8 100644 --- a/src/components/charts/trendChart/trendChart.tsx +++ b/src/components/charts/trendChart/trendChart.tsx @@ -44,6 +44,7 @@ interface TrendChartProps { formatDatumOptions?: FormatOptions; padding?: any; showForecast?: boolean; // Show forecast legend regardless if data is available + showInfrastructureLabel?: boolean; // Show supplementary cost labels showSupplementaryLabel?: boolean; // Show supplementary cost labels showUsageLegendLabel?: boolean; // The cost legend label is shown by default title?: string; @@ -95,6 +96,7 @@ class TrendChart extends React.Component { forecastConeData, previousData, showForecast, + showInfrastructureLabel = false, showSupplementaryLabel = false, showUsageLegendLabel = false, } = this.props; @@ -103,12 +105,16 @@ class TrendChart extends React.Component { ? 'chart.usage_legend_label' : showSupplementaryLabel ? 'chart.cost_supplementary_legend_label' + : showInfrastructureLabel + ? 'chart.cost_infrastructure_legend_label' : 'chart.cost_legend_label'; const tooltipKey = showUsageLegendLabel ? 'chart.usage_legend_tooltip' : showSupplementaryLabel ? 'chart.cost_supplementary_legend_tooltip' + : showInfrastructureLabel + ? 'chart.cost_infrastructure_legend_tooltip' : 'chart.cost_legend_tooltip'; // Show all legends, regardless of length -- https://github.com/project-koku/koku-ui/issues/248 diff --git a/src/locales/en.json b/src/locales/en.json index 3589cfb97..9c0cc181d 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -781,6 +781,11 @@ "supplementary_cost_desc": "All costs not directly attributed to the infrastructure. These costs are determined by applying a price list within a cost model to OpenShift cluster metrics.", "title": "OpenShift details" }, + "ocp_infrastructure_dashboard": { + "cost_title": "OpenShift infrastructure cost", + "cost_trend_title": "OpenShift cumulative infrastructure cost comparison ({{units}})", + "daily_cost_trend_title": "OpenShift daily infrastructure cost comparison ({{units}})" + }, "ocp_supplementary_dashboard": { "cost_title": "OpenShift supplementary cost", "cost_trend_title": "OpenShift cumulative supplementary cost comparison ({{units}})", @@ -816,7 +821,6 @@ "ocp_cloud_desc": "Infrastructure cost attributed to OpenShift Container Platform, based on a subset of cloud cost data.", "ocp_desc": "Total cost for OpenShift Container Platform, comprising the infrastructure cost and cost calculated from metrics.", "perspective": { - "all": "All", "aws": "Amazon Web Services", "aws_cloud": "Amazon Web Services filtered by OpenShift", "azure": "Microsoft Azure", @@ -824,9 +828,11 @@ "gcp": "Google Cloud Platform", "ibm": "IBM Cloud", "label": "Perspective", + "ocp_all": "All OpenShift", "ocp_cloud": "All cloud filtered by OpenShift", "ocp_usage": "OpenShift usage", - "supplementary": "Supplementary" + "ocp_infrastructure": "OpenShift infrastructure", + "ocp_supplementary": "OpenShift supplementary" } }, "page_cost_models": { diff --git a/src/pages/views/overview/components/dashboardWidgetBase.tsx b/src/pages/views/overview/components/dashboardWidgetBase.tsx index eb28052d3..1d87ccc19 100644 --- a/src/pages/views/overview/components/dashboardWidgetBase.tsx +++ b/src/pages/views/overview/components/dashboardWidgetBase.tsx @@ -102,11 +102,23 @@ class DashboardWidgetBase extends React.Component { private getChart = (containerHeight: number, height: number, adjustContainerHeight: boolean = false) => { const { chartType, trend } = this.props; if (chartType === DashboardChartType.dailyTrend) { - return this.getDailyTrendChart(containerHeight, height, adjustContainerHeight, trend.showSupplementaryLabel); + return this.getDailyTrendChart( + containerHeight, + height, + adjustContainerHeight, + trend.showInfrastructureLabel, + trend.showSupplementaryLabel + ); } else if (chartType === DashboardChartType.dailyCost) { return this.getDailyCostChart(containerHeight, height, adjustContainerHeight); } else if (chartType === DashboardChartType.trend) { - return this.getTrendChart(containerHeight, height, adjustContainerHeight, trend.showSupplementaryLabel); + return this.getTrendChart( + containerHeight, + height, + adjustContainerHeight, + trend.showInfrastructureLabel, + trend.showSupplementaryLabel + ); } else if (chartType === DashboardChartType.usage) { return this.getUsageChart(height, adjustContainerHeight); } else { @@ -200,6 +212,7 @@ class DashboardWidgetBase extends React.Component { containerHeight: number, height: number, adjustContainerHeight: boolean = false, + showInfrastructureLabel: boolean = false, showSupplementaryLabel: boolean = false ) => { const { currentReport, details, previousReport, trend } = this.props; @@ -234,6 +247,7 @@ class DashboardWidgetBase extends React.Component { height={height} previousData={previousData} showForecast={trend.computedForecastItem !== undefined} + showInfrastructureLabel={showInfrastructureLabel} showSupplementaryLabel={showSupplementaryLabel} showUsageLegendLabel={details.showUsageLegendLabel} units={units} @@ -344,6 +358,7 @@ class DashboardWidgetBase extends React.Component { containerHeight: number, height: number, adjustContainerHeight: boolean = false, + showInfrastructureLabel: boolean = false, showSupplementaryLabel: boolean = false ) => { const { currentReport, details, previousReport, t, trend } = this.props; @@ -378,6 +393,7 @@ class DashboardWidgetBase extends React.Component { height={height} previousData={previousData} showForecast={trend.computedForecastItem !== undefined} + showInfrastructureLabel={showInfrastructureLabel} showSupplementaryLabel={showSupplementaryLabel} showUsageLegendLabel={details.showUsageLegendLabel} title={title} diff --git a/src/pages/views/overview/ocpInfrastructureDashboard/index.ts b/src/pages/views/overview/ocpInfrastructureDashboard/index.ts new file mode 100644 index 000000000..efa7bd445 --- /dev/null +++ b/src/pages/views/overview/ocpInfrastructureDashboard/index.ts @@ -0,0 +1,3 @@ +import OcpInfrastructureDashboard from './ocpInfrastructureDashboard'; + +export default OcpInfrastructureDashboard; diff --git a/src/pages/views/overview/ocpInfrastructureDashboard/ocpInfrastructureDashboard.tsx b/src/pages/views/overview/ocpInfrastructureDashboard/ocpInfrastructureDashboard.tsx new file mode 100644 index 000000000..526b30654 --- /dev/null +++ b/src/pages/views/overview/ocpInfrastructureDashboard/ocpInfrastructureDashboard.tsx @@ -0,0 +1,29 @@ +import { DashboardBase } from 'pages/views/overview/components/dashboardBase'; +import { WithTranslation, withTranslation } from 'react-i18next'; +import { connect } from 'react-redux'; +import { createMapStateToProps } from 'store/common'; +import { ocpSupplementaryDashboardSelectors } from 'store/dashboard/ocpSupplementaryDashboard'; + +import { OcpInfrastructureDashboardWidget } from './ocpInfrastructureDashboardWidget'; + +type OcpSupplementaryDashboardOwnProps = WithTranslation; + +interface OcpSupplementaryDashboardStateProps { + DashboardWidget: typeof OcpInfrastructureDashboardWidget; + widgets: number[]; +} + +const mapStateToProps = createMapStateToProps( + // eslint-disable-next-line @typescript-eslint/no-unused-vars + (state, props) => { + return { + DashboardWidget: OcpInfrastructureDashboardWidget, + selectWidgets: ocpSupplementaryDashboardSelectors.selectWidgets(state), + widgets: ocpSupplementaryDashboardSelectors.selectCurrentWidgets(state), + }; + } +); + +const OcpInfrastructureDashboard = withTranslation()(connect(mapStateToProps, {})(DashboardBase)); + +export default OcpInfrastructureDashboard; diff --git a/src/pages/views/overview/ocpInfrastructureDashboard/ocpInfrastructureDashboardWidget.tsx b/src/pages/views/overview/ocpInfrastructureDashboard/ocpInfrastructureDashboardWidget.tsx new file mode 100644 index 000000000..edad956c8 --- /dev/null +++ b/src/pages/views/overview/ocpInfrastructureDashboard/ocpInfrastructureDashboardWidget.tsx @@ -0,0 +1,81 @@ +import { + DashboardWidgetBase, + DashboardWidgetOwnProps, + DashboardWidgetStateProps, +} from 'pages/views/overview/components/dashboardWidgetBase'; +import { withTranslation } from 'react-i18next'; +import { connect } from 'react-redux'; +import { createMapStateToProps } from 'store/common'; +import { + ocpInfrastructureDashboardActions, + ocpInfrastructureDashboardSelectors, + OcpInfrastructureDashboardTab, +} from 'store/dashboard/ocpInfrastructureDashboard'; +import { forecastSelectors } from 'store/forecasts'; +import { reportSelectors } from 'store/reports'; +import { ComputedOcpReportItemsParams } from 'utils/computedReport/getComputedOcpReportItems'; + +interface OcpInfrastructureDashboardWidgetDispatchProps { + fetchForecasts: typeof ocpInfrastructureDashboardActions.fetchWidgetForecasts; + fetchReports: typeof ocpInfrastructureDashboardActions.fetchWidgetReports; + updateTab: typeof ocpInfrastructureDashboardActions.changeWidgetTab; +} + +export const getIdKeyForTab = (tab: OcpInfrastructureDashboardTab): ComputedOcpReportItemsParams['idKey'] => { + switch (tab) { + case OcpInfrastructureDashboardTab.clusters: + return 'cluster'; + case OcpInfrastructureDashboardTab.nodes: + return 'node'; + case OcpInfrastructureDashboardTab.projects: + return 'project'; + } +}; + +const mapStateToProps = createMapStateToProps( + (state, { widgetId }) => { + const widget = ocpInfrastructureDashboardSelectors.selectWidget(state, widgetId); + const queries = ocpInfrastructureDashboardSelectors.selectWidgetQueries(state, widgetId); + return { + ...widget, + getIdKeyForTab, + currentQuery: queries.current, + forecastQuery: queries.forecast, + previousQuery: queries.previous, + tabsQuery: queries.tabs, + currentReport: reportSelectors.selectReport(state, widget.reportPathsType, widget.reportType, queries.current), + currentReportFetchStatus: reportSelectors.selectReportFetchStatus( + state, + widget.reportPathsType, + widget.reportType, + queries.current + ), + forecast: forecastSelectors.selectForecast( + state, + widget.forecastPathsType, + widget.forecastType, + queries.forecast + ), + previousReport: reportSelectors.selectReport(state, widget.reportPathsType, widget.reportType, queries.previous), + tabsReport: reportSelectors.selectReport(state, widget.reportPathsType, widget.reportType, queries.tabs), + tabsReportFetchStatus: reportSelectors.selectReportFetchStatus( + state, + widget.reportPathsType, + widget.reportType, + queries.tabs + ), + }; + } +); + +const mapDispatchToProps: OcpInfrastructureDashboardWidgetDispatchProps = { + fetchForecasts: ocpInfrastructureDashboardActions.fetchWidgetForecasts, + fetchReports: ocpInfrastructureDashboardActions.fetchWidgetReports, + updateTab: ocpInfrastructureDashboardActions.changeWidgetTab, +}; + +const OcpInfrastructureDashboardWidget = withTranslation()( + connect(mapStateToProps, mapDispatchToProps)(DashboardWidgetBase) +); + +export { OcpInfrastructureDashboardWidget }; diff --git a/src/pages/views/overview/overview.tsx b/src/pages/views/overview/overview.tsx index 79fe3b75f..322a6c8bd 100644 --- a/src/pages/views/overview/overview.tsx +++ b/src/pages/views/overview/overview.tsx @@ -19,6 +19,7 @@ import GcpDashboard from 'pages/views/overview/gcpDashboard'; import IbmDashboard from 'pages/views/overview/ibmDashboard'; import OcpCloudDashboard from 'pages/views/overview/ocpCloudDashboard'; import OcpDashboard from 'pages/views/overview/ocpDashboard'; +import OcpInfrastructureDashboard from 'pages/views/overview/ocpInfrastructureDashboard'; import OcpSupplementaryDashboard from 'pages/views/overview/ocpSupplementaryDashboard'; import OcpUsageDashboard from 'pages/views/overview/ocpUsageDashboard'; import { hasCurrentMonthData, hasPreviousMonthData } from 'pages/views/utils/providers'; @@ -55,6 +56,7 @@ const enum InfrastructurePerspective { // eslint-disable-next-line no-shadow const enum OcpPerspective { all = 'all', + infrastructure = 'infrastructure', supplementary = 'supplementary', } @@ -116,8 +118,9 @@ type OverviewProps = OverviewOwnProps & OverviewStateProps; // Ocp options const ocpOptions = [ - { label: 'overview.perspective.all', value: 'all' }, - { label: 'overview.perspective.supplementary', value: 'supplementary' }, + { label: 'overview.perspective.ocp_all', value: 'all' }, + { label: 'overview.perspective.ocp_infrastructure', value: 'infrastructure' }, + { label: 'overview.perspective.ocp_supplementary', value: 'supplementary' }, ]; // Infrastructure AWS options @@ -383,6 +386,8 @@ class OverviewBase extends React.Component { const hasData = hasCurrentMonthData(ocpProviders) || hasPreviousMonthData(ocpProviders); if (currentOcpPerspective === OcpPerspective.all) { return hasData ? : noData; + } else if (currentOcpPerspective === OcpPerspective.infrastructure) { + return hasData ? : noData; } else if (currentOcpPerspective === OcpPerspective.supplementary) { return hasData ? : noData; } else { diff --git a/src/store/dashboard/common/dashboardCommon.ts b/src/store/dashboard/common/dashboardCommon.ts index 4d963ea27..831c200ba 100644 --- a/src/store/dashboard/common/dashboardCommon.ts +++ b/src/store/dashboard/common/dashboardCommon.ts @@ -60,6 +60,7 @@ export interface DashboardWidget { computedReportItem: string; // The computed report item to use in charts, summary, etc. computedReportItemValue: string; // The computed report value (e.g., raw, markup, total, or usage) dailyTitleKey?: string; + showInfrastructureLabel?: boolean; // Trend chart legend items show "Infrastructure cost" instead of "cost" showSupplementaryLabel?: boolean; // Trend chart legend items show "Supplementary cost" instead of "cost" titleKey: string; type: number; diff --git a/src/store/dashboard/ocpDashboard/ocpDashboardWidgets.ts b/src/store/dashboard/ocpDashboard/ocpDashboardWidgets.ts index a3edee441..329e071fd 100644 --- a/src/store/dashboard/ocpDashboard/ocpDashboardWidgets.ts +++ b/src/store/dashboard/ocpDashboard/ocpDashboardWidgets.ts @@ -22,7 +22,7 @@ export const costSummaryWidget: OcpDashboardWidget = { reportPathsType: ReportPathsType.ocp, reportType: ReportType.cost, details: { - adjustContainerHeight: true, + // adjustContainerHeight: true, appNavId: 'ocp', costKey: 'cost', formatOptions: { @@ -49,7 +49,7 @@ export const costSummaryWidget: OcpDashboardWidget = { formatOptions: {}, }, availableTabs: [OcpDashboardTab.projects, OcpDashboardTab.clusters], - chartType: DashboardChartType.dailyCost, + chartType: DashboardChartType.dailyTrend, // No longer showing infrastructure for DashboardChartType.dailyCost currentTab: OcpDashboardTab.projects, }; diff --git a/src/store/dashboard/ocpInfrastructureDashboard/index.ts b/src/store/dashboard/ocpInfrastructureDashboard/index.ts new file mode 100644 index 000000000..6f1d873ac --- /dev/null +++ b/src/store/dashboard/ocpInfrastructureDashboard/index.ts @@ -0,0 +1,17 @@ +import * as ocpInfrastructureDashboardActions from './ocpInfrastructureDashboardActions'; +import { + ocpInfrastructureDashboardStateKey, + OcpInfrastructureDashboardTab, + OcpInfrastructureDashboardWidget, +} from './ocpInfrastructureDashboardCommon'; +import { ocpInfrastructureDashboardReducer } from './ocpInfrastructureDashboardReducer'; +import * as ocpInfrastructureDashboardSelectors from './ocpInfrastructureDashboardSelectors'; + +export { + ocpInfrastructureDashboardStateKey, + ocpInfrastructureDashboardReducer, + ocpInfrastructureDashboardActions, + ocpInfrastructureDashboardSelectors, + OcpInfrastructureDashboardTab, + OcpInfrastructureDashboardWidget, +}; diff --git a/src/store/dashboard/ocpInfrastructureDashboard/ocpInfrastructureDashboardActions.ts b/src/store/dashboard/ocpInfrastructureDashboard/ocpInfrastructureDashboardActions.ts new file mode 100644 index 000000000..03e542406 --- /dev/null +++ b/src/store/dashboard/ocpInfrastructureDashboard/ocpInfrastructureDashboardActions.ts @@ -0,0 +1,44 @@ +import { ThunkAction } from 'store/common'; +import { forecastActions } from 'store/forecasts'; +import { reportActions } from 'store/reports'; +import { createAction } from 'typesafe-actions'; + +import { OcpInfrastructureDashboardTab } from './ocpInfrastructureDashboardCommon'; +import { selectWidget, selectWidgetQueries } from './ocpInfrastructureDashboardSelectors'; + +export const fetchWidgetForecasts = (id: number): ThunkAction => { + return (dispatch, getState) => { + const state = getState(); + const widget = selectWidget(state, id); + + if (widget.forecastPathsType && widget.forecastType) { + const { forecast } = selectWidgetQueries(state, id); + dispatch(forecastActions.fetchForecast(widget.forecastPathsType, widget.forecastType, forecast)); + } + }; +}; + +export const fetchWidgetReports = (id: number): ThunkAction => { + return (dispatch, getState) => { + const state = getState(); + const widget = selectWidget(state, id); + const { previous, current, tabs } = selectWidgetQueries(state, id); + dispatch(reportActions.fetchReport(widget.reportPathsType, widget.reportType, current)); + dispatch(reportActions.fetchReport(widget.reportPathsType, widget.reportType, previous)); + if (widget.availableTabs) { + dispatch(reportActions.fetchReport(widget.reportPathsType, widget.reportType, tabs)); + } + }; +}; + +export const setWidgetTab = createAction('ocpInfrastructureDashboard/widget/tab')<{ + id: number; + tab: OcpInfrastructureDashboardTab; +}>(); + +export const changeWidgetTab = (id: number, tab: OcpInfrastructureDashboardTab): ThunkAction => { + return dispatch => { + dispatch(setWidgetTab({ id, tab })); + dispatch(fetchWidgetReports(id)); + }; +}; diff --git a/src/store/dashboard/ocpInfrastructureDashboard/ocpInfrastructureDashboardCommon.ts b/src/store/dashboard/ocpInfrastructureDashboard/ocpInfrastructureDashboardCommon.ts new file mode 100644 index 000000000..9feb4ecec --- /dev/null +++ b/src/store/dashboard/ocpInfrastructureDashboard/ocpInfrastructureDashboardCommon.ts @@ -0,0 +1,55 @@ +import { getQuery, OcpFilters, OcpQuery } from 'api/queries/ocpQuery'; +import { DashboardWidget } from 'store/dashboard/common/dashboardCommon'; + +export const ocpInfrastructureDashboardStateKey = 'ocpInfrastructureDashboard'; +export const ocpInfrastructureDashboardDefaultFilters: OcpFilters = { + time_scope_units: 'month', + time_scope_value: -1, + resolution: 'daily', +}; +export const ocpInfrastructureDashboardTabFilters: OcpFilters = { + ...ocpInfrastructureDashboardDefaultFilters, + limit: 3, +}; + +// eslint-disable-next-line no-shadow +export const enum OcpInfrastructureDashboardTab { + nodes = 'nodes', + clusters = 'clusters', + projects = 'projects', +} + +export interface OcpInfrastructureDashboardWidget extends DashboardWidget {} + +// Todo: cluster, project, node +export function getGroupByForTab(tab: OcpInfrastructureDashboardTab): OcpQuery['group_by'] { + switch (tab) { + case OcpInfrastructureDashboardTab.projects: + return { project: '*' }; + case OcpInfrastructureDashboardTab.clusters: + return { cluster: '*' }; + case OcpInfrastructureDashboardTab.nodes: + return { node: '*' }; + default: + return {}; + } +} + +export function getQueryForWidget(filter: OcpFilters = ocpInfrastructureDashboardDefaultFilters, props?) { + const query: OcpQuery = { + filter, + ...(props ? props : {}), + }; + return getQuery(query); +} + +export function getQueryForWidgetTabs( + widget: OcpInfrastructureDashboardWidget, + filter: OcpFilters = ocpInfrastructureDashboardDefaultFilters +) { + const query: OcpQuery = { + filter, + group_by: getGroupByForTab(widget.currentTab), + }; + return getQuery(query); +} diff --git a/src/store/dashboard/ocpInfrastructureDashboard/ocpInfrastructureDashboardReducer.ts b/src/store/dashboard/ocpInfrastructureDashboard/ocpInfrastructureDashboardReducer.ts new file mode 100644 index 000000000..2e8207d9d --- /dev/null +++ b/src/store/dashboard/ocpInfrastructureDashboard/ocpInfrastructureDashboardReducer.ts @@ -0,0 +1,43 @@ +import { ActionType, getType } from 'typesafe-actions'; + +import { setWidgetTab } from './ocpInfrastructureDashboardActions'; +import { OcpInfrastructureDashboardWidget } from './ocpInfrastructureDashboardCommon'; +import { costSummaryWidget, cpuWidget, memoryWidget, volumeWidget } from './ocpInfrastructureDashboardWidgets'; + +export type OcpInfrastructureDashboardAction = ActionType; + +export type OcpInfrastructureDashboardState = Readonly<{ + widgets: Record; + currentWidgets: number[]; +}>; + +export const defaultState: OcpInfrastructureDashboardState = { + currentWidgets: [costSummaryWidget.id, cpuWidget.id, memoryWidget.id, volumeWidget.id], + widgets: { + [costSummaryWidget.id]: costSummaryWidget, + [cpuWidget.id]: cpuWidget, + [memoryWidget.id]: memoryWidget, + [volumeWidget.id]: volumeWidget, + }, +}; + +export function ocpInfrastructureDashboardReducer( + state = defaultState, + action: OcpInfrastructureDashboardAction +): OcpInfrastructureDashboardState { + switch (action.type) { + case getType(setWidgetTab): + return { + ...state, + widgets: { + ...state.widgets, + [action.payload.id]: { + ...state.widgets[action.payload.id], + currentTab: action.payload.tab, + }, + }, + }; + default: + return state; + } +} diff --git a/src/store/dashboard/ocpInfrastructureDashboard/ocpInfrastructureDashboardSelectors.ts b/src/store/dashboard/ocpInfrastructureDashboard/ocpInfrastructureDashboardSelectors.ts new file mode 100644 index 000000000..6eb992397 --- /dev/null +++ b/src/store/dashboard/ocpInfrastructureDashboard/ocpInfrastructureDashboardSelectors.ts @@ -0,0 +1,43 @@ +import { RootState } from 'store/rootReducer'; + +import { + getQueryForWidget, + getQueryForWidgetTabs, + ocpInfrastructureDashboardDefaultFilters, + ocpInfrastructureDashboardStateKey, + ocpInfrastructureDashboardTabFilters, +} from './ocpInfrastructureDashboardCommon'; + +export const selectOcpInfrastructureDashboardState = (state: RootState) => state[ocpInfrastructureDashboardStateKey]; + +export const selectWidgets = (state: RootState) => selectOcpInfrastructureDashboardState(state).widgets; + +export const selectWidget = (state: RootState, id: number) => selectWidgets(state)[id]; + +export const selectCurrentWidgets = (state: RootState) => selectOcpInfrastructureDashboardState(state).currentWidgets; + +export const selectWidgetQueries = (state: RootState, id: number) => { + const widget = selectWidget(state, id); + + const defaultFilter = { + ...ocpInfrastructureDashboardDefaultFilters, + ...(widget.filter ? widget.filter : {}), + }; + const tabsFilter = { + ...ocpInfrastructureDashboardTabFilters, + ...(widget.tabsFilter ? widget.tabsFilter : {}), + }; + + return { + previous: getQueryForWidget({ + ...defaultFilter, + time_scope_value: -2, + }), + current: getQueryForWidget(defaultFilter), + forecast: getQueryForWidget({}, { limit: 31 }), + tabs: getQueryForWidgetTabs(widget, { + ...tabsFilter, + resolution: 'monthly', + }), + }; +}; diff --git a/src/store/dashboard/ocpInfrastructureDashboard/ocpInfrastructureDashboardWidgets.ts b/src/store/dashboard/ocpInfrastructureDashboard/ocpInfrastructureDashboardWidgets.ts new file mode 100644 index 000000000..f2ad2e81a --- /dev/null +++ b/src/store/dashboard/ocpInfrastructureDashboard/ocpInfrastructureDashboardWidgets.ts @@ -0,0 +1,170 @@ +import { ForecastPathsType, ForecastType } from 'api/forecasts/forecast'; +import { ReportPathsType, ReportType } from 'api/reports/report'; +import { + ChartType, + ComputedForecastItemType, + ComputedReportItemType, + ComputedReportItemValueType, +} from 'components/charts/common/chartDatumUtils'; +import { DashboardChartType } from 'store/dashboard/common/dashboardCommon'; + +import { OcpInfrastructureDashboardTab, OcpInfrastructureDashboardWidget } from './ocpInfrastructureDashboardCommon'; + +let currrentId = 0; +const getId = () => currrentId++; + +export const costSummaryWidget: OcpInfrastructureDashboardWidget = { + id: getId(), + titleKey: 'ocp_infrastructure_dashboard.cost_title', + forecastPathsType: ForecastPathsType.ocp, + forecastType: ForecastType.infrastructure, + reportPathsType: ReportPathsType.ocp, + reportType: ReportType.cost, + details: { + adjustContainerHeight: true, + costKey: 'cost', + formatOptions: { + fractionDigits: 2, + }, + showHorizontal: true, + }, + trend: { + computedForecastItem: ComputedForecastItemType.infrastructure, + computedReportItem: ComputedReportItemType.infrastructure, + computedReportItemValue: ComputedReportItemValueType.total, + formatOptions: {}, + dailyTitleKey: 'ocp_infrastructure_dashboard.daily_cost_trend_title', + showInfrastructureLabel: true, + titleKey: 'ocp_infrastructure_dashboard.cost_trend_title', + type: ChartType.rolling, + }, + tabsFilter: { + limit: 3, + }, + topItems: { + formatOptions: {}, + }, + availableTabs: [OcpInfrastructureDashboardTab.projects, OcpInfrastructureDashboardTab.clusters], + chartType: DashboardChartType.dailyTrend, + currentTab: OcpInfrastructureDashboardTab.projects, +}; + +export const cpuWidget: OcpInfrastructureDashboardWidget = { + id: getId(), + titleKey: 'ocp.cpu_usage_and_requests', + reportPathsType: ReportPathsType.ocp, + reportType: ReportType.cpu, + details: { + formatOptions: { + fractionDigits: 0, + }, + requestFormatOptions: { + fractionDigits: 0, + }, + requestKey: 'ocp.requests', + showUnits: true, + showUsageFirst: true, + usageFormatOptions: { + fractionDigits: 0, + }, + usageKey: 'dashboard.usage', + }, + trend: { + computedReportItem: ComputedReportItemType.usage, + computedReportItemValue: ComputedReportItemValueType.none, + formatOptions: { + fractionDigits: 2, + }, + titleKey: 'ocp.daily_usage_request_comparison', + type: ChartType.daily, + }, + topItems: { + formatOptions: {}, + }, + // availableTabs: [ + // OcpInfrastructureDashboardTab.projects, + // OcpInfrastructureDashboardTab.clusters, + // ], + chartType: DashboardChartType.usage, + currentTab: OcpInfrastructureDashboardTab.projects, +}; + +export const memoryWidget: OcpInfrastructureDashboardWidget = { + id: getId(), + titleKey: 'ocp.memory_usage_and_requests', + reportPathsType: ReportPathsType.ocp, + reportType: ReportType.memory, + details: { + formatOptions: { + fractionDigits: 0, + }, + requestFormatOptions: { + fractionDigits: 0, + }, + requestKey: 'ocp.requests', + showUnits: true, + showUsageFirst: true, + usageFormatOptions: { + fractionDigits: 0, + }, + usageKey: 'dashboard.usage', + }, + trend: { + computedReportItem: ComputedReportItemType.usage, + computedReportItemValue: ComputedReportItemValueType.total, + formatOptions: { + fractionDigits: 2, + }, + titleKey: 'ocp.daily_usage_request_comparison', + type: ChartType.daily, + }, + topItems: { + formatOptions: {}, + }, + // availableTabs: [ + // OcpInfrastructureDashboardTab.projects, + // OcpInfrastructureDashboardTab.clusters, + // ], + chartType: DashboardChartType.usage, + currentTab: OcpInfrastructureDashboardTab.projects, +}; + +export const volumeWidget: OcpInfrastructureDashboardWidget = { + id: getId(), + titleKey: 'ocp.volume_usage_and_requests', + reportPathsType: ReportPathsType.ocp, + reportType: ReportType.volume, + details: { + formatOptions: { + fractionDigits: 0, + }, + requestFormatOptions: { + fractionDigits: 0, + }, + requestKey: 'ocp.requests', + showUnits: true, + showUsageFirst: true, + usageFormatOptions: { + fractionDigits: 0, + }, + usageKey: 'dashboard.usage', + }, + trend: { + computedReportItem: ComputedReportItemType.usage, + computedReportItemValue: ComputedReportItemValueType.none, + formatOptions: { + fractionDigits: 2, + }, + titleKey: 'ocp.daily_usage_request_comparison', + type: ChartType.daily, + }, + topItems: { + formatOptions: {}, + }, + // availableTabs: [ + // OcpInfrastructureDashboardTab.projects, + // OcpInfrastructureDashboardTab.clusters, + // ], + chartType: DashboardChartType.usage, + currentTab: OcpInfrastructureDashboardTab.projects, +}; diff --git a/src/store/dashboard/ocpSupplementaryDashboard/ocpSupplementaryDashboardWidgets.ts b/src/store/dashboard/ocpSupplementaryDashboard/ocpSupplementaryDashboardWidgets.ts index 8217a0e96..293e38d5e 100644 --- a/src/store/dashboard/ocpSupplementaryDashboard/ocpSupplementaryDashboardWidgets.ts +++ b/src/store/dashboard/ocpSupplementaryDashboard/ocpSupplementaryDashboardWidgets.ts @@ -21,6 +21,7 @@ export const costSummaryWidget: OcpSupplementaryDashboardWidget = { reportPathsType: ReportPathsType.ocp, reportType: ReportType.cost, details: { + adjustContainerHeight: true, costKey: 'cost', formatOptions: { fractionDigits: 2, diff --git a/src/store/rootReducer.ts b/src/store/rootReducer.ts index add024e8e..ae2cd1636 100644 --- a/src/store/rootReducer.ts +++ b/src/store/rootReducer.ts @@ -22,6 +22,10 @@ import { gcpDashboardReducer, gcpDashboardStateKey } from 'store/dashboard/gcpDa import { ibmDashboardReducer, ibmDashboardStateKey } from 'store/dashboard/ibmDashboard'; import { ocpCloudDashboardReducer, ocpCloudDashboardStateKey } from 'store/dashboard/ocpCloudDashboard'; import { ocpDashboardReducer, ocpDashboardStateKey } from 'store/dashboard/ocpDashboard'; +import { + ocpInfrastructureDashboardReducer, + ocpInfrastructureDashboardStateKey, +} from 'store/dashboard/ocpInfrastructureDashboard'; import { ocpSupplementaryDashboardReducer, ocpSupplementaryDashboardStateKey, @@ -67,6 +71,7 @@ export const rootReducer = combineReducers({ [ocpCloudDashboardStateKey]: ocpCloudDashboardReducer, [ocpCloudDashboardStateKey]: ocpCloudDashboardReducer, [ocpHistoricalDataStateKey]: ocpHistoricalDataReducer, + [ocpInfrastructureDashboardStateKey]: ocpInfrastructureDashboardReducer, [ocpSupplementaryDashboardStateKey]: ocpSupplementaryDashboardReducer, [ocpUsageDashboardStateKey]: ocpUsageDashboardReducer, [orgStateKey]: orgReducer, From 76332b11fc016183a8fe1eeb76aab81b458e0166 Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Wed, 9 Jun 2021 10:36:37 -0400 Subject: [PATCH 047/141] Fix locales order --- src/locales/en.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/locales/en.json b/src/locales/en.json index 9c0cc181d..455b20b0d 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -830,9 +830,9 @@ "label": "Perspective", "ocp_all": "All OpenShift", "ocp_cloud": "All cloud filtered by OpenShift", - "ocp_usage": "OpenShift usage", "ocp_infrastructure": "OpenShift infrastructure", - "ocp_supplementary": "OpenShift supplementary" + "ocp_supplementary": "OpenShift supplementary", + "ocp_usage": "OpenShift usage" } }, "page_cost_models": { From 88d998af0f26340e6d8589665c53ec06368c6607 Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Wed, 9 Jun 2021 11:44:30 -0400 Subject: [PATCH 048/141] Added comment for infrastructure chart --- src/store/dashboard/ocpDashboard/ocpDashboardWidgets.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/store/dashboard/ocpDashboard/ocpDashboardWidgets.ts b/src/store/dashboard/ocpDashboard/ocpDashboardWidgets.ts index 329e071fd..81f45ac12 100644 --- a/src/store/dashboard/ocpDashboard/ocpDashboardWidgets.ts +++ b/src/store/dashboard/ocpDashboard/ocpDashboardWidgets.ts @@ -49,7 +49,7 @@ export const costSummaryWidget: OcpDashboardWidget = { formatOptions: {}, }, availableTabs: [OcpDashboardTab.projects, OcpDashboardTab.clusters], - chartType: DashboardChartType.dailyTrend, // No longer showing infrastructure for DashboardChartType.dailyCost + chartType: DashboardChartType.dailyTrend, // No longer showing infrastructure via DashboardChartType.dailyCost currentTab: OcpDashboardTab.projects, }; From 726c1d34599ca4735816500104042a47e374b9d1 Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Wed, 9 Jun 2021 13:02:22 -0400 Subject: [PATCH 049/141] Updated packages to resolve dependabot alerts --- koku-ui-manifest | 159 +++++---- package.json | 20 +- yarn.lock | 847 +++++++++++++++++++++++++---------------------- 3 files changed, 529 insertions(+), 497 deletions(-) diff --git a/koku-ui-manifest b/koku-ui-manifest index dbff59df2..41c87b206 100644 --- a/koku-ui-manifest +++ b/koku-ui-manifest @@ -68,7 +68,8 @@ mgmt_services/cost-mgmt:koku-ui/@babel/types:7.13.0.yarnlock mgmt_services/cost-mgmt:koku-ui/@bcoe/v8-coverage:0.2.3.yarnlock mgmt_services/cost-mgmt:koku-ui/@cnakazawa/watch:1.0.4.yarnlock mgmt_services/cost-mgmt:koku-ui/@discoveryjs/json-ext:0.5.2.yarnlock -mgmt_services/cost-mgmt:koku-ui/@eslint/eslintrc:0.4.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/@es-joy/jsdoccomment:0.8.0-alpha.2.yarnlock +mgmt_services/cost-mgmt:koku-ui/@eslint/eslintrc:0.4.2.yarnlock mgmt_services/cost-mgmt:koku-ui/@fortawesome/fontawesome-common-types:0.2.34.yarnlock mgmt_services/cost-mgmt:koku-ui/@fortawesome/free-solid-svg-icons:5.15.2.yarnlock mgmt_services/cost-mgmt:koku-ui/@istanbuljs/load-nyc-config:1.1.0.yarnlock @@ -119,10 +120,11 @@ mgmt_services/cost-mgmt:koku-ui/@sinonjs/commons:1.8.2.yarnlock mgmt_services/cost-mgmt:koku-ui/@sinonjs/fake-timers:6.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/@testing-library/dom:7.30.0.yarnlock mgmt_services/cost-mgmt:koku-ui/@testing-library/react:11.2.5.yarnlock +mgmt_services/cost-mgmt:koku-ui/@tootallnate/once:1.1.2.yarnlock mgmt_services/cost-mgmt:koku-ui/@types/anymatch:1.3.1.yarnlock mgmt_services/cost-mgmt:koku-ui/@types/aria-query:4.2.1.yarnlock mgmt_services/cost-mgmt:koku-ui/@types/babel__core:7.1.12.yarnlock -mgmt_services/cost-mgmt:koku-ui/@types/babel__core:7.1.12.yarnlock +mgmt_services/cost-mgmt:koku-ui/@types/babel__core:7.1.14.yarnlock mgmt_services/cost-mgmt:koku-ui/@types/babel__generator:7.6.2.yarnlock mgmt_services/cost-mgmt:koku-ui/@types/babel__template:7.4.0.yarnlock mgmt_services/cost-mgmt:koku-ui/@types/babel__traverse:7.11.0.yarnlock @@ -152,15 +154,16 @@ mgmt_services/cost-mgmt:koku-ui/@types/istanbul-lib-coverage:2.0.3.yarnlock mgmt_services/cost-mgmt:koku-ui/@types/istanbul-lib-report:3.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/@types/istanbul-reports:3.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/@types/jest:26.0.20.yarnlock -mgmt_services/cost-mgmt:koku-ui/@types/jest:26.0.20.yarnlock +mgmt_services/cost-mgmt:koku-ui/@types/jest:26.0.23.yarnlock mgmt_services/cost-mgmt:koku-ui/@types/json-schema:7.0.7.yarnlock mgmt_services/cost-mgmt:koku-ui/@types/json-schema:7.0.7.yarnlock mgmt_services/cost-mgmt:koku-ui/@types/json-schema:7.0.7.yarnlock mgmt_services/cost-mgmt:koku-ui/@types/json5:0.0.29.yarnlock +mgmt_services/cost-mgmt:koku-ui/@types/mdast:3.0.3.yarnlock mgmt_services/cost-mgmt:koku-ui/@types/minimatch:3.0.4.yarnlock mgmt_services/cost-mgmt:koku-ui/@types/node:14.14.33.yarnlock mgmt_services/cost-mgmt:koku-ui/@types/normalize-package-data:2.4.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/@types/prettier:2.2.2.yarnlock +mgmt_services/cost-mgmt:koku-ui/@types/prettier:2.2.3.yarnlock mgmt_services/cost-mgmt:koku-ui/@types/prop-types:15.7.3.yarnlock mgmt_services/cost-mgmt:koku-ui/@types/prop-types:15.7.3.yarnlock mgmt_services/cost-mgmt:koku-ui/@types/qs:6.9.5.yarnlock @@ -179,6 +182,8 @@ mgmt_services/cost-mgmt:koku-ui/@types/source-list-map:0.1.2.yarnlock mgmt_services/cost-mgmt:koku-ui/@types/stack-utils:2.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/@types/tapable:1.0.6.yarnlock mgmt_services/cost-mgmt:koku-ui/@types/uglify-js:3.13.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/@types/unist:2.0.3.yarnlock +mgmt_services/cost-mgmt:koku-ui/@types/unist:2.0.3.yarnlock mgmt_services/cost-mgmt:koku-ui/@types/warning:3.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/@types/webpack-sources:2.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/@types/webpack:4.41.26.yarnlock @@ -206,9 +211,9 @@ mgmt_services/cost-mgmt:koku-ui/@webassemblyjs/wasm-gen:1.11.0.yarnlock mgmt_services/cost-mgmt:koku-ui/@webassemblyjs/wasm-opt:1.11.0.yarnlock mgmt_services/cost-mgmt:koku-ui/@webassemblyjs/wasm-parser:1.11.0.yarnlock mgmt_services/cost-mgmt:koku-ui/@webassemblyjs/wast-printer:1.11.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/@webpack-cli/configtest:1.0.3.yarnlock -mgmt_services/cost-mgmt:koku-ui/@webpack-cli/info:1.2.4.yarnlock -mgmt_services/cost-mgmt:koku-ui/@webpack-cli/serve:1.4.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/@webpack-cli/configtest:1.0.4.yarnlock +mgmt_services/cost-mgmt:koku-ui/@webpack-cli/info:1.3.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/@webpack-cli/serve:1.5.1.yarnlock mgmt_services/cost-mgmt:koku-ui/@wojtekmaj/enzyme-adapter-react-17:0.4.1.yarnlock mgmt_services/cost-mgmt:koku-ui/@xstate/graph:1.3.0.yarnlock mgmt_services/cost-mgmt:koku-ui/@xstate/test:0.4.2.yarnlock @@ -225,8 +230,9 @@ mgmt_services/cost-mgmt:koku-ui/acorn-jsx:5.3.1.yarnlock mgmt_services/cost-mgmt:koku-ui/acorn-walk:7.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/acorn:7.4.1.yarnlock mgmt_services/cost-mgmt:koku-ui/acorn:7.4.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/acorn:8.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/acorn:8.2.4.yarnlock +mgmt_services/cost-mgmt:koku-ui/acorn:8.3.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/agent-base:6.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/airbnb-prop-types:2.16.0.yarnlock mgmt_services/cost-mgmt:koku-ui/ajv-errors:1.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/ajv-keywords:3.5.2.yarnlock @@ -236,8 +242,7 @@ mgmt_services/cost-mgmt:koku-ui/ajv:6.12.6.yarnlock mgmt_services/cost-mgmt:koku-ui/ajv:6.12.6.yarnlock mgmt_services/cost-mgmt:koku-ui/ajv:6.12.6.yarnlock mgmt_services/cost-mgmt:koku-ui/ajv:6.12.6.yarnlock -mgmt_services/cost-mgmt:koku-ui/ajv:6.12.6.yarnlock -mgmt_services/cost-mgmt:koku-ui/ajv:7.2.1.yarnlock +mgmt_services/cost-mgmt:koku-ui/ajv:8.6.0.yarnlock mgmt_services/cost-mgmt:koku-ui/ansi-colors:3.2.4.yarnlock mgmt_services/cost-mgmt:koku-ui/ansi-colors:4.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/ansi-escapes:4.3.1.yarnlock @@ -263,6 +268,7 @@ mgmt_services/cost-mgmt:koku-ui/array-flatten:1.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/array-flatten:2.1.2.yarnlock mgmt_services/cost-mgmt:koku-ui/array-includes:3.1.3.yarnlock mgmt_services/cost-mgmt:koku-ui/array-includes:3.1.3.yarnlock +mgmt_services/cost-mgmt:koku-ui/array-includes:3.1.3.yarnlock mgmt_services/cost-mgmt:koku-ui/array-union:1.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/array-union:2.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/array-uniq:1.0.3.yarnlock @@ -270,6 +276,7 @@ mgmt_services/cost-mgmt:koku-ui/array-unique:0.3.2.yarnlock mgmt_services/cost-mgmt:koku-ui/array.prototype.find:2.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/array.prototype.flat:1.2.4.yarnlock mgmt_services/cost-mgmt:koku-ui/array.prototype.flatmap:1.2.4.yarnlock +mgmt_services/cost-mgmt:koku-ui/array.prototype.flatmap:1.2.4.yarnlock mgmt_services/cost-mgmt:koku-ui/asap:2.0.6.yarnlock mgmt_services/cost-mgmt:koku-ui/asn1:0.2.4.yarnlock mgmt_services/cost-mgmt:koku-ui/assert-plus:1.0.0.yarnlock @@ -288,7 +295,6 @@ mgmt_services/cost-mgmt:koku-ui/awesome-imperative-promise:1.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/awesome-only-resolves-last-promise:1.0.3.yarnlock mgmt_services/cost-mgmt:koku-ui/aws-sign2:0.7.0.yarnlock mgmt_services/cost-mgmt:koku-ui/aws4:1.11.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/aws4:1.11.0.yarnlock mgmt_services/cost-mgmt:koku-ui/axe-core:4.1.3.yarnlock mgmt_services/cost-mgmt:koku-ui/axios:0.21.1.yarnlock mgmt_services/cost-mgmt:koku-ui/axios:0.21.1.yarnlock @@ -299,7 +305,6 @@ mgmt_services/cost-mgmt:koku-ui/babel-plugin-istanbul:6.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/babel-plugin-jest-hoist:26.6.2.yarnlock mgmt_services/cost-mgmt:koku-ui/babel-preset-current-node-syntax:1.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/babel-preset-jest:26.6.2.yarnlock -mgmt_services/cost-mgmt:koku-ui/bail:1.0.5.yarnlock mgmt_services/cost-mgmt:koku-ui/balanced-match:1.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/base64-js:1.5.1.yarnlock mgmt_services/cost-mgmt:koku-ui/base:0.11.2.yarnlock @@ -377,7 +382,6 @@ mgmt_services/cost-mgmt:koku-ui/clone:2.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/clone:1.0.4.yarnlock mgmt_services/cost-mgmt:koku-ui/co:4.6.0.yarnlock mgmt_services/cost-mgmt:koku-ui/code-point-at:1.1.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/collapse-white-space:1.0.6.yarnlock mgmt_services/cost-mgmt:koku-ui/collect-v8-coverage:1.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/collection-visit:1.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/color-convert:1.9.3.yarnlock @@ -394,7 +398,8 @@ mgmt_services/cost-mgmt:koku-ui/commander:7.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/commander:2.20.3.yarnlock mgmt_services/cost-mgmt:koku-ui/commander:2.20.3.yarnlock mgmt_services/cost-mgmt:koku-ui/commander:4.1.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/comment-parser:1.1.2.yarnlock +mgmt_services/cost-mgmt:koku-ui/comment-parser:1.1.5.yarnlock +mgmt_services/cost-mgmt:koku-ui/comment-parser:1.1.5.yarnlock mgmt_services/cost-mgmt:koku-ui/component-emitter:1.3.0.yarnlock mgmt_services/cost-mgmt:koku-ui/compressible:2.0.18.yarnlock mgmt_services/cost-mgmt:koku-ui/compression:1.7.4.yarnlock @@ -455,12 +460,14 @@ mgmt_services/cost-mgmt:koku-ui/debug:2.6.9.yarnlock mgmt_services/cost-mgmt:koku-ui/debug:2.6.9.yarnlock mgmt_services/cost-mgmt:koku-ui/debug:2.6.9.yarnlock mgmt_services/cost-mgmt:koku-ui/debug:2.6.9.yarnlock -mgmt_services/cost-mgmt:koku-ui/debug:3.2.7.yarnlock -mgmt_services/cost-mgmt:koku-ui/debug:3.2.7.yarnlock mgmt_services/cost-mgmt:koku-ui/debug:4.3.1.yarnlock mgmt_services/cost-mgmt:koku-ui/debug:4.3.1.yarnlock mgmt_services/cost-mgmt:koku-ui/debug:4.3.1.yarnlock mgmt_services/cost-mgmt:koku-ui/debug:4.3.1.yarnlock +mgmt_services/cost-mgmt:koku-ui/debug:4.3.1.yarnlock +mgmt_services/cost-mgmt:koku-ui/debug:4.3.1.yarnlock +mgmt_services/cost-mgmt:koku-ui/debug:3.2.7.yarnlock +mgmt_services/cost-mgmt:koku-ui/debug:3.2.7.yarnlock mgmt_services/cost-mgmt:koku-ui/decamelize:1.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/decamelize:1.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/decimal.js:10.2.1.yarnlock @@ -542,6 +549,7 @@ mgmt_services/cost-mgmt:koku-ui/error-ex:1.3.2.yarnlock mgmt_services/cost-mgmt:koku-ui/es-abstract:1.18.0.yarnlock mgmt_services/cost-mgmt:koku-ui/es-abstract:1.18.0.yarnlock mgmt_services/cost-mgmt:koku-ui/es-abstract:1.18.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/es-abstract:1.18.3.yarnlock mgmt_services/cost-mgmt:koku-ui/es-module-lexer:0.4.1.yarnlock mgmt_services/cost-mgmt:koku-ui/es-to-primitive:1.2.1.yarnlock mgmt_services/cost-mgmt:koku-ui/escalade:3.1.1.yarnlock @@ -560,16 +568,16 @@ mgmt_services/cost-mgmt:koku-ui/eslint-import-resolver-node:0.3.4.yarnlock mgmt_services/cost-mgmt:koku-ui/eslint-module-utils:2.6.0.yarnlock mgmt_services/cost-mgmt:koku-ui/eslint-plugin-import:2.22.1.yarnlock mgmt_services/cost-mgmt:koku-ui/eslint-plugin-jest:21.27.2.yarnlock -mgmt_services/cost-mgmt:koku-ui/eslint-plugin-jsdoc:32.2.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/eslint-plugin-jsdoc:35.1.3.yarnlock mgmt_services/cost-mgmt:koku-ui/eslint-plugin-jsx-a11y:6.4.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/eslint-plugin-markdown:2.1.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/eslint-plugin-markdown:2.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/eslint-plugin-node:6.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/eslint-plugin-patternfly-react:4.1.5.yarnlock mgmt_services/cost-mgmt:koku-ui/eslint-plugin-prettier:2.7.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/eslint-plugin-prettier:3.3.1.yarnlock +mgmt_services/cost-mgmt:koku-ui/eslint-plugin-prettier:3.4.0.yarnlock mgmt_services/cost-mgmt:koku-ui/eslint-plugin-promise:3.8.0.yarnlock mgmt_services/cost-mgmt:koku-ui/eslint-plugin-react-hooks:4.2.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/eslint-plugin-react:7.22.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/eslint-plugin-react:7.24.0.yarnlock mgmt_services/cost-mgmt:koku-ui/eslint-plugin-react:7.22.0.yarnlock mgmt_services/cost-mgmt:koku-ui/eslint-plugin-rulesdir:0.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/eslint-plugin-simple-import-sort:5.0.3.yarnlock @@ -578,13 +586,14 @@ mgmt_services/cost-mgmt:koku-ui/eslint-restricted-globals:0.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/eslint-scope:3.7.1.yarnlock mgmt_services/cost-mgmt:koku-ui/eslint-scope:5.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/eslint-scope:5.1.1.yarnlock +mgmt_services/cost-mgmt:koku-ui/eslint-scope:5.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/eslint-utils:2.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/eslint-utils:2.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/eslint-visitor-keys:1.3.0.yarnlock mgmt_services/cost-mgmt:koku-ui/eslint-visitor-keys:1.3.0.yarnlock mgmt_services/cost-mgmt:koku-ui/eslint-visitor-keys:1.3.0.yarnlock mgmt_services/cost-mgmt:koku-ui/eslint-visitor-keys:2.0.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/eslint:7.21.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/eslint:7.28.0.yarnlock mgmt_services/cost-mgmt:koku-ui/espree:7.3.1.yarnlock mgmt_services/cost-mgmt:koku-ui/espree:7.3.1.yarnlock mgmt_services/cost-mgmt:koku-ui/esprima:4.0.1.yarnlock @@ -600,7 +609,7 @@ mgmt_services/cost-mgmt:koku-ui/etag:1.8.1.yarnlock mgmt_services/cost-mgmt:koku-ui/eventemitter3:4.0.7.yarnlock mgmt_services/cost-mgmt:koku-ui/events:3.3.0.yarnlock mgmt_services/cost-mgmt:koku-ui/eventsource:1.1.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/exec-sh:0.3.4.yarnlock +mgmt_services/cost-mgmt:koku-ui/exec-sh:0.3.6.yarnlock mgmt_services/cost-mgmt:koku-ui/execa:1.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/execa:4.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/execa:5.0.0.yarnlock @@ -612,14 +621,13 @@ mgmt_services/cost-mgmt:koku-ui/extend-shallow:2.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/extend-shallow:3.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/extend-shallow:3.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/extend:3.0.2.yarnlock -mgmt_services/cost-mgmt:koku-ui/extend:3.0.2.yarnlock -mgmt_services/cost-mgmt:koku-ui/extend:3.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/external-editor:3.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/extglob:2.0.4.yarnlock mgmt_services/cost-mgmt:koku-ui/extsprintf:1.3.0.yarnlock mgmt_services/cost-mgmt:koku-ui/extsprintf:1.4.0.yarnlock mgmt_services/cost-mgmt:koku-ui/fast-deep-equal:1.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/fast-deep-equal:3.1.3.yarnlock +mgmt_services/cost-mgmt:koku-ui/fast-deep-equal:3.1.3.yarnlock mgmt_services/cost-mgmt:koku-ui/fast-diff:1.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/fast-diff:1.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/fast-glob:3.2.5.yarnlock @@ -652,7 +660,7 @@ mgmt_services/cost-mgmt:koku-ui/follow-redirects:1.13.3.yarnlock mgmt_services/cost-mgmt:koku-ui/follow-redirects:1.13.3.yarnlock mgmt_services/cost-mgmt:koku-ui/for-in:1.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/forever-agent:0.6.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/form-data:2.3.3.yarnlock +mgmt_services/cost-mgmt:koku-ui/form-data:3.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/form-data:2.3.3.yarnlock mgmt_services/cost-mgmt:koku-ui/forwarded:0.1.2.yarnlock mgmt_services/cost-mgmt:koku-ui/fragment-cache:0.2.1.yarnlock @@ -695,10 +703,11 @@ mgmt_services/cost-mgmt:koku-ui/glob:7.1.6.yarnlock mgmt_services/cost-mgmt:koku-ui/glob:7.1.6.yarnlock mgmt_services/cost-mgmt:koku-ui/glob:7.1.6.yarnlock mgmt_services/cost-mgmt:koku-ui/globals:11.12.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/globals:12.4.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/globals:13.9.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/globals:13.9.0.yarnlock mgmt_services/cost-mgmt:koku-ui/globby:11.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/globby:6.1.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/good-guy-http:1.12.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/good-guy-http:1.14.0.yarnlock mgmt_services/cost-mgmt:koku-ui/graceful-fs:4.2.6.yarnlock mgmt_services/cost-mgmt:koku-ui/graceful-fs:4.2.6.yarnlock mgmt_services/cost-mgmt:koku-ui/graceful-fs:4.2.6.yarnlock @@ -706,7 +715,7 @@ mgmt_services/cost-mgmt:koku-ui/growly:1.3.0.yarnlock mgmt_services/cost-mgmt:koku-ui/handle-thing:2.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/har-schema:2.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/har-validator:5.0.3.yarnlock -mgmt_services/cost-mgmt:koku-ui/har-validator:5.1.5.yarnlock +mgmt_services/cost-mgmt:koku-ui/has-bigints:1.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/has-bigints:1.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/has-flag:3.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/has-flag:4.0.0.yarnlock @@ -745,9 +754,11 @@ mgmt_services/cost-mgmt:koku-ui/http-errors:1.7.2.yarnlock mgmt_services/cost-mgmt:koku-ui/http-errors:1.6.3.yarnlock mgmt_services/cost-mgmt:koku-ui/http-errors:1.7.3.yarnlock mgmt_services/cost-mgmt:koku-ui/http-parser-js:0.5.3.yarnlock +mgmt_services/cost-mgmt:koku-ui/http-proxy-agent:4.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/http-proxy-middleware:0.19.1.yarnlock mgmt_services/cost-mgmt:koku-ui/http-proxy:1.18.1.yarnlock mgmt_services/cost-mgmt:koku-ui/http-signature:1.2.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/https-proxy-agent:5.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/human-date:1.4.0.yarnlock mgmt_services/cost-mgmt:koku-ui/human-signals:1.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/human-signals:2.1.0.yarnlock @@ -778,7 +789,6 @@ mgmt_services/cost-mgmt:koku-ui/inherits:2.0.4.yarnlock mgmt_services/cost-mgmt:koku-ui/inherits:2.0.4.yarnlock mgmt_services/cost-mgmt:koku-ui/inherits:2.0.4.yarnlock mgmt_services/cost-mgmt:koku-ui/inherits:2.0.4.yarnlock -mgmt_services/cost-mgmt:koku-ui/inherits:2.0.4.yarnlock mgmt_services/cost-mgmt:koku-ui/inherits:2.0.3.yarnlock mgmt_services/cost-mgmt:koku-ui/inline-style-prefixer:5.1.2.yarnlock mgmt_services/cost-mgmt:koku-ui/inquirer:8.1.0.yarnlock @@ -805,7 +815,6 @@ mgmt_services/cost-mgmt:koku-ui/is-binary-path:2.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/is-boolean-object:1.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/is-boolean-object:1.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/is-buffer:1.1.6.yarnlock -mgmt_services/cost-mgmt:koku-ui/is-buffer:1.1.6.yarnlock mgmt_services/cost-mgmt:koku-ui/is-callable:1.2.3.yarnlock mgmt_services/cost-mgmt:koku-ui/is-callable:1.2.3.yarnlock mgmt_services/cost-mgmt:koku-ui/is-callable:1.2.3.yarnlock @@ -818,7 +827,7 @@ mgmt_services/cost-mgmt:koku-ui/is-decimal:1.0.4.yarnlock mgmt_services/cost-mgmt:koku-ui/is-descriptor:0.1.6.yarnlock mgmt_services/cost-mgmt:koku-ui/is-descriptor:1.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/is-descriptor:1.0.2.yarnlock -mgmt_services/cost-mgmt:koku-ui/is-docker:2.1.1.yarnlock +mgmt_services/cost-mgmt:koku-ui/is-docker:2.2.1.yarnlock mgmt_services/cost-mgmt:koku-ui/is-extendable:0.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/is-extendable:0.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/is-extendable:1.0.1.yarnlock @@ -841,18 +850,19 @@ mgmt_services/cost-mgmt:koku-ui/is-number:7.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/is-path-cwd:2.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/is-path-in-cwd:2.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/is-path-inside:2.1.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/is-plain-obj:1.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/is-plain-object:2.0.4.yarnlock mgmt_services/cost-mgmt:koku-ui/is-plain-object:2.0.4.yarnlock mgmt_services/cost-mgmt:koku-ui/is-plain-object:5.0.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/is-potential-custom-element-name:1.0.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/is-potential-custom-element-name:1.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/is-regex:1.1.2.yarnlock mgmt_services/cost-mgmt:koku-ui/is-regex:1.1.2.yarnlock mgmt_services/cost-mgmt:koku-ui/is-regex:1.1.2.yarnlock mgmt_services/cost-mgmt:koku-ui/is-regex:1.1.2.yarnlock +mgmt_services/cost-mgmt:koku-ui/is-regex:1.1.3.yarnlock mgmt_services/cost-mgmt:koku-ui/is-stream:1.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/is-stream:2.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/is-string:1.0.5.yarnlock +mgmt_services/cost-mgmt:koku-ui/is-string:1.0.6.yarnlock mgmt_services/cost-mgmt:koku-ui/is-subset:0.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/is-symbol:1.0.3.yarnlock mgmt_services/cost-mgmt:koku-ui/is-symbol:1.0.3.yarnlock @@ -860,9 +870,7 @@ mgmt_services/cost-mgmt:koku-ui/is-typedarray:1.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/is-typedarray:1.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/is-unicode-supported:0.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/is-utf8:0.2.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/is-whitespace-character:1.0.4.yarnlock mgmt_services/cost-mgmt:koku-ui/is-windows:1.0.2.yarnlock -mgmt_services/cost-mgmt:koku-ui/is-word-character:1.0.4.yarnlock mgmt_services/cost-mgmt:koku-ui/is-wsl:1.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/is-wsl:2.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/isarray:0.0.1.yarnlock @@ -916,8 +924,9 @@ mgmt_services/cost-mgmt:koku-ui/js-tokens:4.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/js-tokens:4.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/js-yaml:3.14.1.yarnlock mgmt_services/cost-mgmt:koku-ui/jsbn:0.1.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/jsdoctypeparser:9.0.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/jsdom:16.5.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/jsdoc-type-pratt-parser:1.0.0-alpha.23.yarnlock +mgmt_services/cost-mgmt:koku-ui/jsdoc-type-pratt-parser:1.0.4.yarnlock +mgmt_services/cost-mgmt:koku-ui/jsdom:16.6.0.yarnlock mgmt_services/cost-mgmt:koku-ui/jsesc:2.5.2.yarnlock mgmt_services/cost-mgmt:koku-ui/json-parse-better-errors:1.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/json-parse-even-better-errors:2.3.1.yarnlock @@ -967,10 +976,14 @@ mgmt_services/cost-mgmt:koku-ui/locate-path:5.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/lodash-es:4.17.21.yarnlock mgmt_services/cost-mgmt:koku-ui/lodash.assign:4.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/lodash.assign:4.2.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/lodash.clonedeep:4.5.0.yarnlock mgmt_services/cost-mgmt:koku-ui/lodash.escape:4.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/lodash.flattendeep:4.4.0.yarnlock mgmt_services/cost-mgmt:koku-ui/lodash.isequal:4.5.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/lodash.merge:4.6.2.yarnlock mgmt_services/cost-mgmt:koku-ui/lodash.sortby:4.7.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/lodash.truncate:4.4.2.yarnlock +mgmt_services/cost-mgmt:koku-ui/lodash:4.17.21.yarnlock mgmt_services/cost-mgmt:koku-ui/lodash:4.17.21.yarnlock mgmt_services/cost-mgmt:koku-ui/lodash:4.17.21.yarnlock mgmt_services/cost-mgmt:koku-ui/lodash:4.17.21.yarnlock @@ -995,7 +1008,8 @@ mgmt_services/cost-mgmt:koku-ui/make-error:1.3.6.yarnlock mgmt_services/cost-mgmt:koku-ui/makeerror:1.0.11.yarnlock mgmt_services/cost-mgmt:koku-ui/map-cache:0.2.2.yarnlock mgmt_services/cost-mgmt:koku-ui/map-visit:1.0.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/markdown-escapes:1.0.4.yarnlock +mgmt_services/cost-mgmt:koku-ui/mdast-util-from-markdown:0.8.5.yarnlock +mgmt_services/cost-mgmt:koku-ui/mdast-util-to-string:2.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/media-typer:0.3.0.yarnlock mgmt_services/cost-mgmt:koku-ui/memory-fs:0.4.1.yarnlock mgmt_services/cost-mgmt:koku-ui/memory-fs:0.5.0.yarnlock @@ -1003,6 +1017,7 @@ mgmt_services/cost-mgmt:koku-ui/merge-descriptors:1.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/merge-stream:2.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/merge2:1.4.1.yarnlock mgmt_services/cost-mgmt:koku-ui/methods:1.1.2.yarnlock +mgmt_services/cost-mgmt:koku-ui/micromark:2.11.4.yarnlock mgmt_services/cost-mgmt:koku-ui/micromatch:3.1.10.yarnlock mgmt_services/cost-mgmt:koku-ui/micromatch:3.1.10.yarnlock mgmt_services/cost-mgmt:koku-ui/micromatch:4.0.2.yarnlock @@ -1013,7 +1028,6 @@ mgmt_services/cost-mgmt:koku-ui/mime-types:2.1.29.yarnlock mgmt_services/cost-mgmt:koku-ui/mime-types:2.1.29.yarnlock mgmt_services/cost-mgmt:koku-ui/mime-types:2.1.29.yarnlock mgmt_services/cost-mgmt:koku-ui/mime-types:2.1.29.yarnlock -mgmt_services/cost-mgmt:koku-ui/mime-types:2.1.29.yarnlock mgmt_services/cost-mgmt:koku-ui/mime:1.6.0.yarnlock mgmt_services/cost-mgmt:koku-ui/mime:2.5.2.yarnlock mgmt_services/cost-mgmt:koku-ui/mimic-fn:2.1.0.yarnlock @@ -1051,9 +1065,9 @@ mgmt_services/cost-mgmt:koku-ui/no-case:3.0.4.yarnlock mgmt_services/cost-mgmt:koku-ui/node-forge:0.10.0.yarnlock mgmt_services/cost-mgmt:koku-ui/node-int64:0.4.0.yarnlock mgmt_services/cost-mgmt:koku-ui/node-modules-regexp:1.0.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/node-notifier:8.0.1.yarnlock +mgmt_services/cost-mgmt:koku-ui/node-notifier:8.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/node-releases:1.1.71.yarnlock -mgmt_services/cost-mgmt:koku-ui/nodesi:1.15.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/nodesi:1.16.0.yarnlock mgmt_services/cost-mgmt:koku-ui/normalize-package-data:2.5.0.yarnlock mgmt_services/cost-mgmt:koku-ui/normalize-package-data:2.5.0.yarnlock mgmt_services/cost-mgmt:koku-ui/normalize-path:2.1.1.yarnlock @@ -1068,10 +1082,10 @@ mgmt_services/cost-mgmt:koku-ui/null-loader:4.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/number-is-nan:1.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/nwsapi:2.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/oauth-sign:0.8.2.yarnlock -mgmt_services/cost-mgmt:koku-ui/oauth-sign:0.9.0.yarnlock mgmt_services/cost-mgmt:koku-ui/object-assign:4.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/object-assign:4.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/object-copy:0.1.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/object-inspect:1.10.3.yarnlock mgmt_services/cost-mgmt:koku-ui/object-inspect:1.9.0.yarnlock mgmt_services/cost-mgmt:koku-ui/object-inspect:1.9.0.yarnlock mgmt_services/cost-mgmt:koku-ui/object-is:1.1.5.yarnlock @@ -1084,11 +1098,14 @@ mgmt_services/cost-mgmt:koku-ui/object.assign:4.1.2.yarnlock mgmt_services/cost-mgmt:koku-ui/object.assign:4.1.2.yarnlock mgmt_services/cost-mgmt:koku-ui/object.entries:1.1.3.yarnlock mgmt_services/cost-mgmt:koku-ui/object.entries:1.1.3.yarnlock +mgmt_services/cost-mgmt:koku-ui/object.entries:1.1.4.yarnlock +mgmt_services/cost-mgmt:koku-ui/object.fromentries:2.0.4.yarnlock mgmt_services/cost-mgmt:koku-ui/object.fromentries:2.0.4.yarnlock mgmt_services/cost-mgmt:koku-ui/object.fromentries:2.0.4.yarnlock mgmt_services/cost-mgmt:koku-ui/object.pick:1.3.0.yarnlock mgmt_services/cost-mgmt:koku-ui/object.values:1.1.3.yarnlock mgmt_services/cost-mgmt:koku-ui/object.values:1.1.3.yarnlock +mgmt_services/cost-mgmt:koku-ui/object.values:1.1.4.yarnlock mgmt_services/cost-mgmt:koku-ui/obuf:1.1.2.yarnlock mgmt_services/cost-mgmt:koku-ui/obuf:1.1.2.yarnlock mgmt_services/cost-mgmt:koku-ui/on-finished:2.3.0.yarnlock @@ -1121,7 +1138,7 @@ mgmt_services/cost-mgmt:koku-ui/p-try:1.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/p-try:2.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/param-case:3.0.4.yarnlock mgmt_services/cost-mgmt:koku-ui/parent-module:1.0.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/parse-entities:1.2.2.yarnlock +mgmt_services/cost-mgmt:koku-ui/parse-entities:2.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/parse-json:2.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/parse-json:5.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/parse-srcset:1.0.2.yarnlock @@ -1192,7 +1209,6 @@ mgmt_services/cost-mgmt:koku-ui/prop-types:15.7.2.yarnlock mgmt_services/cost-mgmt:koku-ui/proxy-addr:2.0.6.yarnlock mgmt_services/cost-mgmt:koku-ui/prr:1.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/psl:1.8.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/psl:1.8.0.yarnlock mgmt_services/cost-mgmt:koku-ui/pump:3.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/punycode:1.3.2.yarnlock mgmt_services/cost-mgmt:koku-ui/punycode:1.4.1.yarnlock @@ -1201,7 +1217,6 @@ mgmt_services/cost-mgmt:koku-ui/punycode:2.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/qs:6.7.0.yarnlock mgmt_services/cost-mgmt:koku-ui/qs:6.9.6.yarnlock mgmt_services/cost-mgmt:koku-ui/qs:6.5.2.yarnlock -mgmt_services/cost-mgmt:koku-ui/qs:6.5.2.yarnlock mgmt_services/cost-mgmt:koku-ui/querystring:0.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/querystringify:2.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/queue-microtask:1.2.2.yarnlock @@ -1265,19 +1280,13 @@ mgmt_services/cost-mgmt:koku-ui/regexp.prototype.flags:1.3.1.yarnlock mgmt_services/cost-mgmt:koku-ui/regexp.prototype.flags:1.3.1.yarnlock mgmt_services/cost-mgmt:koku-ui/regexpp:3.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/regexpp:3.1.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/regextras:0.7.1.yarnlock +mgmt_services/cost-mgmt:koku-ui/regextras:0.8.0.yarnlock mgmt_services/cost-mgmt:koku-ui/relateurl:0.2.7.yarnlock -mgmt_services/cost-mgmt:koku-ui/remark-parse:7.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/remove-trailing-separator:1.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/renderkid:2.0.5.yarnlock mgmt_services/cost-mgmt:koku-ui/repeat-element:1.1.3.yarnlock mgmt_services/cost-mgmt:koku-ui/repeat-string:1.6.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/repeat-string:1.6.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/replace-ext:1.0.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/request-promise-core:1.1.4.yarnlock -mgmt_services/cost-mgmt:koku-ui/request-promise-native:1.0.9.yarnlock mgmt_services/cost-mgmt:koku-ui/request:2.87.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/request:2.88.2.yarnlock mgmt_services/cost-mgmt:koku-ui/require-directory:2.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/require-from-string:2.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/require-main-filename:1.0.1.yarnlock @@ -1296,6 +1305,7 @@ mgmt_services/cost-mgmt:koku-ui/resolve:1.20.0.yarnlock mgmt_services/cost-mgmt:koku-ui/resolve:1.20.0.yarnlock mgmt_services/cost-mgmt:koku-ui/resolve:1.20.0.yarnlock mgmt_services/cost-mgmt:koku-ui/resolve:1.20.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/resolve:2.0.0-next.3.yarnlock mgmt_services/cost-mgmt:koku-ui/restore-cursor:3.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/ret:0.1.15.yarnlock mgmt_services/cost-mgmt:koku-ui/retry:0.12.0.yarnlock @@ -1316,7 +1326,6 @@ mgmt_services/cost-mgmt:koku-ui/safe-buffer:5.2.1.yarnlock mgmt_services/cost-mgmt:koku-ui/safe-buffer:5.2.1.yarnlock mgmt_services/cost-mgmt:koku-ui/safe-buffer:5.2.1.yarnlock mgmt_services/cost-mgmt:koku-ui/safe-buffer:5.2.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/safe-buffer:5.2.1.yarnlock mgmt_services/cost-mgmt:koku-ui/safe-regex:1.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/safer-buffer:2.1.2.yarnlock mgmt_services/cost-mgmt:koku-ui/safer-buffer:2.1.2.yarnlock @@ -1399,12 +1408,10 @@ mgmt_services/cost-mgmt:koku-ui/split-string:3.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/sprintf-js:1.0.3.yarnlock mgmt_services/cost-mgmt:koku-ui/sshpk:1.16.1.yarnlock mgmt_services/cost-mgmt:koku-ui/stack-utils:2.0.3.yarnlock -mgmt_services/cost-mgmt:koku-ui/state-toggle:1.0.3.yarnlock mgmt_services/cost-mgmt:koku-ui/static-extend:0.1.2.yarnlock mgmt_services/cost-mgmt:koku-ui/statuses:1.5.0.yarnlock mgmt_services/cost-mgmt:koku-ui/statuses:1.5.0.yarnlock mgmt_services/cost-mgmt:koku-ui/statuses:1.5.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/stealthy-require:1.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/string-hash:1.1.3.yarnlock mgmt_services/cost-mgmt:koku-ui/string-length:4.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/string-width:1.0.2.yarnlock @@ -1414,6 +1421,7 @@ mgmt_services/cost-mgmt:koku-ui/string-width:3.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/string-width:4.2.2.yarnlock mgmt_services/cost-mgmt:koku-ui/string-width:4.2.2.yarnlock mgmt_services/cost-mgmt:koku-ui/string.prototype.matchall:4.0.4.yarnlock +mgmt_services/cost-mgmt:koku-ui/string.prototype.matchall:4.0.5.yarnlock mgmt_services/cost-mgmt:koku-ui/string.prototype.trim:1.2.4.yarnlock mgmt_services/cost-mgmt:koku-ui/string.prototype.trimend:1.0.4.yarnlock mgmt_services/cost-mgmt:koku-ui/string.prototype.trimstart:1.0.4.yarnlock @@ -1440,7 +1448,7 @@ mgmt_services/cost-mgmt:koku-ui/supports-hyperlinks:2.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/symbol-observable:1.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/symbol-tree:3.2.4.yarnlock mgmt_services/cost-mgmt:koku-ui/tabbable:5.1.6.yarnlock -mgmt_services/cost-mgmt:koku-ui/table:6.0.7.yarnlock +mgmt_services/cost-mgmt:koku-ui/table:6.7.1.yarnlock mgmt_services/cost-mgmt:koku-ui/tapable:1.1.3.yarnlock mgmt_services/cost-mgmt:koku-ui/tapable:2.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/tapable:2.2.0.yarnlock @@ -1467,14 +1475,10 @@ mgmt_services/cost-mgmt:koku-ui/to-regex-range:5.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/to-regex:3.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/to-regex:3.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/toidentifier:1.0.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/tough-cookie:2.5.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/tough-cookie:2.5.0.yarnlock mgmt_services/cost-mgmt:koku-ui/tough-cookie:4.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/tough-cookie:2.3.4.yarnlock mgmt_services/cost-mgmt:koku-ui/tr46:2.0.2.yarnlock -mgmt_services/cost-mgmt:koku-ui/trim-trailing-lines:1.1.4.yarnlock -mgmt_services/cost-mgmt:koku-ui/trim:0.0.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/trough:1.0.5.yarnlock +mgmt_services/cost-mgmt:koku-ui/tr46:2.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/ts-jest:26.5.1.yarnlock mgmt_services/cost-mgmt:koku-ui/ts-loader:8.0.17.yarnlock mgmt_services/cost-mgmt:koku-ui/tsconfig-paths-webpack-plugin:3.3.0.yarnlock @@ -1495,6 +1499,7 @@ mgmt_services/cost-mgmt:koku-ui/type-check:0.4.0.yarnlock mgmt_services/cost-mgmt:koku-ui/type-check:0.3.2.yarnlock mgmt_services/cost-mgmt:koku-ui/type-detect:4.0.8.yarnlock mgmt_services/cost-mgmt:koku-ui/type-fest:0.11.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/type-fest:0.20.2.yarnlock mgmt_services/cost-mgmt:koku-ui/type-fest:0.6.0.yarnlock mgmt_services/cost-mgmt:koku-ui/type-fest:0.8.1.yarnlock mgmt_services/cost-mgmt:koku-ui/type-is:1.6.18.yarnlock @@ -1503,18 +1508,12 @@ mgmt_services/cost-mgmt:koku-ui/typedarray-to-buffer:3.1.5.yarnlock mgmt_services/cost-mgmt:koku-ui/typesafe-actions:5.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/typescript:4.1.5.yarnlock mgmt_services/cost-mgmt:koku-ui/unbox-primitive:1.0.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/unbox-primitive:1.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/uncontrollable:7.2.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/underscore:1.8.3.yarnlock -mgmt_services/cost-mgmt:koku-ui/unherit:1.1.3.yarnlock -mgmt_services/cost-mgmt:koku-ui/unified:6.2.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/underscore:1.12.1.yarnlock mgmt_services/cost-mgmt:koku-ui/union-value:1.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/uniq:1.0.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/unist-util-is:3.0.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/unist-util-remove-position:1.1.4.yarnlock -mgmt_services/cost-mgmt:koku-ui/unist-util-stringify-position:1.1.2.yarnlock -mgmt_services/cost-mgmt:koku-ui/unist-util-stringify-position:1.1.2.yarnlock -mgmt_services/cost-mgmt:koku-ui/unist-util-visit-parents:2.1.2.yarnlock -mgmt_services/cost-mgmt:koku-ui/unist-util-visit:1.4.1.yarnlock +mgmt_services/cost-mgmt:koku-ui/unist-util-stringify-position:2.0.3.yarnlock mgmt_services/cost-mgmt:koku-ui/universalify:0.1.2.yarnlock mgmt_services/cost-mgmt:koku-ui/unpipe:1.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/unpipe:1.0.0.yarnlock @@ -1542,9 +1541,6 @@ mgmt_services/cost-mgmt:koku-ui/validate-npm-package-license:3.0.4.yarnlock mgmt_services/cost-mgmt:koku-ui/value-equal:1.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/vary:1.1.2.yarnlock mgmt_services/cost-mgmt:koku-ui/verror:1.10.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/vfile-location:2.0.6.yarnlock -mgmt_services/cost-mgmt:koku-ui/vfile-message:1.1.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/vfile:2.3.0.yarnlock mgmt_services/cost-mgmt:koku-ui/victory-area:35.4.11.yarnlock mgmt_services/cost-mgmt:koku-ui/victory-axis:35.4.11.yarnlock mgmt_services/cost-mgmt:koku-ui/victory-axis:35.4.11.yarnlock @@ -1579,27 +1575,29 @@ mgmt_services/cost-mgmt:koku-ui/walker:1.0.7.yarnlock mgmt_services/cost-mgmt:koku-ui/walker:1.0.7.yarnlock mgmt_services/cost-mgmt:koku-ui/warning:4.0.3.yarnlock mgmt_services/cost-mgmt:koku-ui/warning:4.0.3.yarnlock -mgmt_services/cost-mgmt:koku-ui/watchpack:2.1.1.yarnlock +mgmt_services/cost-mgmt:koku-ui/watchpack:2.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/wbuf:1.7.3.yarnlock mgmt_services/cost-mgmt:koku-ui/wbuf:1.7.3.yarnlock mgmt_services/cost-mgmt:koku-ui/wcwidth:1.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/webidl-conversions:5.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/webidl-conversions:6.1.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/webpack-cli:4.7.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/webpack-cli:4.7.2.yarnlock mgmt_services/cost-mgmt:koku-ui/webpack-dev-middleware:3.7.3.yarnlock mgmt_services/cost-mgmt:koku-ui/webpack-dev-server:3.11.2.yarnlock mgmt_services/cost-mgmt:koku-ui/webpack-log:2.0.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/webpack-log:3.0.1.yarnlock +mgmt_services/cost-mgmt:koku-ui/webpack-log:3.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/webpack-merge:5.7.3.yarnlock mgmt_services/cost-mgmt:koku-ui/webpack-sources:1.4.3.yarnlock -mgmt_services/cost-mgmt:koku-ui/webpack-sources:2.2.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/webpack:5.37.1.yarnlock +mgmt_services/cost-mgmt:koku-ui/webpack-sources:2.3.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/webpack:5.38.1.yarnlock mgmt_services/cost-mgmt:koku-ui/websocket-driver:0.7.4.yarnlock mgmt_services/cost-mgmt:koku-ui/websocket-driver:0.7.4.yarnlock mgmt_services/cost-mgmt:koku-ui/websocket-extensions:0.1.4.yarnlock mgmt_services/cost-mgmt:koku-ui/whatwg-encoding:1.0.5.yarnlock mgmt_services/cost-mgmt:koku-ui/whatwg-mimetype:2.3.0.yarnlock mgmt_services/cost-mgmt:koku-ui/whatwg-url:8.4.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/whatwg-url:8.6.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/which-boxed-primitive:1.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/which-boxed-primitive:1.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/which-module:1.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/which-module:2.0.0.yarnlock @@ -1616,13 +1614,10 @@ mgmt_services/cost-mgmt:koku-ui/wrap-ansi:6.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/wrappy:1.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/write-file-atomic:3.0.3.yarnlock mgmt_services/cost-mgmt:koku-ui/ws:6.2.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/ws:7.4.4.yarnlock -mgmt_services/cost-mgmt:koku-ui/x-is-string:0.1.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/ws:7.4.6.yarnlock mgmt_services/cost-mgmt:koku-ui/xml-name-validator:3.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/xmlchars:2.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/xstate:4.16.2.yarnlock -mgmt_services/cost-mgmt:koku-ui/xtend:4.0.2.yarnlock -mgmt_services/cost-mgmt:koku-ui/xtend:4.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/y18n:3.2.2.yarnlock mgmt_services/cost-mgmt:koku-ui/y18n:4.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/yallist:4.0.0.yarnlock diff --git a/package.json b/package.json index 517697eb9..75680090e 100644 --- a/package.json +++ b/package.json @@ -92,24 +92,24 @@ "enzyme": "3.11.0", "enzyme-adapter-react-16": "1.15.6", "enzyme-to-json": "3.6.1", - "eslint": "^7.20.0", - "eslint-plugin-jsdoc": "^32.0.1", - "eslint-plugin-markdown": "^2.1.0", + "eslint": "^7.28.0", + "eslint-plugin-jsdoc": "^35.1.3", + "eslint-plugin-markdown": "^2.2.0", "eslint-plugin-patternfly-react": "^4.1.5", - "eslint-plugin-prettier": "^3.3.1", - "eslint-plugin-react": "^7.22.0", + "eslint-plugin-prettier": "^3.4.0", + "eslint-plugin-react": "^7.24.0", "eslint-plugin-simple-import-sort": "^5.0.3", "git-revision-webpack-plugin": "3.0.6", "glob": "^7.1.7", "html-loader": "2.0.0", "html-replace-webpack-plugin": "2.6.0", - "html-webpack-plugin": "^5.1.0", + "html-webpack-plugin": "^5.3.1", "i18next-json-sync": "^2.3.1", "inquirer": "^8.1.0", "jest": "26.6.3", "jws": "^4.0.0", "mini-css-extract-plugin": "^1.3.7", - "nodesi": "^1.15.0", + "nodesi": "^1.16.0", "null-loader": "4.0.1", "prettier": "^2.2.1", "rimraf": "^3.0.2", @@ -118,10 +118,10 @@ "ts-jest": "26.5.1", "ts-loader": "8.0.17", "tsconfig-paths-webpack-plugin": "^3.3.0", - "webpack": "^5.37.1", - "webpack-cli": "^4.7.0", + "webpack": "^5.38.1", + "webpack-cli": "^4.7.2", "webpack-dev-server": "^3.11.2", - "webpack-log": "^3.0.1" + "webpack-log": "^3.0.2" }, "insights": { "appname": "cost-management" diff --git a/yarn.lock b/yarn.lock index 27fb790af..3022373c7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -326,15 +326,24 @@ resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.2.tgz#8f03a22a04de437254e8ce8cc84ba39689288752" integrity sha512-HyYEUDeIj5rRQU2Hk5HTB2uHsbRQpF70nvMhVzi+VJR0X+xNEhjPui4/kBf3VeH/wqD28PT4sVOm8qqLjBrSZg== -"@eslint/eslintrc@^0.4.0": - version "0.4.0" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.0.tgz#99cc0a0584d72f1df38b900fb062ba995f395547" - integrity sha512-2ZPCc+uNbjV5ERJr+aKSPRwZgKd2z11x0EgLvb1PURmUrn9QNRXFqje0Ldq454PfAVyaJYyrDvvIKSFP4NnBog== +"@es-joy/jsdoccomment@^0.8.0-alpha.2": + version "0.8.0-alpha.2" + resolved "https://registry.yarnpkg.com/@es-joy/jsdoccomment/-/jsdoccomment-0.8.0-alpha.2.tgz#78585147d8e6231270374dae528fe5b7b5587b5a" + integrity sha512-fjRY13Bh8sxDZkzO27U2R9L6xFqkh5fAbHuMGvGLXLfrTes8nTTMyOi6wIPt+CG0XPAxEUge8cDjhG+0aag6ew== + dependencies: + comment-parser "^1.1.5" + esquery "^1.4.0" + jsdoc-type-pratt-parser "1.0.0-alpha.23" + +"@eslint/eslintrc@^0.4.2": + version "0.4.2" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.2.tgz#f63d0ef06f5c0c57d76c4ab5f63d3835c51b0179" + integrity sha512-8nmGq/4ycLpIwzvhI4tNDmQztZ8sp+hI7cyG8i1nQDhkAbRzHpXPidRAHlNvCZQpJTKw5ItIpMw9RSToGF00mg== dependencies: ajv "^6.12.4" debug "^4.1.1" espree "^7.3.0" - globals "^12.1.0" + globals "^13.9.0" ignore "^4.0.6" import-fresh "^3.2.1" js-yaml "^3.13.1" @@ -809,6 +818,11 @@ "@babel/runtime" "^7.12.5" "@testing-library/dom" "^7.28.1" +"@tootallnate/once@1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" + integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== + "@types/anymatch@*": version "1.3.1" resolved "https://registry.yarnpkg.com/@types/anymatch/-/anymatch-1.3.1.tgz#336badc1beecb9dacc38bea2cf32adf627a8421a" @@ -819,7 +833,7 @@ resolved "https://registry.yarnpkg.com/@types/aria-query/-/aria-query-4.2.1.tgz#78b5433344e2f92e8b306c06a5622c50c245bf6b" integrity sha512-S6oPal772qJZHoRZLFc/XoZW2gFvwXusYUmXPXkgxJLuEk2vOt7jc4Yo6z/vtI0EBkbPBVrJJ0B+prLIKiWqHg== -"@types/babel__core@^7.0.0", "@types/babel__core@^7.1.7": +"@types/babel__core@^7.0.0": version "7.1.12" resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.12.tgz#4d8e9e51eb265552a7e4f1ff2219ab6133bdfb2d" integrity sha512-wMTHiiTiBAAPebqaPiPDLFA4LYPKr6Ph0Xq/6rq1Ur3v66HXyG+clfR9CNETkD7MQS8ZHvpQOtA53DLws5WAEQ== @@ -830,6 +844,17 @@ "@types/babel__template" "*" "@types/babel__traverse" "*" +"@types/babel__core@^7.1.7": + version "7.1.14" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.14.tgz#faaeefc4185ec71c389f4501ee5ec84b170cc402" + integrity sha512-zGZJzzBUVDo/eV6KgbE0f0ZI7dInEYvo12Rb70uNQDshC3SkRMb67ja0GgRHZgAX3Za6rhaWlvbDO8rrGyAb1g== + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + "@types/babel__generator" "*" + "@types/babel__template" "*" + "@types/babel__traverse" "*" + "@types/babel__generator@*": version "7.6.2" resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.2.tgz#f3d71178e187858f7c45e30380f8f1b7415a12d8" @@ -981,7 +1006,7 @@ dependencies: "@types/istanbul-lib-report" "*" -"@types/jest@26.0.20", "@types/jest@26.x": +"@types/jest@26.0.20": version "26.0.20" resolved "https://registry.yarnpkg.com/@types/jest/-/jest-26.0.20.tgz#cd2f2702ecf69e86b586e1f5223a60e454056307" integrity sha512-9zi2Y+5USJRxd0FsahERhBwlcvFh6D2GLQnY2FH2BzK8J9s9omvNHIbvABwIluXa0fD8XVKMLTO0aOEuUfACAA== @@ -989,6 +1014,14 @@ jest-diff "^26.0.0" pretty-format "^26.0.0" +"@types/jest@26.x": + version "26.0.23" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-26.0.23.tgz#a1b7eab3c503b80451d019efb588ec63522ee4e7" + integrity sha512-ZHLmWMJ9jJ9PTiT58juykZpL7KjwJywFN3Rr2pTSkyQfydf/rk22yS7W8p5DaVUMQ2BQC7oYiU3FjbTM/mYrOA== + dependencies: + jest-diff "^26.0.0" + pretty-format "^26.0.0" + "@types/json-schema@*", "@types/json-schema@^7.0.3", "@types/json-schema@^7.0.6": version "7.0.7" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.7.tgz#98a993516c859eb0d5c4c8f098317a9ea68db9ad" @@ -999,6 +1032,13 @@ resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4= +"@types/mdast@^3.0.0": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@types/mdast/-/mdast-3.0.3.tgz#2d7d671b1cd1ea3deb306ea75036c2a0407d2deb" + integrity sha512-SXPBMnFVQg1s00dlMCc/jCdvPqdE4mXaMMCeRlxLDmTAEoegHT53xKtkDnzDTOcmMHUfcjyf36/YYZ6SxRdnsw== + dependencies: + "@types/unist" "*" + "@types/minimatch@*": version "3.0.4" resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.4.tgz#f0ec25dbf2f0e4b18647313ac031134ca5b24b21" @@ -1015,9 +1055,9 @@ integrity sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA== "@types/prettier@^2.0.0": - version "2.2.2" - resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.2.2.tgz#e2280c89ddcbeef340099d6968d8c86ba155fdf6" - integrity sha512-i99hy7Ki19EqVOl77WplDrvgNugHnsSjECVR/wUrzw2TJXz1zlUfT2ngGckR6xN7yFYaijsMAqPkOLx9HgUqHg== + version "2.2.3" + resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.2.3.tgz#ef65165aea2924c9359205bf748865b8881753c0" + integrity sha512-PijRCG/K3s3w1We6ynUKdxEc5AcuuH3NBmMDP8uvKVp6X43UY7NQlTzczakXP3DJR0F4dfNQIGjU2cUeRYs2AA== "@types/prop-types@*", "@types/prop-types@^15.7.3": version "15.7.3" @@ -1121,6 +1161,11 @@ dependencies: source-map "^0.6.1" +"@types/unist@*", "@types/unist@^2.0.2": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.3.tgz#9c088679876f374eb5983f150d4787aa6fb32d7e" + integrity sha512-FvUupuM3rlRsRtCN+fDudtmytGO6iHJuuRKS1Ss0pG5z8oX0diNEw94UEL7hgDbpN94rgaK5R7sWm6RrSkZuAQ== + "@types/warning@^3.0.0": version "3.0.0" resolved "https://registry.yarnpkg.com/@types/warning/-/warning-3.0.0.tgz#0d2501268ad8f9962b740d387c4654f5f8e23e52" @@ -1350,22 +1395,22 @@ "@webassemblyjs/ast" "1.11.0" "@xtuc/long" "4.2.2" -"@webpack-cli/configtest@^1.0.3": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@webpack-cli/configtest/-/configtest-1.0.3.tgz#204bcff87cda3ea4810881f7ea96e5f5321b87b9" - integrity sha512-WQs0ep98FXX2XBAfQpRbY0Ma6ADw8JR6xoIkaIiJIzClGOMqVRvPCWqndTxf28DgFopWan0EKtHtg/5W1h0Zkw== +"@webpack-cli/configtest@^1.0.4": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@webpack-cli/configtest/-/configtest-1.0.4.tgz#f03ce6311c0883a83d04569e2c03c6238316d2aa" + integrity sha512-cs3XLy+UcxiP6bj0A6u7MLLuwdXJ1c3Dtc0RkKg+wiI1g/Ti1om8+/2hc2A2B60NbBNAbMgyBMHvyymWm/j4wQ== -"@webpack-cli/info@^1.2.4": - version "1.2.4" - resolved "https://registry.yarnpkg.com/@webpack-cli/info/-/info-1.2.4.tgz#7381fd41c9577b2d8f6c2594fad397ef49ad5573" - integrity sha512-ogE2T4+pLhTTPS/8MM3IjHn0IYplKM4HbVNMCWA9N4NrdPzunwenpCsqKEXyejMfRu6K8mhauIPYf8ZxWG5O6g== +"@webpack-cli/info@^1.3.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@webpack-cli/info/-/info-1.3.0.tgz#9d78a31101a960997a4acd41ffd9b9300627fe2b" + integrity sha512-ASiVB3t9LOKHs5DyVUcxpraBXDOKubYu/ihHhU+t1UPpxsivg6Od2E2qU4gJCekfEddzRBzHhzA/Acyw/mlK/w== dependencies: envinfo "^7.7.3" -"@webpack-cli/serve@^1.4.0": - version "1.4.0" - resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-1.4.0.tgz#f84fd07bcacefe56ce762925798871092f0f228e" - integrity sha512-xgT/HqJ+uLWGX+Mzufusl3cgjAcnqYYskaB7o0vRcwOEfuu6hMzSILQpnIzFMGsTaeaX4Nnekl+6fadLbl1/Vg== +"@webpack-cli/serve@^1.5.1": + version "1.5.1" + resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-1.5.1.tgz#b5fde2f0f79c1e120307c415a4c1d5eb15a6f278" + integrity sha512-4vSVUiOPJLmr45S8rMGy7WDvpWxfFxfP/Qx/cxZFCfvoypTYpPPL1X8VIZMe0WTA+Jr7blUxwUSEZNkjoMTgSw== "@wojtekmaj/enzyme-adapter-react-17@^0.4.1": version "0.4.1" @@ -1446,16 +1491,23 @@ acorn@^7.1.1, acorn@^7.4.0: resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== -acorn@^8.0.5: - version "8.1.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.1.0.tgz#52311fd7037ae119cbb134309e901aa46295b3fe" - integrity sha512-LWCF/Wn0nfHOmJ9rzQApGnxnvgfROzGilS8936rqN/lfcYkY9MYZzdMqN+2NJ4SlTc+m5HiSa+kNfDtI64dwUA== - acorn@^8.2.1: version "8.2.4" resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.2.4.tgz#caba24b08185c3b56e3168e97d15ed17f4d31fd0" integrity sha512-Ibt84YwBDDA890eDiDCEqcbwvHlBvzzDkU2cGBBDDI1QWT12jTiXIOn2CIw5KK4i6N5Z2HUxwYjzriDyqaqqZg== +acorn@^8.2.4: + version "8.3.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.3.0.tgz#1193f9b96c4e8232f00b11a9edff81b2c8b98b88" + integrity sha512-tqPKHZ5CaBJw0Xmy0ZZvLs1qTV+BNFSyvn77ASXkpBNfIRk8ev26fKrD9iLGwGA9zedPao52GSHzq8lyZG0NUw== + +agent-base@6: + version "6.0.2" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" + integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== + dependencies: + debug "4" + airbnb-prop-types@^2.16.0: version "2.16.0" resolved "https://registry.yarnpkg.com/airbnb-prop-types/-/airbnb-prop-types-2.16.0.tgz#b96274cefa1abb14f623f804173ee97c13971dc2" @@ -1491,7 +1543,7 @@ ajv@^5.1.0: fast-json-stable-stringify "^2.0.0" json-schema-traverse "^0.3.0" -ajv@^6.1.0, ajv@^6.10.0, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.12.5: +ajv@^6.1.0, ajv@^6.10.0, ajv@^6.12.4, ajv@^6.12.5: version "6.12.6" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== @@ -1501,10 +1553,10 @@ ajv@^6.1.0, ajv@^6.10.0, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.12.5: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ajv@^7.0.2: - version "7.2.1" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-7.2.1.tgz#a5ac226171912447683524fa2f1248fcf8bac83d" - integrity sha512-+nu0HDv7kNSOua9apAVc979qd932rrZeb3WOvoiD31A/p1mIE5/9bN2027pE2rOPYEdS3UHzsvof4hY+lM9/WQ== +ajv@^8.0.1: + version "8.6.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.6.0.tgz#60cc45d9c46a477d80d92c48076d972c342e5720" + integrity sha512-cnUG4NSBiM4YFBxgZIj/In3/6KX+rQ2l2YPRVcvAMQGWEPKuXoPIhxzwqh31jA3IPbI4qEOp/5ILI4ynioXsGQ== dependencies: fast-deep-equal "^3.1.1" json-schema-traverse "^1.0.0" @@ -1632,7 +1684,7 @@ array-flatten@^2.1.0: resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099" integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ== -array-includes@^3.1.1, array-includes@^3.1.2: +array-includes@^3.1.1, array-includes@^3.1.2, array-includes@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.3.tgz#c7f619b382ad2afaf5326cddfdc0afc61af7690a" integrity sha512-gcem1KlBU7c9rB+Rq8/3PPKsK2kjqeEBa3bD5kkQo4nYlOHQCJqIJFqBXDEfwaRuYTT4E+FxA9xez7Gf/e3Q7A== @@ -1682,7 +1734,7 @@ array.prototype.flat@^1.2.3: define-properties "^1.1.3" es-abstract "^1.18.0-next.1" -array.prototype.flatmap@^1.2.3: +array.prototype.flatmap@^1.2.3, array.prototype.flatmap@^1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.2.4.tgz#94cfd47cc1556ec0747d97f7c7738c58122004c9" integrity sha512-r9Z0zYoxqHz60vvQbWEdXIEtCwHF0yxaWfno9qzXeNHvfyl3BZqygmGzb84dsubyaXLH4husF+NFgMSdpZhk2Q== @@ -1785,7 +1837,7 @@ aws-sign2@~0.7.0: resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= -aws4@^1.6.0, aws4@^1.8.0: +aws4@^1.6.0: version "1.11.0" resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59" integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== @@ -1880,11 +1932,6 @@ babel-preset-jest@^26.6.2: babel-plugin-jest-hoist "^26.6.2" babel-preset-current-node-syntax "^1.0.0" -bail@^1.0.0: - version "1.0.5" - resolved "https://registry.yarnpkg.com/bail/-/bail-1.0.5.tgz#b6fa133404a392cbc1f8c4bf63f5953351e7a776" - integrity sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ== - balanced-match@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" @@ -2376,11 +2423,6 @@ code-point-at@^1.0.0: resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= -collapse-white-space@^1.0.2: - version "1.0.6" - resolved "https://registry.yarnpkg.com/collapse-white-space/-/collapse-white-space-1.0.6.tgz#e63629c0016665792060dbbeb79c42239d2c5287" - integrity sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ== - collect-v8-coverage@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz#cc2c8e94fc18bbdffe64d6534570c8a673b27f59" @@ -2423,7 +2465,7 @@ colorette@^1.2.1, colorette@^1.2.2: resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.2.tgz#cbcc79d5e99caea2dbf10eb3a26fd8b3e6acfa94" integrity sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w== -combined-stream@^1.0.6, combined-stream@~1.0.5, combined-stream@~1.0.6: +combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.5: version "1.0.8" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== @@ -2445,10 +2487,10 @@ commander@^4.1.1: resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== -comment-parser@1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/comment-parser/-/comment-parser-1.1.2.tgz#e5317d7a2ec22b470dcb54a29b25426c30bf39d8" - integrity sha512-AOdq0i8ghZudnYv8RUnHrhTgafUGs61Rdz9jemU5x2lnZwAWyOq7vySo626K59e1fVKH1xSRorJwPVRLSWOoAQ== +comment-parser@1.1.5, comment-parser@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/comment-parser/-/comment-parser-1.1.5.tgz#453627ef8f67dbcec44e79a9bd5baa37f0bce9b2" + integrity sha512-RePCE4leIhBlmrqiYTvaqEeGYg7qpSl4etaIabKtdOQVi+mSTIBBklGUwIr79GXYnl3LpMwmDw4KeR2stNc6FA== component-emitter@^1.2.1: version "1.3.0" @@ -2780,6 +2822,13 @@ debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.9: dependencies: ms "2.0.0" +debug@4, debug@^4.0.0, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" + integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== + dependencies: + ms "2.1.2" + debug@^3.1.1, debug@^3.2.6: version "3.2.7" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" @@ -2787,13 +2836,6 @@ debug@^3.1.1, debug@^3.2.6: dependencies: ms "^2.1.1" -debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1: - version "4.3.1" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" - integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== - dependencies: - ms "2.1.2" - decamelize@^1.1.1, decamelize@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" @@ -3292,6 +3334,28 @@ es-abstract@^1.17.4, es-abstract@^1.18.0-next.1, es-abstract@^1.18.0-next.2: string.prototype.trimstart "^1.0.4" unbox-primitive "^1.0.0" +es-abstract@^1.18.2: + version "1.18.3" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.3.tgz#25c4c3380a27aa203c44b2b685bba94da31b63e0" + integrity sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw== + dependencies: + call-bind "^1.0.2" + es-to-primitive "^1.2.1" + function-bind "^1.1.1" + get-intrinsic "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.2" + is-callable "^1.2.3" + is-negative-zero "^2.0.1" + is-regex "^1.1.3" + is-string "^1.0.6" + object-inspect "^1.10.3" + object-keys "^1.1.1" + object.assign "^4.1.2" + string.prototype.trimend "^1.0.4" + string.prototype.trimstart "^1.0.4" + unbox-primitive "^1.0.1" + es-module-lexer@^0.4.0: version "0.4.1" resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-0.4.1.tgz#dda8c6a14d8f340a24e34331e0fab0cb50438e0e" @@ -3421,17 +3485,19 @@ eslint-plugin-jest@^21.15.0: resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-21.27.2.tgz#2a795b7c3b5e707df48a953d651042bd01d7b0a8" integrity sha512-0E4OIgBJVlAmf1KfYFtZ3gYxgUzC5Eb3Jzmrc9ikI1OY+/cM8Kh72Ti7KfpeHNeD3HJNf9SmEfmvQLIz44Hrhw== -eslint-plugin-jsdoc@^32.0.1: - version "32.2.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-32.2.0.tgz#d848ea8475a9be63d8d261bd7fa01cf2a2bb32d5" - integrity sha512-ikeVeF3JVmzjcmGd04OZK0rXjgiw46TWtNX+OhyF2jQlw3w1CAU1vyAyLv8PZcIjp7WxP4N20Vg1CI9bp/52dw== +eslint-plugin-jsdoc@^35.1.3: + version "35.1.3" + resolved "https://registry.yarnpkg.com/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-35.1.3.tgz#ee9f8566eeb87a0e96fc52ec55897a2cb93ceea5" + integrity sha512-9AVpCssb7+cfEx3GJtnhJ8yLOVsHDKGMgngcfvwFBxdcOVPFhLENReL5aX1R2gNiG3psqIWFVBpSPnPQTrMZUA== dependencies: - comment-parser "1.1.2" + "@es-joy/jsdoccomment" "^0.8.0-alpha.2" + comment-parser "1.1.5" debug "^4.3.1" - jsdoctypeparser "^9.0.0" - lodash "^4.17.20" - regextras "^0.7.1" - semver "^7.3.4" + esquery "^1.4.0" + jsdoc-type-pratt-parser "^1.0.4" + lodash "^4.17.21" + regextras "^0.8.0" + semver "^7.3.5" spdx-expression-parse "^3.0.1" eslint-plugin-jsx-a11y@^6.0.3: @@ -3451,13 +3517,12 @@ eslint-plugin-jsx-a11y@^6.0.3: jsx-ast-utils "^3.1.0" language-tags "^1.0.5" -eslint-plugin-markdown@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-markdown/-/eslint-plugin-markdown-2.1.0.tgz#1fee34a058e299bd51f3393553bf7f92f3fa167c" - integrity sha512-Rqw7tosArdlzXcR/xJGW3Er9gRiF7iE+QEMEm7hZZ/feZjUf8xCaGQJgB1nzs9yVhJnUeiAcj5TXLLfKMbp3DQ== +eslint-plugin-markdown@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-markdown/-/eslint-plugin-markdown-2.2.0.tgz#9c30bd51538a815e87e96646c69f11466b4c165f" + integrity sha512-Ctuc7aP1tU92qnFwVO1wDLEzf1jqMxwRkcSTw7gjbvnEqfh5CKUcTXM0sxg8CB2KDXrqpTuMZPgJ1XE9Olr7KA== dependencies: - remark-parse "^7.0.0" - unified "^6.1.2" + mdast-util-from-markdown "^0.8.5" eslint-plugin-node@^6.0.1: version "6.0.1" @@ -3499,10 +3564,10 @@ eslint-plugin-prettier@^2.6.0: fast-diff "^1.1.1" jest-docblock "^21.0.0" -eslint-plugin-prettier@^3.3.1: - version "3.3.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-3.3.1.tgz#7079cfa2497078905011e6f82e8dd8453d1371b7" - integrity sha512-Rq3jkcFY8RYeQLgk2cCwuc0P7SEFwDravPhsJZOQ5N4YI4DSg50NyqJ/9gdZHzQlHf8MvafSesbNJCcP/FF6pQ== +eslint-plugin-prettier@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-3.4.0.tgz#cdbad3bf1dbd2b177e9825737fe63b476a08f0c7" + integrity sha512-UDK6rJT6INSfcOo545jiaOwB701uAIt2/dR7WnFQoGCVl1/EMqdANBmwUaqqQ45aXprsTGzSa39LI1PyuRBxxw== dependencies: prettier-linter-helpers "^1.0.0" @@ -3516,7 +3581,25 @@ eslint-plugin-react-hooks@^4.1.2: resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.2.0.tgz#8c229c268d468956334c943bb45fc860280f5556" integrity sha512-623WEiZJqxR7VdxFCKLI6d6LLpwJkGPYKODnkH3D7WpOG5KM8yWueBd8TLsNAetEJNF5iJmolaAKO3F8yzyVBQ== -eslint-plugin-react@^7.22.0, eslint-plugin-react@^7.7.0: +eslint-plugin-react@^7.24.0: + version "7.24.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.24.0.tgz#eadedfa351a6f36b490aa17f4fa9b14e842b9eb4" + integrity sha512-KJJIx2SYx7PBx3ONe/mEeMz4YE0Lcr7feJTCMyyKb/341NcjuAgim3Acgan89GfPv7nxXK2+0slu0CWXYM4x+Q== + dependencies: + array-includes "^3.1.3" + array.prototype.flatmap "^1.2.4" + doctrine "^2.1.0" + has "^1.0.3" + jsx-ast-utils "^2.4.1 || ^3.0.0" + minimatch "^3.0.4" + object.entries "^1.1.4" + object.fromentries "^2.0.4" + object.values "^1.1.4" + prop-types "^15.7.2" + resolve "^2.0.0-next.3" + string.prototype.matchall "^4.0.5" + +eslint-plugin-react@^7.7.0: version "7.22.0" resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.22.0.tgz#3d1c542d1d3169c45421c1215d9470e341707269" integrity sha512-p30tuX3VS+NWv9nQot9xIGAHBXR0+xJVaZriEsHoJrASGCJZDJ8JLNM0YqKqI0AKm6Uxaa1VUHoNEibxRCMQHA== @@ -3561,7 +3644,7 @@ eslint-scope@3.7.1: esrecurse "^4.1.0" estraverse "^4.1.1" -eslint-scope@^5.0.0, eslint-scope@^5.1.1: +eslint-scope@5.1.1, eslint-scope@^5.0.0, eslint-scope@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== @@ -3586,29 +3669,31 @@ eslint-visitor-keys@^2.0.0: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz#21fdc8fbcd9c795cc0321f0563702095751511a8" integrity sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ== -eslint@^7.20.0: - version "7.21.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.21.0.tgz#4ecd5b8c5b44f5dedc9b8a110b01bbfeb15d1c83" - integrity sha512-W2aJbXpMNofUp0ztQaF40fveSsJBjlSCSWpy//gzfTvwC+USs/nceBrKmlJOiM8r1bLwP2EuYkCqArn/6QTIgg== +eslint@^7.28.0: + version "7.28.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.28.0.tgz#435aa17a0b82c13bb2be9d51408b617e49c1e820" + integrity sha512-UMfH0VSjP0G4p3EWirscJEQ/cHqnT/iuH6oNZOB94nBjWbMnhGEPxsZm1eyIW0C/9jLI0Fow4W5DXLjEI7mn1g== dependencies: "@babel/code-frame" "7.12.11" - "@eslint/eslintrc" "^0.4.0" + "@eslint/eslintrc" "^0.4.2" ajv "^6.10.0" chalk "^4.0.0" cross-spawn "^7.0.2" debug "^4.0.1" doctrine "^3.0.0" enquirer "^2.3.5" + escape-string-regexp "^4.0.0" eslint-scope "^5.1.1" eslint-utils "^2.1.0" eslint-visitor-keys "^2.0.0" espree "^7.3.1" esquery "^1.4.0" esutils "^2.0.2" + fast-deep-equal "^3.1.3" file-entry-cache "^6.0.1" functional-red-black-tree "^1.0.1" - glob-parent "^5.0.0" - globals "^12.1.0" + glob-parent "^5.1.2" + globals "^13.6.0" ignore "^4.0.6" import-fresh "^3.0.0" imurmurhash "^0.1.4" @@ -3616,7 +3701,7 @@ eslint@^7.20.0: js-yaml "^3.13.1" json-stable-stringify-without-jsonify "^1.0.1" levn "^0.4.1" - lodash "^4.17.20" + lodash.merge "^4.6.2" minimatch "^3.0.4" natural-compare "^1.4.0" optionator "^0.9.1" @@ -3625,7 +3710,7 @@ eslint@^7.20.0: semver "^7.2.1" strip-ansi "^6.0.0" strip-json-comments "^3.1.0" - table "^6.0.4" + table "^6.0.9" text-table "^0.2.0" v8-compile-cache "^2.0.3" @@ -3695,9 +3780,9 @@ eventsource@^1.0.7: original "^1.0.0" exec-sh@^0.3.2: - version "0.3.4" - resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.4.tgz#3a018ceb526cc6f6df2bb504b2bfe8e3a4934ec5" - integrity sha512-sEFIkc61v75sWeOe72qyrqg2Qg0OuLESziUDk/O/z2qgS15y2gWVFrI6f2Qn/qw/0/NCfCEsmNA4zOjkwEZT1A== + version "0.3.6" + resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.6.tgz#ff264f9e325519a60cb5e273692943483cca63bc" + integrity sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w== execa@^1.0.0: version "1.0.0" @@ -3823,7 +3908,7 @@ extend-shallow@^3.0.0, extend-shallow@^3.0.2: assign-symbols "^1.0.0" is-extendable "^1.0.1" -extend@^3.0.0, extend@~3.0.1, extend@~3.0.2: +extend@~3.0.1: version "3.0.2" resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== @@ -3866,7 +3951,7 @@ fast-deep-equal@^1.0.0: resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz#c053477817c86b51daa853c81e059b733d023614" integrity sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ= -fast-deep-equal@^3.1.1: +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== @@ -4045,7 +4130,16 @@ forever-agent@~0.6.1: resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= -form-data@~2.3.1, form-data@~2.3.2: +form-data@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f" + integrity sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + +form-data@~2.3.1: version "2.3.3" resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== @@ -4192,7 +4286,7 @@ glob-parent@^3.1.0: is-glob "^3.1.0" path-dirname "^1.0.0" -glob-parent@^5.0.0, glob-parent@^5.1.0, glob-parent@^5.1.1, glob-parent@~5.1.0: +glob-parent@^5.1.0, glob-parent@^5.1.1, glob-parent@^5.1.2, glob-parent@~5.1.0: version "5.1.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== @@ -4233,12 +4327,12 @@ globals@^11.1.0: resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== -globals@^12.1.0: - version "12.4.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-12.4.0.tgz#a18813576a41b00a24a97e7f815918c2e19925f8" - integrity sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg== +globals@^13.6.0, globals@^13.9.0: + version "13.9.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.9.0.tgz#4bf2bf635b334a173fb1daf7c5e6b218ecdc06cb" + integrity sha512-74/FduwI/JaIrr1H8e71UbDE+5x7pIPs1C2rrwC52SszOo043CsWOZEMW7o2Y58xwm9b+0RBKDxY5n2sUpEFxA== dependencies: - type-fest "^0.8.1" + type-fest "^0.20.2" globby@^11.0.1: version "11.0.2" @@ -4263,16 +4357,16 @@ globby@^6.1.0: pify "^2.0.0" pinkie-promise "^2.0.0" -good-guy-http@1.12.0: - version "1.12.0" - resolved "https://registry.yarnpkg.com/good-guy-http/-/good-guy-http-1.12.0.tgz#431270540d39214e5de7a861fb15b4e3bf714d53" - integrity sha512-h6EKC9fb+Aaq75KSwToHRG3sTH5dJk0IlzrTFWxr7Bs6FoEKSTTQdB65R1Oxe/9ngUdjJRT6ZR3dzV4RS6Ea1Q== +good-guy-http@1.14.0: + version "1.14.0" + resolved "https://registry.yarnpkg.com/good-guy-http/-/good-guy-http-1.14.0.tgz#01d495ebd7c9d7ef9df4b50a2186d94878df5d0f" + integrity sha512-QkxYpypxMBVU+YRgbSckOoIi17a3/1JO1PXERHff1NpFdLrFNoAzn6CQ3xuYJ6veQtVMcVoLzxT8Zp0M6p0Jhg== dependencies: "@schibstedpl/circuit-breaker-js" "0.0.2" capitalize "^1.0.0" clone "2.1.1" request "2.87.0" - underscore "1.8.3" + underscore "1.12.1" graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.2.4: version "4.2.6" @@ -4302,15 +4396,7 @@ har-validator@~5.0.3: ajv "^5.1.0" har-schema "^2.0.0" -har-validator@~5.1.3: - version "5.1.5" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd" - integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== - dependencies: - ajv "^6.12.3" - har-schema "^2.0.0" - -has-bigints@^1.0.0: +has-bigints@^1.0.0, has-bigints@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.1.tgz#64fe6acb020673e3b78db035a5af69aa9d07b113" integrity sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA== @@ -4479,7 +4565,7 @@ html-replace-webpack-plugin@2.6.0: resolved "https://registry.yarnpkg.com/html-replace-webpack-plugin/-/html-replace-webpack-plugin-2.6.0.tgz#506d81e06cb5d6519281ce7c7dde7aeee04620e7" integrity sha512-BL0DgtqIAef2C8+Dq8v3Ork7FWLPVVkuFkd3DpFB8XxI8hgXiWytvWhGTztSwdiIrPstUPahL5g7W8ts/vuERw== -html-webpack-plugin@^5.1.0: +html-webpack-plugin@^5.3.1: version "5.3.1" resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-5.3.1.tgz#8797327548e3de438e3494e0c6d06f181a7f20d1" integrity sha512-rZsVvPXUYFyME0cuGkyOHfx9hmkFa4pWfxY/mdY38PsBEaVNsRoA+Id+8z6DBDgyv3zaw6XQszdF8HLwfQvcdQ== @@ -4554,6 +4640,15 @@ http-parser-js@>=0.5.1: resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.3.tgz#01d2709c79d41698bb01d4decc5e9da4e4a033d9" integrity sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg== +http-proxy-agent@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" + integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== + dependencies: + "@tootallnate/once" "1" + agent-base "6" + debug "4" + http-proxy-middleware@0.19.1: version "0.19.1" resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz#183c7dc4aa1479150306498c210cdaf96080a43a" @@ -4582,6 +4677,14 @@ http-signature@~1.2.0: jsprim "^1.2.2" sshpk "^1.7.0" +https-proxy-agent@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz#e2a90542abb68a762e0a0850f6c9edadfd8506b2" + integrity sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA== + dependencies: + agent-base "6" + debug "4" + human-date@1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/human-date/-/human-date-1.4.0.tgz#88bb62bd804d00fd12ee2f47dc3c3bbb1e55f99a" @@ -4706,7 +4809,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@2.0.4, inherits@^2.0.0, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -4862,7 +4965,7 @@ is-boolean-object@^1.0.1, is-boolean-object@^1.1.0: dependencies: call-bind "^1.0.0" -is-buffer@^1.1.4, is-buffer@^1.1.5: +is-buffer@^1.1.5: version "1.1.6" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== @@ -4929,9 +5032,9 @@ is-descriptor@^1.0.0, is-descriptor@^1.0.2: kind-of "^6.0.2" is-docker@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.1.1.tgz#4125a88e44e450d384e09047ede71adc2d144156" - integrity sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw== + version "2.2.1" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" + integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== is-extendable@^0.1.0, is-extendable@^0.1.1: version "0.1.1" @@ -5037,11 +5140,6 @@ is-path-inside@^2.1.0: dependencies: path-is-inside "^1.0.2" -is-plain-obj@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" - integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= - is-plain-object@^2.0.3, is-plain-object@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" @@ -5054,10 +5152,10 @@ is-plain-object@^5.0.0: resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344" integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q== -is-potential-custom-element-name@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.0.tgz#0c52e54bcca391bb2c494b21e8626d7336c6e397" - integrity sha1-DFLlS8yjkbssSUsh6GJtczbG45c= +is-potential-custom-element-name@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5" + integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ== is-regex@^1.0.4, is-regex@^1.0.5, is-regex@^1.1.0, is-regex@^1.1.2: version "1.1.2" @@ -5067,6 +5165,14 @@ is-regex@^1.0.4, is-regex@^1.0.5, is-regex@^1.1.0, is-regex@^1.1.2: call-bind "^1.0.2" has-symbols "^1.0.1" +is-regex@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.3.tgz#d029f9aff6448b93ebbe3f33dac71511fdcbef9f" + integrity sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ== + dependencies: + call-bind "^1.0.2" + has-symbols "^1.0.2" + is-stream@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" @@ -5082,6 +5188,11 @@ is-string@^1.0.5: resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.5.tgz#40493ed198ef3ff477b8c7f92f644ec82a5cd3a6" integrity sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ== +is-string@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.6.tgz#3fe5d5992fb0d93404f32584d4b0179a71b54a5f" + integrity sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w== + is-subset@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/is-subset/-/is-subset-0.1.1.tgz#8a59117d932de1de00f245fcdd39ce43f1e939a6" @@ -5109,21 +5220,11 @@ is-utf8@^0.2.0: resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI= -is-whitespace-character@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz#0858edd94a95594c7c9dd0b5c174ec6e45ee4aa7" - integrity sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w== - is-windows@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== -is-word-character@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-word-character/-/is-word-character-1.0.4.tgz#ce0e73216f98599060592f62ff31354ddbeb0230" - integrity sha512-5SMO8RVennx3nZrqtKwCGyyetPE9VDba5ugvKLaD4KopPG5kR4mQ7tNt/r7feL5yt5h3lpuBbIUmCOG2eSzXHA== - is-wsl@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" @@ -5610,18 +5711,23 @@ jsbn@~0.1.0: resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= -jsdoctypeparser@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/jsdoctypeparser/-/jsdoctypeparser-9.0.0.tgz#8c97e2fb69315eb274b0f01377eaa5c940bd7b26" - integrity sha512-jrTA2jJIL6/DAEILBEh2/w9QxCuwmvNXIry39Ay/HVfhE3o2yVV0U44blYkqdHA/OKloJEqvJy0xU+GSdE2SIw== +jsdoc-type-pratt-parser@1.0.0-alpha.23: + version "1.0.0-alpha.23" + resolved "https://registry.yarnpkg.com/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-1.0.0-alpha.23.tgz#01c232d92b99b7e7ef52235ab8c9115137426639" + integrity sha512-COtimMd97eo5W0h6R9ISFj9ufg/9EiAzVAeQpKBJ1xJs/x8znWE155HGBDR2rwOuZsCes1gBXGmFVfvRZxGrhg== + +jsdoc-type-pratt-parser@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-1.0.4.tgz#5750d2d32ffb001866537d3baaedea7cf84c7036" + integrity sha512-jzmW9gokeq9+bHPDR1nCeidMyFUikdZlbOhKzh9+/nJqB75XhpNKec1/UuxW5c4+O+Pi31Gc/dCboyfSm/pSpQ== jsdom@^16.4.0: - version "16.5.0" - resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.5.0.tgz#9e453505600cc5a70b385750d35256f380730cc4" - integrity sha512-QxZH0nmDTnTTVI0YDm4RUlaUPl5dcyn62G5TMDNfMmTW+J1u1v9gCR8WR+WZ6UghAa7nKJjDOFaI00eMMWvJFQ== + version "16.6.0" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.6.0.tgz#f79b3786682065492a3da6a60a4695da983805ac" + integrity sha512-Ty1vmF4NHJkolaEmdjtxTfSfkdb8Ywarwf63f+F8/mDD1uLSSWDxDuMiZxiPhwunLrn9LOSVItWj4bLYsLN3Dg== dependencies: abab "^2.0.5" - acorn "^8.0.5" + acorn "^8.2.4" acorn-globals "^6.0.0" cssom "^0.4.4" cssstyle "^2.3.0" @@ -5629,12 +5735,13 @@ jsdom@^16.4.0: decimal.js "^10.2.1" domexception "^2.0.1" escodegen "^2.0.0" + form-data "^3.0.0" html-encoding-sniffer "^2.0.1" - is-potential-custom-element-name "^1.0.0" + http-proxy-agent "^4.0.1" + https-proxy-agent "^5.0.0" + is-potential-custom-element-name "^1.0.1" nwsapi "^2.2.0" parse5 "6.0.1" - request "^2.88.2" - request-promise-native "^1.0.9" saxes "^5.0.1" symbol-tree "^3.2.4" tough-cookie "^4.0.0" @@ -5643,8 +5750,8 @@ jsdom@^16.4.0: webidl-conversions "^6.1.0" whatwg-encoding "^1.0.5" whatwg-mimetype "^2.3.0" - whatwg-url "^8.0.0" - ws "^7.4.4" + whatwg-url "^8.5.0" + ws "^7.4.5" xml-name-validator "^3.0.0" jsesc@^2.5.1: @@ -5910,6 +6017,11 @@ lodash.assign@^4.1.0, lodash.assign@^4.2.0: resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-4.2.0.tgz#0d99f3ccd7a6d261d19bdaeb9245005d285808e7" integrity sha1-DZnzzNem0mHRm9rrkkUAXShYCOc= +lodash.clonedeep@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" + integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8= + lodash.escape@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/lodash.escape/-/lodash.escape-4.0.1.tgz#c9044690c21e04294beaa517712fded1fa88de98" @@ -5925,12 +6037,22 @@ lodash.isequal@^4.5.0: resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0" integrity sha1-QVxEePK8wwEgwizhDtMib30+GOA= +lodash.merge@^4.6.2: + version "4.6.2" + resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== + lodash.sortby@^4.7.0: version "4.7.0" resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg= -lodash@4.x, lodash@^4.17.0, lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21: +lodash.truncate@^4.4.2: + version "4.4.2" + resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" + integrity sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM= + +lodash@4.x, lodash@^4.17.0, lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.7.0: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -6010,10 +6132,21 @@ map-visit@^1.0.0: dependencies: object-visit "^1.0.0" -markdown-escapes@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/markdown-escapes/-/markdown-escapes-1.0.4.tgz#c95415ef451499d7602b91095f3c8e8975f78535" - integrity sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg== +mdast-util-from-markdown@^0.8.5: + version "0.8.5" + resolved "https://registry.yarnpkg.com/mdast-util-from-markdown/-/mdast-util-from-markdown-0.8.5.tgz#d1ef2ca42bc377ecb0463a987910dae89bd9a28c" + integrity sha512-2hkTXtYYnr+NubD/g6KGBS/0mFmBcifAsI0yIWRiRo0PjVs6SSOSOdtzbp6kSGnShDN6G5aWZpKQ2lWRy27mWQ== + dependencies: + "@types/mdast" "^3.0.0" + mdast-util-to-string "^2.0.0" + micromark "~2.11.0" + parse-entities "^2.0.0" + unist-util-stringify-position "^2.0.0" + +mdast-util-to-string@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz#b8cfe6a713e1091cb5b728fc48885a4767f8b97b" + integrity sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w== media-typer@0.3.0: version "0.3.0" @@ -6056,6 +6189,14 @@ methods@~1.1.2: resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= +micromark@~2.11.0: + version "2.11.4" + resolved "https://registry.yarnpkg.com/micromark/-/micromark-2.11.4.tgz#d13436138eea826383e822449c9a5c50ee44665a" + integrity sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA== + dependencies: + debug "^4.0.0" + parse-entities "^2.0.0" + micromatch@^3.1.10, micromatch@^3.1.4: version "3.1.10" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" @@ -6088,7 +6229,7 @@ mime-db@1.46.0, "mime-db@>= 1.43.0 < 2": resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.46.0.tgz#6267748a7f799594de3cbc8cde91def349661cee" integrity sha512-svXaP8UQRZ5K7or+ZmfNhg2xX3yKDMUzqadsSqi4NCH/KomcH75MAMYAGVlvXn4+b/xOPhS3I2uHKRUzvjY7BQ== -mime-types@^2.1.12, mime-types@^2.1.27, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24: +mime-types@^2.1.12, mime-types@^2.1.27, mime-types@~2.1.17, mime-types@~2.1.24: version "2.1.29" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.29.tgz#1d4ab77da64b91f5f72489df29236563754bb1b2" integrity sha512-Y/jMt/S5sR9OaqteJtslsFZKWOIIqMACsJSiHghlCAyhf7jfVYjKBmLiX8OgpWeW+fjJ2b+Az69aPFPkUOY6xQ== @@ -6298,9 +6439,9 @@ node-modules-regexp@^1.0.0: integrity sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA= node-notifier@^8.0.0: - version "8.0.1" - resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-8.0.1.tgz#f86e89bbc925f2b068784b31f382afdc6ca56be1" - integrity sha512-BvEXF+UmsnAfYfoapKM9nGxnP+Wn7P91YfXmrKnfcYCx6VBeoN5Ez5Ogck6I8Bi5k4RlpqRYaw75pAwzX9OphA== + version "8.0.2" + resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-8.0.2.tgz#f3167a38ef0d2c8a866a83e318c1ba0efeb702c5" + integrity sha512-oJP/9NAdd9+x2Q+rfphB2RJCHjod70RcRLjosiPMMu5gjIfwVnOUGq2nbTjTUbmy0DJ/tFIVT30+Qe3nzl4TJg== dependencies: growly "^1.3.0" is-wsl "^2.2.0" @@ -6314,13 +6455,13 @@ node-releases@^1.1.70: resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.71.tgz#cb1334b179896b1c89ecfdd4b725fb7bbdfc7dbb" integrity sha512-zR6HoT6LrLCRBwukmrVbHv0EpEQjksO6GmFcZQQuCAy139BEsoVKPYnf3jongYW83fAa1torLGYwxxky/p28sg== -nodesi@^1.15.0: - version "1.15.0" - resolved "https://registry.yarnpkg.com/nodesi/-/nodesi-1.15.0.tgz#eb042dec9cb8cbf1578cbae546bf3a74e0ccfb8b" - integrity sha512-R0Cn+YeAH3ooz27AibJYAA3KWqSs9y+4q28nChPTv+eCGOovDBjpBDy+WRMhtyLGJAuhO+OqXJ0hCbbs+XRyZg== +nodesi@^1.16.0: + version "1.16.0" + resolved "https://registry.yarnpkg.com/nodesi/-/nodesi-1.16.0.tgz#b7129778c15fa06e1fa928ff85ccd71f59790aef" + integrity sha512-fmMvsQ9I/rTE62LVw7adLlVq8Of6gbDv3FxkBGTOOZTc5eIz4IMRxZ3ec7mvBLEYNPNO2OW/C3aywStYvDIipA== dependencies: clone "1.0.3" - good-guy-http "1.12.0" + good-guy-http "1.14.0" he "1.2.0" normalize-package-data@^2.3.2, normalize-package-data@^2.5.0: @@ -6396,11 +6537,6 @@ oauth-sign@~0.8.2: resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" integrity sha1-Rqarfwrq2N6unsBWV4C31O/rnUM= -oauth-sign@~0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" - integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== - object-assign@^4.0.1, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" @@ -6415,6 +6551,11 @@ object-copy@^0.1.0: define-property "^0.2.5" kind-of "^3.0.3" +object-inspect@^1.10.3: + version "1.10.3" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.10.3.tgz#c2aa7d2d09f50c99375704f7a0adf24c5782d369" + integrity sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw== + object-inspect@^1.7.0, object-inspect@^1.9.0: version "1.9.0" resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.9.0.tgz#c90521d74e1127b67266ded3394ad6116986533a" @@ -6460,7 +6601,16 @@ object.entries@^1.1.1, object.entries@^1.1.2: es-abstract "^1.18.0-next.1" has "^1.0.3" -object.fromentries@^2.0.2, object.fromentries@^2.0.3: +object.entries@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.4.tgz#43ccf9a50bc5fd5b649d45ab1a579f24e088cafd" + integrity sha512-h4LWKWE+wKQGhtMjZEBud7uLGhqyLwj8fpHOarZhD2uY3C9cRtk57VQ89ke3moByLXMedqs3XCHzyb4AmA2DjA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.18.2" + +object.fromentries@^2.0.2, object.fromentries@^2.0.3, object.fromentries@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.4.tgz#26e1ba5c4571c5c6f0890cef4473066456a120b8" integrity sha512-EsFBshs5RUUpQEY1D4q/m59kMfz4YJvxuNCJcv/jWwOJr34EaVnG11ZrZa0UHB3wnzV1wx8m58T4hQL8IuNXlQ== @@ -6487,6 +6637,15 @@ object.values@^1.1.1, object.values@^1.1.2: es-abstract "^1.18.0-next.2" has "^1.0.3" +object.values@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.4.tgz#0d273762833e816b693a637d30073e7051535b30" + integrity sha512-TnGo7j4XSnKQoK3MfvkzqKCi0nVe/D9I9IjwTNYdb/fxYHpjrluHVOgw0AF6jrRFGMPHdfuidR09tIDiIvnaSg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.18.2" + obuf@^1.0.0, obuf@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" @@ -6672,10 +6831,10 @@ parent-module@^1.0.0: dependencies: callsites "^3.0.0" -parse-entities@^1.1.0: - version "1.2.2" - resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-1.2.2.tgz#c31bf0f653b6661354f8973559cb86dd1d5edf50" - integrity sha512-NzfpbxW/NPrzZ/yYSoQxyqUZMZXIdCfE0OIN4ESsnptHJECoUk3FZktxNuzQf4tjt5UEopnxpYJbvYuxIFDdsg== +parse-entities@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-2.0.0.tgz#53c6eb5b9314a1f4ec99fa0fdf7ce01ecda0cbe8" + integrity sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ== dependencies: character-entities "^1.0.0" character-entities-legacy "^1.0.0" @@ -7060,7 +7219,7 @@ prr@~1.0.1: resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= -psl@^1.1.28, psl@^1.1.33: +psl@^1.1.33: version "1.8.0" resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== @@ -7098,7 +7257,7 @@ qs@6.9.6: resolved "https://registry.yarnpkg.com/qs/-/qs-6.9.6.tgz#26ed3c8243a431b2924aca84cc90471f35d5a0ee" integrity sha512-TIRk4aqYLNoJUbd+g2lEdz5kLWIuTMRagAXxl78Q0RiVjAOugHmeKNGdd3cwo/ktpf9aL9epCfFqWDEKysUlLQ== -qs@~6.5.1, qs@~6.5.2: +qs@~6.5.1: version "6.5.2" resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== @@ -7491,37 +7650,16 @@ regexpp@^3.0.0, regexpp@^3.1.0: resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.1.0.tgz#206d0ad0a5648cffbdb8ae46438f3dc51c9f78e2" integrity sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q== -regextras@^0.7.1: - version "0.7.1" - resolved "https://registry.yarnpkg.com/regextras/-/regextras-0.7.1.tgz#be95719d5f43f9ef0b9fa07ad89b7c606995a3b2" - integrity sha512-9YXf6xtW+qzQ+hcMQXx95MOvfqXFgsKDZodX3qZB0x2n5Z94ioetIITsBtvJbiOyxa/6s9AtyweBLCdPmPko/w== +regextras@^0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/regextras/-/regextras-0.8.0.tgz#ec0f99853d4912839321172f608b544814b02217" + integrity sha512-k519uI04Z3SaY0fLX843MRXnDeG2+vHOFsyhiPZvNLe7r8rD2YNRjq4BQLZZ0oAr2NrtvZlICsXysGNFPGa3CQ== relateurl@^0.2.7: version "0.2.7" resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" integrity sha1-VNvzd+UUQKypCkzSdGANP/LYiKk= -remark-parse@^7.0.0: - version "7.0.2" - resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-7.0.2.tgz#41e7170d9c1d96c3d32cf1109600a9ed50dba7cf" - integrity sha512-9+my0lQS80IQkYXsMA8Sg6m9QfXYJBnXjWYN5U+kFc5/n69t+XZVXU/ZBYr3cYH8FheEGf1v87rkFDhJ8bVgMA== - dependencies: - collapse-white-space "^1.0.2" - is-alphabetical "^1.0.0" - is-decimal "^1.0.0" - is-whitespace-character "^1.0.0" - is-word-character "^1.0.0" - markdown-escapes "^1.0.0" - parse-entities "^1.1.0" - repeat-string "^1.5.4" - state-toggle "^1.0.0" - trim "0.0.1" - trim-trailing-lines "^1.0.0" - unherit "^1.0.4" - unist-util-remove-position "^1.0.0" - vfile-location "^2.0.0" - xtend "^4.0.1" - remove-trailing-separator@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" @@ -7543,32 +7681,11 @@ repeat-element@^1.1.2: resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g== -repeat-string@^1.5.4, repeat-string@^1.6.1: +repeat-string@^1.6.1: version "1.6.1" resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= -replace-ext@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-1.0.0.tgz#de63128373fcbf7c3ccfa4de5a480c45a67958eb" - integrity sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs= - -request-promise-core@1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.4.tgz#3eedd4223208d419867b78ce815167d10593a22f" - integrity sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw== - dependencies: - lodash "^4.17.19" - -request-promise-native@^1.0.9: - version "1.0.9" - resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.9.tgz#e407120526a5efdc9a39b28a5679bf47b9d9dc28" - integrity sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g== - dependencies: - request-promise-core "1.1.4" - stealthy-require "^1.1.1" - tough-cookie "^2.3.3" - request@2.87.0: version "2.87.0" resolved "https://registry.yarnpkg.com/request/-/request-2.87.0.tgz#32f00235cd08d482b4d0d68db93a829c0ed5756e" @@ -7595,32 +7712,6 @@ request@2.87.0: tunnel-agent "^0.6.0" uuid "^3.1.0" -request@^2.88.2: - version "2.88.2" - resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" - integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== - dependencies: - aws-sign2 "~0.7.0" - aws4 "^1.8.0" - caseless "~0.12.0" - combined-stream "~1.0.6" - extend "~3.0.2" - forever-agent "~0.6.1" - form-data "~2.3.2" - har-validator "~5.1.3" - http-signature "~1.2.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.19" - oauth-sign "~0.9.0" - performance-now "^2.1.0" - qs "~6.5.2" - safe-buffer "^5.1.2" - tough-cookie "~2.5.0" - tunnel-agent "^0.6.0" - uuid "^3.3.2" - require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" @@ -7693,6 +7784,14 @@ resolve@^1.10.0, resolve@^1.13.1, resolve@^1.17.0, resolve@^1.18.1, resolve@^1.3 is-core-module "^2.2.0" path-parse "^1.0.6" +resolve@^2.0.0-next.3: + version "2.0.0-next.3" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.3.tgz#d41016293d4a8586a39ca5d9b5f15cbea1f55e46" + integrity sha512-W8LucSynKUIDu9ylraa7ueVZ7hc0uAgJBxVsQSKOXOyle8a93qXhcz+XAXZ8bIq2d6i4Ehddn6Evt+0/UwKk6Q== + dependencies: + is-core-module "^2.2.0" + path-parse "^1.0.6" + restore-cursor@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" @@ -7767,7 +7866,7 @@ safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== -safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.2.0: +safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== @@ -8225,11 +8324,6 @@ stack-utils@^2.0.2: dependencies: escape-string-regexp "^2.0.0" -state-toggle@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/state-toggle/-/state-toggle-1.0.3.tgz#e123b16a88e143139b09c6852221bc9815917dfe" - integrity sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ== - static-extend@^0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" @@ -8243,11 +8337,6 @@ static-extend@^0.1.1: resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= -stealthy-require@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" - integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks= - string-hash@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/string-hash/-/string-hash-1.1.3.tgz#e8aafc0ac1855b4666929ed7dd1275df5d6c811b" @@ -8301,6 +8390,20 @@ string.prototype.matchall@^4.0.2: regexp.prototype.flags "^1.3.1" side-channel "^1.0.4" +string.prototype.matchall@^4.0.5: + version "4.0.5" + resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.5.tgz#59370644e1db7e4c0c045277690cf7b01203c4da" + integrity sha512-Z5ZaXO0svs0M2xd/6By3qpeKpLKd9mO4v4q3oMEQrk8Ck4xOD5d5XeBOOjGrmVZZ/AHB1S0CgG4N5r1G9N3E2Q== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.18.2" + get-intrinsic "^1.1.1" + has-symbols "^1.0.2" + internal-slot "^1.0.3" + regexp.prototype.flags "^1.3.1" + side-channel "^1.0.4" + string.prototype.trim@^1.2.1: version "1.2.4" resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.4.tgz#6014689baf5efaf106ad031a5fa45157666ed1bd" @@ -8437,15 +8540,17 @@ tabbable@^5.1.4: resolved "https://registry.yarnpkg.com/tabbable/-/tabbable-5.1.6.tgz#dd495abe81d5e41e003fbfa70952e20d5e1e1e89" integrity sha512-KSlGaSX9PbL7FHDTn2dB+zv61prkY8BeGioTsKfeN7dKhw5uz1S4U2iFaWMK4GR8oU+5OFBkFuxbMsaUxVVlrQ== -table@^6.0.4: - version "6.0.7" - resolved "https://registry.yarnpkg.com/table/-/table-6.0.7.tgz#e45897ffbcc1bcf9e8a87bf420f2c9e5a7a52a34" - integrity sha512-rxZevLGTUzWna/qBLObOe16kB2RTnnbhciwgPbMMlazz1yZGVEgnZK762xyVdVznhqxrfCeBMmMkgOOaPwjH7g== +table@^6.0.9: + version "6.7.1" + resolved "https://registry.yarnpkg.com/table/-/table-6.7.1.tgz#ee05592b7143831a8c94f3cee6aae4c1ccef33e2" + integrity sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg== dependencies: - ajv "^7.0.2" - lodash "^4.17.20" + ajv "^8.0.1" + lodash.clonedeep "^4.5.0" + lodash.truncate "^4.4.2" slice-ansi "^4.0.0" string-width "^4.2.0" + strip-ansi "^6.0.0" tapable@^1.0.0: version "1.1.3" @@ -8595,14 +8700,6 @@ toidentifier@1.0.0: resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== -tough-cookie@^2.3.3, tough-cookie@~2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" - integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== - dependencies: - psl "^1.1.28" - punycode "^2.1.1" - tough-cookie@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.0.0.tgz#d822234eeca882f991f0f908824ad2622ddbece4" @@ -8626,20 +8723,12 @@ tr46@^2.0.2: dependencies: punycode "^2.1.1" -trim-trailing-lines@^1.0.0: - version "1.1.4" - resolved "https://registry.yarnpkg.com/trim-trailing-lines/-/trim-trailing-lines-1.1.4.tgz#bd4abbec7cc880462f10b2c8b5ce1d8d1ec7c2c0" - integrity sha512-rjUWSqnfTNrjbB9NQWfPMH/xRK1deHeGsHoVfpxJ++XeYXE0d6B1En37AHfw3jtfTU7dzMzZL2jjpe8Qb5gLIQ== - -trim@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/trim/-/trim-0.0.1.tgz#5858547f6b290757ee95cccc666fb50084c460dd" - integrity sha1-WFhUf2spB1fulczMZm+1AITEYN0= - -trough@^1.0.0: - version "1.0.5" - resolved "https://registry.yarnpkg.com/trough/-/trough-1.0.5.tgz#b8b639cefad7d0bb2abd37d433ff8293efa5f406" - integrity sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA== +tr46@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-2.1.0.tgz#fa87aa81ca5d5941da8cbf1f9b749dc969a4e240" + integrity sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw== + dependencies: + punycode "^2.1.1" ts-jest@26.5.1: version "26.5.1" @@ -8746,6 +8835,11 @@ type-fest@^0.11.0: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.11.0.tgz#97abf0872310fed88a5c466b25681576145e33f1" integrity sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ== +type-fest@^0.20.2: + version "0.20.2" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" + integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== + type-fest@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" @@ -8791,6 +8885,16 @@ unbox-primitive@^1.0.0: has-symbols "^1.0.0" which-boxed-primitive "^1.0.1" +unbox-primitive@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.1.tgz#085e215625ec3162574dc8859abee78a59b14471" + integrity sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw== + dependencies: + function-bind "^1.1.1" + has-bigints "^1.0.1" + has-symbols "^1.0.2" + which-boxed-primitive "^1.0.2" + uncontrollable@^7.0.0: version "7.2.1" resolved "https://registry.yarnpkg.com/uncontrollable/-/uncontrollable-7.2.1.tgz#1fa70ba0c57a14d5f78905d533cf63916dc75738" @@ -8801,30 +8905,10 @@ uncontrollable@^7.0.0: invariant "^2.2.4" react-lifecycles-compat "^3.0.4" -underscore@1.8.3: - version "1.8.3" - resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.8.3.tgz#4f3fb53b106e6097fcf9cb4109f2a5e9bdfa5022" - integrity sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI= - -unherit@^1.0.4: - version "1.1.3" - resolved "https://registry.yarnpkg.com/unherit/-/unherit-1.1.3.tgz#6c9b503f2b41b262330c80e91c8614abdaa69c22" - integrity sha512-Ft16BJcnapDKp0+J/rqFC3Rrk6Y/Ng4nzsC028k2jdDII/rdZ7Wd3pPT/6+vIIxRagwRc9K0IUX0Ra4fKvw+WQ== - dependencies: - inherits "^2.0.0" - xtend "^4.0.0" - -unified@^6.1.2: - version "6.2.0" - resolved "https://registry.yarnpkg.com/unified/-/unified-6.2.0.tgz#7fbd630f719126d67d40c644b7e3f617035f6dba" - integrity sha512-1k+KPhlVtqmG99RaTbAv/usu85fcSRu3wY8X+vnsEhIxNP5VbVIDiXnLqyKIG+UMdyTg0ZX9EI6k2AfjJkHPtA== - dependencies: - bail "^1.0.0" - extend "^3.0.0" - is-plain-obj "^1.1.0" - trough "^1.0.0" - vfile "^2.0.0" - x-is-string "^0.1.0" +underscore@1.12.1: + version "1.12.1" + resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.12.1.tgz#7bb8cc9b3d397e201cf8553336d262544ead829e" + integrity sha512-hEQt0+ZLDVUMhebKxL4x1BTtDY7bavVofhZ9KZ4aI26X9SRaE+Y3m83XUL1UP2jn8ynjndwCCpEHdUG+9pP1Tw== union-value@^1.0.0: version "1.0.1" @@ -8841,36 +8925,12 @@ uniq@^1.0.1: resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" integrity sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8= -unist-util-is@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-3.0.0.tgz#d9e84381c2468e82629e4a5be9d7d05a2dd324cd" - integrity sha512-sVZZX3+kspVNmLWBPAB6r+7D9ZgAFPNWm66f7YNb420RlQSbn+n8rG8dGZSkrER7ZIXGQYNm5pqC3v3HopH24A== - -unist-util-remove-position@^1.0.0: - version "1.1.4" - resolved "https://registry.yarnpkg.com/unist-util-remove-position/-/unist-util-remove-position-1.1.4.tgz#ec037348b6102c897703eee6d0294ca4755a2020" - integrity sha512-tLqd653ArxJIPnKII6LMZwH+mb5q+n/GtXQZo6S6csPRs5zB0u79Yw8ouR3wTw8wxvdJFhpP6Y7jorWdCgLO0A== - dependencies: - unist-util-visit "^1.1.0" - -unist-util-stringify-position@^1.0.0, unist-util-stringify-position@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-1.1.2.tgz#3f37fcf351279dcbca7480ab5889bb8a832ee1c6" - integrity sha512-pNCVrk64LZv1kElr0N1wPiHEUoXNVFERp+mlTg/s9R5Lwg87f9bM/3sQB99w+N9D/qnM9ar3+AKDBwo/gm/iQQ== - -unist-util-visit-parents@^2.0.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-2.1.2.tgz#25e43e55312166f3348cae6743588781d112c1e9" - integrity sha512-DyN5vD4NE3aSeB+PXYNKxzGsfocxp6asDc2XXE3b0ekO2BaRUpBicbbUygfSvYfUz1IkmjFR1YF7dPklraMZ2g== - dependencies: - unist-util-is "^3.0.0" - -unist-util-visit@^1.1.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-1.4.1.tgz#4724aaa8486e6ee6e26d7ff3c8685960d560b1e3" - integrity sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw== +unist-util-stringify-position@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz#cce3bfa1cdf85ba7375d1d5b17bdc4cada9bd9da" + integrity sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g== dependencies: - unist-util-visit-parents "^2.0.0" + "@types/unist" "^2.0.2" universalify@^0.1.2: version "0.1.2" @@ -8994,28 +9054,6 @@ verror@1.10.0: core-util-is "1.0.2" extsprintf "^1.2.0" -vfile-location@^2.0.0: - version "2.0.6" - resolved "https://registry.yarnpkg.com/vfile-location/-/vfile-location-2.0.6.tgz#8a274f39411b8719ea5728802e10d9e0dff1519e" - integrity sha512-sSFdyCP3G6Ka0CEmN83A2YCMKIieHx0EDaj5IDP4g1pa5ZJ4FJDvpO0WODLxo4LUX4oe52gmSCK7Jw4SBghqxA== - -vfile-message@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-1.1.1.tgz#5833ae078a1dfa2d96e9647886cd32993ab313e1" - integrity sha512-1WmsopSGhWt5laNir+633LszXvZ+Z/lxveBf6yhGsqnQIhlhzooZae7zV6YVM1Sdkw68dtAW3ow0pOdPANugvA== - dependencies: - unist-util-stringify-position "^1.1.1" - -vfile@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/vfile/-/vfile-2.3.0.tgz#e62d8e72b20e83c324bc6c67278ee272488bf84a" - integrity sha512-ASt4mBUHcTpMKD/l5Q+WJXNtshlWxOogYyGYYrg4lt/vuRjC1EFQtlAofL5VmtVNIZJzWYFJjzGWZ0Gw8pzW1w== - dependencies: - is-buffer "^1.1.4" - replace-ext "1.0.0" - unist-util-stringify-position "^1.0.0" - vfile-message "^1.0.0" - victory-area@^35.4.4: version "35.4.11" resolved "https://registry.yarnpkg.com/victory-area/-/victory-area-35.4.11.tgz#482d69455574e20ba8b1b7e2b2d79166ae8c3d1e" @@ -9275,10 +9313,10 @@ warning@^4.0.0, warning@^4.0.3: dependencies: loose-envify "^1.0.0" -watchpack@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.1.1.tgz#e99630550fca07df9f90a06056987baa40a689c7" - integrity sha512-Oo7LXCmc1eE1AjyuSBmtC3+Wy4HcV8PxWh2kP6fOl8yTlNS7r0K9l1ao2lrrUza7V39Y3D/BbJgY8VeSlc5JKw== +watchpack@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.2.0.tgz#47d78f5415fe550ecd740f99fe2882323a58b1ce" + integrity sha512-up4YAn/XHgZHIxFBVCdlMiWDj6WaLKpwVeGQk2I5thdYxF/KmF0aaz6TfJZ/hfl1h/XlcDr7k1KH7ThDagpFaA== dependencies: glob-to-regexp "^0.4.1" graceful-fs "^4.1.2" @@ -9307,15 +9345,15 @@ webidl-conversions@^6.1.0: resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514" integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w== -webpack-cli@^4.7.0: - version "4.7.0" - resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-4.7.0.tgz#3195a777f1f802ecda732f6c95d24c0004bc5a35" - integrity sha512-7bKr9182/sGfjFm+xdZSwgQuFjgEcy0iCTIBxRUeteJ2Kr8/Wz0qNJX+jw60LU36jApt4nmMkep6+W5AKhok6g== +webpack-cli@^4.7.2: + version "4.7.2" + resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-4.7.2.tgz#a718db600de6d3906a4357e059ae584a89f4c1a5" + integrity sha512-mEoLmnmOIZQNiRl0ebnjzQ74Hk0iKS5SiEEnpq3dRezoyR3yPaeQZCMCe+db4524pj1Pd5ghZXjT41KLzIhSLw== dependencies: "@discoveryjs/json-ext" "^0.5.0" - "@webpack-cli/configtest" "^1.0.3" - "@webpack-cli/info" "^1.2.4" - "@webpack-cli/serve" "^1.4.0" + "@webpack-cli/configtest" "^1.0.4" + "@webpack-cli/info" "^1.3.0" + "@webpack-cli/serve" "^1.5.1" colorette "^1.2.1" commander "^7.0.0" execa "^5.0.0" @@ -9384,10 +9422,10 @@ webpack-log@^2.0.0: ansi-colors "^3.0.0" uuid "^3.3.2" -webpack-log@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/webpack-log/-/webpack-log-3.0.1.tgz#647c42231b6f74d7cc3c3a66510370e635d066ea" - integrity sha512-mX/6BJPPpxco6BGCFZJ96NjgnwBrLQx6d7Kxe1PaJ7KvjI3LFmJK9QgRPCAr9tXrPVawPN1cuM8hJ2Vadnwm+Q== +webpack-log@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/webpack-log/-/webpack-log-3.0.2.tgz#edf64fe4cabffeb04a03ca44d89f9908a4a9d238" + integrity sha512-ijm2zgqTY2omtlxRNrtDqxAQOrfAGMxWg9fQB/kuFSeZjx/OkYnfYLqsjf/JkrWOHINMzqxaJDXaog6Mx9KaHg== dependencies: chalk "^2.4.2" loglevelnext "^3.0.1" @@ -9409,18 +9447,18 @@ webpack-sources@^1.1.0: source-list-map "^2.0.0" source-map "~0.6.1" -webpack-sources@^2.1.1: - version "2.2.0" - resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-2.2.0.tgz#058926f39e3d443193b6c31547229806ffd02bac" - integrity sha512-bQsA24JLwcnWGArOKUxYKhX3Mz/nK1Xf6hxullKERyktjNMC4x8koOeaDNTA2fEJ09BdWLbM/iTW0ithREUP0w== +webpack-sources@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-2.3.0.tgz#9ed2de69b25143a4c18847586ad9eccb19278cfa" + integrity sha512-WyOdtwSvOML1kbgtXbTDnEW0jkJ7hZr/bDByIwszhWd/4XX1A3XMkrbFMsuH4+/MfLlZCUzlAdg4r7jaGKEIgQ== dependencies: source-list-map "^2.0.1" source-map "^0.6.1" -webpack@^5.37.1: - version "5.37.1" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.37.1.tgz#2deb5acd350583c1ab9338471f323381b0b0c14b" - integrity sha512-btZjGy/hSjCAAVHw+cKG+L0M+rstlyxbO2C+BOTaQ5/XAnxkDrP5sVbqWhXgo4pL3X2dcOib6rqCP20Zr9PLow== +webpack@^5.38.1: + version "5.38.1" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.38.1.tgz#5224c7f24c18e729268d3e3bc97240d6e880258e" + integrity sha512-OqRmYD1OJbHZph6RUMD93GcCZy4Z4wC0ele4FXyYF0J6AxO1vOSuIlU1hkS/lDlR9CDYBz64MZRmdbdnFFoT2g== dependencies: "@types/eslint-scope" "^3.7.0" "@types/estree" "^0.0.47" @@ -9432,7 +9470,7 @@ webpack@^5.37.1: chrome-trace-event "^1.0.2" enhanced-resolve "^5.8.0" es-module-lexer "^0.4.0" - eslint-scope "^5.1.1" + eslint-scope "5.1.1" events "^3.2.0" glob-to-regexp "^0.4.1" graceful-fs "^4.2.4" @@ -9443,8 +9481,8 @@ webpack@^5.37.1: schema-utils "^3.0.0" tapable "^2.1.1" terser-webpack-plugin "^5.1.1" - watchpack "^2.0.0" - webpack-sources "^2.1.1" + watchpack "^2.2.0" + webpack-sources "^2.3.0" websocket-driver@>=0.5.1, websocket-driver@^0.7.4: version "0.7.4" @@ -9481,7 +9519,16 @@ whatwg-url@^8.0.0: tr46 "^2.0.2" webidl-conversions "^6.1.0" -which-boxed-primitive@^1.0.1: +whatwg-url@^8.5.0: + version "8.6.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-8.6.0.tgz#27c0205a4902084b872aecb97cf0f2a7a3011f4c" + integrity sha512-os0KkeeqUOl7ccdDT1qqUcS4KH4tcBTSKK5Nl5WKb2lyxInIZ/CpjkqKa1Ss12mjfdcRX9mHmPPs7/SxG1Hbdw== + dependencies: + lodash "^4.7.0" + tr46 "^2.1.0" + webidl-conversions "^6.1.0" + +which-boxed-primitive@^1.0.1, which-boxed-primitive@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== @@ -9579,15 +9626,10 @@ ws@^6.2.1: dependencies: async-limiter "~1.0.0" -ws@^7.4.4: - version "7.4.4" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.4.tgz#383bc9742cb202292c9077ceab6f6047b17f2d59" - integrity sha512-Qm8k8ojNQIMx7S+Zp8u/uHOx7Qazv3Yv4q68MiWWWOJhiwG5W3x7iqmRtJo8xxrciZUY4vRxUTJCKuRnF28ZZw== - -x-is-string@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/x-is-string/-/x-is-string-0.1.0.tgz#474b50865af3a49a9c4657f05acd145458f77d82" - integrity sha1-R0tQhlrzpJqcRlfwWs0UVFj3fYI= +ws@^7.4.5: + version "7.4.6" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c" + integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== xml-name-validator@^3.0.0: version "3.0.0" @@ -9604,11 +9646,6 @@ xstate@4.16.2: resolved "https://registry.yarnpkg.com/xstate/-/xstate-4.16.2.tgz#d6b973b1253b8c85f50f68601837287d59d4bf34" integrity sha512-EY39NNZnwM4tRYNmQAi1c2qHuZ1lJmuDpEo1jxiRcfS+1jPtKRAjGRLNx3fYKcK0ohW6mL41Wze3mdCF0SqavA== -xtend@^4.0.0, xtend@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" - integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== - y18n@^3.2.1: version "3.2.2" resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.2.tgz#85c901bd6470ce71fc4bb723ad209b70f7f28696" From e2b3063138aa05ac15084bd17da96a9411d7e5b1 Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Wed, 9 Jun 2021 13:39:24 -0400 Subject: [PATCH 050/141] Forecast cone of confidence is now its own legend item https://issues.redhat.com/browse/COST-1492 --- src/components/charts/common/chartUtils.ts | 17 +---------------- .../dailyTrendChart/dailyTrendChart.tsx | 12 ++++++++++-- .../charts/trendChart/trendChart.tsx | 19 +++++++++++++++---- .../ocpDashboard/ocpDashboardWidgets.ts | 2 +- 4 files changed, 27 insertions(+), 23 deletions(-) diff --git a/src/components/charts/common/chartUtils.ts b/src/components/charts/common/chartUtils.ts index c772909de..ec2df3f35 100644 --- a/src/components/charts/common/chartUtils.ts +++ b/src/components/charts/common/chartUtils.ts @@ -84,7 +84,7 @@ export const getLegendData = (series: ChartSeries[], hiddenSeries: Set, }; return data; }); - return tooltip ? result : result.filter(d => d.childName.indexOf('Cone') === -1); + return result; }; // Note: Forecast is expected to use both datum.y and datum.y0 @@ -141,21 +141,6 @@ export const initHiddenSeries = (series: ChartSeries[], hiddenSeries: Set { }; private getAdjustedContainerHeight = () => { - const { adjustContainerHeight, height, containerHeight = height, showForecast } = this.props; + const { + adjustContainerHeight, + height, + containerHeight = height, + showForecast, + showInfrastructureLabel, + showSupplementaryLabel, + } = this.props; const { width } = this.state; let adjustedContainerHeight = containerHeight; if (adjustContainerHeight) { if (showForecast) { - if (width < 700) { + const maxWidth = showSupplementaryLabel || showInfrastructureLabel ? 850 : 700; + if (width < maxWidth) { adjustedContainerHeight += 25; } } diff --git a/src/components/charts/trendChart/trendChart.tsx b/src/components/charts/trendChart/trendChart.tsx index 1d8f963e8..bd8692e75 100644 --- a/src/components/charts/trendChart/trendChart.tsx +++ b/src/components/charts/trendChart/trendChart.tsx @@ -201,13 +201,21 @@ class TrendChart extends React.Component { }; private getAdjustedContainerHeight = () => { - const { adjustContainerHeight, height, containerHeight = height, showForecast } = this.props; + const { + adjustContainerHeight, + height, + containerHeight = height, + showForecast, + showInfrastructureLabel, + showSupplementaryLabel, + } = this.props; const { width } = this.state; let adjustedContainerHeight = containerHeight; if (adjustContainerHeight) { if (showForecast) { - if (width < 700) { + const maxWidth = showSupplementaryLabel || showInfrastructureLabel ? 850 : 700; + if (width < maxWidth) { adjustedContainerHeight += 25; } } @@ -253,12 +261,15 @@ class TrendChart extends React.Component { }; private getEndDate() { - const { currentData, forecastData, previousData } = this.props; + const { currentData, forecastData, forecastConeData, previousData } = this.props; const previousDate = previousData ? getDate(getDateRange(previousData, true, true)[1]) : 0; const currentDate = currentData ? getDate(getDateRange(currentData, true, true)[1]) : 0; const forecastDate = forecastData ? getDate(getDateRange(forecastData, true, true)[1]) : 0; + const forecastConeDate = forecastConeData ? getDate(getDateRange(forecastConeData, true, true)[1]) : 0; - return currentDate > 0 || previousDate > 0 ? Math.max(currentDate, forecastDate, previousDate) : 31; + return currentDate > 0 || previousDate > 0 + ? Math.max(currentDate, forecastDate, forecastConeDate, previousDate) + : 31; } // Returns onMouseOver, onMouseOut, and onClick events for the interactive legend diff --git a/src/store/dashboard/ocpDashboard/ocpDashboardWidgets.ts b/src/store/dashboard/ocpDashboard/ocpDashboardWidgets.ts index 81f45ac12..7bf2b0ba3 100644 --- a/src/store/dashboard/ocpDashboard/ocpDashboardWidgets.ts +++ b/src/store/dashboard/ocpDashboard/ocpDashboardWidgets.ts @@ -22,7 +22,7 @@ export const costSummaryWidget: OcpDashboardWidget = { reportPathsType: ReportPathsType.ocp, reportType: ReportType.cost, details: { - // adjustContainerHeight: true, + adjustContainerHeight: true, appNavId: 'ocp', costKey: 'cost', formatOptions: { From 2c4cf014676abb8961c5235b06cdfa1081e031f6 Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Wed, 9 Jun 2021 13:49:23 -0400 Subject: [PATCH 051/141] Forecast cost confidence should use mius symbol for daily legend item --- src/components/charts/dailyTrendChart/dailyTrendChart.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/charts/dailyTrendChart/dailyTrendChart.tsx b/src/components/charts/dailyTrendChart/dailyTrendChart.tsx index eef12dd32..a129b0ca6 100644 --- a/src/components/charts/dailyTrendChart/dailyTrendChart.tsx +++ b/src/components/charts/dailyTrendChart/dailyTrendChart.tsx @@ -188,7 +188,7 @@ class DailyTrendChart extends React.Component { name: getCostRangeString(forecastConeData, 'chart.cost_forecast_cone_legend_label', false, false), symbol: { fill: chartStyles.forecastConeDataColorScale[0], - type: 'triangleLeft', + type: 'minus', }, tooltip: getCostRangeString(forecastConeData, 'chart.cost_forecast_cone_legend_tooltip', false, false), }, From 5fc4146d2284b61c3717178ebd0c4636057a9488 Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Wed, 9 Jun 2021 22:02:03 -0400 Subject: [PATCH 052/141] Added column management support to OCP details table https://issues.redhat.com/browse/COST-1506 --- src/locales/en.json | 8 + .../components/dataToolbar/dataToolbar.tsx | 44 ++++- .../columnManagementModal.tsx | 184 ++++++++++++++++++ .../views/details/ocpDetails/detailsTable.tsx | 36 +++- .../details/ocpDetails/detailsToolbar.tsx | 4 + .../views/details/ocpDetails/ocpDetails.tsx | 56 +++++- 6 files changed, 319 insertions(+), 13 deletions(-) create mode 100644 src/pages/views/details/components/columnManagement/columnManagementModal.tsx diff --git a/src/locales/en.json b/src/locales/en.json index 455b20b0d..88da753f4 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -346,6 +346,14 @@ "price_list": "View all price lists" }, "clusters_modal_title": "$t(group_by.values.{{groupBy}}) {{name}} clusters", + "column_management": { + "aria_label": "Table column management", + "cancel": "Cancel", + "desc": "Selected categories will be displayed in the table", + "save": "Save", + "select_all": "Select all", + "title": "Manage columns" + }, "cost_value": "Cost: {{value}}", "empty_state": "Processing data to generate a list of all services that sums to a total cost...", "month_over_month_change": "Month over month change", diff --git a/src/pages/views/components/dataToolbar/dataToolbar.tsx b/src/pages/views/components/dataToolbar/dataToolbar.tsx index f48ae56c0..4481adb43 100644 --- a/src/pages/views/components/dataToolbar/dataToolbar.tsx +++ b/src/pages/views/components/dataToolbar/dataToolbar.tsx @@ -52,6 +52,7 @@ interface DataToolbarOwnProps { itemsPerPage?: number; itemsTotal?: number; onBulkSelected?: (action: string) => void; + onColumnManagementClicked?: () => void; onExportClicked?: () => void; onFilterAdded?: (filterType: string, filterValue: string) => void; onFilterRemoved?: (filterType: string, filterValue?: string) => void; @@ -61,6 +62,7 @@ interface DataToolbarOwnProps { tagReport?: Tag; // Data containing tag key and value data selectedItems?: ComputedReportItem[]; showBulkSelect?: boolean; // Show bulk select + showColumnManagement?: boolean; // Show column management showExport?: boolean; // Show export icon showFilter?: boolean; // Show export icon style?: React.CSSProperties; @@ -813,13 +815,31 @@ export class DataToolbarBase extends React.Component { }); }; + // Column management + + public getColumnManagement = () => { + const { t } = this.props; + + return ( + + + + ); + }; + // Export button public getExportButton = () => { const { isDisabled, isExportDisabled } = this.props; return ( - + + + } + // style={styles.modal} + isOpen={this.props.isOpen} + onClose={this.handleClose} + title={t('details.column_management.title')} + variant="small" + actions={[ + , + , + ]} + > + + {options.map(option => ( + + + + + + , + ]} + /> + + + ))} + + + ); + } +} + +const mapStateToProps = createMapStateToProps(() => { + return {}; +}); + +const mapDispatchToProps: ColumnManagementModalDispatchProps = { + // TBD... +}; + +const ColumnManagementModalConnect = connect(mapStateToProps, mapDispatchToProps)(ColumnManagementModalBase); +const ColumnManagementModal = withTranslation()(ColumnManagementModalConnect); + +export { ColumnManagementModal, ColumnManagementModalProps }; diff --git a/src/pages/views/details/ocpDetails/detailsTable.tsx b/src/pages/views/details/ocpDetails/detailsTable.tsx index 411447635..d501913af 100644 --- a/src/pages/views/details/ocpDetails/detailsTable.tsx +++ b/src/pages/views/details/ocpDetails/detailsTable.tsx @@ -25,6 +25,7 @@ import { styles } from './detailsTable.styles'; interface DetailsTableOwnProps { groupBy: string; + hiddenColumns: Set; isAllSelected?: boolean; isLoading?: boolean; onSelected(items: ComputedReportItem[], isSelected: boolean); @@ -42,6 +43,12 @@ interface DetailsTableState { type DetailsTableProps = DetailsTableOwnProps & WithTranslation; +export const DetailsTableColumnIds = { + infrastructure: 'infrastructure', + monthOverMonth: 'monthOverMonth', + supplementary: 'supplementary', +}; + const reportPathsType = ReportPathsType.ocp; class DetailsTableBase extends React.Component { @@ -61,21 +68,22 @@ class DetailsTableBase extends React.Component { } public componentDidUpdate(prevProps: DetailsTableProps) { - const { query, report, selectedItems } = this.props; + const { hiddenColumns, query, report, selectedItems } = this.props; const currentReport = report && report.data ? JSON.stringify(report.data) : ''; const previousReport = prevProps.report && prevProps.report.data ? JSON.stringify(prevProps.report.data) : ''; if ( getQuery(prevProps.query) !== getQuery(query) || previousReport !== currentReport || - prevProps.selectedItems !== selectedItems + prevProps.selectedItems !== selectedItems || + prevProps.hiddenColumns !== hiddenColumns ) { this.initDatum(); } } private initDatum = () => { - const { isAllSelected, query, report, selectedItems, t } = this.props; + const { hiddenColumns, isAllSelected, query, report, selectedItems, t } = this.props; if (!query || !report) { return; } @@ -96,12 +104,15 @@ class DetailsTableBase extends React.Component { title: t('details.tag_names'), }, { + id: DetailsTableColumnIds.monthOverMonth, title: t('details.month_over_month_change'), }, { + id: DetailsTableColumnIds.infrastructure, title: t('ocp_details.infrastructure_cost'), }, { + id: DetailsTableColumnIds.supplementary, title: t('ocp_details.supplementary_cost'), }, { @@ -120,9 +131,11 @@ class DetailsTableBase extends React.Component { transforms: [sortable], }, { + id: DetailsTableColumnIds.monthOverMonth, title: t('details.month_over_month_change'), }, { + id: DetailsTableColumnIds.infrastructure, orderBy: 'infrastructure_cost', title: t('ocp_details.infrastructure_cost'), @@ -130,6 +143,7 @@ class DetailsTableBase extends React.Component { // transforms: [sortable], }, { + id: DetailsTableColumnIds.supplementary, orderBy: 'supplementary_cost', title: t('ocp_details.supplementary_cost'), @@ -189,9 +203,9 @@ class DetailsTableBase extends React.Component { ), }, - { title:
{monthOverMonth}
}, - { title:
{InfrastructureCost}
}, - { title:
{supplementaryCost}
}, + { title:
{monthOverMonth}
, id: DetailsTableColumnIds.monthOverMonth }, + { title:
{InfrastructureCost}
, id: DetailsTableColumnIds.infrastructure }, + { title:
{supplementaryCost}
, id: DetailsTableColumnIds.supplementary }, { title:
{cost}
}, { title:
{actions}
}, ], @@ -220,10 +234,16 @@ class DetailsTableBase extends React.Component { }, ]; + const filteredColumns = columns.filter(column => !hiddenColumns.has(column.id)); + const filteredRows = rows.map(({ ...row }) => { + row.cells = row.cells.filter(cell => !hiddenColumns.has(cell.id)); + return row; + }); + this.setState({ - columns, + columns: filteredColumns, loadingRows, - rows, + rows: filteredRows, sortBy: {}, }); }; diff --git a/src/pages/views/details/ocpDetails/detailsToolbar.tsx b/src/pages/views/details/ocpDetails/detailsToolbar.tsx index cb9bb59f6..1d81ec3bd 100644 --- a/src/pages/views/details/ocpDetails/detailsToolbar.tsx +++ b/src/pages/views/details/ocpDetails/detailsToolbar.tsx @@ -19,6 +19,7 @@ interface DetailsToolbarOwnProps { itemsTotal?: number; groupBy: string; onBulkSelected(action: string); + onColumnManagementClicked(); onExportClicked(); onFilterAdded(filterType: string, filterValue: string); onFilterRemoved(filterType: string, filterValue?: string); @@ -96,6 +97,7 @@ export class DetailsToolbarBase extends React.Component { itemsPerPage, itemsTotal, onBulkSelected, + onColumnManagementClicked, onExportClicked, onFilterAdded, onFilterRemoved, @@ -115,6 +117,7 @@ export class DetailsToolbarBase extends React.Component { itemsPerPage={itemsPerPage} itemsTotal={itemsTotal} onBulkSelected={onBulkSelected} + onColumnManagementClicked={onColumnManagementClicked} onExportClicked={onExportClicked} onFilterAdded={onFilterAdded} onFilterRemoved={onFilterRemoved} @@ -122,6 +125,7 @@ export class DetailsToolbarBase extends React.Component { query={query} selectedItems={selectedItems} showBulkSelect + showColumnManagement showExport showFilter tagReport={tagReport} diff --git a/src/pages/views/details/ocpDetails/ocpDetails.tsx b/src/pages/views/details/ocpDetails/ocpDetails.tsx index b5c752c45..124f7e8c4 100644 --- a/src/pages/views/details/ocpDetails/ocpDetails.tsx +++ b/src/pages/views/details/ocpDetails/ocpDetails.tsx @@ -11,6 +11,11 @@ import NoData from 'pages/state/noData'; import NoProviders from 'pages/state/noProviders'; import NotAvailable from 'pages/state/notAvailable'; import { ExportModal } from 'pages/views/components/export/exportModal'; +import { + ColumnManagementModal, + ColumnManagementModalOption, + initHiddenColumns, +} from 'pages/views/details/components/columnManagement/columnManagementModal'; import { getGroupByTagKey } from 'pages/views/utils/groupBy'; import { hasCurrentMonthData } from 'pages/views/utils/providers'; import { addQueryFilter, removeQueryFilter } from 'pages/views/utils/query'; @@ -23,9 +28,10 @@ import { ocpProvidersQuery, providersSelectors } from 'store/providers'; import { reportActions, reportSelectors } from 'store/reports'; import { getIdKeyForGroupBy } from 'utils/computedReport/getComputedOcpReportItems'; import { ComputedReportItem, getUnsortedComputedReportItems } from 'utils/computedReport/getComputedReportItems'; +import { cloneDeep } from 'lodash'; import { DetailsHeader } from './detailsHeader'; -import { DetailsTable } from './detailsTable'; +import { DetailsTable, DetailsTableColumnIds } from './detailsTable'; import { DetailsToolbar } from './detailsToolbar'; import { styles } from './ocpDetails.styles'; @@ -45,7 +51,9 @@ interface OcpDetailsDispatchProps { interface OcpDetailsState { columns: any[]; + hiddenColumns: Set; isAllSelected: boolean; + isColumnManagementModalOpen: boolean; isExportModalOpen: boolean; rows: any[]; selectedItems: ComputedReportItem[]; @@ -73,13 +81,21 @@ const baseQuery: OcpQuery = { }, }; +const defaultColumnOptions: ColumnManagementModalOption[] = [ + { label: 'details.month_over_month_change', value: DetailsTableColumnIds.monthOverMonth }, + { label: 'ocp_details.infrastructure_cost', value: DetailsTableColumnIds.infrastructure, hidden: true }, + { label: 'ocp_details.supplementary_cost', value: DetailsTableColumnIds.supplementary, hidden: true }, +]; + const reportType = ReportType.cost; const reportPathsType = ReportPathsType.ocp; class OcpDetails extends React.Component { protected defaultState: OcpDetailsState = { columns: [], + hiddenColumns: initHiddenColumns(defaultColumnOptions), isAllSelected: false, + isColumnManagementModalOpen: false, isExportModalOpen: false, rows: [], selectedItems: [], @@ -89,6 +105,9 @@ class OcpDetails extends React.Component { constructor(stateProps, dispatchProps) { super(stateProps, dispatchProps); this.handleBulkSelected = this.handleBulkSelected.bind(this); + this.handleColumnManagementModalClose = this.handleColumnManagementModalClose.bind(this); + this.handleColumnManagementModalOpen = this.handleColumnManagementModalOpen.bind(this); + this.handleColumnManagementModalSave = this.handleColumnManagementModalSave.bind(this); this.handleExportModalClose = this.handleExportModalClose.bind(this); this.handleExportModalOpen = this.handleExportModalOpen.bind(this); this.handleFilterAdded = this.handleFilterAdded.bind(this); @@ -117,6 +136,24 @@ class OcpDetails extends React.Component { } } + private getColumnManagementModal = () => { + const { hiddenColumns, isColumnManagementModalOpen } = this.state; + + const options = cloneDeep(defaultColumnOptions); + options.map(option => { + option.hidden = hiddenColumns.has(option.value); + }); + + return ( + + ); + }; + private getComputedItems = () => { const { query, report } = this.props; @@ -193,7 +230,7 @@ class OcpDetails extends React.Component { private getTable = () => { const { query, report, reportFetchStatus } = this.props; - const { isAllSelected, selectedItems } = this.state; + const { hiddenColumns, isAllSelected, selectedItems } = this.state; const groupById = getIdKeyForGroupBy(query.group_by); const groupByTagKey = getGroupByTagKey(query); @@ -201,6 +238,7 @@ class OcpDetails extends React.Component { return ( { itemsPerPage={computedItems.length} itemsTotal={itemsTotal} onBulkSelected={this.handleBulkSelected} + onColumnManagementClicked={this.handleColumnManagementModalOpen} onExportClicked={this.handleExportModalOpen} onFilterAdded={this.handleFilterAdded} onFilterRemoved={this.handleFilterRemoved} @@ -253,6 +292,18 @@ class OcpDetails extends React.Component { } }; + public handleColumnManagementModalClose = (isOpen: boolean) => { + this.setState({ isColumnManagementModalOpen: isOpen }); + }; + + public handleColumnManagementModalOpen = () => { + this.setState({ isColumnManagementModalOpen: true }); + }; + + public handleColumnManagementModalSave = (hiddenColumns: Set) => { + this.setState({ hiddenColumns }); + }; + public handleExportModalClose = (isOpen: boolean) => { this.setState({ isExportModalOpen: isOpen }); }; @@ -389,6 +440,7 @@ class OcpDetails extends React.Component {
{this.getToolbar(computedItems)} {this.getExportModal(computedItems)} + {this.getColumnManagementModal()} {reportFetchStatus === FetchStatus.inProgress ? ( ) : ( From 735667328e0d2da12c9520c76f4125ac2efcba78 Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Wed, 9 Jun 2021 22:46:52 -0400 Subject: [PATCH 053/141] Updated syncLocales.js to use i18next-locales-sync to resolve Dependabot alert against yargs-parser https://issues.redhat.com/browse/COST-1403 --- koku-ui-manifest | 45 ++----- package.json | 2 +- scripts/syncLocales.js | 19 ++- yarn.lock | 280 +++++++++++------------------------------ 4 files changed, 92 insertions(+), 254 deletions(-) diff --git a/koku-ui-manifest b/koku-ui-manifest index 41c87b206..92c185a77 100644 --- a/koku-ui-manifest +++ b/koku-ui-manifest @@ -340,7 +340,6 @@ mgmt_services/cost-mgmt:koku-ui/call-bind:1.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/call-bind:1.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/callsites:3.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/camel-case:4.1.2.yarnlock -mgmt_services/cost-mgmt:koku-ui/camelcase:3.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/camelcase:5.3.1.yarnlock mgmt_services/cost-mgmt:koku-ui/camelcase:5.3.1.yarnlock mgmt_services/cost-mgmt:koku-ui/camelcase:6.2.0.yarnlock @@ -373,15 +372,14 @@ mgmt_services/cost-mgmt:koku-ui/clean-css:4.2.3.yarnlock mgmt_services/cost-mgmt:koku-ui/cli-cursor:3.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/cli-spinners:2.6.0.yarnlock mgmt_services/cost-mgmt:koku-ui/cli-width:3.0.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/cliui:3.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/cliui:5.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/cliui:6.0.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/cliui:7.0.4.yarnlock mgmt_services/cost-mgmt:koku-ui/clone-deep:4.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/clone:1.0.3.yarnlock mgmt_services/cost-mgmt:koku-ui/clone:2.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/clone:1.0.4.yarnlock mgmt_services/cost-mgmt:koku-ui/co:4.6.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/code-point-at:1.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/collect-v8-coverage:1.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/collection-visit:1.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/color-convert:1.9.3.yarnlock @@ -469,7 +467,6 @@ mgmt_services/cost-mgmt:koku-ui/debug:4.3.1.yarnlock mgmt_services/cost-mgmt:koku-ui/debug:3.2.7.yarnlock mgmt_services/cost-mgmt:koku-ui/debug:3.2.7.yarnlock mgmt_services/cost-mgmt:koku-ui/decamelize:1.2.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/decamelize:1.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/decimal.js:10.2.1.yarnlock mgmt_services/cost-mgmt:koku-ui/decode-uri-component:0.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/deep-equal:1.1.1.yarnlock @@ -647,7 +644,6 @@ mgmt_services/cost-mgmt:koku-ui/file-uri-to-path:1.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/fill-range:4.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/fill-range:7.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/finalhandler:1.1.2.yarnlock -mgmt_services/cost-mgmt:koku-ui/find-up:1.1.2.yarnlock mgmt_services/cost-mgmt:koku-ui/find-up:2.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/find-up:2.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/find-up:3.0.0.yarnlock @@ -665,6 +661,7 @@ mgmt_services/cost-mgmt:koku-ui/form-data:2.3.3.yarnlock mgmt_services/cost-mgmt:koku-ui/forwarded:0.1.2.yarnlock mgmt_services/cost-mgmt:koku-ui/fragment-cache:0.2.1.yarnlock mgmt_services/cost-mgmt:koku-ui/fresh:0.5.2.yarnlock +mgmt_services/cost-mgmt:koku-ui/fs-extra:10.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/fs.realpath:1.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/fsevents:1.2.13.yarnlock mgmt_services/cost-mgmt:koku-ui/fsevents:2.3.2.yarnlock @@ -675,7 +672,7 @@ mgmt_services/cost-mgmt:koku-ui/function.prototype.name:1.1.4.yarnlock mgmt_services/cost-mgmt:koku-ui/functional-red-black-tree:1.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/functions-have-names:1.2.2.yarnlock mgmt_services/cost-mgmt:koku-ui/gensync:1.0.0-beta.2.yarnlock -mgmt_services/cost-mgmt:koku-ui/get-caller-file:1.0.3.yarnlock +mgmt_services/cost-mgmt:koku-ui/get-caller-file:2.0.5.yarnlock mgmt_services/cost-mgmt:koku-ui/get-caller-file:2.0.5.yarnlock mgmt_services/cost-mgmt:koku-ui/get-intrinsic:1.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/get-intrinsic:1.1.1.yarnlock @@ -701,7 +698,6 @@ mgmt_services/cost-mgmt:koku-ui/glob:7.1.6.yarnlock mgmt_services/cost-mgmt:koku-ui/glob:7.1.6.yarnlock mgmt_services/cost-mgmt:koku-ui/glob:7.1.6.yarnlock mgmt_services/cost-mgmt:koku-ui/glob:7.1.6.yarnlock -mgmt_services/cost-mgmt:koku-ui/glob:7.1.6.yarnlock mgmt_services/cost-mgmt:koku-ui/globals:11.12.0.yarnlock mgmt_services/cost-mgmt:koku-ui/globals:13.9.0.yarnlock mgmt_services/cost-mgmt:koku-ui/globals:13.9.0.yarnlock @@ -711,6 +707,8 @@ mgmt_services/cost-mgmt:koku-ui/good-guy-http:1.14.0.yarnlock mgmt_services/cost-mgmt:koku-ui/graceful-fs:4.2.6.yarnlock mgmt_services/cost-mgmt:koku-ui/graceful-fs:4.2.6.yarnlock mgmt_services/cost-mgmt:koku-ui/graceful-fs:4.2.6.yarnlock +mgmt_services/cost-mgmt:koku-ui/graceful-fs:4.2.6.yarnlock +mgmt_services/cost-mgmt:koku-ui/graceful-fs:4.2.6.yarnlock mgmt_services/cost-mgmt:koku-ui/growly:1.3.0.yarnlock mgmt_services/cost-mgmt:koku-ui/handle-thing:2.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/har-schema:2.0.0.yarnlock @@ -763,7 +761,7 @@ mgmt_services/cost-mgmt:koku-ui/human-date:1.4.0.yarnlock mgmt_services/cost-mgmt:koku-ui/human-signals:1.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/human-signals:2.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/hyphenate-style-name:1.0.4.yarnlock -mgmt_services/cost-mgmt:koku-ui/i18next-json-sync:2.3.1.yarnlock +mgmt_services/cost-mgmt:koku-ui/i18next-locales-sync:1.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/i18next-xhr-backend:3.2.2.yarnlock mgmt_services/cost-mgmt:koku-ui/i18next-xhr-backend:3.2.2.yarnlock mgmt_services/cost-mgmt:koku-ui/i18next:19.9.2.yarnlock @@ -796,7 +794,6 @@ mgmt_services/cost-mgmt:koku-ui/internal-ip:4.3.0.yarnlock mgmt_services/cost-mgmt:koku-ui/internal-slot:1.0.3.yarnlock mgmt_services/cost-mgmt:koku-ui/interpret:2.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/invariant:2.2.4.yarnlock -mgmt_services/cost-mgmt:koku-ui/invert-kv:1.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/ip-regex:2.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/ip:1.1.5.yarnlock mgmt_services/cost-mgmt:koku-ui/ip:1.1.5.yarnlock @@ -833,7 +830,6 @@ mgmt_services/cost-mgmt:koku-ui/is-extendable:0.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/is-extendable:1.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/is-extglob:2.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/is-extglob:2.1.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/is-fullwidth-code-point:1.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/is-fullwidth-code-point:2.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/is-fullwidth-code-point:3.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/is-generator-fn:2.1.0.yarnlock @@ -869,7 +865,6 @@ mgmt_services/cost-mgmt:koku-ui/is-symbol:1.0.3.yarnlock mgmt_services/cost-mgmt:koku-ui/is-typedarray:1.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/is-typedarray:1.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/is-unicode-supported:0.1.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/is-utf8:0.2.1.yarnlock mgmt_services/cost-mgmt:koku-ui/is-windows:1.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/is-wsl:1.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/is-wsl:2.2.0.yarnlock @@ -935,14 +930,13 @@ mgmt_services/cost-mgmt:koku-ui/json-schema-traverse:0.4.1.yarnlock mgmt_services/cost-mgmt:koku-ui/json-schema-traverse:1.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/json-schema:0.2.3.yarnlock mgmt_services/cost-mgmt:koku-ui/json-stable-stringify-without-jsonify:1.0.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/json-stable-stringify:1.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/json-stringify-safe:5.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/json-stringify-safe:5.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/json3:3.3.3.yarnlock mgmt_services/cost-mgmt:koku-ui/json5:2.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/json5:2.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/json5:1.0.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/jsonify:0.0.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/jsonfile:6.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/jsprim:1.4.1.yarnlock mgmt_services/cost-mgmt:koku-ui/jsx-ast-utils:3.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/jsx-ast-utils:3.2.0.yarnlock @@ -961,12 +955,10 @@ mgmt_services/cost-mgmt:koku-ui/klona:2.0.4.yarnlock mgmt_services/cost-mgmt:koku-ui/klona:2.0.4.yarnlock mgmt_services/cost-mgmt:koku-ui/language-subtag-registry:0.3.21.yarnlock mgmt_services/cost-mgmt:koku-ui/language-tags:1.0.5.yarnlock -mgmt_services/cost-mgmt:koku-ui/lcid:1.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/leven:3.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/levn:0.4.1.yarnlock mgmt_services/cost-mgmt:koku-ui/levn:0.3.0.yarnlock mgmt_services/cost-mgmt:koku-ui/lines-and-columns:1.1.6.yarnlock -mgmt_services/cost-mgmt:koku-ui/load-json-file:1.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/load-json-file:2.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/loader-runner:4.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/loader-utils:2.0.0.yarnlock @@ -974,8 +966,6 @@ mgmt_services/cost-mgmt:koku-ui/locate-path:2.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/locate-path:3.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/locate-path:5.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/lodash-es:4.17.21.yarnlock -mgmt_services/cost-mgmt:koku-ui/lodash.assign:4.2.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/lodash.assign:4.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/lodash.clonedeep:4.5.0.yarnlock mgmt_services/cost-mgmt:koku-ui/lodash.escape:4.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/lodash.flattendeep:4.4.0.yarnlock @@ -1079,7 +1069,6 @@ mgmt_services/cost-mgmt:koku-ui/npm-run-path:4.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/nth-check:1.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/nth-check:2.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/null-loader:4.0.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/number-is-nan:1.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/nwsapi:2.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/oauth-sign:0.8.2.yarnlock mgmt_services/cost-mgmt:koku-ui/object-assign:4.1.1.yarnlock @@ -1120,7 +1109,6 @@ mgmt_services/cost-mgmt:koku-ui/optionator:0.8.3.yarnlock mgmt_services/cost-mgmt:koku-ui/optionator:0.9.1.yarnlock mgmt_services/cost-mgmt:koku-ui/ora:5.4.0.yarnlock mgmt_services/cost-mgmt:koku-ui/original:1.0.2.yarnlock -mgmt_services/cost-mgmt:koku-ui/os-locale:1.4.0.yarnlock mgmt_services/cost-mgmt:koku-ui/os-tmpdir:1.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/p-each-series:2.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/p-finally:1.0.0.yarnlock @@ -1152,7 +1140,6 @@ mgmt_services/cost-mgmt:koku-ui/parseurl:1.3.3.yarnlock mgmt_services/cost-mgmt:koku-ui/pascal-case:3.1.2.yarnlock mgmt_services/cost-mgmt:koku-ui/pascalcase:0.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/path-dirname:1.0.2.yarnlock -mgmt_services/cost-mgmt:koku-ui/path-exists:2.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/path-exists:3.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/path-exists:4.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/path-is-absolute:1.0.1.yarnlock @@ -1164,7 +1151,6 @@ mgmt_services/cost-mgmt:koku-ui/path-key:3.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/path-parse:1.0.6.yarnlock mgmt_services/cost-mgmt:koku-ui/path-to-regexp:0.1.7.yarnlock mgmt_services/cost-mgmt:koku-ui/path-to-regexp:1.8.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/path-type:1.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/path-type:2.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/path-type:4.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/performance-now:2.1.0.yarnlock @@ -1254,10 +1240,8 @@ mgmt_services/cost-mgmt:koku-ui/react-test-renderer:16.14.0.yarnlock mgmt_services/cost-mgmt:koku-ui/react-test-renderer:17.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/react-transition-group:4.4.1.yarnlock mgmt_services/cost-mgmt:koku-ui/react:17.0.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/read-pkg-up:1.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/read-pkg-up:2.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/read-pkg-up:7.0.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/read-pkg:1.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/read-pkg:2.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/read-pkg:5.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/readable-stream:2.3.7.yarnlock @@ -1289,7 +1273,6 @@ mgmt_services/cost-mgmt:koku-ui/repeat-string:1.6.1.yarnlock mgmt_services/cost-mgmt:koku-ui/request:2.87.0.yarnlock mgmt_services/cost-mgmt:koku-ui/require-directory:2.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/require-from-string:2.0.2.yarnlock -mgmt_services/cost-mgmt:koku-ui/require-main-filename:1.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/require-main-filename:2.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/requires-port:1.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/resolve-cwd:2.0.0.yarnlock @@ -1414,8 +1397,6 @@ mgmt_services/cost-mgmt:koku-ui/statuses:1.5.0.yarnlock mgmt_services/cost-mgmt:koku-ui/statuses:1.5.0.yarnlock mgmt_services/cost-mgmt:koku-ui/string-hash:1.1.3.yarnlock mgmt_services/cost-mgmt:koku-ui/string-length:4.0.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/string-width:1.0.2.yarnlock -mgmt_services/cost-mgmt:koku-ui/string-width:1.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/string-width:3.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/string-width:3.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/string-width:4.2.2.yarnlock @@ -1433,7 +1414,6 @@ mgmt_services/cost-mgmt:koku-ui/strip-ansi:5.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/strip-ansi:5.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/strip-ansi:5.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/strip-ansi:6.0.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/strip-bom:2.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/strip-bom:3.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/strip-bom:4.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/strip-eof:1.0.0.yarnlock @@ -1515,6 +1495,7 @@ mgmt_services/cost-mgmt:koku-ui/union-value:1.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/uniq:1.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/unist-util-stringify-position:2.0.3.yarnlock mgmt_services/cost-mgmt:koku-ui/universalify:0.1.2.yarnlock +mgmt_services/cost-mgmt:koku-ui/universalify:2.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/unpipe:1.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/unpipe:1.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/unset-value:1.0.0.yarnlock @@ -1599,18 +1580,16 @@ mgmt_services/cost-mgmt:koku-ui/whatwg-url:8.4.0.yarnlock mgmt_services/cost-mgmt:koku-ui/whatwg-url:8.6.0.yarnlock mgmt_services/cost-mgmt:koku-ui/which-boxed-primitive:1.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/which-boxed-primitive:1.0.2.yarnlock -mgmt_services/cost-mgmt:koku-ui/which-module:1.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/which-module:2.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/which:1.3.1.yarnlock mgmt_services/cost-mgmt:koku-ui/which:2.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/which:2.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/wildcard:2.0.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/window-size:0.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/word-wrap:1.2.3.yarnlock mgmt_services/cost-mgmt:koku-ui/word-wrap:1.2.3.yarnlock -mgmt_services/cost-mgmt:koku-ui/wrap-ansi:2.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/wrap-ansi:5.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/wrap-ansi:6.2.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/wrap-ansi:7.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/wrappy:1.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/write-file-atomic:3.0.3.yarnlock mgmt_services/cost-mgmt:koku-ui/ws:6.2.1.yarnlock @@ -1618,14 +1597,14 @@ mgmt_services/cost-mgmt:koku-ui/ws:7.4.6.yarnlock mgmt_services/cost-mgmt:koku-ui/xml-name-validator:3.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/xmlchars:2.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/xstate:4.16.2.yarnlock -mgmt_services/cost-mgmt:koku-ui/y18n:3.2.2.yarnlock mgmt_services/cost-mgmt:koku-ui/y18n:4.0.1.yarnlock +mgmt_services/cost-mgmt:koku-ui/y18n:5.0.8.yarnlock mgmt_services/cost-mgmt:koku-ui/yallist:4.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/yargs-parser:20.2.6.yarnlock mgmt_services/cost-mgmt:koku-ui/yargs-parser:13.1.2.yarnlock mgmt_services/cost-mgmt:koku-ui/yargs-parser:18.1.3.yarnlock -mgmt_services/cost-mgmt:koku-ui/yargs-parser:3.2.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/yargs-parser:20.2.7.yarnlock mgmt_services/cost-mgmt:koku-ui/yargs:13.3.2.yarnlock mgmt_services/cost-mgmt:koku-ui/yargs:15.4.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/yargs:5.0.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/yargs:17.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/yocto-queue:0.1.0.yarnlock diff --git a/package.json b/package.json index 75680090e..13af43f17 100644 --- a/package.json +++ b/package.json @@ -104,7 +104,7 @@ "html-loader": "2.0.0", "html-replace-webpack-plugin": "2.6.0", "html-webpack-plugin": "^5.3.1", - "i18next-json-sync": "^2.3.1", + "i18next-locales-sync": "^1.1.0", "inquirer": "^8.1.0", "jest": "26.6.3", "jws": "^4.0.0", diff --git a/scripts/syncLocales.js b/scripts/syncLocales.js index 254c9ec09..2a1b28dd1 100644 --- a/scripts/syncLocales.js +++ b/scripts/syncLocales.js @@ -1,15 +1,10 @@ -const sync = require('i18next-json-sync').default; +const { syncLocales } = require('i18next-locales-sync'); const path = require('path'); +const srcDir = path.resolve(__dirname, '../src/locales'); -const check = process.argv.includes('--check'); -const srcDir = path.resolve(__dirname, '../src'); - -sync({ - check, - files: path.join(srcDir, '**/locales/*.json'), - primary: 'en', - createResources: [], - space: 2, - lineEndings: 'LF', - finalNewline: true +syncLocales({ + primaryLanguage: 'en', + secondaryLanguages: ['de', 'ja'], + localesFolder: srcDir, + // overridePluralRules: pluralResolver => pluralResolver.addRule('he', pluralResolver.getRule('en')), }); diff --git a/yarn.lock b/yarn.lock index 3022373c7..34c353773 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2161,11 +2161,6 @@ camel-case@^4.1.1: pascal-case "^3.1.2" tslib "^2.0.3" -camelcase@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" - integrity sha1-MvxLn82vhF/N9+c7uXysImHwqwo= - camelcase@^5.0.0, camelcase@^5.3.1: version "5.3.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" @@ -2362,15 +2357,6 @@ cli-width@^3.0.0: resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== -cliui@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" - integrity sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0= - dependencies: - string-width "^1.0.1" - strip-ansi "^3.0.1" - wrap-ansi "^2.0.0" - cliui@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" @@ -2389,6 +2375,15 @@ cliui@^6.0.0: strip-ansi "^6.0.0" wrap-ansi "^6.2.0" +cliui@^7.0.2: + version "7.0.4" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" + integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^7.0.0" + clone-deep@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" @@ -2418,11 +2413,6 @@ co@^4.6.0: resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ= -code-point-at@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" - integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= - collect-v8-coverage@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz#cc2c8e94fc18bbdffe64d6534570c8a673b27f59" @@ -2836,7 +2826,7 @@ debug@^3.1.1, debug@^3.2.6: dependencies: ms "^2.1.1" -decamelize@^1.1.1, decamelize@^1.2.0: +decamelize@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= @@ -4065,14 +4055,6 @@ finalhandler@~1.1.2: statuses "~1.5.0" unpipe "~1.0.0" -find-up@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" - integrity sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8= - dependencies: - path-exists "^2.0.0" - pinkie-promise "^2.0.0" - find-up@^2.0.0, find-up@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" @@ -4165,6 +4147,15 @@ fresh@0.5.2: resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= +fs-extra@^10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.0.0.tgz#9ff61b655dde53fb34a82df84bb214ce802e17c1" + integrity sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" @@ -4213,12 +4204,7 @@ gensync@^1.0.0-beta.2: resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== -get-caller-file@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" - integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w== - -get-caller-file@^2.0.1: +get-caller-file@^2.0.1, get-caller-file@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== @@ -4310,7 +4296,7 @@ glob@^7.0.3, glob@^7.1.7: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^7.0.5, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4: +glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4: version "7.1.6" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== @@ -4368,7 +4354,7 @@ good-guy-http@1.14.0: request "2.87.0" underscore "1.12.1" -graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.2.4: +graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4: version "4.2.6" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee" integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ== @@ -4705,14 +4691,15 @@ hyphenate-style-name@^1.0.2: resolved "https://registry.yarnpkg.com/hyphenate-style-name/-/hyphenate-style-name-1.0.4.tgz#691879af8e220aea5750e8827db4ef62a54e361d" integrity sha512-ygGZLjmXfPHj+ZWh6LwbC37l43MhfztxetbFCoYTM2VjkIUpeHgSNn7QIyVFj7YQ1Wl9Cbw5sholVJPzWvC2MQ== -i18next-json-sync@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/i18next-json-sync/-/i18next-json-sync-2.3.1.tgz#c584c69e7cc5d179f5a5ff64c6b9a143e439b909" - integrity sha512-TeocgYXkkwIeDLbExRK5/L3nn85QxjjUkSqYuUTH+DRrbzLOrQ8/OnrknVb2cwczfYJ9TlHMcbR6xIfSpIaz/w== +i18next-locales-sync@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/i18next-locales-sync/-/i18next-locales-sync-1.1.0.tgz#8ed226b56e1b03229ccd9dddf0e9a6de1ef4cf7c" + integrity sha512-by0EoZgjUv50DZtrdm+QhwYJrbykgJwiwtT/KlsuTk1TvItNBDsEm3yd4rYO3p99FbAZkLa+d3BUmqSLpo3bKQ== dependencies: - glob "^7.0.5" - json-stable-stringify "^1.0.1" - yargs "^5.0.0" + chalk "^4.1.1" + fs-extra "^10.0.0" + glob "^7.1.7" + yargs "^17.0.1" i18next-xhr-backend@*, i18next-xhr-backend@3.2.2: version "3.2.2" @@ -4875,11 +4862,6 @@ invariant@^2.2.4: dependencies: loose-envify "^1.0.0" -invert-kv@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" - integrity sha1-EEqOSqym09jNFXqO+L+rLXo//bY= - ip-regex@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" @@ -5053,13 +5035,6 @@ is-extglob@^2.1.0, is-extglob@^2.1.1: resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= -is-fullwidth-code-point@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" - integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= - dependencies: - number-is-nan "^1.0.0" - is-fullwidth-code-point@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" @@ -5215,11 +5190,6 @@ is-unicode-supported@^0.1.0: resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== -is-utf8@^0.2.0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" - integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI= - is-windows@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" @@ -5794,13 +5764,6 @@ json-stable-stringify-without-jsonify@^1.0.1: resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= -json-stable-stringify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" - integrity sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8= - dependencies: - jsonify "~0.0.0" - json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" @@ -5825,10 +5788,14 @@ json5@^1.0.1: dependencies: minimist "^1.2.0" -jsonify@~0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" - integrity sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM= +jsonfile@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" + integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== + dependencies: + universalify "^2.0.0" + optionalDependencies: + graceful-fs "^4.1.6" jsprim@^1.2.2: version "1.4.1" @@ -5916,13 +5883,6 @@ language-tags@^1.0.5: dependencies: language-subtag-registry "~0.3.2" -lcid@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" - integrity sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU= - dependencies: - invert-kv "^1.0.0" - leven@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" @@ -5949,17 +5909,6 @@ lines-and-columns@^1.1.6: resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= -load-json-file@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" - integrity sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA= - dependencies: - graceful-fs "^4.1.2" - parse-json "^2.2.0" - pify "^2.0.0" - pinkie-promise "^2.0.0" - strip-bom "^2.0.0" - load-json-file@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" @@ -6012,11 +5961,6 @@ lodash-es@^4.17.20: resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.21.tgz#43e626c46e6591b7750beb2b50117390c609e3ee" integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw== -lodash.assign@^4.1.0, lodash.assign@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-4.2.0.tgz#0d99f3ccd7a6d261d19bdaeb9245005d285808e7" - integrity sha1-DZnzzNem0mHRm9rrkkUAXShYCOc= - lodash.clonedeep@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" @@ -6522,11 +6466,6 @@ null-loader@4.0.1: loader-utils "^2.0.0" schema-utils "^3.0.0" -number-is-nan@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" - integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= - nwsapi@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7" @@ -6730,13 +6669,6 @@ original@^1.0.0: dependencies: url-parse "^1.4.3" -os-locale@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9" - integrity sha1-IPnxeuKe00XoveWDsT0gCYA8FNk= - dependencies: - lcid "^1.0.0" - os-tmpdir@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" @@ -6907,13 +6839,6 @@ path-dirname@^1.0.0: resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= -path-exists@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" - integrity sha1-D+tsZPD8UY2adU3V77YscCJ2H0s= - dependencies: - pinkie-promise "^2.0.0" - path-exists@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" @@ -6961,15 +6886,6 @@ path-to-regexp@^1.7.0: dependencies: isarray "0.0.1" -path-type@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" - integrity sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE= - dependencies: - graceful-fs "^4.1.2" - pify "^2.0.0" - pinkie-promise "^2.0.0" - path-type@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" @@ -7503,14 +7419,6 @@ react@17.0.1: loose-envify "^1.1.0" object-assign "^4.1.1" -read-pkg-up@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" - integrity sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI= - dependencies: - find-up "^1.0.0" - read-pkg "^1.0.0" - read-pkg-up@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" @@ -7528,15 +7436,6 @@ read-pkg-up@^7.0.1: read-pkg "^5.2.0" type-fest "^0.8.1" -read-pkg@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" - integrity sha1-9f+qXs0pyzHAR0vKfXVra7KePyg= - dependencies: - load-json-file "^1.0.0" - normalize-package-data "^2.3.2" - path-type "^1.0.0" - read-pkg@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" @@ -7722,11 +7621,6 @@ require-from-string@^2.0.2: resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== -require-main-filename@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" - integrity sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE= - require-main-filename@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" @@ -8350,15 +8244,6 @@ string-length@^4.0.1: char-regex "^1.0.2" strip-ansi "^6.0.0" -string-width@^1.0.1, string-width@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" - integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= - dependencies: - code-point-at "^1.0.0" - is-fullwidth-code-point "^1.0.0" - strip-ansi "^3.0.0" - string-width@^3.0.0, string-width@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" @@ -8464,13 +8349,6 @@ strip-ansi@^6.0.0: dependencies: ansi-regex "^5.0.0" -strip-bom@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" - integrity sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4= - dependencies: - is-utf8 "^0.2.0" - strip-bom@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" @@ -8937,6 +8815,11 @@ universalify@^0.1.2: resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== +universalify@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" + integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== + unpipe@1.0.0, unpipe@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" @@ -9539,11 +9422,6 @@ which-boxed-primitive@^1.0.1, which-boxed-primitive@^1.0.2: is-string "^1.0.5" is-symbol "^1.0.3" -which-module@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f" - integrity sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8= - which-module@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" @@ -9568,24 +9446,11 @@ wildcard@^2.0.0: resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.0.tgz#a77d20e5200c6faaac979e4b3aadc7b3dd7f8fec" integrity sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw== -window-size@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.2.0.tgz#b4315bb4214a3d7058ebeee892e13fa24d98b075" - integrity sha1-tDFbtCFKPXBY6+7okuE/ok2YsHU= - word-wrap@^1.2.3, word-wrap@~1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== -wrap-ansi@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" - integrity sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU= - dependencies: - string-width "^1.0.1" - strip-ansi "^3.0.1" - wrap-ansi@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" @@ -9604,6 +9469,15 @@ wrap-ansi@^6.2.0: string-width "^4.1.0" strip-ansi "^6.0.0" +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" @@ -9646,16 +9520,16 @@ xstate@4.16.2: resolved "https://registry.yarnpkg.com/xstate/-/xstate-4.16.2.tgz#d6b973b1253b8c85f50f68601837287d59d4bf34" integrity sha512-EY39NNZnwM4tRYNmQAi1c2qHuZ1lJmuDpEo1jxiRcfS+1jPtKRAjGRLNx3fYKcK0ohW6mL41Wze3mdCF0SqavA== -y18n@^3.2.1: - version "3.2.2" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.2.tgz#85c901bd6470ce71fc4bb723ad209b70f7f28696" - integrity sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ== - y18n@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.1.tgz#8db2b83c31c5d75099bb890b23f3094891e247d4" integrity sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ== +y18n@^5.0.5: + version "5.0.8" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== + yallist@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" @@ -9682,13 +9556,10 @@ yargs-parser@^18.1.2: camelcase "^5.0.0" decamelize "^1.2.0" -yargs-parser@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-3.2.0.tgz#5081355d19d9d0c8c5d81ada908cb4e6d186664f" - integrity sha1-UIE1XRnZ0MjF2BrakIy05tGGZk8= - dependencies: - camelcase "^3.0.0" - lodash.assign "^4.1.0" +yargs-parser@^20.2.2: + version "20.2.7" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.7.tgz#61df85c113edfb5a7a4e36eb8aa60ef423cbc90a" + integrity sha512-FiNkvbeHzB/syOjIUxFDCnhSfzAL8R5vs40MgLFBorXACCOAEaWu0gRZl14vG8MR9AOJIZbmkjhusqBYZ3HTHw== yargs@^13.3.2: version "13.3.2" @@ -9723,25 +9594,18 @@ yargs@^15.4.1: y18n "^4.0.0" yargs-parser "^18.1.2" -yargs@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-5.0.0.tgz#3355144977d05757dbb86d6e38ec056123b3a66e" - integrity sha1-M1UUSXfQV1fbuG1uOOwFYSOzpm4= - dependencies: - cliui "^3.2.0" - decamelize "^1.1.1" - get-caller-file "^1.0.1" - lodash.assign "^4.2.0" - os-locale "^1.4.0" - read-pkg-up "^1.0.1" +yargs@^17.0.1: + version "17.0.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.0.1.tgz#6a1ced4ed5ee0b388010ba9fd67af83b9362e0bb" + integrity sha512-xBBulfCc8Y6gLFcrPvtqKz9hz8SO0l1Ni8GgDekvBX2ro0HRQImDGnikfc33cgzcYUSncapnNcZDjVFIH3f6KQ== + dependencies: + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" require-directory "^2.1.1" - require-main-filename "^1.0.1" - set-blocking "^2.0.0" - string-width "^1.0.2" - which-module "^1.0.0" - window-size "^0.2.0" - y18n "^3.2.1" - yargs-parser "^3.2.0" + string-width "^4.2.0" + y18n "^5.0.5" + yargs-parser "^20.2.2" yocto-queue@^0.1.0: version "0.1.0" From 3bfaf402e0335f27d437da52c7ad47d412eb372a Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Wed, 9 Jun 2021 22:51:11 -0400 Subject: [PATCH 054/141] Fixed sort order for linter --- src/pages/views/details/ocpDetails/ocpDetails.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/views/details/ocpDetails/ocpDetails.tsx b/src/pages/views/details/ocpDetails/ocpDetails.tsx index 124f7e8c4..94dee8a40 100644 --- a/src/pages/views/details/ocpDetails/ocpDetails.tsx +++ b/src/pages/views/details/ocpDetails/ocpDetails.tsx @@ -6,6 +6,7 @@ import { tagPrefix } from 'api/queries/query'; import { OcpReport } from 'api/reports/ocpReports'; import { ReportPathsType, ReportType } from 'api/reports/report'; import { AxiosError } from 'axios'; +import { cloneDeep } from 'lodash'; import Loading from 'pages/state/loading'; import NoData from 'pages/state/noData'; import NoProviders from 'pages/state/noProviders'; @@ -28,7 +29,6 @@ import { ocpProvidersQuery, providersSelectors } from 'store/providers'; import { reportActions, reportSelectors } from 'store/reports'; import { getIdKeyForGroupBy } from 'utils/computedReport/getComputedOcpReportItems'; import { ComputedReportItem, getUnsortedComputedReportItems } from 'utils/computedReport/getComputedReportItems'; -import { cloneDeep } from 'lodash'; import { DetailsHeader } from './detailsHeader'; import { DetailsTable, DetailsTableColumnIds } from './detailsTable'; From 867caf3e0e2516995568500926124030678a635f Mon Sep 17 00:00:00 2001 From: redallen Date: Fri, 11 Jun 2021 12:35:35 -0400 Subject: [PATCH 055/141] fix(webpack): use upstream federated config --- webpack.config.js | 43 +++++-------------------------------------- 1 file changed, 5 insertions(+), 38 deletions(-) diff --git a/webpack.config.js b/webpack.config.js index d0fd548f4..66e3f3764 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -5,6 +5,7 @@ const log = weblog({ name: 'wds', }); const proxy = require('@redhat-cloud-services/frontend-components-config-utilities/proxy'); +const federatedPlugin = require('@redhat-cloud-services/frontend-components-config-utilities/federated-modules'); const ChunkMapperPlugin = require('@redhat-cloud-services/frontend-components-config-utilities/chunk-mapper'); const HtmlWebpackPlugin = require('html-webpack-plugin'); @@ -14,28 +15,6 @@ const TsconfigPathsPlugin = require('tsconfig-paths-webpack-plugin'); const CopyWebpackPlugin = require('copy-webpack-plugin'); const GitRevisionPlugin = require('git-revision-webpack-plugin'); const { dependencies, insights } = require('./package.json'); -const singletonDeps = [ - 'lodash', - 'axios', - 'redux', - 'react', - 'react-dom', - 'react-router-dom', - 'react-redux', - 'react-promise-middleware', - '@redhat-cloud-services/frontend-components', - '@redhat-cloud-services/frontend-components-utilities', - '@redhat-cloud-services/frontend-components-notifications', -]; -const patternFlyDeps = [ - '@patternfly/patternfly', - '@patternfly/react-core', - '@patternfly/react-charts', - '@patternfly/react-table', - '@patternfly/react-icons', - '@patternfly/react-styles', - '@patternfly/react-tokens', -]; const fileRegEx = /\.(png|woff|woff2|eot|ttf|svg|gif|jpe?g|png)(\?[a-z0-9=.]+)?$/; const srcDir = path.resolve(__dirname, './src'); const distDir = path.resolve(__dirname, './dist/'); @@ -200,26 +179,14 @@ module.exports = (_env, argv) => { chunkFilename: isProduction ? '[id].[contenthash].css' : '[id].css', ignoreOrder: true, // Enable to remove warnings about conflicting order }), - new webpack.container.ModuleFederationPlugin({ - name: moduleName, - filename: `${moduleName}.js`, + federatedPlugin({ + root: __dirname, + moduleName, exposes: { './RootApp': path.resolve(__dirname, './src/federatedEntry.tsx'), // Shared component module path. Must include default export! // './OcpOverviewWidget': path.resolve(__dirname, './src/modules/ocpOverviewWidget'), - }, - shared: { - ...dependencies, - ...singletonDeps.reduce((acc, dep) => { - acc[dep] = { singleton: true, requiredVersion: dependencies[dep] }; - return acc; - }, {}), - // Allows a different (e.g., pre-release) version of PatternFly to be used - ...patternFlyDeps.reduce((acc, dep) => { - acc[dep] = { singleton: false, requiredVersion: dependencies[dep] }; - return acc; - }, {}), - }, + } }), new ChunkMapperPlugin({ modules: [moduleName], From 259653fd4942b0ab18650a10c1456a69ba4e8de9 Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Mon, 14 Jun 2021 22:31:41 -0400 Subject: [PATCH 056/141] Added API support for resource-types API https://issues.redhat.com/browse/COST-1494 --- src/api/queries/query.ts | 1 + src/api/resources/awsResource.ts | 21 ++++++++++++++++++++ src/api/resources/resource.ts | 32 ++++++++++++++++++++++++++++++ src/api/resources/resourceUtils.ts | 27 +++++++++++++++++++++++++ 4 files changed, 81 insertions(+) create mode 100644 src/api/resources/awsResource.ts create mode 100644 src/api/resources/resource.ts create mode 100644 src/api/resources/resourceUtils.ts diff --git a/src/api/queries/query.ts b/src/api/queries/query.ts index 7d73d49b6..c40cba7ed 100644 --- a/src/api/queries/query.ts +++ b/src/api/queries/query.ts @@ -30,6 +30,7 @@ export interface Query { key_only?: boolean; order_by?: any; perspective?: any; + search?: any; start_date?: any; } diff --git a/src/api/resources/awsResource.ts b/src/api/resources/awsResource.ts new file mode 100644 index 000000000..2f8d1eead --- /dev/null +++ b/src/api/resources/awsResource.ts @@ -0,0 +1,21 @@ +import axios from 'axios'; + +import { Resource, ResourceType } from './resource'; + +export const ForecastTypePaths: Partial> = { + [ResourceType.account]: 'resource-types/aws-accounts/', + [ResourceType.region]: 'resource-types/aws-regions/', // TBD: not available + [ResourceType.service]: 'resource-types/aws-services/', // TBD: not available +}; + +export function runResource(resourceType: ResourceType, query: string) { + const insights = (window as any).insights; + const path = ForecastTypePaths[resourceType]; + if (insights && insights.chrome && insights.chrome.auth && insights.chrome.auth.getUser) { + return insights.chrome.auth.getUser().then(() => { + return axios.get(`${path}?${query}`); + }); + } else { + return axios.get(`${path}?${query}`); + } +} diff --git a/src/api/resources/resource.ts b/src/api/resources/resource.ts new file mode 100644 index 000000000..b7acc9179 --- /dev/null +++ b/src/api/resources/resource.ts @@ -0,0 +1,32 @@ +export interface ResourceData { + value?: string; +} + +export interface ResourceMeta { + count: number; +} + +export interface ResourceLinks { + first: string; + previous?: string; + next?: string; + last: string; +} + +export interface Resource { + meta: ResourceMeta; + links: ResourceLinks; + data: ResourceData[]; +} + +// eslint-disable-next-line no-shadow +export const enum ResourceType { + account = 'account', + region = 'region', + service = 'service', +} + +// eslint-disable-next-line no-shadow +export const enum ResourcePathsType { + aws = 'aws', +} diff --git a/src/api/resources/resourceUtils.ts b/src/api/resources/resourceUtils.ts new file mode 100644 index 000000000..45d9bae17 --- /dev/null +++ b/src/api/resources/resourceUtils.ts @@ -0,0 +1,27 @@ +import { runResource as runAwsResource } from './awsResource'; +import { ResourcePathsType, ResourceType } from './resource'; + +export function isResourceTypeValid(resourcePathsType: ResourcePathsType, resourceType: ResourceType) { + let result = false; + + if (resourcePathsType === ResourcePathsType.aws) { + switch (resourceType) { + case ResourceType.account: + case ResourceType.region: + case ResourceType.service: + result = true; + break; + } + } + return result; +}; + +export function runResource(resourcePathsType: ResourcePathsType, resourceType: ResourceType, query: string) { + let forecast; + switch (resourcePathsType) { + case ResourcePathsType.aws: + forecast = runAwsResource(resourceType, query); + break; + } + return forecast; +} From 85c2d159d5e0c8c2ae099874c461bd8694ec2159 Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Mon, 14 Jun 2021 22:32:16 -0400 Subject: [PATCH 057/141] Added Redux support for resource-types API https://issues.redhat.com/browse/COST-1494 --- .../views/components/resource/resource.tsx | 71 +++++++++++++++ src/store/resources/index.ts | 14 +++ src/store/resources/resource.test.ts | 86 +++++++++++++++++++ src/store/resources/resourceActions.ts | 65 ++++++++++++++ src/store/resources/resourceCommon.ts | 7 ++ src/store/resources/resourceReducer.ts | 56 ++++++++++++ src/store/resources/resourceSelectors.ts | 27 ++++++ src/store/rootReducer.ts | 2 + 8 files changed, 328 insertions(+) create mode 100644 src/pages/views/components/resource/resource.tsx create mode 100644 src/store/resources/index.ts create mode 100644 src/store/resources/resource.test.ts create mode 100644 src/store/resources/resourceActions.ts create mode 100644 src/store/resources/resourceCommon.ts create mode 100644 src/store/resources/resourceReducer.ts create mode 100644 src/store/resources/resourceSelectors.ts diff --git a/src/pages/views/components/resource/resource.tsx b/src/pages/views/components/resource/resource.tsx new file mode 100644 index 000000000..422511d81 --- /dev/null +++ b/src/pages/views/components/resource/resource.tsx @@ -0,0 +1,71 @@ +import { ResourcePathsType, ResourceType } from 'api/resources/resource'; +import React from 'react'; +import { noop } from 'utils/noop'; + +import { ResourceSelect } from './resourceSelect'; + +interface ResourceOwnProps { + isDisabled?: boolean; + onSelect?: (value: string) => void; + resourcePathsType: ResourcePathsType; + resourceType: ResourceType; +} + +interface ResourceState { + currentSearch?: string; +} + +type ResourceProps = ResourceOwnProps; + +export class Resource extends React.Component { + private searchTimeout: any = noop; + + protected defaultState: ResourceState = { + // TBD ... + }; + public state: ResourceState = { ...this.defaultState }; + + constructor(props: ResourceProps) { + super(props); + + this.handldeOnSearch = this.handldeOnSearch.bind(this); + this.handldeOnSelect = this.handldeOnSelect.bind(this); + } + + private handldeOnSearch = (value: string) => { + clearTimeout(this.searchTimeout); + + this.searchTimeout = setTimeout(() => { + this.setState({ + currentSearch: value, + }); + }, 750); + }; + + private handldeOnSelect = (value: string) => { + const { onSelect } = this.props; + + if (onSelect) { + onSelect(value); + } + this.setState({ + currentSearch: undefined, + }); + }; + + public render() { + const { isDisabled, resourcePathsType, resourceType } = this.props; + const { currentSearch } = this.state; + + return ( + + ); + } +} diff --git a/src/store/resources/index.ts b/src/store/resources/index.ts new file mode 100644 index 000000000..54c0e16a0 --- /dev/null +++ b/src/store/resources/index.ts @@ -0,0 +1,14 @@ +import * as resourceActions from './resourceActions'; +import { resourceStateKey } from './resourceCommon'; +import { CachedResource, ResourceAction, resourceReducer, ResourceState } from './resourceReducer'; +import * as resourceSelectors from './resourceSelectors'; + +export { + ResourceAction, + CachedResource, + resourceActions, + resourceReducer, + resourceSelectors, + ResourceState, + resourceStateKey, +}; diff --git a/src/store/resources/resource.test.ts b/src/store/resources/resource.test.ts new file mode 100644 index 000000000..a9a38cac1 --- /dev/null +++ b/src/store/resources/resource.test.ts @@ -0,0 +1,86 @@ +jest.mock('api/resources/resourceUtils'); + +import { Resource, ResourcePathsType, ResourceType } from 'api/resources/resource'; +import { runResource } from 'api/resources/resourceUtils'; +import { FetchStatus } from 'store/common'; +import { createMockStoreCreator } from 'store/mockStore'; +import { wait } from 'testUtils'; + +import * as actions from './resourceActions'; +import { resourceStateKey } from './resourceCommon'; +import { resourceReducer } from './resourceReducer'; +import * as selectors from './resourceSelectors'; + +const createResourcesStore = createMockStoreCreator({ + [resourceStateKey]: resourceReducer, +}); + +const runResourceMock = runResource as jest.Mock; + +const mockResource: Resource = { + data: [], + total: { + value: 100, + units: 'USD', + }, +} as any; + +const query = 'query'; +const resourceType = ResourceType.account; +const resourcePathsType = ResourcePathsType.aws; + +runResourceMock.mockResolvedValue({ data: mockResource }); +global.Date.now = jest.fn(() => 12345); + +test('default state', () => { + const store = createResourcesStore(); + expect(selectors.selectResourceState(store.getState())).toMatchSnapshot(); +}); + +test('fetch resource success', async () => { + const store = createResourcesStore(); + store.dispatch(actions.fetchResource(resourcePathsType, resourceType, query)); + expect(runResourceMock).toBeCalled(); + expect(selectors.selectResourceFetchStatus(store.getState(), resourcePathsType, resourceType, query)).toBe( + FetchStatus.inProgress + ); + await wait(); + const finishedState = store.getState(); + expect(selectors.selectResource(finishedState, resourcePathsType, resourceType, query)).toMatchSnapshot(); + expect(selectors.selectResourceFetchStatus(finishedState, resourcePathsType, resourceType, query)).toBe( + FetchStatus.complete + ); + expect(selectors.selectResourceError(finishedState, resourcePathsType, resourceType, query)).toBe(null); +}); + +test('fetch resource failure', async () => { + const store = createResourcesStore(); + const error = Symbol('resource error'); + runResourceMock.mockRejectedValueOnce(error); + store.dispatch(actions.fetchResource(resourcePathsType, resourceType, query)); + expect(runResource).toBeCalled(); + expect(selectors.selectResourceFetchStatus(store.getState(), resourcePathsType, resourceType, query)).toBe( + FetchStatus.inProgress + ); + await wait(); + const finishedState = store.getState(); + expect(selectors.selectResourceFetchStatus(finishedState, resourcePathsType, resourceType, query)).toBe( + FetchStatus.complete + ); + expect(selectors.selectResourceError(finishedState, resourcePathsType, resourceType, query)).toBe(error); +}); + +test('does not fetch resource if the request is in progress', () => { + const store = createResourcesStore(); + store.dispatch(actions.fetchResource(resourcePathsType, resourceType, query)); + store.dispatch(actions.fetchResource(resourcePathsType, resourceType, query)); + expect(runResource).toHaveBeenCalledTimes(1); +}); + +test('resource is not refetched if it has not expired', async () => { + const store = createResourcesStore(); + store.dispatch(actions.fetchResource(resourcePathsType, resourceType, query)); + await wait(); + store.dispatch(actions.fetchResource(resourcePathsType, resourceType, query)); + expect(runResource).toHaveBeenCalledTimes(1); +}); diff --git a/src/store/resources/resourceActions.ts b/src/store/resources/resourceActions.ts new file mode 100644 index 000000000..67431fe6e --- /dev/null +++ b/src/store/resources/resourceActions.ts @@ -0,0 +1,65 @@ +import { Resource, ResourcePathsType, ResourceType } from 'api/resources/resource'; +import { runResource } from 'api/resources/resourceUtils'; +import { AxiosError } from 'axios'; +import { ThunkAction } from 'redux-thunk'; +import { FetchStatus } from 'store/common'; +import { RootState } from 'store/rootReducer'; +import { createAction } from 'typesafe-actions'; + +import { getResourceId } from './resourceCommon'; +import { selectResource, selectResourceFetchStatus } from './resourceSelectors'; + +const expirationMS = 30 * 60 * 1000; // 30 minutes + +interface ResourceActionMeta { + resourceId: string; +} + +export const fetchResourceRequest = createAction('resource/request')(); +export const fetchResourceSuccess = createAction('resource/success')(); +export const fetchResourceFailure = createAction('resource/failure')(); + +export function fetchResource( + resourcePathsType: ResourcePathsType, + resourceType: ResourceType, + query: string +): ThunkAction { + return (dispatch, getState) => { + if (!isResourceExpired(getState(), resourcePathsType, resourceType, query)) { + return; + } + + const meta: ResourceActionMeta = { + resourceId: getResourceId(resourcePathsType, resourceType, query), + }; + + dispatch(fetchResourceRequest(meta)); + runResource(resourcePathsType, resourceType, query) + .then(res => { + dispatch(fetchResourceSuccess(res.data, meta)); + }) + .catch(err => { + dispatch(fetchResourceFailure(err, meta)); + }); + }; +} + +function isResourceExpired( + state: RootState, + resourcePathsType: ResourcePathsType, + resourceType: ResourceType, + query: string +) { + const resource = selectResource(state, resourcePathsType, resourceType, query); + const fetchStatus = selectResourceFetchStatus(state, resourcePathsType, resourceType, query); + if (fetchStatus === FetchStatus.inProgress) { + return false; + } + + if (!resource) { + return true; + } + + const now = Date.now(); + return now > resource.timeRequested + expirationMS; +} diff --git a/src/store/resources/resourceCommon.ts b/src/store/resources/resourceCommon.ts new file mode 100644 index 000000000..a41706443 --- /dev/null +++ b/src/store/resources/resourceCommon.ts @@ -0,0 +1,7 @@ +import { ResourcePathsType, ResourceType } from 'api/resources/resource'; + +export const resourceStateKey = 'resource'; + +export function getResourceId(resourcePathsType: ResourcePathsType, resourceType: ResourceType, query: string) { + return `${resourcePathsType}--${resourceType}--${query}`; +} diff --git a/src/store/resources/resourceReducer.ts b/src/store/resources/resourceReducer.ts new file mode 100644 index 000000000..e5bcdb961 --- /dev/null +++ b/src/store/resources/resourceReducer.ts @@ -0,0 +1,56 @@ +import { Resource } from 'api/resources/resource'; +import { AxiosError } from 'axios'; +import { FetchStatus } from 'store/common'; +import { ActionType, getType } from 'typesafe-actions'; + +import { fetchResourceFailure, fetchResourceRequest, fetchResourceSuccess } from './resourceActions'; + +export interface CachedResource extends Resource { + timeRequested: number; +} + +export type ResourceState = Readonly<{ + byId: Map; + fetchStatus: Map; + errors: Map; +}>; + +const defaultState: ResourceState = { + byId: new Map(), + fetchStatus: new Map(), + errors: new Map(), +}; + +export type ResourceAction = ActionType< + typeof fetchResourceFailure | typeof fetchResourceRequest | typeof fetchResourceSuccess +>; + +export function resourceReducer(state = defaultState, action: ResourceAction): ResourceState { + switch (action.type) { + case getType(fetchResourceRequest): + return { + ...state, + fetchStatus: new Map(state.fetchStatus).set(action.payload.resourceId, FetchStatus.inProgress), + }; + + case getType(fetchResourceSuccess): + return { + ...state, + fetchStatus: new Map(state.fetchStatus).set(action.meta.resourceId, FetchStatus.complete), + byId: new Map(state.byId).set(action.meta.resourceId, { + ...action.payload, + timeRequested: Date.now(), + }), + errors: new Map(state.errors).set(action.meta.resourceId, null), + }; + + case getType(fetchResourceFailure): + return { + ...state, + fetchStatus: new Map(state.fetchStatus).set(action.meta.resourceId, FetchStatus.complete), + errors: new Map(state.errors).set(action.meta.resourceId, action.payload), + }; + default: + return state; + } +} diff --git a/src/store/resources/resourceSelectors.ts b/src/store/resources/resourceSelectors.ts new file mode 100644 index 000000000..e8d3cff01 --- /dev/null +++ b/src/store/resources/resourceSelectors.ts @@ -0,0 +1,27 @@ +import { ResourcePathsType, ResourceType } from 'api/resources/resource'; +import { RootState } from 'store/rootReducer'; + +import { getResourceId, resourceStateKey } from './resourceCommon'; + +export const selectResourceState = (state: RootState) => state[resourceStateKey]; + +export const selectResource = ( + state: RootState, + resourcePathsType: ResourcePathsType, + resourceType: ResourceType, + query: string +) => selectResourceState(state).byId.get(getResourceId(resourcePathsType, resourceType, query)); + +export const selectResourceFetchStatus = ( + state: RootState, + resourcePathsType: ResourcePathsType, + resourceType: ResourceType, + query: string +) => selectResourceState(state).fetchStatus.get(getResourceId(resourcePathsType, resourceType, query)); + +export const selectResourceError = ( + state: RootState, + resourcePathsType: ResourcePathsType, + resourceType: ResourceType, + query: string +) => selectResourceState(state).errors.get(getResourceId(resourcePathsType, resourceType, query)); diff --git a/src/store/rootReducer.ts b/src/store/rootReducer.ts index ae2cd1636..81cf07f24 100644 --- a/src/store/rootReducer.ts +++ b/src/store/rootReducer.ts @@ -36,6 +36,7 @@ import { forecastReducer, forecastStateKey } from 'store/forecasts'; import { orgReducer, orgStateKey } from 'store/orgs'; import { priceListReducer, priceListStateKey } from 'store/priceList'; import { reportReducer, reportStateKey } from 'store/reports'; +import { resourceReducer, resourceStateKey } from 'store/resources'; import { sourcesReducer, sourcesStateKey } from 'store/sourceSettings'; import { tagReducer, tagStateKey } from 'store/tags'; import { StateType } from 'typesafe-actions'; @@ -80,6 +81,7 @@ export const rootReducer = combineReducers({ [rbacStateKey]: rbacReducer, [reportStateKey]: reportReducer, [forecastStateKey]: forecastReducer, + [resourceStateKey]: resourceReducer, [sourcesStateKey]: sourcesReducer, [tagStateKey]: tagReducer, [uiStateKey]: uiReducer, From 5223514db0e64a970fa0d2c1d8c8109e58818d28 Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Mon, 14 Jun 2021 22:34:04 -0400 Subject: [PATCH 058/141] Created resource type component https://issues.redhat.com/browse/COST-1494 --- .../components/dataToolbar/dataToolbar.tsx | 84 ++++++--- .../components/resource/resourceSelect.tsx | 175 ++++++++++++++++++ 2 files changed, 237 insertions(+), 22 deletions(-) create mode 100644 src/pages/views/components/resource/resourceSelect.tsx diff --git a/src/pages/views/components/dataToolbar/dataToolbar.tsx b/src/pages/views/components/dataToolbar/dataToolbar.tsx index 4481adb43..2b02bbf51 100644 --- a/src/pages/views/components/dataToolbar/dataToolbar.tsx +++ b/src/pages/views/components/dataToolbar/dataToolbar.tsx @@ -27,9 +27,12 @@ import { FilterIcon } from '@patternfly/react-icons/dist/js/icons/filter-icon'; import { SearchIcon } from '@patternfly/react-icons/dist/js/icons/search-icon'; import { Org } from 'api/orgs/org'; import { orgUnitIdKey, orgUnitNameKey, Query, tagKey, tagPrefix } from 'api/queries/query'; +import { ResourcePathsType } from 'api/resources/resource'; +import { isResourceTypeValid } from 'api/resources/resourceUtils'; import { Tag } from 'api/tags/tag'; import { cloneDeep } from 'lodash'; import { uniq, uniqBy } from 'lodash'; +import { Resource } from 'pages/views/components/resource/resource'; import React from 'react'; import { WithTranslation, withTranslation } from 'react-i18next'; import { ComputedReportItem } from 'utils/computedReport/getComputedReportItems'; @@ -60,6 +63,7 @@ interface DataToolbarOwnProps { pagination?: React.ReactNode; // Optional pagination controls to display in toolbar query?: Query; // Query containing filter_by params used to restore state upon page refresh tagReport?: Tag; // Data containing tag key and value data + resourcePathsType?: ResourcePathsType; selectedItems?: ComputedReportItem[]; showBulkSelect?: boolean; // Show bulk select showColumnManagement?: boolean; // Show column management @@ -365,7 +369,7 @@ export class DataToolbarBase extends React.Component { // Category input public getCategoryInput = categoryOption => { - const { isDisabled, t } = this.props; + const { isDisabled, resourcePathsType, t } = this.props; const { currentCategory, filters, categoryInput } = this.state; return ( @@ -377,25 +381,36 @@ export class DataToolbarBase extends React.Component { showToolbarItem={currentCategory === categoryOption.key} > - this.onCategoryInput(evt, categoryOption.key)} - /> - + {isResourceTypeValid(resourcePathsType, categoryOption.key) ? ( + this.onCategoryInputSelect(value, categoryOption.key)} + resourcePathsType={resourcePathsType} + resourceType={categoryOption.key} + /> + ) : ( + <> + this.onCategoryInput(evt, categoryOption.key)} + /> + + + )} ); @@ -414,7 +429,7 @@ export class DataToolbarBase extends React.Component { private onCategoryInput = (event, key) => { const { categoryInput, currentCategory } = this.state; - if ((event.key && event.key !== 'Enter') || categoryInput.trim() === '') { + if ((event && event.key && event.key !== 'Enter') || categoryInput.trim() === '') { return; } this.setState( @@ -439,6 +454,31 @@ export class DataToolbarBase extends React.Component { ); }; + private onCategoryInputSelect = (value, key) => { + const { currentCategory } = this.state; + + this.setState( + (prevState: any) => { + const prevFilters = prevState.filters[key]; + return { + filters: { + ...prevState.filters, + [currentCategory]: + prevFilters && prevFilters.includes(value) + ? prevFilters + : prevFilters + ? [...prevFilters, value] + : [value], + }, + categoryInput: '', + }; + }, + () => { + this.props.onFilterAdded(currentCategory, value); + } + ); + }; + // Org unit select public getOrgUnitSelect = () => { @@ -590,7 +630,7 @@ export class DataToolbarBase extends React.Component { + {this.getSelectOptions()} + + ); + } +} + +const mapStateToProps = createMapStateToProps( + (state, { resourcePathsType, resourceType, search }) => { + const query: Query = { + search, + }; + const queryString = getQuery(query); + + const resource = resourceSelectors.selectResource(state, resourcePathsType, resourceType, queryString); + const resourceFetchStatus = resourceSelectors.selectResourceFetchStatus( + state, + resourcePathsType, + resourceType, + queryString + ); + + return { + resource, + resourceFetchStatus, + }; + } +); + +const mapDispatchToProps: ResourceSelectDispatchProps = { + fetchResource: resourceActions.fetchResource, +}; + +const ResourceSelect = withTranslation()(connect(mapStateToProps, mapDispatchToProps)(ResourceSelectBase)); + +export { ResourceSelect }; From 31840fbafb99bda99d209a920d8f4499a5e17c4c Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Mon, 14 Jun 2021 22:34:36 -0400 Subject: [PATCH 059/141] Added resource type component to AWS toolbar https://issues.redhat.com/browse/COST-1494 --- src/pages/views/details/awsDetails/detailsToolbar.tsx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/pages/views/details/awsDetails/detailsToolbar.tsx b/src/pages/views/details/awsDetails/detailsToolbar.tsx index 59263b37e..0cee8d67f 100644 --- a/src/pages/views/details/awsDetails/detailsToolbar.tsx +++ b/src/pages/views/details/awsDetails/detailsToolbar.tsx @@ -2,6 +2,7 @@ import { ToolbarChipGroup } from '@patternfly/react-core'; import { Org, OrgPathsType, OrgType } from 'api/orgs/org'; import { AwsQuery, getQuery } from 'api/queries/awsQuery'; import { orgUnitIdKey, tagKey } from 'api/queries/query'; +import { ResourcePathsType } from 'api/resources/resource'; import { Tag, TagPathsType, TagType } from 'api/tags/tag'; import { DataToolbar } from 'pages/views/components/dataToolbar/dataToolbar'; import React from 'react'; @@ -143,6 +144,7 @@ export class DetailsToolbarBase extends React.Component { showBulkSelect showExport showFilter + resourcePathsType={ResourcePathsType.aws} tagReport={tagReport} /> ); From 27f11906b44daa005f2f58efaefc76604ba01593 Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Mon, 14 Jun 2021 22:35:00 -0400 Subject: [PATCH 060/141] Added resource type component to cost explorer https://issues.redhat.com/browse/COST-1494 --- src/pages/views/explorer/explorerFilter.tsx | 14 +++++++++++++- src/pages/views/explorer/explorerHeader.tsx | 3 +++ src/pages/views/explorer/explorerUtils.ts | 14 ++++++++++++++ 3 files changed, 30 insertions(+), 1 deletion(-) diff --git a/src/pages/views/explorer/explorerFilter.tsx b/src/pages/views/explorer/explorerFilter.tsx index 251bd7e3a..fb741478f 100644 --- a/src/pages/views/explorer/explorerFilter.tsx +++ b/src/pages/views/explorer/explorerFilter.tsx @@ -1,6 +1,7 @@ import { ToolbarChipGroup } from '@patternfly/react-core'; import { Org, OrgPathsType, OrgType } from 'api/orgs/org'; import { getQuery, orgUnitIdKey, parseQuery, Query, tagKey } from 'api/queries/query'; +import { ResourcePathsType } from 'api/resources/resource'; import { Tag, TagPathsType, TagType } from 'api/tags/tag'; import { DataToolbar } from 'pages/views/components/dataToolbar/dataToolbar'; import React from 'react'; @@ -35,6 +36,7 @@ interface ExplorerFilterOwnProps { pagination?: React.ReactNode; perspective: PerspectiveType; query?: Query; + resourcePathsType?: ResourcePathsType; tagQueryString?: string; } @@ -174,7 +176,16 @@ export class ExplorerFilterBase extends React.Component { }; public render() { - const { groupBy, isDisabled, onFilterAdded, onFilterRemoved, orgReport, query, tagReport } = this.props; + const { + groupBy, + isDisabled, + onFilterAdded, + onFilterRemoved, + orgReport, + query, + resourcePathsType, + tagReport, + } = this.props; const { categoryOptions } = this.state; return ( @@ -187,6 +198,7 @@ export class ExplorerFilterBase extends React.Component { onFilterRemoved={onFilterRemoved} orgReport={orgReport} query={query} + resourcePathsType={resourcePathsType} style={styles.toolbarContainer} showFilter tagReport={tagReport} diff --git a/src/pages/views/explorer/explorerHeader.tsx b/src/pages/views/explorer/explorerHeader.tsx index 05f53d2c9..1eff0b76f 100644 --- a/src/pages/views/explorer/explorerHeader.tsx +++ b/src/pages/views/explorer/explorerHeader.tsx @@ -32,6 +32,7 @@ import { getGroupByDefault, getGroupByOptions, getOrgReportPathsType, + getResourcePathsType, getRouteForQuery, getTagReportPathsType, infrastructureAwsCloudOptions, @@ -234,6 +235,7 @@ class ExplorerHeaderBase extends React.Component { const groupByOptions = getGroupByOptions(perspective); const orgReportPathsType = getOrgReportPathsType(perspective); + const resourcePathsType = getResourcePathsType(perspective); const tagReportPathsType = getTagReportPathsType(perspective); // Fetch tags with largest date range available @@ -271,6 +273,7 @@ class ExplorerHeaderBase extends React.Component { onFilterRemoved={onFilterRemoved} perspective={perspective} query={query} + resourcePathsType={resourcePathsType} />
diff --git a/src/pages/views/explorer/explorerUtils.ts b/src/pages/views/explorer/explorerUtils.ts index eb9314725..05b2f44cb 100644 --- a/src/pages/views/explorer/explorerUtils.ts +++ b/src/pages/views/explorer/explorerUtils.ts @@ -2,6 +2,7 @@ import { OrgPathsType } from 'api/orgs/org'; import { Providers } from 'api/providers'; import { getQueryRoute, Query } from 'api/queries/query'; import { ReportPathsType, ReportType } from 'api/reports/report'; +import { ResourcePathsType } from 'api/resources/resource'; import { TagPathsType } from 'api/tags/tag'; import { UserAccess } from 'api/userAccess'; import { ComputedReportItemType } from 'components/charts/common/chartDatumUtils'; @@ -379,6 +380,19 @@ export const getReportPathsType = (perspective: string) => { return result; }; +export const getResourcePathsType = (perspective: string) => { + let result; + switch (perspective) { + case PerspectiveType.aws: + return ResourcePathsType.aws; + break; + default: + result = undefined; + break; + } + return result; +}; + export const getTagReportPathsType = (perspective: string) => { let result; switch (perspective) { From 35597c03012f27d8dbf96b277d48ffed3b963a78 Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Mon, 14 Jun 2021 22:56:32 -0400 Subject: [PATCH 061/141] Renamed resource typeahead https://issues.redhat.com/browse/COST-1494 --- src/api/resources/resourceUtils.ts | 2 +- .../views/components/dataToolbar/dataToolbar.tsx | 4 ++-- .../resourceSelect.tsx | 2 +- .../resourceTypeahead.tsx} | 14 +++++++------- 4 files changed, 11 insertions(+), 11 deletions(-) rename src/pages/views/components/{resource => resourceTypeahead}/resourceSelect.tsx (98%) rename src/pages/views/components/{resource/resource.tsx => resourceTypeahead/resourceTypeahead.tsx} (78%) diff --git a/src/api/resources/resourceUtils.ts b/src/api/resources/resourceUtils.ts index 45d9bae17..4c0ae4ea7 100644 --- a/src/api/resources/resourceUtils.ts +++ b/src/api/resources/resourceUtils.ts @@ -14,7 +14,7 @@ export function isResourceTypeValid(resourcePathsType: ResourcePathsType, resour } } return result; -}; +} export function runResource(resourcePathsType: ResourcePathsType, resourceType: ResourceType, query: string) { let forecast; diff --git a/src/pages/views/components/dataToolbar/dataToolbar.tsx b/src/pages/views/components/dataToolbar/dataToolbar.tsx index 2b02bbf51..39cd91cc8 100644 --- a/src/pages/views/components/dataToolbar/dataToolbar.tsx +++ b/src/pages/views/components/dataToolbar/dataToolbar.tsx @@ -32,7 +32,7 @@ import { isResourceTypeValid } from 'api/resources/resourceUtils'; import { Tag } from 'api/tags/tag'; import { cloneDeep } from 'lodash'; import { uniq, uniqBy } from 'lodash'; -import { Resource } from 'pages/views/components/resource/resource'; +import { ResourceTypeahead } from 'pages/views/components/resourceTypeahead/resourceTypeahead'; import React from 'react'; import { WithTranslation, withTranslation } from 'react-i18next'; import { ComputedReportItem } from 'utils/computedReport/getComputedReportItems'; @@ -382,7 +382,7 @@ export class DataToolbarBase extends React.Component { > {isResourceTypeValid(resourcePathsType, categoryOption.key) ? ( - this.onCategoryInputSelect(value, categoryOption.key)} resourcePathsType={resourcePathsType} diff --git a/src/pages/views/components/resource/resourceSelect.tsx b/src/pages/views/components/resourceTypeahead/resourceSelect.tsx similarity index 98% rename from src/pages/views/components/resource/resourceSelect.tsx rename to src/pages/views/components/resourceTypeahead/resourceSelect.tsx index 3ed33f775..8574d9a79 100644 --- a/src/pages/views/components/resource/resourceSelect.tsx +++ b/src/pages/views/components/resourceTypeahead/resourceSelect.tsx @@ -49,7 +49,7 @@ class ResourceSelectBase extends React.Component { this.handleOnTypeaheadInputChanged = this.handleOnTypeaheadInputChanged.bind(this); } - public componentDidUpdate(prevProps: ResourceSelectProps, prevState: ResourceSelectState) { + public componentDidUpdate(prevProps: ResourceSelectProps) { const { fetchResource, resourceFetchStatus, resourcePathsType, resourceType, search } = this.props; if (search && prevProps.search !== search && resourceFetchStatus !== FetchStatus.inProgress) { diff --git a/src/pages/views/components/resource/resource.tsx b/src/pages/views/components/resourceTypeahead/resourceTypeahead.tsx similarity index 78% rename from src/pages/views/components/resource/resource.tsx rename to src/pages/views/components/resourceTypeahead/resourceTypeahead.tsx index 422511d81..5f3efdf59 100644 --- a/src/pages/views/components/resource/resource.tsx +++ b/src/pages/views/components/resourceTypeahead/resourceTypeahead.tsx @@ -4,28 +4,28 @@ import { noop } from 'utils/noop'; import { ResourceSelect } from './resourceSelect'; -interface ResourceOwnProps { +interface ResourceTypeaheadOwnProps { isDisabled?: boolean; onSelect?: (value: string) => void; resourcePathsType: ResourcePathsType; resourceType: ResourceType; } -interface ResourceState { +interface ResourceTypeaheadState { currentSearch?: string; } -type ResourceProps = ResourceOwnProps; +type ResourceTypeaheadProps = ResourceTypeaheadOwnProps; -export class Resource extends React.Component { +export class ResourceTypeahead extends React.Component { private searchTimeout: any = noop; - protected defaultState: ResourceState = { + protected defaultState: ResourceTypeaheadState = { // TBD ... }; - public state: ResourceState = { ...this.defaultState }; + public state: ResourceTypeaheadState = { ...this.defaultState }; - constructor(props: ResourceProps) { + constructor(props: ResourceTypeaheadProps) { super(props); this.handldeOnSearch = this.handldeOnSearch.bind(this); From 8b9e7a02e729e40f6b78fc66eb345cef7dae18f2 Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Mon, 14 Jun 2021 23:14:52 -0400 Subject: [PATCH 062/141] Omit resource-type support for region and services https://issues.redhat.com/browse/COST-1494 --- src/api/resources/resourceUtils.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/api/resources/resourceUtils.ts b/src/api/resources/resourceUtils.ts index 4c0ae4ea7..c360ed9dc 100644 --- a/src/api/resources/resourceUtils.ts +++ b/src/api/resources/resourceUtils.ts @@ -7,8 +7,8 @@ export function isResourceTypeValid(resourcePathsType: ResourcePathsType, resour if (resourcePathsType === ResourcePathsType.aws) { switch (resourceType) { case ResourceType.account: - case ResourceType.region: - case ResourceType.service: + // case ResourceType.region: // Todo: Not currently supported by the resource-types API + // case ResourceType.service: result = true; break; } From 7d78d96efdadc1bc7da215f4232c51de0b9de388 Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Mon, 14 Jun 2021 23:15:46 -0400 Subject: [PATCH 063/141] Added account_alias to support resource-type/aws-accounts API https://issues.redhat.com/browse/COST-1494 --- src/api/resources/resource.ts | 1 + .../views/components/resourceTypeahead/resourceSelect.tsx | 5 +++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/api/resources/resource.ts b/src/api/resources/resource.ts index b7acc9179..1c47719ec 100644 --- a/src/api/resources/resource.ts +++ b/src/api/resources/resource.ts @@ -1,4 +1,5 @@ export interface ResourceData { + account_alias: string; value?: string; } diff --git a/src/pages/views/components/resourceTypeahead/resourceSelect.tsx b/src/pages/views/components/resourceTypeahead/resourceSelect.tsx index 8574d9a79..5aa8bbaf4 100644 --- a/src/pages/views/components/resourceTypeahead/resourceSelect.tsx +++ b/src/pages/views/components/resourceTypeahead/resourceSelect.tsx @@ -67,9 +67,10 @@ class ResourceSelectBase extends React.Component { if (resource && resource.data && resource.data.length > 0 && resourceFetchStatus !== FetchStatus.inProgress) { options = resource.data.map(item => { + const value = item.account_alias || item.value; return { - key: item.value, - name: item.value, + key: value, + name: value, }; }); } From a1c42b867bccdcf5c4ebd3f7e066e20daf2c0139 Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Mon, 14 Jun 2021 23:23:53 -0400 Subject: [PATCH 064/141] Updated snapshots --- .../__snapshots__/resource.test.ts.snap | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 src/store/resources/__snapshots__/resource.test.ts.snap diff --git a/src/store/resources/__snapshots__/resource.test.ts.snap b/src/store/resources/__snapshots__/resource.test.ts.snap new file mode 100644 index 000000000..59cacf503 --- /dev/null +++ b/src/store/resources/__snapshots__/resource.test.ts.snap @@ -0,0 +1,20 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`default state 1`] = ` +Object { + "byId": Map {}, + "errors": Map {}, + "fetchStatus": Map {}, +} +`; + +exports[`fetch resource success 1`] = ` +Object { + "data": Array [], + "timeRequested": 12345, + "total": Object { + "units": "USD", + "value": 100, + }, +} +`; From c0033dee34ec66de57cf9df79defd457f9f249be Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Tue, 15 Jun 2021 11:54:05 -0400 Subject: [PATCH 065/141] Cleaned up onFilter prop of select typeahead https://issues.redhat.com/browse/COST-1494 --- .../components/resourceTypeahead/resourceSelect.tsx | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/pages/views/components/resourceTypeahead/resourceSelect.tsx b/src/pages/views/components/resourceTypeahead/resourceSelect.tsx index 5aa8bbaf4..7388fd6e0 100644 --- a/src/pages/views/components/resourceTypeahead/resourceSelect.tsx +++ b/src/pages/views/components/resourceTypeahead/resourceSelect.tsx @@ -96,10 +96,6 @@ class ResourceSelectBase extends React.Component { }); }; - private handldeOnFilter = () => { - return this.getSelectOptions(); - }; - private handldeOnSelect = (event, value) => { const { onSelect } = this.props; @@ -126,12 +122,14 @@ class ResourceSelectBase extends React.Component { const { isDisabled, t, resourceType } = this.props; const { isSelectExpanded } = this.state; + const selectOptions = this.getSelectOptions(); + return ( ); } From 1c0de23829f445dd8d239fc4a9e60ccb268bd43c Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Tue, 15 Jun 2021 20:44:44 -0400 Subject: [PATCH 066/141] Enable AWS regions and services typeahead https://issues.redhat.com/browse/COST-1565 --- src/api/resources/awsResource.ts | 4 ++-- src/api/resources/resourceUtils.ts | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/api/resources/awsResource.ts b/src/api/resources/awsResource.ts index 2f8d1eead..265a37e71 100644 --- a/src/api/resources/awsResource.ts +++ b/src/api/resources/awsResource.ts @@ -4,8 +4,8 @@ import { Resource, ResourceType } from './resource'; export const ForecastTypePaths: Partial> = { [ResourceType.account]: 'resource-types/aws-accounts/', - [ResourceType.region]: 'resource-types/aws-regions/', // TBD: not available - [ResourceType.service]: 'resource-types/aws-services/', // TBD: not available + [ResourceType.region]: 'resource-types/aws-regions/', + [ResourceType.service]: 'resource-types/aws-services/', }; export function runResource(resourceType: ResourceType, query: string) { diff --git a/src/api/resources/resourceUtils.ts b/src/api/resources/resourceUtils.ts index c360ed9dc..4c0ae4ea7 100644 --- a/src/api/resources/resourceUtils.ts +++ b/src/api/resources/resourceUtils.ts @@ -7,8 +7,8 @@ export function isResourceTypeValid(resourcePathsType: ResourcePathsType, resour if (resourcePathsType === ResourcePathsType.aws) { switch (resourceType) { case ResourceType.account: - // case ResourceType.region: // Todo: Not currently supported by the resource-types API - // case ResourceType.service: + case ResourceType.region: + case ResourceType.service: result = true; break; } From c1c3fd178a826219d5b9d59c388aa4e8b317401e Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Tue, 15 Jun 2021 21:34:03 -0400 Subject: [PATCH 067/141] Breakdown link's group_by param is missing tag key https://issues.redhat.com/browse/COST-1510 --- src/pages/views/details/awsDetails/detailsTable.tsx | 3 ++- src/pages/views/details/azureDetails/detailsTable.tsx | 2 +- src/pages/views/details/gcpDetails/detailsTable.tsx | 2 +- src/pages/views/details/ibmDetails/detailsTable.tsx | 2 +- src/pages/views/details/ocpDetails/detailsTable.tsx | 2 +- 5 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/pages/views/details/awsDetails/detailsTable.tsx b/src/pages/views/details/awsDetails/detailsTable.tsx index c5ad78121..7e84dd65e 100644 --- a/src/pages/views/details/awsDetails/detailsTable.tsx +++ b/src/pages/views/details/awsDetails/detailsTable.tsx @@ -20,6 +20,7 @@ import { ComputedReportItem, getUnsortedComputedReportItems } from 'utils/comput import { getForDateRangeString, getNoDataForDateRangeString } from 'utils/dateRange'; import { formatCurrency } from 'utils/formatValue'; +import { tagPrefix } from '../../../../api/queries/query'; import { styles } from './detailsTable.styles'; interface DetailsTableOwnProps { @@ -143,7 +144,7 @@ class DetailsTableBase extends React.Component { to={getOrgBreakdownPath({ basePath: paths.awsDetailsBreakdown, description: item.id, - groupBy: groupById, + groupBy: groupByTagKey ? `${tagPrefix}${groupByTagKey}` : groupById, groupByOrg, id: item.id, orgUnitId: getGroupByOrgValue(query), diff --git a/src/pages/views/details/azureDetails/detailsTable.tsx b/src/pages/views/details/azureDetails/detailsTable.tsx index f0e08a476..4c4ad359e 100644 --- a/src/pages/views/details/azureDetails/detailsTable.tsx +++ b/src/pages/views/details/azureDetails/detailsTable.tsx @@ -142,7 +142,7 @@ class DetailsTableBase extends React.Component { basePath: paths.azureDetailsBreakdown, label: label.toString(), description: item.id, - groupBy: groupById, + groupBy: groupByTagKey ? `${tagPrefix}${groupByTagKey}` : groupById, query, })} > diff --git a/src/pages/views/details/gcpDetails/detailsTable.tsx b/src/pages/views/details/gcpDetails/detailsTable.tsx index 42048040b..831febcba 100644 --- a/src/pages/views/details/gcpDetails/detailsTable.tsx +++ b/src/pages/views/details/gcpDetails/detailsTable.tsx @@ -142,7 +142,7 @@ class DetailsTableBase extends React.Component { basePath: paths.gcpDetailsBreakdown, label: label.toString(), description: item.id, - groupBy: groupById, + groupBy: groupByTagKey ? `${tagPrefix}${groupByTagKey}` : groupById, query, })} > diff --git a/src/pages/views/details/ibmDetails/detailsTable.tsx b/src/pages/views/details/ibmDetails/detailsTable.tsx index 89766a86b..936ce09ac 100644 --- a/src/pages/views/details/ibmDetails/detailsTable.tsx +++ b/src/pages/views/details/ibmDetails/detailsTable.tsx @@ -142,7 +142,7 @@ class DetailsTableBase extends React.Component { basePath: paths.ibmDetailsBreakdown, label: label.toString(), description: item.id, - groupBy: groupById, + groupBy: groupByTagKey ? `${tagPrefix}${groupByTagKey}` : groupById, query, })} > diff --git a/src/pages/views/details/ocpDetails/detailsTable.tsx b/src/pages/views/details/ocpDetails/detailsTable.tsx index d501913af..81895b90f 100644 --- a/src/pages/views/details/ocpDetails/detailsTable.tsx +++ b/src/pages/views/details/ocpDetails/detailsTable.tsx @@ -180,7 +180,7 @@ class DetailsTableBase extends React.Component { basePath: paths.ocpDetailsBreakdown, label: label.toString(), description: item.id, - groupBy: groupById, + groupBy: groupByTagKey ? `${tagPrefix}${groupByTagKey}` : groupById, query, })} > From 36986842255a8d863d32822a9e63131222e0df6c Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Tue, 15 Jun 2021 21:39:38 -0400 Subject: [PATCH 068/141] Replaced import's relative path with absolute path --- src/pages/views/details/awsDetails/detailsTable.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/views/details/awsDetails/detailsTable.tsx b/src/pages/views/details/awsDetails/detailsTable.tsx index 7e84dd65e..8aa5dd930 100644 --- a/src/pages/views/details/awsDetails/detailsTable.tsx +++ b/src/pages/views/details/awsDetails/detailsTable.tsx @@ -4,6 +4,7 @@ import { Bullseye, EmptyState, EmptyStateBody, EmptyStateIcon, Spinner } from '@ import { CalculatorIcon } from '@patternfly/react-icons/dist/js/icons/calculator-icon'; import { sortable, SortByDirection, Table, TableBody, TableHeader } from '@patternfly/react-table'; import { AwsQuery, getQuery } from 'api/queries/awsQuery'; +import { tagPrefix } from 'api/queries/query'; import { AwsReport } from 'api/reports/awsReports'; import { ReportPathsType } from 'api/reports/report'; import { EmptyFilterState } from 'components/state/emptyFilterState/emptyFilterState'; @@ -20,7 +21,6 @@ import { ComputedReportItem, getUnsortedComputedReportItems } from 'utils/comput import { getForDateRangeString, getNoDataForDateRangeString } from 'utils/dateRange'; import { formatCurrency } from 'utils/formatValue'; -import { tagPrefix } from '../../../../api/queries/query'; import { styles } from './detailsTable.styles'; interface DetailsTableOwnProps { From 73c9106e0a88bedee1dd8f09cc3ac32bad334719 Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Tue, 15 Jun 2021 23:18:50 -0400 Subject: [PATCH 069/141] Refactored cost models' empty state to test user filters only https://issues.redhat.com/browse/COST-1518 --- src/pages/costModels/costModelsDetails/utils/table.tsx | 2 +- src/store/costModels/selectors.ts | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/pages/costModels/costModelsDetails/utils/table.tsx b/src/pages/costModels/costModelsDetails/utils/table.tsx index cc5aa1bfe..f3257b952 100644 --- a/src/pages/costModels/costModelsDetails/utils/table.tsx +++ b/src/pages/costModels/costModelsDetails/utils/table.tsx @@ -32,7 +32,7 @@ export function getRowsByStateName(stateName: string, data: any) { heightAuto: true, cells: [ { - props: { colSpan: 8 }, + props: { colSpan: 5 }, title: {component} , }, ], diff --git a/src/store/costModels/selectors.ts b/src/store/costModels/selectors.ts index e0602f9c1..728317a7b 100644 --- a/src/store/costModels/selectors.ts +++ b/src/store/costModels/selectors.ts @@ -63,12 +63,12 @@ export const stateName = (state: RootState) => { } const hasNoFilters = Object.keys(costQuery).every(key => { switch (key) { - case 'limit': - return costQuery[key] === '10'; - case 'offset': - return costQuery[key] === '0'; - default: + case 'description': + case 'name': + case 'source_type': return costQuery[key] === null; + default: + return true; } }); if (hasNoFilters) { From fd7dcdb96493be0d99bf9456aa858116b61067bd Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Wed, 16 Jun 2021 09:16:18 -0400 Subject: [PATCH 070/141] Adjust chart legend responsiveness for OCP supplementary view --- src/components/charts/trendChart/trendChart.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/charts/trendChart/trendChart.tsx b/src/components/charts/trendChart/trendChart.tsx index bd8692e75..b64f3198e 100644 --- a/src/components/charts/trendChart/trendChart.tsx +++ b/src/components/charts/trendChart/trendChart.tsx @@ -214,7 +214,7 @@ class TrendChart extends React.Component { let adjustedContainerHeight = containerHeight; if (adjustContainerHeight) { if (showForecast) { - const maxWidth = showSupplementaryLabel || showInfrastructureLabel ? 850 : 700; + const maxWidth = showSupplementaryLabel || showInfrastructureLabel ? 900 : 700; if (width < maxWidth) { adjustedContainerHeight += 25; } From 8cef2c461952861538a59fdbf82d3eb5268e49e2 Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Thu, 17 Jun 2021 12:53:34 -0400 Subject: [PATCH 071/141] Update Travis link for https://travis-ci.com/project-koku/UI --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 14d1f8b7f..f75e84c24 100644 --- a/README.md +++ b/README.md @@ -120,4 +120,4 @@ yarn update:manifest [license-badge]: https://img.shields.io/github/license/project-koku/koku-ui.svg?longCache=true&style=for-the-badge [license]: https://github.com/project-koku/koku-ui/blob/master/LICENSE [build-badge]: https://img.shields.io/travis/project-koku/koku-ui.svg?style=for-the-badge -[build]: https://travis-ci.org/project-koku/UI +[build]: https://travis-ci.com/project-koku/UI From b9a6a41757c43369facc46d5a07cdfe81fc0fda7 Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Mon, 21 Jun 2021 17:52:28 -0400 Subject: [PATCH 072/141] Update permissions to match exact path https://issues.redhat.com/browse/COST-1578 --- src/components/async/permissionsComponent/permissions.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/async/permissionsComponent/permissions.tsx b/src/components/async/permissionsComponent/permissions.tsx index 4d0a65510..21e901ebc 100644 --- a/src/components/async/permissionsComponent/permissions.tsx +++ b/src/components/async/permissionsComponent/permissions.tsx @@ -73,9 +73,9 @@ class PermissionsBase extends React.Component { // cost models may include :uuid const _pathname = location.pathname.includes(paths.costModels) ? paths.costModels : location.pathname; - const currRoute = routes.find(({ path }) => path.includes(_pathname)); + const currRoute = routes.find(({ path }) => path === _pathname); - switch (currRoute.path) { + switch (currRoute && currRoute.path) { case paths.explorer: case paths.overview: return aws || azure || costModel || gcp || ibm || ocp; From fa52d3ea732b386c207834a15bb2f17f5bf93677 Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Mon, 21 Jun 2021 22:13:55 -0400 Subject: [PATCH 073/141] PatternFly milestone update https://issues.redhat.com/browse/COST-1582 --- koku-ui-manifest | 16 ++++----- package.json | 16 ++++----- yarn.lock | 92 ++++++++++++++++++++++++------------------------ 3 files changed, 62 insertions(+), 62 deletions(-) diff --git a/koku-ui-manifest b/koku-ui-manifest index 92c185a77..3a0d1aed9 100644 --- a/koku-ui-manifest +++ b/koku-ui-manifest @@ -89,20 +89,20 @@ mgmt_services/cost-mgmt:koku-ui/@nodelib/fs.scandir:2.1.4.yarnlock mgmt_services/cost-mgmt:koku-ui/@nodelib/fs.stat:2.0.4.yarnlock mgmt_services/cost-mgmt:koku-ui/@nodelib/fs.stat:2.0.4.yarnlock mgmt_services/cost-mgmt:koku-ui/@nodelib/fs.walk:1.2.6.yarnlock -mgmt_services/cost-mgmt:koku-ui/@patternfly/patternfly:4.108.2.yarnlock -mgmt_services/cost-mgmt:koku-ui/@patternfly/react-charts:6.15.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/@patternfly/react-core:4.128.2.yarnlock -mgmt_services/cost-mgmt:koku-ui/@patternfly/react-icons:4.10.11.yarnlock -mgmt_services/cost-mgmt:koku-ui/@patternfly/react-styles:4.10.11.yarnlock -mgmt_services/cost-mgmt:koku-ui/@patternfly/react-table:4.27.24.yarnlock -mgmt_services/cost-mgmt:koku-ui/@patternfly/react-tokens:4.11.12.yarnlock +mgmt_services/cost-mgmt:koku-ui/@patternfly/patternfly:4.115.2.yarnlock +mgmt_services/cost-mgmt:koku-ui/@patternfly/react-charts:6.15.3.yarnlock +mgmt_services/cost-mgmt:koku-ui/@patternfly/react-core:4.135.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/@patternfly/react-icons:4.11.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/@patternfly/react-styles:4.11.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/@patternfly/react-table:4.29.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/@patternfly/react-tokens:4.12.0.yarnlock mgmt_services/cost-mgmt:koku-ui/@popperjs/core:2.9.1.yarnlock mgmt_services/cost-mgmt:koku-ui/@redhat-cloud-services/frontend-components-config-utilities:1.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/@redhat-cloud-services/frontend-components-notifications:3.2.2.yarnlock mgmt_services/cost-mgmt:koku-ui/@redhat-cloud-services/frontend-components-utilities:3.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/@redhat-cloud-services/frontend-components-utilities:3.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/@redhat-cloud-services/frontend-components-utilities:3.2.2.yarnlock -mgmt_services/cost-mgmt:koku-ui/@redhat-cloud-services/frontend-components:3.2.3.yarnlock +mgmt_services/cost-mgmt:koku-ui/@redhat-cloud-services/frontend-components:3.2.8.yarnlock mgmt_services/cost-mgmt:koku-ui/@redhat-cloud-services/rbac-client:1.0.98.yarnlock mgmt_services/cost-mgmt:koku-ui/@restart/context:2.1.4.yarnlock mgmt_services/cost-mgmt:koku-ui/@restart/hooks:0.3.26.yarnlock diff --git a/package.json b/package.json index 13af43f17..b520a9c41 100644 --- a/package.json +++ b/package.json @@ -32,14 +32,14 @@ }, "dependencies": { "@fortawesome/free-solid-svg-icons": "5.15.2", - "@patternfly/patternfly": "^4.108.2", - "@patternfly/react-charts": "^6.15.0", - "@patternfly/react-core": "^4.128.2", - "@patternfly/react-icons": "^4.10.11", - "@patternfly/react-styles": "^4.10.11", - "@patternfly/react-table": "^4.27.24", - "@patternfly/react-tokens": "^4.11.12", - "@redhat-cloud-services/frontend-components": "^3.2.3", + "@patternfly/patternfly": "^4.115.2", + "@patternfly/react-charts": "^6.15.3", + "@patternfly/react-core": "^4.135.0", + "@patternfly/react-icons": "^4.11.0", + "@patternfly/react-styles": "^4.11.0", + "@patternfly/react-table": "^4.29.0", + "@patternfly/react-tokens": "^4.12.0", + "@redhat-cloud-services/frontend-components": "^3.2.8", "@redhat-cloud-services/frontend-components-notifications": "^3.2.2", "@redhat-cloud-services/frontend-components-utilities": "^3.2.2", "@redhat-cloud-services/rbac-client": "^1.0.98", diff --git a/yarn.lock b/yarn.lock index 34c353773..5af7f9bac 100644 --- a/yarn.lock +++ b/yarn.lock @@ -570,18 +570,18 @@ "@nodelib/fs.scandir" "2.1.4" fastq "^1.6.0" -"@patternfly/patternfly@^4.108.2": - version "4.108.2" - resolved "https://registry.yarnpkg.com/@patternfly/patternfly/-/patternfly-4.108.2.tgz#b6686b9865fd5d4233a15bdf04cc53bded5a8ccc" - integrity sha512-z0VB+1CXcH+eoClYQABwapX5FURSvm1nPr6asLWwg/Z4Wuxs0RjZpC6Gb+KRm8nGQwSAcMKZY1jLfPqVnznQnw== - -"@patternfly/react-charts@^6.15.0": - version "6.15.0" - resolved "https://registry.yarnpkg.com/@patternfly/react-charts/-/react-charts-6.15.0.tgz#6bb279baafb87d7a5285c0489b67928d4c8546a3" - integrity sha512-yXHY84UBP8fatNdLw73PEzhcl2+VgooaGvwLT4ZKkQHDRYBW+ISvBUfLe5k9qg2Qn6asTjNdycdFq0HatG0Olg== - dependencies: - "@patternfly/react-styles" "^4.10.11" - "@patternfly/react-tokens" "^4.11.12" +"@patternfly/patternfly@^4.115.2": + version "4.115.2" + resolved "https://registry.yarnpkg.com/@patternfly/patternfly/-/patternfly-4.115.2.tgz#200111d52fe07d1380371530304bad9edf45de51" + integrity sha512-7hbJ4pRmj+rlXclD2F/UwceO6fS+9flGsgHc4eUc7NyTN2GXl6PLcqrjE2CtiKEPV90+KwsGQGJXZj8bz9HweA== + +"@patternfly/react-charts@^6.15.3": + version "6.15.3" + resolved "https://registry.yarnpkg.com/@patternfly/react-charts/-/react-charts-6.15.3.tgz#62684e926c81936f17b90b34fb62132891873322" + integrity sha512-FtWt15K86HlMzhDRhA8bMLE8hSJ8R+buklL6eJKBi7LZnVRl7RAX7vTNMzyP93FIw7Wi6YKmE1tXjse3sl0DwA== + dependencies: + "@patternfly/react-styles" "^4.11.0" + "@patternfly/react-tokens" "^4.12.0" hoist-non-react-statics "^3.3.0" lodash "^4.17.19" tslib "1.13.0" @@ -601,45 +601,45 @@ victory-voronoi-container "^35.4.4" victory-zoom-container "^35.4.4" -"@patternfly/react-core@^4.128.2": - version "4.128.2" - resolved "https://registry.yarnpkg.com/@patternfly/react-core/-/react-core-4.128.2.tgz#dd0c218bc75a32ee41c69e3d51bead6b157c4aae" - integrity sha512-EhrxE3+V7AYVhbERrcRVH7oY6TeVRqqzaRx8HXWnyn/hxE2rTzhhaLHyjotxk9mGYmIYtMuMebBHFbX0g+6Ymg== +"@patternfly/react-core@^4.135.0": + version "4.135.0" + resolved "https://registry.yarnpkg.com/@patternfly/react-core/-/react-core-4.135.0.tgz#b64ad4da10a8814926e28fad727bc7690cd60e66" + integrity sha512-DZcONUGOR7Znd6BsUJ4L+KrrnIpyjUvh3JNcYiHW3loytxShCGcx+a04QjOOcZm+MtFhkgs/t51yiC5IP12abA== dependencies: - "@patternfly/react-icons" "^4.10.11" - "@patternfly/react-styles" "^4.10.11" - "@patternfly/react-tokens" "^4.11.12" + "@patternfly/react-icons" "^4.11.0" + "@patternfly/react-styles" "^4.11.0" + "@patternfly/react-tokens" "^4.12.0" focus-trap "6.2.2" react-dropzone "9.0.0" tippy.js "5.1.2" tslib "1.13.0" -"@patternfly/react-icons@^4.10.11": - version "4.10.11" - resolved "https://registry.yarnpkg.com/@patternfly/react-icons/-/react-icons-4.10.11.tgz#9bed483fc37c8b795b3fb98c17ede00eef775857" - integrity sha512-Qyxwvghb9HZB2do3UVw4EzJSvqWaw/AEw6mFzqshZiIm2oPrL4NkvavwDt5WRicz5sbyWTZluB4grOj33PEpww== - -"@patternfly/react-styles@^4.10.11": - version "4.10.11" - resolved "https://registry.yarnpkg.com/@patternfly/react-styles/-/react-styles-4.10.11.tgz#6bda5673a71037c0fb9be7e11a117ed8cfea6ce0" - integrity sha512-M+NhTtAXreJzMAV2Z1P2pbnKpRYnWbB5iZ6mxB0tkxxG+KyZ0/se8M5rUepLOE/n7BMq8IiOjPJ9zu/vpWj0gA== - -"@patternfly/react-table@^4.27.24": - version "4.27.24" - resolved "https://registry.yarnpkg.com/@patternfly/react-table/-/react-table-4.27.24.tgz#c61947800d9c82fae3d46a03a1e9989ec49f5f61" - integrity sha512-LXKWtCeEJ4KR8ZnyeAPHdDQFJC9KQe/2Z7yJxBHy8gWciLAPcrLvnTtAb+d1O2lFXKMpUKFNUIwzVvuAffjDSA== - dependencies: - "@patternfly/react-core" "^4.128.2" - "@patternfly/react-icons" "^4.10.11" - "@patternfly/react-styles" "^4.10.11" - "@patternfly/react-tokens" "^4.11.12" +"@patternfly/react-icons@^4.11.0": + version "4.11.0" + resolved "https://registry.yarnpkg.com/@patternfly/react-icons/-/react-icons-4.11.0.tgz#26790eeff22dc3204aa8cd094470f0a2f915634a" + integrity sha512-WsIX34bO9rhVRmPG0jlV3GoFGfYgPC64TscNV0lxQosiVRnYIA6Z3nBSArtJsxo5Yn6c63glIefC/YTy6D/ZYg== + +"@patternfly/react-styles@^4.11.0": + version "4.11.0" + resolved "https://registry.yarnpkg.com/@patternfly/react-styles/-/react-styles-4.11.0.tgz#0068dcb18e1343242f93fa6024dcc077acd57fb9" + integrity sha512-4eIqTwGI4mjt9DMqX6hnan4eRS+3LUWNaneTEJdmk+flKxtAE/O/OmQHvH4GetDnlSbyfATcA0VFbVtR0aRJAg== + +"@patternfly/react-table@^4.29.0": + version "4.29.0" + resolved "https://registry.yarnpkg.com/@patternfly/react-table/-/react-table-4.29.0.tgz#6394ff100994eac2d323ace340bfd259ec7d14d8" + integrity sha512-VJL/Y9MKO2YfCZRTK7ZIaDT8ow6pGwNFkkNsuZWN1Fkk/s5Z7M0bkceNo+kHDUGV/pnWFl8vsDYp9yXU1qXktg== + dependencies: + "@patternfly/react-core" "^4.135.0" + "@patternfly/react-icons" "^4.11.0" + "@patternfly/react-styles" "^4.11.0" + "@patternfly/react-tokens" "^4.12.0" lodash "^4.17.19" tslib "1.13.0" -"@patternfly/react-tokens@^4.11.12": - version "4.11.12" - resolved "https://registry.yarnpkg.com/@patternfly/react-tokens/-/react-tokens-4.11.12.tgz#0d4d88ec768cbf5c4b46e75dc8673ba97448823c" - integrity sha512-PTEc2CQa/BqcDcUwT0V02l+ZoJa+bheLlh9R5g1+JQ6vlqH31gk0dpHmj6goEcSDLkbvMJgr3kNZdJsP1VdBMg== +"@patternfly/react-tokens@^4.12.0": + version "4.12.0" + resolved "https://registry.yarnpkg.com/@patternfly/react-tokens/-/react-tokens-4.12.0.tgz#2973c7f08a2f35997a0054bbf3c886b3c5c68822" + integrity sha512-Oj+GxqTtx0Yu9IDCTibZLQnpcKp58JneNKEFQkJ29WJydhPG4j6oFFElkK+ub+Ft/f9B1Ky1SsfR9eabo6IykQ== "@popperjs/core@^2.5.3": version "2.9.1" @@ -682,10 +682,10 @@ mkdirp "^1.0.4" react-content-loader ">=3.4.1" -"@redhat-cloud-services/frontend-components@^3.2.3": - version "3.2.3" - resolved "https://registry.yarnpkg.com/@redhat-cloud-services/frontend-components/-/frontend-components-3.2.3.tgz#f656c0e0a5903b53ca495e612b09b8cd407f6f5d" - integrity sha512-DOqfAimqmJoj5ZMOtHRx77uPe5fThLPZOnsYoggnGz+CwJ28Yti+Zidp1bFuMdOwqqluekHM78O4ehwg3qh+DA== +"@redhat-cloud-services/frontend-components@^3.2.8": + version "3.2.8" + resolved "https://registry.yarnpkg.com/@redhat-cloud-services/frontend-components/-/frontend-components-3.2.8.tgz#af4dee38e3c7787daaf53751e5ea0a35e9eb8a82" + integrity sha512-3593SbWe71p0OF/e6cqmiV3dC+zZrJqDzBMvDNvwFG1OoPvZYA/GfxI5fLTgHV589/9IWFZoFvn/3EoWqBBCyg== dependencies: "@redhat-cloud-services/frontend-components-utilities" ">=3.0.0" "@scalprum/core" "^0.0.11" From ba1309e9bff3a53b420f2c2c667dd3f7417ac6b7 Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Tue, 22 Jun 2021 09:15:14 -0400 Subject: [PATCH 074/141] Check cost-models path using startsWith https://issues.redhat.com/browse/COST-1578 --- src/components/async/permissionsComponent/permissions.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/async/permissionsComponent/permissions.tsx b/src/components/async/permissionsComponent/permissions.tsx index 21e901ebc..15fc4f31d 100644 --- a/src/components/async/permissionsComponent/permissions.tsx +++ b/src/components/async/permissionsComponent/permissions.tsx @@ -72,7 +72,7 @@ class PermissionsBase extends React.Component { const ocp = hasOcpAccess(userAccess); // cost models may include :uuid - const _pathname = location.pathname.includes(paths.costModels) ? paths.costModels : location.pathname; + const _pathname = location.pathname.startsWith(paths.costModels) ? paths.costModels : location.pathname; const currRoute = routes.find(({ path }) => path === _pathname); switch (currRoute && currRoute.path) { From 41d2e6975caf5fea8688b8012bd24cac7fd0c4e0 Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Tue, 22 Jun 2021 10:32:26 -0400 Subject: [PATCH 075/141] no-project items shouldn't be exportable https://issues.redhat.com/browse/COST-1580 --- src/pages/views/details/awsDetails/awsDetails.tsx | 9 ++++++++- src/pages/views/details/awsDetails/detailsTable.tsx | 6 ++++-- src/pages/views/details/azureDetails/azureDetails.tsx | 9 ++++++++- src/pages/views/details/azureDetails/detailsTable.tsx | 6 ++++-- src/pages/views/details/gcpDetails/detailsTable.tsx | 6 ++++-- src/pages/views/details/gcpDetails/gcpDetails.tsx | 9 ++++++++- src/pages/views/details/ibmDetails/detailsTable.tsx | 6 ++++-- src/pages/views/details/ibmDetails/ibmDetails.tsx | 9 ++++++++- src/pages/views/details/ocpDetails/detailsTable.tsx | 6 ++++-- src/pages/views/details/ocpDetails/ocpDetails.tsx | 9 ++++++++- src/pages/views/explorer/explorer.tsx | 9 ++++++++- 11 files changed, 68 insertions(+), 16 deletions(-) diff --git a/src/pages/views/details/awsDetails/awsDetails.tsx b/src/pages/views/details/awsDetails/awsDetails.tsx index 929324083..0653cd039 100644 --- a/src/pages/views/details/awsDetails/awsDetails.tsx +++ b/src/pages/views/details/awsDetails/awsDetails.tsx @@ -139,12 +139,19 @@ class AwsDetails extends React.Component { const groupByTagKey = getGroupByTagKey(query); const itemsTotal = report && report.meta ? report.meta.count : 0; + // Omit items labeled 'no-project' + const items = []; + selectedItems.map(item => { + if (!(item.label === `no-${groupById}` || item.label === `no-${groupByTagKey}`)) { + items.push(item); + } + }); return ( 0} groupBy={groupByTagKey ? `${tagPrefix}${groupByTagKey}` : groupById} isOpen={isExportModalOpen} - items={selectedItems} + items={items} onClose={this.handleExportModalClose} query={query} reportPathsType={reportPathsType} diff --git a/src/pages/views/details/awsDetails/detailsTable.tsx b/src/pages/views/details/awsDetails/detailsTable.tsx index 8aa5dd930..75469abf1 100644 --- a/src/pages/views/details/awsDetails/detailsTable.tsx +++ b/src/pages/views/details/awsDetails/detailsTable.tsx @@ -156,7 +156,9 @@ class DetailsTableBase extends React.Component { {label} ); - if (label === `no-${groupById}` || label === `no-${groupByTagKey}`) { + + const selectable = !(label === `no-${groupById}` || label === `no-${groupByTagKey}`); + if (!selectable) { name = label as any; } @@ -176,7 +178,7 @@ class DetailsTableBase extends React.Component { { title:
{cost}
}, { title:
{actions}
}, ], - disableSelection: item.label === `no-${groupById}` || item.label === `no-${groupByTagKey}`, + disableSelection: !selectable, item, selected: isAllSelected || (selectedItems && selectedItems.find(val => val.id === item.id) !== undefined), }); diff --git a/src/pages/views/details/azureDetails/azureDetails.tsx b/src/pages/views/details/azureDetails/azureDetails.tsx index 430ff34a3..1e793a980 100644 --- a/src/pages/views/details/azureDetails/azureDetails.tsx +++ b/src/pages/views/details/azureDetails/azureDetails.tsx @@ -137,12 +137,19 @@ class AzureDetails extends React.Component { const groupByTagKey = getGroupByTagKey(query); const itemsTotal = report && report.meta ? report.meta.count : 0; + // Omit items labeled 'no-project' + const items = []; + selectedItems.map(item => { + if (!(item.label === `no-${groupById}` || item.label === `no-${groupByTagKey}`)) { + items.push(item); + } + }); return ( 0} groupBy={groupByTagKey ? `${tagPrefix}${groupByTagKey}` : groupById} isOpen={isExportModalOpen} - items={selectedItems} + items={items} onClose={this.handleExportModalClose} query={query} reportPathsType={reportPathsType} diff --git a/src/pages/views/details/azureDetails/detailsTable.tsx b/src/pages/views/details/azureDetails/detailsTable.tsx index 4c4ad359e..6da57a073 100644 --- a/src/pages/views/details/azureDetails/detailsTable.tsx +++ b/src/pages/views/details/azureDetails/detailsTable.tsx @@ -149,7 +149,9 @@ class DetailsTableBase extends React.Component { {label} ); - if (label === `no-${groupById}` || label === `no-${groupByTagKey}`) { + + const selectable = !(label === `no-${groupById}` || label === `no-${groupByTagKey}`); + if (!selectable) { name = label as any; } @@ -169,7 +171,7 @@ class DetailsTableBase extends React.Component { { title:
{cost}
}, { title:
{actions}
}, ], - disableSelection: item.label === `no-${groupById}` || item.label === `no-${groupByTagKey}`, + disableSelection: !selectable, isOpen: false, item, selected: isAllSelected || (selectedItems && selectedItems.find(val => val.id === item.id) !== undefined), diff --git a/src/pages/views/details/gcpDetails/detailsTable.tsx b/src/pages/views/details/gcpDetails/detailsTable.tsx index 831febcba..ce9e2de98 100644 --- a/src/pages/views/details/gcpDetails/detailsTable.tsx +++ b/src/pages/views/details/gcpDetails/detailsTable.tsx @@ -149,7 +149,9 @@ class DetailsTableBase extends React.Component { {label} ); - if (label === `no-${groupById}` || label === `no-${groupByTagKey}`) { + + const selectable = !(label === `no-${groupById}` || label === `no-${groupByTagKey}`); + if (!selectable) { name = label as any; } @@ -169,7 +171,7 @@ class DetailsTableBase extends React.Component { { title:
{cost}
}, { title:
{actions}
}, ], - disableSelection: item.label === `no-${groupById}` || item.label === `no-${groupByTagKey}`, + disableSelection: !selectable, isOpen: false, item, selected: isAllSelected || (selectedItems && selectedItems.find(val => val.id === item.id) !== undefined), diff --git a/src/pages/views/details/gcpDetails/gcpDetails.tsx b/src/pages/views/details/gcpDetails/gcpDetails.tsx index 959101533..1150e8e28 100644 --- a/src/pages/views/details/gcpDetails/gcpDetails.tsx +++ b/src/pages/views/details/gcpDetails/gcpDetails.tsx @@ -137,12 +137,19 @@ class GcpDetails extends React.Component { const groupByTagKey = getGroupByTagKey(query); const itemsTotal = report && report.meta ? report.meta.count : 0; + // Omit items labeled 'no-project' + const items = []; + selectedItems.map(item => { + if (!(item.label === `no-${groupById}` || item.label === `no-${groupByTagKey}`)) { + items.push(item); + } + }); return ( 0} groupBy={groupByTagKey ? `${tagPrefix}${groupByTagKey}` : groupById} isOpen={isExportModalOpen} - items={selectedItems} + items={items} onClose={this.handleExportModalClose} query={query} reportPathsType={reportPathsType} diff --git a/src/pages/views/details/ibmDetails/detailsTable.tsx b/src/pages/views/details/ibmDetails/detailsTable.tsx index 936ce09ac..a448413a7 100644 --- a/src/pages/views/details/ibmDetails/detailsTable.tsx +++ b/src/pages/views/details/ibmDetails/detailsTable.tsx @@ -149,7 +149,9 @@ class DetailsTableBase extends React.Component { {label} ); - if (label === `no-${groupById}` || label === `no-${groupByTagKey}`) { + + const selectable = !(label === `no-${groupById}` || label === `no-${groupByTagKey}`); + if (!selectable) { name = label as any; } @@ -169,7 +171,7 @@ class DetailsTableBase extends React.Component { { title:
{cost}
}, { title:
{actions}
}, ], - disableSelection: item.label === `no-${groupById}` || item.label === `no-${groupByTagKey}`, + disableSelection: !selectable, isOpen: false, item, selected: isAllSelected || (selectedItems && selectedItems.find(val => val.id === item.id) !== undefined), diff --git a/src/pages/views/details/ibmDetails/ibmDetails.tsx b/src/pages/views/details/ibmDetails/ibmDetails.tsx index c40df9f76..3591d76d7 100644 --- a/src/pages/views/details/ibmDetails/ibmDetails.tsx +++ b/src/pages/views/details/ibmDetails/ibmDetails.tsx @@ -137,12 +137,19 @@ class IbmDetails extends React.Component { const groupByTagKey = getGroupByTagKey(query); const itemsTotal = report && report.meta ? report.meta.count : 0; + // Omit items labeled 'no-project' + const items = []; + selectedItems.map(item => { + if (!(item.label === `no-${groupById}` || item.label === `no-${groupByTagKey}`)) { + items.push(item); + } + }); return ( 0} groupBy={groupByTagKey ? `${tagPrefix}${groupByTagKey}` : groupById} isOpen={isExportModalOpen} - items={selectedItems} + items={items} onClose={this.handleExportModalClose} query={query} reportPathsType={reportPathsType} diff --git a/src/pages/views/details/ocpDetails/detailsTable.tsx b/src/pages/views/details/ocpDetails/detailsTable.tsx index 81895b90f..e9b33e366 100644 --- a/src/pages/views/details/ocpDetails/detailsTable.tsx +++ b/src/pages/views/details/ocpDetails/detailsTable.tsx @@ -187,7 +187,9 @@ class DetailsTableBase extends React.Component { {label} ); - if (label === `no-${groupById}` || label === `no-${groupByTagKey}`) { + + const selectable = !(label === `no-${groupById}` || label === `no-${groupByTagKey}`); + if (!selectable) { name = label as any; } @@ -209,7 +211,7 @@ class DetailsTableBase extends React.Component { { title:
{cost}
}, { title:
{actions}
}, ], - disableSelection: item.label === `no-${groupById}` || item.label === `no-${groupByTagKey}`, + disableSelection: !selectable, isOpen: false, item, selected: isAllSelected || (selectedItems && selectedItems.find(val => val.id === item.id) !== undefined), diff --git a/src/pages/views/details/ocpDetails/ocpDetails.tsx b/src/pages/views/details/ocpDetails/ocpDetails.tsx index 94dee8a40..5e67885a9 100644 --- a/src/pages/views/details/ocpDetails/ocpDetails.tsx +++ b/src/pages/views/details/ocpDetails/ocpDetails.tsx @@ -174,12 +174,19 @@ class OcpDetails extends React.Component { const groupByTagKey = getGroupByTagKey(query); const itemsTotal = report && report.meta ? report.meta.count : 0; + // Omit items labeled 'no-project' + const items = []; + selectedItems.map(item => { + if (!(item.label === `no-${groupById}` || item.label === `no-${groupByTagKey}`)) { + items.push(item); + } + }); return ( 0} groupBy={groupByTagKey ? `${tagPrefix}${groupByTagKey}` : groupById} isOpen={isExportModalOpen} - items={selectedItems} + items={items} onClose={this.handleExportModalClose} query={query} reportPathsType={reportPathsType} diff --git a/src/pages/views/explorer/explorer.tsx b/src/pages/views/explorer/explorer.tsx index ba3bf8534..43f5210ae 100644 --- a/src/pages/views/explorer/explorer.tsx +++ b/src/pages/views/explorer/explorer.tsx @@ -167,12 +167,19 @@ class Explorer extends React.Component { const groupByTagKey = getGroupByTagKey(query); const itemsTotal = report && report.meta ? report.meta.count : 0; + // Omit items labeled 'no-project' + const items = []; + selectedItems.map(item => { + if (!(item.label === `no-${groupById}` || item.label === `no-${groupByTagKey}`)) { + items.push(item); + } + }); return ( 0} groupBy={groupByTagKey ? `${tagPrefix}${groupByTagKey}` : groupById} isOpen={isExportModalOpen} - items={selectedItems} + items={items} onClose={this.handleExportModalClose} query={query} reportPathsType={getReportPathsType(perspective)} From d44f6b0c0b8549b1ae2d1f033657a0ca40915d08 Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Tue, 22 Jun 2021 10:48:49 -0400 Subject: [PATCH 076/141] Cost models tab border is too short https://issues.redhat.com/browse/COST-1581 --- src/pages/costModels/costModel/header.tsx | 74 +++++++++++------------ 1 file changed, 37 insertions(+), 37 deletions(-) diff --git a/src/pages/costModels/costModel/header.tsx b/src/pages/costModels/costModel/header.tsx index 37fea21c6..bbac2f984 100644 --- a/src/pages/costModels/costModel/header.tsx +++ b/src/pages/costModels/costModel/header.tsx @@ -118,43 +118,6 @@ const Header: React.FunctionComponent = ({ {t('cost_models_details.cost_model.source_type')}: {current.source_type} - {current.source_type === 'OpenShift Container Platform' ? ( - onSelectTab(index)}> - Price list} - tabContentId="refPriceList" - tabContentRef={tabRefs[0]} - /> - Markup} - tabContentId="refMarkup" - tabContentRef={tabRefs[1]} - /> - Sources} - tabContentId="refSources" - tabContentRef={tabRefs[2]} - /> - - ) : ( - onSelectTab(index)}> - Markup} - tabContentId="refMarkup" - tabContentRef={tabRefs[0]} - /> - Sources} - tabContentId="refSources" - tabContentRef={tabRefs[1]} - /> - - )} = ({ /> + {current.source_type === 'OpenShift Container Platform' ? ( + onSelectTab(index)}> + Price list} + tabContentId="refPriceList" + tabContentRef={tabRefs[0]} + /> + Markup} + tabContentId="refMarkup" + tabContentRef={tabRefs[1]} + /> + Sources} + tabContentId="refSources" + tabContentRef={tabRefs[2]} + /> + + ) : ( + onSelectTab(index)}> + Markup} + tabContentId="refMarkup" + tabContentRef={tabRefs[0]} + /> + Sources} + tabContentId="refSources" + tabContentRef={tabRefs[1]} + /> + + )} ); From 59d3895ec849372a7d689a414923f3b9ac47c484 Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Tue, 22 Jun 2021 11:07:35 -0400 Subject: [PATCH 077/141] Cost models filter outputs a11y error message https://issues.redhat.com/browse/COST-1585 --- src/pages/costModels/costModelsDetails/utils/filters.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/src/pages/costModels/costModelsDetails/utils/filters.tsx b/src/pages/costModels/costModelsDetails/utils/filters.tsx index a23df041e..8cfa788c5 100644 --- a/src/pages/costModels/costModelsDetails/utils/filters.tsx +++ b/src/pages/costModels/costModelsDetails/utils/filters.tsx @@ -33,6 +33,7 @@ const FilterInput: React.SFC = ({ placeholder = '', value, onC return ( Date: Thu, 24 Jun 2021 13:44:26 +0200 Subject: [PATCH 078/141] Update config utils. --- koku-ui-manifest | 3 ++- package.json | 4 ++-- webpack.config.js | 1 + yarn.lock | 19 +++++++++++++++---- 4 files changed, 20 insertions(+), 7 deletions(-) diff --git a/koku-ui-manifest b/koku-ui-manifest index 3a0d1aed9..e1e9ebe99 100644 --- a/koku-ui-manifest +++ b/koku-ui-manifest @@ -97,7 +97,7 @@ mgmt_services/cost-mgmt:koku-ui/@patternfly/react-styles:4.11.0.yarnlock mgmt_services/cost-mgmt:koku-ui/@patternfly/react-table:4.29.0.yarnlock mgmt_services/cost-mgmt:koku-ui/@patternfly/react-tokens:4.12.0.yarnlock mgmt_services/cost-mgmt:koku-ui/@popperjs/core:2.9.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/@redhat-cloud-services/frontend-components-config-utilities:1.1.1.yarnlock +mgmt_services/cost-mgmt:koku-ui/@redhat-cloud-services/frontend-components-config-utilities:1.3.1.yarnlock mgmt_services/cost-mgmt:koku-ui/@redhat-cloud-services/frontend-components-notifications:3.2.2.yarnlock mgmt_services/cost-mgmt:koku-ui/@redhat-cloud-services/frontend-components-utilities:3.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/@redhat-cloud-services/frontend-components-utilities:3.1.1.yarnlock @@ -1058,6 +1058,7 @@ mgmt_services/cost-mgmt:koku-ui/node-modules-regexp:1.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/node-notifier:8.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/node-releases:1.1.71.yarnlock mgmt_services/cost-mgmt:koku-ui/nodesi:1.16.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/nodesi:1.17.0.yarnlock mgmt_services/cost-mgmt:koku-ui/normalize-package-data:2.5.0.yarnlock mgmt_services/cost-mgmt:koku-ui/normalize-package-data:2.5.0.yarnlock mgmt_services/cost-mgmt:koku-ui/normalize-path:2.1.1.yarnlock diff --git a/package.json b/package.json index b520a9c41..f9e729f1e 100644 --- a/package.json +++ b/package.json @@ -77,7 +77,7 @@ "xstate": "4.16.2" }, "devDependencies": { - "@redhat-cloud-services/frontend-components-config-utilities": "^1.1.1", + "@redhat-cloud-services/frontend-components-config-utilities": "^1.3.1", "@testing-library/react": "11.2.5", "@types/enzyme": "3.10.8", "@types/jest": "26.0.20", @@ -126,4 +126,4 @@ "insights": { "appname": "cost-management" } -} +} \ No newline at end of file diff --git a/webpack.config.js b/webpack.config.js index 66e3f3764..dbe5c2e81 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -221,6 +221,7 @@ module.exports = (_env, argv) => { }, devServer: useProxy ? proxy({ + useCloud: true, betaEnv: process.env.CLOUDOT_ENV, rootFolder: path.resolve(__dirname), localChrome: false, diff --git a/yarn.lock b/yarn.lock index 5af7f9bac..3db86258d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -646,10 +646,12 @@ resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.9.1.tgz#7f554e7368c9ab679a11f4a042ca17149d70cf12" integrity sha512-DvJbbn3dUgMxDnJLH+RZQPnXak1h4ZVYQ7CWiFWjQwBFkVajT4rfw2PdpHLTSTwxrYfnoEXkuBiwkDm6tPMQeA== -"@redhat-cloud-services/frontend-components-config-utilities@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@redhat-cloud-services/frontend-components-config-utilities/-/frontend-components-config-utilities-1.1.1.tgz#067fed07c260ebd0afc46bab91b2c8cef8216351" - integrity sha512-0nRMr5PD20fDMp6tCN2zYKSEkP/W8iPVqjk77F5i5HyyPDHSm+BJitk1+GVoriDAltqN27Dvj8vp4veUj5EISg== +"@redhat-cloud-services/frontend-components-config-utilities@^1.3.1": + version "1.3.1" + resolved "https://registry.yarnpkg.com/@redhat-cloud-services/frontend-components-config-utilities/-/frontend-components-config-utilities-1.3.1.tgz#4fe920e1511b9df0412a2435b3d03d1b7df09e35" + integrity sha512-eeIBS6tk1Cjfd3T8evSjZui0EWmqb7hbVOZy940rEvEsKBZ9i1l2gOqUYi75CWCW6ni+SNh93xK/l1PgRghM7Q== + dependencies: + nodesi "^1.17.0" "@redhat-cloud-services/frontend-components-notifications@^3.2.2": version "3.2.2" @@ -6408,6 +6410,15 @@ nodesi@^1.16.0: good-guy-http "1.14.0" he "1.2.0" +nodesi@^1.17.0: + version "1.17.0" + resolved "https://registry.yarnpkg.com/nodesi/-/nodesi-1.17.0.tgz#8d193e588564a72c0569d92aa7268f4f86e54ec8" + integrity sha512-xDdTZbmzfiDlizkPWP21hKr22ISyZdD7v+mXWohnacubhGzvyO5WQfuxuO202rIXt+sL4aJccrzQjR6dwLwT4g== + dependencies: + clone "1.0.3" + good-guy-http "1.14.0" + he "1.2.0" + normalize-package-data@^2.3.2, normalize-package-data@^2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" From 0e765acfbc13b9e61c83b94ae2fdb8bb58853e45 Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Thu, 24 Jun 2021 21:47:37 -0400 Subject: [PATCH 079/141] Add stage as an option for start script --- scripts/start-dev-server.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/start-dev-server.js b/scripts/start-dev-server.js index f0b39ddc0..71b10f2f5 100644 --- a/scripts/start-dev-server.js +++ b/scripts/start-dev-server.js @@ -11,7 +11,7 @@ async function setEnv() { type: 'list', name: 'clouddotEnv', message: 'Which platform environment you want to use', - choices: ['ci', 'qa', 'prod'], + choices: ['ci', 'qa', 'stage', 'prod'], }, { name: 'insightsProxy', From 4845e0f83b5ce5cb9970ba8b2d0dd0ec4c577f79 Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Mon, 28 Jun 2021 14:40:28 -0400 Subject: [PATCH 080/141] Renamed event handler functions --- .../components/dataToolbar/dataToolbar.tsx | 54 +++++++++---------- .../resourceTypeahead/resourceTypeahead.tsx | 12 ++--- 2 files changed, 33 insertions(+), 33 deletions(-) diff --git a/src/pages/views/components/dataToolbar/dataToolbar.tsx b/src/pages/views/components/dataToolbar/dataToolbar.tsx index 39cd91cc8..2f34ef118 100644 --- a/src/pages/views/components/dataToolbar/dataToolbar.tsx +++ b/src/pages/views/components/dataToolbar/dataToolbar.tsx @@ -235,22 +235,22 @@ export class DataToolbarBase extends React.Component { const isChecked = allSelected ? true : someChecked; const dropdownItems = [ - this.onBulkSelectClicked('none')}> + this.handleOnBulkSelectClicked('none')}> {t('toolbar.bulk_select.select_none')} , - this.onBulkSelectClicked('page')}> + this.handleOnBulkSelectClicked('page')}> {t('toolbar.bulk_select.select_page', { value: itemsPerPage, })} , - this.onBulkSelectClicked('all')}> + this.handleOnBulkSelectClicked('all')}> {t('toolbar.bulk_select.select_all', { value: itemsTotal })} , ]; return ( { aria-label={anySelected ? t('toolbar.bulk_select.aria_deselect') : t('toolbar.bulk_select.aria_select')} isChecked={isChecked} onClick={() => { - anySelected ? this.onBulkSelectClicked('none') : this.onBulkSelectClicked('all'); + anySelected ? this.handleOnBulkSelectClicked('none') : this.handleOnBulkSelectClicked('all'); }} >, ]} - onToggle={this.onBulkSelectToggle} + onToggle={this.handleOnBulkSelectToggle} > {numSelected !== 0 && {numSelected} selected} @@ -277,7 +277,7 @@ export class DataToolbarBase extends React.Component { ); }; - private onBulkSelectClicked = (action: string) => { + private handleOnBulkSelectClicked = (action: string) => { const { onBulkSelected } = this.props; if (onBulkSelected) { @@ -285,13 +285,13 @@ export class DataToolbarBase extends React.Component { } }; - private onBulkSelect = () => { + private handleOnBulkSelect = () => { this.setState({ isBulkSelectOpen: !this.state.isBulkSelectOpen, }); }; - private onBulkSelectToggle = isOpen => { + private handleOnBulkSelectToggle = isOpen => { this.setState({ isBulkSelectOpen: isOpen, }); @@ -309,10 +309,10 @@ export class DataToolbarBase extends React.Component { return ( + {this.getCurrentCategoryOption().name} } @@ -320,7 +320,7 @@ export class DataToolbarBase extends React.Component { dropdownItems={ categoryOptions && categoryOptions.map(option => ( - this.onCategoryClick(option.key)}> + this.handleOnCategoryClick(option.key)}> {option.name} )) @@ -346,13 +346,13 @@ export class DataToolbarBase extends React.Component { return categoryOptions[0]; }; - private onCategoryClick = value => { + private handleOnCategoryClick = value => { this.setState({ currentCategory: value, }); }; - private onCategorySelect = () => { + private handleOnCategorySelect = () => { this.setState({ categoryInput: '', currentTagKey: undefined, @@ -360,7 +360,7 @@ export class DataToolbarBase extends React.Component { }); }; - private onCategoryToggle = isOpen => { + private handleOnCategoryToggle = isOpen => { this.setState({ isCategoryDropdownOpen: isOpen, }); @@ -396,7 +396,7 @@ export class DataToolbarBase extends React.Component { id={`${categoryOption.key}-input`} type="search" aria-label={t(`filter_by.${categoryOption.key}.input_aria_label`)} - onChange={this.onCategoryInputChange} + onChange={this.handleOnCategoryInputChange} value={categoryInput} placeholder={t(`filter_by.${categoryOption.key}.placeholder`)} onKeyDown={evt => this.onCategoryInput(evt, categoryOption.key)} @@ -422,7 +422,7 @@ export class DataToolbarBase extends React.Component { return [{ name: t('filter_by.values.name'), key: 'name' }]; }; - private onCategoryInputChange = value => { + private handleOnCategoryInputChange = (value: string) => { this.setState({ categoryInput: value }); }; @@ -524,8 +524,8 @@ export class DataToolbarBase extends React.Component { className="selectOverride" variant={SelectVariant.checkbox} aria-label={t('filter_by.org_unit.aria_label')} - onToggle={this.onOrgUnitToggle} - onSelect={this.onOrgUnitSelect} + onToggle={this.handleOnOrgUnitToggle} + onSelect={this.handleOnOrgUnitSelect} selections={selections} isOpen={isOrgUnitSelectExpanded} placeholderText={t('filter_by.org_unit.placeholder')} @@ -577,7 +577,7 @@ export class DataToolbarBase extends React.Component { return options; } - private onOrgUnitSelect = (event, selection) => { + private handleOnOrgUnitSelect = (event, selection) => { const checked = event.target.checked; this.setState( @@ -605,7 +605,7 @@ export class DataToolbarBase extends React.Component { ); }; - private onOrgUnitToggle = isOpen => { + private handleOnOrgUnitToggle = isOpen => { this.setState({ isOrgUnitSelectExpanded: isOpen, }); @@ -631,9 +631,9 @@ export class DataToolbarBase extends React.Component { isDisabled={isDisabled} variant={SelectVariant.typeahead} typeAheadAriaLabel={t('filter_by.tag_key.aria_label')} - onClear={this.onTagKeyClear} - onToggle={this.onTagKeyToggle} - onSelect={this.onTagKeySelect} + onClear={this.handleOnTagKeyClear} + onToggle={this.handleOnTagKeyToggle} + onSelect={this.handleOnTagKeySelect} isOpen={isTagKeySelectExpanded} placeholderText={t('filter_by.tag_key.placeholder')} selections={currentTagKey} @@ -686,21 +686,21 @@ export class DataToolbarBase extends React.Component { return options; } - private onTagKeyClear = () => { + private handleOnTagKeyClear = () => { this.setState({ currentTagKey: undefined, isTagKeySelectExpanded: false, }); }; - private onTagKeySelect = (event, selection) => { + private handleOnTagKeySelect = (event, selection) => { this.setState({ currentTagKey: selection, isTagKeySelectExpanded: !this.state.isTagKeySelectExpanded, }); }; - private onTagKeyToggle = isOpen => { + private handleOnTagKeyToggle = isOpen => { this.setState({ isTagKeySelectExpanded: isOpen, }); diff --git a/src/pages/views/components/resourceTypeahead/resourceTypeahead.tsx b/src/pages/views/components/resourceTypeahead/resourceTypeahead.tsx index 5f3efdf59..d6ca6af03 100644 --- a/src/pages/views/components/resourceTypeahead/resourceTypeahead.tsx +++ b/src/pages/views/components/resourceTypeahead/resourceTypeahead.tsx @@ -28,11 +28,11 @@ export class ResourceTypeahead extends React.Component { constructor(props: ResourceTypeaheadProps) { super(props); - this.handldeOnSearch = this.handldeOnSearch.bind(this); - this.handldeOnSelect = this.handldeOnSelect.bind(this); + this.handleOnSearch = this.handleOnSearch.bind(this); + this.handleOnSelect = this.handleOnSelect.bind(this); } - private handldeOnSearch = (value: string) => { + private handleOnSearch = (value: string) => { clearTimeout(this.searchTimeout); this.searchTimeout = setTimeout(() => { @@ -42,7 +42,7 @@ export class ResourceTypeahead extends React.Component { }, 750); }; - private handldeOnSelect = (value: string) => { + private handleOnSelect = (value: string) => { const { onSelect } = this.props; if (onSelect) { @@ -60,8 +60,8 @@ export class ResourceTypeahead extends React.Component { return ( Date: Mon, 28 Jun 2021 14:41:49 -0400 Subject: [PATCH 081/141] Added onCreateOption functionality to typeahead feature https://issues.redhat.com/browse/COST-1597 --- .../resourceTypeahead/resourceSelect.tsx | 60 +++++++++++++++---- 1 file changed, 49 insertions(+), 11 deletions(-) diff --git a/src/pages/views/components/resourceTypeahead/resourceSelect.tsx b/src/pages/views/components/resourceTypeahead/resourceSelect.tsx index 7388fd6e0..5387db2be 100644 --- a/src/pages/views/components/resourceTypeahead/resourceSelect.tsx +++ b/src/pages/views/components/resourceTypeahead/resourceSelect.tsx @@ -22,6 +22,7 @@ interface ResourceSelectStateProps { } interface ResourceSelectState { + createdOptions: any[]; isSelectExpanded?: boolean; } @@ -36,6 +37,7 @@ type ResourceSelectProps = ResourceSelectOwnProps & class ResourceSelectBase extends React.Component { protected defaultState: ResourceSelectState = { + createdOptions: [], isSelectExpanded: false, }; public state: ResourceSelectState = { ...this.defaultState }; @@ -43,9 +45,11 @@ class ResourceSelectBase extends React.Component { constructor(props: ResourceSelectProps) { super(props); - this.handldeOnClear = this.handldeOnClear.bind(this); - this.handldeOnSelect = this.handldeOnSelect.bind(this); - this.handldeOnToggle = this.handldeOnToggle.bind(this); + this.handleOnClear = this.handleOnClear.bind(this); + this.handleOnCreateOption = this.handleOnCreateOption.bind(this); + this.handleOnFilter = this.handleOnFilter.bind(this); + this.handleOnSelect = this.handleOnSelect.bind(this); + this.handleOnToggle = this.handleOnToggle.bind(this); this.handleOnTypeaheadInputChanged = this.handleOnTypeaheadInputChanged.bind(this); } @@ -63,8 +67,9 @@ class ResourceSelectBase extends React.Component { private getOptions = (): ToolbarChipGroup[] => { const { resource, resourceFetchStatus } = this.props; - let options = []; + const { createdOptions } = this.state; + let options = []; if (resource && resource.data && resource.data.length > 0 && resourceFetchStatus !== FetchStatus.inProgress) { options = resource.data.map(item => { const value = item.account_alias || item.value; @@ -74,6 +79,15 @@ class ResourceSelectBase extends React.Component { }; }); } + if (createdOptions && createdOptions.length) { + const moreOptions = createdOptions.map(val => { + return { + key: val, + name: val, + }; + }); + options = [...options, ...moreOptions]; + } return options; }; @@ -85,7 +99,21 @@ class ResourceSelectBase extends React.Component { }); }; - private handldeOnClear = () => { + private handleOnCreateOption = value => { + const { createdOptions } = this.state; + + let options = [...createdOptions]; + if (options.length > 4) { + options = options.slice(1, options.length); + } + options.push(value); + + this.setState({ + createdOptions: options, + }); + }; + + private handleOnClear = () => { const { onSearchChanged } = this.props; if (onSearchChanged) { @@ -96,7 +124,14 @@ class ResourceSelectBase extends React.Component { }); }; - private handldeOnSelect = (event, value) => { + private handleOnFilter = (event, value) => { + if (event === null) { + return null; + } + return this.getSelectOptions(); + }; + + private handleOnSelect = (event, value) => { const { onSelect } = this.props; if (onSelect) { @@ -107,7 +142,7 @@ class ResourceSelectBase extends React.Component { }); }; - private handldeOnToggle = isOpen => { + private handleOnToggle = isOpen => { this.setState({ isSelectExpanded: isOpen, }); @@ -126,12 +161,15 @@ class ResourceSelectBase extends React.Component { return (