From 1da62df37ca4dc024e7e1d707faee231742a6804 Mon Sep 17 00:00:00 2001 From: bhanvimenghani Date: Tue, 24 Sep 2024 15:29:43 +0530 Subject: [PATCH 01/31] fixes exp template for local monitoring --- .../LocalMonitoring/GenerateJSON/createExperimentYAML.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/Analytics/LocalMonitoring/GenerateJSON/createExperimentYAML.tsx b/src/app/Analytics/LocalMonitoring/GenerateJSON/createExperimentYAML.tsx index fc3a9d75..02d12928 100644 --- a/src/app/Analytics/LocalMonitoring/GenerateJSON/createExperimentYAML.tsx +++ b/src/app/Analytics/LocalMonitoring/GenerateJSON/createExperimentYAML.tsx @@ -3,7 +3,7 @@ export default `[ "version": "v2.0", "experiment_name": "subsitute_experiment_name", "cluster_name": "subsitute_cluster_name", - "performance_profile": "resource-optimization-openshift", + "performance_profile": "resource-optimization-local-monitoring", "mode": "monitor", "target_cluster": "local", "kubernetes_objects": [ From e86a21963eb58d5fdfb1d6e96470ad50730df1c9 Mon Sep 17 00:00:00 2001 From: bhanvimenghani Date: Mon, 30 Sep 2024 13:10:02 +0530 Subject: [PATCH 02/31] bug fixes box plots --- .../BoxPlots/BoxPlot.tsx | 31 +++-- .../BoxPlots/CostBoxPlotCharts.tsx | 125 ++++++++++++------ .../BoxPlots/PerfBoxPlotCharts.tsx | 119 +++++++++++------ .../RecommendationComponents/CostDetails.tsx | 51 ++++--- .../RecommendationComponents/PerfDetails.tsx | 7 + src/app/HorizontalNav/HorizontalNav.tsx | 8 +- 6 files changed, 215 insertions(+), 126 deletions(-) diff --git a/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/BoxPlots/BoxPlot.tsx b/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/BoxPlots/BoxPlot.tsx index 7504ab5c..34e0169e 100644 --- a/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/BoxPlots/BoxPlot.tsx +++ b/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/BoxPlots/BoxPlot.tsx @@ -10,19 +10,19 @@ import chart_color_orange_300 from '@patternfly/react-tokens/dist/esm/chart_colo import chart_color_blue_300 from '@patternfly/react-tokens/dist/esm/chart_color_blue_300'; import { createContainer } from './wrapper'; -const formatDate = (dateString) => { - if (!dateString) return ''; // Return empty string if dateString is undefined or null - const date = new Date(dateString); - return new Intl.DateTimeFormat('en-US', { - year: 'numeric', - month: 'short', - day: 'numeric', - hour: '2-digit', - minute: '2-digit' - }).format(date); -}; +// const formatDate = (dateString) => { +// if (!dateString) return ''; // Return empty string if dateString is undefined or null +// const date = new Date(dateString); +// return new Intl.DateTimeFormat('en-US', { +// year: 'numeric', +// month: 'short', +// day: 'numeric', +// hour: '2-digit', +// minute: '2-digit' +// }).format(date); +// }; -const formatNumber = (number, decimals = 2) => { +const formatNumber = (number, decimals = 3) => { if (number == null || isNaN(number)) { return ''; // Return an empty string or some default value if the value is not a number } @@ -120,7 +120,7 @@ const BoxPlot: React.FC = ({ cursorDimension="x" labels={({ datum }) => { if (datum && datum.y != null) { - return `${formatDate(datum.x)}: ${formatNumber(datum.y)}`; + return `${datum.x}: ${formatNumber(datum.y)}`; } else { return 'no data'; } @@ -130,7 +130,7 @@ const BoxPlot: React.FC = ({ flyoutHeight={130} flyoutWidth={170} constrainToVisibleArea - labelComponent={ formatDate(datum?.x ?? '')} />} + labelComponent={ datum?.x ?? ''} />} /> } mouseFollowTooltips @@ -140,7 +140,6 @@ const BoxPlot: React.FC = ({ overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap', - maxWidth: '150px', padding: 1 }} /> @@ -163,7 +162,7 @@ const BoxPlot: React.FC = ({ width={600} > formatDate(tick)} + tickFormat={(tick) => tick} style={{ tickLabels: { angle: -45, diff --git a/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/BoxPlots/CostBoxPlotCharts.tsx b/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/BoxPlots/CostBoxPlotCharts.tsx index e691ba69..1317a435 100644 --- a/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/BoxPlots/CostBoxPlotCharts.tsx +++ b/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/BoxPlots/CostBoxPlotCharts.tsx @@ -1,71 +1,116 @@ import React from 'react'; import { ChartThemeColor } from '@patternfly/react-charts'; -import { Flex, FlexItem } from '@patternfly/react-core'; +import { Grid, GridItem } from '@patternfly/react-core'; import BoxPlot from './BoxPlot'; -export const convertMmrData = (data: any[]) => { +// conversion values needs to be fixed here as well +export const convertMmrData = (day, data: any[]) => { + // let displaykey = day === 'short_term' ? key.split(' ')[1] : key.split(' ')[0]; + return data?.map((item) => ({ ...item, + x: day === 'short_term' ? item.x.substring(11, 16) : item.x.split('T')[0], y: item?.y?.map((value: number) => value / 1024 ** 3) })); }; -export const getMaxValueFromConvertedData = (data: any[],cpuTrue) => { - const convertedData = cpuTrue? data : convertMmrData(data); +export const getMaxValueFromConvertedData = (day, data: any[], requestValue, cpuTrue) => { + const convertedData = cpuTrue ? data : convertMmrData(day, data); const allValues = convertedData.flatMap((item) => item.y || []); - const maxValue = Math.max(...allValues); - const minVal = Math.min(...allValues) - return {maxValue, minVal}; + // once buffer value is known we can add that here + const maxV = Math.max(...allValues, requestValue); + const buffer = 0.1 * maxV; + const maxValue = Math.max(...allValues, requestValue) + buffer; + const minVal = Math.min(...allValues, requestValue) - buffer; + return { maxValue, minVal }; }; -const CostBoxPlotCharts = (props: { boxPlotData; limitRequestData }) => { +const CostBoxPlotCharts = (props: { boxPlotData; showCostBoxPlot; day; limitRequestData }) => { const cpuDataLimit = props.limitRequestData?.limits?.cpu?.amount; const cpuDataRequest = props.limitRequestData?.requests?.cpu?.amount; - const mmrDataLimit = (props.limitRequestData?.limits?.memory?.amount)/1024 ** 2; - const mmrDataRequest = (props.limitRequestData?.requests?.memory?.amount)/1024 ** 2; -console.log(mmrDataLimit) -console.log(mmrDataRequest) + // this needs to be fixed the conversion values + const mmrDataLimit = props.limitRequestData?.limits?.memory?.amount / 1024 ** 3; + const mmrDataRequest = props.limitRequestData?.requests?.memory?.amount / 1024 ** 3; + const cpulimitsChart = props.boxPlotData?.cpu?.map((dict) => { - return { ...dict, y: cpuDataLimit }; + return { + ...dict, + x: props.day === 'short_term' ? dict.x.substring(11, 16) : dict.x.split('T')[0], + y: cpuDataLimit + }; }); const cpurequestChart = props.boxPlotData?.cpu?.map((dict) => { - return { ...dict, y: cpuDataRequest }; + return { + ...dict, + x: props.day === 'short_term' ? dict.x.substring(11, 16) : dict.x.split('T')[0], + y: cpuDataRequest + }; }); const mmrlimitsChart = props.boxPlotData?.mmr?.map((dict) => { - return { ...dict, y: mmrDataLimit }; + return { + ...dict, + x: props.day === 'short_term' ? dict.x.substring(11, 16) : dict.x.split('T')[0], + y: mmrDataLimit + }; }); const mmrrequestChart = props.boxPlotData?.mmr?.map((dict) => { - return { ...dict, y: mmrDataRequest }; + return { + ...dict, + x: props.day === 'short_term' ? dict.x.substring(11, 16) : dict.x.split('T')[0], + y: mmrDataRequest + }; + }); + + const { maxValue: maxcpuValue, minVal: mincpuVal } = props.boxPlotData?.cpu + ? getMaxValueFromConvertedData(props.day, props.boxPlotData?.cpu, cpuDataRequest, true) + : { maxValue: 1, minVal: 0 }; + + // console.log(maxcpuValue, mincpuVal); + const { maxValue, minVal } = props.boxPlotData?.mmr + ? getMaxValueFromConvertedData(props.day, props.boxPlotData?.mmr, mmrDataRequest, false) + : { maxValue: 1, minVal: 0 }; + + console.log(maxcpuValue, mincpuVal); + console.log(maxValue, minVal); + const mmr_cost_boxplot_data = convertMmrData(props.day, props.boxPlotData?.mmr); + const cpu_cost_boxplot_data = props.boxPlotData?.cpu?.map((dict) => { + return { ...dict, x: props.day === 'short_term' ? dict.x.substring(11, 16) : dict.x.split('T')[0] }; }); - - const { maxValue: maxcpuValue, minVal: mincpuVal } = props.boxPlotData?.cpu ? getMaxValueFromConvertedData(props.boxPlotData?.cpu, true) : { maxValue: 1, minVal: 0 }; - - console.log(maxcpuValue, mincpuVal) - const { maxValue, minVal } = props.boxPlotData?.mmr ? getMaxValueFromConvertedData(props.boxPlotData?.mmr, false):{ maxValue: 1, minVal: 0 } - const ab = convertMmrData(props.boxPlotData?.mmr); // cpu and mmr box plots for cost return ( - - - - - - + + + {props.showCostBoxPlot ? ( + + ) : ( + + )} + + - - + + ); }; diff --git a/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/BoxPlots/PerfBoxPlotCharts.tsx b/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/BoxPlots/PerfBoxPlotCharts.tsx index 81395bf2..866da36e 100644 --- a/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/BoxPlots/PerfBoxPlotCharts.tsx +++ b/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/BoxPlots/PerfBoxPlotCharts.tsx @@ -1,69 +1,100 @@ import React, { useState } from 'react'; -import { - ChartThemeColor, - -} from '@patternfly/react-charts'; -import { Flex, FlexItem } from '@patternfly/react-core'; +import { ChartThemeColor } from '@patternfly/react-charts'; +import { Flex, FlexItem, Grid, GridItem } from '@patternfly/react-core'; import BoxPlot from './BoxPlot'; import chart_color_blue_300 from '@patternfly/react-tokens/dist/esm/chart_color_blue_300'; import { getMaxValueFromConvertedData, convertMmrData } from './CostBoxPlotCharts'; -const PerfBoxPlotCharts = (props: { boxPlotData; limitRequestData }) => { +const PerfBoxPlotCharts = (props: { boxPlotData; day; showPerfBoxPlot; limitRequestData }) => { const cpuDataLimit = props.limitRequestData?.limits?.cpu?.amount; const cpuDataRequest = props.limitRequestData?.requests?.cpu?.amount; - const mmrDataLimit = (props.limitRequestData?.limits?.memory?.amount)/1024 ** 2; - const mmrDataRequest = (props.limitRequestData?.requests?.memory?.amount)/1024 ** 2; -console.log(mmrDataLimit) -console.log(mmrDataRequest) + const mmrDataLimit = props.limitRequestData?.limits?.memory?.amount / 1024 ** 2; + const mmrDataRequest = props.limitRequestData?.requests?.memory?.amount / 1024 ** 2; + const cpulimitsChart = props.boxPlotData?.cpu?.map((dict) => { - return { ...dict, y: cpuDataLimit }; + return { + ...dict, + x: props.day === 'short_term' ? dict.x.substring(11, 16): dict.x.split('T')[0], + y: cpuDataLimit + }; }); const cpurequestChart = props.boxPlotData?.cpu?.map((dict) => { - return { ...dict, y: cpuDataRequest }; + return { + ...dict, + x: props.day === 'short_term' ? dict.x.substring(11, 16): dict.x.split('T')[0], + y: cpuDataRequest + }; }); const mmrlimitsChart = props.boxPlotData?.mmr?.map((dict) => { - return { ...dict, y: mmrDataLimit }; + return { + ...dict, + x: props.day === 'short_term' ? dict.x.substring(11, 16): dict.x.split('T')[0], + y: mmrDataLimit + }; }); + const mmrrequestChart = props.boxPlotData?.mmr?.map((dict) => { - return { ...dict, y: mmrDataRequest }; + return { + ...dict, + x: props.day === 'short_term' ? dict.x.substring(11, 16): dict.x.split('T')[0], + y: mmrDataRequest + }; }); - const { maxValue: maxcpuValue, minVal: mincpuVal } = props.boxPlotData?.cpu ? getMaxValueFromConvertedData(props.boxPlotData?.cpu, true) : { maxValue: 1, minVal: 0 }; + const { maxValue: maxcpuValue, minVal: mincpuVal } = props.boxPlotData?.cpu + ? getMaxValueFromConvertedData(props.day, props.boxPlotData?.cpu, cpuDataRequest, true) + : { maxValue: 1, minVal: 0 }; - const { maxValue, minVal } = props.boxPlotData?.mmr ? getMaxValueFromConvertedData(props.boxPlotData?.mmr, false):{ maxValue: 1, minVal: 0 } - const ab = convertMmrData(props.boxPlotData?.mmr) + const { maxValue, minVal } = props.boxPlotData?.mmr + ? getMaxValueFromConvertedData(props.day, props.boxPlotData?.mmr, mmrDataRequest, false) + : { maxValue: 1, minVal: 0 }; + const mmr_perf_boxplot_data = convertMmrData(props.day, props.boxPlotData?.mmr); + const cpu_perf_boxplot_data = props.boxPlotData?.cpu?.map((dict) => { + return { ...dict, x: props.day === 'short_term' ? dict.x.substring(11, 16) : dict.x.split('T')[0] }; + }); // cpu and mmr box plots for performance return ( - - - - - - - - - + + + {props.showPerfBoxPlot? + : + + } + + + + + ); }; diff --git a/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/CostDetails.tsx b/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/CostDetails.tsx index 76c0a82d..1ebed5a7 100644 --- a/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/CostDetails.tsx +++ b/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/CostDetails.tsx @@ -50,9 +50,8 @@ export const MemoryFormat = (number) => { export const MemoryFormatP = (number) => { let parsedNo = parseFloat(number); if (!parsedNo) return ''; - console.log(addPlusSign(Math.round(parsedNo / 1024 ** 3))) - return addPlusSign(Math.round(parsedNo / 1024 ** 3)) - + console.log(addPlusSign(Math.round(parsedNo / 1024 ** 3))); + return addPlusSign(Math.round(parsedNo / 1024 ** 3)); }; export const NumberFormatP = (number) => { @@ -79,6 +78,7 @@ const NumberFormat = (number) => { const CostDetails = (props: { recommendedData; currentData; chartData; day; endtime; displayChart; boxPlotData }) => { const limits = props.recommendedData[0]?.recommendation_engines?.cost?.config?.limits; const config_keys = limits ? Object.keys(limits) : []; + const [showCostBoxPlot, setShowCostBoxPlot] = useState(true); let gpu_val; let nvidiaKey = config_keys.find((key) => key.toLowerCase().includes('nvidia')); @@ -101,24 +101,25 @@ const CostDetails = (props: { recommendedData; currentData; chartData; day; endt requests: memory: "${MemoryFormat( props.recommendedData[0]?.recommendation_engines?.cost?.config?.requests?.memory?.amount - )}" # ${MemoryFormatP(props.recommendedData[0]?.recommendation_engines?.cost?.variation?.requests?.memory?.amount) - } + )}" # ${MemoryFormatP( + props.recommendedData[0]?.recommendation_engines?.cost?.variation?.requests?.memory?.amount + )} cpu: "${NumberFormat( props.recommendedData[0]?.recommendation_engines?.cost?.config?.requests?.cpu?.amount - )}" # ${ - NumberFormatP(props.recommendedData[0]?.recommendation_engines?.cost?.variation?.requests?.cpu?.amount) - } + )}" # ${NumberFormatP( + props.recommendedData[0]?.recommendation_engines?.cost?.variation?.requests?.cpu?.amount + )} limits: memory: "${MemoryFormat( props.recommendedData[0]?.recommendation_engines?.cost?.config?.limits?.memory?.amount - )}" # ${ - MemoryFormatP(props.recommendedData[0]?.recommendation_engines?.cost?.variation?.limits?.memory.amount) - } + )}" # ${MemoryFormatP( + props.recommendedData[0]?.recommendation_engines?.cost?.variation?.limits?.memory.amount + )} cpu: "${NumberFormat( props.recommendedData[0]?.recommendation_engines?.cost?.config?.limits?.cpu?.amount - )}" # ${ - NumberFormatP(props.recommendedData[0]?.recommendation_engines?.cost?.variation?.limits?.cpu?.amount) - }`; + )}" # ${NumberFormatP( + props.recommendedData[0]?.recommendation_engines?.cost?.variation?.limits?.cpu?.amount + )}`; // Code for Alert / Notifications @@ -132,11 +133,14 @@ const CostDetails = (props: { recommendedData; currentData; chartData; day; endt const utilizationAlert = (recommendation) => { const notifications = recommendation[0]?.recommendation_engines?.cost?.notifications; + if (notifications?.hasOwnProperty(323001)) { + setShowCostBoxPlot(false); + } try { if (!notifications) { console.warn('No notifications found.'); return; - } + } const newAlerts: Alert[] = []; Object.values(notifications).forEach((notification: any, index) => { const message = `${notification.code} - ${notification.message}`; @@ -190,13 +194,16 @@ const CostDetails = (props: { recommendedData; currentData; chartData; day; endt - {props.boxPlotData && props.recommendedData[0]?.recommendation_engines?.cost?.config ? - -:
No data to plot box
-} + {props.boxPlotData && props.recommendedData[0]?.recommendation_engines?.cost?.config ? ( + + ) : ( +
No data to plot box
+ )} {props.displayChart && } ); diff --git a/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/PerfDetails.tsx b/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/PerfDetails.tsx index 92401dc3..ba530c20 100644 --- a/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/PerfDetails.tsx +++ b/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/PerfDetails.tsx @@ -35,6 +35,7 @@ const PerfDetails = (props: { }) => { const limits = props.recommendedData[0]?.recommendation_engines?.performance?.config?.limits; const config_keys = limits ? Object.keys(limits) : []; + const [showPerfBoxPlot, setShowPerfBoxPlot] = useState(true); let gpu_val; let nvidiaKey = config_keys.find((key) => key.toLowerCase().includes('nvidia')); @@ -120,6 +121,10 @@ const PerfDetails = (props: { const utilizationAlert = (recommendation) => { const notifications = recommendation[0]?.recommendation_engines?.performance?.notifications; + if (notifications?.hasOwnProperty(323001)) { + setShowPerfBoxPlot(false); + } + console.log("perfn", notifications) try { if (!notifications) { console.warn('No notifications found.'); @@ -186,6 +191,8 @@ const PerfDetails = (props: { {props.displayChart && }{' '} diff --git a/src/app/HorizontalNav/HorizontalNav.tsx b/src/app/HorizontalNav/HorizontalNav.tsx index 848787fb..aa8596db 100644 --- a/src/app/HorizontalNav/HorizontalNav.tsx +++ b/src/app/HorizontalNav/HorizontalNav.tsx @@ -76,10 +76,10 @@ const HorizontalNav = () => { {clusterStatus === false ? ( No Minikube Connection.} + headerContent={
No Kubernetes Connection.
} bodyContent={
- Minikube connection is pre requisite for autotune setup. + Kubernetes connection is pre requisite for setting up Kruize.
} > @@ -88,12 +88,12 @@ const HorizontalNav = () => { ) : ( Connected to Minikube Cluster!} + headerContent={
Connected to Kubernetes Cluster!
} bodyContent={
Cluster Information
- +

From 111cd6c5b33f6c952e1bd2b2a3fa075b1e410998 Mon Sep 17 00:00:00 2001 From: bhanvimenghani Date: Mon, 30 Sep 2024 16:09:39 +0530 Subject: [PATCH 03/31] fix noti bug --- .../RemoteMonitoring/Monitoring.tsx | 56 ++++---------- .../RecommendationComponents/CostDetails.tsx | 57 +++++++++----- .../RecommendationComponents/PerfDetails.tsx | 76 +++++++++++-------- .../RemoteMonitoring/RecommendationTables.tsx | 62 ++++++--------- 4 files changed, 119 insertions(+), 132 deletions(-) diff --git a/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/Monitoring.tsx b/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/Monitoring.tsx index 1f53a38b..f0c39590 100644 --- a/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/Monitoring.tsx +++ b/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/Monitoring.tsx @@ -29,67 +29,37 @@ const Monitoring = () => { const [SREdata, setSREdata] = useState(SREdataa); const [endTimeArray, setEndTimeArray] = useState(null); const [displyRecc, setDisplayRecc] = useState(false); - const [notifications, setNotifications] = useState({ + const [notifications, setNotifications] = useState({ level1: {}, - level2: {info : {}, others: {}}, + level2: { info: {}, others: {} }, level3: {} }); - // const handleTabClick = ( - // event: React.MouseEvent | React.KeyboardEvent | MouseEvent, - // tabIndex: string | number - // ) => { - // setActiveTabKey(tabIndex); - // }; - - // const switchTab = (tabIndex) => { - // setActiveTabKey(tabIndex); - // }; - return ( Monitoring
- {/* - Experiment Selection} - aria-label="Tabs filled example content users" - > */} - {/* */} - - {/* Recommendations}> */} - { displyRecc && - -} - {/* */} - {/* */} + {displyRecc && ( + + )}
); }; diff --git a/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/CostDetails.tsx b/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/CostDetails.tsx index 1ebed5a7..ebaf165b 100644 --- a/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/CostDetails.tsx +++ b/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/CostDetails.tsx @@ -9,18 +9,21 @@ import { Text, TextVariants, PageSectionVariants, - Alert + Alert, + AlertGroup } from '@patternfly/react-core'; import ReusableCodeBlock from './ReusableCodeBlock'; import { CostHistoricCharts } from './LinePlot/CostHistoricCharts'; import { addPlusSign } from './LinePlot/ChartDataPreparation'; import { CostBoxPlotCharts } from './BoxPlots/CostBoxPlotCharts'; +import { alertIconMap } from '../RecommendationTables'; type AlertType = 'info' | 'danger' | 'warning'; interface Alert { message: string; type: AlertType; + icon: React.ReactNode; } const convertBytes = (bytes) => { @@ -121,17 +124,16 @@ const CostDetails = (props: { recommendedData; currentData; chartData; day; endt props.recommendedData[0]?.recommendation_engines?.cost?.variation?.limits?.cpu?.amount )}`; - // Code for Alert / Notifications - + // Notifications useEffect(() => { if (props.recommendedData !== null) { - utilizationAlert(props.recommendedData); + NotificationsAtCostLevel(props.recommendedData); } - }, [props.recommendedData]); + }, [props.recommendedData, props.day, props.endtime]); const [alerts, setAlerts] = useState([]); - const utilizationAlert = (recommendation) => { + const NotificationsAtCostLevel = (recommendation) => { const notifications = recommendation[0]?.recommendation_engines?.cost?.notifications; if (notifications?.hasOwnProperty(323001)) { setShowCostBoxPlot(false); @@ -142,35 +144,50 @@ const CostDetails = (props: { recommendedData; currentData; chartData; day; endt return; } const newAlerts: Alert[] = []; - Object.values(notifications).forEach((notification: any, index) => { - const message = `${notification.code} - ${notification.message}`; + + Object.keys(notifications).forEach((key) => { + const message = `${notifications[key].message}`; let type: AlertType = 'info'; - if (notification.type == 'notice' || notification.type == 'info') { + if (notifications.type == 'notice' || notifications.type == 'info') { type = 'info'; - } else if (notification.type == 'error' || notification.type == 'critical') { + } else if (notifications.type == 'error' || notifications.type == 'critical') { type = 'danger'; - } else if (notification.type == 'warning') { + } else if (notifications.type == 'warning') { type = 'warning'; } - newAlerts.push({ message, type }); - setAlerts(newAlerts); - // setTimeout(() => { - // setAlerts([]); - // }, 2000); + + const Icon = alertIconMap[type]; + newAlerts.push({ message, type, icon: Icon }); }); + setAlerts(newAlerts); } catch (error) { console.error('Error during data import:', error); setAlerts([]); } }; + const renderNotifications = (notifications: any) => ( + + {Object.keys(notifications || {}).map((key) => { + const notification = notifications[key]; + const alertType = notification.type || 'info'; + const Icon = alertIconMap[alertType]; + + return ( +
+ {Icon} + {notification.message} +
+ ); + })} +
+ ); + return ( - {alerts.map((alert) => ( - - ))} + {renderNotifications(alerts)} Current State @@ -198,7 +215,7 @@ const CostDetails = (props: { recommendedData; currentData; chartData; day; endt ) : ( diff --git a/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/PerfDetails.tsx b/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/PerfDetails.tsx index ba530c20..95bd4ce0 100644 --- a/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/PerfDetails.tsx +++ b/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/PerfDetails.tsx @@ -9,18 +9,21 @@ import { Text, TextVariants, PageSectionVariants, - Alert + Alert, + AlertGroup } from '@patternfly/react-core'; import ReusableCodeBlock from './ReusableCodeBlock'; import { PerfHistoricCharts } from './LinePlot/PerfHistoricCharts'; -import { addPlusSign } from './LinePlot/ChartDataPreparation'; import { PerfBoxPlotCharts } from './BoxPlots/PerfBoxPlotCharts'; import { NumberFormatP, MemoryFormatP } from './CostDetails'; +import { alertIconMap } from '../RecommendationTables'; +import { render } from 'enzyme'; type AlertType = 'info' | 'danger' | 'warning'; interface Alert { message: string; type: AlertType; + icon: React.ReactNode; } const PerfDetails = (props: { @@ -93,38 +96,42 @@ const PerfDetails = (props: { requests: memory: "${MemoryFormat( props.recommendedData[0]?.recommendation_engines?.performance?.config?.requests?.memory?.amount - )}" # ${MemoryFormatP(props.recommendedData[0]?.recommendation_engines?.performance?.variation?.requests?.memory?.amount) - } + )}" # ${MemoryFormatP( + props.recommendedData[0]?.recommendation_engines?.performance?.variation?.requests?.memory?.amount + )} cpu: "${NumberFormat( props.recommendedData[0]?.recommendation_engines?.performance?.config?.requests?.cpu?.amount - )}" # ${NumberFormatP(props.recommendedData[0]?.recommendation_engines?.performance?.variation?.requests?.cpu?.amount) - } + )}" # ${NumberFormatP( + props.recommendedData[0]?.recommendation_engines?.performance?.variation?.requests?.cpu?.amount + )} limits: memory: "${MemoryFormat( props.recommendedData[0]?.recommendation_engines?.performance?.config?.limits?.memory?.amount - )}" # ${MemoryFormatP(props.recommendedData[0]?.recommendation_engines?.performance?.variation?.limits?.memory?.amount) - } + )}" # ${MemoryFormatP( + props.recommendedData[0]?.recommendation_engines?.performance?.variation?.limits?.memory?.amount + )} cpu: "${NumberFormat( props.recommendedData[0]?.recommendation_engines?.performance?.config?.limits?.cpu?.amount - )}" # ${NumberFormatP(props.recommendedData[0]?.recommendation_engines?.performance?.variation?.limits?.cpu?.amount) - }`; + )}" # ${NumberFormatP( + props.recommendedData[0]?.recommendation_engines?.performance?.variation?.limits?.cpu?.amount + )}`; // Code for Alert / Notifications useEffect(() => { if (props.recommendedData !== null) { - utilizationAlert(props.recommendedData); + NotificationsAtPerfLevel(props.recommendedData); } - }, [props.tab]); + }, [props.tab, props.day, props.endtime, props.recommendedData]); const [alerts, setAlerts] = useState([]); - const utilizationAlert = (recommendation) => { + const NotificationsAtPerfLevel = (recommendation) => { const notifications = recommendation[0]?.recommendation_engines?.performance?.notifications; if (notifications?.hasOwnProperty(323001)) { setShowPerfBoxPlot(false); } - console.log("perfn", notifications) + console.log('perfn', notifications); try { if (!notifications) { console.warn('No notifications found.'); @@ -132,7 +139,7 @@ const PerfDetails = (props: { } const newAlerts: Alert[] = []; Object.values(notifications).forEach((notification: any, index) => { - const message = `${notification.code} - ${notification.message}`; + const message = `${notification.message}`; let type: AlertType = 'info'; if (notification.type == 'notice' || notification.type == 'info') { @@ -142,30 +149,39 @@ const PerfDetails = (props: { } else if (notification.type == 'warning') { type = 'warning'; } - newAlerts.push({ message, type }); - setAlerts(newAlerts); - setShowSuccessAlert(true); - // setTimeout(() => { - // setAlerts([]); - // setShowSuccessAlert(false); - // }, 2000); + + const Icon = alertIconMap[type]; + newAlerts.push({ message, type, icon: Icon }); }); + + setAlerts(newAlerts); } catch (error) { console.error('Error during data import:', error); setAlerts([]); - setShowSuccessAlert(false); } }; - const [showSuccessAlert, setShowSuccessAlert] = useState(false); + + const renderNotifications = (notifications: any) => ( + + {Object.keys(notifications || {}).map((key) => { + const notification = notifications[key]; + const alertType = notification.type || 'info'; + const Icon = alertIconMap[alertType]; + + return ( +
+ {Icon} + {notification.message} +
+ ); + })} +
+ ); return ( - {showSuccessAlert == true ? ( - alerts.map((alert) => ) - ) : ( - <> - )} + {renderNotifications(alerts)} Current State @@ -192,7 +208,7 @@ const PerfDetails = (props: { {props.displayChart && }{' '} diff --git a/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationTables.tsx b/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationTables.tsx index 1e3ad922..a82a9f19 100644 --- a/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationTables.tsx +++ b/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationTables.tsx @@ -22,7 +22,7 @@ import { TabSection } from './RecommendationComponents/TabSection'; import { WorkloadDetails } from './RecommendationComponents/WorkloadDetails'; import { InfoCircleIcon, ExclamationCircleIcon, ExclamationTriangleIcon } from '@patternfly/react-icons'; -const alertIconMap = { +export const alertIconMap = { info: , warning: , error: , @@ -231,6 +231,26 @@ const RecommendationTables = (props: { setDay(value); }; + const renderNotifications = (notifications: any) => ( + + {Object.keys(notifications || {}).map((key) => { + const notification = notifications[key]; + const alertType = notification.type || 'info'; + const Icon = alertIconMap[alertType]; + + return ( +
+ {Icon} + + {notification.message} + +
+ ); + })} +
+ ); + + return ( @@ -301,46 +321,10 @@ const RecommendationTables = (props: { - - {Object.keys(props.notification?.level2?.info || {}).map((key) => { - const notification = props.notification?.level2?.info[key]; - const alertType = notification.type || 'info'; - const Icon = alertIconMap[alertType]; - - return ( -
- {Icon} - - {notification.message} - -
- ); - })} -
+ {props.notification.level2 && renderNotifications(props.notification.level2.info)}
- - {Object.keys(props.notification?.level2?.others || {}).map((key) => { - const notification = props.notification?.level2?.others[key]; - const alertType = notification.type || 'info'; - const Icon = alertIconMap[alertType]; - - return ( -
- {Icon} - - {notification.message} - -
- ); - })} -
+ {props.notification.level2 && renderNotifications(props.notification.level2.others)}
From 4469dc9dc7d6a47794300dba95ebc62f15a00be5 Mon Sep 17 00:00:00 2001 From: bhanvimenghani Date: Thu, 3 Oct 2024 13:28:55 +0530 Subject: [PATCH 04/31] misc bug fixes --- .../LocalMonitoring/DatasourceTable.tsx | 11 ++---- .../LocalMonitoring/LocalMonitoring.tsx | 2 +- .../RecommendationComponents/CostDetails.tsx | 17 ++++---- .../LinePlot/ChartDataPreparation.tsx | 10 ++--- .../RecommendationComponents/PerfDetails.tsx | 39 +------------------ 5 files changed, 20 insertions(+), 59 deletions(-) diff --git a/src/app/Analytics/LocalMonitoring/DatasourceTable.tsx b/src/app/Analytics/LocalMonitoring/DatasourceTable.tsx index 7782eb80..6096dbfb 100644 --- a/src/app/Analytics/LocalMonitoring/DatasourceTable.tsx +++ b/src/app/Analytics/LocalMonitoring/DatasourceTable.tsx @@ -55,19 +55,16 @@ const DatasourceTable = (props: { fetchDatasourcesData }) => { return ( - {/* Data Sources */} - {/*
*/} -
- - {props.fetchDatasourcesData.datasources.map((source, index) => ( + {props.fetchDatasourcesData?.datasources && props.fetchDatasourcesData.datasources.map((source, index) => (
+ DataSource Name Action
{ ))}
- {isComponentVisible && } -
- + {isComponentVisible && } ); }; diff --git a/src/app/Analytics/LocalMonitoring/LocalMonitoring.tsx b/src/app/Analytics/LocalMonitoring/LocalMonitoring.tsx index 7591302d..bad45a2c 100644 --- a/src/app/Analytics/LocalMonitoring/LocalMonitoring.tsx +++ b/src/app/Analytics/LocalMonitoring/LocalMonitoring.tsx @@ -42,7 +42,7 @@ const LocalMonitoring = () => { Local Monitoring
- {datasourcesData ? : <>} + {datasourcesData && } ); }; diff --git a/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/CostDetails.tsx b/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/CostDetails.tsx index ebaf165b..02f5279e 100644 --- a/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/CostDetails.tsx +++ b/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/CostDetails.tsx @@ -9,7 +9,6 @@ import { Text, TextVariants, PageSectionVariants, - Alert, AlertGroup } from '@patternfly/react-core'; import ReusableCodeBlock from './ReusableCodeBlock'; @@ -41,20 +40,24 @@ const convertBytes = (bytes) => { unit = 'Ki'; } - return `${value} ${unit}`; + return { value, unit }; }; export const MemoryFormat = (number) => { let parsedNo = parseFloat(number); if (!parsedNo) return ''; - return convertBytes(parsedNo); + const { value, unit } = convertBytes(parsedNo); + return `${value} ${unit}`; }; export const MemoryFormatP = (number) => { let parsedNo = parseFloat(number); if (!parsedNo) return ''; - console.log(addPlusSign(Math.round(parsedNo / 1024 ** 3))); - return addPlusSign(Math.round(parsedNo / 1024 ** 3)); + + const { value, unit } = convertBytes(parsedNo); + const formattedValue = addPlusSign(Math.round(value)); + console.log(formattedValue); + return `${formattedValue} ${unit}`; }; export const NumberFormatP = (number) => { @@ -67,7 +70,7 @@ export const NumberFormatP = (number) => { } return ''; }; -const NumberFormat = (number) => { +export const NumberFormat = (number) => { let parsedNo = parseFloat(number); if (!isNaN(parsedNo) && isFinite(parsedNo)) { if (Math.floor(parsedNo) !== parsedNo) { @@ -226,4 +229,4 @@ const CostDetails = (props: { recommendedData; currentData; chartData; day; endt ); }; -export { CostDetails }; +export { CostDetails, convertBytes }; diff --git a/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/LinePlot/ChartDataPreparation.tsx b/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/LinePlot/ChartDataPreparation.tsx index 552a93fc..5d7ecf51 100644 --- a/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/LinePlot/ChartDataPreparation.tsx +++ b/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/LinePlot/ChartDataPreparation.tsx @@ -30,14 +30,14 @@ export function formatTimestamps(timestampsData) { export function formatNumber(input) { if (typeof input === 'number') { - return parseFloat(input.toFixed(3)); // Format the number to 3 decimal places and convert to number + return parseFloat(input.toFixed(3)); } else if (!isNaN(input)) { - return parseFloat(Number(input).toFixed(3)); // Format the number to 3 decimal places and convert to number + return parseFloat(Number(input).toFixed(3)); } return input; } export function addPlusSign(str) { - const number = parseFloat(str); // Try to convert the string to a number + const number = parseFloat(str); if (!isNaN(number) && isFinite(number)) { if (number >= 0) { @@ -45,11 +45,11 @@ export function addPlusSign(str) { } } - return str; // Return the original string if it's not a non-negative number + return str; } export function filterLastNDayData(data, givenDay, numDays) { - const oneDayInMillis = 24 * 60 * 60 * 1000; // Number of milliseconds in a day + const oneDayInMillis = 24 * 60 * 60 * 1000; const givenDayMillis = Date.parse(givenDay); const filteredData = {}; diff --git a/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/PerfDetails.tsx b/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/PerfDetails.tsx index 95bd4ce0..4985455c 100644 --- a/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/PerfDetails.tsx +++ b/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/PerfDetails.tsx @@ -9,15 +9,13 @@ import { Text, TextVariants, PageSectionVariants, - Alert, AlertGroup } from '@patternfly/react-core'; import ReusableCodeBlock from './ReusableCodeBlock'; import { PerfHistoricCharts } from './LinePlot/PerfHistoricCharts'; import { PerfBoxPlotCharts } from './BoxPlots/PerfBoxPlotCharts'; -import { NumberFormatP, MemoryFormatP } from './CostDetails'; +import { NumberFormatP, MemoryFormatP , MemoryFormat, NumberFormat} from './CostDetails'; import { alertIconMap } from '../RecommendationTables'; -import { render } from 'enzyme'; type AlertType = 'info' | 'danger' | 'warning'; interface Alert { @@ -49,41 +47,6 @@ const PerfDetails = (props: { console.log("No 'nvidia' key found."); } - const convertBytes = (bytes) => { - let value: any = parseFloat(bytes); - let unit = 'Bytes'; - - if (value >= 1024 ** 3) { - value = Math.round(value / 1024 ** 3); - unit = 'Gi'; - } else if (value >= 1024 ** 2) { - value = Math.round(value / 1024 ** 2); - unit = 'Mi'; - } else if (value >= 1024) { - value = Math.round(value / 1024); - unit = 'Ki'; - } - - return `${value} ${unit}`; - }; - - const MemoryFormat = (number) => { - let parsedNo = parseFloat(number); - if (!parsedNo) return ''; - return convertBytes(parsedNo); - }; - - const NumberFormat = (number) => { - let parsedNo = parseFloat(number); - if (!isNaN(parsedNo) && isFinite(parsedNo)) { - if (Math.floor(parsedNo) !== parsedNo) { - return parsedNo.toFixed(3); - } - return parsedNo.toString(); - } - return ''; - }; - const current_code = `resources: requests: memory: "${MemoryFormat(props.currentData[0]?.requests?.memory?.amount)}" From b6af8582035c7031f9bff85e1c0dc1df74b6ee4d Mon Sep 17 00:00:00 2001 From: bhanvimenghani Date: Fri, 4 Oct 2024 18:32:18 +0530 Subject: [PATCH 05/31] fixes negetive delta value formatting & displaying negetive back --- .../RecommendationComponents/CostDetails.tsx | 47 +++++++++++-------- .../RecommendationComponents/PerfDetails.tsx | 4 +- 2 files changed, 30 insertions(+), 21 deletions(-) diff --git a/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/CostDetails.tsx b/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/CostDetails.tsx index 02f5279e..604e5999 100644 --- a/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/CostDetails.tsx +++ b/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/CostDetails.tsx @@ -24,38 +24,47 @@ interface Alert { type: AlertType; icon: React.ReactNode; } - -const convertBytes = (bytes) => { - let value: any = parseFloat(bytes); + +const convertBytes = (value) => { let unit = 'Bytes'; - - if (value >= 1024 ** 3) { - value = Math.round(value / 1024 ** 3); + let sign = value[0] + let absValue = Math.abs(value); + let valueFinal = absValue; + + if (absValue >= 1024 ** 3) { + valueFinal = absValue / 1024 ** 3; unit = 'Gi'; - } else if (value >= 1024 ** 2) { - value = Math.round(value / 1024 ** 2); + } else if (absValue >= 1024 ** 2) { + valueFinal = absValue / 1024 ** 2; unit = 'Mi'; - } else if (value >= 1024) { - value = Math.round(value / 1024); + } else if (absValue >= 1024) { + valueFinal = absValue / 1024; unit = 'Ki'; } - return { value, unit }; + valueFinal = value < 0 ? -valueFinal : valueFinal; + + console.log(value, "converted value:", valueFinal, " sign", sign); + return { + valueFinal: parseFloat(valueFinal.toFixed(2)).toString(), + unit + }; }; export const MemoryFormat = (number) => { let parsedNo = parseFloat(number); if (!parsedNo) return ''; - const { value, unit } = convertBytes(parsedNo); - return `${value} ${unit}`; + + const { valueFinal, unit } = convertBytes(parsedNo); + return `${valueFinal} ${unit}`; }; export const MemoryFormatP = (number) => { let parsedNo = parseFloat(number); if (!parsedNo) return ''; - const { value, unit } = convertBytes(parsedNo); - const formattedValue = addPlusSign(Math.round(value)); + const { valueFinal, unit } = convertBytes(parsedNo); + const formattedValue =valueFinal console.log(formattedValue); return `${formattedValue} ${unit}`; }; @@ -64,7 +73,7 @@ export const NumberFormatP = (number) => { let parsedNo = parseFloat(number); if (!isNaN(parsedNo) && isFinite(parsedNo)) { if (Math.floor(parsedNo) !== parsedNo) { - return addPlusSign(parsedNo.toFixed(3)); + return addPlusSign(parseFloat(parsedNo.toFixed(3)).toString()) } return addPlusSign(parsedNo.toString()); } @@ -74,7 +83,7 @@ export const NumberFormat = (number) => { let parsedNo = parseFloat(number); if (!isNaN(parsedNo) && isFinite(parsedNo)) { if (Math.floor(parsedNo) !== parsedNo) { - return parsedNo.toFixed(3); + return parseFloat(parsedNo.toFixed(3)).toString() } return parsedNo.toString(); } @@ -112,7 +121,7 @@ const CostDetails = (props: { recommendedData; currentData; chartData; day; endt )} cpu: "${NumberFormat( props.recommendedData[0]?.recommendation_engines?.cost?.config?.requests?.cpu?.amount - )}" # ${NumberFormatP( + )}" # ${NumberFormatP( props.recommendedData[0]?.recommendation_engines?.cost?.variation?.requests?.cpu?.amount )} limits: @@ -123,7 +132,7 @@ const CostDetails = (props: { recommendedData; currentData; chartData; day; endt )} cpu: "${NumberFormat( props.recommendedData[0]?.recommendation_engines?.cost?.config?.limits?.cpu?.amount - )}" # ${NumberFormatP( + )}" # ${NumberFormatP( props.recommendedData[0]?.recommendation_engines?.cost?.variation?.limits?.cpu?.amount )}`; diff --git a/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/PerfDetails.tsx b/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/PerfDetails.tsx index 4985455c..ba4e633d 100644 --- a/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/PerfDetails.tsx +++ b/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/PerfDetails.tsx @@ -64,7 +64,7 @@ const PerfDetails = (props: { )} cpu: "${NumberFormat( props.recommendedData[0]?.recommendation_engines?.performance?.config?.requests?.cpu?.amount - )}" # ${NumberFormatP( + )}" # ${NumberFormatP( props.recommendedData[0]?.recommendation_engines?.performance?.variation?.requests?.cpu?.amount )} limits: @@ -75,7 +75,7 @@ const PerfDetails = (props: { )} cpu: "${NumberFormat( props.recommendedData[0]?.recommendation_engines?.performance?.config?.limits?.cpu?.amount - )}" # ${NumberFormatP( + )}" # ${NumberFormatP( props.recommendedData[0]?.recommendation_engines?.performance?.variation?.limits?.cpu?.amount )}`; From 2b6945ae7e5b43cc3aae3b4f23fda14de9e7154b Mon Sep 17 00:00:00 2001 From: bhanvimenghani Date: Fri, 4 Oct 2024 19:23:41 +0530 Subject: [PATCH 06/31] mmr box plot y axis values are dynamic now --- .../BoxPlots/CostBoxPlotCharts.tsx | 20 ++++++------ .../BoxPlots/PerfBoxPlotCharts.tsx | 12 +++---- .../RecommendationComponents/CostDetails.tsx | 32 +++++++++++++++++-- .../RecommendationComponents/PerfDetails.tsx | 4 ++- 4 files changed, 49 insertions(+), 19 deletions(-) diff --git a/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/BoxPlots/CostBoxPlotCharts.tsx b/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/BoxPlots/CostBoxPlotCharts.tsx index 1317a435..81a1198b 100644 --- a/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/BoxPlots/CostBoxPlotCharts.tsx +++ b/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/BoxPlots/CostBoxPlotCharts.tsx @@ -4,18 +4,18 @@ import { Grid, GridItem } from '@patternfly/react-core'; import BoxPlot from './BoxPlot'; // conversion values needs to be fixed here as well -export const convertMmrData = (day, data: any[]) => { +export const convertMmrData = (day, data: any[], unitVal) => { // let displaykey = day === 'short_term' ? key.split(' ')[1] : key.split(' ')[0]; return data?.map((item) => ({ ...item, x: day === 'short_term' ? item.x.substring(11, 16) : item.x.split('T')[0], - y: item?.y?.map((value: number) => value / 1024 ** 3) + y: item?.y?.map((value: number) => value / 1024 ** unitVal) })); }; -export const getMaxValueFromConvertedData = (day, data: any[], requestValue, cpuTrue) => { - const convertedData = cpuTrue ? data : convertMmrData(day, data); +export const getMaxValueFromConvertedData = (day, data: any[], requestValue, cpuTrue, unitVal) => { + const convertedData = cpuTrue ? data : convertMmrData(day, data, unitVal); const allValues = convertedData.flatMap((item) => item.y || []); // once buffer value is known we can add that here @@ -26,13 +26,13 @@ export const getMaxValueFromConvertedData = (day, data: any[], requestValue, cpu return { maxValue, minVal }; }; -const CostBoxPlotCharts = (props: { boxPlotData; showCostBoxPlot; day; limitRequestData }) => { +const CostBoxPlotCharts = (props: { unitValueforMemory, boxPlotData; showCostBoxPlot; day; limitRequestData }) => { const cpuDataLimit = props.limitRequestData?.limits?.cpu?.amount; const cpuDataRequest = props.limitRequestData?.requests?.cpu?.amount; // this needs to be fixed the conversion values - const mmrDataLimit = props.limitRequestData?.limits?.memory?.amount / 1024 ** 3; - const mmrDataRequest = props.limitRequestData?.requests?.memory?.amount / 1024 ** 3; + const mmrDataLimit = props.limitRequestData?.limits?.memory?.amount / 1024 ** props.unitValueforMemory; + const mmrDataRequest = props.limitRequestData?.requests?.memory?.amount / 1024 ** props.unitValueforMemory; const cpulimitsChart = props.boxPlotData?.cpu?.map((dict) => { return { @@ -65,17 +65,17 @@ const CostBoxPlotCharts = (props: { boxPlotData; showCostBoxPlot; day; limitRequ }); const { maxValue: maxcpuValue, minVal: mincpuVal } = props.boxPlotData?.cpu - ? getMaxValueFromConvertedData(props.day, props.boxPlotData?.cpu, cpuDataRequest, true) + ? getMaxValueFromConvertedData(props.day, props.boxPlotData?.cpu, cpuDataRequest, true, props.unitValueforMemory) : { maxValue: 1, minVal: 0 }; // console.log(maxcpuValue, mincpuVal); const { maxValue, minVal } = props.boxPlotData?.mmr - ? getMaxValueFromConvertedData(props.day, props.boxPlotData?.mmr, mmrDataRequest, false) + ? getMaxValueFromConvertedData(props.day, props.boxPlotData?.mmr, mmrDataRequest, false, props.unitValueforMemory) : { maxValue: 1, minVal: 0 }; console.log(maxcpuValue, mincpuVal); console.log(maxValue, minVal); - const mmr_cost_boxplot_data = convertMmrData(props.day, props.boxPlotData?.mmr); + const mmr_cost_boxplot_data = convertMmrData(props.day, props.boxPlotData?.mmr, props.unitValueforMemory); const cpu_cost_boxplot_data = props.boxPlotData?.cpu?.map((dict) => { return { ...dict, x: props.day === 'short_term' ? dict.x.substring(11, 16) : dict.x.split('T')[0] }; }); diff --git a/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/BoxPlots/PerfBoxPlotCharts.tsx b/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/BoxPlots/PerfBoxPlotCharts.tsx index 866da36e..50d22f46 100644 --- a/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/BoxPlots/PerfBoxPlotCharts.tsx +++ b/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/BoxPlots/PerfBoxPlotCharts.tsx @@ -5,12 +5,12 @@ import BoxPlot from './BoxPlot'; import chart_color_blue_300 from '@patternfly/react-tokens/dist/esm/chart_color_blue_300'; import { getMaxValueFromConvertedData, convertMmrData } from './CostBoxPlotCharts'; -const PerfBoxPlotCharts = (props: { boxPlotData; day; showPerfBoxPlot; limitRequestData }) => { +const PerfBoxPlotCharts = (props: { unitValueforMemory ,boxPlotData; day; showPerfBoxPlot; limitRequestData }) => { const cpuDataLimit = props.limitRequestData?.limits?.cpu?.amount; const cpuDataRequest = props.limitRequestData?.requests?.cpu?.amount; - const mmrDataLimit = props.limitRequestData?.limits?.memory?.amount / 1024 ** 2; - const mmrDataRequest = props.limitRequestData?.requests?.memory?.amount / 1024 ** 2; + const mmrDataLimit = props.limitRequestData?.limits?.memory?.amount / 1024 ** props.unitValueforMemory; + const mmrDataRequest = props.limitRequestData?.requests?.memory?.amount / 1024 ** props.unitValueforMemory; const cpulimitsChart = props.boxPlotData?.cpu?.map((dict) => { return { @@ -44,14 +44,14 @@ const PerfBoxPlotCharts = (props: { boxPlotData; day; showPerfBoxPlot; limitRequ }); const { maxValue: maxcpuValue, minVal: mincpuVal } = props.boxPlotData?.cpu - ? getMaxValueFromConvertedData(props.day, props.boxPlotData?.cpu, cpuDataRequest, true) + ? getMaxValueFromConvertedData(props.day, props.boxPlotData?.cpu, cpuDataRequest, true, props.unitValueforMemory) : { maxValue: 1, minVal: 0 }; const { maxValue, minVal } = props.boxPlotData?.mmr - ? getMaxValueFromConvertedData(props.day, props.boxPlotData?.mmr, mmrDataRequest, false) + ? getMaxValueFromConvertedData(props.day, props.boxPlotData?.mmr, mmrDataRequest, false, props.unitValueforMemory) : { maxValue: 1, minVal: 0 }; - const mmr_perf_boxplot_data = convertMmrData(props.day, props.boxPlotData?.mmr); + const mmr_perf_boxplot_data = convertMmrData(props.day, props.boxPlotData?.mmr, props.unitValueforMemory); const cpu_perf_boxplot_data = props.boxPlotData?.cpu?.map((dict) => { return { ...dict, x: props.day === 'short_term' ? dict.x.substring(11, 16) : dict.x.split('T')[0] }; }); diff --git a/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/CostDetails.tsx b/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/CostDetails.tsx index 604e5999..b3848114 100644 --- a/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/CostDetails.tsx +++ b/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/CostDetails.tsx @@ -44,7 +44,7 @@ const convertBytes = (value) => { valueFinal = value < 0 ? -valueFinal : valueFinal; - console.log(value, "converted value:", valueFinal, " sign", sign); + // console.log(value, "converted value:", valueFinal, " sign", sign); return { valueFinal: parseFloat(valueFinal.toFixed(2)).toString(), unit @@ -65,7 +65,7 @@ export const MemoryFormatP = (number) => { const { valueFinal, unit } = convertBytes(parsedNo); const formattedValue =valueFinal - console.log(formattedValue); + // console.log(formattedValue); return `${formattedValue} ${unit}`; }; @@ -90,10 +90,37 @@ export const NumberFormat = (number) => { return ''; }; +export const useMemoryUnit = (recommendedData, profile) => { + const [mmrUnit, setMmrUnit] = useState(''); + const [unitVal, setUnitVal] = useState(0); + + useEffect(() => { + if (recommendedData?.length > 0) { + const mmr_recc_unit = convertBytes(recommendedData[0]?.recommendation_engines?.[profile]?.config?.requests?.memory?.amount); + setMmrUnit(mmr_recc_unit.unit); + + // Set unitVal based on the mmr_recc_unit.unit + if (mmr_recc_unit.unit === 'Mi') { + setUnitVal(2); + } else if (mmr_recc_unit.unit === 'Gi') { + setUnitVal(3); + } else if (mmr_recc_unit.unit === 'Ki') { + setUnitVal(1); + } else { + setUnitVal(0); // Default case if needed + } + } + }, [recommendedData]); + + return { mmrUnit, unitVal }; +}; + + const CostDetails = (props: { recommendedData; currentData; chartData; day; endtime; displayChart; boxPlotData }) => { const limits = props.recommendedData[0]?.recommendation_engines?.cost?.config?.limits; const config_keys = limits ? Object.keys(limits) : []; const [showCostBoxPlot, setShowCostBoxPlot] = useState(true); + const { mmrUnit, unitVal } = useMemoryUnit(props.recommendedData, 'cost'); let gpu_val; let nvidiaKey = config_keys.find((key) => key.toLowerCase().includes('nvidia')); @@ -225,6 +252,7 @@ const CostDetails = (props: { recommendedData; currentData; chartData; day; endt {props.boxPlotData && props.recommendedData[0]?.recommendation_engines?.cost?.config ? ( key.toLowerCase().includes('nvidia')); @@ -169,6 +170,7 @@ const PerfDetails = (props: { Date: Thu, 3 Oct 2024 16:52:37 +0530 Subject: [PATCH 07/31] clean up of folders --- deploy.sh | 121 ------- env.ts | 21 -- src/app/About/About.tsx | 9 +- src/app/AdvancedUser/LayerDefination.tsx | 12 - src/app/AdvancedUser/ObjectiveFunction.tsx | 12 - src/app/AdvancedUser/TrialSettings.tsx | 12 - .../User_Analytics/AnalyticsDeployment.tsx | 77 ----- .../User_Analytics/AnalyticsNamespace.tsx | 58 ---- .../User_Analytics/AnalyticsObjectType.tsx | 51 --- .../ContainerInfo/AnalyticsContainers.tsx | 170 ---------- .../ContainerInfo/BalanceTable.tsx | 90 ------ .../ContainerInfo/Container1Details.tsx | 229 ------------- .../ContainerInfo/Container2Details.tsx | 222 ------------- .../ContainerInfo/CostTable.tsx | 162 ---------- .../ContainerInfo/PerformanceTable.tsx | 66 ---- .../ContainerInfo/VerticalSlider.tsx | 63 ---- .../User_Analytics/DeploymentsTreeView.tsx | 22 -- .../User_Analytics/ExperimentTable.tsx | 172 ---------- .../User_Analytics/UserAnalytics.tsx | 101 ------ src/app/AppLayout/AppLayout.tsx | 55 ++-- src/app/ContextStore/EnvState.tsx | 17 - src/app/ContextStore/nodeContext.ts | 5 - src/app/Documentation/CommunityCall.tsx | 106 ------ src/app/Documentation/FAQs.tsx | 64 ---- src/app/Documentation/Glossary.tsx | 27 -- src/app/Documentation/InstallationGuide.tsx | 30 -- src/app/Documentation/Installationguide.md | 114 ------- .../Documentation/SubmitButtonSearchInput.tsx | 17 - src/app/Documentation/autotune-modules.md | 31 -- src/app/Documentation/faq.json | 32 -- src/app/ExperimentStatus/ExperimentStatus.tsx | 124 ------- .../MoreExperimentStuff/ExperimentDetails.tsx | 37 --- .../MoreExperimentStuff/Final_equation.tsx | 25 -- .../Resource_usage_details.tsx | 304 ------------------ .../Response_time_details.tsx | 304 ------------------ .../Throughput_details.tsx | 291 ----------------- .../jsonFiles/listAutotuneTunables.json | 74 ----- src/app/FinishedStep/FinishedStep.tsx | 54 ---- src/app/Footer/Footer.tsx | 111 ------- src/app/Footer/FooterTraditional.scss | 52 --- .../GenerateYaml/CodeEditorWithActions.tsx | 110 ------- src/app/GenerateYaml/ab.tsx | 35 -- src/app/LocalMonitoring/DatasourceTable.tsx | 99 ------ src/app/RunExperiment/DefineGoals.tsx | 57 ---- src/app/RunExperiment/DeploymentsDropdown.tsx | 65 ---- src/app/RunExperiment/NameSpaceDropDown.tsx | 60 ---- .../AdvancedSection.tsx | 123 ------- .../PerfComponents/Accordions.tsx | 24 -- .../PerfComponents/NumberValueComponent.tsx | 67 ---- .../PerfComponents/UnitsOfTime.tsx | 24 -- .../PerformanceProfiles.tsx | 84 ----- .../RegularSection.tsx | 112 ------- src/app/RunExperiment/RE.tsx | 86 ----- src/app/RunExperiment/RunExperiment.tsx | 170 ---------- src/app/routes.tsx | 99 +----- src/index.tsx | 4 +- tsconfig.json | 1 - 57 files changed, 28 insertions(+), 4736 deletions(-) delete mode 100755 deploy.sh delete mode 100644 env.ts delete mode 100644 src/app/AdvancedUser/LayerDefination.tsx delete mode 100644 src/app/AdvancedUser/ObjectiveFunction.tsx delete mode 100644 src/app/AdvancedUser/TrialSettings.tsx delete mode 100644 src/app/Analytics/User_Analytics/AnalyticsDeployment.tsx delete mode 100644 src/app/Analytics/User_Analytics/AnalyticsNamespace.tsx delete mode 100644 src/app/Analytics/User_Analytics/AnalyticsObjectType.tsx delete mode 100644 src/app/Analytics/User_Analytics/ContainerInfo/AnalyticsContainers.tsx delete mode 100644 src/app/Analytics/User_Analytics/ContainerInfo/BalanceTable.tsx delete mode 100644 src/app/Analytics/User_Analytics/ContainerInfo/Container1Details.tsx delete mode 100644 src/app/Analytics/User_Analytics/ContainerInfo/Container2Details.tsx delete mode 100644 src/app/Analytics/User_Analytics/ContainerInfo/CostTable.tsx delete mode 100644 src/app/Analytics/User_Analytics/ContainerInfo/PerformanceTable.tsx delete mode 100644 src/app/Analytics/User_Analytics/ContainerInfo/VerticalSlider.tsx delete mode 100644 src/app/Analytics/User_Analytics/DeploymentsTreeView.tsx delete mode 100644 src/app/Analytics/User_Analytics/ExperimentTable.tsx delete mode 100644 src/app/Analytics/User_Analytics/UserAnalytics.tsx delete mode 100644 src/app/ContextStore/EnvState.tsx delete mode 100644 src/app/ContextStore/nodeContext.ts delete mode 100644 src/app/Documentation/CommunityCall.tsx delete mode 100644 src/app/Documentation/FAQs.tsx delete mode 100644 src/app/Documentation/Glossary.tsx delete mode 100644 src/app/Documentation/InstallationGuide.tsx delete mode 100644 src/app/Documentation/Installationguide.md delete mode 100644 src/app/Documentation/SubmitButtonSearchInput.tsx delete mode 100644 src/app/Documentation/autotune-modules.md delete mode 100644 src/app/Documentation/faq.json delete mode 100644 src/app/ExperimentStatus/ExperimentStatus.tsx delete mode 100644 src/app/ExperimentStatus/MoreExperimentStuff/ExperimentDetails.tsx delete mode 100644 src/app/ExperimentStatus/MoreExperimentStuff/Final_equation.tsx delete mode 100644 src/app/ExperimentStatus/MoreExperimentStuff/Resource_usage_details.tsx delete mode 100644 src/app/ExperimentStatus/MoreExperimentStuff/Response_time_details.tsx delete mode 100644 src/app/ExperimentStatus/MoreExperimentStuff/Throughput_details.tsx delete mode 100644 src/app/ExperimentStatus/jsonFiles/listAutotuneTunables.json delete mode 100644 src/app/FinishedStep/FinishedStep.tsx delete mode 100644 src/app/Footer/Footer.tsx delete mode 100644 src/app/Footer/FooterTraditional.scss delete mode 100644 src/app/GenerateYaml/CodeEditorWithActions.tsx delete mode 100644 src/app/GenerateYaml/ab.tsx delete mode 100644 src/app/LocalMonitoring/DatasourceTable.tsx delete mode 100644 src/app/RunExperiment/DefineGoals.tsx delete mode 100644 src/app/RunExperiment/DeploymentsDropdown.tsx delete mode 100644 src/app/RunExperiment/NameSpaceDropDown.tsx delete mode 100644 src/app/RunExperiment/PerformanceProfilePages/AdvancedSection.tsx delete mode 100644 src/app/RunExperiment/PerformanceProfilePages/PerfComponents/Accordions.tsx delete mode 100644 src/app/RunExperiment/PerformanceProfilePages/PerfComponents/NumberValueComponent.tsx delete mode 100644 src/app/RunExperiment/PerformanceProfilePages/PerfComponents/UnitsOfTime.tsx delete mode 100644 src/app/RunExperiment/PerformanceProfilePages/PerformanceProfiles.tsx delete mode 100644 src/app/RunExperiment/PerformanceProfilePages/RegularSection.tsx delete mode 100644 src/app/RunExperiment/RE.tsx delete mode 100644 src/app/RunExperiment/RunExperiment.tsx diff --git a/deploy.sh b/deploy.sh deleted file mode 100755 index 882ae085..00000000 --- a/deploy.sh +++ /dev/null @@ -1,121 +0,0 @@ -#!/bin/bash - -export KRUIZE_UI_IMAGE="quay.io/kruize/kruize-ui:0.0.1" -KRUIZE_UI_MANIFEST_FILE="kruize-ui-nginx-setup.yaml" -MANIFEST_TEMPLATE="./manifests/templates/kruize-ui-nginx-setup-template.yaml" - -launch_to_kube_with_image=false -is_image_set=false -image_name="" - -POD_NAME="kruize-ui-nginx-pod" -SERVICE_NAME="kruize-ui-nginx-service" -NAMESPACE="monitoring" - -function start_gui_dev_mode() { - if ! command -v npm - then - echo "npm is NOT Installed on your machine." - else - source getotps.sh - npm run build - npm run start - fi -} - -function start_gui_docker_mode() { - npm run build -} - -# Check the status of a pod -function check_pod_status() { - local status=$(kubectl get pods -n "$NAMESPACE" "$POD_NAME" -o jsonpath='{.status.phase}') - - if [[ "${status}" == "Running" ]]; then - echo "Pod ${POD_NAME} is running." - else - echo "Pod ${POD_NAME} is not running. Status: ${status}. Exiting" - exit 1 - fi -} - -function launch_gui_kube_mode() { - if [ -f "./manifests/dynamic/kruize-ui-nginx-setup.yaml" ]; then - # Remove existing deployments - kubectl delete -f ./manifests/dynamic/ - fi - - if ${is_image_set}; then - unset KRUIZE_UI_IMAGE - export KRUIZE_UI_IMAGE="${image_name}" - fi - - export KRUIZE_UI_NAMESPACE="${NAMESPACE}" - - envsubst < ./manifests/templates/kruize-ui-nginx-setup-template.yaml > "./manifests/dynamic/${KRUIZE_UI_MANIFEST_FILE}" - - echo ${manifest_file_content} - - # Re-Launch the UI deployment - kubectl apply -f ./manifests/dynamic/ - - # Sleep for 10 secs for UI to come up - echo -n "Waiting for 10 secs for UI pod to start " - for ((i = 0; i < 10; i++)); do - echo -n "." - sleep 1 - done - - echo " Done." - echo "Checking pod status" - check_pod_status - - port=$(kubectl -n ${NAMESPACE} get services | grep "${SERVICE_NAME}" | awk '{print $5}' | cut -d':' -f2 | cut -d'/' -f1) - - echo "Kruize UI is running on port: ${port}" -} - - - -while getopts ":dcki:e:" gopts; - do - case ${gopts} in - d) - start_gui_dev_mode - echo "development mode" - ;; - c) - start_gui_docker_mode - echo "docker mode" - ;; - k) - launch_to_kube_with_image=true - echo "Launching to Kubernetes" - ;; - i) - is_image_set=true - image_name="${OPTARG}" - ;; - e) - case "${OPTARG}" in - minikube) - NAMESPACE="monitoring" - ;; - openshift) - NAMESPACE="openshift-tuning" - ;; - *) - echo "Invalid value for option -e. Use 'minikube' or 'openshift'." - exit 1 - ;; - esac - ;; - \?) - echo "exit, use d, c, or k (with i for passing image) options" - ;; - esac - done - -if ${launch_to_kube_with_image}; then - launch_gui_kube_mode -fi \ No newline at end of file diff --git a/env.ts b/env.ts deleted file mode 100644 index 53e71944..00000000 --- a/env.ts +++ /dev/null @@ -1,21 +0,0 @@ -export function get_ip() { - if (process.env.CLUSTER_IP) { - const ip = process.env["CLUSTER_IP"]; - console.debug("MINIKUBE IP is " + process.env["CLUSTER_IP"]); - return ip; - } else { - console.debug("No set!"); - return null; - } - } - export function get_port() { - if (process.env.AUTOTUNE_PORT) { - const port = process.env["AUTOTUNE_PORT"]; - console.debug("autotun is on! " + process.env["AUTOTUNE_PORT"]); - return port; - } else { - console.debug("No set!"); - return null; - } - } - \ No newline at end of file diff --git a/src/app/About/About.tsx b/src/app/About/About.tsx index 1352986b..8c98b6d5 100644 --- a/src/app/About/About.tsx +++ b/src/app/About/About.tsx @@ -1,7 +1,6 @@ import * as React from 'react'; -import { Link } from 'react-router-dom'; import { PageSection, PageSectionVariants, Text, TextVariants, TextContent } from '@patternfly/react-core'; -import { RunExperiment } from '@app/RunExperiment/RunExperiment'; + const About = () => ( @@ -9,7 +8,6 @@ const About = () => ( About Kruize -
Kruize is an Autonomous Performance Tuning Tool for Kubernetes. Kruize accepts a user provided Service Level @@ -24,11 +22,6 @@ const About = () => ( a "better" one than what is currently deployed.
- {/* - - - Hiding from the user - */}
); diff --git a/src/app/AdvancedUser/LayerDefination.tsx b/src/app/AdvancedUser/LayerDefination.tsx deleted file mode 100644 index 409c7425..00000000 --- a/src/app/AdvancedUser/LayerDefination.tsx +++ /dev/null @@ -1,12 +0,0 @@ -import * as React from 'react'; -import { PageSection, Title } from '@patternfly/react-core'; - -const LayerDefination = () => ( - - - LayerDefination Autotune Page! - - -); - -export { LayerDefination }; diff --git a/src/app/AdvancedUser/ObjectiveFunction.tsx b/src/app/AdvancedUser/ObjectiveFunction.tsx deleted file mode 100644 index b0ddb811..00000000 --- a/src/app/AdvancedUser/ObjectiveFunction.tsx +++ /dev/null @@ -1,12 +0,0 @@ -import * as React from 'react'; -import { PageSection, Title } from '@patternfly/react-core'; - -const ObjectiveFunction = () => ( - - - ObjectiveFunction Autotune Page! - - -); - -export { ObjectiveFunction }; diff --git a/src/app/AdvancedUser/TrialSettings.tsx b/src/app/AdvancedUser/TrialSettings.tsx deleted file mode 100644 index e3376eab..00000000 --- a/src/app/AdvancedUser/TrialSettings.tsx +++ /dev/null @@ -1,12 +0,0 @@ -import * as React from 'react'; -import { PageSection, Title } from '@patternfly/react-core'; - -const TrialSettings = () => ( - - - TrialSettings Autotune Page! - - -); - -export { TrialSettings }; diff --git a/src/app/Analytics/User_Analytics/AnalyticsDeployment.tsx b/src/app/Analytics/User_Analytics/AnalyticsDeployment.tsx deleted file mode 100644 index e7ba1ed7..00000000 --- a/src/app/Analytics/User_Analytics/AnalyticsDeployment.tsx +++ /dev/null @@ -1,77 +0,0 @@ -import React, { useState, useEffect, useContext } from 'react'; -import { - FormFieldGroup, - -} from '@patternfly/react-core'; - -import nodeContext from '@app/ContextStore/nodeContext'; - - -const AnalyticsDeployment = () => { - const [deployments, setDeployments] = useState([]); - const [selected, setSelected] = useState(sessionStorage.getItem('Deployment Value')); - const [isopen, setIsopen] = useState(false); - const Context = useContext(nodeContext); - const ip = Context['cluster']; - const port = Context['autotune']; - const namesp = sessionStorage.getItem('Namespace Value'); - const deployments_url = 'http://' + ip + ':' + port + '/query/listDeployments?namespace=' + namesp; - - useEffect(() => { - setSelected(sessionStorage.getItem('Deployment Value')); - - fetch(deployments_url) - .then((res) => res.json()) - .then((res) => setDeployments(res.data.deployments)); - }, [selected]); - - useEffect(() => { - sessionStorage.setItem('Deployment Value', ''); - setSelected('not found'); - }, [namesp]); - - const onSelect = (event, selection, isPlaceholder) => { - setSelected(selection); - setIsopen(false); - sessionStorage.setItem('Deployment Value', selection); - var payload = { - deployment: selection - }; - }; - return ( - <> - {deployments.length === 0 ? ( -

No deployments found

- ) : ( - deployments.map((option, index) => ( - - // } - > - {option} - - )) - )} - {/* */} - - ); -}; - -export { AnalyticsDeployment }; diff --git a/src/app/Analytics/User_Analytics/AnalyticsNamespace.tsx b/src/app/Analytics/User_Analytics/AnalyticsNamespace.tsx deleted file mode 100644 index 7ed980a5..00000000 --- a/src/app/Analytics/User_Analytics/AnalyticsNamespace.tsx +++ /dev/null @@ -1,58 +0,0 @@ -import React, { useState, useEffect, useContext } from 'react'; -import { - Select, - SelectOption, - SelectVariant -} from '@patternfly/react-core/deprecated'; -import nodeContext from '@app/ContextStore/nodeContext'; -import { ExperimentTable } from './ExperimentTable'; - -const AnalyticsNamespace = () => { - const [namespaces, setNamespaces] = useState([]); - const [selected, setSelected] = useState(''); - const [isopen, setIsopen] = useState(false); - const Context = useContext(nodeContext); - const ip = Context['cluster']; - const port = Context['autotune']; - const namespace_url = 'http://' + ip + ':' + port + '/query/listNamespaces'; - - useEffect(() => { - if (ip != 'undefined' && port != 'undefined') { - // setSelected(sessionStorage.getItem('Namespace Value')); - fetch(namespace_url) - .then((res) => res.json()) - .then((res) => setNamespaces(res.data.namespaces)); - } - }, [selected]); - - const onSelect = (event, selection, isPlaceholder) => { - setSelected(selection); - setIsopen(false); - sessionStorage.setItem('Namespace Value', selection); - var payload = { - namespace: selection - }; - }; - - return ( - <> - - {selected != '' ? : <>} - - ); -}; - -export { AnalyticsNamespace }; diff --git a/src/app/Analytics/User_Analytics/AnalyticsObjectType.tsx b/src/app/Analytics/User_Analytics/AnalyticsObjectType.tsx deleted file mode 100644 index cf737a83..00000000 --- a/src/app/Analytics/User_Analytics/AnalyticsObjectType.tsx +++ /dev/null @@ -1,51 +0,0 @@ -import React, { useState, useEffect, useContext } from 'react'; -import { - Select, - SelectOption, - SelectVariant -} from '@patternfly/react-core/deprecated'; -import nodeContext from '@app/ContextStore/nodeContext'; -import FilterIcon from '@patternfly/react-icons/dist/esm/icons/filter-icon'; - -const AnalyticsObjectType = () => { - const [objectType, setObjectType] = useState([]); - const [selected, setSelected] = useState(sessionStorage.getItem('Kubernetes Object Type Value')); - const [isopen, setIsopen] = useState(false); - - const onSelect = (event, selection, isPlaceholder) => { - setSelected(selection); - setIsopen(false); - sessionStorage.setItem('Kubernetes Object Type Value', selection); - var payload = { - namespace: selection - }; - }; - - const options = [ - , - , - , - , - , - - ]; - return ( - <> - - - ); -}; - -export { AnalyticsObjectType }; diff --git a/src/app/Analytics/User_Analytics/ContainerInfo/AnalyticsContainers.tsx b/src/app/Analytics/User_Analytics/ContainerInfo/AnalyticsContainers.tsx deleted file mode 100644 index 050cb340..00000000 --- a/src/app/Analytics/User_Analytics/ContainerInfo/AnalyticsContainers.tsx +++ /dev/null @@ -1,170 +0,0 @@ -import React, { useState } from 'react'; -import { - Grid, - GridItem, - Tabs, - Tab, - TabTitleText, - TabTitleIcon, - TextContent, - Text, - TextVariants -} from '@patternfly/react-core'; -import { CubesIcon } from '@patternfly/react-icons/dist/esm/icons/cubes-icon'; -import { CubeIcon, OutlinedClockIcon, ThLargeIcon } from '@patternfly/react-icons'; -import { Container1Details } from './Container1Details'; -import { Container2Details } from './Container2Details'; -const AnalyticsContainers = () => { - const [activeTabKey1, setActiveTabKey1] = React.useState(0); - const [activeTabKey2, setActiveTabKey2] = React.useState(0); - const [isBox, setIsBox] = React.useState(false); - - // Toggle currently active primary tab - const handleTabClickFirst = ( - event: React.MouseEvent | React.KeyboardEvent | MouseEvent, - tabIndex: string | number - ) => { - setActiveTabKey1(tabIndex); - }; - - // Toggle currently active secondary tab - const handleTabClickSecond = ( - event: React.MouseEvent | React.KeyboardEvent | MouseEvent, - tabIndex: string | number - ) => { - setActiveTabKey2(tabIndex); - }; - - const toggleBox = (checked: boolean) => { - setIsBox(checked); - }; - - return ( - - - - - - - {' '} - - - Duration Based Recommendations - - {' '} - - - } - aria-label="duration based" - > - - Containers - - - - - - - {' '} - tfb-server-1 - - } - > - - - - - - {' '} - tfb-server-0 - - } - > - Detected Issues
- Suggestions
- Detailed Recommendation Table -
-
-
-
-
- - - - - {' '} - - - Profile Based Recommendations - - {' '} - - - } - > - - Containers - - - - - - - {' '} - tfb-server-1 - - } - > - - - - - - {' '} - tfb-server-0 - - } - > - Detected Issues
- Suggestions
- Detailed Recommendation Table -
-
-
-
-
- ); -}; - -export { AnalyticsContainers }; diff --git a/src/app/Analytics/User_Analytics/ContainerInfo/BalanceTable.tsx b/src/app/Analytics/User_Analytics/ContainerInfo/BalanceTable.tsx deleted file mode 100644 index d6ee14a0..00000000 --- a/src/app/Analytics/User_Analytics/ContainerInfo/BalanceTable.tsx +++ /dev/null @@ -1,90 +0,0 @@ -import React from 'react'; - -import { Table /* data-codemods */, Thead, Tr, Th, Tbody, Td } from '@patternfly/react-table'; - -interface Repository { - monitoringStartTime: string | null; - monitoringEndTime: string | null; - podCount: string | null; - confidenceLevel: string | null; - capacityConfigmmr: string | null; - capacityConfigcpu: string | null; -} - -type ExampleType = 'default' | 'compact' | 'compactBorderless'; - -const BalanceTable = () => { - // In real usage, this data would come from some external source like an API via props. - const recommendations: Repository[] = [ - { - monitoringStartTime: 'jan 01, 2023, 5:53:40 PM', - monitoringEndTime: 'jan 02, 2023, 12:24:04 AM', - podCount: '0', - confidenceLevel: '0', - capacityConfigmmr: '4 cores', - capacityConfigcpu: '100 MiB' - }, - { - monitoringStartTime: 'jan 01, 2023, 5:53:40 PM', - monitoringEndTime: 'jan 02, 2023, 12:24:04 AM', - podCount: '0', - confidenceLevel: '0', - capacityConfigmmr: '4 cores', - capacityConfigcpu: '100 MiB' - }, - { - monitoringStartTime: 'jan 01, 2023, 5:53:40 PM', - monitoringEndTime: 'jan 02, 2023, 12:24:04 AM', - podCount: '0', - confidenceLevel: '0', - capacityConfigmmr: '4 cores', - capacityConfigcpu: '100 MiB' - }, - { - monitoringStartTime: 'jan 01, 2023, 5:53:40 PM', - monitoringEndTime: 'jan 02, 2023, 12:24:04 AM', - podCount: '0', - confidenceLevel: '0', - capacityConfigmmr: '4 cores', - capacityConfigcpu: '100 MiB' - } - ]; - - const columnNames = { - monitoringStartTime: 'Monitoring Start Time', - monitoringEndTime: 'Monitoring End Time', - podCount: 'Pods Count', - confidenceLevel: 'Confidence Level', - capacityConfigmmr: 'Memory Request', - capacityConfigcpu: 'CPU Request' - }; - - return ( - - - - - - - - - - - - - {recommendations.map((recommendation, index) => ( - - - - - - - - - ))} - -
{columnNames.monitoringStartTime}{columnNames.monitoringEndTime}{columnNames.capacityConfigcpu}{columnNames.capacityConfigmmr}{columnNames.podCount}{columnNames.confidenceLevel}
{recommendation.monitoringStartTime}{recommendation.monitoringEndTime}{recommendation.capacityConfigmmr}{recommendation.capacityConfigcpu}{recommendation.podCount}{recommendation.confidenceLevel}
- ); -}; - -export { BalanceTable }; diff --git a/src/app/Analytics/User_Analytics/ContainerInfo/Container1Details.tsx b/src/app/Analytics/User_Analytics/ContainerInfo/Container1Details.tsx deleted file mode 100644 index befb1839..00000000 --- a/src/app/Analytics/User_Analytics/ContainerInfo/Container1Details.tsx +++ /dev/null @@ -1,229 +0,0 @@ -import React from 'react'; -import { - Accordion, - AccordionItem, - AccordionContent, - AccordionToggle, - Text, - TextVariants, - TextContent, - NotificationDrawerListItem, - NotificationDrawerListItemBody, - NotificationDrawerListItemHeader, - NotificationDrawer, - PageSection, - PageSectionVariants, - Divider, - Icon -} from '@patternfly/react-core'; -import { CostTable } from './CostTable'; -import { VerticalSlider } from './VerticalSlider'; -import { BalanceTable } from './BalanceTable'; -import { PerformanceTable } from './PerformanceTable'; -import { WrenchIcon } from '@patternfly/react-icons'; - -const Container1Details = () => { - const [expanded, setExpanded] = React.useState(''); - - const onToggle = (id: string) => { - if (id === expanded) { - setExpanded(''); - } else { - setExpanded(id); - } - }; - const [expanded2, setExpanded2] = React.useState(''); - - const onTogglee = (id: string) => { - if (id === expanded2) { - setExpanded2(''); - } else { - setExpanded2(id); - } - }; - const detailedRecommendationsTable = () => { - return ( - - - { - onToggle('ex-toggle1'); - }} - isExpanded={expanded === 'ex-toggle1'} - id="ex-toggle1" - > - - Short Term - - - - - - - - - { - onToggle('ex-toggle2'); - }} - isExpanded={expanded === 'ex-toggle2'} - id="ex-toggle2" - > - - Medium Term - - - - - - - - - { - onToggle('ex-toggle3'); - }} - isExpanded={expanded === 'ex-toggle3'} - id="ex-toggle3" - > - - Long Term - - - - - - - - ); - }; - - const detectedIssues = () => { - return ( - - - - Recommendation valid for 24hrs - - - - CPU requests not set - - - - Memory requests not set - - - ); - }; - const suggestions = () => { - return ( - - - { - onTogglee('ex-toggle1'); - }} - isExpanded={expanded2 === 'ex-toggle1'} - id="ex-toggle1" - > - - Short Term - - - - - Decrease Memory Request by 21.2 MiB - Decrease CPU Request by 2.2 cores - - - - - - { - onTogglee('ex-toggle2'); - }} - isExpanded={expanded2 === 'ex-toggle2'} - id="ex-toggle2" - > - - Medium Term - - - - - Decrease Memory Request by 21.2 MiB - Decrease CPU Request by 2.2 cores - - - - - - { - onTogglee('ex-toggle3'); - }} - isExpanded={expanded2 === 'ex-toggle3'} - id="ex-toggle3" - > - - Long Term - - - - - Decrease Memory Request by 21.2 MiB - Decrease CPU Request by 2.2 cores - - - - - ); - }; - return ( - - - Detected Issues - -
- {detectedIssues()} - -
- - - - - {' '} - Suggestions - - -
- {suggestions()} -
- -
- - Detailed Recommendations Table - -
- {detailedRecommendationsTable()} - -
-
- ); -}; - -export { Container1Details }; diff --git a/src/app/Analytics/User_Analytics/ContainerInfo/Container2Details.tsx b/src/app/Analytics/User_Analytics/ContainerInfo/Container2Details.tsx deleted file mode 100644 index 667f7664..00000000 --- a/src/app/Analytics/User_Analytics/ContainerInfo/Container2Details.tsx +++ /dev/null @@ -1,222 +0,0 @@ -import React from 'react'; -import { - Accordion, - AccordionItem, - AccordionContent, - AccordionToggle, - Text, - TextVariants, - TextContent, - NotificationDrawerListItem, - NotificationDrawerListItemBody, - NotificationDrawerListItemHeader, - NotificationDrawer, - PageSection, - PageSectionVariants, - Divider -} from '@patternfly/react-core'; -import { CostTable } from './CostTable'; -import { VerticalSlider } from './VerticalSlider'; -import { BalanceTable } from './BalanceTable'; -import { PerformanceTable } from './PerformanceTable'; - -const Container2Details = () => { - const [expanded, setExpanded] = React.useState(''); - - const onToggle = (id: string) => { - if (id === expanded) { - setExpanded(''); - } else { - setExpanded(id); - } - }; - const [expanded2, setExpanded2] = React.useState(''); - - const onTogglee = (id: string) => { - if (id === expanded2) { - setExpanded2(''); - } else { - setExpanded2(id); - } - }; - const detailedRecommendationsTable = () => { - return ( - - - { - onToggle('ex-toggle1'); - }} - isExpanded={expanded === 'ex-toggle1'} - id="ex-toggle1" - > - - Cost - - - - - - - - - { - onToggle('ex-toggle2'); - }} - isExpanded={expanded === 'ex-toggle2'} - id="ex-toggle2" - > - - Balance - - - - - - - - - { - onToggle('ex-toggle3'); - }} - isExpanded={expanded === 'ex-toggle3'} - id="ex-toggle3" - > - - Performance - - - - - - - - ); - }; - - const detectedIssues = () => { - return ( - - - - Recommendation valid for 24hrs - - - - CPU requests not set - - - - Memory requests not set - - - ); - }; - const suggestions = () => { - return ( - - - { - onTogglee('ex-toggle1'); - }} - isExpanded={expanded2 === 'ex-toggle1'} - id="ex-toggle1" - > - - Cost - - - - - Decrease Memory Request by 21.2 MiB - Decrease CPU Request by 2.2 cores - - - - - - { - onTogglee('ex-toggle2'); - }} - isExpanded={expanded2 === 'ex-toggle2'} - id="ex-toggle2" - > - - Balance - - - - - Decrease Memory Request by 21.2 MiB - Decrease CPU Request by 2.2 cores - - - - - - { - onTogglee('ex-toggle3'); - }} - isExpanded={expanded2 === 'ex-toggle3'} - id="ex-toggle3" - > - - Performance - - - - - Decrease Memory Request by 21.2 MiB - Decrease CPU Request by 2.2 cores - - - - - ); - }; - return ( - - - Detected Issues - -
- {detectedIssues()} - -
- - Suggestions - -
- {suggestions()} -
- -
- - Detailed Recommendations Table - -
- {detailedRecommendationsTable()} - -
-
- ); -}; - -export { Container2Details }; diff --git a/src/app/Analytics/User_Analytics/ContainerInfo/CostTable.tsx b/src/app/Analytics/User_Analytics/ContainerInfo/CostTable.tsx deleted file mode 100644 index bf3fc23b..00000000 --- a/src/app/Analytics/User_Analytics/ContainerInfo/CostTable.tsx +++ /dev/null @@ -1,162 +0,0 @@ -import React from 'react'; -import { Grid, GridItem, } from '@patternfly/react-core'; -import { Table /* data-codemods */, Thead, Tr, Th, Tbody, Td, } from '@patternfly/react-table'; -import { VerticalSlider } from './VerticalSlider'; - -interface Repository { - monitoringStartTime: string | null; - monitoringEndTime: string | null; - podCount: string | null; - confidenceLevel: string | null; - capacityConfigmmr: string | null; - capacityConfigcpu: string | null; -} - -type ExampleType = 'default' | 'compact' | 'compactBorderless'; - -const CostTable = () => { - // In real usage, this data would come from some external source like an API via props. - const recommendations: Repository[] = [ - { - monitoringStartTime: 'jan 01, 2023, 5:53:40 PM', - monitoringEndTime: 'jan 02, 2023, 12:24:04 AM', - podCount: '4 cores', - confidenceLevel: '100 MiB', - capacityConfigmmr: '0', - capacityConfigcpu: '0' - }, - { - monitoringStartTime: 'jan 01, 2023, 5:53:40 PM', - monitoringEndTime: 'jan 02, 2023, 12:24:04 AM', - podCount: '4 cores', - confidenceLevel: '100 MiB', - capacityConfigmmr: '0', - capacityConfigcpu: '0' - }, - { - monitoringStartTime: 'jan 01, 2023, 5:53:40 PM', - monitoringEndTime: 'jan 02, 2023, 12:24:04 AM', - podCount: '4 cores', - confidenceLevel: '100 MiB', - capacityConfigmmr: '0', - capacityConfigcpu: '0' - }, - { - monitoringStartTime: 'jan 01, 2023, 5:53:40 PM', - monitoringEndTime: 'jan 02, 2023, 12:24:04 AM', - podCount: '4 cores', - confidenceLevel: '100 MiB', - capacityConfigmmr: '0', - capacityConfigcpu: '0' - }, - { - monitoringStartTime: 'jan 01, 2023, 5:53:40 PM', - monitoringEndTime: 'jan 02, 2023, 12:24:04 AM', - podCount: '4 cores', - confidenceLevel: '100 MiB', - capacityConfigmmr: '0', - capacityConfigcpu: '0' - }, - { - monitoringStartTime: 'jan 01, 2023, 5:53:40 PM', - monitoringEndTime: 'jan 02, 2023, 12:24:04 AM', - podCount: '4 cores', - confidenceLevel: '100 MiB', - capacityConfigmmr: '0', - capacityConfigcpu: '0' - }, - { - monitoringStartTime: 'jan 01, 2023, 5:53:40 PM', - monitoringEndTime: 'jan 02, 2023, 12:24:04 AM', - podCount: '4 cores', - confidenceLevel: '100 MiB', - capacityConfigmmr: '0', - capacityConfigcpu: '0' - }, - { - monitoringStartTime: 'jan 01, 2023, 5:53:40 PM', - monitoringEndTime: 'jan 02, 2023, 12:24:04 AM', - podCount: '4 cores', - confidenceLevel: '100 MiB', - capacityConfigmmr: '0', - capacityConfigcpu: '0' - }, - { - monitoringStartTime: 'jan 01, 2023, 5:53:40 PM', - monitoringEndTime: 'jan 02, 2023, 12:24:04 AM', - podCount: '4 cores', - confidenceLevel: '100 MiB', - capacityConfigmmr: '0', - capacityConfigcpu: '0' - }, - { - monitoringStartTime: 'jan 01, 2023, 5:53:40 PM', - monitoringEndTime: 'jan 02, 2023, 12:24:04 AM', - podCount: '4 cores', - confidenceLevel: '100 MiB', - capacityConfigmmr: '0', - capacityConfigcpu: '0' - }, - { - monitoringStartTime: 'jan 01, 2023, 5:53:40 PM', - monitoringEndTime: 'jan 02, 2023, 12:24:04 AM', - podCount: '4 cores', - confidenceLevel: '100 MiB', - capacityConfigmmr: '0', - capacityConfigcpu: '0' - }, - { - monitoringStartTime: 'jan 01, 2023, 5:53:40 PM', - monitoringEndTime: 'jan 02, 2023, 12:24:04 AM', - podCount: '4 cores', - confidenceLevel: '100 MiB', - capacityConfigmmr: '0', - capacityConfigcpu: '0' - } - ]; - - const columnNames = { - monitoringStartTime: 'Monitoring Start Time', - monitoringEndTime: 'Monitoring End Time', - podCount: 'Pods Count', - confidenceLevel: 'Confidence Level', - capacityConfigmmr: 'Memory Request', - capacityConfigcpu: 'CPU Request' - }; - - return ( - - - - - - - - - - - - - - - - - - {recommendations.map((recommendation, index) => ( - - - - - - - - - ))} - -
{columnNames.monitoringStartTime}{columnNames.monitoringEndTime}{columnNames.capacityConfigcpu}{columnNames.capacityConfigmmr}{columnNames.podCount}{columnNames.confidenceLevel}
{recommendation.monitoringStartTime}{recommendation.monitoringEndTime}{recommendation.podCount}{recommendation.confidenceLevel}{recommendation.capacityConfigmmr}{recommendation.capacityConfigcpu}
-
-
- ); -}; - -export { CostTable }; diff --git a/src/app/Analytics/User_Analytics/ContainerInfo/PerformanceTable.tsx b/src/app/Analytics/User_Analytics/ContainerInfo/PerformanceTable.tsx deleted file mode 100644 index f623cb3b..00000000 --- a/src/app/Analytics/User_Analytics/ContainerInfo/PerformanceTable.tsx +++ /dev/null @@ -1,66 +0,0 @@ -import React from 'react'; - -import { Table /* data-codemods */, Thead, Tr, Th, Tbody, Td } from '@patternfly/react-table'; - -interface Repository { - monitoringStartTime: string | null; - monitoringEndTime: string | null; - podCount: string | null; - confidenceLevel: string | null; - capacityConfigmmr: string | null; - capacityConfigcpu: string | null; -} - -type ExampleType = 'default' | 'compact' | 'compactBorderless'; - -const PerformanceTable = () => { - // In real usage, this data would come from some external source like an API via props. - const recommendations: Repository[] = [ - { - monitoringStartTime: 'jan 01, 2023, 5:53:40 PM', - monitoringEndTime: 'jan 15, 2023, 12:24:04 AM', - podCount: '4 cores', - confidenceLevel: '100 MiB', - capacityConfigmmr: '0', - capacityConfigcpu: '0' - } - ]; - - const columnNames = { - monitoringStartTime: 'Monitoring Start Time', - monitoringEndTime: 'Monitoring End Time', - podCount: 'Pods Count', - confidenceLevel: 'Confidence Level', - capacityConfigmmr: 'Memory Request', - capacityConfigcpu: 'CPU Request' - }; - - return ( - - - - - - - - - - - - - {recommendations.map((recommendation) => ( - - - - - - - - - ))} - -
{columnNames.monitoringStartTime}{columnNames.monitoringEndTime}{columnNames.capacityConfigcpu}{columnNames.capacityConfigmmr}{columnNames.podCount}{columnNames.confidenceLevel}
{recommendation.monitoringStartTime}{recommendation.monitoringEndTime}{recommendation.podCount}{recommendation.confidenceLevel}{recommendation.capacityConfigmmr}{recommendation.capacityConfigcpu}
- ); -}; - -export { PerformanceTable }; diff --git a/src/app/Analytics/User_Analytics/ContainerInfo/VerticalSlider.tsx b/src/app/Analytics/User_Analytics/ContainerInfo/VerticalSlider.tsx deleted file mode 100644 index 90de7fc8..00000000 --- a/src/app/Analytics/User_Analytics/ContainerInfo/VerticalSlider.tsx +++ /dev/null @@ -1,63 +0,0 @@ -import React, { useState } from 'react'; -import { Slider, Typography } from '@material-ui/core'; -import { Text, TextContent, Divider, TextVariants } from '@patternfly/react-core'; - -const VerticalSlider = () => { - const [value, setValue] = useState(30); - - const changeValue = (event, value) => { - setValue(value); - }; - const getText = (valu) => `${value}`; - - const customMarks = [ - { - value: 10, - label: '10' - }, - { - value: 20, - label: '20' - }, - { - value: 30, - label: '30' - }, - { - value: 40, - label: '40' - }, - { - value: 50, - label: '50' - }, - { - value: 100, - label: '100' - } - ]; - - return ( - <> - - - - - No. of Recommen dations - - - ); -}; - -export { VerticalSlider }; diff --git a/src/app/Analytics/User_Analytics/DeploymentsTreeView.tsx b/src/app/Analytics/User_Analytics/DeploymentsTreeView.tsx deleted file mode 100644 index bb3ed4b2..00000000 --- a/src/app/Analytics/User_Analytics/DeploymentsTreeView.tsx +++ /dev/null @@ -1,22 +0,0 @@ -import React from 'react'; -import { - FormFieldGroupExpandable, - FormFieldGroupHeader, - -} from '@patternfly/react-core'; - -import { AnalyticsDeployment } from './AnalyticsDeployment'; - -const DeploymentsTreeView = () => { - return ( - } - > - - - ); -}; - -export { DeploymentsTreeView }; diff --git a/src/app/Analytics/User_Analytics/ExperimentTable.tsx b/src/app/Analytics/User_Analytics/ExperimentTable.tsx deleted file mode 100644 index ddc6e922..00000000 --- a/src/app/Analytics/User_Analytics/ExperimentTable.tsx +++ /dev/null @@ -1,172 +0,0 @@ -import React, { useState } from 'react'; -import { Table /* data-codemods */, Thead, Tr, Th, Tbody, Td, ThProps } from '@patternfly/react-table'; -import { - Toolbar, - ToolbarContent, - ToolbarItem -} from '@patternfly/react-core'; -import { - OptionsMenu, - OptionsMenuItemGroup, - OptionsMenuItem, - OptionsMenuSeparator, - OptionsMenuToggle -} from '@patternfly/react-core/deprecated'; -import SortAmountDownIcon from '@patternfly/react-icons/dist/esm/icons/sort-amount-down-icon'; - -interface Repository { - experimentName: string; - containerName: string; -} - -const ExperimentTable = () => { - // In real usage, this data would come from some external source like an API via props. - const repositories: Repository[] = [ - { experimentName: 'quarkus-resteasy-autotune-min-http-response-time-db4', containerName: 'tfb-server-1' }, - { experimentName: 'quarkus-resteasy-autotune-min-http-response-time-db4', containerName: 'tfb-server-0' }, - { experimentName: 'p', containerName: 'two' } - ]; - - const columnNames = { - experimentName: 'Experiment Name', - containerName: 'Container Name' - }; - - // Index of the currently sorted column - // Note: if you intend to make columns reorderable, you may instead want to use a non-numeric key - // as the identifier of the sorted column. See the "Compound expandable" example. - const [activeSortIndex, setActiveSortIndex] = React.useState(null); - - // Sort direction of the currently sorted column - const [activeSortDirection, setActiveSortDirection] = React.useState<'asc' | 'desc' | null>(null); - - // Sort dropdown expansion - const [isSortDropdownOpen, setIsSortDropdownOpen] = React.useState(false); - - // Since OnSort specifies sorted columns by index, we need sortable values for our object by column index. - // This example is trivial since our data objects just contain strings, but if the data was more complex - // this would be a place to return simplified string or number versions of each column to sort by. - const getSortableRowValues = (repo: Repository): (string | number)[] => { - const { experimentName, containerName } = repo; - return [experimentName, containerName]; - }; - - // Note that we perform the sort as part of the component's render logic and not in onSort. - // We shouldn't store the list of data in state because we don't want to have to sync that with props. - let sortedRepositories = repositories; - if (activeSortIndex !== null) { - sortedRepositories = repositories.sort((a, b) => { - const aValue = getSortableRowValues(a)[activeSortIndex]; - const bValue = getSortableRowValues(b)[activeSortIndex]; - if (typeof aValue === 'number') { - // Numeric sort - if (activeSortDirection === 'asc') { - return (aValue as number) - (bValue as number); - } - return (bValue as number) - (aValue as number); - } else { - // String sort - if (activeSortDirection === 'asc') { - return (aValue as string).localeCompare(bValue as string); - } - return (bValue as string).localeCompare(aValue as string); - } - }); - } - - const getSortParams = (columnIndex: number): ThProps['sort'] => ({ - sortBy: { - index: activeSortIndex, - direction: activeSortDirection - }, - onSort: (_event, index, direction) => { - setActiveSortIndex(index); - setActiveSortDirection(direction); - }, - columnIndex - }); - const [selectedExperimentName, setSelectedExperimentName] = useState(''); - - return ( - - - - - - {Object.values(columnNames).map((columnName, columnIndex) => ( - { - setActiveSortIndex(columnIndex); - setActiveSortDirection(activeSortDirection !== null ? activeSortDirection : 'asc'); - }} - > - {columnName} - - ))} - , - , - - setActiveSortDirection('asc')} - isSelected={activeSortDirection === 'asc'} - id="ascending" - key="ascending" - > - Ascending - - setActiveSortDirection('desc')} - isSelected={activeSortDirection === 'desc'} - id="descending" - key="descending" - > - Descending - - - ]} - isOpen={isSortDropdownOpen} - toggle={ - setIsSortDropdownOpen(!isSortDropdownOpen)} - toggleTemplate={} - /> - } - isPlain - isGrouped - /> - - - - - - - - - - - - {sortedRepositories.map((repo, rowIndex) => ( - setSelectedExperimentName(repo.experimentName)} - isSelectable - isClickable - isRowSelected={selectedExperimentName === repo.experimentName} - > - - - - ))} - -
{columnNames.experimentName}{columnNames.containerName}
{repo.experimentName}{repo.containerName}
-
- ); -}; - -export { ExperimentTable }; diff --git a/src/app/Analytics/User_Analytics/UserAnalytics.tsx b/src/app/Analytics/User_Analytics/UserAnalytics.tsx deleted file mode 100644 index aa08bdd8..00000000 --- a/src/app/Analytics/User_Analytics/UserAnalytics.tsx +++ /dev/null @@ -1,101 +0,0 @@ -import React from 'react'; -import { - Text, - PageSection, - PageSectionVariants, - TextContent, - TextVariants, - FormGroup, - Form, - FormSection, - Divider, - Grid, - GridItem, - -} from '@patternfly/react-core'; -import NameSpaceDropDown from '@app/RunExperiment/NameSpaceDropDown'; -import { AnalyticsNamespace } from './AnalyticsNamespace'; -import { AnalyticsDeployment } from './AnalyticsDeployment'; -import { AnalyticsContainers } from './ContainerInfo/AnalyticsContainers'; -import { AnalyticsObjectType } from './AnalyticsObjectType'; -import { DeploymentsTreeView } from './DeploymentsTreeView'; - -const UserAnalytics = () => { - return ( - - - Analytics - User View - -
- -
-
-
- - - - {/* - - */} - - - Namespace - - - - - - - - - - Kubernetes Object Type - - - -
-
- - - Tree View for Selected Kubernetes Object - - - - {/* - */} - {/* - - */} - {/* - Deployment - - */} - {/* */} - {/* */} - {/* - */} - {/* - - - - */} - {/* - - */} - - - - - {/* - - - - */} -
-
-
-
- ); -}; - -export { UserAnalytics }; diff --git a/src/app/AppLayout/AppLayout.tsx b/src/app/AppLayout/AppLayout.tsx index 06570ce2..6d1ddcc5 100644 --- a/src/app/AppLayout/AppLayout.tsx +++ b/src/app/AppLayout/AppLayout.tsx @@ -1,22 +1,20 @@ import * as React from 'react'; import { NavLink, useLocation, useHistory } from 'react-router-dom'; import { - Nav, - NavList, - NavItem, - NavExpandable, - Page, - PageSidebar, - SkipToContent, PageSidebarBody + Nav, + NavList, + NavItem, + NavExpandable, + Page, + PageSidebar, + SkipToContent, + PageSidebarBody } from '@patternfly/react-core'; -import { - PageHeader -} from '@patternfly/react-core/deprecated'; +import { PageHeader } from '@patternfly/react-core/deprecated'; import { routes, IAppRoute, IAppRouteGroup } from '@app/routes'; import HorizontalNav from '@app/HorizontalNav/HorizontalNav'; -import EnvState from '@app/ContextStore/EnvState'; -import Footer from '@app/Footer/Footer'; import KruizeLogo from '!!url-loader!@app/Assets/images/kruize_icon.png'; + interface IAppLayout { children: React.ReactNode; } @@ -54,8 +52,6 @@ const AppLayout: React.FunctionComponent = ({ children }) => { /> ); - const footer =
; - const renderNavItem = (route: IAppRoute, index: number) => ( @@ -86,11 +82,11 @@ const AppLayout: React.FunctionComponent = ({ children }) => { ); - const Sidebar = - -{Navigation} - -; + const Sidebar = ( + + {Navigation} + + ); const pageId = 'primary-app-container'; @@ -107,18 +103,15 @@ const AppLayout: React.FunctionComponent = ({ children }) => { ); return ( - - onPageResize(props)} - skipToContent={PageSkipToContent} - > - {children} - {/*
*/} - - + onPageResize(props)} + skipToContent={PageSkipToContent} + > + {children} + ); }; diff --git a/src/app/ContextStore/EnvState.tsx b/src/app/ContextStore/EnvState.tsx deleted file mode 100644 index 98e1ea8e..00000000 --- a/src/app/ContextStore/EnvState.tsx +++ /dev/null @@ -1,17 +0,0 @@ -import NodeContext from './nodeContext'; -import React from 'react'; -import { get_ip, get_port } from 'env'; - -const EnvState = (props) => { - const ip = get_ip(); - const port = get_port(); - - const state = { - cluster: ip, - autotune: port - }; - // @ts-ignore - return {props.children}; -}; - -export default EnvState; diff --git a/src/app/ContextStore/nodeContext.ts b/src/app/ContextStore/nodeContext.ts deleted file mode 100644 index c4f68d06..00000000 --- a/src/app/ContextStore/nodeContext.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { createContext } from 'react'; - -const nodeContext = createContext(0); - -export default nodeContext; diff --git a/src/app/Documentation/CommunityCall.tsx b/src/app/Documentation/CommunityCall.tsx deleted file mode 100644 index e0f34479..00000000 --- a/src/app/Documentation/CommunityCall.tsx +++ /dev/null @@ -1,106 +0,0 @@ -import * as React from 'react'; -import { PageSection, PageSectionVariants, Title } from '@patternfly/react-core'; - -const CommunityCall = () => ( - - - <b>Autotune Community Calls !</b> - -

Welcome to the Autotune Community Calls page!


-
-

-

- Hosted by the Autotune Community team, these free calls are some of the most engaging webinars around! Typically, - the calls are an hour. For each webinar, the presentation portion takes 25 minutes, followed by 30 minutes of - in-depth questions and discussions with the audience. The final 5 minutes usually spent looking ahead to what - topics are planned in the coming weeks. -

-

- - <b>Community Calendar</b> - -

- Here is the link to the{' '} - - {' '} - Kruize Community Calender - {' '} - with details of Kruize community events. -

-
-
- - <b>Joining the calls</b> - -

- Please note that our process for joining the Community Calls has changed. Now, you can go to the YouTube link to - subscribe to Autotune Community Calls. There, you can set reminders for the calls you’re interested in attending. - No need to register for upcoming calls. -

-
-
- - <b>Upcoming calls</b> - - - - - - - - - - - - - - - - -
Date and Time  Title and Registration Link  AgendaPresenter(s)
16 March (9 pm IST)  ---- - Understanding the project scope, -
current status and future roadmap/enhancements -
- Collaboration opportunities, Community drive and open source contribution -
- Dinakar Guniguntala - 'Dino', as he is fondly referred, -
is the Senior Principal SE/architect at Red Hat.Prior to RH, Dino was with IBM and moved to Red Hat - in 2020. -
-
-
- - <b>Requesting and suggesting topics and sessions</b> - -

- Email your suggestions directly to community@autotune.com. We'll do our best to find the right topic expert - and schedule the session in the coming months. -

{' '} -
-
- - <b>Asking questions and providing feedback</b> - -

- Email your questions and feedback directly to community@autotune.com . -

{' '} -
-
- - <b>Accessing replays</b> - -

- Please note that all 2022 Autotune Community Calls replays are accessible on our{' '} - YouTube channel. -

-

-
-); - -export { CommunityCall }; diff --git a/src/app/Documentation/FAQs.tsx b/src/app/Documentation/FAQs.tsx deleted file mode 100644 index d4e1021d..00000000 --- a/src/app/Documentation/FAQs.tsx +++ /dev/null @@ -1,64 +0,0 @@ -import * as React from 'react'; -import { useState } from 'react'; -import { - TextContent, - ExpandableSection, - Text, - Flex, - FlexItem, - PageSectionVariants, - TextVariants, - PageSection, - -} from '@patternfly/react-core'; -import faqs from './faq.json'; - -const FAQs = () => { - const [isExpanded, setIsExpanded] = useState(false); - - const onToggle = (i: boolean) => { - if (isExpanded == i) { - setIsExpanded(false); - } - setIsExpanded(i); - }; - - return ( - - - - - Frequently Asked Questions ! - Welcome to the FAQs Page. Let's see how can we help you! - - - - {/* setValue('')} - /> */} - - {faqs.map((faq, i) => ( - - onToggle(i)} - //isExpanded={} - displaySize="lg" - isWidthLimited - > - {faq.answer - } - - - ))} - - - ); -}; - -export { FAQs }; diff --git a/src/app/Documentation/Glossary.tsx b/src/app/Documentation/Glossary.tsx deleted file mode 100644 index dd9ddeaa..00000000 --- a/src/app/Documentation/Glossary.tsx +++ /dev/null @@ -1,27 +0,0 @@ -import React, { useState, useEffect } from 'react'; -import { PageSectionVariants, PageSection } from '@patternfly/react-core'; -import ReactMarkdown from 'react-markdown'; - -const Glossary = () => { - const [post, setPost] = useState(''); - useEffect(() => { - import('./autotune-modules.md') - .then((res) => { - console.log(res); - setPost(res.default); - }) - .catch((err) => console.log(err)); - }); - - return ( - -
-
- -
-
-
- ); -}; - -export { Glossary }; diff --git a/src/app/Documentation/InstallationGuide.tsx b/src/app/Documentation/InstallationGuide.tsx deleted file mode 100644 index 230142de..00000000 --- a/src/app/Documentation/InstallationGuide.tsx +++ /dev/null @@ -1,30 +0,0 @@ -import React, { useState, useEffect } from 'react'; -import ReactMarkdown from 'react-markdown'; -import { - PageSection, - PageSectionVariants, - -} from '@patternfly/react-core'; -import { Link } from 'react-router-dom'; - -const InstallationGuide = () => { - const [post, setPost] = useState(''); - useEffect(() => { - import('./Installationguide.md') - .then((res) => { - console.log(res); - setPost(res.default); - }) - .catch((err) => console.log(err)); - }); - - return ( - -
- {post} -
-
- ); -}; - -export { InstallationGuide }; diff --git a/src/app/Documentation/Installationguide.md b/src/app/Documentation/Installationguide.md deleted file mode 100644 index b516af66..00000000 --- a/src/app/Documentation/Installationguide.md +++ /dev/null @@ -1,114 +0,0 @@ -# Autotune Installation - -- [Clone Repositories](#clone-repositories) -- [Install the required software](#install-the-required-software) -- [Build Autotune Docker image](#build-autotune-docker-image) -- [Deploy Autotune using the Docker image](#deploy-autotune) -- [Demo Repo](#demo-repo) - -# Clone Repositories - -## Clone the Autotune Repository - -- Clone the kruize autotune repository onto your workstation with the following command. - -\$ git clone git@github.com:kruize/autotune.git - -## Clone the Kruize Benchmarks Repository - -- Clone the kruize benchmarks repository onto your workstation with the following command. - -``` -$ git clone git@github.com:kruize/benchmarks.git -``` - -# Install the required software - -## Kubernetes - -Autotune can be deployed to a supported Kubernetes cluster. We currently support Minikube. - -### Install kubectl and minikube - -Minikube setup with 8 CPUs and 16 GB Memory is recommended for autotune deployment. After setting up minikube, install prometheus from autotune repo with the following command - -``` -$ ./scripts/prometheus_on_minikube.sh -as -Info: installing prometheus... -Info: Checking pre requisites for prometheus... -No resources found in monitoring namespace. -Info: Downloading cadvisor git -... -Info: Waiting for prometheus-k8s-1 to come up... -prometheus-k8s-1 0/2 ContainerCreating 0 102s -prometheus-k8s-1 1/2 Running 1 106s -Info: prometheus-k8s-1 deploy succeeded: Running -prometheus-k8s-1 1/2 Running 1 106s -``` - -# Build autotune docker image - -Build autotune docker image 'autotune:test' with the following command - -``` -$ ./build.sh -i autotune:test - Usage: ./build.sh [-d] [-v version_string] [-i autotune_docker_image] [-o optuna_docker_image] - -d: build in dev friendly mode - -i: build with specific autotune operator docker image name [Default - kruize/autotune_operator:] - -o: build with specific optuna docker image name [Default - kruize/autotune_optuna:] - -v: build as specific autotune version -``` - -Note - You can use the 'dev friendly mode' option to quickly build the autotune docker image using the cached layers. - -# Deploy Autotune - -Let us now deploy autotune using the docker image onto the minikube cluster - -``` -$ ./deploy.sh -c minikube -i autotune:test - Usage: ./deploy.sh [-c [docker|minikube|openshift]] [-i autotune docker image] [-o optuna docker image] [-n namespace] [-d configmaps-dir ] [-s start] [-t terminate] - -s: Deploy autotune [Default] - -t: Terminate autotune deployment - -c: kubernetes cluster type. At present we support only minikube [Default - minikube] - -i: build with specific autotune operator docker image name [Default - kruize/autotune_operator:] - -o: build with specific optuna docker image name [Default - kruize/autotune_optuna:] - -n: Namespace to which autotune is deployed [Default - monitoring for cluster type minikube] - -d: Config maps directory [Default - manifests/configmaps] - For example, - ./deploy.sh -c minikube -i /autotune_operator:test -o /autotune_optuna:test -Info: Checking pre requisites for minikube... -Prometheus is installed and running. -Info: One time setup - Create a service account to deploy autotune -serviceaccount/autotune-sa created -customresourcedefinition.apiextensions.k8s.io/autotunes.recommender.com created -customresourcedefinition.apiextensions.k8s.io/autotuneconfigs.recommender.com created -customresourcedefinition.apiextensions.k8s.io/autotunequeryvariables.recommender.com created -clusterrole.rbac.authorization.k8s.io/autotune-cr created -clusterrolebinding.rbac.authorization.k8s.io/autotune-crb created -servicemonitor.monitoring.coreos.com/autotune created -prometheus.monitoring.coreos.com/prometheus created -Creating environment variable in minikube cluster using configMap -configmap/autotune-config created -Deploying AutotuneConfig objects -autotuneconfig.recommender.com/container created -autotuneconfig.recommender.com/hotspot created -autotuneconfig.recommender.com/quarkus created -Deploying AutotuneQueryVariable objects -autotunequeryvariable.recommender.com/minikube created -Info: Deploying autotune yaml to minikube cluster -deployment.apps/autotune created -service/autotune created -Info: Waiting for autotune to come up... -autotune-58cf47df84-rhqhx 0/1 ContainerCreating 0 4s -... -autotune-58cf47df84-rhqhx 0/1 ContainerCreating 0 50s -autotune-58cf47df84-rhqhx 1/1 Running 0 54s -Info: autotune deploy succeeded: Running -autotune-58cf47df84-rhqhx 1/1 Running 0 54s -Info: Access Autotune at http://192.168.39.12:30113/listAutotuneTunables -``` - -# Demo - -Please see the [demo](https://github.com/kruize/autotune-demo) repo for more details on how to use Autotune. diff --git a/src/app/Documentation/SubmitButtonSearchInput.tsx b/src/app/Documentation/SubmitButtonSearchInput.tsx deleted file mode 100644 index 41d15ca6..00000000 --- a/src/app/Documentation/SubmitButtonSearchInput.tsx +++ /dev/null @@ -1,17 +0,0 @@ -import React from 'react'; -import { SearchInput } from '@patternfly/react-core'; - -SubmitButtonSearchInput = () => { - const [value, setValue] = React.useState(''); - - return ( - setValue('')} - /> - ); -}; -export function SubmitButtonSearchInput(); diff --git a/src/app/Documentation/autotune-modules.md b/src/app/Documentation/autotune-modules.md deleted file mode 100644 index 86135863..00000000 --- a/src/app/Documentation/autotune-modules.md +++ /dev/null @@ -1,31 +0,0 @@ -## Autotune Modules - -Autotune has the following high level modules: - -- Analyzer module - Dependency Analyzer - Recommendation Manager -- Hyperparameter Optimization module -- Experiment manager module - -### Analyzer module - -Analyzer module is a combination of Dependency Analyzer and Recommendation Manager sub-modules. - -Dependency Analyzer does the following: - -- Dependency Analyzer validates the autotune yaml file provided by the user. This yaml file defines the "slo" goal along with the objective function to optimize application performance. -- It uses Prometheus to identify "layers" of an application that it is monitoring and matches tunables from those layers to the user provided slo. -- It creates the search space for all the layer tunables and function variables to derive the objective function - -Recommendation Manager does the following: - -- Recommendation Manager (RM) module posts the search space to the Hyperparameter Optimization module (HPO) -- Obtains the trial config for the tunables from the HPO module and posts it to the Experiment manager module (EM) -- It then computes the object function for the slo based on the metrics values from Experiment manager and posts the results to HPO module -- It repeats step 2 & 3 until the specified number of trials are completed and then obtains the optimal values for the tunables from HPO and returns it to the user - -### Experiment Manager module - -- Experiment manager runs the experiments by re-deploying the application with the provided tunable values. It either does a rolling update or new deployment - of the application based on the deployment policy. -- It continuously monitors for load, processes the prometheus queries and uses them to gather metrics for a specified duration and interval. -- It processes the metrics gathered and returns them to the RM module. diff --git a/src/app/Documentation/faq.json b/src/app/Documentation/faq.json deleted file mode 100644 index 825ee3b1..00000000 --- a/src/app/Documentation/faq.json +++ /dev/null @@ -1,32 +0,0 @@ -[ - { - "id": "1", - "question": "What are the supported SLO classes?", - "answer": "Right now supported classes are Response time, throughput & resource usage. We arrived manually in these classes. We may add more such classes in the future. At a time the objective function caters to only one particular slo class." - }, - { - "id": "2", - "question": "How are the tunables specified?", - "answer": " Under autotune/ manifest/ autotune-configs - there are different YAML files in which several layers are defined for eg. hotspot, quarkus. These YAML files contain tunables with their value type and range." - }, - { - "id": "3", - "question": "While running the experiment, does autotune has several pods receiving multiple requests or is it just single pod since it is cost incurring", - "answer": " Yes, right now we are limited to only one single pod to tune a particular microservice for the mvp (minimum viable product) but we plan to extend it for other microservices/ multiple pods" - }, - { - "id": "4", - "question": "Do you have any plans to have companies develop their own forks based on autotune as open source?", - "answer": "A. Really welcome contributions from other contributors and would preferably want them to jointly look at common/current issues in autotune before they start working with their own forks as autotune is in its initial stages thus needs some time before it can be developed specifically by other companies" - }, - { - "id": "5", - "question": "In addition to goals and progress , we see that debug loops and troubleshooting are important parts of the SRE work load. Does autotune look into diagnosing and debugging paths for the SRE?Can it find the degraded service and the reason behind degradation? Basically if autotune can work beyond performance tuning and optimization", - "answer": "A. We haven't yet looked into autotune specifically from a debugging perspective. In the hands of runtime developers they can pick and choose a tunable and see only the effects of one tunable on overall performance and if that leads into an error autotune can be of use. But debugging in a live environment is not a scenario that we currently have in mind. But Autotune helps runtime developers analyze large search space (30-50 tunables) when they are not aware how each tunable will perform over time." - }, - { - "id": "6", - "question": "Can Autotune give information about the cost of a cluster w.r.t money and resources for a customer", - "answer": "We are working on the analyser recommendation manager to get complete workflow working. The current mvp focus is to optimize stack to get best performance at individual pod level. We plan to Horizontally scale in the future." - } -] diff --git a/src/app/ExperimentStatus/ExperimentStatus.tsx b/src/app/ExperimentStatus/ExperimentStatus.tsx deleted file mode 100644 index 7706756b..00000000 --- a/src/app/ExperimentStatus/ExperimentStatus.tsx +++ /dev/null @@ -1,124 +0,0 @@ -import React, { useState } from 'react'; -import { - PageSection, - CardBody, - CardFooter, - Button, - TreeView, - PageSectionVariants, - Text, - Toolbar, - TextVariants, - ToolbarContent, - TextContent -} from '@patternfly/react-core'; -import { Link } from 'react-router-dom'; -import listAuotuneTunablesJson from './jsonFiles/listAutotuneTunables.json'; - -const ExperimentStatus = () => { - const [activeItems, setActiveItems] = useState({}); - const [allExpanded, setAllExpanded] = useState(null); - - const onSelect = (evt, treeViewItem) => { - setActiveItems(treeViewItem); - }; - const onToggle = (evt) => { - setAllExpanded(allExpanded !== undefined ? !allExpanded : true); - }; - - const layer_name = - listAuotuneTunablesJson && - listAuotuneTunablesJson.map((layerdetail) => { - return <>{'Layer: ' + layerdetail.layer_name.charAt(0).toUpperCase() + layerdetail.layer_name.slice(1)}; - }); - - const tunable_name = - listAuotuneTunablesJson && - listAuotuneTunablesJson.map((layers) => { - return ( - <> - {layers.tunables && - layers.tunables.map((tune) => { - return ( - <> - {'Tunable: ' + tune.name.charAt(0).toUpperCase() + tune.name.slice(1)}
- - ); - })} - - ); - }); - - const autotune_optuna = [ - { - name: layer_name[0], - children: [ - { - name: tunable_name[0] - } - ] - } - ]; - const autotune = [ - { - name: layer_name[0], - id: 'A', - children: [ - { - name: tunable_name[0] - } - ] - }, - { - name: layer_name[1], - id: 'B', - children: [ - { - name: tunable_name[1] - } - ] - }, - { - name: layer_name[2], - id: 'C', - children: [ - { - name: tunable_name[2] - } - ] - } - ]; - - return ( - - - - - Layers and Tunable hierarchy - - Let's peek into the deployment and see what's inside.......... We have figured out the layers and tunables - for you ! - - - - - Deployment Name : Autotune - - 1. Container Image Name: Autotune - - - - 2. Container Image Name: Autotune-Optuna - - - - - - - ); -}; - -export { ExperimentStatus }; diff --git a/src/app/ExperimentStatus/MoreExperimentStuff/ExperimentDetails.tsx b/src/app/ExperimentStatus/MoreExperimentStuff/ExperimentDetails.tsx deleted file mode 100644 index a1bcad36..00000000 --- a/src/app/ExperimentStatus/MoreExperimentStuff/ExperimentDetails.tsx +++ /dev/null @@ -1,37 +0,0 @@ -import React, { useState, useEffect } from 'react'; -import { - PageSection, - Text, - Toolbar, - PageSectionVariants, - TextContent, - TextVariants, - ToolbarContent -} from '@patternfly/react-core'; - -import { Final_equation } from './Final_equation'; -import { Throughput_details } from './Throughput_details'; -import { Response_time_details } from './Response_time_details'; -import { Resource_usage_details } from './Resource_usage_details'; - -const ExperimentDetails = () => { - return ( - - - - - Let's define Function Variables - - Here's what our system found for you! You bet. This is the best with all 3 parameters combined! -
- Try to fiddle around with the function variables, each of them have a weight from 0 - 100 which can be - modified. -
-
-
-
-
- ); -}; - -export { ExperimentDetails }; diff --git a/src/app/ExperimentStatus/MoreExperimentStuff/Final_equation.tsx b/src/app/ExperimentStatus/MoreExperimentStuff/Final_equation.tsx deleted file mode 100644 index 6c8c5a3e..00000000 --- a/src/app/ExperimentStatus/MoreExperimentStuff/Final_equation.tsx +++ /dev/null @@ -1,25 +0,0 @@ -import React, { useState, useEffect } from 'react'; -import { Text, TextVariants, TextContent, PageSection, PageSectionVariants } from '@patternfly/react-core'; -import { MathComponent } from 'mathjax-react'; - -const Final_equation = (props: { data; setData }) => { - const [net_eq, setNet_eq] = useState(props.data['net_eq']); - - useEffect(() => { - props.setData({ ...{ ...props.data }, net_eq: net_eq, allDone: 'yes' }); - }, [net_eq]); - - useEffect(() => { - setNet_eq(String.raw`${props.data.THequation}${props.data.RTequation}${props.data.RUequation}`); - }, []); - - return ( - - - Final Equation - - - - ); -}; -export { Final_equation }; diff --git a/src/app/ExperimentStatus/MoreExperimentStuff/Resource_usage_details.tsx b/src/app/ExperimentStatus/MoreExperimentStuff/Resource_usage_details.tsx deleted file mode 100644 index 6e6bc98f..00000000 --- a/src/app/ExperimentStatus/MoreExperimentStuff/Resource_usage_details.tsx +++ /dev/null @@ -1,304 +0,0 @@ -import React, { useState, useEffect } from 'react'; -import { - Slider, - Text, - Button, - Form, - FormGroup, - TextInput, - FormSelect, - FormSelectOption, - Radio, - TextVariants, - TextContent, - FormSection, - PageSection, - PageSectionVariants, - Grid, - GridItem -} from '@patternfly/react-core'; -import { Link } from 'react-router-dom'; -import PencilAltIcon from '@patternfly/react-icons/dist/esm/icons/pencil-alt-icon'; -import SaveIcon from '@patternfly/react-icons/dist/esm/icons/save-icon'; -import { MathComponent } from 'mathjax-react'; - -const Resource_usage_details = (props: { data; setData }) => { - const [valueContinuous1, setValueContinious1] = useState(props.data['RUweightage']); - const [inputValueContinuous1, setInputValueContinuous1] = useState(props.data['RUweightage']); - const [query, setQuery] = useState(props.data['RUquery']); - const [valueType, setValueType] = useState(props.data['RUvaluetype']); - const [option, setOption] = useState(props.data['RUdatasource']); - const [operatorOption, setOperatorOption] = useState(props.data['RUoperator']); - const [editing, setEditing] = useState(false); - const [direction, setDirection] = useState<'min' | 'max'>(props.data['RUdirection']); - const [equation, setEquation] = useState(props.data['RUequation']); - - const onChangeContinuous1 = (value, inputValue, setLocalInputValue) => { - let newValue; - if (inputValue === undefined) { - newValue = Math.floor(value); - } else { - if (inputValue > 100) { - newValue = 100; - setLocalInputValue(100); - } else if (inputValue < 0) { - newValue = 0; - setLocalInputValue(0); - } else { - newValue = Math.floor(inputValue); - } - } - setInputValueContinuous1(newValue); - setValueContinious1(newValue); - sessionStorage.setItem('Resource Usage Slider Value', newValue); - }; - - const handleQueryChange = (query: string) => { - setQuery(query); - }; - useEffect(() => { - props.setData({ ...{ ...props.data }, RUdirection: direction }); - }, [direction]); - useEffect(() => { - props.setData({ ...{ ...props.data }, RUquery: query }); - }, [query]); - useEffect(() => { - props.setData({ ...{ ...props.data }, RUvaluetype: valueType }); - }, [valueType]); - useEffect(() => { - props.setData({ ...{ ...props.data }, RUdatasource: option }); - }, [option]); - useEffect(() => { - props.setData({ ...{ ...props.data }, RUoperator: operatorOption }); - }, [operatorOption]); - useEffect(() => { - props.setData({ ...{ ...props.data }, RUequation: equation }); - }, [equation]); - - useEffect(() => { - var a; - if (operatorOption === 'log' && direction === 'min') { - a = String.raw`\frac{1}{ ${valueContinuous1 / 100} log(resource_usage)}`; - } else if (operatorOption === 'log' && direction === 'max') { - a = valueContinuous1 / 100 + String.raw`log(resource_usage)`; - } else if (operatorOption === '0.5' && direction === 'min') { - a = String.raw`\frac{1}{ ${valueContinuous1 / 100} \sqrt{resource_usage}}`; - } else if (operatorOption === '0.5' && direction === 'max') { - a = valueContinuous1 / 100 + String.raw`\sqrt{resource_usage}`; - } else if (operatorOption === '1' && direction === 'min') { - a = String.raw`\frac{1}{ ${valueContinuous1 / 100} resourceusage}`; - } else if (operatorOption === '1' && direction === 'max') { - a = valueContinuous1 / 100 + 'resourceusage'; - } else if (direction === 'min') { - a = String.raw`\frac{1}{ ${valueContinuous1 / 100} resourceusage^${operatorOption}}`; - } else if (direction === 'max') { - a = valueContinuous1 / 100 + String.raw`resourceusage^${operatorOption}`; - } else { - a = valueContinuous1 / 100 + 'resourceusage'; - } - setEquation(a); - }, [direction, valueContinuous1, operatorOption]); - - const handleOperatorChange = (operatorOption: string) => { - console.log('opo' + operatorOption); - setOperatorOption(operatorOption); - }; - const handelValueTypeChange = (valueType: string) => { - setValueType(valueType); - }; - const handleOptionChange = (value: string) => { - setOption(value); - }; - const handelRadioChange = (x) => { - console.log('hrc' + x); - if (direction === 'min') { - setDirection('max'); - } else if (direction === 'max') { - setDirection('min'); - } - }; - - const valueOptions = [ - { value: 'double', label: 'double', disabled: false }, - { value: 'float', label: 'float' } - ]; - const options = [ - { value: 'prometheus', label: 'prometheus', disabled: false }, - { value: 'B', label: 'B', disabled: false }, - { value: 'C', label: 'C', disabled: false } - ]; - const operatorOptions = [ - { value: '1', label: 'none', disabled: false }, - { value: 'log', label: 'log', disabled: false }, - { value: '2', label: 'square', disabled: false }, - { value: '0.5', label: 'square root', disabled: false } - ]; - const config = { - loader: { load: ['input/asciimath'] } - }; - - const formEquation = () => { - return ( - - - - - - ); - }; - const formMode = () => { - return ( - - - - {editing ? ( - - ) : ( - - )} - - - - - ); - }; - - const formWeightage = () => { - return ( - - - onChangeContinuous1(value, inputValue, setLocalInputValue) - } - isDisabled={!editing} - /> - - ); - }; - const formOperator = () => { - return ( - - handleOperatorChange(operatorOption)} - isDisabled={!editing} - aria-label="operator options" - > - {operatorOptions.map((option, index) => ( - - ))} - - - ); - }; - const formQuery = () => { - return ( - - handleQueryChange(query)} - isDisabled={!editing} - aria-label="query resource_usage" - /> - - ); - }; - const formDatasource = () => { - return ( - - handleOptionChange(value)} - isDisabled={!editing} - aria-label="options" - > - {options.map((option, index) => ( - - ))} - - - ); - }; - - const formValuetype = () => { - return ( - - handelValueTypeChange(valueType)} - isDisabled={!editing} - aria-label="value type" - > - {valueOptions.map((option, index) => ( - - ))} - - - ); - }; - - const formDirection = () => { - return ( - - handelRadioChange(x)} - isChecked={direction === 'max'} - isDisabled={!editing} - /> - handelRadioChange(x)} - isChecked={direction === 'min'} - isDisabled={!editing} - /> - - ); - }; - return ( - -
{ - e.preventDefault(); - }} - > - - - - { - - Function Variable : Resource Usage - - } - - {formMode()} - - {formEquation()} - {formWeightage()} - {formOperator()} - {formQuery()} - {formDatasource()} - {formValuetype()} - {formDirection()} - -
-
- ); -}; - -export { Resource_usage_details }; diff --git a/src/app/ExperimentStatus/MoreExperimentStuff/Response_time_details.tsx b/src/app/ExperimentStatus/MoreExperimentStuff/Response_time_details.tsx deleted file mode 100644 index 496ee750..00000000 --- a/src/app/ExperimentStatus/MoreExperimentStuff/Response_time_details.tsx +++ /dev/null @@ -1,304 +0,0 @@ -import React, { useState, useEffect } from 'react'; -import { - Slider, - Text, - Button, - Form, - FormGroup, - TextInput, - FormSelect, - FormSelectOption, - Radio, - TextVariants, - TextContent, - FormSection, - PageSection, - PageSectionVariants, - Grid, - GridItem -} from '@patternfly/react-core'; -import { Link } from 'react-router-dom'; -import PencilAltIcon from '@patternfly/react-icons/dist/esm/icons/pencil-alt-icon'; -import SaveIcon from '@patternfly/react-icons/dist/esm/icons/save-icon'; -import { MathComponent } from 'mathjax-react'; - -const Response_time_details = (props: { data; setData }) => { - const [valueContinuous1, setValueContinious1] = useState(props.data['RTweightage']); - const [inputValueContinuous1, setInputValueContinuous1] = useState(props.data['RTweightage']); - const [query, setQuery] = useState(props.data['RTquery']); - const [valueType, setValueType] = useState(props.data['RTvaluetype']); - const [option, setOption] = useState(props.data['RTdatasource']); - const [operatorOption, setOperatorOption] = useState(props.data['RToperator']); - const [editing, setEditing] = useState(false); - const [direction, setDirection] = useState<'min' | 'max'>(props.data['RTdirection']); - const [equation, setEquation] = useState(props.data['RTequation']); - - const onChangeContinuous1 = (value, inputValue, setLocalInputValue) => { - let newValue; - if (inputValue === undefined) { - newValue = Math.floor(value); - } else { - if (inputValue > 100) { - newValue = 100; - setLocalInputValue(100); - } else if (inputValue < 0) { - newValue = 0; - setLocalInputValue(0); - } else { - newValue = Math.floor(inputValue); - } - } - setInputValueContinuous1(newValue); - setValueContinious1(newValue); - sessionStorage.setItem('Response Time Slider Value', newValue); - }; - - const handleQueryChange = (query: string) => { - setQuery(query); - }; - useEffect(() => { - props.setData({ ...{ ...props.data }, RTdirection: direction }); - }, [direction]); - useEffect(() => { - props.setData({ ...{ ...props.data }, RTquery: query }); - }, [query]); - useEffect(() => { - props.setData({ ...{ ...props.data }, RTvaluetype: valueType }); - }, [valueType]); - useEffect(() => { - props.setData({ ...{ ...props.data }, RTdatasource: option }); - }, [option]); - useEffect(() => { - props.setData({ ...{ ...props.data }, RToperator: operatorOption }); - }, [operatorOption]); - useEffect(() => { - props.setData({ ...{ ...props.data }, RTequation: equation }); - }, [equation]); - - useEffect(() => { - var a; - if (operatorOption === 'log' && direction === 'min') { - a = String.raw`\frac{1}{ ${valueContinuous1 / 100} log(response time)}`; - } else if (operatorOption === 'log' && direction === 'max') { - a = valueContinuous1 / 100 + String.raw`log(response time)`; - } else if (operatorOption === '0.5' && direction === 'min') { - a = String.raw`\frac{1}{ ${valueContinuous1 / 100} \sqrt{response time}}`; - } else if (operatorOption === '0.5' && direction === 'max') { - a = valueContinuous1 / 100 + String.raw`\sqrt{response time}`; - } else if (operatorOption === '1' && direction === 'min') { - a = String.raw`\frac{1}{ ${valueContinuous1 / 100} response time}`; - } else if (operatorOption === '1' && direction === 'max') { - a = valueContinuous1 / 100 + 'response time'; - } else if (direction === 'min') { - a = String.raw`\frac{1}{ ${valueContinuous1 / 100} response time^${operatorOption}}`; - } else if (direction === 'max') { - a = valueContinuous1 / 100 + String.raw`response time^${operatorOption}`; - } else { - a = valueContinuous1 / 100 + 'response time'; - } - setEquation(a); - }, [direction, valueContinuous1, operatorOption]); - - const handleOperatorChange = (operatorOption: string) => { - console.log('opo' + operatorOption); - setOperatorOption(operatorOption); - }; - const handelValueTypeChange = (valueType: string) => { - setValueType(valueType); - }; - const handleOptionChange = (value: string) => { - setOption(value); - }; - const handelRadioChange = (x) => { - console.log('hrc' + x); - if (direction === 'min') { - setDirection('max'); - } else if (direction === 'max') { - setDirection('min'); - } - }; - - const valueOptions = [ - { value: 'double', label: 'double', disabled: false }, - { value: 'float', label: 'float' } - ]; - const options = [ - { value: 'prometheus', label: 'prometheus', disabled: false }, - { value: 'B', label: 'B', disabled: false }, - { value: 'C', label: 'C', disabled: false } - ]; - const operatorOptions = [ - { value: '1', label: 'none', disabled: false }, - { value: 'log', label: 'log', disabled: false }, - { value: '2', label: 'square', disabled: false }, - { value: '0.5', label: 'square root', disabled: false } - ]; - const config = { - loader: { load: ['input/asciimath'] } - }; - - const formEquation = () => { - return ( - - - - - - ); - }; - const formMode = () => { - return ( - - - - {editing ? ( - - ) : ( - - )} - - - - - ); - }; - - const formWeightage = () => { - return ( - - - onChangeContinuous1(value, inputValue, setLocalInputValue) - } - isDisabled={!editing} - /> - - ); - }; - const formOperator = () => { - return ( - - handleOperatorChange(operatorOption)} - isDisabled={!editing} - aria-label="operator options" - > - {operatorOptions.map((option, index) => ( - - ))} - - - ); - }; - const formQuery = () => { - return ( - - handleQueryChange(query)} - isDisabled={!editing} - aria-label="query response_time" - /> - - ); - }; - const formDatasource = () => { - return ( - - handleOptionChange(value)} - isDisabled={!editing} - aria-label="options" - > - {options.map((option, index) => ( - - ))} - - - ); - }; - - const formValuetype = () => { - return ( - - handelValueTypeChange(valueType)} - isDisabled={!editing} - aria-label="value type" - > - {valueOptions.map((option, index) => ( - - ))} - - - ); - }; - - const formDirection = () => { - return ( - - handelRadioChange(x)} - isChecked={direction === 'max'} - isDisabled={!editing} - /> - handelRadioChange(x)} - isChecked={direction === 'min'} - isDisabled={!editing} - /> - - ); - }; - return ( - -
{ - e.preventDefault(); - }} - > - - - - { - - Function Variable : Response Time - - } - - {formMode()} - - {formEquation()} - {formWeightage()} - {formOperator()} - {formQuery()} - {formDatasource()} - {formValuetype()} - {formDirection()} - -
-
- ); -}; - -export { Response_time_details }; diff --git a/src/app/ExperimentStatus/MoreExperimentStuff/Throughput_details.tsx b/src/app/ExperimentStatus/MoreExperimentStuff/Throughput_details.tsx deleted file mode 100644 index 5b964231..00000000 --- a/src/app/ExperimentStatus/MoreExperimentStuff/Throughput_details.tsx +++ /dev/null @@ -1,291 +0,0 @@ -import React, { useState, useEffect } from 'react'; -import { - Slider, - Text, - Button, - Form, - FormGroup, - TextInput, - FormSelect, - FormSelectOption, - Radio, - TextVariants, - TextContent, - FormSection, - PageSection, - PageSectionVariants, - Grid, - GridItem -} from '@patternfly/react-core'; -import { Link } from 'react-router-dom'; -import PencilAltIcon from '@patternfly/react-icons/dist/esm/icons/pencil-alt-icon'; -import SaveIcon from '@patternfly/react-icons/dist/esm/icons/save-icon'; -import { MathComponent } from 'mathjax-react'; - -const Throughput_details = (props: { data; setData }) => { - const [valueContinuous1, setValueContinious1] = useState(props.data['THweightage']); - const [inputValueContinuous1, setInputValueContinuous1] = useState(props.data['THweightage']); - const [query, setQuery] = useState(props.data['THquery']); - const [valueType, setValueType] = useState(props.data['THvaluetype']); - const [option, setOption] = useState(props.data['THdatasource']); - const [operatorOption, setOperatorOption] = useState(props.data['THoperator']); - const [editing, setEditing] = useState(false); - const [direction, setDirection] = useState<'min' | 'max'>(props.data['THdirection']); - const [equation, setEquation] = useState(props.data['THequation']); - - const onChangeContinuous1 = (value, inputValue, setLocalInputValue) => { - let newValue; - if (inputValue === undefined) { - newValue = Math.floor(value); - } else { - if (inputValue > 100) { - newValue = 100; - setLocalInputValue(100); - } else if (inputValue < 0) { - newValue = 0; - setLocalInputValue(0); - } else { - newValue = Math.floor(inputValue); - } - } - setInputValueContinuous1(newValue); - setValueContinious1(newValue); - sessionStorage.setItem('Throughput Slider Value', newValue); - }; - - const handleQueryChange = (query: string) => { - setQuery(query); - }; - useEffect(() => { - props.setData({ ...{ ...props.data }, THdirection: direction }); - }, [direction]); - useEffect(() => { - props.setData({ ...{ ...props.data }, THquery: query }); - }, [query]); - useEffect(() => { - props.setData({ ...{ ...props.data }, THvaluetype: valueType }); - }, [valueType]); - useEffect(() => { - props.setData({ ...{ ...props.data }, THdatasource: option }); - }, [option]); - useEffect(() => { - props.setData({ ...{ ...props.data }, THoperator: operatorOption }); - }, [operatorOption]); - useEffect(() => { - props.setData({ ...{ ...props.data }, THequation: equation }); - }, [equation]); - - useEffect(() => { - var a; - if (operatorOption === 'log' && direction === 'min') { - a = String.raw`\frac{1}{ ${valueContinuous1 / 100} log(throughput)}`; - } else if (operatorOption === 'log' && direction === 'max') { - a = valueContinuous1 / 100 + String.raw`log(throughput)`; - } else if (operatorOption === '0.5' && direction === 'min') { - a = String.raw`\frac{1}{ ${valueContinuous1 / 100} \sqrt{throughput}}`; - } else if (operatorOption === '0.5' && direction === 'max') { - a = valueContinuous1 / 100 + String.raw`\sqrt{throughput}`; - } else if (operatorOption === '1' && direction === 'min') { - a = String.raw`\frac{1}{ ${valueContinuous1 / 100} throughput}`; - } else if (operatorOption === '1' && direction === 'max') { - a = valueContinuous1 / 100 + 'throughput'; - } else if (direction === 'min') { - a = String.raw`\frac{1}{ ${valueContinuous1 / 100} throughput^${operatorOption}}`; - } else if (direction === 'max') { - a = valueContinuous1 / 100 + String.raw`throughput^${operatorOption}`; - } else { - a = valueContinuous1 / 100 + 'throughput'; - } - setEquation(a); - }, [direction, valueContinuous1, operatorOption]); - - const handleOperatorChange = (operatorOption: string) => { - console.log('opo' + operatorOption); - setOperatorOption(operatorOption); - }; - const handelValueTypeChange = (valueType: string) => { - setValueType(valueType); - }; - const handleOptionChange = (value: string, _event: React.FormEvent) => { - setOption(value); - }; - const handelRadioChange = (value) => { - if (direction === 'min') { - setDirection('max'); - } else if (direction === 'max') { - setDirection('min'); - } - }; - - const valueOptions = [ - { value: 'double', label: 'double', disabled: false }, - { value: 'float', label: 'float' } - ]; - const options = [ - { value: 'prometheus', label: 'prometheus', disabled: false }, - { value: 'B', label: 'B', disabled: false }, - { value: 'C', label: 'C', disabled: false } - ]; - const operatorOptions = [ - { value: '1', label: 'none', disabled: false }, - { value: 'log', label: 'log', disabled: false }, - { value: '2', label: 'square', disabled: false }, - { value: '0.5', label: 'square root', disabled: false } - ]; - const config = { - loader: { load: ['input/asciimath'] } - }; - - const formEquation = () => { - return ( - - - - - - ); - }; - const formMode = () => { - return ( - - - - {editing ? ( - - ) : ( - - )} - - - - - ); - }; - - const formWeightage = () => { - return ( - - onChangeContinuous1(value, inputValue, setLocalInputValue)} - isDisabled={!editing} - /> - - ); - }; - const formOperator = () => { - return ( - - handleOperatorChange(operatorOption)} - isDisabled={!editing} - aria-label="operator options" - > - {operatorOptions.map((option, index) => ( - - ))} - - - ); - }; - const formQuery = () => { - return ( - - handleQueryChange(query)} - isDisabled={!editing} - aria-label="query throughput" - /> - - ); - }; - const formDatasource = () => { - return ( - - handleOptionChange(value, _event)} isDisabled={!editing} aria-label="options"> - {options.map((option, index) => ( - - ))} - - - ); - }; - - const formValuetype = () => { - return ( - - handelValueTypeChange(valueType)} isDisabled={!editing} aria-label="value type"> - {valueOptions.map((option, index) => ( - - ))} - - - ); - }; - - const formDirection = () => { - return ( - - handelRadioChange(value)} - isChecked={direction === 'max'} - isDisabled={!editing} - /> - handelRadioChange(value)} - isChecked={direction === 'min'} - isDisabled={!editing} - /> - - ); - }; - return ( - -
{ - e.preventDefault(); - }} - > - - - - { - - Function Variable : Throughput - - } - - {formMode()} - - {formEquation()} - {formWeightage()} - {formOperator()} - {formQuery()} - {formDatasource()} - {formValuetype()} - {formDirection()} - -
-
- ); -}; - -export { Throughput_details }; diff --git a/src/app/ExperimentStatus/jsonFiles/listAutotuneTunables.json b/src/app/ExperimentStatus/jsonFiles/listAutotuneTunables.json deleted file mode 100644 index 2256b20d..00000000 --- a/src/app/ExperimentStatus/jsonFiles/listAutotuneTunables.json +++ /dev/null @@ -1,74 +0,0 @@ -[ - { - "layer_id": "2466a805ce446743f92e3e9f055d09e5516bae872efe0e3ea05a78bb636ca205", - "layer_level": 0, - "tunables": [ - { - "value_type": "double", - "lower_bound": "150.0Mi", - "name": "memoryRequest", - "step": 1, - "query_url": "container_memory_working_set_bytes{container=\"\", pod=\"$POD$\"}", - "upper_bound": "300.0Mi" - }, - { - "value_type": "double", - "lower_bound": "1.0", - "name": "cpuRequest", - "step": 0.01, - "query_url": "(container_cpu_usage_seconds_total{container!=\"POD\", pod=\"$POD$\"}[1m])", - "upper_bound": "3.0" - } - ], - "layer_name": "container", - "layer_details": "generic container tunables" - }, - { - "layer_id": "b91469159554d276136609b3f372096021bfcc1926fb32f7d853939e4314dcd1", - "layer_level": 1, - "tunables": [ - { - "value_type": "integer", - "lower_bound": "9", - "name": "MaxInlineLevel", - "step": 1, - "query_url": "jvm_memory_used_bytes{area=\"heap\", container=\"\", pod=\"$POD$\"}", - "upper_bound": "50" - } - ], - "layer_name": "hotspot", - "layer_details": "hotspot tunables" - }, - { - "layer_id": "de841c74180086b46224cca2a974a9297584b7b5a4f4643a4aa790435cc4b9e6", - "layer_level": 2, - "tunables": [ - { - "value_type": "integer", - "lower_bound": "1", - "name": "quarkus.thread-pool.core-threads", - "step": 1, - "query_url": "none", - "upper_bound": "10" - }, - { - "value_type": "integer", - "lower_bound": "1", - "name": "quarkus.thread-pool.queue-size", - "step": 1, - "query_url": "none", - "upper_bound": "100" - }, - { - "value_type": "integer", - "lower_bound": "1", - "name": "quarkus.hibernate-orm.jdbc.statement-fetch-size", - "step": 1, - "query_url": "none", - "upper_bound": "50" - } - ], - "layer_name": "quarkus", - "layer_details": "quarkus tunables" - } -] diff --git a/src/app/FinishedStep/FinishedStep.tsx b/src/app/FinishedStep/FinishedStep.tsx deleted file mode 100644 index 77f1fb23..00000000 --- a/src/app/FinishedStep/FinishedStep.tsx +++ /dev/null @@ -1,54 +0,0 @@ -import { - Button, - EmptyState, - EmptyStateBody, - EmptyStateIcon, - Progress, EmptyStateActions, EmptyStateHeader, EmptyStateFooter, - -} from '@patternfly/react-core'; -import { CogsIcon } from '@patternfly/react-icons'; -import React, { useEffect, useState } from 'react'; - -const FinishedStep = () => { - const [percent, setPercent] = useState(0); - - const tick = () => { - setPercent((prevPercent) => { - if (prevPercent < 100) { - return prevPercent + 20; - } else { - return prevPercent; - } - }); - }; - useEffect(() => {}); - - useEffect(() => { - const interval = setInterval(() => tick(), 1000); - - if (percent >= 100) { - clearInterval(interval); - } - - return () => clearInterval(interval); - }, [percent]); - - return ( -
- - {percent === 100 ? 'YAML Applied ' : 'Applying the YAML to Kruize '}} icon={} headingLevel="h4" /> - - - - - We are sending a post request to the backend, with the experiment details provided. - - - - - -
- ); -}; - -export { FinishedStep }; diff --git a/src/app/Footer/Footer.tsx b/src/app/Footer/Footer.tsx deleted file mode 100644 index 26cf9718..00000000 --- a/src/app/Footer/Footer.tsx +++ /dev/null @@ -1,111 +0,0 @@ -import { Button, Modal, ModalVariant, PageSection, Title } from '@patternfly/react-core'; -import React, { useState } from 'react'; -//import './FooterTraditional.scss'; -// import { RhLogo } from '../components'; -const Footer = () => { - const [isModalOpen, setIsModalOpen] = useState(false); - - return ( - - - - - setIsModalOpen(false)} - > -

- Red Hat captures and regularly reviews statistical data from our actual web visitors and registered users, - rather than generic industry data, to identify the browsers we need to support in alignment with our - customers’ needs. Additionally, to safeguard customer data, only browsers which receive security updates from - the browser manufacturer are considered for support. We have implemented this policy to ensure that we can - provide an excellent experience to a wide user base. -

- Cookies and Javascript -

- To successfully interact with our websites and services, your browser must meet the following feature - requirements: -

-
    -
  • The browser must be configured to accept cookies
  • -
  • The browser must be configured to execute JavaScript
  • -
- Specific browser support -

- We validate against and fully support our customers' use of the past two major releases of the following - browsers: -

-
    -
  • Mozilla Firefox
  • -
  • Google Chrome
  • -
  • Apple Safari
  • -
  • Microsoft Edge
  • -
-
-
- ); -}; - -export default Footer; diff --git a/src/app/Footer/FooterTraditional.scss b/src/app/Footer/FooterTraditional.scss deleted file mode 100644 index 6db64e6a..00000000 --- a/src/app/Footer/FooterTraditional.scss +++ /dev/null @@ -1,52 +0,0 @@ -@import '~@redhat-cloud-services/frontend-components-utilities/styles/_mixins'; -@import '~@patternfly/patternfly/sass-utilities/_all'; - -.land-p-browser-support { - .pf-c-title { - margin-top: var(--pf-global--spacer--md); - margin-bottom: var(--pf-global--spacer--xs); - } - p { - margin: var(--pf-global--spacer--xs) 0; - } - li { - margin-left: var(--pf-global--spacer--md); - list-style: disc; - } -} - -.land-c-footer__traditional { - background-color: var(--pf-c-page__main-section--BackgroundColor); - - svg { - @include rem('width', 150px); - } - - .land-p-footer__browser-support { - padding: 0; - &:hover { - text-decoration: underline; - } - } - - .land-c-footer__traditional-nav { - .copyright { - color: var(--pf-global--Color--200); - @include rem('margin-right', 30px); - } - - * { - font-size: var(--pf-global--FontSize--sm); - } - - li + li { - @media screen and (min-width: $pf-global--breakpoint--lg) { - &::before { - content: '|'; - color: var(--pf-global--Color--200); - margin-right: var(--pf-global--spacer--md); - } - } - } - } -} diff --git a/src/app/GenerateYaml/CodeEditorWithActions.tsx b/src/app/GenerateYaml/CodeEditorWithActions.tsx deleted file mode 100644 index d88b8fba..00000000 --- a/src/app/GenerateYaml/CodeEditorWithActions.tsx +++ /dev/null @@ -1,110 +0,0 @@ -import React, { useState } from 'react'; -import { CodeEditor, Language } from '@patternfly/react-code-editor'; -import { - PageSection, - TextContent, - Text, - TextVariants, - Toolbar, - PageSectionVariants, - ToolbarContent, - FormGroup, - Grid, - GridItem, - Button, - Icon -} from '@patternfly/react-core'; -import yaml from './ab'; -import { SaveIcon, PencilAltIcon } from '@patternfly/react-icons'; - -export const CodeEditorWithActions = (props: { data; setData }) => { - const onEditorDidMount = (editor, monaco) => { - // console.log(editor.getValue()); - editor.layout(); - editor.focus(); - monaco.editor.getModels()[0].updateOptions({ tabSize: 5 }); - }; - const [editing, setEditing] = useState(false); - const onChange = (value) => { - // console.log(value); - }; - var parsable_net_equation = props.data.net_eq.replace(/[`]+/g, ''); - - var obj = { - namespace_name: props.data.namespace, - deployment_value: props.data.deployment, - experiment_name: props.data.exp_name, - variable1_name: 'throughput', - variable1_query: props.data.THquery, - variable1_datasource: props.data.THdatasource, - variable1_value_type: props.data.THvaluetype, - variable2_name: 'response time', - variable2_query: props.data.RTquery, - variable2_datasource: props.data.RTdatasource, - variable2_value_type: props.data.RTvaluetype, - variable3_name: 'resource usage', - variable3_query: props.data.RUquery, - variable3_datasource: props.data.RUdatasource, - variable3_value_type: props.data.RUvaluetype, - net_equation: parsable_net_equation - }; - const data = yaml.toString(); - const data2 = data.replace( - /\b(net_equation|namespace_name|deployment_value|experiment_name|variable1_name|variable1_query|variable1_datasource|variable1_value_type|variable2_name|variable2_query|variable2_datasource|variable2_value_type|variable3_name|variable3_query|variable3_datasource|variable3_value_type)\b/gi, - function (matched) { - return obj[matched]; - } - ); - - const formMode = () => { - return ( - - - - {editing ? ( - - ) : ( - - )} - - - - - ); - }; - - return ( - <> - - - - - YAML Generated - - The following yaml has been generated for you... -
-
-
-
-
-
- {formMode} - - - ); -}; diff --git a/src/app/GenerateYaml/ab.tsx b/src/app/GenerateYaml/ab.tsx deleted file mode 100644 index 8844184e..00000000 --- a/src/app/GenerateYaml/ab.tsx +++ /dev/null @@ -1,35 +0,0 @@ -export default `apiVersion: "recommender.com/v1" -kind: Autotune -metadata: - name: "experiment_name" - namespace: "namespace_name" -spec: - slo: - objective_function: "net_equation" - slo_class: "throughput" - direction: "maximize" - hpo_algo_impl: "optuna_tpe" - function_variables: - - name: "variable1_name" - query: "variable1_query" - datasource: "variable1_datasource" - value_type: "variable1_value_type" - - name: "variable2_name" - query: "variable2_query" - datasource: "variable2_datasource" - value_type: "variable2_value_type" - - name: "variable3_name" - query: "variable3_query" - datasource: "variable3_datasource" - value_type: "variable3_value_type" - mode: "monitor" - selector: - matchLabel: "app.kubernetes.io/name" - matchLabelValue: "deployment_value" - matchRoute: "" - matchURI: "" - matchService: "" - datasource: - name: "prometheus" - value: "prometheus_URL" -`; diff --git a/src/app/LocalMonitoring/DatasourceTable.tsx b/src/app/LocalMonitoring/DatasourceTable.tsx deleted file mode 100644 index bfcf30ce..00000000 --- a/src/app/LocalMonitoring/DatasourceTable.tsx +++ /dev/null @@ -1,99 +0,0 @@ -import { - Button, - OverflowMenu, - OverflowMenuContent, - OverflowMenuGroup, - OverflowMenuItem, - TextContent -} from '@patternfly/react-core'; -import { Table, Thead, Tr, Th, Tbody, Td } from '@patternfly/react-table'; -import React, { useState } from 'react'; -import ClusterData from './ImportMeta.json'; -import { ClusterGroupTables } from './ClusterGroupTables'; -import { importDataSourcesMetadataURL, getMetaDataURL } from '@app/CentralConfig'; - -const DatasourceTable = (props: { fetchDatasourcesData }) => { - const [clusterGroupData, setClusteGroupData] = useState(); - - const handleImportMetadata = async (dataSourceName: string) => { - console.log(dataSourceName); - const payload = { - version: 'v1.0', - datasource_name: dataSourceName - }; - // const list_datasources_url: string = importDataSourcesMetadataURL(); - - const response = await fetch(importDataSourcesMetadataURL(), { - method: 'POST', - headers: { - 'Content-Type': 'application/json' - }, - body: JSON.stringify(payload) - }); - const post_api_data = await response.json(); - console.log(post_api_data); - - // calling get api - - const response_get = await fetch(getMetaDataURL(dataSourceName)); - const get_api_data = await response_get.json(); - setClusteGroupData(get_api_data); - console.log(get_api_data); - }; - - return ( - - Data Sources Table - - - - - - - - - - - - - {props.fetchDatasourcesData.datasources.map((source, index) => ( - - - - - - - - - ))} - -
DataSource NameProviderService NameNamespaceURLActions
{source.name}{source.provider}{source.serviceName}{source.namespace}{source.url} - - - - - - - - - - - - -
-

- {clusterGroupData ? ( - <> - Cluster Groups Table - - - ) : ( - <> - )} -
- ); -}; - -export { DatasourceTable }; diff --git a/src/app/RunExperiment/DefineGoals.tsx b/src/app/RunExperiment/DefineGoals.tsx deleted file mode 100644 index e5b3a3f1..00000000 --- a/src/app/RunExperiment/DefineGoals.tsx +++ /dev/null @@ -1,57 +0,0 @@ -import { - PageSection, - PageSectionVariants, - TextContent, - Text, - TextVariants, - Radio, - Flex, - FlexItem, - FormGroup -} from '@patternfly/react-core'; -import React, { useEffect, useState } from 'react'; - -const DefineGoals = (props: { data; setData }) => { - const [check1, setCheck1] = useState<'predefined' | 'custom'>(props.data['profile']); - useEffect(() => { - props.setData({ ...{ ...props.data }, profile: check1 }); - }, [check1]); - - return ( - - - - - Define Performance Goals - - - - - - setCheck1('predefined')} - /> - - setCheck1('custom')} - /> - - - - - - ); -}; - -export { DefineGoals }; diff --git a/src/app/RunExperiment/DeploymentsDropdown.tsx b/src/app/RunExperiment/DeploymentsDropdown.tsx deleted file mode 100644 index f41793ac..00000000 --- a/src/app/RunExperiment/DeploymentsDropdown.tsx +++ /dev/null @@ -1,65 +0,0 @@ -import React, { useState, useEffect, useContext } from 'react'; -import { - Select, - SelectOption, - SelectVariant -} from '@patternfly/react-core/deprecated'; -import nodeContext from '@app/ContextStore/nodeContext'; - -const DeploymentsDropdown = (props: { data; setData }) => { - const [deployments, setDeployments] = useState([]); - const [selected, setSelected] = useState(props.data['deployment']); - const [isopen, setIsopen] = useState(false); - const Context = useContext(nodeContext); - const ip = Context['cluster']; - const port = Context['autotune']; - const namesp = sessionStorage.getItem('Namespace Value'); - const deployments_url = 'http://' + ip + ':' + port + '/query/listDeployments?namespace=' + namesp; - - useEffect(() => { - setSelected(sessionStorage.getItem('Deployment Value')); - fetch(deployments_url) - .then((res) => res.json()) - .then((res) => setDeployments(res.data.deployments)); - }, [namesp]); - - useEffect(() => { - props.setData({ ...{ ...props.data }, deployment: selected }); - }, [selected]); - - useEffect(() => { - setSelected(sessionStorage.setItem('Deployment Value', '')); - }, [namesp]); - - const onSelect = (event, selection, isPlaceholder) => { - setSelected(selection); - setIsopen(false); - sessionStorage.setItem('Deployment Value', selection); - var payload = { - deployment: selection - }; - }; - return ( - <> - {deployments.length === 0 ? ( -

No deployments found

- ) : ( - - )} - - ); -}; - -export default DeploymentsDropdown; diff --git a/src/app/RunExperiment/NameSpaceDropDown.tsx b/src/app/RunExperiment/NameSpaceDropDown.tsx deleted file mode 100644 index c8b66165..00000000 --- a/src/app/RunExperiment/NameSpaceDropDown.tsx +++ /dev/null @@ -1,60 +0,0 @@ -import React, { useState, useEffect, useContext } from 'react'; -import { - Select, - SelectOption, - SelectVariant -} from '@patternfly/react-core/deprecated'; -import nodeContext from '@app/ContextStore/nodeContext'; - -const NameSpaceDropDown = (props: { data; setData }) => { - const [namespaces, setNamespaces] = useState([]); - const [selected, setSelected] = useState(props.data['namespace']); - const [isopen, setIsopen] = useState(false); - const Context = useContext(nodeContext); - const ip = Context['cluster']; - const port = Context['autotune']; - const namespace_url = 'http://' + ip + ':' + port + '/query/listNamespaces'; - - useEffect(() => { - if (ip != 'undefined' && port != 'undefined') { - // setSelected(sessionStorage.getItem('Namespace Value')); - fetch(namespace_url) - .then((res) => res.json()) - .then((res) => setNamespaces(res.data.namespaces)); - } - }, []); - - useEffect(() => { - props.setData({ ...{ ...props.data }, namespace: selected }); - }, [selected]); - - const onSelect = (event, selection, isPlaceholder) => { - setSelected(selection); - setIsopen(false); - sessionStorage.setItem('Namespace Value', selection); - var payload = { - namespace: selection - }; - }; - - return ( - <> - - - ); -}; - -export default NameSpaceDropDown; diff --git a/src/app/RunExperiment/PerformanceProfilePages/AdvancedSection.tsx b/src/app/RunExperiment/PerformanceProfilePages/AdvancedSection.tsx deleted file mode 100644 index ae875ff1..00000000 --- a/src/app/RunExperiment/PerformanceProfilePages/AdvancedSection.tsx +++ /dev/null @@ -1,123 +0,0 @@ -import { - TextInput, - Form, - FormSection, - FormGroup, - Radio, - Flex, - FlexItem, - TextInputGroup, - TextInputGroupMain -} from '@patternfly/react-core'; - -import React, { useState } from 'react'; -import { NumberValueComponent } from './PerfComponents/NumberValueComponent'; -import { UnitsOfTime } from './PerfComponents/UnitsOfTime'; -import { Accordions } from './PerfComponents/Accordions'; -import NameSpaceDropDown from '../NameSpaceDropDown'; -const AdvancedSection = () => { - const RecommendationSettings = () => { - return ( - - - - - - - - ); - }; - - const TrialSettings = () => { - return ( - - - - - - ); - }; - const Sensitivity = () => { - return ( - - - - - ); - }; - - const RecommendationWindowSize = () => { - return ( - - With a minimum value of 0 and maximum value of 15 -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- ); - }; - return ( -
{ - e.preventDefault(); - }} - > - <> - {TrialSettings()} - {RecommendationSettings()} - {Sensitivity()} - {RecommendationWindowSize()} - -
- ); -}; - -export { AdvancedSection }; diff --git a/src/app/RunExperiment/PerformanceProfilePages/PerfComponents/Accordions.tsx b/src/app/RunExperiment/PerformanceProfilePages/PerfComponents/Accordions.tsx deleted file mode 100644 index b023f98e..00000000 --- a/src/app/RunExperiment/PerformanceProfilePages/PerfComponents/Accordions.tsx +++ /dev/null @@ -1,24 +0,0 @@ -import React, { useState } from 'react'; -import { Accordion, AccordionItem, AccordionContent, AccordionToggle } from '@patternfly/react-core'; - -const Accordions = () => { - return ( - - - Trial Settings - -

Measurement duration : 15 mins

-
-
- - - Recommendation Settings - -

threshold: '0.1'

-
-
-
- ); -}; - -export { Accordions }; diff --git a/src/app/RunExperiment/PerformanceProfilePages/PerfComponents/NumberValueComponent.tsx b/src/app/RunExperiment/PerformanceProfilePages/PerfComponents/NumberValueComponent.tsx deleted file mode 100644 index 13bd4567..00000000 --- a/src/app/RunExperiment/PerformanceProfilePages/PerfComponents/NumberValueComponent.tsx +++ /dev/null @@ -1,67 +0,0 @@ -import React, { useState } from 'react'; -import { NumberInput } from '@patternfly/react-core'; -import { number } from 'prop-types'; -import { UnitsOfTime } from './UnitsOfTime'; - -const NumberValueComponent = () => { - const [value, setValue] = useState(0); - const minValue = 0; - const maxValue = 15; - - const normalizeBetween = (value, min, max) => { - if (min !== undefined && max !== undefined) { - return Math.max(Math.min(value, max), min); - } else if (value <= min) { - return min; - } else if (value >= max) { - return max; - } - return value; - }; - - const onMinus = () => { - const newValue = normalizeBetween((value as number) - 1, minValue, maxValue); - setValue(newValue); - }; - - const onChange = (event: React.FormEvent) => { - const value = (event.target as HTMLInputElement).value; - setValue(value === '' ? value : +value); - }; - - const onBlur = (event: React.FocusEvent) => { - const blurVal = +event.target.value; - - if (blurVal < minValue) { - setValue(minValue); - } else if (blurVal > maxValue) { - setValue(maxValue); - } - }; - - const onPlus = () => { - const newValue = normalizeBetween((value as number) + 1, minValue, maxValue); - setValue(newValue); - }; - - return ( - - - - ); -}; - -export { NumberValueComponent }; diff --git a/src/app/RunExperiment/PerformanceProfilePages/PerfComponents/UnitsOfTime.tsx b/src/app/RunExperiment/PerformanceProfilePages/PerfComponents/UnitsOfTime.tsx deleted file mode 100644 index 7d1a8aad..00000000 --- a/src/app/RunExperiment/PerformanceProfilePages/PerfComponents/UnitsOfTime.tsx +++ /dev/null @@ -1,24 +0,0 @@ -import React, { useState } from 'react'; -import { FormSelect, FormSelectOption } from '@patternfly/react-core'; - -const UnitsOfTime = () => { - const [unit, setUnit] = useState('Select Mode'); - const handleUnitChange = (value) => { - setUnit(value); - }; - - const units = [ - { value: '1', label: 'Days', disabled: false }, - { value: '2', label: 'Hours', disabled: false }, - { value: '3', label: 'Minutes', disabled: false } - ]; - return ( - handleUnitChange(value)} aria-label="mode"> - {units.map((option, index) => ( - - ))} - - ); -}; - -export { UnitsOfTime }; diff --git a/src/app/RunExperiment/PerformanceProfilePages/PerformanceProfiles.tsx b/src/app/RunExperiment/PerformanceProfilePages/PerformanceProfiles.tsx deleted file mode 100644 index dcc50712..00000000 --- a/src/app/RunExperiment/PerformanceProfilePages/PerformanceProfiles.tsx +++ /dev/null @@ -1,84 +0,0 @@ -import React, { useState } from 'react'; -import { - Grid, - GridItem, - PageSection, - PageSectionVariants, - Tabs, - Tab, - TabTitleText, - TabTitleIcon, - TextContent, - Text, - TextVariants -} from '@patternfly/react-core'; -import { RegularSection } from './RegularSection'; -import { AdvancedSection } from './AdvancedSection'; -import { CubesIcon } from '@patternfly/react-icons/dist/esm/icons/cubes-icon'; -import { CubeIcon } from '@patternfly/react-icons'; - -const PerformanceProfiles = () => { - const [activeTabKey, setActiveTabKey] = React.useState(0); - - const handleTabClick = ( - event: React.MouseEvent | React.KeyboardEvent | MouseEvent, - tabIndex: string | number - ) => { - setActiveTabKey(tabIndex); - }; - - return ( -
- - - Autotune Supported Performance Profiles - -
- - - - - - - {' '} - Regular Settings{' '} - - - } - > - - -
-
- - - - - {' '} - Advanced Settings{' '} - - - } - > - - -
-
-
-
- ); -}; -export { PerformanceProfiles }; diff --git a/src/app/RunExperiment/PerformanceProfilePages/RegularSection.tsx b/src/app/RunExperiment/PerformanceProfilePages/RegularSection.tsx deleted file mode 100644 index 47fac9b7..00000000 --- a/src/app/RunExperiment/PerformanceProfilePages/RegularSection.tsx +++ /dev/null @@ -1,112 +0,0 @@ -import React, { useState, useEffect, useContext } from 'react'; -import { FormGroup, FormSelect, FormSelectOption, Form, FormSection, Checkbox } from '@patternfly/react-core'; -import nodeContext from '@app/ContextStore/nodeContext'; - -const RegularSection = () => { - const Context = useContext(nodeContext); - const ip = Context['cluster']; - const port = Context['autotune']; - const performance_profile_url = 'http://' + ip + ':' + port + '/listPerformanceProfiles'; - - const [mode, setMode] = useState('Select Mode'); - const [cluster, setCluster] = useState('Select Cluster'); - const [profiles, setProfiles] = useState([]); - const [profile, setProfile] = useState('select'); - - const fetchProfiles = async (url) => { - try { - const res = await fetch(url); - const data = await res.json(); - if (data.length > 0) { - setProfiles(data); - } - console.log(data[0].name); - } catch (e) { - console.error(e); - } - }; - useEffect(() => { - fetchProfiles(performance_profile_url); - }, []); - - const handleProfileChange = (_event: React.FormEvent, value) => { - setProfile(value); - }; - const handleModeChange = (_event: React.FormEvent, value) => { - setMode(value); - }; - const handleClusterChange = (_event: React.FormEvent, value) => { - setCluster(value); - }; - - const modes = [ - { value: '1', label: 'monitor', disabled: false }, - { value: '2', label: 'trial', disabled: false } - ]; - const clusters = [ - { value: '1', label: 'remote', disabled: false }, - { value: '2', label: 'local', disabled: false } - ]; - - const PerfProfileDropDown = () => { - return ( - - - {profiles.map((data, index) => ( - - ))} - - - ); - }; - - const modeDropDown = () => { - return ( - - - {modes.map((option, index) => ( - - ))} - - - ); - }; - - const clusterDropDown = () => { - return ( - - - {clusters.map((option, index) => ( - - ))} - - - ); - }; - const containersCheckbox = () => { - return ( - - - - - ); - }; - - return ( -
{ - e.preventDefault(); - }} - > - - {PerfProfileDropDown()} - {modeDropDown()} - {clusterDropDown()} - {containersCheckbox()} - -
- ); -}; - -export { RegularSection }; diff --git a/src/app/RunExperiment/RE.tsx b/src/app/RunExperiment/RE.tsx deleted file mode 100644 index 53280933..00000000 --- a/src/app/RunExperiment/RE.tsx +++ /dev/null @@ -1,86 +0,0 @@ -import React, { useState, useContext, useEffect } from 'react'; -import { - PageSection, - PageSectionVariants, - Toolbar, - ToolbarContent, - FormGroup, - Grid, - GridItem, - TextContent, - Text, - TextVariants, - TextInputGroup, - TextInputGroupMain -} from '@patternfly/react-core'; -import NameSpaceDropDown from './NameSpaceDropDown'; -import DeploymentsDropdown from './DeploymentsDropdown'; -import nodeContext from '@app/ContextStore/nodeContext'; - -const RE = (props: { setData; data }) => { - const [exp_name, setExp_name] = useState('--'); - const Context = useContext(nodeContext); - - useEffect(() => { - props.setData({ ...{ ...props.data }, exp_name: exp_name }); - }, [exp_name]); - - useEffect(() => { - setExp_name(sessionStorage.getItem('Exp name Value')!); - }, []); - - const onTextInputHandler = (exp_name) => { - sessionStorage.setItem('Exp name Value', exp_name); - setExp_name(exp_name); - }; - - const dropd = () => { - return ( - <> - - - - - New Experiment - - Select your specific Namespace and Deployment to start with Experiment. - - - - - - - - - - - onTextInputHandler(exp_name)} - aria-label="Text inp 101" - /> - - -
-
-
- - - - - - - - -
-
-
-
- - ); - }; - return
{dropd()}
; -}; - -export default RE; diff --git a/src/app/RunExperiment/RunExperiment.tsx b/src/app/RunExperiment/RunExperiment.tsx deleted file mode 100644 index f256919b..00000000 --- a/src/app/RunExperiment/RunExperiment.tsx +++ /dev/null @@ -1,170 +0,0 @@ -import React, { useState, useContext, useEffect } from 'react'; -import { - Grid, - GridItem -} from '@patternfly/react-core'; -import { - Wizard -} from '@patternfly/react-core/deprecated'; -import RE from './RE'; -import { ExperimentStatus } from '@app/ExperimentStatus/ExperimentStatus'; -import { ExperimentDetails } from '@app/ExperimentStatus/MoreExperimentStuff/ExperimentDetails'; -import { CodeEditorWithActions } from '@app/GenerateYaml/CodeEditorWithActions'; -import nodeContext from '@app/ContextStore/nodeContext'; -import EnvState from '@app/ContextStore/EnvState'; -import { Final_equation } from 'src/app/ExperimentStatus/MoreExperimentStuff/Final_equation'; -import { Throughput_details } from 'src/app/ExperimentStatus/MoreExperimentStuff/Throughput_details'; -import { Response_time_details } from 'src/app/ExperimentStatus/MoreExperimentStuff/Response_time_details'; -import { Resource_usage_details } from 'src/app/ExperimentStatus/MoreExperimentStuff/Resource_usage_details'; -import { DefineGoals } from './DefineGoals'; -import { PerformanceProfiles } from './PerformanceProfilePages/PerformanceProfiles'; -import { FinishedStep } from '@app/FinishedStep/FinishedStep'; -const dataa = { - exp_name: '', - namespace: '', - deployment: '', - profile: '', - - THweightage: 25, - THoperator: '1', - THquery: 'application_org_acme_microprofile_metrics_PrimeNumberChecker_checksTimer_mean_seconds', - THdatasource: 'prometheus', - THvaluetype: 'double', - THdirection: 'max', - THequation: '0.25 * throughput', - - RTweightage: 50, - RToperator: '1', - RTquery: 'application_org_acme_microprofile_metrics_PrimeNumberChecker_checksTimer_mean_seconds', - RTdatasource: 'prometheus', - RTvaluetype: 'double', - RTdirection: 'min', - RTequation: '0.5 * responsetime', - - RUweightage: 25, - RUoperator: '1', - RUquery: 'application_org_acme_microprofile_metrics_PrimeNumberChecker_checksTimer_mean_seconds', - RUdatasource: 'prometheus', - RUvaluetype: 'double', - RUdirection: 'min', - RUequation: '0.25 * resourceusage', - net_eq: ' : (0.25 * Throughput) / ( (0.5 * Response Time) * ( 0.25 * Resource Usage) )', - allDone: '' -}; - -const RunExperiment = (props: { setData; data }) => { - const [data, setData] = useState(dataa); - const [stepId, setStepId] = useState(1); - const enable_progress = () => { - if (data.deployment || data.allDone) { - setStepId(stepId + 1); - } - }; - - const steps = [ - { - id: 1, - name: 'New Experiment', - component: , - enableNext: data.deployment != '' && data.namespace && data.exp_name - }, - //{ name: 'Experiment Status', component: }, - { - id: 2, - name: 'Define Performance Goals', - component: , - enableNext: data.profile, - canJumpTo: stepId >= 2 - }, - { - id: 3, - name: data.profile === 'custom' ? 'Experiment Details' : 'Performance Profiles', - component: - data.profile === 'custom' ? : , - // enableNext: data.allDone, - canJumpTo: stepId >= 3, - steps: - data.profile === 'custom' - ? [ - { - id: 4, - name: 'Throughput', - component: ( - - - - - - - - - ), - canJumpTo: stepId >= 3 - }, - { - id: 5, - name: 'Response Time', - component: ( - - - - - - - - - ), - canJumpTo: stepId >= 3 - }, - { - id: 6, - name: 'Resource Usage', - component: ( - - - - - - - - - ), - canJumpTo: stepId >= 3 - }, - { - id: 7, - name: 'Final Equation', - component: , - hideClose: true, - canJumpTo: stepId >= 3 - } - ] - : null - }, - { - id: 8, - name: 'YAML Generated', - component: , - nextButtonText: 'Apply', - canJumpTo: stepId >= 4 - }, - { name: 'Finish', component: , isFinishedStep: true } - ]; - const title = 'Basic wizard'; - - return ( - <> - - - - - ); -}; - -export { RunExperiment }; diff --git a/src/app/routes.tsx b/src/app/routes.tsx index 142fb85c..4fdda735 100644 --- a/src/app/routes.tsx +++ b/src/app/routes.tsx @@ -1,16 +1,6 @@ import * as React from 'react'; import { Route, RouteComponentProps, Switch } from 'react-router-dom'; import { About } from '@app/About/About'; -import { RunExperiment } from '@app/RunExperiment/RunExperiment'; -import { RemoteMonitoring } from '@app/Analytics/RemoteMonitoring/RemoteMonitoring'; -import { UserAnalytics } from './Analytics/User_Analytics/UserAnalytics'; -import { ObjectiveFunction } from '@app/AdvancedUser/ObjectiveFunction'; -import { LayerDefination } from '@app/AdvancedUser/LayerDefination'; -import { TrialSettings } from '@app/AdvancedUser/TrialSettings'; -import { InstallationGuide } from '@app/Documentation/InstallationGuide'; -import { FAQs } from './Documentation/FAQs'; -import { Glossary } from './Documentation/Glossary'; -import { CommunityCall } from './Documentation/CommunityCall'; import { NotFound } from '@app/NotFound/NotFound'; import { LastLocationProvider, useLastLocation } from 'react-router-last-location'; import { LocalMonitoring } from './Analytics/LocalMonitoring/LocalMonitoring'; @@ -49,15 +39,6 @@ const routes: AppRouteConfig[] = [ menu: true }, - { - component: RunExperiment, - exact: true, - isAsync: true, - label: 'New Experiment', - path: '/newexperiment', - title: 'New Experiment', - menu: false - }, { label: 'SRE Analytics', routes: [ @@ -80,19 +61,6 @@ const routes: AppRouteConfig[] = [ ], menu: true }, - // { - // label: 'Cluster Table', - // routes: [ - // { - // component: ClusterDataTable, - // exact: true, - // label: 'cluster data', - // path: '/local_monitoring/cluster_data', - // title: 'cluster data' - // } - // ], - // menu: false - // }, { label: 'Datasources', routes: [ @@ -120,72 +88,9 @@ const routes: AppRouteConfig[] = [ ], menu: false }, - { - label: 'Advanced User', - routes: [ - { - component: ObjectiveFunction, - exact: true, - label: 'ObjectiveFunction', - path: '/advanceduser/objectivefunction', - title: 'Objective Function' - }, - { - component: LayerDefination, - exact: true, - label: 'LayerDefination', - path: '/advanced_user/layerdefination', - title: 'Layer Defination' - }, - { - component: TrialSettings, - exact: true, - label: 'TrialSettings', - path: '/advanced_user/trialsettings', - title: 'Trial Settings' - } - ], - menu: false - }, - { - label: 'Documentation', - routes: [ - { - component: InstallationGuide, - exact: true, - label: 'InstallationGuide', - path: '/documentation/installationguide', - title: 'Installation Guide' - }, - { - component: Glossary, - exact: true, - label: 'Glossary', - path: '/documentation/glossary', - title: 'Layer Defination' - }, - { - component: FAQs, - exact: true, - label: 'FAQs', - path: '/documentation/faqs', - title: 'FAQs' - }, - { - component: CommunityCall, - exact: true, - label: 'Community Call', - path: '/documentation/communitycall', - title: 'Community Call' - } - ], - menu: false - } ]; -// a custom hook for sending focus to the primary content container -// after a view has loaded so that subsequent press of tab key -// sends focus directly to relevant content + const useA11yRouteChange = (isAsync: boolean) => { const lastNavigation = useLastLocation(); React.useEffect(() => { @@ -200,7 +105,6 @@ const useA11yRouteChange = (isAsync: boolean) => { const RouteWithTitleUpdates = ({ component: Component, isAsync = false, title, ...rest }: IAppRoute) => { useA11yRouteChange(isAsync); - // useDocumentTitle(title); function routeWithTitle(routeProps: RouteComponentProps) { return ; @@ -210,7 +114,6 @@ const RouteWithTitleUpdates = ({ component: Component, isAsync = false, title, . }; const PageNotFound = ({ title }: { title: string }) => { - // useDocumentTitle(title); return ; }; diff --git a/src/index.tsx b/src/index.tsx index 580420a4..4fcc8ab2 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -3,7 +3,6 @@ import ReactDOM from 'react-dom/client'; import App from '@app/index'; import '@patternfly/react-core/dist/styles/base.css'; import { setDiagnosticsOptions } from 'monaco-yaml'; -import * as monaco from 'monaco-editor'; setDiagnosticsOptions({ enableSchemaRequest: true, @@ -28,5 +27,6 @@ if (process.env.NODE_ENV !== 'production') { axe(React, ReactDOM, 1000, config); } -const root = ReactDOM.createRoot(document.getElementById('root')); +const rootElement = document.getElementById('root') as HTMLElement; +const root = ReactDOM.createRoot(rootElement); root.render(); diff --git a/tsconfig.json b/tsconfig.json index 9955b950..8c4954a8 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -2,7 +2,6 @@ "compilerOptions": { "resolveJsonModule": true, "typeRoots": [ "", "./node_modules/@types"], - "baseUrl": ".", "rootDir": ".", "outDir": "dist", From 574b067a021ca435d3548caf858f981386877a1d Mon Sep 17 00:00:00 2001 From: bhanvimenghani Date: Wed, 9 Oct 2024 17:47:35 +0530 Subject: [PATCH 08/31] fixes last minute changes --- .../LocalMonitoring/ClusterDataTable.tsx | 10 +-- .../LocalMonitoring/ClusterGroupTables.tsx | 2 - .../LocalMonitoring/CreateExperiment.tsx | 4 +- .../LocalMonitoring/DatasourceTable.tsx | 1 - .../GenerateJSON/CodeEditorWithActions.tsx | 27 +------ .../LocalMonitoring/LocalMonitoring.tsx | 2 - .../RemoteMonitoring/Monitoring.tsx | 6 +- .../BoxPlots/BoxPlot.tsx | 31 +++---- .../BoxPlots/CostBoxPlotCharts.tsx | 32 +++++--- .../BoxPlots/PerfBoxPlotCharts.tsx | 72 ++++++++++------- .../RecommendationComponents/CostDetails.tsx | 81 ++++++++++--------- .../RecommendationComponents/PerfDetails.tsx | 50 ++++++------ .../RecommendationComponents/TabSection.tsx | 6 +- .../RemoteMonitoring/RecommendationTables.tsx | 17 ++-- .../RemoteMonitoring/UsecaseSelection.tsx | 14 ---- 15 files changed, 162 insertions(+), 193 deletions(-) diff --git a/src/app/Analytics/LocalMonitoring/ClusterDataTable.tsx b/src/app/Analytics/LocalMonitoring/ClusterDataTable.tsx index 285bf153..b3f06e3a 100644 --- a/src/app/Analytics/LocalMonitoring/ClusterDataTable.tsx +++ b/src/app/Analytics/LocalMonitoring/ClusterDataTable.tsx @@ -14,10 +14,7 @@ import React, { useEffect, useState } from 'react'; import { Link, useLocation } from 'react-router-dom'; import { getClusterMetadataURL } from '@app/CentralConfig'; import { PlusIcon } from '@patternfly/react-icons'; -interface LocationState { - cluster: string; - datasource: string; -} + interface Container { container_name: string; container_image_name: string; @@ -168,11 +165,6 @@ const ClusterDataTable = (props: { datasource, clustername }) => { - {/* - List Recommendation
} position={TooltipPosition.top}> - - - */} diff --git a/src/app/Analytics/LocalMonitoring/ClusterGroupTables.tsx b/src/app/Analytics/LocalMonitoring/ClusterGroupTables.tsx index b34a3976..76d243ed 100644 --- a/src/app/Analytics/LocalMonitoring/ClusterGroupTables.tsx +++ b/src/app/Analytics/LocalMonitoring/ClusterGroupTables.tsx @@ -62,7 +62,6 @@ const ClusterGroupTables = (props: { clusterGroupData; dsname }) => { return ( - @@ -85,7 +84,6 @@ const ClusterGroupTables = (props: { clusterGroupData; dsname }) => {
{showClusterTable && } -
) }; diff --git a/src/app/Analytics/LocalMonitoring/CreateExperiment.tsx b/src/app/Analytics/LocalMonitoring/CreateExperiment.tsx index bd4042c9..bbcfd522 100644 --- a/src/app/Analytics/LocalMonitoring/CreateExperiment.tsx +++ b/src/app/Analytics/LocalMonitoring/CreateExperiment.tsx @@ -25,7 +25,7 @@ interface LocationState { */ -const CreateExperiment = (props: { clusterGroupData }) => { +const CreateExperiment = () => { const [experimentsNotFound, setExperimentsNotFound] = useState(false); const location = useLocation(); @@ -72,10 +72,8 @@ const CreateExperiment = (props: { clusterGroupData }) => { return ( - {experimentsNotFound == true ? : } - ); }; diff --git a/src/app/Analytics/LocalMonitoring/DatasourceTable.tsx b/src/app/Analytics/LocalMonitoring/DatasourceTable.tsx index 6096dbfb..580cf259 100644 --- a/src/app/Analytics/LocalMonitoring/DatasourceTable.tsx +++ b/src/app/Analytics/LocalMonitoring/DatasourceTable.tsx @@ -1,5 +1,4 @@ import { Button, OverflowMenu, OverflowMenuContent, OverflowMenuGroup, OverflowMenuItem } from '@patternfly/react-core'; -import { Link } from 'react-router-dom'; import { Table, Thead, Tr, Th, Tbody, Td } from '@patternfly/react-table'; import React, { useState } from 'react'; import { importDataSourcesMetadataURL } from '@app/CentralConfig'; diff --git a/src/app/Analytics/LocalMonitoring/GenerateJSON/CodeEditorWithActions.tsx b/src/app/Analytics/LocalMonitoring/GenerateJSON/CodeEditorWithActions.tsx index 7d1d6670..8dab19eb 100644 --- a/src/app/Analytics/LocalMonitoring/GenerateJSON/CodeEditorWithActions.tsx +++ b/src/app/Analytics/LocalMonitoring/GenerateJSON/CodeEditorWithActions.tsx @@ -1,5 +1,4 @@ import React, { useState } from 'react'; -import { CodeEditor, Language } from '@patternfly/react-code-editor'; import { PageSection, TextContent, @@ -17,11 +16,7 @@ import { Alert } from '@patternfly/react-core'; export const CodeEditorWithActions = (props: { data; setData }) => { const [showSuccessAlert, setShowSuccessAlert] = useState(false); - const onEditorDidMount = (editor, monaco) => { - editor.layout(); - editor.focus(); - monaco.editor.getModels()[0].updateOptions({ tabSize: 5 }); - }; + var obj = { subsitute_namespace: props.data.projectName, subsitute_experiment_name: props.data.exp_name, @@ -42,12 +37,6 @@ export const CodeEditorWithActions = (props: { data; setData }) => { const [codeEditorData, setCodeEditorData] = useState([data2]); - const onChange = (value) => { - setCodeEditorData(value); - console.log(value); - console.log(typeof value); - }; - /// POST API call const handlePostExperimentJson = async (codeEditorData) => { @@ -65,7 +54,6 @@ export const CodeEditorWithActions = (props: { data; setData }) => { console.log(data); if (response.ok) { setShowSuccessAlert(true); - setTimeout(() => setShowSuccessAlert(false), 3000); } } catch (error) { console.error('Error during data import:', error); @@ -74,7 +62,6 @@ export const CodeEditorWithActions = (props: { data; setData }) => { }; return ( - <> {showSuccessAlert && } @@ -89,23 +76,11 @@ export const CodeEditorWithActions = (props: { data; setData }) => { - - {/* */}
- ); }; diff --git a/src/app/Analytics/LocalMonitoring/LocalMonitoring.tsx b/src/app/Analytics/LocalMonitoring/LocalMonitoring.tsx index bad45a2c..4fa44d4a 100644 --- a/src/app/Analytics/LocalMonitoring/LocalMonitoring.tsx +++ b/src/app/Analytics/LocalMonitoring/LocalMonitoring.tsx @@ -1,6 +1,4 @@ import { - FormSelect, - FormSelectOption, PageSection, PageSectionVariants, TextContent, diff --git a/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/Monitoring.tsx b/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/Monitoring.tsx index f0c39590..e962e25c 100644 --- a/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/Monitoring.tsx +++ b/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/Monitoring.tsx @@ -36,6 +36,7 @@ const Monitoring = () => { }); return ( + <> Monitoring @@ -50,6 +51,8 @@ const Monitoring = () => { notification={notifications} setNotification={setNotifications} /> + + <> {displyRecc && ( { setNotification={setNotifications} /> )} -
+ + ); }; diff --git a/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/BoxPlots/BoxPlot.tsx b/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/BoxPlots/BoxPlot.tsx index 34e0169e..766e3252 100644 --- a/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/BoxPlots/BoxPlot.tsx +++ b/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/BoxPlots/BoxPlot.tsx @@ -10,21 +10,10 @@ import chart_color_orange_300 from '@patternfly/react-tokens/dist/esm/chart_colo import chart_color_blue_300 from '@patternfly/react-tokens/dist/esm/chart_color_blue_300'; import { createContainer } from './wrapper'; -// const formatDate = (dateString) => { -// if (!dateString) return ''; // Return empty string if dateString is undefined or null -// const date = new Date(dateString); -// return new Intl.DateTimeFormat('en-US', { -// year: 'numeric', -// month: 'short', -// day: 'numeric', -// hour: '2-digit', -// minute: '2-digit' -// }).format(date); -// }; const formatNumber = (number, decimals = 3) => { if (number == null || isNaN(number)) { - return ''; // Return an empty string or some default value if the value is not a number + return ''; } return number.toFixed(decimals); }; @@ -57,6 +46,7 @@ interface BoxPlotProps { domain?: { y?: [number, number] }; themeColor?: string; legendData?: Array<{ name: string }>; + isCpuPlot?: boolean; } const BoxPlot: React.FC = ({ @@ -67,7 +57,8 @@ const BoxPlot: React.FC = ({ ariaDesc = '', domain, themeColor, - legendData = [] + legendData = [] , + isCpuPlot = false }) => { console.log(data); const CursorVoronoiContainer = createContainer('voronoi', 'cursor'); @@ -86,23 +77,23 @@ const BoxPlot: React.FC = ({ Max - {datum ? formatNumber(datum._max) : 'N/A'} + {datum ? (isCpuPlot ? formatNumber(datum._max) : datum._max) : 'N/A'} Median - {datum ? formatNumber(datum._median) : 'N/A'} + {datum ? (isCpuPlot ? formatNumber(datum._median) : datum._median) : 'N/A'} Min - {datum ? formatNumber(datum._min) : 'N/A'} + {datum ? (isCpuPlot ? formatNumber(datum._min) : datum._min) : 'N/A'} Q1 - {datum ? formatNumber(datum._q1) : 'N/A'} + {datum ? (isCpuPlot ? formatNumber(datum._q1) : datum._q1) : 'N/A'} Q3 - {datum ? formatNumber(datum._q3) : 'N/A'} + {datum ? (isCpuPlot ? formatNumber(datum._q3) : datum._q3) : 'N/A'} @@ -120,7 +111,7 @@ const BoxPlot: React.FC = ({ cursorDimension="x" labels={({ datum }) => { if (datum && datum.y != null) { - return `${datum.x}: ${formatNumber(datum.y)}`; + return `${datum.x}: ${isCpuPlot ? formatNumber(datum.y) : datum.y}`; } else { return 'no data'; } @@ -179,7 +170,7 @@ const BoxPlot: React.FC = ({ axisLabel: { padding: 60 } }} dependentAxis - tickFormat={(tick) => formatNumber(tick)} + tickFormat={(tick) => (isCpuPlot ? formatNumber(tick) : tick)} showGrid /> diff --git a/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/BoxPlots/CostBoxPlotCharts.tsx b/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/BoxPlots/CostBoxPlotCharts.tsx index 81a1198b..c94bb75d 100644 --- a/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/BoxPlots/CostBoxPlotCharts.tsx +++ b/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/BoxPlots/CostBoxPlotCharts.tsx @@ -1,16 +1,13 @@ import React from 'react'; import { ChartThemeColor } from '@patternfly/react-charts'; -import { Grid, GridItem } from '@patternfly/react-core'; +import { Grid, Text, GridItem, PageSection, PageSectionVariants, TextContent, TextVariants, StackItem, Stack } from '@patternfly/react-core'; import BoxPlot from './BoxPlot'; -// conversion values needs to be fixed here as well export const convertMmrData = (day, data: any[], unitVal) => { - // let displaykey = day === 'short_term' ? key.split(' ')[1] : key.split(' ')[0]; - return data?.map((item) => ({ ...item, x: day === 'short_term' ? item.x.substring(11, 16) : item.x.split('T')[0], - y: item?.y?.map((value: number) => value / 1024 ** unitVal) + y: item?.y?.map((value: number) => Math.floor(value / 1024 ** unitVal)) })); }; @@ -18,7 +15,6 @@ export const getMaxValueFromConvertedData = (day, data: any[], requestValue, cpu const convertedData = cpuTrue ? data : convertMmrData(day, data, unitVal); const allValues = convertedData.flatMap((item) => item.y || []); - // once buffer value is known we can add that here const maxV = Math.max(...allValues, requestValue); const buffer = 0.1 * maxV; const maxValue = Math.max(...allValues, requestValue) + buffer; @@ -30,9 +26,8 @@ const CostBoxPlotCharts = (props: { unitValueforMemory, boxPlotData; showCostBox const cpuDataLimit = props.limitRequestData?.limits?.cpu?.amount; const cpuDataRequest = props.limitRequestData?.requests?.cpu?.amount; - // this needs to be fixed the conversion values - const mmrDataLimit = props.limitRequestData?.limits?.memory?.amount / 1024 ** props.unitValueforMemory; - const mmrDataRequest = props.limitRequestData?.requests?.memory?.amount / 1024 ** props.unitValueforMemory; + const mmrDataLimit = Math.floor(props.limitRequestData?.limits?.memory?.amount / 1024 ** props.unitValueforMemory); + const mmrDataRequest = Math.floor(props.limitRequestData?.requests?.memory?.amount / 1024 ** props.unitValueforMemory); const cpulimitsChart = props.boxPlotData?.cpu?.map((dict) => { return { @@ -68,22 +63,27 @@ const CostBoxPlotCharts = (props: { unitValueforMemory, boxPlotData; showCostBox ? getMaxValueFromConvertedData(props.day, props.boxPlotData?.cpu, cpuDataRequest, true, props.unitValueforMemory) : { maxValue: 1, minVal: 0 }; - // console.log(maxcpuValue, mincpuVal); const { maxValue, minVal } = props.boxPlotData?.mmr ? getMaxValueFromConvertedData(props.day, props.boxPlotData?.mmr, mmrDataRequest, false, props.unitValueforMemory) : { maxValue: 1, minVal: 0 }; - console.log(maxcpuValue, mincpuVal); - console.log(maxValue, minVal); const mmr_cost_boxplot_data = convertMmrData(props.day, props.boxPlotData?.mmr, props.unitValueforMemory); + const cpu_cost_boxplot_data = props.boxPlotData?.cpu?.map((dict) => { - return { ...dict, x: props.day === 'short_term' ? dict.x.substring(11, 16) : dict.x.split('T')[0] }; + return { + ...dict, + x: props.day === 'short_term' ? dict.x.substring(11, 16) : dict.x.split('T')[0] , + y: dict.y?.map((value: number) => Math.round(value * 1000) / 1000) + }; }); // cpu and mmr box plots for cost return ( + + CPU Utilization + {props.showCostBoxPlot ? ( ) : ( )} + + Memory Utilization + diff --git a/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/BoxPlots/PerfBoxPlotCharts.tsx b/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/BoxPlots/PerfBoxPlotCharts.tsx index 50d22f46..a3663ca7 100644 --- a/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/BoxPlots/PerfBoxPlotCharts.tsx +++ b/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/BoxPlots/PerfBoxPlotCharts.tsx @@ -1,11 +1,10 @@ import React, { useState } from 'react'; import { ChartThemeColor } from '@patternfly/react-charts'; -import { Flex, FlexItem, Grid, GridItem } from '@patternfly/react-core'; +import { Text, Grid, GridItem, TextContent, TextVariants } from '@patternfly/react-core'; import BoxPlot from './BoxPlot'; -import chart_color_blue_300 from '@patternfly/react-tokens/dist/esm/chart_color_blue_300'; import { getMaxValueFromConvertedData, convertMmrData } from './CostBoxPlotCharts'; -const PerfBoxPlotCharts = (props: { unitValueforMemory ,boxPlotData; day; showPerfBoxPlot; limitRequestData }) => { +const PerfBoxPlotCharts = (props: { unitValueforMemory; boxPlotData; day; showPerfBoxPlot; limitRequestData }) => { const cpuDataLimit = props.limitRequestData?.limits?.cpu?.amount; const cpuDataRequest = props.limitRequestData?.requests?.cpu?.amount; @@ -15,14 +14,14 @@ const PerfBoxPlotCharts = (props: { unitValueforMemory ,boxPlotData; day; showPe const cpulimitsChart = props.boxPlotData?.cpu?.map((dict) => { return { ...dict, - x: props.day === 'short_term' ? dict.x.substring(11, 16): dict.x.split('T')[0], + x: props.day === 'short_term' ? dict.x.substring(11, 16) : dict.x.split('T')[0], y: cpuDataLimit }; }); const cpurequestChart = props.boxPlotData?.cpu?.map((dict) => { return { ...dict, - x: props.day === 'short_term' ? dict.x.substring(11, 16): dict.x.split('T')[0], + x: props.day === 'short_term' ? dict.x.substring(11, 16) : dict.x.split('T')[0], y: cpuDataRequest }; }); @@ -30,7 +29,7 @@ const PerfBoxPlotCharts = (props: { unitValueforMemory ,boxPlotData; day; showPe const mmrlimitsChart = props.boxPlotData?.mmr?.map((dict) => { return { ...dict, - x: props.day === 'short_term' ? dict.x.substring(11, 16): dict.x.split('T')[0], + x: props.day === 'short_term' ? dict.x.substring(11, 16) : dict.x.split('T')[0], y: mmrDataLimit }; }); @@ -38,7 +37,7 @@ const PerfBoxPlotCharts = (props: { unitValueforMemory ,boxPlotData; day; showPe const mmrrequestChart = props.boxPlotData?.mmr?.map((dict) => { return { ...dict, - x: props.day === 'short_term' ? dict.x.substring(11, 16): dict.x.split('T')[0], + x: props.day === 'short_term' ? dict.x.substring(11, 16) : dict.x.split('T')[0], y: mmrDataRequest }; }); @@ -53,36 +52,48 @@ const PerfBoxPlotCharts = (props: { unitValueforMemory ,boxPlotData; day; showPe const mmr_perf_boxplot_data = convertMmrData(props.day, props.boxPlotData?.mmr, props.unitValueforMemory); const cpu_perf_boxplot_data = props.boxPlotData?.cpu?.map((dict) => { - return { ...dict, x: props.day === 'short_term' ? dict.x.substring(11, 16) : dict.x.split('T')[0] }; + return { ...dict, + x: props.day === 'short_term' ? dict.x.substring(11, 16) : dict.x.split('T')[0], + y: dict.y?.map((value: number) => Math.round(value * 1000) / 1000) + }; }); // cpu and mmr box plots for performance return ( - {props.showPerfBoxPlot? - : - - } + + CPU Utilization + + {props.showPerfBoxPlot ? ( + + ) : ( + + )} + + Memory Utilization + diff --git a/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/CostDetails.tsx b/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/CostDetails.tsx index b3848114..9bd1892c 100644 --- a/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/CostDetails.tsx +++ b/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/CostDetails.tsx @@ -25,26 +25,28 @@ interface Alert { icon: React.ReactNode; } -const convertBytes = (value) => { - let unit = 'Bytes'; - let sign = value[0] +const convertBytes = (value, unitval, unitm) => { let absValue = Math.abs(value); let valueFinal = absValue; - + let unit ; + if(unitval !== 0) { + valueFinal = Math.floor(absValue / 1024 ** unitval) + unit = unitm + } + else { if (absValue >= 1024 ** 3) { - valueFinal = absValue / 1024 ** 3; + valueFinal = Math.floor(absValue / 1024 ** 3); unit = 'Gi'; } else if (absValue >= 1024 ** 2) { - valueFinal = absValue / 1024 ** 2; + valueFinal = Math.floor(absValue / 1024 ** 2); unit = 'Mi'; } else if (absValue >= 1024) { - valueFinal = absValue / 1024; + valueFinal = Math.floor(absValue / 1024); unit = 'Ki'; } - +} + valueFinal = value < 0 ? -valueFinal : valueFinal; - - // console.log(value, "converted value:", valueFinal, " sign", sign); return { valueFinal: parseFloat(valueFinal.toFixed(2)).toString(), unit @@ -55,18 +57,16 @@ export const MemoryFormat = (number) => { let parsedNo = parseFloat(number); if (!parsedNo) return ''; - const { valueFinal, unit } = convertBytes(parsedNo); + const { valueFinal, unit } = convertBytes(parsedNo, 0, ''); return `${valueFinal} ${unit}`; }; -export const MemoryFormatP = (number) => { +export const MemoryFormatP = (number, unitval, unitm) => { let parsedNo = parseFloat(number); if (!parsedNo) return ''; - const { valueFinal, unit } = convertBytes(parsedNo); - const formattedValue =valueFinal - // console.log(formattedValue); - return `${formattedValue} ${unit}`; + const { valueFinal , unit} = convertBytes(parsedNo, unitval, unitm); + return `${valueFinal} ${unit}`; }; export const NumberFormatP = (number) => { @@ -96,7 +96,7 @@ export const useMemoryUnit = (recommendedData, profile) => { useEffect(() => { if (recommendedData?.length > 0) { - const mmr_recc_unit = convertBytes(recommendedData[0]?.recommendation_engines?.[profile]?.config?.requests?.memory?.amount); + const mmr_recc_unit = convertBytes(recommendedData[0]?.recommendation_engines?.[profile]?.config?.requests?.memory?.amount ,0, ''); setMmrUnit(mmr_recc_unit.unit); // Set unitVal based on the mmr_recc_unit.unit @@ -132,35 +132,35 @@ const CostDetails = (props: { recommendedData; currentData; chartData; day; endt } const current_code = `resources: - requests: - memory: "${MemoryFormat(props.currentData[0]?.requests?.memory?.amount)}" - cpu: "${NumberFormat(props.currentData[0]?.requests?.cpu?.amount)}" + requests: + cpu: ${NumberFormat(props.currentData[0]?.requests?.cpu?.amount)} + memory: ${MemoryFormat(props.currentData[0]?.requests?.memory?.amount)} limits: - memory: "${MemoryFormat(props.currentData[0]?.limits?.memory?.amount)}" - cpu: "${NumberFormat(props.currentData[0]?.limits?.cpu?.amount)}"`; + cpu: ${NumberFormat(props.currentData[0]?.limits?.cpu?.amount)} + memory: ${MemoryFormat(props.currentData[0]?.limits?.memory?.amount)}`; const recommended_code = `resources: requests: - memory: "${MemoryFormat( - props.recommendedData[0]?.recommendation_engines?.cost?.config?.requests?.memory?.amount - )}" # ${MemoryFormatP( - props.recommendedData[0]?.recommendation_engines?.cost?.variation?.requests?.memory?.amount - )} - cpu: "${NumberFormat( + cpu: ${NumberFormat( props.recommendedData[0]?.recommendation_engines?.cost?.config?.requests?.cpu?.amount - )}" # ${NumberFormatP( + )} # ${NumberFormatP( props.recommendedData[0]?.recommendation_engines?.cost?.variation?.requests?.cpu?.amount )} - limits: - memory: "${MemoryFormat( - props.recommendedData[0]?.recommendation_engines?.cost?.config?.limits?.memory?.amount - )}" # ${MemoryFormatP( - props.recommendedData[0]?.recommendation_engines?.cost?.variation?.limits?.memory.amount - )} - cpu: "${NumberFormat( + memory: ${MemoryFormat( + props.recommendedData[0]?.recommendation_engines?.cost?.config?.requests?.memory?.amount + )} # ${MemoryFormatP( + props.recommendedData[0]?.recommendation_engines?.cost?.variation?.requests?.memory?.amount, unitVal, mmrUnit + )} + limits: + cpu: ${NumberFormat( props.recommendedData[0]?.recommendation_engines?.cost?.config?.limits?.cpu?.amount - )}" # ${NumberFormatP( + )} # ${NumberFormatP( props.recommendedData[0]?.recommendation_engines?.cost?.variation?.limits?.cpu?.amount + )} + memory: ${MemoryFormat( + props.recommendedData[0]?.recommendation_engines?.cost?.config?.limits?.memory?.amount + )} # ${MemoryFormatP( + props.recommendedData[0]?.recommendation_engines?.cost?.variation?.limits?.memory.amount, unitVal, mmrUnit )}`; // Notifications @@ -224,7 +224,7 @@ const CostDetails = (props: { recommendedData; currentData; chartData; day; endt ); return ( - + <> {renderNotifications(alerts)} @@ -250,6 +250,8 @@ const CostDetails = (props: { recommendedData; currentData; chartData; day; endt
+

+ {props.boxPlotData && props.recommendedData[0]?.recommendation_engines?.cost?.config ? ( No data to plot box
)} + {props.displayChart && } - + ); }; diff --git a/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/PerfDetails.tsx b/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/PerfDetails.tsx index 53bbee1d..b98bf399 100644 --- a/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/PerfDetails.tsx +++ b/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/PerfDetails.tsx @@ -49,35 +49,35 @@ const PerfDetails = (props: { } const current_code = `resources: - requests: - memory: "${MemoryFormat(props.currentData[0]?.requests?.memory?.amount)}" - cpu: "${NumberFormat(props.currentData[0]?.requests?.cpu?.amount)}" - limits: - memory: "${MemoryFormat(props.currentData[0]?.limits?.memory?.amount)}" - cpu: "${NumberFormat(props.currentData[0]?.limits?.cpu?.amount)}"`; + requests: + cpu: ${NumberFormat(props.currentData[0]?.requests?.cpu?.amount)} + memory: ${MemoryFormat(props.currentData[0]?.requests?.memory?.amount)} + limits: + cpu: ${NumberFormat(props.currentData[0]?.limits?.cpu?.amount)} + memory: ${MemoryFormat(props.currentData[0]?.limits?.memory?.amount)}`; const recommended_code = `resources: requests: - memory: "${MemoryFormat( - props.recommendedData[0]?.recommendation_engines?.performance?.config?.requests?.memory?.amount - )}" # ${MemoryFormatP( - props.recommendedData[0]?.recommendation_engines?.performance?.variation?.requests?.memory?.amount - )} - cpu: "${NumberFormat( + cpu: ${NumberFormat( props.recommendedData[0]?.recommendation_engines?.performance?.config?.requests?.cpu?.amount - )}" # ${NumberFormatP( + )} # ${NumberFormatP( props.recommendedData[0]?.recommendation_engines?.performance?.variation?.requests?.cpu?.amount )} - limits: - memory: "${MemoryFormat( - props.recommendedData[0]?.recommendation_engines?.performance?.config?.limits?.memory?.amount - )}" # ${MemoryFormatP( - props.recommendedData[0]?.recommendation_engines?.performance?.variation?.limits?.memory?.amount - )} - cpu: "${NumberFormat( + memory: ${MemoryFormat( + props.recommendedData[0]?.recommendation_engines?.performance?.config?.requests?.memory?.amount + )} # ${MemoryFormatP( + props.recommendedData[0]?.recommendation_engines?.performance?.variation?.requests?.memory?.amount , unitVal, mmrUnit + )} + limits: + cpu: ${NumberFormat( props.recommendedData[0]?.recommendation_engines?.performance?.config?.limits?.cpu?.amount - )}" # ${NumberFormatP( + )} # ${NumberFormatP( props.recommendedData[0]?.recommendation_engines?.performance?.variation?.limits?.cpu?.amount + )} + memory: ${MemoryFormat( + props.recommendedData[0]?.recommendation_engines?.performance?.config?.limits?.memory?.amount + )} # ${MemoryFormatP( + props.recommendedData[0]?.recommendation_engines?.performance?.variation?.limits?.memory?.amount, unitVal, mmrUnit )}`; // Code for Alert / Notifications @@ -143,7 +143,7 @@ const PerfDetails = (props: { ); return ( - + <> {renderNotifications(alerts)} @@ -169,6 +169,8 @@ const PerfDetails = (props: { +

+ + {props.displayChart && }{' '} -
+ ); }; + export { PerfDetails }; diff --git a/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/TabSection.tsx b/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/TabSection.tsx index b15790a6..946202a5 100644 --- a/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/TabSection.tsx +++ b/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/TabSection.tsx @@ -1,5 +1,5 @@ import * as React from 'react'; -import { Tabs, Tab, TabTitleText } from '@patternfly/react-core'; +import { Tabs, Tab, TabTitleText, PageSection, PageSectionVariants } from '@patternfly/react-core'; import { CostDetails } from './CostDetails'; import { PerfDetails } from './PerfDetails'; @@ -13,10 +13,6 @@ const TabSection = (props: { recommendedData: any; currentData; chartData; day; setActiveTabKey(tabIndex); }; - const switchTab = (tabIndex) => { - setActiveTabKey(tabIndex); - }; - return ( ); - return ( + <> +
@@ -328,7 +331,13 @@ const RecommendationTables = (props: { +
+ + + +
+ - - - + ); }; diff --git a/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/UsecaseSelection.tsx b/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/UsecaseSelection.tsx index 4ce23be8..221a4af0 100644 --- a/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/UsecaseSelection.tsx +++ b/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/UsecaseSelection.tsx @@ -109,10 +109,7 @@ const UsecaseSelection = (props: { endTimeArray; setEndTimeArray; SREdata; setSR level1: initialNotifications }); const has111000 = initialNotifications.hasOwnProperty('111000'); - props.setDisplayRecc(has111000); - // console.log(initialNotifications) - // console.log(has111000) var containerArray: any[] = []; for (var i = 0; i < data[0].kubernetes_objects[0].containers.length; i++) { @@ -181,12 +178,6 @@ const UsecaseSelection = (props: { endTimeArray; setEndTimeArray; SREdata; setSR expData.map((option, index) => )} - - {/* - - */} Generate Recommendations
}> handleGenerateRecommendationClick(expName)} /> @@ -195,11 +186,6 @@ const UsecaseSelection = (props: { endTimeArray; setEndTimeArray; SREdata; setSR - {/* */} - - {/* handleGenerateRecommendationClick(expName)} /> */} From 419355b0641a8795803e35d1050616b2b62816c5 Mon Sep 17 00:00:00 2001 From: Dinakar Guniguntala Date: Wed, 9 Oct 2024 18:21:02 +0530 Subject: [PATCH 09/31] Bump mvp_demo to UI Version 0.0.7 Update Dockerfile to build on node:22 version Signed-off-by: Dinakar Guniguntala --- Dockerfile | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index 89272541..6a8cba14 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM node:16 AS builder +FROM node:22 AS builder WORKDIR /app diff --git a/package.json b/package.json index f98f1fbd..e50652b4 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "kruize-ui", - "version": "0.0.6", + "version": "0.0.7", "repository": "https://github.com/kruize/kruize-ui.git", "license": "MIT", "private": false, From 70d93e54f52f660d46d18baf277b1443ec934f9d Mon Sep 17 00:00:00 2001 From: bhanvimenghani Date: Wed, 9 Oct 2024 19:20:58 +0530 Subject: [PATCH 10/31] formatting changes on ui --- .../BoxPlots/CostBoxPlotCharts.tsx | 213 ++++++++++------- .../BoxPlots/PerfBoxPlotCharts.tsx | 211 +++++++++------- .../RecommendationComponents/CostDetails.tsx | 5 +- .../LinePlot/CostHistoricCharts.tsx | 12 +- .../LinePlot/PerfHistoricCharts.tsx | 226 ++++++++++-------- .../RecommendationComponents/PerfDetails.tsx | 5 +- 6 files changed, 382 insertions(+), 290 deletions(-) diff --git a/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/BoxPlots/CostBoxPlotCharts.tsx b/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/BoxPlots/CostBoxPlotCharts.tsx index c94bb75d..2b79b9d8 100644 --- a/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/BoxPlots/CostBoxPlotCharts.tsx +++ b/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/BoxPlots/CostBoxPlotCharts.tsx @@ -1,6 +1,14 @@ import React from 'react'; import { ChartThemeColor } from '@patternfly/react-charts'; -import { Grid, Text, GridItem, PageSection, PageSectionVariants, TextContent, TextVariants, StackItem, Stack } from '@patternfly/react-core'; +import { + Grid, + Text, + GridItem, + PageSection, + PageSectionVariants, + TextContent, + TextVariants +} from '@patternfly/react-core'; import BoxPlot from './BoxPlot'; export const convertMmrData = (day, data: any[], unitVal) => { @@ -22,109 +30,132 @@ export const getMaxValueFromConvertedData = (day, data: any[], requestValue, cpu return { maxValue, minVal }; }; -const CostBoxPlotCharts = (props: { unitValueforMemory, boxPlotData; showCostBoxPlot; day; limitRequestData }) => { - const cpuDataLimit = props.limitRequestData?.limits?.cpu?.amount; - const cpuDataRequest = props.limitRequestData?.requests?.cpu?.amount; +const CostBoxPlotCharts = (props: { unitValueforMemory; boxPlotData; showCostBoxPlot; day; limitRequestData }) => { + const cpuChart = () => { + const cpuDataLimit = props.limitRequestData?.limits?.cpu?.amount; + const cpuDataRequest = props.limitRequestData?.requests?.cpu?.amount; - const mmrDataLimit = Math.floor(props.limitRequestData?.limits?.memory?.amount / 1024 ** props.unitValueforMemory); - const mmrDataRequest = Math.floor(props.limitRequestData?.requests?.memory?.amount / 1024 ** props.unitValueforMemory); + const cpulimitsChart = props.boxPlotData?.cpu?.map((dict) => { + return { + ...dict, + x: props.day === 'short_term' ? dict.x.substring(11, 16) : dict.x.split('T')[0], + y: cpuDataLimit + }; + }); + const cpurequestChart = props.boxPlotData?.cpu?.map((dict) => { + return { + ...dict, + x: props.day === 'short_term' ? dict.x.substring(11, 16) : dict.x.split('T')[0], + y: cpuDataRequest + }; + }); - const cpulimitsChart = props.boxPlotData?.cpu?.map((dict) => { - return { - ...dict, - x: props.day === 'short_term' ? dict.x.substring(11, 16) : dict.x.split('T')[0], - y: cpuDataLimit - }; - }); - const cpurequestChart = props.boxPlotData?.cpu?.map((dict) => { - return { - ...dict, - x: props.day === 'short_term' ? dict.x.substring(11, 16) : dict.x.split('T')[0], - y: cpuDataRequest - }; - }); + const { maxValue: maxcpuValue, minVal: mincpuVal } = props.boxPlotData?.cpu + ? getMaxValueFromConvertedData(props.day, props.boxPlotData?.cpu, cpuDataRequest, true, props.unitValueforMemory) + : { maxValue: 1, minVal: 0 }; - const mmrlimitsChart = props.boxPlotData?.mmr?.map((dict) => { - return { - ...dict, - x: props.day === 'short_term' ? dict.x.substring(11, 16) : dict.x.split('T')[0], - y: mmrDataLimit - }; - }); - const mmrrequestChart = props.boxPlotData?.mmr?.map((dict) => { - return { - ...dict, - x: props.day === 'short_term' ? dict.x.substring(11, 16) : dict.x.split('T')[0], - y: mmrDataRequest - }; - }); + const cpu_cost_boxplot_data = props.boxPlotData?.cpu?.map((dict) => { + return { + ...dict, + x: props.day === 'short_term' ? dict.x.substring(11, 16) : dict.x.split('T')[0], + y: dict.y?.map((value: number) => Math.round(value * 1000) / 1000) + }; + }); + return ( + + + + + CPU Utilization + + {props.showCostBoxPlot ? ( + + ) : ( + + )} + + + + ); + }; + const memoryChart = () => { + const mmrDataLimit = Math.floor(props.limitRequestData?.limits?.memory?.amount / 1024 ** props.unitValueforMemory); + const mmrDataRequest = Math.floor( + props.limitRequestData?.requests?.memory?.amount / 1024 ** props.unitValueforMemory + ); - const { maxValue: maxcpuValue, minVal: mincpuVal } = props.boxPlotData?.cpu - ? getMaxValueFromConvertedData(props.day, props.boxPlotData?.cpu, cpuDataRequest, true, props.unitValueforMemory) - : { maxValue: 1, minVal: 0 }; + const mmrlimitsChart = props.boxPlotData?.mmr?.map((dict) => { + return { + ...dict, + x: props.day === 'short_term' ? dict.x.substring(11, 16) : dict.x.split('T')[0], + y: mmrDataLimit + }; + }); + const mmrrequestChart = props.boxPlotData?.mmr?.map((dict) => { + return { + ...dict, + x: props.day === 'short_term' ? dict.x.substring(11, 16) : dict.x.split('T')[0], + y: mmrDataRequest + }; + }); - const { maxValue, minVal } = props.boxPlotData?.mmr - ? getMaxValueFromConvertedData(props.day, props.boxPlotData?.mmr, mmrDataRequest, false, props.unitValueforMemory) - : { maxValue: 1, minVal: 0 }; + const { maxValue, minVal } = props.boxPlotData?.mmr + ? getMaxValueFromConvertedData(props.day, props.boxPlotData?.mmr, mmrDataRequest, false, props.unitValueforMemory) + : { maxValue: 1, minVal: 0 }; - const mmr_cost_boxplot_data = convertMmrData(props.day, props.boxPlotData?.mmr, props.unitValueforMemory); + const mmr_cost_boxplot_data = convertMmrData(props.day, props.boxPlotData?.mmr, props.unitValueforMemory); - const cpu_cost_boxplot_data = props.boxPlotData?.cpu?.map((dict) => { - return { - ...dict, - x: props.day === 'short_term' ? dict.x.substring(11, 16) : dict.x.split('T')[0] , - y: dict.y?.map((value: number) => Math.round(value * 1000) / 1000) - }; - }); + return ( + + + + + Memory Utilization + + + + + + ); + }; - // cpu and mmr box plots for cost return ( - - CPU Utilization - - {props.showCostBoxPlot ? ( - - ) : ( - - )} + {cpuChart()} - - Memory Utilization - - + {memoryChart()} ); diff --git a/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/BoxPlots/PerfBoxPlotCharts.tsx b/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/BoxPlots/PerfBoxPlotCharts.tsx index a3663ca7..27732786 100644 --- a/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/BoxPlots/PerfBoxPlotCharts.tsx +++ b/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/BoxPlots/PerfBoxPlotCharts.tsx @@ -1,110 +1,143 @@ import React, { useState } from 'react'; import { ChartThemeColor } from '@patternfly/react-charts'; -import { Text, Grid, GridItem, TextContent, TextVariants } from '@patternfly/react-core'; +import { + Text, + Grid, + GridItem, + TextContent, + TextVariants, + PageSection, + PageSectionVariants +} from '@patternfly/react-core'; import BoxPlot from './BoxPlot'; import { getMaxValueFromConvertedData, convertMmrData } from './CostBoxPlotCharts'; const PerfBoxPlotCharts = (props: { unitValueforMemory; boxPlotData; day; showPerfBoxPlot; limitRequestData }) => { - const cpuDataLimit = props.limitRequestData?.limits?.cpu?.amount; - const cpuDataRequest = props.limitRequestData?.requests?.cpu?.amount; + const cpuChart = () => { + const cpuDataLimit = props.limitRequestData?.limits?.cpu?.amount; + const cpuDataRequest = props.limitRequestData?.requests?.cpu?.amount; - const mmrDataLimit = props.limitRequestData?.limits?.memory?.amount / 1024 ** props.unitValueforMemory; - const mmrDataRequest = props.limitRequestData?.requests?.memory?.amount / 1024 ** props.unitValueforMemory; + const cpulimitsChart = props.boxPlotData?.cpu?.map((dict) => { + return { + ...dict, + x: props.day === 'short_term' ? dict.x.substring(11, 16) : dict.x.split('T')[0], + y: cpuDataLimit + }; + }); + const cpurequestChart = props.boxPlotData?.cpu?.map((dict) => { + return { + ...dict, + x: props.day === 'short_term' ? dict.x.substring(11, 16) : dict.x.split('T')[0], + y: cpuDataRequest + }; + }); - const cpulimitsChart = props.boxPlotData?.cpu?.map((dict) => { - return { - ...dict, - x: props.day === 'short_term' ? dict.x.substring(11, 16) : dict.x.split('T')[0], - y: cpuDataLimit - }; - }); - const cpurequestChart = props.boxPlotData?.cpu?.map((dict) => { - return { - ...dict, - x: props.day === 'short_term' ? dict.x.substring(11, 16) : dict.x.split('T')[0], - y: cpuDataRequest - }; - }); + const { maxValue: maxcpuValue, minVal: mincpuVal } = props.boxPlotData?.cpu + ? getMaxValueFromConvertedData(props.day, props.boxPlotData?.cpu, cpuDataRequest, true, props.unitValueforMemory) + : { maxValue: 1, minVal: 0 }; - const mmrlimitsChart = props.boxPlotData?.mmr?.map((dict) => { - return { - ...dict, - x: props.day === 'short_term' ? dict.x.substring(11, 16) : dict.x.split('T')[0], - y: mmrDataLimit - }; - }); + const cpu_perf_boxplot_data = props.boxPlotData?.cpu?.map((dict) => { + return { + ...dict, + x: props.day === 'short_term' ? dict.x.substring(11, 16) : dict.x.split('T')[0], + y: dict.y?.map((value: number) => Math.round(value * 1000) / 1000) + }; + }); - const mmrrequestChart = props.boxPlotData?.mmr?.map((dict) => { - return { - ...dict, - x: props.day === 'short_term' ? dict.x.substring(11, 16) : dict.x.split('T')[0], - y: mmrDataRequest - }; - }); + return ( + + + + + CPU Utilization + + {props.showPerfBoxPlot ? ( + + ) : ( + + )} + + + + ); + }; - const { maxValue: maxcpuValue, minVal: mincpuVal } = props.boxPlotData?.cpu - ? getMaxValueFromConvertedData(props.day, props.boxPlotData?.cpu, cpuDataRequest, true, props.unitValueforMemory) - : { maxValue: 1, minVal: 0 }; + const memoryChart = () => { + const mmrDataLimit = props.limitRequestData?.limits?.memory?.amount / 1024 ** props.unitValueforMemory; + const mmrDataRequest = props.limitRequestData?.requests?.memory?.amount / 1024 ** props.unitValueforMemory; - const { maxValue, minVal } = props.boxPlotData?.mmr - ? getMaxValueFromConvertedData(props.day, props.boxPlotData?.mmr, mmrDataRequest, false, props.unitValueforMemory) - : { maxValue: 1, minVal: 0 }; + const mmrlimitsChart = props.boxPlotData?.mmr?.map((dict) => { + return { + ...dict, + x: props.day === 'short_term' ? dict.x.substring(11, 16) : dict.x.split('T')[0], + y: mmrDataLimit + }; + }); + const mmrrequestChart = props.boxPlotData?.mmr?.map((dict) => { + return { + ...dict, + x: props.day === 'short_term' ? dict.x.substring(11, 16) : dict.x.split('T')[0], + y: mmrDataRequest + }; + }); + + const { maxValue, minVal } = props.boxPlotData?.mmr + ? getMaxValueFromConvertedData(props.day, props.boxPlotData?.mmr, mmrDataRequest, false, props.unitValueforMemory) + : { maxValue: 1, minVal: 0 }; + + const mmr_perf_boxplot_data = convertMmrData(props.day, props.boxPlotData?.mmr, props.unitValueforMemory); + + return ( + + + + + Memory Utilization + + + + + + ); + }; - const mmr_perf_boxplot_data = convertMmrData(props.day, props.boxPlotData?.mmr, props.unitValueforMemory); - const cpu_perf_boxplot_data = props.boxPlotData?.cpu?.map((dict) => { - return { ...dict, - x: props.day === 'short_term' ? dict.x.substring(11, 16) : dict.x.split('T')[0], - y: dict.y?.map((value: number) => Math.round(value * 1000) / 1000) - }; - }); - // cpu and mmr box plots for performance return ( - - CPU Utilization - - {props.showPerfBoxPlot ? ( - - ) : ( - - )} + {cpuChart()} - - Memory Utilization - - + {memoryChart()} ); diff --git a/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/CostDetails.tsx b/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/CostDetails.tsx index 9bd1892c..b8833c5c 100644 --- a/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/CostDetails.tsx +++ b/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/CostDetails.tsx @@ -242,7 +242,7 @@ const CostDetails = (props: { recommendedData; currentData; chartData; day; endt Recommended Configuration + #Delta {config_keys && config_keys.length === 3 ? ( - + ) : ( )} @@ -251,7 +251,6 @@ const CostDetails = (props: { recommendedData; currentData; chartData; day; endt

- {props.boxPlotData && props.recommendedData[0]?.recommendation_engines?.cost?.config ? ( No data to plot box )} - +

{props.displayChart && } ); diff --git a/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/LinePlot/CostHistoricCharts.tsx b/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/LinePlot/CostHistoricCharts.tsx index 9d539e82..5a358f67 100644 --- a/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/LinePlot/CostHistoricCharts.tsx +++ b/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/LinePlot/CostHistoricCharts.tsx @@ -1,7 +1,7 @@ import React from 'react'; import { Chart, ChartAxis, ChartGroup, ChartLine, ChartVoronoiContainer } from '@patternfly/react-charts'; import { formatTimestamps, filterDataByTerm, formatNumber } from './ChartDataPreparation'; -import { Grid, GridItem, Split, SplitItem } from '@patternfly/react-core'; +import { Grid, Text, GridItem, PageSection, PageSectionVariants, Split, SplitItem, TextContent, TextVariants } from '@patternfly/react-core'; const CostHistoricCharts = (props: { chartData; day; endtime }) => { const termFilteredData = filterDataByTerm(props.chartData, props.endtime, props.day); @@ -23,7 +23,11 @@ const CostHistoricCharts = (props: { chartData; day; endtime }) => { const filteredhistoricdata = historicdata.filter((dataPoint) => typeof dataPoint.y === 'number'); return ( +
+ + Historic CPU + {
+
); }; const memoryChart = () => { @@ -93,7 +98,11 @@ const CostHistoricCharts = (props: { chartData; day; endtime }) => { const filteredhistoricdata = historicdata.filter((dataPoint) => typeof dataPoint.y === 'number'); return ( +
+ + Historic Memory + {
+
); }; diff --git a/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/LinePlot/PerfHistoricCharts.tsx b/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/LinePlot/PerfHistoricCharts.tsx index d18f25ad..5f96980a 100644 --- a/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/LinePlot/PerfHistoricCharts.tsx +++ b/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/LinePlot/PerfHistoricCharts.tsx @@ -1,7 +1,15 @@ import React from 'react'; import { Chart, ChartAxis, ChartGroup, ChartLine, ChartVoronoiContainer } from '@patternfly/react-charts'; import { formatTimestamps, filterDataByTerm, formatNumber } from './ChartDataPreparation'; -import { Grid, GridItem} from '@patternfly/react-core'; +import { + Grid, + Text, + GridItem, + PageSection, + PageSectionVariants, + TextContent, + TextVariants +} from '@patternfly/react-core'; const PerfHistoricCharts = (props: { chartData; day; endtime }) => { const termFilteredData = filterDataByTerm(props.chartData, props.endtime, props.day); @@ -10,7 +18,8 @@ const PerfHistoricCharts = (props: { chartData; day; endtime }) => { const cpuChart = () => { const historicdata = Object.entries(timeStampFormattedData).map(([key, value]) => { const cpuAmount = formatNumber( - (value as any).recommendation_terms[props.day]?.recommendation_engines?.performance?.config?.requests?.cpu?.amount + (value as any).recommendation_terms[props.day]?.recommendation_engines?.performance?.config?.requests?.cpu + ?.amount ); const displayKey = props.day === 'short_term' ? key.split(' ')[1] : key.split(' ')[0]; return { @@ -23,64 +32,70 @@ const PerfHistoricCharts = (props: { chartData; day; endtime }) => { const filteredhistoricdata = historicdata.filter((dataPoint) => typeof dataPoint.y === 'number'); return ( -
- `${datum.name}: ${datum.y} : ${datum.x}`} - constrainToVisibleArea - /> - } - legendData={[{ name: 'CPU' }]} - legendOrientation="vertical" - legendPosition="right" - height={250} - name="Performance CPU Recommendations" - domainPadding={{ y: [30, 25], x: [30, 25] }} - padding={{ - bottom: 70, - left: 100, - right: 100, - top: 50 - }} - width={600} - > - - formatNumber(d)} - style={{ - axisLabel: { padding: 60 } // Adjust the value to control the padding + +
+ + Historic CPU + + `${datum.name}: ${datum.y} : ${datum.x}`} + constrainToVisibleArea + /> + } + legendData={[{ name: 'CPU' }]} + legendOrientation="vertical" + legendPosition="right" + height={250} + name="Performance CPU Recommendations" + domainPadding={{ y: [30, 25], x: [30, 25] }} + padding={{ + bottom: 70, + left: 100, + right: 100, + top: 50 }} - /> + width={600} + > + + formatNumber(d)} + style={{ + axisLabel: { padding: 60 } // Adjust the value to control the padding + }} + /> - - - - -
+ + + +
+
+ ); }; const memoryChart = () => { const historicdata = Object.entries(timeStampFormattedData).map(([key, value]) => { const memoryAmount = formatNumber( - (value as any).recommendation_terms[props.day]?.recommendation_engines?.performance?.config?.requests?.memory?.amount + (value as any).recommendation_terms[props.day]?.recommendation_engines?.performance?.config?.requests?.memory + ?.amount ); const displayKey = props.day === 'short_term' ? key.split(' ')[1] : key.split(' ')[0]; return { @@ -93,58 +108,63 @@ const PerfHistoricCharts = (props: { chartData; day; endtime }) => { const filteredhistoricdata = historicdata.filter((dataPoint) => typeof dataPoint.y === 'number'); return ( -
- `${datum.name}: ${datum.y} : ${datum.x}`} - constrainToVisibleArea - /> - } - legendData={[{ name: 'Memory' }]} - legendOrientation="vertical" - legendPosition="right" - height={250} - name="Performance Memory Recommendations" - domainPadding={{ y: [30, 25], x: [30, 25] }} - padding={{ - bottom: 70, - left: 100, - right: 100, - top: 50 - }} - width={600} - > - - formatNumber(d)} - style={{ - axisLabel: { padding: 60 } // Adjust the value to control the padding + +
+ + Historic Memory + + `${datum.name}: ${datum.y} : ${datum.x}`} + constrainToVisibleArea + /> + } + legendData={[{ name: 'Memory' }]} + legendOrientation="vertical" + legendPosition="right" + height={250} + name="Performance Memory Recommendations" + domainPadding={{ y: [30, 25], x: [30, 25] }} + padding={{ + bottom: 70, + left: 100, + right: 100, + top: 50 }} - /> + width={600} + > + + formatNumber(d)} + style={{ + axisLabel: { padding: 60 } // Adjust the value to control the padding + }} + /> - - - - -
+ + + +
+
+ ); }; diff --git a/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/PerfDetails.tsx b/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/PerfDetails.tsx index b98bf399..8e59cc67 100644 --- a/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/PerfDetails.tsx +++ b/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/PerfDetails.tsx @@ -161,7 +161,7 @@ const PerfDetails = (props: { Recommended Configuration + #Delta {config_keys && config_keys.length === 3 ? ( - + ) : ( )} @@ -170,7 +170,6 @@ const PerfDetails = (props: {

- - +

{props.displayChart && }{' '} ); From 5053365d701e413893af8d9b0268bb896808a7f4 Mon Sep 17 00:00:00 2001 From: bhanvimenghani Date: Thu, 10 Oct 2024 12:55:54 +0530 Subject: [PATCH 11/31] cost notif white bg --- .../RecommendationComponents/CostDetails.tsx | 90 ++++++++++--------- .../LinePlot/CostHistoricCharts.tsx | 4 +- .../LinePlot/PerfHistoricCharts.tsx | 4 +- .../RecommendationComponents/PerfDetails.tsx | 46 ++++++---- 4 files changed, 80 insertions(+), 64 deletions(-) diff --git a/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/CostDetails.tsx b/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/CostDetails.tsx index b8833c5c..03c15505 100644 --- a/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/CostDetails.tsx +++ b/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/CostDetails.tsx @@ -24,28 +24,27 @@ interface Alert { type: AlertType; icon: React.ReactNode; } - + const convertBytes = (value, unitval, unitm) => { let absValue = Math.abs(value); let valueFinal = absValue; - let unit ; - if(unitval !== 0) { - valueFinal = Math.floor(absValue / 1024 ** unitval) - unit = unitm - } - else { - if (absValue >= 1024 ** 3) { - valueFinal = Math.floor(absValue / 1024 ** 3); - unit = 'Gi'; - } else if (absValue >= 1024 ** 2) { - valueFinal = Math.floor(absValue / 1024 ** 2); - unit = 'Mi'; - } else if (absValue >= 1024) { - valueFinal = Math.floor(absValue / 1024); - unit = 'Ki'; + let unit; + if (unitval !== 0) { + valueFinal = Math.floor(absValue / 1024 ** unitval); + unit = unitm; + } else { + if (absValue >= 1024 ** 3) { + valueFinal = Math.floor(absValue / 1024 ** 3); + unit = 'Gi'; + } else if (absValue >= 1024 ** 2) { + valueFinal = Math.floor(absValue / 1024 ** 2); + unit = 'Mi'; + } else if (absValue >= 1024) { + valueFinal = Math.floor(absValue / 1024); + unit = 'Ki'; + } } -} - + valueFinal = value < 0 ? -valueFinal : valueFinal; return { valueFinal: parseFloat(valueFinal.toFixed(2)).toString(), @@ -65,15 +64,15 @@ export const MemoryFormatP = (number, unitval, unitm) => { let parsedNo = parseFloat(number); if (!parsedNo) return ''; - const { valueFinal , unit} = convertBytes(parsedNo, unitval, unitm); - return `${valueFinal} ${unit}`; + const { valueFinal, unit } = convertBytes(parsedNo, unitval, unitm); + return `${valueFinal} ${unit}`; }; export const NumberFormatP = (number) => { let parsedNo = parseFloat(number); if (!isNaN(parsedNo) && isFinite(parsedNo)) { if (Math.floor(parsedNo) !== parsedNo) { - return addPlusSign(parseFloat(parsedNo.toFixed(3)).toString()) + return addPlusSign(parseFloat(parsedNo.toFixed(3)).toString()); } return addPlusSign(parsedNo.toString()); } @@ -83,7 +82,7 @@ export const NumberFormat = (number) => { let parsedNo = parseFloat(number); if (!isNaN(parsedNo) && isFinite(parsedNo)) { if (Math.floor(parsedNo) !== parsedNo) { - return parseFloat(parsedNo.toFixed(3)).toString() + return parseFloat(parsedNo.toFixed(3)).toString(); } return parsedNo.toString(); } @@ -92,11 +91,15 @@ export const NumberFormat = (number) => { export const useMemoryUnit = (recommendedData, profile) => { const [mmrUnit, setMmrUnit] = useState(''); - const [unitVal, setUnitVal] = useState(0); + const [unitVal, setUnitVal] = useState(0); useEffect(() => { if (recommendedData?.length > 0) { - const mmr_recc_unit = convertBytes(recommendedData[0]?.recommendation_engines?.[profile]?.config?.requests?.memory?.amount ,0, ''); + const mmr_recc_unit = convertBytes( + recommendedData[0]?.recommendation_engines?.[profile]?.config?.requests?.memory?.amount, + 0, + '' + ); setMmrUnit(mmr_recc_unit.unit); // Set unitVal based on the mmr_recc_unit.unit @@ -115,7 +118,6 @@ export const useMemoryUnit = (recommendedData, profile) => { return { mmrUnit, unitVal }; }; - const CostDetails = (props: { recommendedData; currentData; chartData; day; endtime; displayChart; boxPlotData }) => { const limits = props.recommendedData[0]?.recommendation_engines?.cost?.config?.limits; const config_keys = limits ? Object.keys(limits) : []; @@ -149,7 +151,9 @@ const CostDetails = (props: { recommendedData; currentData; chartData; day; endt memory: ${MemoryFormat( props.recommendedData[0]?.recommendation_engines?.cost?.config?.requests?.memory?.amount )} # ${MemoryFormatP( - props.recommendedData[0]?.recommendation_engines?.cost?.variation?.requests?.memory?.amount, unitVal, mmrUnit + props.recommendedData[0]?.recommendation_engines?.cost?.variation?.requests?.memory?.amount, + unitVal, + mmrUnit )} limits: cpu: ${NumberFormat( @@ -160,7 +164,9 @@ const CostDetails = (props: { recommendedData; currentData; chartData; day; endt memory: ${MemoryFormat( props.recommendedData[0]?.recommendation_engines?.cost?.config?.limits?.memory?.amount )} # ${MemoryFormatP( - props.recommendedData[0]?.recommendation_engines?.cost?.variation?.limits?.memory.amount, unitVal, mmrUnit + props.recommendedData[0]?.recommendation_engines?.cost?.variation?.limits?.memory.amount, + unitVal, + mmrUnit )}`; // Notifications @@ -207,20 +213,22 @@ const CostDetails = (props: { recommendedData; currentData; chartData; day; endt }; const renderNotifications = (notifications: any) => ( - - {Object.keys(notifications || {}).map((key) => { - const notification = notifications[key]; - const alertType = notification.type || 'info'; - const Icon = alertIconMap[alertType]; + + + {Object.keys(notifications || {}).map((key) => { + const notification = notifications[key]; + const alertType = notification.type || 'info'; + const Icon = alertIconMap[alertType]; - return ( -
- {Icon} - {notification.message} -
- ); - })} -
+ return ( +
+ {Icon} + {notification.message} +
+ ); + })} +
+ ); return ( @@ -253,7 +261,7 @@ const CostDetails = (props: { recommendedData; currentData; chartData; day; endt

{props.boxPlotData && props.recommendedData[0]?.recommendation_engines?.cost?.config ? ( {
- Historic CPU + Historic CPU Recommendations {
- Historic Memory + Historic Memory Recommendations {
- Historic CPU + Historic CPU Recommendations {
- Historic Memory + Historic Memory Recommendations ( - - {Object.keys(notifications || {}).map((key) => { - const notification = notifications[key]; - const alertType = notification.type || 'info'; - const Icon = alertIconMap[alertType]; - - return ( -
- {Icon} - {notification.message} -
- ); - })} -
+ + + {Object.keys(notifications || {}).map((key) => { + const notification = notifications[key]; + const alertType = notification.type || 'info'; + const Icon = alertIconMap[alertType]; + + return ( +
+ {Icon} + {notification.message} +
+ ); + })} +
+
); return ( @@ -178,8 +184,10 @@ const PerfDetails = (props: { limitRequestData={props.recommendedData[0]?.recommendation_engines?.performance?.config} />

- {props.displayChart && }{' '} - + {props.displayChart && ( + + )}{' '} + ); }; From e5979fd65ede26a5b65803f9360efb667afa03ef Mon Sep 17 00:00:00 2001 From: Shekhar Saxena Date: Wed, 13 Nov 2024 10:49:00 +0530 Subject: [PATCH 12/31] fixing nstype experiments Signed-off-by: Shekhar Saxena --- .../RemoteMonitoring/UsecaseSelection.tsx | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/UsecaseSelection.tsx b/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/UsecaseSelection.tsx index 4ce23be8..c067d21a 100644 --- a/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/UsecaseSelection.tsx +++ b/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/UsecaseSelection.tsx @@ -46,9 +46,12 @@ const UsecaseSelection = (props: { endTimeArray; setEndTimeArray; SREdata; setSR const data = await response.json(); const arr: any = ['Select Experiment Name']; - data.map((element, index) => { - arr.push(element.experiment_name); + data.forEach((element) => { + if (element.experiment_type === 'container') { + arr.push(element.experiment_name); + } }); + setExpData(arr.sort()); }; useEffect(() => { From 4c57f7db8b6afd9bed89ab1c98e69c63fc389a5c Mon Sep 17 00:00:00 2001 From: kusumachalasani Date: Wed, 13 Nov 2024 14:24:16 +0530 Subject: [PATCH 13/31] display terms only if data is available Signed-off-by: kusumachalasani --- .../RemoteMonitoring/RecommendationTables.tsx | 24 ++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationTables.tsx b/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationTables.tsx index 1e3ad922..e31ef75b 100644 --- a/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationTables.tsx +++ b/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationTables.tsx @@ -67,6 +67,7 @@ const RecommendationTables = (props: { } }, [props.endTimeArray]); + const processBoxPlotData = (boxPlotArr: any[]) => { if (!boxPlotArr || boxPlotArr.length === 0) { return []; @@ -223,6 +224,25 @@ const RecommendationTables = (props: { fetchData(); }, [endtime, day]); + const [filteredDays, setFilteredDays] = useState(days); + useEffect(() => { + const { notification } = props; + + if (notification && typeof notification === 'object') { + const level2 = notification.level2; + if (level2 && level2.info) { + const notificationKeys = Object.keys(level2.info); + const updatedDays = days.filter(day => { + if (day.value === 'short_term') return notificationKeys.some(key => level2.info[key].message.includes('Short Term')); + if (day.value === 'medium_term') return notificationKeys.some(key => level2.info[key].message.includes('Medium Term')); + if (day.value === 'long_term') return notificationKeys.some(key => level2.info[key].message.includes('Long Term')); + return false; + }); + setFilteredDays(updatedDays); + } + } + }, [props.notification]); + const onChange = async (value: string) => { setEndtime(value); }; @@ -258,7 +278,6 @@ const RecommendationTables = (props: { Monitoring End Time - View optimization based on - - {days.map((selection, index) => ( + {filteredDays.map((selection, index) => ( ))} From 7059053d6e76b7a75f98eb134100da4c3ed1c755 Mon Sep 17 00:00:00 2001 From: Shreya Date: Sun, 17 Nov 2024 17:47:26 +0530 Subject: [PATCH 14/31] Fix experiment_type in workload details --- .../RemoteMonitoring/UsecaseSelection.tsx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/UsecaseSelection.tsx b/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/UsecaseSelection.tsx index 4419b68b..536152dd 100644 --- a/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/UsecaseSelection.tsx +++ b/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/UsecaseSelection.tsx @@ -83,6 +83,7 @@ const UsecaseSelection = (props: { endTimeArray; setEndTimeArray; SREdata; setSR const response = await fetch(getListExperimentsURLWithParams(value)); const data = await response.json(); const experimentUsecase = data[0].experiment_usecase_type; + console.log(experimentUsecase); let usecase; if (experimentUsecase) { usecase = Object.keys(experimentUsecase).filter((key) => experimentUsecase[key] === true) + ' '; @@ -101,6 +102,7 @@ const UsecaseSelection = (props: { endTimeArray; setEndTimeArray; SREdata; setSR var type = data[0].kubernetes_objects[0].type; var cluster_name = data[0].cluster_name; var container_name = data[0].kubernetes_objects[0].containers[0].container_name; + var experiment_type = data[0].experiment_type; var endtime: any[] = []; endtime = [...Object.keys(data[0].kubernetes_objects[0].containers[0].recommendations.data).sort().reverse()]; @@ -127,7 +129,7 @@ const UsecaseSelection = (props: { endTimeArray; setEndTimeArray; SREdata; setSR type: type, cluster_name: cluster_name, container_name: container_name, - experiment_type: usecase + experiment_type: experiment_type }); } catch { From bb0cee2c30404dd75d811cd98ad7678053ae114d Mon Sep 17 00:00:00 2001 From: Shreya Date: Mon, 25 Nov 2024 14:46:51 +0530 Subject: [PATCH 15/31] Remove redundnat experiment usecase type --- .../RemoteMonitoring/UsecaseSelection.tsx | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/UsecaseSelection.tsx b/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/UsecaseSelection.tsx index 536152dd..ab568421 100644 --- a/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/UsecaseSelection.tsx +++ b/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/UsecaseSelection.tsx @@ -82,17 +82,11 @@ const UsecaseSelection = (props: { endTimeArray; setEndTimeArray; SREdata; setSR sessionStorage.setItem('Experiment Name', value); const response = await fetch(getListExperimentsURLWithParams(value)); const data = await response.json(); - const experimentUsecase = data[0].experiment_usecase_type; - console.log(experimentUsecase); - let usecase; - if (experimentUsecase) { - usecase = Object.keys(experimentUsecase).filter((key) => experimentUsecase[key] === true) + ' '; - setExpUsecaseType(usecase); - } - handleClick(value, usecase); + const experimentUsecase = data[0].experiment_usecase_type || 'container'; + handleClick(value); }; - const handleClick = async (exp_name_value, usecase) => { + const handleClick = async (exp_name_value) => { try { const list_recommendations_url: string = getRecommendationsURLWithParams(exp_name_value, 'false'); @@ -148,7 +142,7 @@ const UsecaseSelection = (props: { endTimeArray; setEndTimeArray; SREdata; setSR if (response.ok) { setShowReccSuccessAlert(true); setTimeout(() => setShowReccSuccessAlert(false), 3000); - handleClick(expName, expUsecaseType); + handleClick(expName); } } catch (error) { console.error('Error during data import:', error); From f0caf9b33786f21d2c7d0156a27d75e8a27f288d Mon Sep 17 00:00:00 2001 From: Thirumalesh Aaraveti Date: Tue, 12 Nov 2024 14:16:19 +0530 Subject: [PATCH 16/31] Added the store --- package-lock.json | 8596 ++++++++++++++--- package.json | 5 +- .../LocalMonitoring/ClusterDataTable.tsx | 95 +- .../LocalMonitoring/ClusterGroupTables.tsx | 59 +- .../LocalMonitoring/DatasourceTable.tsx | 57 +- .../LocalMonitoring/LocalMonitoring.tsx | 28 +- src/index.tsx | 14 +- src/store/actions/DataSourceActionCreator.tsx | 52 + src/store/actions/ExperimentActionCreator.tsx | 54 + src/store/reducers/DataSourceReducers.tsx | 47 + src/store/reducers/ExperimentReducer.tsx | 56 + src/store/reducers/index.tsx | 8 + src/store/store.tsx | 15 + tsconfig.json | 2 + 14 files changed, 7782 insertions(+), 1306 deletions(-) create mode 100644 src/store/actions/DataSourceActionCreator.tsx create mode 100644 src/store/actions/ExperimentActionCreator.tsx create mode 100644 src/store/reducers/DataSourceReducers.tsx create mode 100644 src/store/reducers/ExperimentReducer.tsx create mode 100644 src/store/reducers/index.tsx create mode 100644 src/store/store.tsx diff --git a/package-lock.json b/package-lock.json index d766dc26..446a1924 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "kruize-ui", - "version": "0.0.3", + "version": "0.0.6", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "kruize-ui", - "version": "0.0.3", + "version": "0.0.6", "license": "MIT", "dependencies": { "@kubernetes/client-node": "^0.16.3", @@ -18,6 +18,7 @@ "@patternfly/react-icons": "^5.0.1", "@patternfly/react-styles": "^5.0.1", "@patternfly/react-table": "^5.0.1 ", + "@reduxjs/toolkit": "^2.3.0", "@storybook/builder-webpack5": "^6.2.9", "@types/minipass": "^3.3.5", "algebra.js": "^0.2.6", @@ -49,8 +50,10 @@ "react-markdown": "^8.0.2", "react-mathjax2": "^0.0.2", "react-monaco-editor": "^0.41.2", + "react-redux": "^9.1.2", "react-router-last-location": "^2.0.1", "react-tinder-card": "^1.6.2", + "redux-logger": "^3.0.6", "resolve": "^1.22.6", "sirv-cli": "^1.0.12", "tts-loader": "^0.3.0", @@ -155,9 +158,10 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.23.2", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.2.tgz", - "integrity": "sha512-0S9TQMmDHlqAZ2ITT95irXKfxN9bncq8ZCoJhun3nHL/lLUxd2NKBJYoNGWH7S0hz6fRQwWlAWn/ILM0C70KZQ==", + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.2.tgz", + "integrity": "sha512-Z0WgzSEa+aUcdiJuCIqgujCshpMWgUpgOxXotrYPSA53hA3qopNaqcJpyr0hVb1FeWdnqFA35/fUtXgBK8srQg==", + "license": "MIT", "engines": { "node": ">=6.9.0" } @@ -197,60 +201,69 @@ "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==" }, "node_modules/@babel/generator": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.0.tgz", - "integrity": "sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==", + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.2.tgz", + "integrity": "sha512-zevQbhbau95nkoxSq3f/DC/SC+EEOUZd3DYqfSkMhY2/wfSeaHV1Ew4vk8e+x8lja31IbyuUa2uQ3JONqKbysw==", + "license": "MIT", "dependencies": { - "@babel/types": "^7.23.0", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" + "@babel/parser": "^7.26.2", + "@babel/types": "^7.26.0", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^3.0.2" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": { - "version": "0.3.2", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", "license": "MIT", "dependencies": { - "@jridgewell/set-array": "^1.0.1", + "@jridgewell/set-array": "^1.2.1", "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/trace-mapping": "^0.3.24" }, "engines": { "node": ">=6.0.0" } }, "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.18.6", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz", + "integrity": "sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==", "license": "MIT", "dependencies": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.25.9" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.18.9", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.25.9.tgz", + "integrity": "sha512-C47lC7LIDCnz0h4vai/tpNOI95tCd5ZT3iBt/DBH5lXKHZsyNQv18yf1wIIg2ntiQNgmAvA+DgZ82iW8Qdym8g==", "license": "MIT", "dependencies": { - "@babel/helper-explode-assignable-expression": "^7.18.6", - "@babel/types": "^7.18.9" + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz", - "integrity": "sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.9.tgz", + "integrity": "sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==", + "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.22.9", - "@babel/helper-validator-option": "^7.22.15", - "browserslist": "^4.21.9", + "@babel/compat-data": "^7.25.9", + "@babel/helper-validator-option": "^7.25.9", + "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" }, @@ -272,16 +285,18 @@ "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.18.9", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.9.tgz", + "integrity": "sha512-UTZQMvt0d/rSz6KI+qdu7GQze5TIajwTS++GUozlw8VBJDEOAqSXwm1WvmYEZwqdqSGQshRocPDqrt4HBZB3fQ==", "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.18.9", - "@babel/helper-member-expression-to-functions": "^7.18.9", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-replace-supers": "^7.18.9", - "@babel/helper-split-export-declaration": "^7.18.6" + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-member-expression-to-functions": "^7.25.9", + "@babel/helper-optimise-call-expression": "^7.25.9", + "@babel/helper-replace-supers": "^7.25.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", + "@babel/traverse": "^7.25.9", + "semver": "^6.3.1" }, "engines": { "node": ">=6.9.0" @@ -291,11 +306,14 @@ } }, "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.18.6", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.25.9.tgz", + "integrity": "sha512-ORPNZ3h6ZRkOyAa/SaHU+XsLZr0UQzRwuDQ0cczIA17nAzZ+85G5cVkOJIj7QavLZGSe8QXUmNFxSZzjcZF9bw==", "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "regexpu-core": "^5.1.0" + "@babel/helper-annotate-as-pure": "^7.25.9", + "regexpu-core": "^6.1.1", + "semver": "^6.3.1" }, "engines": { "node": ">=6.9.0" @@ -305,92 +323,70 @@ } }, "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.3.2", + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.2.tgz", + "integrity": "sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ==", "license": "MIT", "dependencies": { - "@babel/helper-compilation-targets": "^7.17.7", - "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-plugin-utils": "^7.22.5", "debug": "^4.1.1", "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2", - "semver": "^6.1.2" + "resolve": "^1.14.2" }, "peerDependencies": { - "@babel/core": "^7.4.0-0" + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "node_modules/@babel/helper-environment-visitor": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", - "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-explode-assignable-expression": { - "version": "7.18.6", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.7.tgz", + "integrity": "sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==", + "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", - "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", - "dependencies": { - "@babel/template": "^7.22.15", - "@babel/types": "^7.23.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", - "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", - "dependencies": { - "@babel/types": "^7.22.5" + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.18.9", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.9.tgz", + "integrity": "sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==", "license": "MIT", "dependencies": { - "@babel/types": "^7.18.9" + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", - "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", + "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", + "license": "MIT", "dependencies": { - "@babel/types": "^7.22.15" + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.0.tgz", - "integrity": "sha512-WhDWw1tdrlT0gMgUJSlX0IQvoO1eN279zrAUbVB+KpV2c3Tylz8+GnKOLllCS6Z/iZQEyVYxhZVUdPTqs2YYPw==", + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", + "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", + "license": "MIT", "dependencies": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-module-imports": "^7.22.15", - "@babel/helper-simple-access": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/helper-validator-identifier": "^7.22.20" + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9", + "@babel/traverse": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -400,30 +396,35 @@ } }, "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.18.6", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.9.tgz", + "integrity": "sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==", "license": "MIT", "dependencies": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.25.9" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.18.9", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.9.tgz", + "integrity": "sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==", "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.18.9", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.9.tgz", + "integrity": "sha512-IZtukuUeBbhgOcaW2s06OXTzVNJR0ybm4W5xC1opWFFJMZbwRj5LCk+ByYH7WdZPZTt8KnFwA8pvjN2yqcPlgw==", "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-wrap-function": "^7.18.9", - "@babel/types": "^7.18.9" + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-wrap-function": "^7.25.9", + "@babel/traverse": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -433,35 +434,43 @@ } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.18.9", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.25.9.tgz", + "integrity": "sha512-IiDqTOTBQy0sWyeXyGSC5TBJpGFXBkRynjBeXsvbhQFKj2viwJC76Epz35YLU1fpe/Am6Vppb7W7zM4fPQzLsQ==", "license": "MIT", "dependencies": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-member-expression-to-functions": "^7.18.9", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/traverse": "^7.18.9", - "@babel/types": "^7.18.9" + "@babel/helper-member-expression-to-functions": "^7.25.9", + "@babel/helper-optimise-call-expression": "^7.25.9", + "@babel/traverse": "^7.25.9" }, "engines": { "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, "node_modules/@babel/helper-simple-access": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", - "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.25.9.tgz", + "integrity": "sha512-c6WHXuiaRsJTyHYLJV75t9IqsmTbItYfdj99PnzYGQZkYKvan5/2jKJ7gu31J3/BJ/A18grImSPModuyG/Eo0Q==", + "license": "MIT", "dependencies": { - "@babel/types": "^7.22.5" + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.18.9", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.9.tgz", + "integrity": "sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==", "license": "MIT", "dependencies": { - "@babel/types": "^7.18.9" + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -479,37 +488,41 @@ } }, "node_modules/@babel/helper-string-parser": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", - "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", + "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", - "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", + "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz", - "integrity": "sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", + "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-wrap-function": { - "version": "7.18.11", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.25.9.tgz", + "integrity": "sha512-ETzz9UTjQSTmw39GboatdymDq4XIQbR8ySgVrylRhPOFpsd+JrKHIuF0de7GCWmem+T4uC5z7EZguod7Wj4A4g==", "license": "MIT", "dependencies": { - "@babel/helper-function-name": "^7.18.9", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.18.11", - "@babel/types": "^7.18.10" + "@babel/template": "^7.25.9", + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -542,9 +555,13 @@ } }, "node_modules/@babel/parser": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz", - "integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==", + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.2.tgz", + "integrity": "sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.26.0" + }, "bin": { "parser": "bin/babel-parser.js" }, @@ -552,11 +569,14 @@ "node": ">=6.0.0" } }, - "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.18.6", + "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.9.tgz", + "integrity": "sha512-ZkRyVkThtxQ/J6nv3JFYv1RYY+JT5BvU0y3k5bWrmuG4woXypRa4PXmm9RhOwodRkYFWqC0C0cqcJ4OqR7kW+g==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/traverse": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -565,75 +585,82 @@ "@babel/core": "^7.0.0" } }, - "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.18.9", + "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.9.tgz", + "integrity": "sha512-MrGRLZxLD/Zjj0gdU15dfs+HH/OXvnw/U4jJD8vpcP2CJQapPEv1IWwjc/qMg7ItBlPwSv1hRBbb7LeuANdcnw==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", - "@babel/plugin-proposal-optional-chaining": "^7.18.9" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { - "@babel/core": "^7.13.0" + "@babel/core": "^7.0.0" } }, - "node_modules/@babel/plugin-proposal-async-generator-functions": { - "version": "7.18.10", + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.9.tgz", + "integrity": "sha512-2qUwwfAFpJLZqxd02YW9btUCZHl+RFvdDkNfZwaIJrvB8Tesjsk8pEQkTvGwZXLqXUx/2oyY3ySRhm6HOXuCug==", "license": "MIT", "dependencies": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/helper-remap-async-to-generator": "^7.18.9", - "@babel/plugin-syntax-async-generators": "^7.8.4" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@babel/core": "^7.0.0" } }, - "node_modules/@babel/plugin-proposal-class-properties": { - "version": "7.18.6", + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.25.9.tgz", + "integrity": "sha512-6xWgLZTJXwilVjlnV7ospI3xi+sl8lN8rXXbBD6vYn3UYDlGsag8wrZkKcSI8G6KgqKP7vNFaDgeDnfAABq61g==", "license": "MIT", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", + "@babel/plugin-transform-optional-chaining": "^7.25.9" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@babel/core": "^7.13.0" } }, - "node_modules/@babel/plugin-proposal-class-static-block": { - "version": "7.18.6", + "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.9.tgz", + "integrity": "sha512-aLnMXYPnzwwqhYSCyXfKkIkYgJ8zv9RK+roo9DkTXz38ynIhd9XCbN08s3MGvqL2MYGVUGdRQLL/JqBIeJhJBg==", "license": "MIT", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-class-static-block": "^7.14.5" + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/traverse": "^7.25.9" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { - "@babel/core": "^7.12.0" + "@babel/core": "^7.0.0" } }, - "node_modules/@babel/plugin-proposal-decorators": { - "version": "7.18.10", + "node_modules/@babel/plugin-proposal-async-generator-functions": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz", + "integrity": "sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-async-generator-functions instead.", + "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.18.9", - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/helper-replace-supers": "^7.18.9", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/plugin-syntax-decorators": "^7.18.6" + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-remap-async-to-generator": "^7.18.9", + "@babel/plugin-syntax-async-generators": "^7.8.4" }, "engines": { "node": ">=6.9.0" @@ -642,12 +669,12 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-dynamic-import": { + "node_modules/@babel/plugin-proposal-class-properties": { "version": "7.18.6", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" }, "engines": { "node": ">=6.9.0" @@ -656,12 +683,15 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-export-default-from": { + "node_modules/@babel/plugin-proposal-decorators": { "version": "7.18.10", "license": "MIT", "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.18.9", "@babel/helper-plugin-utils": "^7.18.9", - "@babel/plugin-syntax-export-default-from": "^7.18.6" + "@babel/helper-replace-supers": "^7.18.9", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/plugin-syntax-decorators": "^7.18.6" }, "engines": { "node": ">=6.9.0" @@ -670,26 +700,12 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-export-namespace-from": { - "version": "7.18.9", + "node_modules/@babel/plugin-proposal-export-default-from": { + "version": "7.18.10", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.18.9", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-json-strings": { - "version": "7.18.6", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-json-strings": "^7.8.3" + "@babel/plugin-syntax-export-default-from": "^7.18.6" }, "engines": { "node": ">=6.9.0" @@ -698,12 +714,14 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-logical-assignment-operators": { + "node_modules/@babel/plugin-proposal-export-namespace-from": { "version": "7.18.9", + "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.18.9", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" }, "engines": { "node": ">=6.9.0" @@ -728,7 +746,12 @@ }, "node_modules/@babel/plugin-proposal-numeric-separator": { "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", + "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-numeric-separator instead.", + "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-numeric-separator": "^7.10.4" @@ -741,14 +764,17 @@ } }, "node_modules/@babel/plugin-proposal-object-rest-spread": { - "version": "7.18.9", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz", + "integrity": "sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-object-rest-spread instead.", "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.18.8", - "@babel/helper-compilation-targets": "^7.18.9", - "@babel/helper-plugin-utils": "^7.18.9", + "@babel/compat-data": "^7.20.5", + "@babel/helper-compilation-targets": "^7.20.7", + "@babel/helper-plugin-utils": "^7.20.2", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.18.8" + "@babel/plugin-transform-parameters": "^7.20.7" }, "engines": { "node": ">=6.9.0" @@ -759,7 +785,12 @@ }, "node_modules/@babel/plugin-proposal-optional-catch-binding": { "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz", + "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-catch-binding instead.", + "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" @@ -772,11 +803,14 @@ } }, "node_modules/@babel/plugin-proposal-optional-chaining": { - "version": "7.18.9", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz", + "integrity": "sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-chaining instead.", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", "@babel/plugin-syntax-optional-chaining": "^7.8.3" }, "engines": { @@ -816,22 +850,9 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-unicode-property-regex": { - "version": "7.18.6", - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/@babel/plugin-syntax-async-generators": { "version": "7.8.4", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" @@ -853,6 +874,7 @@ }, "node_modules/@babel/plugin-syntax-class-properties": { "version": "7.12.13", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.12.13" @@ -861,19 +883,6 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/@babel/plugin-syntax-decorators": { "version": "7.18.6", "license": "MIT", @@ -912,7 +921,9 @@ }, "node_modules/@babel/plugin-syntax-export-namespace-from": { "version": "7.8.3", + "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.3" }, @@ -921,11 +932,13 @@ } }, "node_modules/@babel/plugin-syntax-flow": { - "version": "7.18.6", + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.26.0.tgz", + "integrity": "sha512-B+O2DnPc0iG+YXFqOxv2WNuNU97ToWjOomUQ78DouOENWUaM5sVrmet9mcomUGQFwpJd//gvUagXBSdzO1fRKg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -935,10 +948,27 @@ } }, "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.18.6", + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.26.0.tgz", + "integrity": "sha512-QCWT5Hh830hK5EQa7XzuqIkQU9tT/whqbDz7kuaZMHFl1inRRg7JnuAEOQ0Ur0QUl0NufCk1msK2BeY79Aj/eg==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.26.0.tgz", + "integrity": "sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -960,6 +990,7 @@ }, "node_modules/@babel/plugin-syntax-json-strings": { "version": "7.8.3", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" @@ -983,6 +1014,7 @@ }, "node_modules/@babel/plugin-syntax-logical-assignment-operators": { "version": "7.10.4", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" @@ -1003,6 +1035,7 @@ }, "node_modules/@babel/plugin-syntax-numeric-separator": { "version": "7.10.4", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" @@ -1023,6 +1056,7 @@ }, "node_modules/@babel/plugin-syntax-optional-catch-binding": { "version": "7.8.3", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" @@ -1056,6 +1090,7 @@ }, "node_modules/@babel/plugin-syntax-top-level-await": { "version": "7.14.5", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" @@ -1080,26 +1115,63 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-arrow-functions": { + "node_modules/@babel/plugin-syntax-unicode-sets-regex": { "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", + "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", "license": "MIT", "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" }, "engines": { "node": ">=6.9.0" }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.25.9.tgz", + "integrity": "sha512-6jmooXYIwn9ca5/RylZADJ+EnSxVUS5sjeJ9UPk6RWRzXCmOJCy6dqItPJFpw2cuCangPK4OYr5uhGKcmrm5Qg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-generator-functions": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.9.tgz", + "integrity": "sha512-RXV6QAzTBbhDMO9fWwOmwwTuYaiPbggWQ9INdZqAYeSHyG7FzQ+nOZaUUjNwKv9pV3aE4WFqFm1Hnbci5tBCAw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-remap-async-to-generator": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.18.6", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.25.9.tgz", + "integrity": "sha512-NT7Ejn7Z/LjUH0Gv5KsBCxh7BH3fbLTV0ptHvpeMvrt3cPThHfJfst9Wrb7S8EvJ7vRTFI7z+VAvFVEQn/m5zQ==", "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-remap-async-to-generator": "^7.18.6" + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-remap-async-to-generator": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1109,10 +1181,12 @@ } }, "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.18.6", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.25.9.tgz", + "integrity": "sha512-toHc9fzab0ZfenFpsyYinOX0J/5dgJVA2fm64xPewu7CoYHWEivIWKxkK2rMi4r3yQqLnVmheMXRdG+k239CgA==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1122,10 +1196,12 @@ } }, "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.18.9", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.9.tgz", + "integrity": "sha512-1F05O7AYjymAtqbsFETboN1NvBdcnzMerO+zlMyJBEz6WkMdejvGWw9p05iTSjC85RLlBseHHQpYaM4gzJkBGg==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1134,17 +1210,49 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-transform-class-properties": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.9.tgz", + "integrity": "sha512-bbMAII8GRSkcd0h0b4X+36GksxuheLFjP65ul9w6C3KgAamI3JqErNgSrosX6ZPj+Mpim5VvEbawXxJCyEUV3Q==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-static-block": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.26.0.tgz", + "integrity": "sha512-6J2APTs7BDDm+UMqP1useWqhcRAXo0WIoVj26N7kPFB6S73Lgvyka4KTZYIxtgYXiN5HTyRObA72N2iu628iTQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" + } + }, "node_modules/@babel/plugin-transform-classes": { - "version": "7.18.9", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.9.tgz", + "integrity": "sha512-mD8APIXmseE7oZvZgGABDyM34GUmK45Um2TXiBUt7PnuAxrgoSVf123qUzPxEr/+/BHrRn5NMZCdE2m/1F8DGg==", "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.18.9", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/helper-replace-supers": "^7.18.9", - "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-replace-supers": "^7.25.9", + "@babel/traverse": "^7.25.9", "globals": "^11.1.0" }, "engines": { @@ -1155,10 +1263,13 @@ } }, "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.18.9", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.25.9.tgz", + "integrity": "sha512-HnBegGqXZR12xbcTHlJ9HGxw1OniltT26J5YpfruGqtUHlz/xKf/G2ak9e+t0rVqrjXa9WOhvYPz1ERfMj23AA==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/template": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1168,10 +1279,12 @@ } }, "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.18.9", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.25.9.tgz", + "integrity": "sha512-WkCGb/3ZxXepmMiX101nnGiU+1CAdut8oHyEOHxkKuS1qKpU2SMXE2uSvfz8PBuLd49V6LEsbtyPhWC7fnkgvQ==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1181,11 +1294,13 @@ } }, "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.18.6", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.25.9.tgz", + "integrity": "sha512-t7ZQ7g5trIgSRYhI9pIJtRl64KHotutUJsh4Eze5l7olJv+mRSg4/MmbZ0tv1eeqRbdvo/+trvJD/Oc5DmW2cA==", "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1195,10 +1310,43 @@ } }, "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.18.9", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.25.9.tgz", + "integrity": "sha512-LZxhJ6dvBb/f3x8xwWIuyiAHy56nrRG3PeYTpBkkzkYRRQ6tJLu68lEF5VIqMUZiAV7a8+Tb78nEoMCMcqjXBw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.9.tgz", + "integrity": "sha512-0UfuJS0EsXbRvKnwcLjFtJy/Sxc5J5jhLHnFhy7u4zih97Hz6tJkLU+O+FMMrNZrosUPxDi6sYxJ/EA8jDiAog==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-dynamic-import": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.25.9.tgz", + "integrity": "sha512-GCggjexbmSLaFhqsojeugBpeaRIgWNTcgKVq/0qIteFEqY2A+b9QidYadrWlnbWQUrW5fn+mCvf3tr7OeBFTyg==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1208,11 +1356,28 @@ } }, "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.18.6", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.25.9.tgz", + "integrity": "sha512-KRhdhlVk2nObA5AYa7QMgTMTVJdfHprfpAk4DjZVtllqRg9qarilstTKEhpVjyt+Npi8ThRyiV8176Am3CodPA==", "license": "MIT", "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-export-namespace-from": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.25.9.tgz", + "integrity": "sha512-2NsEz+CxzJIVOPx2o9UsW1rXLqtChtLoVnwYHHiB04wS5sgn7mrV45fWMBX0Kk+ub9uXytVYfNP2HjbVbCB3Ww==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1222,12 +1387,14 @@ } }, "node_modules/@babel/plugin-transform-flow-strip-types": { - "version": "7.18.9", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.25.9.tgz", + "integrity": "sha512-/VVukELzPDdci7UUsWQaSkhgnjIWXnIyRpM02ldxaVoFK96c41So8JcKT3m0gYjyv7j5FNPGS5vfELrWalkbDA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/plugin-syntax-flow": "^7.18.6" + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/plugin-syntax-flow": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1237,10 +1404,13 @@ } }, "node_modules/@babel/plugin-transform-for-of": { - "version": "7.18.8", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.25.9.tgz", + "integrity": "sha512-LqHxduHoaGELJl2uhImHwRQudhCM50pT46rIBNvtT/Oql3nqiS3wOwP+5ten7NpYSXrrVLgtZU3DZmPtWZo16A==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1250,12 +1420,29 @@ } }, "node_modules/@babel/plugin-transform-function-name": { - "version": "7.18.9", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.9.tgz", + "integrity": "sha512-8lP+Yxjv14Vc5MuWBpJsoUCd3hD6V9DgBon2FVYL4jJgbnVQ9fTgYmonchzZJOVNgzEgbxp4OwAf6xz6M/14XA==", + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-json-strings": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.25.9.tgz", + "integrity": "sha512-xoTMk0WXceiiIvsaquQQUaLLXSW1KJ159KP87VilruQm0LNNGxWzahxSS6T6i4Zg3ezp4vA4zuwiNUR53qmQAw==", "license": "MIT", "dependencies": { - "@babel/helper-compilation-targets": "^7.18.9", - "@babel/helper-function-name": "^7.18.9", - "@babel/helper-plugin-utils": "^7.18.9" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1265,10 +1452,27 @@ } }, "node_modules/@babel/plugin-transform-literals": { - "version": "7.18.9", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.9.tgz", + "integrity": "sha512-9N7+2lFziW8W9pBl2TzaNht3+pgMIRP74zizeCSrtnSKVdUl8mAjjOP2OOVQAfZ881P2cNjDj1uAMEdeD50nuQ==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-logical-assignment-operators": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.25.9.tgz", + "integrity": "sha512-wI4wRAzGko551Y8eVf6iOY9EouIDTtPb0ByZx+ktDGHwv6bHFimrgJM/2T021txPZ2s4c7bqvHbd+vXG6K948Q==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1278,10 +1482,12 @@ } }, "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.18.6", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.25.9.tgz", + "integrity": "sha512-PYazBVfofCQkkMzh2P6IdIUaCEWni3iYEerAsRWuVd8+jlM1S9S9cz1dF9hIzyoZ8IA3+OwVYIp9v9e+GbgZhA==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1291,12 +1497,13 @@ } }, "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.18.6", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.25.9.tgz", + "integrity": "sha512-g5T11tnI36jVClQlMlt4qKDLlWnG5pP9CSM4GhdRciTNMRgkfpo5cR6b4rGIOYPgRRuFAvwjPQ/Yk+ql4dyhbw==", "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "babel-plugin-dynamic-import-node": "^2.3.3" + "@babel/helper-module-transforms": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1306,13 +1513,14 @@ } }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.18.6", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.25.9.tgz", + "integrity": "sha512-dwh2Ol1jWwL2MgkCzUSOvfmKElqQcuswAZypBSUsScMXvgdT8Ekq5YA6TtqpTVWH+4903NmboMuH1o9i8Rxlyg==", "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-simple-access": "^7.18.6", - "babel-plugin-dynamic-import-node": "^2.3.3" + "@babel/helper-module-transforms": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-simple-access": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1322,14 +1530,15 @@ } }, "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.18.9", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.9.tgz", + "integrity": "sha512-hyss7iIlH/zLHaehT+xwiymtPOpsiwIIRlCAOwBB04ta5Tt+lNItADdlXw3jAWZ96VJ2jlhl/c+PNIQPKNfvcA==", "license": "MIT", "dependencies": { - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-module-transforms": "^7.18.9", - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/helper-validator-identifier": "^7.18.6", - "babel-plugin-dynamic-import-node": "^2.3.3" + "@babel/helper-module-transforms": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9", + "@babel/traverse": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1339,11 +1548,13 @@ } }, "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.18.6", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.25.9.tgz", + "integrity": "sha512-bS9MVObUgE7ww36HEfwe6g9WakQ0KF07mQF74uuXdkoziUPfKyu/nIm663kz//e5O1nPInPFx36z7WJmJ4yNEw==", "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-module-transforms": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1353,11 +1564,13 @@ } }, "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.18.6", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.25.9.tgz", + "integrity": "sha512-oqB6WHdKTGl3q/ItQhpLSnWWOpjUJLsOCLVyeFgeTktkBSCiurvPOsyt93gibI9CmuKvTUEtWmG5VhZD+5T/KA==", "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1367,10 +1580,59 @@ } }, "node_modules/@babel/plugin-transform-new-target": { - "version": "7.18.6", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.25.9.tgz", + "integrity": "sha512-U/3p8X1yCSoKyUj2eOBIx3FOn6pElFOKvAAGf8HTtItuPyB+ZeOqfn+mvTtg9ZlOAjsPdK3ayQEjqHjU/yLeVQ==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.25.9.tgz", + "integrity": "sha512-ENfftpLZw5EItALAD4WsY/KUWvhUlZndm5GC7G3evUsVeSJB6p0pBeLQUnRnBCBx7zV0RKQjR9kCuwrsIrjWog==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-numeric-separator": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.25.9.tgz", + "integrity": "sha512-TlprrJ1GBZ3r6s96Yq8gEQv82s8/5HnCVHtEJScUj90thHQbwe+E5MLhi2bbNHBEJuzrvltXSru+BUxHDoog7Q==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-rest-spread": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.25.9.tgz", + "integrity": "sha512-fSaXafEE9CVHPweLYw4J0emp1t8zYTXyzN3UuG+lylqkvYd7RMrsOQ8TYx5RF231be0vqtFC6jnx3UmpJmKBYg==", + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/plugin-transform-parameters": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1380,11 +1642,44 @@ } }, "node_modules/@babel/plugin-transform-object-super": { - "version": "7.18.6", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.25.9.tgz", + "integrity": "sha512-Kj/Gh+Rw2RNLbCK1VAWj2U48yxxqL2x0k10nPtSdRa0O2xnHXalD0s+o1A6a0W43gJ00ANo38jxkQreckOzv5A==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-replace-supers": "^7.18.6" + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-replace-supers": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-catch-binding": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.25.9.tgz", + "integrity": "sha512-qM/6m6hQZzDcZF3onzIhZeDHDO43bkNNlOX0i8n3lR6zLbu0GN2d8qfM/IERJZYauhAHSLHy39NF0Ctdvcid7g==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-chaining": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.25.9.tgz", + "integrity": "sha512-6AvV0FsLULbpnXeBjrY4dmWF8F7gf8QnvTEoO/wX/5xm/xE1Xo8oPuD3MPS+KS9f9XBEAWN7X1aWr4z9HdOr7A==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1394,10 +1689,45 @@ } }, "node_modules/@babel/plugin-transform-parameters": { - "version": "7.18.8", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.25.9.tgz", + "integrity": "sha512-wzz6MKwpnshBAiRmn4jR8LYz/g8Ksg0o80XmwZDlordjwEk9SxBzTWC7F5ef1jhbrbOW2DJ5J6ayRukrJmnr0g==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-methods": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.9.tgz", + "integrity": "sha512-D/JUozNpQLAPUVusvqMxyvjzllRaF8/nSrP1s2YGQT/W4LHK4xxsMcHjhOGTS01mp9Hda8nswb+FblLdJornQw==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-property-in-object": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.25.9.tgz", + "integrity": "sha512-Evf3kcMqzXA3xfYJmZ9Pg1OvKdtqsDMSWBDzZOPLvHiTt36E75jLDQo5w1gtRU95Q4E5PDttrTf25Fw8d/uWLw==", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1407,10 +1737,12 @@ } }, "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.18.6", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.25.9.tgz", + "integrity": "sha512-IvIUeV5KrS/VPavfSM/Iu+RE6llrHrYIKY1yfCzyO/lMXHQ+p7uGhonmGVisv6tSBSVgWzMBohTcvkC9vQcQFA==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1462,6 +1794,40 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.25.9.tgz", + "integrity": "sha512-y8quW6p0WHkEhmErnfe58r7x0A70uKphQm8Sp8cV7tjNQwK56sNVK0M73LK3WuYmsuyrftut4xAkjjgU0twaMg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.25.9.tgz", + "integrity": "sha512-+iqjT8xmXhhYv4/uiYd8FNQsraMFZIfxVSqxxVSZP0WbbSAWvBXAul0m/zu+7Vv4O/3WtApy9pmaTMiumEZgfg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-transform-react-pure-annotations": { "version": "7.18.6", "license": "MIT", @@ -1477,11 +1843,13 @@ } }, "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.18.6", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.25.9.tgz", + "integrity": "sha512-vwDcDNsgMPDGP0nMqzahDWE5/MLcX8sv96+wfX7as7LoF/kr97Bo/7fI00lXY4wUXYfVmwIIyG80fGZ1uvt2qg==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "regenerator-transform": "^0.15.0" + "@babel/helper-plugin-utils": "^7.25.9", + "regenerator-transform": "^0.15.2" }, "engines": { "node": ">=6.9.0" @@ -1490,11 +1858,51 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-transform-regexp-modifiers": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.26.0.tgz", + "integrity": "sha512-vN6saax7lrA2yA/Pak3sCxuD6F5InBjn9IcrIKQPjpsLvuHYLVroTxjdlVRHjjBWxKOqIwpTXDkOssYT4BFdRw==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.18.6", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.25.9.tgz", + "integrity": "sha512-7DL7DKYjn5Su++4RXu8puKZm2XBPHyjWLUidaPEkCUBbE7IPcsrkRHggAOOKydH1dASWdcUBxrkOGNxUv5P3Jg==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.25.9.tgz", + "integrity": "sha512-nZp7GlEl+yULJrClz0SwHPqir3lc0zsPrDHQUcxGspSL7AKrexNSEfTbfqnDNJUO13bgKyfuOLMF8Xqtu8j3YQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "babel-plugin-polyfill-corejs2": "^0.4.10", + "babel-plugin-polyfill-corejs3": "^0.10.6", + "babel-plugin-polyfill-regenerator": "^0.6.1", + "semver": "^6.3.1" }, "engines": { "node": ">=6.9.0" @@ -1503,11 +1911,28 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-transform-runtime/node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.10.6", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.6.tgz", + "integrity": "sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.2", + "core-js-compat": "^3.38.0" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.18.6", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.25.9.tgz", + "integrity": "sha512-MUv6t0FhO5qHnS/W8XCbHmiRWOphNufpE1IVxhK5kuN3Td9FT1x4rx4K42s3RYdMXCXpfWkGSbCSd0Z64xA7Ng==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1517,11 +1942,13 @@ } }, "node_modules/@babel/plugin-transform-spread": { - "version": "7.18.9", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.25.9.tgz", + "integrity": "sha512-oNknIB0TbURU5pqJFVbOOFspVlrpVwo2H1+HUIsVDvp5VauGGDP1ZEvO8Nn5xyMEs3dakajOxlmkNW7kNgSm6A==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9" + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1531,10 +1958,12 @@ } }, "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.18.6", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.25.9.tgz", + "integrity": "sha512-WqBUSgeVwucYDP9U/xNRQam7xV8W5Zf+6Eo7T2SRVUFlhRiMNFdFz58u0KZmCVVqs2i7SHgpRnAhzRNmKfi2uA==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1544,10 +1973,12 @@ } }, "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.18.9", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.25.9.tgz", + "integrity": "sha512-o97AE4syN71M/lxrCtQByzphAdlYluKPDBzDVzMmfCobUjjhAryZV0AIpRPrxN0eAkxXO6ZLEScmt+PNhj2OTw==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1557,10 +1988,12 @@ } }, "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.18.9", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.25.9.tgz", + "integrity": "sha512-v61XqUMiueJROUv66BVIOi0Fv/CUuZuZMl5NkRoCVxLAnMexZ0A3kMe7vvZ0nulxMuMp0Mk6S5hNh48yki08ZA==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1585,10 +2018,28 @@ } }, "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.18.10", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.25.9.tgz", + "integrity": "sha512-s5EDrE6bW97LtxOcGj1Khcx5AaXwiMmi4toFWRDP9/y0Woo6pXC+iyPu/KuhKtfSrNFd7jJB+/fkOtZy6aIC6Q==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-property-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.25.9.tgz", + "integrity": "sha512-Jt2d8Ga+QwRluxRQ307Vlxa6dMrYEMZCgGxoPR8V52rxPyldHu3hdlHspxaqYmE7oID5+kB+UKUB/eWS+DkkWg==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1598,11 +2049,13 @@ } }, "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.18.6", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.25.9.tgz", + "integrity": "sha512-yoxstj7Rg9dlNn9UQxzk4fcNivwv4nUYz7fYXBaKxvw/lnmPuOm/ikoELygbYq68Bls3D/D+NBPHiLwZdZZ4HA==", "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1611,85 +2064,97 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/preset-env": { - "version": "7.18.10", + "node_modules/@babel/plugin-transform-unicode-sets-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.9.tgz", + "integrity": "sha512-8BYqO3GeVNHtx69fdPshN3fnzUNLrWdHhk/icSwigksJGczKSizZ+Z6SBCxTs723Fr5VSNorTIK7a+R2tISvwQ==", "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.18.8", - "@babel/helper-compilation-targets": "^7.18.9", - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/helper-validator-option": "^7.18.6", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.18.9", - "@babel/plugin-proposal-async-generator-functions": "^7.18.10", - "@babel/plugin-proposal-class-properties": "^7.18.6", - "@babel/plugin-proposal-class-static-block": "^7.18.6", - "@babel/plugin-proposal-dynamic-import": "^7.18.6", - "@babel/plugin-proposal-export-namespace-from": "^7.18.9", - "@babel/plugin-proposal-json-strings": "^7.18.6", - "@babel/plugin-proposal-logical-assignment-operators": "^7.18.9", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6", - "@babel/plugin-proposal-numeric-separator": "^7.18.6", - "@babel/plugin-proposal-object-rest-spread": "^7.18.9", - "@babel/plugin-proposal-optional-catch-binding": "^7.18.6", - "@babel/plugin-proposal-optional-chaining": "^7.18.9", - "@babel/plugin-proposal-private-methods": "^7.18.6", - "@babel/plugin-proposal-private-property-in-object": "^7.18.6", - "@babel/plugin-proposal-unicode-property-regex": "^7.18.6", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.18.6", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-transform-arrow-functions": "^7.18.6", - "@babel/plugin-transform-async-to-generator": "^7.18.6", - "@babel/plugin-transform-block-scoped-functions": "^7.18.6", - "@babel/plugin-transform-block-scoping": "^7.18.9", - "@babel/plugin-transform-classes": "^7.18.9", - "@babel/plugin-transform-computed-properties": "^7.18.9", - "@babel/plugin-transform-destructuring": "^7.18.9", - "@babel/plugin-transform-dotall-regex": "^7.18.6", - "@babel/plugin-transform-duplicate-keys": "^7.18.9", - "@babel/plugin-transform-exponentiation-operator": "^7.18.6", - "@babel/plugin-transform-for-of": "^7.18.8", - "@babel/plugin-transform-function-name": "^7.18.9", - "@babel/plugin-transform-literals": "^7.18.9", - "@babel/plugin-transform-member-expression-literals": "^7.18.6", - "@babel/plugin-transform-modules-amd": "^7.18.6", - "@babel/plugin-transform-modules-commonjs": "^7.18.6", - "@babel/plugin-transform-modules-systemjs": "^7.18.9", - "@babel/plugin-transform-modules-umd": "^7.18.6", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.18.6", - "@babel/plugin-transform-new-target": "^7.18.6", - "@babel/plugin-transform-object-super": "^7.18.6", - "@babel/plugin-transform-parameters": "^7.18.8", - "@babel/plugin-transform-property-literals": "^7.18.6", - "@babel/plugin-transform-regenerator": "^7.18.6", - "@babel/plugin-transform-reserved-words": "^7.18.6", - "@babel/plugin-transform-shorthand-properties": "^7.18.6", - "@babel/plugin-transform-spread": "^7.18.9", - "@babel/plugin-transform-sticky-regex": "^7.18.6", - "@babel/plugin-transform-template-literals": "^7.18.9", - "@babel/plugin-transform-typeof-symbol": "^7.18.9", - "@babel/plugin-transform-unicode-escapes": "^7.18.10", - "@babel/plugin-transform-unicode-regex": "^7.18.6", - "@babel/preset-modules": "^0.1.5", - "@babel/types": "^7.18.10", - "babel-plugin-polyfill-corejs2": "^0.3.2", - "babel-plugin-polyfill-corejs3": "^0.5.3", - "babel-plugin-polyfill-regenerator": "^0.4.0", - "core-js-compat": "^3.22.1", - "semver": "^6.3.0" + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.26.0.tgz", + "integrity": "sha512-H84Fxq0CQJNdPFT2DrfnylZ3cf5K43rGfWK4LJGPpjKHiZlk0/RzwEus3PDDZZg+/Er7lCA03MVacueUuXdzfw==", + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.26.0", + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-validator-option": "^7.25.9", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.9", + "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.9", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.25.9", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.25.9", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.25.9", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", + "@babel/plugin-syntax-import-assertions": "^7.26.0", + "@babel/plugin-syntax-import-attributes": "^7.26.0", + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.25.9", + "@babel/plugin-transform-async-generator-functions": "^7.25.9", + "@babel/plugin-transform-async-to-generator": "^7.25.9", + "@babel/plugin-transform-block-scoped-functions": "^7.25.9", + "@babel/plugin-transform-block-scoping": "^7.25.9", + "@babel/plugin-transform-class-properties": "^7.25.9", + "@babel/plugin-transform-class-static-block": "^7.26.0", + "@babel/plugin-transform-classes": "^7.25.9", + "@babel/plugin-transform-computed-properties": "^7.25.9", + "@babel/plugin-transform-destructuring": "^7.25.9", + "@babel/plugin-transform-dotall-regex": "^7.25.9", + "@babel/plugin-transform-duplicate-keys": "^7.25.9", + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.25.9", + "@babel/plugin-transform-dynamic-import": "^7.25.9", + "@babel/plugin-transform-exponentiation-operator": "^7.25.9", + "@babel/plugin-transform-export-namespace-from": "^7.25.9", + "@babel/plugin-transform-for-of": "^7.25.9", + "@babel/plugin-transform-function-name": "^7.25.9", + "@babel/plugin-transform-json-strings": "^7.25.9", + "@babel/plugin-transform-literals": "^7.25.9", + "@babel/plugin-transform-logical-assignment-operators": "^7.25.9", + "@babel/plugin-transform-member-expression-literals": "^7.25.9", + "@babel/plugin-transform-modules-amd": "^7.25.9", + "@babel/plugin-transform-modules-commonjs": "^7.25.9", + "@babel/plugin-transform-modules-systemjs": "^7.25.9", + "@babel/plugin-transform-modules-umd": "^7.25.9", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.25.9", + "@babel/plugin-transform-new-target": "^7.25.9", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.25.9", + "@babel/plugin-transform-numeric-separator": "^7.25.9", + "@babel/plugin-transform-object-rest-spread": "^7.25.9", + "@babel/plugin-transform-object-super": "^7.25.9", + "@babel/plugin-transform-optional-catch-binding": "^7.25.9", + "@babel/plugin-transform-optional-chaining": "^7.25.9", + "@babel/plugin-transform-parameters": "^7.25.9", + "@babel/plugin-transform-private-methods": "^7.25.9", + "@babel/plugin-transform-private-property-in-object": "^7.25.9", + "@babel/plugin-transform-property-literals": "^7.25.9", + "@babel/plugin-transform-regenerator": "^7.25.9", + "@babel/plugin-transform-regexp-modifiers": "^7.26.0", + "@babel/plugin-transform-reserved-words": "^7.25.9", + "@babel/plugin-transform-shorthand-properties": "^7.25.9", + "@babel/plugin-transform-spread": "^7.25.9", + "@babel/plugin-transform-sticky-regex": "^7.25.9", + "@babel/plugin-transform-template-literals": "^7.25.9", + "@babel/plugin-transform-typeof-symbol": "^7.25.9", + "@babel/plugin-transform-unicode-escapes": "^7.25.9", + "@babel/plugin-transform-unicode-property-regex": "^7.25.9", + "@babel/plugin-transform-unicode-regex": "^7.25.9", + "@babel/plugin-transform-unicode-sets-regex": "^7.25.9", + "@babel/preset-modules": "0.1.6-no-external-plugins", + "babel-plugin-polyfill-corejs2": "^0.4.10", + "babel-plugin-polyfill-corejs3": "^0.10.6", + "babel-plugin-polyfill-regenerator": "^0.6.1", + "core-js-compat": "^3.38.1", + "semver": "^6.3.1" }, "engines": { "node": ">=6.9.0" @@ -1698,15 +2163,29 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/preset-env/node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.0-placeholder-for-preset-env.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/preset-env/node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.5.3", + "version": "0.10.6", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.6.tgz", + "integrity": "sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA==", "license": "MIT", "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.3.2", - "core-js-compat": "^3.21.0" + "@babel/helper-define-polyfill-provider": "^0.6.2", + "core-js-compat": "^3.38.0" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "node_modules/@babel/preset-flow": { @@ -1726,17 +2205,17 @@ } }, "node_modules/@babel/preset-modules": { - "version": "0.1.5", + "version": "0.1.6-no-external-plugins", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", + "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/plugin-transform-dotall-regex": "^7.4.4", "@babel/types": "^7.4.4", "esutils": "^2.0.2" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" } }, "node_modules/@babel/preset-react": { @@ -1790,61 +2269,85 @@ } }, "node_modules/@babel/runtime": { - "version": "7.18.9", + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.0.tgz", + "integrity": "sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==", "license": "MIT", "dependencies": { - "regenerator-runtime": "^0.13.4" + "regenerator-runtime": "^0.14.0" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/runtime/node_modules/regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" - }, "node_modules/@babel/template": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", - "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.9.tgz", + "integrity": "sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==", + "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.22.13", - "@babel/parser": "^7.22.15", - "@babel/types": "^7.22.15" + "@babel/code-frame": "^7.25.9", + "@babel/parser": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template/node_modules/@babel/code-frame": { + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", + "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.25.9", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.23.2", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.2.tgz", - "integrity": "sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.9.tgz", + "integrity": "sha512-ZCuvfwOwlz/bawvAuvcj8rrithP2/N55Tzz342AkTvq4qaWbGfmCk/tKhNaV2cthijKrPAA8SRJV5WWe7IBMJw==", + "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.22.13", - "@babel/generator": "^7.23.0", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.23.0", - "@babel/types": "^7.23.0", - "debug": "^4.1.0", + "@babel/code-frame": "^7.25.9", + "@babel/generator": "^7.25.9", + "@babel/parser": "^7.25.9", + "@babel/template": "^7.25.9", + "@babel/types": "^7.25.9", + "debug": "^4.3.1", "globals": "^11.1.0" }, "engines": { "node": ">=6.9.0" } }, + "node_modules/@babel/traverse/node_modules/@babel/code-frame": { + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", + "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.25.9", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/types": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz", - "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==", + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.0.tgz", + "integrity": "sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==", + "license": "MIT", "dependencies": { - "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.20", - "to-fast-properties": "^2.0.0" + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1976,7 +2479,7 @@ }, "node_modules/@eslint/eslintrc": { "version": "0.4.3", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "ajv": "^6.12.4", @@ -1995,7 +2498,7 @@ }, "node_modules/@eslint/eslintrc/node_modules/argparse": { "version": "1.0.10", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "sprintf-js": "~1.0.2" @@ -2003,7 +2506,7 @@ }, "node_modules/@eslint/eslintrc/node_modules/globals": { "version": "13.17.0", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "type-fest": "^0.20.2" @@ -2017,7 +2520,7 @@ }, "node_modules/@eslint/eslintrc/node_modules/ignore": { "version": "4.0.6", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">= 4" @@ -2025,7 +2528,7 @@ }, "node_modules/@eslint/eslintrc/node_modules/js-yaml": { "version": "3.14.1", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "argparse": "^1.0.7", @@ -2037,7 +2540,7 @@ }, "node_modules/@eslint/eslintrc/node_modules/strip-json-comments": { "version": "3.1.1", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=8" @@ -2048,7 +2551,7 @@ }, "node_modules/@eslint/eslintrc/node_modules/type-fest": { "version": "0.20.2", - "dev": true, + "devOptional": true, "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" @@ -2057,30 +2560,117 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@expo/image-utils": { - "version": "0.3.23", - "resolved": "https://registry.npmjs.org/@expo/image-utils/-/image-utils-0.3.23.tgz", - "integrity": "sha512-nhUVvW0TrRE4jtWzHQl8TR4ox7kcmrc2I0itaeJGjxF5A54uk7avgA0wRt7jP1rdvqQo1Ke1lXyLYREdhN9tPw==", + "node_modules/@expo/bunyan": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@expo/bunyan/-/bunyan-4.0.0.tgz", + "integrity": "sha512-Ydf4LidRB/EBI+YrB+cVLqIseiRfjUI/AeHBgjGMtq3GroraDu81OV7zqophRgupngoL3iS3JUMDMnxO7g39qA==", "dev": true, + "engines": [ + "node >=0.10.0" + ], + "license": "MIT", + "peer": true, "dependencies": { + "uuid": "^8.0.0" + }, + "optionalDependencies": { + "mv": "~2", + "safe-json-stringify": "~1" + } + }, + "node_modules/@expo/bunyan/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, + "license": "MIT", + "peer": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/@expo/cli": { + "version": "0.10.17", + "resolved": "https://registry.npmjs.org/@expo/cli/-/cli-0.10.17.tgz", + "integrity": "sha512-HkHDvHPzq4M244hIerwnsw2IdjOo7RSsMYWGhc7ZY7DQWIMUC88b7f5+0RtD4JQfXQrgKS5Tvqm/5E6kAH0rIA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/runtime": "^7.20.0", + "@expo/code-signing-certificates": "0.0.5", + "@expo/config": "~8.1.0", + "@expo/config-plugins": "~7.2.0", + "@expo/dev-server": "0.5.5", + "@expo/devcert": "^1.0.0", + "@expo/env": "0.0.5", + "@expo/json-file": "^8.2.37", + "@expo/metro-config": "~0.10.0", + "@expo/osascript": "^2.0.31", + "@expo/package-manager": "~1.1.0", + "@expo/plist": "^0.0.20", + "@expo/prebuild-config": "6.2.6", + "@expo/rudder-sdk-node": "1.1.1", "@expo/spawn-async": "1.5.0", + "@expo/xcpretty": "^4.2.1", + "@urql/core": "2.3.6", + "@urql/exchange-retry": "0.3.0", + "accepts": "^1.3.8", + "arg": "4.1.0", + "better-opn": "~3.0.2", + "bplist-parser": "^0.3.1", + "cacache": "^15.3.0", "chalk": "^4.0.0", - "fs-extra": "9.0.0", + "ci-info": "^3.3.0", + "debug": "^4.3.4", + "env-editor": "^0.4.1", + "form-data": "^3.0.1", + "freeport-async": "2.0.0", + "fs-extra": "~8.1.0", "getenv": "^1.0.0", - "jimp-compact": "0.16.1", - "mime": "^2.4.4", - "node-fetch": "^2.6.0", - "parse-png": "^2.1.0", + "graphql": "15.8.0", + "graphql-tag": "^2.10.1", + "https-proxy-agent": "^5.0.1", + "internal-ip": "4.3.0", + "js-yaml": "^3.13.1", + "json-schema-deref-sync": "^0.13.0", + "md5-file": "^3.2.3", + "md5hex": "^1.0.0", + "minipass": "3.1.6", + "node-fetch": "^2.6.7", + "node-forge": "^1.3.1", + "npm-package-arg": "^7.0.0", + "ora": "3.4.0", + "pretty-bytes": "5.6.0", + "progress": "2.0.3", + "prompts": "^2.3.2", + "qrcode-terminal": "0.11.0", + "require-from-string": "^2.0.2", + "requireg": "^0.2.2", "resolve-from": "^5.0.0", - "semver": "7.3.2", - "tempy": "0.3.0" + "semver": "^7.5.3", + "send": "^0.18.0", + "slugify": "^1.3.4", + "structured-headers": "^0.4.1", + "tar": "^6.0.5", + "tempy": "^0.7.1", + "terminal-link": "^2.1.1", + "text-table": "^0.2.0", + "url-join": "4.0.0", + "wrap-ansi": "^7.0.0", + "ws": "^8.12.1" + }, + "bin": { + "expo-internal": "build/bin/cli" } }, - "node_modules/@expo/image-utils/node_modules/ansi-styles": { + "node_modules/@expo/cli/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", + "peer": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -2091,11 +2681,80 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@expo/image-utils/node_modules/chalk": { + "node_modules/@expo/cli/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/@expo/cli/node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@expo/cli/node_modules/better-opn": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/better-opn/-/better-opn-3.0.2.tgz", + "integrity": "sha512-aVNobHnJqLiUelTaHat9DZ1qM2w0C0Eym4LPI/3JxOnSokGVdsl1T1kN7TFvsEAD8G47A6VKQ0TVHqbBnYMJlQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "open": "^8.0.4" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@expo/cli/node_modules/cacache": { + "version": "15.3.0", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", + "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "@npmcli/fs": "^1.0.0", + "@npmcli/move-file": "^1.0.1", + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "glob": "^7.1.4", + "infer-owner": "^1.0.4", + "lru-cache": "^6.0.0", + "minipass": "^3.1.1", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.2", + "mkdirp": "^1.0.3", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^8.0.1", + "tar": "^6.0.2", + "unique-filename": "^1.1.1" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/@expo/cli/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", + "peer": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -2107,11 +2766,13 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@expo/image-utils/node_modules/color-convert": { + "node_modules/@expo/cli/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", + "peer": true, "dependencies": { "color-name": "~1.1.4" }, @@ -2119,53 +2780,186 @@ "node": ">=7.0.0" } }, - "node_modules/@expo/image-utils/node_modules/color-name": { + "node_modules/@expo/cli/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT", + "peer": true }, - "node_modules/@expo/image-utils/node_modules/fs-extra": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.0.tgz", - "integrity": "sha512-pmEYSk3vYsG/bF651KPUXZ+hvjpgWYw/Gc7W9NFUe3ZVLczKKWIij3IKpOrQcdw4TILtibFslZ0UmR8Vvzig4g==", + "node_modules/@expo/cli/node_modules/crypto-random-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@expo/cli/node_modules/del": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/del/-/del-6.1.1.tgz", + "integrity": "sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==", "dev": true, + "license": "MIT", + "peer": true, + "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" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@expo/cli/node_modules/form-data": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.2.tgz", + "integrity": "sha512-sJe+TQb2vIaIyO783qN6BlMYWMw3WBOHA1Ay2qxsnjuafEOQFJ2JakedOQirT6D5XPRxDvS7AHYyem9fTpb4LQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@expo/cli/node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "license": "MIT", + "peer": true, "dependencies": { - "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^1.0.0" + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/@expo/cli/node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" }, "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@expo/image-utils/node_modules/has-flag": { + "node_modules/@expo/cli/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", + "peer": true, "engines": { "node": ">=8" } }, - "node_modules/@expo/image-utils/node_modules/mime": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", - "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "node_modules/@expo/cli/node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@expo/cli/node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@expo/cli/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, "bin": { - "mime": "cli.js" + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@expo/cli/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "license": "MIT", + "peer": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@expo/cli/node_modules/minipass": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.6.tgz", + "integrity": "sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ==", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "yallist": "^4.0.0" }, "engines": { - "node": ">=4.0.0" + "node": ">=8" } }, - "node_modules/@expo/image-utils/node_modules/node-fetch": { + "node_modules/@expo/cli/node_modules/node-fetch": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", "dev": true, + "license": "MIT", + "peer": true, "dependencies": { "whatwg-url": "^5.0.0" }, @@ -2181,118 +2975,2108 @@ } } }, - "node_modules/@expo/image-utils/node_modules/semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", + "node_modules/@expo/cli/node_modules/node-forge": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", "dev": true, - "bin": { - "semver": "bin/semver.js" - }, + "license": "(BSD-3-Clause OR GPL-2.0)", + "peer": true, "engines": { - "node": ">=10" + "node": ">= 6.13.0" } }, - "node_modules/@expo/image-utils/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/@expo/cli/node_modules/open": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", "dev": true, + "license": "MIT", + "peer": true, "dependencies": { - "has-flag": "^4.0.0" + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" }, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@expo/image-utils/node_modules/universalify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", - "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==", + "node_modules/@expo/cli/node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "aggregate-error": "^3.0.0" + }, "engines": { - "node": ">= 10.0.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@expo/spawn-async": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@expo/spawn-async/-/spawn-async-1.5.0.tgz", - "integrity": "sha512-LB7jWkqrHo+5fJHNrLAFdimuSXQ2MQ4lA7SQW5bf/HbsXuV2VrT/jN/M8f/KoWt0uJMGN4k/j7Opx4AvOOxSew==", + "node_modules/@expo/cli/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", "dev": true, + "license": "ISC", + "peer": true, "dependencies": { - "cross-spawn": "^6.0.5" + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@expo/cli/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "license": "ISC", + "peer": true, + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": ">=4" + "node": ">=10" } }, - "node_modules/@expo/spawn-async/node_modules/cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "node_modules/@expo/cli/node_modules/ssri": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", + "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", "dev": true, + "license": "ISC", + "peer": true, "dependencies": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" + "minipass": "^3.1.1" }, "engines": { - "node": ">=4.8" + "node": ">= 8" } }, - "node_modules/@expo/spawn-async/node_modules/path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "node_modules/@expo/cli/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/@expo/spawn-async/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "node_modules/@expo/cli/node_modules/temp-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", + "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==", "dev": true, - "bin": { - "semver": "bin/semver" + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" } }, - "node_modules/@expo/spawn-async/node_modules/shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "node_modules/@expo/cli/node_modules/tempy": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/tempy/-/tempy-0.7.1.tgz", + "integrity": "sha512-vXPxwOyaNVi9nyczO16mxmHGpl6ASC5/TVhRRHpqeYHvKQm58EaWNvZXxAhR0lYYnBOQFjXjhzeLsaXdjxLjRg==", "dev": true, + "license": "MIT", + "peer": true, "dependencies": { - "shebang-regex": "^1.0.0" + "del": "^6.0.0", + "is-stream": "^2.0.0", + "temp-dir": "^2.0.0", + "type-fest": "^0.16.0", + "unique-string": "^2.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@expo/spawn-async/node_modules/shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "node_modules/@expo/cli/node_modules/type-fest": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz", + "integrity": "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==", "dev": true, + "license": "(MIT OR CC0-1.0)", + "peer": true, "engines": { - "node": ">=0.10.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@expo/spawn-async/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "node_modules/@expo/cli/node_modules/unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", "dev": true, + "license": "MIT", + "peer": true, "dependencies": { - "isexe": "^2.0.0" + "crypto-random-string": "^2.0.0" }, - "bin": { - "which": "bin/which" + "engines": { + "node": ">=8" + } + }, + "node_modules/@expo/cli/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 4.0.0" } }, + "node_modules/@expo/cli/node_modules/url-join": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.0.tgz", + "integrity": "sha512-EGXjXJZhIHiQMK2pQukuFcL303nskqIRzWvPvV5O8miOfwoUb9G+a/Cld60kUyeaybEI94wvVClT10DtfeAExA==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/@expo/cli/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/@expo/cli/node_modules/ws": { + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", + "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/@expo/code-signing-certificates": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/@expo/code-signing-certificates/-/code-signing-certificates-0.0.5.tgz", + "integrity": "sha512-BNhXkY1bblxKZpltzAx98G2Egj9g1Q+JRcvR7E99DOj862FTCX+ZPsAUtPTr7aHxwtrL7+fL3r0JSmM9kBm+Bw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "node-forge": "^1.2.1", + "nullthrows": "^1.1.1" + } + }, + "node_modules/@expo/code-signing-certificates/node_modules/node-forge": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "dev": true, + "license": "(BSD-3-Clause OR GPL-2.0)", + "peer": true, + "engines": { + "node": ">= 6.13.0" + } + }, + "node_modules/@expo/config": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/@expo/config/-/config-8.1.2.tgz", + "integrity": "sha512-4e7hzPj50mQIlsrzOH6XZ36O094mPfPTIDIH4yv49bWNMc7GFLTofB/lcT+QyxiLaJuC0Wlk9yOLB8DIqmtwug==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/code-frame": "~7.10.4", + "@expo/config-plugins": "~7.2.0", + "@expo/config-types": "^49.0.0-alpha.1", + "@expo/json-file": "^8.2.37", + "getenv": "^1.0.0", + "glob": "7.1.6", + "require-from-string": "^2.0.2", + "resolve-from": "^5.0.0", + "semver": "7.5.3", + "slugify": "^1.3.4", + "sucrase": "^3.20.0" + } + }, + "node_modules/@expo/config-plugins": { + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/@expo/config-plugins/-/config-plugins-7.2.5.tgz", + "integrity": "sha512-w+5ccu1IxBHgyQk9CPFKLZOk8yZQEyTjbJwOzESK1eR7QwosbcsLkN1c1WWUZYiCXwORu3UTwJYll4+X2xxJhQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@expo/config-types": "^49.0.0-alpha.1", + "@expo/json-file": "~8.2.37", + "@expo/plist": "^0.0.20", + "@expo/sdk-runtime-versions": "^1.0.0", + "@react-native/normalize-color": "^2.0.0", + "chalk": "^4.1.2", + "debug": "^4.3.1", + "find-up": "~5.0.0", + "getenv": "^1.0.0", + "glob": "7.1.6", + "resolve-from": "^5.0.0", + "semver": "^7.5.3", + "slash": "^3.0.0", + "xcode": "^3.0.1", + "xml2js": "0.6.0" + } + }, + "node_modules/@expo/config-plugins/node_modules/@babel/code-frame": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/highlight": "^7.10.4" + } + }, + "node_modules/@expo/config-plugins/node_modules/@expo/json-file": { + "version": "8.2.37", + "resolved": "https://registry.npmjs.org/@expo/json-file/-/json-file-8.2.37.tgz", + "integrity": "sha512-YaH6rVg11JoTS2P6LsW7ybS2CULjf40AbnAHw2F1eDPuheprNjARZMnyHFPkKv7GuxCy+B9GPcbOKgc4cgA80Q==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/code-frame": "~7.10.4", + "json5": "^2.2.2", + "write-file-atomic": "^2.3.0" + } + }, + "node_modules/@expo/config-plugins/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@expo/config-plugins/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@expo/config-plugins/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@expo/config-plugins/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/@expo/config-plugins/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@expo/config-plugins/node_modules/glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "license": "ISC", + "peer": true, + "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" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@expo/config-plugins/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@expo/config-plugins/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@expo/config-plugins/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@expo/config-plugins/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@expo/config-plugins/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "license": "ISC", + "peer": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@expo/config-plugins/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@expo/config-types": { + "version": "49.0.0", + "resolved": "https://registry.npmjs.org/@expo/config-types/-/config-types-49.0.0.tgz", + "integrity": "sha512-8eyREVi+K2acnMBe/rTIu1dOfyR2+AMnTLHlut+YpMV9OZPdeKV0Bs9BxAewGqBA2slslbQ9N39IS2CuTKpXkA==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/@expo/config/node_modules/@babel/code-frame": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/highlight": "^7.10.4" + } + }, + "node_modules/@expo/config/node_modules/glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "license": "ISC", + "peer": true, + "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" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@expo/config/node_modules/semver": { + "version": "7.5.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", + "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@expo/dev-server": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/@expo/dev-server/-/dev-server-0.5.5.tgz", + "integrity": "sha512-t0fT8xH1exwYsH5hh7bAt85VF+gXxg24qrbny2rR/iKoPTWFCd2JNQV8pvfLg51hvrywQ3YCBuT3lU1w7aZxFA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@expo/bunyan": "4.0.0", + "@expo/metro-config": "~0.10.0", + "@expo/osascript": "2.0.33", + "@expo/spawn-async": "^1.5.0", + "body-parser": "^1.20.1", + "chalk": "^4.0.0", + "connect": "^3.7.0", + "fs-extra": "9.0.0", + "is-docker": "^2.0.0", + "is-wsl": "^2.1.1", + "node-fetch": "^2.6.0", + "open": "^8.3.0", + "resolve-from": "^5.0.0", + "serialize-error": "6.0.0", + "temp-dir": "^2.0.0" + } + }, + "node_modules/@expo/dev-server/node_modules/@expo/osascript": { + "version": "2.0.33", + "resolved": "https://registry.npmjs.org/@expo/osascript/-/osascript-2.0.33.tgz", + "integrity": "sha512-FQinlwHrTlJbntp8a7NAlCKedVXe06Va/0DSLXRO8lZVtgbEMrYYSUZWQNcOlNtc58c2elNph6z9dMOYwSo3JQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@expo/spawn-async": "^1.5.0", + "exec-async": "^2.2.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@expo/dev-server/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@expo/dev-server/node_modules/body-parser": { + "version": "1.20.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", + "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.13.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/@expo/dev-server/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@expo/dev-server/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@expo/dev-server/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/@expo/dev-server/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/@expo/dev-server/node_modules/fs-extra": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.0.tgz", + "integrity": "sha512-pmEYSk3vYsG/bF651KPUXZ+hvjpgWYw/Gc7W9NFUe3ZVLczKKWIij3IKpOrQcdw4TILtibFslZ0UmR8Vvzig4g==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^1.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@expo/dev-server/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@expo/dev-server/node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@expo/dev-server/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/@expo/dev-server/node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/@expo/dev-server/node_modules/open": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@expo/dev-server/node_modules/qs": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "dev": true, + "license": "BSD-3-Clause", + "peer": true, + "dependencies": { + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/@expo/dev-server/node_modules/raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/@expo/dev-server/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@expo/dev-server/node_modules/temp-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", + "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@expo/dev-server/node_modules/universalify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", + "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@expo/devcert": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@expo/devcert/-/devcert-1.1.4.tgz", + "integrity": "sha512-fqBODr8c72+gBSX5Ty3SIzaY4bXainlpab78+vEYEKL3fXmsOswMLf0+KE36mUEAa36BYabX7K3EiXOXX5OPMw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "application-config-path": "^0.1.0", + "command-exists": "^1.2.4", + "debug": "^3.1.0", + "eol": "^0.9.1", + "get-port": "^3.2.0", + "glob": "^10.4.2", + "lodash": "^4.17.21", + "mkdirp": "^0.5.1", + "password-prompt": "^1.0.4", + "sudo-prompt": "^8.2.0", + "tmp": "^0.0.33", + "tslib": "^2.4.0" + } + }, + "node_modules/@expo/devcert/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@expo/devcert/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/@expo/devcert/node_modules/foreground-child": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", + "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@expo/devcert/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@expo/devcert/node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dev": true, + "license": "BlueOak-1.0.0", + "peer": true, + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/@expo/devcert/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@expo/devcert/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "peer": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/@expo/devcert/node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/@expo/devcert/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", + "peer": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@expo/devcert/node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/@expo/env": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/@expo/env/-/env-0.0.5.tgz", + "integrity": "sha512-UXuKAqyXfhMQC3gP0OyjXmFX08Z1fkVWiGBN7bYzfoX8LHatjeHrDtI6w5nDvd8XPxPvmqaZoEDw1lW3+dz3oQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "chalk": "^4.0.0", + "debug": "^4.3.4", + "dotenv": "~16.0.3", + "dotenv-expand": "~10.0.0", + "getenv": "^1.0.0" + } + }, + "node_modules/@expo/env/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@expo/env/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@expo/env/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@expo/env/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/@expo/env/node_modules/dotenv": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.3.tgz", + "integrity": "sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==", + "dev": true, + "license": "BSD-2-Clause", + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@expo/env/node_modules/dotenv-expand": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-10.0.0.tgz", + "integrity": "sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A==", + "dev": true, + "license": "BSD-2-Clause", + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@expo/env/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@expo/env/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@expo/image-utils": { + "version": "0.3.23", + "resolved": "https://registry.npmjs.org/@expo/image-utils/-/image-utils-0.3.23.tgz", + "integrity": "sha512-nhUVvW0TrRE4jtWzHQl8TR4ox7kcmrc2I0itaeJGjxF5A54uk7avgA0wRt7jP1rdvqQo1Ke1lXyLYREdhN9tPw==", + "dev": true, + "dependencies": { + "@expo/spawn-async": "1.5.0", + "chalk": "^4.0.0", + "fs-extra": "9.0.0", + "getenv": "^1.0.0", + "jimp-compact": "0.16.1", + "mime": "^2.4.4", + "node-fetch": "^2.6.0", + "parse-png": "^2.1.0", + "resolve-from": "^5.0.0", + "semver": "7.3.2", + "tempy": "0.3.0" + } + }, + "node_modules/@expo/image-utils/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@expo/image-utils/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@expo/image-utils/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@expo/image-utils/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@expo/image-utils/node_modules/fs-extra": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.0.tgz", + "integrity": "sha512-pmEYSk3vYsG/bF651KPUXZ+hvjpgWYw/Gc7W9NFUe3ZVLczKKWIij3IKpOrQcdw4TILtibFslZ0UmR8Vvzig4g==", + "dev": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^1.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@expo/image-utils/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@expo/image-utils/node_modules/mime": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/@expo/image-utils/node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "dev": true, + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/@expo/image-utils/node_modules/semver": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@expo/image-utils/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@expo/image-utils/node_modules/universalify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", + "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@expo/json-file": { + "version": "8.3.3", + "resolved": "https://registry.npmjs.org/@expo/json-file/-/json-file-8.3.3.tgz", + "integrity": "sha512-eZ5dld9AD0PrVRiIWpRkm5aIoWBw3kAyd8VkuWEy92sEthBKDDDHAnK2a0dw0Eil6j7rK7lS/Qaq/Zzngv2h5A==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/code-frame": "~7.10.4", + "json5": "^2.2.2", + "write-file-atomic": "^2.3.0" + } + }, + "node_modules/@expo/json-file/node_modules/@babel/code-frame": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/highlight": "^7.10.4" + } + }, + "node_modules/@expo/metro-config": { + "version": "0.10.7", + "resolved": "https://registry.npmjs.org/@expo/metro-config/-/metro-config-0.10.7.tgz", + "integrity": "sha512-uACymEiyX0447hI4unt+2cemLQkTZXKvTev936NhtsgVnql45EP0V0pzmo/0H0WlHaAGXgvOBZJl8wFqcJ3CbQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@expo/config": "~8.1.0", + "@expo/env": "0.0.5", + "@expo/json-file": "~8.2.37", + "chalk": "^4.1.0", + "debug": "^4.3.2", + "find-yarn-workspace-root": "~2.0.0", + "getenv": "^1.0.0", + "jsc-safe-url": "^0.2.4", + "lightningcss": "~1.19.0", + "postcss": "~8.4.21", + "resolve-from": "^5.0.0", + "sucrase": "^3.20.0" + } + }, + "node_modules/@expo/metro-config/node_modules/@babel/code-frame": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/highlight": "^7.10.4" + } + }, + "node_modules/@expo/metro-config/node_modules/@expo/json-file": { + "version": "8.2.37", + "resolved": "https://registry.npmjs.org/@expo/json-file/-/json-file-8.2.37.tgz", + "integrity": "sha512-YaH6rVg11JoTS2P6LsW7ybS2CULjf40AbnAHw2F1eDPuheprNjARZMnyHFPkKv7GuxCy+B9GPcbOKgc4cgA80Q==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/code-frame": "~7.10.4", + "json5": "^2.2.2", + "write-file-atomic": "^2.3.0" + } + }, + "node_modules/@expo/metro-config/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@expo/metro-config/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@expo/metro-config/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@expo/metro-config/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/@expo/metro-config/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@expo/metro-config/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@expo/osascript": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@expo/osascript/-/osascript-2.1.3.tgz", + "integrity": "sha512-aOEkhPzDsaAfolSswObGiYW0Pf0ROfR9J2NBRLQACdQ6uJlyAMiPF45DVEVknAU9juKh0y8ZyvC9LXqLEJYohA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@expo/spawn-async": "^1.7.2", + "exec-async": "^2.2.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@expo/osascript/node_modules/@expo/spawn-async": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/@expo/spawn-async/-/spawn-async-1.7.2.tgz", + "integrity": "sha512-QdWi16+CHB9JYP7gma19OVVg0BFkvU8zNj9GjWorYI8Iv8FUxjOCcYRuAmX4s/h91e4e7BPsskc8cSrZYho9Ew==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "cross-spawn": "^7.0.3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@expo/package-manager": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@expo/package-manager/-/package-manager-1.1.2.tgz", + "integrity": "sha512-JI9XzrxB0QVXysyuJ996FPCJGDCYRkbUvgG4QmMTTMFA1T+mv8YzazC3T9C1pHQUAAveVCre1+Pqv0nZXN24Xg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@expo/json-file": "^8.2.37", + "@expo/spawn-async": "^1.5.0", + "ansi-regex": "^5.0.0", + "chalk": "^4.0.0", + "find-up": "^5.0.0", + "find-yarn-workspace-root": "~2.0.0", + "js-yaml": "^3.13.1", + "micromatch": "^4.0.2", + "npm-package-arg": "^7.0.0", + "split": "^1.0.1", + "sudo-prompt": "9.1.1" + } + }, + "node_modules/@expo/package-manager/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@expo/package-manager/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/@expo/package-manager/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@expo/package-manager/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@expo/package-manager/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/@expo/package-manager/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@expo/package-manager/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@expo/package-manager/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@expo/package-manager/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@expo/package-manager/node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/@expo/package-manager/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@expo/package-manager/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@expo/package-manager/node_modules/sudo-prompt": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/sudo-prompt/-/sudo-prompt-9.1.1.tgz", + "integrity": "sha512-es33J1g2HjMpyAhz8lOR+ICmXXAqTuKbuXuUWLhOLew20oN9oUCgCJx615U/v7aioZg7IX5lIh9x34vwneu4pA==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/@expo/package-manager/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@expo/plist": { + "version": "0.0.20", + "resolved": "https://registry.npmjs.org/@expo/plist/-/plist-0.0.20.tgz", + "integrity": "sha512-UXQ4LXCfTZ580LDHGJ5q62jSTwJFFJ1GqBu8duQMThiHKWbMJ+gajJh6rsB6EJ3aLUr9wcauxneL5LVRFxwBEA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@xmldom/xmldom": "~0.7.7", + "base64-js": "^1.2.3", + "xmlbuilder": "^14.0.0" + } + }, + "node_modules/@expo/prebuild-config": { + "version": "6.2.6", + "resolved": "https://registry.npmjs.org/@expo/prebuild-config/-/prebuild-config-6.2.6.tgz", + "integrity": "sha512-uFVvDAm9dPg9p1qpnr4CVnpo2hmkZIL5FQz+VlIdXXJpe7ySh/qTGHtKWY/lWUshQkAJ0nwbKGPztGWdABns/Q==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@expo/config": "~8.1.0", + "@expo/config-plugins": "~7.2.0", + "@expo/config-types": "^49.0.0-alpha.1", + "@expo/image-utils": "0.3.22", + "@expo/json-file": "^8.2.37", + "debug": "^4.3.1", + "fs-extra": "^9.0.0", + "resolve-from": "^5.0.0", + "semver": "7.5.3", + "xml2js": "0.6.0" + }, + "peerDependencies": { + "expo-modules-autolinking": ">=0.8.1" + } + }, + "node_modules/@expo/prebuild-config/node_modules/@expo/image-utils": { + "version": "0.3.22", + "resolved": "https://registry.npmjs.org/@expo/image-utils/-/image-utils-0.3.22.tgz", + "integrity": "sha512-uzq+RERAtkWypOFOLssFnXXqEqKjNj9eXN7e97d/EXUAojNcLDoXc0sL+F5B1I4qtlsnhX01kcpoIBBZD8wZNQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@expo/spawn-async": "1.5.0", + "chalk": "^4.0.0", + "fs-extra": "9.0.0", + "getenv": "^1.0.0", + "jimp-compact": "0.16.1", + "mime": "^2.4.4", + "node-fetch": "^2.6.0", + "parse-png": "^2.1.0", + "resolve-from": "^5.0.0", + "semver": "7.3.2", + "tempy": "0.3.0" + } + }, + "node_modules/@expo/prebuild-config/node_modules/@expo/image-utils/node_modules/semver": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", + "dev": true, + "license": "ISC", + "peer": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@expo/prebuild-config/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@expo/prebuild-config/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@expo/prebuild-config/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@expo/prebuild-config/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/@expo/prebuild-config/node_modules/fs-extra": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.0.tgz", + "integrity": "sha512-pmEYSk3vYsG/bF651KPUXZ+hvjpgWYw/Gc7W9NFUe3ZVLczKKWIij3IKpOrQcdw4TILtibFslZ0UmR8Vvzig4g==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^1.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@expo/prebuild-config/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@expo/prebuild-config/node_modules/mime": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "dev": true, + "license": "MIT", + "peer": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/@expo/prebuild-config/node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/@expo/prebuild-config/node_modules/semver": { + "version": "7.5.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", + "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@expo/prebuild-config/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@expo/prebuild-config/node_modules/universalify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", + "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@expo/rudder-sdk-node": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@expo/rudder-sdk-node/-/rudder-sdk-node-1.1.1.tgz", + "integrity": "sha512-uy/hS/awclDJ1S88w9UGpc6Nm9XnNUjzOAAib1A3PVAnGQIwebg8DpFqOthFBTlZxeuV/BKbZ5jmTbtNZkp1WQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@expo/bunyan": "^4.0.0", + "@segment/loosely-validate-event": "^2.0.0", + "fetch-retry": "^4.1.1", + "md5": "^2.2.1", + "node-fetch": "^2.6.1", + "remove-trailing-slash": "^0.1.0", + "uuid": "^8.3.2" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@expo/rudder-sdk-node/node_modules/fetch-retry": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/fetch-retry/-/fetch-retry-4.1.1.tgz", + "integrity": "sha512-e6eB7zN6UBSwGVwrbWVH+gdLnkW9WwHhmq2YDK1Sh30pzx1onRVGBvogTlUeWxwTa+L86NYdo4hFkh7O8ZjSnA==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/@expo/rudder-sdk-node/node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/@expo/rudder-sdk-node/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, + "license": "MIT", + "peer": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/@expo/sdk-runtime-versions": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@expo/sdk-runtime-versions/-/sdk-runtime-versions-1.0.0.tgz", + "integrity": "sha512-Doz2bfiPndXYFPMRwPyGa1k5QaKDVpY806UJj570epIiMzWaYyCtobasyfC++qfIXVb5Ocy7r3tP9d62hAQ7IQ==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/@expo/spawn-async": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@expo/spawn-async/-/spawn-async-1.5.0.tgz", + "integrity": "sha512-LB7jWkqrHo+5fJHNrLAFdimuSXQ2MQ4lA7SQW5bf/HbsXuV2VrT/jN/M8f/KoWt0uJMGN4k/j7Opx4AvOOxSew==", + "dev": true, + "dependencies": { + "cross-spawn": "^6.0.5" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@expo/spawn-async/node_modules/cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" + } + }, + "node_modules/@expo/spawn-async/node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@expo/spawn-async/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/@expo/spawn-async/node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "dev": true, + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@expo/spawn-async/node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@expo/spawn-async/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/@expo/vector-icons": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/@expo/vector-icons/-/vector-icons-13.0.0.tgz", + "integrity": "sha512-TI+l71+5aSKnShYclFa14Kum+hQMZ86b95SH6tQUG3qZEmLTarvWpKwqtTwQKqvlJSJrpFiSFu3eCuZokY6zWA==", + "dev": true, + "license": "MIT", + "peer": true + }, "node_modules/@expo/webpack-config": { "version": "18.1.3", "resolved": "https://registry.npmjs.org/@expo/webpack-config/-/webpack-config-18.1.3.tgz", @@ -3159,6 +5943,185 @@ } } }, + "node_modules/@expo/xcpretty": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@expo/xcpretty/-/xcpretty-4.3.1.tgz", + "integrity": "sha512-sqXgo1SCv+j4VtYEwl/bukuOIBrVgx6euIoCat3Iyx5oeoXwEA2USCoeL0IPubflMxncA2INkqJ/Wr3NGrSgzw==", + "dev": true, + "license": "BSD-3-Clause", + "peer": true, + "dependencies": { + "@babel/code-frame": "7.10.4", + "chalk": "^4.1.0", + "find-up": "^5.0.0", + "js-yaml": "^4.1.0" + }, + "bin": { + "excpretty": "build/cli.js" + } + }, + "node_modules/@expo/xcpretty/node_modules/@babel/code-frame": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/highlight": "^7.10.4" + } + }, + "node_modules/@expo/xcpretty/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@expo/xcpretty/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@expo/xcpretty/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@expo/xcpretty/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/@expo/xcpretty/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@expo/xcpretty/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@expo/xcpretty/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@expo/xcpretty/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@expo/xcpretty/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@expo/xcpretty/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/@floating-ui/core": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.5.0.tgz", @@ -3202,9 +6165,20 @@ "dev": true, "license": "MIT" }, + "node_modules/@graphql-typed-document-node/core": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@graphql-typed-document-node/core/-/core-3.2.0.tgz", + "integrity": "sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==", + "dev": true, + "license": "MIT", + "peer": true, + "peerDependencies": { + "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, "node_modules/@humanwhocodes/config-array": { "version": "0.5.0", - "dev": true, + "devOptional": true, "license": "Apache-2.0", "dependencies": { "@humanwhocodes/object-schema": "^1.2.0", @@ -3217,7 +6191,7 @@ }, "node_modules/@humanwhocodes/object-schema": { "version": "1.2.1", - "dev": true, + "devOptional": true, "license": "BSD-3-Clause" }, "node_modules/@isaacs/cliui": { @@ -3510,39 +6484,339 @@ "peerDependencies": { "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/core/node_modules/@jest/types": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/core/node_modules/@types/yargs": { + "version": "16.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@jest/core/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/core/node_modules/chalk": { + "version": "4.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/core/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/core/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/@jest/core/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/core/node_modules/micromatch": { + "version": "4.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/@jest/core/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@jest/core/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/environment": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/environment/node_modules/@jest/types": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/environment/node_modules/@types/yargs": { + "version": "16.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@jest/environment/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/environment/node_modules/chalk": { + "version": "4.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/environment/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/environment/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/@jest/environment/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/environment/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "expect": "^29.7.0", + "jest-snapshot": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", + "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "jest-get-type": "^29.6.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect-utils/node_modules/jest-get-type": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect/node_modules/@jest/transform": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", + "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.2" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@jest/core/node_modules/@jest/types": { - "version": "27.5.1", + "node_modules/@jest/expect/node_modules/@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { + "@jest/schemas": "^29.6.3", "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", - "@types/yargs": "^16.0.0", + "@types/yargs": "^17.0.8", "chalk": "^4.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@jest/core/node_modules/@types/yargs": { - "version": "16.0.4", + "node_modules/@jest/expect/node_modules/@types/yargs": { + "version": "17.0.33", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", + "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "@types/yargs-parser": "*" } }, - "node_modules/@jest/core/node_modules/ansi-styles": { + "node_modules/@jest/expect/node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -3553,10 +6827,14 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@jest/core/node_modules/chalk": { + "node_modules/@jest/expect/node_modules/chalk": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -3568,10 +6846,14 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@jest/core/node_modules/color-convert": { + "node_modules/@jest/expect/node_modules/color-convert": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "color-name": "~1.1.4" }, @@ -3579,151 +6861,348 @@ "node": ">=7.0.0" } }, - "node_modules/@jest/core/node_modules/color-name": { + "node_modules/@jest/expect/node_modules/color-name": { "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true, - "license": "MIT" + "license": "MIT", + "optional": true, + "peer": true }, - "node_modules/@jest/core/node_modules/has-flag": { + "node_modules/@jest/expect/node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/@jest/expect/node_modules/diff-sequences": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect/node_modules/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@jest/expect-utils": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect/node_modules/has-flag": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "engines": { "node": ">=8" } }, - "node_modules/@jest/core/node_modules/micromatch": { - "version": "4.0.5", + "node_modules/@jest/expect/node_modules/jest-diff": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", + "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" + "chalk": "^4.0.0", + "diff-sequences": "^29.6.3", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" }, "engines": { - "node": ">=8.6" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@jest/core/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "node_modules/@jest/expect/node_modules/jest-get-type": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect/node_modules/jest-haste-map": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", + "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", "dev": true, + "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "glob": "^7.1.3" + "@jest/types": "^29.6.3", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "micromatch": "^4.0.4", + "walker": "^1.0.8" }, - "bin": { - "rimraf": "bin.js" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "optionalDependencies": { + "fsevents": "^2.3.2" } }, - "node_modules/@jest/core/node_modules/supports-color": { - "version": "7.2.0", + "node_modules/@jest/expect/node_modules/jest-matcher-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", + "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "has-flag": "^4.0.0" + "chalk": "^4.0.0", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" }, "engines": { - "node": ">=8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@jest/environment": { - "version": "27.5.1", + "node_modules/@jest/expect/node_modules/jest-message-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", + "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "@jest/fake-timers": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "jest-mock": "^27.5.1" + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.6.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@jest/environment/node_modules/@jest/types": { - "version": "27.5.1", + "node_modules/@jest/expect/node_modules/jest-regex-util": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", + "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect/node_modules/jest-snapshot": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", + "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" + "@babel/core": "^7.11.6", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-jsx": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/types": "^7.3.3", + "@jest/expect-utils": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "natural-compare": "^1.4.0", + "pretty-format": "^29.7.0", + "semver": "^7.5.3" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@jest/environment/node_modules/@types/yargs": { - "version": "16.0.4", + "node_modules/@jest/expect/node_modules/jest-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "@types/yargs-parser": "*" + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@jest/environment/node_modules/ansi-styles": { - "version": "4.3.0", + "node_modules/@jest/expect/node_modules/jest-worker": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", + "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "color-convert": "^2.0.1" + "@types/node": "*", + "jest-util": "^29.7.0", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@jest/environment/node_modules/chalk": { - "version": "4.1.2", + "node_modules/@jest/expect/node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "has-flag": "^4.0.0" }, "engines": { "node": ">=10" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/@jest/environment/node_modules/color-convert": { - "version": "2.0.1", + "node_modules/@jest/expect/node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "color-name": "~1.1.4" + "braces": "^3.0.3", + "picomatch": "^2.3.1" }, "engines": { - "node": ">=7.0.0" + "node": ">=8.6" } }, - "node_modules/@jest/environment/node_modules/color-name": { - "version": "1.1.4", + "node_modules/@jest/expect/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", "dev": true, - "license": "MIT" + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } }, - "node_modules/@jest/environment/node_modules/has-flag": { - "version": "4.0.0", + "node_modules/@jest/expect/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@jest/environment/node_modules/supports-color": { + "node_modules/@jest/expect/node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/@jest/expect/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "license": "ISC", + "optional": true, + "peer": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@jest/expect/node_modules/supports-color": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -3731,6 +7210,22 @@ "node": ">=8" } }, + "node_modules/@jest/expect/node_modules/write-file-atomic": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "dev": true, + "license": "ISC", + "optional": true, + "peer": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, "node_modules/@jest/fake-timers": { "version": "27.5.1", "dev": true, @@ -3835,45 +7330,125 @@ } }, "node_modules/@jest/globals": { - "version": "27.5.1", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", + "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/types": "^27.5.1", - "expect": "^27.5.1" + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/types": "^29.6.3", + "jest-mock": "^29.7.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/globals/node_modules/@jest/environment": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", + "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/globals/node_modules/@jest/fake-timers": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", + "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@sinonjs/fake-timers": "^10.0.2", + "@types/node": "*", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/globals/node_modules/@jest/types": { - "version": "27.5.1", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { + "@jest/schemas": "^29.6.3", "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", - "@types/yargs": "^16.0.0", + "@types/yargs": "^17.0.8", "chalk": "^4.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/globals/node_modules/@sinonjs/commons": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", + "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", + "dev": true, + "license": "BSD-3-Clause", + "optional": true, + "peer": true, + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/@jest/globals/node_modules/@sinonjs/fake-timers": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", + "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", + "dev": true, + "license": "BSD-3-Clause", + "optional": true, + "peer": true, + "dependencies": { + "@sinonjs/commons": "^3.0.0" } }, "node_modules/@jest/globals/node_modules/@types/yargs": { - "version": "16.0.4", + "version": "17.0.33", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", + "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "@types/yargs-parser": "*" } }, "node_modules/@jest/globals/node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -3886,8 +7461,12 @@ }, "node_modules/@jest/globals/node_modules/chalk": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -3901,8 +7480,12 @@ }, "node_modules/@jest/globals/node_modules/color-convert": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "color-name": "~1.1.4" }, @@ -3912,21 +7495,150 @@ }, "node_modules/@jest/globals/node_modules/color-name": { "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true, - "license": "MIT" + "license": "MIT", + "optional": true, + "peer": true }, "node_modules/@jest/globals/node_modules/has-flag": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "engines": { "node": ">=8" } }, + "node_modules/@jest/globals/node_modules/jest-message-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", + "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.6.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/globals/node_modules/jest-mock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", + "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/globals/node_modules/jest-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/globals/node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/@jest/globals/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/globals/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/globals/node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true + }, "node_modules/@jest/globals/node_modules/supports-color": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -4458,7 +8170,9 @@ } }, "node_modules/@jridgewell/set-array": { - "version": "1.1.2", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", "license": "MIT", "engines": { "node": ">=6.0.0" @@ -4490,9 +8204,10 @@ "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.20", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", - "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" @@ -5801,6 +9516,55 @@ "@babel/runtime": "^7.13.10" } }, + "node_modules/@react-native/normalize-color": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@react-native/normalize-color/-/normalize-color-2.1.0.tgz", + "integrity": "sha512-Z1jQI2NpdFJCVgpY+8Dq/Bt3d+YUi1928Q+/CZm/oh66fzM0RUl54vvuXlPJKybH4pdCZey1eDTPaLHkMPNgWA==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/@reduxjs/toolkit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-2.3.0.tgz", + "integrity": "sha512-WC7Yd6cNGfHx8zf+iu+Q1UPTfEcXhQ+ATi7CV1hlrSAaQBdlPzg7Ww/wJHNQem7qG9rxmWoFCDCPubSvFObGzA==", + "license": "MIT", + "dependencies": { + "immer": "^10.0.3", + "redux": "^5.0.1", + "redux-thunk": "^3.1.0", + "reselect": "^5.1.0" + }, + "peerDependencies": { + "react": "^16.9.0 || ^17.0.0 || ^18", + "react-redux": "^7.2.1 || ^8.1.3 || ^9.0.0" + }, + "peerDependenciesMeta": { + "react": { + "optional": true + }, + "react-redux": { + "optional": true + } + } + }, + "node_modules/@reduxjs/toolkit/node_modules/reselect": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/reselect/-/reselect-5.1.1.tgz", + "integrity": "sha512-K/BG6eIky/SBpzfHZv/dd+9JBFiS4SWV7FIujVyJRux6e45+73RaUHXLmIR1f7WOMaQ0U1km6qwklRQxpJJY0w==", + "license": "MIT" + }, + "node_modules/@segment/loosely-validate-event": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@segment/loosely-validate-event/-/loosely-validate-event-2.0.0.tgz", + "integrity": "sha512-ZMCSfztDBqwotkl848ODgVcAmN4OItEWDCkshcKz0/W6gGSQayuuCtWV/MlodFivAZD793d6UgANd6wCXUfrIw==", + "dev": true, + "peer": true, + "dependencies": { + "component-type": "^1.2.1", + "join-component": "^1.1.0" + } + }, "node_modules/@sinclair/typebox": { "version": "0.27.8", "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", @@ -5963,18 +9727,6 @@ "memoizerific": "^1.11.3" } }, - "node_modules/@storybook/addon-actions/node_modules/type-fest": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", - "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", - "dev": true, - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/@storybook/addon-actions/node_modules/uuid": { "version": "9.0.1", "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", @@ -6314,17 +10066,6 @@ "dev": true, "license": "MIT" }, - "node_modules/@storybook/builder-webpack4/node_modules/acorn": { - "version": "8.8.0", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/@storybook/builder-webpack4/node_modules/ansi-regex": { "version": "2.1.1", "dev": true, @@ -7803,6 +11544,18 @@ "version": "16.11.47", "license": "MIT" }, + "node_modules/@storybook/core-common/node_modules/acorn": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", + "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/@storybook/core-common/node_modules/ansi-styles": { "version": "4.3.0", "license": "MIT", @@ -8307,6 +12060,19 @@ "dev": true, "license": "MIT" }, + "node_modules/@storybook/core-server/node_modules/acorn": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", + "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/@storybook/core-server/node_modules/ansi-styles": { "version": "4.3.0", "dev": true, @@ -8931,18 +12697,6 @@ "memoizerific": "^1.11.3" } }, - "node_modules/@storybook/manager-api/node_modules/type-fest": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", - "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", - "dev": true, - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/@storybook/manager-webpack4": { "version": "6.5.10", "dev": true, @@ -9008,17 +12762,6 @@ "dev": true, "license": "MIT" }, - "node_modules/@storybook/manager-webpack4/node_modules/acorn": { - "version": "8.8.0", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/@storybook/manager-webpack4/node_modules/ansi-regex": { "version": "2.1.1", "dev": true, @@ -10239,18 +13982,6 @@ "memoizerific": "^1.11.3" } }, - "node_modules/@storybook/preview-api/node_modules/type-fest": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", - "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", - "dev": true, - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/@storybook/preview-web": { "version": "6.5.10", "license": "MIT", @@ -11343,7 +15074,7 @@ "version": "1.19.4", "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.4.tgz", "integrity": "sha512-N7UDG0/xiPQa2D/XrVJXjkWbpqHCd2sBaB32ggRF2l83RhPfamgKGF8gwwqyksS95qUS5ZYF9aF+lLPRlwI2UA==", - "dev": true, + "devOptional": true, "dependencies": { "@types/connect": "*", "@types/node": "*" @@ -11384,7 +15115,7 @@ "version": "3.4.37", "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.37.tgz", "integrity": "sha512-zBUSRqkfZ59OcwXon4HVxhx5oWCJmc0OtBTK05M+p0dYjgN6iTwIL2T/WbsQZrEsdnwaF9cWQ+azOnpPvIqY3Q==", - "dev": true, + "devOptional": true, "dependencies": { "@types/node": "*" } @@ -11505,7 +15236,7 @@ "version": "4.17.20", "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.20.tgz", "integrity": "sha512-rOaqlkgEvOW495xErXMsmyX3WKBInbhG5eqojXYi3cGUaLoRDlXa5d52fkfWZT963AZ3v2eZ4MbKE6WpDAGVsw==", - "dev": true, + "devOptional": true, "dependencies": { "@types/body-parser": "*", "@types/express-serve-static-core": "^4.17.33", @@ -11517,7 +15248,7 @@ "version": "4.17.39", "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.39.tgz", "integrity": "sha512-BiEUfAiGCOllomsRAZOiMFP7LAnrifHpt56pc4Z7l9K6ACyN06Ns1JLMBxwkfLOjJRlSf06NwWsT7yzfpaVpyQ==", - "dev": true, + "devOptional": true, "dependencies": { "@types/node": "*", "@types/qs": "*", @@ -11578,7 +15309,7 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.3.tgz", "integrity": "sha512-pP0P/9BnCj1OVvQR2lF41EkDG/lWWnDyA203b/4Fmi2eTyORnBtcDoKDwjWQthELrBvWkMOrvSOnZ8OVlW6tXA==", - "dev": true + "devOptional": true }, "node_modules/@types/http-proxy": { "version": "1.17.13", @@ -11666,7 +15397,7 @@ "version": "1.3.4", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.4.tgz", "integrity": "sha512-1Gjee59G25MrQGk8bsNvC6fxNiRgUlGn2wlhGf95a59DrprnnHk80FIMMFG9XHMdrfsuA119ht06QPDXA1Z7tw==", - "dev": true + "devOptional": true }, "node_modules/@types/minimatch": { "version": "3.0.5", @@ -11758,14 +15489,16 @@ "version": "1.2.6", "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.6.tgz", "integrity": "sha512-+0autS93xyXizIYiyL02FCY8N+KkKPhILhcUSA276HxzreZ16kl+cmwvV2qAM/PuCCwPXzOXOWhiPcw20uSFcA==", - "dev": true + "devOptional": true }, "node_modules/@types/react": { - "version": "18.0.17", + "version": "17.0.83", + "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.83.tgz", + "integrity": "sha512-l0m4ArKJvmFtR4e8UmKrj1pB4tUgOhJITf+mADyF/p69Ts1YAR/E+G9XEM0mHXKVRa1dQNHseyyDNzeuAXfXQw==", "license": "MIT", "dependencies": { "@types/prop-types": "*", - "@types/scheduler": "*", + "@types/scheduler": "^0.16", "csstype": "^3.0.2" } }, @@ -11845,7 +15578,7 @@ "version": "0.17.3", "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.3.tgz", "integrity": "sha512-/7fKxvKUoETxjFUsuFlPB9YndePpxxRAOfGC/yJdc9kTjTeP5kRCTzfnE8kPUKCeyiyIZu0YQ76s50hCedI1ug==", - "dev": true, + "devOptional": true, "dependencies": { "@types/mime": "^1", "@types/node": "*" @@ -11864,7 +15597,7 @@ "version": "1.15.4", "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.4.tgz", "integrity": "sha512-aqqNfs1XTF0HDrFdlY//+SGUxmdSUbjeRXb5iaZc3x0/vMbYmdw9qvOgHWOyyLFxSSRnUuP5+724zBgfw8/WAw==", - "dev": true, + "devOptional": true, "dependencies": { "@types/http-errors": "*", "@types/mime": "*", @@ -11930,6 +15663,12 @@ "version": "2.0.6", "license": "MIT" }, + "node_modules/@types/use-sync-external-store": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/@types/use-sync-external-store/-/use-sync-external-store-0.0.3.tgz", + "integrity": "sha512-EwmlvuaxPNej9+T4v5AuBPJa2x2UOJVdjCtDHgcDqitUeOtjnJKJ+apYjVcAoBEMjKW1VVFGZLUb5+qqa09XFA==", + "license": "MIT" + }, "node_modules/@types/victory": { "version": "35.0.0", "resolved": "https://registry.npmjs.org/@types/victory/-/victory-35.0.0.tgz", @@ -12212,6 +15951,36 @@ "url": "https://opencollective.com/typescript-eslint" } }, + "node_modules/@urql/core": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/@urql/core/-/core-2.3.6.tgz", + "integrity": "sha512-PUxhtBh7/8167HJK6WqBv6Z0piuiaZHQGYbhwpNL9aIQmLROPEdaUYkY4wh45wPQXcTpnd11l0q3Pw+TI11pdw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@graphql-typed-document-node/core": "^3.1.0", + "wonka": "^4.0.14" + }, + "peerDependencies": { + "graphql": "^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" + } + }, + "node_modules/@urql/exchange-retry": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@urql/exchange-retry/-/exchange-retry-0.3.0.tgz", + "integrity": "sha512-hHqer2mcdVC0eYnVNbWyi28AlGOPb2vjH3lP3/Bc8Lc8BjhMsDwFMm7WhoP5C1+cfbr/QJ6Er3H/L08wznXxfg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@urql/core": ">=2.3.1", + "wonka": "^4.0.14" + }, + "peerDependencies": { + "graphql": "^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0" + } + }, "node_modules/@webassemblyjs/ast": { "version": "1.9.0", "license": "MIT", @@ -12498,6 +16267,18 @@ "react": "^17.0.0-0" } }, + "node_modules/@xmldom/xmldom": { + "version": "0.7.13", + "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.7.13.tgz", + "integrity": "sha512-lm2GW5PkosIzccsaZIz7tp8cPADSIlIHWDFTR1N0SzfinhhYgeIQjFMz4rYzanCScr3DqQLeomUDArp6MWKm+g==", + "deprecated": "this version is no longer supported, please update to at least 0.8.*", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=10.0.0" + } + }, "node_modules/@xtuc/ieee754": { "version": "1.2.0", "license": "BSD-3-Clause" @@ -12523,7 +16304,9 @@ } }, "node_modules/acorn": { - "version": "6.4.2", + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", + "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", "license": "MIT", "bin": { "acorn": "bin/acorn" @@ -12561,7 +16344,7 @@ }, "node_modules/acorn-jsx": { "version": "5.3.2", - "dev": true, + "devOptional": true, "license": "MIT", "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" @@ -12803,6 +16586,14 @@ "node": ">=8.0.0" } }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "dev": true, + "license": "MIT", + "peer": true + }, "node_modules/anymatch": { "version": "3.1.2", "license": "ISC", @@ -12818,6 +16609,14 @@ "version": "1.0.2", "license": "MIT" }, + "node_modules/application-config-path": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/application-config-path/-/application-config-path-0.1.1.tgz", + "integrity": "sha512-zy9cHePtMP0YhwG+CfHm0bgwdnga2X3gZexpdCwEj//dpb+TKajtiC8REEUJUSq6Ab4f9cgNy2l8ObXzCXFkEw==", + "dev": true, + "license": "MIT", + "peer": true + }, "node_modules/aproba": { "version": "2.0.0", "license": "ISC" @@ -12833,6 +16632,14 @@ "node": ">=10" } }, + "node_modules/arg": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.0.tgz", + "integrity": "sha512-ZWc51jO3qegGkVh8Hwpv636EkbesNV5ZNQPCtRa+0qytRYPEs9IYT9qITY9buezqUH5uqyzlWLcufrzU2rffdg==", + "dev": true, + "license": "MIT", + "peer": true + }, "node_modules/argparse": { "version": "2.0.1", "license": "Python-2.0" @@ -12880,13 +16687,17 @@ } }, "node_modules/array-buffer-byte-length": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", - "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", + "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "is-array-buffer": "^3.0.1" + "call-bind": "^1.0.5", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -13067,17 +16878,19 @@ } }, "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz", - "integrity": "sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", + "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", "dev": true, + "license": "MIT", "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", - "is-array-buffer": "^3.0.2", + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.2.1", + "get-intrinsic": "^1.2.3", + "is-array-buffer": "^3.0.4", "is-shared-array-buffer": "^1.0.2" }, "engines": { @@ -13167,7 +16980,7 @@ }, "node_modules/astral-regex": { "version": "2.0.0", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=8" @@ -13267,10 +17080,14 @@ } }, "node_modules/available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", "dev": true, + "license": "MIT", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, "engines": { "node": ">= 0.4" }, @@ -13914,13 +17731,6 @@ "babel-runtime": "^6.22.0" } }, - "node_modules/babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "license": "MIT", - "dependencies": { - "object.assign": "^4.1.0" - } - }, "node_modules/babel-plugin-emotion": { "version": "10.2.2", "dev": true, @@ -14030,20 +17840,96 @@ "npm": ">=6" } }, + "node_modules/babel-plugin-module-resolver": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/babel-plugin-module-resolver/-/babel-plugin-module-resolver-5.0.2.tgz", + "integrity": "sha512-9KtaCazHee2xc0ibfqsDeamwDps6FZNo5S0Q81dUqEuFzVwPhcT4J5jOqIVvgCA3Q/wO9hKYxN/Ds3tIsp5ygg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "find-babel-config": "^2.1.1", + "glob": "^9.3.3", + "pkg-up": "^3.1.0", + "reselect": "^4.1.7", + "resolve": "^1.22.8" + } + }, + "node_modules/babel-plugin-module-resolver/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/babel-plugin-module-resolver/node_modules/glob": { + "version": "9.3.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-9.3.5.tgz", + "integrity": "sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "minimatch": "^8.0.2", + "minipass": "^4.2.4", + "path-scurry": "^1.6.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/babel-plugin-module-resolver/node_modules/minimatch": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-8.0.4.tgz", + "integrity": "sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/babel-plugin-module-resolver/node_modules/minipass": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.8.tgz", + "integrity": "sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==", + "dev": true, + "license": "ISC", + "peer": true, + "engines": { + "node": ">=8" + } + }, "node_modules/babel-plugin-named-exports-order": { "version": "0.0.2", "license": "MIT" }, "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.3.2", + "version": "0.4.11", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.11.tgz", + "integrity": "sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q==", "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.17.7", - "@babel/helper-define-polyfill-provider": "^0.3.2", - "semver": "^6.1.1" + "@babel/compat-data": "^7.22.6", + "@babel/helper-define-polyfill-provider": "^0.6.2", + "semver": "^6.3.1" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "node_modules/babel-plugin-polyfill-corejs3": { @@ -14075,13 +17961,15 @@ } }, "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.4.0", + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.2.tgz", + "integrity": "sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg==", "license": "MIT", "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.3.2" + "@babel/helper-define-polyfill-provider": "^0.6.2" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "node_modules/babel-plugin-react-docgen": { @@ -14094,6 +17982,14 @@ "react-docgen": "^5.0.0" } }, + "node_modules/babel-plugin-react-native-web": { + "version": "0.18.12", + "resolved": "https://registry.npmjs.org/babel-plugin-react-native-web/-/babel-plugin-react-native-web-0.18.12.tgz", + "integrity": "sha512-4djr9G6fMdwQoD6LQ7hOKAm39+y12flWgovAqS1k5O8f42YQ3A1FFMyV5kKfetZuGhZO5BmNmOdRRZQ1TixtDw==", + "dev": true, + "license": "MIT", + "peer": true + }, "node_modules/babel-plugin-syntax-flow": { "version": "6.18.0", "dev": true, @@ -14349,6 +18245,17 @@ "regjsparser": "bin/parser" } }, + "node_modules/babel-plugin-transform-flow-enums": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-flow-enums/-/babel-plugin-transform-flow-enums-0.0.2.tgz", + "integrity": "sha512-g4aaCrDDOsWjbm0PUUeVnkcVd6AKJsVc/MbnPhEotEpkeJQP6b8nzewohQi7+QS8UyPehOhGWn0nOwjvWpmMvQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/plugin-syntax-flow": "^7.12.1" + } + }, "node_modules/babel-plugin-transform-flow-strip-types": { "version": "6.22.0", "dev": true, @@ -14474,6 +18381,24 @@ "babel-plugin-transform-regenerator": "^6.24.1" } }, + "node_modules/babel-preset-expo": { + "version": "9.5.2", + "resolved": "https://registry.npmjs.org/babel-preset-expo/-/babel-preset-expo-9.5.2.tgz", + "integrity": "sha512-hU1G1TDiikuXV6UDZjPnX+WdbjbtidDiYhftMEVrZQSst45pDPVBWbM41TUKrpJMwv4FypsLzK+378gnMPRVWQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/plugin-proposal-decorators": "^7.12.9", + "@babel/plugin-proposal-export-namespace-from": "^7.18.9", + "@babel/plugin-proposal-object-rest-spread": "^7.12.13", + "@babel/plugin-transform-react-jsx": "^7.12.17", + "@babel/preset-env": "^7.20.0", + "babel-plugin-module-resolver": "^5.0.0", + "babel-plugin-react-native-web": "~0.18.10", + "metro-react-native-babel-preset": "0.76.8" + } + }, "node_modules/babel-preset-flow": { "version": "6.23.0", "dev": true, @@ -14786,7 +18711,6 @@ "version": "1.6.51", "dev": true, "license": "Unlicense", - "optional": true, "engines": { "node": ">=0.6" } @@ -14852,6 +18776,14 @@ "version": "3.7.2", "license": "MIT" }, + "node_modules/blueimp-md5": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/blueimp-md5/-/blueimp-md5-2.19.0.tgz", + "integrity": "sha512-DRQrD6gJyy8FbiE4s+bDoXS9hiW3Vbx5uCdwvcCf3zLHL+Iv7LtGHLpr+GZV8rHG8tK766FGYBwRbu8pELTt+w==", + "dev": true, + "license": "MIT", + "peer": true + }, "node_modules/bn.js": { "version": "5.2.1", "license": "MIT" @@ -15084,6 +19016,42 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, + "node_modules/bplist-creator": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/bplist-creator/-/bplist-creator-0.1.0.tgz", + "integrity": "sha512-sXaHZicyEEmY86WyueLTQesbeoH/mquvarJaQNbjuOQO+7gbFcDEWqKmcWA4cOTLzFlfgvkiVxolk1k5bBIpmg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "stream-buffers": "2.2.x" + } + }, + "node_modules/bplist-creator/node_modules/stream-buffers": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/stream-buffers/-/stream-buffers-2.2.0.tgz", + "integrity": "sha512-uyQK/mx5QjHun80FLJTfaWE7JtwfRMKBLkMne6udYOmvH0CawotVa7TfgYHzAnpphn4+TweIx1QKMnRIbipmUg==", + "dev": true, + "license": "Unlicense", + "peer": true, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/bplist-parser": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.3.2.tgz", + "integrity": "sha512-apC2+fspHGI3mMKj+dGevkGo/tCqVB8jMb6i+OX+E29p0Iposz07fABkRIfVUPNd5A5VbuOz1bZbnmkKLYF+wQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "big-integer": "1.6.x" + }, + "engines": { + "node": ">= 5.10.0" + } + }, "node_modules/brace-expansion": { "version": "1.1.11", "license": "MIT", @@ -15093,10 +19061,12 @@ } }, "node_modules/braces": { - "version": "3.0.2", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "license": "MIT", "dependencies": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" }, "engines": { "node": ">=8" @@ -15181,9 +19151,9 @@ } }, "node_modules/browserslist": { - "version": "4.22.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.1.tgz", - "integrity": "sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==", + "version": "4.24.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.2.tgz", + "integrity": "sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==", "funding": [ { "type": "opencollective", @@ -15198,11 +19168,12 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { - "caniuse-lite": "^1.0.30001541", - "electron-to-chromium": "^1.4.535", - "node-releases": "^2.0.13", - "update-browserslist-db": "^1.0.13" + "caniuse-lite": "^1.0.30001669", + "electron-to-chromium": "^1.5.41", + "node-releases": "^2.0.18", + "update-browserslist-db": "^1.1.1" }, "bin": { "browserslist": "cli.js" @@ -15279,6 +19250,14 @@ "version": "3.0.0", "license": "MIT" }, + "node_modules/builtins": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", + "integrity": "sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ==", + "dev": true, + "license": "MIT", + "peer": true + }, "node_modules/byline": { "version": "5.0.0", "license": "MIT", @@ -15597,13 +19576,19 @@ } }, "node_modules/call-bind": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", - "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "license": "MIT", "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.1", - "set-function-length": "^1.1.1" + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -15680,9 +19665,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001559", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001559.tgz", - "integrity": "sha512-cPiMKZgqgkg5LY3/ntGeLFUpi6tzddBNS58A4tnTgQw1zON7u2sZMU7SzOeVH4tj20++9ggL+V6FDOFMTaFFYA==", + "version": "1.0.30001677", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001677.tgz", + "integrity": "sha512-fmfjsOlJUpMWu+mAAtZZZHz7UEwsUxIIvu1TJfO1HqFQvB/B+ii0xr9B5HpbZY/mC4XZ8SvjHJqtAY6pDPQEog==", "funding": [ { "type": "opencollective", @@ -15696,7 +19681,8 @@ "type": "github", "url": "https://github.com/sponsors/ai" } - ] + ], + "license": "CC-BY-4.0" }, "node_modules/case-sensitive-paths-webpack-plugin": { "version": "2.4.0", @@ -15778,6 +19764,17 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/charenc": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", + "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==", + "dev": true, + "license": "BSD-3-Clause", + "peer": true, + "engines": { + "node": "*" + } + }, "node_modules/cheerio": { "version": "1.0.0-rc.12", "dev": true, @@ -16091,6 +20088,34 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "restore-cursor": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cli-spinners": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", + "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/cli-table3": { "version": "0.6.2", "dev": true, @@ -16160,6 +20185,17 @@ "node": ">=6" } }, + "node_modules/clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.8" + } + }, "node_modules/clone-deep": { "version": "4.0.1", "license": "MIT", @@ -16285,10 +20321,29 @@ "version": "1.0.1", "license": "MIT" }, + "node_modules/compare-versions": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-3.6.0.tgz", + "integrity": "sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA==", + "dev": true, + "license": "MIT", + "peer": true + }, "node_modules/component-emitter": { "version": "1.3.0", "license": "MIT" }, + "node_modules/component-type": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/component-type/-/component-type-1.2.2.tgz", + "integrity": "sha512-99VUHREHiN5cLeHm3YLq312p6v+HUEcwtLCAtelvUDI6+SH5g5Cr85oNR2S1o6ywzL0ykMbuwLzM2ANocjEOIA==", + "dev": true, + "license": "MIT", + "peer": true, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/compress-brotli": { "version": "1.3.8", "license": "MIT", @@ -16403,6 +20458,23 @@ "proto-list": "~1.2.1" } }, + "node_modules/connect": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", + "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "debug": "2.6.9", + "finalhandler": "1.1.2", + "parseurl": "~1.3.3", + "utils-merge": "1.0.1" + }, + "engines": { + "node": ">= 0.10.0" + } + }, "node_modules/connect-history-api-fallback": { "version": "1.6.0", "dev": true, @@ -16411,6 +20483,70 @@ "node": ">=0.8" } }, + "node_modules/connect/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/connect/node_modules/finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/connect/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/connect/node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/connect/node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/console-browserify": { "version": "1.2.0" }, @@ -16440,7 +20576,9 @@ } }, "node_modules/content-type": { - "version": "1.0.4", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", "license": "MIT", "engines": { "node": ">= 0.6" @@ -16655,24 +20793,18 @@ "license": "MIT" }, "node_modules/core-js-compat": { - "version": "3.24.1", + "version": "3.39.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.39.0.tgz", + "integrity": "sha512-VgEUx3VwlExr5no0tXlBt+silBvhTryPwCXRI2Id1PN8WTKu7MreethvddqOubrYxkFdv/RnYrqlv1sFNAUelw==", "license": "MIT", "dependencies": { - "browserslist": "^4.21.3", - "semver": "7.0.0" + "browserslist": "^4.24.2" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/core-js" } }, - "node_modules/core-js-compat/node_modules/semver": { - "version": "7.0.0", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/core-js-pure": { "version": "3.24.1", "dev": true, @@ -16934,6 +21066,39 @@ "sha.js": "^2.4.8" } }, + "node_modules/cross-fetch": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.8.tgz", + "integrity": "sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "node-fetch": "^2.6.12" + } + }, + "node_modules/cross-fetch/node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, "node_modules/cross-spawn": { "version": "7.0.3", "license": "MIT", @@ -16946,6 +21111,17 @@ "node": ">= 8" } }, + "node_modules/crypt": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", + "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==", + "dev": true, + "license": "BSD-3-Clause", + "peer": true, + "engines": { + "node": "*" + } + }, "node_modules/crypto-browserify": { "version": "3.12.0", "license": "MIT", @@ -18282,6 +22458,14 @@ "integrity": "sha512-dArJ32hchFsrQ8uMiTBLq256MpnZjeuBtdHpaDlYuQyjU0CVzCJl/BVW+SkszaAeH95D/8gxqAhgx0ouAWAfRg==", "dev": true }, + "node_modules/dag-map": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/dag-map/-/dag-map-1.0.2.tgz", + "integrity": "sha512-+LSAiGFwQ9dRnRdOeaj7g47ZFJcOUPukAP8J3A3fuZ1g9Y44BG+P1sgApjLXTQPOzC4+7S9Wr8kXsfpINM4jpw==", + "dev": true, + "license": "MIT", + "peer": true + }, "node_modules/dashdash": { "version": "1.14.1", "license": "MIT", @@ -18337,6 +22521,60 @@ "node": ">=10" } }, + "node_modules/data-view-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", + "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", + "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", + "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/deasync": { "version": "0.1.28", "hasInstallScript": true, @@ -18576,6 +22814,12 @@ "dev": true, "license": "MIT" }, + "node_modules/deep-diff": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/deep-diff/-/deep-diff-0.3.8.tgz", + "integrity": "sha512-yVn6RZmHiGnxRKR9sJb3iVV2XTF1Ghh2DiWRZ3dMnGc43yUdWWF/kX6lQyk3+P84iprfWKU/8zFTrlkvtFm1ug==", + "license": "MIT" + }, "node_modules/deep-equal": { "version": "1.1.1", "dev": true, @@ -18603,7 +22847,7 @@ }, "node_modules/deep-is": { "version": "0.1.4", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/deepmerge": { @@ -18759,6 +23003,31 @@ "which": "bin/which" } }, + "node_modules/defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/defaults/node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.8" + } + }, "node_modules/defer-to-connect": { "version": "2.0.1", "license": "MIT", @@ -18767,16 +23036,20 @@ } }, "node_modules/define-data-property": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", - "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "license": "MIT", "dependencies": { - "get-intrinsic": "^1.2.1", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0" + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" }, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/define-lazy-prop": { @@ -18791,6 +23064,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, "dependencies": { "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", @@ -18958,6 +23232,20 @@ "node": ">=0.10.0" } }, + "node_modules/detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", + "dev": true, + "license": "Apache-2.0", + "peer": true, + "bin": { + "detect-libc": "bin/detect-libc.js" + }, + "engines": { + "node": ">=0.10" + } + }, "node_modules/detect-newline": { "version": "3.1.0", "dev": true, @@ -19078,7 +23366,7 @@ }, "node_modules/doctrine": { "version": "3.0.0", - "dev": true, + "devOptional": true, "license": "Apache-2.0", "dependencies": { "esutils": "^2.0.2" @@ -19407,9 +23695,10 @@ "license": "MIT" }, "node_modules/electron-to-chromium": { - "version": "1.4.575", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.575.tgz", - "integrity": "sha512-kY2BGyvgAHiX899oF6xLXSIf99bAvvdPhDoJwG77nxCSyWYuRH6e9a9a3gpXBvCs6lj4dQZJkfnW2hdKWHEISg==" + "version": "1.5.51", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.51.tgz", + "integrity": "sha512-kKeWV57KSS8jH4alKt/jKnvHPmJgBxXzGUSbMd4eQF+iOsVPl7bz2KUmu6eo80eMP8wVioTfTyTzdMgM15WXNg==", + "license": "ISC" }, "node_modules/elliptic": { "version": "6.5.4", @@ -19539,7 +23828,7 @@ }, "node_modules/enquirer": { "version": "2.3.6", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "ansi-colors": "^4.1.1" @@ -19550,7 +23839,7 @@ }, "node_modules/enquirer/node_modules/ansi-colors": { "version": "4.1.3", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=6" @@ -19563,6 +23852,17 @@ "url": "https://github.com/fb55/entities?sponsor=1" } }, + "node_modules/env-editor": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/env-editor/-/env-editor-0.4.2.tgz", + "integrity": "sha512-ObFo8v4rQJAE59M69QzwloxPZtd33TpYEIjtKD1rrFDcM1Gd7IkDxEBU+HriziN6HSHQnBJi8Dmy+JWkav5HKA==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, "node_modules/envinfo": { "version": "7.8.1", "dev": true, @@ -19717,6 +24017,14 @@ "enzyme": "^3.4.0" } }, + "node_modules/eol": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/eol/-/eol-0.9.1.tgz", + "integrity": "sha512-Ds/TEoZjwggRoz/Q2O7SE3i4Jm66mqTDfmdHdq/7DKVk3bro9Q8h6WdXKdPqFLMoqxrDK5SVRzHVPOS6uuGtrg==", + "dev": true, + "license": "MIT", + "peer": true + }, "node_modules/errno": { "version": "0.1.8", "license": "MIT", @@ -19743,50 +24051,58 @@ } }, "node_modules/es-abstract": { - "version": "1.22.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.3.tgz", - "integrity": "sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==", - "dev": true, - "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "arraybuffer.prototype.slice": "^1.0.2", - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.5", - "es-set-tostringtag": "^2.0.1", + "version": "1.23.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", + "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "arraybuffer.prototype.slice": "^1.0.3", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "data-view-buffer": "^1.0.1", + "data-view-byte-length": "^1.0.1", + "data-view-byte-offset": "^1.0.0", + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-set-tostringtag": "^2.0.3", "es-to-primitive": "^1.2.1", "function.prototype.name": "^1.1.6", - "get-intrinsic": "^1.2.2", - "get-symbol-description": "^1.0.0", + "get-intrinsic": "^1.2.4", + "get-symbol-description": "^1.0.2", "globalthis": "^1.0.3", "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", "has-symbols": "^1.0.3", - "hasown": "^2.0.0", - "internal-slot": "^1.0.5", - "is-array-buffer": "^3.0.2", + "hasown": "^2.0.2", + "internal-slot": "^1.0.7", + "is-array-buffer": "^3.0.4", "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", + "is-data-view": "^1.0.1", + "is-negative-zero": "^2.0.3", "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", + "is-shared-array-buffer": "^1.0.3", "is-string": "^1.0.7", - "is-typed-array": "^1.1.12", + "is-typed-array": "^1.1.13", "is-weakref": "^1.0.2", "object-inspect": "^1.13.1", "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.5.1", - "safe-array-concat": "^1.0.1", - "safe-regex-test": "^1.0.0", - "string.prototype.trim": "^1.2.8", - "string.prototype.trimend": "^1.0.7", - "string.prototype.trimstart": "^1.0.7", - "typed-array-buffer": "^1.0.0", - "typed-array-byte-length": "^1.0.0", - "typed-array-byte-offset": "^1.0.0", - "typed-array-length": "^1.0.4", + "object.assign": "^4.1.5", + "regexp.prototype.flags": "^1.5.2", + "safe-array-concat": "^1.1.2", + "safe-regex-test": "^1.0.3", + "string.prototype.trim": "^1.2.9", + "string.prototype.trimend": "^1.0.8", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.2", + "typed-array-byte-length": "^1.0.1", + "typed-array-byte-offset": "^1.0.2", + "typed-array-length": "^1.0.6", "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.13" + "which-typed-array": "^1.1.15" }, "engines": { "node": ">= 0.4" @@ -19800,14 +24116,31 @@ "dev": true, "license": "MIT" }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/es-get-iterator": { -<<<<<<< HEAD - "version": "1.1.2", -======= "version": "1.1.3", "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==", ->>>>>>> 0da2c28 (adds unit test for utility functions created) "dev": true, "license": "MIT", "dependencies": { @@ -19856,15 +24189,29 @@ "version": "0.9.3", "license": "MIT" }, + "node_modules/es-object-atoms": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", + "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/es-set-tostringtag": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz", - "integrity": "sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", + "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", "dev": true, + "license": "MIT", "dependencies": { - "get-intrinsic": "^1.2.2", - "has-tostringtag": "^1.0.0", - "hasown": "^2.0.0" + "get-intrinsic": "^1.2.4", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.1" }, "engines": { "node": ">= 0.4" @@ -19941,7 +24288,9 @@ } }, "node_modules/escalade": { - "version": "3.1.1", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", "license": "MIT", "engines": { "node": ">=6" @@ -19989,7 +24338,7 @@ }, "node_modules/eslint": { "version": "7.32.0", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "@babel/code-frame": "7.12.11", @@ -20149,7 +24498,7 @@ }, "node_modules/eslint-visitor-keys": { "version": "2.1.0", - "dev": true, + "devOptional": true, "license": "Apache-2.0", "engines": { "node": ">=10" @@ -20157,7 +24506,7 @@ }, "node_modules/eslint/node_modules/@babel/code-frame": { "version": "7.12.11", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "@babel/highlight": "^7.10.4" @@ -20165,7 +24514,7 @@ }, "node_modules/eslint/node_modules/ansi-styles": { "version": "4.3.0", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "color-convert": "^2.0.1" @@ -20179,7 +24528,7 @@ }, "node_modules/eslint/node_modules/argparse": { "version": "1.0.10", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "sprintf-js": "~1.0.2" @@ -20187,7 +24536,7 @@ }, "node_modules/eslint/node_modules/chalk": { "version": "4.1.2", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", @@ -20202,7 +24551,7 @@ }, "node_modules/eslint/node_modules/color-convert": { "version": "2.0.1", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "color-name": "~1.1.4" @@ -20213,12 +24562,12 @@ }, "node_modules/eslint/node_modules/color-name": { "version": "1.1.4", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/eslint/node_modules/escape-string-regexp": { "version": "4.0.0", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=10" @@ -20229,7 +24578,7 @@ }, "node_modules/eslint/node_modules/eslint-scope": { "version": "5.1.1", - "dev": true, + "devOptional": true, "license": "BSD-2-Clause", "dependencies": { "esrecurse": "^4.3.0", @@ -20241,7 +24590,7 @@ }, "node_modules/eslint/node_modules/eslint-utils": { "version": "2.1.0", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "eslint-visitor-keys": "^1.1.0" @@ -20255,7 +24604,7 @@ }, "node_modules/eslint/node_modules/eslint-utils/node_modules/eslint-visitor-keys": { "version": "1.3.0", - "dev": true, + "devOptional": true, "license": "Apache-2.0", "engines": { "node": ">=4" @@ -20263,7 +24612,7 @@ }, "node_modules/eslint/node_modules/globals": { "version": "13.17.0", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "type-fest": "^0.20.2" @@ -20277,7 +24626,7 @@ }, "node_modules/eslint/node_modules/has-flag": { "version": "4.0.0", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=8" @@ -20285,7 +24634,7 @@ }, "node_modules/eslint/node_modules/ignore": { "version": "4.0.6", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">= 4" @@ -20293,7 +24642,7 @@ }, "node_modules/eslint/node_modules/js-yaml": { "version": "3.14.1", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "argparse": "^1.0.7", @@ -20305,7 +24654,7 @@ }, "node_modules/eslint/node_modules/levn": { "version": "0.4.1", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1", @@ -20317,7 +24666,7 @@ }, "node_modules/eslint/node_modules/optionator": { "version": "0.9.1", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "deep-is": "^0.1.3", @@ -20333,7 +24682,7 @@ }, "node_modules/eslint/node_modules/prelude-ls": { "version": "1.2.1", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">= 0.8.0" @@ -20341,7 +24690,7 @@ }, "node_modules/eslint/node_modules/semver": { "version": "7.3.7", - "dev": true, + "devOptional": true, "license": "ISC", "dependencies": { "lru-cache": "^6.0.0" @@ -20355,7 +24704,7 @@ }, "node_modules/eslint/node_modules/strip-json-comments": { "version": "3.1.1", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=8" @@ -20366,7 +24715,7 @@ }, "node_modules/eslint/node_modules/supports-color": { "version": "7.2.0", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "has-flag": "^4.0.0" @@ -20377,7 +24726,7 @@ }, "node_modules/eslint/node_modules/type-check": { "version": "0.4.0", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1" @@ -20388,7 +24737,7 @@ }, "node_modules/eslint/node_modules/type-fest": { "version": "0.20.2", - "dev": true, + "devOptional": true, "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" @@ -20406,7 +24755,7 @@ }, "node_modules/espree": { "version": "7.3.1", - "dev": true, + "devOptional": true, "license": "BSD-2-Clause", "dependencies": { "acorn": "^7.4.0", @@ -20419,7 +24768,7 @@ }, "node_modules/espree/node_modules/acorn": { "version": "7.4.1", - "dev": true, + "devOptional": true, "license": "MIT", "bin": { "acorn": "bin/acorn" @@ -20430,7 +24779,7 @@ }, "node_modules/espree/node_modules/eslint-visitor-keys": { "version": "1.3.0", - "dev": true, + "devOptional": true, "license": "Apache-2.0", "engines": { "node": ">=4" @@ -20449,7 +24798,7 @@ }, "node_modules/esquery": { "version": "1.4.0", - "dev": true, + "devOptional": true, "license": "BSD-3-Clause", "dependencies": { "estraverse": "^5.1.0" @@ -20460,7 +24809,7 @@ }, "node_modules/esquery/node_modules/estraverse": { "version": "5.3.0", - "dev": true, + "devOptional": true, "license": "BSD-2-Clause", "engines": { "node": ">=4.0" @@ -20536,6 +24885,14 @@ "safe-buffer": "^5.1.1" } }, + "node_modules/exec-async": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/exec-async/-/exec-async-2.2.0.tgz", + "integrity": "sha512-87OpwcEiMia/DeiKFzaQNBNFeN3XkkpYIh9FyOqq5mS2oKv3CBE67PXoEKcr6nodWdXNogTiQ0jE2NGuoffXPw==", + "dev": true, + "license": "MIT", + "peer": true + }, "node_modules/execa": { "version": "5.0.0", "license": "MIT", @@ -20720,6 +25077,314 @@ "node": ">=8" } }, + "node_modules/expo": { + "version": "49.0.23", + "resolved": "https://registry.npmjs.org/expo/-/expo-49.0.23.tgz", + "integrity": "sha512-mFdBpWisPXBuocRGywC14nDai5vSUmvEyQpwvKH/xUo+m5/TUvfqV6YIewFpW22zn5WFGFiuJPhzNrqhBBinIw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/runtime": "^7.20.0", + "@expo/cli": "0.10.17", + "@expo/config": "8.1.2", + "@expo/config-plugins": "7.2.5", + "@expo/vector-icons": "^13.0.0", + "babel-preset-expo": "~9.5.2", + "expo-application": "~5.3.0", + "expo-asset": "~8.10.1", + "expo-constants": "~14.4.2", + "expo-file-system": "~15.4.5", + "expo-font": "~11.4.0", + "expo-keep-awake": "~12.3.0", + "expo-modules-autolinking": "1.5.1", + "expo-modules-core": "1.5.13", + "fbemitter": "^3.0.0", + "invariant": "^2.2.4", + "md5-file": "^3.2.3", + "node-fetch": "^2.6.7", + "pretty-format": "^26.5.2", + "uuid": "^3.4.0" + }, + "bin": { + "expo": "bin/cli" + } + }, + "node_modules/expo-application": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/expo-application/-/expo-application-5.3.1.tgz", + "integrity": "sha512-HR2+K+Hm33vLw/TfbFaHrvUbRRNRco8R+3QaCKy7eJC2LFfT05kZ15ynGaKfB5DJ/oqPV3mxXVR/EfwmE++hoA==", + "dev": true, + "license": "MIT", + "peer": true, + "peerDependencies": { + "expo": "*" + } + }, + "node_modules/expo-asset": { + "version": "8.10.1", + "resolved": "https://registry.npmjs.org/expo-asset/-/expo-asset-8.10.1.tgz", + "integrity": "sha512-5VMTESxgY9GBsspO/esY25SKEa7RyascVkLe/OcL1WgblNFm7xCCEEUIW8VWS1nHJQGYxpMZPr3bEfjMpdWdyA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "blueimp-md5": "^2.10.0", + "expo-constants": "~14.4.2", + "expo-file-system": "~15.4.0", + "invariant": "^2.2.4", + "md5-file": "^3.2.3", + "path-browserify": "^1.0.0", + "url-parse": "^1.5.9" + } + }, + "node_modules/expo-constants": { + "version": "14.4.2", + "resolved": "https://registry.npmjs.org/expo-constants/-/expo-constants-14.4.2.tgz", + "integrity": "sha512-nOB122DOAjk+KrJT69lFQAoYVQGQjFHSigCPVBzVdko9S1xGsfiOH9+X5dygTsZTIlVLpQJDdmZ7ONiv3i+26w==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@expo/config": "~8.1.0", + "uuid": "^3.3.2" + }, + "peerDependencies": { + "expo": "*" + } + }, + "node_modules/expo-file-system": { + "version": "15.4.5", + "resolved": "https://registry.npmjs.org/expo-file-system/-/expo-file-system-15.4.5.tgz", + "integrity": "sha512-xy61KaTaDgXhT/dllwYDHm3ch026EyO8j4eC6wSVr/yE12MMMxAC09yGwy4f7kkOs6ztGVQF5j7ldRzNLN4l0Q==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "uuid": "^3.4.0" + }, + "peerDependencies": { + "expo": "*" + } + }, + "node_modules/expo-font": { + "version": "11.4.0", + "resolved": "https://registry.npmjs.org/expo-font/-/expo-font-11.4.0.tgz", + "integrity": "sha512-nkmezCFD7gR/I6R+e3/ry18uEfF8uYrr6h+PdBJu+3dawoLOpo+wFb/RG9bHUekU1/cPanR58LR7G5MEMKHR2w==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "fontfaceobserver": "^2.1.0" + }, + "peerDependencies": { + "expo": "*" + } + }, + "node_modules/expo-keep-awake": { + "version": "12.3.0", + "resolved": "https://registry.npmjs.org/expo-keep-awake/-/expo-keep-awake-12.3.0.tgz", + "integrity": "sha512-ujiJg1p9EdCOYS05jh5PtUrfiZnK0yyLy+UewzqrjUqIT8eAGMQbkfOn3C3fHE7AKd5AefSMzJnS3lYZcZYHDw==", + "dev": true, + "license": "MIT", + "peer": true, + "peerDependencies": { + "expo": "*" + } + }, + "node_modules/expo-modules-autolinking": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/expo-modules-autolinking/-/expo-modules-autolinking-1.5.1.tgz", + "integrity": "sha512-yt5a1VCp2BF9CrsO689PCD5oXKP14MMhnOanQMvDn4BDpURYfzAlDVGC5fZrNQKtwn/eq3bcrxIwZ7D9QjVVRg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@expo/config": "~8.1.0", + "chalk": "^4.1.0", + "commander": "^7.2.0", + "fast-glob": "^3.2.5", + "find-up": "^5.0.0", + "fs-extra": "^9.1.0" + }, + "bin": { + "expo-modules-autolinking": "bin/expo-modules-autolinking.js" + } + }, + "node_modules/expo-modules-autolinking/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/expo-modules-autolinking/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/expo-modules-autolinking/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/expo-modules-autolinking/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/expo-modules-autolinking/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/expo-modules-autolinking/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/expo-modules-autolinking/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/expo-modules-autolinking/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/expo-modules-autolinking/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/expo-modules-autolinking/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/expo-modules-autolinking/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/expo-modules-core": { + "version": "1.5.13", + "resolved": "https://registry.npmjs.org/expo-modules-core/-/expo-modules-core-1.5.13.tgz", + "integrity": "sha512-cKRsiHKwpDPRkBgMW3XdUWmEUDzihEPWXAyeo629BXpJ6uX6a66Zbz63SEXhlgsbLq8FB77gvYku3ceBqb+hHg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "compare-versions": "^3.4.0", + "invariant": "^2.2.4" + } + }, "node_modules/expo-pwa": { "version": "0.0.127", "resolved": "https://registry.npmjs.org/expo-pwa/-/expo-pwa-0.0.127.tgz", @@ -20814,6 +25479,28 @@ "node": ">=8" } }, + "node_modules/expo/node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, "node_modules/express": { "version": "4.18.1", "license": "MIT", @@ -21056,7 +25743,7 @@ }, "node_modules/fast-levenshtein": { "version": "2.0.6", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/fast-memoize": { @@ -21100,6 +25787,62 @@ "bser": "2.1.1" } }, + "node_modules/fbemitter": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/fbemitter/-/fbemitter-3.0.0.tgz", + "integrity": "sha512-KWKaceCwKQU0+HPoop6gn4eOHk50bBv/VxjJtGMfwmJt3D29JpN4H4eisCtIPA+a8GVBam+ldMMpMjJUvpDyHw==", + "dev": true, + "license": "BSD-3-Clause", + "peer": true, + "dependencies": { + "fbjs": "^3.0.0" + } + }, + "node_modules/fbemitter/node_modules/fbjs": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-3.0.5.tgz", + "integrity": "sha512-ztsSx77JBtkuMrEypfhgc3cI0+0h+svqeie7xHbh1k/IKdcydnvadp/mUaGgjAOXQmQSxsqgaRhS3q9fy+1kxg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "cross-fetch": "^3.1.5", + "fbjs-css-vars": "^1.0.0", + "loose-envify": "^1.0.0", + "object-assign": "^4.1.0", + "promise": "^7.1.1", + "setimmediate": "^1.0.5", + "ua-parser-js": "^1.0.35" + } + }, + "node_modules/fbemitter/node_modules/ua-parser-js": { + "version": "1.0.39", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.39.tgz", + "integrity": "sha512-k24RCVWlEcjkdOxYmVJgeD/0a1TiSpqLg+ZalVGV9lsnr4yqu0w7tX/x2xX6G4zpkgQnRf89lxuZ1wsbjXM8lw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/ua-parser-js" + }, + { + "type": "paypal", + "url": "https://paypal.me/faisalman" + }, + { + "type": "github", + "url": "https://github.com/sponsors/faisalman" + } + ], + "license": "MIT", + "peer": true, + "bin": { + "ua-parser-js": "script/cli.js" + }, + "engines": { + "node": "*" + } + }, "node_modules/fbjs": { "version": "0.8.18", "dev": true, @@ -21114,6 +25857,14 @@ "ua-parser-js": "^0.7.30" } }, + "node_modules/fbjs-css-vars": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz", + "integrity": "sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==", + "dev": true, + "license": "MIT", + "peer": true + }, "node_modules/fbjs/node_modules/core-js": { "version": "1.2.7", "dev": true, @@ -21137,7 +25888,7 @@ }, "node_modules/file-entry-cache": { "version": "6.0.1", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "flat-cache": "^3.0.4" @@ -21244,7 +25995,9 @@ } }, "node_modules/fill-range": { - "version": "7.0.1", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" @@ -21280,6 +26033,17 @@ "version": "2.0.0", "license": "MIT" }, + "node_modules/find-babel-config": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/find-babel-config/-/find-babel-config-2.1.2.tgz", + "integrity": "sha512-ZfZp1rQyp4gyuxqt1ZqjFGVeVBvmpURMqdIWXbPRfB97Bf6BzdK/xSIbylEINzQ0kB5tlDQfn9HkNXXWsqTqLg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "json5": "^2.2.3" + } + }, "node_modules/find-cache-dir": { "version": "2.1.0", "license": "MIT", @@ -21387,7 +26151,7 @@ }, "node_modules/flat-cache": { "version": "3.0.4", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "flatted": "^3.1.0", @@ -21401,7 +26165,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, + "devOptional": true, "dependencies": { "glob": "^7.1.3" }, @@ -21414,7 +26178,7 @@ }, "node_modules/flatted": { "version": "3.2.6", - "dev": true, + "devOptional": true, "license": "ISC" }, "node_modules/fluent-ffmpeg": { @@ -21496,6 +26260,14 @@ } } }, + "node_modules/fontfaceobserver": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/fontfaceobserver/-/fontfaceobserver-2.3.0.tgz", + "integrity": "sha512-6FPvD/IVyT4ZlNe7Wcn5Fb/4ChigpucKYSvD6a+0iMoLn2inpo711eyIcKjmDtE5XNcgAkSH9uN/nfAeZzHEfg==", + "dev": true, + "license": "BSD-2-Clause", + "peer": true + }, "node_modules/for-each": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", @@ -21739,6 +26511,17 @@ "node": ">=0.10.0" } }, + "node_modules/freeport-async": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/freeport-async/-/freeport-async-2.0.0.tgz", + "integrity": "sha512-K7od3Uw45AJg00XUmy15+Hae2hOcgKcmN3/EF6Y7i01O0gaqiRx8sUSpsb9+BRNL8RPBrhzPsVfy8q9ADlJuWQ==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, "node_modules/fresh": { "version": "0.5.2", "license": "MIT", @@ -21847,6 +26630,20 @@ "version": "1.0.0", "license": "ISC" }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, "node_modules/function-bind": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", @@ -21875,7 +26672,7 @@ }, "node_modules/functional-red-black-tree": { "version": "1.0.1", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/functions-have-names": { @@ -21920,15 +26717,20 @@ } }, "node_modules/get-intrinsic": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", - "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "license": "MIT", "dependencies": { + "es-errors": "^1.3.0", "function-bind": "^1.1.2", "has-proto": "^1.0.1", "has-symbols": "^1.0.3", "hasown": "^2.0.0" }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -21987,12 +26789,15 @@ } }, "node_modules/get-symbol-description": { - "version": "1.0.0", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", + "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" + "call-bind": "^1.0.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4" }, "engines": { "node": ">= 0.4" @@ -22201,6 +27006,34 @@ "version": "4.2.10", "license": "ISC" }, + "node_modules/graphql": { + "version": "15.8.0", + "resolved": "https://registry.npmjs.org/graphql/-/graphql-15.8.0.tgz", + "integrity": "sha512-5gghUc24tP9HRznNpV2+FIoq3xKkj5dTQqf4v0CpdPbFVwFkWoxOM+o+2OC9ZSvjEMTjfmG9QT+gcvggTwW1zw==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 10.x" + } + }, + "node_modules/graphql-tag": { + "version": "2.12.6", + "resolved": "https://registry.npmjs.org/graphql-tag/-/graphql-tag-2.12.6.tgz", + "integrity": "sha512-FdSNcu2QQcWnM2VNvSCCDCVS5PpPqpzgFT8+GXzqJuoDd0CBncxCY278u4mhRO7tMgo2JjgJA5aZ+nWSQ/Z+xg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "graphql": "^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" + } + }, "node_modules/handle-thing": { "version": "2.0.1", "dev": true, @@ -22311,19 +27144,22 @@ } }, "node_modules/has-property-descriptors": { - "version": "1.0.0", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "license": "MIT", "dependencies": { - "get-intrinsic": "^1.1.1" + "es-define-property": "^1.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -22359,10 +27195,12 @@ } }, "node_modules/has-tostringtag": { - "version": "1.0.0", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "license": "MIT", "dependencies": { - "has-symbols": "^1.0.2" + "has-symbols": "^1.0.3" }, "engines": { "node": ">= 0.4" @@ -22456,9 +27294,10 @@ } }, "node_modules/hasown": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", - "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", "dependencies": { "function-bind": "^1.1.2" }, @@ -22712,17 +27551,6 @@ "webpack": "^5.0.0" } }, - "node_modules/html-loader/node_modules/acorn": { - "version": "8.11.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", - "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/html-loader/node_modules/commander": { "version": "10.0.1", "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", @@ -22814,16 +27642,6 @@ "node": ">=12" } }, - "node_modules/html-minifier-terser/node_modules/acorn": { - "version": "8.8.0", - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/html-minifier-terser/node_modules/commander": { "version": "8.3.0", "license": "MIT", @@ -23202,6 +28020,16 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/immer": { + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/immer/-/immer-10.1.1.tgz", + "integrity": "sha512-s2MPrmjovJcoMaHtx6K11Ra7oD05NT97w1IC5zpMkT6Atjr7H8LjaDd81iIxUYpMKSRRNMJE703M1Fhr/TctHw==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/immer" + } + }, "node_modules/import-fresh": { "version": "3.3.0", "license": "MIT", @@ -23351,12 +28179,13 @@ } }, "node_modules/internal-slot": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.6.tgz", - "integrity": "sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", + "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", "dev": true, + "license": "MIT", "dependencies": { - "get-intrinsic": "^1.2.2", + "es-errors": "^1.3.0", "hasown": "^2.0.0", "side-channel": "^1.0.4" }, @@ -23465,14 +28294,17 @@ } }, "node_modules/is-array-buffer": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", - "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", + "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.0", - "is-typed-array": "^1.1.10" + "get-intrinsic": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -23580,6 +28412,22 @@ "node": ">=0.10.0" } }, + "node_modules/is-data-view": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", + "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-date-object": { "version": "1.0.5", "dev": true, @@ -23730,6 +28578,45 @@ "version": "1.1.3", "license": "MIT" }, + "node_modules/is-invalid-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-invalid-path/-/is-invalid-path-0.1.0.tgz", + "integrity": "sha512-aZMG0T3F34mTg4eTdszcGXx54oiZ4NtHSft3hWNJMGJXUUqdIj3cOZuHcU0nCWWcY3jd7yRe/3AEm3vSNTpBGQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "is-glob": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-invalid-path/node_modules/is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha512-7Q+VbVafe6x2T+Tu6NcOf6sRklazEPmBoB3IWk3WdGZM2iGUwU/Oe3Wtq5lSEkDTTlpp8yx+5t4pzO/i9Ty1ww==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-invalid-path/node_modules/is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha512-a1dBeB19NXsf/E0+FHqkagizel/LQw2DjSQpvQrj3zT+jYPpaUCryPnrQajXKFLCMuf4I6FhRpaGtw4lPrG6Eg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "is-extglob": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-map": { "version": "2.0.2", "dev": true, @@ -23743,7 +28630,9 @@ "license": "MIT" }, "node_modules/is-negative-zero": { - "version": "2.0.2", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", "dev": true, "license": "MIT", "engines": { @@ -23755,6 +28644,8 @@ }, "node_modules/is-number": { "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "license": "MIT", "engines": { "node": ">=0.12.0" @@ -23870,11 +28761,16 @@ } }, "node_modules/is-shared-array-buffer": { - "version": "1.0.2", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", + "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2" + "call-bind": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -23923,12 +28819,13 @@ } }, "node_modules/is-typed-array": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", - "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", + "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", "dev": true, + "license": "MIT", "dependencies": { - "which-typed-array": "^1.1.11" + "which-typed-array": "^1.1.14" }, "engines": { "node": ">= 0.4" @@ -23947,6 +28844,20 @@ "license": "MIT", "optional": true }, + "node_modules/is-valid-path": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-valid-path/-/is-valid-path-0.1.1.tgz", + "integrity": "sha512-+kwPrVDu9Ms03L90Qaml+79+6DZHqHyRoANI6IsZJ/g8frhnfchDOBCa0RbQ6/kdHt5CS5OeIEyrYznNuVN+8A==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "is-invalid-path": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-weakmap": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", @@ -26211,6 +31122,21 @@ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, + "node_modules/jest-runtime/node_modules/@jest/globals": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.5.1.tgz", + "integrity": "sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/types": "^27.5.1", + "expect": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, "node_modules/jest-runtime/node_modules/@jest/types": { "version": "27.5.1", "dev": true, @@ -27114,6 +32040,14 @@ "integrity": "sha512-dZ6Ra7u1G8c4Letq/B5EzAxj4tLFHL+cGtdpR+PVm4yzPDj+lCk+AbivWt1eOM+ikzkowtyV7qSqX6qr3t71Ww==", "dev": true }, + "node_modules/join-component": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/join-component/-/join-component-1.1.0.tgz", + "integrity": "sha512-bF7vcQxbODoGK1imE2P9GS9aw4zD0Sd+Hni68IMZLj7zRnquH7dXUmMw9hDI5S/Jzt7q+IyTXN0rSg2GI0IKhQ==", + "dev": true, + "license": "MIT", + "peer": true + }, "node_modules/jose": { "version": "2.0.5", "license": "MIT", @@ -27153,6 +32087,14 @@ "version": "0.1.1", "license": "MIT" }, + "node_modules/jsc-safe-url": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/jsc-safe-url/-/jsc-safe-url-0.2.4.tgz", + "integrity": "sha512-0wM3YBWtYePOjfyXQH5MWQ8H7sdk5EXSwZvmSLKk2RboVQ2Bu239jycHDz5J/8Blf3K0Qnoy2b6xD+z10MFB+Q==", + "dev": true, + "license": "0BSD", + "peer": true + }, "node_modules/jsdom": { "version": "16.7.0", "dev": true, @@ -27198,17 +32140,6 @@ } } }, - "node_modules/jsdom/node_modules/acorn": { - "version": "8.8.0", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/jsdom/node_modules/form-data": { "version": "3.0.1", "dev": true, @@ -27276,13 +32207,15 @@ } }, "node_modules/jsesc": { - "version": "2.5.2", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", + "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", "license": "MIT", "bin": { "jsesc": "bin/jsesc" }, "engines": { - "node": ">=4" + "node": ">=6" } }, "node_modules/json-buffer": { @@ -27306,13 +32239,47 @@ "version": "0.4.0", "license": "(AFL-2.1 OR BSD-3-Clause)" }, + "node_modules/json-schema-deref-sync": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/json-schema-deref-sync/-/json-schema-deref-sync-0.13.0.tgz", + "integrity": "sha512-YBOEogm5w9Op337yb6pAT6ZXDqlxAsQCanM3grid8lMWNxRJO/zWEJi3ZzqDL8boWfwhTFym5EFrNgWwpqcBRg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "clone": "^2.1.2", + "dag-map": "~1.0.0", + "is-valid-path": "^0.1.1", + "lodash": "^4.17.13", + "md5": "~2.2.0", + "memory-cache": "~0.2.0", + "traverse": "~0.6.6", + "valid-url": "~1.0.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/json-schema-deref-sync/node_modules/md5": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/md5/-/md5-2.2.1.tgz", + "integrity": "sha512-PlGG4z5mBANDGCKsYQe0CaUYHdZYZt8ZPZLmEt+Urf0W4GlpTX4HescwHU+dc9+Z/G/vZKYZYFrwgm9VxK6QOQ==", + "dev": true, + "license": "BSD-3-Clause", + "peer": true, + "dependencies": { + "charenc": "~0.0.1", + "crypt": "~0.0.1", + "is-buffer": "~1.1.1" + } + }, "node_modules/json-schema-traverse": { "version": "0.4.1", "license": "MIT" }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/json-stream": { @@ -27810,6 +32777,210 @@ "node": ">= 0.8.0" } }, + "node_modules/lightningcss": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.19.0.tgz", + "integrity": "sha512-yV5UR7og+Og7lQC+70DA7a8ta1uiOPnWPJfxa0wnxylev5qfo4P+4iMpzWAdYWOca4jdNQZii+bDL/l+4hUXIA==", + "dev": true, + "license": "MPL-2.0", + "peer": true, + "dependencies": { + "detect-libc": "^1.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-darwin-arm64": "1.19.0", + "lightningcss-darwin-x64": "1.19.0", + "lightningcss-linux-arm-gnueabihf": "1.19.0", + "lightningcss-linux-arm64-gnu": "1.19.0", + "lightningcss-linux-arm64-musl": "1.19.0", + "lightningcss-linux-x64-gnu": "1.19.0", + "lightningcss-linux-x64-musl": "1.19.0", + "lightningcss-win32-x64-msvc": "1.19.0" + } + }, + "node_modules/lightningcss-darwin-arm64": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.19.0.tgz", + "integrity": "sha512-wIJmFtYX0rXHsXHSr4+sC5clwblEMji7HHQ4Ub1/CznVRxtCFha6JIt5JZaNf8vQrfdZnBxLLC6R8pC818jXqg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "peer": true, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-x64": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.19.0.tgz", + "integrity": "sha512-Lif1wD6P4poaw9c/4Uh2z+gmrWhw/HtXFoeZ3bEsv6Ia4tt8rOJBdkfVaUJ6VXmpKHALve+iTyP2+50xY1wKPw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "peer": true, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.19.0.tgz", + "integrity": "sha512-P15VXY5682mTXaiDtbnLYQflc8BYb774j2R84FgDLJTN6Qp0ZjWEFyN1SPqyfTj2B2TFjRHRUvQSSZ7qN4Weig==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.19.0.tgz", + "integrity": "sha512-zwXRjWqpev8wqO0sv0M1aM1PpjHz6RVIsBcxKszIG83Befuh4yNysjgHVplF9RTU7eozGe3Ts7r6we1+Qkqsww==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-musl": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.19.0.tgz", + "integrity": "sha512-vSCKO7SDnZaFN9zEloKSZM5/kC5gbzUjoJQ43BvUpyTFUX7ACs/mDfl2Eq6fdz2+uWhUh7vf92c4EaaP4udEtA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-gnu": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.19.0.tgz", + "integrity": "sha512-0AFQKvVzXf9byrXUq9z0anMGLdZJS+XSDqidyijI5njIwj6MdbvX2UZK/c4FfNmeRa2N/8ngTffoIuOUit5eIQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-musl": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.19.0.tgz", + "integrity": "sha512-SJoM8CLPt6ECCgSuWe+g0qo8dqQYVcPiW2s19dxkmSI5+Uu1GIRzyKA0b7QqmEXolA+oSJhQqCmJpzjY4CuZAg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-x64-msvc": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.19.0.tgz", + "integrity": "sha512-C+VuUTeSUOAaBZZOPT7Etn/agx/MatzJzGRkeV+zEABmPuntv1zihncsi+AyGmjkkzq3wVedEy7h0/4S84mUtg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "peer": true, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, "node_modules/lilconfig": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", @@ -27944,7 +33115,7 @@ }, "node_modules/lodash.merge": { "version": "4.6.2", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/lodash.pullall": { @@ -27955,7 +33126,7 @@ }, "node_modules/lodash.truncate": { "version": "4.4.2", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/lodash.uniq": { @@ -28231,6 +33402,36 @@ "react-dom": "^17.0.0 || ^18.0.0" } }, + "node_modules/md5": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", + "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", + "dev": true, + "license": "BSD-3-Clause", + "peer": true, + "dependencies": { + "charenc": "0.0.2", + "crypt": "0.0.2", + "is-buffer": "~1.1.6" + } + }, + "node_modules/md5-file": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/md5-file/-/md5-file-3.2.3.tgz", + "integrity": "sha512-3Tkp1piAHaworfcCgH0jKbTvj1jWWFgbvh2cXaNCgHwyTCBxxvD1Y04rmfpvdPm1P4oXMOpm6+2H7sr7v9v8Fw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "buffer-alloc": "^1.1.0" + }, + "bin": { + "md5-file": "cli.js" + }, + "engines": { + "node": ">=0.10" + } + }, "node_modules/md5.js": { "version": "1.3.5", "license": "MIT", @@ -28240,6 +33441,14 @@ "safe-buffer": "^5.1.2" } }, + "node_modules/md5hex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/md5hex/-/md5hex-1.0.0.tgz", + "integrity": "sha512-c2YOUbp33+6thdCUi34xIyOU/a7bvGKj/3DB1iaPMTuPHf/Q2d5s4sn1FaCOO43XkXggnb08y5W2PU8UNYNLKQ==", + "dev": true, + "license": "MIT", + "peer": true + }, "node_modules/mdast-squeeze-paragraphs": { "version": "4.0.0", "dev": true, @@ -28382,6 +33591,14 @@ "map-or-similar": "^1.5.0" } }, + "node_modules/memory-cache": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/memory-cache/-/memory-cache-0.2.0.tgz", + "integrity": "sha512-OcjA+jzjOYzKmKS6IQVALHLVz+rNTMPoJvCztFaZxwG14wtAW7VRZjwTQu06vKCYOxh4jVnik7ya0SXTB0W+xA==", + "dev": true, + "license": "BSD-2-Clause", + "peer": true + }, "node_modules/memory-fs": { "version": "0.4.1", "license": "MIT", @@ -28533,6 +33750,72 @@ "node": ">= 0.6" } }, + "node_modules/metro-react-native-babel-preset": { + "version": "0.76.8", + "resolved": "https://registry.npmjs.org/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.76.8.tgz", + "integrity": "sha512-Ptza08GgqzxEdK8apYsjTx2S8WDUlS2ilBlu9DR1CUcHmg4g3kOkFylZroogVAUKtpYQNYwAvdsjmrSdDNtiAg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/core": "^7.20.0", + "@babel/plugin-proposal-async-generator-functions": "^7.0.0", + "@babel/plugin-proposal-class-properties": "^7.18.0", + "@babel/plugin-proposal-export-default-from": "^7.0.0", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.0", + "@babel/plugin-proposal-numeric-separator": "^7.0.0", + "@babel/plugin-proposal-object-rest-spread": "^7.20.0", + "@babel/plugin-proposal-optional-catch-binding": "^7.0.0", + "@babel/plugin-proposal-optional-chaining": "^7.20.0", + "@babel/plugin-syntax-dynamic-import": "^7.8.0", + "@babel/plugin-syntax-export-default-from": "^7.0.0", + "@babel/plugin-syntax-flow": "^7.18.0", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.0.0", + "@babel/plugin-syntax-optional-chaining": "^7.0.0", + "@babel/plugin-transform-arrow-functions": "^7.0.0", + "@babel/plugin-transform-async-to-generator": "^7.20.0", + "@babel/plugin-transform-block-scoping": "^7.0.0", + "@babel/plugin-transform-classes": "^7.0.0", + "@babel/plugin-transform-computed-properties": "^7.0.0", + "@babel/plugin-transform-destructuring": "^7.20.0", + "@babel/plugin-transform-flow-strip-types": "^7.20.0", + "@babel/plugin-transform-function-name": "^7.0.0", + "@babel/plugin-transform-literals": "^7.0.0", + "@babel/plugin-transform-modules-commonjs": "^7.0.0", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.0.0", + "@babel/plugin-transform-parameters": "^7.0.0", + "@babel/plugin-transform-react-display-name": "^7.0.0", + "@babel/plugin-transform-react-jsx": "^7.0.0", + "@babel/plugin-transform-react-jsx-self": "^7.0.0", + "@babel/plugin-transform-react-jsx-source": "^7.0.0", + "@babel/plugin-transform-runtime": "^7.0.0", + "@babel/plugin-transform-shorthand-properties": "^7.0.0", + "@babel/plugin-transform-spread": "^7.0.0", + "@babel/plugin-transform-sticky-regex": "^7.0.0", + "@babel/plugin-transform-typescript": "^7.5.0", + "@babel/plugin-transform-unicode-regex": "^7.0.0", + "@babel/template": "^7.0.0", + "babel-plugin-transform-flow-enums": "^0.0.2", + "react-refresh": "^0.4.0" + }, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "@babel/core": "*" + } + }, + "node_modules/metro-react-native-babel-preset/node_modules/react-refresh": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.4.3.tgz", + "integrity": "sha512-Hwln1VNuGl/6bVwnd0Xdn1e84gT/8T9aYNL+HAKDArLCS7LWjwr7StE30IEYbIkx0Vi3vs+coQxe+SQDbGbbpA==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/mhchemparser": { "version": "4.1.1", "license": "Apache-2.0" @@ -29127,7 +34410,6 @@ }, "node_modules/mini-create-react-context": { "version": "0.4.1", - "dev": true, "license": "MIT", "dependencies": { "@babel/runtime": "^7.12.1", @@ -29463,6 +34745,94 @@ "dev": true, "license": "MIT" }, + "node_modules/mv": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/mv/-/mv-2.1.1.tgz", + "integrity": "sha512-at/ZndSy3xEGJ8i0ygALh8ru9qy7gWW1cmkaqBN29JmMlIvM//MEO9y1sk/avxuwnPcfhkejkLsuPxH81BrkSg==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "mkdirp": "~0.5.1", + "ncp": "~2.0.0", + "rimraf": "~2.4.0" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/mv/node_modules/glob": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", + "integrity": "sha512-MKZeRNyYZAVVVG1oZeLaWie1uweH40m9AZwIwxyPbTSX4hHrVYSzLg0Ro5Z5R7XKkIX+Cc6oD1rqeDJnwsB8/A==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "license": "ISC", + "optional": true, + "peer": true, + "dependencies": { + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/mv/node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/mv/node_modules/rimraf": { + "version": "2.4.5", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz", + "integrity": "sha512-J5xnxTyqaiw06JjMftq7L9ouA448dw/E7dKghkP9WpKNuwmARNNg+Gk8/u5ryb9N/Yo2+z3MCwuqFK/+qPOPfQ==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dev": true, + "license": "ISC", + "optional": true, + "peer": true, + "dependencies": { + "glob": "^6.0.1" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/nan": { + "version": "2.22.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.22.0.tgz", + "integrity": "sha512-nbajikzWTMwsW+eSsNm3QwlOs7het9gGJU5dDZzRTQGk03vyBOauxgI4VakDzE0PtsGTmXPsXTbbjVhRwR5mpw==", + "license": "MIT", + "optional": true + }, "node_modules/nanoid": { "version": "3.3.6", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", @@ -29502,9 +34872,21 @@ }, "node_modules/natural-compare": { "version": "1.4.0", - "dev": true, + "devOptional": true, "license": "MIT" }, + "node_modules/ncp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz", + "integrity": "sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "bin": { + "ncp": "bin/ncp" + } + }, "node_modules/nearley": { "version": "2.20.1", "dev": true, @@ -29680,9 +35062,10 @@ "license": "MIT" }, "node_modules/node-releases": { - "version": "2.0.13", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", - "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==" + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", + "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", + "license": "MIT" }, "node_modules/normalize-package-data": { "version": "2.5.0", @@ -29749,6 +35132,45 @@ "node": ">=4" } }, + "node_modules/npm-package-arg": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-7.0.0.tgz", + "integrity": "sha512-xXxr8y5U0kl8dVkz2oK7yZjPBvqM2fwaO5l3Yg13p03v8+E3qQcD0JNhHzjL1vyGgxcKkD0cco+NLR72iuPk3g==", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "hosted-git-info": "^3.0.2", + "osenv": "^0.1.5", + "semver": "^5.6.0", + "validate-npm-package-name": "^3.0.0" + } + }, + "node_modules/npm-package-arg/node_modules/hosted-git-info": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.8.tgz", + "integrity": "sha512-aXpmwoOhRBrw6X3j0h5RloK4x1OzsxMPyxqIHyNfSe2pypkVTZFpEiRoSipPEPlMrh0HW/XsjkJ5WgnCirpNUw==", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm-package-arg/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "license": "ISC", + "peer": true, + "bin": { + "semver": "bin/semver" + } + }, "node_modules/npm-run-path": { "version": "4.0.1", "license": "MIT", @@ -29779,6 +35201,14 @@ "url": "https://github.com/fb55/nth-check?sponsor=1" } }, + "node_modules/nullthrows": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/nullthrows/-/nullthrows-1.1.1.tgz", + "integrity": "sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==", + "dev": true, + "license": "MIT", + "peer": true + }, "node_modules/num2fraction": { "version": "1.2.2", "dev": true, @@ -29867,6 +35297,7 @@ }, "node_modules/object-keys": { "version": "1.1.1", + "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -29890,12 +35321,14 @@ } }, "node_modules/object.assign": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", - "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", + "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", + "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", "has-symbols": "^1.0.3", "object-keys": "^1.1.1" }, @@ -30136,6 +35569,50 @@ "node": ">= 0.8.0" } }, + "node_modules/ora": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-3.4.0.tgz", + "integrity": "sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "chalk": "^2.4.2", + "cli-cursor": "^2.1.0", + "cli-spinners": "^2.0.0", + "log-symbols": "^2.2.0", + "strip-ansi": "^5.2.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/ora/node_modules/ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ora/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/os-browserify": { "version": "0.3.0", "license": "MIT" @@ -30155,6 +35632,19 @@ "node": ">=0.10.0" } }, + "node_modules/osenv": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "deprecated": "This package is no longer supported.", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, "node_modules/p-all": { "version": "2.1.0", "dev": true, @@ -30310,6 +35800,14 @@ "node": ">=6" } }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "dev": true, + "license": "BlueOak-1.0.0", + "peer": true + }, "node_modules/pako": { "version": "1.0.11", "license": "(MIT AND Zlib)" @@ -30496,6 +35994,18 @@ "node": ">=0.10.0" } }, + "node_modules/password-prompt": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/password-prompt/-/password-prompt-1.1.3.tgz", + "integrity": "sha512-HkrjG2aJlvF0t2BMH0e2LB/EHf3Lcq3fNMzy4GYHcQblAvOl+QQji1Lx7WRBMqpVK8p+KR7bCg7oqAMXtdgqyw==", + "dev": true, + "license": "0BSD", + "peer": true, + "dependencies": { + "ansi-escapes": "^4.3.2", + "cross-spawn": "^7.0.3" + } + }, "node_modules/path-browserify": { "version": "1.0.1", "license": "MIT" @@ -30536,29 +36046,28 @@ "license": "MIT" }, "node_modules/path-scurry": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", - "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", "dev": true, + "license": "BlueOak-1.0.0", "dependencies": { - "lru-cache": "^9.1.1 || ^10.0.0", + "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">=16 || 14 >=14.18" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/path-scurry/node_modules/lru-cache": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.1.tgz", - "integrity": "sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g==", + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", "dev": true, - "engines": { - "node": "14 || >=16.14" - } + "license": "ISC" }, "node_modules/path-scurry/node_modules/minipass": { "version": "7.0.4", @@ -30615,7 +36124,9 @@ "license": "MIT" }, "node_modules/picocolors": { - "version": "1.0.0", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", "license": "ISC" }, "node_modules/picomatch": { @@ -30722,6 +36233,112 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/pkg-up": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", + "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "find-up": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-up/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-up/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-up/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-up/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/plist": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/plist/-/plist-3.1.0.tgz", + "integrity": "sha512-uysumyrvkUX0rX/dEVqt8gC3sTBzd4zoWfLeS29nb53imdaXVvLINYXTI2GNqzaMuvacNx4uJQ8+b3zXR0pkgQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@xmldom/xmldom": "^0.8.8", + "base64-js": "^1.5.1", + "xmlbuilder": "^15.1.1" + }, + "engines": { + "node": ">=10.4.0" + } + }, + "node_modules/plist/node_modules/@xmldom/xmldom": { + "version": "0.8.10", + "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.10.tgz", + "integrity": "sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/plist/node_modules/xmlbuilder": { + "version": "15.1.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-15.1.1.tgz", + "integrity": "sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8.0" + } + }, "node_modules/pngjs": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.4.0.tgz", @@ -30789,6 +36406,16 @@ "node": ">=0.10.0" } }, + "node_modules/possible-typed-array-names": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", + "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/postcss": { "version": "8.4.31", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", @@ -31347,6 +36974,20 @@ "url": "https://github.com/prettier/prettier?sponsor=1" } }, + "node_modules/pretty-bytes": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", + "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/pretty-error": { "version": "4.0.0", "license": "MIT", @@ -31432,7 +37073,7 @@ }, "node_modules/progress": { "version": "2.0.3", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=0.4.0" @@ -31604,6 +37245,16 @@ "node": ">=6" } }, + "node_modules/qrcode-terminal": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/qrcode-terminal/-/qrcode-terminal-0.11.0.tgz", + "integrity": "sha512-Uu7ii+FQy4Qf82G4xu7ShHhjhGahEpCWc3x8UavY3CTcWV+ufmmCtwkr7ZKsX42jdL0kr1B5FKUeqJvAn51jzQ==", + "dev": true, + "peer": true, + "bin": { + "qrcode-terminal": "bin/qrcode-terminal.js" + } + }, "node_modules/qs": { "version": "6.5.3", "license": "BSD-3-Clause", @@ -32243,6 +37894,29 @@ "react": "^17.x" } }, + "node_modules/react-redux": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-9.1.2.tgz", + "integrity": "sha512-0OA4dhM1W48l3uzmv6B7TXPCGmokUU4p1M44DGN2/D9a1FjVPukVjER1PcPX97jIg6aUeLq1XJo1IpfbgULn0w==", + "license": "MIT", + "dependencies": { + "@types/use-sync-external-store": "^0.0.3", + "use-sync-external-store": "^1.0.0" + }, + "peerDependencies": { + "@types/react": "^18.2.25", + "react": "^18.0", + "redux": "^5.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "redux": { + "optional": true + } + } + }, "node_modules/react-refresh": { "version": "0.11.0", "dev": true, @@ -32300,7 +37974,6 @@ }, "node_modules/react-router-dom": { "version": "5.3.3", - "dev": true, "license": "MIT", "dependencies": { "@babel/runtime": "^7.12.13", @@ -32317,7 +37990,6 @@ }, "node_modules/react-router-dom/node_modules/history": { "version": "4.10.1", - "dev": true, "license": "MIT", "dependencies": { "@babel/runtime": "^7.1.2", @@ -32330,12 +38002,10 @@ }, "node_modules/react-router-dom/node_modules/isarray": { "version": "0.0.1", - "dev": true, "license": "MIT" }, "node_modules/react-router-dom/node_modules/path-to-regexp": { "version": "1.8.0", - "dev": true, "license": "MIT", "dependencies": { "isarray": "0.0.1" @@ -32343,7 +38013,6 @@ }, "node_modules/react-router-dom/node_modules/react-router": { "version": "5.3.3", - "dev": true, "license": "MIT", "dependencies": { "@babel/runtime": "^7.12.13", @@ -32596,6 +38265,30 @@ "node": ">=0.10.0" } }, + "node_modules/redux": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/redux/-/redux-5.0.1.tgz", + "integrity": "sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w==", + "license": "MIT" + }, + "node_modules/redux-logger": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/redux-logger/-/redux-logger-3.0.6.tgz", + "integrity": "sha512-JoCIok7bg/XpqA1JqCqXFypuqBbQzGQySrhFzewB7ThcnysTO30l4VCst86AuB9T9tuT03MAA56Jw2PNhRSNCg==", + "license": "MIT", + "dependencies": { + "deep-diff": "^0.3.5" + } + }, + "node_modules/redux-thunk": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-3.1.0.tgz", + "integrity": "sha512-NW2r5T6ksUKXCabzhL9z+h206HQw/NJkcLm1GPImRQ8IzfXwRGqjVhKJGauHirT0DAuyy6hjdnMZaRoAcy0Klw==", + "license": "MIT", + "peerDependencies": { + "redux": "^5.0.0" + } + }, "node_modules/reflect.getprototypeof": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.4.tgz", @@ -32626,7 +38319,9 @@ "license": "MIT" }, "node_modules/regenerate-unicode-properties": { - "version": "10.0.1", + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.0.tgz", + "integrity": "sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==", "license": "MIT", "dependencies": { "regenerate": "^1.4.2" @@ -32638,11 +38333,12 @@ "node_modules/regenerator-runtime": { "version": "0.14.0", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", - "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==", - "dev": true + "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==" }, "node_modules/regenerator-transform": { - "version": "0.15.0", + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", + "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.8.4" @@ -32660,14 +38356,16 @@ } }, "node_modules/regexp.prototype.flags": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz", - "integrity": "sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==", + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.3.tgz", + "integrity": "sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "set-function-name": "^2.0.0" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "set-function-name": "^2.0.2" }, "engines": { "node": ">= 0.4" @@ -32678,7 +38376,7 @@ }, "node_modules/regexpp": { "version": "3.2.0", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=8" @@ -32688,15 +38386,17 @@ } }, "node_modules/regexpu-core": { - "version": "5.1.0", + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.1.1.tgz", + "integrity": "sha512-k67Nb9jvwJcJmVpw0jPttR1/zVfnKf8Km0IPatrU/zJ5XeG3+Slx0xLXs9HByJSzXzrlz5EDvN6yLNMDc2qdnw==", "license": "MIT", "dependencies": { "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.0.1", - "regjsgen": "^0.6.0", - "regjsparser": "^0.8.2", + "regenerate-unicode-properties": "^10.2.0", + "regjsgen": "^0.8.0", + "regjsparser": "^0.11.0", "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.0.0" + "unicode-match-property-value-ecmascript": "^2.1.0" }, "engines": { "node": ">=4" @@ -32725,25 +38425,23 @@ } }, "node_modules/regjsgen": { - "version": "0.6.0", + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==", "license": "MIT" }, "node_modules/regjsparser": { - "version": "0.8.4", + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.11.2.tgz", + "integrity": "sha512-3OGZZ4HoLJkkAZx/48mTXJNlmqTGOzc0o9OWQPuWpkOlXXPbyN6OafCcoXUnBqE2D3f/T5L+pWc1kdEmnfnRsA==", "license": "BSD-2-Clause", "dependencies": { - "jsesc": "~0.5.0" + "jsesc": "~3.0.2" }, "bin": { "regjsparser": "bin/parser" } }, - "node_modules/regjsparser/node_modules/jsesc": { - "version": "0.5.0", - "bin": { - "jsesc": "bin/jsesc" - } - }, "node_modules/relateurl": { "version": "0.2.7", "license": "MIT", @@ -33110,6 +38808,14 @@ "devOptional": true, "license": "ISC" }, + "node_modules/remove-trailing-slash": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/remove-trailing-slash/-/remove-trailing-slash-0.1.1.tgz", + "integrity": "sha512-o4S4Qh6L2jpnCy83ysZDau+VORNvnFw07CKSAymkd6ICNVEPisMyzlc00KlvvicsxKck94SEwhDnMNdICzO+tA==", + "dev": true, + "license": "MIT", + "peer": true + }, "node_modules/renderkid": { "version": "3.0.0", "license": "MIT", @@ -33210,7 +38916,7 @@ }, "node_modules/require-from-string": { "version": "2.0.2", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -33221,10 +38927,52 @@ "dev": true, "license": "ISC" }, + "node_modules/requireg": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/requireg/-/requireg-0.2.2.tgz", + "integrity": "sha512-nYzyjnFcPNGR3lx9lwPPPnuQxv6JWEZd2Ci0u9opN7N5zUEPIhY/GbL3vMGOr2UXwEg9WwSyV9X9Y/kLFgPsOg==", + "dev": true, + "peer": true, + "dependencies": { + "nested-error-stacks": "~2.0.1", + "rc": "~1.2.7", + "resolve": "~1.7.1" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/requireg/node_modules/nested-error-stacks": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/nested-error-stacks/-/nested-error-stacks-2.0.1.tgz", + "integrity": "sha512-SrQrok4CATudVzBS7coSz26QRSmlK9TzzoFbeKfcPBUFPjcQM9Rqvr/DlJkOrwI/0KcgvMub1n1g5Jt9EgRn4A==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/requireg/node_modules/resolve": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.7.1.tgz", + "integrity": "sha512-c7rwLofp8g1U+h1KNyHL/jicrKg1Ek4q+Lr33AL65uZTinUZHe30D5HlyN5V9NW0JX1D5dXQ4jqW5l7Sy/kGfw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "path-parse": "^1.0.5" + } + }, "node_modules/requires-port": { "version": "1.0.0", "license": "MIT" }, + "node_modules/reselect": { + "version": "4.1.8", + "resolved": "https://registry.npmjs.org/reselect/-/reselect-4.1.8.tgz", + "integrity": "sha512-ab9EmR80F/zQTMNeneUr4cv+jSwPJgIlvEmVwLerwrWVbpLlBuls9XHzIeTFy4cegU2NHBp3va0LKOzU5qFEYQ==", + "dev": true, + "license": "MIT", + "peer": true + }, "node_modules/resolve": { "version": "1.22.8", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", @@ -33273,7 +39021,6 @@ }, "node_modules/resolve-pathname": { "version": "3.0.0", - "dev": true, "license": "MIT" }, "node_modules/resolve-url": { @@ -33298,6 +39045,46 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/restore-cursor/node_modules/mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/restore-cursor/node_modules/onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "mimic-fn": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/ret": { "version": "0.1.15", "license": "MIT", @@ -33488,13 +39275,14 @@ } }, "node_modules/safe-array-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.1.tgz", - "integrity": "sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", + "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1", + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4", "has-symbols": "^1.0.3", "isarray": "^2.0.5" }, @@ -33529,6 +39317,15 @@ ], "license": "MIT" }, + "node_modules/safe-json-stringify": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz", + "integrity": "sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true + }, "node_modules/safe-regex": { "version": "1.1.0", "license": "MIT", @@ -33537,15 +39334,19 @@ } }, "node_modules/safe-regex-test": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", - "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", + "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", "is-regex": "^1.1.4" }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -33554,6 +39355,14 @@ "version": "2.1.2", "license": "MIT" }, + "node_modules/sax": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz", + "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==", + "dev": true, + "license": "ISC", + "peer": true + }, "node_modules/saxes": { "version": "5.0.1", "dev": true, @@ -33666,6 +39475,37 @@ "version": "2.1.3", "license": "MIT" }, + "node_modules/serialize-error": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-6.0.0.tgz", + "integrity": "sha512-3vmBkMZLQO+BR4RPHcyRGdE09XCF6cvxzk2N2qn8Er3F91cy8Qt7VvEbZBOpaL53qsBbe2cFOefU6tRY6WDelA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "type-fest": "^0.12.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/serialize-error/node_modules/type-fest": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.12.0.tgz", + "integrity": "sha512-53RyidyjvkGpnWPMF9bQgFtWp+Sl8O2Rp13VavmJgfAP9WWG6q6TkrKU8iyJdnwnfgHI6k2hTlgqH4aSdjoTbg==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/serialize-javascript": { "version": "4.0.0", "license": "BSD-3-Clause", @@ -33786,56 +39626,33 @@ "license": "ISC" }, "node_modules/set-function-length": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz", - "integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==", - "dependencies": { - "define-data-property": "^1.1.1", - "get-intrinsic": "^1.2.1", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/set-function-name": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz", - "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==", - "dev": true, - "dependencies": { - "define-data-property": "^1.0.1", - "functions-have-names": "^1.2.3", - "has-property-descriptors": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/set-function-length": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz", - "integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "license": "MIT", "dependencies": { - "define-data-property": "^1.1.1", - "get-intrinsic": "^1.2.1", + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0" + "has-property-descriptors": "^1.0.2" }, "engines": { "node": ">= 0.4" } }, "node_modules/set-function-name": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz", - "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", "dev": true, + "license": "MIT", "dependencies": { - "define-data-property": "^1.0.1", + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", "functions-have-names": "^1.2.3", - "has-property-descriptors": "^1.0.0" + "has-property-descriptors": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -33935,12 +39752,18 @@ } }, "node_modules/side-channel": { - "version": "1.0.4", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", "license": "MIT", "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -33950,6 +39773,33 @@ "version": "3.0.7", "license": "ISC" }, + "node_modules/simple-plist": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/simple-plist/-/simple-plist-1.3.1.tgz", + "integrity": "sha512-iMSw5i0XseMnrhtIzRb7XpQEXepa9xhWxGUojHBL43SIpQuDQkh3Wpy67ZbDzZVr6EKxvwVChnVpdl8hEVLDiw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "bplist-creator": "0.1.0", + "bplist-parser": "0.3.1", + "plist": "^3.0.5" + } + }, + "node_modules/simple-plist/node_modules/bplist-parser": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.3.1.tgz", + "integrity": "sha512-PyJxiNtA5T2PlLIeBot4lbp7rj4OadzjnMZD/G5zuBNt8ei/yCU7+wW0h2bag9vr8c+/WuRWmSxbqAl9hL1rBA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "big-integer": "1.6.x" + }, + "engines": { + "node": ">= 5.10.0" + } + }, "node_modules/sirv": { "version": "1.0.19", "license": "MIT", @@ -33996,7 +39846,7 @@ }, "node_modules/slice-ansi": { "version": "4.0.0", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", @@ -34012,7 +39862,7 @@ }, "node_modules/slice-ansi/node_modules/ansi-styles": { "version": "4.3.0", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "color-convert": "^2.0.1" @@ -34026,7 +39876,7 @@ }, "node_modules/slice-ansi/node_modules/color-convert": { "version": "2.0.1", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "color-name": "~1.1.4" @@ -34037,9 +39887,20 @@ }, "node_modules/slice-ansi/node_modules/color-name": { "version": "1.1.4", - "dev": true, + "devOptional": true, "license": "MIT" }, + "node_modules/slugify": { + "version": "1.6.6", + "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.6.6.tgz", + "integrity": "sha512-h+z7HKHYXj6wJU+AnS/+IH8Uh9fdcX1Lrhg1/VMdf9PwoBQXFcXiAdsy2tSK0P6gKwJLXp02r90ahUCqHk9rrw==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8.0.0" + } + }, "node_modules/snapdragon": { "version": "0.8.2", "license": "MIT", @@ -34374,6 +40235,20 @@ "node": "^12.20.0 || >=14" } }, + "node_modules/split": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", + "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "through": "2" + }, + "engines": { + "node": "*" + } + }, "node_modules/split-string": { "version": "3.1.0", "license": "MIT", @@ -34684,14 +40559,16 @@ } }, "node_modules/string.prototype.trim": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz", - "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==", + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", + "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.0", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -34701,28 +40578,33 @@ } }, "node_modules/string.prototype.trimend": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz", - "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", + "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/string.prototype.trimstart": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz", - "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -34835,6 +40717,14 @@ "url": "https://github.com/sponsors/Borewit" } }, + "node_modules/structured-headers": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/structured-headers/-/structured-headers-0.4.1.tgz", + "integrity": "sha512-0MP/Cxx5SzeeZ10p/bZI0S6MpgD+yxAhi1BOQ34jgnMXsCq3j1t6tQnZu+KdlL7dvJTLT3g9xN8tl10TqgFMcg==", + "dev": true, + "license": "MIT", + "peer": true + }, "node_modules/style-loader": { "version": "2.0.0", "license": "MIT", @@ -34890,6 +40780,175 @@ "postcss": "^8.2.15" } }, + "node_modules/sucrase": { + "version": "3.35.0", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", + "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "glob": "^10.3.10", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/sucrase/node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/sucrase/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/sucrase/node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/sucrase/node_modules/foreground-child": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", + "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/sucrase/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/sucrase/node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dev": true, + "license": "BlueOak-1.0.0", + "peer": true, + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/sucrase/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/sucrase/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "peer": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/sucrase/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", + "peer": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/sudo-prompt": { + "version": "8.2.5", + "resolved": "https://registry.npmjs.org/sudo-prompt/-/sudo-prompt-8.2.5.tgz", + "integrity": "sha512-rlBo3HU/1zAJUrkY6jNxDOC9eVYliG6nS4JA8u8KAshITd07tafMc/Br7xQwCSseXwJ2iCcHCE8SNWX3q8Z+kw==", + "dev": true, + "license": "MIT", + "peer": true + }, "node_modules/supports-color": { "version": "5.5.0", "license": "MIT", @@ -35036,7 +41095,7 @@ }, "node_modules/table": { "version": "6.8.0", - "dev": true, + "devOptional": true, "license": "BSD-3-Clause", "dependencies": { "ajv": "^8.0.1", @@ -35051,7 +41110,7 @@ }, "node_modules/table/node_modules/ajv": { "version": "8.11.0", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", @@ -35066,7 +41125,7 @@ }, "node_modules/table/node_modules/json-schema-traverse": { "version": "1.0.0", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/tapable": { @@ -35168,6 +41227,16 @@ "node": ">=8" } }, + "node_modules/tempy/node_modules/type-fest": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.3.1.tgz", + "integrity": "sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=6" + } + }, "node_modules/terminal-link": { "version": "2.1.1", "dev": true, @@ -35231,17 +41300,6 @@ } } }, - "node_modules/terser-webpack-plugin/node_modules/acorn": { - "version": "8.11.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", - "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/terser-webpack-plugin/node_modules/schema-utils": { "version": "3.1.1", "license": "MIT", @@ -35298,9 +41356,34 @@ }, "node_modules/text-table": { "version": "0.2.0", - "dev": true, + "devOptional": true, "license": "MIT" }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, "node_modules/throat": { "version": "6.0.1", "dev": true, @@ -35367,8 +41450,7 @@ "node_modules/tiny-invariant": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.1.tgz", - "integrity": "sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw==", - "dev": true + "integrity": "sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw==" }, "node_modules/tiny-warning": { "version": "1.0.3", @@ -35425,13 +41507,6 @@ "version": "1.1.1", "license": "MIT" }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, "node_modules/to-object-path": { "version": "0.3.0", "license": "MIT", @@ -35474,6 +41549,8 @@ }, "node_modules/to-regex-range": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "license": "MIT", "dependencies": { "is-number": "^7.0.0" @@ -35533,6 +41610,25 @@ "dev": true, "license": "MIT" }, + "node_modules/traverse": { + "version": "0.6.10", + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.10.tgz", + "integrity": "sha512-hN4uFRxbK+PX56DxYiGHsTn2dME3TVr9vbNqlQGcGcPhJAn+tdP126iA+TArMpI4YSgnTkMWyoLl5bf81Hi5TA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "gopd": "^1.0.1", + "typedarray.prototype.slice": "^1.0.3", + "which-typed-array": "^1.1.15" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/trim": { "version": "0.0.1", "dev": true @@ -35597,6 +41693,14 @@ "node": ">=6.10" } }, + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", + "dev": true, + "license": "Apache-2.0", + "peer": true + }, "node_modules/ts-jest": { "version": "27.1.5", "dev": true, @@ -36038,12 +42142,16 @@ } }, "node_modules/type-fest": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.3.1.tgz", - "integrity": "sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ==", + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", + "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { - "node": ">=6" + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/type-is": { @@ -36058,29 +42166,32 @@ } }, "node_modules/typed-array-buffer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", - "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", + "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1", - "is-typed-array": "^1.1.10" + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.13" }, "engines": { "node": ">= 0.4" } }, "node_modules/typed-array-byte-length": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", - "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", + "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", + "call-bind": "^1.0.7", "for-each": "^0.3.3", - "has-proto": "^1.0.1", - "is-typed-array": "^1.1.10" + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" }, "engines": { "node": ">= 0.4" @@ -36090,16 +42201,18 @@ } }, "node_modules/typed-array-byte-offset": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", - "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", + "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", "dev": true, + "license": "MIT", "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", "for-each": "^0.3.3", - "has-proto": "^1.0.1", - "is-typed-array": "^1.1.10" + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" }, "engines": { "node": ">= 0.4" @@ -36109,14 +42222,21 @@ } }, "node_modules/typed-array-length": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", - "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", + "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", + "call-bind": "^1.0.7", "for-each": "^0.3.3", - "is-typed-array": "^1.1.9" + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -36134,9 +42254,30 @@ "is-typedarray": "^1.0.0" } }, + "node_modules/typedarray.prototype.slice": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typedarray.prototype.slice/-/typedarray.prototype.slice-1.0.3.tgz", + "integrity": "sha512-8WbVAQAUlENo1q3c3zZYuy5k9VzBQvp8AX9WOtbvyWlLM1v5JaSRmjubLjzHF4JFtptjH/5c/i95yaElvcjC0A==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.0", + "es-errors": "^1.3.0", + "typed-array-buffer": "^1.0.2", + "typed-array-byte-offset": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/typescript": { "version": "4.7.4", - "dev": true, "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", @@ -36241,7 +42382,9 @@ } }, "node_modules/unicode-canonical-property-names-ecmascript": { - "version": "2.0.0", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz", + "integrity": "sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==", "license": "MIT", "engines": { "node": ">=4" @@ -36249,6 +42392,8 @@ }, "node_modules/unicode-match-property-ecmascript": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", "license": "MIT", "dependencies": { "unicode-canonical-property-names-ecmascript": "^2.0.0", @@ -36259,14 +42404,18 @@ } }, "node_modules/unicode-match-property-value-ecmascript": { - "version": "2.0.0", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.0.tgz", + "integrity": "sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==", "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/unicode-property-aliases-ecmascript": { - "version": "2.0.0", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", "license": "MIT", "engines": { "node": ">=4" @@ -36540,9 +42689,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.0.13", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", - "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz", + "integrity": "sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==", "funding": [ { "type": "opencollective", @@ -36557,9 +42706,10 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" + "escalade": "^3.2.0", + "picocolors": "^1.1.0" }, "bin": { "update-browserslist-db": "cli.js" @@ -36737,6 +42887,15 @@ } } }, + "node_modules/use-sync-external-store": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.2.tgz", + "integrity": "sha512-PElTlVMwpblvbNqQ82d2n6RjStvdSoNe9FG28kNfz3WiXilJm4DdNkEzRhCZuIDwY8U08WVihhGR5iRqAwfDiw==", + "license": "MIT", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, "node_modules/util": { "version": "0.11.1", "license": "MIT", @@ -36804,7 +42963,7 @@ }, "node_modules/v8-compile-cache": { "version": "2.3.0", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/v8-to-istanbul": { @@ -36820,6 +42979,13 @@ "node": ">=10.12.0" } }, + "node_modules/valid-url": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/valid-url/-/valid-url-1.0.9.tgz", + "integrity": "sha512-QQDsV8OnSf5Uc30CKSwG9lnhMPe6exHtTXLRYX8uMwKENy640pU+2BgBL0LRbDh/eYRahNCS7aewCx0wf3NYVA==", + "dev": true, + "peer": true + }, "node_modules/validate-npm-package-license": { "version": "3.0.4", "dev": true, @@ -36829,9 +42995,19 @@ "spdx-expression-parse": "^3.0.0" } }, + "node_modules/validate-npm-package-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", + "integrity": "sha512-M6w37eVCMMouJ9V/sdPGnC5H4uDr73/+xdq0FBLO3TFFX1+7wiUY6Es328NN+y43tmY+doUdN9g9J21vqB7iLw==", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "builtins": "^1.0.3" + } + }, "node_modules/value-equal": { "version": "1.0.1", - "dev": true, "license": "MIT" }, "node_modules/vary": { @@ -37562,6 +43738,25 @@ "node": ">=0.10.0" } }, + "node_modules/watchpack-chokidar2/node_modules/fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "deprecated": "Upgrade to fsevents v2 to mitigate potential security issues", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "dependencies": { + "bindings": "^1.5.0", + "nan": "^2.12.1" + }, + "engines": { + "node": ">= 4.0" + } + }, "node_modules/watchpack-chokidar2/node_modules/glob-parent": { "version": "3.1.0", "license": "ISC", @@ -37683,6 +43878,17 @@ "minimalistic-assert": "^1.0.0" } }, + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "defaults": "^1.0.3" + } + }, "node_modules/web-namespaces": { "version": "1.1.4", "dev": true, @@ -37773,17 +43979,6 @@ "node": ">= 10.13.0" } }, - "node_modules/webpack-bundle-analyzer/node_modules/acorn": { - "version": "8.8.0", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/webpack-bundle-analyzer/node_modules/acorn-walk": { "version": "8.2.0", "dev": true, @@ -38178,6 +44373,26 @@ "node": ">=0.10.0" } }, + "node_modules/webpack-dev-server/node_modules/fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "deprecated": "Upgrade to fsevents v2 to mitigate potential security issues", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "dependencies": { + "bindings": "^1.5.0", + "nan": "^2.12.1" + }, + "engines": { + "node": ">= 4.0" + } + }, "node_modules/webpack-dev-server/node_modules/glob-parent": { "version": "3.1.0", "dev": true, @@ -38628,16 +44843,6 @@ "@xtuc/long": "4.2.2" } }, - "node_modules/webpack/node_modules/acorn": { - "version": "8.8.0", - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/webpack/node_modules/enhanced-resolve": { "version": "5.10.0", "license": "MIT", @@ -38785,7 +44990,6 @@ "url": "https://github.com/sponsors/ljharb" } }, -<<<<<<< HEAD "node_modules/which-builtin-type": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.3.tgz", @@ -38818,8 +45022,6 @@ "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", "dev": true }, -======= ->>>>>>> 0da2c28 (adds unit test for utility functions created) "node_modules/which-collection": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", @@ -38841,35 +45043,17 @@ "license": "ISC" }, "node_modules/which-typed-array": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.13.tgz", - "integrity": "sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==", - "dev": true, - "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.4", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-typed-array": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.13.tgz", - "integrity": "sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==", + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", + "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", "dev": true, + "license": "MIT", "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.4", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -38905,9 +45089,17 @@ "dev": true, "license": "MIT" }, + "node_modules/wonka": { + "version": "4.0.15", + "resolved": "https://registry.npmjs.org/wonka/-/wonka-4.0.15.tgz", + "integrity": "sha512-U0IUQHKXXn6PFo9nqsHphVCE5m3IntqZNB9Jjn7EB1lrR7YTDY3YWgFvEvwniTzXSvOH/XMzAZaIfJF/LvHYXg==", + "dev": true, + "license": "MIT", + "peer": true + }, "node_modules/word-wrap": { "version": "1.2.3", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -39045,6 +45237,19 @@ "version": "1.0.2", "license": "ISC" }, + "node_modules/write-file-atomic": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", + "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" + } + }, "node_modules/ws": { "version": "7.5.9", "license": "MIT", @@ -39075,11 +45280,74 @@ "default-browser-id": "^1.0.4" } }, + "node_modules/xcode": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/xcode/-/xcode-3.0.1.tgz", + "integrity": "sha512-kCz5k7J7XbJtjABOvkc5lJmkiDh8VhjVCGNiqdKCscmVpdVUpEAyXv1xmCLkQJ5dsHqx3IPO4XW+NTDhU/fatA==", + "dev": true, + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "simple-plist": "^1.1.0", + "uuid": "^7.0.3" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/xcode/node_modules/uuid": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-7.0.3.tgz", + "integrity": "sha512-DPSke0pXhTZgoF/d+WSt2QaKMCFSfx7QegxEWT+JOuHF5aWrKEn0G+ztjuJg/gG8/ItK+rbPCD/yNv8yyih6Cg==", + "dev": true, + "license": "MIT", + "peer": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, "node_modules/xml-name-validator": { "version": "3.0.0", "dev": true, "license": "Apache-2.0" }, + "node_modules/xml2js": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.6.0.tgz", + "integrity": "sha512-eLTh0kA8uHceqesPqSE+VvO1CDDJWMwlQfB6LuN6T8w6MaDJ8Txm8P7s5cHD0miF0V+GGTZrDQfxPZQVsur33w==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/xml2js/node_modules/xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/xmlbuilder": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-14.0.0.tgz", + "integrity": "sha512-ts+B2rSe4fIckR6iquDjsKbQFK2NlUk6iG5nf14mDEyldgoc2nEKZ3jZWMPTxGQwVgToSjt6VGIho1H8/fNFTg==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8.0" + } + }, "node_modules/xmlchars": { "version": "2.2.0", "dev": true, diff --git a/package.json b/package.json index e50652b4..f9f5ac0b 100644 --- a/package.json +++ b/package.json @@ -98,12 +98,13 @@ "@kubernetes/client-node": "^0.16.3", "@material-ui/core": "^4.12.4", "@patternfly/patternfly": "^5.0.4", - "@patternfly/react-code-editor": "^5.0.1", "@patternfly/react-charts": "^7.0.1", + "@patternfly/react-code-editor": "^5.0.1", "@patternfly/react-core": "^5.0.1", "@patternfly/react-icons": "^5.0.1", "@patternfly/react-styles": "^5.0.1", "@patternfly/react-table": "^5.0.1 ", + "@reduxjs/toolkit": "^2.3.0", "@storybook/builder-webpack5": "^6.2.9", "@types/minipass": "^3.3.5", "algebra.js": "^0.2.6", @@ -135,8 +136,10 @@ "react-markdown": "^8.0.2", "react-mathjax2": "^0.0.2", "react-monaco-editor": "^0.41.2", + "react-redux": "^9.1.2", "react-router-last-location": "^2.0.1", "react-tinder-card": "^1.6.2", + "redux-logger": "^3.0.6", "resolve": "^1.22.6", "sirv-cli": "^1.0.12", "tts-loader": "^0.3.0", diff --git a/src/app/Analytics/LocalMonitoring/ClusterDataTable.tsx b/src/app/Analytics/LocalMonitoring/ClusterDataTable.tsx index b3f06e3a..f8d906ed 100644 --- a/src/app/Analytics/LocalMonitoring/ClusterDataTable.tsx +++ b/src/app/Analytics/LocalMonitoring/ClusterDataTable.tsx @@ -15,6 +15,14 @@ import { Link, useLocation } from 'react-router-dom'; import { getClusterMetadataURL } from '@app/CentralConfig'; import { PlusIcon } from '@patternfly/react-icons'; +import { getClusterMetaData } from '@actions/DataSourceActionCreator'; +import { useDispatch, useSelector } from 'react-redux'; + +interface LocationState { + cluster: string; + datasource: string; +} + interface Container { container_name: string; container_image_name: string; @@ -31,19 +39,12 @@ interface Namespace { workloads?: Record; } -interface Cluster { +interface ClusterDetails { cluster_name: string; namespaces: Record; } -interface ClusterGroup { - datasource_name: string; - clusters: Record; -} -interface ApiData { - datasources: Record; -} interface TableData { containerName: string; @@ -64,61 +65,51 @@ interface TableData { */ -const ClusterDataTable = (props: { datasource, clustername }) => { - const [clusterData, setClusterData] = useState(null); - const [namespaceData, setNamespaceData] = useState([]); - - const datasource = props.datasource; - const cluster = props.clustername; +interface ClusterDataTableProps { + dataSourceName: string; + clusterName: string; +} - const fetchCluster = async () => { - const response = await fetch(getClusterMetadataURL(datasource, cluster)); - const data = await response.json(); - setClusterData(data); - setNamespaceData(data.datasources[datasource].clusters[cluster]); - }; +const ClusterDataTable: React.FC = ({ dataSourceName, clusterName }) => { + const dispatch = useDispatch() + const dataSource: any = useSelector(state => state.dataSource) + useEffect(() => { - try { - fetchCluster(); - } catch { - console.log('Clusters get URL not working'); - } - }, []); + ( async () => + await dispatch(getClusterMetaData(dataSourceName, clusterName)) + )() +}, [dispatch]); + + let clusterDetials: ClusterDetails | undefined; + if(dataSource.clusterMetaData.hasOwnProperty(`${dataSourceName}-${clusterName}`)){ + clusterDetials = dataSource.clusterMetaData[`${dataSourceName}-${clusterName}`] + } - function extractTableData(apiData: ApiData): TableData[] { + function extractTableData(clusterDetails: ClusterDetails): TableData[] { const tableData: TableData[] = []; - - if (apiData && apiData.datasources) { - for (const clusterGroup of Object.values(apiData.datasources)) { - for (const cluster of Object.values(clusterGroup.clusters)) { - for (const [namespaceName, namespace] of Object.entries(cluster.namespaces)) { - if (!namespace.workloads) continue; - - for (const [workloadName, workload] of Object.entries(namespace.workloads)) { - if (!workload.containers) continue; - - for (const [_, container] of Object.entries(workload.containers)) { - tableData.push({ - containerName: container.container_name, - containerImageName: container.container_image_name, - projectName: namespaceName, - workloadName: workload.workload_name, - workloadType: workload.workload_type, - clusterName: cluster.cluster_name - }); - } + for (const [namespaceName, namespace] of Object.entries(clusterDetails.namespaces)) { + if (!namespace.workloads) continue; + for (const [workloadName, workload] of Object.entries(namespace.workloads)) { + if (!workload.containers) continue; + for (const [_, container] of Object.entries(workload.containers)) { + tableData.push({ + containerName: container.container_name, + containerImageName: container.container_image_name, + projectName: namespaceName, + workloadName: workload.workload_name, + workloadType: workload.workload_type, + clusterName: clusterName + }); } } - } - } } return tableData; } - const tableData = clusterData ? extractTableData(clusterData) : []; - + const tableData: TableData[] | undefined = clusterDetials !== undefined ? extractTableData(clusterDetials): [] + return ( Cluster Specific Details @@ -156,7 +147,7 @@ const ClusterDataTable = (props: { datasource, clustername }) => { workloadType: row_data?.workloadType, clusterName: row_data?.clusterName, containerImageName: row_data?.containerImageName, - datasourceName: props.datasource + datasourceName: dataSourceName } }} > diff --git a/src/app/Analytics/LocalMonitoring/ClusterGroupTables.tsx b/src/app/Analytics/LocalMonitoring/ClusterGroupTables.tsx index 76d243ed..81529376 100644 --- a/src/app/Analytics/LocalMonitoring/ClusterGroupTables.tsx +++ b/src/app/Analytics/LocalMonitoring/ClusterGroupTables.tsx @@ -1,10 +1,9 @@ import { Button, PageSection, PageSectionVariants } from '@patternfly/react-core'; import { Table, Thead, Tr, Th, Tbody, Td } from '@patternfly/react-table'; import React, { useEffect, useState } from 'react'; -import { useLocation } from 'react-router-dom'; -import { getDatasourceMetadataURL } from '@app/CentralConfig'; -import { Link } from 'react-router-dom'; import { ClusterDataTable } from './ClusterDataTable'; +import { saveSelectedClusterName } from '@reducers/DataSourceReducers'; +import { useDispatch, useSelector } from 'react-redux'; interface DatasourceDetail { clusters: { [key: string]: { cluster_name: string } }; } @@ -23,45 +22,33 @@ interface LocationState { */ -const ClusterGroupTables = (props: { clusterGroupData; dsname }) => { - const [clusterSpecificData, setClusterSpecificData] = useState([]); - const [showComponent, setShowComponent] = useState(false); - const [datasourcesData, setDatasourcesData] = useState(null); - const [showClusterTable, setShowClusterTable] = useState(false); - const [selectedClusterName, setSelectedClusterName] = useState(null); +const ClusterGroupTables = ({ clusterGroupData, dataSourceName }) => { + const dispatch = useDispatch() + const dataSourceSelector: any = useSelector(state => state.dataSource) + const [selectedClusterName, setSelectedClusterName] = useState(dataSourceSelector.selectedClusterName || ""); - const datasource_name = props.dsname; - - // calling get api with parameter ds - const fetchDatasources = async () => { - const response = await fetch(getDatasourceMetadataURL(datasource_name)); - const data = await response.json(); - setDatasourcesData(data); - }; - - useEffect(() => { - try { - fetchDatasources(); - } catch { - console.log('Datasources get URL not working'); + let clusterRowData: any = []; + if (typeof clusterGroupData === 'object' && clusterGroupData !== null) { + if (clusterGroupData.hasOwnProperty(dataSourceName)) { + const clustersData = clusterGroupData[dataSourceName].clusters; + clusterRowData = Object.keys(clustersData).map(clusterKey => ({ + groupName: dataSourceName, + clusterName: clustersData[clusterKey].cluster_name + })) } - }, []); + } - const cluster_row_data = Object.entries(datasourcesData?.datasources || {}).flatMap(([groupName, groupDetail]) => { - const clusters = (groupDetail as any).clusters || {}; - return Object.keys(clusters).map((clusterKey) => ({ - groupName: groupName, - clusterName: clusters[clusterKey].cluster_name - })); - }); + useEffect(() => { + setSelectedClusterName(dataSourceSelector.selectedClusterName) + }, [dataSourceSelector.selectedClusterName]) const handleButtonClick = (clusterName: string) => { - setSelectedClusterName(clusterName); - setShowClusterTable(true); + dispatch(saveSelectedClusterName({selectedClusterName: clusterName})) }; return ( + @@ -70,12 +57,11 @@ const ClusterGroupTables = (props: { clusterGroupData; dsname }) => { - {cluster_row_data.map((row, index) => ( + {clusterRowData.map((row, index) => ( @@ -83,7 +69,8 @@ const ClusterGroupTables = (props: { clusterGroupData; dsname }) => { ))}
{row.groupName}
- {showClusterTable && } + {selectedClusterName.length > 0 && } +
) }; diff --git a/src/app/Analytics/LocalMonitoring/DatasourceTable.tsx b/src/app/Analytics/LocalMonitoring/DatasourceTable.tsx index 580cf259..8ca3538d 100644 --- a/src/app/Analytics/LocalMonitoring/DatasourceTable.tsx +++ b/src/app/Analytics/LocalMonitoring/DatasourceTable.tsx @@ -1,8 +1,9 @@ import { Button, OverflowMenu, OverflowMenuContent, OverflowMenuGroup, OverflowMenuItem } from '@patternfly/react-core'; import { Table, Thead, Tr, Th, Tbody, Td } from '@patternfly/react-table'; -import React, { useState } from 'react'; -import { importDataSourcesMetadataURL } from '@app/CentralConfig'; +import React, { useEffect, useState } from 'react'; import { ClusterGroupTables } from './ClusterGroupTables'; +import { getDataSourceMetaData } from '@actions/DataSourceActionCreator'; +import { useDispatch, useSelector } from 'react-redux'; /* This is the Datasources table which gets display, takes data from fetchDS api call @@ -13,45 +14,35 @@ import { ClusterGroupTables } from './ClusterGroupTables'; */ -const DatasourceTable = (props: { fetchDatasourcesData }) => { - const [clusterGroupData, setClusteGroupData] = useState(); +const DatasourceTable = ({ dataSourcesData, ...props }) => { + const dispatch = useDispatch() + const dataSourceSelector: any = useSelector(state => state.dataSource) + const [expandedRows, setExpandedRows] = useState({}); const [buttonStatus, setButtonStatus] = useState(false); - const [isComponentVisible, setIsComponentVisible] = useState(false); - const [dsname, setdsname] = useState(''); + const [dataSourceName, setDataSourceName] = useState(dataSourceSelector.selectedDataSource || "") + useEffect(() =>{ + setDataSourceName(dataSourceSelector.selectedDataSource) + },[dataSourceSelector.selectedDataSource] ) + const handleImportMetadata = async (dataSourceName: string) => { setButtonStatus(true); - setdsname(dataSourceName); - const payload = { - version: 'v1.0', - datasource_name: dataSourceName - }; - try { - const response = await fetch(importDataSourcesMetadataURL(), { - method: 'POST', - headers: { - 'Content-Type': 'application/json' - }, - body: JSON.stringify(payload) - }); - - const data = await response.json(); - setClusteGroupData(data); - setIsComponentVisible(true); - } catch (error) { - console.error('Error during data import:', error); - } + setDataSourceName(dataSourceName); + await dispatch(getDataSourceMetaData(dataSourceName)); setButtonStatus(false); }; - const toggleRowExpanded = (index) => { + const toggleRowExpanded = (index, dataSourceName: string) => { + setDataSourceName(dataSourceName) setExpandedRows((prevState) => ({ ...prevState, [index]: !prevState[index] })); }; + const dataLoaded = Object.keys(dataSourceSelector.dataSourceMetaData).length > 0 + return ( @@ -63,17 +54,18 @@ const DatasourceTable = (props: { fetchDatasourcesData }) => { - {props.fetchDatasourcesData?.datasources && props.fetchDatasourcesData.datasources.map((source, index) => ( + + {dataSourcesData.map((source, index) => (
toggleRowExpanded(index) + onToggle: () => toggleRowExpanded(index, source.name) }} /> -
{clusterGroupData ? source.name : source.name}
+
{dataLoaded ? source.name : source.name}
{expandedRows[index] && (
URL: {source.url}
@@ -95,7 +87,7 @@ const DatasourceTable = (props: { fetchDatasourcesData }) => { isDisabled={buttonStatus} onClick={() => handleImportMetadata(source.name)} > - Import Metadata{' '} + Import Metadata @@ -106,7 +98,8 @@ const DatasourceTable = (props: { fetchDatasourcesData }) => { ))}
- {isComponentVisible && } + + {dataLoaded && dataSourceName.length > 0 && }
); }; diff --git a/src/app/Analytics/LocalMonitoring/LocalMonitoring.tsx b/src/app/Analytics/LocalMonitoring/LocalMonitoring.tsx index 4fa44d4a..d15ee635 100644 --- a/src/app/Analytics/LocalMonitoring/LocalMonitoring.tsx +++ b/src/app/Analytics/LocalMonitoring/LocalMonitoring.tsx @@ -5,9 +5,10 @@ import { Text, TextVariants } from '@patternfly/react-core'; -import React, { useEffect, useState } from 'react'; -import { getDatasourcesURL } from '@app/CentralConfig'; +import React, { useEffect } from 'react'; import { DatasourceTable } from './DatasourceTable'; +import { useDispatch, useSelector } from 'react-redux'; +import { getListOfDataSources } from '@actions/DataSourceActionCreator'; /* This is the first page of Local Monitoring use case on the ui @@ -17,30 +18,21 @@ import { DatasourceTable } from './DatasourceTable'; */ const LocalMonitoring = () => { - const [datasourcesData, setDatasourcesData] = useState(); - const list_datasources_url: string = getDatasourcesURL(); - - const fetchDatasources = async () => { - const response = await fetch(list_datasources_url); - const data = await response.json(); - setDatasourcesData(data); - }; + const dataSource: any = useSelector(state => state.dataSource) + const dispatch = useDispatch() useEffect(() => { - try { - fetchDatasources(); - } catch { - console.log('Datasources URL not working'); - } - }, []); - + ( async() => await dispatch(getListOfDataSources()) )() + }, [dispatch]); + return ( Local Monitoring
- {datasourcesData && } + + {dataSource.datasources.length > 0 && }
); }; diff --git a/src/index.tsx b/src/index.tsx index 4fcc8ab2..c6409acb 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -4,6 +4,10 @@ import App from '@app/index'; import '@patternfly/react-core/dist/styles/base.css'; import { setDiagnosticsOptions } from 'monaco-yaml'; +import * as monaco from 'monaco-editor'; +import store from './store/store'; +import { Provider } from "react-redux"; + setDiagnosticsOptions({ enableSchemaRequest: true, hover: true, @@ -27,6 +31,10 @@ if (process.env.NODE_ENV !== 'production') { axe(React, ReactDOM, 1000, config); } -const rootElement = document.getElementById('root') as HTMLElement; -const root = ReactDOM.createRoot(rootElement); -root.render(); + +const root = ReactDOM.createRoot(document.getElementById('root')); +root.render( + + + +); diff --git a/src/store/actions/DataSourceActionCreator.tsx b/src/store/actions/DataSourceActionCreator.tsx new file mode 100644 index 00000000..e2201d40 --- /dev/null +++ b/src/store/actions/DataSourceActionCreator.tsx @@ -0,0 +1,52 @@ +import { getClusterMetadataURL, getDatasourcesURL, importDataSourcesMetadataURL } from "@app/CentralConfig"; +import { loading, disableLoading, errorCall, availabeDataSources, dataSourceMetadata, setClusterMetaData } from "@reducers/DataSourceReducers"; + + +export const getListOfDataSources = () => async dispatch => { + dispatch(loading()); + try { + const response = await fetch(getDatasourcesURL()); + const data = await response.json(); + dispatch(availabeDataSources({datasources: data.datasources})) + } catch (error: any) { + dispatch(errorCall({error: error.message, error_method: "getListOfDataSources"})) + } + dispatch(disableLoading()) +} + +export const getDataSourceMetaData = (dataSourceName: string) => async dispatch => { + dispatch(loading()); + try { + const payload = { + version: 'v1.0', + datasource_name: dataSourceName + }; + const url = `${importDataSourcesMetadataURL()}?datasource=${dataSourceName}` + const response = await fetch(url, { + method: 'GET', + headers: { + 'Content-Type': 'application/json' + }, + }); + + const data = await response.json(); + dispatch(dataSourceMetadata({dataSourceMetaData: data.datasources, selectedDataSource: dataSourceName})) + } catch (error: any) { + dispatch(errorCall({error: error.message, error_method: "getDataSourceMetaData"})) + } + dispatch(disableLoading()) +} + +export const getClusterMetaData = (datasourceName: string, clusterName: string) => async dispatch => { + dispatch(loading()); + try { + const response = await fetch(getClusterMetadataURL(datasourceName, clusterName)) + const data = await response.json(); + dispatch(setClusterMetaData({ + [`${datasourceName}-${clusterName}`]: data.datasources[datasourceName].clusters[clusterName] + })) + } catch (error: any) { + dispatch(errorCall({error: error.message, error_method: "getClusterMetaData"})) + } + dispatch(disableLoading()) +} diff --git a/src/store/actions/ExperimentActionCreator.tsx b/src/store/actions/ExperimentActionCreator.tsx new file mode 100644 index 00000000..dcc5754a --- /dev/null +++ b/src/store/actions/ExperimentActionCreator.tsx @@ -0,0 +1,54 @@ +// Action Creators + +import { getListExperimentsURL, getListExperimentsURLWithParams, generateRecommendationsURL, getRecommendationsURLWithParams } from "@app/CentralConfig"; +import { loading, errorCall, disableLoading, listOfexperiments, experimentList, listRecommendations, recommendation } from "@reducers/ExperimentReducer"; +import { __setFunctionName } from "tslib"; + +export const getListOfExperiments = () => async dispatch => { + dispatch(loading()); + try { + const response = await fetch(getListExperimentsURL()) + const data = await response.json(); + dispatch(listOfexperiments({listOfExperiments: data})) + } catch (error: any) { + dispatch(errorCall({error: error.message, error_method: "getListOfExperiments"})) + } + dispatch(disableLoading()) +} + +export const getExperimentData = (value: string) => async dispatch => { + dispatch(loading()); + try { + const response = await fetch(getListExperimentsURLWithParams(value)) + const data = await response.json(); + dispatch(experimentList({experiment: data})) + } catch (error: any) { + dispatch(errorCall({error: error.message, error_method: "getExperimentData"})) + } + dispatch(disableLoading()) +} + + +export const generateRecommendations = (name: string) => async dispatch => { + dispatch(loading()) + try { + const response = await fetch(generateRecommendationsURL(name)) + const data = await response.json(); + dispatch(listRecommendations({listRecommendations: data})) + } catch (error: any) { + dispatch(errorCall({error: error.message, error_method: "generateReommendations"})) + } + dispatch(disableLoading()) +} + +export const generateRecommendationsWithParams = (name: string, latest: string) => async dispatch => { + dispatch(loading()) + try { + const response = await fetch(getRecommendationsURLWithParams(name, latest)) + const data = await response.json(); + dispatch(recommendation({recommendation: data})) + } catch (error: any) { + dispatch(errorCall({error: error.message, error_method: "generateRecommendationsWithParams"})) + } + dispatch(disableLoading()) +} \ No newline at end of file diff --git a/src/store/reducers/DataSourceReducers.tsx b/src/store/reducers/DataSourceReducers.tsx new file mode 100644 index 00000000..f39a2e9e --- /dev/null +++ b/src/store/reducers/DataSourceReducers.tsx @@ -0,0 +1,47 @@ +import { createSlice } from "@reduxjs/toolkit"; + +const initialState = { + loading: false, + error: "", + error_method: "", + datasources: [], + dataSourceMetaData: {}, + clusterMetaData: {}, + selectedDataSource: "", + selectedClusterName: "" +} + +const dataSourceSlicer = createSlice({ + name: 'dataSource', + initialState, + reducers: { + loading : (state) => { + state.loading = true; + }, + availabeDataSources: (state, action) => { + state.datasources = action.payload.datasources + }, + dataSourceMetadata: (state, action) => { + state.dataSourceMetaData = action.payload.dataSourceMetaData + state.selectedDataSource = action.payload.selectedDataSource + }, + errorCall: (state, action) => { + state.error = action.payload.error + state.error_method = action.payload.error_method + }, + disableLoading: state => { + state.loading = false; + }, + setClusterMetaData: (state, action) => { + Object.assign(state.clusterMetaData, action.payload) + }, + saveSelectedClusterName: (state, action) => { + console.log(action.payload) + state.selectedClusterName = action.payload.selectedClusterName + } + + } +}) + +export const { loading, disableLoading, errorCall, dataSourceMetadata, availabeDataSources, setClusterMetaData, saveSelectedClusterName } = dataSourceSlicer.actions +export default dataSourceSlicer \ No newline at end of file diff --git a/src/store/reducers/ExperimentReducer.tsx b/src/store/reducers/ExperimentReducer.tsx new file mode 100644 index 00000000..9b8efd3d --- /dev/null +++ b/src/store/reducers/ExperimentReducer.tsx @@ -0,0 +1,56 @@ +import { createSlice } from "@reduxjs/toolkit"; + +export interface ExperimentsInitialState { + error: string, + error_method: string, + loading: boolean, + listOfExperiments: any, + experiment: any, + listRecommendations: any, + recommendation: any +} + +const initialState: ExperimentsInitialState = { + error: "", + error_method: "", + loading: false, + listOfExperiments: [], + experiment: [], + listRecommendations: [], + recommendation: [] +} + + +// Slicers + +const experimentSlicer = createSlice({ + name: 'experiments', + initialState, + reducers: { + loading : (state) => { + state.loading = true; + }, + disableLoading: state => { + state.loading = false; + }, + listOfexperiments: (state, action) => { + state.listOfExperiments = action.payload.listOfExperiments + }, + experimentList: (state, action) => { + state.experiment = action.payload.experiment + }, + listRecommendations: (state, action) => { + state.listRecommendations = action.payload.listRecommendations + }, + recommendation: (state, action) => { + state.recommendation = action.payload.recommendation + }, + errorCall: (state, action) => { + state.error = action.payload.error + state.error_method = action.payload.error_method + } + } +}) + +export const { loading, disableLoading, errorCall, listOfexperiments, experimentList, listRecommendations, recommendation } = experimentSlicer.actions +export default experimentSlicer \ No newline at end of file diff --git a/src/store/reducers/index.tsx b/src/store/reducers/index.tsx new file mode 100644 index 00000000..484ba4e2 --- /dev/null +++ b/src/store/reducers/index.tsx @@ -0,0 +1,8 @@ +import { combineSlices } from "@reduxjs/toolkit"; + +import experimentSlicer from '@reducers/ExperimentReducer' +import dataSourceSlicer from "./DataSourceReducers"; + +export const rootReducer = combineSlices(experimentSlicer, dataSourceSlicer) +export type RootState = ReturnType; + diff --git a/src/store/store.tsx b/src/store/store.tsx new file mode 100644 index 00000000..916747b2 --- /dev/null +++ b/src/store/store.tsx @@ -0,0 +1,15 @@ +import { configureStore } from "@reduxjs/toolkit"; +import { createLogger } from "redux-logger"; +import {rootReducer} from "@reducers/index"; + +const middleware: any = []; +middleware.push(createLogger()); +const enhancers = [...middleware]; + +export default configureStore({ + reducer: rootReducer, + middleware: (getDefaultMiddleware) => + window.location.hostname === "localhost" + ? getDefaultMiddleware().concat(enhancers) + : getDefaultMiddleware(), +}); \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json index 8c4954a8..b54d23d9 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -21,6 +21,8 @@ "strict": true, "paths": { "@app/*": ["src/app/*"], + "@reducers/*": ["src/store/reducers/*"], + "@actions/*": ["src/store/actions/*"], "@assets/*": ["node_modules/@patternfly/react-core/dist/styles/assets/*"] }, "importHelpers": true, From aa8df541ecce52b45c5d70819a3bc7fb4c2a2263 Mon Sep 17 00:00:00 2001 From: bhanvimenghani Date: Tue, 26 Nov 2024 19:52:31 +0530 Subject: [PATCH 17/31] updates readme --- README.md | 51 ++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 40 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index e4056d30..b2a3743b 100644 --- a/README.md +++ b/README.md @@ -4,22 +4,51 @@ This repository contains the code for Kruize user interface. The objective behin This application is built using [Patternfly and React](https://www.patternfly.org/v4/get-started/developers) -## Before You Start +## Prerequisites -Kruize UI needs Kruize server running locally. You can setup Kruize [from here](https://github.com/kruize/kruize-demos/tree/main/remote_monitoring_demo). +1. **Kruize Server** + The Kruize UI requires a running instance of the Kruize server. You can set up Kruize using [Kruize Demos](https://github.com/kruize/kruize-demos/tree/main/monitoring/local_monitoring). The setup will also provide you with a link to access the UI. + +2. **Node.js and npm** + Make sure you have the latest stable versions of [`Node.js`](https://nodejs.org/en/) and [`npm`](https://www.npmjs.com/) installed. Check supported versions [here](https://nodejs.org/en/about/releases/). -Also, make sure you have [`Node.js`](https://nodejs.org/en/) and [`npm`](https://www.npmjs.com/) installed. Check the currently maintained versions at https://nodejs.org/en/about/releases/. ## Quick Start -``` -git clone git@github.com:kruize/kruize-ui.git -cd kruize-ui -npm install -export CLUSTER_IP=$(minikube ip) -export KRUIZE_PORT=$(kubectl -n monitoring get svc kruize --no-headers -o=custom-columns=PORT:.spec.ports[*].nodePort 2>/dev/null) -npm run start:dev -``` +For development purposes we prefer running ui locally on minikube or kind as it helps in debugging the ui code. +> **Note**: The main development branch is `mvp_demo`. Please raise your pull requests to this branch. + +1. Clone the repository: + + ``` + git clone git@github.com:kruize/kruize-ui.git + cd kruize-ui + ``` +2. Install dependencies: + + ``` + npm install + ``` +3. Set the cluster IP: + - For minikube + ``` + export CLUSTER_IP=$(minikube ip) + ``` + - For KIND + ``` + export CLUSTER_IP=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' kind-control-plane) + ``` +4. Export the Kruize port: + + ``` + export KRUIZE_PORT=$(kubectl -n monitoring get svc kruize --no-headers -o=custom-columns=PORT:.spec.ports[*].nodePort 2>/dev/null) + ``` +5. Start the development server: + + ``` + npm run start:dev + ``` + ## Code Origin From 5a76f3116c851c8cd56dc03b18cebb54a6e5c880 Mon Sep 17 00:00:00 2001 From: Shreya Date: Wed, 27 Nov 2024 11:41:23 +0530 Subject: [PATCH 18/31] Rename UsecaseSelection to ExperimentSelection.tsx --- .../RemoteMonitoring/ExperimentSelection.tsx | 189 ++++++++++++++++++ .../RemoteMonitoring/Monitoring.tsx | 4 +- 2 files changed, 191 insertions(+), 2 deletions(-) create mode 100644 src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/ExperimentSelection.tsx diff --git a/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/ExperimentSelection.tsx b/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/ExperimentSelection.tsx new file mode 100644 index 00000000..bdc8f37a --- /dev/null +++ b/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/ExperimentSelection.tsx @@ -0,0 +1,189 @@ +import { + Flex, + TextContent, + TextVariants, + FormSelect, + FormSelectOption, + Button, + Text, + Grid, + GridItem, + Alert, + Tooltip, + FlexItem, + AlertGroup, + Level +} from '@patternfly/react-core'; +import React, { useEffect, useState } from 'react'; +import { + generateRecommendationsURL, + getListExperimentsURL, + getListExperimentsURLWithParams, + getRecommendationsURLWithParams +} from '@app/CentralConfig'; +import { SyncAltIcon } from '@patternfly/react-icons'; + + +const ExperimentSelection = (props: { endTimeArray; setEndTimeArray; SREdata; setSREdata; setDisplayRecc; notification; setNotification }) => { + + const list_experiment_url: string = getListExperimentsURL(); + const [value, setValue] = useState(''); + const [expName, setExpName] = useState(''); + const [expData, setExpData] = useState([]); + const [showFailureAlert, setShowFailureAlert] = useState(); + const [showReccSuccessAlert, setShowReccSuccessAlert] = useState(); + + const alertVariantMap = { + info: 'info', + warning: 'warning', + error: 'danger', + critical: 'danger', + }; + + const fetchData = async () => { + const response = await fetch(list_experiment_url); + const data = await response.json(); + const arr: any = ['Select Experiment Name']; + + data.map((element, index) => { + arr.push(element.experiment_name); + }); + setExpData(arr.sort()); + }; + useEffect(() => { + fetchData(); + }, []); + + const onChangeExpName = async (value: string) => { + setValue(''); + setExpName(''); + props.setSREdata({ + experiment_name: '', + containerArray: [], + namespace: '', + name: '', + type: '', + cluster_name: '', + container_name: '', + experiment_type: '' + }); + props.setEndTimeArray([]); + props.setDisplayRecc(false); + + setValue(value); + setExpName(value); + + props.setSREdata({ ...{ ...props.SREdata }, experiment_name: value }); + sessionStorage.setItem('Experiment Name', value); + const response = await fetch(getListExperimentsURLWithParams(value)); + const data = await response.json(); + handleClick(value); + }; + + const handleClick = async (exp_name_value) => { + try { + + const list_recommendations_url: string = getRecommendationsURLWithParams(exp_name_value, 'false'); + const data = await (await fetch(list_recommendations_url)).json(); + var namespace = data[0].kubernetes_objects[0].namespace; + var name = data[0].kubernetes_objects[0].name; + var type = data[0].kubernetes_objects[0].type; + var cluster_name = data[0].cluster_name; + var container_name = data[0].kubernetes_objects[0].containers[0].container_name; + var experiment_type = data[0].experiment_type || 'container'; + var endtime: any[] = []; + endtime = [...Object.keys(data[0].kubernetes_objects[0].containers[0].recommendations.data).sort().reverse()]; + + props.setEndTimeArray(endtime); + + const initialNotifications = data[0].kubernetes_objects[0].containers[0].recommendations.notifications || []; + + props.setNotification({ + level1: initialNotifications + }); + const has111000 = initialNotifications.hasOwnProperty('111000'); + props.setDisplayRecc(has111000); + + var containerArray: any[] = []; + for (var i = 0; i < data[0].kubernetes_objects[0].containers.length; i++) { + containerArray.push(data[0].kubernetes_objects[0].containers[i].container_name); + } + + props.setSREdata({ + ...{ ...props.SREdata }, + containerArray: containerArray, + namespace: namespace, + name: name, + type: type, + cluster_name: cluster_name, + container_name: container_name, + experiment_type: experiment_type + }); + } + catch { + console.log("Execution incompleted."); + } + }; + + const handleGenerateRecommendationClick = async (expName) => { + try { + const response = await fetch(generateRecommendationsURL(expName), { + method: 'POST', + headers: { + 'Content-Type': 'application/json' + } + }); + if (response.ok) { + setShowReccSuccessAlert(true); + setTimeout(() => setShowReccSuccessAlert(false), 3000); + handleClick(expName); + } + } catch (error) { + console.error('Error during data import:', error); + setShowFailureAlert(true); + setTimeout(() => setShowFailureAlert(false), 3000); + } + }; + return ( + <> +
+ {showFailureAlert && + } + { + showReccSuccessAlert && + + } + + + + Experiment Name + + + + + onChangeExpName(value)} + aria-label="FormSelect Input" + > + {expData != null && + expData.map((option, index) => )} + + + + Generate Recommendations
}> + handleGenerateRecommendationClick(expName)} /> + + + + + + + + + + ); +}; + +export { ExperimentSelection }; diff --git a/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/Monitoring.tsx b/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/Monitoring.tsx index e962e25c..9beb22c0 100644 --- a/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/Monitoring.tsx +++ b/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/Monitoring.tsx @@ -11,7 +11,7 @@ import { } from '@patternfly/react-core'; import { useState } from 'react'; import { RecommendationTables } from './RecommendationTables'; -import { UsecaseSelection } from './UsecaseSelection'; +import { ExperimentSelection } from './ExperimentSelection'; const SREdataa = { experiment_name: '', @@ -42,7 +42,7 @@ const Monitoring = () => { Monitoring
- Date: Wed, 27 Nov 2024 11:57:59 +0530 Subject: [PATCH 19/31] Delete UsecaseSelection.tsx under local monitoring --- .../RemoteMonitoring/UsecaseSelection.tsx | 195 ------------------ 1 file changed, 195 deletions(-) delete mode 100644 src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/UsecaseSelection.tsx diff --git a/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/UsecaseSelection.tsx b/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/UsecaseSelection.tsx deleted file mode 100644 index ab568421..00000000 --- a/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/UsecaseSelection.tsx +++ /dev/null @@ -1,195 +0,0 @@ -import { - Flex, - TextContent, - TextVariants, - FormSelect, - FormSelectOption, - Button, - Text, - Grid, - GridItem, - Alert, - Tooltip, - FlexItem, - AlertGroup, - Level -} from '@patternfly/react-core'; -import React, { useEffect, useState } from 'react'; -import { - generateRecommendationsURL, - getListExperimentsURL, - getListExperimentsURLWithParams, - getRecommendationsURLWithParams -} from '@app/CentralConfig'; -import { SyncAltIcon } from '@patternfly/react-icons'; - - -const UsecaseSelection = (props: { endTimeArray; setEndTimeArray; SREdata; setSREdata; setDisplayRecc; notification; setNotification }) => { - - const list_experiment_url: string = getListExperimentsURL(); - const [value, setValue] = useState(''); - const [expName, setExpName] = useState(''); - const [expUsecaseType, setExpUsecaseType] = useState(''); - const [expData, setExpData] = useState([]); - const [showFailureAlert, setShowFailureAlert] = useState(); - const [showReccSuccessAlert, setShowReccSuccessAlert] = useState(); - - const alertVariantMap = { - info: 'info', - warning: 'warning', - error: 'danger', - critical: 'danger', - }; - - const fetchData = async () => { - const response = await fetch(list_experiment_url); - const data = await response.json(); - const arr: any = ['Select Experiment Name']; - - data.forEach((element) => { - if (element.experiment_type === 'container') { - arr.push(element.experiment_name); - } - }); - - setExpData(arr.sort()); - }; - useEffect(() => { - fetchData(); - }, []); - - const onChangeExpName = async (value: string) => { - setValue(''); - setExpName(''); - setExpUsecaseType(''); - props.setSREdata({ - experiment_name: '', - containerArray: [], - namespace: '', - name: '', - type: '', - cluster_name: '', - container_name: '', - experiment_type: '' - }); - props.setEndTimeArray([]); - props.setDisplayRecc(false); - - setValue(value); - setExpName(value); - - props.setSREdata({ ...{ ...props.SREdata }, experiment_name: value }); - sessionStorage.setItem('Experiment Name', value); - const response = await fetch(getListExperimentsURLWithParams(value)); - const data = await response.json(); - const experimentUsecase = data[0].experiment_usecase_type || 'container'; - handleClick(value); - }; - - const handleClick = async (exp_name_value) => { - try { - - const list_recommendations_url: string = getRecommendationsURLWithParams(exp_name_value, 'false'); - const data = await (await fetch(list_recommendations_url)).json(); - var namespace = data[0].kubernetes_objects[0].namespace; - var name = data[0].kubernetes_objects[0].name; - var type = data[0].kubernetes_objects[0].type; - var cluster_name = data[0].cluster_name; - var container_name = data[0].kubernetes_objects[0].containers[0].container_name; - var experiment_type = data[0].experiment_type; - var endtime: any[] = []; - endtime = [...Object.keys(data[0].kubernetes_objects[0].containers[0].recommendations.data).sort().reverse()]; - - props.setEndTimeArray(endtime); - - const initialNotifications = data[0].kubernetes_objects[0].containers[0].recommendations.notifications || []; - - props.setNotification({ - level1: initialNotifications - }); - const has111000 = initialNotifications.hasOwnProperty('111000'); - props.setDisplayRecc(has111000); - - var containerArray: any[] = []; - for (var i = 0; i < data[0].kubernetes_objects[0].containers.length; i++) { - containerArray.push(data[0].kubernetes_objects[0].containers[i].container_name); - } - - props.setSREdata({ - ...{ ...props.SREdata }, - containerArray: containerArray, - namespace: namespace, - name: name, - type: type, - cluster_name: cluster_name, - container_name: container_name, - experiment_type: experiment_type - }); - } - catch { - console.log("Execution incompleted."); - } - }; - - const handleGenerateRecommendationClick = async (expName) => { - try { - const response = await fetch(generateRecommendationsURL(expName), { - method: 'POST', - headers: { - 'Content-Type': 'application/json' - } - }); - if (response.ok) { - setShowReccSuccessAlert(true); - setTimeout(() => setShowReccSuccessAlert(false), 3000); - handleClick(expName); - } - } catch (error) { - console.error('Error during data import:', error); - setShowFailureAlert(true); - setTimeout(() => setShowFailureAlert(false), 3000); - } - }; - return ( - <> -
- {showFailureAlert && - } - { - showReccSuccessAlert && - - } - - - - Experiment Name - - - - - onChangeExpName(value)} - aria-label="FormSelect Input" - > - {expData != null && - expData.map((option, index) => )} - - - - Generate Recommendations
}> - handleGenerateRecommendationClick(expName)} /> - - - - - - - - - - ); -}; - -export { UsecaseSelection }; From 732f5058c1003fefa3c04b26b2f7caa405db06cb Mon Sep 17 00:00:00 2001 From: Shekhar Saxena Date: Wed, 27 Nov 2024 12:17:44 +0530 Subject: [PATCH 20/31] fixing no data issue with boolean check Signed-off-by: Shekhar Saxena --- .../RemoteMonitoring/RecommendationTables.tsx | 32 +++++++++++++------ .../RemoteMonitoring/UsecaseSelection.tsx | 3 +- 2 files changed, 25 insertions(+), 10 deletions(-) diff --git a/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationTables.tsx b/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationTables.tsx index 7ecbc2eb..0dba5efa 100644 --- a/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationTables.tsx +++ b/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationTables.tsx @@ -272,6 +272,9 @@ const RecommendationTables = (props: { ); + // checking if data is present or not + const isDataPresent = !props.notification.level1?.hasOwnProperty('120001'); + return ( <> @@ -292,6 +295,7 @@ const RecommendationTables = (props: { + {isDataPresent && ( @@ -339,7 +343,15 @@ const RecommendationTables = (props: { + )} + {!isDataPresent && ( + + + {props.notification.level1 && renderNotifications(props.notification.level1)} + + + )} {props.notification.level2 && renderNotifications(props.notification.level2.info)} @@ -356,15 +368,17 @@ const RecommendationTables = (props: { - + {isDataPresent && ( + + )} ); diff --git a/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/UsecaseSelection.tsx b/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/UsecaseSelection.tsx index 4419b68b..935c066e 100644 --- a/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/UsecaseSelection.tsx +++ b/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/UsecaseSelection.tsx @@ -112,7 +112,8 @@ const UsecaseSelection = (props: { endTimeArray; setEndTimeArray; SREdata; setSR level1: initialNotifications }); const has111000 = initialNotifications.hasOwnProperty('111000'); - props.setDisplayRecc(has111000); + const has120001 = initialNotifications.hasOwnProperty('120001'); + props.setDisplayRecc(has111000 || has120001); var containerArray: any[] = []; for (var i = 0; i < data[0].kubernetes_objects[0].containers.length; i++) { From 792933f9ae77ca3723825d240236417103d66dcc Mon Sep 17 00:00:00 2001 From: Shekhar Saxena Date: Wed, 27 Nov 2024 12:37:30 +0530 Subject: [PATCH 21/31] adding namespace recommendations Signed-off-by: Shekhar Saxena --- .../WorkloadDetails.tsx | 18 +- .../RemoteMonitoring/RecommendationTables.tsx | 211 ++++++++++++------ .../RemoteMonitoring/UsecaseSelection.tsx | 80 ++++--- 3 files changed, 207 insertions(+), 102 deletions(-) diff --git a/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/WorkloadDetails.tsx b/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/WorkloadDetails.tsx index c087de2a..88ab8ccf 100644 --- a/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/WorkloadDetails.tsx +++ b/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/WorkloadDetails.tsx @@ -7,16 +7,24 @@ export const WorkloadDetails = ({ experimentData }) => { Recommendations - {experimentData.container_name} + {experimentData.container_name ? experimentData.container_name : experimentData.namespace} Cluster name: {experimentData.cluster_name}
Project name: {experimentData.namespace}
- Workload type: {experimentData.type} -
- Workload name: {experimentData.name} -
+ {experimentData.type && ( + <> + Workload type: {experimentData.type} +
+ + )} + {experimentData.name && ( + <> + Workload name: {experimentData.name} +
+ + )} Experiment type: {experimentData.experiment_type}
diff --git a/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationTables.tsx b/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationTables.tsx index 7ecbc2eb..36559fb5 100644 --- a/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationTables.tsx +++ b/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationTables.tsx @@ -23,6 +23,7 @@ import { getRecommendationsURL, getRecommendationsURLWithParams } from '@app/Cen import { TabSection } from './RecommendationComponents/TabSection'; import { WorkloadDetails } from './RecommendationComponents/WorkloadDetails'; import { InfoCircleIcon, ExclamationCircleIcon, ExclamationTriangleIcon } from '@patternfly/react-icons'; +import { container } from 'webpack'; export const alertIconMap = { info: , @@ -128,58 +129,113 @@ const RecommendationTables = (props: { useEffect(() => { const fetchData = async () => { if (endtime && day) { - const response = await fetch(list_recommendations_url); + // const response = await fetch(list_recommendations_url); + + const response = await fetch("https://mocki.io/v1/5bb44f3b-4f26-4dc4-a167-682e8ffed562"); // no data + // const response = await fetch("https://mocki.io/v1/a5bc9f53-1062-45e4-9610-29432931d5bd"); const result = await response.json(); const boxPlot_arr: any = []; const recommended_arr: any = []; const current_arr: any = []; const chartDetailsObject = []; - // current data - result[0].kubernetes_objects[0].containers.map((container, index) => { - const currentDat = container.recommendations?.data[endtime]?.current; - if (currentDat) { - current_arr.push(currentDat); - } - }); - // recommended data - result[0].kubernetes_objects[0].containers.map((container, index) => { - const recommendationDataNewAPI = container.recommendations.data[endtime]?.recommendation_terms[day]; - if (recommendationDataNewAPI) { - recommended_arr.push(recommendationDataNewAPI); - } - }); - //box plot data - const boxPlotData = - result[0].kubernetes_objects[0].containers[0].recommendations.data[endtime]?.recommendation_terms[day]?.plots - ?.plots_data; - if (boxPlotData) { - boxPlot_arr.push(boxPlotData); - } - console.log(boxPlotData); - // all data before a particular time stamp - result[0].kubernetes_objects[0].containers.map((container, index) => { - const allRecommData = container.recommendations.data; - const endTimeSortedKeys = Object.keys(allRecommData).sort(); - - for (const key of endTimeSortedKeys) { - chartDetailsObject[key] = allRecommData[key]; - if (key === endtime) { - break; + // Notifications + var endTimeNotifications: any = []; + // we can ignore displying this notification for now + var termNotifications: any = []; + + if (props.SREdata.experiment_type == "container") { + // current data + result[0].kubernetes_objects[0].containers.map((container, index) => { + const currentDat = container.recommendations?.data[endtime]?.current; + if (currentDat) { + current_arr.push(currentDat); } - } - JSON.stringify(chartDetailsObject); - for (const key in chartDetailsObject) { - const value = chartDetailsObject[key]; + }); - if (key === endtime) { - break; + // recommended data + result[0].kubernetes_objects[0].containers.map((container, index) => { + const recommendationDataNewAPI = container.recommendations.data[endtime]?.recommendation_terms[day]; + if (recommendationDataNewAPI) { + recommended_arr.push(recommendationDataNewAPI); } + }); + + //box plot data + const boxPlotData = + result[0].kubernetes_objects[0].containers[0].recommendations.data[endtime]?.recommendation_terms[day]?.plots?.plots_data; + if (boxPlotData) { + boxPlot_arr.push(boxPlotData); } - }); - if (recommended_arr[0]?.recommendation_engines) { + console.log(boxPlotData); + + // all data before a particular time stamp + result[0].kubernetes_objects[0].containers.map((container, index) => { + const allRecommData = container.recommendations.data; + const endTimeSortedKeys = Object.keys(allRecommData).sort(); + + for (const key of endTimeSortedKeys) { + chartDetailsObject[key] = allRecommData[key]; + if (key === endtime) { + break; + } + } + JSON.stringify(chartDetailsObject); + for (const key in chartDetailsObject) { + const value = chartDetailsObject[key]; + + if (key === endtime) { + break; + } + } + }); + + // notifications + endTimeNotifications = result[0].kubernetes_objects[0].containers[0].recommendations.data[endtime].notifications || []; + termNotifications = result[0].kubernetes_objects[0].containers[0].recommendations.data[endtime].recommendation_terms[day].notifications || []; + + } else if (props.SREdata.experiment_type == "namespace") { + // current data + const currentDat = result[0].kubernetes_objects[0].namespaces.recommendations?.data[endtime]?.current; + if (currentDat) { + current_arr.push(currentDat); + } + + // recommendation data + const recommendationDataNewAPI = result[0].kubernetes_objects[0].namespaces.recommendations.data[endtime]?.recommendation_terms[day]; + if (recommendationDataNewAPI) { + recommended_arr.push(recommendationDataNewAPI); + } + + // all data before a particular time stamp + const allRecommData = result[0].kubernetes_objects[0].namespaces.recommendations.data; + const endTimeSortedKeys = Object.keys(allRecommData).sort(); + + for (const key of endTimeSortedKeys) { + chartDetailsObject[key] = allRecommData[key]; + if (key === endtime) { + break; + } + } + JSON.stringify(chartDetailsObject); + for (const key in chartDetailsObject) { + const value = chartDetailsObject[key]; + + if (key === endtime) { + break; + } + } + + // notifications + endTimeNotifications = result[0].kubernetes_objects[0].namespaces.recommendations.data[endtime].notifications || []; + termNotifications = result[0].kubernetes_objects[0].namespaces.recommendations.data[endtime].recommendation_terms[day].notifications || []; + } + + + if (recommended_arr[0]?.recommendation_engines && props.SREdata.experiment_type == "container") { setDisplayChart(true); } else { + console.log("Setting False") setDisplayChart(false); } setCurrentData(current_arr); @@ -199,13 +255,7 @@ const RecommendationTables = (props: { mmr: mmrTranslatedData }); - // Notifications - const endTimeNotifications = - result[0].kubernetes_objects[0].containers[0].recommendations.data[endtime].notifications || []; - // we can ignore displying this notification for now - const termNotifications = - result[0].kubernetes_objects[0].containers[0].recommendations.data[endtime].recommendation_terms[day] - .notifications || []; + const mergedNotifications = { ...props.notification.level1, ...endTimeNotifications }; const entries = Object.entries(mergedNotifications) as [string, Notification][]; @@ -253,6 +303,10 @@ const RecommendationTables = (props: { setDay(value); }; + console.log("NOTI: ", props.notification) + const isDataPresent = !props.notification.level1?.hasOwnProperty('120001'); + console.log("Data:", isDataPresent) + const renderNotifications = (notifications: any) => ( {Object.keys(notifications || {}).map((key) => { @@ -271,7 +325,28 @@ const RecommendationTables = (props: { })} ); - + + + let workload_details = {}; + + if (props.SREdata.experiment_type == "container") { + workload_details = { + experiment_name: props.SREdata.experiment_name, + namespace: props.SREdata.namespace, + name: props.SREdata.name, + type: props.SREdata.type, + cluster_name: props.SREdata.cluster_name, + container_name: props.SREdata.container_name, + experiment_type: props.SREdata.experiment_type + } + } else if (props.SREdata.experiment_type == "namespace") { + workload_details = { + experiment_name: props.SREdata.experiment_name, + namespace: props.SREdata.namespace, + cluster_name: props.SREdata.cluster_name, + experiment_type: props.SREdata.experiment_type + } + } return ( <> @@ -279,19 +354,12 @@ const RecommendationTables = (props: {
+ {isDataPresent && ( @@ -339,7 +407,15 @@ const RecommendationTables = (props: { + )} + {!isDataPresent && ( + + + {props.notification.level1 && renderNotifications(props.notification.level1)} + + + )} {props.notification.level2 && renderNotifications(props.notification.level2.info)} @@ -355,16 +431,17 @@ const RecommendationTables = (props: {
- - + {isDataPresent && ( + + )} ); diff --git a/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/UsecaseSelection.tsx b/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/UsecaseSelection.tsx index 4419b68b..42706204 100644 --- a/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/UsecaseSelection.tsx +++ b/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/UsecaseSelection.tsx @@ -42,14 +42,15 @@ const UsecaseSelection = (props: { endTimeArray; setEndTimeArray; SREdata; setSR }; const fetchData = async () => { - const response = await fetch(list_experiment_url); + // const response = await fetch(list_experiment_url); + const response = await fetch("https://mocki.io/v1/2af181ed-6e99-418f-a01d-37fc4b0c0f96"); const data = await response.json(); const arr: any = ['Select Experiment Name']; data.forEach((element) => { - if (element.experiment_type === 'container') { + // if (element.experiment_type === 'container') { arr.push(element.experiment_name); - } + // } }); setExpData(arr.sort()); @@ -82,42 +83,60 @@ const UsecaseSelection = (props: { endTimeArray; setEndTimeArray; SREdata; setSR sessionStorage.setItem('Experiment Name', value); const response = await fetch(getListExperimentsURLWithParams(value)); const data = await response.json(); - const experimentUsecase = data[0].experiment_usecase_type; - let usecase; - if (experimentUsecase) { - usecase = Object.keys(experimentUsecase).filter((key) => experimentUsecase[key] === true) + ' '; - setExpUsecaseType(usecase); - } - handleClick(value, usecase); + // const experimentUsecase = data[0].experiment_usecase_type; + // let usecase; + // if (experimentUsecase) { + // usecase = Object.keys(experimentUsecase).filter((key) => experimentUsecase[key] === true) + ' '; + // setExpUsecaseType(usecase); + // } + // handleClick(value, usecase); + const experimentUsecase = data[0].experiment_usecase_type || 'container'; + handleClick(value); }; - const handleClick = async (exp_name_value, usecase) => { + // const handleClick = async (exp_name_value, usecase) => { + const handleClick = async (exp_name_value) => { try { const list_recommendations_url: string = getRecommendationsURLWithParams(exp_name_value, 'false'); - const data = await (await fetch(list_recommendations_url)).json(); + // const data = await (await fetch(list_recommendations_url)).json(); + const data = await (await fetch("https://mocki.io/v1/9467eff5-4b87-4023-a6a2-c76e99e21a4a")).json(); var namespace = data[0].kubernetes_objects[0].namespace; var name = data[0].kubernetes_objects[0].name; var type = data[0].kubernetes_objects[0].type; var cluster_name = data[0].cluster_name; - var container_name = data[0].kubernetes_objects[0].containers[0].container_name; + var container_name = "" + var experiment_type = data[0].experiment_type; var endtime: any[] = []; - endtime = [...Object.keys(data[0].kubernetes_objects[0].containers[0].recommendations.data).sort().reverse()]; + + var initialNotifications = []; + var containerArray: any[] = [];; + + if (experiment_type == "container") { + container_name = data[0].kubernetes_objects[0].containers[0].container_name; + endtime = [...Object.keys(data[0].kubernetes_objects[0].containers[0].recommendations.data).sort().reverse()]; + initialNotifications = data[0].kubernetes_objects[0].containers[0].recommendations.notifications || []; + + for (var i = 0; i < data[0].kubernetes_objects[0].containers.length; i++) { + containerArray.push(data[0].kubernetes_objects[0].containers[i].container_name); + } + } else if (experiment_type == "namespace") { + endtime = [...Object.keys(data[0].kubernetes_objects[0].namespaces.recommendations.data).sort().reverse()]; + initialNotifications = data[0].kubernetes_objects[0].namespaces.recommendations.notifications || []; + } + props.setEndTimeArray(endtime); - const initialNotifications = data[0].kubernetes_objects[0].containers[0].recommendations.notifications || []; + // const initialNotifications = data[0].kubernetes_objects[0].containers[0].recommendations.notifications || []; props.setNotification({ level1: initialNotifications }); const has111000 = initialNotifications.hasOwnProperty('111000'); - props.setDisplayRecc(has111000); + const has120001 = initialNotifications.hasOwnProperty('120001'); - var containerArray: any[] = []; - for (var i = 0; i < data[0].kubernetes_objects[0].containers.length; i++) { - containerArray.push(data[0].kubernetes_objects[0].containers[i].container_name); - } + props.setDisplayRecc(has111000 || has120001); props.setSREdata({ ...{ ...props.SREdata }, @@ -127,26 +146,27 @@ const UsecaseSelection = (props: { endTimeArray; setEndTimeArray; SREdata; setSR type: type, cluster_name: cluster_name, container_name: container_name, - experiment_type: usecase + experiment_type: experiment_type }); } - catch { - console.log("Execution incompleted."); + catch (error){ + console.log("Execution incompleted: " + error); } }; const handleGenerateRecommendationClick = async (expName) => { try { - const response = await fetch(generateRecommendationsURL(expName), { - method: 'POST', - headers: { - 'Content-Type': 'application/json' - } - }); + // const response = await fetch(generateRecommendationsURL(expName), { + // method: 'POST', + // headers: { + // 'Content-Type': 'application/json' + // } + // }); + const response = await fetch("https://mocki.io/v1/8e36bdd3-ef2c-427d-83a4-dda6c88c3204"); // no data if (response.ok) { setShowReccSuccessAlert(true); setTimeout(() => setShowReccSuccessAlert(false), 3000); - handleClick(expName, expUsecaseType); + handleClick(expName); } } catch (error) { console.error('Error during data import:', error); From a7422624b60a3e098025b7a3ee8f6813f95a585f Mon Sep 17 00:00:00 2001 From: Shekhar Saxena Date: Wed, 27 Nov 2024 12:48:56 +0530 Subject: [PATCH 22/31] code-refactor Signed-off-by: Shekhar Saxena --- .../RemoteMonitoring/ExperimentSelection.tsx | 19 ++++++++----------- .../RemoteMonitoring/RecommendationTables.tsx | 8 +------- 2 files changed, 9 insertions(+), 18 deletions(-) diff --git a/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/ExperimentSelection.tsx b/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/ExperimentSelection.tsx index 892d6e4f..fc646cda 100644 --- a/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/ExperimentSelection.tsx +++ b/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/ExperimentSelection.tsx @@ -41,8 +41,7 @@ const ExperimentSelection = (props: { endTimeArray; setEndTimeArray; SREdata; se }; const fetchData = async () => { - // const response = await fetch(list_experiment_url); - const response = await fetch("https://mocki.io/v1/2af181ed-6e99-418f-a01d-37fc4b0c0f96"); + const response = await fetch(list_experiment_url); const data = await response.json(); const arr: any = ['Select Experiment Name']; @@ -85,8 +84,7 @@ const ExperimentSelection = (props: { endTimeArray; setEndTimeArray; SREdata; se try { const list_recommendations_url: string = getRecommendationsURLWithParams(exp_name_value, 'false'); - // const data = await (await fetch(list_recommendations_url)).json(); - const data = await (await fetch("https://mocki.io/v1/9467eff5-4b87-4023-a6a2-c76e99e21a4a")).json(); + const data = await (await fetch(list_recommendations_url)).json(); var namespace = data[0].kubernetes_objects[0].namespace; var name = data[0].kubernetes_objects[0].name; var type = data[0].kubernetes_objects[0].type; @@ -142,13 +140,12 @@ const ExperimentSelection = (props: { endTimeArray; setEndTimeArray; SREdata; se const handleGenerateRecommendationClick = async (expName) => { try { - // const response = await fetch(generateRecommendationsURL(expName), { - // method: 'POST', - // headers: { - // 'Content-Type': 'application/json' - // } - // }); - const response = await fetch("https://mocki.io/v1/8e36bdd3-ef2c-427d-83a4-dda6c88c3204"); // no data + const response = await fetch(generateRecommendationsURL(expName), { + method: 'POST', + headers: { + 'Content-Type': 'application/json' + } + }); if (response.ok) { setShowReccSuccessAlert(true); setTimeout(() => setShowReccSuccessAlert(false), 3000); diff --git a/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationTables.tsx b/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationTables.tsx index 36559fb5..c3d27b52 100644 --- a/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationTables.tsx +++ b/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationTables.tsx @@ -129,10 +129,7 @@ const RecommendationTables = (props: { useEffect(() => { const fetchData = async () => { if (endtime && day) { - // const response = await fetch(list_recommendations_url); - - const response = await fetch("https://mocki.io/v1/5bb44f3b-4f26-4dc4-a167-682e8ffed562"); // no data - // const response = await fetch("https://mocki.io/v1/a5bc9f53-1062-45e4-9610-29432931d5bd"); + const response = await fetch(list_recommendations_url); const result = await response.json(); const boxPlot_arr: any = []; const recommended_arr: any = []; @@ -235,7 +232,6 @@ const RecommendationTables = (props: { if (recommended_arr[0]?.recommendation_engines && props.SREdata.experiment_type == "container") { setDisplayChart(true); } else { - console.log("Setting False") setDisplayChart(false); } setCurrentData(current_arr); @@ -303,9 +299,7 @@ const RecommendationTables = (props: { setDay(value); }; - console.log("NOTI: ", props.notification) const isDataPresent = !props.notification.level1?.hasOwnProperty('120001'); - console.log("Data:", isDataPresent) const renderNotifications = (notifications: any) => ( From 36ff32aca572678dbfa8684445d384fbdb809474 Mon Sep 17 00:00:00 2001 From: Shekhar Saxena Date: Wed, 27 Nov 2024 13:41:08 +0530 Subject: [PATCH 23/31] updating workload details login Signed-off-by: Shekhar Saxena --- .../RemoteMonitoring/RecommendationTables.tsx | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationTables.tsx b/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationTables.tsx index c3d27b52..2769d367 100644 --- a/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationTables.tsx +++ b/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationTables.tsx @@ -23,7 +23,6 @@ import { getRecommendationsURL, getRecommendationsURLWithParams } from '@app/Cen import { TabSection } from './RecommendationComponents/TabSection'; import { WorkloadDetails } from './RecommendationComponents/WorkloadDetails'; import { InfoCircleIcon, ExclamationCircleIcon, ExclamationTriangleIcon } from '@patternfly/react-icons'; -import { container } from 'webpack'; export const alertIconMap = { info: , @@ -348,7 +347,15 @@ const RecommendationTables = (props: {
From 33122d26f86753f49451a40c56b8ddc7f93e5c05 Mon Sep 17 00:00:00 2001 From: Shekhar Saxena Date: Wed, 27 Nov 2024 13:42:50 +0530 Subject: [PATCH 24/31] updating workload details logic 2 Signed-off-by: Shekhar Saxena --- .../RemoteMonitoring/RecommendationTables.tsx | 20 ------------------- 1 file changed, 20 deletions(-) diff --git a/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationTables.tsx b/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationTables.tsx index 2769d367..218e3aa6 100644 --- a/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationTables.tsx +++ b/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationTables.tsx @@ -320,26 +320,6 @@ const RecommendationTables = (props: { ); - let workload_details = {}; - - if (props.SREdata.experiment_type == "container") { - workload_details = { - experiment_name: props.SREdata.experiment_name, - namespace: props.SREdata.namespace, - name: props.SREdata.name, - type: props.SREdata.type, - cluster_name: props.SREdata.cluster_name, - container_name: props.SREdata.container_name, - experiment_type: props.SREdata.experiment_type - } - } else if (props.SREdata.experiment_type == "namespace") { - workload_details = { - experiment_name: props.SREdata.experiment_name, - namespace: props.SREdata.namespace, - cluster_name: props.SREdata.cluster_name, - experiment_type: props.SREdata.experiment_type - } - } return ( <> From 86d06070a646375b3eab880d3f18489679b342e2 Mon Sep 17 00:00:00 2001 From: Shekhar Saxena Date: Wed, 27 Nov 2024 13:50:34 +0530 Subject: [PATCH 25/31] removing comments Signed-off-by: Shekhar Saxena --- .../RemoteMonitoring/ExperimentSelection.tsx | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/ExperimentSelection.tsx b/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/ExperimentSelection.tsx index fc646cda..c4e8336d 100644 --- a/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/ExperimentSelection.tsx +++ b/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/ExperimentSelection.tsx @@ -112,8 +112,6 @@ const ExperimentSelection = (props: { endTimeArray; setEndTimeArray; SREdata; se props.setEndTimeArray(endtime); - // const initialNotifications = data[0].kubernetes_objects[0].containers[0].recommendations.notifications || []; - props.setNotification({ level1: initialNotifications }); @@ -133,8 +131,8 @@ const ExperimentSelection = (props: { endTimeArray; setEndTimeArray; SREdata; se experiment_type: experiment_type }); } - catch (error){ - console.log("Execution incompleted: " + error); + catch { + console.log("Execution incompleted."); } }; From 6502b188ba8fcc8fc2e3853dca0ff0a4c9e0ecec Mon Sep 17 00:00:00 2001 From: Shekhar Saxena Date: Wed, 27 Nov 2024 15:54:39 +0530 Subject: [PATCH 26/31] code refactor to modular functions Signed-off-by: Shekhar Saxena --- .../RemoteMonitoring/RecommendationTables.tsx | 212 +++++++----------- 1 file changed, 86 insertions(+), 126 deletions(-) diff --git a/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationTables.tsx b/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationTables.tsx index 5287931c..d69e4142 100644 --- a/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationTables.tsx +++ b/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationTables.tsx @@ -125,147 +125,107 @@ const RecommendationTables = (props: { }; console.log('boxp lot dat', boxPlotTranslatedData); - useEffect(() => { - const fetchData = async () => { - if (endtime && day) { - const response = await fetch(list_recommendations_url); - const result = await response.json(); - const boxPlot_arr: any = []; - const recommended_arr: any = []; - const current_arr: any = []; - const chartDetailsObject = []; - // Notifications - var endTimeNotifications: any = []; - // we can ignore displying this notification for now - var termNotifications: any = []; + const processData = (allData, experiment_type) => { + const current_arr: any = []; + const recommended_arr: any = []; + const chartDetailsObject: any = []; + const boxPlot_arr: any = []; + var termNotifications: any = []; + var endTimeNotifications: any = []; + + const processItem = (item, index) => { + const currentData = item.recommendations?.data[endtime]?.current; + const recommendationDataNewAPI = item.recommendations?.data[endtime]?.recommendation_terms[day]; + const allRecommData = item.recommendations.data; + const endTimeSortedKeys = Object.keys(allRecommData).sort(); + + if (currentData) { + current_arr.push(currentData); + } + if (recommendationDataNewAPI) { + recommended_arr.push(recommendationDataNewAPI); + } - if (props.SREdata.experiment_type == "container") { - // current data - result[0].kubernetes_objects[0].containers.map((container, index) => { - const currentDat = container.recommendations?.data[endtime]?.current; - if (currentDat) { - current_arr.push(currentDat); - } - }); - - // recommended data - result[0].kubernetes_objects[0].containers.map((container, index) => { - const recommendationDataNewAPI = container.recommendations.data[endtime]?.recommendation_terms[day]; - if (recommendationDataNewAPI) { - recommended_arr.push(recommendationDataNewAPI); - } - }); - - //box plot data - const boxPlotData = - result[0].kubernetes_objects[0].containers[0].recommendations.data[endtime]?.recommendation_terms[day]?.plots?.plots_data; - if (boxPlotData) { - boxPlot_arr.push(boxPlotData); - } - console.log(boxPlotData); - - // all data before a particular time stamp - result[0].kubernetes_objects[0].containers.map((container, index) => { - const allRecommData = container.recommendations.data; - const endTimeSortedKeys = Object.keys(allRecommData).sort(); - - for (const key of endTimeSortedKeys) { - chartDetailsObject[key] = allRecommData[key]; - if (key === endtime) { - break; - } - } - JSON.stringify(chartDetailsObject); - for (const key in chartDetailsObject) { - const value = chartDetailsObject[key]; - - if (key === endtime) { - break; - } - } - }); - - // notifications - endTimeNotifications = result[0].kubernetes_objects[0].containers[0].recommendations.data[endtime].notifications || []; - termNotifications = result[0].kubernetes_objects[0].containers[0].recommendations.data[endtime].recommendation_terms[day].notifications || []; + for (const key of endTimeSortedKeys) { + chartDetailsObject[key] = allRecommData[key]; + if (key === endtime) { + break; + } + } + JSON.stringify(chartDetailsObject); + for (const key in chartDetailsObject) { + const value = chartDetailsObject[key]; - } else if (props.SREdata.experiment_type == "namespace") { - // current data - const currentDat = result[0].kubernetes_objects[0].namespaces.recommendations?.data[endtime]?.current; - if (currentDat) { - current_arr.push(currentDat); - } - - // recommendation data - const recommendationDataNewAPI = result[0].kubernetes_objects[0].namespaces.recommendations.data[endtime]?.recommendation_terms[day]; - if (recommendationDataNewAPI) { - recommended_arr.push(recommendationDataNewAPI); - } - - // all data before a particular time stamp - const allRecommData = result[0].kubernetes_objects[0].namespaces.recommendations.data; - const endTimeSortedKeys = Object.keys(allRecommData).sort(); - - for (const key of endTimeSortedKeys) { - chartDetailsObject[key] = allRecommData[key]; - if (key === endtime) { - break; - } - } - JSON.stringify(chartDetailsObject); - for (const key in chartDetailsObject) { - const value = chartDetailsObject[key]; - - if (key === endtime) { - break; - } - } - - // notifications - endTimeNotifications = result[0].kubernetes_objects[0].namespaces.recommendations.data[endtime].notifications || []; - termNotifications = result[0].kubernetes_objects[0].namespaces.recommendations.data[endtime].recommendation_terms[day].notifications || []; + if (key === endtime) { + break; } - - - if (recommended_arr[0]?.recommendation_engines && props.SREdata.experiment_type == "container") { - setDisplayChart(true); - } else { - setDisplayChart(false); + } + + if(index == 0) { + const boxPlotData = item.recommendations.data[endtime]?.recommendation_terms[day]?.plots?.plots_data; + if (boxPlotData) { + boxPlot_arr.push(boxPlotData); } - setCurrentData(current_arr); - setRecommendedData(recommended_arr); - setChartDetailsData(chartDetailsObject); + console.log(boxPlotData); + + endTimeNotifications = item.recommendations.data[endtime].notifications || []; + termNotifications = item.recommendations.data[endtime].recommendation_terms[day].notifications || []; + } - // Processing box plot data + setCurrentData(current_arr); + setRecommendedData(recommended_arr); + setChartDetailsData(chartDetailsObject); - const chartData = processBoxPlotData(boxPlot_arr); - const [cpuData, mmrData] = chartData; + // Processing box plot data + const chartData = processBoxPlotData(boxPlot_arr); + const [cpuData, mmrData] = chartData; - const cpuTranslatedData = transformData(cpuData, 'y', 'cpu'); - const mmrTranslatedData = transformData(mmrData, 'y', 'mmr'); + const cpuTranslatedData = transformData(cpuData, 'y', 'cpu'); + const mmrTranslatedData = transformData(mmrData, 'y', 'mmr'); - setBoxPlotTranslatedData({ - cpu: cpuTranslatedData, - mmr: mmrTranslatedData - }); + setBoxPlotTranslatedData({ + cpu: cpuTranslatedData, + mmr: mmrTranslatedData + }); + const mergedNotifications = { ...props.notification.level1, ...endTimeNotifications }; + const entries = Object.entries(mergedNotifications) as [string, Notification][]; + const infoNotifications = entries.filter(([key, notification]) => notification?.type === 'info'); + const otherNotifications = entries.filter(([key, notification]) => notification?.type !== 'info'); + const infNotifications = Object.fromEntries(infoNotifications); + const othNotifications = Object.fromEntries(otherNotifications); - const mergedNotifications = { ...props.notification.level1, ...endTimeNotifications }; - const entries = Object.entries(mergedNotifications) as [string, Notification][]; - const infoNotifications = entries.filter(([key, notification]) => notification?.type === 'info'); - const otherNotifications = entries.filter(([key, notification]) => notification?.type !== 'info'); - const infNotifications = Object.fromEntries(infoNotifications); - const othNotifications = Object.fromEntries(otherNotifications); + props.setNotification({ + level2: { info: infNotifications, others: othNotifications }, + level3: termNotifications + }); + }; - console.log(infNotifications); + if (experiment_type == "container") { + allData.forEach((item, index) => processItem(item, index)); + if (recommended_arr[0]?.recommendation_engines) { + setDisplayChart(true); + } + } else if (experiment_type == "namespace"){ + setDisplayChart(false); + processItem(allData, 0) + } + } + useEffect(() => { + const fetchData = async () => { + if (endtime && day) { + const response = await fetch(list_recommendations_url); + const result = await response.json(); - props.setNotification({ - level2: { info: infNotifications, others: othNotifications }, - level3: termNotifications - }); + if (props.SREdata.experiment_type == "container") { + processData(result[0].kubernetes_objects[0].containers, props.SREdata.experiment_type); + } else if (props.SREdata.experiment_type == "namespace") { + processData(result[0].kubernetes_objects[0].namespaces, props.SREdata.experiment_type) + } + } }; fetchData(); From ad7b9d6c56cf922b1aa5b091fffc1889ba9f4f46 Mon Sep 17 00:00:00 2001 From: Shekhar Saxena Date: Wed, 27 Nov 2024 16:19:31 +0530 Subject: [PATCH 27/31] hiding plots for ns Signed-off-by: Shekhar Saxena --- .../RecommendationComponents/CostDetails.tsx | 2 +- .../RecommendationComponents/PerfDetails.tsx | 16 +++++++++------- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/CostDetails.tsx b/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/CostDetails.tsx index 03c15505..40b36d79 100644 --- a/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/CostDetails.tsx +++ b/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/CostDetails.tsx @@ -259,7 +259,7 @@ const CostDetails = (props: { recommendedData; currentData; chartData; day; endt

- {props.boxPlotData && props.recommendedData[0]?.recommendation_engines?.cost?.config ? ( + {props.displayChart && props.boxPlotData && props.recommendedData[0]?.recommendation_engines?.cost?.config ? (

- + {props.displayChart && ( + + )}

{props.displayChart && ( From 215b227feae3abf38a67e4ff95e81b0a9a71a028 Mon Sep 17 00:00:00 2001 From: Shekhar Saxena Date: Wed, 27 Nov 2024 16:54:57 +0530 Subject: [PATCH 28/31] updating resource name to resource quota for ns exp Signed-off-by: Shekhar Saxena --- .../RecommendationComponents/CostDetails.tsx | 10 +++++++--- .../RecommendationComponents/PerfDetails.tsx | 10 ++++++++-- .../RecommendationComponents/TabSection.tsx | 4 +++- .../RemoteMonitoring/RecommendationTables.tsx | 3 ++- 4 files changed, 20 insertions(+), 7 deletions(-) diff --git a/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/CostDetails.tsx b/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/CostDetails.tsx index 40b36d79..da442138 100644 --- a/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/CostDetails.tsx +++ b/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/CostDetails.tsx @@ -118,7 +118,7 @@ export const useMemoryUnit = (recommendedData, profile) => { return { mmrUnit, unitVal }; }; -const CostDetails = (props: { recommendedData; currentData; chartData; day; endtime; displayChart; boxPlotData }) => { +const CostDetails = (props: { recommendedData; currentData; chartData; day; endtime; displayChart; boxPlotData; experimentType }) => { const limits = props.recommendedData[0]?.recommendation_engines?.cost?.config?.limits; const config_keys = limits ? Object.keys(limits) : []; const [showCostBoxPlot, setShowCostBoxPlot] = useState(true); @@ -133,7 +133,11 @@ const CostDetails = (props: { recommendedData; currentData; chartData; day; endt console.log("No 'nvidia' key found."); } - const current_code = `resources: + let resource_name = "resources"; + if (props.experimentType == "namespace") { + resource_name = "resource quota" + } + const current_code = `${resource_name}: requests: cpu: ${NumberFormat(props.currentData[0]?.requests?.cpu?.amount)} memory: ${MemoryFormat(props.currentData[0]?.requests?.memory?.amount)} @@ -141,7 +145,7 @@ const CostDetails = (props: { recommendedData; currentData; chartData; day; endt cpu: ${NumberFormat(props.currentData[0]?.limits?.cpu?.amount)} memory: ${MemoryFormat(props.currentData[0]?.limits?.memory?.amount)}`; - const recommended_code = `resources: + const recommended_code = `${resource_name}: requests: cpu: ${NumberFormat( props.recommendedData[0]?.recommendation_engines?.cost?.config?.requests?.cpu?.amount diff --git a/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/PerfDetails.tsx b/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/PerfDetails.tsx index 74a6ea8b..3ebb39c4 100644 --- a/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/PerfDetails.tsx +++ b/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/PerfDetails.tsx @@ -33,6 +33,7 @@ const PerfDetails = (props: { displayChart; tab; boxPlotData; + experimentType }) => { const limits = props.recommendedData[0]?.recommendation_engines?.performance?.config?.limits; const config_keys = limits ? Object.keys(limits) : []; @@ -48,7 +49,12 @@ const PerfDetails = (props: { console.log("No 'nvidia' key found."); } - const current_code = `resources: + let resource_name = "resources"; + if (props.experimentType == "namespace") { + resource_name = "resource quota" + } + + const current_code = `${resource_name}: requests: cpu: ${NumberFormat(props.currentData[0]?.requests?.cpu?.amount)} memory: ${MemoryFormat(props.currentData[0]?.requests?.memory?.amount)} @@ -56,7 +62,7 @@ const PerfDetails = (props: { cpu: ${NumberFormat(props.currentData[0]?.limits?.cpu?.amount)} memory: ${MemoryFormat(props.currentData[0]?.limits?.memory?.amount)}`; - const recommended_code = `resources: + const recommended_code = `${resource_name}: requests: cpu: ${NumberFormat( props.recommendedData[0]?.recommendation_engines?.performance?.config?.requests?.cpu?.amount diff --git a/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/TabSection.tsx b/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/TabSection.tsx index 946202a5..547c896f 100644 --- a/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/TabSection.tsx +++ b/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationComponents/TabSection.tsx @@ -3,7 +3,7 @@ import { Tabs, Tab, TabTitleText, PageSection, PageSectionVariants } from '@patt import { CostDetails } from './CostDetails'; import { PerfDetails } from './PerfDetails'; -const TabSection = (props: { recommendedData: any; currentData; chartData; day; endtime; displayChart ; boxPlotData}) => { +const TabSection = (props: { recommendedData: any; currentData; chartData; day; endtime; displayChart ; boxPlotData; experimentType}) => { const [activeTabKey, setActiveTabKey] = React.useState(0); const handleTabClick = ( @@ -28,6 +28,7 @@ const TabSection = (props: { recommendedData: any; currentData; chartData; day; endtime={props.endtime} displayChart={props.displayChart} boxPlotData={props.boxPlotData} + experimentType={props.experimentType} /> Performance optimizations}> @@ -40,6 +41,7 @@ const TabSection = (props: { recommendedData: any; currentData; chartData; day; displayChart={props.displayChart} tab={activeTabKey} boxPlotData={props.boxPlotData} + experimentType={props.experimentType} /> diff --git a/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationTables.tsx b/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationTables.tsx index d69e4142..ec0a7098 100644 --- a/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationTables.tsx +++ b/src/app/Analytics/LocalMonitoring/RecommendationsForLocalMonitoring/RemoteMonitoring/RecommendationTables.tsx @@ -225,7 +225,7 @@ const RecommendationTables = (props: { } else if (props.SREdata.experiment_type == "namespace") { processData(result[0].kubernetes_objects[0].namespaces, props.SREdata.experiment_type) } - + } }; fetchData(); @@ -382,6 +382,7 @@ const RecommendationTables = (props: { endtime={endtime} displayChart={displayChart} boxPlotData={boxPlotTranslatedData} + experimentType={props.SREdata.experiment_type} /> )}
From 46c0552665b2fbe8a7f7c7406fa7a592c3f05f4d Mon Sep 17 00:00:00 2001 From: bhanvimenghani Date: Fri, 29 Nov 2024 17:01:47 +0530 Subject: [PATCH 29/31] fix api fail in bulk demo --- .../LocalMonitoring/DatasourceTable.tsx | 8 +++- src/store/actions/DataSourceActionCreator.tsx | 42 ++++++++++++------- 2 files changed, 32 insertions(+), 18 deletions(-) diff --git a/src/app/Analytics/LocalMonitoring/DatasourceTable.tsx b/src/app/Analytics/LocalMonitoring/DatasourceTable.tsx index 8ca3538d..cd9697b1 100644 --- a/src/app/Analytics/LocalMonitoring/DatasourceTable.tsx +++ b/src/app/Analytics/LocalMonitoring/DatasourceTable.tsx @@ -2,7 +2,7 @@ import { Button, OverflowMenu, OverflowMenuContent, OverflowMenuGroup, OverflowM import { Table, Thead, Tr, Th, Tbody, Td } from '@patternfly/react-table'; import React, { useEffect, useState } from 'react'; import { ClusterGroupTables } from './ClusterGroupTables'; -import { getDataSourceMetaData } from '@actions/DataSourceActionCreator'; +import { importDataSourceMetaData } from '@actions/DataSourceActionCreator'; import { useDispatch, useSelector } from 'react-redux'; /* @@ -23,14 +23,18 @@ const DatasourceTable = ({ dataSourcesData, ...props }) => { const [dataSourceName, setDataSourceName] = useState(dataSourceSelector.selectedDataSource || "") useEffect(() =>{ + setDataSourceName(dataSourceSelector.selectedDataSource) + },[dataSourceSelector.selectedDataSource] ) const handleImportMetadata = async (dataSourceName: string) => { + setButtonStatus(true); setDataSourceName(dataSourceName); - await dispatch(getDataSourceMetaData(dataSourceName)); + await dispatch(importDataSourceMetaData(dataSourceName)); setButtonStatus(false); + }; const toggleRowExpanded = (index, dataSourceName: string) => { diff --git a/src/store/actions/DataSourceActionCreator.tsx b/src/store/actions/DataSourceActionCreator.tsx index e2201d40..50257dde 100644 --- a/src/store/actions/DataSourceActionCreator.tsx +++ b/src/store/actions/DataSourceActionCreator.tsx @@ -3,40 +3,50 @@ import { loading, disableLoading, errorCall, availabeDataSources, dataSourceMeta export const getListOfDataSources = () => async dispatch => { + dispatch(loading()); - try { + try + { const response = await fetch(getDatasourcesURL()); const data = await response.json(); - dispatch(availabeDataSources({datasources: data.datasources})) - } catch (error: any) { - dispatch(errorCall({error: error.message, error_method: "getListOfDataSources"})) + dispatch(availabeDataSources({ datasources: data.datasources })) + } + catch (error: any) + { + dispatch(errorCall({ error: error.message, error_method: "getListOfDataSources" })) } dispatch(disableLoading()) + } -export const getDataSourceMetaData = (dataSourceName: string) => async dispatch => { +export const importDataSourceMetaData = (dataSourceName: string) => async dispatch => { dispatch(loading()); try { const payload = { version: 'v1.0', datasource_name: dataSourceName - }; - const url = `${importDataSourcesMetadataURL()}?datasource=${dataSourceName}` - const response = await fetch(url, { - method: 'GET', + }; + + const response = await fetch(importDataSourcesMetadataURL(), { + method: 'POST', headers: { - 'Content-Type': 'application/json' + 'Content-Type': 'application/json' }, - }); - + body: JSON.stringify(payload) + }); + const data = await response.json(); - dispatch(dataSourceMetadata({dataSourceMetaData: data.datasources, selectedDataSource: dataSourceName})) - } catch (error: any) { - dispatch(errorCall({error: error.message, error_method: "getDataSourceMetaData"})) + dispatch(dataSourceMetadata({ dataSourceMetaData: data.datasources, selectedDataSource: dataSourceName })) + + } + catch (error: any) { + + dispatch(errorCall({ error: error.message, error_method: "importDataSourceMetaData" })) } dispatch(disableLoading()) } + export const getClusterMetaData = (datasourceName: string, clusterName: string) => async dispatch => { dispatch(loading()); try { @@ -46,7 +56,7 @@ export const getClusterMetaData = (datasourceName: string, clusterName: string) [`${datasourceName}-${clusterName}`]: data.datasources[datasourceName].clusters[clusterName] })) } catch (error: any) { - dispatch(errorCall({error: error.message, error_method: "getClusterMetaData"})) + dispatch(errorCall({ error: error.message, error_method: "getClusterMetaData" })) } dispatch(disableLoading()) } From 169141b7f3ea3981be06fb98cb13770635041702 Mon Sep 17 00:00:00 2001 From: Dinakar Guniguntala Date: Fri, 29 Nov 2024 18:10:31 +0530 Subject: [PATCH 30/31] Update mvp_demo to UI version 0.0.8 Signed-off-by: Dinakar Guniguntala --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index f9f5ac0b..93cd78ab 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "kruize-ui", - "version": "0.0.7", + "version": "0.0.8", "repository": "https://github.com/kruize/kruize-ui.git", "license": "MIT", "private": false, From 3c3fda1dc3e6e399d0cb2d092e3b83ea77d379db Mon Sep 17 00:00:00 2001 From: Dinakar Guniguntala Date: Fri, 29 Nov 2024 18:42:10 +0530 Subject: [PATCH 31/31] Update package-lock.json Signed-off-by: Dinakar Guniguntala --- package-lock.json | 6306 ++------------------------------------------- 1 file changed, 274 insertions(+), 6032 deletions(-) diff --git a/package-lock.json b/package-lock.json index 446a1924..d7324921 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "kruize-ui", - "version": "0.0.6", + "version": "0.0.8", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "kruize-ui", - "version": "0.0.6", + "version": "0.0.8", "license": "MIT", "dependencies": { "@kubernetes/client-node": "^0.16.3", @@ -338,20 +338,6 @@ "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.7.tgz", - "integrity": "sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/helper-member-expression-to-functions": { "version": "7.25.9", "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.9.tgz", @@ -648,27 +634,6 @@ "@babel/core": "^7.0.0" } }, - "node_modules/@babel/plugin-proposal-async-generator-functions": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz", - "integrity": "sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-async-generator-functions instead.", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-remap-async-to-generator": "^7.18.9", - "@babel/plugin-syntax-async-generators": "^7.8.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/@babel/plugin-proposal-class-properties": { "version": "7.18.6", "license": "MIT", @@ -714,22 +679,6 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-export-namespace-from": { - "version": "7.18.9", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { "version": "7.18.6", "license": "MIT", @@ -744,25 +693,6 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-numeric-separator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", - "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-numeric-separator instead.", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/@babel/plugin-proposal-object-rest-spread": { "version": "7.20.7", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz", @@ -783,25 +713,6 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-optional-catch-binding": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz", - "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-catch-binding instead.", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/@babel/plugin-proposal-optional-chaining": { "version": "7.21.0", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz", @@ -919,18 +830,6 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/@babel/plugin-syntax-flow": { "version": "7.26.0", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.26.0.tgz", @@ -1794,40 +1693,6 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-react-jsx-self": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.25.9.tgz", - "integrity": "sha512-y8quW6p0WHkEhmErnfe58r7x0A70uKphQm8Sp8cV7tjNQwK56sNVK0M73LK3WuYmsuyrftut4xAkjjgU0twaMg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx-source": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.25.9.tgz", - "integrity": "sha512-+iqjT8xmXhhYv4/uiYd8FNQsraMFZIfxVSqxxVSZP0WbbSAWvBXAul0m/zu+7Vv4O/3WtApy9pmaTMiumEZgfg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/@babel/plugin-transform-react-pure-annotations": { "version": "7.18.6", "license": "MIT", @@ -1889,43 +1754,6 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-runtime": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.25.9.tgz", - "integrity": "sha512-nZp7GlEl+yULJrClz0SwHPqir3lc0zsPrDHQUcxGspSL7AKrexNSEfTbfqnDNJUO13bgKyfuOLMF8Xqtu8j3YQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-module-imports": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "babel-plugin-polyfill-corejs2": "^0.4.10", - "babel-plugin-polyfill-corejs3": "^0.10.6", - "babel-plugin-polyfill-regenerator": "^0.6.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-runtime/node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.10.6", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.6.tgz", - "integrity": "sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.2", - "core-js-compat": "^3.38.0" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, "node_modules/@babel/plugin-transform-shorthand-properties": { "version": "7.25.9", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.25.9.tgz", @@ -2479,7 +2307,7 @@ }, "node_modules/@eslint/eslintrc": { "version": "0.4.3", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "ajv": "^6.12.4", @@ -2498,7 +2326,7 @@ }, "node_modules/@eslint/eslintrc/node_modules/argparse": { "version": "1.0.10", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "sprintf-js": "~1.0.2" @@ -2506,7 +2334,7 @@ }, "node_modules/@eslint/eslintrc/node_modules/globals": { "version": "13.17.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "type-fest": "^0.20.2" @@ -2520,7 +2348,7 @@ }, "node_modules/@eslint/eslintrc/node_modules/ignore": { "version": "4.0.6", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">= 4" @@ -2528,7 +2356,7 @@ }, "node_modules/@eslint/eslintrc/node_modules/js-yaml": { "version": "3.14.1", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "argparse": "^1.0.7", @@ -2540,7 +2368,7 @@ }, "node_modules/@eslint/eslintrc/node_modules/strip-json-comments": { "version": "3.1.1", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -2551,7 +2379,7 @@ }, "node_modules/@eslint/eslintrc/node_modules/type-fest": { "version": "0.20.2", - "devOptional": true, + "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" @@ -2560,117 +2388,30 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@expo/bunyan": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@expo/bunyan/-/bunyan-4.0.0.tgz", - "integrity": "sha512-Ydf4LidRB/EBI+YrB+cVLqIseiRfjUI/AeHBgjGMtq3GroraDu81OV7zqophRgupngoL3iS3JUMDMnxO7g39qA==", + "node_modules/@expo/image-utils": { + "version": "0.3.23", + "resolved": "https://registry.npmjs.org/@expo/image-utils/-/image-utils-0.3.23.tgz", + "integrity": "sha512-nhUVvW0TrRE4jtWzHQl8TR4ox7kcmrc2I0itaeJGjxF5A54uk7avgA0wRt7jP1rdvqQo1Ke1lXyLYREdhN9tPw==", "dev": true, - "engines": [ - "node >=0.10.0" - ], - "license": "MIT", - "peer": true, "dependencies": { - "uuid": "^8.0.0" - }, - "optionalDependencies": { - "mv": "~2", - "safe-json-stringify": "~1" - } - }, - "node_modules/@expo/bunyan/node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true, - "license": "MIT", - "peer": true, - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/@expo/cli": { - "version": "0.10.17", - "resolved": "https://registry.npmjs.org/@expo/cli/-/cli-0.10.17.tgz", - "integrity": "sha512-HkHDvHPzq4M244hIerwnsw2IdjOo7RSsMYWGhc7ZY7DQWIMUC88b7f5+0RtD4JQfXQrgKS5Tvqm/5E6kAH0rIA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/runtime": "^7.20.0", - "@expo/code-signing-certificates": "0.0.5", - "@expo/config": "~8.1.0", - "@expo/config-plugins": "~7.2.0", - "@expo/dev-server": "0.5.5", - "@expo/devcert": "^1.0.0", - "@expo/env": "0.0.5", - "@expo/json-file": "^8.2.37", - "@expo/metro-config": "~0.10.0", - "@expo/osascript": "^2.0.31", - "@expo/package-manager": "~1.1.0", - "@expo/plist": "^0.0.20", - "@expo/prebuild-config": "6.2.6", - "@expo/rudder-sdk-node": "1.1.1", "@expo/spawn-async": "1.5.0", - "@expo/xcpretty": "^4.2.1", - "@urql/core": "2.3.6", - "@urql/exchange-retry": "0.3.0", - "accepts": "^1.3.8", - "arg": "4.1.0", - "better-opn": "~3.0.2", - "bplist-parser": "^0.3.1", - "cacache": "^15.3.0", "chalk": "^4.0.0", - "ci-info": "^3.3.0", - "debug": "^4.3.4", - "env-editor": "^0.4.1", - "form-data": "^3.0.1", - "freeport-async": "2.0.0", - "fs-extra": "~8.1.0", + "fs-extra": "9.0.0", "getenv": "^1.0.0", - "graphql": "15.8.0", - "graphql-tag": "^2.10.1", - "https-proxy-agent": "^5.0.1", - "internal-ip": "4.3.0", - "js-yaml": "^3.13.1", - "json-schema-deref-sync": "^0.13.0", - "md5-file": "^3.2.3", - "md5hex": "^1.0.0", - "minipass": "3.1.6", - "node-fetch": "^2.6.7", - "node-forge": "^1.3.1", - "npm-package-arg": "^7.0.0", - "ora": "3.4.0", - "pretty-bytes": "5.6.0", - "progress": "2.0.3", - "prompts": "^2.3.2", - "qrcode-terminal": "0.11.0", - "require-from-string": "^2.0.2", - "requireg": "^0.2.2", + "jimp-compact": "0.16.1", + "mime": "^2.4.4", + "node-fetch": "^2.6.0", + "parse-png": "^2.1.0", "resolve-from": "^5.0.0", - "semver": "^7.5.3", - "send": "^0.18.0", - "slugify": "^1.3.4", - "structured-headers": "^0.4.1", - "tar": "^6.0.5", - "tempy": "^0.7.1", - "terminal-link": "^2.1.1", - "text-table": "^0.2.0", - "url-join": "4.0.0", - "wrap-ansi": "^7.0.0", - "ws": "^8.12.1" - }, - "bin": { - "expo-internal": "build/bin/cli" + "semver": "7.3.2", + "tempy": "0.3.0" } }, - "node_modules/@expo/cli/node_modules/ansi-styles": { + "node_modules/@expo/image-utils/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "MIT", - "peer": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -2681,80 +2422,11 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@expo/cli/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/@expo/cli/node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@expo/cli/node_modules/better-opn": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/better-opn/-/better-opn-3.0.2.tgz", - "integrity": "sha512-aVNobHnJqLiUelTaHat9DZ1qM2w0C0Eym4LPI/3JxOnSokGVdsl1T1kN7TFvsEAD8G47A6VKQ0TVHqbBnYMJlQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "open": "^8.0.4" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/@expo/cli/node_modules/cacache": { - "version": "15.3.0", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", - "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "@npmcli/fs": "^1.0.0", - "@npmcli/move-file": "^1.0.1", - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "glob": "^7.1.4", - "infer-owner": "^1.0.4", - "lru-cache": "^6.0.0", - "minipass": "^3.1.1", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.2", - "mkdirp": "^1.0.3", - "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^8.0.1", - "tar": "^6.0.2", - "unique-filename": "^1.1.1" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/@expo/cli/node_modules/chalk": { + "node_modules/@expo/image-utils/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "license": "MIT", - "peer": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -2766,13 +2438,11 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@expo/cli/node_modules/color-convert": { + "node_modules/@expo/image-utils/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "license": "MIT", - "peer": true, "dependencies": { "color-name": "~1.1.4" }, @@ -2780,186 +2450,53 @@ "node": ">=7.0.0" } }, - "node_modules/@expo/cli/node_modules/color-name": { + "node_modules/@expo/image-utils/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/@expo/cli/node_modules/crypto-random-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", - "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@expo/cli/node_modules/del": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/del/-/del-6.1.1.tgz", - "integrity": "sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==", - "dev": true, - "license": "MIT", - "peer": true, - "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" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@expo/cli/node_modules/form-data": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.2.tgz", - "integrity": "sha512-sJe+TQb2vIaIyO783qN6BlMYWMw3WBOHA1Ay2qxsnjuafEOQFJ2JakedOQirT6D5XPRxDvS7AHYyem9fTpb4LQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } + "dev": true }, - "node_modules/@expo/cli/node_modules/fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "node_modules/@expo/image-utils/node_modules/fs-extra": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.0.tgz", + "integrity": "sha512-pmEYSk3vYsG/bF651KPUXZ+hvjpgWYw/Gc7W9NFUe3ZVLczKKWIij3IKpOrQcdw4TILtibFslZ0UmR8Vvzig4g==", "dev": true, - "license": "MIT", - "peer": true, "dependencies": { + "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/@expo/cli/node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" + "jsonfile": "^6.0.1", + "universalify": "^1.0.0" }, "engines": { "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@expo/cli/node_modules/has-flag": { + "node_modules/@expo/image-utils/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@expo/cli/node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@expo/cli/node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "is-docker": "^2.0.0" - }, "engines": { "node": ">=8" } }, - "node_modules/@expo/cli/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "node_modules/@expo/image-utils/node_modules/mime": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/@expo/cli/node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "dev": true, - "license": "MIT", - "peer": true, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/@expo/cli/node_modules/minipass": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.6.tgz", - "integrity": "sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ==", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "yallist": "^4.0.0" + "mime": "cli.js" }, "engines": { - "node": ">=8" + "node": ">=4.0.0" } }, - "node_modules/@expo/cli/node_modules/node-fetch": { + "node_modules/@expo/image-utils/node_modules/node-fetch": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", "dev": true, - "license": "MIT", - "peer": true, "dependencies": { "whatwg-url": "^5.0.0" }, @@ -2975,78 +2512,11 @@ } } }, - "node_modules/@expo/cli/node_modules/node-forge": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", - "dev": true, - "license": "(BSD-3-Clause OR GPL-2.0)", - "peer": true, - "engines": { - "node": ">= 6.13.0" - } - }, - "node_modules/@expo/cli/node_modules/open": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", - "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@expo/cli/node_modules/p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@expo/cli/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@expo/cli/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "node_modules/@expo/image-utils/node_modules/semver": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", "dev": true, - "license": "ISC", - "peer": true, "bin": { "semver": "bin/semver.js" }, @@ -3054,27 +2524,11 @@ "node": ">=10" } }, - "node_modules/@expo/cli/node_modules/ssri": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", - "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "minipass": "^3.1.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@expo/cli/node_modules/supports-color": { + "node_modules/@expo/image-utils/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "license": "MIT", - "peer": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -3082,2001 +2536,94 @@ "node": ">=8" } }, - "node_modules/@expo/cli/node_modules/temp-dir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", - "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==", + "node_modules/@expo/image-utils/node_modules/universalify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", + "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==", "dev": true, - "license": "MIT", - "peer": true, "engines": { - "node": ">=8" + "node": ">= 10.0.0" } }, - "node_modules/@expo/cli/node_modules/tempy": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/tempy/-/tempy-0.7.1.tgz", - "integrity": "sha512-vXPxwOyaNVi9nyczO16mxmHGpl6ASC5/TVhRRHpqeYHvKQm58EaWNvZXxAhR0lYYnBOQFjXjhzeLsaXdjxLjRg==", + "node_modules/@expo/spawn-async": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@expo/spawn-async/-/spawn-async-1.5.0.tgz", + "integrity": "sha512-LB7jWkqrHo+5fJHNrLAFdimuSXQ2MQ4lA7SQW5bf/HbsXuV2VrT/jN/M8f/KoWt0uJMGN4k/j7Opx4AvOOxSew==", "dev": true, - "license": "MIT", - "peer": true, "dependencies": { - "del": "^6.0.0", - "is-stream": "^2.0.0", - "temp-dir": "^2.0.0", - "type-fest": "^0.16.0", - "unique-string": "^2.0.0" - }, - "engines": { - "node": ">=10" + "cross-spawn": "^6.0.5" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@expo/cli/node_modules/type-fest": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz", - "integrity": "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "peer": true, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=4" } }, - "node_modules/@expo/cli/node_modules/unique-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", - "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "node_modules/@expo/spawn-async/node_modules/cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", "dev": true, - "license": "MIT", - "peer": true, "dependencies": { - "crypto-random-string": "^2.0.0" + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" }, "engines": { - "node": ">=8" + "node": ">=4.8" } }, - "node_modules/@expo/cli/node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "node_modules/@expo/spawn-async/node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", "dev": true, - "license": "MIT", - "peer": true, "engines": { - "node": ">= 4.0.0" + "node": ">=4" } }, - "node_modules/@expo/cli/node_modules/url-join": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.0.tgz", - "integrity": "sha512-EGXjXJZhIHiQMK2pQukuFcL303nskqIRzWvPvV5O8miOfwoUb9G+a/Cld60kUyeaybEI94wvVClT10DtfeAExA==", + "node_modules/@expo/spawn-async/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, - "license": "MIT", - "peer": true + "bin": { + "semver": "bin/semver" + } }, - "node_modules/@expo/cli/node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "node_modules/@expo/spawn-async/node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", "dev": true, - "license": "MIT", - "peer": true, "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" + "shebang-regex": "^1.0.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "node": ">=0.10.0" } }, - "node_modules/@expo/cli/node_modules/ws": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", - "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", + "node_modules/@expo/spawn-async/node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", "dev": true, - "license": "MIT", - "peer": true, "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/@expo/code-signing-certificates": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/@expo/code-signing-certificates/-/code-signing-certificates-0.0.5.tgz", - "integrity": "sha512-BNhXkY1bblxKZpltzAx98G2Egj9g1Q+JRcvR7E99DOj862FTCX+ZPsAUtPTr7aHxwtrL7+fL3r0JSmM9kBm+Bw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "node-forge": "^1.2.1", - "nullthrows": "^1.1.1" - } - }, - "node_modules/@expo/code-signing-certificates/node_modules/node-forge": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", - "dev": true, - "license": "(BSD-3-Clause OR GPL-2.0)", - "peer": true, - "engines": { - "node": ">= 6.13.0" - } - }, - "node_modules/@expo/config": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/@expo/config/-/config-8.1.2.tgz", - "integrity": "sha512-4e7hzPj50mQIlsrzOH6XZ36O094mPfPTIDIH4yv49bWNMc7GFLTofB/lcT+QyxiLaJuC0Wlk9yOLB8DIqmtwug==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/code-frame": "~7.10.4", - "@expo/config-plugins": "~7.2.0", - "@expo/config-types": "^49.0.0-alpha.1", - "@expo/json-file": "^8.2.37", - "getenv": "^1.0.0", - "glob": "7.1.6", - "require-from-string": "^2.0.2", - "resolve-from": "^5.0.0", - "semver": "7.5.3", - "slugify": "^1.3.4", - "sucrase": "^3.20.0" - } - }, - "node_modules/@expo/config-plugins": { - "version": "7.2.5", - "resolved": "https://registry.npmjs.org/@expo/config-plugins/-/config-plugins-7.2.5.tgz", - "integrity": "sha512-w+5ccu1IxBHgyQk9CPFKLZOk8yZQEyTjbJwOzESK1eR7QwosbcsLkN1c1WWUZYiCXwORu3UTwJYll4+X2xxJhQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@expo/config-types": "^49.0.0-alpha.1", - "@expo/json-file": "~8.2.37", - "@expo/plist": "^0.0.20", - "@expo/sdk-runtime-versions": "^1.0.0", - "@react-native/normalize-color": "^2.0.0", - "chalk": "^4.1.2", - "debug": "^4.3.1", - "find-up": "~5.0.0", - "getenv": "^1.0.0", - "glob": "7.1.6", - "resolve-from": "^5.0.0", - "semver": "^7.5.3", - "slash": "^3.0.0", - "xcode": "^3.0.1", - "xml2js": "0.6.0" - } - }, - "node_modules/@expo/config-plugins/node_modules/@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/highlight": "^7.10.4" - } - }, - "node_modules/@expo/config-plugins/node_modules/@expo/json-file": { - "version": "8.2.37", - "resolved": "https://registry.npmjs.org/@expo/json-file/-/json-file-8.2.37.tgz", - "integrity": "sha512-YaH6rVg11JoTS2P6LsW7ybS2CULjf40AbnAHw2F1eDPuheprNjARZMnyHFPkKv7GuxCy+B9GPcbOKgc4cgA80Q==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/code-frame": "~7.10.4", - "json5": "^2.2.2", - "write-file-atomic": "^2.3.0" - } - }, - "node_modules/@expo/config-plugins/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@expo/config-plugins/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@expo/config-plugins/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@expo/config-plugins/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/@expo/config-plugins/node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@expo/config-plugins/node_modules/glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dev": true, - "license": "ISC", - "peer": true, - "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" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@expo/config-plugins/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@expo/config-plugins/node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@expo/config-plugins/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@expo/config-plugins/node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@expo/config-plugins/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "dev": true, - "license": "ISC", - "peer": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@expo/config-plugins/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@expo/config-types": { - "version": "49.0.0", - "resolved": "https://registry.npmjs.org/@expo/config-types/-/config-types-49.0.0.tgz", - "integrity": "sha512-8eyREVi+K2acnMBe/rTIu1dOfyR2+AMnTLHlut+YpMV9OZPdeKV0Bs9BxAewGqBA2slslbQ9N39IS2CuTKpXkA==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/@expo/config/node_modules/@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/highlight": "^7.10.4" - } - }, - "node_modules/@expo/config/node_modules/glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dev": true, - "license": "ISC", - "peer": true, - "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" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@expo/config/node_modules/semver": { - "version": "7.5.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", - "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@expo/dev-server": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/@expo/dev-server/-/dev-server-0.5.5.tgz", - "integrity": "sha512-t0fT8xH1exwYsH5hh7bAt85VF+gXxg24qrbny2rR/iKoPTWFCd2JNQV8pvfLg51hvrywQ3YCBuT3lU1w7aZxFA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@expo/bunyan": "4.0.0", - "@expo/metro-config": "~0.10.0", - "@expo/osascript": "2.0.33", - "@expo/spawn-async": "^1.5.0", - "body-parser": "^1.20.1", - "chalk": "^4.0.0", - "connect": "^3.7.0", - "fs-extra": "9.0.0", - "is-docker": "^2.0.0", - "is-wsl": "^2.1.1", - "node-fetch": "^2.6.0", - "open": "^8.3.0", - "resolve-from": "^5.0.0", - "serialize-error": "6.0.0", - "temp-dir": "^2.0.0" - } - }, - "node_modules/@expo/dev-server/node_modules/@expo/osascript": { - "version": "2.0.33", - "resolved": "https://registry.npmjs.org/@expo/osascript/-/osascript-2.0.33.tgz", - "integrity": "sha512-FQinlwHrTlJbntp8a7NAlCKedVXe06Va/0DSLXRO8lZVtgbEMrYYSUZWQNcOlNtc58c2elNph6z9dMOYwSo3JQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@expo/spawn-async": "^1.5.0", - "exec-async": "^2.2.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@expo/dev-server/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@expo/dev-server/node_modules/body-parser": { - "version": "1.20.3", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", - "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.5", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.13.0", - "raw-body": "2.5.2", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/@expo/dev-server/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@expo/dev-server/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@expo/dev-server/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/@expo/dev-server/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/@expo/dev-server/node_modules/fs-extra": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.0.tgz", - "integrity": "sha512-pmEYSk3vYsG/bF651KPUXZ+hvjpgWYw/Gc7W9NFUe3ZVLczKKWIij3IKpOrQcdw4TILtibFslZ0UmR8Vvzig4g==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^1.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@expo/dev-server/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@expo/dev-server/node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@expo/dev-server/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/@expo/dev-server/node_modules/node-fetch": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/@expo/dev-server/node_modules/open": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", - "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@expo/dev-server/node_modules/qs": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", - "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", - "dev": true, - "license": "BSD-3-Clause", - "peer": true, - "dependencies": { - "side-channel": "^1.0.6" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/@expo/dev-server/node_modules/raw-body": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", - "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/@expo/dev-server/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@expo/dev-server/node_modules/temp-dir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", - "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@expo/dev-server/node_modules/universalify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", - "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/@expo/devcert": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/@expo/devcert/-/devcert-1.1.4.tgz", - "integrity": "sha512-fqBODr8c72+gBSX5Ty3SIzaY4bXainlpab78+vEYEKL3fXmsOswMLf0+KE36mUEAa36BYabX7K3EiXOXX5OPMw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "application-config-path": "^0.1.0", - "command-exists": "^1.2.4", - "debug": "^3.1.0", - "eol": "^0.9.1", - "get-port": "^3.2.0", - "glob": "^10.4.2", - "lodash": "^4.17.21", - "mkdirp": "^0.5.1", - "password-prompt": "^1.0.4", - "sudo-prompt": "^8.2.0", - "tmp": "^0.0.33", - "tslib": "^2.4.0" - } - }, - "node_modules/@expo/devcert/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@expo/devcert/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/@expo/devcert/node_modules/foreground-child": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", - "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "cross-spawn": "^7.0.0", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@expo/devcert/node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@expo/devcert/node_modules/jackspeak": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", - "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", - "dev": true, - "license": "BlueOak-1.0.0", - "peer": true, - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" - } - }, - "node_modules/@expo/devcert/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@expo/devcert/node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "dev": true, - "license": "ISC", - "peer": true, - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/@expo/devcert/node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/@expo/devcert/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, - "license": "ISC", - "peer": true, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@expo/devcert/node_modules/tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "os-tmpdir": "~1.0.2" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/@expo/env": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/@expo/env/-/env-0.0.5.tgz", - "integrity": "sha512-UXuKAqyXfhMQC3gP0OyjXmFX08Z1fkVWiGBN7bYzfoX8LHatjeHrDtI6w5nDvd8XPxPvmqaZoEDw1lW3+dz3oQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "chalk": "^4.0.0", - "debug": "^4.3.4", - "dotenv": "~16.0.3", - "dotenv-expand": "~10.0.0", - "getenv": "^1.0.0" - } - }, - "node_modules/@expo/env/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@expo/env/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@expo/env/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@expo/env/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/@expo/env/node_modules/dotenv": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.3.tgz", - "integrity": "sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==", - "dev": true, - "license": "BSD-2-Clause", - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/@expo/env/node_modules/dotenv-expand": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-10.0.0.tgz", - "integrity": "sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A==", - "dev": true, - "license": "BSD-2-Clause", - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/@expo/env/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@expo/env/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@expo/image-utils": { - "version": "0.3.23", - "resolved": "https://registry.npmjs.org/@expo/image-utils/-/image-utils-0.3.23.tgz", - "integrity": "sha512-nhUVvW0TrRE4jtWzHQl8TR4ox7kcmrc2I0itaeJGjxF5A54uk7avgA0wRt7jP1rdvqQo1Ke1lXyLYREdhN9tPw==", - "dev": true, - "dependencies": { - "@expo/spawn-async": "1.5.0", - "chalk": "^4.0.0", - "fs-extra": "9.0.0", - "getenv": "^1.0.0", - "jimp-compact": "0.16.1", - "mime": "^2.4.4", - "node-fetch": "^2.6.0", - "parse-png": "^2.1.0", - "resolve-from": "^5.0.0", - "semver": "7.3.2", - "tempy": "0.3.0" - } - }, - "node_modules/@expo/image-utils/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@expo/image-utils/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@expo/image-utils/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@expo/image-utils/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/@expo/image-utils/node_modules/fs-extra": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.0.tgz", - "integrity": "sha512-pmEYSk3vYsG/bF651KPUXZ+hvjpgWYw/Gc7W9NFUe3ZVLczKKWIij3IKpOrQcdw4TILtibFslZ0UmR8Vvzig4g==", - "dev": true, - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^1.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@expo/image-utils/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@expo/image-utils/node_modules/mime": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", - "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", - "dev": true, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/@expo/image-utils/node_modules/node-fetch": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", - "dev": true, - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/@expo/image-utils/node_modules/semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@expo/image-utils/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@expo/image-utils/node_modules/universalify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", - "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==", - "dev": true, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/@expo/json-file": { - "version": "8.3.3", - "resolved": "https://registry.npmjs.org/@expo/json-file/-/json-file-8.3.3.tgz", - "integrity": "sha512-eZ5dld9AD0PrVRiIWpRkm5aIoWBw3kAyd8VkuWEy92sEthBKDDDHAnK2a0dw0Eil6j7rK7lS/Qaq/Zzngv2h5A==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/code-frame": "~7.10.4", - "json5": "^2.2.2", - "write-file-atomic": "^2.3.0" - } - }, - "node_modules/@expo/json-file/node_modules/@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/highlight": "^7.10.4" - } - }, - "node_modules/@expo/metro-config": { - "version": "0.10.7", - "resolved": "https://registry.npmjs.org/@expo/metro-config/-/metro-config-0.10.7.tgz", - "integrity": "sha512-uACymEiyX0447hI4unt+2cemLQkTZXKvTev936NhtsgVnql45EP0V0pzmo/0H0WlHaAGXgvOBZJl8wFqcJ3CbQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@expo/config": "~8.1.0", - "@expo/env": "0.0.5", - "@expo/json-file": "~8.2.37", - "chalk": "^4.1.0", - "debug": "^4.3.2", - "find-yarn-workspace-root": "~2.0.0", - "getenv": "^1.0.0", - "jsc-safe-url": "^0.2.4", - "lightningcss": "~1.19.0", - "postcss": "~8.4.21", - "resolve-from": "^5.0.0", - "sucrase": "^3.20.0" - } - }, - "node_modules/@expo/metro-config/node_modules/@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/highlight": "^7.10.4" - } - }, - "node_modules/@expo/metro-config/node_modules/@expo/json-file": { - "version": "8.2.37", - "resolved": "https://registry.npmjs.org/@expo/json-file/-/json-file-8.2.37.tgz", - "integrity": "sha512-YaH6rVg11JoTS2P6LsW7ybS2CULjf40AbnAHw2F1eDPuheprNjARZMnyHFPkKv7GuxCy+B9GPcbOKgc4cgA80Q==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/code-frame": "~7.10.4", - "json5": "^2.2.2", - "write-file-atomic": "^2.3.0" - } - }, - "node_modules/@expo/metro-config/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@expo/metro-config/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@expo/metro-config/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@expo/metro-config/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/@expo/metro-config/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@expo/metro-config/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@expo/osascript": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@expo/osascript/-/osascript-2.1.3.tgz", - "integrity": "sha512-aOEkhPzDsaAfolSswObGiYW0Pf0ROfR9J2NBRLQACdQ6uJlyAMiPF45DVEVknAU9juKh0y8ZyvC9LXqLEJYohA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@expo/spawn-async": "^1.7.2", - "exec-async": "^2.2.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@expo/osascript/node_modules/@expo/spawn-async": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/@expo/spawn-async/-/spawn-async-1.7.2.tgz", - "integrity": "sha512-QdWi16+CHB9JYP7gma19OVVg0BFkvU8zNj9GjWorYI8Iv8FUxjOCcYRuAmX4s/h91e4e7BPsskc8cSrZYho9Ew==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "cross-spawn": "^7.0.3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@expo/package-manager": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@expo/package-manager/-/package-manager-1.1.2.tgz", - "integrity": "sha512-JI9XzrxB0QVXysyuJ996FPCJGDCYRkbUvgG4QmMTTMFA1T+mv8YzazC3T9C1pHQUAAveVCre1+Pqv0nZXN24Xg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@expo/json-file": "^8.2.37", - "@expo/spawn-async": "^1.5.0", - "ansi-regex": "^5.0.0", - "chalk": "^4.0.0", - "find-up": "^5.0.0", - "find-yarn-workspace-root": "~2.0.0", - "js-yaml": "^3.13.1", - "micromatch": "^4.0.2", - "npm-package-arg": "^7.0.0", - "split": "^1.0.1", - "sudo-prompt": "9.1.1" - } - }, - "node_modules/@expo/package-manager/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@expo/package-manager/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/@expo/package-manager/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@expo/package-manager/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@expo/package-manager/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/@expo/package-manager/node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@expo/package-manager/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@expo/package-manager/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/@expo/package-manager/node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@expo/package-manager/node_modules/micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/@expo/package-manager/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@expo/package-manager/node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@expo/package-manager/node_modules/sudo-prompt": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/sudo-prompt/-/sudo-prompt-9.1.1.tgz", - "integrity": "sha512-es33J1g2HjMpyAhz8lOR+ICmXXAqTuKbuXuUWLhOLew20oN9oUCgCJx615U/v7aioZg7IX5lIh9x34vwneu4pA==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/@expo/package-manager/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@expo/plist": { - "version": "0.0.20", - "resolved": "https://registry.npmjs.org/@expo/plist/-/plist-0.0.20.tgz", - "integrity": "sha512-UXQ4LXCfTZ580LDHGJ5q62jSTwJFFJ1GqBu8duQMThiHKWbMJ+gajJh6rsB6EJ3aLUr9wcauxneL5LVRFxwBEA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@xmldom/xmldom": "~0.7.7", - "base64-js": "^1.2.3", - "xmlbuilder": "^14.0.0" - } - }, - "node_modules/@expo/prebuild-config": { - "version": "6.2.6", - "resolved": "https://registry.npmjs.org/@expo/prebuild-config/-/prebuild-config-6.2.6.tgz", - "integrity": "sha512-uFVvDAm9dPg9p1qpnr4CVnpo2hmkZIL5FQz+VlIdXXJpe7ySh/qTGHtKWY/lWUshQkAJ0nwbKGPztGWdABns/Q==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@expo/config": "~8.1.0", - "@expo/config-plugins": "~7.2.0", - "@expo/config-types": "^49.0.0-alpha.1", - "@expo/image-utils": "0.3.22", - "@expo/json-file": "^8.2.37", - "debug": "^4.3.1", - "fs-extra": "^9.0.0", - "resolve-from": "^5.0.0", - "semver": "7.5.3", - "xml2js": "0.6.0" - }, - "peerDependencies": { - "expo-modules-autolinking": ">=0.8.1" - } - }, - "node_modules/@expo/prebuild-config/node_modules/@expo/image-utils": { - "version": "0.3.22", - "resolved": "https://registry.npmjs.org/@expo/image-utils/-/image-utils-0.3.22.tgz", - "integrity": "sha512-uzq+RERAtkWypOFOLssFnXXqEqKjNj9eXN7e97d/EXUAojNcLDoXc0sL+F5B1I4qtlsnhX01kcpoIBBZD8wZNQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@expo/spawn-async": "1.5.0", - "chalk": "^4.0.0", - "fs-extra": "9.0.0", - "getenv": "^1.0.0", - "jimp-compact": "0.16.1", - "mime": "^2.4.4", - "node-fetch": "^2.6.0", - "parse-png": "^2.1.0", - "resolve-from": "^5.0.0", - "semver": "7.3.2", - "tempy": "0.3.0" - } - }, - "node_modules/@expo/prebuild-config/node_modules/@expo/image-utils/node_modules/semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", - "dev": true, - "license": "ISC", - "peer": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@expo/prebuild-config/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@expo/prebuild-config/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@expo/prebuild-config/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@expo/prebuild-config/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/@expo/prebuild-config/node_modules/fs-extra": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.0.tgz", - "integrity": "sha512-pmEYSk3vYsG/bF651KPUXZ+hvjpgWYw/Gc7W9NFUe3ZVLczKKWIij3IKpOrQcdw4TILtibFslZ0UmR8Vvzig4g==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^1.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@expo/prebuild-config/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@expo/prebuild-config/node_modules/mime": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", - "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", - "dev": true, - "license": "MIT", - "peer": true, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/@expo/prebuild-config/node_modules/node-fetch": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/@expo/prebuild-config/node_modules/semver": { - "version": "7.5.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", - "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@expo/prebuild-config/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@expo/prebuild-config/node_modules/universalify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", - "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/@expo/rudder-sdk-node": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@expo/rudder-sdk-node/-/rudder-sdk-node-1.1.1.tgz", - "integrity": "sha512-uy/hS/awclDJ1S88w9UGpc6Nm9XnNUjzOAAib1A3PVAnGQIwebg8DpFqOthFBTlZxeuV/BKbZ5jmTbtNZkp1WQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@expo/bunyan": "^4.0.0", - "@segment/loosely-validate-event": "^2.0.0", - "fetch-retry": "^4.1.1", - "md5": "^2.2.1", - "node-fetch": "^2.6.1", - "remove-trailing-slash": "^0.1.0", - "uuid": "^8.3.2" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@expo/rudder-sdk-node/node_modules/fetch-retry": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/fetch-retry/-/fetch-retry-4.1.1.tgz", - "integrity": "sha512-e6eB7zN6UBSwGVwrbWVH+gdLnkW9WwHhmq2YDK1Sh30pzx1onRVGBvogTlUeWxwTa+L86NYdo4hFkh7O8ZjSnA==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/@expo/rudder-sdk-node/node_modules/node-fetch": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/@expo/rudder-sdk-node/node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true, - "license": "MIT", - "peer": true, - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/@expo/sdk-runtime-versions": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@expo/sdk-runtime-versions/-/sdk-runtime-versions-1.0.0.tgz", - "integrity": "sha512-Doz2bfiPndXYFPMRwPyGa1k5QaKDVpY806UJj570epIiMzWaYyCtobasyfC++qfIXVb5Ocy7r3tP9d62hAQ7IQ==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/@expo/spawn-async": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@expo/spawn-async/-/spawn-async-1.5.0.tgz", - "integrity": "sha512-LB7jWkqrHo+5fJHNrLAFdimuSXQ2MQ4lA7SQW5bf/HbsXuV2VrT/jN/M8f/KoWt0uJMGN4k/j7Opx4AvOOxSew==", - "dev": true, - "dependencies": { - "cross-spawn": "^6.0.5" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@expo/spawn-async/node_modules/cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "dependencies": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - }, - "engines": { - "node": ">=4.8" - } - }, - "node_modules/@expo/spawn-async/node_modules/path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@expo/spawn-async/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/@expo/spawn-async/node_modules/shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", - "dev": true, - "dependencies": { - "shebang-regex": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@expo/spawn-async/node_modules/shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@expo/spawn-async/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" + "node": ">=0.10.0" + } + }, + "node_modules/@expo/spawn-async/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" }, "bin": { "which": "bin/which" } }, - "node_modules/@expo/vector-icons": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/@expo/vector-icons/-/vector-icons-13.0.0.tgz", - "integrity": "sha512-TI+l71+5aSKnShYclFa14Kum+hQMZ86b95SH6tQUG3qZEmLTarvWpKwqtTwQKqvlJSJrpFiSFu3eCuZokY6zWA==", - "dev": true, - "license": "MIT", - "peer": true - }, "node_modules/@expo/webpack-config": { "version": "18.1.3", "resolved": "https://registry.npmjs.org/@expo/webpack-config/-/webpack-config-18.1.3.tgz", @@ -5818,308 +3365,129 @@ "node": ">= 12.13.0" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/@expo/webpack-config/node_modules/webpack-dev-middleware/node_modules/schema-utils": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", - "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/@expo/webpack-config/node_modules/webpack-dev-server": { - "version": "4.15.1", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.1.tgz", - "integrity": "sha512-5hbAst3h3C3L8w6W4P96L5vaV0PxSmJhxZvWKYIdgxOQm8pNZ5dEOmmSLBVpP85ReeyRt6AS1QJNyo/oFFPeVA==", - "dev": true, - "dependencies": { - "@types/bonjour": "^3.5.9", - "@types/connect-history-api-fallback": "^1.3.5", - "@types/express": "^4.17.13", - "@types/serve-index": "^1.9.1", - "@types/serve-static": "^1.13.10", - "@types/sockjs": "^0.3.33", - "@types/ws": "^8.5.5", - "ansi-html-community": "^0.0.8", - "bonjour-service": "^1.0.11", - "chokidar": "^3.5.3", - "colorette": "^2.0.10", - "compression": "^1.7.4", - "connect-history-api-fallback": "^2.0.0", - "default-gateway": "^6.0.3", - "express": "^4.17.3", - "graceful-fs": "^4.2.6", - "html-entities": "^2.3.2", - "http-proxy-middleware": "^2.0.3", - "ipaddr.js": "^2.0.1", - "launch-editor": "^2.6.0", - "open": "^8.0.9", - "p-retry": "^4.5.0", - "rimraf": "^3.0.2", - "schema-utils": "^4.0.0", - "selfsigned": "^2.1.1", - "serve-index": "^1.9.1", - "sockjs": "^0.3.24", - "spdy": "^4.0.2", - "webpack-dev-middleware": "^5.3.1", - "ws": "^8.13.0" - }, - "bin": { - "webpack-dev-server": "bin/webpack-dev-server.js" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.37.0 || ^5.0.0" - }, - "peerDependenciesMeta": { - "webpack": { - "optional": true - }, - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/@expo/webpack-config/node_modules/webpack-dev-server/node_modules/schema-utils": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", - "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/@expo/webpack-config/node_modules/ws": { - "version": "8.14.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.14.2.tgz", - "integrity": "sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g==", - "dev": true, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/@expo/xcpretty": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/@expo/xcpretty/-/xcpretty-4.3.1.tgz", - "integrity": "sha512-sqXgo1SCv+j4VtYEwl/bukuOIBrVgx6euIoCat3Iyx5oeoXwEA2USCoeL0IPubflMxncA2INkqJ/Wr3NGrSgzw==", - "dev": true, - "license": "BSD-3-Clause", - "peer": true, - "dependencies": { - "@babel/code-frame": "7.10.4", - "chalk": "^4.1.0", - "find-up": "^5.0.0", - "js-yaml": "^4.1.0" - }, - "bin": { - "excpretty": "build/cli.js" - } - }, - "node_modules/@expo/xcpretty/node_modules/@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/highlight": "^7.10.4" - } - }, - "node_modules/@expo/xcpretty/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@expo/xcpretty/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@expo/xcpretty/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@expo/xcpretty/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/@expo/xcpretty/node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@expo/xcpretty/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=8" + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" } }, - "node_modules/@expo/xcpretty/node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "node_modules/@expo/webpack-config/node_modules/webpack-dev-middleware/node_modules/schema-utils": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", "dev": true, - "license": "MIT", - "peer": true, "dependencies": { - "p-locate": "^5.0.0" + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" }, "engines": { - "node": ">=10" + "node": ">= 12.13.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, - "node_modules/@expo/xcpretty/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "node_modules/@expo/webpack-config/node_modules/webpack-dev-server": { + "version": "4.15.1", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.1.tgz", + "integrity": "sha512-5hbAst3h3C3L8w6W4P96L5vaV0PxSmJhxZvWKYIdgxOQm8pNZ5dEOmmSLBVpP85ReeyRt6AS1QJNyo/oFFPeVA==", "dev": true, - "license": "MIT", - "peer": true, "dependencies": { - "yocto-queue": "^0.1.0" + "@types/bonjour": "^3.5.9", + "@types/connect-history-api-fallback": "^1.3.5", + "@types/express": "^4.17.13", + "@types/serve-index": "^1.9.1", + "@types/serve-static": "^1.13.10", + "@types/sockjs": "^0.3.33", + "@types/ws": "^8.5.5", + "ansi-html-community": "^0.0.8", + "bonjour-service": "^1.0.11", + "chokidar": "^3.5.3", + "colorette": "^2.0.10", + "compression": "^1.7.4", + "connect-history-api-fallback": "^2.0.0", + "default-gateway": "^6.0.3", + "express": "^4.17.3", + "graceful-fs": "^4.2.6", + "html-entities": "^2.3.2", + "http-proxy-middleware": "^2.0.3", + "ipaddr.js": "^2.0.1", + "launch-editor": "^2.6.0", + "open": "^8.0.9", + "p-retry": "^4.5.0", + "rimraf": "^3.0.2", + "schema-utils": "^4.0.0", + "selfsigned": "^2.1.1", + "serve-index": "^1.9.1", + "sockjs": "^0.3.24", + "spdy": "^4.0.2", + "webpack-dev-middleware": "^5.3.1", + "ws": "^8.13.0" + }, + "bin": { + "webpack-dev-server": "bin/webpack-dev-server.js" }, "engines": { - "node": ">=10" + "node": ">= 12.13.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.37.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + }, + "webpack-cli": { + "optional": true + } } }, - "node_modules/@expo/xcpretty/node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "node_modules/@expo/webpack-config/node_modules/webpack-dev-server/node_modules/schema-utils": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", "dev": true, - "license": "MIT", - "peer": true, "dependencies": { - "p-limit": "^3.0.2" + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" }, "engines": { - "node": ">=10" + "node": ">= 12.13.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, - "node_modules/@expo/xcpretty/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/@expo/webpack-config/node_modules/ws": { + "version": "8.14.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.14.2.tgz", + "integrity": "sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g==", "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "has-flag": "^4.0.0" - }, "engines": { - "node": ">=8" + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } } }, "node_modules/@floating-ui/core": { @@ -6165,20 +3533,9 @@ "dev": true, "license": "MIT" }, - "node_modules/@graphql-typed-document-node/core": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@graphql-typed-document-node/core/-/core-3.2.0.tgz", - "integrity": "sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==", - "dev": true, - "license": "MIT", - "peer": true, - "peerDependencies": { - "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" - } - }, "node_modules/@humanwhocodes/config-array": { "version": "0.5.0", - "devOptional": true, + "dev": true, "license": "Apache-2.0", "dependencies": { "@humanwhocodes/object-schema": "^1.2.0", @@ -6191,7 +3548,7 @@ }, "node_modules/@humanwhocodes/object-schema": { "version": "1.2.1", - "devOptional": true, + "dev": true, "license": "BSD-3-Clause" }, "node_modules/@isaacs/cliui": { @@ -6705,527 +4062,6 @@ "node": ">=8" } }, - "node_modules/@jest/expect": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", - "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "expect": "^29.7.0", - "jest-snapshot": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/expect-utils": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", - "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "jest-get-type": "^29.6.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/expect-utils/node_modules/jest-get-type": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", - "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/expect/node_modules/@jest/transform": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", - "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@babel/core": "^7.11.6", - "@jest/types": "^29.6.3", - "@jridgewell/trace-mapping": "^0.3.18", - "babel-plugin-istanbul": "^6.1.1", - "chalk": "^4.0.0", - "convert-source-map": "^2.0.0", - "fast-json-stable-stringify": "^2.1.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "jest-regex-util": "^29.6.3", - "jest-util": "^29.7.0", - "micromatch": "^4.0.4", - "pirates": "^4.0.4", - "slash": "^3.0.0", - "write-file-atomic": "^4.0.2" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/expect/node_modules/@jest/types": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", - "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@jest/schemas": "^29.6.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/expect/node_modules/@types/yargs": { - "version": "17.0.33", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", - "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@jest/expect/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/expect/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@jest/expect/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@jest/expect/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/@jest/expect/node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/@jest/expect/node_modules/diff-sequences": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", - "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/expect/node_modules/expect": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", - "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@jest/expect-utils": "^29.7.0", - "jest-get-type": "^29.6.3", - "jest-matcher-utils": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/expect/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/expect/node_modules/jest-diff": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", - "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^29.6.3", - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/expect/node_modules/jest-get-type": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", - "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/expect/node_modules/jest-haste-map": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", - "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@jest/types": "^29.6.3", - "@types/graceful-fs": "^4.1.3", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-regex-util": "^29.6.3", - "jest-util": "^29.7.0", - "jest-worker": "^29.7.0", - "micromatch": "^4.0.4", - "walker": "^1.0.8" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "optionalDependencies": { - "fsevents": "^2.3.2" - } - }, - "node_modules/@jest/expect/node_modules/jest-matcher-utils": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", - "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "chalk": "^4.0.0", - "jest-diff": "^29.7.0", - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/expect/node_modules/jest-message-util": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", - "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^29.6.3", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^29.7.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/expect/node_modules/jest-regex-util": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", - "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/expect/node_modules/jest-snapshot": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", - "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@babel/core": "^7.11.6", - "@babel/generator": "^7.7.2", - "@babel/plugin-syntax-jsx": "^7.7.2", - "@babel/plugin-syntax-typescript": "^7.7.2", - "@babel/types": "^7.3.3", - "@jest/expect-utils": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "babel-preset-current-node-syntax": "^1.0.0", - "chalk": "^4.0.0", - "expect": "^29.7.0", - "graceful-fs": "^4.2.9", - "jest-diff": "^29.7.0", - "jest-get-type": "^29.6.3", - "jest-matcher-utils": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0", - "natural-compare": "^1.4.0", - "pretty-format": "^29.7.0", - "semver": "^7.5.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/expect/node_modules/jest-util": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", - "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/expect/node_modules/jest-worker": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", - "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@types/node": "*", - "jest-util": "^29.7.0", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/expect/node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/@jest/expect/node_modules/micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/@jest/expect/node_modules/pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/expect/node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/expect/node_modules/react-is": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/@jest/expect/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@jest/expect/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/expect/node_modules/write-file-atomic": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", - "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true, - "dependencies": { - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.7" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, "node_modules/@jest/fake-timers": { "version": "27.5.1", "dev": true, @@ -7329,323 +4165,6 @@ "node": ">=8" } }, - "node_modules/@jest/globals": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", - "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/expect": "^29.7.0", - "@jest/types": "^29.6.3", - "jest-mock": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/globals/node_modules/@jest/environment": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", - "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@jest/fake-timers": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-mock": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/globals/node_modules/@jest/fake-timers": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", - "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@jest/types": "^29.6.3", - "@sinonjs/fake-timers": "^10.0.2", - "@types/node": "*", - "jest-message-util": "^29.7.0", - "jest-mock": "^29.7.0", - "jest-util": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/globals/node_modules/@jest/types": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", - "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@jest/schemas": "^29.6.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/globals/node_modules/@sinonjs/commons": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", - "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", - "dev": true, - "license": "BSD-3-Clause", - "optional": true, - "peer": true, - "dependencies": { - "type-detect": "4.0.8" - } - }, - "node_modules/@jest/globals/node_modules/@sinonjs/fake-timers": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", - "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", - "dev": true, - "license": "BSD-3-Clause", - "optional": true, - "peer": true, - "dependencies": { - "@sinonjs/commons": "^3.0.0" - } - }, - "node_modules/@jest/globals/node_modules/@types/yargs": { - "version": "17.0.33", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", - "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@jest/globals/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/globals/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@jest/globals/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@jest/globals/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/@jest/globals/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/globals/node_modules/jest-message-util": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", - "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^29.6.3", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^29.7.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/globals/node_modules/jest-mock": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", - "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-util": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/globals/node_modules/jest-util": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", - "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/globals/node_modules/micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/@jest/globals/node_modules/pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/globals/node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/globals/node_modules/react-is": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/@jest/globals/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/@jest/reporters": { "version": "27.5.1", "dev": true, @@ -9516,14 +6035,6 @@ "@babel/runtime": "^7.13.10" } }, - "node_modules/@react-native/normalize-color": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@react-native/normalize-color/-/normalize-color-2.1.0.tgz", - "integrity": "sha512-Z1jQI2NpdFJCVgpY+8Dq/Bt3d+YUi1928Q+/CZm/oh66fzM0RUl54vvuXlPJKybH4pdCZey1eDTPaLHkMPNgWA==", - "dev": true, - "license": "MIT", - "peer": true - }, "node_modules/@reduxjs/toolkit": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-2.3.0.tgz", @@ -9554,17 +6065,6 @@ "integrity": "sha512-K/BG6eIky/SBpzfHZv/dd+9JBFiS4SWV7FIujVyJRux6e45+73RaUHXLmIR1f7WOMaQ0U1km6qwklRQxpJJY0w==", "license": "MIT" }, - "node_modules/@segment/loosely-validate-event": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@segment/loosely-validate-event/-/loosely-validate-event-2.0.0.tgz", - "integrity": "sha512-ZMCSfztDBqwotkl848ODgVcAmN4OItEWDCkshcKz0/W6gGSQayuuCtWV/MlodFivAZD793d6UgANd6wCXUfrIw==", - "dev": true, - "peer": true, - "dependencies": { - "component-type": "^1.2.1", - "join-component": "^1.1.0" - } - }, "node_modules/@sinclair/typebox": { "version": "0.27.8", "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", @@ -15074,7 +11574,7 @@ "version": "1.19.4", "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.4.tgz", "integrity": "sha512-N7UDG0/xiPQa2D/XrVJXjkWbpqHCd2sBaB32ggRF2l83RhPfamgKGF8gwwqyksS95qUS5ZYF9aF+lLPRlwI2UA==", - "devOptional": true, + "dev": true, "dependencies": { "@types/connect": "*", "@types/node": "*" @@ -15115,7 +11615,7 @@ "version": "3.4.37", "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.37.tgz", "integrity": "sha512-zBUSRqkfZ59OcwXon4HVxhx5oWCJmc0OtBTK05M+p0dYjgN6iTwIL2T/WbsQZrEsdnwaF9cWQ+azOnpPvIqY3Q==", - "devOptional": true, + "dev": true, "dependencies": { "@types/node": "*" } @@ -15236,7 +11736,7 @@ "version": "4.17.20", "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.20.tgz", "integrity": "sha512-rOaqlkgEvOW495xErXMsmyX3WKBInbhG5eqojXYi3cGUaLoRDlXa5d52fkfWZT963AZ3v2eZ4MbKE6WpDAGVsw==", - "devOptional": true, + "dev": true, "dependencies": { "@types/body-parser": "*", "@types/express-serve-static-core": "^4.17.33", @@ -15248,7 +11748,7 @@ "version": "4.17.39", "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.39.tgz", "integrity": "sha512-BiEUfAiGCOllomsRAZOiMFP7LAnrifHpt56pc4Z7l9K6ACyN06Ns1JLMBxwkfLOjJRlSf06NwWsT7yzfpaVpyQ==", - "devOptional": true, + "dev": true, "dependencies": { "@types/node": "*", "@types/qs": "*", @@ -15309,7 +11809,7 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.3.tgz", "integrity": "sha512-pP0P/9BnCj1OVvQR2lF41EkDG/lWWnDyA203b/4Fmi2eTyORnBtcDoKDwjWQthELrBvWkMOrvSOnZ8OVlW6tXA==", - "devOptional": true + "dev": true }, "node_modules/@types/http-proxy": { "version": "1.17.13", @@ -15397,7 +11897,7 @@ "version": "1.3.4", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.4.tgz", "integrity": "sha512-1Gjee59G25MrQGk8bsNvC6fxNiRgUlGn2wlhGf95a59DrprnnHk80FIMMFG9XHMdrfsuA119ht06QPDXA1Z7tw==", - "devOptional": true + "dev": true }, "node_modules/@types/minimatch": { "version": "3.0.5", @@ -15489,7 +11989,7 @@ "version": "1.2.6", "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.6.tgz", "integrity": "sha512-+0autS93xyXizIYiyL02FCY8N+KkKPhILhcUSA276HxzreZ16kl+cmwvV2qAM/PuCCwPXzOXOWhiPcw20uSFcA==", - "devOptional": true + "dev": true }, "node_modules/@types/react": { "version": "17.0.83", @@ -15578,7 +12078,7 @@ "version": "0.17.3", "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.3.tgz", "integrity": "sha512-/7fKxvKUoETxjFUsuFlPB9YndePpxxRAOfGC/yJdc9kTjTeP5kRCTzfnE8kPUKCeyiyIZu0YQ76s50hCedI1ug==", - "devOptional": true, + "dev": true, "dependencies": { "@types/mime": "^1", "@types/node": "*" @@ -15597,7 +12097,7 @@ "version": "1.15.4", "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.4.tgz", "integrity": "sha512-aqqNfs1XTF0HDrFdlY//+SGUxmdSUbjeRXb5iaZc3x0/vMbYmdw9qvOgHWOyyLFxSSRnUuP5+724zBgfw8/WAw==", - "devOptional": true, + "dev": true, "dependencies": { "@types/http-errors": "*", "@types/mime": "*", @@ -15951,36 +12451,6 @@ "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@urql/core": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/@urql/core/-/core-2.3.6.tgz", - "integrity": "sha512-PUxhtBh7/8167HJK6WqBv6Z0piuiaZHQGYbhwpNL9aIQmLROPEdaUYkY4wh45wPQXcTpnd11l0q3Pw+TI11pdw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@graphql-typed-document-node/core": "^3.1.0", - "wonka": "^4.0.14" - }, - "peerDependencies": { - "graphql": "^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" - } - }, - "node_modules/@urql/exchange-retry": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@urql/exchange-retry/-/exchange-retry-0.3.0.tgz", - "integrity": "sha512-hHqer2mcdVC0eYnVNbWyi28AlGOPb2vjH3lP3/Bc8Lc8BjhMsDwFMm7WhoP5C1+cfbr/QJ6Er3H/L08wznXxfg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@urql/core": ">=2.3.1", - "wonka": "^4.0.14" - }, - "peerDependencies": { - "graphql": "^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0" - } - }, "node_modules/@webassemblyjs/ast": { "version": "1.9.0", "license": "MIT", @@ -16267,18 +12737,6 @@ "react": "^17.0.0-0" } }, - "node_modules/@xmldom/xmldom": { - "version": "0.7.13", - "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.7.13.tgz", - "integrity": "sha512-lm2GW5PkosIzccsaZIz7tp8cPADSIlIHWDFTR1N0SzfinhhYgeIQjFMz4rYzanCScr3DqQLeomUDArp6MWKm+g==", - "deprecated": "this version is no longer supported, please update to at least 0.8.*", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=10.0.0" - } - }, "node_modules/@xtuc/ieee754": { "version": "1.2.0", "license": "BSD-3-Clause" @@ -16344,7 +12802,7 @@ }, "node_modules/acorn-jsx": { "version": "5.3.2", - "devOptional": true, + "dev": true, "license": "MIT", "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" @@ -16586,14 +13044,6 @@ "node": ">=8.0.0" } }, - "node_modules/any-promise": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", - "dev": true, - "license": "MIT", - "peer": true - }, "node_modules/anymatch": { "version": "3.1.2", "license": "ISC", @@ -16609,14 +13059,6 @@ "version": "1.0.2", "license": "MIT" }, - "node_modules/application-config-path": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/application-config-path/-/application-config-path-0.1.1.tgz", - "integrity": "sha512-zy9cHePtMP0YhwG+CfHm0bgwdnga2X3gZexpdCwEj//dpb+TKajtiC8REEUJUSq6Ab4f9cgNy2l8ObXzCXFkEw==", - "dev": true, - "license": "MIT", - "peer": true - }, "node_modules/aproba": { "version": "2.0.0", "license": "ISC" @@ -16632,14 +13074,6 @@ "node": ">=10" } }, - "node_modules/arg": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.0.tgz", - "integrity": "sha512-ZWc51jO3qegGkVh8Hwpv636EkbesNV5ZNQPCtRa+0qytRYPEs9IYT9qITY9buezqUH5uqyzlWLcufrzU2rffdg==", - "dev": true, - "license": "MIT", - "peer": true - }, "node_modules/argparse": { "version": "2.0.1", "license": "Python-2.0" @@ -16980,7 +13414,7 @@ }, "node_modules/astral-regex": { "version": "2.0.0", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -17840,80 +14274,6 @@ "npm": ">=6" } }, - "node_modules/babel-plugin-module-resolver": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/babel-plugin-module-resolver/-/babel-plugin-module-resolver-5.0.2.tgz", - "integrity": "sha512-9KtaCazHee2xc0ibfqsDeamwDps6FZNo5S0Q81dUqEuFzVwPhcT4J5jOqIVvgCA3Q/wO9hKYxN/Ds3tIsp5ygg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "find-babel-config": "^2.1.1", - "glob": "^9.3.3", - "pkg-up": "^3.1.0", - "reselect": "^4.1.7", - "resolve": "^1.22.8" - } - }, - "node_modules/babel-plugin-module-resolver/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/babel-plugin-module-resolver/node_modules/glob": { - "version": "9.3.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-9.3.5.tgz", - "integrity": "sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "minimatch": "^8.0.2", - "minipass": "^4.2.4", - "path-scurry": "^1.6.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/babel-plugin-module-resolver/node_modules/minimatch": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-8.0.4.tgz", - "integrity": "sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/babel-plugin-module-resolver/node_modules/minipass": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.8.tgz", - "integrity": "sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==", - "dev": true, - "license": "ISC", - "peer": true, - "engines": { - "node": ">=8" - } - }, "node_modules/babel-plugin-named-exports-order": { "version": "0.0.2", "license": "MIT" @@ -17982,14 +14342,6 @@ "react-docgen": "^5.0.0" } }, - "node_modules/babel-plugin-react-native-web": { - "version": "0.18.12", - "resolved": "https://registry.npmjs.org/babel-plugin-react-native-web/-/babel-plugin-react-native-web-0.18.12.tgz", - "integrity": "sha512-4djr9G6fMdwQoD6LQ7hOKAm39+y12flWgovAqS1k5O8f42YQ3A1FFMyV5kKfetZuGhZO5BmNmOdRRZQ1TixtDw==", - "dev": true, - "license": "MIT", - "peer": true - }, "node_modules/babel-plugin-syntax-flow": { "version": "6.18.0", "dev": true, @@ -18245,17 +14597,6 @@ "regjsparser": "bin/parser" } }, - "node_modules/babel-plugin-transform-flow-enums": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-flow-enums/-/babel-plugin-transform-flow-enums-0.0.2.tgz", - "integrity": "sha512-g4aaCrDDOsWjbm0PUUeVnkcVd6AKJsVc/MbnPhEotEpkeJQP6b8nzewohQi7+QS8UyPehOhGWn0nOwjvWpmMvQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/plugin-syntax-flow": "^7.12.1" - } - }, "node_modules/babel-plugin-transform-flow-strip-types": { "version": "6.22.0", "dev": true, @@ -18381,24 +14722,6 @@ "babel-plugin-transform-regenerator": "^6.24.1" } }, - "node_modules/babel-preset-expo": { - "version": "9.5.2", - "resolved": "https://registry.npmjs.org/babel-preset-expo/-/babel-preset-expo-9.5.2.tgz", - "integrity": "sha512-hU1G1TDiikuXV6UDZjPnX+WdbjbtidDiYhftMEVrZQSst45pDPVBWbM41TUKrpJMwv4FypsLzK+378gnMPRVWQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/plugin-proposal-decorators": "^7.12.9", - "@babel/plugin-proposal-export-namespace-from": "^7.18.9", - "@babel/plugin-proposal-object-rest-spread": "^7.12.13", - "@babel/plugin-transform-react-jsx": "^7.12.17", - "@babel/preset-env": "^7.20.0", - "babel-plugin-module-resolver": "^5.0.0", - "babel-plugin-react-native-web": "~0.18.10", - "metro-react-native-babel-preset": "0.76.8" - } - }, "node_modules/babel-preset-flow": { "version": "6.23.0", "dev": true, @@ -18711,6 +15034,7 @@ "version": "1.6.51", "dev": true, "license": "Unlicense", + "optional": true, "engines": { "node": ">=0.6" } @@ -18776,14 +15100,6 @@ "version": "3.7.2", "license": "MIT" }, - "node_modules/blueimp-md5": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/blueimp-md5/-/blueimp-md5-2.19.0.tgz", - "integrity": "sha512-DRQrD6gJyy8FbiE4s+bDoXS9hiW3Vbx5uCdwvcCf3zLHL+Iv7LtGHLpr+GZV8rHG8tK766FGYBwRbu8pELTt+w==", - "dev": true, - "license": "MIT", - "peer": true - }, "node_modules/bn.js": { "version": "5.2.1", "license": "MIT" @@ -19016,42 +15332,6 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/bplist-creator": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/bplist-creator/-/bplist-creator-0.1.0.tgz", - "integrity": "sha512-sXaHZicyEEmY86WyueLTQesbeoH/mquvarJaQNbjuOQO+7gbFcDEWqKmcWA4cOTLzFlfgvkiVxolk1k5bBIpmg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "stream-buffers": "2.2.x" - } - }, - "node_modules/bplist-creator/node_modules/stream-buffers": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/stream-buffers/-/stream-buffers-2.2.0.tgz", - "integrity": "sha512-uyQK/mx5QjHun80FLJTfaWE7JtwfRMKBLkMne6udYOmvH0CawotVa7TfgYHzAnpphn4+TweIx1QKMnRIbipmUg==", - "dev": true, - "license": "Unlicense", - "peer": true, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/bplist-parser": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.3.2.tgz", - "integrity": "sha512-apC2+fspHGI3mMKj+dGevkGo/tCqVB8jMb6i+OX+E29p0Iposz07fABkRIfVUPNd5A5VbuOz1bZbnmkKLYF+wQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "big-integer": "1.6.x" - }, - "engines": { - "node": ">= 5.10.0" - } - }, "node_modules/brace-expansion": { "version": "1.1.11", "license": "MIT", @@ -19250,14 +15530,6 @@ "version": "3.0.0", "license": "MIT" }, - "node_modules/builtins": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", - "integrity": "sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ==", - "dev": true, - "license": "MIT", - "peer": true - }, "node_modules/byline": { "version": "5.0.0", "license": "MIT", @@ -19764,17 +16036,6 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/charenc": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", - "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==", - "dev": true, - "license": "BSD-3-Clause", - "peer": true, - "engines": { - "node": "*" - } - }, "node_modules/cheerio": { "version": "1.0.0-rc.12", "dev": true, @@ -20088,34 +16349,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "restore-cursor": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cli-spinners": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", - "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/cli-table3": { "version": "0.6.2", "dev": true, @@ -20185,17 +16418,6 @@ "node": ">=6" } }, - "node_modules/clone": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.8" - } - }, "node_modules/clone-deep": { "version": "4.0.1", "license": "MIT", @@ -20321,29 +16543,10 @@ "version": "1.0.1", "license": "MIT" }, - "node_modules/compare-versions": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-3.6.0.tgz", - "integrity": "sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA==", - "dev": true, - "license": "MIT", - "peer": true - }, "node_modules/component-emitter": { "version": "1.3.0", "license": "MIT" }, - "node_modules/component-type": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/component-type/-/component-type-1.2.2.tgz", - "integrity": "sha512-99VUHREHiN5cLeHm3YLq312p6v+HUEcwtLCAtelvUDI6+SH5g5Cr85oNR2S1o6ywzL0ykMbuwLzM2ANocjEOIA==", - "dev": true, - "license": "MIT", - "peer": true, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/compress-brotli": { "version": "1.3.8", "license": "MIT", @@ -20458,23 +16661,6 @@ "proto-list": "~1.2.1" } }, - "node_modules/connect": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", - "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "debug": "2.6.9", - "finalhandler": "1.1.2", - "parseurl": "~1.3.3", - "utils-merge": "1.0.1" - }, - "engines": { - "node": ">= 0.10.0" - } - }, "node_modules/connect-history-api-fallback": { "version": "1.6.0", "dev": true, @@ -20483,70 +16669,6 @@ "node": ">=0.8" } }, - "node_modules/connect/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/connect/node_modules/finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/connect/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/connect/node_modules/on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/connect/node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/console-browserify": { "version": "1.2.0" }, @@ -21066,39 +17188,6 @@ "sha.js": "^2.4.8" } }, - "node_modules/cross-fetch": { - "version": "3.1.8", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.8.tgz", - "integrity": "sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "node-fetch": "^2.6.12" - } - }, - "node_modules/cross-fetch/node_modules/node-fetch": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, "node_modules/cross-spawn": { "version": "7.0.3", "license": "MIT", @@ -21111,17 +17200,6 @@ "node": ">= 8" } }, - "node_modules/crypt": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", - "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==", - "dev": true, - "license": "BSD-3-Clause", - "peer": true, - "engines": { - "node": "*" - } - }, "node_modules/crypto-browserify": { "version": "3.12.0", "license": "MIT", @@ -22458,14 +18536,6 @@ "integrity": "sha512-dArJ32hchFsrQ8uMiTBLq256MpnZjeuBtdHpaDlYuQyjU0CVzCJl/BVW+SkszaAeH95D/8gxqAhgx0ouAWAfRg==", "dev": true }, - "node_modules/dag-map": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/dag-map/-/dag-map-1.0.2.tgz", - "integrity": "sha512-+LSAiGFwQ9dRnRdOeaj7g47ZFJcOUPukAP8J3A3fuZ1g9Y44BG+P1sgApjLXTQPOzC4+7S9Wr8kXsfpINM4jpw==", - "dev": true, - "license": "MIT", - "peer": true - }, "node_modules/dashdash": { "version": "1.14.1", "license": "MIT", @@ -22847,7 +18917,7 @@ }, "node_modules/deep-is": { "version": "0.1.4", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/deepmerge": { @@ -23003,31 +19073,6 @@ "which": "bin/which" } }, - "node_modules/defaults": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", - "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "clone": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/defaults/node_modules/clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.8" - } - }, "node_modules/defer-to-connect": { "version": "2.0.1", "license": "MIT", @@ -23232,20 +19277,6 @@ "node": ">=0.10.0" } }, - "node_modules/detect-libc": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", - "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", - "dev": true, - "license": "Apache-2.0", - "peer": true, - "bin": { - "detect-libc": "bin/detect-libc.js" - }, - "engines": { - "node": ">=0.10" - } - }, "node_modules/detect-newline": { "version": "3.1.0", "dev": true, @@ -23366,7 +19397,7 @@ }, "node_modules/doctrine": { "version": "3.0.0", - "devOptional": true, + "dev": true, "license": "Apache-2.0", "dependencies": { "esutils": "^2.0.2" @@ -23828,7 +19859,7 @@ }, "node_modules/enquirer": { "version": "2.3.6", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "ansi-colors": "^4.1.1" @@ -23839,7 +19870,7 @@ }, "node_modules/enquirer/node_modules/ansi-colors": { "version": "4.1.3", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -23852,17 +19883,6 @@ "url": "https://github.com/fb55/entities?sponsor=1" } }, - "node_modules/env-editor": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/env-editor/-/env-editor-0.4.2.tgz", - "integrity": "sha512-ObFo8v4rQJAE59M69QzwloxPZtd33TpYEIjtKD1rrFDcM1Gd7IkDxEBU+HriziN6HSHQnBJi8Dmy+JWkav5HKA==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=8" - } - }, "node_modules/envinfo": { "version": "7.8.1", "dev": true, @@ -24017,14 +20037,6 @@ "enzyme": "^3.4.0" } }, - "node_modules/eol": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/eol/-/eol-0.9.1.tgz", - "integrity": "sha512-Ds/TEoZjwggRoz/Q2O7SE3i4Jm66mqTDfmdHdq/7DKVk3bro9Q8h6WdXKdPqFLMoqxrDK5SVRzHVPOS6uuGtrg==", - "dev": true, - "license": "MIT", - "peer": true - }, "node_modules/errno": { "version": "0.1.8", "license": "MIT", @@ -24338,7 +20350,7 @@ }, "node_modules/eslint": { "version": "7.32.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@babel/code-frame": "7.12.11", @@ -24498,7 +20510,7 @@ }, "node_modules/eslint-visitor-keys": { "version": "2.1.0", - "devOptional": true, + "dev": true, "license": "Apache-2.0", "engines": { "node": ">=10" @@ -24506,7 +20518,7 @@ }, "node_modules/eslint/node_modules/@babel/code-frame": { "version": "7.12.11", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@babel/highlight": "^7.10.4" @@ -24514,7 +20526,7 @@ }, "node_modules/eslint/node_modules/ansi-styles": { "version": "4.3.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "color-convert": "^2.0.1" @@ -24528,7 +20540,7 @@ }, "node_modules/eslint/node_modules/argparse": { "version": "1.0.10", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "sprintf-js": "~1.0.2" @@ -24536,7 +20548,7 @@ }, "node_modules/eslint/node_modules/chalk": { "version": "4.1.2", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", @@ -24551,7 +20563,7 @@ }, "node_modules/eslint/node_modules/color-convert": { "version": "2.0.1", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "color-name": "~1.1.4" @@ -24562,12 +20574,12 @@ }, "node_modules/eslint/node_modules/color-name": { "version": "1.1.4", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/eslint/node_modules/escape-string-regexp": { "version": "4.0.0", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=10" @@ -24578,7 +20590,7 @@ }, "node_modules/eslint/node_modules/eslint-scope": { "version": "5.1.1", - "devOptional": true, + "dev": true, "license": "BSD-2-Clause", "dependencies": { "esrecurse": "^4.3.0", @@ -24590,7 +20602,7 @@ }, "node_modules/eslint/node_modules/eslint-utils": { "version": "2.1.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "eslint-visitor-keys": "^1.1.0" @@ -24604,7 +20616,7 @@ }, "node_modules/eslint/node_modules/eslint-utils/node_modules/eslint-visitor-keys": { "version": "1.3.0", - "devOptional": true, + "dev": true, "license": "Apache-2.0", "engines": { "node": ">=4" @@ -24612,7 +20624,7 @@ }, "node_modules/eslint/node_modules/globals": { "version": "13.17.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "type-fest": "^0.20.2" @@ -24626,7 +20638,7 @@ }, "node_modules/eslint/node_modules/has-flag": { "version": "4.0.0", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -24634,7 +20646,7 @@ }, "node_modules/eslint/node_modules/ignore": { "version": "4.0.6", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">= 4" @@ -24642,7 +20654,7 @@ }, "node_modules/eslint/node_modules/js-yaml": { "version": "3.14.1", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "argparse": "^1.0.7", @@ -24654,7 +20666,7 @@ }, "node_modules/eslint/node_modules/levn": { "version": "0.4.1", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1", @@ -24666,7 +20678,7 @@ }, "node_modules/eslint/node_modules/optionator": { "version": "0.9.1", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "deep-is": "^0.1.3", @@ -24682,7 +20694,7 @@ }, "node_modules/eslint/node_modules/prelude-ls": { "version": "1.2.1", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">= 0.8.0" @@ -24690,7 +20702,7 @@ }, "node_modules/eslint/node_modules/semver": { "version": "7.3.7", - "devOptional": true, + "dev": true, "license": "ISC", "dependencies": { "lru-cache": "^6.0.0" @@ -24704,7 +20716,7 @@ }, "node_modules/eslint/node_modules/strip-json-comments": { "version": "3.1.1", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -24715,7 +20727,7 @@ }, "node_modules/eslint/node_modules/supports-color": { "version": "7.2.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "has-flag": "^4.0.0" @@ -24726,7 +20738,7 @@ }, "node_modules/eslint/node_modules/type-check": { "version": "0.4.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1" @@ -24737,7 +20749,7 @@ }, "node_modules/eslint/node_modules/type-fest": { "version": "0.20.2", - "devOptional": true, + "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" @@ -24755,7 +20767,7 @@ }, "node_modules/espree": { "version": "7.3.1", - "devOptional": true, + "dev": true, "license": "BSD-2-Clause", "dependencies": { "acorn": "^7.4.0", @@ -24768,7 +20780,7 @@ }, "node_modules/espree/node_modules/acorn": { "version": "7.4.1", - "devOptional": true, + "dev": true, "license": "MIT", "bin": { "acorn": "bin/acorn" @@ -24779,7 +20791,7 @@ }, "node_modules/espree/node_modules/eslint-visitor-keys": { "version": "1.3.0", - "devOptional": true, + "dev": true, "license": "Apache-2.0", "engines": { "node": ">=4" @@ -24798,7 +20810,7 @@ }, "node_modules/esquery": { "version": "1.4.0", - "devOptional": true, + "dev": true, "license": "BSD-3-Clause", "dependencies": { "estraverse": "^5.1.0" @@ -24809,7 +20821,7 @@ }, "node_modules/esquery/node_modules/estraverse": { "version": "5.3.0", - "devOptional": true, + "dev": true, "license": "BSD-2-Clause", "engines": { "node": ">=4.0" @@ -24885,14 +20897,6 @@ "safe-buffer": "^5.1.1" } }, - "node_modules/exec-async": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/exec-async/-/exec-async-2.2.0.tgz", - "integrity": "sha512-87OpwcEiMia/DeiKFzaQNBNFeN3XkkpYIh9FyOqq5mS2oKv3CBE67PXoEKcr6nodWdXNogTiQ0jE2NGuoffXPw==", - "dev": true, - "license": "MIT", - "peer": true - }, "node_modules/execa": { "version": "5.0.0", "license": "MIT", @@ -25077,314 +21081,6 @@ "node": ">=8" } }, - "node_modules/expo": { - "version": "49.0.23", - "resolved": "https://registry.npmjs.org/expo/-/expo-49.0.23.tgz", - "integrity": "sha512-mFdBpWisPXBuocRGywC14nDai5vSUmvEyQpwvKH/xUo+m5/TUvfqV6YIewFpW22zn5WFGFiuJPhzNrqhBBinIw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/runtime": "^7.20.0", - "@expo/cli": "0.10.17", - "@expo/config": "8.1.2", - "@expo/config-plugins": "7.2.5", - "@expo/vector-icons": "^13.0.0", - "babel-preset-expo": "~9.5.2", - "expo-application": "~5.3.0", - "expo-asset": "~8.10.1", - "expo-constants": "~14.4.2", - "expo-file-system": "~15.4.5", - "expo-font": "~11.4.0", - "expo-keep-awake": "~12.3.0", - "expo-modules-autolinking": "1.5.1", - "expo-modules-core": "1.5.13", - "fbemitter": "^3.0.0", - "invariant": "^2.2.4", - "md5-file": "^3.2.3", - "node-fetch": "^2.6.7", - "pretty-format": "^26.5.2", - "uuid": "^3.4.0" - }, - "bin": { - "expo": "bin/cli" - } - }, - "node_modules/expo-application": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/expo-application/-/expo-application-5.3.1.tgz", - "integrity": "sha512-HR2+K+Hm33vLw/TfbFaHrvUbRRNRco8R+3QaCKy7eJC2LFfT05kZ15ynGaKfB5DJ/oqPV3mxXVR/EfwmE++hoA==", - "dev": true, - "license": "MIT", - "peer": true, - "peerDependencies": { - "expo": "*" - } - }, - "node_modules/expo-asset": { - "version": "8.10.1", - "resolved": "https://registry.npmjs.org/expo-asset/-/expo-asset-8.10.1.tgz", - "integrity": "sha512-5VMTESxgY9GBsspO/esY25SKEa7RyascVkLe/OcL1WgblNFm7xCCEEUIW8VWS1nHJQGYxpMZPr3bEfjMpdWdyA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "blueimp-md5": "^2.10.0", - "expo-constants": "~14.4.2", - "expo-file-system": "~15.4.0", - "invariant": "^2.2.4", - "md5-file": "^3.2.3", - "path-browserify": "^1.0.0", - "url-parse": "^1.5.9" - } - }, - "node_modules/expo-constants": { - "version": "14.4.2", - "resolved": "https://registry.npmjs.org/expo-constants/-/expo-constants-14.4.2.tgz", - "integrity": "sha512-nOB122DOAjk+KrJT69lFQAoYVQGQjFHSigCPVBzVdko9S1xGsfiOH9+X5dygTsZTIlVLpQJDdmZ7ONiv3i+26w==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@expo/config": "~8.1.0", - "uuid": "^3.3.2" - }, - "peerDependencies": { - "expo": "*" - } - }, - "node_modules/expo-file-system": { - "version": "15.4.5", - "resolved": "https://registry.npmjs.org/expo-file-system/-/expo-file-system-15.4.5.tgz", - "integrity": "sha512-xy61KaTaDgXhT/dllwYDHm3ch026EyO8j4eC6wSVr/yE12MMMxAC09yGwy4f7kkOs6ztGVQF5j7ldRzNLN4l0Q==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "uuid": "^3.4.0" - }, - "peerDependencies": { - "expo": "*" - } - }, - "node_modules/expo-font": { - "version": "11.4.0", - "resolved": "https://registry.npmjs.org/expo-font/-/expo-font-11.4.0.tgz", - "integrity": "sha512-nkmezCFD7gR/I6R+e3/ry18uEfF8uYrr6h+PdBJu+3dawoLOpo+wFb/RG9bHUekU1/cPanR58LR7G5MEMKHR2w==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "fontfaceobserver": "^2.1.0" - }, - "peerDependencies": { - "expo": "*" - } - }, - "node_modules/expo-keep-awake": { - "version": "12.3.0", - "resolved": "https://registry.npmjs.org/expo-keep-awake/-/expo-keep-awake-12.3.0.tgz", - "integrity": "sha512-ujiJg1p9EdCOYS05jh5PtUrfiZnK0yyLy+UewzqrjUqIT8eAGMQbkfOn3C3fHE7AKd5AefSMzJnS3lYZcZYHDw==", - "dev": true, - "license": "MIT", - "peer": true, - "peerDependencies": { - "expo": "*" - } - }, - "node_modules/expo-modules-autolinking": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/expo-modules-autolinking/-/expo-modules-autolinking-1.5.1.tgz", - "integrity": "sha512-yt5a1VCp2BF9CrsO689PCD5oXKP14MMhnOanQMvDn4BDpURYfzAlDVGC5fZrNQKtwn/eq3bcrxIwZ7D9QjVVRg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@expo/config": "~8.1.0", - "chalk": "^4.1.0", - "commander": "^7.2.0", - "fast-glob": "^3.2.5", - "find-up": "^5.0.0", - "fs-extra": "^9.1.0" - }, - "bin": { - "expo-modules-autolinking": "bin/expo-modules-autolinking.js" - } - }, - "node_modules/expo-modules-autolinking/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/expo-modules-autolinking/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/expo-modules-autolinking/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/expo-modules-autolinking/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/expo-modules-autolinking/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/expo-modules-autolinking/node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/expo-modules-autolinking/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/expo-modules-autolinking/node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/expo-modules-autolinking/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/expo-modules-autolinking/node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/expo-modules-autolinking/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/expo-modules-core": { - "version": "1.5.13", - "resolved": "https://registry.npmjs.org/expo-modules-core/-/expo-modules-core-1.5.13.tgz", - "integrity": "sha512-cKRsiHKwpDPRkBgMW3XdUWmEUDzihEPWXAyeo629BXpJ6uX6a66Zbz63SEXhlgsbLq8FB77gvYku3ceBqb+hHg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "compare-versions": "^3.4.0", - "invariant": "^2.2.4" - } - }, "node_modules/expo-pwa": { "version": "0.0.127", "resolved": "https://registry.npmjs.org/expo-pwa/-/expo-pwa-0.0.127.tgz", @@ -25479,28 +21175,6 @@ "node": ">=8" } }, - "node_modules/expo/node_modules/node-fetch": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, "node_modules/express": { "version": "4.18.1", "license": "MIT", @@ -25743,7 +21417,7 @@ }, "node_modules/fast-levenshtein": { "version": "2.0.6", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/fast-memoize": { @@ -25787,62 +21461,6 @@ "bser": "2.1.1" } }, - "node_modules/fbemitter": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/fbemitter/-/fbemitter-3.0.0.tgz", - "integrity": "sha512-KWKaceCwKQU0+HPoop6gn4eOHk50bBv/VxjJtGMfwmJt3D29JpN4H4eisCtIPA+a8GVBam+ldMMpMjJUvpDyHw==", - "dev": true, - "license": "BSD-3-Clause", - "peer": true, - "dependencies": { - "fbjs": "^3.0.0" - } - }, - "node_modules/fbemitter/node_modules/fbjs": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-3.0.5.tgz", - "integrity": "sha512-ztsSx77JBtkuMrEypfhgc3cI0+0h+svqeie7xHbh1k/IKdcydnvadp/mUaGgjAOXQmQSxsqgaRhS3q9fy+1kxg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "cross-fetch": "^3.1.5", - "fbjs-css-vars": "^1.0.0", - "loose-envify": "^1.0.0", - "object-assign": "^4.1.0", - "promise": "^7.1.1", - "setimmediate": "^1.0.5", - "ua-parser-js": "^1.0.35" - } - }, - "node_modules/fbemitter/node_modules/ua-parser-js": { - "version": "1.0.39", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.39.tgz", - "integrity": "sha512-k24RCVWlEcjkdOxYmVJgeD/0a1TiSpqLg+ZalVGV9lsnr4yqu0w7tX/x2xX6G4zpkgQnRf89lxuZ1wsbjXM8lw==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/ua-parser-js" - }, - { - "type": "paypal", - "url": "https://paypal.me/faisalman" - }, - { - "type": "github", - "url": "https://github.com/sponsors/faisalman" - } - ], - "license": "MIT", - "peer": true, - "bin": { - "ua-parser-js": "script/cli.js" - }, - "engines": { - "node": "*" - } - }, "node_modules/fbjs": { "version": "0.8.18", "dev": true, @@ -25857,14 +21475,6 @@ "ua-parser-js": "^0.7.30" } }, - "node_modules/fbjs-css-vars": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz", - "integrity": "sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==", - "dev": true, - "license": "MIT", - "peer": true - }, "node_modules/fbjs/node_modules/core-js": { "version": "1.2.7", "dev": true, @@ -25888,7 +21498,7 @@ }, "node_modules/file-entry-cache": { "version": "6.0.1", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "flat-cache": "^3.0.4" @@ -26033,17 +21643,6 @@ "version": "2.0.0", "license": "MIT" }, - "node_modules/find-babel-config": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/find-babel-config/-/find-babel-config-2.1.2.tgz", - "integrity": "sha512-ZfZp1rQyp4gyuxqt1ZqjFGVeVBvmpURMqdIWXbPRfB97Bf6BzdK/xSIbylEINzQ0kB5tlDQfn9HkNXXWsqTqLg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "json5": "^2.2.3" - } - }, "node_modules/find-cache-dir": { "version": "2.1.0", "license": "MIT", @@ -26151,7 +21750,7 @@ }, "node_modules/flat-cache": { "version": "3.0.4", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "flatted": "^3.1.0", @@ -26165,7 +21764,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "devOptional": true, + "dev": true, "dependencies": { "glob": "^7.1.3" }, @@ -26178,7 +21777,7 @@ }, "node_modules/flatted": { "version": "3.2.6", - "devOptional": true, + "dev": true, "license": "ISC" }, "node_modules/fluent-ffmpeg": { @@ -26260,14 +21859,6 @@ } } }, - "node_modules/fontfaceobserver": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/fontfaceobserver/-/fontfaceobserver-2.3.0.tgz", - "integrity": "sha512-6FPvD/IVyT4ZlNe7Wcn5Fb/4ChigpucKYSvD6a+0iMoLn2inpo711eyIcKjmDtE5XNcgAkSH9uN/nfAeZzHEfg==", - "dev": true, - "license": "BSD-2-Clause", - "peer": true - }, "node_modules/for-each": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", @@ -26511,17 +22102,6 @@ "node": ">=0.10.0" } }, - "node_modules/freeport-async": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/freeport-async/-/freeport-async-2.0.0.tgz", - "integrity": "sha512-K7od3Uw45AJg00XUmy15+Hae2hOcgKcmN3/EF6Y7i01O0gaqiRx8sUSpsb9+BRNL8RPBrhzPsVfy8q9ADlJuWQ==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=8" - } - }, "node_modules/fresh": { "version": "0.5.2", "license": "MIT", @@ -26672,7 +22252,7 @@ }, "node_modules/functional-red-black-tree": { "version": "1.0.1", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/functions-have-names": { @@ -27006,34 +22586,6 @@ "version": "4.2.10", "license": "ISC" }, - "node_modules/graphql": { - "version": "15.8.0", - "resolved": "https://registry.npmjs.org/graphql/-/graphql-15.8.0.tgz", - "integrity": "sha512-5gghUc24tP9HRznNpV2+FIoq3xKkj5dTQqf4v0CpdPbFVwFkWoxOM+o+2OC9ZSvjEMTjfmG9QT+gcvggTwW1zw==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">= 10.x" - } - }, - "node_modules/graphql-tag": { - "version": "2.12.6", - "resolved": "https://registry.npmjs.org/graphql-tag/-/graphql-tag-2.12.6.tgz", - "integrity": "sha512-FdSNcu2QQcWnM2VNvSCCDCVS5PpPqpzgFT8+GXzqJuoDd0CBncxCY278u4mhRO7tMgo2JjgJA5aZ+nWSQ/Z+xg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "tslib": "^2.1.0" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "graphql": "^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" - } - }, "node_modules/handle-thing": { "version": "2.0.1", "dev": true, @@ -28578,45 +24130,6 @@ "version": "1.1.3", "license": "MIT" }, - "node_modules/is-invalid-path": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-invalid-path/-/is-invalid-path-0.1.0.tgz", - "integrity": "sha512-aZMG0T3F34mTg4eTdszcGXx54oiZ4NtHSft3hWNJMGJXUUqdIj3cOZuHcU0nCWWcY3jd7yRe/3AEm3vSNTpBGQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "is-glob": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-invalid-path/node_modules/is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha512-7Q+VbVafe6x2T+Tu6NcOf6sRklazEPmBoB3IWk3WdGZM2iGUwU/Oe3Wtq5lSEkDTTlpp8yx+5t4pzO/i9Ty1ww==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-invalid-path/node_modules/is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha512-a1dBeB19NXsf/E0+FHqkagizel/LQw2DjSQpvQrj3zT+jYPpaUCryPnrQajXKFLCMuf4I6FhRpaGtw4lPrG6Eg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "is-extglob": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/is-map": { "version": "2.0.2", "dev": true, @@ -28844,20 +24357,6 @@ "license": "MIT", "optional": true }, - "node_modules/is-valid-path": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-valid-path/-/is-valid-path-0.1.1.tgz", - "integrity": "sha512-+kwPrVDu9Ms03L90Qaml+79+6DZHqHyRoANI6IsZJ/g8frhnfchDOBCa0RbQ6/kdHt5CS5OeIEyrYznNuVN+8A==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "is-invalid-path": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/is-weakmap": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", @@ -32040,14 +27539,6 @@ "integrity": "sha512-dZ6Ra7u1G8c4Letq/B5EzAxj4tLFHL+cGtdpR+PVm4yzPDj+lCk+AbivWt1eOM+ikzkowtyV7qSqX6qr3t71Ww==", "dev": true }, - "node_modules/join-component": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/join-component/-/join-component-1.1.0.tgz", - "integrity": "sha512-bF7vcQxbODoGK1imE2P9GS9aw4zD0Sd+Hni68IMZLj7zRnquH7dXUmMw9hDI5S/Jzt7q+IyTXN0rSg2GI0IKhQ==", - "dev": true, - "license": "MIT", - "peer": true - }, "node_modules/jose": { "version": "2.0.5", "license": "MIT", @@ -32087,14 +27578,6 @@ "version": "0.1.1", "license": "MIT" }, - "node_modules/jsc-safe-url": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/jsc-safe-url/-/jsc-safe-url-0.2.4.tgz", - "integrity": "sha512-0wM3YBWtYePOjfyXQH5MWQ8H7sdk5EXSwZvmSLKk2RboVQ2Bu239jycHDz5J/8Blf3K0Qnoy2b6xD+z10MFB+Q==", - "dev": true, - "license": "0BSD", - "peer": true - }, "node_modules/jsdom": { "version": "16.7.0", "dev": true, @@ -32239,47 +27722,13 @@ "version": "0.4.0", "license": "(AFL-2.1 OR BSD-3-Clause)" }, - "node_modules/json-schema-deref-sync": { - "version": "0.13.0", - "resolved": "https://registry.npmjs.org/json-schema-deref-sync/-/json-schema-deref-sync-0.13.0.tgz", - "integrity": "sha512-YBOEogm5w9Op337yb6pAT6ZXDqlxAsQCanM3grid8lMWNxRJO/zWEJi3ZzqDL8boWfwhTFym5EFrNgWwpqcBRg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "clone": "^2.1.2", - "dag-map": "~1.0.0", - "is-valid-path": "^0.1.1", - "lodash": "^4.17.13", - "md5": "~2.2.0", - "memory-cache": "~0.2.0", - "traverse": "~0.6.6", - "valid-url": "~1.0.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/json-schema-deref-sync/node_modules/md5": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/md5/-/md5-2.2.1.tgz", - "integrity": "sha512-PlGG4z5mBANDGCKsYQe0CaUYHdZYZt8ZPZLmEt+Urf0W4GlpTX4HescwHU+dc9+Z/G/vZKYZYFrwgm9VxK6QOQ==", - "dev": true, - "license": "BSD-3-Clause", - "peer": true, - "dependencies": { - "charenc": "~0.0.1", - "crypt": "~0.0.1", - "is-buffer": "~1.1.1" - } - }, "node_modules/json-schema-traverse": { "version": "0.4.1", "license": "MIT" }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/json-stream": { @@ -32777,210 +28226,6 @@ "node": ">= 0.8.0" } }, - "node_modules/lightningcss": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.19.0.tgz", - "integrity": "sha512-yV5UR7og+Og7lQC+70DA7a8ta1uiOPnWPJfxa0wnxylev5qfo4P+4iMpzWAdYWOca4jdNQZii+bDL/l+4hUXIA==", - "dev": true, - "license": "MPL-2.0", - "peer": true, - "dependencies": { - "detect-libc": "^1.0.3" - }, - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - }, - "optionalDependencies": { - "lightningcss-darwin-arm64": "1.19.0", - "lightningcss-darwin-x64": "1.19.0", - "lightningcss-linux-arm-gnueabihf": "1.19.0", - "lightningcss-linux-arm64-gnu": "1.19.0", - "lightningcss-linux-arm64-musl": "1.19.0", - "lightningcss-linux-x64-gnu": "1.19.0", - "lightningcss-linux-x64-musl": "1.19.0", - "lightningcss-win32-x64-msvc": "1.19.0" - } - }, - "node_modules/lightningcss-darwin-arm64": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.19.0.tgz", - "integrity": "sha512-wIJmFtYX0rXHsXHSr4+sC5clwblEMji7HHQ4Ub1/CznVRxtCFha6JIt5JZaNf8vQrfdZnBxLLC6R8pC818jXqg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "darwin" - ], - "peer": true, - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-darwin-x64": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.19.0.tgz", - "integrity": "sha512-Lif1wD6P4poaw9c/4Uh2z+gmrWhw/HtXFoeZ3bEsv6Ia4tt8rOJBdkfVaUJ6VXmpKHALve+iTyP2+50xY1wKPw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "darwin" - ], - "peer": true, - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-linux-arm-gnueabihf": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.19.0.tgz", - "integrity": "sha512-P15VXY5682mTXaiDtbnLYQflc8BYb774j2R84FgDLJTN6Qp0ZjWEFyN1SPqyfTj2B2TFjRHRUvQSSZ7qN4Weig==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-linux-arm64-gnu": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.19.0.tgz", - "integrity": "sha512-zwXRjWqpev8wqO0sv0M1aM1PpjHz6RVIsBcxKszIG83Befuh4yNysjgHVplF9RTU7eozGe3Ts7r6we1+Qkqsww==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-linux-arm64-musl": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.19.0.tgz", - "integrity": "sha512-vSCKO7SDnZaFN9zEloKSZM5/kC5gbzUjoJQ43BvUpyTFUX7ACs/mDfl2Eq6fdz2+uWhUh7vf92c4EaaP4udEtA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-linux-x64-gnu": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.19.0.tgz", - "integrity": "sha512-0AFQKvVzXf9byrXUq9z0anMGLdZJS+XSDqidyijI5njIwj6MdbvX2UZK/c4FfNmeRa2N/8ngTffoIuOUit5eIQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-linux-x64-musl": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.19.0.tgz", - "integrity": "sha512-SJoM8CLPt6ECCgSuWe+g0qo8dqQYVcPiW2s19dxkmSI5+Uu1GIRzyKA0b7QqmEXolA+oSJhQqCmJpzjY4CuZAg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-win32-x64-msvc": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.19.0.tgz", - "integrity": "sha512-C+VuUTeSUOAaBZZOPT7Etn/agx/MatzJzGRkeV+zEABmPuntv1zihncsi+AyGmjkkzq3wVedEy7h0/4S84mUtg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "win32" - ], - "peer": true, - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, "node_modules/lilconfig": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", @@ -33115,7 +28360,7 @@ }, "node_modules/lodash.merge": { "version": "4.6.2", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/lodash.pullall": { @@ -33126,7 +28371,7 @@ }, "node_modules/lodash.truncate": { "version": "4.4.2", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/lodash.uniq": { @@ -33402,36 +28647,6 @@ "react-dom": "^17.0.0 || ^18.0.0" } }, - "node_modules/md5": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", - "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", - "dev": true, - "license": "BSD-3-Clause", - "peer": true, - "dependencies": { - "charenc": "0.0.2", - "crypt": "0.0.2", - "is-buffer": "~1.1.6" - } - }, - "node_modules/md5-file": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/md5-file/-/md5-file-3.2.3.tgz", - "integrity": "sha512-3Tkp1piAHaworfcCgH0jKbTvj1jWWFgbvh2cXaNCgHwyTCBxxvD1Y04rmfpvdPm1P4oXMOpm6+2H7sr7v9v8Fw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "buffer-alloc": "^1.1.0" - }, - "bin": { - "md5-file": "cli.js" - }, - "engines": { - "node": ">=0.10" - } - }, "node_modules/md5.js": { "version": "1.3.5", "license": "MIT", @@ -33441,14 +28656,6 @@ "safe-buffer": "^5.1.2" } }, - "node_modules/md5hex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/md5hex/-/md5hex-1.0.0.tgz", - "integrity": "sha512-c2YOUbp33+6thdCUi34xIyOU/a7bvGKj/3DB1iaPMTuPHf/Q2d5s4sn1FaCOO43XkXggnb08y5W2PU8UNYNLKQ==", - "dev": true, - "license": "MIT", - "peer": true - }, "node_modules/mdast-squeeze-paragraphs": { "version": "4.0.0", "dev": true, @@ -33591,14 +28798,6 @@ "map-or-similar": "^1.5.0" } }, - "node_modules/memory-cache": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/memory-cache/-/memory-cache-0.2.0.tgz", - "integrity": "sha512-OcjA+jzjOYzKmKS6IQVALHLVz+rNTMPoJvCztFaZxwG14wtAW7VRZjwTQu06vKCYOxh4jVnik7ya0SXTB0W+xA==", - "dev": true, - "license": "BSD-2-Clause", - "peer": true - }, "node_modules/memory-fs": { "version": "0.4.1", "license": "MIT", @@ -33750,72 +28949,6 @@ "node": ">= 0.6" } }, - "node_modules/metro-react-native-babel-preset": { - "version": "0.76.8", - "resolved": "https://registry.npmjs.org/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.76.8.tgz", - "integrity": "sha512-Ptza08GgqzxEdK8apYsjTx2S8WDUlS2ilBlu9DR1CUcHmg4g3kOkFylZroogVAUKtpYQNYwAvdsjmrSdDNtiAg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/core": "^7.20.0", - "@babel/plugin-proposal-async-generator-functions": "^7.0.0", - "@babel/plugin-proposal-class-properties": "^7.18.0", - "@babel/plugin-proposal-export-default-from": "^7.0.0", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.0", - "@babel/plugin-proposal-numeric-separator": "^7.0.0", - "@babel/plugin-proposal-object-rest-spread": "^7.20.0", - "@babel/plugin-proposal-optional-catch-binding": "^7.0.0", - "@babel/plugin-proposal-optional-chaining": "^7.20.0", - "@babel/plugin-syntax-dynamic-import": "^7.8.0", - "@babel/plugin-syntax-export-default-from": "^7.0.0", - "@babel/plugin-syntax-flow": "^7.18.0", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.0.0", - "@babel/plugin-syntax-optional-chaining": "^7.0.0", - "@babel/plugin-transform-arrow-functions": "^7.0.0", - "@babel/plugin-transform-async-to-generator": "^7.20.0", - "@babel/plugin-transform-block-scoping": "^7.0.0", - "@babel/plugin-transform-classes": "^7.0.0", - "@babel/plugin-transform-computed-properties": "^7.0.0", - "@babel/plugin-transform-destructuring": "^7.20.0", - "@babel/plugin-transform-flow-strip-types": "^7.20.0", - "@babel/plugin-transform-function-name": "^7.0.0", - "@babel/plugin-transform-literals": "^7.0.0", - "@babel/plugin-transform-modules-commonjs": "^7.0.0", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.0.0", - "@babel/plugin-transform-parameters": "^7.0.0", - "@babel/plugin-transform-react-display-name": "^7.0.0", - "@babel/plugin-transform-react-jsx": "^7.0.0", - "@babel/plugin-transform-react-jsx-self": "^7.0.0", - "@babel/plugin-transform-react-jsx-source": "^7.0.0", - "@babel/plugin-transform-runtime": "^7.0.0", - "@babel/plugin-transform-shorthand-properties": "^7.0.0", - "@babel/plugin-transform-spread": "^7.0.0", - "@babel/plugin-transform-sticky-regex": "^7.0.0", - "@babel/plugin-transform-typescript": "^7.5.0", - "@babel/plugin-transform-unicode-regex": "^7.0.0", - "@babel/template": "^7.0.0", - "babel-plugin-transform-flow-enums": "^0.0.2", - "react-refresh": "^0.4.0" - }, - "engines": { - "node": ">=16" - }, - "peerDependencies": { - "@babel/core": "*" - } - }, - "node_modules/metro-react-native-babel-preset/node_modules/react-refresh": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.4.3.tgz", - "integrity": "sha512-Hwln1VNuGl/6bVwnd0Xdn1e84gT/8T9aYNL+HAKDArLCS7LWjwr7StE30IEYbIkx0Vi3vs+coQxe+SQDbGbbpA==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/mhchemparser": { "version": "4.1.1", "license": "Apache-2.0" @@ -34410,6 +29543,7 @@ }, "node_modules/mini-create-react-context": { "version": "0.4.1", + "dev": true, "license": "MIT", "dependencies": { "@babel/runtime": "^7.12.1", @@ -34745,87 +29879,6 @@ "dev": true, "license": "MIT" }, - "node_modules/mv": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/mv/-/mv-2.1.1.tgz", - "integrity": "sha512-at/ZndSy3xEGJ8i0ygALh8ru9qy7gWW1cmkaqBN29JmMlIvM//MEO9y1sk/avxuwnPcfhkejkLsuPxH81BrkSg==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "mkdirp": "~0.5.1", - "ncp": "~2.0.0", - "rimraf": "~2.4.0" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/mv/node_modules/glob": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", - "integrity": "sha512-MKZeRNyYZAVVVG1oZeLaWie1uweH40m9AZwIwxyPbTSX4hHrVYSzLg0Ro5Z5R7XKkIX+Cc6oD1rqeDJnwsB8/A==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true, - "dependencies": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - } - }, - "node_modules/mv/node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/mv/node_modules/rimraf": { - "version": "2.4.5", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz", - "integrity": "sha512-J5xnxTyqaiw06JjMftq7L9ouA448dw/E7dKghkP9WpKNuwmARNNg+Gk8/u5ryb9N/Yo2+z3MCwuqFK/+qPOPfQ==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true, - "dependencies": { - "glob": "^6.0.1" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/mz": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", - "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "any-promise": "^1.0.0", - "object-assign": "^4.0.1", - "thenify-all": "^1.0.0" - } - }, "node_modules/nan": { "version": "2.22.0", "resolved": "https://registry.npmjs.org/nan/-/nan-2.22.0.tgz", @@ -34872,20 +29925,8 @@ }, "node_modules/natural-compare": { "version": "1.4.0", - "devOptional": true, - "license": "MIT" - }, - "node_modules/ncp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz", - "integrity": "sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA==", "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "bin": { - "ncp": "bin/ncp" - } + "license": "MIT" }, "node_modules/nearley": { "version": "2.20.1", @@ -35132,45 +30173,6 @@ "node": ">=4" } }, - "node_modules/npm-package-arg": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-7.0.0.tgz", - "integrity": "sha512-xXxr8y5U0kl8dVkz2oK7yZjPBvqM2fwaO5l3Yg13p03v8+E3qQcD0JNhHzjL1vyGgxcKkD0cco+NLR72iuPk3g==", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "hosted-git-info": "^3.0.2", - "osenv": "^0.1.5", - "semver": "^5.6.0", - "validate-npm-package-name": "^3.0.0" - } - }, - "node_modules/npm-package-arg/node_modules/hosted-git-info": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.8.tgz", - "integrity": "sha512-aXpmwoOhRBrw6X3j0h5RloK4x1OzsxMPyxqIHyNfSe2pypkVTZFpEiRoSipPEPlMrh0HW/XsjkJ5WgnCirpNUw==", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/npm-package-arg/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, - "license": "ISC", - "peer": true, - "bin": { - "semver": "bin/semver" - } - }, "node_modules/npm-run-path": { "version": "4.0.1", "license": "MIT", @@ -35201,14 +30203,6 @@ "url": "https://github.com/fb55/nth-check?sponsor=1" } }, - "node_modules/nullthrows": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/nullthrows/-/nullthrows-1.1.1.tgz", - "integrity": "sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==", - "dev": true, - "license": "MIT", - "peer": true - }, "node_modules/num2fraction": { "version": "1.2.2", "dev": true, @@ -35569,50 +30563,6 @@ "node": ">= 0.8.0" } }, - "node_modules/ora": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/ora/-/ora-3.4.0.tgz", - "integrity": "sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "chalk": "^2.4.2", - "cli-cursor": "^2.1.0", - "cli-spinners": "^2.0.0", - "log-symbols": "^2.2.0", - "strip-ansi": "^5.2.0", - "wcwidth": "^1.0.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/ora/node_modules/ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/ora/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/os-browserify": { "version": "0.3.0", "license": "MIT" @@ -35632,19 +30582,6 @@ "node": ">=0.10.0" } }, - "node_modules/osenv": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", - "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", - "deprecated": "This package is no longer supported.", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, "node_modules/p-all": { "version": "2.1.0", "dev": true, @@ -35800,14 +30737,6 @@ "node": ">=6" } }, - "node_modules/package-json-from-dist": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", - "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", - "dev": true, - "license": "BlueOak-1.0.0", - "peer": true - }, "node_modules/pako": { "version": "1.0.11", "license": "(MIT AND Zlib)" @@ -35994,18 +30923,6 @@ "node": ">=0.10.0" } }, - "node_modules/password-prompt": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/password-prompt/-/password-prompt-1.1.3.tgz", - "integrity": "sha512-HkrjG2aJlvF0t2BMH0e2LB/EHf3Lcq3fNMzy4GYHcQblAvOl+QQji1Lx7WRBMqpVK8p+KR7bCg7oqAMXtdgqyw==", - "dev": true, - "license": "0BSD", - "peer": true, - "dependencies": { - "ansi-escapes": "^4.3.2", - "cross-spawn": "^7.0.3" - } - }, "node_modules/path-browserify": { "version": "1.0.1", "license": "MIT" @@ -36233,112 +31150,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/pkg-up": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", - "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "find-up": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-up/node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "locate-path": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-up/node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-up/node_modules/p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "p-limit": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-up/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/plist": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/plist/-/plist-3.1.0.tgz", - "integrity": "sha512-uysumyrvkUX0rX/dEVqt8gC3sTBzd4zoWfLeS29nb53imdaXVvLINYXTI2GNqzaMuvacNx4uJQ8+b3zXR0pkgQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@xmldom/xmldom": "^0.8.8", - "base64-js": "^1.5.1", - "xmlbuilder": "^15.1.1" - }, - "engines": { - "node": ">=10.4.0" - } - }, - "node_modules/plist/node_modules/@xmldom/xmldom": { - "version": "0.8.10", - "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.10.tgz", - "integrity": "sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/plist/node_modules/xmlbuilder": { - "version": "15.1.1", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-15.1.1.tgz", - "integrity": "sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=8.0" - } - }, "node_modules/pngjs": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.4.0.tgz", @@ -36974,20 +31785,6 @@ "url": "https://github.com/prettier/prettier?sponsor=1" } }, - "node_modules/pretty-bytes": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", - "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/pretty-error": { "version": "4.0.0", "license": "MIT", @@ -37073,7 +31870,7 @@ }, "node_modules/progress": { "version": "2.0.3", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=0.4.0" @@ -37245,16 +32042,6 @@ "node": ">=6" } }, - "node_modules/qrcode-terminal": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/qrcode-terminal/-/qrcode-terminal-0.11.0.tgz", - "integrity": "sha512-Uu7ii+FQy4Qf82G4xu7ShHhjhGahEpCWc3x8UavY3CTcWV+ufmmCtwkr7ZKsX42jdL0kr1B5FKUeqJvAn51jzQ==", - "dev": true, - "peer": true, - "bin": { - "qrcode-terminal": "bin/qrcode-terminal.js" - } - }, "node_modules/qs": { "version": "6.5.3", "license": "BSD-3-Clause", @@ -37974,6 +32761,7 @@ }, "node_modules/react-router-dom": { "version": "5.3.3", + "dev": true, "license": "MIT", "dependencies": { "@babel/runtime": "^7.12.13", @@ -37990,6 +32778,7 @@ }, "node_modules/react-router-dom/node_modules/history": { "version": "4.10.1", + "dev": true, "license": "MIT", "dependencies": { "@babel/runtime": "^7.1.2", @@ -38002,10 +32791,12 @@ }, "node_modules/react-router-dom/node_modules/isarray": { "version": "0.0.1", + "dev": true, "license": "MIT" }, "node_modules/react-router-dom/node_modules/path-to-regexp": { "version": "1.8.0", + "dev": true, "license": "MIT", "dependencies": { "isarray": "0.0.1" @@ -38013,6 +32804,7 @@ }, "node_modules/react-router-dom/node_modules/react-router": { "version": "5.3.3", + "dev": true, "license": "MIT", "dependencies": { "@babel/runtime": "^7.12.13", @@ -38376,7 +33168,7 @@ }, "node_modules/regexpp": { "version": "3.2.0", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -38808,14 +33600,6 @@ "devOptional": true, "license": "ISC" }, - "node_modules/remove-trailing-slash": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/remove-trailing-slash/-/remove-trailing-slash-0.1.1.tgz", - "integrity": "sha512-o4S4Qh6L2jpnCy83ysZDau+VORNvnFw07CKSAymkd6ICNVEPisMyzlc00KlvvicsxKck94SEwhDnMNdICzO+tA==", - "dev": true, - "license": "MIT", - "peer": true - }, "node_modules/renderkid": { "version": "3.0.0", "license": "MIT", @@ -38916,7 +33700,7 @@ }, "node_modules/require-from-string": { "version": "2.0.2", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -38927,52 +33711,10 @@ "dev": true, "license": "ISC" }, - "node_modules/requireg": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/requireg/-/requireg-0.2.2.tgz", - "integrity": "sha512-nYzyjnFcPNGR3lx9lwPPPnuQxv6JWEZd2Ci0u9opN7N5zUEPIhY/GbL3vMGOr2UXwEg9WwSyV9X9Y/kLFgPsOg==", - "dev": true, - "peer": true, - "dependencies": { - "nested-error-stacks": "~2.0.1", - "rc": "~1.2.7", - "resolve": "~1.7.1" - }, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/requireg/node_modules/nested-error-stacks": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/nested-error-stacks/-/nested-error-stacks-2.0.1.tgz", - "integrity": "sha512-SrQrok4CATudVzBS7coSz26QRSmlK9TzzoFbeKfcPBUFPjcQM9Rqvr/DlJkOrwI/0KcgvMub1n1g5Jt9EgRn4A==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/requireg/node_modules/resolve": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.7.1.tgz", - "integrity": "sha512-c7rwLofp8g1U+h1KNyHL/jicrKg1Ek4q+Lr33AL65uZTinUZHe30D5HlyN5V9NW0JX1D5dXQ4jqW5l7Sy/kGfw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "path-parse": "^1.0.5" - } - }, "node_modules/requires-port": { "version": "1.0.0", "license": "MIT" }, - "node_modules/reselect": { - "version": "4.1.8", - "resolved": "https://registry.npmjs.org/reselect/-/reselect-4.1.8.tgz", - "integrity": "sha512-ab9EmR80F/zQTMNeneUr4cv+jSwPJgIlvEmVwLerwrWVbpLlBuls9XHzIeTFy4cegU2NHBp3va0LKOzU5qFEYQ==", - "dev": true, - "license": "MIT", - "peer": true - }, "node_modules/resolve": { "version": "1.22.8", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", @@ -39021,6 +33763,7 @@ }, "node_modules/resolve-pathname": { "version": "3.0.0", + "dev": true, "license": "MIT" }, "node_modules/resolve-url": { @@ -39045,46 +33788,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "onetime": "^2.0.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/restore-cursor/node_modules/mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/restore-cursor/node_modules/onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "mimic-fn": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/ret": { "version": "0.1.15", "license": "MIT", @@ -39317,15 +34020,6 @@ ], "license": "MIT" }, - "node_modules/safe-json-stringify": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz", - "integrity": "sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, "node_modules/safe-regex": { "version": "1.1.0", "license": "MIT", @@ -39355,14 +34049,6 @@ "version": "2.1.2", "license": "MIT" }, - "node_modules/sax": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz", - "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==", - "dev": true, - "license": "ISC", - "peer": true - }, "node_modules/saxes": { "version": "5.0.1", "dev": true, @@ -39475,37 +34161,6 @@ "version": "2.1.3", "license": "MIT" }, - "node_modules/serialize-error": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-6.0.0.tgz", - "integrity": "sha512-3vmBkMZLQO+BR4RPHcyRGdE09XCF6cvxzk2N2qn8Er3F91cy8Qt7VvEbZBOpaL53qsBbe2cFOefU6tRY6WDelA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "type-fest": "^0.12.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/serialize-error/node_modules/type-fest": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.12.0.tgz", - "integrity": "sha512-53RyidyjvkGpnWPMF9bQgFtWp+Sl8O2Rp13VavmJgfAP9WWG6q6TkrKU8iyJdnwnfgHI6k2hTlgqH4aSdjoTbg==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "peer": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/serialize-javascript": { "version": "4.0.0", "license": "BSD-3-Clause", @@ -39773,33 +34428,6 @@ "version": "3.0.7", "license": "ISC" }, - "node_modules/simple-plist": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/simple-plist/-/simple-plist-1.3.1.tgz", - "integrity": "sha512-iMSw5i0XseMnrhtIzRb7XpQEXepa9xhWxGUojHBL43SIpQuDQkh3Wpy67ZbDzZVr6EKxvwVChnVpdl8hEVLDiw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "bplist-creator": "0.1.0", - "bplist-parser": "0.3.1", - "plist": "^3.0.5" - } - }, - "node_modules/simple-plist/node_modules/bplist-parser": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.3.1.tgz", - "integrity": "sha512-PyJxiNtA5T2PlLIeBot4lbp7rj4OadzjnMZD/G5zuBNt8ei/yCU7+wW0h2bag9vr8c+/WuRWmSxbqAl9hL1rBA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "big-integer": "1.6.x" - }, - "engines": { - "node": ">= 5.10.0" - } - }, "node_modules/sirv": { "version": "1.0.19", "license": "MIT", @@ -39846,7 +34474,7 @@ }, "node_modules/slice-ansi": { "version": "4.0.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", @@ -39862,7 +34490,7 @@ }, "node_modules/slice-ansi/node_modules/ansi-styles": { "version": "4.3.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "color-convert": "^2.0.1" @@ -39876,7 +34504,7 @@ }, "node_modules/slice-ansi/node_modules/color-convert": { "version": "2.0.1", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "color-name": "~1.1.4" @@ -39887,19 +34515,8 @@ }, "node_modules/slice-ansi/node_modules/color-name": { "version": "1.1.4", - "devOptional": true, - "license": "MIT" - }, - "node_modules/slugify": { - "version": "1.6.6", - "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.6.6.tgz", - "integrity": "sha512-h+z7HKHYXj6wJU+AnS/+IH8Uh9fdcX1Lrhg1/VMdf9PwoBQXFcXiAdsy2tSK0P6gKwJLXp02r90ahUCqHk9rrw==", "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=8.0.0" - } + "license": "MIT" }, "node_modules/snapdragon": { "version": "0.8.2", @@ -40235,20 +34852,6 @@ "node": "^12.20.0 || >=14" } }, - "node_modules/split": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", - "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "through": "2" - }, - "engines": { - "node": "*" - } - }, "node_modules/split-string": { "version": "3.1.0", "license": "MIT", @@ -40717,14 +35320,6 @@ "url": "https://github.com/sponsors/Borewit" } }, - "node_modules/structured-headers": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/structured-headers/-/structured-headers-0.4.1.tgz", - "integrity": "sha512-0MP/Cxx5SzeeZ10p/bZI0S6MpgD+yxAhi1BOQ34jgnMXsCq3j1t6tQnZu+KdlL7dvJTLT3g9xN8tl10TqgFMcg==", - "dev": true, - "license": "MIT", - "peer": true - }, "node_modules/style-loader": { "version": "2.0.0", "license": "MIT", @@ -40780,175 +35375,6 @@ "postcss": "^8.2.15" } }, - "node_modules/sucrase": { - "version": "3.35.0", - "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", - "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.2", - "commander": "^4.0.0", - "glob": "^10.3.10", - "lines-and-columns": "^1.1.6", - "mz": "^2.7.0", - "pirates": "^4.0.1", - "ts-interface-checker": "^0.1.9" - }, - "bin": { - "sucrase": "bin/sucrase", - "sucrase-node": "bin/sucrase-node" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/sucrase/node_modules/@jridgewell/gen-mapping": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", - "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/sucrase/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/sucrase/node_modules/commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/sucrase/node_modules/foreground-child": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", - "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "cross-spawn": "^7.0.0", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/sucrase/node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/sucrase/node_modules/jackspeak": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", - "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", - "dev": true, - "license": "BlueOak-1.0.0", - "peer": true, - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" - } - }, - "node_modules/sucrase/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/sucrase/node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "dev": true, - "license": "ISC", - "peer": true, - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/sucrase/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, - "license": "ISC", - "peer": true, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/sudo-prompt": { - "version": "8.2.5", - "resolved": "https://registry.npmjs.org/sudo-prompt/-/sudo-prompt-8.2.5.tgz", - "integrity": "sha512-rlBo3HU/1zAJUrkY6jNxDOC9eVYliG6nS4JA8u8KAshITd07tafMc/Br7xQwCSseXwJ2iCcHCE8SNWX3q8Z+kw==", - "dev": true, - "license": "MIT", - "peer": true - }, "node_modules/supports-color": { "version": "5.5.0", "license": "MIT", @@ -41095,7 +35521,7 @@ }, "node_modules/table": { "version": "6.8.0", - "devOptional": true, + "dev": true, "license": "BSD-3-Clause", "dependencies": { "ajv": "^8.0.1", @@ -41110,7 +35536,7 @@ }, "node_modules/table/node_modules/ajv": { "version": "8.11.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", @@ -41125,7 +35551,7 @@ }, "node_modules/table/node_modules/json-schema-traverse": { "version": "1.0.0", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/tapable": { @@ -41356,33 +35782,8 @@ }, "node_modules/text-table": { "version": "0.2.0", - "devOptional": true, - "license": "MIT" - }, - "node_modules/thenify": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", - "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "any-promise": "^1.0.0" - } - }, - "node_modules/thenify-all": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", - "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "thenify": ">= 3.1.0 < 4" - }, - "engines": { - "node": ">=0.8" - } + "license": "MIT" }, "node_modules/throat": { "version": "6.0.1", @@ -41450,7 +35851,8 @@ "node_modules/tiny-invariant": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.1.tgz", - "integrity": "sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw==" + "integrity": "sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw==", + "dev": true }, "node_modules/tiny-warning": { "version": "1.0.3", @@ -41610,25 +36012,6 @@ "dev": true, "license": "MIT" }, - "node_modules/traverse": { - "version": "0.6.10", - "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.10.tgz", - "integrity": "sha512-hN4uFRxbK+PX56DxYiGHsTn2dME3TVr9vbNqlQGcGcPhJAn+tdP126iA+TArMpI4YSgnTkMWyoLl5bf81Hi5TA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "gopd": "^1.0.1", - "typedarray.prototype.slice": "^1.0.3", - "which-typed-array": "^1.1.15" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/trim": { "version": "0.0.1", "dev": true @@ -41693,14 +36076,6 @@ "node": ">=6.10" } }, - "node_modules/ts-interface-checker": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", - "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", - "dev": true, - "license": "Apache-2.0", - "peer": true - }, "node_modules/ts-jest": { "version": "27.1.5", "dev": true, @@ -42254,30 +36629,9 @@ "is-typedarray": "^1.0.0" } }, - "node_modules/typedarray.prototype.slice": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/typedarray.prototype.slice/-/typedarray.prototype.slice-1.0.3.tgz", - "integrity": "sha512-8WbVAQAUlENo1q3c3zZYuy5k9VzBQvp8AX9WOtbvyWlLM1v5JaSRmjubLjzHF4JFtptjH/5c/i95yaElvcjC0A==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.0", - "es-errors": "^1.3.0", - "typed-array-buffer": "^1.0.2", - "typed-array-byte-offset": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/typescript": { "version": "4.7.4", + "dev": true, "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", @@ -42963,7 +37317,7 @@ }, "node_modules/v8-compile-cache": { "version": "2.3.0", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/v8-to-istanbul": { @@ -42979,13 +37333,6 @@ "node": ">=10.12.0" } }, - "node_modules/valid-url": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/valid-url/-/valid-url-1.0.9.tgz", - "integrity": "sha512-QQDsV8OnSf5Uc30CKSwG9lnhMPe6exHtTXLRYX8uMwKENy640pU+2BgBL0LRbDh/eYRahNCS7aewCx0wf3NYVA==", - "dev": true, - "peer": true - }, "node_modules/validate-npm-package-license": { "version": "3.0.4", "dev": true, @@ -42995,19 +37342,9 @@ "spdx-expression-parse": "^3.0.0" } }, - "node_modules/validate-npm-package-name": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", - "integrity": "sha512-M6w37eVCMMouJ9V/sdPGnC5H4uDr73/+xdq0FBLO3TFFX1+7wiUY6Es328NN+y43tmY+doUdN9g9J21vqB7iLw==", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "builtins": "^1.0.3" - } - }, "node_modules/value-equal": { "version": "1.0.1", + "dev": true, "license": "MIT" }, "node_modules/vary": { @@ -43878,17 +38215,6 @@ "minimalistic-assert": "^1.0.0" } }, - "node_modules/wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "defaults": "^1.0.3" - } - }, "node_modules/web-namespaces": { "version": "1.1.4", "dev": true, @@ -45089,17 +39415,9 @@ "dev": true, "license": "MIT" }, - "node_modules/wonka": { - "version": "4.0.15", - "resolved": "https://registry.npmjs.org/wonka/-/wonka-4.0.15.tgz", - "integrity": "sha512-U0IUQHKXXn6PFo9nqsHphVCE5m3IntqZNB9Jjn7EB1lrR7YTDY3YWgFvEvwniTzXSvOH/XMzAZaIfJF/LvHYXg==", - "dev": true, - "license": "MIT", - "peer": true - }, "node_modules/word-wrap": { "version": "1.2.3", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -45237,19 +39555,6 @@ "version": "1.0.2", "license": "ISC" }, - "node_modules/write-file-atomic": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", - "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" - } - }, "node_modules/ws": { "version": "7.5.9", "license": "MIT", @@ -45280,74 +39585,11 @@ "default-browser-id": "^1.0.4" } }, - "node_modules/xcode": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/xcode/-/xcode-3.0.1.tgz", - "integrity": "sha512-kCz5k7J7XbJtjABOvkc5lJmkiDh8VhjVCGNiqdKCscmVpdVUpEAyXv1xmCLkQJ5dsHqx3IPO4XW+NTDhU/fatA==", - "dev": true, - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "simple-plist": "^1.1.0", - "uuid": "^7.0.3" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/xcode/node_modules/uuid": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-7.0.3.tgz", - "integrity": "sha512-DPSke0pXhTZgoF/d+WSt2QaKMCFSfx7QegxEWT+JOuHF5aWrKEn0G+ztjuJg/gG8/ItK+rbPCD/yNv8yyih6Cg==", - "dev": true, - "license": "MIT", - "peer": true, - "bin": { - "uuid": "dist/bin/uuid" - } - }, "node_modules/xml-name-validator": { "version": "3.0.0", "dev": true, "license": "Apache-2.0" }, - "node_modules/xml2js": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.6.0.tgz", - "integrity": "sha512-eLTh0kA8uHceqesPqSE+VvO1CDDJWMwlQfB6LuN6T8w6MaDJ8Txm8P7s5cHD0miF0V+GGTZrDQfxPZQVsur33w==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "sax": ">=0.6.0", - "xmlbuilder": "~11.0.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/xml2js/node_modules/xmlbuilder": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", - "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/xmlbuilder": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-14.0.0.tgz", - "integrity": "sha512-ts+B2rSe4fIckR6iquDjsKbQFK2NlUk6iG5nf14mDEyldgoc2nEKZ3jZWMPTxGQwVgToSjt6VGIho1H8/fNFTg==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=8.0" - } - }, "node_modules/xmlchars": { "version": "2.2.0", "dev": true,